サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
Pixel 9
sshi.hatenadiary.org
"モナドの一般化"なんていう敷居がやたら高いふれこみのArrowをちょろっと調べてみた。 主に、ha-tanさんのサイト(http://d.hatena.ne.jp/ha-tan/20070810/1186744818)と、そこから参照されているページをひととおり読んだ。 モナドがわかる人には多分、 Monadは、値をからくり箱に入れたもの。からくり箱は基本的に(ヘンな)値。 Arrowは、関数をからくり箱に入れたもの。からくり箱は基本的に(ヘンな)関数。 3分で解るHaskellのArrowの基本メモ - よくわかりません という説明でなんとなく通じるかなあ。 Monadが型クラスなようにArrowも型クラス。でもって、Arrowの場合はからくり箱の中身が関数なので、型情報によって処理をふりわけるっていう性質がモナドより強い(気がする)。ストリームファンクションはそのよい例で、関数の型を
http://ll.jus.or.jp/2008/ 今年は奇跡はおきず、きっちり寝すごした。けど、結局後半だけLL Futureに行ってきたので、例によって今の印象を偏見もまじえて垂れ流し。今回は1000人以上収容できる広いホールでの開催でなかなか壮観だった。800人とかいたらしい。そうとう規模がでっかくなってきたような。ほんと、その規模を支えてるスタッフの方々には感謝感謝です。 君ならどう書く? すでにかなり後半のこのセッションの途中、yuguiさんが解説しはじめるあたりに到着。 今回のネタは「LL Golf」ということで、いくつかのお題をLL言語でGolfしよう、という話だった。いろんな言語のGolfコードが公開&解説されてて結構おもしろかった。 が、このセッションはプロゴルファー浜地先生の指導とコメントが全てだったような気がする。パーサーの不意を付くような細かい規則がでてくることでて
yuguiさんにサインもらえて満足。 やるおがJRubyの最適化するのは反則。 残りは後で書く。書いた。 一週間遅れだが今も覚えていることを書く。偏見がさらに記憶改変されて内容が無茶苦茶になってたらすみません。 拡張ライブラリの書き方講座(arton) 拡張ライブラリのテンプレートを生成してくれるextrails*1は便利そげ。あ、gemにも対応してたのか。 圧巻は拡張ライブラリを使ったメモリイメージの可視化ツール*2。主要なオブジェクトが色わけされた(昔の)windowsデフラグちっくな画面が綺麗だった。GCされるとごそっと書きかわるので楽しげ。 ただ、extrailsをつかったライブコーディングのデモで"w"の文字のせいでなかなかバグがとれなくて時間がおしてしまったのは残念。IRCチャットでバグが指摘されてたのはおもしろかった。 さらに仕事に使うRuby(後藤 謙太郎(ごとけん)) 客
案の定、起きたら朝ではなかった。YARVやJRubyやRubiniusの話、さらにMatzの基調講演もまるごと聞きのがした。16:00からのセッションとLTだけ見て、懇親会のチケットも買ってなかったのでそこで終了。例によって偏見と思い違いも込みでメモ代わりになぐりがき。 Ruby《を》教えてるんじゃない、Ruby《で》教えてるんだってば(増原英彦) 東大でのRubyを使ったプログラム教育のおはなし。irb上で、eachじゃなくてforを使わせて、クラスを使わないで短いプログラムを記述させるそうな。一発目としてはありかもなあ。 ところで、Rubyを教育の言語として選択したのは増原さん個人の判断ではなくて、何人かの先生の合議だった、とのことだけど、そのメンツがすごかった。直接名前を紹介しないで、各先生のかかわった書籍(論文もあった?)の表紙がざっと表示されただけだったので全員はわからなかったけ
http://youtube.com/watch?v=WEBOdWyGE3E sumimさんのところ(http://d.hatena.ne.jp/sumim/20080522/p1)より。 shiroさんがGoogleでGaucheについて話している動画をみた。 Gauche バイトコードへのコンパイラ自身がGaucheで書かれてるのはやっぱりおもしろいなあ。型推論の話もそうだけど、途中や最後のほうで嬉々として話している最適化のアイデアのことごとくが「〜(してやる|の情報がある)とそこを最適化するGaucheのマクロがいれられるんで」という言葉で締め括られてるのが格好よすぎます。 「Ianのやつ」も一回ちゃんと調べるか。
http://www.kmonos.net/wlog/84.html#_1054080427 とか http://d.hatena.ne.jp/haru-s/20080217 を見てなんとなく思いだしたことを書きとめておく。 コンピュータとの出会い 人生で最初にふれたプログラマブルなコンピュータは、カシオのポケットコンピューター。たぶんこれ。 ってカシオじゃないやSEIKOだ。そうだSEIKOだ。MC-2200。感熱プリンタとマイクロテープドライブが一体化した拡張デバイスがついてて、プリンタやテープを使うには電卓みたいな本体を土台みたいになってるそのデバイスにがちゃっと埋めこんで使う。 本体には見てのとおりたった一行分の、しかもアルファベットしか表示できない画面しかないわけだが、もぐらたたきとか、迷路探索ゲームとか、スタートレックゲームとかが付属していていろいろ遊べた。スタートレックはなん
Mechanize便利だな。 以下パッチ。(1/16 1時頃 ちょっと修正) 連投防止に、editページを日付引数付きで開く変更もまじってる。 あーもしかしたら編集時のあれこれは日記モードかブログモードかで変わってくるのかな。ブログモードでは駄目な変更なのかもしれない。あとログインが失敗した時のエラー処理もなんもしてない。失敗すると何が起こるか不明。 Index: hdw.rb =================================================================== RCS file: /cvsroot/hatenadiary/HatenaDiaryWriter/hdw.rb,v retrieving revision 1.8 diff -u -r1.8 hdw.rb --- hdw.rb 5 Dec 2007 20:41:10 -0000 1
http://d.hatena.ne.jp/samurai20000/20071230/1199005410 にてruby製のはてダラがリリースされたので結城さんのPerl製はてダラをおきかえた。以下、雑多なその記録。 上記サイトにはリリースって書いてあるのに、sourceforgeのほうではリリースされてなかった*1ので、CVSリポジトリからtarボールをダウンロード。(1/7 追記 今みるとちゃんと12/30付けでリリースファイルが用意されている。見落としたのかなあ?) Windows上で使いたいので、必要なrakeとmechanizeライブラリをインストール。既にWindows上にインストールしてあったASRのRubyコンソール上からgem install rakeとgem install mechanize。mechanizeいれるときになんかいろいろはいった。 Rubyコンソール
モナドの合成はさっぱりわからないままだったので、試しにReaderモナドとWriterモナドの合成をやってみた。 リーフは数値、ブランチにはラベルがついてる木構造データを対象に、 木構造データのリーフの合計を求める関数 さらに、Writerモナドを使って足したリーフの数字を順番にログにとる関数 さらに、Readerモナドを使って親のラベルもログに取る関数 の順番で変更が少ないように実装してみたつもり。それぞれmain1,main2,main3に対応する。これでちゃんと動く理屈はあまりちゃんとわかってない。わかったら後で書く。 以下ソース data T = B String [T] | L Int sample = B "root" [L 5,B "child" [L 1,L 10],L 2] -- main1 = sum_leaf sample sum_leaf (L n) = n sum
http://d.hatena.ne.jp/mokehehe/20071113/evalでmodule_evalの中のクラス変数の扱いで困ってるようだったのでコメントしてみた。確かにmodule_evalにブロックを渡して評価するコンテキストをすげかえた時の、クラス変数参照/代入の挙動ってよくわからない。以前も動的にクラス生成したい時にクラス変数の扱いではまって結局違う方法で逃げたような記憶だけある。 このへんの挙動ってどっかに書いてあるのかなあ、とリファレンスマニュアルみてみたら、module_evalの項にちゃーんと書いてありました。 ブロックが与えられた場合にはそのブロックをモジュールのコンテキスト で評価してその結果を返します。ブロックの引数 mod には self が渡されます。 モジュールのコンテキストで評価するとは、実行中そのモジュールが self になるということです。つま
ubuntuがGにバージョンアップしたので、どかっとアップデートした。ついでにインストールしてあるパッケージの依存関係を把握したくなってdpkg-ruby経由でdotファイル作ってgraphvizで図示してみた。 この画像は真ん中へんを抽出してPNGにしたもの。オリジナルはSVGファイルにしたのでズームできます。こちら(http://sshi.s57.xrea.com/archive/deb_graph_spline.xml)。あたらしーバージョンのoperaかfirefoxならそのまま見れると思います。ローカルに落として見る場合は拡張子をsvgにしないといけないかも。 graphvizでもレイアウトエンジンがdotだとひどいグラフがでてくるが、fdpにしたら計算時間の増加とひきかえに見れるグラフがでてきた。neatoやfdpは無向グラフじゃないと駄目かと思ってたけど有向グラフでもいけるん
今回、madeleineをページの保存に使いたかったので、プロセス常駐型なのは決定。webインターフェイスにはwebrickを利用。 servletにしたら軽くできるんでねえの?と甘く考えて、まずwebrickのservletの使い方を調べよう。 http://www.webrick.org/のサンプルをじーっと眺める。HTTPServlet::FileHandlerの内容の中身をちらっと見てみることにする。 ライブラリの中をあさって、webrick/httpservlet/filehandler.rbを発見。 と思ったら、サンプルの中にHello Servletってサンプルがあるじゃん。これだな。ははーん、procでもservletになっちゃうわけですね。 s.mount_proc("/hello/again"){|req, res| res.body = "<HTML>hello (a
タイトルはおおげさすぎ。きっかけは 新しいwhyプロダクト、ShoesはGUIツールキット。 サンプルはこんな感じ。 Shoes.app do button "Press Me" do alert "You pressed me" end end こういうAPIは好みだ。 http://www.rubyist.net/~matz/20070801.html#p02 を見たこと。 「あーinstance_evalはやっぱり便利ですよね」と思ってみてたんだけど*1、この構造って再帰的に使えるよなぁ、と思ったのでコードでメモ。 ポイントは、上のソース中のbuttonというメソッド。buttonメソッドはソースの字面をみると定義なしに突然使われているんだけど、instance_evalの黒魔術を使うとこういうことができる。obj.instance_eval do .. end という構文を使うとブ
奇跡的に遅刻もせず参加。これまた奇跡的に途中眠りこけることもなく、大変楽しめました。ボランティアで支えてるスタッフさん達に感謝感謝。ああいう運営は大変だろうなあ。 忘れないうちに誤解と偏見もそのまま列挙。個人的には振幅の激しい一日だった。 あまりに長いので久し振りにおりたたみ。後で書きたしたりするかもしれません。 続きを読む ブックマークの傾向を解析して、お勧め記事を教えてくれるHatenaTail(http://hatenatail.com/)をRSSリーダーにつっこんで読んでるんだけど、今日自分のLLSpiritのエントリをお勧めされてびびった。 自分用のメモエントリだから正解といえば正解ではあるけども…
奇跡的に遅刻もせず参加。これまた奇跡的に途中眠りこけることもなく、大変楽しめました。ボランティアで支えてるスタッフさん達に感謝感謝。ああいう運営は大変だろうなあ。 忘れないうちに誤解と偏見もそのまま列挙。個人的には振幅の激しい一日だった。 あまりに長いので久し振りにおりたたみ。後で書きたしたりするかもしれません。 和田先生の話 いつもの(っていっても数回しか聞いたことないが)和田節健在。やっぱりおもしろい。 ハック魂なお題でソフトウェアじゃなくてハードウェア的なものを持ってくるのも技有り。 ダヴィンチ展は僕も見にいったけど、その時もダヴィンチが今の時代に生まれてたらハッカーになってたかもな、とは思った。 いつぞやの、計算尺シミュレータも思いだした。 Language Update Perl 、、の話はよくわからない、というか他人事としか聞こえてこない…。 Io やっぱりおもしろそうだ。Jo
http://d.hatena.ne.jp/textfile/20070612/manを見た。コードを書くのは好きだが、マニュアルやドキュメントを書くのはめんどくさい。いいきっかけなので、今かかえてる妄想を吐きだしておく。 実行可能なコードでありながら、 記述の抽象度が高く、 UML程度(あんま詳しくないけど)に把握可能な粒度の記述も可能な言語仕様であって、 そこにひとことふたことコメントを記述すれば、 そのままマニュアルとしても通用する なんていう言語は実現可能だろうか? まず、(今よくあるような)関数定義を羅列するスタイルだけでは、ちょっとのコメントだけでマニュアルとして通用するものにはならないだろう。少くとも、ぱっと見て期待する外部仕様がわかるようなもんじゃないといけない。例えばテストも同時に記述しないといけない、とか?あ、事前条件、事後条件とかを記述する言語もあったな。Eiffel
最後のDave Thomasの講演につきる二日目。 Rubyは「愛」に溢れていることがよくわかった。 その他のセッションは、エンタープライズ系で使えるRubyの話にくわえて、GUIとビジュアル系(画像処理とか)、そして驚愕の基調講演を経ておまけのRejectKaigiという流れ。 エンタープライズ系だと、ノーマークだったワークフローエンジンと非同期メッセージングライブラリの話がおもしろかった。ちょっといじってみておきたい。クロージングの後のRejectKaigi(RubyKaigiでRejectされたネタをゲリラ的に慣行する試み)もいろいろおもしろかった。特に田中さんのnext,break,return話がかなり整理されてそうでおもしろそうだったんだけど、いかんせん2分半では短かすぎる。資料あるかな。 GUIはRubyCocoaの発表がおもしろかった。開始直後は一言もしゃべらずに無言のまま
初日いってきたよ。 インパクトのあったものを列挙 JITに夢を託すより、AOTで。 言語処理系を実装するとフェローになれたり、彼女ができたりする 1.9に唐突に実装されたFiberは状態遷移の記述に使える? mputさんは偉大 JRuby 1.0 Release! っていってたけど、サイトに告知がない? JRubyのjirbでインタラクティブにSwing GUIを生成。 rake一発で、railsアプリをまるごとwarに。 artonさんの発表が格好よすぎて死ぬ。発表のスタイルは勿論、10分くらい押してたスケジュールを自然な流れでぴったり元に戻したのは流石。 会場の半分くらいの人がRailsで飯をくってるらしい。まじですか。 やっぱりRindaはおもしろそう。 LTなのにあまった時間でコントする人 全自動なLT 統計的な予測ではRuby1.9.1のリリースは2009年になって、2011年に
gauche.nightのおかげでCommon Lispがまた格好良く見えてきたので、 ANSI Common Lisp (スタンダードテキスト) 作者: ポールグレアム,Paul Graham,久野雅樹,須賀哲夫出版社/メーカー: ピアソンエデュケーション発売日: 2002/08メディア: 単行本購入: 1人 クリック: 102回この商品を含むブログ (68件) を見るをまた読んでみているが、だんだんLispが低級な言語に見えてきた。いわば関数型言語界のC。 基本にしているのがコンスかメモリ領域かって違いはあるけど、Lispでコンスから形成されるListという単純なものを使っていろんな構造を組みあげていくのは、Cで単純なメモリ領域を指すプリミティブな型から構造体やらを使って構造を組みあげていく感覚に似てる気がする。特にマクロの泥くささは、メモリ管理の泥くささに通じ…ちょっとこじつけか。ま
JSON文字列をevalして値を取りたいときに挙動が妙ではまった、という話を聞いたので、Firefox1.5上のFireBugのコンソールで何パターンか試してみた。 {"key":"value"}というJSONデータが文字列で渡ってきて、それをevalしてJavaScriptの値として使いたい、という想定。 間違ったJSON文字列をevalした場合 >>> jsonstr = "{key:\"value\"}" "{key:"value"}" >>> var obj = eval(jsonstr) >>> obj "value" >>> typeof(obj) "string"JSONのオブジェクトでは、ラベルも""でくくって文字列にしないといけないのだが、まずはそれを忘れた場合を試してみた。結果として返ってくるのは、なんとJSONのハッシュの要素にしたつもりの文字列のみ。 正しいJSON
http://www.rubyist.net/~matz/20070412.html#p01 http://alohakun.blog7.fc2.com/blog-entry-731.html http://www.lingr.com/room/gauche/archives/2007/04/21 http://www.lingr.com/room/gauche/archives/2007/04/22 このへんの界隈の、プログラム実行中に変化していく状態の、オブジェクト指向言語と純粋関数型での書き方の違いの話。 いろいろコメントつけたり返事をもらったりしてたわけだけど、それでもやっぱり僕は「書きやすさ」が最重要な点だと思っている。どういう書きかた、考え方を好むかは「それまで自分が触れていじってきた言語や環境への慣れの影響が大きい」という話もわかるんだけど、それだけでは片付かないものがあるの
なかなかおもしろいパズルを見つけたのでご紹介。 トランプ52枚の中から、客に5枚選んでもらって、そのうち4枚だけをアシスタントがマジシャンにみせる。で、マジシャンは残りの一枚のカードをあてる。これ、アシスタントとマジシャンの協力プレイで、きっちりしたタネがある。さて、それのタネとは?、というお話。詳しくは、http://sspp2nd.blogspot.com/2007/01/blog-post_25.htmlを。 例によって解いたあとに、友達とああでもないこうでもないといいながら、このやり方(5枚ひいて4枚みせる)では52枚がちょうど限界であるところまで到達した。なかなか楽しい。 昔やった「小人のパズル」もおもしろかった記憶があるのでついでに貼っとこう。 その1 (この文章だとテロリストになってるけど怪物と小人だったやつもあった) 100人の人間がテロリストに人質とされてしまった。 交渉
生まれてはじめてprologをまともにいじった気がする。 http://hiratch.net/blog/archives/2007/01/000146.html に 「prologとは違うの?」とはてブコメントつけたら、 できねーじゃん! (ノ`Д´)ノ彡 ┻━┻ あれか、算術演算は順方向にしか計算できないようになってるってことか。 ということになったので、逆もいける階乗をProlog上で書いてみた。 まず、「算術演算は順方向にしか計算できない」というのは「is の計算に方向性があるからです」ということらしい *1 *2。 じゃあ、っていうんでパターンマッチ(バックトラック?)が効くように自然数をベタに定義(nat)した上で、足し算とかけ算(nplus,times)も定義*3。で、その自然数上の階乗を定義(nfact)してから、変換をかまして数値上の階乗(fact)も定義。ソースは以下。
すくなくとも、 prototype.js 使いは、よく笑い話になっている「何を書いても COBOL になってしまう COBOLer プログラマ」のことを笑えないんじゃないかなぁと思うわけだけど。 同意。僕も、JavaScriptにはJavaScriptの思想とやり方があるんじゃないかなあ、と思うわけです。 それでも使いにくいというのなら、JavaScriptの上層に違う思想を持ったレイヤを実装してもいいとは思うけど、本来の使い方を阻害(Objectオブジェクトのprototype汚染とか)してまで、アドホックに見掛けだけのRubyぽさを積み上げるだけで満足なんだろうか。RJSもあんな中身だしなー。RubyコードをJavaScriptにコンパイルしてくれればいいのに。 JavaScriptは「世界で最も誤解されたプログラミング言語(http://d.hatena.ne.jp/brazil/2
LLRingも無事に終わったようで、 公式サイトのトラックバックセンター(http://ll.jus.or.jp/2006/blog/trackback) から言及されているサイトを読んでいるわけだが、、 当たり前だけど、イベント終了直後はトラックバックはがんがん増えていくわけで、いちいちページを開いて「あ、ここまで読んだな。」とかチェックするのが面倒だ。「打たれたトラックバック」のリストをRSSで配信してくれる仕組みはないのかな。今とても欲しい。 最近は、この業界のイベントだとトラックバックセンターを設けることが多い(ほとんど全部?)ので結構需要あると思うんだけど。 これもPlaggerなんかなあ(これPla?)。 追記:もうできてる! うおー。この記事書いて、夕御飯食べて戻ってきたらすでにPlaggerのプラグインとサンプルができてる。トラックバックありがとうございます。すげー。仕事は
(なにか降りてきた)ああ、そうか。だからGmailなのか。そうかあ。気がついてなかった。良く出来てるな。 これはやばいな。Perl読み書きできるようになるか、読み書きできる言語に移植せねばなるまい。 (なにか去っていった)あれ、ほんとにそうなのか? 最近そんなのばっかり。 まあ、「それPla」ど真ん中くらったことだし(otsuneさんありがとうございます)、気力が充実したらPlaggerのソースを読んでみる気にはなってきた。挫折した直後なんで動かす気力はまだない。やっぱgreasemonkeyのほうが気楽かもなあ。 …plaggerのgreasemonkey実装なんてのは有り得ない?
それから、一度みたエントリーをほかの人がブックマークしたのが重複するので...という意見もよくもらうんだけど、これは速度を犠牲にしないで実装できなくもなさそうなんだけど、自分のお気に入りに入れてる人が何人も立て続けにブックマークしてて、なんだなんだみたいなことってあるじゃないですか。だから僕は今の仕様が好きで、敢えてそうしてる。(そういうモードを作るのはアリかもしれないけど...と書きながら思った。けど設定項目とかページの種類は極力増やしたくないなあ...などなど。) 現状の「お気に入り」機能だと、ある程度の人数を「お気に入り」に登録したら、単位時間あたりけっこうな量のエントリが(しかも重複して)自分の「お気に入り」ページに登録されることになる。一日くらいチェックし忘れると、大量のはてブエントリがたまっちゃう。勝手に「これはなんとかしたほうがいいんじゃないかなあ」と思ってたんだけど、それは
なにげなく猛烈にお勧めされたので、plaggerを試してみることにした。 しかしPerl実装なんだよなあ。ruby実装ないのかなああああ(いきなりそれか CPANとdebianのパッケージの狭間に挟まれて挫折しかけ。 …5時間ほどまったり苦闘してみた。以下愚痴。 結局素人がplaggerを使うのは無理。簡単なyaml設定ファイルだけ書けば動いてしまうのか!と調子にのってほんのちょっとだけ試してみたが、使いたいPluginが一発で動かないともうどうしようもない。 どうにかするには、Pluginが吐くエラーから要求されるPerlのモジュールを判定する能力と、そのモジュールをちゃんとインストールできる能力が必要。両方とも僕にはなかった。 モジュールのインストールはCPANでなんとなるかなと甘く考えていたのだが、CPANがたまにPerl以外のライブラリ要求するようで、そうなると適切なdebパッケー
次のページ
このページを最初にブックマークしてみませんか?
『sshi.Continual』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く