iPhoneを持って

人生変わった。腰痛が治り、よく眠れるようになり、接する人が私を見る顔が明るくなった。偶然かも、気のせいかもしれないが。

だが、iPhoneは素晴らしいデバイスだ。iPhoneはiPod touchでもある。iPod touchは持っている人がいてちょっと見たことがあって、いいなと思っていたのだが、iPhoneはそれに電話と、webなどが付いているのである。

webは、基本的にPCサイトブラウザである。ズームインアウトが可能なので、小さい画面でも不具合は少ない。ブログやらニュースやらはRSSフィードをアプリで読む。メールは専用のアプリがある。アプリはapp storeからダウンロードするが、こだわらなければたいていのものは無料のものがある。

すっかりappleに魅せられて、アプリを作りたくなって、Windows7をやめてMACを買おうと思い始めた。MACは「PC」ではない。パソコンではない。MACはMACなのである。そんなところへiPadの発表。5万円だという。だが、私はそのうちこのappleが先駆けたテクノロジーはあっという間にマネされて、MACがパソコンやOSのシェアを奪うことは無いと見ている。テクノロジーは容易にマネできる。appleは、結局、閉鎖的で、クローズドで、お高くとまっている。

RSS@perl

今perlでrssフィードを配信するスクリプトを書いている。といってもWEBでさがしたサンプルをそのまま使っているだけだが。それが、うまく動かない。スクリプト内に日本語を書くと実行できなくなる。文字化けするのではなく、実行ができないのだ。

多分文字コードの問題だと思う。ただのhtmlなら、そのまま直接日本語を書けば表示されるが、rssフィードはxmlであり、このとき日本語はutf-8でないとダメなようなのである。・・・と、ここまで書いて、わかった。スクリプトはeuc-jpで保存する。

さて、それでとりあえずリテラル文字列なら日本語が書けたのだが、ファイルを読み込んでその中の日本語を出力できない。Jcodeで変換させるだけでエラーになる。文字コードの指定が間違っているのか。sjis -> utf-8 だと思うのだが。念のためにeuc-jp -> utf-8なども試してみたがダメだ。




#!/usr/bin/perl -w

use strict;
use CGI::Carp qw(fatalsToBrowser);
use XML::RSS;

my $rss = new XML::RSS (version => '1.0');
$rss->channel(
    title        => "example.com",
    link         => 'http://example.com',
    language => 'ja',
    description  => "abc",
);


open SUBBACK, "<./subback.txt" or die;

while (<SUBBACK>){
    if(/(\d*),(.*),(\d*)/){
        $rss->add_item(
            title       => "$1",
            link        => "http://example.com/cgi-bin/main.cgi",
            description => "$3",
        );
    }
}

close SUBBACK;

print "Content-type: application/xml\n\n";
print $rss->as_string;




  1. perl(cgi)スクリプトの文字コード

  2. use encodingの文字コード

が一致していないときに、リテラルで日本語を書くとエラーになる。

とりあえずエラーは出なくなった。

化けてはいるが。

#!/usr/bin/perl -w

use strict;
use XML::RSS;
use encoding 'utf8';
use Jcode;

my $rss = new XML::RSS (version => '1.0');
$rss->channel(
    title        => "example.com",
    link         => 'http://example.com',
    language => 'ja',
    description  => "abc",
);


open SUBBACK, "<./subback.txt" or die;

while (<SUBBACK>){
    if(/(\d*),(.*),(\d*)/){
        my $jp = $2;
        Jcode::convert( \$jp , 'utf8', 'sjis');
        $rss->add_item(
            title       => "$jp",
            link        => "http://example.com/cgi-bin/bbz/main.cgi",
#           description => "南無阿弥陀仏",
            description => "test",
        );
    }
}

close SUBBACK;

print "Content-type: application/xml\n\n";
print Jcode->;new($rss->as_string)->;utf8;


ファイルを保存するときの文字コードと、use encodingが一致しないとエラーになる。ただしそれは日本語リテラルを書いた場合。(ファイルから読んだ場合も同じか?)

読み込んでいるタイトル一覧ファイルのエンコードはsjisなのは間違いない。だからそれをutf8に変換しているのだが・・・化ける・・・。コードの指定をあれこれ変えたりしてもダメ・・・。

そんなことをしていると、ときどきcgiが返ってこなくなる。バグってるときもしょっちゅうあるが、ちゃんと書いていても返らないことがときどきある。

とりあえずこのソースで一度は動いた。もう気が狂いそうなので今日はここまで。朝飯にする。

iPhone, リナザウ, xxx

なんか欲しい。

特に必要ではないのだが。

この3つは、なんか持ってないとダメみたいな匂いがするので。