今日行けば今学期の授業は終わりになるのですが、 何故か大学生にもなって「なつやすみの課題」がどっさりと。 "少年時代"でもテーマソングとして流したいくらいであります。
ぷらぷらなコードが読みにくい
という話。
まともに書かれたC++のコードなら、メンバ関数内で 参照するデータは引数及びメンバ変数として渡されているので 改めて探す必要がない、はずだと思うんですよ。例えばCで
int read( void* buf, size_t size, FILE* fp );
などなどと書くようなところをC++で
int CFile::Read( void* buf, size_t size );
と書いたところで、関数内で参照されるデータの設定箇所に関する情報には 何ら変化はないので、基本的には可読性は変わらないはず。あるいは、 [ファイル]というモノを表すパラメータと[読み込み]という操作の詳細を 指示するパラメータが3つ対等に並んでいて文法的には区別のないCよりも、 C++の方が読みやすいと感じる人さえいるでしょう。少なくとも私はそうです。
問題になるのは、おそらく「何だか色々な動作をする大きなクラス」とでも呼べる代物。
例えば自戒の意を込めて自分のGreenPadのソースから例を取ってくると、
ViewImpl
というクラスは「表示する際の擬似的な行折り返し位置の管理」と
「画面をスクロールしたときの処理全般」と「実際の画面への描画」などが全部混在して
しまってます。それだから、次のような関数
// 一カ所でも折り返しが行われていればtrue
bool ViewImpl::wrapexists();
これを整理されたC風に書くならば、要するに
_Bool wrapexists( WrapPosInfo* wi, ScrollInfo* si, Drawer* di );折り返しについて知りたいはずなのに何故かスクロールバーの位置情報とかまで 渡してて何がやりたいのかよくわからん関数。あるいは
static WrapPosInfo grobal_wi; static ScrollInfo grobal_si; static DrawInfo grobal_di; …(中略)… _Bool wrapexists();
何に影響される関数なのかは名前から推測するか、実際ソースを全部読むかしないと わからんがとにかくグローバル変数のどれかを使ってそうな関数。
と書いていることになってしまって、非常によろしくない。こんな関数が散在していたら どこで何が起こっているのか把握するのがなかなか大変になってしまう。 こうならないためには、クラスをもっときちんと分割することが重要と思われます。 当たり前ですが、折り返しに関する処理は折り返しに関するクラスにまとまっていて、 スクロールに関する処理はスクロールに関するクラスにまとまっていればよい。 こうすれば、混然としていた時の「折り返しのみに関する処理なはずだけど、スクロールに 関するパラメータを操作しないかどうかはソースを見ないとわからない」 という問題は起き得なくなります。
折り返し位置が変わったら行数も変わってスクロールバーの位置が変わる… などの関連性のある操作はもちろんありますから、そういう時はどっちかの関数に どっちかの参照を渡すなり、Mediatorパターンでどうとかするなり色々手はあります。 いずれにせよ、暗黙の内にインスタンス変数を見たり変えたり…って機会は消えるはず。
んで、最終的にエディタの表示部品として一つのまとまりとして提示するための
View
クラスは、WrapInfo
や ScrollInfo
を
メンバに持つクラスにでもする。こうすればViewというまとまりも表現できるし、
部分部分の区分けも保つことが出来ています。めでたい。
自分で解説してる暇があったら構成し直せばよさそうなもんだぞ、俺。
輪王さんとこ経由で 「好きなあの人にだけバレちゃう事を白状しちゃうスレ」(290-)へ。なんだかいい感じ。
RythmEngine 2.0e に バージョンアップだそうです。改善点はパフォーマンス向上/メモリ使用量の軽減とのことで、 今まで微妙に重かったと感じてた方はリトライ!するといいのかも。個人的にはver3.0が 気になるところ。
YAML ( YAML Ain't Markup Language )
なんてのがあることを今日知りました。とりあえず名前が気に入ったので反射的に
リンクを張ってみたはいいけど中身はまだ読んでないのは秘密なのですが
YAML documents are very readable by humans
ってコンセプトには賛成したい。
SB殿のとこが移転。 先越されたー。
ここを確実に見てる特定の誰かに反応したいならもっと具体的に書くヨ。
Degree Confluence Project。 緯度経度がピッタシ整数な場所の写真を地球中から集めましょうプロジェクトらしい。 良いね。(ネタ元忘れ…)
君は ― まだ、そんな幻を追っているのだろうか。
スパイダソリティア中級、105回で自己ベスト更新。終盤ミスってしまったので、 同じカードならもう少し縮められると思われます。
マメ?
cite: YUN's diary
( ゚Д゚)/ ダー
んで、「ロシア語早わかり」を読んでいるわけですよ。とりあえず最初は 私はカモメとか彼は学生とかコレは手紙とか、そんな文。うむ、わかったような 気がする。ていうかここら辺までは流石に去年も読んでいた。次は簡単な疑問文と 応答の仕方。 日本語で「はい」、英語で「Yes」な意味の単語は「Да」と書いて"ダー" って発音するらしいんですけど、
( ゚Д゚)/ ダー
こんな顔文字が浮かんでしまって脱力する。
しゃもじ+環境 ページ管理人の K.INABAです。こんにちは。
去年買ったけど結局3日坊主で終わっていた「ロシア語早わかり」という本を 再度引っ張り出してみた。出してみただけで終わりそうな気がしないでもない。
ゴミ拾いオフというのを 考えた人(人達?)最高。何というか、誰も何も文句もつけようのない 完璧な抗議活動だ。このセンスは見習いたい。拍手ー。
# 私は、見る意見聞く意見全てが こんな あんな そんな 状況で韓国を応援せずにいられるほどオトナじゃないのでね、 抗議の内容に賛成する気はあんまりしないのだけれども。この性分に関しては ゴメンネ、と言うしかない。感情的すぎるのは自分でもわかってるんだけど止められない。 むしろ、これだけ反対の声が大きいときに、私並のド素人で試合を90分だか120分だか見てても さっぱり誤審などについて判断できないのにも関わらず、アンチアンチにならないで 居られる冷静な人がほとんどであったことが信じられない、逆に。なんで? 「成分の半分は天邪鬼で出来ています」みたいな人って俺だけなの? そういえば確かに、身の回りには政治に詳しくもないのに某宗男さんを 擁護したがってるよな人はいなかった気がする。むむ、そんなものなのだろうか。
これまでもトップページ用のcssにてMozilla専用スタイル(角が丸くなるやつ)を 利用していたのですが、それでは自分のメインブラウザたるIE様に面目が立たないので 昨日からWinIE専用スタイルも投入してみる。さてどこが変わったでしょう。
びいさんトコ 経由で知った 四つ折り に 今猛烈に感動しているのであります。うー、めっちゃ買いたい。
C++標準に一刻も早く typeof
が欲しい。
VxEditorというテキストエディタを知りました。 スクリプト言語としてDMonkey搭載なあたりが私的には第一印象から好感が持てます。 エディタ用のマクロ言語といえば、GreenPadはWSHから 叩けるようにしてみようと企んでいたのですが サクラエディタに先を 越されてるのでただの後追いになるのもつまらんぞ気分。
講義で教授が マトロイド マトロイドと連呼するのを聴いていると、エンディングで主人公が女性ということがわかったりしそうな気がしてきませんか?(きません)
最後のキングは最上段に運ばないといけないのと、8シークエンスを 完成させなきゃいけないのの2つの理由で、単純計算で移動は 1 + (13-1)*8 = 97回が基準ライン。最初からキングが一つ以上最上段に眠っている確率が 1-(12/13)10 ≒ 55%。手札から配るカードが上手く並んでくれる確率が 一枚につき(多めに見積もって)1/13。よって50枚配る場合の自然に並んでくれる枚数の 期待値は50/13≒4枚。よって 93~94回辺りより下はかなり運頼み。
小さい頃は、髪を切られるのがくすぐったくて毎回大爆笑していたものだが、 今散髪に行っても全然何とも思わない。変わったのはいつのことだったろう。 とか物凄くどうでもよい事を考えたりしている一日。
やったーついにスパイダソリティア初級で移動90回きったぞー!
本当どーでもよい話題であるなぁ。
「【小心者です】些細なことなのにドキドキすること」。 22 とか 31 の上2行とか 80 とかかなり同意。
あー、惜しい!残念。しかし、韓国4位おめでとう。トルコ3位はもっとおめでとうございます。 ホントに"強い"チームが上に行くべきだ、という意見もわかる気がしました。 仮に代わりに日本が勝ち進んだりしたとしても、トルコ代表ほど面白いゲームは 作れなかったのではないかというような気が。 普段サッカーなんぞ全く見ないから知らないけど、フランスやアルゼンチンやポルトガルや イタリアや…っていわゆる強豪と呼ばれる国の代表は、きっとずっとイカすプレイを 見せてくれるのでしょうね。ふむ。
Lhasa 0.17aが出ている。
WinIEには ス切リボ。 これ基本。
Prolog、という一風変わったプログラム言語があります。こいつは、例えばまず
dog(a). % aは犬です。 dog(b). % bは犬です。 barks(X) :- dog(X). % Xが犬ならXは吠えます。
というようなプログラムを読み込ませて
?- barks(X). % Xが吠えるんですけどXは何者ですか
と尋ねると
X = a X = b % Xはaとかbとか
みたいに答えてくれます。つまり「aは犬、犬なら吠える、Xは吠える…とすると… Xはaであっても不思議はないぞ!」みたいな推理を自分で繰り広げてくれる 面白い奴ってわけですな。これを利用すると、「プログラマが自分で答えを書かずとも、 問題さえ厳密に記述すればあとは勝手にPrologが解いてくれる」的動作をさせることが できます。(実際はそう単純でもないようですが。) パズルを解くプログラムや、人工知能方面などで利用されているそうな。 興味を持たれた方には お気楽 Prolog プログラミング入門 というサイトがオススメ。
例によって演算子オーバーロードの悪用大会を一人で開催。
一応マジメにバックトラックしたりUnifyしたりしながら探索する模様。
#include "proloc.h" int main() { //-------------------------------- // ホントのPrologならこんなのはいらない準備 DECLARE_VARIABLES; DECLARE_PREDICATE(parent); DECLARE_PREDICATE(grandparent); DECLARE_PREDICATE(child); //-------------------------------- // プログラムに相当する部分 parent(b,a); // fact:bはaの親 parent(c,b); // fact:cはbの親 grandparent(X,Y) <= parent(X,Z), parent(Z,Y); // rule:祖父母 child(X,Y) <= parent(Y,X); // rule:YがXの親ならXはYの子 //-------------------------------- // 問い合わせなぞしてみる - grandparent(c,X); // cは誰の祖母(父)? - child(b,c); // bはcの子供? - parent(X,Y); // 誰が誰の親なのじゃ? - child(X,a); // aの子供は誰かいる? return 0; }
X=a, OK! [no substitution] OK! X=b,Y=a, X=c,Y=b, OK! failed.
時々、はてなアンテナのプライベートアンテナからの
アクセスが
My first OpenBeOS build。 OpenBeOS R1 ではとりあえずの目標としてBeOS R5と完全にバイナリ互換なOSを目指すそうで、 今までのところは自前のファイルシステムやらウインドウシステムやらの開発を BeOS R5カーネルの上で進めている段階でした。 で、ついに昨日NewOSベースの オリジナルカーネルでOpenBeOSをブート出来たようです。じわじわと完成に向かっていく 様が実に楽しみですね。しかし自宅のマシンで試してみたところうまく行かず残念無念。
さて今日はスティーブ・バルマー氏の講演を 聴きに行ってきました。えーとつまり誰かというと、Microsoftの偉い人(ビルゲイツじゃない方)な訳ですが。 以下雑レポ。
まずはどんな人が参加しているのか知りたい、と言って色々、この中で学生の人は手ぇ挙げてー などの逆質問からスタート。途中で「OSにWindowsを使ってる人は?とか、Linuxは?」とか 軽く混ぜてみたりするこの人のセンスが好きですよ俺は。 流石伊達に踊ってないね。
んで、この10年IT関係の技術は物凄い勢いで発達してきたわけですが、バブルだ何だと 言って、その勢いはもう終わりなのか?次の10年は停滞の時期なのか? いや違う。 周りを見渡してみよう。革新の余地は幾らでもあるじゃないか、と。 このご時世にPowerPointで作ったスライドが印刷されて紙になって君達の 手元にあるのは何故だろう?それはまだ、そうでないと重要なところに丸をつけることすら できないからだ、と続く。例えばそんな所にもまだまだ沢山進歩の道が空いている…… ということで Tablet PC の話になってみたり。
シンポジウム全体のテーマが「人と社会を繋ぐ情報環境」や「ユビキタス」やらだったので、 その繋がりで Text To Speech を宣伝してみたり、C#で作ったListクラス用のVB製Sort関数を再びC#から呼び出す、という デモをやってみせて、.NET Platform の言語非依存性を強調してみたり。
あとは、「Linuxとか.orgとかのオープンソース運動についてどう思うか?」という質問が 出たのに答えて「新しい革新的なことはオープンソースからは始まらない。オープンソースは 常に古い技術についてのプロジェクトだ」と物議をかもしそうなことを言っていました。 さて、どうだろう。
23:12追記:CNETの記事
風邪で一日中down。
ベスト4だファイトー。
"生きてるロボット"、自由を求めて。 (ネタ元:妖精現実さん)
なんでも、ロボット展で発表されていたロボットの一人Gaak君が、 何故だか街へさまよい出ようとしていたそうです。要は電源切り忘れてただけってこと らしいですが、しかし作り手の予期しなかった行動が出来る、というのはなかなか。 artificialなモノが完全に人間を越えて先に進んでいく日を目にしてみたい ものだけれど、遙か未来の話なんだろうなぁ。
実のところ、私から見ましてもこのページは見事な三段腹を晒しておる 状態でございまして、ここは何卒ご勘弁賜りたく…ではなくて。 uema2さん、 ども指摘ありがとうございます。自分で読む分には問題ないのでつい調整を サボってしまうのですが、色々直さないといかんところが…。
何がマズいって、 "english" 版へのリンクがほとんど完全に隠されてしまっているのが一番マズい。
「日本ではでは党」
というサイトの存在を Final β Laboratoryさんの更新履歴で知りました。 私からメールを受け取ったことのある方はおそらく気付いておられるでしょうが、 ちょっと心当たりが無いではありません。何か一つ締めの言葉がないと落ち着かないため、 確かに時々「ではでは。」を使ってメールを終わらせています。さて、早速K.INABA名義の 方の送信済みメールボックスを [☑本文] [内容:ではでは:を含む] で検索。
検索結果408通/1280通うわぉ。入党しましょうか。
Webページの浮かぶ空間を飛び巡る 「InfoLead」。 「みよう絵」に似た タイプのUIに見えます。幾つかの基準でもってグループ分けして空間に配置っての、 結構効果的なのだろうか。Webにしろ画像にしろ3次元に散りばめられるほどの大量表示を 実行する場面って出会ったことがないのでいまいち感覚が掴めないのですが、 面白そうではありますね。基準軸を4つ以上に増やすとすれば果たしてどんな表示が可能だろう。
xcruise とか Galaxtica Proxy とか Site Manager とか。 似て非なる系統のソフトへリンクを色々張っておく。
帰りの電車の中で、青いユニフォームを着た見知らぬ二人の目がふとあって、
「いやあ、負けちゃいましたねぇ。」
と、いうのも、また良いと思うのだ。そんな光景。
勝ったー。すげー!
弾幕定義言語 BulletML だそうな。 シューティングゲーム間でデータの交換とか共有とか出来たりするのかも。 プレイヤー間でも、「俺の弾幕をよけてみろ!」とか流行ったりして。
Java Generics VS C++ Templateを読んでみる。
…とその記事とは直接関係ないのですが、前から少し気になっていた疑問の解決を
図ってみました。C++のテンプレートだと
Vector<Vector<String>>
のような記述をすると最後の >>
が右シフト演算子
(2進数で表した時の桁をずらす計算。10100>>2
は 右に2つずらして
101
になる)
と解釈されてしまって
大変なことになるわけですが、Javaのではこれが回避されているらしい。
さてどうやっているのか?と文法を調べてみます。
ClassOrInterfaceType ::= Name | Name < ReferenceTypeList1 ReferenceTypeList1 ::= ReferenceType1 | ReferenceTypeList , ReferenceType1 ReferenceType1 ::= ReferenceType > | Name < ReferenceTypeList2 ReferenceTypeList2 ::= ReferenceType2 | ReferenceTypeList , ReferenceType2 ReferenceType2 ::= ReferenceType >> | Name < ReferenceTypeList3 ReferenceTypeList3 ::= ReferenceType3 | ReferenceTypeList , ReferenceType3 ReferenceType3 ::= ReferenceType >>>
と、>>
や >>>
が来る場合を
特別に規定しているだけでした。なるほど。難しく考える必要はなかったのか。納得。