The Golden Ticket: P, NP, and the Search for the Impossible


P, NP問題についての分かりやすい解説書。特にP=NPだと証明された世界の予想が書かれていて夢のようである。
著者は計算理論の基礎のマイケルジプサー先生の弟子らしい。自分が生きてるうちにこの問題の決着は見られないだろうと言うほどこの問題の難しさを物語っている。

Safe C++


Kindle版で読んでます。
Chapter 5. Pointer Arithmeticが1ページくらいしかなくて「Avoid pointer arithmetic. Use template vector or array with instead.」と書かれていたのには笑った。

FYIとは

メールでFYIと書かれたものを受け取ることがある。

 調べてみたら
FYIとはFor Your Informationの略で「参考までに」のこと
だった。

フィーリングからFor Your Interestだと思っていた。

[書評]In The Plex


GoogleにおけるDon’t be evilという社是が果たして、今も成り立っているのかということに主に焦点を当てて描かれている。

P16
(APMプログラムの参加者で)5年後にまだグーグルで働いているだろうと考えている人間が1人もいなかったことだ。

P54
ミニマムなデザインになったのは、プロのウェブマスターがいなくて、全部自分たちでやらなくてはならなかったからさ

P78
哲学者のウィトゲンシュタインが、言葉は文脈によってどう定義されているかについて論じた理論を応用したのだ。

P94
ランキングの一番上に出てきてしまう、置物を実際に購入したら順位が正しくなった話し。

P176
アイザック・アシモフ「ファウンデーション」

P181
グーグルがよく利用されている国ほどGDPが高い。

P187
20%ルールは実際は業務を終えてから行うことが多いので、実際の業務に加えての120%プロジェクトとジョークで言われていた。

P201
「私たちは食事について真剣に考えています。これほど食事にこだわる会社をほかに知りません」

P209
Google社員なら誰でも、ベストセラーとなった「銃・病原菌・鉄」の著者で生物学者のジャレド・ダイアモンドや、コンピュータ科学の父と言われる故アラン・チューリングに匹敵する会話術を身につけていなければならないことになる。

P219
社員にカードを配って、何かいけないことが行われているときに見返して、何番に違反している、なんてことをやるのは無意味。

P250
80:20ではなく、70:20:10こそがグーグルの本当の魔法の方程式。

P290
ペイジは200ミリ秒単位で時間が分かる。

P291
グーグルは2007年に、検索結果を人為的に送らせてユーザーの行動を測定するという調査を実施した。設定された遅延時間は100ミリ秒から400ミリ秒程度ときわめて短かったため、全く影響が出なくても不思議ではないと思われたが、実際にはユーザーが検索に消極的になるという結果が得られた。

P292
グーグルのコードイエローシステム。

P384
ペイジがウィキペディアに不満な点は、核融合に関して質の高い情報が見つけられない点

P389
マットハーディングのダンス動画がYouTubeのヒットのきっかけを担った。

P400
グーグルはもはやインターネットに「革命」を起こすには図体が大きくなりすぎていた。

P418
グーグル社員には、どの等級にいるか本人にさえ教えられないことがある。それは認識バイアスを防ぐため。

P495
中国のグーグルが閉鎖される日はアバターのチケットが渡されて社員が午前中で帰された。

P501
オバマを招いての講演での質問で、ソートの問題。
オバマはバブルソートを用いるのはさけた方がいいでしょうと答えた。

P509
Gメールでなくマイクロソフトエクスチェンジを使わされることにもうんざりしていた。

P582
何百万台ものグーグルのサーバーの外のリアルな世界では、データと論理だけで勝利を手にできるとは限らないのだ。

aspellで英語論文スペルチェック

英語論文を書いている際に、スペルチェックにaspellというコマンドが便利だったので紹介。

環境はMacなのでWindowsにもあるのかは分かりません。

まず、インストールはMacPortsを使います。


sudo port install aspell aspell-dict-en

aspellと同時に辞書も入れます。

設定ファイルに以下を記述するため次のコマンドを実行します。


echo "lang en_US" > ~/.aspell.conf

aspellはTeXをサポートしているので -t オプションが与えられると、それをTeX文書と理解してTeXコマンドや数式モードの内側は無視されます。

以下のように使います。


aspell -t -c hoge.tex

後は、インタラクティブに使う事ができ、スペルミスとおぼしき所に変換候補が表示されるので、その番号のキーを押す事で置き換わります。

goshでのマクロ展開

Gaucheではマクロ展開後のコードを見るためにmacroexpandという手続きが用意されているが、マクロの使用がcar部に来ていないと展開されない。

例えば、よく例として挙げられるorマクロは


(define-syntax or
(syntax-rules ()
((or) #f)
((or exp) exp)
((or exp1 exp2 ...)
(let ((tmp exp1))
(if tmp
tmp
(or exp2 ...))))))

3つ目のパターンでは再帰的にorが登場するが、そこまではmacroexpandで展開は出来ないので全体の様子を見る事ができない。

なので、マクロの使用が完全に無くなるまで展開を続ける手続きを書いた。


(use srfi-1)
(define evalMacroDef ;macro定義を見つけたらそれをevalする。
(let ((macroName '())) ;定義があればその名前をここに格納していく。
(lambda (schemeCode)
(if (pair? schemeCode)
(if (eq? (car schemeCode) 'define-syntax)
(begin
(eval schemeCode (interaction-environment))
(set! macroName (alist-cons (cadr schemeCode) schemeCode macroName)))
(if (assoc (car schemeCode) macroName) ;macroNameの中に入っているマクロだったとき展開する
(begin
(set! schemeCode (apply macroexpand (list schemeCode)))
(if (pair? schemeCode)
(cons
(evalMacroDef (car schemeCode))
(evalMacroDef (cdr schemeCode)))
schemeCode))
(cons
(evalMacroDef (car schemeCode))
(evalMacroDef (cdr schemeCode))))))
schemeCode)))

うーん,もっと綺麗に書きたい.

これを次のように使う


(define code
'(begin
(define-syntax or
(syntax-rules ()
((or) #f)
((or exp) exp)
((or exp1 exp2 ...)
(let ((tmp exp1))
(if tmp
tmp
(or exp2 ...))))))
(or 1 2 3 4 5 6)))
(evalMacroDef code)

出力結果


gosh> evaluated (define-syntax or (syntax-rules () ((or) #f) ((or exp) exp) ((or exp1 exp2 ...) (let ((tmp exp1)) (if tmp tmp (or exp2 ...))))))
(begin #<undef> (#<identifier user#let> ((#0=#<identifier user#tmp> 1))
  (#<identifier user#if> #0# #0# (#<identifier user#let> ((#1=#<identifier user#tmp> 2))
    (#<identifier user#if> #1# #1# (#<identifier user#let> ((#2=#<identifier user#tmp> 3))
      (#<identifier user#if> #2# #2# (#<identifier user#let> ((#3=#<identifier user#tmp> 4))
        (#<identifier user#if> #3# #3# (#<identifier user#let> ((#4=#<identifier user#tmp> 5))
          (#<identifier user#if> #4# #4# 6)))))))))))

emacsのカーソル速度変更

MacでCarbon Emacsを使っているのですが、カーソル速度が遅くてかなり不便な思いをしていました。

elispで書けるのかなぁ、と思って解決策を色々探していたけど、見つかりませんでした。

そこでキー入力自体を速めてしまえばいいだろうと言う結論に達し、KeyRemap4MacBookをダウンロードしました。

ダウンロードしてインストール後、再起動するとシステム環境設定からKeyRemap4MacBookという項目が選べるようになっているので、そこの [Key Repeat]Waitの値を変更してやればOKです。

初期値が30で既にインストールした時点で、インストール前よりも速くなっている印象です。