Javaで"Hello World"

Javaは(windowsで昔)Eclipseを使って書いたことはあったのですが、コマンドラインから実行したことはなかったので、調べました。環境はUbuntu 12.04で、ここに書いてある通りにしてjavaを導入しました。次に"Hello World"を書いて、実行方法を確認しました。

// HelloWorld.java
public class HelloWorld {
  public static void main(String [] args) {
    System.out.println("Hello, World!");
  }
}

を作って、

$ javac HelloWorld.java

とすると、HelloWorld.classが生成されるので

$ java HelloWorld

とすると"Hello, World!"と標準出力されます。

ハサミを使うタイミング:CodeIQ 答えの最小性について

*この文章はCodeIQの「ハサミを使うタイミング」に答えた人にしか伝わらないと思います。まだ挑戦されていない方はgihyo.co.jpのこのページを読んで挑戦してみてください。

ハサミを使うタイミング(CodeIQ)について、フィードバックを受けてから考えたことについて書きます。フィードバック前は、紙のサイズが最小になるように答えを求めることにはこだわりませんでしたが、今回はそこに集中して考えてみます。

まずメモ化を使って、w=1, 2, 3...のときにハサミを使う回数の最大値と、そのときのhの値を求めます。

結果は

ハサミ  (w, h)
1回 ... (2, 3)
2回 ... (3, 5)
3回 ... (5, 8)
4回 ... (8, 13) 

でした。ここで都合よく、n回ハサミを使うときの紙のサイズの最小値は(w = fib(n + 2), h = fib(n+3))になると予想します。ただし、fib(n)はフィボナッチ数の第n項を意味します。この予想は、数学的帰納法を使って証明できます。n=1のときは上で検証したことから成り立つことが分かります(wに対して、ハサミを使う回数の最大値を求めたのですから。。多分良いですよね。)。次にn=kで成り立つと仮定して、n=k+1で成り立つか考えます。1回ハサミを使ったあと、w=fib(k+4) % fib(k+3) = (fib(k+3) + fib(k+2)) % fib(k + 3) = fib(k+2), h = fib(k + 3)になります。これはn=kの場合にあたるので、全体でハサミを使う回数はk+1回になります。

次にw=fib(k+3)がk+1回切る場合の最小値になっているか考えます。fib(k+3)より小さく、k+1回切る可能性があるのはfib(k+2) < w < fib(k+3)に限られます。なぜならば、仮定からw=fib(k+2)以下のとき、最大でk回切ることが言えるからです。この範囲にwを取ったとき、ハサミを1回使った後fib(k+2) < h < fib(k+3)になりますが、h=fib(k+3)のときにはじめて、最大k回切ることになるので、この範囲にhを取ったとき、ハサミを使う回数は最大k回未満だと分かります。これはfib(k+2) < w < fib(k+3)のときは全体でk+1回未満しかハサミを使わないことを意味し、従ってw=fib(k+3)のときはじめてk+1回ハサミを使うhが存在することになります。

これでw=fib(k+4)のときk+1回ハサミを使い、そのときのhの最小値はfib(h+5)だと分かりました。これでハサミをn回使うことになる紙のサイズの最小値は(fib(n + 2), fib(n+3))だと言えます。

rails 3.2: フォームで送信した中身の調査

モデルオブジェクトとは独立にコントローラー、ビューを作ってurlルーティングを設定してあげて、最後はフォームを通して渡っているparamsの中身を表示するまでをやりました。railsのチュートリアルは大抵モデルが絡んで、ヘルパー関数などの挙動を調べるのは面倒な印象があったのですが、そうでも無いようです。

動画

xhr2で文字列を埋め込んだバイナリを送信する

文字列を取り出すために、getUint8で取った文字コードをString.fromCharCodeで文字列に変換してやればokです。サーバー側の処理は https://gist.github.com/4394635 を参照してください。

xhr2で長さの分からないバイナリデータを送る

xhr2でバイナリデータを送信するの続編。今回はBlobで送ります。ArrayBufferはおそらくサイズを途中で伸ばしたり、縮めたりできないので、インプットの大きさが分からない場合はBlobを使って送ります。サーバー側は https://gist.github.com/4394635 を参照してください。

xhr2でバイナリデータを送信するテスト

xhr2でバイナリデータを送信するテストです。ボタンをクリックするとクライアントから3バイトの情報がArrayBufferで送られます。それを(wsgi)サーバーがバイナリとして受け取り、それをそのままクライアントに送り返します。クライアント側で受け取った3バイトの情報をtextareaに表示します。

C言語(GCC)の&&のもう一つの使い方

"&&"と言えば論理演算子ですが、gccの拡張文法では以下のようにして、gotoのラベルを配列に入れることができます。

include<stdio.h>
int main(int argc, char* argv[]) {
  static void* LABELS[] = {&&LABEL0, &&LABEL1, &&LABEL2};
  goto *LABELS[(int)(argv[1][0] - '0')];
  LABEL0: printf("label0\n"); return 0;
  LABEL1: printf("label1\n"); return 0;
  LABEL2: printf("label2\n"); return 0;
  return -1;
}

mrubyのvm.cの315行-と343行-からでも使われてます。