tag:blogger.com,1999:blog-28965967405521171302024-03-14T02:08:52.230+09:00Sound and CodeJ-3http://www.blogger.com/profile/14033363500406811468noreply@blogger.comBlogger21125tag:blogger.com,1999:blog-2896596740552117130.post-56153131924370809772013-04-18T23:44:00.000+09:002013-04-18T23:44:12.588+09:00Firefox OS on PandaBoard ES (3)<a href="http://sound-and-code.blogspot.jp/2013/04/firefox-os-on-pandaboard-es-2.html">前回</a>、USB miniコネクタのケーブルがないため先に進まなかったが、買ってきたので再トライ。<br />
<br />
PandaBoardのOTG USBのコネクタにケーブルを接続して、PCに接続。するとホストOSであるWindows8でPandaBoardが認識されることが確認できた。確認はデバイスマネージャにデバイスが追加されることで確認したが、デバイス名にはGoogleという文字が。。。まあ、Android端末として起動しているからということか。。<br />
<br />
VMware上のUbuntuからもlsusbを実行すると。。。<br />
<br />
Bus 001 Device 012: ID 18d1:d002 Google Inc.<br />
<br />
と出てくるのが確認できる。<br />
<br />
次は<a href="https://github.com/mozilla-b2g/android-device-panda">このページ</a>のREADMEのステップ2と3を実行する。ステップ1はビルドのシェルを実行した時点で完了しているのでスキップしていいとのこと。<br />
<br />
USBを挿入せずに、PandaBoardをUSB OTG経由でPCに接続、そして電源投入。するとLEDが一つだけ点灯する。その後Ubuntuからlsusbを実行すると。。。<br />
<br />
Bus 001 Device 031: ID 0451:d010 Texas Instruments, Inc.<br />
<br />
と出てくるので、やはりGoogleとでるのはAndroidが起動していたからという事で落ち着いた。<br />
<br />
早速、ステップ2のコマンド<br />
<br />
> device/ti/panda/usbboot device/ti/panda/bootloader.bin<br />
<br />
を実行すると。。。<br />
<br />
<br />
using built-in 2ndstage.bin<br />
reading ASIC ID<br />
CHIP: 4440<br />
IDEN: 0000000000000000000000000000000000000000<br />
MPKH: 0000000000000000000000000000000000000000000000000000000000000000<br />
CRC0: 229e85ba<br />
CRC1: 00000000<br />
sending 2ndstage to target... f0030002<br />
waiting for 2ndstage response...<br />
<div>
<br /></div>
<div>
と出力されたまま、停止。。。。PandaBoardもさっきまで光っていたLEDも消えており、どうも失敗しているようにみえる。。。</div>
<div>
<br /></div>
<div>
再度、<a href="https://developer.mozilla.org/ja/docs/Mozilla/Boot_to_Gecko/Pandaboard">このページ</a>を確認すると以下の既知の問題についての説明があった。</div>
<div>
<div>
<blockquote class="tr_bq">
USB ブートを使用した際の "waiting for OMAP4XXX..."<br />もし、このメッセージが表示されたら、全てのケーブルを PandaBoard から外してください。PandaBoard に接続するのは USB のみです。電源は接続しません。この状態で、sudo で usbboot を実行してください。</blockquote>
</div>
</div>
という訳で、PandaBoardにはUSBのみ接続して、今回はsudoを付加して<br />
<br />
<br />
> <span style="color: red;">sudo</span> device/ti/panda/usbboot device/ti/panda/bootloader.bin<br />
<div>
<br /></div>
<br />
<br />
実行すると。。。。何も変わらない。。。時間がかかるだけなのか?時間がないので今日はこれでおしまい。<br />
<br />
<br />J-3http://www.blogger.com/profile/14033363500406811468noreply@blogger.com0tag:blogger.com,1999:blog-2896596740552117130.post-20777491222257521252013-04-17T23:46:00.001+09:002013-04-17T23:50:22.680+09:00Firefox OS on PandaBoard ES (2)<a href="http://sound-and-code.blogspot.jp/2013/04/firefox-os-on-pandaboard-es-1.html">前回</a>、PandaBoard用のAndroidをLinaroのイメージを利用して作ったが、ハングするという問題があるが、USB通信させるために必要な設定が可能であるかを確認してみた。<br />
その結果、必要な設定はAndroid側に必要なのではなく、開発PC側に必要だという事に気が付いた。。。^^;<br />
<br />
そもそも<a href="http://source.android.com/source/initializing.html#configuring-usb-access">このページ</a>には<br />
<blockquote class="tr_bq">
Under GNU/linux systems (and specifically under Ubuntu systems), regular users can't directly access USB devices by default. <span style="color: red;">The system</span> needs to <span style="color: red;">be configured</span> to allow such access.</blockquote>
と書いてあるわけで、そのシステム(=GNU/linux)は設定される必要がある、ときちんと書いてあるのだが、読み飛ばしていたため、勝手な解釈をしてしまっていた訳だ。真夜中のクラブ活動的なところがあるとはいえ、もう少し落ち着てやらねば。。。<br />
<br />
気を取り直して、Ubuntu側で以下のコマンドを実行し、指定通りの内容のファイルを作成する。<br />
<br />
> /etc/udev/rules.d<br />
<div>
> gedit 51-android.rules</div>
<div>
<br /></div>
<div>
ただし、Mozillaの説明では</div>
<div>
<blockquote class="tr_bq">
B2G に対しては、安全に使用するために、ファイルモードを "0666" に設定します。</blockquote>
と書いてあるので、ファイルを作成後、以下のコマンドを実行する。<br />
<br />
> sudo chmod 0666 51-android.rules<br />
<br /></div>
<div>
さて、これで接続できるだろうとリトライするも何も変化なし。lsusbでもTI関係の出力は出ないし、そもそもホストOSであるWindowsでも認識されていない。。。配線が間違っているのかと確認してみると、あれ?PandaBoardの基板にもう一つUSBと書かれたコネクタがあるぞ。。。嫌な予感がして、<a href="http://pandaboard.org/content/resources/references">PandaBoard本家のサイト</a>で確認すると、やはり新たに見つけたUSBコネクタがUSB OTG対応のコネクタということが判明。しかし、このコネクタはmini USBなので、手元に使えるケーブルがないので、今日はどうすることもできない。<br />
<br />
という訳で、次はmini USBコネクタのケーブルを買ってからトライだ。<br />
<br />
※ ハングの問題はまだ原因究明出来ていないが、PandaBoardに接続したマウスを頻繁に操作しているとハングしないので、もしかするとスクリーンセーバー起動後に復旧出来なくなっているのか?</div>
J-3http://www.blogger.com/profile/14033363500406811468noreply@blogger.com0tag:blogger.com,1999:blog-2896596740552117130.post-32142099105134737692013-04-15T23:17:00.001+09:002013-04-17T23:47:22.678+09:00Firefox OS on PandaBoard ES (1)昨年度はPandaBoard ESを別の目的で使用していたが、ここでは報告することができない内容だったのだが、今回は公開しても問題ない内容なので、手順を記録する意味で記す。<br />
<br />
PandaBoard ESで動作させるのは、FirefoxOS。<br />
<br />
◆開発環境<br />
Ubuntu 12.04 on VMware Player on Windows8 Professional<br />
Linuxの必要条件は<a href="https://developer.mozilla.org/ja/docs/Mozilla/Boot_to_Gecko/B2G_build_prerequisites#Linux_.E3.81.A7.E3.81.AE.E5.BF.85.E8.A6.81.E6.9D.A1.E4.BB.B6">ここ</a>に書かれているので、それらを満たすようにする。 <br />
<br />
◆SDカードの初期化<br />
<br />
とりあえず<a href="http://omappedia.org/wiki/Minimal-FS_SD_Configuration">ここ</a>の情報をもとにSDカードを初期化。<br />
<br />
> sudo ./omap3-mkcard.sh /dev/sdb <br />
<br />
./omap3-mkcard.sh: 37: ./omap3-mkcard.sh: kpartx: not found<br />
というエラーが出るので、apt-getでインストール。<br />
<br />
<br />
> sudo apt-get install kpartx<br />
これで再度シェルを実行するとSDカードのパーティションが正常に分割された。<br />
パーティションは次の二つに分割されればOK。<br />
<ol>
<li>W95FAT32(LBA)タイプでBootable74MB</li>
<li>Linuxタイプの8.0GB</li>
</ol>
◆AndroidのSDカード作成<br />
<br />
Firefox OSの動作環境を作るためには一度AndroidのIceCream Sandwichを起動できるSDカードを準備しないといけないらしい。 <br />
ICSをビルドするのはしんどいので、<a href="https://releases.linaro.org/13.03/android/panda/howto">ここ</a>の情報をもとにイメージをダウンロードして、SDカードの構築を行う。<br />
<ol>
</ol>
まず<a href="https://releases.linaro.org/13.03/android/panda/">ここ</a>のページから 、boot.tar.bz2、system.tar.bz2、userdata.tar.bz2の3ファイルをダウンロードする。<br />
<ol>
</ol>
次のコマンドでLinaroイメージツールをインストールする。 <br />
<ol>
</ol>
> sudo add-apt-repository ppa:linaro-maintainers/tools<br />
> sudo apt-get update<br />
> sudo apt-get install linaro-image-tools<br />
> sudo apt-get install bzr<br />
> bzr branch lp:linaro-image-tools<br />
<br />
次のコマンドを実行した結果がtrueならば、 <br />
<br />
<pre class="prettyprint prettyprinted"><span class="pln"><span class="pln">> gsettings </span><span class="kwd">get</span><span class="pln"> org</span><span class="pun">.</span><span class="pln">gnome</span><span class="pun">.</span><span class="pln">desktop</span><span class="pun">.</span><span class="pln">media</span><span class="pun">-</span><span class="pln">handling automount</span></span></pre>
以下のコマンドを実行する(自動マウントの無効化)。<br />
<pre class="prettyprint prettyprinted"><span class="pln"><span class="pln">> </span>gsettings </span><span class="kwd">set</span><span class="pln"> org</span><span class="pun">.</span><span class="pln">gnome</span><span class="pun">.</span><span class="pln">desktop</span><span class="pun">.</span><span class="pln">media</span><span class="pun">-</span><span class="pln">handling automount </span><span class="kwd">false</span></pre>
<br />
次のコマンドを実行した結果がtrueならば、 <br />
<br />
> gsettings get org.gnome.desktop.media-handling automount-open<br />
以下のコマンドを実行する(自動オープンの無効化)。<br />
> gsettings set org.gnome.desktop.media-handling automount-open false<br />
<br />
※Linaroのページでは自動マウント、自動オープンの無効化はdconfを使っていたのだが、エラーが出て正しく動作しないので、上記コマンドを代用した。<br />
<br />
次にダウンロードしたファイルがあるフォルダに移動し、以下のコマンドを実行(赤字のドライブ名は環境によって違うので、各自の環境に合わせて変更すること)。<br />
> sudo linaro-android-media-create --mmc <span style="color: red;">/dev/sdb</span> --dev panda --boot boot.tar.bz2 --system system.tar.bz2 --userdata userdata.tar.bz2<br />
<br />
※ここで、なぜか/dev/sdb1がresource busyと怒られてエラーだらけとなっていたが、VMware PlayerからSDカードリーダーを切断し、再接続したらエラーは回避された。<br />
<br />
この手順の後で確かにSDカードに色々書き込まれていることが確認できる。<br />
<br />
次に以下のコマンドでグラフィックスライブラリをインストールするらしい。<br />
<br />
> wget http://people.linaro.org/~vishalbhoj/install-binaries-4.0.4.sh<br />
> chmod a+x install-binaries-4.0.4.sh<br />
> ./install-binaries-4.0.4.sh<br />
<br />
なお3番目のコマンドはライセンス規約を読まされて最後にI ACCEPTと入力しないと失敗するので注意。<br />
<br />
最後に自動マウント、自動オープンを有効にする。<br />
<br />
> gsettings set org.gnome.desktop.media-handling automount true<br />
> gsettings set org.gnome.desktop.media-handling automount-open true<br />
<br />
以上の手順で作成されたSDカードをPandaBoard ESに挿入して起動すると、Androidが起動して、マウスで操作できることは確認できた。PCとserial接続してminicomでアクセスすることもできた。<br />
しかし、なぜか時間が経つと、Androidが固まり、マウスもminicomも反応しなくなる問題が発生。。。<br />
<br />
<br />
◆Firefox OSのダウンロード&ビルド<br />
<br />
並行して、<a href="https://developer.mozilla.org/ja/docs/Mozilla/Boot_to_Gecko/B2G_build_prerequisites">ここ</a>の情報をもとにFirefox OSのプロジェクトのダウンロードとビルドを行う。ちなみに、ダウンロードは6時間くらいかかったような気がする。<br />
また、ビルドも途中で以下のエラー出力を筆頭にして大量のエラーが発生するが、<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=403449">ここ</a>の情報を見る限りはNSPRのインストールができていないことが原因の様子。<br />
<br />
external/negatus/src/Buffer.h:8:21: error: prtypes.h: No such file or directory<br />
<br />
NSPRは<a href="https://developer.mozilla.org/ja/docs/NSPR">ここ</a>のページに書いてある通りNetspace Portable Runtimeだそうです。以下のコマンドでインストールできることも書いてある。<br />
<br />
> sudo apt-get install libnspr4-dev<br />
<br />
再度ビルドすると、一時間はかからずに完了する。 <br />
この後の手順はPandaBoard ESとPCがUSB接続できてからとなるはずなので、反応しなくなる問題を解決しないといけない。。。<br />
<br />
※2013/04/17 ラベルをつけ忘れていたので、追加。<br />
<br />J-3http://www.blogger.com/profile/14033363500406811468noreply@blogger.com0tag:blogger.com,1999:blog-2896596740552117130.post-34715411133246584852013-04-14T16:25:00.001+09:002013-04-14T16:25:35.019+09:00Windows8やはりMacBookAirでは色々とリソース不足なので、Windows8 PCを購入。ノートパソコンではなく、デスクトップ。<br />
<br />
今後は、Windows+Ubuntu on VMwareで色々試したりしようかと思っている。<br />
MacBookAirは今でリモートデスクトップでWindowsマシンを制御するのに利用する予定。 J-3http://www.blogger.com/profile/14033363500406811468noreply@blogger.com0tag:blogger.com,1999:blog-2896596740552117130.post-72064789788121063512013-01-17T00:02:00.000+09:002013-01-17T00:02:00.687+09:00what's transferable objects?元ネタは<a href="http://updates.html5rocks.com/2011/12/Transferable-Objects-Lightning-Fast">こちら</a>。<br />
workers with transferable objectとは何か?を調べて見つけたページ。<br />
2011年の投稿なので結構前からある技術の様だ。<br />
<h2>
<span style="color: red;">transferable object以前</span></h2>
<br />
chrome 13でweb workerとmain process間でデータのやり取りを行うのに<a href="https://developer.mozilla.org/en-US/docs/DOM/The_structured_clone_algorithm">structured cloning</a>と呼ばれる(HTML5の仕様に記載されているらしい)方法が使われていた。これはJavaScriptの複雑なオブジェクトをシリアライズする方法でJSONよりも使える範囲は広くImageObjectやRegExpとかでもOK。だが、オブジェクトは新規にクローンを作って伝達する仕組みになっているので、メモリコピーが発生している分遅く、H/Wスペックは不明だが、32MBのArrayBufferをweb workerに転送するのに数百ミリ秒かかるらしい。<br />
<br />
<h2>
<span style="color: red;">でtransferable objectとは?</span></h2>
そんなstructured cloningの課題を解決する方法として開発されchromeに採用されたのがtransferable object。メモリコピーがボトルネックだった訳なので、当然の様にzero-copyであり、C/C++の世界の参照渡しを想像してもらえばよい。しかし、完全に同じと言う訳ではなく、オブジェクトを送信してしまうと、そのオブジェクトは送信元のコンテキストから送信先のコンテキストに移動してしまい、送信元のコンテキストからクリアされ、利用する事が出来なくなる。うーん、使い方を気をつけないと行けない制約だ。<br />
<br />
で、transferable objectを使う為のAPIは専用になっており、以下のAPIがchrome/v8には用意されている。<br />
<br />
<pre class=" prettyprint" style="background-color: #444444; border-bottom-left-radius: 8px; border-bottom-right-radius: 8px; border-top-left-radius: 8px; border-top-right-radius: 8px; color: white; font-family: 'Source Code Pro', monospace; font-size: 13px; line-height: 16px; margin: 1em auto; padding: 1em; white-space: pre-wrap; word-wrap: break-word;"><code style="background-color: transparent; background-position: initial initial; background-repeat: initial initial; border-bottom-left-radius: 5px; border-bottom-right-radius: 5px; border-top-left-radius: 5px; border-top-right-radius: 5px; font-family: 'Source Code Pro', monospace; font-size: 1em; padding: 0px;"><span class="pln">worker</span><span class="pun">.</span><span class="pln">webkitPostMessage</span><span class="pun">(</span><span class="pln">arrayBuffer</span><span class="pun">,</span><span class="pln"> </span><span class="pun">[</span><span class="pln">arrayBuffer</span><span class="pun">]);</span><span class="pln">
window</span><span class="pun">.</span><span class="pln">webkitPostMessage</span><span class="pun">(</span><span class="pln">arrayBuffer</span><span class="pun">,</span><span class="pln"> targetOrigin</span><span class="pun">,</span><span class="pln"> </span><span class="pun">[</span><span class="pln">arrayBuffer</span><span class="pun">]);</span></code></pre>
<br />
<h2>
<span style="color: red;">どの程度早くなるのか?</span></h2>
で最終的にどの程度早くなったのかを計測した結果が書かれている。それによると、32MBのArrayBufferを転送するのが302msecから6.6msecまで短縮されており、効果としては絶大なものがある。しかし、32MBものデータを転送するのか?とか考える人もいるだろうと思うのだが、WebGLのテクスチャー転送などで使えると書いてある(ちょっとした自動車のモデルを高精度に描画しようとすると、数MBは楽勝なので、確かに考えられるレベルではあると思う)。<br />
<br />
<br />
<br />
<br />
<br />
<br />J-3http://www.blogger.com/profile/14033363500406811468noreply@blogger.com0tag:blogger.com,1999:blog-2896596740552117130.post-60488158298924673372012-11-23T23:53:00.000+09:002012-11-24T00:00:22.464+09:00webkit w/ gtk on 64 bit Ubuntu12.04Ubuntu12.04 (64bit)でGTK版のWebKitをビルドする時、libsecret-1-devをapt-getしようとしてもnot foundと言う事でインストール出来ない。<br />
<br />
このライブラリはwebkit.orgでインストールを指定されているものであり、当然インストールされていない状況でWebKitをビルドしようとしても、以下の通り、エラーとなる。<br />
<br />
> Tools/Scripts/build-webkit --gtk<br />
..... <br />
checking for LIBSECRET... no<br />
configure: error: Package requirements (libsecret-1) were not met:<br />
<br />
No package 'libsecret-1' found<br />
.....<br />
<br />
当然なければソースコードからインストールする必要があると言う事で、以下のサイトを参考にインストール。<br />
<br />
http://git.gnome.org/browse/libsecret/<br />
<br />
gitのアドレスが記載されているので、そのアドレスからソースコードを入手。<br />
<br />
> git clone git://git.gnome.org/libsecret<br />
<br />
その後はお決まりの手順でmake & install。<br />
<br />
> cd libsecret<br />
> ./autogen.sh<br />
> make<br />
> sudo make install<br />
<br />
これでGTK版のWebKitはビルド出来る。<br />
<br />J-3http://www.blogger.com/profile/14033363500406811468noreply@blogger.com0tag:blogger.com,1999:blog-2896596740552117130.post-47491606907240223342012-09-23T23:58:00.000+09:002012-09-23T23:58:03.114+09:00Skia for NaCl最近、色々と事情があり調べなければ行けない事がコロコロと移り変わるので結構しんどい。で、今はSkiaについて。<div>
<br /></div>
<div>
SkiaのSource Codeを調べていると、どうも<a href="http://code.google.com/p/skia/source/browse/#svn%2Fnacl">nacl関係のディレクトリ</a>が作られている。naclと言えばNative Clientの事だろう。つまりはnacl環境で使えるSkiaが開発されていると言う事か?とかなり期待。</div>
<div>
<br /></div>
<div>
この中のindex.htmlを見てみると、どうやらIntel系CPU向けのnaclでskiaを動かそうという試みらしい。</div>
<div>
ChangeLogから色々情報を探してみると、どうも2週間程度前から開始されたプロジェクトの様で、まだ動作するには色々やる事がある様子。今の所、サンプルHTMLとサンプルサーバまでの様で、naclport内でskiaをビルドするのはまだ出来ていない。今後に期待ですね。</div>
J-3http://www.blogger.com/profile/14033363500406811468noreply@blogger.com0tag:blogger.com,1999:blog-2896596740552117130.post-57573872437379695242012-09-02T01:28:00.002+09:002012-09-02T01:28:33.750+09:00making and running CUDA sample program今回は<a href="http://sound-and-code.blogspot.jp/2012/09/installing-cuda-programming-environment.html">前回</a>インストールしたCUDAの開発環境で正しいのか確認するため、サンプルプログラムでmakeして、実行できるか確認してみる。<br />
<br />
<br />
<ul>
<li>ターミナルを開いて以下のパスに移動する。</li>
</ul>
<div>
/Developer/GPU\ Computing/C</div>
<br />
<br />
<ul>
<li>中にサンプルプログラムが入っているので、ターミナルから"make"を実行する。</li>
</ul>
<div>
このときに警告が多数出力されるのが若干不安。。。でも、ビルドは完了した。<br />
<br />
<br />
<ul>
<li>ビルド結果は以下のパスにあるので、そこに移動。かなりのファイル数がある。。。そりゃ、ビルドに時間かかるわな。。。</li>
</ul>
<div>
bin/darwin/release/</div>
<div>
<br /></div>
<div>
以下、サンプル画面を適当にコピー。これはsmokeParticles。</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgEe_LTLRFN7aaO32oEUYsBOgLSm_AW5Z5cfhVvaTsxboxR5GGrF_dNlk5NHPI_ZkZY3jAkgyA9m2ifrcMJw0MehG6olwxCoHhxMjwjNPD9ebOWOcs93i06ToTTcx3UckvTu47vsIpsIu4/s1600/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882012-09-02+1.12.25%EF%BC%89.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="206" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgEe_LTLRFN7aaO32oEUYsBOgLSm_AW5Z5cfhVvaTsxboxR5GGrF_dNlk5NHPI_ZkZY3jAkgyA9m2ifrcMJw0MehG6olwxCoHhxMjwjNPD9ebOWOcs93i06ToTTcx3UckvTu47vsIpsIu4/s320/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882012-09-02+1.12.25%EF%BC%89.png" width="320" /></a></div>
<div>
次はMandelbrot。</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRMjJ4fz_WmWr2Xi8K8nKlsUqW8R5nFIfdHtQ-eOD0145ZTTCeQx5AyMBZQsAc2XibYPVUpy5CL3Vwdz6MkfbOFHy5cb0XbgGfQxvx9SizoWgEkhcD6P2uv03b6u6VZFjoXoK16vRYLVM/s1600/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882012-09-02+1.16.54%EF%BC%89.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="255" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRMjJ4fz_WmWr2Xi8K8nKlsUqW8R5nFIfdHtQ-eOD0145ZTTCeQx5AyMBZQsAc2XibYPVUpy5CL3Vwdz6MkfbOFHy5cb0XbgGfQxvx9SizoWgEkhcD6P2uv03b6u6VZFjoXoK16vRYLVM/s320/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882012-09-02+1.16.54%EF%BC%89.png" width="320" /></a></div>
<div>
次はpostProcessGL。</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCYig7EuzR6qEI9wJwIM_T-F1EfBvDOGAnoDu4AuzAJY4EzUztCibcuXF5IZadgShlcSR4CVN1HEvbLG959mO1PA5cA5XbWC60vfvla2xccdB0Poau9e4MmdncJc1Xy-t_7sxTUZfx3Uw/s1600/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882012-09-02+1.18.59%EF%BC%89.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCYig7EuzR6qEI9wJwIM_T-F1EfBvDOGAnoDu4AuzAJY4EzUztCibcuXF5IZadgShlcSR4CVN1HEvbLG959mO1PA5cA5XbWC60vfvla2xccdB0Poau9e4MmdncJc1Xy-t_7sxTUZfx3Uw/s320/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882012-09-02+1.18.59%EF%BC%89.png" width="308" /></a></div>
<div>
次はparticles。</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_dGG93NsuAh_cA0_tbeZat0qY0oDE-UroIOVU2GFKpSHj5qnsHihEpGPnYprZhETj_raJIvC0cYZMD2B4xVVjzXDihm1M-cQdCDrmgtH2pkZy_q02hwuzHQD5X1cUaMtlKJJJiPxApcE/s1600/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882012-09-02+1.20.02%EF%BC%89.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="258" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_dGG93NsuAh_cA0_tbeZat0qY0oDE-UroIOVU2GFKpSHj5qnsHihEpGPnYprZhETj_raJIvC0cYZMD2B4xVVjzXDihm1M-cQdCDrmgtH2pkZy_q02hwuzHQD5X1cUaMtlKJJJiPxApcE/s320/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882012-09-02+1.20.02%EF%BC%89.png" width="320" /></a></div>
<div>
次はfluidGL。</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6Xn4Zpo5M1eo3Rri1L9b0DOtuhCToLisC4vZ4lit7I_8lFu26xz-tmnv_98DqnAtz3fe7sDnlVbPGxws_wZ64g0Dh-O-9rv87F8OnbBBckIq9zLTfxsjGzNl8sVPTJ5hogy1ALFCMWIY/s1600/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882012-09-02+1.21.19%EF%BC%89.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6Xn4Zpo5M1eo3Rri1L9b0DOtuhCToLisC4vZ4lit7I_8lFu26xz-tmnv_98DqnAtz3fe7sDnlVbPGxws_wZ64g0Dh-O-9rv87F8OnbBBckIq9zLTfxsjGzNl8sVPTJ5hogy1ALFCMWIY/s320/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882012-09-02+1.21.19%EF%BC%89.png" width="308" /></a></div>
<div>
次はsimpleGL。</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgrAUjzFE-szjzY3yv7Qyn38EhsYuSw1st-KlfVcO7vi8FoGnLv1U1MUWMXngult_Bucd0CXWOXOHbJpCeOH64AbekdY0IgFBisM08IyDepu1mbaYhxXDSNeVS93ARdIaCSzADHxWbtbkQ/s1600/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882012-09-02+1.22.37%EF%BC%89.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgrAUjzFE-szjzY3yv7Qyn38EhsYuSw1st-KlfVcO7vi8FoGnLv1U1MUWMXngult_Bucd0CXWOXOHbJpCeOH64AbekdY0IgFBisM08IyDepu1mbaYhxXDSNeVS93ARdIaCSzADHxWbtbkQ/s320/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882012-09-02+1.22.37%EF%BC%89.png" width="308" /></a></div>
<div>
次はvolumeRender。</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7HGg8h6RL2fBF-1sMhewg-fwODpJn2KVmJ-GHlFodOrA8pGGtGp736EBQYXv7NJ9vP2iiezyR0TI4mHL5wWNxsisgctiIxXBxqbgXjN3j7yXNtymJhcGRMPeGluhXW2kQQbssSqd0PIA/s1600/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882012-09-02+1.23.35%EF%BC%89.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7HGg8h6RL2fBF-1sMhewg-fwODpJn2KVmJ-GHlFodOrA8pGGtGp736EBQYXv7NJ9vP2iiezyR0TI4mHL5wWNxsisgctiIxXBxqbgXjN3j7yXNtymJhcGRMPeGluhXW2kQQbssSqd0PIA/s320/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882012-09-02+1.23.35%EF%BC%89.png" width="308" /></a></div>
<div>
他にも色々あるのだが、GeForceのバージョンが古いのでサポートしていない機能を使っているサンプルは動作しないものも少なからずあった。。。</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
</div>
<div>
<br /></div>
<div>
<br /></div>
J-3http://www.blogger.com/profile/14033363500406811468noreply@blogger.com0tag:blogger.com,1999:blog-2896596740552117130.post-8816442282540900782012-09-02T00:44:00.001+09:002012-09-02T00:44:21.298+09:00Installing CUDA programming environment on MacBookAir今回はMacでCUDAを使ってみようと思い、開発環境を構築してみた。<div>
<br /></div>
<div>
<div class="p1">
今使っているMacBookAirはNVIDIA GeForce 320MをGPUとして搭載しているので、CUDAを使えるはず。確認したら大丈夫だったので、構築開始。</div>
<div class="p1">
<br /></div>
</div>
<div>
CUDAのダウンロードは<a href="http://developer.nvidia.com/cuda/cuda-downloads">NVIDIAのこのページ</a>から行う。</div>
<div>
<div>
現時点のCUDAの最新版は5だが、安定板は4.2なのでそちらを選択。</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnL4Pi6zLL-K5d607Q3f0832ZlWXAoWhNRF5NAU3zqIpi5jfqvg_lVkCbZvKNDAIpPTgtCETMhrFIBOMSjnYGmlzRD7hOi_EDUyGFiSVcm_hUwJcfLdybnARt8yQY0Guwm9i21nl11Zhs/s1600/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882012-09-02+0.41.13%EF%BC%89.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="84" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnL4Pi6zLL-K5d607Q3f0832ZlWXAoWhNRF5NAU3zqIpi5jfqvg_lVkCbZvKNDAIpPTgtCETMhrFIBOMSjnYGmlzRD7hOi_EDUyGFiSVcm_hUwJcfLdybnARt8yQY0Guwm9i21nl11Zhs/s320/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882012-09-02+0.41.13%EF%BC%89.png" width="320" /></a></div>
<div>
<br /></div>
<div>
Mac用にはCUDA toolkit、ドライバ、SDKの3種類のファイルをダウンロード。ちなみに、今回ダウンロードしたのは以下のファイル。macosってMac OSの事ね。。。「まこす」って何?とか一瞬でも思ってしまった自分がいた。。。</div>
<div>
<ul>
<li>cudatoolkit_4.2.9_macos.pkg</li>
<li>devdriver_4.2.10_macos.dmg</li>
<li>gpucomputingsdk_4.2.9_macos.pkg</li>
</ul>
<br />■Toolkitのインストール</div>
</div>
<div>
<ul>
<li>cudatoolkit_4.2.9_macos.pkgをダブルクリックして暫くすると以下のウィンドウが表示される。</li>
</ul>
</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlvSwNJ-ARHNmsSZ6Ik13VnQRr_yI0rAQPIy8Cg4Z7YSfJ_KcMUK4KV7-XwPl6Ue3d1_IGgQEOSragtPq1WlHD6y-0skZm6QyLwwozcbD4sql4S9kG6FIZmMLTkrRVdbhkCTKSvjqpYBQ/s1600/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882012-09-02+0.09.31%EF%BC%89.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="232" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlvSwNJ-ARHNmsSZ6Ik13VnQRr_yI0rAQPIy8Cg4Z7YSfJ_KcMUK4KV7-XwPl6Ue3d1_IGgQEOSragtPq1WlHD6y-0skZm6QyLwwozcbD4sql4S9kG6FIZmMLTkrRVdbhkCTKSvjqpYBQ/s320/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882012-09-02+0.09.31%EF%BC%89.png" width="320" /></a></div>
<div>
<ul>
<li>ここで「続ける」をクリックすると、以下のメッセージが表示される。1GB位なら問題なし。</li>
</ul>
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_eSJrNfQUxewfuEw8_iiwKYzMH58Mie3YyP-0flZsWU8KUyBNpGJQbdRYRRjLtdV39-3Ah5tHh5cPg7UPiAQQkUUuetQ-B3TahWMRcVBEHVlk9iqh4QfkFP2AeCmG9T3WqmThQPhE2ko/s1600/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882012-09-02+0.12.40%EF%BC%89.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="237" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_eSJrNfQUxewfuEw8_iiwKYzMH58Mie3YyP-0flZsWU8KUyBNpGJQbdRYRRjLtdV39-3Ah5tHh5cPg7UPiAQQkUUuetQ-B3TahWMRcVBEHVlk9iqh4QfkFP2AeCmG9T3WqmThQPhE2ko/s320/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882012-09-02+0.12.40%EF%BC%89.png" width="320" /></a></div>
<div>
<ul>
<li>「インストール」をクリックすると、インストールが開始される。</li>
</ul>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOrvzsU5aPxmQe_Rrhwe74cx_tKn1-hP7hNI-Y29L9nyLK2N7eBtsMR2AbxRdwkpIRFEP_00a9U61YXiI_FvjibwUU_Y9D2X-YEa9x-WHNwJY-aRev7N8dS_fbSYJVlj6YL1R1gpFcgPk/s1600/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882012-09-02+0.14.19%EF%BC%89.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="237" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOrvzsU5aPxmQe_Rrhwe74cx_tKn1-hP7hNI-Y29L9nyLK2N7eBtsMR2AbxRdwkpIRFEP_00a9U61YXiI_FvjibwUU_Y9D2X-YEa9x-WHNwJY-aRev7N8dS_fbSYJVlj6YL1R1gpFcgPk/s320/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882012-09-02+0.14.19%EF%BC%89.png" width="320" /></a></div>
<br />
<ul>
<li> そのまま放置されると、以下の様にインストールは成功するので、「閉じる」をクリックして、めでたくインストール完了。</li>
</ul>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgMT-5JGOwOyU3Ws8Q-honHvRDUUp4h8xd9OqAjjV1a2fazz5W3BPCwY3CdNGnyFT2YpMWd3iZVVyOK8GYw9PRsxZVUZxp-OAMSN63tf7j8DSx4UY-t_52cfc0FFMxkVjgebjxWmRc626g/s1600/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882012-09-02+0.15.08%EF%BC%89.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="237" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgMT-5JGOwOyU3Ws8Q-honHvRDUUp4h8xd9OqAjjV1a2fazz5W3BPCwY3CdNGnyFT2YpMWd3iZVVyOK8GYw9PRsxZVUZxp-OAMSN63tf7j8DSx4UY-t_52cfc0FFMxkVjgebjxWmRc626g/s320/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882012-09-02+0.15.08%EF%BC%89.png" width="320" /></a></div>
<div>
■ドライバのインストール</div>
</div>
<div>
<ul>
<li>devdriver_4.2.10_macos.dmgをダブルクリックすると、ディスクイメージの中身が見る事ができるので、CUDADriver.pkgをダブルクリック。</li>
</ul>
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNb7r6zDDMfw61UX3h1oTuLLrmoHOmIf6AVJErqypXziEBy7nY23eHUOqDqVWwAsRrMvWallM3dvJa0tR6nEQ_e0jM7U8Db8TG1J1Jg7h2hArXEgWWVRmbbFFoHlGkgXsCTvw9y1Chv_4/s1600/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882012-09-02+0.17.54%EF%BC%89.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="182" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNb7r6zDDMfw61UX3h1oTuLLrmoHOmIf6AVJErqypXziEBy7nY23eHUOqDqVWwAsRrMvWallM3dvJa0tR6nEQ_e0jM7U8Db8TG1J1Jg7h2hArXEgWWVRmbbFFoHlGkgXsCTvw9y1Chv_4/s320/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882012-09-02+0.17.54%EF%BC%89.png" width="320" /></a></div>
<div>
<ul>
<li>すると、インストーラーのウィンドウが表示される。CUDAアプリが動いているとマズいので、もし起動している場合は全て終了させる様にとの事。</li>
</ul>
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgu07uU7-8FUMPxxF1MRFrwtmsguNVwfePHsBLcFdKCYUBFyWw5MCRjCn9NjiUuRQDPXlgV9Kb0fEPKKdewGcQqYH1o7jOjzb8fDbwvSBg5mOze64SF2dUxezvsJ9_mcZw4but1viZiRWY/s1600/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882012-09-02+0.20.24%EF%BC%89.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="237" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgu07uU7-8FUMPxxF1MRFrwtmsguNVwfePHsBLcFdKCYUBFyWw5MCRjCn9NjiUuRQDPXlgV9Kb0fEPKKdewGcQqYH1o7jOjzb8fDbwvSBg5mOze64SF2dUxezvsJ9_mcZw4but1viZiRWY/s320/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882012-09-02+0.20.24%EF%BC%89.png" width="320" /></a></div>
<div>
<ul>
<li>「続ける」をクリックすると、使用許諾契約が表示される。言語の選択肢が表示されているが、Englishしか選択肢が無いのはご愛嬌。</li>
</ul>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7P3PvCx2gkMP7IOXqcQUz98ROFLlY-9IDDRC1kidMgMAlYecHnxJFQ68dv9ZbCZ5F6c5HHBNVo0inrN-XjvBMuHN-SEDu0cIU_RTdxvsIboWXHMZOB8yId2iH3nxJBInaAfUGhIFhBO0/s1600/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882012-09-02+0.23.08%EF%BC%89.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="237" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7P3PvCx2gkMP7IOXqcQUz98ROFLlY-9IDDRC1kidMgMAlYecHnxJFQ68dv9ZbCZ5F6c5HHBNVo0inrN-XjvBMuHN-SEDu0cIU_RTdxvsIboWXHMZOB8yId2iH3nxJBInaAfUGhIFhBO0/s320/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882012-09-02+0.23.08%EF%BC%89.png" width="320" /></a></div>
<div>
<ul>
<li>「続ける」をクリックすると、確認ポップアップが表示される。</li>
</ul>
</div>
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi41LCJIlOrBzJHftLXXyad6dcV7WSyB3uQq1qSpOxRjjkVeT_-WRqT5G-oPEE0vxXCgP55NXCWcASB5ENdvyw8nRSEM4NTMK41ptIS6f44p-OOGnZeRhVo5ZibOIpbxbgxGW2dQHS-8C0/s1600/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882012-09-02+0.24.03%EF%BC%89.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="119" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi41LCJIlOrBzJHftLXXyad6dcV7WSyB3uQq1qSpOxRjjkVeT_-WRqT5G-oPEE0vxXCgP55NXCWcASB5ENdvyw8nRSEM4NTMK41ptIS6f44p-OOGnZeRhVo5ZibOIpbxbgxGW2dQHS-8C0/s320/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882012-09-02+0.24.03%EF%BC%89.png" width="320" /></a></div>
<div>
<br /></div>
<div>
<ul>
<li>「同意する」をクリックすると、以下の画面。インストール先の選択になると思っていたら、スキップしてインストールの種類になっている。機種によっては選択出来るのかも知れない。</li>
</ul>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3rtK-jUPtYcW1cONvbFai9WeSOlzy9f5q44BBV_lE8ynWYUeIPRdhfe3x6dTo1nJnB41K9YfsTqf_VIl05Ig8mmuxjDXy7AjndZXxIXT-Jkh0KevIJYGDTQ_CcBLw5INIsz1UgZXhxaQ/s1600/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882012-09-02+0.25.03%EF%BC%89.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="237" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3rtK-jUPtYcW1cONvbFai9WeSOlzy9f5q44BBV_lE8ynWYUeIPRdhfe3x6dTo1nJnB41K9YfsTqf_VIl05Ig8mmuxjDXy7AjndZXxIXT-Jkh0KevIJYGDTQ_CcBLw5INIsz1UgZXhxaQ/s320/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882012-09-02+0.25.03%EF%BC%89.png" width="320" /></a></div>
<div>
<ul>
<li>「インストール」をクリックすると、インストールが開始される。</li>
</ul>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgf0Usis7heTMJVmWP2T5MY99oglI2NnW0rNRwZH0VEkfMZDHMnKqMu_7xIw3NvRkSGQDNA9uc6EoxGSue9Oc0AQmxK1PFlRSHX83xtHxaYsVt6y4Ygb4WFRFZ9WJlpLyGY0AUTTjcmGnA/s1600/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882012-09-02+0.27.46%EF%BC%89.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="237" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgf0Usis7heTMJVmWP2T5MY99oglI2NnW0rNRwZH0VEkfMZDHMnKqMu_7xIw3NvRkSGQDNA9uc6EoxGSue9Oc0AQmxK1PFlRSHX83xtHxaYsVt6y4Ygb4WFRFZ9WJlpLyGY0AUTTjcmGnA/s320/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882012-09-02+0.27.46%EF%BC%89.png" width="320" /></a></div>
<div>
<ul>
<li>インストールが完了すると、以下の画面になるので「閉じる」をクリックして、インストール終了。</li>
</ul>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-W7wtsWQV_z3sp5OAkrRpedctlr9btgrBqaDGwjMqzq7Pcr8D89-EuIWe-b9cKapOX3cyB7SI6EFc-nbigpn3UF1ytOaIdQCi94vEwEs0-NzQpPfU95eW0B40sPcB9lvNzScLwRH2s88/s1600/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882012-09-02+0.28.55%EF%BC%89.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="237" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-W7wtsWQV_z3sp5OAkrRpedctlr9btgrBqaDGwjMqzq7Pcr8D89-EuIWe-b9cKapOX3cyB7SI6EFc-nbigpn3UF1ytOaIdQCi94vEwEs0-NzQpPfU95eW0B40sPcB9lvNzScLwRH2s88/s320/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882012-09-02+0.28.55%EF%BC%89.png" width="320" /></a></div>
<div>
■SDKのインストール</div>
</div>
</div>
</div>
<div>
<ul>
<li>gpucomputingsdk_4.2.9_macos.pkgをダブルクリックすると、以下のウィンドウが表示される。</li>
</ul>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNAO4JC4me_E05lU316bw76dyg-hitN2h5RH-4AyaHP34myXpSepTtSG-X-O16swl6Nv2E19-J_0SAu8JP-YUBq8Yjt605XbQD31V-yPa4npgEmfm4NLg7sGlP479kS1nu6_dL5PNRJ1c/s1600/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882012-09-02+0.31.12%EF%BC%89.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="237" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNAO4JC4me_E05lU316bw76dyg-hitN2h5RH-4AyaHP34myXpSepTtSG-X-O16swl6Nv2E19-J_0SAu8JP-YUBq8Yjt605XbQD31V-yPa4npgEmfm4NLg7sGlP479kS1nu6_dL5PNRJ1c/s320/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882012-09-02+0.31.12%EF%BC%89.png" width="320" /></a></div>
<div>
<ul>
<li>「続ける」をクリックすると、使用許諾契約が表示される。今回は言語の選択肢がない。。。</li>
</ul>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhk46r0rPFXUEbCKEKF6VF1VGlTygPJVv6WytuEOq2NNGUeLwfhlY_MCWaNOC0ynoaKoBys9AMN4wRVcLaC0AzeugUfJkxEdvBQP8UCt9_7IpMj3Ga0e0JpOs4v5kEcyiRBd7RyDw68eB4/s1600/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882012-09-02+0.32.07%EF%BC%89.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="237" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhk46r0rPFXUEbCKEKF6VF1VGlTygPJVv6WytuEOq2NNGUeLwfhlY_MCWaNOC0ynoaKoBys9AMN4wRVcLaC0AzeugUfJkxEdvBQP8UCt9_7IpMj3Ga0e0JpOs4v5kEcyiRBd7RyDw68eB4/s320/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882012-09-02+0.32.07%EF%BC%89.png" width="320" /></a></div>
<div>
<ul>
<li>「続ける」をクリックすると、確認ポップアップが表示される。</li>
</ul>
</div>
</div>
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgE2jHlLk72EPYLhal9_AvEKbkqr_DL6Nebp2ikmh3xRBLVxewbe_2jWWrZyMIwVV-HAAwtwWLFKEpH8DOeGi_PzQuFX9z3JxZLmVZ-cmQP9NcuVCgS47l87yOV7IYI1vuIuYtZVdFR_cA/s1600/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882012-09-02+0.32.53%EF%BC%89.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="119" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgE2jHlLk72EPYLhal9_AvEKbkqr_DL6Nebp2ikmh3xRBLVxewbe_2jWWrZyMIwVV-HAAwtwWLFKEpH8DOeGi_PzQuFX9z3JxZLmVZ-cmQP9NcuVCgS47l87yOV7IYI1vuIuYtZVdFR_cA/s320/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882012-09-02+0.32.53%EF%BC%89.png" width="320" /></a></div>
<div>
<ul>
<li>「同意する」をクリックすると、以下の画面。今回はインストール先が選択可能になっている。まあ、SDKだし選択出来てもおかしくない。</li>
</ul>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinY_4vX8TVwiYDlLo_KZXG-7gUBAgi6hcBmKJIsos8mt3QHR_JQm_PuTOGFtugn6XZO6xtJXIMaDiC_DUVZdRIdc3r4H4Qe1yjn35MHAjvgir-vtjLsMCCL5ZFqHTfXzLYSFpYN5KUzkw/s1600/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882012-09-02+0.35.05%EF%BC%89.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="237" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinY_4vX8TVwiYDlLo_KZXG-7gUBAgi6hcBmKJIsos8mt3QHR_JQm_PuTOGFtugn6XZO6xtJXIMaDiC_DUVZdRIdc3r4H4Qe1yjn35MHAjvgir-vtjLsMCCL5ZFqHTfXzLYSFpYN5KUzkw/s320/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882012-09-02+0.35.05%EF%BC%89.png" width="320" /></a></div>
<div>
<ul>
<li>ちなみに「インストール先を変更...」を選択すると、以下の様な画面でHDDの選択が出来る様子だが、今回はデフォルトのままとした。</li>
</ul>
</div>
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYKmEE1ekEwhqcbjJVLtEAjKxedqW01ArZuL3UscgGosM1R8Rb9mZKVYebSGyUWyO4bwIvKM_56e9EvmjN2HhcPBnqm9vWx8nQqqvMlzis3nRCdPoCVYOuBHyOM5iyfv4P2Ue7142Q8yQ/s1600/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882012-09-02+0.35.57%EF%BC%89.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="237" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYKmEE1ekEwhqcbjJVLtEAjKxedqW01ArZuL3UscgGosM1R8Rb9mZKVYebSGyUWyO4bwIvKM_56e9EvmjN2HhcPBnqm9vWx8nQqqvMlzis3nRCdPoCVYOuBHyOM5iyfv4P2Ue7142Q8yQ/s320/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882012-09-02+0.35.57%EF%BC%89.png" width="320" /></a></div>
<div>
<ul>
<li>また「カスタマイズ」を選択すると、以下の様な画面でインストール先フォルダを変更出来る様子だが、今回はデフォルトのママとした。</li>
</ul>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0bSyE30SuX0_imni3K23ddIOMP1edXHBd6-tDvxwK6HqltDwnZ56fpoczBrr6VVMtOeL0Hu6WGjphX7E4Oy_DxuNOwFbEY2x92Ysn52om6309uYzwZ4j7VW2lEKp5csRM9IXU04lp2nI/s1600/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882012-09-02+0.37.50%EF%BC%89.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="237" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0bSyE30SuX0_imni3K23ddIOMP1edXHBd6-tDvxwK6HqltDwnZ56fpoczBrr6VVMtOeL0Hu6WGjphX7E4Oy_DxuNOwFbEY2x92Ysn52om6309uYzwZ4j7VW2lEKp5csRM9IXU04lp2nI/s320/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882012-09-02+0.37.50%EF%BC%89.png" width="320" /></a></div>
<div>
<ul>
<li>「インストール」をクリックすると、インストールが開始される。</li>
</ul>
</div>
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNzMMfELLFCQ7jS_DTJYOws0Fx02cX-1byy4X8jxYj5r-J_Xv1IkSTlUOCFC88VZxjQIQWeGAotWuVIW_9yPQ8cJGA-CFHwiLhnNlbPg-M_ASwB7tb04Dc38GiBdP8cv6qbZV0EGGUKMI/s1600/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882012-09-02+0.39.14%EF%BC%89.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="237" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNzMMfELLFCQ7jS_DTJYOws0Fx02cX-1byy4X8jxYj5r-J_Xv1IkSTlUOCFC88VZxjQIQWeGAotWuVIW_9yPQ8cJGA-CFHwiLhnNlbPg-M_ASwB7tb04Dc38GiBdP8cv6qbZV0EGGUKMI/s320/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882012-09-02+0.39.14%EF%BC%89.png" width="320" /></a></div>
<div>
<ul>
<li>そのまま放置されると、以下の様にインストールは成功するので、「閉じる」をクリックして、めでたくインストール完了。</li>
</ul>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhktfYPOisrzIqiOlgSIUQVzFpbRHJBauVMDvHTVnD7PBqcG4WxVuODiaWvXgeS3IEM4jcuVC6UrTVwzvvQDeTHjiXRKoLN49jx9OrKCGc-_I6CmndXdUMXGxOy_c4mGbhcJZxL39j9hyA/s1600/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882012-09-02+0.40.07%EF%BC%89.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="237" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhktfYPOisrzIqiOlgSIUQVzFpbRHJBauVMDvHTVnD7PBqcG4WxVuODiaWvXgeS3IEM4jcuVC6UrTVwzvvQDeTHjiXRKoLN49jx9OrKCGc-_I6CmndXdUMXGxOy_c4mGbhcJZxL39j9hyA/s320/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%EF%BC%882012-09-02+0.40.07%EF%BC%89.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
インストールなんで、特に詰まる事もなし。次はサンプルでも動かしてみるかな。</div>
</div>
J-3http://www.blogger.com/profile/14033363500406811468noreply@blogger.com0tag:blogger.com,1999:blog-2896596740552117130.post-53294525106660520582012-07-02T23:40:00.000+09:002012-07-02T23:40:38.077+09:00[FIXED]make error on 64 bit Ubuntu12.04現在、64bit Ubuntu12.04上でChromium Browserのビルドを行っているが、Chromium Projectに記載の手順だけでは上手く行かなかったので、メモ。<br />
<br />
makeを実行する手前までは手順通りで問題は顕在化しないが、以下のコマンドを実行するとビルドエラー(エラーログが消失してしまったので定かではないのだが、lib32と言う単語があったような。。。)。<br />
<br />
<blockquote class="tr_bq">
> make chrome BUILDTYPE=Release</blockquote>
<br />
定かでない記憶にあるlib32で想像するに64bit OSでビルドする場合には32bit用ライブラリが必要になる??と言う事かと思い、32bit OSでUbuntu8系で必要と記載のあった以下のコマンドを実行。<br />
<br />
<blockquote class="tr_bq">
<span class="pln">> sudo apt</span><span class="pun">-</span><span class="kwd">get</span><span class="pln"> install bison fakeroot flex g</span><span class="pun">++</span><span class="pln"> g</span><span class="pun">++-</span><span class="pln">multilib gperf </span><span class="pun">\</span><span class="pln"> libapache2</span><span class="pun">-</span><span class="pln">mod</span><span class="pun">-</span><span class="pln">php5 libasound2</span><span class="pun">-</span><span class="pln">dev libbz2</span><span class="pun">-</span><span class="pln">dev libcairo2</span><span class="pun">-</span><span class="pln">dev </span><span class="pun">\</span><span class="pln"> libdbus</span><span class="pun">-</span><span class="pln">glib</span><span class="pun">-</span><span class="lit">1</span><span class="pun">-</span><span class="pln">dev libgconf2</span><span class="pun">-</span><span class="pln">dev libgl1</span><span class="pun">-</span><span class="pln">mesa</span><span class="pun">-</span><span class="pln">dev libglu1</span><span class="pun">-</span><span class="pln">mesa</span><span class="pun">-</span><span class="pln">dev </span><span class="pun">\</span><span class="pln"> libglib2</span><span class="pun">.</span><span class="lit">0</span><span class="pun">-</span><span class="pln">dev libgtk2</span><span class="pun">.</span><span class="lit">0</span><span class="pun">-</span><span class="pln">dev libjpeg62</span><span class="pun">-</span><span class="pln">dev libnspr4</span><span class="pun">-</span><span class="pln">dev libnss3</span><span class="pun">-</span><span class="pln">dev </span><span class="pun">\</span><span class="pln"> libpam0g</span><span class="pun">-</span><span class="pln">dev libsqlite3</span><span class="pun">-</span><span class="pln">dev libxslt1</span><span class="pun">-</span><span class="pln">dev libxss</span><span class="pun">-</span><span class="pln">dev </span><span class="pun">\</span><span class="pln"> mesa</span><span class="pun">-</span><span class="pln">common</span><span class="pun">-</span><span class="pln">dev msttcorefonts patch perl pkg</span><span class="pun">-</span><span class="pln">config python </span><span class="pun">\</span><span class="pln"> python2</span><span class="pun">.</span><span class="lit">5</span><span class="pun">-</span><span class="pln">dev rpm subversion libcupsys2</span><span class="pun">-</span><span class="pln">dev libgnome</span><span class="pun">-</span><span class="pln">keyring</span><span class="pun">-</span><span class="pln">dev </span><span class="pun">\</span><span class="pln"> libcurl4</span><span class="pun">-</span><span class="pln">gnutls</span><span class="pun">-</span><span class="pln">dev libelf</span><span class="pun">-</span><span class="pln">dev libc6</span><span class="pun">-</span><span class="pln">i386 lib32stdc</span><span class="pun">++</span><span class="lit">6</span><span class="pln"> </span><span class="pun">\</span><span class="pln"> libbluetooth</span><span class="pun">-</span><span class="pln">dev</span></blockquote>
<br />
するとpython2.5-devは対応するモジュールがないよと言った趣旨のエラーが出るので<br />
<br />
<blockquote class="tr_bq">
> python -V</blockquote>
<br />
でバージョン確認すると2.6.5なのでpython2.6-devに修正して再度実行。すると、以下のライブラリがインストールされた。<br />
<br />
g++-4.4-multilib g++-multilib gcc-4.4-multilib gcc-multilib lib32gcc1 lib32gomp1 lib32stdc++6 libc6-dev-i386 libc6-i386<br />
<br />
その後再度makeを実行するとめでたくエラーはパス。<br />
思わず、直感で対応してしまったのでエラー内容も原因も良く判らなくなってしまったのが非常に痛い。。。<br />
<br />J-3http://www.blogger.com/profile/14033363500406811468noreply@blogger.com0tag:blogger.com,1999:blog-2896596740552117130.post-83168072749641255232012-03-11T01:35:00.001+09:002012-03-11T01:35:43.289+09:00checking chromium processes structureLinuxでプロセスを調べる場合にはpsコマンドを使うことがあるが、あんまり見やすいとは言い難い出力になる(少なくとも自分には)。<br />
今回プロセスの親子関係を調べたいと思って調べたら"pstree"なるコマンドがLinuxにはあって、それを使うと、 <br />
<br />
init─┬─NetworkManager─┬─dhclient<br /> │ └─2*[{NetworkManager}]<br />/* 省略 */<br /> ├─chromium-browse─┬─chromium-browse<br /> │ └─19*[{chromium-brows}]<br /> ├─chromium-browse───chromium-browse───3*[{chromium-brows}]<br />/* 省略 */<br />
<br />
みたいな感じでinitをルートとしたプロセスがきっちりと親子関係が分かりやすく出力してくれる(多分、上の例は等幅フォントじゃないとずれて見えると思うが)。<br />
<br />
N*[...]で囲まれているのは、...がN個その階層に存在していることを意味し、{...}は...がスレッドであることを意味する。<br />
<br />
つまり、上記の例で見ると1個目のchromium-browse(rが抜けている…文字制限か…)の下には1個の子プロセスと19個のスレッドがあり、2個目のchromiumは1個の子プロセスを持ち、その子プロセスには3個のスレッドがあるという事になる。<br />
<br />
ちなみに上記例はchromium-browserを起動した直後の状態なので、Linux版chromiumは起動直後で既に4プロセス動いている訳だ。<br />
<br />
ここでchromiumのタブを一つ追加して、再度pstreeを実行すると<br />
<br />
/* 省略 */ <br />
├─chromium-browse─┬─chromium-browse<br /> │ └─15*[{chromium-brows}]<br /> ├─chromium-browse───2*[chromium-browse───3*[{chromium-brows}]]<br /> /* 省略 */<br />
<br />
と出力される。2個目のchromium-browseの子プロセスが2個に増えている事が分かる。よく見ると1個目のchromium-browserのスレッド数が19個から15個に減っているがこれだけでは理由は不明。<br />
<br />
どちらにせよ1個目のchromium-browseがBrowser UIプロセスで、 2個目がRender Viewプロセスの様だ。おそらく親のプロセスは管理プロセスか何かではないかと推測。<br />
<br />
またここで先ほど追加したタブを別ウィンドウとして切り離して再度pstreeを実行すると<br />
<br />
/* 省略 */<br />
├─chromium-browse─┬─chromium-browse<br /> │ └─16*[{chromium-brows}]<br /> ├─chromium-browse───2*[chromium-browse───3*[{chromium-brows}]]<br /> /* 省略 */<br />
<br />
と出力される。Browser UIプロセスと思われるchromium-browserのスレッド数が1個増えているが、Render VIewプロセスと思われるchromium-browserの子プロセスは増えていない。<br />
<br />
どうやらchromium-browserは複数のタブをウィンドウに分離してもBrowser UIプロセスは増やさずに管理している様子。<br />
<br />J-3http://www.blogger.com/profile/14033363500406811468noreply@blogger.com0tag:blogger.com,1999:blog-2896596740552117130.post-79351197916026062922012-03-05T23:41:00.002+09:002012-03-05T23:43:57.144+09:00Reading platform.h in v8 repositoryv8のメモリまわりを知りたいので、virtual memory機能を調べるとplatform.hにVirtualMemoryなるクラスを発見。 <br />
<br />
<div style="color: orange;">
class VirtualMemory</div>
<br />
予約されたメモリ領域を表現し制御するクラス。<br />
予約されたメモリの制御は代入とcopy-contructing?(コピーコンストラクタの誤字と思われる)によって他のVirtualMemoryオブジェクトにアサイン可能。予約されたメモリはお事理なるオブジェクトからは削除される。<br />
<br />
メソッドは以下のものがある。日本語はheader fileに記載のコメント。<br />
<br />
<div style="color: orange;">
VirtualMemory();</div>
空のVirtualMemoryオブジェクトを生成。予約されたメモリを持たない。<br />
<br />
<div style="color: orange;">
exlicit VirtualMemory(size_t size);</div>
サイズが引数sizeのvirtual memoryを予約する。<br />
<br />
<div style="color: orange;">
VirtualMemory(size_t size, size_t alignment);</div>
引数alignment毎にアライメントされた、サイズが引数sizeの領域を持つvirtual memoryを予約する。この処理ではaddress()によって戻された位置ではないかもしれない。<br />
<br />
<div style="color: orange;">
~VirtualMemory();</div>
このVirtualMemoryオブジェクトによって制御されていた予約したメモリを開放する。 <br />
<br />
<div style="color: orange;">
bool IsReserved();</div>
予約されたメモリを持っているかどうかを返す。<br />
<br />
<div style="color: orange;">
void Reset();</div>
組み込まれたVirtualMemoryオブジェクトの初期化、もしくはリセットを実行する。<br />
<br />
<div style="color: orange;">
void* address();</div>
予約されたメモリの先頭アドレスを返す。<br />
もしアライメントを持って予約されたメモリならば、このアドレスは必ずしもアライメントされているとは限らない。アライメントブロックの先頭を取得するためにはアライメントサイズの倍数だけ端数を切り捨てる必要があるかもしれない。<br />
<br />
<div style="color: orange;">
size_t size();</div>
予約されたメモリのサイズを返す。戻り値が意味あるのはIsReserved()がtrueの場合のみである。<br />
もしアライメントを持って予約されたメモリならば、このサイズは要求されたサイズよりも大きくなるかもしれない。<br />
<br />
<div style="color: orange;">
bool Commit(void* address, size_t size, bool is_executable);</div>
実際のメモリをコミットする。コミット操作が成功したかどうかを戻り値で返す。<br />
<br />
<div style="color: orange;">
bool Uncommit(void* address, size_t size);</div>
実際のメモリをアンコミットする。アンコミット操作が成功したかどうかを戻り値で返す。<br />
<br />
<div style="color: orange;">
void Release();</div>
[コメントなし]<br />
<br />
<div style="color: orange;">
void TakeControl(VirtualMemory* from);</div>
予約された領域の制御を異なるVirtualMemoryオブジェクトにアサインする。<br />
古いオブジェクトはこれ以上動作しない(IsReserved()はfalseを返す)。<br />
<br />
<div style="color: orange;">
static void* ReserveRegion(size_t size);</div>
[コメントなし]<br />
<br />
<div style="color: orange;">
static bool CommitRegion(void* base, size_t size, bool is_executable); </div>
[コメントなし]<br />
<br />
<div style="color: orange;">
static bool UncommitRegion(void* base, size_t size);</div>
[コメントなし]<br />
<br />
<div style="color: orange;">
static bool ReleaseRegion(void* base, size_t size);</div>
ReserveRegion()によって返されるベースポインタと予約時のサイズと同サイズの値を引数に実行する必要がある。<br />
<br />
基本的なメモリ管理クラスの様だ。ccファイルの方はplatform別にplatform-<プラットフォーム名>.ccと言うファイルになっている。linuxの場合にはplatform-linux.ccといった具合。<br />
次回はccファイルの中身を見てみる予定。<br />
<br />J-3http://www.blogger.com/profile/14033363500406811468noreply@blogger.com0tag:blogger.com,1999:blog-2896596740552117130.post-86909173711308028672012-03-01T00:20:00.002+09:002012-03-01T00:21:29.016+09:00V8 JavaScript Engine libraries.cc Part 2昨日の続き。<br />
libraries.ccで定義されている関数がどこで使われているかを調査。<br />
(JavaScriptコードをv8エンジンではどう使っているのか)一番気になるGetRawScriptSource()がターゲット。<br />
■GetRawScriptSource()<br />
1.<span style="color: yellow;">void Deserializer::ReadChunk() @ serializer.cc</span><br />
data = source_->Get();の結果がkNativesStringResourceの場合に実行される。<br />
その戻り値を利用してNativesExternalStringResourceクラスのインスタンス生成。<br />
2.<span style="color: yellow;">Handle<String> Bootstrapper::NativesSourceLookup() @ bootstrapper.cc</span><br />
heap->natives_source_cache()->get(index)->IsUndefined()がtrueならば実行される(ただし、Natives::GetRawScriptSource())。<br />
※ indexはint型引数。<br />
※ NativeSourceLookup()はbool Genesis::CompileBuiltin() @ bootstrapper.ccから実行され、戻り値がCompileNative()に渡される。<br />
3.<span style="color: yellow;">bool Genesis::CompileExperimentalBuiltin() @ bootstrapper.cc</span><br />
ExperimentalNatives::GetRawScriptSource()限定だが実行され、その結果がfactory->NewStringFromAscii()に渡され、その結果がCompileNative()に渡される。<br />
4.<span style="color: yellow;">void Shell::InstallUtilityScript() @ d8.cc</span><br />
GetRawScriptSource()の引数として与えられる値は以下の通り。<br />
i::NativesCollection<i::D8>::GetIndex("d8");<br />
"d8"と言う時点でbuiltinではなく、d8固有の機能をインストールしているはず。<br />
<br />
ちなみにNativesとExperimentalNativesは以下の通りnatives.hで定義されている。NativeCollectionクラスの定義も同じファイルで定義されている。<br />
<br />
<blockquote class="tr_bq">
typedef NativesCollection<CORE> Natives;<br />
typedef NativesCollection<EXPERIMENTAL> ExperimentalNatives;</blockquote>
<br />
以上の事から、以下の2点が今後の調査ポイントになりそう。<br />
<br />
<ul>
<li>Deserializer::ReadChunk()でNativesExternalStringResourceオブジェクトを作る事の意味</li>
<li>Bootstrapper::NativesSourceLookup()でCompileNative()にJavaScriptソースコードが渡された後の処理</li>
</ul>
<div>
あと、libraries.ccに生成された整数値の羅列を解析(と言う程のものではないが、char型データとしてファイル出力)して、目視確認すると以下の事をやっている事は分かった。</div>
<div>
<ul>
<li>コメント行は全て改行のみに変換</li>
<li>ローカル変数名を1文字のアルファベットに変換</li>
</ul>
</div>
<br />
つまりは、データ化した時のサイズを小さくする事が目的の変換が施されている様子。<br />
依然として関数名の先頭に%が記述されている変則的な記法は残っている。。。<br />
<br />
とりあえず今日はここまで。<br />
<br />J-3http://www.blogger.com/profile/14033363500406811468noreply@blogger.com0tag:blogger.com,1999:blog-2896596740552117130.post-81939062448941636252012-02-29T00:23:00.000+09:002012-02-29T00:23:12.733+09:00V8 JavaScript Engine libraries.ccV8と言って思い浮かべるのがエンジンなのか、JavaScriptなのか、と言うと私はJavaScript。と言う訳で今回はV8 JavaScript Engineについて調査。<div>
<br /></div>
<div>
V8をビルドするとobj/releaseもしくはobj/debug以下に<span style="color: yellow;">libraries.cc</span>と<span style="color: yellow;">experimental-libraries.cc</span>と言うソースコードとそのビルド結果となる<span style="color: yellow;">libraries.o</span>と<span style="color: yellow;">experimenta-libraries.o</span>いう合計4個のファイルが生成される。これは一体どうやって作られて、どんな目的のモノなのであろうか。</div>
<div>
<br /></div>
<div>
まずはビルド時のログ出力をlibrariesをキーに検索すると、以下のような出力がある事が分かる(ちなみに、以下の出力はscons d8 mode=debugでビルドした時のもの。他の場合でも同じだとは思う)。</div>
<div>
<blockquote class="tr_bq">
JS2C(["obj/debug/<span style="color: yellow;">libraries</span>.cc"], ["src/runtime.js", "src/v8natives.js", "src/array.js", "src/string.js", "src/uri.js", "src/math.js", "src/messages.js", "src/apinatives.js", "src/date.js", "src/regexp.js", "src/json.js", "src/liveedit-debugger.js", "src/mirror-debugger.js", "src/debug-debugger.js", "src/macros.py"])<br />g++ -o obj/debug/libraries.o -c -fno-rtti -fno-exceptions -fvisibility=hidden -Wall -Werror -W -Wno-unused-parameter -Woverloaded-virtual -Wnon-virtual-dtor -pedantic -m32 -g -O0 -ansi -DV8_TARGET_ARCH_IA32 -DENABLE_DISASSEMBLER -DDEBUG -DENABLE_DEBUGGER_SUPPORT -DV8_ENABLE_CHECKS -DOBJECT_PRINT -Iobj/debug -Isrc -Isrc obj/debug/<span style="color: yellow;">libraries</span>.cc<br />JS2C(["obj/debug/experimental-<span style="color: yellow;">libraries</span>.cc"], ["src/proxy.js", "src/collection.js", "src/macros.py"])<br />g++ -o obj/debug/experimental-libraries.o -c -fno-rtti -fno-exceptions -fvisibility=hidden -Wall -Werror -W -Wno-unused-parameter -Woverloaded-virtual -Wnon-virtual-dtor -pedantic -m32 -g -O0 -ansi -DV8_TARGET_ARCH_IA32 -DENABLE_DISASSEMBLER -DDEBUG -DENABLE_DEBUGGER_SUPPORT -DV8_ENABLE_CHECKS -DOBJECT_PRINT -Iobj/debug -Isrc -Isrc obj/debug/experimental-<span style="color: yellow;">libraries</span>.cc</blockquote>
</div>
<div>
どうもJS2Cでccファイルを生成して、その後にg++でビルドしている様子。JS2Cと言う関数名からするとJavaScriptをCに変換しているのであろう。そのJS2Cはtools/js2c.pyファイルに定義されてて、そのファイルの先頭には以下の様なコメントがある。</div>
<div>
<blockquote class="tr_bq">
# This is a utility for converting JavaScript source code into C-style<br /># char arrays. It is used for embedded JavaScript code in the V8<br /># library.</blockquote>
</div>
<div>
つまり、JavaSciptコードをC形式の文字列配列に変換する、と言う事でJavaScript関数をCの関数に変換している訳ではないようなので、ちょっとがっかり。</div>
<div>
<br /></div>
<div>
とりあえずJS2Cの第二引数に与えられているjsもpyもsrc以下と言う事なのでsrcフォルダを見てみると、jsもpyも全てそこに存在している。とりあえずv8natives.jsの中身を見てみると、どうやらJavaScriptコードの様子。。。なのだが微妙に違う記法が混じっていて、<span style="color: yellow;">関数名の先頭に%記号が付いている</span>。。。。こんなのありだっけか?と思ったが、恐らくpyの方で何かしらの変換をするのかも知れない。</div>
<div>
<br /></div>
<div>
<blockquote class="tr_bq">
// Helper function used to install functions on objects.<br />function InstallFunctions(object, attributes, functions) {<br /> if (functions.length >= 8) {<br /> <span style="color: orange;"><u>%OptimizeObjectForAddingMultipleProperties</u></span>(object, functions.length >> 1);<br /> }<br /> for (var i = 0; i < functions.length; i += 2) {<br /> var key = functions[i];<br /> var f = functions[i + 1];<br /> <span style="color: orange;"><u>%FunctionSetName</u></span>(f, key);<br /> <span style="color: orange;"><u>%FunctionRemovePrototype</u></span>(f);<br /> <span style="color: orange;"><u>%SetProperty</u></span>(object, key, f, attributes);<br /> <span style="color: orange;"><u>%SetNativeFlag</u></span>(f);<br /> }<br /> <span style="color: orange;"><u>%ToFastProperties</u></span>(object);<br />}</blockquote>
</div>
<div>
とりあえずsrcフォルダ以下でOptimizeObjectForAddingMultiplePropertiesを検索キーとしてgrepをかけてみると以下のファイルが見つかった(subversion関連は除外)。</div>
<div>
<blockquote class="tr_bq">
./src/v8natives.js<br />./src/runtime.cc<br />./src/runtime.h<br />./src/math.js</blockquote>
</div>
<div>
どうもOptimizeObjectForAddingMultiplePropertiesはruntime.ccで定義されているcの関数である事が分かった。と言う事は%が先頭についた関数はcで定義された関数を直接記述する特別な記法なのかも知れない。</div>
<div>
<br /></div>
<div>
次にlibraries.ccの中を見ると以下の通りで、正確にはsources[]の中身を見る必要があるが、やはりスクリプトをC形式の文字列データに置き換えて、V8からアクセス出来る様にしている様子。</div>
<div>
<blockquote>
// Copyright 2011 Google Inc. All Rights Reserved. </blockquote>
<blockquote>
// This file was generated from .js source files by SCons. If you<br />// want to make changes to this file you should either change the<br />// javascript source files or the SConstruct script.<br />#include "v8.h"<br />#include "natives.h"<br />#include "utils.h"<br />namespace v8 {<br />namespace internal {<br />static const byte <span style="color: yellow;">sources</span>[] = { .....(数値の羅列).....};</blockquote>
</div>
<div>
<blockquote>
static const char* <span style="color: yellow;">raw_sources</span> = reinterpret_cast<const char*>(sources); // const byteをconst charにキャスト<br /> template <><br /> int NativesCollection<CORE>::<span style="color: yellow;">GetBuiltinsCount</span>() { // ビルトイン関数の個数<br /> return 14;<br /> }<br /> template <><br /> int NativesCollection<CORE>::<span style="color: yellow;">GetDebuggerCount</span>() { // デバッガー関数の個数<br /> return 3;<br /> }<br /> template <><br /> int NativesCollection<CORE>::<span style="color: yellow;">GetIndex</span>(const char* name) { // オブジェクト名からインデックスを導出<br /> if (strcmp(name, "liveedit") == 0) return 0;<br /> 。。。<br /> if (strcmp(name, "json") == 0) return 13;<br /> return -1;<br /> }<br /> template <><br /> int NativesCollection<CORE>::<span style="color: yellow;">GetRawScriptsSize</span>() { // 生スクリプトサイズ<br /> return 238136;<br /> }<br /> template <><br /> Vector<const char> NativesCollection<CORE>::<span style="color: yellow;">GetRawScriptSource</span>(int index) { // 生スクリプトソースをインデックスをキーに取得<br /> if (index == 0) return Vector<const char>(raw_sources + 144015, 15179);<br /> 。。。<br /> if (index == 13) return Vector<const char>(raw_sources + 138135, 5880);<br /> return Vector<const char>("", 0);<br /> }<br /> template <><br /> Vector<const char> NativesCollection<CORE>::<span style="color: yellow;">GetScriptName</span>(int index) { // スクリプト名をインデックスをキーに取得<br /> if (index == 0) return Vector<const char>("native liveedit.js", 18);<br /> 。。。<br /> if (index == 13) return Vector<const char>("native json.js", 14);<br /> return Vector<const char>("", 0);<br /> }<br /> template <><br /> Vector<const byte> NativesCollection<CORE>::<span style="color: yellow;">GetScriptsSource</span>() { // スクリプトソースを取得<br /> return Vector<const byte>(sources, 238136);<br /> }<br /> template <><br /> void NativesCollection<CORE>::<span style="color: yellow;">SetRawScriptsSource</span>(Vector<const char> raw_source) { // 生スクリプトの設定<br /> ASSERT(238136 == raw_source.length());<br /> raw_sources = raw_source.start();<br /> }<br />} // internal<br />} // v8</blockquote>
</div>
<div>
しかし、スクリプトコードをV8から見る事がどんな状況で必要なのだろうか?ここのスクリプトコードをJITコンパイルしてからbuilt-inオブジェクトのメソッドは実行されている?少なくともbuilt-in関数のソースコードはJavaScriptでは見える必要はないので、JITが有力である気がする。となると独自のbuilt-in関数を組み込む場合にはjsファイルを作成して、SConsのスクリプトを書き換えれば、追加が出来る様になるとか?</div>
<div>
<br /></div>
<div>
うーん、もう少し調べたいが、遅いので今日はこれまで。</div>
<div>
<br /></div>J-3http://www.blogger.com/profile/14033363500406811468noreply@blogger.com0tag:blogger.com,1999:blog-2896596740552117130.post-56309613827410809312012-02-27T23:43:00.002+09:002012-02-27T23:51:25.450+09:00Webinos Demo Series #4: Cardio Hills – Remote Sensors<a href="http://webinos.org/wp-content/uploads/2012/02/webinos_demo_flyer_cardiohills.pdf">原文リンク</a><br />
ヘルスケアや個人トレーナーサービスを例にあげた、webベースのリモートセンシングのデモらしい。心拍数のようなプライバシーに関わる様な情報を自分が洗濯した人と共有する事が出来る(webinosではプライバシーや公開対象の人似ついての制御を提供する)。<br />
内容的には良く聞く様なデモシナリオなのでそんなに興味がある訳ではないし、残念ながらデモは観られない(というかどこにデモがある??)のでどんなシステム構成かは不明だが、リモートのセンサーに外部からアクセス出来ると言う事はセンサー側がサーバになる訳なんだろう。と言う事はかなりの省電力を意識した設計にするんだろうな。<br />
こういう話から超小型のOSを一昔前にMITだかのアメリカの大学で開発していたな〜、どうなったんだろうな〜、と懐かしく思ったのだが、そのOSの名前が全く思い出せない。。。<br />
<br />
と思った数分後に思い出した。<a href="http://www.tinyos.net/">TinyOS</a>だ。<br />
サイトを見ると2010年のリリースを最後に<a href="http://code.google.com/p/tinyos-main/">Google code</a>に移動したらしい。J-3http://www.blogger.com/profile/14033363500406811468noreply@blogger.com0tag:blogger.com,1999:blog-2896596740552117130.post-91429498575566303192012-02-22T00:09:00.001+09:002012-02-23T21:39:24.890+09:00How to invoke v8 engine on chromium少しWebKitから外れて、chromiumの調査をしてみる。<br />
<br />
気になっていたのはchromiumのWebKitとv8の関係。WebKitはJavaScriptCoreを持っているのだが、一部を流用してv8が動いているのか、それともv8単体でJavaScriptを実現しているのか。そして、WebKitとv8の繋ぎはどうなっているのか。<br />
とりあえずWebKitとv8の繋ぎをコードを追っかけてみた結果が下のシーケンス図。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWCV8P_nSodKT0NhLLesQBizSvckl3uW3PjRBw7G0RK_kvLi1f_x59V0IQc-15aCMvzivaWe5eGQFj37oEdA3KiiNGfyyTYBsMpWKNk0FDbQhvhyxwFZa5xf30xkgCDDZn-NYZBkhbWcE/s1600/chromium_ConnectionFromWebKit2V8.0021.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="206" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWCV8P_nSodKT0NhLLesQBizSvckl3uW3PjRBw7G0RK_kvLi1f_x59V0IQc-15aCMvzivaWe5eGQFj37oEdA3KiiNGfyyTYBsMpWKNk0FDbQhvhyxwFZa5xf30xkgCDDZn-NYZBkhbWcE/s400/chromium_ConnectionFromWebKit2V8.0021.png" width="400" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
WebCoreのScriptElementからScriptControllerのevaluate()を実行しているが、このScriptControllerはv8用とjs用の2種類が用意されていて、chromiumではv8用のコードがビルド時に使われ、そのままv8に流れて行く事になる。<br />
次にV8Proxyでv8のライブラリを呼び出してv8の機能でプリコンパイル、コンパイル、実行、と処理を行っている。最終的な実行はi:Executtionで行っている様子。この構成を見る限り、v8は単独でJavaScriptを実現している様だ。まあ、v8のスタンドアローン版もある訳だし、敢えてブラウザの場合だけJavaScriptCoreと連動するってのも変な構成だし、至極当たり前な流れだ。<br />
<br />
次はv8はJITコンパイラな訳だから、ネイティブコンパイルする条件を調べたい。<br />
<br />
(2/22追記)<br />
chromiumのコードにprintf()を追加してビルドしてみて分かったのだが、どうもV8Proxyから左側はchromiumのビルド時にターゲットから外れている様子。調べ直しだな。。。<br />
<br />
(2/23追記)<br />
v8はJITコンパイルするけれど、Firefoxのとは違って全て初回実行時にネイティブビルドすると言う事が分かった。全て初回ビルドか。。。<br />
<br />
<br />
<br />J-3http://www.blogger.com/profile/14033363500406811468noreply@blogger.com0tag:blogger.com,1999:blog-2896596740552117130.post-36515285775809962992012-02-21T00:08:00.005+09:002012-02-21T00:45:29.022+09:00WebKitGtk Build on Ubuntu11.10 Part 2pixmanが取得出来ない問題は時間帯を変えると、すんなり通った。。。<br />
しかし、pixbufで以下のエラーが。。。<br />
<br />
<blockquote class="tr_bq">
<span style="color: #666666;">make[4]: *** `all-am' に必要なターゲット `GdkPixbuf-2.0.typelib' を make するルールがありません. 中止.</span></blockquote>
加えてlibsoupでも<br />
<br />
<blockquote class="tr_bq">
<span style="color: #666666;">make[2]: *** ターゲット `/usr/share/gobject-introspection-1.0/Makefile.introspection' を make するルールがありません. 中止.</span></blockquote>
<div>
at-spi2-coreでも</div>
<br />
<div>
<blockquote class="tr_bq">
<span style="color: #666666;">make[2]: *** `Atspi-2.0.gir' に必要なターゲット `/usr/bin/g-ir-scanner' を make するルールがありません. 中止.</span></blockquote>
</div>
<div>
こんなエラーでmakeが失敗する。。。</div>
<div>
<br /></div>
<div>
少なくとも/usr/share/gobject-introspection-1.0なるディレクトリは存在しない。</div>
<blockquote class="tr_bq">
<span style="color: blue;">> sudo apt-get install gobject-introspection</span></blockquote>
とかやってみるとインストールが始まる。。。make時のログ出力を確認すると<br />
<br />
<blockquote class="tr_bq">
<span style="color: #666666;">checking for gobject-introspection... yes</span></blockquote>
<div>
と出力されているが、うまくチェック機構が動作していないのだろうか。。。</div>
<div>
<br /></div>
<div>
とりあえず、状況を変更したので再度</div>
<blockquote class="tr_bq">
<span style="color: blue;">> Tools/Scripts/update-webkitgtk-libs</span></blockquote>
を実行してみると、何故かpixbufもうまくmakeできる様になった。成功するのは良いんだけれども、原因が分からないまま成功するのは気持ちがいいモノではないなあ。その勢いで今までconfigureすら動かなかったものまで動作し始めて、また完了まで時間がかかりそうなので、今日はここまで。<br />
(追記)<br />
すべて正常にインストールが完了した様子。<br />
明日はようやくWebKit本体のビルドが出来る。<br />
<br />
<br />
<br />J-3http://www.blogger.com/profile/14033363500406811468noreply@blogger.com0tag:blogger.com,1999:blog-2896596740552117130.post-68726573530789282652012-02-18T15:20:00.001+09:002012-02-18T16:26:46.613+09:00WebKitGtk Build on Ubuntu11.10 Part 1Gtk版のWebKitが欲しいので、ビルドしようとトライしていたのだが、Ubuntu10.04では必要なライブラリをインストール出来ず(正確にはインストールできるが色々な物を破壊してしまう。。)挫折。Ununtu11.04でもやってみて何とかウィンドウが表示される所までは行ったのだが、何故かページロードが出来ないし、裏では色々とエラー吐き撒くっているので、ちょっと微妙。と言う訳でビルドが出来ないのはUbuntuのバージョンが古いからという勝手な理由付けで、今回はUbuntu11.10で再チャレンジ(本当はもっとLinuxについて調べておくべきだとは思うんだが、時間がない)。<br />
<div>
ビルド環境となるUbuntu11.10は以下の通りVirtualBox上で実行。</div>
<div>
<ul>
<li>Ubuntu11.10 on VirtualBox on MacBookAir (Mac OS X 10.6.8)</li>
</ul>
<div>
<a href="http://trac.webkit.org/wiki/BuildingGtk">ここ</a>の内容に従って環境構築。</div>
<div>
<strong style="background-color: white; font-family: Verdana, Arial, 'Bitstream Vera Sans', Helvetica, sans-serif; font-size: 13px;"><br /></strong></div>
<b><u>Install the base WebKitGTK+ dependencies</u></b></div>
<div>
apt-getはUbuntu10.04では色々とインストール出来なかったのだが、今回は特にエラーも出ずに全てインストール成功。</div>
<b><u>Install the jhbuild module dependencies</u></b><br />
ここもapt-getはエラーなく完了。Ubuntu10.04でもエラーは出なかった筈。<br />
<div>
ここでGitをインストールしていない、WebKitのソースコードを取得していない(^^;)のでインストールとチェックアウト。</div>
<blockquote class="tr_bq">
> sudo apt-get install git-core</blockquote>
<blockquote class="tr_bq">
> cd webkit</blockquote>
<blockquote class="tr_bq">
> git clone git://git.webkit.org/WebKit.git WebKit </blockquote>
チェックアウトに時間がかかるので取り敢えずここまで。<br />
(追記)<br />
と思ったが、並行してnightly buildから取ってきて残りの手順を実施してみる。<br />
<br />
<blockquote class="tr_bq">
> Tools/Scripts/update-webkitgtk-libs</blockquote>
どうもpixmanのwgetで応答がないので再試行を繰り返している。。。cairographics.orgにはアクセス出来ている様なのだが、ダウンロードが出来ない様子。<br />
Firefox on Ubuntu11.10で該当URLにアクセスしてみてもやはりダウンロードできない。Chrome on MBAでもcairographics.orgにアクセス出来ず。<br />
他のチェックアウトは成功するので、サーバメンテでもしているのだろう。あとで、pixmanのためにやり直さないと。。。<br />
とりあえず、時間がないのでここまで。<br />
<br />
<br />
<blockquote class="tr_bq">
</blockquote>
<div>
<br />
<br />
<br /></div>J-3http://www.blogger.com/profile/14033363500406811468noreply@blogger.com0tag:blogger.com,1999:blog-2896596740552117130.post-57241210256801098832012-02-18T14:29:00.001+09:002012-02-18T14:30:42.872+09:00WebKit Page Cache I - The Basics 抄訳<a href="http://www.webkit.org/blog/427/webkit-page-cache-i-the-basics/">WebKit Page Cache I – The Basics</a><br />
<div>
Page Cacheの内部動作を調べる必要があったので、上記記事を読んでみた。ざっと見ただけで内部動作については書かれていない事は分かったが、取り敢えずちょこっとピックアップして和訳。</div>
<div>
<br /></div>
<div>
<b><u>Page Cache Overview</u></b></div>
<div>
<ul>
<li>Page Cache=Firefoxの"Back-Forward Cache"、"bfcache"、Operaの"Fast History Navigation"と呼ばれる。</li>
<li>WebKitの"Back/Forward List"と"Page Cache"は違う(らしい)。</li>
<li>Page Cacheはウェブをよりスムーズに移動出来る様にするためのエンドユーザ向けの機能。</li>
<li>"HTTP sense"、"disk cache"、"memory cache"における"cache"とは異なる。</li>
<li>Page Cacheは<b><span style="color: lime;">「あるページを移動する時に"一時停止"し、そのページに戻ってきた時に"再生"する」</span></b>機能。</li>
<li>新しいページに遷移する場合、前のページのDOM、JavaScript、プラグイン、画像等はクリアされてしまうと、戻るボタンで戻ってくると再度これらリソースをネットワーク上から取得して、ページを再構築しなければならず、非効率。</li>
<li>以前のページのリソースを(戻るボタンを押された場合のために)解放せずに維持しておくのがPage Cache。</li>
</ul>
</div>
<div>
<div>
<b><u>Why Wouldn't Work?</u></b></div>
</div>
<div>
<ul>
<li>Page Cacheがそんなに素晴らしいものならば、新しいページに遷移する時にWebKitは常にPage Cacheを使わないのか?</li>
</ul>
<div>
<b><i> Some Pages aren't Interesting</i></b></div>
</div>
<div>
<ul>
<li>ページロードが未完了、もしくはエラーの場合や、他のURLにリダイレクトするページの場合にはPage Cacheは動作しない。</li>
</ul>
</div>
<div>
<b><i> Some Pages are Complicated</i></b></div>
<div>
<ul>
<li>ウェブページはPage Cacheされる事を想定されていないかも知れないため、"一時停止"する事が難しい場合もある。WebKitが"一時停止"できないネイティブコードを持つプラグインを持つ場合や、WebKitが履歴上キャッシュ管理していない複数フレームを持つページ等があげられる。</li>
</ul>
</div>
<div>
<b><i> Some Pages are Secure</i></b></div>
<div>
<ul>
<li>WebKitは全てのHTTPSサイトをPage Cacheから展開する事を許可していない。</li>
</ul>
</div>
<div>
<b><i> Planned Improvements</i></b></div>
<div>
<ul>
<li>revision 48036では主要な制約が解消され、フレームを持ったページのPage Cacheが可能。</li>
<li>Plug-inサポートは計画中改善の中の大きなアイテム。</li>
</ul>
<div>
<b><u>Unload Handlers</u></b></div>
</div>
<div>
<ul>
<li>unloadイベントは、ユーザがページをクローズした時にページにcleanup処理をさせるために設計されたもの。</li>
<li>Page Cache内にページを移動させる前に、ブラウザはunloadイベントを発火させる事ができない。</li>
<li>もしブラウザがunloadイベントを行わずにPage Cacheにページを移動させるならば、そのページは"一時停止"されて隠れている間にブラウザによって解放されるかも知れず、その場合cleanup処理は決して動作しない。</li>
<li>unloadイベントの目的はページが閉じられる時の重要な処理を許可する事であり、全ての主要ブラウザはそのようなページをPage Cacheに移動する事を拒絶しており、ユーザ操作上のインパクトに繋がる。</li>
</ul>
</div>
<div>
<h4 style="background-color: white; color: rgb(0, 51, 0) !important; font-family: 'Lucida Grande', Verdana, Arial; line-height: 18px; margin-bottom: 0px; text-shadow: rgb(187, 187, 187) 1px 1px 1px;">
</h4>
<h3 style="font-size: 14px; margin-bottom: 0px; text-shadow: rgb(187, 187, 187) 1px 1px 1px;">
</h3>
</div>J-3http://www.blogger.com/profile/14033363500406811468noreply@blogger.com0tag:blogger.com,1999:blog-2896596740552117130.post-53401579984874127072012-02-14T23:51:00.002+09:002012-02-18T14:30:04.617+09:00The Vehicle API by webinos<span style="background-color: #e4eff2; color: #595959; font-family: 'Trebuchet MS', Arial, Helvetica, sans-serif; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; line-height: 18px; text-align: -webkit-auto;"><a href="http://webinos.org/blog/2012/02/08/webinos-demo-series-1-vehicle-api/">The Vehicle API – pushing borders of Web applications</a></span><br />
<div style="font-family: Georgia, serif; font-size: 100%; font-style: normal; font-variant: normal; font-weight: normal; line-height: normal;">
<br /></div>
<div style="font-family: Georgia, serif; font-size: 100%; font-style: normal; font-variant: normal; font-weight: normal; line-height: normal;">
車内はFlexRay, CAN,MOST等の異なるネットワークが存在し、Gatewayを経由して相互に接続している。それらのネットワークへのアクセスを提供する場合には安全機能の妨げにならない事を保証する必要がある。</div>
<div style="font-family: Georgia, serif; font-size: 100%; font-style: normal; font-variant: normal; font-weight: normal; line-height: normal;">
<br /></div>
<div style="font-family: Georgia, serif; font-size: 100%; font-style: normal; font-variant: normal; font-weight: normal; line-height: normal;">
よいエントリーポイントとしてはヘッドユニットがあるが、駐車時の後方距離センサーのデータを利用して物体までの距離をディスプレイに表示する場合にはソフトリアルタイムメッセージが必要となる(のでリアルタイム性を損なわない注意が必要)。そこでwebinos APIを経由した車両バスへのアクセスを制御し、車両情報への安全なデータアクセスを提供する。今のところ、要求される安全性を確保するためヘッドユニット内でのデータ利用に制限している。</div>
<div style="font-family: Georgia, serif; font-size: 100%; font-style: normal; font-variant: normal; font-weight: normal; line-height: normal;">
<br /></div>
<div style="font-family: Georgia, serif; font-size: 100%; font-style: normal; font-variant: normal; font-weight: normal; line-height: normal;">
webinosプラットフォームである<a href="http://dev.webinos.org/specifications/draft/vehicle.html">Vehicle API</a>の最初のリリースでは車両データの読み取りと、オンボードナビゲーションシステムとの連携機能にフォーカスしている。Vehicle APIはW3C仕様に沿った設計でイベントモデルをベースとしている。現在速度や縦加速度はW3Cの<a href="http://dev.webinos.org/specifications/draft/geolocation.html">Geolocation</a>やDevice <a href="http://dev.w3.org/geo/api/spec-source-orientation.html">Orientation API</a>が提供するため、Vehicle APIでは扱わず、以下のデータ等を扱う。</div>
<div>
<ul>
<li>静的車両データ(型式、 モデル、燃料やトランスミッションのタイプ)</li>
<li>距離センサーデータ</li>
<li>トリップコンピュータデータ(平均速度、燃費、走行距離、走行可能距離)</li>
<li>気候データ(エアコンや排気口)</li>
<li>制御データ(ワイパーやライトの状態)</li>
<li>ギアデータ</li>
<li>ナビゲーションデータ(目的地までの距離、経路案内のキャンセル)</li>
</ul>
</div>
<div style="font-family: Georgia, serif; font-size: 100%; font-style: normal; font-variant: normal; font-weight: normal; line-height: normal;">
HTML、CSS、JavaScriptで作成された駐車時の物体距離センサー情報を利用したデモを作成している。</div>
<div style="font-family: Georgia, serif; font-size: 100%; font-style: normal; font-variant: normal; font-weight: normal; line-height: normal;">
<br /></div>
<div style="font-family: Georgia, serif; font-size: 100%; font-style: normal; font-variant: normal; font-weight: normal; line-height: normal;">
W3C仕様に沿った仕様作りを意識してはいるものの、W3Cの仕様にまで持って行く計画があるかどうかも分からない状況であり、今後も少しは気にして見ておいた方が良さそう。また、<span style="font-size: 100%;">BMWが仕様作成したと言う点が興味深い。他者と協力して車両情報APIの主導権を握って置きたいのかも知れない。この辺のAPIが固まって一般に公開され、普及してしまうと、車載用アプリも一般ユーザが軽く作れる状況になってしまって、ナビメーカーはさあ大変、な状況になりそう。</span></div>
<div style="font-family: Georgia, serif; font-size: 100%; font-style: normal; font-variant: normal; font-weight: normal; line-height: normal;">
<br /></div>
<div style="font-family: Georgia, serif; font-size: 100%; font-style: normal; font-variant: normal; font-weight: normal; line-height: normal;">
まあ、その前にデータ取得だけとは言え、データの組み合わせ次第では幾らでもプライバシー侵害が出来てしまうので、セキュリティが重要になってくると思われる。でも、セキュリティを維持するために使い勝手を損なうのでは微妙なのでユーザビリティを維持、もしくは向上させる事が可能なセキュリティシステムとか、今後必要になってくるかも知れない。</div>J-3http://www.blogger.com/profile/14033363500406811468noreply@blogger.com0tag:blogger.com,1999:blog-2896596740552117130.post-14514314572292802042012-02-02T00:24:00.003+09:002012-02-02T00:44:01.577+09:00WebKit on Ubuntu10.04<div></div><blockquote><div><blockquote></blockquote></div><div>checking for BASE_DEPENDENCIES... configure: error: Package requirements (glib-2.0 >= 2.28.0 atk >= 1.30 pango >= 1.24.0 cairo >= 1.10.0 cairo-gobject >= 1.10.0 gdk-pixbuf-2.0 >= 2.22.0) were not met:</div><div><br /></div><div>Requested 'gdk-pixbuf-2.0 >= 2.22.0' but version of GdkPixbuf is 2.20.1</div></blockquote><div></div><div>上記はTools/Script/update-webkitgtk-libsを実行した時のエラー。</div><div><br /></div><div><a href="hammurabi.acc.umu.se/pub/GNOME/sources/gdk-pixbuf/2.22/gdk-pixbuf-2.22.1.tar.gz">gdk-pixbuf-2.22.1</a>をダウンロード。しかしconfigureでエラー。glib2.25.5以降が必要とのことだが、WebKitでは2.28.0以降が求められているので、<a href="http://ftp.gnome.org/pub/GNOME/sources/glib/2.28/">ここ</a>からダウンロードしてビルド&インストール。</div><div><br /></div><div><div>再度、gdk-pixbufにトライするがconfigureで以下のエラー。</div><div><br /></div><div></div><blockquote><div>checking for TIFFReadRGBAImageOriented in -ltiff... no</div><div>checking for TIFFWriteScanline in -ltiff... no</div><div>checking for TIFFFlushData in -ltiff34... no</div><div>configure: WARNING: *** TIFF loader will not be built (TIFF library not found) ***</div><div>configure: error: </div><div>*** Checks for TIFF loader failed. You can build without it by passing</div><div>*** --without-libtiff to configure but some programs using GTK+ may</div><div>*** not work properly</div></blockquote><div></div></div><div><div> sudo apt-get install libtiff4-dev</div><div>でライブラリをインストールしてみると./configureは成功。</div></div><div>その後、gdk-pixbuf-2.22.1のビルド&インストールも成功。</div><div><br /></div><div>再度、Tools/Script/update-webkitgtk-libsを実行する。</div><div>あれ?同じエラーが出る。。。パスに問題あるのか?</div><div><blockquote>Requested 'gdk-pixbuf-2.0 >= 2.22.0' but version of GdkPixbuf is 2.20.1</blockquote></div><div><br /></div><div>とりあえず今日はここまで。</div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div>J-3http://www.blogger.com/profile/14033363500406811468noreply@blogger.com0