わけあって2年前に書いた自己紹介文を読み直してたのですけど、読んでいて、 うわーなんて適切な自己紹介なんだろう、と思ってしまったのです。これって つまり2年前の自分と今の自分が全く同じ言葉で説明できているということで、 要するに、進歩ねぇなあ自分。
最初っから言語仕様で明確に文字コードが示されてた以上、今までshift_jisのソースを はじいてなかったのはほとんどdmdのバグなわけで…、実装のバグ依存のコードを 平気で書くのはやめようよみんな。
作りたいもの第3弾。フレームワークというかライブラリですね。 原文が長かったので編集しつつ引用。
アプリケーションの「設定」は、4つの形を持つ。一つは、ファイルやレジストリ、 クッキーなどの永続的保存のための形(Configuration Repository/CR)。二つ目は、 設定をユーザーに提示するための画面等での表示という形(User Interface/UI)。 それはダイアログ上のラジオボタンかもしれないし、 コマンドラインオプションの文字列かもしれない。 三つめは、設定がプログラム実行中に変数として保持されている形(Variables/V)。 四つ目は、その設定がプログラム実行中に実際に動作として反映されている形(Execution/E)。 全ての設定項目が4つ全ての形を持つとは必ずしも限らないけれど。
例を挙げると、Noahの「解凍先ディレクトリ」という設定項目。これの永続的保存形は、 "Noah.ini"というファイルの中の一行。UIは、設定ダイアログ上のエディットボックスと、 [参照...]ボタン。変数としては、CNoahConfigManagerクラスの
kiPath m_MDir;
というメンバ変数。実行中の形態というのは、解凍を始める直前の、SetCurrentDirectoryに よってそのディレクトリへ実際に移動したその"状態"のこと。これら4つの形態は、「設定項目」という一つの実体が異なる見え方をしているだけなはず。 ところが、実際のコードは必ずしもそうなっていない。プログラマが4つの実体を書いて、 それらを関連づける糊付けコードを毎回書いている。しかし当然ながら、 一つの実体であるべきものを4回に分けて記述するのは、一貫性がなくなるおそれが あるし、バグのもとでしかない。そもそもコード量が増えて面倒だ。
例えば、現在の多くのWindowsアプリケーションは、「二つ同じアプリを起動して、どちらでも 設定画面を開いて、片方で設定を変えて[適用]、もう片方で別の設定を変えて[適用]」すると、 先にやったほうの変更が忘れ去られてしまう。これは、CR-UI の一貫性がとれていないため。 あるいは、実行中にディスプレイの解像度が変わると表示がおかしくなるアプリがある。 これは、CR-E の一貫性がとれていないため。あるいは誰とは言わないがK.INABAという作者の 怠慢で、コマンドラインでは設定できなくて、設定ファイルをいじったり起動時に 変なキーを押しっぱにしないと有効にならない項目ができちゃったりする。 これはUIの一貫性がないため。
つまり、CR-UI-V-E の4者は統合されるべきである。1つを記述すれば 残り3つが自動的に完成するフレームワークを作ろう。
NoahやらGreenPadやらを作ってて、こういう枠組みがあれば開発の手間は4分の1とは 言わないけど半分には減る!と何度も思ったんですよね。これを作ってその上に Noah4 や GreenPad2 を一から載せ直そうと考えていた時期がありました。
要素技術(V-CR, V-UI, V-Eの統合)はそれなりに揃ってると思うし、 対象ドメインを絞ればこれに近い物はあるので、なんとかならんことはないんじゃないかなあ。 どこまで大規模なアプリまでスケールするかはわからないけど、少なくとも 私がWindows用フリーウェアとして公開してきたアプリ達程度なら適用できそうなものは なんとなく頭の中で形になってはいます。実際書いてみないと何ともいえませんが。 大道具を持ち出してくるなら、Reactive Programmingとアスペクト指向 を組み合わせて実現したりすると、実用性はともかく、面白いかもしれない。
一般に、推理物の結末を未読の人に教えてしまうのは無粋な行為とされています。 ちなみにその無粋な行為を笑うギャグの代表例として一番よくとりあげられるのが たぶん「ポートピア連続殺人事件」で、そのせいで私は未プレイのこのゲームの犯人の 名前をなぜかイヤというほど知っているという大変ステキな状態にいたりするわけです。
ですが…それは個人的には特に困ったことではなくて。何度かここに書いた気がしますれど、 私は推理小説を読むときに推理をしません。後半4分の3辺りに「読者への挑戦」とかいう ページがあってもノンストップで何も考えず突き進みます。屋敷の見取り図とか載っていても もう全然頭に入れるつもりなっしんぐ。
ことミステリに関しては、種のわからない状態で自分で推理する楽しみよりも、むしろ種を 全て知った状態で、謎を解かんとしている人間の行動、謎を解かせまいとしている人間の 心情の描かれ方を読むのがほとんどの場合楽しいと思っていて、なので、そういった読み方が できる級の名作ならばネタバレ全開で二度目に読む時の方がむしろ面白いとすら思えるので。
とはいえ、謎解きパズルとしての面に腕をふるったミステリは、やっぱりネタを知らずに 悩んだりアッと驚かされたりするのが正統な楽しみ方だ、というのもまた事実。むしろ そっちが圧倒的に普通。なので、自分では人にネタばらしはしないようにそれなりに 気を遣うし、紹介するときも基本的に、さあ驚け考えろ、というスタンスで紹介しますね。
でもでも、その気になれば"登場人物"の思考、行動の理由が刻銘に読める物語なら、 ネタバラされ状態で読む方が絶対に面白いと思うのです。つまり端的に言うと 人狼BBS のログは最初っから [全] で読んだ方が絶対に面白いと思うという話なのですが、例えば私一押しの567村はまとめサイトでは村人視点で読むことが強く推奨されていますけど、 これ、独り言も赤ログも墓ログも無しでエピローグまで読むのって退屈じゃないかなあ、 とか考えてしまうわけです。
という持論を述べてみた上で、 人狼審問:(259)クローンSP がマジオススメ。ネタバレ版推奨。
しかし、こういうどーでもいい内容だと15分で書けるスピードを 今書いてる論文書きの方に回したい…。
ついでなので、そのうち作りたいものネタ帳から色々コピペしてくる週間となりました。 日記書く手間手抜き週間ともいいます。k.inaba の発想の貧困さを眺める週間でもあります。 そして構想を語るだけ語って作った気分になって満足…というのは何もやってない以上に よろしくない気がするので反省する週間。
絵描きさんには "お絵描き掲示板" ってありますよね。あれ、あれのプログラマ版が あったら面白い気がする。つまり、"ソースコード書き掲示板"。と言ってもあんまり 長大なソースは掲示板形式でやりとりするのは向かないだろうから、関数一個とか、 そういうコード片、小技集みたいなので語り合うための掲示板。スレッド型。
とりあえずスレ主の投稿は、言語を指定してソースコードを貼り付けると 字句解析して色分け出力してくれる、くらいで十分。サーバ側でコンパイル してみるとかそういうのは要らない。事実上、ソースコードがちょっと特別扱い されるだけの掲示板。他の人はもちろんレス投稿できて、感想を書いたり改善案を 書いてみたりできる。まあ、普通。それだけっちゃーそれだけのもの。
スレ主は、他の人のコメント投稿をうけて自分の書いたソースを修正してみたりできること にする。修正前修正後のdiffは掲示板側が勝手に記録しておいて、閲覧する人は 初期バージョンも最後の完成バージョンもいつでも選んで見ることができるようにする、と。 別にスレ主に限らず一般に書き込み権限FullOpenにするという使い方も選べた方がいいかも。
七行プログラミングの、お題投下→とりあえず13行くらいのバージョン→最短化* の過程をこういうタイプの 修正履歴が保存されるわいわいがやがや型掲示板でやったら楽しいんじゃないかなー、とか。 お絵描き掲示板にもよく○○祭りとか今月のテーマは□□とかあるみたいに、プログラミング の世界でもたらいまわし関数 をいろんな言語で書いてスピード測定祭り、みたいに一つのテーマで盛り上がるみたいな 機会はあるわけで、そういう楽しみ方もできるんじゃないか、とか。別スレへの参照とか、 InterWikiNameみたいに他サイトのソースコード書き掲示板への参照リンクも張れるといいのか、 もしかして。知られているありとあらゆるソートアルゴリズムを実装&集積しよう大会とか、 自分普通に開催したいし。Let's Boostに併設して「Boost小技掲示板」みたいなのも欲しい。
まとめると、『テキスト投稿部分と「ソースコード部分」を明確に区別して、ソースコード 部については履歴とかバージョンタグ付けとか、言語・ジャンルといったメタ情報を付加 できるようにする。その辺のメタ情報に基づいてうまいことリンクを張ったり、表示整形を 綺麗に行ったりする。』『スレッド型。基本的に一片のコードに関して一つのスレッドで わいわい盛り上がるような使い方を期待。』という掲示板スクリプトが書きたいなあと 思っているのでした。
何らかの締め切りが近づくとマインスイーパやソリティアの起動回数が急増するというのは、 一般によく知られた事実です。というわけで、自己記録更新してしまいました。
ハイスコアよりは連勝回数の方が運の要素が少なくてやり甲斐があるはずとも思うのですが、 なぜか何度もやっていると常に初級か中級のハイスコア狙いプレイに落ち着いてしまうという。
キターーーーーーーーーーーーーーー(・∀・)ーーーーーーーーーーーーー!!! そりゃ思わず顔文字も使うさ。ここ5年 くらい構想だけ練ってて作れなかったソフトがこれで作れるようになるかもしれない。 むしろ新年度から修論その他もろもろそっちのけでこっちに集中したい勢いです(半分嘘)。
どういうものが作りたかったかというと、昔某所に書き殴った構想メモがあったので コピペ。
まず、日本全国の詳細な白地図データを無料で提供。その地図上に、線を引いたり点をうったり、注釈テキストを入れられる。それだけのソフト。線を引いたら道なりに自動補正してくれるとか、レイヤ機能、複数のマーキングデータの合成なんかは空気のように当たり前に搭載。
これで何が出来るかというと、それはユーザー次第で、例えば僕自身ならば、「今までに歩いた道データ」というマーキングデータを作るのに使う。「生活圏内から行ける本屋マップ」というデータも作りたい。これには注釈として、 "この店は○○系の品揃えがよい…"みたいなことを書き込む。「自販機マップ」with その自販機の会社名とか。 あー、注釈テキストだけじゃつまらない。画像やら音やらも当然注釈につけられる。歩いた道データなら、まあ写真をところどころに貼り付けることでしょう。
作ったマーキングデータは、一人で楽しむのもよいけれど、ホームページなどで公開して共有、っていう使い方も想定。一人一人の個人が作れるマーキングデータは、たとえ題材がありふれたもの(本屋マップetc)であっても、その一人一人の興味や生活地域と強く密着した、オリジナルなものになる。日記を書いて公開したがる衝動を持つ人ならば、"自分のマーキングデータ"っていうのは思わず人に見せたくなる題材なんじゃないかと思う。
複数人で共同でデータを作るのも面白い。2chで「全国電信柱マップを作るスレ」とかできて担当分担の割り振りとかで盛り上がったら万々歳だ。それこそタブレットPCや携帯電話なんかを巧く使うモバイル対応機能は必須になるね。でも、一日の記録を家に帰って自宅PCでマーキングデータとして残す、という使い方もサポートすべき。
「レイヤ機能&合成機能」を使いこなして、データはできるだけレイヤを分割して最終的な表示だけは合成データにする、っていうやり方を使いこなすのが面白さの鍵なんだけど、そのレイヤ管理をユーザーが頑張らなきゃならんのは(不慣れなユーザに対して)不親切。そこで、いかにレイヤ管理を裏で自動的にサポートするかがソフト設計のポイントとなるのだ。
どうでもいいが電信柱マップは不毛すぎると思う >昔の自分。
地図上のポイントにメモを貼り付ける機能はどの地図ソフトにもまず間違いなく あるわけですが、どちらかというと補助的なものでした。100件までとかいう 理不尽な制限があったり階層化できなかったりimport/exportすらできなかったり、 点じゃなくて線まで記憶できるものは自分の知っている範囲では一個もなかったり。 …とまあ要するに、そのメモ付きマップ機能を、セーブ・ロード・分類・合成・共有を 主な目的として特化させた何かが欲しかったわけです。
正直、公開だ共有だというのはおまけの対外的売り文句みたいなもので全く深く考えて ないのですが、要は、いくらでも書いたり消したりできるデジタル白地図があったら 面白くない?ってとこですね。わくわく。
あまり使う必要のない場面で無駄に使ってみたXMLHttpRequestがFireFoxで意図した動作を してなかったので修正。さて、これどうやってまとめよう。
数日前に書いた小ネタというのはつまり、(今ここの右上辺りにブラウザによっては 出ているはずの)特徴語と関連記事っぽいリンク達です。昨日 "Wallpaper" と書いたら 関連記事として "壁紙" について書いたものへリンクが張られてて、勝手に英日翻訳してやがる 凄ぇ!と一瞬感動してました。しかしよく見てみると共通してるのはどっちも "言い回し" を 話題にしてた点らしい。そりゃそうか。
あるblogの記事を読んだときに"面白い!"と思ったら、「ここの中の人は他にどんな面白い 文章を書いているのだろう?」という好奇心を満たすために、トップページに上ってから "前のN日分"とか"□年○月"とかのリンクをたどることで時系列の逆順に読破にかかる ことが多いです。
この読み順を採る理由は… まず、最初の"面白い記事"に行き当たるのは、私の場合、他のサイトからの リンクをたどってという経路がほとんどです。で、これは多くの場合、「その文章は 他からリンクが多く張られる、反響の多い文章であった」そして「私がその文章を 目にするのは書かれて1日~数日後である」ことを意味しています。そんな場合、 最新のエントリはその"面白い記事"に対する補足が書かれていることがしばしば。 てなわけで、最新のエントリが見られるトップページへまず一旦戻る、と。
次に日時の逆順に読んでいく理由は単純で、正順に読もうとするとどこから読み始めれば いいのかわからないから。今この瞬間"面白い"と思った文章の著者の、"最近の"文章は、 たぶん分野的にも文体的にも近い書かれ方をしているだろうから、同じく興味深いと 感じられるはず。でも、昔昔のエントリになればなるほど、自分の趣味興味と遠い世界の 話になっている可能性があって、そこから読み始めても面白いと思えないかもしれない。 というわけで、逆順に読んでいって適当なところで打ち切る、という読み方をします。
実験的につけてみた "関連記事" へのリンクは、こういう一見さん流し読みナビゲーション として便利かも、というのが現時点での自分での感想です。つまり、面白いと思ったblogを 読み込もうと思ったら、"前の○日分"ではなくて、ここでいう"R"(一番関連度の高い記事)を ひたすら押して辿るというスタイル。
この使い方を主目的の一つにしようと思ったら、"R"によるリンクは循環しない方が 望ましいな…という辺りを考え中。「"R"が循環してるのが遊びにくくてウザいので なんとかしろ自分」と書きたかっただけなんですけど長くなってしまいました。
前載せたスクリーンショットで窓の裏面に使われてる
画像を使いたいっていう質問を何件かいただいたんですが、たぶん皆さん既に
c:\Windows\Web\Wallpaper\さざなみ.jpg
に持ってると思いますです。
いっぺんめくっちゃった のを戻す機能はFold n' Dropのデモにはありますし、無いと自分でも不便だと思うので 早いとこ実装したいですね。領域選択中にも窓がめくれちゃう件については … どうしたものか困っていたのですが、現在ドラッグ&ドロップ中かどうかの 判定のやり方を教えていただいたのでこちらもなんとかなりそうです。
GWまでには… ←遅
ふと思ったのですがこの言い回しってどこが発祥だろう。
半分お仕事を兼ねた小ネタのテスト中…。いまいち適切な類似度指定のしかたがわからない。
Cygwin以外から呼べるDLLを -mno-cygwin
は無しでCygwinのg++で
作ろうとして苦戦中。色々Googleったりなんなりして試した結果では、過去には大変
だったけど今は -shared
一発でOKそうという結論に達したのですが、
それだけだとLoadLibraryから帰ってこないDLLしか作れず。何か見落としてるんだろう
なあ…。
PPL2005 に行ってました。 「実世界のプログラム」というセクションがある辺り その他の発表はみんな浮世離れしたプログラム…というのは冗談として、 なかなか楽しかったです。"はじめての学会"だった去年よりはだいぶ余裕をもって 発表が聴けました。
ACPS とか CPS Hierarchy とか。
型をパラメータとしてとる関数…C++のtemplate、JavaやC#のGenerics、関数型言語で 言うパラメータ多相型関数…ですね。こいつらは、副作用がないことを仮定すると、 実はそのパラメータ化された型情報を見るだけで、実装を全く見なくても、 どういう処理をする関数なのか相当程度わかる、ということが知られています。
例えば
template<typename T> T f( T x );
というか
f : 'a -> 'a
というか、任意の型について引数の型とおんなじ型の値を返す関数。こんなのは、 引数をそのまま返す恒等関数しかありえません。
template<typename T> T f( T x ) { return x; }
let f = fun x -> x;;
厳密にいうとC++のtemplateはGenericじゃない処理も書けますし、型名に付随して 暗黙のうちにコンストラクタが渡されるので、型Tのデフォルト値を返すみたいなことも できてしまって、この話は成り立ちませんが…。そういうののない、Java の Generics でも問題なく記述できるような関数テンプレートを想定して読んでください。
f : ('a, 'b) -> ('b, 'a)
型aと型bの値のペアを受け取って、型bと型aの値のペアを返す関数なら、 それはペアの左右をひっくり返す処理でしょう。
f : list<T> -> list<T>
リストを受け取って同じ型のリストを返す関数なら、そのまま返すかreverseして返すか、 何番目かの要素を間引いて返すか…とにかく、元のリストの要素を、インデックス情報 のみを使って並べ直すような処理なはずです。てな感じで、一般に、パラメタ化された型を 見ればそれだけで色々な情報がわかってくるわけです。詳しくは "Theorems for free!" をどうぞ。
で、まあ、ここまではそういう話もありますよという前置きで割とどうでもよくて、 本題はここから。久々に変態的(褒め言葉)な Haskell プログラムを見たので紹介 したくなりましたという話です。
De-typechecker。パラメータ多相の「型」を受け取ると、その型の「関数」を 実際に作って返してくれるもの。「t,t1を受け取ってt2を返す関数と,t1と,tとを 受け取ってt2を返す関数」という型を渡すと、
> ff = reify (__::(t -> t1 -> t2) -> t1 -> t -> t2) gamma0
> -- ff = \f x y -> f y x
なんかそれっぽい関数がかえってきます。型から関数を構成する部分はPrologとかの ような論理型言語のResolutionと同じ方法でできるよ、という説明がリンク先に 書かれていて、それはまあ普通なのですが、
We construct such programs and solve them with the ordinary SLD resolution
-- only using Haskell typeclasses rather than Prolog.
全部Haskellの型クラスで実装しましたよ、とのこと。C++er向けに言い直すと、 要はあれです、C++のテンプレートメタプログラミングで全部実装しました、というのと おんなじです。凄いのです。
端で見ていると、Haskellで型クラスメタプログラミングしてる人々とC++でテンプレート メタプログラミングしてる人々と、全然別のコミュニティで別個に盛り上がってる ような感があるんですが、もっとどんどんテクニックが共有されれば面白くなるんじゃ ないかなあ…、と、時々思ったり。
ちゃんと完成させてから公開しようと思いながら1ヶ月放置してたんですけど、 やねうらおさんとこで話題になってたので、せっかくだから旬が過ぎる前にネタ投入 してみます。それなりにパワーのあるマシンでお試しください。
ドラッグ&ドロップ中に、邪魔なウインドウをおりゃおりゃーと折り曲げてどかすことが できるようになるという代物です。Pierre Dragicevic 氏の Fold n' Drop がネタ元。
でした。23歳です。ベタな言い方をすると0x17歳です。
kuljen_tiet__sun_by_dugeroow.mp3
という mp3 がFriejyuでひっかかって、
大変気に入ってしまって出所を調べてました。どうもAssembly'03というメガデモイベントに
出された作品らしい。他のも聴いてみよう。
午前中に時間空けて 文化庁メディア芸術祭 を駆け足で巡ってきました。
ともかく 「OÏO」 の着想に驚き。かつて見ることの出来なかった世界を目にできるようになった技術も 凄いし、見ることのできるようになったことに気づいた人も凄い。他の作品は…鏡で エアホッケーする奴はあれは普通に遊び道具として面白いんじゃなかろうか。Webでも 見られる「夢」で大笑い。「NEtROBOt」のAIBOをうにうにと 踊らせてみて…hwtnvさんにお会いできたら ラッキーと思って行ったんですが時間あわなかったっぽ。 「Sky Ear」 はリンク先の贈賞理由にもあるけど、できるなら参加してみたいイベントだなあ。
そうそう、数日前、我が家に新しいメンバーが増えました。 ポップアップトースター。
去年の夏に かき氷器 を買ったときに、「別に何か 珍しいわけでもなんでもないけどなんとなく憧れのアイテム」としてあげた中の一つですね。 わーいわーい。自分の中でトースターというと一番に浮かんでくるイメージがAfter Darkなもので、 空を飛ばないのが残念なところです。いや、ほんとに飛んだら困りますけど。トースト じゃなくてトースターがポップアップしたり。
そうそう、かき氷器について書いたときの私は、三種の神器などと称して、もう一つ憧れの ものについて語っていたようですね。あれは確か…ガラスのチェスセット。
勢いでこれも揃えちゃいました。しかし置き場がない。
Adobe Open Source ということで Adobe がライブラリのソースを幾らか公開したのが boost-dev で話題になってるのを 見て覗いてみました。Boostとかtemplate周りのいろんな技術が使われてて面白いぞ、 ていう方向で語られてたので興味をひかれて見に行ったんですが、眺めてたらそれより ライブラリのコンセプトの方が面白げ。
メインは Adam と Eve という、User Interface とアプリ内部の動きのモデリングの ための領域限定言語とライブラリ。流し読みしてて "Understanding Adam" 以下の図を見て思わず手が止まりました。以前から、ユーザーからやってくるコマンドと、 ユーザーに見せるためのダイアログ等のUIと、実際のアプリの中で動いている動作としての 形と…を統一して扱えるフレームワークというのを脳内で妄想していて、なんだかそれに 近い物があるように感じました。しばらくいじってみます。
DyDoの 和の紅茶 さくら がマイブームなのです。ちょい甘めだけどなかなかおいしい。あと、ペットボトルの ラベルが“手すき和紙調”に作られてて面白いです。
ブームというと Ajax … 適切なタイミングで魅力的な名前がつくことは、ものすごく強力な起爆剤に なるんだなーという印象。なんとなく、『ノスタルギガンテス』を思い出します。
けれど、名づければ違う。それは新しく生まれる。創造されるんだ。 名づけるものは創造者だ。
とりあえず私は JavaScript 大好き人間なので JavaScript 使いが増えそうなのは 嬉しい限りですね。