タグ

ブックマーク / m-hiyama.hatenablog.com (102)

  • クロージャなんて貧乏人のオブジェクトだろ - 檜山正幸のキマイラ飼育記 (はてなBlog)

    http://people.csail.mit.edu/gregs/ll1-discuss-archive-html/msg03277.html : closures are in fact poor man's objects (in his opinion). ...snip... A closure is an object that supports exactly one method: "apply". Christian Queinnecは、 closures are a poor man's objects と言っている、一方、Norman Adamsは、 objects are a poor man's closures と言っている、と、そんなことみたいです。「クロージャはよく知らないがオブジェクトなら知ってる」という人は多そうなので、「クロージャとは、貧乏人のオブジェ

    クロージャなんて貧乏人のオブジェクトだろ - 檜山正幸のキマイラ飼育記 (はてなBlog)
  • 変だよBash: 代入文 - 檜山正幸のキマイラ飼育記 (はてなBlog)

    最近、bashをよくいじっています。今更ながらではありますが、bashの奇妙な構文や挙動にはウンザリします。だからといって、bashが嫌いになるわけでもないですけどね。 アレはトークンじゃなかろうか bashの代入文、アレ、変じゃないですか。bashに限らず、POSIXシェルは同じ構文ですけど。x = 3 だと代入文にならないのです。x ってコマンドを実行しようとします。実験してみましょう。 $ x = 3 -bash: x: command not found $ # xという名前のコマンドを作る $ echo '#/bin/bash' > x # bashで実行 $ echo 'echo "$@"' >> x # 引数を表示 $ chmod +x x # xを実行可能にする $ PATH=$PATH:. # カレントディレクトリをパスに加える $ x = 3 = 3 $ x =3 =3

    変だよBash: 代入文 - 檜山正幸のキマイラ飼育記 (はてなBlog)
  • 女性が300kgをかつぐって、ホントかよぉ!? - 檜山正幸のキマイラ飼育記 (はてなBlog)

    「江戸時代は誰もが、60キロの米俵をヒョイと持ち運んでいた! 〜なぜ私たちは「身体」を見失ったのか?」という記事*1のこの写真: [*2] 60kgの米俵5俵で総計300kgを女性がかついでいる! にわかには信じがたいです。この写真は合成? そうも見えないし、山形県酒田市の庄内米資料館(山居倉庫)という所に次のような人形が展示してあるらしいです。 [*3] 当時は一俵が60kgより軽かったんじゃなかろうか。それにしてもトンデモナイ重量になりそうです。ウーン? 常磐線で見かけた行商のおばさんも、けっこうトンデモナイ荷物をかついでいたからな。ひょっとして…… いやいや、『強力伝』(フィクション)でさえ200kgいってなかったはず。 冒頭の記事タイトルの「誰もがヒョイと」は大げさですが、僕が子供の時分、割ときゃしゃな青年でも米俵をかついで運んでいたのは事実です。僕の田舎の家は、米俵とか、小豆や蕎

    女性が300kgをかつぐって、ホントかよぉ!? - 檜山正幸のキマイラ飼育記 (はてなBlog)
  • Gitの解剖学的要点:「怖くない」の1/15圧縮版 - 檜山正幸のキマイラ飼育記 (はてなBlog)

    「もうGitは怖くない: 自信を持って使いたいあなたへ」は、「タイトルがミスリーディングで良くない」とか、「よけい怖くなる」とかの反応がありました。「怖い」という感情は個人差があるからしょうがないですね。タイトルはおそらく、「Gitの解剖学」あたりが受け入れられ易かったのかな。それとも、「ほんとうは怖いGit」? 僕自身が気になったことは2点で: 長過ぎる。読むのが大変。 男女の裸の写真が入っている。 裸の写真2枚は、いちおうストーリーを補完しているのでイイとしましょう。しかしあの長さは、たぶん自分でも読み返さないと思います。でも、書いてある内容を後で参照はしたいので、要点だけを箇条書きにまとめておきます。 Gitは内部構造がまる見え。.git/ディレクトリを覗けばいい。 Get http://www.chimaira.org/misc/git-quest-kit.shar . See h

    Gitの解剖学的要点:「怖くない」の1/15圧縮版 - 檜山正幸のキマイラ飼育記 (はてなBlog)
  • GNU Makeと空白を含むファイル名 - 檜山正幸のキマイラ飼育記 (はてなBlog)

    久しぶりにGNU Makeを使いました。 $ make --version GNU Make 3.81 Copyright (C) 2006 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. This program built for i686-pc-msys 現状(2014年)の最新版は2013年リリースの4.0ですので、僕が使っているのは古いです。(GNU Makeのバージョンアップは 2006年 3.81 → 2010年 3.82 → 2013年 4.0 なので、頻繁に更新さ

    GNU Makeと空白を含むファイル名 - 檜山正幸のキマイラ飼育記 (はてなBlog)
  • bashの $() はやはり便利だ - 檜山正幸のキマイラ飼育記 (はてなBlog)

    僕はWindowsでもbash(MinGW/MSYSのシェル)を使っているのですが、Windowsだとwhichの使用頻度が高いなー、と思います。Linux/Unixだと、コマンドはだいたい /usr/bin/, /usr/local/bin あたりに入りますが、Windowsだとアッチコッチに分散するので居場所を知りたいことが多いです。 $ which hg /c/Installed/Python27/Scripts/hg コマンドがインストールされたディレクトリを取るには、 $ dirname `which hg` /c/Installed/Python27/Scripts で、そのディレクトリにcdしたいとき、バッククォートは入れ子にできないですが、$() が使えます。 $ cd $(dirname `which hg`) バッククォートを使わずに cd $(dirname $(wh

    bashの $() はやはり便利だ - 檜山正幸のキマイラ飼育記 (はてなBlog)
  • Vagrantの記事をもうひとつ - 檜山正幸のキマイラ飼育記 (はてなBlog)

    「1円クラウド・ホスティングDigitalOceanを、Vagrantから使ってみる」、「DigitalOcean + Vagrant の使い方への補足」と、Vagrantに関する記事を書きました。これらの記事は、クラウドVPSホスティングサービスであるDigitalOcean上で仮想環境を構築する話です。 とりあえずVagrantを試してみるなら、仮想化ソフトウェアVirtualBoxによるローカルマシン上の仮想環境から始めるのがよいでしょう。次の記事で、そのやり方を解説していますよ。 今すぐVagrantを始めよう (Symmetricブログ)

    Vagrantの記事をもうひとつ - 檜山正幸のキマイラ飼育記 (はてなBlog)
  • letとletrec 再論 - 檜山正幸のキマイラ飼育記 (はてなBlog)

    以前、「letrecとwhere」という記事を書きました。この頃僕は、letとletrecという二つのキーワードは要らないのじゃないのか、と思っていました。最近、「スンマセンデシタ、二つ要ります」と反省しています。 let = letrec としたかったのは、letrecが6文字もあるので書くのがめんどくさい、というショーモナイ理由です。3文字のletをletrecの意味で使えば、短く書けていいな、っと。 3文字のletをletrecの意味に使うと、来のletは使えなくなります。でもwhereで代用できます。つまり、次のように使い分ければいいかな、と。 前置のlet -- 実はletrecの意味で、再帰を考慮する。 後置のwhere -- 再帰を考慮しない単純な置き換え。 しかし、「letrecとwhere」に書いたように、letとwhereのペアが構文としてバランスが悪いなー、とも思っ

    letとletrec 再論 - 檜山正幸のキマイラ飼育記 (はてなBlog)
  • ラムダ計算について2013年に思うこと - 檜山正幸のキマイラ飼育記 (はてなBlog)

    「アリティ付きフラット・ラムダ計算」の記事を書いてみて思ったことを述べます、まったくの雑感です。 ラムダ計算、特に型なしラムダ計算って、適用とラムダ抽象だけでほんとに何でも出来ちゃうんですよね。極端にシンプルな機構であっても万能になるので、「余計な物は持たない」という意味ですごく禁欲的な気がします。 この特徴と機能性を「おー、ビューティフルだ!」と感じる人は多いのでしょうが、僕は「なにもそこまで徹底しなくても」という印象を持ちます。 例えば、型なしラムダ計算の体系では定数記号も関数記号も一切なくてもいいのですが、普通の感覚だと、リテラルと組み込み関数/演算子があったほうが心が落ち着きます。プログラミングの最初の課題が「定数ゼロとサクセッサを定義せよ」とかはちょっと勘弁してよ、という感じ。 アリティ付きフラット・ラムダ計算では、F0, F1, F2, ... という一連の組み込み記号のセット

    ラムダ計算について2013年に思うこと - 檜山正幸のキマイラ飼育記 (はてなBlog)
  • デシリットル問題 - 檜山正幸のキマイラ飼育記 (はてなBlog)

    長男:「おとうさん*1、デシリットルって習った?」 父親:「あー、習ったよ」 長男:「俺も習った。けどさ、デシリットルって見たことないんだよね。おとうさんは使う?」 父親:「リットル、ミリリットル、キロリットルは使うけどなー …」 長男:「デシリットル使う? 見たことある?」 父親:「ウーン、ないな。君よりはるかに長く生きてるけど、小学校の教科書以外で見たことないわ」 長男:「おとうさんも見たことない。じゃ、なんでアレ習うの?」 父親:「アレねぇ、デシリットルねぇー」 長男:「意味ねーじゃん」 父親:「いやまー、すぐに役に立つもんばかりが教育じゃないからね」 長男:「役に立たなくてもいいけどさ、どんな意味があるの?」 父親:「デシリットル教える意味ねぇ、エーと、ウーンと …」 よくわかりません。 *1:オヤジと呼ばれることも最近多い。

    デシリットル問題 - 檜山正幸のキマイラ飼育記 (はてなBlog)
  • 圏論の計算を劇的に簡単にするための考察 (1) - 檜山正幸のキマイラ飼育記 (はてなBlog)

    昨日、DOTN二号(このネーミングはどうなのよ?)の話をしたのですが、DOTNのような絵図ペースの計算法により、僕はナントカ圏論の計算を追いかけることが出来てます(いやっ、出来ないこともママあるけどね^^;)。小学校の「余りのある割り算」あたりで挫折したくらいなので、僕は計算が苦手なのですが、絵を眺めていじるのは楽しい感じがします。 Using graphical notations is undoubtedly joyful. (by Pierre-Louis Curien) DOTN(Diagrammatic-Order Text Notation)は Text Notation ですが、絵をひたすらストレートに写しとることを目的としているので、慣れれば絵をイメージできて、絵とほぼ等価に操作できます。 絵算(pictorial/graphical/diagrammatic calcul

    圏論の計算を劇的に簡単にするための考察 (1) - 檜山正幸のキマイラ飼育記 (はてなBlog)
  • トランザクションの3つの方式 - 檜山正幸のキマイラ飼育記 (はてなBlog)

    昨日の記事「メイヤー代数やメイヤー加群はまだ整理不足」において、 双代数の条件を入れておいたのはトランザクションのためでした。トランザクションは、「更新オペレータをローカルでキューイングする」方式を前提とします。 と書きました。 ここで、トランザクションについてザッと説明しておきます。下の絵のような3つの方式について紹介して、僕の立場からのコメントを付けます。それぞれの方式を切り離した絵も後に再掲します。 詳細はともかく、絵の見方は: 時間は上から下の方向に経過します。 Sは状態空間です。データベースの可能なすべての状態の集合と考えればいいでしょう。 Vは状態の観測値の集合です。観測値は状態に関する部分的な情報を提供します。 fは状態を変更する処理を行うプログラムです。 Mは状態を更新するオペレータの集まり、モノイドとなります。 黒三角はデータのコピー(クローン)です。 S→S×V という

    トランザクションの3つの方式 - 檜山正幸のキマイラ飼育記 (はてなBlog)
  • モナドにおける「拡張」の補遺:アンクライスリ化かな - 檜山正幸のキマイラ飼育記 (はてなBlog)

    5月に「モナドにおける「拡張」とは何なのか? 色々と計算してみる」というエントリーを書いたのですが、それに少し補足をしておきます。「拡張」は、モナドやモナド類似物を使うときにとても重要な概念だと思っているので、繰り返しを厭わないで書きます。 F = (F, η, μ) を圏C上のモナドとします。Fのクライスリ圏を K = Kl(C, F) としましょう。関手J:C→Kを次のように定義します。 X∈|C| に対して、J(X) = X (対象は同じ) f:X→Y in C に対して、J(f) は f;ηY:X→F(Y) をK内で解釈した射 このJを、僕は「埋め込み関手」とか「クライスリ埋め込み」と呼ぶことが多いのですが、その理由は; モナドの単位ηがモノ変換(すべての成分がモノ射である自然変換)であるとき、JX,Y:C(X, Y)→K(X, Y) はホムセットのあいだの単射となります。したがっ

    モナドにおける「拡張」の補遺:アンクライスリ化かな - 檜山正幸のキマイラ飼育記 (はてなBlog)
  • 小額決済は大変です - 檜山正幸のキマイラ飼育記 (はてなBlog)

    40円の買い物をすることを考えます。Paypalの小額決済(マイクロペイメント)の手数料は、「国内の場合: 5% + 7円」とのことなので、40円だと、2円 + 7円 = 9円の手数料で済みます。でも、物体だと梱包や配送のコストがかかるのでそれを入れると、40円のモノでもそれなりになるでしょう。 「それなり」っていくらでしょうか? インターネットではなくて日郵政の少額決済を利用した場合の例ですが、なにやらかにやらで340円プラスけっこうな手間がかかりました。 次男がプラモデルの部品を壊してしまったので単品で注文しました。バンダイは部品ごとの注文を受け付けています(http://bandai-hobby.net/SC/2007/10/post_55.html)。しかし、郵便ベースです。部品自体は40円ですが、バイダイからの送料が120円かかります。こちらからバンダイ宛に160円の送金が必要

    小額決済は大変です - 檜山正幸のキマイラ飼育記 (はてなBlog)
  • 右カン拡張が、自然変換のラムダ計算における指数型らしい件 - 檜山正幸のキマイラ飼育記 (はてなBlog)

    ここ2,3日、カン拡張(Kan extension)を理解しようとジタバタしてました。どうにもイメージがつかめなくて四苦八苦。ワッカラーン。やっとこさで絵に描くことができました。フーッ。 絵を描く前に記号法を: [C, D]は関手圏を表します。圏[C, D]の対象は、C→D という関手、射は関手のあいだの自然変換です。[C, D]は、[C→D]とも書くことにします。矢印の向きを逆にした [D←C]もまったく同じ意味だとします。関手 H:C→D と K:D→E の結合は H;K と書きます。これは図式順です。反図式順のときは、K・H と書くことにします。 さて、問題の右カン拡張(right Kan extension)ですが、J:C→D、G:C→E という状況で、Jに沿ったGの右カン拡張(right Kan extension of G along J)を、JG または GJ と書きます。要

    右カン拡張が、自然変換のラムダ計算における指数型らしい件 - 檜山正幸のキマイラ飼育記 (はてなBlog)
  • 再びモナドへ - 檜山正幸のキマイラ飼育記

    モナドは至るところに出現する -- とは、以前から僕が強調していることです。最近、HTTPクッキーをまともに処理しようとしたら、派手にモナド様が顕現されまして、結局はベックの分配法則/テンソル強度(tensorial strength)まで使わざるを得ないという始末。 参考: 「ベック 法則」を含むダイアリーエントリー 参考: 「テンソル強度」を含むダイアリーエントリー 「モナドは理解しなくても使えればいいのだ」とはしばしば耳にする意見です。基的にこれは正しいと思います。モナドなんて、誰もかれもが理解すべき概念とは思えません。しかし少数ながらも、「使う」立場ではなくてモナドを「作る」立場の人もいます。そういう少数の人は、やはりモナドを理解すべきでしょう。そうでないと、(モナドとは呼べない)変なモナド/壊れたモナドを作ってしまうかも知れないですから。 基的なモナドの定義はもちろんですが、

    再びモナドへ - 檜山正幸のキマイラ飼育記
  • 僕は嫌いなのだが、バイダイレクショナルな自然変換計算はこうする - 檜山正幸のキマイラ飼育記 (はてなBlog)

    モナドはどこに棲んでいるのか? というと、Cを圏としてその自己関手の圏 End(C) のなかにモナドがいるわけです。D = End(C) と置けば、Dがモナドを定義する舞台となります。 (F, η, μ) がモナドであるとき、F∈|D|、η:I→F in D、μ:FF→F in D となります。D = End(C) は関手圏なので、Dの対象とは関手であり、Dの射とは自然変換です。IはCの恒等関手(I = IdC)、FFはFを2回繰り返した関手です。自然変換を記号「::」と「⇒」を使って表すなら: F:C→C、η::I⇒F:C→C、μ::FF⇒I:C→C となります。 モナドに関する計算とは、D内で計算することであり、つまりは自然変換の計算です。モナドを理解する/作る立場(「再びモナドへ」参照)では、自然変換の計算ができないとオハナシになりません。 ところが、自然変換の計算は面倒くさい/

    僕は嫌いなのだが、バイダイレクショナルな自然変換計算はこうする - 檜山正幸のキマイラ飼育記 (はてなBlog)
  • なんで今さらにRDFなん? - 檜山正幸のキマイラ飼育記 (はてなBlog)

    最近、RDF(Resource Description Framework)の話を少しだけしました。 もう連休も終わりじゃん RDFの使える部分は? 特段の理由はないのですが、 RDFとかOWL(WOLじゃないけど、Web Ontology Language)って、どうもダメみたいだな、という印象なんですが、ダメだと思うとかえって知りたくなったりします。 という程度の動機です。 RDFはドクターペッパー味なんでしょうか、なぜか妙に興味が湧いちゃったんです。 ドクターペッパーって、はじめて飲むとオイシイとは思いませんよね。しばらくすると「あれマズかったよなー。んーと、どんなふうにマズかったんだっけ?」ともう一度飲みたくなったりします。それと同じですね(違うか)。 僕はRDFのファンでもアンチでもないので、批判や称賛というよりは、「よく分からん」とか「ハッキリさせてよ」といった事を思い付き順で

    なんで今さらにRDFなん? - 檜山正幸のキマイラ飼育記 (はてなBlog)
  • スキーマとインスタンス -- 一般関手モデル - 檜山正幸のキマイラ飼育記 (はてなBlog)

    スピヴァックの関手データモデルは、実に示唆に富んでいます。スピヴァックのアイディアは、データモデルに限らず、ソフトウェアシステムのさまざまな側面のモデル化に使えそうです。 関手データモデルの要点を簡略にまとめるなら: (データベース)スキーマは圏である。 (データベース)スキーマの制約は可換図式である。 (データベース)スキーマの全体は“圏の圏”である。 (データベース)インスタンスは(データベース)スキーマからの関手である。 (データベース)インスタンスのあいだの準同型射は自然変換である。 括弧のなかに入れた「データベース」を他の言葉で置き換えてもこの発想は通用します。実際の適用例はいずれ出すつもりですが、まずは、この発想の一般的な枠組みをハッキリさせておきましょう。 スキーマは圏なので、S, T のようなイタリック体文字で表すことにします。“スキーマの全体”もまた圏を形成しますが、個々

    スキーマとインスタンス -- 一般関手モデル - 檜山正幸のキマイラ飼育記 (はてなBlog)
  • JavaScriptに近いラムダ計算系 - 檜山正幸のキマイラ飼育記 (はてなBlog)

    机上のラムダ計算で何か考えてみて、それを動かしたいときはJavaScriptに翻訳する、という方法を僕はよく採用します。ラムダ計算は理論的にスッキリしていて扱いやすい計算体系です。が、そのままでは実行できません(そのままの実行系もあるでしょうが一般的ではない)。ラムダ計算とJavaScriptの構文はけっこう似ているので、翻訳は割と楽にできます。そのへんのところは「JavaScriptで学ぶ・プログラマのためのラムダ計算」を参照してください。 さて、ラムダ計算といっても色々な種類の計算体系があります。ラムダ計算の形式性や厳密性を壊さない範囲で、JavaScriptへの翻訳ができるだけ簡単になるようなラムダ計算を考えてみましょう。 型と基データ ラムダ計算に型が付いていても、今のJavaScriptは型の定義や型アノテーションができないので、「型なし」の計算となります。とはいえ、純粋な型な

    JavaScriptに近いラムダ計算系 - 檜山正幸のキマイラ飼育記 (はてなBlog)