2011年4月9日土曜日

gitwebでsyntax highlight

gitwebでsyntax highlightを試みる

gitをソースからinstallすると、repositoryをブラウザから見るためのgitweb.cgiがついてくる。ちょっとブラウザから見たいときにはwebrickでhttpサーバを立ちあげれば、localでも見ることができるし、git repository が置いてあるサーバに置いておくと、ブラウザさえあればどこからでもソースや履歴が閲覧できて、とても便利。ただ、ちょっと不満なのが syntax highlight されていない点。検索してみても、 "gitでsyntax highlightできないの?"と聞く mailing list とかばかりヒットして、どうすればいいのか分からなかった。また、日本語の情報も見つけられなかった。ただ、 mailing list の log を見ていくと、どうやら本家には merge された様子。調べた結果、すでに syntax highlight の機能は gitweb.cgi に取り込まれているようだった。今回は serversman@vps 上に置いた gitweb に syntax highlight を有効化させてみたのでそのメモを書いておく。

gitweb.cgiそのものについては、 Pro git や gitweb/README や gitweb/INSTALL を参考。

gitwebとhighlight

git-dir $ grep highlight gitweb/README
してみると、何やら
* HIGHLIGHT_BIN
  Path to the highlight executable to use (must be the one from
  http://www.andre-simon.de due to assumptions about parameters and output).
  Useful if highlight is not installed on your webserver's PATH.
  [Default: highlight]
と引っかかる。

http://www.andre-simon.de

から syntax highlight してくれる highlight が手に入るようだ。ちなみに、ほとんどの distro にはパッケージがあるようなので、 local(ubuntu) にも入れておいた。xhtml, terminal, latex などいろいろな出力形式に対応していて便利そう。

install highlight

serversman 上で作業する。

  $ tar xvzf highlight-3.4.tar.gz
  $ cd highlight-3.4
  $ less INSTALL
  $ less README
としたあと、
  $ make
すると、エラーがたくさん出る。結論から言うと、c++、boost(c++ libraries)、luaがない。

c++とboostは

  $ sudo yum install gcc-c++
  $ sudo yum install boost-devel
でinstall。

次にluaをinstall。lua 5.1をダウンロードして、

  $ tar xvzf lua-5.1.4.tar.gz
  $ cd lua-5.1.4
  $ make
ここで、-lnucursesで、エラー。
  $ sudo yum install ncurses-devel
  $ make
  $ sudo make install
これでhighlightをbuildする準備が整った。

  $ cd highlight-3.4
  $ make cli
  $ sudo make install
これで、OK。あとは gitweb の設定のみ。

gitwebの設定

gitweb.cgiをhighlightで検索すると、defaultでは有効されていないと、と分かる。highlight へのPATH が通っていることを確認し、gitweb_config の projectroot の指定よりも前に、

  $feature{'highlight'}{'default'} =[1];
と書く。 default で highlight を適用させる suffix が gitweb.cgi で指定されているので、そこにいくつかルールを追加する。ここまで来れば、
  • 適用前
  • 適用後
  • となる。満足。

    色を変更したければ、 static/gitweb.css の一番最後にある hightlight の色指定を変更する。あるいは、コマンドラインから

      $ highlight -s emacs hoge.rb > hoge.htlm
    
    などとしたときに、一緒に出てくる highlight.css を参考に設定すればよい。スタイル一覧は作者の web site から見ることができる。

    ちなみに

    他の環境にhighlightの2.X系を入れてみたところ、 lua がないけど install できた。2.X系の方が楽だったかもしれない。

    2011年4月3日日曜日

    WEBで学べるということ

    Webで学べるということ、

    Salman Khan: Let's use video to reinvent education(ビデオによる教育の再発明)は、Khan Academyの教師(というのがふさわしいのか、創設者というのがいいのか、それとも校長?)によるTED Talk。Khan AcademyはWeb上の学校で、学校で教えるような算数、理科、社会などの講義をおさめたビデオや復習用の宿題などがある。Khan Academyのことは、「ウェブで学ぶ」(後述)にも紹介されていたので前から知っていたし、ビデオもちょっとだけ見たことはあった。授業はきちんとストーリー仕立てになっていて、種類もたくさんあり(ただし英語)、すごいと思った。内容もさることながら、その情熱と行動力に驚く。

    Khan Academyを覗いてみると、内容は多岐に渡っていることが分かる。代数、算数、銀行とお金、生物、、、。子供だけのためというよりも、大人でも楽しめる。なんだか楽しそう。後で探検してみよう。

    以下がTED Talk。

    青木靖さんの日本語の日本語訳(TED公式)がここにある。

    ウェブで学べる時代と英語

    さて、「ウェブで学ぶ」(梅田 望夫/飯吉 透(著)、ちくま新書)という本に先ほどふれた。こちらは題名の通りウェブで学ぶことができる場所の紹介と、それがどういう意味を持つのかについて書かれた1冊。WEBで学ぶと言えば、iTunes Uや、MIT Open Coursewareが有名だが、Kharn Academyについてはこの本で知った。

    onlineにコンテンツをほぼ無尽蔵に蓄積できる状況にあって、教育というのはその可能性をもっとも活用できる分野の一つなのかもしれない。こうなると、こういう素晴らしいコンテンツを利用できるための手段が英語だという点が、どんどんネックになってくる。「ウェブで学ぶ」にもあるが、学ぶために英語を身につける時代になりつつあるのかな。このこと自体は英語を学ぶ目的がはっきりしていいと思う。ただ、日本は大学、大学院などの高等教育も(少なくとも講義は)日本語で受けることができるし、まだまだ日本語だけで事足りるため、英語を身につける必要にせまられないのも事実。しかし、ちょっと世界とコミュニケーションしようとすると英語が必要なのも事実。

    英語が入口だ、と言いつつも、その英語は完璧なものである必要はなくて、どうせほとんど非ネイティブなんだと思うと気が楽になる。それに、英語圏のコンテンツが楽しめるようになると、どんどん楽しくなってくる。最初の入口だけ我慢して英語を勉強すると、webのおかげで英語で英語を身につけることもできるようになってくる(TED Talkだってそうだ。)。その意味で学習コストは下がっていると感じる今日このごろである。

    何が大切なのか

    とりとめもなくなってしまったが、こうやって知識に簡単にアクセスできるような状況になったときに、何が一番大事なのか考えると、それは「知っていること」ではなくて、学ぼうと思わせる目的や動機、モチベーションを持っていることなのかもしれない。情報がそこにあったときに、手を伸ばそうとするかどうか、が決定的な違いになるのではないだろうか(アクセス手段 -この場合ネットにアクセスする手段- があることを前提にして。)。また、onlineで知識を獲得できるようになるにつれて、反対に、現実の教室で講義を受け、質問し、議論できる環境の価値が相対的に高まるだろう。実際に現場に行く、現場にいる、ってこと。おもしろい。

    「メタプログラミングRuby」のメモ1

    「メタプログラミング Ruby」の月曜日

    「メタプログラミングRuby」を読みはじめた。月曜日のメモ。

    • モンキーパッチとは:既存のクラスを(安易に)再オープンして拡張すること。外部ライブラリを導入している場合、名前空間のすべてを把握することは困難。そのため、知らず知らずのうちにモンキーパッチをしてしまう危険性がある。だからこそ、unit testが必要。
    • Kernelはモジュール。Rubyではモジュールをincludeすると無名クラスでwrapされて、継承ツリーの一つ上に置かれる。このクラスは'include class'とか'proxy class'とか呼ばれる。無名クラスはsuperclass()メソッドには存在したものとして扱われる。Rubyのコードでも普通はアクセスできない。
    • Rubyでは常にobjectの内側にいることで、ObjectクラスにインクルードされているKernelモジュール のプライベートインスタンスメソッドであるprint()などにアクセスできる。こうすると、メソッドであるprint()が言語のキーワード(予約語)であるように見える!!これはかっこいいな。これはつまり、kernel mothodにすると、すべてのオブジェクトで使えるようになる!!すごい。こういうことをしている例が、ruby gem。
    • メソッドを呼び出すときselfがレシーバになり、レシーバを明示的に指定せずにメソッドを呼び出すとselfのメソッドだとみなされる。

    火曜日も楽しみ。

    TED Talks: The birth of a word

    TED Talks: The birth of a word

    久しぶりにTED talksを見た。2011年のTED。talkerはMITで子供のコミュニケーションの研究者のようだ。以下にvideoを貼っておく。

    途中で子供が言葉を獲得過程に実例が出てくるが、とってもほほえましい。と、同時に、興味深い。"water"と言いたいのか、"gaga"からだんだんと"water"(っぽく)聴こえてくる。部屋の天井に埋めこんだカメラとマイクから作られた映像も見応えある。

    2011年3月21日月曜日

    「旅人」と「『大発見』の思考法」と「科学者とあたま」

    「旅人」と「『大発見』の思考法」

    湯川秀樹博士の回想である「旅人」と、iPS細胞の山中教授とCP対象性の破れの益川教授の対談「『大発見』の思考法」を読んだ。時期的に連続して、科学者の回想と科学者同士の対談を読んだことになるのだが、こういう本はまとめて読むと科学者の人となりや思考法が比較できておもしろい。科学者というと、真理の求道者というイメージはあるわけだが、ノーベル賞でも取らない限りその人となりが世間に対して明らかになることは少ない。湯川博士の回想録は、博士が中間子の存在を予言してノーベル賞を受賞しなければ出版されることはなかっただろうし、山中博士と益川博士の対談の方は、おそらく益川博士が小林博士と共にノーベル賞を受賞しなければ、実現しなかっただろう。かと言って、業界では非常に有名だが世間にはあまり知られていない科学者の回想録を出したところで、広く読まれることは少ないだろう。個人的には、日頃から雑誌のそういう記事も熟読してしまうし、そういう本が出たらすごく興味があるのだが。。(ファインマンシリーズも読んだ。ファインマン博士もノーベル賞を受賞しているわけですが。。)

    「旅人」で印象に残ったのは、「ノーベル賞を受賞してしまったために雑用が増えて困った」というところ。文中に描かかれる博士の性格から推察して、公の場ではっきりとそのように言ったことはないのでは、と思うのだが、回想となると、そこは明言してある。近頃は科学者もアウトリーチ活動をするべき、という雰囲気になりつつあるように思うが、科学者が研究して成果を出すのが本文であるという意見もある(と思う)。どちらかと言えば自分は研究者には研究に専念してもらうほうがいいような気がする。しかし、まったくアウトリーチがなくなると、今回のように私のような一般人が博士の回想を読む機会もたぶんなかったわけで、それはそれで困る。難しい。

    一方、対談の方だが、研究の中身にはそれほど突っ込んでおらず、どういうアプローチで研究をしたか、とか、科学者として大成するタイプについて、など、学生だけど研究者を目指している、あるいは、駆け出しの研究者というような人が読むと小一時間(あるいはもっと)考えてしまいそうな内容が満載である。大胆に言ってしまうと、研究者として独り立ちしてやっていける人は、「情熱があって、アイデアを温めておける人」ということになるのだろうか。なんだか研究者じゃなくても成功しそうな気もする。小賢しい人は要領良くそれなりの成果を出してホイホイ出世するのだが、助教くらいから伸び悩む、というようなこともあったのだが、気をつけたい。ここまで書いてきて、ふと思い出したのが、寺田寅彦の以下のエッセイ。

  • 科学者とあたま
  • 苦しいとき、なかなか思うように成果が出ないときは、これを思い出したい。

    2011年3月19日土曜日

    「The Social Network」と「フェイスブック 若き天才の野望」

    the Social Networkとフェイスブック



    もうかなり前のことになるが、今年の1月にthe Social Networkを見た。監督David Fincher、主演
    Jesse Eisenberg。公開前からとても楽しみにしていた映画だった。見終わったあとしばらくは興奮冷めやらず、2か月くらいたった今でその余韻が残っているくらい。いつも映画は1度見ればいいやと思うのだけど、もうこれは、何回でも見たい。音楽もいい。






    ハーバード大学在学中に大学SNSを開発し、起業、シリコンバレーへ、というストーリー。その過程での友情、出会い、裏切りなどなど。派手なアクションはまったくない。しかし、会話を軸に展開するストーリーには引きこまれる。特にプログラマにはapache, perl, emacsなど耳に覚えがある単語が満載のため、かなり感情移入してしまうのではないか。the facebook(のようなもののアイデア)を言い出したのは自分たちだ!と知的財産権みたいなものを振りかざすウィンクルボス兄弟たちに向かって、「the facebookは僕が作った」と戦うザッカーバーグのことを、多少なりともプログラミングをしたことがある人間なら、全力で応援したくなってくるのではあるまいか。と同時に、俺抜きでなんでこんなに楽しいことを!とも思ったのではないだろうか(自分は思ったし、もどかしく感じた。ちなみに全然そちらの業界ではない)。



    さて、この映画は完成度が高く、とっても魅力的な登場人物のおかげで、とくにザッカーバーグをはじめとするFacebook関係者を誤解してしまう可能性がある。Facebookの歴史や関係者の人となりを知るためには、映画よりも「フェイスブック 若き天才の野望」という本を読んだほうがいい。誕生から現在にいたるまで、また、ザッカーバーグが何を考えているか、Facebookはどこに行くのか、といった内容がかなり綿密に書かれている。Facebookに興味がない場合でも、起業本として読んで十分おもしろいレベルだと思う。自分は映画を見た後で本を購入したのだが、一方だけだどちょっと偏りがちになると思うので、どちらも味わえて良かった。


    Facebookのサイトにしても、最近半年くらいで日本でも使用している人が一気に増えた気がする。個人的にはmixiを越えたんじゃないかという印象がある。匿名がかなり支配的な日本でも十分流行ってきているし、実名登録が当然という雰囲気である。使う人が多いほど便利になる、ネットワーク効果を体感する。



    しかし、なんだろうか、トレイラーを見てると涙が出そうになる。


    2011年3月6日日曜日

    MacBook Air 11 購入&設定

    MacBook Air 11を購入した

    随時更新

    MacBook Air 11インチを購入した。SSDだけ128GB。かなり悩んだが、今となっては後悔していない。SSDでキビキビ動作するし、多くのレビューの通り、起動もビックリするくらい速い。設定段階で何回か再起動する機会があったが、コーヒーでも飲もうと思って、ちょっと離れようと思ったら、もう起動してた。え?もうたちあがったの?という感じ。

    メイン環境から移行するとおもしろくないので、まっさらな状態から設定していくことにする。2台目として使うつもりなので、設定やappなどは引き継がず、Dropboxやevernoteを利用し、独自設定は少なくする。用途としては、メモ(evrenote or emacs)、web、rssなど。

    環境設定

  • itunesのライブラリ共有。メインマシンのpreferencesから。サブにはitunesの左ペインに勝手に出てくる。
  • expose, spaces:ショートカットを追加
  • trackpad:clickの設定
  • app

  • chrome:googlesyncをonに。googlesyncをはじめて使ってみたけど、かなり便利。
  • dropbox:定番。メイン、サブと分かれてると、威力を発揮する。
  • keyremap4mac:これがないとSKKは使ってられない。SANDS、Shift_RをESC。
  • AquaSKK:日本語入力の決定版。
  • reeder:操作感がナイスなRSS reader。 (注意:not reader)
  • skype:定番。
  • StartupSound.prePanel:起動音を消す。
  • あと、apple web siteから、
  • xcode
  • を入れる。これが9.5Gくらいあって、ちょっと躊躇した。でもgcc使いたい。

    自分でbuild

    xcodeからgccをいれたので、あとはできるだけsourceからbuildするようにする。rubyとかはsystemにもともと入っているが、1.9系を使いたいし、自分の手元で管理したいので。

  • ruby-1.9.2:やっぱりいろいろ便利だしね。
  • git-1.7.4.1:版管理。はじめにgitいれて、rubyもgit cloneすれば良かったかも。。
  • emacsはgitを利用して
    $ git clone git://git.savannah.gnu.org/emacs.git
    とする

    package mangerにはhomebrewを使ってみる。メインはportsとfinkを使っていたけど、なにかとhomebrewを最近目にしたので。

  • bdw-gc
  • lv
  • w3m
  • wget
  • shareware

  • sizeup:windowの配置をkeyboradから操作できるようになる。最大化とか、左右にピッタリ配置させたいときに便利。shareware。便利。
  • ほかいろいろ

  • visor:ターミナルをかっこよく出す。SIMBLプラグインとして入れるのでSIMBLもいれる。
  • App Store

    app storeはapple IDでログインするので、購入記録がある。一度購入したものなら他のマシンにもインストールできるので、

  • evernote:なんでもメモ。
  • alfred:ランチャ。
  • omm writer:強制的に通知を切って全画面text editorになる。集中するときのために。
  • 雑感

    chromeの同期機能, evrenote, dropbox, appstoreのおかげでかなり楽だった。emacsの設定ファイルやlisp libraryはrepository管理しているので、こちらも楽だった。 ruby、git、emacsをソースからbuildしてても、全然ファンがまわらないし(ついてないんだっけ?というレベル)、もちろんHDDの音もしないし、静かだった。すごい。

    2011/03/09追記

    TeXLive2010

    texを入れる。
    http://macwiki.sourceforge.jp/wiki/index.php/TeX_Live
    を参考に、
    http://tug.org/texlive/acquire-iso.html
    からtar.gzを取得。展開して、install-tlを実行するだけ。簡単!