はてなダイアリーライター Version 1.4.1 を試してみた(その2)

id:takatoh:20070708:hw のつづき。Crypt::SSLeayをインストールしたらエラーになった件。

いろいろ試した結果,クッキーファイル(cookie.txt)の有無と関係が有ることがわかった。表にするとこんな感じ。

cookie.txtあり cookie.txtなし
Crypt::SSLeayなし OK OK
Crypt::SSLeayあり OK エラー

Crypt::SSLeayが無い場合にはcookie.txtの有無に関わらずOKなんだけど,これは暗号化されないってことなんで非推奨。Crypt::SSLeayをインストールするとcookie.txtが無い場合にエラーになる。無けりゃ作ってくれるはずなんだけど,ここで失敗しているように見える(最後から2行目)。……ちがうのかな。

-d オプションをつけて実行した結果:

^o^ >perl hw.pl -d
DEBUG: Debug flag on.
Hatena Diary Writer Version 1.4.1
Copyright (C) 2004,2005 by Hiroshi Yuki.
DEBUG: Loading config file (config.txt).
DEBUG: load_config: id:takatoh
DEBUG: load_config: password:********
DEBUG: load_config: cookie:cookie.txt
DEBUG: load_config: proxy:http://proxy:8080/
DEBUG: load_config: client_encoding:Shift_JIS
DEBUG: load_config: server_encoding:EUC_JP
DEBUG: main: files: current dir (.): ./2007-07-08.txt ./touch.txt
DEBUG: login: proxy for http: http://proxy:8080/
DEBUG: login: proxy for https: http://proxy:8080/
Login to https://www.hatena.ne.jp/login as takatoh.
DEBUG: login: 200 OK
DEBUG: login: $r = <HTML></HTML>
Login OK.
DEBUG: login: Making cookie jar.
DEBUG: login: $cookie_jar =
DEBUG: read_title_body: input: ./2007-07-08.txt
DEBUG: Convert from Shift_JIS to EUC_JP.
Post 2007-07-08.
DEBUG: create_it: 2007-07-08.
DEBUG: create_it: 302 Moved
DEBUG: create_it: Location: /takatoh/
DEBUG: create_it: returns 0 (ERROR).
DEBUG: try_it: update_diary_entry: CREATE.
Old cookie. Retry login.
DEBUG: login: proxy for http: http://proxy:8080/
DEBUG: login: proxy for https: http://proxy:8080/
Login to https://www.hatena.ne.jp/login as takatoh.
DEBUG: login: 200 OK
DEBUG: login: $r = <HTML></HTML>
Login OK.
DEBUG: login: Making cookie jar.
DEBUG: login: $cookie_jar =
DEBUG: create_it: 2007-07-08.
DEBUG: create_it: 302 Moved
DEBUG: create_it: Location: /takatoh/
DEBUG: create_it: returns 0 (ERROR).
DEBUG: try_it: update_diary_entry: CREATE.
Old cookie. Retry login.
DEBUG: login: proxy for http: http://proxy:8080/
DEBUG: login: proxy for https: http://proxy:8080/
Login to https://www.hatena.ne.jp/login as takatoh.
DEBUG: login: 200 OK
DEBUG: login: $r = <HTML></HTML>
Login OK.
DEBUG: login: Making cookie jar.
DEBUG: login: $cookie_jar =
ERROR: try_it: Check username/password.

結局,Crypt::SSLeayをインストール/アンインストールしたり,設定ファイルを書き換えてみたりしてるうちにできた(つまりCrypt::SSLeayなしの時にできた)クッキーファイルがあって動くようになったので今回はOKとする。Crypt::SSLeayありの状態でクッキーファイルを作る方法はわからない。

なんだか中途半端だけど時間切れだ。

追記:PCの環境

  • Windows XP
  • ActivePerl 5.8.8
  • Crypt::SSLeay 0.53

追記2:proxyなしの場合

hyukiさんのアドバイスに従ってproxyの無い環境で試してみたら,正しく投稿できた。どうやら次の3つが重なったときにエラーになるらしい。

  • Crypt::SSLeay あり
  • クッキーファイルがない
  • proxyを利用

はてなダイアリーライター Version 1.4.1 を試してみた

以前に試したときにはどういうわけだかうまくいかなかってけど,今度はうまくいったので(ちょっとはまったけど),メモ。

はてなダイアリーライター本体はここから(Version 1.4.1)。マニュアルもここ。

まずは試してみる。テスト用の日記ファイルを作って,設定ファイルはなしでやってみたらすんなり成功。ちょっと拍子抜け。

^o^ >perl hw.pl
WARNING: Crypt::SSLeay is not found, use non-encrypted HTTP mode.
Username: takatoh
Password: ********
Login to http://www.hatena.ne.jp/login as takatoh.
Login OK.
Post 2007-07-08.
Post OK.
Logout from http://d.hatena.ne.jp as takatoh.
Logout OK.

けどちょっと待て。Cyrpt::SSLeayが無いから暗号化しないモードを使うといってる。

……それで思い出した。以前うまくいかなかったのはこのあたりだった。

というわけで,このへんのページを参考に改めてチャレンジ。

まずはOpenSSLから。上のリストの2番目のページからインストーラ(最新版 Win32OpenSSL v0.9.8e)をダウンロードしてインストールするだけ。

Crypt::SSLeay のほうは上のリストの3番目のページにある「LWPで、「https://」で始まるSSL使用サイトにアクセスできますか?」を参考にした。ppmコマンドでインストールするんだけど,モジュール名ではなくPPDファイル名を指定する必要があるらしい(GUI版ppmのリストに出てこない)。ActivePerl 5.8.8 を使っているので:

^o^ >ppm install http://theoryx5.uwinnipeg.ca/ppms/Crypt-SSLeay.ppd

後半,dllをインストールするか聞いてくるので yes と答えてインストールする。デフォルトが[no]になってるので注意。

さて,改めて試してみよう。ついでに設定ファイルも書いておく。

id:takatoh
password:********
cookie:cookie.txt
proxy:http://proxy:8080/
client_encoding:Shift_JIS
server_encoding:EUC_JP

これでOKのはず。

^o^ >perl hw.pl
Login to https://www.hatena.ne.jp/login as takatoh.
Login OK.
Post 2007-07-08.
Old cookie. Retry login.
Login to https://www.hatena.ne.jp/login as takatoh.
Login OK.
Old cookie. Retry login.
Login to https://www.hatena.ne.jp/login as takatoh.
Login OK.
ERROR: try_it: Check username/password.

なんでエラーになるんだ!!……orz

えーと。いろいろ試した結果何とか動くようになった。これについてはエントリーを改めて書く。

さきに書いておくと,インストールや設定ファイルは上の通りで大丈夫(たぶん)。問題はcookie.txtだった。--(つづく)

lighttpd (for Windows) に触ってみた(2)

昨日(id:takatoh:20070111:lighttpd) のつづき。

ファイルのリスト( mod_dirlisting )

URL がディレクトリを指して,かつインデックスファイルが見つからない場合に,ディレクトリ内容のリストを表示する機能。mod_dirlisting モジュールは server.modules で指定する必要もなくデフォルトで読み込まれるので,機能を有効にするだけでいい。

dir-listing.activate       = "enable"

もし,特定のディレクトリだけリストを表示したいなら次のようにする(これは C:\lighttpd\doc\dirlisting.txt に載っている例)。

$HTTP["url"] =~ "^/download($|/)" {
dir-listing.activate = "enable"
}

エイリアス( mod_alias )

mod_alias を読み込んで

"mod_alias",

エイリアスのリストを指定。lighttpd.conf に記述がないので追加する。

alias.url = ( "/cgi-bin/" => "C:/lighttpd/cgi-bin/" )

バーチャルホスト( mod_simple_vhost )

バーチャルホスト関連のモジュールには mod_evhost というのもあるけど,ここでは mod_simple_vhost を使う(名前ベース)。まずはモジュールの読み込み。

"mod_simple_vhost",

でもって,次のように設定する。これがデフォルトのバーチャルホストになる。

simple-vhost.server-root   = "C:/lighttpd/servers/"
simple-vhost.default-host  = "vhost1"
simple-vhost.document-root = "/pages/"

simple-vhost.server-root で指定したディレクトリ以下にバーチャルホストと同名のディレクトリを用意する。ほかの場所に作ってもダメなようだ。

で,この例では vhost1 がバーチャルホスト名,C:/lighttpd/servers/vhost1/pages/ がそのドキュメントルートだ。

複数のバーチャルホストをたてるには

$HTTP["host"] == "vhost2" {
server.document-root = "C:/lighttpd/servers/vhost2/pages/"
}

のように $HTTP[“host”] の値で場合分けする。

元々のホスト--昨日の例でいえば http://localhost:81/ でアクセスしていたホスト--は無効になるようだ。

lighttpd (for Windows) に触ってみた

ので,メモ。

cf. http://www.lighttpd.net/ (公式サイト)

cf. ぱるも日記 – Windows で lighttpd を使う

ダウンロード

↓ダウンロードはここから。バージョンは 1.4.11。

http://blogs.windowsnetworking.com/wnadmin/2006/09/22/lighttpd-web-server/

公式サイトにはWindows用バイナリ配布サイトへのリンクがあるけど,どういう訳か接続できない。

で,ここの人がミラーしてるってことらしい。最新バージョンではないけど気にしないことにする。

インストール

インストールは簡単。ダウンロードしたインストーラを実行するだけ。

インストール先を聞いてこないので,C:\lighttpd に固定のようだ。

設定

設定ファイルは,C:\lighttpd\etc\lighttpd.conf。

ぱるも日記 – Windows で lighttpd を使うを参考に。あと,付属のマニュアル(英語)をちょっとだけ参照。

まずは読み込むモジュール。CGI を使えるように,mod_cgi モジュールを読み込む。コメントをはずせばいい(29行目)。

"mod_cgi",

ドキュメントルート。これはデフォルトのまま。

server.document-root        = "C:/lighttpd/htdocs/"

URLにファイル名が省略されたときのインデックスファイルに index.cgi を追加(46行目)。

index-file.names            = ( "index.cgi", "index.php", "index.html",

ポート(138行目)。デフォルトは 80 だけど Apache が使ってるので変更。

server.port                = 81

CGIスクリプトの拡張子と実行プログラムを指定(219行目~)。

cgi.assign                 = ( ".pl"  => "C:/usr/perl/bin/perl",
".rb"  => "C:/usr/ruby/bin/ruby",
".cgi" => "C:/usr/ruby/bin/ruby" )

これで lighttpd を再起動すれば,設定が有効になる。

起動・停止はスタートメニューかアイコンでできる。けど,リスタートが無いのがちょっと不便。

ユーザーディレクトリ

ユーザーディレクトリも使える。まずは mod_userdir を有効化。

"mod_userdir",

パスの設定。lighttpd.conf にデフォルトの記述がないので一番最後に追加した。

userdir.basepath = "D:/www/lighttpd_users/"
userdir.path     = "htdocs"

これで URL とパスの関係は次のようになる。

Apache の .htaccess に相当するものは無いのかな。

つづき –> id:takatoh:20070112:lighttpd

BrainFuck(というプログラミング言語)

cf. どーんとやってみよう – BrainFuck で棒グラフ

なんというか,こんなプログラミング言語があったとは。

見た目にはこれがプログラムだとは思えないんだけど,Wkikipediaにはこうある。

処理系には十分なサイズのbyte型配列とその要素のひとつを指すポインタがある。ポインタを「>」「<」命令で移動させながら、そのポインタが指す値を増減させて処理を進めていく(Hello world参照)。

実用性はほとんど無いように思われるが、これだけでチューリングマシンで実行可能なあらゆるプログラムが記述できる(チューリング完全である)とされている。

つまり,えーと,立派なプログラミング言語だってことか。

見てるだけじゃわからないので,試してみることにする。使ったのはこれ(Windows版)。

http://esoteric.sange.fi/brainfuck/compiled/win/BFI.exe

ちゃんと動いてビックリ(向井さんのとはちょっと違うけど)。

再度Wikipediaによると

実行可能な命令は「8つ」のみである。

1. > ポインタをインクリメントする。ポインタをptrとすると、C言語の「ptr++;」に相当する。

2. < ポインタをデクリメントする。C言語の「ptr–;」に相当。

3. + ポインタが指す値をインクリメントする。C言語の「(*ptr)++;」に相当。

4. – ポインタが指す値をデクリメントする。C言語の「(*ptr)–;」に相当。

5. . ポインタが指す値を出力する。C言語の「putchar(*ptr);」に相当。

6. , 1バイトを入力してポインタが指す値に代入する。C言語の「*ptr=getchar();」に相当。

7. [ ポインタが指す値が0なら、対応する ] までジャンプする。C言語の「while(*ptr){」に相当。

8. ] ポインタが指す値が0でないなら、対応する [ にジャンプする。C言語の「}」に相当。

ということらしい。ついでにいわゆる Hello world プログラムもあった。

++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<
+++++++++++++++.>.+++.------.--------.>+.>.

いろいろいじってると何となくわかってきた。けど,プログラムを読んで動作を理解するのは至難の業だ。動かしてみたほうが速い。

というか,デバッグはどうやってやるんだろう。

はてなグループとコメントについて

id:takatoh:20060604:group についた hyuki さんのコメント。

参加ありがとうございます。ところで、コメントつけるときに「グループに参加」というのはどういう状況でしたか?いちおう誰で も書き込めるようになっていたはずですが…。

たぶん,はてなにログインした状態でコメントしようとしたので,グループに参加するよう促されたのではないかと思います。回避する方法があったのかもしれませんが,別段,断る理由もなかったのでそのまま参加しました。

ところが。

つけたコメントの,名前の部分がリンクになってるんですが,そのリンク先がここじゃなくて Haskellグループ内の日記(使ってないのでカラ)になってしまってます。これはどうしたらいいんだろう。時間があいたら調べてみます。