Month11月 2011

O’Reilly書籍はandroidで買うと安いらしい

最近F#に興味があって、O’Reillyのプログラミング F#を買おうか迷っていたんですが、実はandroid電子書籍で買うとめちゃくちゃ安い、という記事を見つけました。

たった600円でオライリー本をiPadやKindleで読む。すてき。
F-12C epub16冊分買ってもリアル書籍1冊分くらい… オライリー本の電子版が android ではついに400円台に突入… しかも epub export がアプリについてる…

ちなみに、こちらがO’Reilly Mediaのandroidマーケットアプリ一覧
……本当に400円前後の値段が付いてますね。古本漁るのがあほらしい値段。
しかもepub形式でエクスポートできるので、iPadに入れたりKindleのmobiファイルに変換したりすればそちらでも読めるようになる。持ってないけど。
Windowsから読めるならこれで十分だなー、と思って調べて見ましたが、現状epubビューワはこんな感じの模様。
PDFに変換したりできないかと調べてみたのですが、PDF→epubの記事はいろいろあってもepub→PDFの記事がなかなか見つからない。
拡張子を.zipに変えて展開すればいいみたいなのもありますが、コンテナ形式がzipなのかとか中にどんな形式で入ってるのかとか調べてないのでホントにそれでいいのかはわからず。

どちらにしろ、O’Reillyの書籍は高い上に分厚くて持ち運びにも不便ですし置き場所にも困るので(まぁそのぶん内容は詰まってるんですが)、安く電子書籍で手に入るのは助かります。
とはいえさすがにDesire HDの画面で読むのはつらそうなので、手を出すのはスレート端末手に入れるかWindowsで手軽に読めるアプリを見つけてからですかね。

【追記】
Androidマーケットの検索性があまりに悪いので、giveapp使ったほうがよさげ。
O’Reilly Mediaのアプリは967件もあるようです。
で、そのうちProgrammingを含むものは90件。
Androidマーケットではこの複合検索がまともに機能せず残念なことになっています。Googleェ……

で、さらにprogramming FとかF O’Reillyとかで検索をかけて見ましたが……もしかして、F#の書籍はアプリ化されてない?
電子書籍版はあるのでてっきり揃ってるもんだと思ってましたが、よく考えればアプリ開発にもコストは掛かるわけで、アプリ化されてない可能性は当然ありますね……
安いのは素晴らしいんですが、一番欲しい本がないんじゃしょうがない。アプリ化を期待しますかねぇ。

プラグイン追加時のホワイトアウト現象

わぷーを入れた辺りから、プラグイン画面を開こうとするとホワイトアウトするという謎現象に陥っていたのですが、解決策がこちらのブログに載っていました。
メモリ不足だと起こるのですね。
てっきりプラグイン同士の干渉とかその辺だと思ってたらもっと簡単な理由だった。

これで新しいプラグインも有効化出来るようになったのでソースのハイライトとかTwitterウィジェット変えたりとかしてみますかね。

OCamlのSet.Sにmap関数はない

最近研究でOCamlのSetやMapを多用するんですが、Set.Sの中にmap関数はないんですね。
タプルの特定要素を取り出したり情報を付与したりするときにSet->Set変換する必要があるんですが、いちいちfoldするのが面倒……
Listなんかにはmap関数があるのであってもよさそうなものですが、よく考えるとこの関数、型として表現が難しい(というかできない)のですね。

Setはファンクターなので、例えばint型のSetなら(作れないですが)

int Set

ではなく

module IntSet = Set.Make  (struct    type t = int    let compare = compare   end)

といった感じになります。
要素の型や比較関数をまとめてストラクチャーとしてファンクターに与えることで、内部の型が固定されたストラクチャーが返されるわけです。

んで、ファンクターの内部では集合自体の型はt、要素の型はeltで表されてるわけです。例えば

empty : tadd : elt -> t -> t

といった具合です。(OCamlマニュアルより)
ところがここでmap関数を考えると、

map : (elt -> 'a) -> t -> 'a set(?)

といった具合で、出力が’aを要素とするSetになるわけですが、当然ファンクターはそんな型を知らないので定義できません。
with type構文とか使えないかなーと一瞬考えましたが、あれはSet.Sに型を与えてシグネチャを作るだけでしたね。全然関係ないです。

無論、foldを使ってやれば似たようなことは簡単に出来ます。
ASet.t型のs1に射影子fを用いてBSet.t型のs2にする場合、

let s2 =  ASet.fold    (fun elt making ->      BSet.add (f s2) making    ) s1 BSet.empty

こんな感じでオッケーです。
fold万能説。
が、正直読みにくい。
出来れば、

let s2 = ASet.map f s1

みたいに書きたい。
ASetとBSetを渡して相互のmap関数を提供するMapperみたいなファンクタ作るという手もありますが、それもあまりスマートじゃない気がしますし……

以上、なんでSet.Sにmap関数がないか気になったので勝手に考察。
ちなみにMap.Sにはmap関数が用意されていますが、こちらはキー値に対応する値の方を射影するものなので、やっぱりキー値を射影子で別の型にしちゃう、みたいなのはできません。
ま、OCaml使いには当たり前の話なのかもしれませんが。

余談ですが、どうせ集合→集合の射影ができないなら、せめて同じ型内での射影

map : (elt -> elt) -> t -> t

みたいな関数用意しておいても良かったんじゃないかなーとか思ったり。
まぁ使いどころがどれだけあるかはわかりませんが。

WordPressにTweetableを設置

Twitter連携には元からインストールされてたTweetableを導入しました。
というわけで投稿テストも兼ねて、参考にしたサイトや詰まった場所まとめ。

英語でもいいのですが、一応日本語も参照しておこうとこちらのブログを参考にさせて頂きました。
プラグインから直接いけるアプリケーション登録が何度やってもうまく動作せず「アプリケーションが登録されてないよ」と言われたので、Twitter Developersに自分のアカウントでログインしてからアプリケーションを追加しました。
こちらからだと登録時にはアクセス権限などの設定ができないため、登録後にその辺を編集してからOAuthキーなどをTweetableに設定、という感じでちゃんと動作しました。

ウィジェットを追加してみたところ、つぶやきはちゃんと取得されるけれどアイコンの表示は無いのか……
ちょっと寂しいので、アイコン表示できないか少し弄ってみますかね。

WordPress設置

せっかくサーバーレンタルしてるんだから……ということで、Wordpressを設置してみました。
基本的にTwitterだと後の検索性が悪いので、技術的な備忘録を中心にメモっていきたいと思います。

が……使っているサーバー(ロケットサーバー)で簡単導入があるから楽勝だろうと思ってたら、意外に色々引っかかったのでメモ。

【サブドメインの設定】
最初、メインドメインのサブディレクトリにWordpressを導入してからサブドメインでリダイレクトをかけようと思ったのだが、あんまりスマートじゃないので一度削除し、サブドメインのルートに直接導入。
が、設置後プレビューを何度確認しても404 Not Foundの連続……
導入をやり直してもダメ。
調べてみたところ、ロケットサーバーはサブドメイン設置後の反映が異常に遅い模様。サブドメイン設置ってそんなに時間かかるんだっけ……?
翌朝確認したらちゃんとつながったので、しばらく時間をおくのが良い模様。

【フォントの変更】
デフォルトのWordpressのフォントが明朝体なので、とても見にくい
というわけで弄ってたのですが、テーマ変えるとcssの構造も変わってどこを弄ればいいのやら……
管理ツールから入れるこの方法を試してみたもののさっぱり反映されず、結局こちらの方法で直接style.cssを弄りました。
テーマ変えても大体style.cssはあるっぽいので、それを弄るのが手っ取り早いかと。
英語圏発なので日本語対応が悪いのはしょうがないのですが、こういうところで引っかかると日本のブログツール使ったほうが手っ取り早い気がしてくる。
ま、汎用データベースやスクリプトで構成されてるので引越しやすいのはいいんですが。

【ウィジェットの追加】
管理ツールからウィジェットをドラッグ&ドロップで管理できるんですが、テーマによってはウィジェットに対応しておらず、そういうテーマを選んでいるときにはAjaxが無効化サれるみたいです。
そうとは知らずウィジェット非対応テーマで「ドラッグ&ドロップ反応しないけどなにこれ」と困ってました。

以上、自分の備忘録までに。