アーカイブ

‘Perl’ タグのついている投稿

Publish::Delicious, LivedoorClip で utf-8 フラグを落として post すると何故か文字化け

2009 年 1 月 27 日

Plagger を利用して、Hatena から Delicious, LivedoorClip に同期してるんだが、2ヶ月ほど前からこんな感じで文字化けするようになってた。

文字化け

文字化け

2ヶ月以上も放置してて、otsune さんからも IRC でつっこまれたので、ちょっと調べてみることに。タイミングとしては、XML::Feed::RSS かなにかが XML::Feed::Entry::Format::RSS とかに変わったあたりなんだけど、そのとき cpan モジュール沢山更新したから、あんまり関係ないのかも。

で、とりあえず試行錯誤でかろうじてわかったのは、Publish::Delicious.pm の場合、


    my $params = {
        url         => $args->{entry}->link,
        description => encode('utf-8', $args->{entry}->title),
        tags        => encode('utf-8', $tag_string),
    };

の部分の、encode をはずすと文字化けしなくなるってこと。Publish::LivedoorClip も同じ。

デバッグしてみても、「utf8::is_utf8($args->{entry}->title->data)」は 1 だし、encode した文字列はちゃんとフラグ落ちてたんだけど、なんでだろう。perl の仕組みも文字列の扱いも詳しくないからこれ以上わからない。

というわけで、とりあえず以下のようなパッチを宛てて文字化け回避したのはいいけど、ちょっと場当たり的。LivedoorClip も似たような感じ。


--- a/plagger/lib/Plagger/Plugin/Publish/Delicious.pm
+++ b/plagger/lib/Plagger/Plugin/Publish/Delicious.pm
@@ -32,12 +32,16 @@ sub add_entry {
    my $params = {
        url         => $args->{entry}->link,
#        description => encode('utf-8', $args->{entry}->title),
#        tags        => encode('utf-8', $tag_string),
        description => $args->{entry}->title,
        tags        => $tag_string,
    };

ついでに、Hatenaブックマークのフィードは、何故か entry_body にブクマした記事の概要が入ってて、summary のほうに自分のコメントが入ってるので、

$params->{extended} = $args->{entry}->body_text;

のところは、
$params->{extended} = $args->{entry}->summary;

に変えてしまった。

うーん。謎いです!

環境

  • Perl v5.8.8 built for i386-freebsd-64int
  • Encode 2.27
  • URI::Fetch 0.08
  • WWW::Mechanize 1.54
  • Net::Delicious 1.13

主要なのはこんな感じ?

似たような状況に陥ってる人はおらんのかな。

Programming ,

ubuntu の perl update で git-svn やらがエラー(でたので回避修正)

2009 年 1 月 24 日

今朝、何の update だったか忘れたが、perl のコアモジュール的なアップデートをした後、
plagger とか、git svn rebase などが、以下のエラーで動かなくなった。

% git svn rebase
 Errno architecture (i486-linux-gnu-thread-multi-2.6.24-14-server) does not match executable architecture (i486-linux-gnu-thread-multi-2.6.24-19-server) at /home/suvene/local/lib/perl5/Errno.pm line 11.
 Compilation failed in require at /usr/share/perl/5.8.8/File/Temp.pm line 138.
 BEGIN failed--compilation aborted at /usr/share/perl/5.8.8/File/Temp.pm line 138.
 Compilation failed in require at /usr/lib/perl5/SVN/Ra.pm line 6.
 BEGIN failed--compilation aborted at /usr/lib/perl5/SVN/Ra.pm line 6.
 Compilation failed in require at /usr/bin/git-svn line 30.

ググってみると、バグなのか、upgrade の順番が悪いのかわからないが、なにやら似たような状況の人もいる様子。

Bug #316013 in util-linux (Ubuntu): “apt-get dist-upgrade failed – architecture (i486-linux-gnu-thread-multi-2.6.15.7) does not match executable architecture (i486-linux-gnu-thread-multi-2.6.24-14-server)”

ここの中を読んでると、以下の対応方法がリンクされてて、#post5  の通りやったらエラー回避できた。

[ubuntu] apt-get upgrade fails for 8.04.1 Server – Ubuntu Forums

方法は、まんま書いてある通りだが、

  1. % vim /home/suvene/local/lib/perl5/Errno.pm11~13行目のエラー吐いてる箇所をコメントアウト
    11 #"$Config{'archname'}-$Config{'osvers'}" eq
    12 #"i486-linux-gnu-thread-multi-2.6.24-14-server" or
    13 #    die "Errno architecture (i486-linux-gnu-thread-multi-2.6.24-14-server) does not match executable architecture ($Config{'arch    name'}-$Config{'osvers'})";
  2. % sudo synaptic(GUI の使える環境で)
    全てアップグレードした後閉じる。(念のため reboot したほうがよいかも?)
  3. % cpan -f Errno(もしくはコメントアウトした箇所を元に戻す)

以上で完了。

何のエラーだか詳しくよくわからんかったのだが、とりあえず ok?

Links



Programming , ,

他のOOPをやったことある人がPerlをはじめるときにお勧めの本(やさしめ)

2008 年 11 月 5 日

Perl をはじめて触ったのは、7~8年前で Perl4 の頃だった。(ような気がする)
その頃は、CGI の掲示板やチャット、カウンターなどが全盛で、Object指向 で作られたものはほとんどなく、ライブラリを共通関数郡のような感じで纏めてあるのを、静的にコールして使うようなのが主流だった。(たぶん)

それからは、たまに小さなプログラムを Perl で書いたりするものの、ちゃんとしたサービスなどを作ることもなく現在にいたる。読むことはできるが、ソラで Perl を利用して効率よいプログラムを書くことはできない。そんな感じ。

で、最近何故か Perl を学びたくなって、よい本はないかなぁと模索。

俗に言われる、らくだ本 がよいのかなぁ?と思い、近くの本屋にいくも、見つからず。
代わりに、以下の本を買ってきた。

すぐわかる オブジェクト指向 Perl
すぐわかる オブジェクト指向 Perl 深沢 千尋

技術評論社 2008-06-20
売り上げランキング : 24902

おすすめ平均 star
starWEBの海での救命道具のような本
starマスターコースを読む前に

Amazonで詳しく見る by G-Tools

この本は、「オブジェクト指向」とタイトルに含まれつつも、最初の方はスカラ変数($)、配列(@)、ハッシュ(%)、サブルーチン(&)、及びそれぞれのリファレンス(参照)の説明に費やし、その後にライブラリを使った小さなサンプルを継続的に拡張しつつ、ライブラリ化したりモジュール化したりしながら、最終的にクラス・インスタンス・継承など作成・説明をし、最後に CPAN・モジュールを利用した簡単な CGI プログラミングという、段階をおった構成になっている。
「オブジェクト指向とは何たるか」という説明はほとんどなく、というか、逆にないので Perl の理解に頭を使えてよい感じ。(まぁ、もともとやさしい内容を詳しく説明してくれてんだけど)

今までなんとなくしか知らなかった、レキシカル変数(my) や our の説明。map や sort の使い方。色々な Syntax などを順を追って説明してくれるので、概念の理解がしやすい。

この本のよいところは、「構文はこうです。使い方はこうです。」というような感じで、いきなり答えを書くのではなく、まずは冗長なプログラムを書きつつ、動作などを理解したうえで、「実はこう表現できます」という説明があって、中身まで理解しやすい構成であること。そして、その説明の中に少しだけ難しい書き方がしてあって、今度はその部分をじっくり説明をしてくれてること。

なんだか、文章にすると意味わかんないが、いわゆる受験勉強にありがちな「公式だけを覚えてひたすら使い方を繰り返す」みたいな面白みのない苦痛な作業のような感じではなく、楽しく読みすすめられる感じ。

まぁ、後はどんどんいろんなモジュールを読んだり書いたりしていくのが、手っ取り早い方法なんだろうけど、
「他の OOP 言語はある程度理解してるけど、Perl はいまいち」
って人のいっちばん最初の取っ掛かりには、とてもよい本だと思いました!

いずれはらくだ本も読みこなしたい。

「すぐわかる オブジェクト指向 Perl」の目次

- 第1章 いきなりモジュールを使ってみる
- 1-1 本書のあらすじ
- 1-2 File::Find モジュールを使ってみよう
- 第2章 「参照」は小粒でピリリと辛い ~スカラー リファレンス~
- 2-1 リファレンスとは何か
- 2-2 リファレンスのデリファレンス
- 2-3 デバッガーを使ったプログラムのステップ実行
- 2-4 名もないスカラー~無名スカラーリファレンス~
- 第3章 配列のリファレンス
- 3-1 配列のリファレンス
- 3-2 配列要素へのアクセスと矢印記法
- 3-3 2次元配列
- 3-4 シンタックス シュガーが利かない場合
- 3-5 無名配列
- 第4章 ハッシュのリファレンス
- 4-1 ハッシュの復習
- 4-2 ハッシュ リファレンス
- 4-3 無名ハッシュ
- 4-4 2次元ハッシュ
- 第5章 サブルーチンのリファレンス
- 5-1 サブルーチンの復習
- 5-2 サブルーチンのリファレンス
- 5-3 無名サブルーチン
- 5-4 サブルーチン リファレンスの応用
- 第6章 ライブラリを取り込む require
- 6-1 サブルーチン ライブラリの作成
- 6-2 ライブラリの格納場所と配列変数 @INC
- 第7章 名前空間を作る package
- 7-1 パッケージとは何か
- 7-2 package とライブラリ
- 7-3 パッケージ変数、my 変数、 そして our 変数
- 第8章 モジュールを使う use
- 8-1 モジュールと use
- 8-2 import による名前の輸入
- 第9章 オブジェクト指向モジュールの活用
- 9-1 オブジェクト指向と Perl
- 9-2 CPAN の活用
- 第10章 静的クラスの作成
- 10-1 クラスとメソッド
- 10-2 クラスの継承
- 10-3 現状での到達点
- 第11章 オブジェクトクラスの作成
- 11-1 オブジェクトとは
- 11-2 オブジェクト クラスの作成
- 11-3 オブジェクト クラスの増強
- 第12章 演算子のオーバーロード
- 12-1 オーバーロードとは
- 12-2 変換演算子のオーバーロード
- 12-3 四則演算子のオーバーロード
- 12-4 特殊演算子 nomethod
- 第13章 オブジェクトクラスの継承、デストラクタ、永続化
- 13-1 オブジェクト クラスの継承
- 13-2 デストラクタ
- 13-3 オブジェクトの永続化
- 13-4 コンポジション
- 13-5 CPAN モジュール / コアモジュールの継承
- 第14章 オブジェクト指向 モジュールを使った CGI
- 14-1 CGI.pm を使おう
- 14-2 レンタル サーバーへの CPAN モジュールのインストール
- 14-3 ユーザー入力の実装
- 付録

その他書籍

- プログラミングPerl〈VOLUME1〉
- プログラミングPerl〈VOLUME2〉



Programming ,

[Perl]CGI::Session・Hatena::API::Auth・Zer0Reader

2006 年 10 月 13 日

Perlの勉強がてらと、次のステップの為にZer0ReaderにHatena認証組み込んでみた。
認証自体は Hatena::API::Auth が CPAN にあるから、簡単だったんだけど、Session管理がめんどくせえええええええぇええぇええええええ!

ってか、CGI::Session 使えば簡単にできるんだが、Windows+AnHTTPd と Linux + Apatche で動作が違うんだよなぁ。

$session->close(); して $session->delete(); してるのに、ファイル消えないし。
ッつー訳で、ごちゃごちゃ触ってるからログインしてたのにログアウトになってたり、ログインできなかったりするかもしれないけど、ゴメンネ!

一番困るのは、CGI::Session->new する時に、第二引数に undef 渡してるのに、SessionID が変わらないこと!
今のままじゃ、普通に Session Fixation でまずいんだがw

あー、もう!

寝る。

追記(2006/10/13 12:00)
昨日は眠かったようだ。
新しいセッション作った後、Client に新しい SessionID の Cookie 発行してなかったw
ファイルもちゃんと消えてるっぽい。こっちも凡ミス。
眠いときは素直に寝ましょうって事で。



Programming

[perl]ppmでインストールする時にproxy

2006 年 9 月 19 日

ppm でインストールしようとして 500 Can’t connect とか出て困ってたら、プロクシ設定しないとだめだった。
環境変数に HTTP_PROXY を設定しなきゃならんらしい。。

面倒なときはコマンドプロンプトで
> set HTTP_PROXY=http://proxyserver:port
とうってから
> ppm
すりゃいけますよって話。
(あ、どうせ LWP::UserAgent とか使うときいるから、結局設定しないとだめだけど)

あと、perl5.8.8.818(build 818) から ppm がバージョンアップして、4.0になってデフォルトGUIになってんだけども、plaggerのインスコうまくいかないときあるらしいから
Index of /ActivePerl/Windows/5.8
から、build 817 以前のものをインストールすりゃいける。
ただ、脆弱性のパッチ当たってたりするかもしれないから内部用って事で。

どうしても、最新 ActivePerl がインストールしたかったら
Charsbar::Note – PPM 4.x対応しました
でもいけるらしい(未確認)。

どちらにしろ、Windows で cpan 設定してインストールする面倒さを、ぷりっっと ppm 経由でインストールできるのはありがたい事だ。
charsbar のおかげ。
感謝感謝。

* 参考記事
perlwin32faq11 – Using PPM to install modules
Charsbar::Note – ppm.tcool.orgで411エラーが出る件
Charsbar::Note – PPM 4.x対応しました



Programming