ようこそゲストさん

Magical Diary, beta version

メッセージ欄

2007年10月の日記

[Windows] Meadow + PuTTY でSubversionを使用する方法

2007/10/24 1:20 HIRATA Yasuyuki

Meadow + PuTTY でSubversionを使用する方法メモ

方針

  • リポジトリはリモートのUnixサーバに置く。
  • アクセスはSSH (PuTTY) 経由
  • PuTTYは C:\Program Files\PuTTY にインストールしてあると仮定。
  • Pagent を利用。
  • UTF-8マンセー
  • MeadowのSVNインターフェイスはpsvnを使用

Subversionのインストール

  1. Win32 packages built against Apache 2.0 または Win32 packages built against Apache 2.2 から svn-win32-x.x.x.zip をダウンロード。
  2. svn-win32-x.x.x.zip を展開し、C:\Program Files\svn へコピーする。
  3. スタート → 設定 → コントロールパネル → システム → システムの詳細設定 → "詳細設定" タブ → 環境変数(N)... から以下の環境変数を設定する。
    • ユーザ環境変数
      • APR_ICONV_PATH=C:\Program Files\svn\iconv
      • SVN_SSH=C:/Program Files/PuTTY/plink.exe
    • システム環境変数
      • PATH=(すでに設定されていた内容);C:\Program Files\svn\bin
  4. スタート → ファイル名を指定して実行(R)... から "regedit" を起動。
  5. レジストリエディタの HKEY_CURRENT_USER\Software\Tigris.org\Subversion\Config\miscellany キー内に 名前: "log-encoding", 種類: "REG_SZ", データ: "utf-8" を設定する。
  6. スタート → ファイル名を指定して実行(R)... から "cmd" を起動。
  7. コマンドプロンプトに "svn" と入力して、正常に実行されることを確認する。
    C:\Users\yasu>svn
    Type 'svn help' for usage.
    

レポジトリの作成とテスト

  1. リモートのUnixホストでレポジトリを作成
    pluto% svnadmin create /home/yasu/testrepos
    
  2. アクセスできることを確認。
    C:\Users\yasu\work>mkdir test
    C:\Users\yasu\work>echo moemoe > test\test.txt
    C:\Users\yasu\work>svn import test svn+ssh://pluto/home/yasu/testrepos/test/ -m "initial import"
    Adding         test\test.txt
    Committed revision 1.
    C:\Users\yasu\work>svn list svn+ssh://pluto/home/yasu/testrepos/test/
    test.txt
    C:\Users\yasu\work>svn co svn+ssh://pluto/home/yasu/testrepos/test/ localcopy
    A    localcopy\test.txt
    Checked out revision 1.
    C:\Users\yasu\work>cd localcopy
    C:\Users\yasu\work\localcopy>svn status
    M      test.txt
    C:\Users\yasu\work\localcopy>svn commit -m "sakura tan haahaa"
    Sending        test.txt
    Transmitting file data .
    Committed revision 2.
    

Meadowの設定

  1. ~/.emacs へ以下の設定を行い、C-x e で評価するか Meadow を再起動する。
    (set-default-coding-systems 'utf-8-unix)
    (require 'psvn)
    (global-set-key "\C-c\C-s" 'svn-status)
    (setq svn-status-svn-executable "C:/Program Files/svn/bin/svn")
    
  2. C:\Users\yasu\work\localcopy\test.txt を開く。
  3. 適当に編集し、C-x C-s で保存。
  4. C-c C-s でステータスを表示。(変更しているため、"M" (modified) が付いている)
  5. "test.txt" にカーソルを合わせて "=" を押すことで差分を表示することが出来る。
  6. c を押すとログ入力画面が表示されるので、ログを入力後 C-c C-c でコミットする。

[Perl] ニコニコ動画をWeb::Scraperでスクレイプ

2007/10/06 21:41 HIRATA Yasuyuki

ニコニコ動画のタグごとにRSSを作るため、最初は以下のように正規表現でゴリゴリと処理していたが、イマイチ綺麗じゃない。

while($html =~ m{<p><a\s+href="watch/(\w+)">\s*
                 <img\s+.*?src="(.*?)".*?>.*?
                 <strong>((?:\d+分)?\s*\d+秒)</strong>.*?
                 再生:<strong>([\d,]+)</strong>.*?
                 コメント:<strong>([\d,]+)</strong>.*?
                 <a\s+class="video".*?>([^<>]*)</a></p>.*?
                 <p.*?>([^<>]*?)</p>.*?
                 <p.*?><strong>([^<>]*?)</strong></p>
                 }gsx) {
    ...
}

今回は Web::Scraper というモジュールを使ってみた。これは、CSSセレクタやXpathで対象を指定すると、解析した結果を返してくれる。HTMLをパースして情報を取得するときに便利だ。

どのブロックからデータを取得するのかを大まかに指定してしまって、その中で細かい情報を取得するという段階を踏むと、スクレーピングしやすいとあったので、

  1. "thumb_frm" を class 属性として持つ div 一式を取得
  2. これらの div について、細かく Xpath 指定で要素を抽出

という手順で処理することにした:

my $scraper = scraper {
  process('//div[@class="thumb_frm"]',
          'videos[]' => scraper {
            process('/div/div/div/p/a/img',
                    img_url => '@src',
                    img_width => '@width',
                    img_height =>  '@height');
            process('/div/div/p[2]/strong',
                    length_str => 'TEXT');
            process('/div/div/p[2]/strong[2]',
                    num_played_str => 'TEXT');
            process('/div/div/p[2]/strong[3]',
                    num_comments_str => 'TEXT');
            process('/div/div[2]/p/a[@class="video"]',
                    title => 'TEXT',
                    url => '@href');
            process('/div/div[2]/p[2]',
                    desc => 'TEXT');
            process('/div/div[2]/div/p/strong',
                    comment => 'TEXT');
          });
};

作った結果: ニコニコ動画 俺様用RSS

ニコニコ動画アクセス関係は WWW::NicoVideo として分離させているけど、需要あるかな?

ニコニコ動画Perlインターフェイス (WWW::NicoVideo) を公開しました。

[Firefox] Firefoxのアドオン

2007/10/04 22:51 HIRATA Yasuyuki

Firefoxのアドオンによって様々な機能を追加することができる。最近まであまり活用していなかったがが、いろいろと調べて最終的に使うことになったのは以下の通り。再インストール時のときのため、自分用にメモ。

Add N Edit Cookies
クッキー編集機能
Allow Right-Click
右クリックを禁止するアホなサイト対策
Context Search
選択した文字列をサーチエンジンで検索
dragdropupload
ファイルアップロード領域にドラッグ・ドロップで入力する
Firebug
デバッグ用
Greasemonkey
サイトごとにユーザスクリプトを適用する
IE Tab
IEのレンダリングエンジンをFirefoxに組み込む
PDF Download
PDFをインラインで表示せず、ダウンロードして表示
Popup ALT Attribute
Alt属性に指定された文字列をポップアップさせる (本当はtitle属性を使うのが正しいのだが)
Sage++
フィードリーダ
Stylish
サイトごとにユーザCSSを適用する

[Firefox] Firefoxで使えるフィードリーダ

2007/10/03 22:23 HIRATA Yasuyuki

私がフィードリーダに求める機能は以下の4点。

  • サイト一覧、サイトの記事タイトル一覧、内容表示の3ペイン方式であること。
  • フィード情報を1ページにまとめて表示 (フィードに含まれる記事一覧を内容も含めて表示) してほしい。(サイトによってはdescriptionなどに内容がすべて入っているため。)
  • 内容表示はウェブサイトを表示可能であること。(フィードに完全なdescriptionが含まれない場合はウェブサイトを表示する必要があるため。別ウインドウ・タブで表示するのは面倒。)
  • できれば favicon に対応してほしい。

上記の観点を踏まえて、Firefoxで利用可能なフィード (RSS/ATOM) リーダを複数試してみた。

Sage
タイプ: 3ペイン (サイドバー2ペイン)
フィードをまとめて表示: Yes
内容としてサイトを表示: Yes
Favicon対応: No
データ: ブックマーク
Faviconに対応していないという欠点はあるが、それ以外の機能はすべて実現可能。URL欄にランダム文字列のディレクトリ名を含んだフルパス名が出るのがイマイチ。(セキュリティ的な意味で)
Sage++
タイプ: 3ペイン (サイドバー2ペイン)
フィードをまとめて表示: Yes
内容としてサイトを表示: Yes
Favicon対応: No
データ: ブックマーク
Sageの改造版。広告ブロック機能があるので最終的にこれを利用することにした。
Brief
タイプ: 2ペイン (ペイン分割)
フィードをまとめて表示: Yes
内容としてサイトを表示: Yes
Favicon対応: Yes
データ: ブックマーク (ライブブックマーク)
タイトル (とdescription) 一覧とウェブサイトを同一ペイン内で切り替えるため、私にとっては使いづらい。フィードに含まれる内容だけを読むのであれば良いと思う。
Wizz RSS News Reader
タイプ: 3/4ペイン (サイドバー 2/3ペイン)
フィードをまとめて表示: Yes
内容としてサイトを表示: Yes
Favicon対応: (Yes)
データ: ブックマーク
Sageと似ているが、機能がかなり多い。必要な機能は網羅しているが、デザインがあまり好きになれない。Faviconはフィードを提供するサイトのものが使われるのが残念。
NewsFox
タイプ: 3ペイン (ペイン分割)
フィードをまとめて表示: Yes
内容としてサイトを表示: Yes
Favicon対応: Yes
データ: 独自?
3ペイン分割タイプで、OutlookやThunderbirdと似た画面で利用することができる。フィードすべてを再読み込みさせるとFirefoxが応答なしになる、フィードの登録インターフェイスが使いづらいという欠点はあるが、購読するフィードが少ないなら良いと思う。

Sage++とWizz RSSのどちらにするか迷ったが、広告ブロック機能がある点と、デザインが好みである点からSage++を利用することとした。(広告自体は嫌いではなくKasperskyの広告ブロック機能も無効にしてあるが、記事一覧に広告があるのは好きではないため。) 上記の欠点が修正されれば Brief や NewsFox に乗り換えるかもしれない。

Sage++ではキーバインドが変更されているため、about:config で下記内容に変更。

sage.key.focusSidebar = X
sage.key.focusSidebar.modifiers = alt
sage.key.openSidebar = Z
sage.key.openSidebar.modifiers = alt
© 2007 HIRATA Yasuyuki <yasu@asuka.net>, all rights reserved