2011-01-01から1年間の記事一覧

メソッドの実装クラスを探す

Scalaでコード書いていて、標準クラスの実装方法を見てみたくなることがある。※例えば、Listクラスのproduct()メソッドの実装など ソースコードを見るのに、メソッドがどこに実装されているかを知る必要があるんだけど、Javaのインターフェスと違ってScalaは…

構造的部分型とJavaのボックス型

Scalaの勉強してたら嵌った。挙動が良く分からない。 Scala使いには常識あるいは仕様読めwな話かもしれないけど。 実用性の話ではなくてパズル的な話です。 Scalaのバージョンは2.9.1 文字列をくっつける 引数a1とa2を取って文字列として連結したい。a1の型…

真の3D迷路

前回やってみた、「CALayerのみで3Dっぽい表示にする」というのを使って、折角だし立体迷路アプリを作ってみた。 実行ファイル(dmg) ソースコード ちなみにOSバージョンはSnow Leopard(10.6.6)です。 説明 3D迷路って普通こういうのをイメージすると思う。 …

CALayerで3Dグラフィックス?

ちょっと3Dグラフィックスやってみようかと思って、もしかしたら座標変換のライブラリはないかとドキュメントを見ていたら、Core Animationの関数を使ってアフィン変換・透視変換とかできる上に、そのまま描画もできるらしいということが分かった。 Core Ani…

Re: Objective-C で AUTOLOAD (あるいは method_missing )

お題: http://unknownplace.org/memo/2011/12/05/1/ リンク先の実装だと引数の値が取得出来ないので、以下の制約付きで引数が取れるようにしてみた。 戻り値は常にid型 引数は全てid型 引数にnilを指定されたときはNSNullに変換 #import <Foundation/Foundation.h> @interface Foo : N</foundation/foundation.h>…

奇跡の軌跡

AppKitのリハビリ代わりに、2011年8月ごろのコマ大でやってたらしい「奇跡の軌跡」って問題をやるよ。こういう問題だったらしい: 「■コマ大数学科:奇跡の軌跡: ガスコン研究所」より 問題:図のように3つの車輪が異なるサイズで、車輪Cは車輪Bに、車輪Bは車…

壁抜け(物理)の邪仙

パラレル全キャラ分見たのでOS Xに戻した!手を差し伸べるとじこの胸に飛び込みたい。*1 *1:ちなみに十番勝負は一番が始まる前に落ちた……

Apacheのアクセスログを再生する

前に作った「http://d.hatena.ne.jp/terazzo/20090201/1233442194」のクラスの一部を使って、アクセスログの中身をリプレイするプログラムを書いてみた。 GitHub - terazzo/CustomLogTool: CustomLogTool ガラケーサイトで端末プロファイルを分散させつつ負…

確実に一定時間スリープする

Javaで、例えば通信エラー時のリトライ間隔を確保したい場合などのように、一定時間処理を停止したい時はThread.sleep()を使ったりすると思う。 // 三秒間待機する(なんだか問題のある実装!) public void waitForThreeSeconds() { try { Thread.sleep(3 * 1…

JavaでReaderモナドでテンプレートエンジン

前に作ったReaderモナドを使ってテンプレートエンジンを実装するよ。 といっても「The Reader monad」にあるサンプルを写経しただけ。 テンプレートの実装 サンプルを見るとこうなっている - これはテンプレートの抽象構文表現です -- Text Variable Quote I…

JavaでTree Iteratorいろいろ

前回ラーニングしたTree Iteratorで、過去に書いたツリー構造を外部イテレータにするコードを書き直した。 こりゃシンプル。 黒歴史: ツリー構造用の外部/内部イテレータの実装 - terazzoの日記 http://d.hatena.ne.jp/terazzo/20090308/1236526403 ノードに…

Javaでプリキュア冪集合(DX3)

お題: プリキュア冪集合(DX3) - rna fragments べき集合ということは、各要素について選ぶか/選ばないかの組み合わせを全通り数え上げたものってことで、つまり二分木をトラバースする問題だな。 「『ある金額になるコインの組み合わせ』 に挑戦 - コードの…

JavaでReaderモナドでFizzBuzz

例のごとく「All About Monads」を読んでたら、Readerモナドでテンプレートというサンプルが載っていたので、テンプレートエンジン厨としてはこれは是非会得しておきたい。 がしかし、内容がイマイチよく分からないので、とりあえず練習で写経してみた。 Rea…

ScalazのValidationの謎

import scalaz.Validation.Monad._するとエラーがaccumulateされないのはなぜか。 まだちょっと良く分かってないので自分の理解を書く。ちなみにScalaz 6.0.3の話です。 Monadは普通Applicativeになる このへんの話から。また、Monad[M[_] ]はApplicative[M]…

続・ScalazのValidationでFizzBuzz

前回のヤツのいくつか補足。 まだまだ勉強中だけど。 ValidationでFizzBuzz(anonymous left版) scalaz/example/ExampleApplicative.scala見てたらFizzBuzzにぴったりのオペレータ見つけたので書き直した。 import scalaz._ import Scalaz._ object FizzBuzzB…

ScalazのValidationでFizzBuzz

Scalaz使ってみたかったのでScalaインストールした。 Scala素人なのでコードおかしいかも。 import scalaz._ import Scalaz._ object FizzBuzz { def makeValidator(d:Int, msg:String) = { (n:Int) => if (n % d != 0) n.success else nel(msg).fail } val …

スタックトレースとして FizzBuzz を出力

「型エラーとして FizzBuzz を出力 - EAGLE 雑記」見て連想。 Javassistを使ってます。 Javassist直接使ったの初めてだけど、楽でいいなあ(ASMに比べて。) package sample.fizzbuzz; // depends on javassist-3.15.0 import javassist.*; public class FizzB…

退職しました

突然ですが、本日付けで今まで7年間勤めていた携帯電話向けコンテンツ配信会社を退職しましたよ。 といってもすぐ別会社に入社して業務は継続するんだけど。 前の勤め先の受託開発会社が無くなったときに顧客だった会社に拾ってもらった形で就職し、いわゆる…

JavaでWriterモナドでFizzBuzz

「All About Monads」を読んでたら、前に書いたFizzBuzzが実はWriterモナドであることに気がついたのでそれっぽく書き直してみた。 しかし自分のような素人が考え付くような単純なモナドは大体「標準的モナドのカタログ」の中のどれかになってるような。本当…

Javaで非決定計算

「http://d.hatena.ne.jp/keyesberry/20110831/p1」によると、RubyにはAmbという非決定計算をおこなう為の拡張モジュールがあるらしい。 Javaでもやってみた。 Javaではカレント継続のキャプチャ機能が言語レベルでサポートされてないので、前に作った継続モ…

文字列変換処理の合成

自社で共通で使ってる全角→半角の文字列変換のプログラムが遅いので中身を見てみた。 中身見てみると、以下のようにラテン文字の変換とカナの変換を合成していた。 public static String zen2Han(final String p) { return kanaZen2Han(latinZen2Han(p)); } …

Javaで「ある金額になるコインの組み合わせ」

お題: ある金額になるコインの組み合わせ数とその組み合わせを全て答え下さい。条件) ・コインの種類は自由に設定できるようにする。 ・順序が違うだけのものは一つの組み合わせとする。 (例:16の組み合わせで、[1, 5, 10]と[10, 5, 1]は同じ) やってみ…

続・Javaで継続モナド

少し使い方が分かったら書いてみる。 継続モナドのCpsクラスは前回のものベースにする。 この辺がとても参考になった。ほぼ写経……*1 http://d.hatena.ne.jp/einblicker/20110319/1300525656 call/cc 入門 (Coroutine with call/cc) - MAYAH breakとcontinue …

Javaで継続モナド

実践Scala読んでたら継続モナドのこと理解出来そうな気がして来たので実装してみた。Javaで。 やれそうな気がする時は、やれる! この辺がとても参考になった。 Haskellの継続モナド(Continuation Monad)を理解するポイント - よくわかりません howm wiki - …

Re: NSString が整数値かどうか調べる関数

お題: 「NSString が整数値かどうか調べる関数 - 宇宙行きたい」とりあえずFoundation Frameworkにあるようなクラスを使って書いてみるよ。 但し仕事でObjective-C/Foundation使ってたのは前世紀なので今はもっと良いやり方あるかも。 あとiOSだったら正規表…

Javaでチャーチ数

「関数型のテンプレートエンジンで計算 - terazzoの日記」でテンプレートエンジン上でチャーチ数を使って計算してみる際に、どうにも内容が理解できずに詰まったので、Javaで実装してみた。 プログラムとしての動きをつかむことが目的なので全部をλで書き下…

関数型のテンプレートエンジンで計算

「関数型のテンプレートエンジンで何が出来るか - terazzoの日記」の続編ですよ。 但し中途半端の上に、かなりお遊びで。 関数型のテンプレートエンジンの定義はこの辺りで。 各テンプレートが独立した静的スコープを持つ テンプレート(の一部)がファースト…

続・続・比較モナド〜復讐編〜

もういい加減飽きてるだろうけど続けるよ。今日は比較モナドについて復讐するよ。 ソースコードは抜粋なので全部を見たかったらここ見てください。 事のいきさつ ◆ 「http://d.hatena.ne.jp/terazzo/20110526/1306434704」で「比較条件」のチェーンってモナ…

JavaでモナドでFizzBuzz〜復讐編〜(Re:数値のFizz、Buzz等への変換を、Javaで通常より直感的に表現したい)

以前作った「数値のFizz、Buzz等への変換を、Javaで通常より直感的に表現したい - terazzoの日記」の焼き直しですよ。 事のいきさつ ◆ id:sumim様が、「数値のFizz、Buzz等への変換を、Smalltalk(とRuby)で通常より直感的に表現したい - Smalltalkのtは小…

モナドではない

大きな勘違いをしていたかも。モナドの十分な要件って、 ある型aに対してそのコンテナとなる型M(a)が定義される 関数unit_a:a→M(a)、bind_aa:M(a) → (a → M(a)) → M(a)が定義される*1 unit_aとbind_aaについてモナド則が成り立つ 型aの要素xとf:a→M(a)となる…