トップ(最新) | <前

nDiki : CGI プログラム

CGI プログラム

CGIに準拠しているプログラム。 CGI プログラムの事を「CGI」と言ってしまう人も多い。

スポンサード リンク

Related term

2006年7月22日 (土)

Rubric でプライベート SBS を立てるも 0.140 では日本語に不具合 このエントリーを含むはてなブックマーク

スポンサード リンク

入社してから社内情報共有の一環として

といろいろ手をつけてきた。 次に狙っているのは SBS である。

Wiki社内 Blog に書くほどではないけれどメモ程度にブックマークしておきたい URL を、気軽に晒せるようにするのが目的。

はてなブックマークのような公開サービスは

  • タグ・コメント・傾向などが外に出るのはよろしくない
  • あるいは、それを気にして活用されない
  • そもそも社内リソースについてはブックマークできない

という点から、今回は利用できない。

ということで社内に SBS を設置したい考えている。

最初は Scuttle にしてみようと思ったのだが、PHP ベースであるのと MySQL を使うというところで気遅れしている。 いや SQLite でもいけそうらしいということで、実は Debian でちょっと試そうとしたのだが、テーブル作成の SQLMySQL 用で、これを修正するのが面倒なので断念。

次に Perl + SQLite で動く Rubric を試してみることにした。

@ Rubric 0.140

Rubric は CPAN にあがっているので CPAN.pm から install Rubric でインストールできる。 モジュールをインストールしたら、セットアップ。

  1. CGI プログラムを動かすディレクトリを決める (以下 $RUBRIC)
  2. Rubric tarball の bin/rubric.cgi を $RUBRIC/ にコピーし、必要なら #! を修正する。
  3. Rubric tarball の templates ディレクトリを $RUBRIC/ にコピーする。
  4. Rubric tarball の style/rubric.css を $RUBRIC/ にコピーする。
  5. Rubric tarball の etc/rubric.yml を $RUBRIC/ にコピーして環境に合わせて編集する。
  6. データベースを初期化する。0.140 には makedb.pl が同梱されていないので、0.13_01 の bin/makedb.pl を参考に perl -MRubric::DBI::Setup -e 'Rubric::DBI::Setup->setup_tables' で初期化する。ちなみに 0.140 付属の rubric コマンドで rubric db -s してみたが、これはうまく動かなかった。
  7. 必要に応じて .htaccess を作成・編集し rubric.cgi を CGI プログラムとして実行できるようにする。またその他アクセスされたくないファイルを deny するようにしておく。

これで OK。

rubric.cgi にアクセスしページが表示されればひとまず成功。 メニューの「register」から、ユーザ登録する。 確認用のメールが届くはずだが、面倒くさいのでこれを待たずに

 rubric user -a ユーザ名

でアクティベートする。

Rubric の HTML フォームからのブックマーキングは成功し、うまく動いているようである。 ただし、日本語の処理はどうもよくない。 title や description が化ける。 惜しい。

基本的には UTF-8 ベースでうまくいきそうなのだが、どこかで化けるようだ。 ちょっと手を入れれば直るかなと思ったが、化けるところと化けないところとがあるので逆に直す場所が多そうなので今日はやめておくことにした。

とりあえず Rubric はおいておいて、他のものも試してみることにするか。

■ Twitter やってます。この記事が気にいったらぜひ twitter.com/Naney の follower になってください。

Google Buzz はよろしければ Naney の Google プロフィールからどうぞ。


[ 7月22日全て ]

2006年9月19日 (火)

Firefox 時間帯別ホームページ切り換え このエントリーを含むはてなブックマーク

昨日、ホームページからフレッシュリーダーを外した。 といはいえ、アンテナを張っておくという意味でそれなりに巡回しておく必要あり。

ビジネスアワーの中のちょっとした隙間時間でチェックしていくようにしたいので、平日の昼間は Web ブラウザホームページフレッシュリーダーにしておきたい。

曜日・時間でホームページを自動切り換えするような Firefox 拡張機能がないか探したけれど残念ながらみつからない。

ということで、曜日・時間をみてリダイレクト先を切り換えてリダイレクトさせるだけの簡単な CGI プログラムを作成してローカルホストの Web サーバに置き、Firefoxホームページに設定。 別にレスポンスにも不満はないので、これでいくことにする。

しかし、しばらくは RSS 巡回禁断症状が出そうだ。


[ 9月19日全て ]

2006年12月4日 (月)

SpeedyCGI 以下で WiKicker がうまく動かない? このエントリーを含むはてなブックマーク

WiKicker ベースのシステムが稼働しているホストが FreeBSD 5.2.1-RELEASE から FreeBSD 6.1-RELEASE に更新されるのにともない、再インストール作業を行った。

動作確認をしたところ CGI プログラムは動くものの Perl モジュール中の DATA セクションが読めていないようなエラー表示がされた。

もしやと思い SpeedyCGI を外したら正常動作。

SpeedyCGI 下で動くことを考えて、DATA セクションを1度しか読まないようにコーディングしてあるはずなのだが、はて。

他の作業もあり細かいチェックができなかったのでもしかしたら違うところでの問題かもしれないが、ちょっと厄介。


[ 12月4日全て ]

2006年12月11日 (月)

SpiderMonkey の素のインタプリタでは CGI プログラムには役立たず このエントリーを含むはてなブックマーク

Ajax を使うプログラムを書くことになりそうなので、どうせならサーバーサイドも JavaScript で書けないかなと調査。 有名どころの JavaScript エンジンというと SpiderMonkey なので、まずはこれでいけるか確認。

Debian GNU/Linux sid だと spidermonkey-bin パッケージに JavaScript shell プログラム smjs (js) が含まれている。 とりあえずコマンドライン引数 (arguments)と環境変数(environment)と標準入力(readline())から入力ができて、標準出力に出力 (print()) ができるので、最低限の CGI プログラムは書けそうだ。

ただこれだけでできる範囲のことなら、クライアントサイドでできてしまう。 単独だとあまり意味ないな。やはり embedded 用か。

Perl の JavaScript::SipderMonkey モジュールや JavaScript モジュールを使うと Perl のサブルーチンを JavaScirpt プログラム側から呼べる関数として与えた中で JavaScript を実行できるのでいろいろ遊べるようになる。 ただこれだと、Perl で書いちゃった方がよっぽど楽。


[ 12月11日全て ]

2007年1月8日 (月)

iCalendar 形式経由でスケジュールを社内 Blog に表示 このエントリーを含むはてなブックマーク

仕事用に Skype 名を作成し、ついでに社内 BlogSkype ボタンを貼りつけてログイン状態を表示できるようにしてみた。

そういえば電話もそうなんだけれど、本社に連絡を取るとき「もしかして会議中?」などと勘繰ってかけるかどうか迷ってしまうことがある。 かけたい人の予定がわかればいいのになと。

ならば逆もしかりだろうということで、自分の仕事のスケジュールを晒してみようと思いついた。 グループウェアとかそういうのは大袈裟なので、まずは社内 Blogサイドバーに表示するようにしたい。

ということでこの3連休実装してみた。

@ 構成

@ 入力

完全なスケジュールはほぼ日手帳に手書きで管理しているので、ミーティング・外出など晒しカテゴリのイベントだけを、電子化する必要がある。 手で HTML 毎回ごりごり書き直すのも嫌なので、スケジュール管理ソフトを使いたい。 この部分は KDE の KOrganizer を使うことにした。

@ サーバへアップロード

で、KOrganizer のスケジュールを iCalendar 形式でエクスポート。 このファイルを社内 Blog を配信しているサーバに rsync で転送。

この処理はちょっと手間なので自動化したいところ。

@ 社内 Blog 内表示用 JavaScript Include ファイル生成 CGI プログラム

この iCalendar 形式ファイルを読み込んで、今日以降の10件(程度)を HTML フラグメントに変換し JavaScript プログラム (document.write() 列) として出力する Perl CGI プログラムを作成。

iCalendar の形式の読み込みについては Data::ICal や iCal::Paraser などの Perl モジュールを利用できる。 今回はシンプルに使えそうな iCal::Parser をチョイス。 基本的には

 use iCal::Parser;
 my $parser = iCal::Parser->new;
 my $calendar = $parser->parse($ics_file_name);

で読み込んだデータがハッシュリファレンスとして $calendar に設定される。 イベントは $calendar->{2007}->{01}->{01}->{$uid} のように「年、月、日、イベントUID」のハッシュ階層として格納されているので、これを読み出せばよい。

@ 社内 Blog サイドバーに表示

で、この CGI プログラムが生成する JavaScript プログラムをサイドバーJavaScript Include

まずは表示までできるようになった。

これで

をまとめて公開できる社内 Blogアップグレード

おいおいスケジュールの表示デザインとかは改良していきたい。 hCalendar 形式にして CSSデザインするのがいいのかな。


[ 1月8日全て ]

2007年2月9日 (金)

XAMPPWiKicker を動かしてみた。PPM インストール OK。 このエントリーを含むはてなブックマーク

Perl で書いた Web アプリケーションのポータブルな Win32 デモ環境として XAMPP を使ってみるとどんな感じになるか試してみた。

使ったバージョンは以下。

(http://www.apachefriends.org/jp/xampp-windows.html)

@ C: ドライブで試す

それぞれ 自己解凍型 7-ZIP アーカイブをとってくる。 最初に XAMPP を展開し、次にその xampp ディレクトリの中で Perl アドオンを展開。 xampp ディレクトリを c: の直下に移動する。

次にコマンドプロンプトを開き c:\xampp\perl\bin へ移動後 ppm コマンドを起動して作成済みの PPM パッケージインストールする。 インストール先は \xampp\perl 以下とドライブ無しのパスで指定されているようで、問題なく必要な Perl ライブラリをインストールできた。

次に \xampp\xampp-control.exe を実行して GUI 管理ツールを立ち上げ、その画面から Apache を起動。 普通の Win32Apacheインストールしてある PC だったため、xampp-control から Apache を起動したらそちらが立ち上がってしまったが、これは Svc にチェックが入っていたからだった。Svc を外せば \xampp 以下の Apache がきちんと起動する。

あとは \xampp\htdocs 以下で WiKicker CGI プログラムの配置や設定ファイルを作成すれば OK。 もともと WiKicker は相対パスだけで動くようになっている*1ので、問題なく実行することができた。

*1多分

@ 他のドライブに移す

一度セットアップできた \xampp ディレクトリを TrueCrypt 仮想ドライブにコピーして起動してみた。

こちらも問題なく OK。

ということで XAMPP でお手軽に Perl CGI プログラムの動く Web サーバ環境を作れることを確認できた。

問題があるとすれば XAMPP + Perl アドオンが馬鹿でかいところか。400MB オーバー。 今回何が一番時間がかかったかって、XAMPP + Perl アドオンを展開した直後の xampp ディレクトリを、後でまた使えるように 7-ZIP の最高圧縮する処理に時間がかかった。 使っている PC では 50分以上かかったよ。


[ 2月9日全て ]

2007年4月7日 (土)

携帯電話(iモード)から Twitter を更新する このエントリーを含むはてなブックマーク

Twitter をいろいろ遊んでみて「やはり携帯電話から更新できないと」と思えてきた。

携帯電話からメールを送る事で Twitterアップデートをかけてくれるゲートウェイを設置できれば一番いいのだけれど、そのようなメールアドレスを作る場所が今はない(さすがに会社のサーバはまずい)。

ということでiモードから更新をかけられるように短い CGI プログラムを書くことにした。 CPAN には Net::Twitter という Perl モジュールがあるのだが、JSON::Any (と JSON::XS / JSON / JSON::DWIW / JSON::Syck のどれか)が必要で、ちょっと大げさなので今回は使用は見送り。 普通に CGI.pm と LWP::UserAgent で書いた。

 #!/usr/bin/perl -w

 use 5.005_03;
 use strict;
 use CGI qw(-no_xhtml);
 use Jcode;
 use LWP::UserAgent;

 my $query     = CGI->new;
 my $user_name = $query->param('u');
 my $password  = $query->param('p');
 my $status    = $query->param('s');

 $user_name = '' unless defined $user_name;
 $password  = '' unless defined $password;
 $status    = '' unless defined $status;

 my $message = '';

 if ($user_name ne '' && $password ne '' && $status ne '') {
   my $ua = LWP::UserAgent->new;
   Jcode::convert(\$status, 'utf8', 'sjis');
   $ua->credentials('twitter.com:80', 'Twitter API', $user_name, $password);
   my $request = $ua->post('http://twitter.com/statuses/update.json',
                           {status => $status . ' '});
   if ($request->is_success) {
     $message = '<p>OK</p>';
   }
 }

 print $query->header(-type => 'text/html', -charset => '');
 print '<html><head><title>Twitter update</title></title><body>';
 print '<form method="post" action="twitter">';
 print 'ユーザ名:',   $query->textfield('u'),      '<br>';
 print 'パスワード:', $query->password_field('p'), '<br>';
 print 'ステータス:', $query->textfield('s'),      '<br>';
 print '<input type="submit">';
 print '</form>';
 print $message;
 print '</body></html>';

とりあえずこれで、iモードから送信できることを確認。 パスワードの入力が面倒だけれども、サーバ側に書いておくのも嫌なので毎回送ることにした。FOMA 端末側には定型文として保存しておく以外にいい手はないのかな。

最初うまく送れなくてなんだろうと思ったが、あきやん氏の「Twitterで日本語を入力する方法 (akiyan.com)」の記事にある

  • 全て全角文字で入力して、最後に半角スペースをいれる
  • 半角全角を混在させるときは、半角文字と全角文字の間にスペースをいれる

といった日本語を入力する際の注意点がらみだったようである。 とりあえず CGI プログラムの方で最後に必ずいわゆる半角空白を追加するようにしておいた。

文字数チェックとか Twitter API の返り値チェックとか、改善すべきところはいろいろあるけれど、自分用にはまずこれでいいかな。

気が向いた時に外出先から更新かけます。


[ 4月7日全て ]

2007年7月26日 (木)

携帯電話からの Twitter 投稿に tmitter を使ってみることにした このエントリーを含むはてなブックマーク

FOMA から Twitter に投稿する際にはとりあえず、自作 CGI プログラム(記事)を使っている。 これはこれでそこそこ使えるのだが、以下の点でちょっと不便であった。

  • iモード接続したり切ったりするのが面倒
  • 投稿の際まず入力フォーム画面を表示する必要があるのだが、電波状況が良くないと時間がかかったりして嫌
  • submit のレスポンス待ちでタイムアウトすると、送れたかどうか判断できない (*)

(*) なんかはまあきちんとプログラム書けばいいのだけれども、そこまでするのも大変だったりする。

やはりメール投稿ができると便利そう。

Twitter 関連サービス認証情報が不安で使ってこなかったんだけれども、まあ実は普段使っている Firefox 拡張機能 TwitBin って Tweetbar などと違って実はパスワードhttp://www.twitbin.com/ に送ってしまってたりするので、最近まあいいかなと思えるようになってしまった (アマリヨクナイ)。

ということで tmitter を使ってみることにした。 昨晩登録しておいて、今朝1発目投稿。

やはり投稿画面を取得する必要がないと楽でいいな。 投稿メールアドレスや、自分への Bcc を設定したメールテンプレートを作っておけばささっと投稿できる。

いいかも。しばらく使ってみよう。


[ 7月26日全て ]

2008年4月6日 (日)

Twitter を使い始めて1年 このエントリーを含むはてなブックマーク

Twitter を使い始めてから1年が経った。

飽きずに使ってきたのはやはり API が公開されていて、いろいろ遊べるからだと思う。

@ 1年間の活動

@ 2007年04月06日 Twitter のアカウントを作成して、今何をやっているかを晒す

全てはここから!

Twitter は 100SHIKI.COM では で12月31日に紹介されている。2007年の3月頃から流行りはじめた頃に始めてみた。

日本語を正しく通すにはちょっと工夫をする必要がまだあった頃。

@ 2007年04月07日 携帯電話(iモード)から Twitter を更新する

2日目には投稿用 CGI プログラムを作成。tmitter を使い始めるまではケータイからはこの自作 CGI プログラムで投稿していた。

Twitter はやはりケータイからも投稿できた方が楽しい。

@ 2007年04月13日 クリッピングに便利な CMS 「Tumblr」を使ってみる

同じ頃に Tumblr も試してみている。Twitter のフィードを食わせているけれど、放置状態。

@ 2007年07月26日 携帯電話からの Twitter 投稿に tmitter を使ってみることにした

メールベース。tmitter サービス提供終了のアナウンスがあったので、その後 MovaTwitter 移行した。

tmitter 自体はその後サービス継続されることになり今も利用可能。

@ 2007年07月30日 tmitter サービス提供終了ということで MovaTwitter に移行

MovaTwitter 使用開始。今もケータイからはコレ。便利。

@ 2007年08月16日 半分は Twitter のためにパケ・ホーダイを契約

MovaTwitter のためにパケ・ホーダイ契約。このパケ・ホーダイ契約がきっかけで、各種ケータイサービスを活用するようになった。

@ 2007年08月16日 Gmail のチャット機能で Twitter ステータスを記録

今は特定の人のみ IM に流れてくるように Notifications 設定して、アラート的に使っている。検索は「Twitter 検索」で足りるので履歴としては活用していない。

@ 2007年08月17日 Twitter の自分のステータスログを「はてなRSS」のメール通知で保存

今も継続しているけれど、履歴を見ることはほとんどないな。 いや、今日の記事まとめにはちょっと役に立った。

@ Twit 0.93 入れてみた

タイムラインのざーっと見るのに便利でしばらく使っていたんだけれど、その後 Linux 上で P3:PeraPeraPrv 常用するようになってから起動しなくなった。

良い Twitter クライアント。

@ 2007年11月09日 Twitter ステータスを nDiki サイドバーに表示

継続して nDiki に表示中。ちらっとぐらいは見る人がいるのかな?

@ 2007年11月21日 P3 から初ポスト

P3:PeraPeraPrv 使用開始。

今では MovaTwitter と合わせて一番使う Twitter クライアント。

@ 2007年11月23日 最近の Twitter ステータスを nDiki 「最近のさえずり」ページに自動表示

ダイジェスト記事「今日のさえずり」を書くのに、自分用として便利に使用中。

@ 2007年12月29日 Twitter ベイジアンフィルタプロキシ

作ってしばらく試したけれど、学習がどちらかに偏りがちなので使わなくなってしまった。

@ 2008年02月22日 Twitter にケータイ写真を流すのに twitterfeed を使う

継続中。Flickr写真アップロードして、twitterfeed によって Twitter にアナンスすると 20 view ぐらい見てもらえる感じ。

@ 2008年02月25日 Twitter への書き込みを自動的に Skype ムードメッセージに設定する

継続使用中。Skype のコンタクトはあまり多くないので、今のところ同僚向けに晒しているといった感じ。

@ 2008年03月13日 Twitter のアイコンを Perl スクリプトで更新する

現在も稼働中。

@ 2008年03月13日 Flickr の写真を自動的に Twitter アイコンにする

現在も稼働中。twitterfeed での Flickr 写真アナウンスとあわせて、いい感じにアイコンが入れ替わるのでいいと思う。

@ 2008年04月04日 MAILPIA による Twitter チェック

最近始めたケータイへのメール通知。様子見中。


[ 4月6日全て ]

2009年7月3日 (金)

全文検索システム Hyper Estraierアップデート このエントリーを含むはてなブックマーク

社内 Web ページ全文検索用に設定していた Hyper Estraier だが、かなーり前からたまにクロール/インデックス作成に失敗してインデックスが壊れてしまうことがあった。で検索できないまま放置していたのだが、やはり時々検索したいというリクエストをもらったので、復旧することにした。 Hyper Estraier も 1.2.7 のままだったので、最新版に更新。 設置が 2006年6月なので3年ぶりの更新。

前回と同様ソースからのインストール。 今回は自分のホームディレクトリ以下に。 以下作業手順メモ

@ QDBM

 wget http://qdbm.sourceforge.net/qdbm-1.8.77.tar.gz
 tar zxvf qdbm-1.8.77.tar.gz
 cd qdbm-1.8.77
 ./configure --enable-zlib --prefix=$HOME/local/hyperestraier-1.4.13
 make check
 make install

@ Hyper Estraier

 wget http://hyperestraier.sourceforge.net/hyperestraier-1.4.13.tar.gz
 tar zxvf hyperestraier-1.4.13.tar.gz
 cd hyperestraier-1.4.13
 PKG_CONFIG_PATH=$HOME/local/hyperestraier-1.4.13/lib/pkgconfig ./configure --prefix=$HOME/local/hyperestraier-1.4.13
 make
 make check
 make install

@ インデックスの作成とクロール

前回 /usr/local/var/lib/hyperestraier/estwaver に保存するようにしていたので、今回もそそれはそのままで。 クローラのルートにある _conf は作り直しの際に間違えて消してしまいそうになるので、ホームの etc においておいてシンボリックリンクをはっておく。 _conf は以前に作っておいたものを利用。

 mkdir /usr/local/var/lib/hyperestraier/estwaver
 $HOME/local/hyperestraier-1.4.13/bin/estwaver init /usr/local/var/lib/hyperestraier/estwaver
 rm /usr/local/var/lib/hyperestraier/estwaver/_conf
 ln -s $HOME/etc/hyperestraier/_conf /usr/local/var/lib/hyperestraier/estwaver/_conf
 $HOME/local/hyperestraier-1.4.13/bin/estwaver crawl -revcont /usr/local/var/lib/hyperestraier/estwaver

@ 検索インタフェース CGI プログラムを配置

 cd $WEBDIR/search/hyperestraier
 cp $HOME/local/hyperestraier-1.4.13/libexec/estseek.cgi .
 chmod 755 estseek.cgi
 cp $HOME/local/hyperestraier-1.4.13/share/hyperestraier/locale/ja/estseek.* .

で estseek.conf を編集。indexname を /home/naney/local/hyperestraier-1.4.13/estwaver/_index に。その他好みにあわせて設定を変更。

@ cron 設定

前回の設定では、クロールとインデックスの更新夜中に行うからインデックスがロックされてもいいやと直にオリジナルのインデックスを更新するようにしていたが、今回はきちんとコピーして更新するようにした。 1日1回以下のスクリプトを実行するように設定。

 #!/bin/sh
 PREFIX=/home/naney/local/hyperestraier-1.4.13
 VARDIR=/usr/local/var/lib/hyperestraier
 test -e $VARDIR/estwaver-copy && exit
 cp -a $VARDIR/estwaver $VARDIR/estwaver-copy
 $PREFIX/bin/estwaver crawl -revcont $VARDIR/estwaver-copy
 $PREFIX/bin/estcmd inform $VARDIR/estwaver-copy/_index || exit
 rm -rf $VARDIR/estwaver
 mv $VARDIR/estwaver-copy $VARDIR/estwaver

リクエストしてくれた人、検索できるようになったから使ってね。


[ 7月3日全て ]

この日記のはてなブックマーク数 Add to Google RSS

Process Time: 0.039939s / load averages: 0.39, 0.20, 0.15
nDiki by WATANABE Yoshimasa (profile)
Powered by DiKicker
Base theme by Nana (for tDiary)