トップ(最新) | <前

nDiki : Perl

Perl

Naneyがよく使用しているプログラミング言語。 この nDiki を提供している DiKickerPerl で記述されている。

ちなみに ``Perlプログラミング言語を指し、``perl はその実装を指す(perlfaq1)。

ライブラリ

WindowsPerl

PerlGUI

スポンサード リンク

Related term

2009年2月23日 (月)

PARDLL ファイルをロードできなかったら大文字小文字を疑え このエントリーを含むはてなブックマーク

スポンサード リンク

PDL を使っている Perl プログラムを、昨日構築した今ごろの環境で PAR を使って実行可能ファイル化したんだけれども、実行してみたら

 Can't locate loadable object for module PDL::Core in @INC ...

というエラー。 実行時のキャッシュディレクトリを見ると core.dll が同梱されていない模様。 なんでだー。

いろいろやってみたところ、もしやと思ってインストール済みの core.dll を Core.dll という名前に変えたらエラーが出なくなった(正確には次のモジュールで同様のエラーが出た)。

ファイル名の大文字・小文字が問題だったらしい。 PARFAQ には「Win32::Perms の Perms.DLL でこのエラーが出たら、Perms.dll にしてね」と書かれている。 最初これ拡張子の問題だけだと思っていた。 ベース名でも同様のようだ。

以前は問題なかったから、比較的新しい PAR で発生するようになったと思われる。 これ絶対はまる。

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


[ 2月23日全て ]

2009年3月13日 (金)

久しぶりの C++GNU Automake + CppUnit このエントリーを含むはてなブックマーク

ちょっとした文字列構文解析関係の C++ コードを書き始めた。 C++ は随分触ってなかったので「C++ で書き直すのを考慮してそれっぽく Perl で書くから後で書き直して」と最初は言っておいたのだが、それもあんまりだと思って C++ で書くことにした。

Debian GNU/Linux 上で書くので GNU Automake + CppUnit で。 「Perl + Test::Harness」や「Java + Eclipse + JUnit」や「C# + Visual C# + NUnit」などと比べるとやっぱりタルいな。

1つメソッド書くのに、

  • テストメソッドの宣言
  • テストメソッドの登録 (CPPUNIT_TEST())
  • テストメソッドの実装
  • メソッドの宣言
  • メソッドの実装

と 4ファイル5カ所編集しなければならない。 クラス追加時には Makefile.am にヘッダファイルとソースファイルをテストケース用のと含めて4ファイル書き加える必要があるし。

あー面倒。

でも C++ で書き始めると楽しいんだよなあ。


[ 3月13日全て ]

2009年3月19日 (木)

今日のさえずり - 「コメ兵」を「ベイヘイ」っていうな このエントリーを含むはてなブックマーク

naney:3362478711

@ 2009年03月17日

@ 2009年03月18日

  • 07:07 台所のブレーカー落ちた。ティファールの電気ケトルと電子レンジ(トースター)同時はやはり駄目だった。 [mb]
  • 11:58 Evernote のタグって階層化できるのか。タグ自体はグローバルで、表示上畳める以外の機能はないみたいだけれど。 *P3
  • 15:34 Doxygen 用のコメントちょこちょこっと書いた。 *P3
  • 19:13 鳥取は黄砂がすごいらしい(本社情報)。 *P3
  • 21:26 定額給付金申請書届いた。 [mb]

@ 2009年03月19日


[ 3月19日全て ]

2009年3月20日 (金)

TwitterアイコンPerl スクリプトで更新する (改) このエントリーを含むはてなブックマーク

Twitterアイコンを更新する Perl スクリプト (記事) が最近失敗することが多くなった。 どうやら同じファイル名画像アップロードするとうまく更新されないようなので、日時にもとづいたファイル名にしてからアップロードするようにしてみた。

最初に作った時から若干 Twitter のページ構造が変わってスクリプトも修正していたので、それと合わせると下記になる。

今のところ順調にアイコンチェンジできている感じだ。

 #!/usr/bin/perl

 use strict;
 use warnings;
 use WWW::Mechanize;
 use File::Temp qw(tempdir);
 use File::Spec;
 use File::Copy;

 die "no file name" if @ARGV == 0;
 my $file_name = $ARGV[0];

 my $name     = 'ユーザ名';
 my $password = 'パスワード';

 my $mechanize = WWW::Mechanize->new();
 $mechanize->get('http://twitter.com/');
 die unless $mechanize->success;
 $mechanize->submit_form(form_number => 2,
                         fields      => {
                                    'session[username_or_email]' => $name,
                                    'session[password]'          => $password}
 );
 die unless $mechanize->success;
 $mechanize->follow_link(url => '/account/settings');
 die unless $mechanize->success;
 $mechanize->follow_link(url => '/account/picture');
 die unless $mechanize->success;

 my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst)
   = localtime(time);
 my $tmpdir = tempdir(CLEANUP => 1);
 $file_name =~ /.*(\..*)$/;
 my $suffix = $1;
 my $tmp_file_name = File::Spec->catfile(
                                     $tmpdir,
                                     sprintf("%04d%02d%02d%02d%02d%02d$suffix",
                                             $year + 1900,
                                             $mon + 1, $mday, $hour, $min, $sec
                                     ));
 copy($file_name, $tmp_file_name) or die $!;
 $mechanize->submit_form(
                   form_number => 1,
                   fields => {'profile_image[uploaded_data]' => $tmp_file_name}
 );
 die unless $mechanize->success;

[ WWW::Mechanaize ]


[ 3月20日全て ]

2009年7月29日 (水)

今日のさえずり - キレイキレイで顔を洗ってみた。みんなにはないしょだよ。 このエントリーを含むはてなブックマーク

@ 2009年07月29日

  • 09:04 出社。けっこう汗かいたので、キレイキレイ(ハンドソープ)で顔を洗ってみた。みんなにはないしょだよ。 *P3
  • 09:16 昨日西友で割安なボトルコーヒーを買って持ってきたんだけれど、冷蔵庫で冷えるのが待てなくて結局缶コーヒー。 *P3
  • 09:33 会社のヒトはたまにしか Twitter 見ないのでヒミツ扱いなのです。あ、Twitter から Skype のムードテキストに自動設定してた。 RT @zakwa: @Naney ココに書いて内緒なんてありえない(笑)男性は思いっきり洗えてうらやましい。 *P3
  • 09:44 すごいサッパリです! RT @nakaji32: キレイキレイで顔洗うとどういう状態になるんだろう?殺菌されてさっぱりするのかな? *Tw* *P3
  • 10:16 Dell Dimension 4600C の電源が入らなくなった。 (Previous shutdown due to thermal event. Previous fan failuer.) *P3
  • 10:18 Dell のテクニカルサポートに電話したら、電源まわりのパーツは生産終了在庫無しで修理不能とのこと。合掌。 *P3
  • 10:32 参考のために聞いたところ Dell の引き取り修理となったら 22,500円(送料込み) + 部品代だったらしい。 *P3
  • 10:37 髪を10cmも短くしたのに誰も気がついてくれないと後ろの人が嘆いている。「髪の色明るくしました?」て聞いたらそれはしてないって。墓穴が深くなった。 *P3
  • 10:45 深すぎて2度と上がってこれなくなりそう。 RT @ken2754: @Naney 『気づいても、かわいくなったときしか声かけないもんですよ』と言って温泉でるまで深くするとか。 *P3
  • 13:13 これから午後半休。 [mb]
  • 13:22 カード買った。「G.C. は業界ナンバーワンです」って言われた。 [mb]
  • 13:31 イマココ! 長居無用な椅子中心のマクドナルド秋葉原駅前店。 L:東京都千代田区神田相生町1 [mb]
  • 14:02 @yep Perl スクリプトで Twitter からフィード引っ張ってきて、Skype API 経由で流しこんでます。プロフィールリンク先のサイトにサンプル載せてあります(外出先につき URL は明示できず)。 [mb]
  • 14:05 そろそろ恵比寿へ。今日は JR で。 L:秋葉原駅 [mb]
  • 14:22 息するの省略したいぐらい蒸し蒸しする。 L:田町駅 [mb]
  • 14:33 到着。 L:恵比寿駅 [mb]
  • 18:53 向かいの席の人がケチャまつりガイド見ている。うらやましい。裏表紙はアキラの広告。 [mb]
  • 18:57 今年のケチャまつりは7月30日から8月2日。 [mb]
  • 24:54 2009年7月29日の歩行: 7876歩、6.11km、67分、5.46km/h、消費 297.0kcal、脂肪燃焼 42.5g、4.3エクササイズ。 *P3
  • 26:04 Wi2 300 スタートキャンペーン 月額従量プラン申し込んでおいた。 *P3
  • 26:18 Wi2 300 は、BBモバイルポイントSpinNet で使えるし livedoor Wireless は FON_livedoor があるし Wi2 エリアに入る機会もほとんどないしということでキャンペーン中なので入っておくという感じ。今後に期待。 *P3

[ 7月29日全て ]

2009年8月5日 (水)

今日のさえずり - モノを貰うとすぐに写真を撮る人 このエントリーを含むはてなブックマーク

@ 2009年08月04日

@ 2009年08月05日

  • 12:31 同僚がすれちがい通信について熱く語っている。昨日ドラゴンクエストIX買ったらしい。 *P3
  • 13:42 Windows XP BOX の HDD に 21.75GB のパーティションが残っていたのに気がついて、NTFS でフォーマット中。 *P3
  • 19:46 ももいろクローバーまたきてる。 [mb]
  • 25:50 届出書類書いた。今回は鉛筆下書きなしで一発勝負。 *P3
  • 25:51 運転免許証で本籍確認しようと思ったら最新のやつには書いてないんだった。 *P3
  • 25:55 2009年8月5日の歩行: 5421歩、4.28km、42分、6.03km/h、消費 202.0kcal、脂肪燃焼 28.8g、2.9エクササイズ。 *P3

[ 8月5日全て ]

2009年8月20日 (木)

アクセサは foo と set_foo にしたい このエントリーを含むはてなブックマーク

オブジェクト指向プログラミングではほとんどの場合に必要となるアクセサについては命名規則にいくつかのパターンがある。

  1. 属性名に対して getter に get (get_)、setter に set (set_) をプレフィックスとしてつける。
  2. getter も setter も同じ名前とし属性名にする。
  3. setter のみ set (set_) を属性名にプレフィックスとしてつける。

1 番目は Java プログラミングでよく使われる。 またそれ以外でも広く使われている形式だ。 get と set 命名規則的に対になっていて規則的には美しい。 getter と setter を別々に検索するのも用意だし、プログラミング時にも誤解を招きにくい。

ただし例えば x、y、z のような短い名前の属性の取得の場合 obj->get_x などと、うるさい感じになってしまう。また obj->get_foo->get_var なども obj->foo->var などに比べてすっきり感がない。

2 番目は Perl でよく使われる。C# のプロパティへのアクセサは getter と setter が同じ名前になる。 呼び出し側ではコードが短くなりすっきりする。

ただし Perl の場合は引数の数を動的にチェックするために効率が若干犠牲になるのと、setter の機能が無いアクセサに引数を渡してもエラーにならないため見逃しやすいバグが潜んでしまう可能性があるなどの問題もある。Perl ベストプラクティスではこの形式ではなく1番目の形式を勧めている。

3 番目はあまり多くないかな。 getter に get がついていると個人的には重い印象を感じる。 getter を属性名だけにすることですっきりするとともに、setter は set_ と動詞がつくことでオブジェクトに働きかけるという印象を残すことができる。

命名規則が非対称なのでちょっと気持ち悪いといえば気持ち悪い。

Google C++ スタイルガイドではこの形式を採用している。

個人的には3番目がコードの見た感じにもすっきりしていて読みやすく、また getter と setter の区別も(1番目ほどではないにせよ)つきやすいので良いのではないかと思う。 2番目もよく使っていたのだが、しばらく3番目にしてみようかと思った今日このごろ。


[ 8月20日全て ]

2009年8月25日 (火)

ActivePerl をやめて Strawberry Perl このエントリーを含むはてなブックマーク

ActivePerl 5.10.0.1005 + Visual Studio 2005 SP1 上で PAR::Packer を使って実行可能ファイル化したものの、今日別の環境で動かしたら「このアプリケーションの構成が正しくないため、アプリケーションを開始できませんでした」というエラーがでてしまった。

今まで Visual Studio 6.0 で PPM パッケージの作成やら PAR::Packer による実行可能ファイル化をしていたので気がつかなかったのだが、調べてみると Visual Studio 2005 以降だとどうもいろいろ面倒らしい。

ActivePerl + PPM パッケージだと自分で PPM リポジトリを用意しておくことで、開発環境の統一が楽になるという利点があったのだけれどもしばらく一筋縄ではいかなさそうなので、別の Perl ディストリビューションを使ってみることにした。

Windows 上の Perl としてしばらく使ってみることにしたのは Strawberry Perl。現在のバージョンは 5.10.0.6。 以前にもちょっと入れてみたことはあったけれども、きちんと使ってみるのは初めて。

MinGW や dmake が同梱されており、CPAN.pm を使って UNIX 上と近い感覚で Perl モジュールインストールができる。 PAR::Packer を使って実行可能ファイル化した Perl スクリプトも実行できることを確認。

しばらく乗り替えてみることにする。


[ 8月25日全て ]

2009年10月23日 (金)

さくらのレンタルサーバ プレミアム申し込んだ このエントリーを含むはてなブックマーク

www.naney.org で使っているホスティングサービスは

  • SSH が使える。
  • daemon プログラムを起動しておいても怒られない。
  • cron が使える。

という点でいろいろ遊べるのだが、

  • 今の相場的にはかなり高めなのにホームが容量 100MB (メールは別に 100MB)。
  • Perl が10年以上前の Perl 5.005_03。自分で新しい Perl を入れようにも容量 100MB だと厳しい。5.005_03 だと Perl v5.6 系以降の文法が使えないし、使える Perl モジュールも限定されているので悲しい。
  • 夜中になると analog が動いてサーバが重くなる。
  • メールの送受信が遅延することがある。

などから使いづらくなってきた。 なにより容量を気にして記事を書き控えようという心理が働くのがよろしくない。 そろそろ今後を考えて他社に乗り換えようかと。

選んだのはやはり人気があって SSH も使える「さくらのレンタルサーバ」。

選んだプランは容量 10GB のプレミアム。 スタンダードでも容量 3GB でまずまずだし cron も使えるから機能的にも十分なんだけれど、1ホストあたりの収容ユーザ数により余裕があるであろう1つ上のプランにしておいた。

Web から申し込んで、風呂に入っている間に DNS 設定が反映されて SSH ログインできるように。 順次ソフトウェアインストール・コンテンツの移行とメールの設定をしてから、naney.org をこちらに切り替える予定。


[ 10月23日全て ]

2009年12月30日 (水)

Net::OAuth を使って Twitter からフィードを取得 このエントリーを含むはてなブックマーク

Twitter の replies (mentions) をフィードリーダや Plagger で読めるようにするために、Basic 認証Twitter にアクセスしてフィードをとってきてそのまま出力する Perl CGI スクリプトを書いて使っていたのだが、やはり Basic 認証が嫌なので OAuth 認証に書き換えた。

Net::Twitter モジュールだと取ってきたフィードが Perl のデータ構造になってしまいそのまま再度出力するのが面倒なので、Net::OAuth モジュールでリクエストを作って投げるようにした。

以下エラー処理等を省略したコード。

Web サイトに設置すれば(CGI スクリプト側で認証を済ませて)認証無しで replies のフィードが取れるようになるので簡単にフィードリーダで読めるようになる。

 #!/usr/bin/perl -w

 use strict;
 use warnings;
 use CGI;
 use LWP::UserAgent;
 use Net::OAuth;
 use Data::Random qw(rand_chars);

 $Net::OAuth::PROTOCOL_VERSION = Net::OAuth::PROTOCOL_VERSION_1_0A;

 my $consumer_key    = 'YOUR CONSUMER KEY';
 my $consumer_secret = 'YOUR CONSUMER SECRET';
 my $access_token    = 'YOUR ACCESS TOKEN';
 my $access_token_secret = 'YOUR ACCESS TOKEN SECRET';

 my $url    = 'http://twitter.com/statuses/replies.atom';
 my $method = 'GET';

 my $query = CGI->new;

 my $request = Net::OAuth->request('protected resource')->new(
   consumer_key     => $consumer_key,
   consumer_secret  => $consumer_secret,
   request_url      => $url,
   request_method   => $method,
   signature_method => 'HMAC-SHA1',
   timestamp        => time,
   nonce        => join('', rand_chars(ssize => 16, set => 'alphanumeric')),
   token        => $access_token,
   token_secret => $access_token_secret,

   extra_params => {count => '200'});

 $request->sign;

 my $ua = LWP::UserAgent->new;
 my $response;

 if ($method eq 'GET') {
   $response = $ua->get($request->to_url);
 }
 else {
   $response = $ua->post($request->to_url);
 }

 print $query->header('application/atom+xml; charset=utf-8');
 print $response->content;

[ 12月30日全て ]

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

Process Time: 0.106279s / load averages: 0.18, 0.13, 0.09
nDiki by WATANABE Yoshimasa (profile)
Powered by DiKicker
Base theme by Nana (for tDiary)