2014年8月31日日曜日

両替問題を解いてみる。

両替問題を解いてみました。 やっていることは1000円を日本の硬貨(500円,100円,50円,10円,5円,1円)の6種類で払った場合の支払うすべての組み合わせの数を計算します。 アルゴリズムとしては高い硬貨から任意の数とっていくことを1000円になるまで再帰的に繰り返しています。 結果としては24万8908通りありました。手で計算するのはやり方が分かりませんが大変そうですね。あとなぜかC言語で書きましたが残念ながら完全に忘れていることが分かりました。

2014年8月27日水曜日

2次方程式の解の証明をMathJaxで書く

MathJaxを試してみました。2次方程式の解の証明も簡単に書くことができました。

$ ax^2+bx+c=0\\ \Rightarrow x^2 + \dfrac{b}{a}x + \dfrac{c}{a}=0 \Rightarrow \displaystyle \left(x^2 + \dfrac{b}{a}x + \dfrac{b^2}{4a^2} \right)-\dfrac{b^2}{4a^2}+\dfrac{c}{a}=0\\ \Rightarrow \displaystyle \left(x + \dfrac{b}{2a} \right)^2 = \dfrac{b^2-4ac}{4a^2} \Rightarrow x + \dfrac{b}{2a}=\dfrac{\pm \sqrt{b^2-4ac}}{2a}\\ \Rightarrow x=\dfrac{-b \pm \sqrt{b^2 - 4ac}}{2a} $

MathJaxの内容はこんな感じです。

$
ax^2+bx+c=0\\
\Rightarrow x^2 + \dfrac{b}{a}x + \dfrac{c}{a}=0 
\Rightarrow \displaystyle \left(x^2 + \dfrac{b}{a}x + \dfrac{b^2}{4a^2} \right)-\dfrac{b^2}{4a^2}+\dfrac{c}{a}=0\\
\Rightarrow \displaystyle \left(x + \dfrac{b}{2a} \right)^2 = \dfrac{b^2-4ac}{4a^2}
\Rightarrow x + \dfrac{b}{2a}=\dfrac{\pm \sqrt{b^2-4ac}}{2a}\\
\Rightarrow x=\dfrac{-b \pm \sqrt{b^2 - 4ac}}{2a}
$

2014年8月23日土曜日

はじめてのWebGL

かなり前だがOpenGLを少し触ったことがあるので、そのWeb版のWebGLを試してみた。 白い三角形を表示するだけど、さすがOpenGLでめちゃめちゃやることが多い。 ただthree.jsやglMatrix.jsは甘えの思想のもと素のJavaScript/htmlで書いたのでサンプル的にはいいと思います。

2014年8月19日火曜日

ノンブロッキングチャネルを試す

SocketChannel/SocketServerChannelを使ってマルチスレッドでなくても複数のクライアントに対応できるようなサーバができます。これでNode.jsはいらないですね。それにしてもByteBufferは慣れない。

2014年8月14日木曜日

Javaだけで作るWebSocketサーバ

JavaだけでWebSocketを動かすサーバを作りました。 動作としてはブラウザでHTMLを表示した後にWebSocket経由でtestという文字を送受信するだけです。 後は双方向にメッセージをやり取りできるようにするのと、処理を汎用化すれば実用的に使えるようになるはず。 ほとんどはWebSocket サーバの実装とプロトコル解説を参考にさせてもらいました。 引っかかったところとしては、WebSocketのレスポンスヘッダの改行コードがCRLFじゃないといけないところ、慣れていないということもありましたがbyteを使ってバイナリ処理を書くところでした。Java(SE)だけで作ろうとしていたため暗号化部分の処理ができるか心配でしたが幸運なことにJava8でBase64の処理クラスが追加されていたのでBase64の処理を素で書かずにすんでよかったです。

2014年8月13日水曜日

文字列の重複順列を出力する

文字列の重複順列を出力する例をerlangとJavaで書いてみました。 erlangのほうがJavaの5倍も短く書けるので5倍の生産性がありまぁす!といえば経営者たちもerlangを使うことに納得してくれることでしょう。

erlang版
Java版

2014年8月12日火曜日

intの数値をbyte配列に変換する

意外とこういうメソッドがなかったので作ってみた。mainメソッドだけ見ると回りくどいけど必要な人には価値が理解いただけるはず。最近気がついたけどblogに貼付けるだけだったらコメントが入れられるgistだけでいい気がしてきた。

2014年8月11日月曜日

byte型変数を2進数文字列に変換する

Javaのbyte変数をInteger#toBinaryStringで変換しても値がマイナスの場合はうまく変換できないし、8桁にならないので、byte変数を実際の2進数の文字列に変換するようなメソッドをいくつか作成した。最後のtoBinaryString4で0xFFとのANDをとっている理由はByte型からInt型への変換を本気で考えるに任せます。こうゆう知っている人にとっては当たり前だけど知らない人にとっては理解するのに時間がかかる「ちょっとしたこと」をインターネットで共有できるようになったのは大きいと思う。

2014年8月9日土曜日

erlangで一行づつファイルを読む。

io:readだとerlang項とかいうので書かれたファイルしか読まないようなのでio:get_lineを使う必要があるみたいだ。 erlangの書き方は少しだけ分かってきた気がする。

2014年8月6日水曜日

Javaで作るシンプルなテキストチャット

WebSocketを実装しようとしたけど、双方向なプロトコルをいきなり作るのは大変そうだったので大昔に研修で見たことがあるようなテキストチャットをまず作ってみた。意外とクライアントがインプットとアウトプットでスレッドを分けないといけなかったので大変だった。ただクライアントだけが接続が切れた場合に例外が発生したりするので、タイミングによる制御が大切になってきそう。

2014年8月4日月曜日

純粋なJavaで作るHttpServer

WebサーバというとApacheやIISが必要と思うけど純粋なJavaでもHTMLを表示するだけであれば簡単に作ることができる。 com.sun.net.httpserverを使う手もあるけど勉強もかねてHttpServerを書いてみた。 ここではThreadを単純に使っているけどノンブロッキングチャネルを使う方法もあるのでこちらも試したい。

2014年8月3日日曜日

erlangでネイピア数を求める

erlangでネイピア数を求めてみた。 指数表現やelseが使えなかったりとかするので、なかなか難しい。 もっと洗練された書き方ができそうだ。

2014年8月2日土曜日

初めてのerlang

すこし前に話題になった気がするerlangを触ってみました。 色々と今までやってきた言語とは違うけどfor文がないのが辛いですね。。 そこでfor文ぽい処理を書いてみました。自分で書いたんだけどokって何だろう。。 関数脳になるのは長い道のりが必要そうです。