投稿

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.out.prin…

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,end=max(1,n-1…

勉強しよう

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=061011http://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コンビネータを作成するかはその時の思いつきで決めています。以下で取り上げている言語は
SchemeCommon LispOcaml (断念)HaskellErlangJavascriptRubyPythonPHPSmalltalkPerlGo (中断、調査中)LuaIo (断念)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ではもっとシンプルなY combinatorの例が掲載されています。ただし、factを定義するために、…

Pythonメモ

True, Falseそれぞれ 1, 0 だけど、0はfalseと判定され、0以外の数字はtrueと判定される。ソースで確認。三項演算子a = x if st else ystが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

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_javascripthttp://rubygems.org/gems/javascript_auto_includehttp://rubygems.org/gems/javascript_eraserhttp://rubygems.org/gems/javascript_featureshttp://rubygems.org/gems/javascript_i18nhttp://rubygems.org/gems/javascript_localizehttp://rubygems.org/gems/javascriptohttp://rubygems.org/gems/javascripto-railshttp://rubygems.org/gems/mack-javascripthttp://rubygems.org/gems/to-javascripthttp://rubygems.org/gems/universe-javascript

Xcode

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