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優先かな。