2009年5月30日土曜日

bashで正規表現

参考ページ

#!/bin/bash
V_OPTION=$1

if expr "$V_OPTION" : [0-9] > /dev/null
then
echo "数字です"
else
echo "数字ではないです"
fi


$ sh reg_bash.sh 1

数字です

$ sh reg_bash.sh a

数字ではないです

bashはすごいなぁ…

2009年5月29日金曜日

ターミナルからメールを送る

送信側のメールアドレス: wakaranai@pcnomaede.ocn.ne.jp
送信メールサーバ(SMTP): vcpcnomaede.ocn.ne.jp
受信側のメールアドレス: To_google_mail@gmail.com


$ telnet vcpcnomaede.ocn.ne.jp 25
Trying <数字.X4>...
Connected to vcpcnomaede.ocn.ne.jp.
Escape character is '^]'.
220 vcpcnomaede.ocn.ne.jp ESMTP Postfix

$ HELO vcpcnomaede.ocn.ne.jp
250 vcpcnomaede.ocn.ne.jp

$ MAIL FROM: wakaranai@pcnomaede.ocn.ne.jp
250 Ok

$ RCPT TO: To_google_mail@gmail.com
250 Ok
DATA
354 End data with .
From: wakaranai@pcnomaede.ocn.ne.jp
Subject: test
Hello World.
.
250 <数字> Ok: queued as <16進数?>


…こんな面倒くさい作業を簡単にしてくれてありがとうメーラー!!

2009年5月23日土曜日

chmodによるパーミッションの変更

参考サイト
・読み込み権限はlsコマンドなどファイル名を表示する権限
・書き込み権限はcp・mv・rmコマンドなどファイルを操作する権限
・実行権限はcdコマンドなどディレクトリへの移動を許可する権限

各パーミッションは数字で表現される
読み込み→4
書き込み→2
実行  →1

ex)
読み込み&書き込み&実行の権限をディレクトリに許可
$ sudo chmod 7 -R ディレクトリ名
読み込み&書き込み&実行の権限をファイルに許可
$ sudo chmod 7 ファイル名

読み込み&書き込みの権限を許可
$ sudo chmod 6 ファイル名

書き込みの権限を許可
$ sudo chmod 2 ファイル名

読み込み&書き込み&実行の権限を不許可
$ sudo chmod 0 ファイル名

2009年5月22日金曜日

Bespinを使ってみた

今のところまだ十分に把握出来ていないが、基本的に右クリックは無意味っぽい。あとダブルクリックでプロジェクトやファイルを開いたりするっぽい。所々何とも言えない妙な動きをする。

ページ最下部にあるターミナルとキーボードショートカットで操作するらしい。
コマンドヘルプを見る
help(使い方の勉強はこれを使うべき)

プロジェクトの作成コマンド
createproject 作成したいプロジェクト名

ファイルの作成コマンド
newfile ファイル名 ファイルを入れたいプロジェクト名
○ newfile test.html myfirstproject
× newfile test.html test.js myfirstproject

ファイルを作成すると最初に2文字空白が入っているのは何なんだろう?何か意味があるのだろうか?

デフォルトではオートインデントは入らないらしい。
ターミナルで
$ set autoindent on
と打ち込めばオートインデントになる。

コピー・カットアンドペースト
Windowsのショートカットと同じです。
[Ctrl]+[X] カット
[Ctrl]+[C] コピー
[Ctrl]+[V] ペースト
ただし、他のページにあるサンプルコードを貼り付けて実行ということはできないらしい。(現時点で方法を発見できていないだけかもしれないが)

2009年5月21日木曜日

「jetpack」を試してみる

IT戦記さん
本家のサイト

IT戦記さんのサイトを参考にすれば問題なし。(いつもお世話になってます)

準備
・本家サイト「Get Started! Install the Jetpack Prototype & API」からJetPackアドオンをインストールする。

Jetpackをインストールするには
・HTMLファイル
・JavaScriptファイル
の2つが必要

インストール用HTMLファイルのサンプル(install.html)

<!DOCTYPE html>
<html>
<head>
<link rel="jetpack" href="test.js"/>
<title>Install Jetpack Addon</title>
</head>
<body>
<h1>Install Jetpack!!!</h1>
</body>
</html>


インストールするJavascriptファイルのサンプル(test.js)

jetpack.statusBar.append({
html: "Boom!!!!!"
});


適当なフォルダを作成し、上記の2つのファイルを配置。

Firefoxで
file:///ファイルを配置したディレクトリまでのパス/install.html
にアクセス

インストール作業が始まる。

簡単に終わる。(30秒もかからないぐらい)


インストールできた。

アドオンのアンインストール方法
 about:jetpackとURLを入力しアクセス
 
 Install Featuresをクリック
 
 アンインストールしたいアドオンのuninstallをクリック

 完了

2009年5月17日日曜日

ubuntu シェルスクリプトの配列について

シェルスクリプトでは配列は

array = (A B C)

と表現する

しかし、syntax error near unexpected token `(' というエラーが出る。

参考ページ

このページによると文字コードに問題がある場合があるらしい。

シェルスクリプトの保存時にEUC-JPを指定。

問題は解決した。

ただし、今度は日本語が文字化けを起こすようになった。

#! /bin/bash
a=(A あ )
echo ${a[0]}
echo ${a[1]}

$ sh splt.sh
A
��
また、解決策を探さなければなぁ

追記:ターミナルの文字コードをEUC-JPに変更すれば文字化けしなくなる。

HelloWorldをインストール

このページを参考にHelloWorldをインストールしてみる。

インストールしたのはこんなコード

#include <iostream>

using namespace std;

int main(){
cout << "HelloWorld!!!" << endl;

return 0;
}


HelloWorld.ccでファイルを保存。

$ g++ -o HelloWorld HelloWorld.cc
コンパイル。

HelloWorldという実行ファイルを作成。

$ gedit ~/.bash_profile
開いたファイルの最後に
export $HELLO_HOME=/usr/local/etc
export PATH=$PATH:$HELLO_HOME
を追加
****************************************************
 一般に言う「パスを通す」と言う表現はPATHという環境変数に新たな環境変数を追加する作業を指すと考えられる。コロンによって変数は区切られているらしい。
PATH=$PATH:$HELLO_HOME
とは環境変数PATHに$HELL_HOME(つまりは/usr/local/etc)を追加しているということらしい。
****************************************************

$ source ~/.bash_profile
を実行

$ sudo cp ./cppdir/HelloWorld /usr/local/etc/
//確認
$ ls /usr/local/etc
HelloWorld

//実行
$ HelloWorld
HelloWorld!!!

2009年5月16日土曜日

スパムブログ判定される

記念と後学のためにスパムブログとは何かを調べた。

参考サイト

スパムブログとは自動的に大量生産することで検索にひっかかりやすくすることを目的としている。検索ランキング上位に表示されればアフィリエイトとかでガッポガッポと言う考え方らしい。

かなりの数のスパムブログが世界には存在しているらしい。

隠しテキストなどを使うことで検索にひっかかりやすくしている物もあるらしい。

多分これが一番の問題だろうが抜本的な対策が今のところ存在していない。

           ・
           ・
           ・
 まぁ、大量生産されていそうなぐらい適当なブログだけど、スパムってのはなぁ…
大体アフィリエイトしてないんだけど。なんらかの商品をすすめてもいないんだけど。

 今回、少し調べてみて気づいたけど割と頻繁にスパムブログらしき物にお目にかかっているということだ。しかも、検索結果をいたずらに冗長的なものにしている。
 検索結果を冗長的にしていると言う意味ではこのブログがスパムブログと誤認されたのもうなずける。内容は個人的な備忘録だし、書いてある内容は私以外の誰にとっても価値のないものだろう。
 誤認されることは釈然としないが住みやすいネット社会には必要不可欠な活動の副作用だと考えるべきかもしれない。

2009年5月14日木曜日

GAE for Javaをターミナルで開発

Eclipseを使ってみたが何となくもっさりしていて使いづらい。やはり、テキストエディタ+ターミナルがいい。

$ cd /appengine-java-sdk-1.2.0/

$ ./bin/dev_appserver.sh demos/guestbook/war

ブラウザでhttp://localhost:8080/にアクセス

google app engine for javaとjsp

プロジェクト内のwarフォルダ直下にguestbook.jspを配置。

プロジェクトを実行。

http://localhost:8080/guestbook.jspにアクセス

ログインしたら?と聞いてくる画面が出れば成功。

*****************************************************
web.xmlのwelcome-fileタグの中をguestbook.jspに変更すれば
http://localost:8080/でアクセスしても自動的にリダイレクトされる。

サンプル↓
<servlet>
<servlet-name>guestbook1</servlet-name>
<servlet-class>guestbook.Guestbook1Servlet</servlet-class>
</servlet>
<servlet>
<servlet-name>guestbook2</servlet-name>
<servlet-class>guestbook.Guestbook2Servlet</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>guestbook1</servlet-name>
<url-pattern>/guestbook1</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>guestbook2</servlet-name>
<url-pattern>/guestbook2</url-pattern>
</servlet-mapping>

<welcome-file-list>
<welcome-file>guestbook.jsp</welcome-file>
</welcome-file-list>

Google app engine for JavaとEclipseの初期設定

Google app engine for JavaをEclipseで作り始めた。

[ウィンドウ]→[設定]→[Java]→[インストール済みのJRE]と進む。

[検索]ボタンをクリック。

検索フォルダに/usr/libを指定。

検索結果のjava-6-openjdkにチェック。

OKボタンをクリック。

これで初期設定は完了。

※java-6-openjdkを指定したが現段階では問題は出ていないが、java-6-sun-1.6.0.13を使用すればもっとも確実なのかもしれない。

2009年5月12日火曜日

GWT(google web toolkit)1.6.4 linux版

antのインストール
1.Apache Antダウンロードページからapache-ant-1.7.1-bin.tar.gzをダウンロード

2./usr/local/srcにantをインストールする
   /usr/local/srcにダウンロードしたファイルを移動
    $sudo cp パス/apache-ant-1.7.1-bin.tar.gz /usr/local/src
    $sudo tar zvxf apache-ant...
 $mv apache-ant... ant
   環境変数の追加
    $echo 'export ANT_HOME=/usr/local/ant' >> ~/.bash_profile
    $echo 'export PATH=$PATH:$ANT_HOME/bin' >> ~/.bash_profile
    $source ~/.bash_profile
   最終確認

    $ant -version
バージョンが正しく出れば成功

GWTのインストール
1.GWTダウンロードページからGWTをダウンロード

2.GWTを適当なフォルダに解凍

3.$ cd 適当なフォルダ/gwt-linux-1.6.4/samples/Mail

4.$ant hosted
ここで場合によってはエラーが出る場合
$ sudo apt-get install libstdc++5

2009年5月11日月曜日

ubuntu9.04でpython2.5を使う(トラブル)

今のところのトラブル
 ・[アプリケーション]→[追加と削除]が起動しなくなる。
 ・何らかのインストールをする度にエラーが出て精神的にまいる。ただし、これといった不具合はない。

ubuntu9.04でpython2.5を使う

GoogleAppEngineではpython2.5が必要要件としてあげられている。このためubuntu9.04にデフォルトでインストールされているpython2.6では(頭のいい人は何らかの手段で出来るかもしれないが)テストサーバを使用できない。

このサイトを参考にpython2.5に戻してみた。

$ sudo update-alternatives --config python

pythonのalternativesがありませんと出力されるので

$ sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.5 10
$ sudo update-alternatives --install /usr/bin/pytyon python /usr/bin/python2.6 20
と実行。

再び
$ sudo update-alternatives --config python
と実行。

うまくいけば
`python' を提供する 2 個の alternatives があります。

選択肢 alternative
-----------------------------------------------
* 1 /usr/bin/python2.5
+ 2 /usr/bin/python2.6

デフォルト[*] のままにするには Enter、さもなければ選択肢の番号のキーを押してください:
と出るらしいのだが、私は

python を提供するプログラムが 1 つしかありません (/usr/bin/python2.6)。
設定は行いません。
と出力される。

めげることなく
$ sudo apt-get install python2.5
と実行

インストール途中にエラーが出たが
$python -V
と実行すると
Python 2.5.4
と表示される。

GoogleAppEngineも正常に動作している。

一応今のところトラブルはない。

2009年5月10日日曜日

Eclipse3.4の日本語化

EclipseダウンロードページからEclipse Classic 3.4.2をダウンロードする

ダウンロードしたファイルを適当な場所に展開

日本語化パックダウンロードページからNLpackja-eclipse-SDK-3.4.1-blancofw.zipをダウンロード

ダウンロードした圧縮ファイルを解凍

eclipseファルダが作成されるので中にあるplugin・featureフォルダを先ほどダウロード作成したフォルダにコピー、マージする。

確認のためEclipseを起動

2009年5月9日土曜日

Eclipseの日本語化

eclipseのインストール
 $sudo apt-get install eclipse

このページからNLpack1-eclipse-SDK-3.2-gtk.zipをダウンロード

ダウンロードしたファイルを解凍

カレントディレクトリはそのまま

下記のコマンドを実行
 $ sudo cp -R eclipse/plugins/* /usr/lib/eclipse/plugins/
 $ sudo cp -R eclipse/features/* /usr/lib/eclipse/features/

確認のためEclipseを起動

HTMLのrelative

<style type="text/css">
#test_div{
width: 100px;
height: 100px;
border: solid #000000 2px;
}
#test_div2{
width: 100px;
height: 100px;
border: solid #eaefaa 2px;
position: relative;
left: 100px;
top: -2px;
}
</style>
<div id="test_div">
<div id="test_div2">

</div>
</div>

2009年5月7日木曜日

GTKポートって何?

最近、WebKitの勉強していると時々GTK+portという記述を見るがなんとなく読み流していたが調べてみることにした。

IT用語辞典によれば。

本来のプラットフォーム以外で動作するように改造されたものを ○○○向けポートというらしい。また、改造する作業をporting(ポーティング)というらしい。

WebKitGtk-GNOME Live!の序文
原文:WebKit/GTK+ is the new GTK+ port of the WebKit.
訳:WebKit/GTK+はWebKitの新しいGTK+ポートです。

っていうことはGTK+ポートって言うのはWebKitをGTK+上で動作するように改造したものってこと?

自分で書いていて訳が分からなくなってきた。読解力がねぇ…

2009年5月5日火曜日

コマンドインタプリタを作ってみた。

Google V8についているshellを参考に作成。


using namespace std;

int RunMain(int argc, char* argv[]){
static const int bufsize = 256;
while(true){
char buffer[bufsize];
//↓インタプリタ感を出すやつ
printf(">");
char* str = fgets(buffer, bufsize, stdin);
//終了させるにはquitと打つ
if(strcmp(str, "quit")){
exit(0);
}
printf("%s",buffer);
}
return 0;
}

int main(int argc,char* argv[]){
int result = RunMain(argc, argv);

return 0;
}

C/C++をほとんど触ったことがなかったから、よく分からないがおそらく、pythonのインタプリタもこんな感じで動いているんだろう。

2009年5月4日月曜日

よくこれだけ忘れられると思った。

int main(int argc, char* argv){

return 0;
}
これがC/C++の基本だけど。
int argc, char* argvってなんだっけ?ってさっき思った。


#include
int main(int argc, char* argv[]){

std::cout << argv[0] << std::endl;
std::cout << argc << std::endl;
return 0;
}
実行
$./test ABC
出力結果
$./test
2

忘れてたけど0個目の引数は実行ファイル名になるんだね。

…記憶力がまずいことになってる気がしてきた。

2009年5月3日日曜日

WebkitでWebブラウザを作ってみた

GTKLauncherのコードを参考に作成。

コード:

#include <gtk/gtk.h>
#include <webkit/webkit.h>
#include <iostream>


static WebKitWebView* web_view;

static GtkWidget* create_browser()
{
GtkWidget* scrolled_window = gtk_scrolled_window_new(NULL, NULL);
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled_window), GTK_POLICY_AUTOMATIC,
GTK_POLICY_AUTOMATIC);
web_view = WEBKIT_WEB_VIEW(webkit_web_view_new());
gtk_container_add(GTK_CONTAINER(scrolled_window), GTK_WIDGET(web_view));

return scrolled_window;
}

static void destroy_cb(GtkWidget* widget, gpointer data)
{
gtk_main_quit();
}
static GtkWidget* create_window()
{
GtkWidget* window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_default_size (GTK_WINDOW (window), 800, 600);
gtk_widget_set_name (window, "GtkLauncher");
g_signal_connect (G_OBJECT (window), "destroy", G_CALLBACK (destroy_cb), NULL);

return window;
}



int main(int argc, char* argv[]){
//テスト出力
std::cout<< "START PROCESS" << std::endl;
//↓スタート
gtk_init(&argc, &argv);

GtkWidget* vbox = gtk_vbox_new(FALSE, 0);
gtk_box_pack_start(GTK_BOX(vbox), create_browser(), TRUE, TRUE, 0);

GtkWidget* _main_window;
_main_window = create_window();
gtk_container_add(GTK_CONTAINER(_main_window),vbox);

webkit_web_view_open(web_view, "http://www.google.com/");

//↓おまじない**********************
gtk_widget_grab_focus(GTK_WIDGET(web_view));
gtk_widget_show_all(_main_window);
gtk_main();
//**********************************
return 0;
}

コンパイルする:

$ g++ -o brow brow.cc `pkg-config --cflags --libs gtk+-2.0` `pkg-config --cflags --libs webkit-1.0`

なんせこんなことしたの今回が初めてだからよく分からないが
error while loading shared libraries: libwebkit-1.0.so.1: cannot open shared object file: No such file or directory
こんなエラーが出た。

調べてみるとライブラリが認識されていないために起きるエラーらしい。そこで
$lfconfig
$sudo ldconfig
を実行

再コンパイルしてみるとエラーは出なくなった。
出来たのはこんな感じ↓


…Javascriptも動くブラウザをこうも簡単に作れるのはすごい。感動した。

2009年5月1日金曜日

GTK+のコンパイル

前やったときはこんなに面倒くさいオプションいらなかった気がするんだけど。
g++ -o hello_world hello_world.cpp `pkg-config --cflags --libs gtk+-2.0`

追記:
  ubuntu 9.04(netbook remix)では同じ方法ではコンパイルが通らなかった。pkg-config自体は既にインストールされていたため
$ pkg-config --list-all
でめぼしいものを探したところ「gtk+」という項目を発見。ということで
  $ g++ -o sample_gtk.cc -o sample_gtk `pkg-config --cflags --libs gtk+`
と実行してみるとコンパイルに成功した。ubuntu8.10からの変更? pkg-configの仕様が変わった?
 後、これの前に
  $ sudo apt-get install libgtkmm*-devlibgtk2.0-dev
を実行。
さらに追記:
  コンパイルが通らなかったのはlibgtk2.0-devをインストールしてなかったからでした。

pkg-configはコンパイルオプションを自動生成してくれるスグレモノ。

バッククォートで囲んでいるのはシェルではバッククォートで囲んだ部分の実行結果を変数として格納できるから。
つまりこのコマンドを実行すると
pkg-config --cflags --libs gtk+-2.0
のコマンドの実行結果

-D_REENTRANT -I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/directfb -I/usr/include/libpng12 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lpangoft2-1.0 -lgdk_pixbuf-2.0 -lm -lpangocairo-1.0 -lgio-2.0 -lcairo -lpango-1.0 -lfreetype -lfontconfig -lgobject-2.0 -lgmodule-2.0 -lglib-2.0

を「g++ -o hello_world hello_world.cpp」の後に付加してコンパイルを実行しているということ。

・・・これ書くぐらいなら楽なもんだなぁ。

VirtualBoxで印刷する

ubuntuを使い始めて半年が過ぎたが素晴らしい使い心地でWindowsに戻る気も起きることなく今日まで唯一不満でならなかったのがプリンタがまったく使えなかったことだ。

そのうち対応するだろうと軽く考えていたがそうもなりそうにないので自分で何とかするしかないようだ。

結論から言うと使うことが出来た。

環境:
OS(ホスト) ubuntu8.10
OS(ゲスト) Windows vista
RAM  1.36GB
USB-HDD  60GB
プリンタ lexmark x2550

※lexmark x2550について少し説明しておく。このプリンタのドライバは付属のCD-ROMに入っており、インターネットからもダウンロードは可能。ただしインストール時はプリンタのUSBをPCが認識している状態でないとドライバのインストールもすることは出来ない。

そこでVirtualBoxを使う。

ubuntuのリポジトリにVirtualBoxのオープンソースエディションがあるがこれを使うとUSBを使えない。困ったことだ。

1.Ubuntu8.10("Intrepid Ibex")のi386をダウンロード。公式サイトのダウンロードページ

2.GDebi Packageインストーラでダウンロードしたdebファイルをインストール

3.sudo VirtualBox
と端末で入力

4.アプリケーションが起動

5.新規というボタンをクリック。

6.ウィザードに沿っていけばインストール準備完了

7.設定ダイアログでCDのマウントを有効にする

8.CD/DVDドライブにWindowsVistaのDVD-ROMを挿入

9.起動というボタンをクリック

10.インストール作業が始まる。(私の場合インストールには1時間程度かかった)

今日はここまで。