hello worldのビルドまで簡単にいけると思ったら尋常じゃないくらいハマったので記録する。
参考ページ1
参考ページ2
自分の場合は参考ページ1が解決に役立ったが人によっては参考ページ2が役に立つ可能性がある。
必要なパッケージの準備
$ sudo apt-get install openjdk-6-jdk ant
SDKをダウンロード
解凍
環境変数の設定(PATH, JAVA_HOME, CLASSPATH)
$ emacs ~/.bashrc
export JAVA_HOME=/usr/lib/jvm/java-1.6.0-openjdk
export CLASSPATH=${JAVA_HOME}/lib/tools.jar:${JAVA_HOME}/lib/dt.jar
export PATH=${PATH}:JAVA_HOME/bin:~/Downloads/android-sdk-linux_x86/tools
$ source ~/.bashrc
$ android create project --path ./test-app --target 7 --name testapp --activity TestAppActivity --package android.app.testapp
$ ant debug
この後も色々...
2010年10月14日木曜日
2010年9月11日土曜日
2010年9月9日木曜日
gtkmmで動的にウィジェットを追加する
参考:
gtkmm-2.4のソースコードのなかにあるexamples/stock
gtkmm_helloのソースコード(時間短縮のために流用)
gtkmm-2.4のソースコードのなかにあるexamples/stock
gtkmm_helloのソースコード(時間短縮のために流用)
#ifndef GTKMM_HELLO_H #define GTKMM_HELLO_H #include <iostream> #include <gtkmm.h> class GtkmmHello : public Gtk::Window { public: GtkmmHello(); virtual ~GtkmmHello(); void on_button_clicked(Gtk::VBox* vb); }; #endif //GTKMM_HELLO_H GtkmmHello::GtkmmHello() { set_title("gtkmm_hello"); set_border_width(10); //manageを使わないとsegmentation faultになる Gtk::Button* m_Button = manage(new Gtk::Button("click")); Gtk::VBox* vb = manage(new Gtk::VBox(false, 0)); m_Button->signal_clicked().connect(sigc::bind( sigc::mem_fun(*this, &GtkmmHello::on_button_clicked), vb)); vb->pack_start(*m_Button, false, false, 0); add(*vb); show_all(); } GtkmmHello::~GtkmmHello() { } void GtkmmHello::on_button_clicked(Gtk::VBox* vb) { Gtk::Button* b = new Gtk::Button("new button"); b->show(); vb->pack_start(*b, false, false, 0); std::cout << "test" << std::endl; } int main (int argc, char *argv[]) { Gtk::Main kit(argc, argv); GtkmmHello window; Gtk::Main::run(window); return 0; }
これが |
こうなる |
2010年9月6日月曜日
C++でURLをデコードする
#include <iostream> #include <cstdlib> int main(){ char* enc = "40";//%40は@になる char* end; unsigned long ascii = 0; ascii = std::strtoul(enc, &end, 16); char dec = (char)ascii; std::cout << dec << std::endl; return 0; }
2010年9月1日水曜日
HTC desire を買った
キャンセルが出てたまたま余った一台を発見し、勢いで買ってしまった。
今年中は忙しくて、androidプログラミングなんてしてる時間ないんだから別に今買う必要は無かった気がしないでもない。
今年中は忙しくて、androidプログラミングなんてしてる時間ないんだから別に今買う必要は無かった気がしないでもない。
2010年8月24日火曜日
ubuntuでgoogle mockを使う。
参考ページ
パッケージとかの準備
* Automake version 1.9 or newer
* Autoconf version 2.59 or newer
* Libtool / Libtoolize
* Python version 2.3 or newer (for running some of the tests and
re-generating certain source files from templates)
$ sudo apt-get install automake autoconf libtool python
$ automake --versionでバージョン情報を表示。1.9より古かったら
$ sudo apt-get install automake1.9
$ AUTOMAKE=automake-1.9
$ ACLOCAL=aclocal-1.9
準備が終わったら
$ autoreconf -fvi
表示された中にerrorがなければ
$ emacs ~/.bashrc
ファイルの最後に
export GMOCK_DIR=~/GcodeProjects/gmock
export GTEST_DIR=${GMOCK_DIR}/gtest
のように環境変数を追加
$source ~/.bashrcで変更を反映
$ g++ -I${GTEST_DIR}/include -I${GTEST_DIR} -I${GMOCK_DIR}/include \
-I${GMOCK_DIR} -c ${GTEST_DIR}/src/gtest-all.cc
$ g++ -I${GTEST_DIR}/include -I${GTEST_DIR} -I${GMOCK_DIR}/include \
-I${GMOCK_DIR} -c ${GMOCK_DIR}/src/gmock-all.cc
$ ar -rv libgmock.a gtest-all.o gmock-all.o
出来たlibgmock.aをテストを行うディレクトリに移動。
(ビルドが成功したかを試すために参考ページにあるソースコードを使用した。)
$ g++ -I${GTEST_DIR}/include -I${GMOCK_DIR}/include \
your_test.cc libgmock.a -o your_test -lpthread
テストの実行
$ ./your_test
パッケージとかの準備
* Automake version 1.9 or newer
* Autoconf version 2.59 or newer
* Libtool / Libtoolize
* Python version 2.3 or newer (for running some of the tests and
re-generating certain source files from templates)
$ sudo apt-get install automake autoconf libtool python
$ automake --versionでバージョン情報を表示。1.9より古かったら
$ sudo apt-get install automake1.9
$ AUTOMAKE=automake-1.9
$ ACLOCAL=aclocal-1.9
準備が終わったら
$ autoreconf -fvi
表示された中にerrorがなければ
$ emacs ~/.bashrc
ファイルの最後に
export GMOCK_DIR=~/GcodeProjects/gmock
export GTEST_DIR=${GMOCK_DIR}/gtest
のように環境変数を追加
$source ~/.bashrcで変更を反映
$ g++ -I${GTEST_DIR}/include -I${GTEST_DIR} -I${GMOCK_DIR}/include \
-I${GMOCK_DIR} -c ${GTEST_DIR}/src/gtest-all.cc
$ g++ -I${GTEST_DIR}/include -I${GTEST_DIR} -I${GMOCK_DIR}/include \
-I${GMOCK_DIR} -c ${GMOCK_DIR}/src/gmock-all.cc
$ ar -rv libgmock.a gtest-all.o gmock-all.o
出来たlibgmock.aをテストを行うディレクトリに移動。
(ビルドが成功したかを試すために参考ページにあるソースコードを使用した。)
$ g++ -I${GTEST_DIR}/include -I${GMOCK_DIR}/include \
your_test.cc libgmock.a -o your_test -lpthread
テストの実行
$ ./your_test
2010年8月9日月曜日
Google C++ Testing Frameworkで述べられているプライベートメンバー関数のテストについて
参考ページ
原文:
If you change your software's internal implementation, your tests should not break as long as the change is not observable by users. Therefore, per the black-box testing principle, most of the time you should test your code through its public interfaces.
If you still find yourself needing to test internal implementation code, consider if there's a better design that wouldn't require you to do so.....
訳:
あなたがソフトウェアの内部の実装を変更したいとして、ユーザに分からないような変更に時間をかけるべきではない。あなたは、他のクラスとのインターフェースとなる関数のテストに時間をかけるべきだ。
もし、まだ内部の実装をテストしたいなら、その必要が無いようなデザインをもっと考えたほうがいい。
個人的な意見:
そうは言っても、Composedパターンなどで多数のプライベート関数が生まれることは避けられないのだから、プライベート関数をテストすることは、必要なのではないの?
原文:
If you change your software's internal implementation, your tests should not break as long as the change is not observable by users. Therefore, per the black-box testing principle, most of the time you should test your code through its public interfaces.
If you still find yourself needing to test internal implementation code, consider if there's a better design that wouldn't require you to do so.....
訳:
あなたがソフトウェアの内部の実装を変更したいとして、ユーザに分からないような変更に時間をかけるべきではない。あなたは、他のクラスとのインターフェースとなる関数のテストに時間をかけるべきだ。
もし、まだ内部の実装をテストしたいなら、その必要が無いようなデザインをもっと考えたほうがいい。
個人的な意見:
そうは言っても、Composedパターンなどで多数のプライベート関数が生まれることは避けられないのだから、プライベート関数をテストすることは、必要なのではないの?
2010年8月6日金曜日
C++のクラスを書いていて分かったこと。
gcc = C言語のコンパイルに主に使う。
g++ = C++のコンパイルに主に使う。
こんな感じのファイルをコンパイルしようとすると、gccではエラーが出た。
g++では何事もなくコンパイルに成功した。
gccでもクラスをコンパイルできるが、アクセッサ、ミューテータを実装しようとしたところでエラーが出るようになった。
g++ = C++のコンパイルに主に使う。
#includeusing namespace std; class ClassSpike { public: void set_int(int i); int get_int(); private: int I; }; void ClassSpike::set_int(int i){ I = i; } int ClassSpike::get_int(){ return I; } int main(){ ClassSpike cs; cs.set_int(1); int j = cs.get_int(); cout << j << "です。\n"; return 0; }
こんな感じのファイルをコンパイルしようとすると、gccではエラーが出た。
g++では何事もなくコンパイルに成功した。
gccでもクラスをコンパイルできるが、アクセッサ、ミューテータを実装しようとしたところでエラーが出るようになった。
2010年5月24日月曜日
ubuntuでWEBサイトをまるごとローカルに保存する方法
$wget --mirror --html-extension --convert-links 保存したいサイトのURL -P 保存したい場所のパス
2010年5月9日日曜日
gtags, htagsについて
ソースコードを読む時、クラスや関数の定義がどこにあるか分からない場合、gtags, htagsを使うと効率が上がる。
インストール:$ sudo apt-get install global
ソースコードのあるフォルダに移動。
$ gtagsを実行
ソースコードに関する情報がまとめられたフォルダが作成される。
$ htags -aを実行
HTMLというフォルダが作成される。
HTMLフォルダに移動し、中にあるindex.htmlなどをWEBブラウザで見る。
インストール:$ sudo apt-get install global
ソースコードのあるフォルダに移動。
$ gtagsを実行
ソースコードに関する情報がまとめられたフォルダが作成される。
$ htags -aを実行
HTMLというフォルダが作成される。
HTMLフォルダに移動し、中にあるindex.htmlなどをWEBブラウザで見る。
2010年5月7日金曜日
ubuntu 10.04でpython2.5をインストールする
参考ページ
$sudo apt-get install update
$sudo apt-get install python2.5
警告がインストールの前に出るので、もしかしたらあんまり安全ではないかも。
$ sudo gedit /etc/apt/sources.list
開いたファイルの最後にdeb http://ppa.launchpad.net/fkrull/deadsnakes/ubuntu lucid mainと追加し保存。
deb-src http://ppa.launchpad.net/fkrull/deadsnakes/ubuntu lucid main
$sudo apt-get install update
$sudo apt-get install python2.5
警告がインストールの前に出るので、もしかしたらあんまり安全ではないかも。
2010年3月19日金曜日
Javaのインターフェースについて現時点での考え。
UMLによるJavaオブジェクト設計第2版を参考。
インターフェースが無い場合、オブジェクトのプロパティ・メソッドを呼び出す場合、そのオブジェクトが何のクラスから作られたかが重要になる。
これに対して、インターフェースを用いると、同じような時、インターフェースを実装しているかどうかが重要となる。
インターフェースが無い場合、オブジェクトのプロパティ・メソッドを呼び出す場合、そのオブジェクトが何のクラスから作られたかが重要になる。
class Hello { public static void main(String[] args){ World w1; World2 w2; w1 = new World(); w1.greeding(); w2 = new World2(); w2.greeding(); //Hello World. //World2. } } class World { public void greeding(){ System.out.println("Hello World."); } } class World2 { public void greeding() { System.out.println("World2."); } }
これに対して、インターフェースを用いると、同じような時、インターフェースを実装しているかどうかが重要となる。
class Hello { public static void main(String[] args){ IHello hello; hello = new World(); hello.greeding(); hello = new World2(); hello.greeding(); //Hello World. //World2. } } class World implements IHello { public void greeding(){ System.out.println("Hello World."); } } class World2 implements IHello { public void greeding() { System.out.println("World2."); } }
2010年3月1日月曜日
Google Go LanuguageでShellコマンドを実行する。
参考ページ1(Google Code Search)
参考ページ2
test_exec.go
将来的にC#みたいに言語仕様がどんどん変わってJavaとかに近づいて行くのか?今のスタンスを維持して独自路線を突き進むのか?
個人的にはGoogleには後者であって欲しい。
参考ページ2
test_exec.go
//コピーアンドペーストの産物 package main import ( "fmt" "exec" "io/ioutil" ) func main() { //序盤の2つ以外はおまじない? cmd, err := exec.Run("/bin/ls", []string{"ls", "/"}, nil, "", exec.Pipe, exec.Pipe, exec.DevNull) //例外処理? if err != nil { fmt.Printf("ERROR EXECUTING COMMAND: %d\n", err) os.Exit(1) } //cmd構造体の中にStdin, Stdoutはあったからexec.Runを実行すると //なんか色々起こって、これが可能になるんだと思う。 cmd.Stdin.Close(); buff, err := ioutil.ReadAll(cmd.Stdout) if err != nil { fmt.Printf("ERROR READING OUTPUT: %d\n", err) os.Exit(1) } else { //改行するとエラーが出る fmt.Printf("COMMAND RESULT: %s\n", buff) } }そんなに沢山の言語を使ったことないからわからないけど、凄いクセのある書き方をする言語だと感じた。if文の書き方まで厳密に決まってるし。
将来的にC#みたいに言語仕様がどんどん変わってJavaとかに近づいて行くのか?今のスタンスを維持して独自路線を突き進むのか?
個人的にはGoogleには後者であって欲しい。
2010年2月27日土曜日
Google Go Languageをgeditでハイライトさせる。
参考ページ
参考ページのgo-jp.langっていうリンクをクリック。
ダウンロードしたファイルを
$sudo mv Downloads/go-jp.lang /usr/share/gtksourceview-2.0/language-specs
などで移動する。
geditを起動する。
[表示] -> [強調表示モード] -> [ソース]とたどり、中に「go」があることを確認。
本当にハイライトできるか確認したい場合は、goのところのラジオボタンをクリックして、funcなどの予約語を入力してたしかめる。
参考ページのgo-jp.langっていうリンクをクリック。
ダウンロードしたファイルを
$sudo mv Downloads/go-jp.lang /usr/share/gtksourceview-2.0/language-specs
などで移動する。
geditを起動する。
[表示] -> [強調表示モード] -> [ソース]とたどり、中に「go」があることを確認。
本当にハイライトできるか確認したい場合は、goのところのラジオボタンをクリックして、funcなどの予約語を入力してたしかめる。
Google Goをスクリプトでインストールする。
本家サイト(Google Go Language)
参考ページ
install_go.sh
っていうかgccの開発者がそのうちgccにgoのコンパイラ統合するって話だから、こんなことしなくてもよかったのかもしれない。
追記:
アップデートしたい場合は
参考ページ
$source install_go.sh
で管理者権限を与えずにインストールを開始する。install_go.sh
#!/bin/bash #make working directory mkdir -p ~/gcode/go #set environment variable GOROOT=$HOME/gcode/go GOBIN=$GOROOT/local/bin echo "export GOROOT=$GOROOT" >> ~/.bashrc echo "export GOOS=linux" >> ~/.bashrc echo "export GOARCH=386" >> ~/.bashrc echo "export GOBIN=$GOBIN" >> ~/.bashrc echo "export PATH=$PATH:$GOBIN" >> ~/.bashrc source ~/.bashrc #prepare to build and install Google go sudo apt-get install python-setuptools python-dev build-essential mercurial bison gcc libc6-dev ed gawk make #Download Google Go Sourcecode hg clone -r release https://go.googlecode.com/hg/ $GOROOT #build and install go mkdir -p $GOBIN cd $GOROOT/src ./all.bash >> install_log.txt #make "HelloWorld" echo "package main" >> $GOROOT/hello.go echo 'import "fmt"' >> $GOROOT/hello.go echo "" >> $GOROOT/hello.go echo "func main(){" >> $GOROOT/hello.go echo ' fmt.Printf("Hello 世界\n")' >> $GOROOT/hello.go echo "}" >> $GOROOT/hello.go #Compile and Execute HelloWorld -> It's not works in bash #8g $GOROOT/hello.go #8l -o $GOROOT/hello $GOROOT/hello.8 #$GOROOT/hello
最初の作業ディレクトリのところと8行目の環境変数GOROOTの定義、環境変数GOBINの定義はお好みでやるとしてそれ以外はほっといてもインストールできる(はず、自分はできた)。#!/bin/bash #make working directory mkdir -p ~/gcode/go #set environment variable echo "export GOROOT=$HOME/gcode/go" >> ~/.bashrc echo "export GOOS=linux" >> ~/.bashrc echo "export GOARCH=386" >> ~/.bashrc echo "export GOBIN=$GOROOT/local/bin" >> ~/.bashrc echo "export PATH=$PATH:$GOBIN" >> ~/.bashrc source ~/.bashrc #prepare to build and install Google go sudo apt-get install python-setuptools python-dev build-essential mercurial bison gcc libc6-dev ed gawk make #Download Google Go Sourcecode hg clone -r release https://go.googlecode.com/hg/ $GOROOT #build and install go mkdir -p $GOBIN cd $GOROOT/src ./all.bash >> install_log.txt #make "HelloWorld" echo "package main" >> $GOROOT/hello.go echo 'import "fmt"' >> $GOROOT/hello.go echo "" >> $GOROOT/hello.go echo "func main(){" >> $GOROOT/hello.go echo ' fmt.Printf("Hello 世界\n")' >> $GOROOT/hello.go echo "}" >> $GOROOT/hello.go #Compile and Execute HelloWorld -> It's not works in bash #8g $GOROOT/hello.go #8l -o $GOROOT/hello $GOROOT/hello.8 #$GOROOT/hello
っていうかgccの開発者がそのうちgccにgoのコンパイラ統合するって話だから、こんなことしなくてもよかったのかもしれない。
追記:
アップデートしたい場合は
cd $GOROOT/src hg pull hg update release ./all.bashとする。結構な頻度でソースコードは変更されてるみたい。
2010年2月26日金曜日
Ubuntu9.10 Server EditionをUSBにインストールする。
参考ページ
途中のパーティションのところでUSBを選択するのが面倒くさいので、HDDを最初に抜いておく。
後は、手順どおりに進めばインストールされる。
起動後、◆に文字が化ける場合。
起動後、インターネットに接続できない場合
途中のパーティションのところでUSBを選択するのが面倒くさいので、HDDを最初に抜いておく。
後は、手順どおりに進めばインストールされる。
起動後、◆に文字が化ける場合。
$ nano .bashrc
最後の行に
export LANG=C
と追加。
$exit
で再度ログイン。
起動後、インターネットに接続できない場合
とりあえず、
$ifconfig
表示された中にeth0,1,2...が無く、loだけだったら
$ sudo lshw -C network
logicalのところに表示されているやつ。ex) eth0とかeth1とか。を確認
$cat /etc/network/interfaces
で表示されるやつ
ex) auto lo iface lo inet loopback auto eth0 iface eth0 inet dhcpの中の「eth0,1,2...」がさっき確認したlogicalのところに表示されているやつと同じか確認。
違っていた場合、
$ sudo nano /etc/network/interfaces
でlogicalのところに表示してあるやつにeth0,1,2...を修正。
$sudo reboot
か
$sudo /etc/init.d/networking restart
自分はこれで何とかなった。
2010年2月25日木曜日
bashで複数のコマンドを一度に出す方法
誰かのブログ読んでて偶然不思議なコマンドの書き方を見つけて、実行してみて発見。
$ mkdir foo/;cd foo/
コマンドの間にセミコロンを入れることで可能になる。
2010年1月23日土曜日
ChromeOS ZEROをUSBメモリにインストールする。
本家サイトのトップページ
参考ページ
本家サイトのUSB Imageの1,2,3のどれかからファイルをダウンロード。
そのファイルを解凍。
インストールはubuntuであれば
$ sudo apt-get install usb-imagewriter
$ imagewriter
でGUIで簡単に作成できる。
コマンドでは
$ sudo dd if=ChromeOS-Zero.img of=/dev/sdb bs=4M
でできるらしい。してないからわからないけど。
使ってみての感想
参考ページ
本家サイトのUSB Imageの1,2,3のどれかからファイルをダウンロード。
そのファイルを解凍。
インストールはubuntuであれば
$ sudo apt-get install usb-imagewriter
$ imagewriter
でGUIで簡単に作成できる。
コマンドでは
$ sudo dd if=ChromeOS-Zero.img of=/dev/sdb bs=4M
でできるらしい。してないからわからないけど。
使ってみての感想
- Inspiron mini9では有線LANは認識したが無線LANは認識しなかった
- 起動は20秒くらい
- オフラインでのログインはユーザー名:facepunch, password: facepunch
- Ctrl + Alt + Tでターミナルを起動できる
- ターミナルの使用感はubuntuにかなり近い。コマンドやディレクトリ構造などなど
- CRUDもターミナルからなら可能。ただしviの使い方分からないと厳しい。
- シャットダウンは $ shutdown -h nowでできる
- 日本語化は窓の杜を参考にすると簡単にできる
- 場所は忘れたが、chromeos-installというファイルを不用意に実行するとsdaにchrome os zeroがインストールされてえらいことになる。
- flash playerは入っているが、youtubeはなぜか見れなかった。
2010年1月22日金曜日
ubuntuでwmapの動画を見る
参考ページ
流れは
大体こんな感じで動くようになるかな?
流れは
- mplayerのインストール
- サイトからall-20061022.tar.bz2をダウンロード
- 解凍
- 出来たフォルダをcodecsにリネーム
- それを/usr/libに移動
- sudo ln -s /usr/lib/codecs /usr/lib/win32 とコマンド打ってリンクを貼る
大体こんな感じで動くようになるかな?
#!/bin/bash apt-get install gnome-mplayer wget http://www.mplayerhq.hu/MPlayer/releases/codecs/all-20071007.tar.bz2 -P ~/Downloads tar xvjf ~/Downloads/all-20071007.tar.bz2 -C ~/Downloads mv ~/Downloads/all-20071007 ~/Downloads/codecs mv ~/Downloads/codecs /usr/lib ln -s /usr/lib/codecs /usr/lib/win32
2010年1月13日水曜日
UbuntuをPPPOE接続からルータでの接続に移行する
インターネットに接続できなくなった。
インターネットで調べてみてもルータは大体ほっといても認識するということなので色々調べてみた。
参考ページ
これによるとインターネット接続に関する情報は/etc/network/interfacesにあるらしい。ホームフォルダにbackupフォルダを作成しそこにinterfacesを移動する。
インターネットにつながるようになった。
深くは分からないが、PPPOEの設定がルータでの接続を邪魔していたのかもしれない。
インターネットで調べてみてもルータは大体ほっといても認識するということなので色々調べてみた。
参考ページ
これによるとインターネット接続に関する情報は/etc/network/interfacesにあるらしい。ホームフォルダにbackupフォルダを作成しそこにinterfacesを移動する。
$ mkdir backup $ sudo mv /etc/network/interfaces backup/再起動。
インターネットにつながるようになった。
深くは分からないが、PPPOEの設定がルータでの接続を邪魔していたのかもしれない。
登録:
投稿 (Atom)