投稿

JavaでIRCクライアント

コメントを投げるだけのシンプルなIRCボットをJavaで作成してみました。 作成にあたってRFCを参照した他に、 PircBot のソースを参考にしました。IRCボット作成用のJavaフレームワークで、GPLと商用ライセンスの両方が利用できます。 以下のソースはgithubでも公開してあります。 https://gist.github.com/1489587 import java.net.*; import java.io.*; import java.util.*; class IrcSenderSimple { static void sendString(BufferedWriter bw, String str) { try { bw.write(str + "\r\n"); bw.flush(); } catch (Exception e) { System.out.println("Exception: "+e); } } public static void main(String args[]) { try { String server = "chat1.ustream.tv"; int port = 6667; String nickname = "ustreamer-183999bot"; String channel = "#bot-test-ch"; String message = "hi, all"; Socket socket = new Socket(server,port); System.out.println("*** Connected to server."); OutputStreamWriter outputStreamWriter = new OutputStreamWriter(socket.getOutputStream()); System.o...

Java

イメージ
FileOutputStreamとDataOutputStreamを使ったときのcloseは、後者に対して実行するだけでいいんだろうか? 独習Java 第4版 のP. 360あたりにサンプルコードが載っているけど、DataOutputStreamをcloseするだけで、FileOutputStreamも閉じられるの? FileOutputStreamだけを閉じたとき、DataOutputStreamも閉じられるの? これを確認するのには、ソース読まなきゃダメ?   JDK7のソースを開いてみたら、そんなに複雑でもなく理解できそう。あとで、該当箇所をまとめておこう。

グラフ作成ソフトを探したら、選択肢はR一択だった件

普段はIDLを使用してグラフ作成を行っていますが、IDLが使用できなくなった場合に備えて無償ソフトを探してみました。 考慮する条件は以下のとおりで、英語版wikipediaのplottingカテゴリから探しました。 最近も活発に開発が行われている (最終安定版が最近一年以内にリリースされている) MacPortsで配布されていたり、pkgバイナリが用意されているなど、インストール作業が簡単である。 グラフ作成処理をスクリプト化できる この他、綺麗なグラフの作成やスクリプト言語の習得が容易であるかなども重要だと考えていますが、実際に触ってみなければ判断できないため、選考基準からは外しました。 実際にインストールを試みたのは Fityk, MayaVi, PLplot, QtiPlot, Rでしたが、コンパイルエラーを解決できなかったり、スクリプトの実行に必要なライブラリが見つからないなどの問題が発生しました。結局、自分に使えそうなのは R のみとなりました。 以下に、Rのサンプルとrubyからの利用方法をまとめます。なお、Rのサンプルを実行するには、サンプルのファイル名を sample.r とすると、 $ R --no-save < sample.r もしくは $ Rscript sample.r というコマンドを使用します。 Rスクリプトのサンプルその1 一次元プロット。 x <- c(1,2,3,4,5,6) y <- x^2 plot(x,y,xlab="x",ylab="y=f(x)",main="f(x) = x^2") サンプルその2 カラーコントアとコントアの重ねあわせ。ここではpng画像に保存しています。 png(filename="./Rplot.png",width=480,height=480,units="px",bg="white") x <- (1:100)/100*7 y <- x r <- sqrt(outer(x*x,y*y,"+")) z <- sin(r) n=200 image(x,y,z,col=rainbow(n,s=1,v=1,start=0,...

勉強しよう

HTML5とかおHamlとかSCSSとかJQueryとかCoffeeSCriptとか、いつか、いつか、いつよ?

Erlang

イメージ
基本的には プログラミングErlang を参照して勉強しています。他に参考にしているのは、以下のサイトです。 http://www.ibm.com/developerworks/jp/opensource/library/os-erlang1/?cmp=dw&cpb=dwope&ct=dwrss&cr=dwrss&ccy=jp&csr=061011 http://www.erlang.org/doc.html 使用方法 シェルを起動するには erl、スクリプトを実行する場合はescriptを使用する。 文法 コメントは % 変数は先頭文字が大文字 関数定義は a(X) -> X * 2. のようになる。最後のピリオドに注意。 無名関数は fun(X) -> X * 2 end 。最後のendを忘れずに。 if 文は if N==0 -> 1; true -> N end のように、セミコロンで区切る。else文の代わりにtrueを用意しておく、必ず。 main([]) -> ... コマンドライン引数を取らないときのメイン io:format 標準出力。エスケープ文字はチルダ ~ 。つまり、~ nで改行。~wで数値。 http://www.erlang.org/doc/man/io.html

Node.jsメモ

http://d.hatena.ne.jp/kuenishi/20101013/1286973687 >「node.jsってPythonのTwistedだったりRubyのEventMachineみたいなもんだよ」   > ErlangのWebサーバーってのはね、1コネクションにつき1プロセス立ち上げるわけ。わかる?100Kのコネクションがあったら、100KのWebサーバーが立ってるわけ。そん中のいっこくらい死んでも何ともないのがErlang. スケーラビリティと対障害性のトレードオフ?  

Y Combinator

イメージ
Y コンビネータを思い出すために、いくつかの言語で実際に作ってみます。 このトピックは不定期更新で、一番最後のプログラムが最新の投稿となっています。また、どの言語でYコンビネータを作成するかはその時の思いつきで決めています。以下で取り上げている言語は Scheme Common Lisp Ocaml (断念) Haskell Erlang Javascript Ruby Python PHP Smalltalk Perl Go (中断、調査中) Lua Io (断念) C 今後計画している言語は、C++, Java, Vala, Scalaです。 それでは、本題に入っていきます。 Scheme (define Y (lambda (f) ((lambda (proc) (f (lambda (arg) ((proc proc) arg)))) (lambda (proc) (f (lambda (arg) ((proc proc) arg))))))) (define fact (lambda (f) (lambda (n) (if (zero? n) 1 (* n (f (- n 1))))))) (print ((Y fact) 5)) Common Lisp (defun Y (f) ((lambda (proc) (funcall f (lambda (arg) (funcall (funcall proc proc) arg)))) (function (lambda (proc) (funcall f (lambda (arg) (funcall (funcall proc proc) arg))))))) (defun fact (f) (function (lambda (n) (if (zerop n) 1 (* n (funcall f (1- n ))))))) (print (funcall (Y 'fact) 5)) Scheme版と結構違ったものになってしまいました。 入門Common Lisp ではもっとシンプ...