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

generic の自己再帰定義活用

Haskell の Monad の bind は、戻り値が第一引数と同じ Monadインスタンスでないとなりません。そうでないとモナド則が成り立たないですしね。 そもそも Haskell の ad-hoc polymorphism では、同じ型クラスの違うインスタンスを混ぜて扱うことは許していな…

Pythonのメソッド引数に self を書くメリット

なぜPythonのメソッド引数に明示的にselfと書くのか に関連して。 確かに他の言語から移ってきた人からすると奇異に見えることが多そうですね。ただ、私はこの仕様を知ったとき「上手いな」と思いました。というのも、 instance.method(arguments) == ClassN…

Singleton にするために enum を使う是非

以下思考の変遷。priority という値を持つ DTO と、その DTO の List を priority順で処理する必要があるロジックがありました。 ■Dto public class HogeDto { private short priority; public short getPriority() {return priority;} // その他の項目は省…

S2JDBCによる不変オブジェクト活用

以前から S2JDBC を利用しています。DTOとEntityを同じクラスにしたいため、public field は避けて JavaBeans にしていました。最初、S2Dao と同じ感覚で各種アノテーションをアクセサに指定してたんですが、これが何故か動かない。はて、と思って S2JDBC の…

Effective Java の Builderパターンとその拡張

Effective Java 第2版 (The Java Series)作者: Joshua Bloch,柴田芳樹出版社/メーカー: ピアソンエデュケーション発売日: 2008/11/27メディア: 単行本(ソフトカバー)購入: 77人 クリック: 936回この商品を含むブログ (264件) を見るちょいと前から Effecti…

Key-Value Store の統一インターフェイスが欲しい

最近 Tokyo Cabinet/Tokyo Tyrant で遊んでいます。分散楽しいです。最初は Key-Value型のデータストアっていっぱいあってどれがいいかなーとか比較してたりしたんですが、やっぱりエンティティをシリアライズするコストがどうにも気になって。BigTable みた…

List モナドの mplus サンプル in JavaScript

前回の記事 で Listモナドと Maybeモナドの mzero/mplus について書きましたが、Maybe についての例しか出してなかったですね。なので List モナドの例についても紹介しておこうと思います。前回と同じくクローン羊の例を使います。 羊を表す Sheep クラスが…

Purely Functional Data Structures 写経 5.4 Splay Heaps

Purely Functional Data Structures作者: Okasaki出版社/メーカー: Cambridge University Press発売日: 1999/07/01メディア: ペーパーバック購入: 5人 クリック: 46回この商品を含むブログ (25件) を見るHaskell写経の続きです。5.3章は3.2章の Binomal Heap…

JavaScript でモナド List と Maybe に mzero と mplus

JavaScript で Maybe JavaScript で Listモナド に続く Monadic Programming in JavaScript シリーズです。今回は List と Maybe に Haskell で言う mzero と mplus を用意してみましょう、というお話。と、ちょっとその前に。今までの記事では Haskell の r…

JSONスキーマの存在意義

檜山正幸さんがJSONスキーマについて丁寧に解説されています。この記事のブコメを見てみると XML Schema が在るんだし軽さがウリの JSON にそんなの必要なくね?的なコメントが散見されます。実を言えば私自身もこの記事を最初に見たときにそう思いました。…

Array.prototype.map の自前実装

javascript array map 自前 という検索ワードでのリファラがあったので map の自前実装でも書いてみます。 とはいえ、すでにやってる方がいらっしゃるので Arrayオブジェクトのmapメソッド - バリケンのJavaScript日記 多元配列を一元配列に変換 (JavaScript…

countUp できる CountDownLatch

先日、CountDownLatch の Count をインスタンス生成してから決定したいというケースがありました。 JDK標準で提供されているモノでなんとかならないかと思ったのですが、要望に合致するものが見つけられなかったので書いてみました。 import java.util.concu…

Purely Functional Data Structures 写経 5.2 Queues

Purely Functional Data Structures作者: Okasaki出版社/メーカー: Cambridge University Press発売日: 1999/07/01メディア: ペーパーバック購入: 5人 クリック: 46回この商品を含むブログ (25件) を見るHaskell 写経の続きです。4章は遅延評価の章で、Stand…

Cache のクリア

以前に紹介した汎用オブジェクトCache [id:gakuzo:20090226:1235667999] ですが、キャッシュのクリアが無いと使えないよ!というご指摘を受けました。キャッシュのクリアについては、Cacheインスタンス自体を破棄すれば OK です。例としてはこんな感じに。 p…

Purely Functional Data Structures 写経 3.3 Red-Black Trees

Purely Functional Data Structures作者: Okasaki出版社/メーカー: Cambridge University Press発売日: 1999/07/01メディア: ペーパーバック購入: 5人 クリック: 46回この商品を含むブログ (25件) を見るHaskell 写経の続きです。P24〜P29赤黒木です。赤黒木…

prototype.js の Enumerable.invoke と Enumerable.pluck

昨日の記事 [id:gakuzo:20090403:1238715610] に書いた callMethod ですが、似たような発想のメソッドが prototype.js には用意されているようですね。昨日の例だとこんな使い方ができるようです。 customers.map(callMethod("isOver", 30)); // このコード…

NTTドコモ、メールアドレスのルールを変更 〜 ピリオド連続などが使用不可に

http://www.rbbtoday.com/news/20090403/59059.htmlついに!ついに!!あとは au か……。

callback の method call

jQuery や prototype.js を始め、JavaScript で高階関数を扱うライブラリも最近では一般的になりました。そのようなライブラリでは大抵 callback 関数に引数でオブジェクトを渡すことが多いのですが、JavaScript はれっきとしたオブジェクト指向言語なので、…

Purely Functional Data Structures 写経 3.2 Binomial Heaps

Purely Functional Data Structures作者: Okasaki出版社/メーカー: Cambridge University Press発売日: 1999/07/01メディア: ペーパーバック購入: 5人 クリック: 46回この商品を含むブログ (25件) を見るPurely Functional Data Structures の Haskell 写経…

高階関数で書き直し

昨日の JavaScript で Listモナド [id:gakuzo:20090401:1238599220] ですが、サンプルのために expandCharClass と expandAltWords をベタっと書きましたが、本来ならもう少しすっきり書きたいですね。先に String.prototype.toArray を定義しておきます。pr…

モナドは関数合成の抽象化

以前にモナドについて書いたのですが、どこかで書かれていた「モナドは関数合成の抽象化」という表現がなんとなくしっくりきました。合成戦略を各モナドインスタンスが担う、と。それから do構文について。最初、do構文は複文を実現するための機構なのかな、…

Purely Functional Data Structures 写経 3.1 Leftist Heaps

Purely Functional Data Structures作者: Okasaki出版社/メーカー: Cambridge University Press発売日: 1999/07/01メディア: ペーパーバック購入: 5人 クリック: 46回この商品を含むブログ (25件) を見る続きです。P17〜P20まずは Heap の signature から。 …

JavaScript で Listモナド

[id:gakuzo:20090223:1235405890]「JavaScript で Maybe」に続く、Monadic Programming in JavaScript 第二弾。JavaScript で Listモナドです。さっくりコードに行きましょう。 Array.ret = function(obj) { return [obj]; } /** jQuery版 */ Array.prototyp…

Purely Functional Data Structures 写経 2.2 Binary Search Trees

Purely Functional Data Structures作者: Okasaki出版社/メーカー: Cambridge University Press発売日: 1999/07/01メディア: ペーパーバック購入: 5人 クリック: 46回この商品を含むブログ (25件) を見る続き。P11〜P15 data Ord a => Tree a = E | T (Tree …

Purely Functional Data Structures 写経 2.1 Lists

Purely Functional Data Structures作者: Okasaki出版社/メーカー: Cambridge University Press発売日: 1999/07/01メディア: ペーパーバック購入: 5人 クリック: 46回この商品を含むブログ (25件) を見る関数型言語ならではのデータ構造を身に付けるために P…

Google、AppEngineでJavaのサポートを開始

http://jp.techcrunch.com/archives/20090326get-ready-for-java-on-appengine/ついに来た!Java対応のGoogle App Engineとも言うべき「Stax Networks」ローンチ ていうのを見かけて Stax で少し遊んでいたんですが、Google App Engine 本家もついに動き出し…

Monad インスタンスのモチベーション

Haskell の勉強を続けているわけですが、未だに Monad がすっきりと腑に落ちていません。Monad則は理解できます。 個々の Monad Instance、Maybe や List、State と言った個別の instance に関しては、使い方もメリットも理解できます。 ただ逆に、こういう…

件数指定Iterator

前回の記事 [id:gakuzo:20090227:1235728271] で書いた take ですが、これも Iterator にした方が、遅延評価っぽくていいかもしれません。 import java.util.Iterator; public class FixedLengthIterator<T> implements Iterator<T> { private int index; private </t></t>…

Javaで無限リスト

Haskell の勉強をしていたら iterate という関数を見つけて非常に興味がわきました。 iterate は「初期値」と「現在の値から次の値を算出する関数」の二引数を与えると無限リストを生成してくれる関数です。 線形合同法を用いた疑似乱数列なども簡単に作れて…

Thread Safe な汎用オブジェクトCache

「DB負荷を減らしたいのでマスタテーブルはキャッシュして下さい><」だとか 「ファイルIOは重いのでテンプレートはキャッシュして下さい><」だとか 割と良く言われたりします。オブジェクトのキャッシュは手軽な高速化の手段だと思われているようですが…