2009年6月17日 (水)

Kindle DXでできること

Kindle DXが先週末に来て、色々遊んでみたのでまとめてみます。

Kindle DXがいい買い物であった件

まず、Kindle DX は、古い Kindleに比べて画面がでかいというのと PDFを直接読めるというのが偉い点です。 その点をまず強調して自分が正しい買い物をしたことを納得させます。

Kindle の画面サイズが 90mm x 120mm で、これはpaperbackぐらい しか読めません。 しかるに、KindleDXは 150mm x 200mm ぐらい。 まあ lettersize (216mm x 279mm) を marginけずって縮めれば 読めるぐらいではあります。 つまり、世にある技術文書を印刷せずにそのまま読めるということです。

ちなみにここ で取り上げられている iLiadは 対角 8.1inch なので、Amazon DXの方がちとでかい。勝った。よかった。

ただ、iLiadは OpenSourceの電子ブックプロジェクトである OpenInkpotで Hackされてるらしい のがちょっとうらやましい。 これを頑張ればこの後に書く不満とかも解決されるんじゃないか。

でも安心しろ。Hackする時間なんかないぞ! > 俺。おまえには KindleDXが 一番いい買い物だったんだ。

あと、さきの blogでは技術文書を読むのに電子ブックリーダが いいと書いてあったが、どうも承服しかねる。 俺が技術文書を読むときは、ページを行ったり来たりして読むのだが (それをするために両面印刷もしない。裏と表を同時を見られないから)、 やっぱり電子ブックでは反応が遅くて行き来が面倒くさい。

もしかして iLiad は touchpanelつきなのでそこら辺の navigationが Kindle DXにくらべて楽ちんだったりするんだろうか?? いや、でも $200ぐらいやすいんだ。俺はいい買い物をしたはずだ!

という能書きを書いて個別のネタに移る。

日本語 PDFが読めるか?

フォントが埋め込んである必要があるよう。 例えば「加群」は読めるけど 「」は読めない。 これはPDFフォント○×チェッカーとかで 調べると分かるが、 前者は日本語フォントを埋め込んであるのに、 後者は埋め込んでいないためだ。

2009-06-17 (Wed) 追記: Preview.appで「Save to PDF」やったら確かに フォント埋め込みの PDFになって、KindleDXでも読めました。 どうもありがとうございます > ひとりぶろぐさん

Windowsや Linuxでやる方法は分かりません。 ここらへん、PDFをもすこしいじってみたいとこだけどまたこんど。

PDFと AZW (アマゾン独自フォーマット) の差は?

PDFだと以下のことができない:

  • 文字の拡大
  • その場での英英辞典検索
  • テキスト読み上げ

ちなみに、PDFの拡大ができないのは痛い。 地図とか持ってきても小さすぎて見えなかったりする。

電子ブックや PDFを直接 Webから DLできるか?

PDFはできません。でも azw, prc, mobi, txt ならokらしい。なんで PDFだめなんだろう。

ということで Project Gutenbergとか のサイトにいけば The Advencutres of Sherlock Holmesとかを直接内蔵 NetFront経由で MOBI形式で落として読みまくれます。 まあ、こんなのできるのもアメリカ在住してるあいだだけだけど。

テキスト読み上げは使えるか

俺にとっては微妙。Litsening Comprehensionがまだ苦手だったりするので、 目で見る方が楽だったりもする。

声という面ではかなりいい線いっている気がする。 Leopardの Alexの声よりはちょっと劣る気もするけど、 スピーカーの質の気もする。

NetFront (WebBrowser) はつかえるか

まあ、割り切ってつかえば良いんじゃないでしょうか。 mobileのサイトにつながっちゃったりするけど、それは この電子ペーパーは動きのあるコンテンツを表示できないのだから しょうがない (決して NetFrontの能力不足ではない :-)。

MineSweeperはできるか

Alt+Shift+Mでできました。 ちなみに五目並べもありますが、三三禁がないので先手で簡単に勝てます。

まとめ

とりあえず自分が使ってて疑問に思ったことなどを書いてみました。 Amazonでの書籍購入とか、ファイル変換とかは hackとかは まだ突っ込んでないのでいつかまたこんど

| | コメント (2) | トラックバック (0)

2009年5月23日 (土)

Mac OSの ls -l に現れる "@" の謎

Mac OSでは、ls -l に謎の "@" が現れることがあって気持ち悪かった:

% ls -l '/Users/takesi/Movies/opening flip.mov'
-rw-r--r--@ 1 takesi  takesi  445493 Mar 20 06:06 /Users/takesi/Movies/opening flip.mov

man ls しても Appleは教えてくれない。 他にやることもあって忙しかったので、さっそく調べてみた。

結論から書くと、これは Exntended File Attributesの存在をあらわしてるのだった。 どんな属性がついているかは、-@というこれまた 隠しオプションで見ることができる:

% ls -l@ '/Users/takesi/Movies/opening flip.mov'
-rw-r--r--@ 1 takesi  takesi  445493 Mar 20 06:06 /Users/takesi/Movies/opening flip.mov
	com.apple.ResourceFork	   286 

ここら辺のことは、Darwinの file_cmdsから lsの ソースを見て発見しました。 printlong 関数あたりを見てみると linkxattr(2) を呼び出してるのが見えます。

ただ、Extended file attributesだということがわかっても、 それがどういう風に使われるのかまったくよく分かってないんですが。 少なくとも HFS+ の拡張機能だと分かっただけで、糞Jobs がつけた はんかくさい機能かと安心することができます。

と、ここまで書いてさっさと忘れて仕事に戻ります。おしまい。

| | コメント (0) | トラックバック (0)

2009年5月15日 (金)

shell-mode を outline-minor-mode として使う

非常に小ネタです。 emacsで shell-modeを outline-minor-modeと組み合わせて使うと そこそこ便利だったと言う話です。

やりかた

shellのpromptの加工
prompt の頭に "*" をいれます。 それの場合は tcshなんで、.cshrc に
  set prompt="*[%T]%m:%c<%h> "
とかいれてます。bashやzshの方はそれなりにどうぞ。
shell-modeを outline化
.emacs.el とかにしたのを入れます:
(add-hook 'shell-mode-hook
	  'outline-minor-mode)

これで shell-modeを立ち上げれば outline-minor-modeの各種機能が 使えます。

使い方

C-c C-o C-t (hide-body)とかで history風にコマンド履歴が見られるし、 結果を見たいコマンドまでいって C-c C-o C-e (show-entry) と すれば結果を開けます。 あと、コマンドの出力がながくて先頭を見たいときも C-c C-o C-p(outline-previous-visible-heading) で サクッともどれます。

所詮 outline-modeなので、他にも outline-modeで使える技が色々使えるわけです。 まあ、flatだったものにちょっと構造を入れてみたら便利だったってねたで。

でもこうすると、コマンド出力その物も構造化したいとか思っちゃったり。 すべてが S式だったらなあ。

| | コメント (0) | トラックバック (0)

2009年3月20日 (金)

Flipの開封体験が素晴らしかった件(イメージ)

Flipってしってるでしょうか? 1万円もしないビデオカメラ機器です。そんなに機能はないけど、ボタンを押すだけで簡単にとれるという。YouTube時代のギークに大ウケらしいです。

昨日届いたので開けてみたら、なんと最初から電源が入っていて、開けた瞬間の自分のマヌケ顔を撮られてしまいました:

見ればわかるように、最初の蓋を開けたあたりで電源が入るようになっているよう。薄暗いところで開けたので顔ははっきりと移ってないけど、寝癖が見えてるような。

でも、こういう何気ない瞬間を撮れるってのはすごいなあ、開けた瞬間からFlipという機器の使い方を提示してくれているみたい。かちょいい。

というのは嘘です。世に「なんとかを開封しました!」動画はいっぱいあるので、「開封されちゃいました」って機器の方から撮った動画があるといいかな、と思って買ったばかりの Flipで遊んでみただけです。

もっとシナリオを練って、友達と談笑しているところで開けるとかにすれば音も色々拾えていいんじゃないでしょうか。

| | コメント (0) | トラックバック (0)

2009年3月17日 (火)

NaClのPaperのHackyさ

いまさら Googleの Native Clientpaperを読みました。

まあ、その技術についてはともかく、Hackyな雰囲気のする Paperだなあ、と。

自分も学問的なところから離れて長いのだけど、論文としてはいらない、 でも実装や運用的には面白いところが多すぎるように感じます。

例えば、3節では validator の object codeの大きさと内訳が出ています。 そんなこと、そこで数字を出して自慢しなくてもいいんじゃないかと思うんだけど。 他にも、どんなに既存のシステムに手を加える量が少なかったか、と 強調する部分がある。

なんとなく、これは研究精神というよりHack精神に通じるものがあるのです。 「こんなに簡単にでっちあげちゃったもんね」という、 単なるすごいものを作ったのとは違うジマンパワーを感じる。 コードゴルフとか、obfuscated c code contestとか始めちゃいそうな ちょっとねじ曲がったパワーです。

何のため、4節に書いてある「既存のアプリケーションを 簡単にNaClに移植できたよ」っていうのは研究としてまっとうな方向です。 そうでななくて、「NaCl自体をこんなに簡単につくったぜ」 っていうことです。

他にも、

  • x86 の segment registerにべったり依存したり
  • gccとかへの patchの少なさを自慢したり (3.6.1節)
  • debuggerとかの開発環境にちゃんと言及したり (3.6.2節)
あたりに Hack集を感じるのは俺の偏見でしょうか。

それはそれで Googleという会社がまだ hack魂のようなものを いっぱい持っていると感じさせて好感を持ちました。

しかしながらやっぱり以下の点が気になります:

  • 他の processor、特に ARMへの展開は考えてないのか? :
    やっぱり x86が嫌いで組み込みにきたものとしては気になります。 pointerの sandbox化で本質的に segmentationに依存してしまっている 以上難しそう。
  • outer sandboxは何のために必要なのか? :
    なんか inner sandboxと service runtimeだけで十分な securityは確保できる気がします。 なんで、outer sandboxなんていう service runtimeの system call を監視する仕組みを作ったんだろう。 service runtimeの実装を楽にするためなんでしょうか?
以上、何かご意見ある方がいらっしゃったらコメントでもいただけると幸いです。

| | コメント (0) | トラックバック (0)

2009年3月13日 (金)

Safariの accesskey removerを再発明する

Safariの編集キーと Wikipediaとかの accesskeyが衝突して困るという 経験は皆様お持ちですよね。 それなのに Safariには accesskeyを無効にする設定が見当たらない。 日本語変換をしようとして Ctrl+Jを押したりするとリンク元に飛んだりする。 検索も満足にできません。 まあ、Ctrl+Jで変換してる人は少ないでしょうが。

と言うわけで GreaseKit script でもって accesskey属性を取っ払えばいいんじゃ、 と思って挑戦してみたんですが、うまくいかない。

でも Google先生に聞いてみたらすでにやっている人がいました:

素晴らしいっす。頑張る必要なかったなああ。 removeAttributeを 使わずに属性を delete しようとしてたりしたのがいけなかったらしい。

とはいうものの、せっかくの苦労が悲しいので元の scriptを XPathを 使うようにして改造してみました。Sarari 3.2.1 で動作を確認してます。 使ってみたいかたは以下のリンクからどうぞ:

個人的にはかなりソースがすっきりしたと思います。 元の scriptでは cloneして replaceしてるんですが、なんでだろ。 いきなり removeAttributeでも動いてるけど。 昔の Safariだとうまく動かなかったりしたのかな。

| | コメント (0) | トラックバック (0)

2009年2月12日 (木)

zndk改良版

zndkを改造しました。 面倒くさい AJAXはやめて、単純にして使いやすくすることを 狙ったんだけど、どうなんでしょう。

改良点としては以下のとおり:

  • 結果表示画面を簡潔にして小さくした。
  • Bookmarkletを用意して、Amazonの詳細ページからすぐに価格比較できるようにした。
  • Form入力の画面においても、(ASINを切り出さなくても) URLをいきなり入力して価格比較できるようにした。
  • それにともない、Drag'n Dropしやすいように入力エリアをでかくした (zndkのwindowが部分的に隠れているときにでも DnDできるように。
  • 日本語にした。ヘルプを書いた。
  • 日本円で表示するようにした。

やっぱりブックマークレットは便利です。 似たようなサイトも色々あるけど、なぜかカナダとかを比較対象に してるのは少ないみたい。カナダが一番安いことも多いのに。

でもやっぱりデザインがダサいのはいかんともし難いものがあります。 Webデザインって奴をちゃんと学ぶべきなのかなあ、とか思いました。 こういうせこいものを作って公開したいならインパクトは必要だし、 CSSは知っててもそれだけじゃどうしようもないものがあります。

あとは、やはりまだリテラシーの高くない人には敷居が高いみたい。 嫁に使ってみてもらったけど、最初は使えなかったし。 ここもこれからいじっていきます。

とりあえず使って見て感想でももらえると幸いです。

| | コメント (0) | トラックバック (1)

2009年2月 6日 (金)

cgi.rbでハマったのを Rubyの特異メソッドのせいにする

単純に言うと、以下のようなコードです:
require 'cgi';
form = CGI.new;
query = form['query'];
print query[3..-1];
部分文字列をとりだす [..]で以下のような文句を言われるのです:
/Users/takesi/hack/ruby/cgi-sucks.rb:4:CAUTION! cgi['key'] == cgi.params['key'][0]; if want Array, use cgi.params['key']
なんで、CGI moduleとは関係ない文字列操作だけでこんなこと言われなきゃいかんのか。 おまけに表示されるのは "nil" です。部分文字列が帰ってこない。ダメダメです。

1時間ぐらい悩んだ結果、たどり着いたのは「特異メソッド」でした。

CGI::QueryExtension::[]str.extend(Value)なんて ことをして特異メソッドを追加してやがります。 CGI::QueryExtension::Value::[]では以下のように、"String::[]" に rangeや reが渡されたときの意味を破壊してくれています:

      def [](idx, *args)
        if args.size == 0
          warn "#{caller(1)[0]}:CAUTION! cgi['key'] == cgi.params['key'][0]; if want Array, use cgi.params['key']"
          @params[idx]
        else
          super[idx,*args]
        end
      end
うーん、これは素直に bugとして然るべきところに報告すべきなんだろうな。 と言うか、普通に文字列の中の 1バイトを取り出したいときもあるんだろうから、 全体的に余計なお節介の気がするがなあ。 今からそこら辺変更すると互換性の問題があるのかなあ。

Rubyの特異メソッドがいけないという風にも思ったんだけど、 やっぱりこれは単に CGI libraryの設計が悪いだけだな。 バカ避けのために、まっとうな機能まで破壊されてしまっている。 もったいない限りです。

強引に Ruby全体に敷衍すれば、特異メソッドはこういう訳のわかんない バグを生み出すので使うべきではない、ということか。 特に公共で広く使われるライブラリでは「絶対使わない」というぐらいの policyのほうがいいでしょうな。

ちなみに Ruby 1.8.2 (Tiger付属) の中で "extend" を使っているらしいのは 以下のとおり。関係ないのや妥当なもはいってるんだろうけど、 とりあえず気をつけよう:

% find . -name "*.rb" -exec grep '\.extend' {} +
./cgi.rb:        str.extend(Value)
./e2mmap.rb:  def E2MM.extend_object(cl)
./e2mmap.rb:  def E2MM.extend_to(b)
./e2mmap.rb:    c.extend(self)
./e2mmap.rb:	mod.extend Exception2MessageMapper
./forwardable.rb:#   g.extend SingleForwardable
./irb/ext/change-ws.rb:	main.extend ExtendCommandBundle
./irb/ext/change-ws.rb:# 	  main.extend ExtendCommandBundle
./irb/ext/math-mode.rb:	main.extend Math
./irb/ext/workspaces.rb:	main.extend ExtendCommandBundle
./irb/extend-command.rb:    def EXCB.extend_object(obj)
./irb.rb:      @context.main.extend ExtendCommandBundle
./monitor.rb:  buf.extend(MonitorMixin)
./monitor.rb:#    buf.extend(MonitorMixin)
./monitor.rb:  def self.extend_object(obj)
./mutex_m.rb:#	obj.extend Mutex_m
./mutex_m.rb:  def Mutex_m.extend_object(obj)
./open-uri.rb:      obj.extend Meta
./optparse.rb:  Version = (RCSID[1].split('.').collect {|s| s.to_i}.extend(Comparable).freeze if RCSID[1])
./optparse.rb:    def self.extend_object(obj)
./optparse.rb:ARGV.extend(OptionParser::Arguable)
./shell/process-controller.rb:    @ProcessControllers.extend Mutex_m
./singleton.rb:    klass.extend SingletonClassMethods
./singleton.rb:  'aString'.extend Singleton
./soap/mapping/registry.rb:      @cause.extend(::SOAP::Mapping::MappedException)
./soap/mapping/registry.rb:    obj.extend(::SOAP::Mapping::MappedException)
./soap/mapping/registry.rb:	obj.extend(Mapping.class_from_name(mstr))
./soap/mapping/registry.rb:	obj.extend(m) if m.class == Module
./sync.rb:#   obj.extend(Sync_m)
./sync.rb:  def Sync_m.extend_object(obj)
./sync.rb:  #Sync_m.extend_class self
./thwait.rb:  Exception2MessageMapper.extend_to(binding)

| | コメント (0) | トラックバック (0)

2009年2月 3日 (火)

zndk.skr.jp - Amazon間価格比較サイト (もしくは危険なのはイギリスだけじゃない!)

英国Amazonでのお買い物が危険すぎる」 というネタに触発されて、zndkって サービスを作っちゃいました。 世界中の、日米加英独仏のアマゾンで商品を比較できるサイトです。

例えば、Real Workd Haskellを 比べてみると以下のような感じ(デザインがしょぼいのはお約束です) :

イギリスよりカナダの amazonの方がお買い得な事がわかります。

まあ、本当のところはこれに送料が加わったり、VATが引かれたりして 値段は変動するけど、目安にはなるでしょう。

そう、あとここに出てくる値段は Market Placeも含んだ値段なので、 もしかすると海外発送しないところの値段も出てくるかもしれません。 ここは今後改良します。

あと、AJAXを無駄に使う必要はなく、普通の CGIでよかった気もします。 ASIN (本当は ISBN-10でもいいみたいだけど) を調べるのも面倒なので、 bookmarkletにする予定。

とりあえず、ここで検索してバリバリ買い物してください。 なお、買い物していただいた場合、売上の数%は、カリフォルニアの恵まれない プログラマに寄付させていだたきます。というのはお約束です。

そういう小遣い稼ぎをするのは初めてなのでちとドキドキです。

| | コメント (0) | トラックバック (0)

2009年1月26日 (月)

Warped Passagesを読んで感じたこと

Warped Passagesというのは、それなりに人気のでた通俗向け科学解説書です。 最先端の物理学理論である多次元宇宙について、前提となる 20世紀の物理を数式抜きで説明すると言う。 Amazonの review を見ても星4つ越えているわけです。

でも、実を言うと読みにくい。英語に親しんでない日本人にとってはですが。 おちゃらけてる部分が却って意味不明にしている気がする。

例えば次のような文節がある:

When Vladimir I. Lenin used the electron as a metaphor in his philosophical book Materialism and Empirio-Criticism, he wrote that "the electron is inexhaustible,", referring to the layers of theoretical ideas and interpretation through which we interpret it. Indeed, today we understand the electron very differently than we did in the early twentieth century, before quantum mechanics revised our ideas
なんか、レーニンの言葉を引用して、でも電子は"exhaustible"だとかよく分からない 話が続くのです。 多分、ここの辺は本題には関係ない、物理には疎いけどレーニンの言葉なら 分かるインテリにむけたスノッブな媚へつらいなんでしょう。

でも、まだ "exhaustible" って単語の意味がよく分からなくて悶々としている 俺がいます。 「限りある」って意味だと、電子なんていくらでも対発生するんだから 違うしなあ。きっと何かの double meaningなんだろうなあ。 誰か教えてください。

こういうのを見ると、子供の頃にブルーバックス読んだころを思い出します。

はっきり行って、通俗的にするためにかブルーバックスも色々と大人向けの媚が入ってます。 子供の頃には、そこのところがさっぱりわからなくて、かなりつまづきました。 はっきりいってブルーバックスより、無駄なことの載ってない教科書の方が わかりやすくておもしろかったのもいい思い出です。

個人的にはこういう表現も嫌いじゃないのだけど、 この本の前書きを読んで、物理のおもしろさだけを簡潔に直球で 伝えてくれる本なんだろうなあと期待してただけに残念です。

| | コメント (0) | トラックバック (0)

«速読練習に挑戦してみた