投稿

6月, 2011の投稿を表示しています

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 ではもっとシンプ

Pythonメモ

True, False それぞれ 1, 0 だけど、0はfalseと判定され、0以外の数字はtrueと判定される。ソースで確認。 三項演算子 a = x if st else y stがtrueならx、falseならy これを使うと階乗は次のように書ける fact = lambda n: 1 if n==0 else n*fact(n-1) print fact(5)

XMLHttpRequest2

http://www.html5rocks.com/en/tutorials/file/xhr2/ クロスドメインでのPOSTもできる感じなんかな?

無駄のないコード

チラ裏御免。 Project Eulerの上位陣と自分のコードを比較してみると、明らかに変数の量が違う。 自分のコードでは、一回しか使わなないのに変数として保持したままになっていることが多い。数列の一部分は「とりあえず」で保存してしまっている。ループ中に必要になるのはそのループにマッチした、特定の項だけだとしても。 以前は、方針がよく分からず例題用コードから行き当たりばったりで最適化を行うようなことをしていた。でも、今はコードを書く前にアルゴリズムを書き出すことができるようになっている...(いや、これは奢りだな)。計算量やメモリ量を見積って、実行する前に計算時間があらかた予想できている。 これからは不要な変数に注意を払いながらアルゴリズムを考えるようにしよう。   いや、基本生兵法なのがいけないか。もっと本を読もう。

byobu on Mac

How to install Python newt or snack in Mac OS X for byobu Mac で byobu を使おうとした時に、newt関連で実行できないことがあります。解決策はいろいろあると思いますが、MacPortsを使うなら libnewt をインストールして環境変数を設定すれば解決できます。実行するコマンドは以下のようになります。 % sudo port install libnewt % export PYTHONPATH=/opt/local/lib/python2.6/site-packages/ csh系なら % setenv PYTHONPATH /opt/local/lib/python2.6/site-packages/ 以前つまづいた問題がsuperuserで質問されていたので答えましたよってだけです。

Node.js

http://www.ibm.com/developerworks/jp/cloud/library/cl-nodejscloud/ を読んで頭が混乱。。。というかNode.jsについて何も分かっていないことを認識した。 そして、ググること数秒 http://d.hatena.ne.jp/forest1040/20110407/1302150936 で目からウロコが落ちた。

Perl

http://lab.kamawada.com/techmemo/index.cgi?page=%40INC%A4%CB%A5%D1%A5%B9%A4%F2%C4%C9%B2%C3%A4%B9%A4%EB%A4%CB%A4%CF

LinkedListのサンプル

LinkedListで整数を扱おうとしたところ、java.lang.Objectを(int)で型変換しようとして失敗。。。ハズカシス。 扱うオブジェクトが整数(Integer)と分かりきっている場合は import java.util.*; class LinkedListTest { public static void main(String[] args) { LinkedList<Integer> list = new LinkedList<Integer>(); list.add(1); list.add(11); list.add(13); for (int i = 0; i < list.size(); i++) { int x = (int)list.get(i); System.out.println(x); } } } オブジェクトを判別しながら処理する必要がある場合は、instanceof 演算子で調べget()の返り値をキャストする。 import java.util.*; class LinkedListTest { public static void main(String[] args) { LinkedList list = new LinkedList(); list.add(1); list.add("Hello"); list.add(13); for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i) instanceof Integer); if (list.get(i) instanceof Integer) { Integer x=(Integer)list.get(i); System.out.println(x);

Tiny Core Linux

http://distro.ibiblio.org http://wiki.tinycorelinux.net/wiki:install_apps

Rubygem上のJavaScript関連プロジェクト

$ gem search --remote javascript *** REMOTE GEMS *** harukizaemon-cascading_javascripts (2.0.3) inline_javascript (0.1) javascript_auto_include (0.1.0) javascript_eraser (1.0.2) javascript_features (1.0.1) javascript_i18n (0.2.2) javascript_localize (0.0.2) javascripto (0.0.2) javascripto-rails (0.0.3) mack-javascript (0.8.3.1) neerajdotname-javascript_lab (0.0.15) niessner-javascript_generator_enhancements (0.0.1) qoobaa-javascript_i18n (0.2.2) to-javascript (1.0.0) universe-javascript (0.1.1) 上記のうちrubygems.orgにあるのは以下 http://rubygems.org/gems/inline_javascript http://rubygems.org/gems/javascript_auto_include http://rubygems.org/gems/javascript_eraser http://rubygems.org/gems/javascript_features http://rubygems.org/gems/javascript_i18n http://rubygems.org/gems/javascript_localize http://rubygems.org/gems/javascripto http://rubygems.org/gems/javascripto-rails http://rubygems.org/gems/mack-javascript http://rubygems.org/gems/to-javascript http://rubygems.org/gems/universe-javascript

Xcode

http://ameblo.jp/xcc/entry-10400027873.html http://blog.livedoor.jp/mogiken1/archives/3379746.html