トップ 最新 追記

2008-06-05 [長年日記]

_ My First Pragger

とりあえず trunk の HEAD を落としてくる。UsingPragger - PRagger - Trac に従って Pragger の Trac の Feed を取得する。追加モジュールを何もインストールしなくても使えるのがいいよね。

……。思ったより重いのは Q 上の Debian だからか? 結構 CPU パワーを食うなぁ。

ちょっと中を覗いてみる

pragger.rb の最後の行を以下のようにして

if ( __FILE__ == $0 )
  eval_pragger( YAML.load( File.read(configFile).
                           toutf8.gsub( /base64::([\w+\/]+=*)/ ) {
                             Base64.decode64( $1 )
                           } ),
                [] )
end

irb 上で

require 'pragger'

する。$plugins の中身はこんな感じ。

> pp $plugins.keys.sort
["Feed::custom_feed",
 "Feed::lirs",
 "Filter::Translations::yahoo",
 "Filter::apply_text_html",
 "Filter::average",
 "Filter::deduped",
 "Filter::find_num",
 "Filter::find_regex",
 "Filter::fresh",
 "Filter::get_html",
 "Filter::grep",
 "Filter::invert",
 "Filter::sort",
 "Filter::subs",
 "Filter::to_integer",
 "Publish::lingr",
 "RSS::load",
 "RSS::save",
 "Yaml::load",
 "Yaml::save",
 "argv",
 "concat",
 "const_list",
 "first",
 "head",
 "load_path",
 "plugin_from_uri",
 "pluginbase",
 "print",
 "reverse",
 "send_msg",
 "stdin",
 "stdout"]
=> nil

ディレクトリ構造に応じて自動的に名前を付けられた plugin 群が並んでいる。Mechanize とか入れてないのでそういうものに依存している plugin は出てきていない。はず。

もうちょっと読む

先ほどの $plugins の値の方には何が入っているのかと言うと Plugin オブジェクトが入っていて、それぞれ @source には File.read() した中身が入っている。で、class Plugin を読むと全部 instance_eval もしている。この @source 無駄じゃね?とか思うと実は -u で Usage を表示する際にこの中の行頭の ## で始まる行をそのまま利用しているので必要らしい。うーん。うーーん。うーーーーーーん。すげぇ富豪だ。要するに全コードを文字列で保持しつつ instance_eval しまくりだよ。オレには真似できない。

とまぁ変わった作りなので、plugin をどんな名前にしても通常の Ruby の名前空間と衝突することはない。(呼び出しは常に eval_pragger() を使う。)そこはいいな。まぁグローバルに

  • $plugins
  • Plugin
  • opt
  • eval_pragger()

は思いっきり消費してんだけど。

既存のツールと相性悪いな

plugin は通常の Ruby のオブジェクトとは異なる構造をしているので、上のように pragger を irb で実行して中身を確認したりとか、補完を使って使い方の当たりをつけようとか思ってもあんまりうまくいかない。まぁ基本的にはファイル名と同じメソッドを呼び出すだけ、そいつには Hash と Array が渡ってくるだけ、なんだけれども。テストどうすんだ、これ。完全に閉じている plugin ならグローバルなメソッドにそのまま Hash と Array を投げればいいだけだけど、他の plugin を利用するタイプのものをテストするのはしんどそうだ。

とりあえず起動が重いのはちょっとなんとかなんないかなぁ。この構造じゃ起動重くて当然なんだよな。せめて YAML のパースを先にやって必要な plugin だけ読むとかすればまだマシだろうけど、この pragger.rb、あまりにスキがない。

あと起動の重さを気にしなくていいように daemon 動作させるって手もあるかと思ったけど、pragger.rb はそれも考えてなさげだ。

うーむ。どう料理したらいいかなぁ。まーまずは使ってみんとな。


2008-06-07 [長年日記]

_ Firefox + Document Map + S5 でスライド作り

※ S5 じゃなくて Slidykanzaki さんのツールなどでも同じ要領で使えると思いますが、自分で使ったことのあるものが S5 だけなので S5 で書いてます。

※ [2011-05-25 追記] Document Map はすでにメンテナンスが止まっているようなので以下 Document Map は HeadingsMap :: Add-ons for Firefox に読み替えてください。

このネタ、絶対どっかに書いたと思っていたんだけど、要素をメモっただけでストレートにネタとして取り上げてはいなかったらしい。*1

まずは S5 のご紹介

S5 は XHTML + CSS + JavaScript だけでできたスライドショーツール。

S5: A Simple Standards-Based Slide Show System

サンプルがあるのでそれをコピペして使い始める。実際にスライドを書く部分は基本的にこれだけ。

<div class="slide">
<h1>スライドタイトル1</h1>
ここにスライドを書く
</div>
<div class="slide">
<h1>スライドタイトル2</h1>
ここにスライドを書く
</div>

これで

  • ブラウザで開くと <div class="slide"></div> を1ページとしてブラウザウィンドウいっぱいに大写しに表示してくれる
  • 文字の大きさはウィンドウサイズに応じて自動伸縮
  • 画像も自動伸縮(1.1 から?)
  • クリックでだけでなくスペース、エンター、カーソルキーでもスライドをめくれる*2
  • スライド内で徐々に要素を表示することもできる
  • 実際にスライドには表示されないコメントを書くこともできる

など通常のプレゼンに十分な機能が揃っている。PowerPoint のようなアニメーションはできないが、あんなものはすぐ飽きます。はっきり言って無駄。注目を集めたかったら喋りを含めてプレゼン全体のレベルを上げろ。

なぜ XHTML スライドツールか?

  • XHTML くらいどうにかして書けるでしょ?
  • ブラウザもエディタもタダだし
  • どうせ Web に上げるでしょ?

くらいかな。

ということであまり使う機会は多くないんだけど、ここ数年はスライドを作るときは S5 を使うようにしている。(全部内向けなので外部に公開してるものはないけど。)正直ちょっと生 HTML は面倒だなと感じるんだけど、スクリプトを書いて例えば Markdown などからスライドを生成させるほどしょっちゅうスライド作ってるわけじゃないし、かといって KompoZer なんかを使うのもだるい。ということでいつもエディタでそのまま書いている。基本、箇条書きと表くらいしか書かないのでほとんど困らない。図が必要な場合はどうせ別なツールで作るし、完成してからラスタ画像として貼ればいいだけ。*3

XHTMLスライドツールはアウトラインの確認が苦手

あまり悪いことのなさそうな XHTML によるスライド作りだけど、困ることはやはりある。自分はあまり PowerPoint ならではの機能を使っていない方だったので見落としはあるかもしれないけど、いちばん気になるのは

アウトラインを見ながらスライドを作れない*4

ところ。これがないとプレゼン全体、スライド全体を俯瞰しながら作業することは難しい。

これを解消するのが Firefox の拡張、Document Map である。

Document Map :: Firefox Add-ons

別に Documen Map はスライド作りのためにあるわけではなく、HTML 文書のアウトラインを自動で生成してサイドバーに表示するもの。Heading や anchor を文書構造として抜き出してくれて、そこへ一発でジャンプできる。ある程度長い文章の場合は自前でアウトラインを用意してくれているページが多いと思うが、これはそれを自動で生成してくれる拡張である。(当然 Heading とかない、ものすごくレガシーな HTML に対してはまったく歯が立たないわけだが。)

Firefox + Document Map と Terminal + emacs -nw でスライドを作っているところ

これを使って、かつ JavaScript を off にして実際にスライドを作っている様子のスクリーンショットを撮ってみた。*5Firefox + Terminal.app + emacs -nw の様子である。

スクリーンショットでは JavaScript を off にすることでスライド状に表示させるためのスタイルが適用されないようにしているが、これは別に必須ではない。自分の場合は実際のスライドの見た目を Camino で確認しながら、全体の確認を Firefox + Document Map の方で行っているので、より全体を把握しやすいようにこういう設定にしている。

また、より単純に CSS の適用を避けるためにはメニューから [ 表示 ] → [ スタイルシート ] → [ スタイルシートを使用しない ] でオーケー。自分の場合は WebDeveloper のツールバーを常に表示させているので JavaScript の on/off が楽なのと、この方法なら CSS が完全に適用されないわけではなく、スライド状に表示するためのスタイルだけが外れるのである程度見栄えもよく、確認しやすいから気に入っている。

あとできないことは

  • スライドを縮小して印刷する

ことかな。ほらよく PowerPoint で細かすぎる資料作ってそれを縮小印刷して配布資料にしてる人いるでしょ? ああいう機能はないね。たぶん印刷用の CSS を作ったらなんとかなるはず。

というわけで

作るか。しかしもう一仕事終えた感じでイヤになってきたな。いや逆か。イヤになってきているから日記書いてるんだな。

最近、いい加減 MacBook のキーボードがイヤになって、いっぱい書くときはトラベルキーボードを使うようにしている。うむ、快適快適。

*1 ちょっと思わず古い日記や Wiki を振り返って楽しくなってしまっていた。いかんいかん。

*2 残念ながらバックスペースはブラウザの方に取られる

*3 あーそう言えば今は Gecko ブラウザは SVG 対応してるんだっけ。使ったことないな。

*4 アウトラインを表示する機能というかスライド用スタイルの適用を on/off させることは少なくとも S5 では可能。

*5 内容は特に意味はない。今度内向けに話そうかと思っている超初歩的な HTML の説明。


2008-06-11 [長年日記]

_ Pragger 続き

どうもこれまずい気がしてきた。

  1. 現在(Rev 100)の構造では plugin の中で依存している plugin を動的に読み込むことができない
  2. したがって先に YAML をパースして、利用する plugin だけ読み込んで動作を軽くすることはできない
  3. つまり今後も重くなる一方

うーん。ちらちら plagger も読んでるんだけど、こっちはやっぱきれいにできてんだよなぁ。もったいない。せっかく pragger は依存モジュール地獄に落ちずに済んだのに。

あ。Plugin クラスの load_plugins() をバラせばいいのかな?

def load_plugins()
  ファイルをリストアップしてぐるぐる do |file|
    register( file )
  end
end

def register( file )
  $plugins[ごにょ] = Plugin.new( file )
end

みたいな感じか? あ、register で与える file はフルパスじゃなくて plugin ディレクトリ以下じゃないと不便だね。


またドキュメントのためにコードを丸ごと文字列で持つのは RD とか RDoc をうまく使えば避けられるんじゃないかと思ったけど、よく分かんないorz Perl なら Pod 関係のパッケージですぐできるんだけど、Ruby ではやり方が分からない。いやビックリ。まさかオレ Perl の方が得意なんじゃね? まぁ全部文字列で持つとしても、少なくとも個々の plugin を選択的に読み込む機能がつけばだいぶ違うような気がする。うむうむ。やっぱまずそこか?

Tags: Pragger Ruby

2008-06-12 [長年日記]

_ Yet Another Pragger -- BONNOH FRACTION 13

ほほう。面白そう。

  • オリジナル pragger の plugin
  • class ベースで書かれた新しい plugin

が動くし、設定の書き方も

  • pragger 風
  • habu 風

の両方がイケる。

class ベースの plugin は必要なものだけ読み込んで実行してくれるそうなので、どんどん plugin を移植しちゃえばいいのかしらん。今のところオリジナル pragger の plugin*1 はオリジナルと同じく全部読み込む方式なので、起動はやはり重い。

*1 legacy_plugin と呼ぶ


2008-06-14 [長年日記]

_ Y! Widgets で HTML を利用してみた

半年前のネタ を今頃試しているのはやっと OSX 10.4+ な環境になったから。

とは言ってもやることは XML の中で

<web url="URL" />

と書くだけ。URL の部分に

konfabulator:///PATH

という書き方をすればウィジェット内のパスになり、ローカルの HTML を読み込むこともできる。文字コードは HTML の中で正しく記述してあれば UTF-8 以外も表示できる。

しかしそんだけだった。CSS が直接記述できるわけではないのでこれだけではコントロールの記述は難しく、ウィンドウに枠を付けることもできない。もしかしたら jQuery UI や YUI なんかを使って HTML の中に dialog を作ることはできるかもしれないが、それは当たり前だけどウィンドウそのものではないのでやはりウィジェットそのものの UI を作るためには使えない。そうか。そらそうなんだがちょっとガッカリしてしまった。

要は HTML コンテンツをそのまま表示できますよってだけ

だと思ってまぁ間違いない感じ。

IME をサポートしていないよという記述はインライン入力できないという意味で、日本語の入力そのものはできた。送信まで確認していないけどその部分に問題はないだろう、たぶん。


2008-06-15 [長年日記]

_ RDoc::usage がやっぱりあった。けど。

先日 pragger を眺めていて

またドキュメントのためにコードを丸ごと文字列で持つのは RD とか RDoc をうまく使えば避けられるんじゃないかと思ったけど、よく分かんないorz

なんてことを書いていたけど Pod と同じ発想で探したらあった。

require 'rdoc/usage'
RDoc::usage( [[STATUS,] SECTION_NAME, ...] )

するだけで、起動したスクリプトに書かれている RDoc コメントを表示することができる。

んが。

この rdoc/usage.rb の中身を見ると、gets( file ) 以降は private なので任意のファイルの usage を生成することはできないようになっている。うーむ。まぁ RDoc module をゴニョゴニョして plugin の usage を表示させる方法もなくはないけど、そこまでコスト掛けるなら現状の pragger のように妥協案として

## コメント

行を抽出して表示するってのはアリなのかもなぁ。現状でも一応 rdoc コマンドでドキュメントを生成することはできるんだし。

Tags: Pragger Ruby

2008-06-18 [長年日記]

_ Softbank モバイルのメールフィルタリングの話

URLリンク付きメールは拒否--ソフトバンクモバイル、メール機能の初期設定を変更:モバイルチャンネル - CNET Japan

先日 feed 消化したときにようやくこの話題に追いついたんだけど、コトの詳細がよく分からずにモンモンとしていた。特定の URL ってなに?

Yahoo! ケータイの中のメニューを辿っていって迷惑メールフィルタリングを行う設定の中のヘルプに書いてあった。

迷惑メールに多い、出会い系やアダルトサイトにつながるURLを含むメールが受信規制されます。ただし、全ての迷惑メールが規制されるものではありません。

あーつまりアレか。出会い系サイトとかをフィルタリングで締め出しますよっていう動きは アブナイ URL を晒さないというところまできているのか。そのためにメールも弾きますよ、と。

なるほどね。

_ ブログチャートのシールを貼ってみた

貼った時点で Lv35、なんか評価がやたら高いが、どうせこんなのは最初だけなので記念に撮っておこう(ぉ

初めてのblog chart

面白いのはブログパーツの評価も出せるところ。なんだけど測定に使えそうな適当なブログパーツを使っていないのでよく分からず。

ところでこのシステム、query string の url をエンコードしてないんだけど、これでいいんだっけ?

Tags: Web

2008-06-19 [長年日記]

_ 今日のブログチャート

「アクセス」がそれなりの数あるということなのか Lv 36 にはなったけど、「評価」がグッと下がった。次は「話題度」が下がるかな? 話題になんかなってないよ。

ただ急激に増減することのない購読数の 144やクリップ数の 376は自分で思っていたよりは多い。塵も積もればこれくらいにはなるんだなー。


2008-06-23 [長年日記]

_ Googleカレンダーってfeedでも読めたんだね

チョー今さらな話。

Google Calendar って feed で取得できたんだなぁ。

読むだけでも、先々の予定と今日の予定とか切り替えながら確実に確認するためには通常のカレンダー表示の方がいい。でもとりあえず先々どんな予定があるのかなーとチラ見できる程度でいいなら feed の方が扱いやすい。

そもそも自分は予定を作るのが好きじゃない、思いつきドリブンなタイプなので Google Calendar はいくつか Ruby とか OSS などのカレンダーを表示させてみておぉすげぇと言っておしまいだったんだけど、今後はちょこちょこ検索して feed を利用させてもらおうと思った。うむ。なかなか便利な感じだ。しかしほんといろんなカレンダーがあるな。多くの人がこれ入力してくれてるんだね。ありがたいことだ。