タグ

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

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

    前回の続きである。予告通り、2つのストリーミングの「出力」と「入力」をつなげる処理、そして、ストリームの命令列を解釈する処理系を実装する。 2つのストリームを1つにする(考え方) 「出力」と「入力」をどうくっつけるといいのか。それぞれのストリームは命令の列なので、2つの命令の列があると考えられる。ちょっと考えると、これらをうまく並べ替えることで、1つの命令の列を作れることがわかる。 例えば、「Notify(1), Wait(2), Done(3)」という列の出力を、「Wait(4), Notify(5), Done(6)」という2つの列の入力につなぐことを考えよう。様々な処理をつなげる場合、取り出したい演算結果は下流で生成されると考えられるだろう。そこで、合成後の命令の列は下流のWait(4)から開始される。Wait(4)では上流からのデータを期待するので、次は上流の命令であるNotify

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

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

    I/Oストリーミングライブラリの実装の基礎 - 前編 - Pixel Pedals of Tomakomai
  • 自由マグマを自由対象の定義の図で書くと - Pixel Pedals of Tomakomai

    圏論勉強会 第3回の自由対象で悲鳴が上がってたようなので、参考までに図に書いて説明しておく。 まず、マグマと自由マグマを以下のように定義する(というか、勉強会においてこう定義していた)。 class Magma a where magappend :: a -> a -> a data FreeMagma a = Leaf a | Node (FreeMagma a) (FreeMagma a) deriving Show instance Magma (FreeMagma a) where x `magappend` y = Node x y このFreeMagmaが自由対象という性質を持つ事は、以下の図で捉えられる。 図の上半分はマグマと準同型がなす圏なので、登場するFreeMagma aとbはMagmaクラスのインスタンスであることが求められる。忘却関手というのは、上半分の圏からその

    自由マグマを自由対象の定義の図で書くと - Pixel Pedals of Tomakomai
  • 今日は 圏論勉強会 第3回 の日です - Pixel Pedals of Tomakomai

    圏論勉強会ではない方の圏論勉強会 第3回に来ました。資料とustreamは公開されています。 今回からヘッドセット完備 中高生も見ているらしい(のでプログラミング以外のネタも) 第3回: 様々な圏 / 講師 @9_ties さん 視野が狭くならないよう、プログラムに関わらず色々な圏を見る 定義の復習: 圏〜自然変換まで。(自然変換はまだ雰囲気だけでOK) 主役級の圏を紹介 Sets*1 対象が(小さい)集合、射が関数、関数合成 とんでもなく巨大な圏 整数論とか実数論とかと規模が違う。色々問題が起こる 宇宙(universe) : 基礎論の分野なのでそこまで詳しく知らなくてもOK Setsの対象すべてからなる集合Uを考えると、U∈U?? 対角線論法使ってごにょごにょすると、カントールのパラドクスにつながる。 数学で必要な集合を全て含む"領域" U。もはや集合と呼べないもの。色んな宇宙がある

    今日は 圏論勉強会 第3回 の日です - Pixel Pedals of Tomakomai
  • 今日は 圏論勉強会 第5回 の日です - Pixel Pedals of Tomakomai

    圏論勉強会ではない方の圏論勉強会 第5回です。資料とustreamは公開されています。 今日は倚子が追加された ワークスアプリケーションズ社さんに感謝しましよう 第5回: 様々な射 / 講師 @9_ties さん Hom集合についての補足 A言語とB言語のトランスレーターtと問題のA言語での解法fがあるとする B言語での解法はt.f (共変) B言語でのインタプリタをinterpとすると、A言語のインタプリタはinterp.t (反変) オブジェクト思考でも同様の考え方ができる インスンタンスを作るのは共変 フィールドから値を取り出すのは反変 計算機では射は実装する可能性があるもの → 自動で射を移せるのはありがたい 同型射 g.f = 1, f.g = 1, 同型射がある対象同士は同型 gは逆射 → 一意なのでf^-1と書く 証明 → gとhがfの逆射であれば、g = g.id = g.

    今日は 圏論勉強会 第5回 の日です - Pixel Pedals of Tomakomai
  • 今日は 圏論勉強会 第6回 の日です - Pixel Pedals of Tomakomai

    圏論勉強会ではない方の圏論勉強会 第6回です。資料とustreamは公開されています。 第6回: 積・余積・極限 / 講師 @9_ties さん 普遍性の概念によって定義される極限と余極限について 終対象 任意の対象から射がひとつだけ存在 同型を除いて一意 1と1'があれば、!1 . !1' : 1 → 1、id : 1 → 1なので、唯一性から!1 . !1' = id Well-defined性 定義が複数通りある場合に、矛盾が起きないこと 終対象も複数あるが、どれをとっても議論に影響しない 始対象 → 双対圏における終対象 よって、同型を除いて一意 双対性原理 → 任意の圏における正しい文は、双対圏においても正しい 圏の公理がドメイン、コドメインについて対称なことによる Setsの始対象 → 空集合(1つだけ)、終対象 → 単集合(複数個ある) Setsの圏は非対称性がある Monの

    今日は 圏論勉強会 第6回 の日です - Pixel Pedals of Tomakomai
  • 自由モノイドとFreeモナド - Pixel Pedals of Tomakomai

    以前、モナドは自己関手圏におけるモノイドであるという話をしたことがあるのだけど、この時は理解が足りなくてFreeモナドにまで踏み込めなかった。今日調べていたら、Free Monoid Objectsというわかりやすいエントリを見つけたので簡単に紹介。 まず、以前のスライドの中ではモノイド対象をモノイダル圏の中で特定の条件を満たす対象と射の組(M, μ、η)と定義をしたけど、紹介したエントリでは関手として定義している。もうちょっと具体的に言えば、1、M、M□M、M□M□M、・・・というモノイド対象のみからなるシンプルなモノイダル圏(これをTh(Mon)と呼ぶ)を考えて、そこからの関手Fがモノイド対象を定義するという見方。この見方がありがたい点は2つ挙げられる。 (モノイダル)自然変換がモノイド準同型になってくれる*1 モノイド F,F':C^Th(Mon)→C とモノイド準同型 τ:F→F'

    自由モノイドとFreeモナド - Pixel Pedals of Tomakomai
  • 今日は 圏論勉強会 第1回 の日です - Pixel Pedals of Tomakomai

    圏論勉強会ではない圏論勉強会 第1回に来ました。資料とustreamは公開されています。 @seizans さんより ekmett勉強会でekmettさんが圏論勉強するといいよというから開催 日始まったな 講師 @9_ties さん 圏論だけではなく、圏論を題材に色んなことを学ぶ会 関数型言語を学ぶ会ではない。前提知識はなし 教科書はSteve AwodeyさんのCategory Theory。数学専攻してない人向け 記法などは「圏論の基礎」。数学専攻者向け。リファレンス 今日は、圏論とは何か。随伴までいく 対 → (A, B)とかPair A B (double, double)だと複素数型になる a << 16 | b という自然数もpair 対の具体例はいくらでもある 抽象概念を考えるには、定義が重要 定義を飛ばしては行けない 抽象的な定義。より多くの具体例を持つもの 対P fir

    今日は 圏論勉強会 第1回 の日です - Pixel Pedals of Tomakomai
  • 今日は 圏論勉強会 第2回 の日です - Pixel Pedals of Tomakomai

    圏論勉強会ではないモノイド勉・・・いや、圏論勉強会 第2回に来ました。資料とustreamは公開されています。 第2回: モノイド・群 / 講師 @9_ties さん モノイド、圏は計算機に必要な概念 対象が1つの圏。シンプルだけどシンプル過ぎない圏 約束: 自然数は0以上。Haskell的なセクションの記法を使う モノイド: (M, ・)の組。結合率、単位元 M は台集合 モノイドの例 自然数(N, +), (N, ×) 整数、有理数、実数、複素数も同様 Aの要素の有限列と、++ ([1,2] ++ [3, 4]) ++ [5,6] == [1,2] ++ ([3,4]++[5,6]) []が単位元 文字列も同様 論理和(単位元false)、論理積(単位元true) 集合の∪(単位元Φ)と∩(単位元A)。(ただし、冪集合P(A)の元を使う) max(単位元は最小値)、min(単位元は最大

    今日は 圏論勉強会 第2回 の日です - Pixel Pedals of Tomakomai
  • 今日は 圏論勉強会 第7回 の日です - Pixel Pedals of Tomakomai

    圏論勉強会ではない方の圏論勉強会 第7回です。資料とustreamは公開されています。 司会の方がワークスアプリケーションズ社を退社されたので今回からバトンタッチ 後半第一回目 第7回: 様々な極限 | 代数的データ型 / 講師 @9_ties さん 1時間で話せる内容ではないので、証明とかは家で読んで 「ここまで生き残った皆さんなら」 錐の圏の終対象、始対象がlimit, colimit 空圏、離散圏は前回やった イコライザ、コイコライザ 2の平行射からなる圏のlimit, colimit この定義から詳細な定義を考えるのは良い練習問題 「f.e = g.eで、f.x=g.xなる任意のxについて、e.u=xを満たすuが唯一存在」 Setsでのイコライザ f.e=g.eなので、fとgで同じ所へ移る要素のみ集める。唯一性から包含写像 f(x,y)=x^2+y^2、g(x,y)=1とするとe

    今日は 圏論勉強会 第7回 の日です - Pixel Pedals of Tomakomai
  • 今日はekmett勉強会の日です - Pixel Pedals of Tomakomai

    ekmett勉強会に来ています。ekmettさんがオンライン参加されています。 I love profunctors. They're so easy / liyanghuさん 傘を指し棒に使うと言う斬新なプレゼン。詳細はこちら。 HaskellのFunctorは共変 Predicate (a -> Bool) は Functor ではない (半変)関手ではある Data.Functor.Contravariant contramap g (Predicate p) = Predicate (p . g) 他、Const、Comparison (a -> a -> Ordering)、Op (b -> a)が反変関手 双関手 : 引数を2つとる関手 bimap :: (a -> c) -> (b -> d) -> f a b -> f c d Either、(,)、Biapplicativ

    今日はekmett勉強会の日です - Pixel Pedals of Tomakomai
  • iPadを紙代わりに使うならNote Taker HD - Pixel Pedals of Tomakomai

    iPad電子書籍だって話ですが、肝心のがなかなか出そろわないので自分はiPadをノートと鉛筆の代わりとして使ってます。そのためのソフトが、Note Taker HDという600円のアプリで、これがなかなかいいです。どんなアプリかってのは、紹介している動画を見るのがいいでしょう。 手書きなので、日語対応とか数式対応とかそんなの関係なく、なんでも自由にかけます。 間違えたらでっかく×って書いちゃってもいいですし、 圏論の可換図もこの通り。 昨日App Sotreに上がった最新版だと、16色カラーが使えます。色ペン16持ち歩くことを考えたら、こっちの方が断然使いやすいですね! 最後に、Note Taker HD でできることとできないことをまとめておきます。 できること、得意なこと 手書きで横書きの長文の文章を書く 細かい字をぎっしり書く 日語を書く 数式を書く 図表を書く 書いたメモ

    iPadを紙代わりに使うならNote Taker HD - Pixel Pedals of Tomakomai
  • QUnitでJSのテストを書いてみた - Pixel Pedals of Tomakomai

    JSでテストファーストしたかったので、QUnitを試してみました。QUnitを使えば、とても簡単にJavaScriptのテストスイートを作ることができ、オススメです。 てっとり早く試す インタネットにつながる環境であれば、てっとり早くQUnitを試せます。 QUnitのページに行って、View Sourceタブに表示されているHTMLをコピペしてローカルに保存します*1。このHTMLをブラウザで開けば、サンプルのテストが走ります。4つのテストがあって、4つ目だけfailed(赤文字表示)となればうまく動いてます。 QUnitでは、このようにブラウザでテストの結果を確認します。緑帯が表示されればOKで、赤帯が表示されればNGです。 もうちょっとまともに使う インストール 最初の例ではネットワーク上のリソースを使ってましたが、まともに使うときはローカルにファイルを揃えましょう。 HTMLを用意

    QUnitでJSのテストを書いてみた - Pixel Pedals of Tomakomai
  • Apache2を1台のマシンで複数インスタンス起動するメモ - Pixel Pedals of Tomakomai

    1台のマシンにApache2を複数インスタンス建てたくなった*1んで、調べたことをメモっときます。 先に結論 Apache2の複数起動は結構泥臭いです。httpdに「-f your-httpd.conf」オプションを渡すために、init.dスクリプトを複数用意しましょう。こだわりがなければapachectlのことは忘れましょう。 基 httpd コマンドに、 「-f ファイル名」 オプションを渡すことができれば、別のhttpd.confで起動できます。別のhttpd.confの中では、PidFileやらポート周り(Listenとか)やら*2を変えておく必要があります。 ただし、Apacheを使ってる人ならわかると思いますが、httpdコマンドを直に呼ぶことはまずありません。apachectlコマンドとinit.d scriptを利用することになると思いますが、やっかいなことにデフォルトの

    Apache2を1台のマシンで複数インスタンス起動するメモ - Pixel Pedals of Tomakomai
    nsyee
    nsyee 2009/07/06
  • Stateモナドを今度こそ理解する - Pixel Pedals of Tomakomai

    3年前に理解しようとして惨敗した*1HaskellのStateモナドの解説に、リベンジしようと思います。圏論をちょっとはかじったので、今度こそまともな解説ができるはず。 と言うことで、今回は前編です。圏論の知識は前提とはしてないですが、集合と写像にアレルギーがあるときついかもしれません。 *1:3年前の敗因は、圏をSetsだと思い込んでた上に関手を「写像を写像に移す写像」だと誤解してたことでしょうか。

    Stateモナドを今度こそ理解する - Pixel Pedals of Tomakomai
  • Perlでモナドを学ぶ - Pixel Pedals of Tomakomai

    勉強のためにPerlでモナドを実装してみました。 免責 圏論のモナドの概念をPerlでシミュレートしようと言うエントリであって、モナドを開発にどう利用するかなどについてはびっくりするくらい言及しませんので悪しからず。 1. 圏を考える Perlのスカラ値の任意の集合を対象として、引数も戻り値も一つで副作用がないサブルーチンを射とします*1。domとcodについては、関数が正常に動作する範囲で適当にとりましょう。 * 例: 対象「文字列」から対象「整数」への射 length 2. 自己関手の表現 自己関手は、二つの写像からなります。 対象を対象に移す写像 T_object モノとしては考えますけど今回は実装しません*2。 射を射に移す写像 T_arrow 『サブルーチンを受け取ってサブルーチンを返すサブルーチン』として実装できます。 3. 自然変換の表現 関手Tから関手Sの自然変換は、対象A

    Perlでモナドを学ぶ - Pixel Pedals of Tomakomai
  • 高階関数と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
  • XS Nite (Shibuya.pm Tech Talk #9) - Pixel Pedals of Tomakomai

    id:TAKESAKOさんの好意で出させてもらったので、適当にロギングします。 はじめてのXS / id:hirose31さん XSってなに? PerlとCをつなぐための言語&インタフェース Foo.xs → xsubpp → Foo.c → Cコンパイラ → Foo.so Perlからは、XSLoaderやDynaLoaderでFoo.soを読み込む なぜXSを使う? Cのライブラリを使いたい パフォーマンス向上(Cache::Memcached::Fast 等) Perlの内部をいじくり倒す(autobox*1 等) XSを書いた動機 → forkしまくりたくなかった ドキュメント perlxstut, perlxs, perlguts, perlapi h2xs or module-starter (Module::Starter::XSimple) で始める 外部のsay_hell

    XS Nite (Shibuya.pm Tech Talk #9) - Pixel Pedals of Tomakomai
    nsyee
    nsyee 2008/07/01
  • 1