タグ

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

  • I/Oストリーミングライブラリの実装の基礎 - 前編 - Pixel Pedals of Tomakomai

    conduitやpipesなどのストリーミングライブラリの実装は結構わかりにくい。Pipes to Conduitsという一連のエントリが分かりやすい解説なのだが、それでも序盤からFunctorやFreeモナドを駆使していてハードルが高めな印象を受ける。 理解するには自分で実装するのが一番の近道だろうから、このエントリでごく簡単なストリーミングライブラリを実装してみよう。ストリーミングライブラリではI/Oを扱うのが目的であるため、来であればモナドを扱えるように実装しなければ意味がないのだが、ストリーミングの基的な仕組みとしてはモナドは重要ではないので、ここでは純粋な値のみを扱うストリームを作成する。 ストリームを表す型 ここが一番重要かつわかりにくい部分だと思われる。今回の実装では、「入力」「出力」「結果」の3つの型をストリームで利用する。が、「出力」と「結果」の違いとはいったいなんな

    I/Oストリーミングライブラリの実装の基礎 - 前編 - Pixel Pedals of Tomakomai
    terazzo
    terazzo 2013/10/30
  • 今日は「データベースは圏なんだよ!の会」の日です - Pixel Pedals of Tomakomai

    中原市民館に来ております。データベースは圏なんだそうです。SGL読書会の姉妹イベントです。 Databases are categories by Spivakさん / @bonotakeさん Spivakさんのスライドの解説です。 情報の世界の coherence の欠如を解決するためにフレームワークが必要 数学 → 強力な言語。関数型言語、λ計算、ツリーやグラフ、RDB 圏論で情報をモデル化できる 圏はデータベースのスキーマ。モデルは関手。 圏と計算機科学は近いもの 圏とは Ob、Arr、s(ource)、t(arget)、p(rimary = identity) 圏の例: Set、Hask、A monoid 関手の例: 恒等関手、潰す関手、Hask → Set、単純な例、Set→Cat M-Set : M → Set という関手。m : S → S をactionと呼ぶ 有限状態オー

    今日は「データベースは圏なんだよ!の会」の日です - Pixel Pedals of Tomakomai
    terazzo
    terazzo 2013/04/22
  • 命令型言語Haskell - Pixel Pedals of Tomakomai

    ※これはHaskell Advent Calendar 2012の12/12分の記事です。 こんにちわ、Perlのプログラマの@hirataraです。関数型言語はまともに使ったことがないので、命令型言語の話を書きます。 Haskellでのふつうの"関数" Haskellは純粋関数型言語なので、例えば、add1 :: Int -> Intのような型の関数で副作用を発生することはできません。ここでいう副作用とは、ログを出力したりネットワークにアクセスしたりといったoutputだけではなく、ファイルを読み込んだり環境変数を参照するといったinputも含みます。add1は数学の関数と同じように振る舞います。もっときつい言い方をすれば、add1は単なる辞書(Dictionary or Map or HashTable, etc.)のように、キーに対して決まった値を返すような働きしかしません。(ただし

    命令型言語Haskell - Pixel Pedals of Tomakomai
  • Data::Monad::CondVar をリリースしました - Pixel Pedals of Tomakomai

    YAPC Asia 2011で話をする予定のモジュールをCPANへアップしました。 Data::Monad::CondVarはJSDeferred みたいなもんです。 use AnyEvent; use AnyEvent::HTTP; sub random_choice { my ($data, $headers, $cb) = @_; my (@url) = $data =~ m{href="(http:[^"]+)}g; http_get +(shuffle @url)[0], $cb; } my $cv = AE::cv; http_get "http://yapcasia.org/2011/", sub { random_choice @_ => sub { random_choice @_ => sub { random_choice @_ => sub { my ($data,

    Data::Monad::CondVar をリリースしました - Pixel Pedals of Tomakomai
    terazzo
    terazzo 2011/10/12
  • Apache2+mod_proxy+持続接続で時々レスポンスが悪くなる現象のメモ - Pixel Pedals of Tomakomai

    今更な話題で恐縮ですがmiyagawaさんがものすごい勢いで教えてくれたのでメモっておきます。 mod_proxyでバックエンドにリクエストを投げたとき、リクエストのうち何個かが極端に遅いという現象が起こりました。その時のabの結果は以下。 % ab -c 5 -n 500 http://127.0.0.1:21082/ Percentage of the requests served within a certain time (ms) 50% 1 66% 1 75% 1 80% 1 90% 4 95% 1008 98% 1994 99% 2003 100% 2020 (longest request)なお、今回使おうとしたバックエンドはStarmanです。 多分こんな原因 検証不足で断言はできないのですが、多分以下のような感じ。多分。 Apache のデフォルトのServerLimi

    Apache2+mod_proxy+持続接続で時々レスポンスが悪くなる現象のメモ - Pixel Pedals of Tomakomai
    terazzo
    terazzo 2010/03/27
  • モナドで悟りをひらきたいのなら - 図でわかる(?)モナド - 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
    terazzo
    terazzo 2009/10/31
  • 1