2008-10-01から1ヶ月間の記事一覧

Gaucheのオブジェクトシステムを試す

30分プログラム、その404。最近、Schemeのオブジェクトシステムに興味津々です。 というわけで、Gaucheのオブジェクトシステムを使ってリストを作ってみる。 使い方 ;; リストを作る gosh> (define xs (make <my-list> :head 1 :tail (make <my-list> :head 2))) ;; 表示 gosh></my-list></my-list>…

Scheme-abcのオブジェクトシステム

今、scheme-abcにはClojureに似たオブジェクトシステムが載っている。別にマネした訳じゃなくて、たまたま似ただけなんだけど。 ;; クラス定義 (define-class Foo Object ([f x] (print x))) ;; インスタンスの生成 (define foo (new Foo)) ;; メソッド呼び…

lim[n→∞]√2↑↑n=2

id:athos:20081028:p1 g:csnagoya-sicp:id:Gemma:20081029 g:csnagoya-sicp:id:Gemma:2008103030分プログラム、その403。なんとなくボクも参加しないといけない気がしたので、書いてみる。 げんまさんが無限ストリームで計算してたので、ボクはPythonのイテ…

曜日を判定するプログラム

30分プログラム、その402。日付を与えると曜日を返す関数を書いてみた。 本当はカレンダーを作るつもりだったけど、整形して表示する時間はなかった。 使い方 # 1970/1/1が基準 $ perl cal.pl 1970 1 1 Thu # 今日は水曜日 $ perl cal.pl 2008 10 29 Wed ソ…

Flexフレームワークの基礎(要約)

Programming Flex 3: The Comprehensive Guide to Creating Rich Internet Applications with Adobe Flexの"Framework Fundamentals"を読んだので適当にまとめてみる。 そうか、FlexとFlashの違いはライブラリだったのか。

SchemeからSwfの生成に成功したよ!

いままで色々がんばってきて、やっとSchemeからSwfに変換できるようになった。やった。 ;; swf.scm (define-class Hello flash.display.Sprite ((init) (let [(t (new flash.text.TextField))] (invoke t appendText "Hello,world!!") (invoke this addChild…

Erlangでfutureパターン

30分プログラム、その401。ErlangでJava言語で学ぶデザインパターン入門 マルチスレッド編に載ってるfutureパターンをやってみる。futureパターンはこんな感じで、別スレッドで値を計算させるやつ。 // 別スレッドで処理が走る Data data1 = host.request(10…

FunDepでCollectionクラス

30分プログラム、その400。この前のocaml-nagoyaでid:syd_sydさんがFunDepの話をしていた。細かい話はついていけなかった。でも、例としてでてきたCollクラスがなかなか便利そうだった。 class Coll a b where empty :: b insert :: a -> b -> b instance Co…

embedタグ + iUIでiPod touch用動画サイト

id:mallowlabsに「embedタグで動画を埋め込むとiPod touchでストリーミング再生してくれるよ」というとても素敵なことを教えてもらった。 あまりに素敵すぎたので、思わずiUIと組合せて動画共有サイトっぽいやつを作ってしまった。別に誰とも共有してないで…

疑似乱数を作ってみる

30分プログラム、その399。疑似乱数を作ってみる。 より正確には疑似乱数を計算する関数を返す関数を作った。疑似乱数の種を与えると、疑似乱数を計算する関数を返すやつ。 あと、ひとつ前の乱数を保存するために、ローカル変数とクロージャを組合せてみた。…

SICPをScalaで淡々と解く

30分プログラム、その398。SICPをScalaで淡々と解くお。 csnagoyaのSICP読書会に参加するか迷いつつも、とりあえず演習問題だけは解いておく。 1.7 def average(x : Double, y : Double) = (x + y) / 2 def improve(guess : Double, x: Double) : Double = a…

ファイルを空にするプログラム

30分プログラム、その397。ファイルを空にするプログラム。 ちょっと欲しかったので書いてみたけど、よくよく考えればrmしてからtouchすれば十分だった。まあいいや。 使い方 $ cat hoge.txt Hello, world!! $ gosh empty.scm hoge.txt $ cat hoge.txt ソー…

mixiの課題丸投げをひたすら解く、Pythonで(2)

30分プログラム、その396。mixiの(mixi)C/C++の課題丸投げコミュニティにある問題をひたすら解いてみる。ただし、Pythonで。 割と無茶な丸投げがおおい。「論理式をパースして実行するプログラムを書いてください」とか「形態素解析をしてください」とかでき…

w3mのNEXT_DOWNをいじってみた

w3mのNEXT_DOWNは、OperaのNavigate downに似ているんだけど、ちょっとだけ違う。w3mは真下にしか移動しないけど、Operaは多少横にずれていても移動してくれる。 というわけで、適当にいじくってみたら、わりと簡単にできた。w3mすごい。 変更したあとのコー…

Unicodeの名前を出力するやつ

30分プログラム、その395。Unicodeの名前を出力するやつを作ってみた。 Perlのcharnamesを使うと、簡単に文字コードから文字の名前が取得できるらしい。なので、前から作ってみたかった文字の名前を表示するやつを作ってみた。 $ perl name.pl h LATIN SMALL…

/Applications/*.appへのエイリアス

30分プログラム、その394。id:rednesが/Applications/*.appを起動するシェルスクリプトを生成するシェルスクリプトを書いていたので、aliasでマネしてみた。毎回、/Applications/*.appを見にいくと遅かったので、~/.zsh/appにキャッシュするようになってる。…

w3mだってmigemoが使いたい

w3m

Ubuntuでaptitudeでmigemoをインストールして、w3mで「Migemo(ローマ字検索)を使用する」をオンにするだけじゃ使えない。 どうも出力がUTF8になってないらしい。 /usr/bin/migemoを直接書き換えて、toutf8してから出力するようにしたら動いた。やった!参考:…

Operaの"Go to parent directory"がうらやましすぎるので、w3mに移植した

w3m

Operaの「Control-Backspace」こと"Go to parent directory"(いっこ上のディレクトリに移動)が結構便利。 なのでローカルCGIで再現して、w3mでも使えるようにしてみた。~/.w3m/cgi-bin(あるいは自分で設定したディレクトリ)にup.cgiを置く。 #! /usr/bin/rub…

デジタル回路シミュレータ

30分プログラム、その393。SICPに載っていることで有名なデジタル回路シミュレータをErlangで作ってみる。 時間がなくて全部は無理だったので、ワイヤとプローブ、入力の3つだけ。そのうちANDやNOT、加算器とかも作るかもしれない。 使い方 test() -> Wire =…

モナドを理解するには

各個撃破しかないと思う。 圏論のモナドの話を聞いてもよく分からないし、理解したからといってHaskellプログラムがすらすら書けるようになる気がしない。 ボクには「モナドとは何ぞや」は荷が重すぎる。「Stateモナドとは何ぞや」ぐらいがちょうどいい。

Stateモナドを手で展開してみる

30分プログラム、その392。Stateモナドを理解するために手で展開してみた。 展開してみた感想は、確かにStateモナドが状態を持てる理由は分かった気がする。でも、これをモナドに押し込めた人は天才だと思う。 do 記法 とりあえず、普通に書いてみた。 impor…

Scalaで集合(Set)

30分プログラム、その391。Programming in Scala, Third Editionが型パラメータのとこに入ったので、コンテナっぽいクラスが作ってみたくなった。なので、集合クラスを作ってみた。ポイントは、 class MySet[T

ファイルごとにコマンドを実行するシェルスクリプト

コマンドのなかには、複数のファイルを引数にとってくれないのがある。 例えば、unzipは複数のファイルを解凍したい場合は次のようにしないといけない。 $ unzip a.zip $ unzip b.zip # NG: unzip a.zip b.zip こういうときはfor .. inを使えばいい。 $ for …

Webページのダウンロード

30分プログラム、その390。rfc.httpを使ってWebページをダウンロードしてみる。 ホントはmixiのクローラを作ろうと思ったんだど、うまくログインできなかったのであきらめた。あと、http://google.co.jpを表示しようとしたら、ループにおちいったんだけどgoo…

mixiの課題丸投げをひたすら解く、Pythonで

30分プログラム、その389。mixiの(mixi)C/C++の課題丸投げコミュニティにある問題をひたすら解いてみる。ただし、Pythonで。このコミュニティの趣旨はいかがなものかと思うけど、C言語で解かなければ誰の得にもならないからOKだろう。ボクとしても、こういう…

パイプでも複数行のlsが使いたい

30分プログラム、その388。 普通にlsをパイプで使うと、一行になってしまう。 $ ls | head 13.pl 180-croquis_file.pl 181-hello.oz 182-mapreduce.ml 183-p4.ml 184-tarai.hs 184-tarai.rb 185-auto_insert.rb 186-url.rb ls -Cを使えば複数行になるけど、…

ErlangでWebアプリ

30分プログラム、その387。yawsを使ってErlangでWebアプリを作ってみた。 Webアプリの内容はなんでもよかったので、適当に階乗を計算するやつにしてみた。割としっかりしてる印象を受ける。もしかしたら、コマンドラインで動作するプログラムよりも簡単にWeb…

Haskellでgrep

30分プログラム、その386。Haskellでgrepを作ってみた。最初、grep関数はこんな感じに書いてた。 grep r lines = let regex = mkRegex r in filter (containRegex regex) lines で、いちど動いたあとに、どんどん引数を消していったら以下のようになった。 g…

符号拡張がしたい

ABCをパースする際に、24ビットの整数を32ビットの整数に符号拡張したくなった。とりあえず、算術シフトをつかって実現してみた。7ビットシフトなのは、OCamlの整数が31ビットだから。 let s_extend d = (d lsl 7) asr 7 これでもいいんだけど、CPUによって…

OCamlのモナドで虫食い算

30分プログラム、その385。OCamlのモナドを試してみる。ocaml-nagoya的には、一年以上前の話題な気がするけど。 http://www.itpl.co.jp/ocaml-nagoya/?OCaml%A5%C6%A5%AF%A5%CB%A5%C3%A5%AF%2Fmonadを参考にして、pa_monadをコンパイルする。要するにダウン…