2011年9月30日金曜日

freeのPDF Viewer


Androidで使えるfreeでソースが手に入るPDF Viewerが欲しかったので探したがあまりいいのがなかった。
でもapvはい感じだった。
ただ、日本語の表示が出来なかったのでIPAフォントを入れて日本語表示できるようにした。
ソースは以下においてある。
https://github.com/matsuhiro/APV-Custom

コードを取得したら、
$ cd pdfview/scripts
$ ./build-native.sh
を実行するとnativeコードのライブラリができるので、
eclipseでプロジェクトをインポートしてあげれば動くはず。

拡大縮小の時に画面がチラつくが、表示の速さは実用レベルだw

これを自分用にカスタマイズしていこーっと。

写真は京都の鴨川です。3月のライオンにも出てきたところです。いいトコだった。マタ行きたい。

2011年9月12日月曜日

WindowsPhoneとAndroidのゲーム




WindowsPhoneゲームプログラミングの本を読んでみた。
発売前の本だけど、MSの人がブログ上でレビューアを募集していたので
メールしてみたらやらせてくれた。
9月末に発売する予定のようですが、内容はC#とか知らない自分でも十分に読める内容だったし、
量も程良いのでゲームプログラム以外でもWindowsPhoneアプリの入門には丁度よいかも。
WindowsPhoneの本自体は、ebookで公開されている。けどねぇ。。。
900ページ超の大作、しかも英語なので、読むとしてもこちらは検索してリファレンスとして使うくらいでしょうかね(^^ゞ


WindowsPhone自体はXNAとSilverlightの組み合わせで書くわけだけど、
Androidのアプリとか他のモバイルアプリを作ったことがある人はSilverlightで作るアプリは
とっつきやすいと思う。
XNAについては「ゲームってこう作るもんなのね。」という感想。
Silverlightは、フツーにXAML(ザムルとよむらしい。まあXMLですよね)でUIを書いて
UI部品のコールバックを書いてイベントドリブンで処理が進んでいく感じです。
Androidのアプリ開発と感覚が近いです。
でも、XNAの方は、初期化→コンテンツロード→状態更新→描画→状態更新→描画・・・
みたいに、状態更新と描画が繰り返し呼ばれる。しかも1/30秒ごとに。
じゃあイベントの処理(タッチとかジェスチャーとか)をどう処理するのか?というと
状態更新の中で、XNAのフレームワークの中にあるTouchPanelというクラスから
ReadGesture()のようなメソッドをコールしてイベントがあったら処理をする。
といった感じの処理でイベントキューから自分でイベントを取得して処理する感じだ。
フツーはアプリのフレームワーク側でやっているようなイベントキューからの
イベント取得処理をアプリ側でやる感じだと思う。


Androidでゲーム書くときは?
と思ったけどOpenGLでゲーム作ると少しだけど似た感じになるかな?
GLSurfaceView.RendererをimplするとonDrawFrameが繰り返し呼ばれて
その中で描画処理を行う。
イベント処理はというとGLSurfaceViewをオーバーライドして、onTouchEventの中でイベント処理をする。
なので、Androidは、描画は勝手に呼び出されるコールバックで行うけど
イベント処理はイベントドリブンで。
といった感じになっている。
onDrawFrame()の呼び出しはどこで行われているのかというと
frameworks/base/opengl/java/android/opengl/GLSurfaceView.java
の中。
GLをAndroidで使おうとするとGL専用のスレッドが勝手に作られるけど、
その中のguardedRun()でonDrawFrameがコールされている。
で、ソース見てみたらwhile(true)で延々コールしていた。
AndroidでJavaからGLを使うと勝手に繰り返しの描画が行われるみたいで
気おつけるべきだなーっと感じた。まあ、そうしないためのインテーフェースは用意されていたけど。


WindowsPhoneもAndroidもゲームを作るための仕組みはあるけど、
イベント処理はAndroidの方が楽そう。
でも描画や状態の更新が1/30secごとに呼び出されるというのは
ゲームを作る上では結構大事かも。(処理が重かったりすると描画がすっ飛ばされてコマ落ちみたいになることもあるみたいだけど。)
Androidはwhile(true)で処理しているから描画タイミングのすべてを把握できないのかも。
まあ、ソースをパッと見ただけなので、どこかのmethod内にタイミングを図るための仕組みが入っているかもです。

ただ、ゲームでないアプリを作るのであればWindowsPhoneのがよいかも。
ExpressionBlendがすごいので、いい感じのUIを作りやすいのはWindowsPhoneだと思う。

なんかモヤモヤした文章になってしまった。
やっぱりコード書いて確認しなきゃはっきりわからんね。
DevQuizも時間切れだし、こんど時間つくろ。

2011年9月4日日曜日

localにgitのserverを作ってみる。

githubでソース管理してもいいんだけど、タダアカウントだと全部公開されてしまうので
自分のPCにgitのserverたてようかと調べた。
思いの外はまったし、Web上の情報も足りないとこがあったりして
イイ感じにまとまってなかったので、自分でまとめる

git-coreとgit-daemon-runをapt-getして以下を実行する

$ sudo emacs /etc/sv/git-daemon/run

中身を以下のような感じで編集するとgitの公開用のフォルダが/home/user/gitになる
- exec chpst -ugitdaemon \
- "$(git --exec-path)"/git-daemon --verbose --base-path=/var/cache /var/cache/git
+ #exec chpst -ugitdaemon \
+ # "$(git --exec-path)"/git-daemon --verbose --base-path=/var/cache /var/cache/git
+ exec chpst -ugitdaemon "$(git --exec-path)"/git-daemon --verbose --base-path=/home/user/git --export-all --enable=receive-pack


デーモンの再起動をしする
$ sudo sv restart git-daemon
レポジトリを作る
$ sudo git clone --bare /home/user/git/test
ownerを変える。自分はこれではまってしまった。。。
$ sudo chown -R gitdaemon .

適当なディレクトリで
$ mkdir test
$ cd test
$ git init
$ git remote add origin git://localhost/test.git
$ echo "This is README" > README
$ git add README
$ git commit -m "initial commit"
$ git push origin master

$ git branch hoge
$ git checkout hoge
READMEを適当に変更して
$ git add README
$ git commit -m "hoge commit"
$ git push origin hoge
$ git branch -r
origin/hoge
origin/master
こんなかんじで、localにgitのサーバを作って、そんなかでソースの管理ができる。
まあ、ひとつのPCで完結するならサーバにする必要も無いんだけど
PC複数ある時とかはいいかも。
蛇足として、写真は上高地の川の中の画像です。
雨が降ってましたが川はとても透明でした。
youtubeに動画上げてみました。岩魚がおよいでます。