2011年12月31日土曜日

2011年を振り返る

こういうことするのは初めてですが、いい機会なので振り返ってみましょう。
今年一年間のダイジェストまとめみたいな感じですが。

○1月
飲み食べブログ「食べある記」を開始。
何を思ったのかといえば、文章を書くことを日常としたいので書きやすそうなネタとして食べたり飲んだりしたことを扱ってみました。これにより外食が増えたのはいたしかたなし。

後追いで技術系?ブログ「学録」を開始。
メモよりもきっちりした文章で手順を残しておこうと思いまして書きました。気まぐれかつ業務と半連動型で差し支えなさそうなことを書いてます。

○2月
開発業務にそこそこ勤しんでいたようです。
ODROID-7を入手し、ビルド手順などをブログに書いてますね。

○3月
何といっても大地震。かなり衝撃を受けましたね。数日は精神的につらかったのは実際のところ。
間接的な影響ですが、所属プロジェクトの一時停滞ということもあり、他プロジェクトの支援のため大阪に一か月ほど出張へ。

○4月
大阪での仮暮らしということで住居的にはわりと不便でしたが、休日は近隣に観光へ行ってみたりと悠々自適に過ごしていました。まあ、環境的にというと逃げですが、業務以外でやることが他になかったから、せっかくだし楽しもうという魂胆でした。
ちなみに何処に行ったかと一端を思い出すと、京都の伏見稲荷、奈良の東大寺に行きました。
今思えばこの出張は、嫌なことから地理的に遠ざかり、気晴らしもできたので、とても助かりました。
そして大阪にて一定の業務を終え、元のプロジェクトも再始動ということで関東に帰ることができました。

○5月
ゴールデンウィークは出張の疲れもありダラダラと過ごしていた気がします。茨城県の鹿島神宮に行ってきましたね。地震の影響を残す鹿島神宮駅と、大鳥居が撤去されていた鹿島神宮が印象に残っています。
連休が明けて再び、他プロジェクト支援のため大阪に出張です。5月の末には関東に帰って戻ってきています。
このときの休日は和歌山の高野山へ行っていますね。

○6月
情報処理の試験を受けに行ったぐらいですかね。3月~5月にろくすっぽ勉強をしなかったので散々な結果です。(勉強する暇はあったとは思いますが、気持ちの問題ですかね。)

○7月
8月もそうなんですが、なぜか手帳が丸々空白の一か月。停滞期間?
いちおう次回の情報処理試験に向けて試験勉強は始めていたと思います。

○8月
お盆休みは実家である福岡に帰省していました。お墓参りの他は、ゲーセンに行ったり美術館に行ったり。特にこともなく過ぎて行きました。
それ以外はやはり手帳が空白。8月の末からようやく復活?したような気がします。

○9月
いろいろとお別れの季節。
GDD2011JPへのDevQuizへの参加がまずはありましたね。メインPCが逝ってしまったのも記憶に新しいことです。その後も新しいメインPCは快適に動いています。
んで。大阪への転勤を言い渡されたのも9月末の話です。
せっかくなのでということで、秋葉原でXperia Mini Proを買ったのもこの時期です。

○10月
住まいを探すため、2週間の大阪出張。寮もありましたが(「こんなところで暮らせるか!」という思いで)あえて自分で借りることを決意しておりました。おかげさまで良い場所が見つかりました。
1週間の準備期間の後、大阪へお引っ越し。ちなみに旧居である松戸には6年程住んでいました。
いやはや、超慌ただしいスケジュールでしたな。
(情報処理試験の方はすっぽかしました。さすがにそんな余裕はなかったので。)

○11月
晴れて大阪府民となりましたが、GDD2011JPのためだけに自腹で関東に1日だけ行きました。
徐々に大阪の暮らしに慣れていきます。(しかし、馴染んでいるかというと、そうでもないような。)
pandaboardを入手し戯れる日々。

○12月
pandaboardと戯れる日々。
そして年末に至る。


さて、今年の手帳の1月はじまりのページには、今年の抱負みたいなことを書いていたようです。そこには何と書いていたかというと「今年は、シンプルで慎ましい生活でいこう!」とのことです。
はてさて、どう見たって俺的激動な年になっていた気がします。まあそんなもんか。

ということで以上です。また来年~

2011年12月24日土曜日

pandaboardでICS(ビルド後のちょい変更とSDカード書き換え)

前回まででいちおうandroidkernelu-bootとx-loaderのビルドが完了しました。
今回はSDカードへの書き換えを行っていくわけなんですが、まあ別に大した罠はないのでテキトーに書いておきます。

まずはビルドしたファイル郡を使いやすいように一箇所に集めます
$ cd ~/work
(bootディレクトリを作成し、boot領域に置くファイルを集めます) 
$ mkdir boot
$ cp x-loader/MLO boot/
$ cp u-boot/u-boot.bin boot/
$ cp kernel/omap/arch/arm/boot/uImage boot/uImage
(rootfsディレクトリを作成し、rootfs領域に置くファイルを集めます)
$ mkdir rootfs
$ cp -r android/out/target/product/panda/root/* rootfs/
$ cp -r android/out/target/product/panda/system rootfs/
$ cp -r android/out/target/product/panda/data/ rootfs/

しかし!このままでは正常にブートできないので、
最低限、無事に起動させるのに必要な修正を加えます。

rootfs/init.rcの不要な記述である94~100行目を下記のようにコメントアウト
#on fs
# mount mtd partitions
    # Mount /system rw first to give the filesystem a chance to save a checkpoint
    #mount yaffs2 mtd@system /system
    #mount yaffs2 mtd@system /system ro remount
    #mount yaffs2 mtd@userdata /data nosuid nodev
    #mount yaffs2 mtd@cache /cache nosuid nodev

また、Serialコンソールにてrootアクセスで書き換え可能なようにするためには、
rootfs/init.rcの104行目(参考のため102行目から掲載)を下記に修正
on post-fs
    # once everything is setup, no need to modify /
    mount rootfs rootfs / rw remount
rootfs/init.rcの348行目と349行目を下記のようにコメントアウト(参考のため344行目から掲載)
service console /system/bin/sh
    class core
    console
    disabled
    #user shell
    #group log

もうひとついらない箇所
rootfs/init.omap4pandaboard.rcの23~25行目をコメントアウト(参考のため22行目から掲載)
on fs
    #mount ext4 /dev/block/platform/omap/omap_hsmmc.0/by-name/system /system wait ro
    #mount ext4 /dev/block/platform/omap/omap_hsmmc.0/by-name/userdata /data wait noatime nosuid nodev
    #mount ext4 /dev/block/platform/omap/omap_hsmmc.0/byname/cache /cache wait noatime nosuid nodev

おまけで
SDカードの3番目のパーティションを/sdcardとしてマウント可能にするには
rootfs/system/etc/vold.fstabファイルを新規作成し、下記1行を追記
dev_mount sdcard /mnt/sdcard 3 /devices/platform/omap/omap_hsmmc.0/mmc_host/mmc0

SDカードの書き換えに関しては、以前紹介したpandaboard androidと一緒です。

(もしandroidが書き込み済みのものを用いるなら、いったん削除しておきましょう)
$ sudo rm -rf /media/boot/*
$ sudo rm -rf /media/Angstrom/*
(その後書き換え)
$ sudo cp boot/* /media/boot/
$ sudo cp -r rootfs/* /media/Angstrom/
$ sudo chmod -R 777 /media/Angstrom/*

ちなみに、ブートオプションはu-bootにて設定済みですので、以前のようにu-bootを途中で止めてブートオプションを打ち込むといった手順は必要ありません。
電源を入れればICSが起動します。




とりあえず以上です。

2011年12月11日日曜日

pandaboardでAndroid ICS(u-boot、x-loaderビルド編)

ビルド編最後はu-bootとx-loaderのビルドです。
これに関してはおなじみomappediaのpandaboard向けandroidのリリースノートに書かれている手順になります。

ビルド環境に関しては前回に引き続きとなります。

u-bootの作成
ダウンロードは手順どおり
$ cd ~/work/
$ git clone git://git.omapzoom.org/repo/u-boot.git
$ cd u-boot
$ git checkout 601ff71c8d46b5e90e13613974a16d10f2006bb3
なにやらメッセージが表示されますが、そこは気にせず。

ビルドも手順どおりと言いたいところですが、一箇所だけ修正が必要です。
u-boot/include/configs/omap4430panda.hの153行目CONFIG_BOOTARGSをちょっと修正してやる必要があります。以下のように変更しましょう。
(変更前)
" omapdss.def_disp=hdmi consoleblank=0"

(変更後)
" omapdss.def_disp=dvi consoleblank=0"
どうやらデフォルトディスプレイとしてHDMIへの出力は設定できないようです。ですのでDVIへの出力に変更しておきます。(※起動後にHDMIケーブルを抜き差しすると、HDMIへのクローン出力機能によりDVI側と同じ解像度の画面がHDMIへ出ます。画面解像度が一緒といっても、出力信号はHDMIに接続されている機器が対応したもの(1080pあるいは720p)になります。DVIの画面解像度は1280×720に固定されているようです。まあそのうちじっくり調べてみましょうか)

ビルドコマンドは手順どおり
$ cd ~/work/u-boot
$ export ARCH=arm
$ export CROSS_COMPILE=/opt/arm-2010q1/bin/arm-none-linux-gnueabi-
$ make distclean
$ make omap4430panda_config
$ make -j4

ディレクトリ直下にu-boot.binが出来上がります。

x-loaderの作成
ダウンロードは手順どおり
$ cd ~/work/
$ git clone git://git.omapzoom.org/repo/x-loader.git
$ cd x-loader
$ git checkout c8855fa6b85bd44073bd1b25dbffa99f02cbeeed
なにやらメッセージが表示されますが、そこは気にせず。

ビルドも手順どおり
$ cd ~/work/x-loader/
$ export ARCH=arm
$ export CROSS_COMPILE=/opt/arm-2010q1/bin/arm-none-linux-gnueabi-
$ make distclean
$ make omap4430panda_config
$ make ift

ディレクトリ直下にMLOが出来上がります。

以上。ビルド編でした。 次回は書き換え編に続く?

2011年12月10日土曜日

pandaboardでAndroid ICS(Kernelビルド編)

前回はAndroidビルドを行ったところで、続きましてはKernelのビルドです。
Android 4.0では、Linux Kernelバージョンは3.0となっているようです。

ビルド環境については前回に引き続きになります。(Ubuntu10.04でAndroidビルド用に一連のパッケージをインストールした状態)

まずはビルドに必要なtoolchainをダウンロードして/optに展開しましょう。
(展開場所はお好みですが、ツールチェインは/optに置くのが普通らしいので)
$ cd ~/work/
$ wget http://sourcery.mentor.com/sgpp/lite/arm/portal/package6488/public/arm-none-linux-gnueabi/arm-2010q1-202-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
$ sudo tar jxvf arm-2010q1-202-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 -C /opt/

ビルドにmkimageコマンドが必要ですので、u-boot-toolsパッケージを追加でインストールしておきます。
$ sudo apt-get install u-boot-tools

続いてpandaboard用のkernelのダウンロード。
omapのリポジトリにてpanda用の3.0をチェックアウトです。
$ mkdir ~/work/kernel
$ cd ~/work/kernel
$ git clone https://android.googlesource.com/kernel/omap
$ cd omap
$ git checkout -b android-omap-panda-3.0 origin/android-omap-panda-3.0

kernelのビルド手順は以下の通り。
まず最初にARCHとCROSS_COMPILEの環境変数をarmと先ほど展開したツールチェインに設定しておきます。あとはmakeコマンドをポンっと叩けば出来上がり。
$ export ARCH=arm
$ export CROSS_COMPILE=/opt/arm-2010q1/bin/arm-none-linux-gnueabi-
$ cd ~/work/kernel/omap/
$ make panda_defconfig
$ make uImage modules -j4
※-jなどの意味は前回と同じですね。

uImageがarch/arm/boot/下に出来上がります。

今回はここまで、続きはまた次回。

2011年12月7日水曜日

pandaboardでAndroid ICS(Androidビルド編)

Android 4.0 (通称ICS : Ice cream sandwich)が公開され、pandaboardで普通に動くということで挑戦してみましょう。

今回はUbuntu 10.04で、Android本体のビルドを環境の構築から載せておきます。
なお、64bit版(ubuntu-10.04.3-desktop-amd64.isoをインストールしました)が推奨です。32bit版や最新のUbuntu11.10だとこの通りには行きませんのでご注意。
(※Ubuntu11.10でやろうとするとマジで苦労する←実体験より)

環境構築
こちらの公式サイトに載っている手順です。※Androidのアップデートと共にこちらの内容もアップデートされているようで、その都度確認しておいた方がよさそうです。

まずはパッケージのインストールです。
端末を開きまして
$ sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown libxml2-utils

続いてJDKのインストールも手順の通り
$ sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner"
$ sudo apt-get update
$ sudo apt-get install sun-java6-jdk
でOKです。

続いてはAndroidのソースツリーを落とすためのツールであるrepoのインストールです。
参考はこちら
$ mkdir ~/bin
$ PATH=~/bin:$PATH
$ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
これでrepoが利用可能になります。
ちなみにこれは、repoにパスを通す一時的な処置ですが、Ubuntuでは"~/.profile"に"~/bin"が存在するならば"~/bin"にパスを通すという記述がありますので、次回ログイン時にはコマンドラインから再度パスを通すという手順は必要ありません。

Androidのソースツリーダウンロードとビルド

ソースツリーのダウンロード先のディレクトリを作成しておきます。(ここでは~/work/androidとしましたが、任意でかまいません)
$ mkdir -p ~/work/android

ソースツリーのダウンロードですが、今回はmasterブランチから取得します。
(android -4.0.1_r1というブランチがあるのですが、ビルドできても起動しませんでした。ソースツリーの内容は日々更新されているようですので、安定してくればandroid-4.0.1_r1のブランチを利用する方が良いかもしれません。)
$ cd ~/work/android
$ repo init -u https://android.googlesource.com/platform/manifest
(名前とメールアドレスを聞かれるので適切に入力しておきましょう。一応、"本名"と"自分のメールアドレス"を入力する決まりになっているようです。)
$ repo sync
これでソースツリーのダウンロードが始まります。サイズは8GBぐらいで、回線にもよりますが、大体1~2時間はかかると思います。

もう一つ、pandaboard用のプロプライエタリなライブラリを別途ダウンロードして展開しておく必要があります。
$ cd ~/work/android
$ wget https://dl.google.com/dl/android/aosp/imgtec-panda-itl41d-dfebf249.tgz
$ tar xvzf imgtec-panda-itl41d-dfebf249.tgz
$ ./extract-imgtec-panda.sh
(ライセンスを読むためにEnterを入力し、スペースキーでスクロールし、最後に"I ACCEPT"と入力してEnter)
これでandroidのソースツリーの下の適切な位置に追加ファイルが展開されます。

いよいよビルドですが、下記のコマンドを叩きます。
$ cd ~/work/android
$ source build/envsetup.sh
$ lunch full_panda-eng
$ make -j4
(※-jの数字はコア数(マルチスレッド実行数)です。マルチコアなプロセッサであれば数字を大きくすることでビルドが並列に走り、高速に終わるかもしれません)
早いマシンであれば大体30分~1時間程度で完了すると思います。(4コア4GBメモリのVMware仮想マシンでビルドを仕掛け、昼飯を食べて1時間30後に帰ってきたらビルド終わってました。)
逆に言うと、シングルコアであったりメモリが少ない(2GB以上は欲しいところ)場合には、相当な時間がかかります。

これでout/target/product/panda/ディレクトリ以下にrootとsystemが作成されます。

本日はここまで。続きはまた今度

2011年11月25日金曜日

pandroidにSDカードを認識させる

はい。前回に引き続き小ネタで間を持たせます。

前々回の方法でpandroidが無事動いたところですが、ちょっと動画でも再生させてみようかとUSBメモリなどを挿しても自動では認識してくれません。(手動でmountコマンドを打って認識させることはできますが)
ちょっと役立つ情報をば。

一番簡単な方法は、pandroidのSDカードにストレージとして利用するパーティションを新たに作成することです。
Ubuntuの「Gparted」を使いまして(標準ではインストールされていませんのでapt-get instal gpartedなどで入れておきまして)、
下図のように後方のAndroidのルートファイルシステム領域(Angstromというラベルの領域)を縮小し、空いた領域に新たにFAT32の領域を作成します。(わかりやすくMediaとでもラベルを付けておきましょうか)

こうやってブートさせると、このSDカードの3番目の領域がSDカードとして自動で認識されます。
(※なお、初回の認識時は、この領域はAndroid用にフォーマットされるらしく、中身が消えてしまうようです。)


以上。(本当はもう一個ネタがあったんですが、やっぱりやめとこう)



2011年11月24日木曜日

pandroidでUSB経由のadb方法

pandaboardでAndroidの続きですが、
今回はAndroid開発ではかかせないadbを利用する方法を説明しちゃいます。

pandaboard側の準備

Androidのランチャー画面より「Settings」アプリを開き、
「Applications」→「Development」の『USB debugging』に(チェックが入っていない場合は)チェックをいれます。
(このまえの手順で入れたものには既にチェックが入っている状態でした。が、一旦チェックを外して、もう一度チェックを入れる方が確実かもしれません。)

続いては、Windows XPの場合、Ubuntuの場合を見ていきましょう。

Windows XPの場合
まずは、基本的にAndroid SDKが既にインストール済みであることを前提とします。
(ない場合はこちらを見て入れておきましょう)

追加でパッケージを入れておく必要がありますので、Android SDK Managerを立ち上げます。
この中で、最低限必要なものとしてToolsの『Android SDK Platform-tools』とExtrasの『Google USB Driver package』を(インストールしていない場合は)インストールします。
※Platform-toolsの方にadbが入っています。こちらについては説明略


続いては、Android SDKのインストール先のフォルダ(インストーラーを使って入れた場合には"C:\Program Files\Android\android-sdk"です)の中の「extras」→「google」→「usb_driver」フォルダ下にある『android_winusb.inf』をテキストエディタで開きます。

端末を開きまして"[Google.NTx86]"(64bit版の場合には"[Google.NTamd64]")のセクションに下記の行を追加します。
[Google.NTx86]

; pandaboard
%CompositeAdbInterface%        = USB_Install, USB\VID_0451&PID_d102&MI_01
上書き保存して閉じます。

miniUSBケーブルでPCと接続します。これで「新しいハードウェアの接続ウィザード」が起動するはずです。
ドライバの場所選択にて、手動で先ほどのフォルダ(C:\Program Files\Android\android-sdk\extras\google\usb_driver)を選択して探索をかければADB用のドライバインストールされます。
(インストール後、再起動を求められる場合は再起動をしましょう。)

これでもう一度USBを抜き差しすれば、adbで接続できるようになっているはずです。


Ubuntu(10.04で確認)の場合
Android SDKにてWindowsの場合と同様に『Android SDK Platform-tools』を追加でインストールしておきます。(『Google USB Driver package』はWindows用のドライバであるためインストールは不要)

udevのルールファイルを新たに作成します。
$ sudo vi /etc/udev/rules.d/51-android.rules
(下記一行を追記して上書き保存)
SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d102", MODE="0666"

$ chmod a+rw /etc/udev/rules.d/51-android.rules

これでminiUSBケーブルでPCと接続すればadbでアクセスできるようになるはずです。

ちなみにadb devicesの結果は以下のように表示されます。

$ adb devices
**略**
List of devices attached
686A00011FF00000    device

以上、小ネタでした。(ベンダーIDとプロダクトIDがわかっていれば大体同様の方法でいけます。正規のドライバが用意されている場合そちらを使いましょうw)

2011年11月19日土曜日

pandaboardでAndroidことはじめ

pandaboardをひょいっと渡されたので、ひょいっとAndroidでも動かしてみましょうかね。

さてまずは何をすればいいのでしょうか?
パッケージに書かれている pandaboard.org にアクセスしてみましょうか。
何はともあれ、中央あたりにあるGetting Startedに進んでみましょう。

えーと、必要なものは、
・5Vの電源
・SDカード4GB以上
・USB SerialあるいはSerialケーブル
・Ubuntu 10.04 PC(おそらく64bit版を推奨)
・LANケーブル
・miniAのUSBケーブル
・DVIまたはHDMIケーブルと、それに繋がるモニタ
・USBキーボードとUSBマウス

準備できたら(一部なくてもOK)、お次は omappedia.org
色々ありますが、とりあえず pandaboard のリンクを踏みます

めざすは、もちろんAndroidだ(下の方にスクロールして)
あー、手っ取り早く動かしたいのでカンで Project Release

一番新しいのは L27.12.1-P2_Gingerbread_pandroid_rls_v2 ですな。
ダウンロードして解凍してみると、どうやらプリビルド済みのものみたいですね

これをどう使うのかということですが、一つ前に戻り Getting Started に行ってみましょう
つづいて latest release notes を見ることにしましょう

どうやらソースコードの入手方法とビルド手順がかかれているようですね。
ここは後まわしでいいとして、Booting Kernel and Android from SD に飛びましょう

SDカードをUbuntuのPCに挿してフォーマットを行なうようです。
手順の初めからfdiskコマンドでやってみてもいいですが、これを一度に実行できるスクリプトが用意されていますので、こちらを利用するほうが楽々です。

$ wget http://cgit.openembedded.org/cgit.cgi/openembedded/plain/contrib/angstrom/omap3-mkcard.sh
$ chmod a+x omap3-mkcard.sh
(SDカードを挿して認識させ(/dev/sdbとして認識されるとして)、アンマウントした状態にて)
$ sudo ./omap3-mkcard.sh /dev/sdb
シェルプロンプトが戻ってくるまでしばし待ちましょう
これで、"boot"という70MB程のFatパーティションが先頭に、残りは"Angstrom"というext3のパーティションができあがります
途中でエラーが出る場合(予め複数のパーティションがあった場合など)には、一旦gpartedなどで全て消去し、Fat32の一つのパーティションにしておいてから実行すると良いみたいです。

出来上がったら一旦SDカードを抜き差ししてやると自動でマウントされてファイルマネージャーで表示されるんじゃないかと思います。
後は先ほどダウンロードして解凍したプロジェクトリリースの中身をSDカードに書き込むだけです。

$ cd L27.12.1-P2-pandroid_v2
$ ls
boot gfx_license.txt myfs patches powervr_ddk_install.log wlan_license.txt
(bootをbootパーティションに、myfsをAngstromパーティションにコピーしてやりましょう)
$ sudo cp boot/* /media/boot/
$ sudo cp -r myfs/* /media/Angstrom/
(アクセス可能なようにパーミッションを777にする必要があるようです。)
$ sudo chmod -R 777 /media/Angstrom/*
SDカードをアンマウントしてUbuntuから取り外し、pandaboardに挿しましょう。
(アンマウントするときに書き込み完了の処理のため、しばらく時間がかかる場合があります。)

電源を入れる前に、pandaboardをシリアルケーブルでPCと繋ぎましょう。
例えば、Tera Termを使う場合の設定としては、ボーレートを"115200"に変更し、他は多分デフォルトのままでOKと思います。
いちおう設定を載せておきます



そして、いよいよ電源ONです。
ちなみに最低限動かすのに必要と思われる接続はこんな感じ。
・先ほど作成したSDカード
・USBシリアルケーブルでPCと接続。(通信用にTera Term)
・USBキーボードとUSBマウス
・HDMIケーブルでモニタと接続
・5Vの電源を挿す(挿すと電源が入ります)

ええと、起動させてそのまま待っているとシリアルでは、
Texas Instruments X-Loader 1.41 (May 12 2011 - 10:52:12)
mmc read: Invalid size
Starting OS Bootloader from MMC/SD1 ...

U-Boot 1.1.4-L27.13.1^0-dirty (May 12 2011 - 10:48:49)
Load address: 0x80e80000
DRAM:  1024 MB
Flash:  0 kB
Using default environment
In:    serial
Out:   serial
Err:   serial
efi partition table:
efi partition table not found
Net:   KS8851SNL
Hit any key to stop autoboot:  0
booti: cannot find 'boot' partition
Device Serial Number: 7E72002400000001
Fastboot entered...

と、Fastbootモードに入ってしまうようで何も起きない!(それはそれとして覚えておきましょう。)
どうやら"Hit any key to stop autoboot: "と表示されている間に何かキーを打ってubootを止めて、環境変数を手動で入れてやる必要があるみたい。

もう一回起動をやり直しましょう。(ちなみに、上の画像でいうと上下に2つボタンが並んでいるうちの上のボタンがリセットボタンとなっており、こちらを押すことで再起動がかかります)
(略 )
Hit any key to stop autoboot:  5
(ここが0になる前にEnterを入力)
PANDA #
上のように"PANDA #"というプロンプトが表示されれば成功です。

以下、順番に打ち込んでいきましょう。
PANDA # setenv console console=ttyO2,115200n8 androidboot.console=ttyO2
PANDA # setenv memory mem=456M@0x80000000 mem=512M@0xA0000000
PANDA # setenv rootfs root=/dev/mmcblk0p2 rw rootdelay=2 init=/init
PANDA # setenv vmem  vram="32M" omapfb.vram=0:16M
PANDA # setenv display omapdss.def_disp=hdmi consoleblank=0
PANDA # setenv bootargs ${console} ${memory} ${rootfs} ${vmem} ${display}
PANDA # printenv bootargs
bootargs=console=ttyO2,115200n8 androidboot.console=ttyO2 mem=456M@0x80000000 mem=512M@0xA0000000 root=/dev/mmcblk0p2 rw rootdelay=2 init=/init vram="32M" omapfb.vram=0:16M omapdss.def_disp=hdmi consoleblank=0
PANDA # setenv bootcmd 'mmcinit 0;fatload mmc 0 0x80000000 uImage; bootm 0x80000000'

最後にbootです。(ちなみにsaveenvは(現状では)出来ませんので電源ONする度に上記を毎回打ち込む必要があります)
PANDA # boot
mmc read: Invalid size
3246752 bytes read
## Booting image at 80000000 ...
   Image Name:   Linux-2.6.35.7-00148-g6d54618
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    3246688 Bytes =  3.1 MB
   Load Address: 80008000
   Entry Point:  80008000
   Verifying Checksum ... OK
OK
I2C read: I/O error
Blaze/SDP Board.
Starting kernel ...
(略)
とブートが走り、Androidの起動ロゴ画面の後、見事Android 2.3(Gingerbread)のホーム画面が表示されます!
(初回起動は結構時間がかかります(ずっとAndroidの起動ロゴ画面)ので、気長に待ちましょう)

(アプリのアイコン等の表示も、結構時間がかかります。SDカードからの読み出しだからでしょうか)



とりあえず今回は以上です。次回はもう少し細かく見ていきましょうか

2011年9月12日月曜日

GDD 2011 JP DevQuiz に参戦しての感想とか

Google Developer Day 2011 Japanへの参加資格を得るため、昨年から始まったDevQuizに挑戦したのであった。
(ちなみに昨年も一応、Super Hacker枠で参加証GETしました。)

鉄は熱いうちに打てということで、興奮冷めやらぬうちに感想でも書いておこうかと思います。かなり脈略なく書くことを覚悟のうえ!(爆

まあ、何をおいても最後の難関「スライドパズル」でしょう。今回は大体一週間ぐらいかけられ、割と余裕を持って臨めたので、そこそこ悔いのない結果だったかなと正直思っています。
(昨年の「パックマン」は、ほぼ一日でプログラムを仕上げ、徹夜で実行させていたのはいい思い出です)

そして今回のDevQuizの最終スコアは136.2点!(しかし、いいんだか悪いんだが半端な点数だなあー


ここでちょっと閑話休題して裏話(?)でも。

コーディングに取り掛かる直前、大きなトラブルがあったのです。それは、、、メインPCの死亡。 orz
「電源は入るけど一切起動しねぇよ!こりゃマザーボードがやられたな!」
それまでも、何回か電源ON/OFFしないとブートしないという調子の悪さで、騙し騙し使っていたんですが、いきなり電源が落ちてお亡くなりになってしまわれた。
「コーディングできねえじゃん!」

ま、さすがにメインPCがなくなった状態で生活するのも辛すぎるということで、ここは思い切って、
「もうこうなったら、とことんいいスペックのPCを組み立ててやるもんね。」
ということでアキバへお買い物へGO!

大体以下の物品を買ってまいりました。ケースの中身総入れ替えですな

OS: Windows 7 Professional (64bit)
CPU: Intel Core i7 2600K !!
マザーボード:  ASUS P8Z68-V PRO!
メモリ: 8GB
HDD: 1TB

どういう基準で選んだかというと、現地でPC雑誌を立ち読みして載ってたものを選びました。
「流行というかお墨付きのものを選んでおけば間違いなしさ。」
あとはパーツ屋さんの売り出しとかですかね。
(なお、お亡くなりになったPCは、当時のよさげスペックであった Pentium Dでした。)

ただし実際コーディングに使ったのは、デュアルブート構成でUbuntu 10.04(64bit)を入れてやりましたが。

ということで、睡眠時間とお金は削られたが、かなり快適な環境を手に入れ、徹夜もせずに万全の体制で戦うことができたのであった。


で、本題に戻り、DevQuizに挑戦しての感想ですか。

とにかくなんだ、プログラミングは面白い!
解き方を考えて、実装して、試してみる。これが何のてらいもなく出来るというのがプログラミングの醍醐味じゃなかろうか。
また、期限付き、競争ありという条件下であったので、ゲーム感覚で楽しめたと思います。
まあ、アルゴリズムに関する知識不足を実感させられた感は強かったですが。
これを機に、またいっちょ勉強してみますかという意欲が沸いてきましたね。

というところです。
解答に使ったプログラムの方は、またおいおい。(気が向いたらね)

2011年8月29日月曜日

ODROID-7のTerminal Emulatorでsuしよう

久々のODROID-7ネタ。まだこんなことやってたんですよ。

ODROID-7に限らずAndroidのソースコードがあればこそ出来ることがあります。

さて本題。
ODROID-7には「Dev Tools」というアプリがプリインストールされており、その中でTerminal Emulatorが起動できます。Linuxのシェルでコマンドを入力することができるわけです。
しかし、このターミナルはユーザ権限しか与えられておらず殆ど何にも役に立ちません。

そこで、suコマンドでrootユーザに変わろうと思いきや
$ su
su: uid 10004 not allowed to su
と拒否されてしまいます。

これはなぜかというと、Androidソースツリーに入っているsuコマンドの方でユーザIDをチェックして弾いているためです。
ソースコードで言うと、android/system/extras/su/su.c の62行目あたりにその記述があります。
この部分をコメントアウトしてやればいいわけですね。

てな感じで。

ソースを修正したらAndroidのフルビルドをかけてもいいですが、既に一回ビルド済みであるならばsuのみ再ビルドをかけることもできます。(なおODROID-7のビルド環境構築~フルビルド方法についてはこちらを参照。)
$ cd android
(Androidのソースツリーのトップディレクトリに移動しまして)
$ . build/envsetup.sh
(mmといった部分ビルドのコマンドが利用可能になります)
$ cd system/extras/su/
$ TARGET_PRODUCT=odroid7 mm
これで out/target/product/odroid7/system/xbin/su
が再ビルドされます。

ビルドが完了したら、専用USBにてadb経由でODROID-7に送り込んでやります。(なお、adbでの接続方法についてはこちらを参照。)
$ cd ../../../
(再びAndroidのソースツリーのトップディレクトリに移動しまして)
$ adb push out/target/product/odroid7/system/xbin/su /system/xbin/
(直接置き換えてしまいます。※その前に、元のものを別名でバックアップを取っておいてもよいでしょう。)
$ adb shell
(仕上げはadb shellにてroot実行権限をつけてやります)
# chmod 6755 /system/xbin/su
以上で作業完了。

セキュリティ上問題ありですが、実験用途としてはより便利に使えるようになるかも。
まあ、adb shellは普通にroot権限でフルアクセスできることは知っての通りですが。

ではまた。

2011年8月18日木曜日

Ubuntu 10.04 にJDK5をインストールしたいとき

Ubuntu 10.04ではインストール後そのままの設定ではJDK6もインストールできませんが、JDK5をインストールするには更に一手間必要なのよん。というお話です。

まずは良く知られていた方法から(今年の4月あたりはこれで出来ていたんですがねえ)
Synaptic パッケージマネージャにリポジトリを追加するやり方です。

GUIのパッケージマネージャから設定するならば、デスクトップのメニューバーの「システム」→「システム管理」→「Synaptic パッケージ・マネージャ」を起動し、
Synaptic パッケージ・マネージャのメニューから「設定」→「リポジトリ」を開き、
「他のソフトウェア」のタブにて、「追加」をクリックし、下記を入力
deb http://us.archive.ubuntu.com/ubuntu jaunty-updates multiverse
これを保存して「再読込」を実行すれば、"sun-java5-jdk"パッケージがリストに上がってくるはずでした。

ついでにCUIでやるならば、
$ sudo add-apt-repository "deb http://us.archive.ubuntu.com/ubuntu jaunty-updates multiverse"
$ sudo apt-get update
※と、パッケージリストを再取得したいのですが、現在のところ
W: http://us.archive.ubuntu.com/ubuntu/dists/jaunty-updates/multiverse/binary-i386/Packages.gz の取得に失敗しました 404 Not Found
というようにパッケージリストが取得できず失敗してしまいます。
これではapt-getで"sun-java5-jdk"をインストールすることはできませんね。

ではどうすりゃいいかというと、OracleのHPから取ってきて手動でインストールすればいいんです。
いまのところはこちらになりますが、
Google検索で『Java archive』と検索(※日本語検索はOFF)すれば、真っ先に引っかかってきます。
(Oracleのトップページからこのページに行く方法はわからず。。。)

サイトにたどり着いたら「Java SE 5」というリンクをクリックし、現在の最新版である「Java SE Development Kit 5.0u22」をクリックです。
「Accept Licence Agreement」をチェックして、環境にあったファイルを落としましょう。
Ubuntuの場合は「rpm」の付いていない「jdk-1_5_0_22-linux-i586.bin」を選べばよいでしょう。環境によっては「amd64」の付いている方になるかと思います。

ダウンロードしたらコマンドラインにて
$ chmod a+x jdk-1_5_0_22-linux-i586.bin
$ sudo ./jdk-1_5_0_22-linux-i586.bin
(スペースキー連打でライセンス条項を読み飛ばし)
yes
でインストール開始です。
(※なお、Enterキー連打でライセンス条項を読み飛ばそうとすると勢いあまって"no"を実行してしまうことがあるので注意)

実際のところはインストールではなく、その場に"jdk1.5.0_22"というディレクトリで展開されるわけですが。
このままでは如何ともしがたいというわけで、
$ sudo mv jdk1.5.0_22 /usr/local/
などとお好みで適当なディレクトリに配置しておき。
ホームディレクトリの「.bashrc」ファイルでパスを通しておきます
$ gedit ~/.bashrc
一番後ろに下記一行を追記して上書き保存
PATH =$PATH:/usr/local/jdk1.5.0_22/bin
$ source ~/.bashrc
$ java -version
java version "1.5.0_22"
等と出てくればOK。

おまけで、ヒントを一つ。
この状態でeclipseを手動で入れたならば、eclipseのインストールディレクトリ下に/usr/local/jdk1.5.0_22/jreへのシンボリックリンクをjreとして作っておくと良いです。
eclipseのインストールディレクトリにて
$ ln -s /usr/local/jdk1.5.0_22/jre jre
みたいな感じで。

適当ですが以上です。

2011年6月17日金曜日

Enju Leafをインストールしてみるか

会社で買った本の管理をもっと楽にやりたいなと思いまして、
たどり着いたのがオープンソース図書館システムEnju Leafでした。

インストール方法に関しては、以下に載ってます。
https://github.com/nabeta/enju_leaf/wiki/Install
なんとなく引っかかった部分もあったので、書いてみようかと。

今回の環境は、
Ubuntu 10.04
データベースはMySQLを使います。

はじめに、必要なパッケージのインストールですが、これは手順そのまま。
$ sudo apt-get install memcached imagemagick w3m xpdf xlhtml ppthtml build-essential bison openssl libreadline6 libreadline6-dev curl git-core zlib1g-dev libssl-dev libyaml-dev libsqlite3-0 libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf libc6-dev
(sqlite3は必要ないかもしれません。)

さらに今回はMySQLを使いますので
$ sudo apt-get install mysql-server
MySQLの"root"のパスワードを設定せよと聞かれますね。
まあ空でもいいんですが、ふつーは何か設定しておくと思いますので"password"などと入れておきますか。(あくまで例ですので)

続いてrubyのインストールでありますが、enju_leafでの推奨は1.9.2。対してapt-getで入手できるのは1.8.xらしいです。迷うところでもないのでrubyの本家からダウンロードしてビルドしましょう。
http://www.ruby-lang.org/ja/downloads/
より、最新安定版である1.9.2-p180のtar.gz圧縮ファイルを適当な場所にダウンロードしましょう。

インストール方法についてはお馴染み
$ tar xvzf ruby-1.9.2-p180.tar.gz
$ cd ruby-1.9.2-p180
$ ./configure
$ make
$ sudo make install
(インストール確認は以下を実行して、バージョンが表示されればOKです。)
$ ruby -v
ruby 1.9.2p180 (2011-02-18 revision 30909) [i686-linux]
rubygemsが必要なのかと思いましたが、rubyをインストールするともれなく入っているみたいですね。
$ gem -v
1.3.7
らしいです。
気になるようであれば、
$ sudo gem update --system
$ gem -v
1.8.5
と最新版にアップデートは簡単にできます。

手順の方に戻りまして("Railsをインストールし、..."の部分です)
githubのリポジトリからenju_leafをいただいてきます。
$ sudo gem install bundler
$ git clone git://github.com/nabeta/enju_leaf.git
$ cd enju_leaf
$ git checkout 1.0
(続けて、MySQL用に初期設定ファイルコピースクリプトを実行します)
$ script/enju_setup mysql

以降、enju_leafディレクトリで作業を行います。

ではMySQLデータベースの設定です。
Gemfile(依存関係のあるGemを記述するファイルのようです)の編集を行います。
$ gedit Gemfile
(などで適当にファイルをテキストエディタで開きまして)
---9行目をコメントアウトし、代わりにその下に1行追記する---
# gem 'pg'
  gem 'ruby-mysql'
----上書き保存して閉じます。
手順と少し違うので注意

MySQLの設定ファイルmy.confの修正です(ubuntuの場合は/etc/mysql/my.confにあります)
以前書いたようにUTF8をデフォルトエンコードにします

$ sudo gedit /etc/mysql/my.conf
(デフォルトエンコードをUTF8にするよう修正して上書き保存します)

$ sudo service mysql restart
(mysqlサーバを再起動させます)
Ubuntuの場合はmysqlサーバをインストールすると勝手にサービス起動しています。

続いてはenju_leafデータベース用にMySQLユーザ追加です。
今回はMySQLのコンソールでやってみましょうか。
$ mysql -u root -p
Enter password: password
(rootで入ります。)

mysql> create user enju@localhost;
("enju"というユーザを作成します)

mysql> create database enju_leaf default character set 'utf8';
("enju_leaf"というデータベースを作成します)

mysql> grant all privileges on enju_leaf.* to enju@localhost identified by 'enjupass' with grant option;
(ユーザ"enju"に"enjupass"というパスワードでデータベース"enju_leaf"への全権限を付与する)

mysql> \q
(管理コンソールから抜ける)
ユーザ名やデータベース名はお好みでどうぞ。

続いてはconfig/database.ymlの編集です。ここはだいぶ変更があります。
$ gedit config/database
(以下に該当する箇所を修正します。)
---40行目からのproduction設定を修正します---
production:
  adapter: mysql
  encoding: utf8
  reconnect: false
  database: enju_leaf
  pool: 5
  username: enju
  password: enjupass
  host: 127.0.0.1
---以上を修正して上書き保存します。
データベース名と、ユーザ名・パスワードは、先ほど設定したものを使います。

進めます。
$ bundle
(依存gemが一挙にインストールされます。)

んで進めますが。
$ rake db:creaete RAILS_ENV=production
/usr/local/lib/ruby/gems/1.9.1/gems/extractcontent-0.0.1/lib/extractcontent.rb:2: warning: variable $KCODE is no longer effective; ignored
WARNING: 'task :t, arg, :needs => [deps]' is deprecated. Please use 'task :t, [args] => [deps]' instead.
 at /usr/local/lib/ruby/gems/1.9.1/gems/sunspot_rails-1.2.1/lib/sunspot/rails/tasks.rb:41:in `block in <top (required)>'
enju_leaf already exists
となにやら警告が出ていますね。いちおう最後までは終わっているので気にしなくてもよいのかもしれません。

$ rake db:migrate RAILS_ENV=production
(上記と同じように警告は出ますが)
まあ一応できたっぽい。(enju_leafデータベースを覗いてみるとテーブルが生成されてました)

続いては
$ rake secret
(警告は出ますが、その部分は無視しまして)
なにやら文字列が1行表示されますのでこれを選択して右クリックでコピーしておきます。
続いてはファイル編集
$ gedit config/initializers/secret_token.rb
---7行目の'change this'という部分に先ほどコピーしたテキストを貼り付けます---
EnjuLeaf::Application.config.secret_token = 'change this'

いよいよ
$ rake sunspot:solr:start RAILS_ENV=production
(先ほどと同じく警告は表示されますが、エラーなく抜けます)
$ rake db:seed RAILS__ENV=production
(警告は略としますが..)
rake aborted!
Solr is not running.

らしいです。
はい。ここが今回最大の落とし穴ですよー

solrにはjavaが必要です
というわけで
$ sudo apt-get install sun-java6-jre
(パッケージのリポジトリをアレしとく必要がありますがどっかに書いたのでそれは略です。)

気を取り直して
$ rake sunspot:solr:start RAILS_ENV=production
(略)
$ rake db:seed RAILS__ENV=production
(警告は出ますが..)
Administrator account created.
と成功したっぽいです。

後は手順そのまま
$ gedit config/schedule.rb
--- 22行目を今作業をしているenju_leafディレクトリへのパスに変更します ---
set :path, '/path/to/enju_leaf'

$ whenever --update-crontab
$ RAILS_ENV=production script/delayed_job start

最後はhttpサーバの起動です
$ rails server -e production
起動にはやや時間がかかるようです。少し待ってあげましょう。

http://localhost:3000 にアクセスしてみましょう。ログインユーザ名は"admin"、パスワードは"adminpassword"です。
(※「ウィンドウを閉じてもログインしたままにする」のチェックを入れなければログインできないようです?)


しかし、使い方はよくわかってなし
ぼちぼちやってみますよ

2011年5月7日土曜日

Ubuntu 10.04 インストーラーUSBメモリの作り方

CD/DVDメディア(あるいはドライブ)がないときにUSBメモリからUbuntuをインストールする方法があると便利ですよね。(まさに自分の状況ですが。)

用意するものは以下の通り。
  • Universal USB Installer
  • UbuntuインストーラーCD(あるいはDVD)のISOイメージ : こちらから入手しましょう
  • USBメモリ : 当然のごとくISOイメージよりも大きいサイズのものを用意しましょう
なお、USBメモリの中身はUbuntuのインストーラによって上書きされてしまいますので注意。

今回はWindowsXP上で、Ubuntu 10.04のインストーラUSBメモリを作成する手順を説明します。
  1. Universal USB Installerの実行ファイルと、UbuntuのISOイメージを同じフォルダに置き、Universal USB Installerをダブルクリックして起動します。
    インストーラをインストールするUSBメモリも挿しておきましょう。
  2. ライセンス条項への同意の画面が表示されますので「I Agree」をクリックして進めます。
  3. まずはインストールしたいUbuntuのバージョンを指定します。[Step 1:]のボックスから選択できるようになっていますので、目的のUbuntuバージョンを指定します。
    今回は『Ubuntu 10.04.X』を選択しています
  4. [Step 2:]にISOファイルが自動で選択されていることを確認します。自動選択されていない(別のフォルダに置いてある)場合には、「Browse」ボタンをクリックしてファイルを手動で選択します。
    ※自動で選択された場合には「Browse」ボタンはクリックできません。
  5. [Step 3:]のボックスにてインストール対象のUSBメモリのドライブレターを選択します。
    この画面でUSBメモリを挿してドライブレターが選択肢に表示されない場合は、「Show all Drivers」というチェックボックスを一旦チェックして外します。USBメモリをもう一度探してくれるようです。
  6. Optionalなど表示されますが、通常は特に気にせずに「Create」をクリックして進めましょう。
  7. 確認のダイアログが表示されますので「はい」をクリックして続行です。
  8. 後は待つだけ。Complete!と表示されれば完成です。

とまあ、ダウンロードしたサイトに書いてある通りなんですが。
しかし簡単になったもんだ。

Ubuntuだけでなく、他のディストリビューションにも色々と対応しているみたいですので、その際には一度試してみるとよろしかろう

2011年3月2日水曜日

Ubuntu 10.04 でJavaアプレットを実行するには

Ubuntuにsun-java6-jdkを入れてみたんですけど、JavaアプレットのWebページが動かない!
ということに遭遇したので対処方法です。

sun-java6-pluginとsun-java6-fontsをインストールしましょう。
(※ apt-get install sun-java6-jdk では依存インストールされないためです。)

$ sudo apt-get install sun-java6-plugin sun-java6-fonts
これでOK。(たぶんUbuntu以外でも同じでしょう。)

2011年2月24日木曜日

wxPythonでpingのGUIを作ろう

今回はwxGlade及びwxPythonを使ったリハビリ作の第一弾です。
既存のpingコマンドにGUIのインタフェースを付けてしまおうです。

環境設定は前回までで完了しているということで進めます。
参考(ま、お好みでどうぞ)

順を追って説明して行きましょう


  1. まず何よりも、どんなアプリを作りたいのか見た目やプロトタイプを作りましょう。
    実際のところ、どうやってこの工程を進めるかというのは慣れや感性によると思います。wxGladeで作りやすいかどうかということもあります。慣れてくると何となくサクッと決められるようになるはずです。
    今回はとりあえず以下のようなものを作ることにいたしましょう。
  2. 実際に作り始める前に、プロジェクトを作成します。Eclipseを開き、「File」→「New」→「Project」(あるいは、プロジェクト新規作成ボタン)をクリックし、「Pydev」→「Pydev Project」を選択し、「Next」をクリックしましょう。
  3. プロジェクトの作成画面では適当なプロジェクトフォルダ名(今回はwxPing)、PythonのVersion(今回は2.6)をセットして「Finish」をクリックします。
  4.  これで空のPythonプロジェクトが作成されます。
    続いてですが、ひとまずこちらは置いときまして、wxGladeによるGUI作成に移ります。
  5. wxGladeを立ち上げましょう。まず最初は「Add a Frame」で土台となるフレームの作成ですね。
    クラス名は気分的に"wxPingFrame"とでもしておきましょうか。
  6. 追加したフレームのプロパティにて、フレームの名前とタイトルを適当(わかりやすいよう)に設定します。今回はフレーム名を"frame_ping"、タイトルを"wxPing"とします。
  7. 画面要素を追加していきますが、まずは縦に2段必要ですね。
    スロットを一つ追加するためには、ツリーにてframe_pingの下にあるsizer_1を右クリックし「Add slot」を選択します。
  8. sizer_1が上下2つに分割されましたね。sizer_1の上のスロットは、さらに横に3分割したいのでSizerを追加します。「Add a BoxSizer」を選択して、上のスロットをクリックしましょう。Orientationは「Horizontal(水平方向)」、Slotsは「3」で作成します。
  9. 追加されたsizer_2の方には、左側から順に「Add a StaticText」、「Add a TextCtrl」、「Add a Button」。残ったsizer_1の下のスロットには「Add a TextCtrl」を追加しましょう。それぞれ適当にタイトルと名前を設定しておきます。
    (今回は"label_dist"、"text_ctrl_dist"、"button_ping"、"text_ctrl_result"とします)
  10. (ビューのレイアウトがおかしい件は置いときまして、)それぞれのアイテムに基本的なレイアウトを設定(プロパティの「Layout」タブで設定)しましょう。
    "label_dist"、"text_ctrl_dist"、"button_ping"、"text_ctrl_result"に全てに共通でBorderを"5"、wxALLにチェック(上下左右に5ピクセルの余白をつける)、wxALIGN_CENTER_VERTICALにチェック(縦に向かって中央に配置)します。
    "text_ctrl_result"にのみwxEXPANDにチェック(親の大きさに合わせる)します。
  11. なお、実際に実行したときの画面イメージは、メインのフレーム("frame_ping")のプロパティの「Preview」ボタンをクリックして表示させることができます。プレビューを見ながら、画面構成の問題点を見つけて解消していきましょう。
  12. まず一つ目は、"text_ctrl_dist"の入力欄が小さすぎて入力を確認しずらいということがあげられます。サイズを変更する必要がありますね。
    "text_ctrl_dist"のプロパティの「Common」タブを開き、「Size」のパラメータに変更を入れるためチェックをつけます。サイズが変更可能になるので、横幅を大きめに設定しましょう。
    変更を確認するにはPreviewを一旦閉じて、11.の手順で再度表示させます。
  13. 次の問題点は、Previewのウィンドウの底をドラッグしてサイズを大きくさせたときに現れます。
    "text_ctrl_result"の縦幅は変わらず、sizer_2に乗っている部分だけが移動してしまいます。
    これはBoxSizerはデフォルトでサイズ変更に合わせてレイアウトが再調整されるのに対し、TextCtrl等はデフォルトでは固定のままとなっていることが原因のようです。逆の方がいいですよね。
  14. これを解決するには、sizer_2にてProportionの値を"0"に、"text_ctrl_result"の「Layout」タブの同じくProportionの値を"1"に変更しましょう。Proportionを0に設定するとサイズ固定に、1に設定すると全体のサイズに合わせて伸縮するようになります。
    ついでに"text_ctrl_result"の初期サイズも「Common」タブのSizeにて変更しておきます。
  15. 続いてはアイテム固有のパラメータを設定していきます。
    "text_ctrl_result"について、プロパティの「Widget」タブを開き、「wxTE_MULTILINE」(テキストを複数行にする)、「wxTE_READONLY」(キーボード入力禁止)にチェックをつけます。
    プログラムからの書き込みだけを表示させるようにするという処置です。
  16. 仕上げはボタン押下に対するイベントハンドラを設定します。
    "button_ping"のプロパティの「Events」タブにて、EVT_BUTTONというイベント(ボタン押下)に対し、"OnButtonPing"というハンドラーが呼び出されるようにします。
  17. 以上でGUIの設計は一通り完了です。コードを出力しましょう。
    Applicationのプロパティで、先に作成しておいたElicpseプロジェクトのソースフォルダ(~/workspace/wxPing/src/wxPing.pyとか)に保存しましょう。
  18. wxGladeでのGUI設計ファイルも、wxGladeのメインウィンドウのFile→Saveで保存できますので保存しておいたほうが良いでしょう。(ソースコードと同じく ~/workspace/wxPing/src/wxPing.wxgで良いです。)
  19. Eclipseのプロジェクトに戻り、動作実装に移ります。出力したはずのソースファイルが表示されていない場合はプロジェクトのフォルダを右クリックし、「Refresh」して再読み込みしてみましょう。
  20. wxPing.pyを開き、ソースファイルの修正に移ります。今回はpingを実行して結果を受け取るためにsubprocessモジュールのPopenを使いたいと思いますので、subprocessパッケージを追加します。(5行目のimport wxの下辺りに追加する)
    import wx
    from subprocess import *
    
  21. 実際に動作を記述する部分は、ボタン押下時のイベントハンドラの部分のみです。先ほどのwxGladeで自動生成されたコード(OnButtonPing)部分は以下のようになっていると思います。(50行目あたり)
  22. この部分に以下のようにpingを送信するコードを記述します。
  23. 以上でプログラミングは完了です。では実行してみましょう。EclipseプロジェクトのwxPing.pyを右クリックし、「Run As」→「Python Run」でEclipse上で実行することができます。
    こんな感じに動きましたでしょうか。

いちおう以下がソースコード全文です。


以上。簡単だったでしょ?
ま、実際の活用方法は工夫次第ということですが。

2011年2月22日火曜日

Eclipse 3.6 へのPydevインストールとwxPythonのコード補完有効化

wxGladeで作成した(あるいは手書きした)wxPythonのソースコードですが、これをPyDevで開くと何やら警告だらけになってしまいます。パッケージが見つからないことが原因なようで、コード補完も働きません。
※実行は問題なくできます。

んで、適当にいじって何とかなったのでメモを残しておきます。
ついでにPyDevのインストール手順も書いておきましょう。

試した環境は以下の通りですが、他の環境でも大体同じと思います。
  • Ubuntu 10.04
  • Eclipse 3.6.1
  • Python 2.6.5 (Ubuntuのパッケージインストーラでインストール)
  • wxPython(python-wxGTK)2.8 (上に同じ)
まずはPydevのインストールからです。
PydevというのはEclipse(元々はaptana向け?)のPythonプログラミング支援プラグインですね。
詳しくは本家を眺めておきましょう。
http://pydev.org/

以下手順です。
  1. Eclipseのメニューバーの「Help」→「Install New Software...」をクリックし、プラグインインストールダイアログを開きます。
  2. PyDevプラグインは標準では登録されていないので「Add...」ボタンをクリックしてアップデートサイトを登録します。
    Nameは任意(わかりやすい名前に)、Locationに"http://pydev.org/updates"を入力してOKです。
  3. インストールするプラグインリストに「PyDev」が表示されますのでこれにチェックをつけて「Next」ボタンで進めます。(optionalの方はお好みで。Mylynはあまり知らないのでry)
  4. そのあとも「Next」、ラインセンスへの同意をチェックし、インストールを開始します。
  5. インストールの途中で、何か選択しろというダイアログが表示されます。「Aptana Pydev~」にチェックを付けて「OK」ボタンをクリックします。(Aptanaというのが気になりますが、これにチェックを入れないとPydevがインストールされません。)
  6. Eclipseをリスタートしたらどうかと聞かれるので「Restart Now」でリスタートしてやりましょう。
  7. 続いては初期設定です。 Eclipseのメニューバーの「Windows」→「Preferences」を開きます。
  8. 「Pydev」の項目が加わっていると思いますので、「Pydev」→「Interpreter - Python」を表示します。ここでは潔く「Auto Config」ボタンを押します。
  9. インストールされているPythonの環境が自動で検索されますので、「OK」をクリックします。
  10. 再びPreferencesのダイアログに戻りますので「OK」をクリックして確定とします。
以上。。。と、改めて手順を実行してみて気が付いた。wxPythonパッケージも自動で認識されてるじゃん!!

Pydevをインストールした後でwxPythonをインストールすると、当然ですがwxPythonパッケージは認識されていないので手動で追加してやる必要がある。
と、 思っていたんですが、上記のように「Auto Config」で認識されるようです。
その際は、一旦「Auto Config」で認識された環境を「Remove」して消してやり、もう一度「Auto Config」を実施することでwxPythonもろとも認識されるようになります。

ちょっとスッキリした。

2011年2月17日木曜日

Ubuntu 10.04 でwxPythonとwxGladeプレビュー編

PythonでGUIを作る簡単な方法として、wxPythonを使うことがあります。
また、このwxPythonのGUIデザインを簡単に作る(Visual Studioで言うリソースエディタ)ものとしてwxGladeがあります。

ちょっとやらない間にすぐ忘れてしまいますのでインストール手順と使い勝手のメモです。
対象は、ここ最近のトレンドUbuntu 10.04です。

wxPythonのインストール
まずはwxPythonのインストールですが、パッケージマネージャから「python-wxGTK2.8」というパッケージ名を指定してインストールできます。
$ sudo apt-get install python-wxGTK2.8

動作確認用のPythonスクリプトとして以下の内容のファイルを用意しましょう。
#!/usr/bin/python
import wx

app = wx.PySimpleApp()
frm = wx.Frame(None)
frm.Show()
app.MainLoop()
これをまあ"wxSample.py"とでもいう名前で保存して実行権限をつけて実行してやります。
$ chmod +x wxSample.py
$ ./wxSample.py
すると
 こんな感じのシンプルなウィンドウが表示されればOKです。
 「閉じる」ボタンを押して閉じましょう。

wxGladeのインストール
wxGladeもパッケージマネージャから「python-wxglade」というパッケージ名でインストールできます。
$ sudo apt-get install python-wxglade

wxGladeを起動するには、Ubuntuのメニューバーから「アプリケーション」→「プログラミング」→「wxGlade」です。
何やら3つのウィンドウが立ち上がりましたね。
とりあえずは一番左側のものがメインウィンドウ(別名ツールボックス)です。これを閉じるとwxGladeが終了します。
他のウィンドウはメインウィンドウの「View」メニューから開くことができます。
真ん中のはプロパティ(ウィンドウ)、右のはツリー(ウィンドウ)と呼ぶことにしましょう。

チュートリアルですか。
  1. まずは、ツールボックス(メインウィンドウのGUI部品が並んでいるところ)から一番左上にある「Add a Frame」をクリックします。追加するフレームに対する設定ウィンドウが表示されます。
    基本となるフレームですのでbase classは「wxFrame」を選択しましょう。Class名はお好きなように。「OK」をクリックします。プレビュー画面が表示されます。
  2.  例えばフレームのタイトル(ウィンドウタイトル)を変えるには、プロパティの「Widget」タブにて、「Title」の欄を書き換えましょう。書き換えてEnterキーを叩くとすぐさまプレビューに反映されます。
  3. メニューバーを追加するには、プロパティの「Widget」タブにて「Has MenuBar」のチェックを入れます。
    プロパティがメニューバーのものに切り替わり、「Edit Menu」をクリックするとメニュー項目を編集するためのウィンドウが表示されます。
    「Add」をクリックし、Labelを好きに編集、「>」で一つ下の階層とする。といった操作でメニューバーを作れます。「適用」ボタンですぐさまプレビューに反映されます。
  4. 基本フレーム上に部品を置いていきますが、
    基本的にはまず「Sizer」を選択してプレビュー上をクリックして追加
    (追加できる場所ではマウスが「+」マークに変化)、
    追加した「Sizer」のプロパティでスロット数(Proportion)を設定(部品配置数)、
    追加した「Sizer」の下に何か部品を追加する。
    という手順です。「Sizer」の下に「Sizer」を追加して階層構造とすることもできます。
  5. 最後にコード出力方法についてです。
    ツリーで一番上のApplicationを選択します。
    プロパティにて出力する言語(今回はPython)、ファイル名(Output path)を設定して「Generate code」ボタンでコードを出力します。
  6. 生成されたスクリプトを実行すると作成した通りのウィンドウが表示されます。
中身は何もないので閉じるぐらいしかできませんが。。。簡単にハリボテGUIが出来るということです。
実践編に続く?