2014年5月13日火曜日

BloggerにMarkdownで書いて投稿

マークダウンで書いて投稿

stackedit.ioというサイトを使うとBloggerにMarkdownで書いて投稿できるらしいので試してみるテスト。

2013年9月9日月曜日

HTTP Message Length について

いろいろあってHTTPの仕様を調べていた。
知りたかったのは、以下のようなヘッダを持つHTTPレスポンスはプロトコル仕様上正しいのかという点。
  • Content-Length がない
  • Transfer-Encoding がない
  • Connection: close である
RFC2616を拾い読みした結果、これは仕様上正しそうだということがわかった。
該当するのは以下の記載あたり。

4.4 Message Length


The transfer-length of a message is the length of the message-body as it appears in the message; that is, after any transfer-codings have been applied. When a message-body is included with a message, the transfer-length of that body is determined by one of the following (in order of precedence):

- snip -

5.By the server closing the connection. (Closing the connection cannot be used to indicate the end of a request body, since that would leave no possibility for the server to send back a response.)

つまり、サーバーからコネクションを切るようなレスポンスであれば、その接続内のデータの末尾までがレスポンスのメッセージ長である、ということらしい。
レスポンスにはContent-LengthかあるいはTransfer-Encoding(chunked) が必須だと思っていたけどそうではなかった。

2013年7月30日火曜日

fc-cache: command not found なときは

# brew install fontconfig
MBPにRictyフォント入れようとおもったらコマンドが見つからず。
パッケージ名が分からなくていろいろ検索するはめになったのでメモしておく。
fc-list とかフォント関連のコマンドはこれで入るはず。
Linuxな人はパッケージマネージャのコマンドに読み替えてください。

2013年6月22日土曜日

継承よりコンポジション

今更ながら、Effective Javaネタ。
実はまじめに通して読んだことがないので、読んでて気になったところを中心にメモっていく。

本題。
下手に継承しちゃうと親クラスの実装に影響されてしまう。
親クラスの実装を熟知していないと、思わぬ副作用を招くことがある。
例えば以下のような感じだ。
まず子クラス。
public class SampleChild extends SampleParent {
    public static void main(String[] args) {
        new SampleChild().hi();
    }

    @Override
    public void say() {
        System.out.println("Child#say");
        super.say();
    }

    @Override
    public void hi() {
        System.out.println("Child#hi");
        super.hi();
    }
}
次に親クラス。
public class SampleParent {
    public void say() {
        System.out.println("Parent#say");
    }

    public void hi() {
        this.say();
    }
}

これで、SampleChild#hi() を呼ぶとする。
とするとまず親のhi() が呼ばれるけど、これは内部的には SampleParent#say() が呼び出されることになっている。
で、このメソッドは子によりオーバーライドされているため、SampleChild#say() が呼び出されてしまう。
こういう動作になることは、親クラスの実装の詳細を知らないと知りようがない。

というわけで継承じゃなくてコンポジションを使いましょうということらしい。
コンポジションの詳しい例はEffective Java本編に譲るとして、要は転送クラスを利用することで好きなようにクラスを拡張できるし、元クラスの実装に影響を受けない作りにできるということかな。

転職した

これまでは請負でポチポチ開発を行う会社にいたんですが、一念発起してこの6月頭から転職した。
これでようやく念願の自社製品開発に携わることができる!!

転職先では、Scalaでバリバリコード書いてたり、Bitbucket + git でソース管理してたり、IDEは基本的にはIntelliJ IDEA 使ってる人ばっかりだったりして、ものすごく環境が良い方向に変わった感じ。
そして、自分のスキルの足りなさを実感する日々。
しかしながら、そういう環境を自ら欲して転職したってところもあるので頑張っていきたい。

2013年3月20日水曜日

Scala はじめました

仕事が猛烈に忙しくなり、なかなか更新できずにいたけども、若干余裕が出てきたのでまた更新を始めたいと思う。

Android本はまだ読んでいる途中なんですが、諸事情があり Scala を始めることにした。
関数型言語はほぼやったことがないが、副作用がないプログラムというのはある程度経験を積むと無意識のうちに心がけるようになる... 気がする。

新しい言語をはじめるときはとりあえず定番本を買っておけ、ということで、通称コップ本 を購入し、読み進めている。
1章から割と濃い内容のようなので、くじけず最後まで読み通したい。
Android本も読み進めたいけど、しばらくはScala優先かな。

2012年11月15日木曜日

L-02D ICSアップデート

ちょうど1ヶ月程前からアップデートが来ていたというのを今頃知ったので早速やってみた。
手順はDocomoのサイトに載っていたのだが、すんなりいかなかった部分があったのでメモしておく。

まず、アップデートのためには、専用のツールをインストールしたPCと端末をUSB接続する必要がある。
このツールをPCにインストールしようとしたんだけども、インストール中にプログレスバーが止まったままになる現象が発生。
しょうがないので一度タスクマネージャからkillして再度インストーラを起動するとあっさり成功した。

次にPCに端末を繋いで件のツールを起動したところ、"アップデート対象のモデルではありません"のようなエラーが発生。そんなわけはない。
ひょっとしてと思い、PC側のUSBを挿すポートを変更してやり直したところ、今度は正常に認識された。
USB接続だとたまにこういうのがあるんだよなぁ。

ちなみに、Docomoのサイトの手順には "L-02D側にUSB接続モード画面が表示された場合「LG ソフトウェア」をタップします。" なる文言があるのだが、そもそもこんなモードは表示されなかった。
しょうがないので"PCに接続"を選択して進めつつも不思議に思っていたが、どうやらAndroid4.0アップデート後はUSB接続時にこのモードが選択できるようだ。

で、ようやくアップデートが始まるかと思いきや、次はツール側でパッケージのダウンロードエラーが発生。
とりあえず再試行したところ、今度はうまくいった。やれやれ。

ソフトウェア更新中にエラーが起きたらどうしようとひやひやしたものの、その後は特に問題なく更新が完了した。

さて、肝心のICSだが、かなりルック&フィールが変わっている印象。
メジャーバージョンが2つ上がっているだけのことはある。

何はともあれ、これでAndroid2.x以降で追加された機能を試せる実機が用意できたわけで、これからの開発に活用していきたい。

2012年11月14日水曜日

Androidゲームプログラミング A to Z 第3章 part3

3章後半になって俄然ゲームプログラミング感が増してきた。

さて、いよいよ今まで定義してきたinterfaceをゲームフレームワークに組み込んでいく、というところに話が移る。
メインループがあって、ループ1周の処理が1フレームで... といったゲームの基礎的な部分についての記載がある。
この辺は昔読んだコードで見た記憶があるから知っていた。

メインループ内で各フレームのデルタ時間を計算しておいて、それをスクリーン更新メソッドに渡すといったことをやっていて、なんで ? と思っていたら続きに答えが載っていた。
例えば毎フレーム1ピクセル動かすとかやっちゃうと速いデバイスと遅いデバイスでキャラクターの動く速さが変わっちゃたりする(フレームレートに差があるため)。
そこで、フレーム間のデルタ時間を係数にして次のキャラクター位置を計算してあげれば,
デバイスに関わらず同じ動作にできます、ってことらしい。
なるほど。

で、最後にこれまで作ってきたinterfaceを利用した擬似ゲームが載っている。
1フレーム毎に画像が左から右に動くだけの代物だけど、これまでの内容を踏まえて読むと勉強になることが多かったと思う。

ここまではあまりAndroidのことを意識しない話が多かったけど(Activityとか多少意識してた部分もある)、次章からは本格的にAndroidをターゲットとした話が始まるみたいだ。

明日は朝が早いので今日はここまで。

Androidゲームプログラミング A to Z 第3章 part2

第3章の続きから。
ゲームに必要なモジュールについて、概要説明とinterfaceの定義が続いている。
interfaceは例えばファイルI/Oであれば以下のような感じだ。

public interface FileIO {
    public InputStream readAsset(String fileName) throws IOException;
    // メソッドの定義が続く...
}

各メソッドについては細かい解説も記載されていてわかりやすい。

この本におけるゲームでは、Activityを一つだけ使うということが書いてある。
単一のActivityの中身を書き換えていくイメージで進めていくみたいだ。

ユーザからの入力や、オーディオ、グラフィックスなどに関しての記載が続く。
オーディオ機能については、そもそも音って何ぞや ? というところが書いてあったり、グラフィックスではラスタ/ピクセル/フレームバッファや色深度、垂直同期なんかにも触れてある。
ゲームを作る上で必要な知識を詰め込んでるような感じだ。
この辺は今の仕事で触ってる内容とかぶる部分も多く、知識の整理になった。まぁそっちはAndroidとか一切関係ないけど。

もちろんinterfaceの定義についても記載が続いている。
interfaceから進めていく設計を読むのは楽しい。

長くなってきたので次に続く。

2012年11月13日火曜日

SyntaxHighlighter 導入

SyntaxHighlighter を導入してみた。
以下のリンクの方法で問題ないようだ。多謝。
BloggerにソースコードをハイライトするSyntaxHighlighterを導入する
print "Hello, world."

Androidゲームプログラミング A to Z 第3章 part1

コードが登場するかと思いきやまずはAndroidのゲームってこういうのがありますよ的な説明から始まる。
AndroidでTPSシューターっぽいゲームもあるんだなぁとか。
どうでもいいけど"DoomやQuakeのスタイルを踏襲したTPSゲーム"って違和感があるな。
どっちもFPSじゃないか。

さて、やっとコードと思いきや次は紙やはさみを使って大まかなデザインをやってみようという話。
"技術的な詳細は後回し"ということらしい。
どうしても技術的なことをまず抑えたくなってしまうもんだけど、なるほどなぁという感じ。


各スクリーンのデザインやスクリーンの遷移について記載してある。
ちなみにここまでの各スクリーンは手書きの絵となっている。あくまでもデザイン。

で、デザインが完了したところでコードの話。
この本の面白いところとして、ゲームを実装する上で必要な機能について、まずインターフェース(Javaのinterfaceの意味) を定義してしまおうという点が挙げられる。

こうすることで、実装の詳細に触れずに進められるし、必要になったら後で実装を置き換えられる(グラフィックス処理をOpenGL ESに!とか) という意図らしい。
この進め方は筋がいいなぁと感心した。
個人的にJava言語が持つ一番素晴らしい機能はinterfaceだと思います。

というわけでここから入力とかファイルI/Oとかをinterfaceで定義していく流れになるっぽいですが、時間切れなので続きは次のポストに持ち越し。



Androidゲームプログラミング A to Z 第2章

こんな感じで基本的に1章ごとに1ポストで書いていく方針とする。

さて、2章はSDKのセットアップ方法について書いてある。
SDK/AVD Managerや、Eclipse及びADTプラグインのインストールについて。
このあたりもやはり経験者は読み飛ばしてよさげ。

この章で初めてコードが登場する。
Activityを継承し、View.OnClickListenerクラスを実装したクラスを定義し、onCreate()、onClick()といった基本的なコールバック関数を定義しただけのシンプルなサンプルコードになっている。
画面上のボタンを押すと、ボタン上のテキストの表示がクリック回数になるとかそんな感じ。
割りと真面目に解説が書いてあるのでAndroidに触ったことがなくても理解はできるはず。
Java分かりませんって感じだと多分無理。

あとはAVDを作成してサンプルアプリを起動するところまで書いてある。
更に、Eclipseのデバッグパースペクティブについても触れてある。
Android開発経験者は以下略。
今更だけどこの本はEclipseを使うことが前提になっているので他のIDEがお好みの方は適宜読み替える必要がありそうだ。

次章からようやくゲームっぽいところを作り始めるみたい。


Androidゲームプログラミング A to Z 第1章

Androidの歴史やフレームワークの構造について。
ゲームプログラミング本だけあって、Androidデバイス向けゲームコントローラについても軽く触れてある。
とはいえ他のAndroid本を読んだことのある人にとってはあまり目を引く内容は無いかも。

2012年11月12日月曜日

Androidゲームプログラミング A to Z を読む

という本を買った。
ただ読んだだけよりも記憶に残りそうなので、内容をざっくりまとめたものをこれからざくざくと書いていきたいと思う。

Hello, world.

開発ブログ兼勉強用ブログのような感じにしていく所存。