タグ

ブックマーク / hiratara.hatenadiary.jp (10)

  • Haskell入門という本を書きました - Pixel Pedals of Tomakomai

    Haskell入門 というを書きました。まだ店頭で買うことはできませんが、amazonでは予約を開始しています。また、電子版も早いうちに出ると聞いているので、そちらもあわせてお求め下さい。技術評論社さんのサイトではサンプルのpdfも読むことができます。 Haskellには すごいH というとても良い教科書がすでにありますが、「アプリケーションを作って楽しむ」という観点から書かれたも欲しいなということを常々感じていました1。すごいHでHaskellの考え方やプログラムの組み方は学べますが、例えば、プロジェクトを作成して開発を始めるにはどうするかであったり、必要なライブラリをどこから探してどのように自分のプロジェクトへ組み込むのかといった、開発に必要な基的な事項は自分で学ぶ必要があります。今回執筆した Haskell入門 ではとにかくHaskellでアプリケーションを作ることにフォー

    Haskell入門という本を書きました - Pixel Pedals of Tomakomai
    kzfm
    kzfm 2017/09/18
  • モナドで悟りをひらきたいのなら - 図でわかる(?)モナド - Pixel Pedals of Tomakomai

    圏論の最大の武器はダイアグラムなので、モナドで悟りをひらきたいのならダイアグラムを使えばいいんじゃないでしょうか。 ダイアグラムの書き方 例えば、「 f :: a -> b 」とか「length :: [a] -> Int」は以下のように書きます。型を点で、関数を矢印で書きます。 ダイアグラムの利点は、fやlengthの中身を忘れて簡略化することができることです。人間の脳ができることには限りがあるので、注目する情報が少ない方が理解しやすくなるってスンポーです。 なお、 合成 g . f は図示する時に順が逆になるので気をつけて下さい。これは、合成関数の適用が g ( f x ) と書けることに由来してます。まずfを適用し、次にgを適用するということです。 return と >>= の図示 今回のダイアグラムの約束として、元となる型(Bool, Char, Int 等)は最下段に書きます。そ

    モナドで悟りをひらきたいのなら - 図でわかる(?)モナド - Pixel Pedals of Tomakomai
    kzfm
    kzfm 2009/10/31
  • Moose::RoleはJavaのInterfaceなんかじゃない - Pixel Pedals of Tomakomai

    Moose::RoleはJavaのInterfaceと似たような物だと思ってたんですが、大きな誤解でした。 モダンPerlの世界へようこそを読んで、Moose::RoleはTraits: Composable Units of Behaviorの概念の実装らしいことがわかったので、この論文を読んでみました。*1。非常に面白い内容でした。P.12 の a) と b) を見るだけでも、この概念の面白さが伝わるんじゃないかと。要は、指定した振る舞い(requires)から新しい振る舞い(provides)を作るものが、Traitsってことです。(ただし、ここで言う振る舞いにはアクセサを含みます。) 誤解していたこと Moose::RoleをTraitsとして見なすとすれば、JavaのInterfaceの性質である以下の2点は誤解です*2。 Moose::Roleは、単なるインタフェース(API)

    Moose::RoleはJavaのInterfaceなんかじゃない - Pixel Pedals of Tomakomai
  • Moose::Roleのメソッドの競合 - Pixel Pedals of Tomakomai

    再びTraits: Composable Units of Behaviorのネタです。 Moose::Roleを使った場合、メソッドの優先順位は 自クラス → Role → スーパークラス ... となりますが、ここで Role だけは複数持てるため、競合がありえます。 以下のTaxとTotalの二つのRoleは、どちらもtotal_priceを持っています。 # 価格から税金計算 package Tax; use Moose::Role requires 'price'; sub tax { my $self = shift; return $self->price * 0.05; } sub total_price { my $self = shift; return $self->price + $self->tax; } no Moose::Role; # 単価から合計計算 pa

    Moose::Roleのメソッドの競合 - Pixel Pedals of Tomakomai
  • POEでmapを並行化してみる - Pixel Pedals of Tomakomai

    POEの練習代わりに、POEを使ってmap関数を並行化してみました。今回は MooseX::POE を使っています。 逐次処理バージョン POEで逐次処理版のmap処理を書いてみると、こんな感じになりました。 package MySession; use MooseX::POE; sub transform { sleep 1; return (shift) * 2; }; sub START{ my $self = shift; my @odds = map { transform($_) } 1 .. 10; print join(",", @odds), "\n"; print "done\n"; } no MooseX::POE; package main; use strict; use warnings; use POE; MySession->new; POE::Kernel

    POEでmapを並行化してみる - Pixel Pedals of Tomakomai
    kzfm
    kzfm 2009/03/30
  • git型の共同作業とSVN(CVS)型の共同作業の違い - Pixel Pedals of Tomakomai

    ずっと gitとsvkの違いってなんなのよ? と思ってたんですが、この図とか説明読んでようやくわかりました。 Gitでは旧来のCVS型とGit型の二つの共同作業のモデルが使えます。これが混乱の元でした。 Gitのすごさを当に体感するなら、gitを使うだけでは不十分でGit型のモデルにそって開発することが必須です。 CVS型 従来のSVN(CVS)のモデルです。pullをしてきて、pushで更新を戻します。 1つの公開リポジトリに対し、複数人がpushを行う pushにより他の人と競合するかも メインのリポジトリにpushすることを目指す 能動的 → 悪意のあるpushも可能 → "コミッター"を絞る必要あり Gitgithubっぽいモデルです。pullをしてきて、pullで更新を持って行ってもらいます。 全体がpullでまわるため、pushがプライベートな操作として隠蔽されてるのがポ

    git型の共同作業とSVN(CVS)型の共同作業の違い - Pixel Pedals of Tomakomai
    kzfm
    kzfm 2009/01/13
  • Yokohama.pm テクニカルトーク #3 に参加中 - Pixel Pedals of Tomakomai

    ワタクシは横浜人ですので。 Perl でモンテカルロ法 〜最強の○×ゲームエンジン開発〜(jukuin2000さん) モンテカルロ法の説明 乱数と確率を使う - 扇形の面積を求めるデモモンテカルロ法と扇形の面積の公式を元に、πの値を求めるデモ 人工知能歴史 将棋、チェスはAIが人間を超えつつある 囲碁は人間が断然強い →が、マス数を減らして、AIが勝った == モンテカルロ法 次に打つ手でシミュレートし、勝つ確率がもっとも高い手を選ぶ ○×ゲームで、この手法を実演 モンテカルロ法の利点 ゲーム特有の戦略(必勝法)が全く不要 作成者より強いプログラム、ゲームに詳しくない人でも書ける どんなゲームでも、ルールと終了条件だけ知ってれば後はひたすらシミュレーションするだけ モンテカルロ法が向いてないもの 将棋 → ランダムに打つと、終局しない(シミュレーションを終えにくい) Q. モンテカルロ法

    Yokohama.pm テクニカルトーク #3 に参加中 - Pixel Pedals of Tomakomai
    kzfm
    kzfm 2008/11/29
  • 高階関数とlocalは相性がいい - Pixel Pedals of Tomakomai

    太古の昔、localよりmyを使え! とみんなが口を酸っぱくして言っていたものだから忘れがちですが、正しい使い方をすればlocalはすごい便利です。 まとめ 最初にまとめを書いておきます。(なので、最後にまとめはありません!) localは便利 メソッド間に渡ってlocalの効力を持たせたければ、高階関数的なAPIにする Schemeのcall-withなAPIがいいお手になる localの使い道 localは、共有している変数(特にグローバル変数)を「一時的」に変更したい時に使います。この、「一時的」ってのがミソです。他の操作と共有する変数の変更は、実行中のスクリプト全体に大きな影響を与えるため、まっとうな開発者であればなるべくやりたくないことです。しかし、localをつけて変数にアクセスすると、ブロックを出た時にもとの値に戻ることが保証されます。 以下は、Devel::PerlySe

    高階関数とlocalは相性がいい - Pixel Pedals of Tomakomai
    kzfm
    kzfm 2008/09/29
    pythonだとwithステートメントを使えばよいのでしょうかね。
  • CPANデビュー - Pixel Pedals of Tomakomai

    やっとCPANデビューしました。こんな感じです。 登録〜公開の手順は、川崎さんのページが詳しくてわかりやすいです。以下、概要をメモ。 PAUSEへアカウント登録 PAUSEにユーザ登録申請をする 辛抱強く待つ。「Welcome new user XXXXX」 ってメールが返ってきたら登録完了*1 (やらなくてもOK) Gravatarで XXXX@cpan.org に対してアバターを設定すると写真が貼れる 実装する 型紙作成〜パッケージングに関しては竹迫さんの記事が参考になりました。 モジュールの型紙を作る。(h2xsとかmodule-starterとかpmsetupとか) t/*.t (テスト) を実装。 *.pm (実体)を実装。 $VERSIONを設定 podを書く README、ChangeLog、MANIFESTを書く (Build.PLの場合)Makefile.PLも忘れずに書

    CPANデビュー - Pixel Pedals of Tomakomai
    kzfm
    kzfm 2008/01/05
  • YAPC::Asia 2007 開催中(1) - Pixel Pedals of Tomakomai

    適当に実況します。ネットワークとバッテリーが続く限り。 9:15 開場されました。結構ガラガラな感じです。 9:30 FONによる無線LANの繋ぎ方の説明。でも、回線安定しないのでEDGE使ってます。スケジュールは早くも押してて、38分スタートらしいです。 9:38 Welcome / Tatsuhiko Miyagawa 世界最大のYAPCらしいです。 9:48 Kwiki and the Symlink / Ingy dot Net ドラエモンな × 3 Ingy dot Net名にしたっぽい "Ingy döt Net" in Hatena ... orz Kwiki2.0の紹介 Symlinkを色々使っている 依存するモジュール ドキュメント 継承 インストールを手早くするノウハウ? やっぱ英語きつい(笑) 10:25 Virtualization and Package D

    YAPC::Asia 2007 開催中(1) - Pixel Pedals of Tomakomai
  • 1