最近の更新

関連


その他いろいろ

MODxでつくる! 最強のCMSサイト カバー
MODxでつくる! 最強のCMSサイト

はやくMODx 2.0でないかなあ

Python Workshop the Edge 2007が6/30にあったようです。東京大学駒場キャンパス5号館で。

行けばよかった!近所なのに、すっかり忘れていました。情報収集用のフィードリーダを書いていてこんな大きな情報を逃していては間抜けもいいところです。
来年も開催されるなら参加したいなあ。

ちなみにdlnicoの人がDjango陣に居たことになっている?ようですが、僕ではありません…

WILLCOMの新端末、x-w.jpが6/7に発表されるようです。数日前からティーザーサイトでカウントダウンが始まっていますが、7日にはどうなるのか…当然気になります。

ということで、ちょっと覗いてみました。

  1. http://x-w.jp/swf/top.swfをダウンロード
  2. Wiresharkで覗くと/cgi-bin/svrtime/svrtime.cgiにアクセスし、’st=06′という文字列を受取っているので、これを07にすればよさそう。
  3. /windows/system32/drivers/etc/hostsに
    127.0.0.1       x-w.jp

    を追加。

  4. Pythonで適当にスクリプトを書いて
    import sys, thread, BaseHTTPServer
     
    class XWRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
        def do_GET(self):
            if self.path == '/cgi-bin/svrtime/svrtime.cgi':
                self.wfile.write('st=07')
     
    httpd = BaseHTTPServer.HTTPServer(('', 80), XWRequestHandler)
    thread.start_new_thread(lambda x: x.serve_forever(), (httpd,))
    sys.stdin.readline()

    コマンドプロンプトで実行。

  5. あとはローカルに保存したtop.swfを再生。

x-w
Today coming soonということは、7日になった瞬間に発表というわけでもなさそうです。

まあこんなちょろい方法で日付変えてだますなんて当然想定済みで、これはフェイクだったり…するかもしれませんが。

2007 05 18

C#.NET + IronPython

C#.NET + IronPythonの連携が便利すぎます。
記憶は削除の方向で - IronPython を中継して、C#からPythonライブラリを使ってみる
に書いてある通り、

  1. C#でインターフェイス宣言(PythonのListはC#のIList)
  2. IronPython.Hostingをusingし、PythonEngineのインスタンス作成
  3. 自分のアセンブリ情報を渡し、必要ならimportパスを指定
  4. Python側でC#のnamespace.interfaceをimport
  5. 普通に継承してクラス作成
  6. EvaluateAs<>("NewClass()")でインターフェイスのサブクラスが返ってくる

以降は普通のC#のオブジェクトのように扱えます。なんて便利なんだろう…
折角.NETが使えるので、Pythonでもimport Systemしてもいいのですが、標準ライブラリを使う場合は、IronPython と Python 標準ライブラリについての注意が参考になります。(まだ試していませんが)
PythonからC#や.NETのライブラリを扱う際、プロパティはInstance.propertyでアクセス出来るようです。StringやInt??周りで若干エラーが出やすい感じですが、PythonEngineで呼んだスクリプトからConsole.WriteLineすればコンソール出力が表示されるのでなんとかなります。

こんなに連日(引きこもって)何のためにC#をやっているかというと、かねがね作ろうと思っていた高機能省力フィードリーダに着手しています。
1日でC#に触れ2日でIronPython連携し、と順調です。Geckoを.NETで扱う巧い方法があれば6日とたたず世界は構築されるんですが、現時点では妥協してプレーンテキストとIEコンポーネント、Flash埋め込みの切り替えになりそうです。
当初は文字情報Pull/Push・加工・保管・検索・表示・投稿に関する全てを取り込もうとしていましたが、現在表示面ではやや遅れています。
更に取得・加工部分をPlaggerに委譲しようかと思っていますが、PerlはPythonほどC#と親和性が高くない気がするので、取り敢えずはIronPythonスクリプトによるSmartFeed(RSSやAtomと同列の、最新エントリ一覧を単位とするクラス)を実装しています。

以下単に愚痴ですが、何故今更フィードリーダなんぞを書いているかと言う話。
自分はFirefoxを使っているのもあって、Sageに100フィード程度登録して使っているのですが、

  • 既読扱いにするのが面倒
  • フィードリストのスクロールが面倒
  • 全文を取得して表示出来ない
  • 3ペインビューがない
  • 過去エントリの保管・検索ができない

また、既存のリーダ全般に言えると思いますが、巡回という情報の内容以外は全く同じ操作をするために異常な労力が必要となるのが最大の問題。もちろん製作中のものはオートスクロールその他省力機能満載です。
加えて、投げやりにRSSのDescriptionやらLink先をブラウザコンポーネントに突っ込むその態度。あんな狭い画面で個別サイトのヘッダやらサイドバーなんぞ見たくありません。
とまあ、語り始めると止まらない感じで、放っておけば勝手に膨張していく夢を抑えるのが大変です。
完成しても「ただの気持ち悪いインターフェイスのフィードリーダ」になってしまわないよう、珍しくユーザビリティに気を遣って作ろうと思っています。
(早くも設定画面のコーディングには嫌気がさしていますが)

今までの対数関数的製作曲線からいって、実際にリリースされるのがいつになるかは分かりませんが、βくらいで仕様固めのために公開する予定なので、使ってみてください。

2007 05 10

C#の勉強

何となくVC#2005Express.NETを使っていましたが、Managed DirectX9を始める(PyOpenGLは重いので放置)にあたって、改めてC#独自の言語仕様も勉強してみました。
参考になったのは、改訂版 C#入門C#によるプログラミング入門C#入門
最初のサイトが書籍の転載だけあってかなり丁寧で、C#2.0や3.0で追加された内容を続くページで補う感じ。
C#3.0ともなるとRubyばりに色々詰め込んでいるようで、Cの子孫という感じがあまりしません。あとアトリビュートが結構面倒。

大体3時間くらいでC++との相違点の把握したので、明日(今日)はManaged DirectX9に手をつけてみます。

習作に詰まらん3Dゲームでも作ってから、当初の目的の3Dページャ(?)に取り組もうと思っています。
脳内で仕様を練っていたら別に3Dにする必要もない気もしてきましたが…まあ3Dはやっておいて損はないので、結果は気にしないことに。

左◇はディップスイッチ4ONでFnになるようですが、右◇は何にも使われてないようなので、AutoHotKeyで右Ctrlに割り当てました。

#InstallKeybdHook と書いたahkファイルを読み込ませ、ウィンドウからView->Key history and script infoを選択。
右◇を叩いてF5(更新)すると、VK=FF, SC=079にnot foundというのが出ます。

次に、いつもロードするスクリプトに
vkFFsc079::RCtrl
と書き足してReload scriptすればOKです。
これでCtrl-Aが楽に打てるようになりました。

今更ながら、オブジェクト指向における再利用のためのデザインパターンを読んでいます。
単なるパターンの列挙にとどまらず、最初に具体的かつ実用的なアプリケーションを構築する際の要所と、いかにパターンを適用するかが書かれていて分かりやすい。むやみにJavaのサンプルコードを載せているようなものと比べて、本質的な理解が得られます。多分。
今までパターンと知らずに(多分何度も再発明して)使ってきた構造でも、名前が付くことで途端に分かりやすくなります。
性分なのか、開発関係の本は買っても碌に読まないことが多かったのですが、コレは頷きながら読み通せそうです。

4月~5月に掛けてやるつもりのこと。

MODx編

  • テンプレート中でテンプレートを呼ぶMODxタグを追加するplugin([*content*]の代わりに[@template@]とする、等)これは今のままでも[*content*]を含めたチャンクで可能。部分テンプレートを指定すると、自動的に親テンプレートを被せるプラグインを作成(親子関係はカテゴリを用いて1階層のみ可)
  • 指定ドキュメントでMODxタグ以外のcontentを編集できる(あるいはTVに保存させる)Wiki風snippet
  • あわせてbbcodeを解釈するplugin(既にありそう)
  • ドキュメント保存に際してdiffか何かを退避する世代管理plugin。これは難しいかもしれない
  • 以前作った外部リンク(a)を弄るpluginの改良
  • 外部スクリプトをob_start()~ob_get_clean()して[*content*]に吐き出すsnippet
  • Multilingual Routerで言語ごとにテンプレートを変更する
  • WordPress IntegratorでエイリアスパスONでも使えるsnippet追加

ダウンローダ編

自分用&受けがよさそうで作り始めたYouTubeList2irvから、メインコンテンツ化しつつあるダウンローダ。

  • 各(といっても今のところYouTubeとニコニコ動画だけですが)動画ダウンローダを統合
  • 指定サイズ範囲の新着画像をDLするスクリプト

その他

  • 指定ディレクトリのmp3やmp4を対象に新着をRSS配信するPodcastサーバ in Python (半分ほど進捗)
  • 3Dの勉強用にTTTのDirectXあるいはOpenGL化(まあ既に2DのOpenGLをpyGame通して使ってますが)
  • P2P+DHT RSS ping server/reader

書いていたら5月までに終わるわけない気がしてきました。7月、いや9月までにはなんとか…

なぜかGoogleでの検索順位が改装後1週間して暴落。検索経由のアクセスが半分くらいになってしまいました。XHTMLに全然準拠してなかったからでしょうか…一応Transitionalでvalidにしておきました。

2006 08 3

定時

別の事務作業も片づけなければならないので今日は定時に帰宅。つかの間の休息ではないのが悲しい。

配属になったプロジェクトではRuby on Railsを使っていますが、10以上もあるテーブルの構造を理解しやすくするため、GPLのデータベース設計ソフトDBDesigner 4をMySQLと連携させて使用しました。

公式にはMySQL4までの対応らしいですが、試してみたところMySQL5.0.22でも使用できました(Windows)。
ただ、普通に接続しようとするとdbExpressのエラーが出るため、

mysql> set password for 'ruby'@'localhost' = old_password('new password');

として、old_password形式を使わねばなりません。

Rubyにはdbmodelというgemがあって、これを使えばDBDesignerのxmlファイルからRubyのクラスなどを生成できるようです。(参考)

先のMySQL+DBDesignerではテーブルのインポートは出来ても、多分リレーションを解析してくれたりはしないのでdbmodelの逆の操作を行うアプリケーションが欲しい。
無いようならhas_one, has_many, belongs_to, has_and_belongs_to_many, (:through)などを読み取ってER図に変換するスクリプトを(折角だからRubyで)書いてみるかもしれません。RubyにはRubyパーサが標準でついてくるのだろうか?

« 前のページ