やる前から言い訳しないでください。
(Please don't make an excuse before trying.)
QTといえばGUIツールキットのことでなく動画ファイル形式のことでもなく "Quad Tree" の略である。
"i'm very honored to be included in the list."
oh, wrong window
きょうクールなものを見つけた。 musl libcだる。 このソースコードの小ささ + 清潔さを見よ。 tar.gz で 300kbちょっと。コンパイルもすげー早く、30秒以内にすべてが終わる。 たったこんだけのコード (+単純なMakefile) で linux と pthread関連も含む libcの全機能がビルドできるとは信じられない。 locale は UTF-8 しかサポートしてないが、これについてとくに文句はない。 eglibc とか dietlibc なんかよりだんぜん整理されてる。 このキレイさは教育用目的としても使えるぞ。
ただし、やはり速度重視なんでコードのロジックはわかりやすいとはいえない。
たとえば strlen.c
はこんな具合:
#include <string.h> #include <stdlib.h> #include <stdint.h> #include <limits.h> #define ALIGN (sizeof(size_t)-1) #define ONES ((size_t)-1/UCHAR_MAX) #define HIGHS (ONES * (UCHAR_MAX/2+1)) #define HASZERO(x) ((x)-ONES & ~(x) & HIGHS) size_t strlen(const char *s) { const char *a = s; const size_t *w; for (; ((uintptr_t)s & ALIGN) && *s; s++); if (*s) { for (w = (const void *)s; !HASZERO(*w); w++); for (s = (const void *)w; *s; s++); } return s-a; }
(追記)
muslでスバラシイのは「人間(mere mortals)でもヘッダが読める」ことだ。
glibcのヘッダを実際に読もうとした人 (つまり、日本人全員) なら誰でも知ってるように、
あの #ifdef
の嵐とあっちこっちに拡散した定義は、
人間が読むことを想定してない。たとえば size_t が glibc のどこで定義されてるか知ってる?
ウチの場合、これは /usr/lib/gcc/i686-pc-linux-gnu/4.5.2/include/stddef.h
にある
(実際に定義してるのはgccだった)。バカにすんなと言いたい。
舟を造りたいのなら、人々にあれやこれやと指示してはならない。
ただ彼らに向かって、海の広大さがいかに果てしのないものであるかを説けばよい。
-- サン=テグジュペリ
うぎゃー、誰だ hacker news に投稿したのは! (オレじゃないよ)
(追記) heowによれば "lispnyc.orgのトラフィックが昨日から50倍になった" そうな。 そんなん知るかよ。しかし hacker news (とか reddit) ってほとんど 「米国のツウちゃんねる」と化しているよな。slashdot? なにそれ?
ゴミ収集車がいつもと同じ時間に来たのに彼らのプロ根性を見た。
キョーは夜まで降らないだろうと賭けて自転車で家を出たら、 夕方、みごとにミゾレっていた。あまりに寒いので途中で 定食屋に入ってメシを食ったら、出るころには バサバサと音をたてて降る雪になってて大後悔。 そういやー情報大後悔プロジェクトってどうなったんですかね? (もう結論はわかりきってる、調べる気もなし)
なんだこ(りゃ)
[二重の意味で] (ふたえのいみで)
まあ1年に1回ぐらいこういう景色を見るのもいいか。
日本にはまだオレの知らないことが沢山あると思った。
Svetlana がいま日本に来ているというので、きのうは神保町へいった。 なにやら nii.ac.jp で対話文生成の協同研究をやってるのだそうな。へー、情報研ってあのへんにあるの? 彼女は肉は食わないがサカナはOKというので、水道橋あたりの焼き魚系の飲み屋に行く。 そしたら、そこは地元の若いニーちゃんネーちゃんが集まるところだった。そこで、 たまたま飲みに来ていた近所の四姉妹と世間話で盛り上がる。こいつらがまたえらく 賑やかな連中で、彼女らが携帯メールの写真をあれこれと見せて Svetlana に解説するのを 新山がひたすら通訳。なかなかユニークな店で、その日は誰かの誕生日パーティだったらしく、 主催者から客全員に「タダ酒一杯おごり」があったりして、彼女にとっては いかにも「旅の思い出」的ないい体験になったと思う。それを見ていたら、 新山もヒジョーに旅行へ行きたくなった。やっぱ海外へいったら、 地元の人々とワケわかんないカタコト言葉で盛り上がんなきゃダメだよな。
コツコツと音がしている。こつこつと。
ぼくは他人の飲むものに唾を吐きかけたりしない。
ところで君は、ぼくの吸ってる空気に煙を吐いたりしてないだろね?
-- 読み人しらず
“あなたに伝えたい悪があります。”
きのうのつけたし。新山にとって、世の中の人々 (全員ではないが、一部の人々) はわかってないと思えることがもうひとつある。それは 「自分がもっている頭は、じつはけっこう使いものになる」ということだ。 これは実はワインバーグのぱくりだが、彼はこういっている。 「人は一生を通じて、他者を観察し理解するためのすばらしい道具を備えている -- ただそれをあんまり使っていないだけ」 じつに情けないほどそのとおりだと思う。誰しもときおり 「オレってなんて賢いんだ」と思うものだが、 この場合の「賢い」というのと 「自分の頭で考えた結果を信用する」のとはまったく別である。 そうすりゃ、これほどTVその他のメディアが幅をきかせる 社会にはならないだろうにね。 といって、自分の頭を信じすぎるのも問題だけど!
前からここに書いているが、新山は 「各人の(アタマの)能力に、本質的な差など何もない」と思っている。 だからもしある人が (新山よりも) バカに見えるとしたら、 そいつは本質的にバカなのではなく、ただ怠けているか、 あるいは脳味噌が疲れているだけだと思う。 そして世の中にはそういう「人の脳を無意味に疲れさせるワナ」 を仕掛けている連中が沢山いるのだ。Mean People Suck!
なんだか今日は朝から薄暗くて長野みたいじゃないか。
いま会社で新入社員を募集しているのであるが、 今回めずらしく新卒 (←これ自体ヘンな言葉だ) を採用しようとしている。 で、きょうはそういう人々が見学にきて帰っていったのだるが、 彼らって、まだ20歳そこそこなのな。それでいまになってみると思うのだが、 いやはや、オレも20歳のころはいかに世の中のことを *何も*知らなかったのことよ!
20歳の新山の思い込みとは、たとえば次のようなものである:
…ケッキョキ (結局)、その後10年かそこらして判明したことは、 みーんなウソだったとゆうことだ。 さらにショックだったのは、人々はこうしたインチキに対して怒るのではなくて、 むしろそれらを喜んで受け入れていることだ。 そして、みんないかに差別や偏見が好きかということも。
こうしたことは、どれも新山にとっては「すごい発見」であるけれど、 まだ知らない大人は沢山いるのだろう。そして、ここに書いても おそらくほとんどの (理解できない) 人には理解できないのだろう。 うーむ、そもそも理解って何だ? 「これこれはこうである」という事実を言葉で 反芻することはできても、それは「理解」したことにはならない。むしろ 「確信する」というほうが近いかもしれない。しかし、やみくもに信じてもダメなのでして…。 人がなにかを信じるためには、充分な証拠が必要だ。つまり「理解している」人にとっては それに足る充分な証拠が見えており、理解してない人にとっては見えてないということなんだろう。 いずれにせよ、上のような事柄を本心からそう思っていれば、おのずと言動に差が現れる。 だから「理解している人」と「してない人」を見分けるのは比較的簡単だ。 AI的な用語でいえば、いちど「理解」した知識は 自分の belief system の一部として取り込まれるということなのだな。
その意味で、たとえば新山は“オブジェクト指向で保守性の高いコードが書ける”とかいう言明は まったく「理解して」ないが、“すべてのソフトウェアは常識的な思考能力さえあれば書ける”という言明は じつによく理解しております。ホントーーに
ひそかに分析。日本の groupon ブームは「心中願望」が背後にあるのではないかと。
おしなべて
なかんずく
いわずもがな
いいかげん誰も言わないのでオレが言うぞ、 Paint.NET はクソ使えないソフトだ。 誇大宣伝されているわりにはちっとも便利じゃない。 機能が少なく、UIも直感的でなく、おまけにbmp形式で保存すると微妙に内部構造がおかしい。 mspaint.exeのほうがゼンゼンましだ (少なくとも、こいつは毎回起動するたびに5分もかかるアップデートをしたりしない)。
そういえば、今日点毎で見てはじめて知ったのだけど、 こないだ目白駅のホームから盲人が落ちて死んだ らしい。不穏なことよ。目白はとにかくホームが狭いからなあ。
今朝は高校に再入学する夢を見た。こわかった
そういえば今週の金曜日って、休みだったんだね…。知らなかった。 某ワークショップはなんで堅気の人間には参加できない日程でやるんだろう? とずっと思っていた。しかし、ツマんなそうなので どのみち最初から参加する気はないんですがne…。
今日あたらしく知ったこと。 物理的な打ち間違いを意味する "typo" という語から派生して、 "thinko" という単語があるらっし。あうあう
MediaWikiの wikitextパーザを見てみたら、案の定すごかった。 これは "Parser" と銘打たれてはいるが、 「シリアライズされた文字列を内部構造に変換する」という通常の意味での parser ではない。 ただ MediaWiki のあの腐ったフォーマットから、直接、それに対応する (らしき) HTML をテキトーにでっち上げるという処理をしているだけだ。 おまけに、こんなコードがある:
# attempt to sanitize at least some nesting problems # (bug #2702 and quite a few others) $tidyregs = array( # ''Something [http://www.cool.com cool''] --> # <i>Something</i><a href="http://www.cool.com"..><i>cool></i></a> '/(<([bi])>)(<([bi])>)?([^<]*)(<\/?a[^<]*>)([^<]*)(<\/\\4>)?(<\/\\2>)/' => '\\1\\3\\5\\8\\9\\6\\1\\3\\7\\8\\9', # fix up an anchor inside another anchor, only # at least for a single single nested link (bug 3695) '/(<a[^>]+>)([^<]*)(<a[^>]+>[^<]*)<\/a>(.*)<\/a>/' => '\\1\\2</a>\\3</a>\\1\\4</a>', # fix div inside inline elements- doBlockLevels won't wrap a line which # contains a div, so fix it up here; replace # div with escaped text '/(<([aib]) [^>]+>)([^<]*)(<div([^>]*)>)(.*)(<\/div>)([^<]*)(<\/\\2>)/' => '\\1\\3<div\\5>\\6</div>\\8\\9', # remove empty italic or bold tag pairs, some # introduced by rules above '/<([bi])><\/\\1>/' => '', );
…HTMLもPDFもそうだが、最近「いつも必ずダメなファイル形式が普及する」という 傾向があるのではないかと思っている。 そういえば、エスペラントもこの手の人工自然言語(?)の中では いちばん「キタナい」とされているしな。
きのうのつづきで、疲れているときのプログラミング作業で もうひとつできないこととして「あっちこっちのファイルを見る」ことがある。 まさに、プログラミング中はあっちこっちのファイルを見ることが多いので、 それができないということは「プログラミングができない」ということと同値なわけだ。 しかし、これもやはり根っこは「スタックがオーバーフローする」ということに 行きつくような気のする。つまり逆にいうと、短期記憶さえ失われなければ オレは眠らなくても作業が続けられるということka!?
いつも週末で後悔していることのひとつに、 「どんな予定でも2時間ほど遅れる」というのがある。 なぜオレは家にいるとこうも動きがのろくなるのか。 毎回毎回、やることが2時間 (いや、3時間にしとこう) 後回しになり、 すべての予定がズレて結局実行できずじまいになることが山のようにあるのだ。 くそったれ
先週から仕事中にためこんだアホな rant×3:
C-x C-l
。なんでこんなのがデフォルトで束縛されてんだ!!
これでコードが一気に台無しになった。ちくしょうめ。global-unset-key
[
が含まれているためである。くそったれ。
というコードがあって、実はfor k in dictionary: foo(k)
foo
の中で
とやっていて、def foo(k): ... del dictionary[k]
というエラーに何度泣かされたことか。 これはなぜか辞書のときだけ出る。リストのときは出ない。 くそったれ。RuntimeError: dictionary changed size during iteration
頭が疲れていると、なぜプログラミングができないのか? 新山が思うに、ひとつの原因は「短期記憶の低下」である。 新山のプログラミングは非常に短期記憶-intensiveで、 しょっちゅう「ここを変更したら、つぎはあそこを変更しないと。 そしたら今度は別のところを変更しないと…」というふうに考えている。 つまり頭ん中に「やることのスタック」があるわけだ。 ところが疲れているとこれの容量が少なくなってて、 いとも簡単にオーバーフローしてしまう。 その結果「アレ? さっきなんかやろうとしてたんだけど何だっけ?」 ということになってしまい、変更すべき箇所を忘れててバグになる − ということが 疲れているとしょっちゅうある。これはよくない。 これを是正する方法はおもに2つあって:
それからもうひとつ。 新山は、疲れているときには数を正しくカウントできないらしい。
「ひみつの宇宙人テクノロジー (Secret Alien Technology)」 ってなんかすごそうだな。ひらがなで書くと特にすごい。 ひみつ。
また今年も野沢菜がおいしい季節になりやしたねえ。
Normal,
Normal.