nDiki : CGI プログラム

CGI プログラム

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 形式にしてスタイルシートでデザインするのがいいのかな。

[ 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日全て ]

2010年3月12日 (金)

今日のさえずり - 英辞郎で英辞郎を検索

rimage:/nDiki/Flickr/4432182956.jpg

2010年03月11日

  • 08:38 ウルトラマンライブ2010「ウルトラ8兄弟の奇跡」のウルトラマンの顔ぶれが、自分の中の7兄弟と違いすぎて愕然。
  • 08:49 コンコースでホワイトデー用の何か売ってる。 (@ 秋葉原駅 w/ 2 others)
  • 12:11 ねぎ塩豚カルビ弁当(昼食) 398円。 (@ ファミリーマート神田佐久間町店) http://4sq.com/biJuCj
  • 20:11 特のりタル弁当(夕食) 390円。 (@ ほっともっと東神田二丁目店) http://4sq.com/arhPYT
  • 22:34 4月19日から京浜東北線・根岸線に女性専用車導入か。3号車(大船側から3両目)。いつも乗っている車両ではないな。大井町駅だと大宮方面行き 7:27 発から 9:26 発まで。

2010年03月12日

  • 09:38 オトクーポン退会(iモード関連整理の一環として)。
  • 09:41 @Meg_mama こんにちは。Xperia 予約して楽しみに待っています。価格未定ですが、各種ポイント充当で財布の負担を軽くしたいと思っています。
  • 09:45 前に座っている人のバッグに方眼ノートが入ってた。友達になれそうな気がした。
  • 09:48 お友達にナレソウ。 RT @hiro: @Naney 方眼ノートならいつもポケットに入っています
  • 09:55 秋葉原iPad よりデカイやつ。 http://movapic.com/...
  • 10:14 英辞郎で英辞郎を検索。「英辞郎 に該当する項目は見つかりませんでした。」
  • 11:07 RHODIA No11 のストックが無い。補充しなくては。
  • 12:19 めぼしいもの無かった。 (@ Starbucks Coffee)
  • 12:23 めぼしいもの無かった。 (@ 無印良品 アキバ・トリム)
  • 12:47 おにぎりセットL(昼食) 375円。 (@ サンクス秋葉原駅前店)
  • 17:56 XZ 平面上の回転行列のための sin の計算が間違えていて泣けた(自分が書いたやつ)。
  • 17:58 右手座標系3次元座標系の XZ 平面て混乱する。
  • 19:25 30時間超過の承認がおりた。
  • 19:39 大盛たらこスパゲティ(夕食) 398円。 (@ セブン-イレブン神田佐久間町店) http://4sq.com/cEfW1k
  • 20:27 納期直前だけど、ボスもそのボスもサクっと出ていった。
  • 20:55 CGI プログラムのことを CGI と言っちゃう奴出てこい。
  • 21:18 マジデスカ。 RT @yaizawa: ガラッ) RT @Naney: CGI プログラムのことを CGI と言っちゃう奴出てこい。
  • 21:18 一休みに万年筆にインクを補充して、また Visual Studio タスク一覧上の TODO つぶし。
  • 21:25 インタフェース自体の事を指したいこともあるので CGICGI プログラム/スクリプトはきちんと区別している。野暮だけど。
  • 21:34 ブラインドがカタカタなって「誰かそこに居るの!」と一人オフィスで何度もなるので、掃除のために開けた窓おわったら閉めて帰って欲しい。っていうか寒いし。
  • 21:46 「ありがとう!30周年今夜かぎりの春のドラえもん祭」観たいと思ったが、掃除当番の日ではないか。
  • 21:55 @madaaamj Web サーバが外部プログラム(CGI プログラム) を CGI というインタフェース(きまり)に従って実行してそのレスポンスを HTTP などのレスポンスとして返すという流れです。
  • 23:09 I'm at 秋葉原駅 (秋葉原駅, 千代田区) w/ 2 others. http://4sq.com/68fhHr
  • 24:23 @yamakiyo 自分のところにも何通かそういう文字化け通知メールがきてます。ここ数日の foursquare システム更新で何か変わったのかな。
  • 24:42 Pontaカード届いた。
[ 3月12日全て ]

2010年10月17日 (日)

今日のさえずり: 初鍋

2010年10月17日

rimage:/nDiki/Flickr/5092298374.jpg

  • 12:15Edyでゴールドポイント」が11月1日から始まるのか。スマートフォンにして以来 Edy を使わなくなっていたんだけれど、また使うかな。
  • 14:41 @yaizawa IS03、それって au なのよねぇ。
  • 14:50 @overlast こちらこそ勉強させていただきありがとうございました。「できるだけ自前で」について共感いたしました。過去にベクトル系の文書検索を研究・開発しておりましたが、データの準備とその知的財産権関係には頭を悩ませました。
  • 18:04 業務用デジタルカメラ -> 六切プリント -> PIXUS でスキャン -> GIMP で補正・切り取り -> PIXUS -> L判プリント
  • 18:54 初鍋。 http://movapic.com/...
  • 22:15 HootSuite for Android には twicca に無い機能としてリストの更新通知があるので ping というプライベートリストを作って通知させるように設定してみた。
  • 22:24 これで「リストの statuses.atom」-> 「OAuth 認証して取ってきて再度出力する CGI プログラム」-> Google リーダー -> Plagger -> Gmail を1つ止められるかな。
[ 10月17日全て ]

2011年3月6日 (日)

今日のさえずり: 昔は日本語の Tweet 通すのに末尾に半角スペース足すとかやってたよね

2011年03月05日

  • 11:09 RT @as_tone: 業務連絡:とげぞう廃棄しました(枯れてたので)。
  • 11:32 掃除機紙パック交換完了。
  • 21:12 NTTドコモの明細書をスキャンしていて、なんか無駄なことをしていることに気がついた。eビリングにすれば100円安くなるし。
  • 21:44 position: absolute の親要素を position: relative にすると親要素の位置が基準になるのね。body に min-width を指定するのにあわせて position: relative も追加。
  • 22:20 今日は外出しなかったので鼻が安らか。
  • 22:40 Naneyさんは2007/04/06に、世界で3624361人目のユーザーとしてツイッターを始めました。ツイッター歴は1429日目。合計16586ツイート、平均13ツイート/日です。 http://t.co/Q3SPa7V #itsukara
  • 23:40 他のユーザが Twitter いつ始めたかは Google Chrome 拡張 「Twitter Creation Date http://bit.ly/grRL9O 」で見てる。 #newtwitter 非対応らしいけど。
  • 23:49 Twitter、昔は日本語の Tweet 通すのに末尾に(いわゆる)半角スペース足すとかやってたよね。
  • 23:53 そういえば Twitter アカウント作った翌日にケータイ(iモード)から投稿するための CGI プログラム書いたんだっけ。 http://bit.ly/i6f6Lv

2011年03月06日

  • 07:06 月曜日の朝と勘違い。寝ぼけ。
  • 10:07 レンタルしてきた「となりのトトロ」流してる。
[ 3月6日全て ]

2021年8月13日 (金)

Next.js で nDiki を作り直そうと考えて引っ込めた

Web サイトの移行の話が出た流れで、この Web 日記についてちょっと考えたりした。

Perl で書いた自作の日記システム (CGI プログラム) で問題なく動いているが、手を入れずに使い続けているので将来環境(Perl やライブラリ)のアップデート時にハマるのではというのがあると、このまま記事が増え続けた時に問題が起きるのではというのがあり、気掛かりではある。

配信環境に依存しないように静的サイトジェネレータで生成する形に変えたらいいのではと、以前から思ったりしている。

ちょっとしか使ったことがない JavaScript を学ぶ機会としても Next.js とかどうかなとちょっと調べてみた。

個別記事ページを静的ページとして生成するのはいいとして、自動リンク機能で実現しているキーワード別ページとそのページングがちょっと厄介そう。やれるとしても今の URL 体系も一部変えなければいけないな。

今の日記システムに手を入れるのを再開して、 Markdown 対応させるのが先かな。

[ 8月13日全て ]

About

Naney Naneymx

Naney (なにい) です。株式会社MIXIで SNS 事業の部長をしています。

※本サイトの内容は個人的見解であり所属組織とは関係ありません。

Process Time: 0.026834s / load averages: 0.32, 0.33, 0.27