このブログを検索

2010/03/14

新科目 TSHOOT

そろそろ試験を受けようと思ってciscoのページを見に行ったら、どうしても受ける気にならなかったONTとISCWの2科目がなくなって、TSHOOTという科目ができるようだ。
しかもこれを取ればCCNPになれる。まだベータで、英語だけど。

2010/03/10

friends_timeline

こんどは、皆の発言を表示させてみた。私は公式のWEBでほとんど十分なのだが、オートリロードしないのだけが不満だったので、それだけをやりたかった。tweetdeckとかtweenとかを使ってみたが、みなフォントが小さすぎるのだ。もっと大きく表示させたい。

friendsというAPIがあって、簡単に表示させることができた。適当に整形しながら、一向に発言内容が更新されないことに気付いていた。APIのアクセス制限にしては早すぎる。しばらく時間を置くと更新されたが、また更新されない。調べると、デフォルトでは100件しか表示できないとのことだった。更新日時を指定すれば、最近の発言を表示させることができる。が、それをどうやるのか・・・?

と、よく見たら、friends APIというのは、followしている人の一覧から、最後のtweetを集めて、100件まで表示するものだった。最近フォローした人からチェックしていき、100人分のつぶやきを表示したところで終わり。これは「フォローしている人の一覧」を表示するのと同じことだ。公式のWEBだと、ページ指定で100人以上表示させられる。Net::Twitter ではページ指定ができないようだ。表示したいのは、「自分がフォローしている人達の発言の中で、最新のもの」であるから、これではない。

friendsで取得して並びかえる必要があるのかな?面倒なので、その前にsearchを試してみる。

さっきのは、friends_timeline というAPIだった。簡単にできた。

おっと、フランス語が化けている。ファイルをutf-8で保存しないといけない。

2010/02/26

ARGV[0]をtweet

ARGV[0]をtweetしてみた。日本語がダメだ。utf-8で保存したテキストファイルを読んで書いたらいけた。140字を超える文字列を渡すと書けない。

2010/02/14

perlのtwitter bot

perlで、twitter apiを使って投稿してみる。BOTのようなことをするわけだが、BOTを作ることが目的ではない。あるサイトを参考にする。 必要なモジュールをインストール。

YAML::Tiny
Net::Twitter

Tinyはcpanでできたが、Twitterは64bitではどうのこうのと言ってエラーになるので、

ppm install Net::Twitter

でインストールする。前にもなんかで失敗して、ppmを使った覚えがある。以下のように書いて、アカウントとパスワードを書いた config.yml というファイルを作る。
#! /usr/bin/perl

use strict;
use warnings;
use YAML::Tiny;
use Net::Twitter;

my $config = (YAML::Tiny->read('config.yml'))->[0];
my $twit = Net::Twitter->new(username=>$config->{'username'},
password=>$config->{'password'});

$twit->update('I am not an animal.');

config.yml
username: your_account
password: your_password

スクリプトを実行する。
USER_NAME I am not an animal.
half a minute ago from Perl Net::Twitter

from Perl Net::Twitter は出したくないなあ・・・まあいっか。 

日本語はエンコードしないとダメか・・・・と調べかけるが、とりあえずやってみたら、いけた。さっき書き忘れたが、perlのスクリプトの文字コードは utf-8 で保存する。 よし、これができれば、後は発想しだい。

このページのポストを押したときに更新通知をするとか、ワンクリックでスクリーンショットをアップロードしてURLを通知するとか、やらないけど、spam的なこともできる。 参考にさせていただいたサイトは、とくに紹介しなくても多分有名なので検索すればすぐ見つかるでしょう。非常に親切で、ステップを追って説明されており、内容そのものもですが、表現・説明の仕方も参考になりました。

今回は下準備の段階のみ参考にした。ここが大事。いろんなことをやろうとしていつもつまづくのは最初。環境の問題、OSとかバージョンとかなんとか。これは、何かするときに机の上を片付けるようなもの。または、本を参照させるときにしおりを挟んでおくようなもの。「そこにあるよ」と雑然とした机を指差したり、「これ読めよ。目次でさがせよ」みたいな説明のしかたは、ダメ。手取り足取り教えてられない、社会は仕事はそんなに甘くない、というのはウソだ。それが仕事だ。サービスだ。われわれがしているのは奴隷の労働でも刑務所の作業でもないのだ。 仕事というのは、同じ事の繰り返し、単調な退屈なことの繰り返しがどうしてもある。だが、それはことごとく根絶すべきである。それを根絶するのが仕事でありサービスである。メンドクサイとかタイクツだというのは、別に甘えでもワガママでもない。機械にできることは機械にやらせる。 

道を歩いていて、真ん中に石が落ちていたら脇にどける。自分が通るためにどけた石を、また元の位置に戻して進んでいくような人が、たまにいる。 最近山登りをするようになったのだが、登り始めに必ず「一山」ある。息が切れ、足が重くなり、「こんな調子じゃとても頂上は無理だ」という気にさせられる。が、そこを越えるとすいすいと進む段階が現れる。そして、その後も苦痛や困難は訪れるが、一回乗り越えることを知っているので対処することができる。 しかし、先ほど言ったような前人が石を置いたような困難に出会うと、ダメだ。そういう困難に人は勝てない。そりゃうつ病にもなるさ。そういう道を行くと、そういう人が先に待っているということだ。そして知らず知らず、自分も先人のようになってしまう。

Internal server error 500 じゃ、なにもわからないからね。ftpdをいれて、apacheを入れて、perlをいれればいいんだろ?じゃ、スタート。

 10/02/12(Fri) 18:25

ip addressは、Windowsと同じサブネットの違うアドレスになっていて、ゲートウェイと、Windows pcのアドレスにpingは通る。resolv.confに、ゲートウェイのアドレスが書いてある。ということは、もうインターネットにつながっている。pingが通ることを確認する。 windows pcからftpしてみるが、応答がない。ftpdが無効になっているようだ。inetd.confの、ftpの行がコメントになっているので外す。反映させるにはどうしたらいいのか?わからないので、reboot。 rootのパスワードはなんだっけ?自分の慣例となっているパスワードを入れてみると、合っていた。 psしてみるが、ftpdはない。inetdだから、psではわからないのか。ftp localhostとしてみると、プロンプトが表示された。そしてすぐに気付いた、rootでftpはできないはず、アカウントをつくらないと。と思いはしたが、とりあえずログインしてみると、入れない。やっぱりダメか。

 10/02/12(Fri) 18:36

 アカウントを追加するコマンドは useraddだ。

useradd hogehoge

ホームディレクトリを作らなかったよ、みたいなエラーメッセージがでるが、無視して、パスワードを設定する。
passwd hogehoge

new passwordをきかれ、さらにretypeして設定できた。

windowsからftpすると、無事にログインできたが、ホームディレクトリがないよ、というメッセージが出た。後々面倒だからやっぱり作っておこう。が、後から作ってもパーミッションとかオーナーとかを設定もする必要があって、フォルダを作っただけでは不具合があったことを思い出したので、いったん

userdel hogehoge

で消して、
adduser hogehoge -m

でホームディレクトリを作るようにして作り直し、パスワードも再設定した。デフォルトで作れよ!って感じ。

 10/02/12(Fri) 18:52
じゃ、apacheいれようか。そうそう、virtual pcはX を立ち上げるとマウスを外に出すのに右Altを押さなきゃならないのでCtrl+Alt+BSで終了して、640x480のCUIにしておく。

apacheのインストールなんて、10年ぶりくらいだ。どうなってるんだろう、今・・・? 

apacheの公式サイトにいって最新版をダウンロードしようとしたがリンク切れ。公式サイトだろ?何やってんだよ、とひとつ前のバージョンをクリック。これはある。あ、webブラウザから落とせばいいのか、と、さっき落としたXをたちあげるも、ブラウザがないことに気付く。 netbsdにブラウザをインストール。ブラウザをインストール(笑)だと?なに?netbsdにはブラウザがない?lynx?まあいい・・・ pkgsrc とかいうものがあるのを知る。この後apachやらperlやら入れるから、pkgsrcとやらを入れておくか。 windowsでnetbsdのofficialサイトでありかを確認してから、コマンドでftpして入る。 idは anonymous、パスワードはなしで入れる。

bin
get pkgsrc.tar.gz

10/02/12(Fri) 18:54

その前になんでnetbsdなの?ってきかれるかもしれない。うーん、ちょっと仕事で使ったことがあって、そのときに家でも入れてみたのが、残っていただけで。なんかFreeBSDとほとんど同じっぽいので、いいかな、と。

 10/02/12(Fri) 19:02

 pkgsrc.tar.gzは /usrにダウンロードされていた。
tar xzf ./pkgsrc.tar.gz

なんだいこのおまじないみたいなコマンドは?キョウビiPhoneじゃワンタッチでアプリ入るんだぜ? と、なんかHDD関連のエラーメッセージが緑色に表示されて、停まってしまう。
wd0a: DMA error writing fsbn 25846540 of 25846540-25846543 (wd0 bn 25846603; cn 25641 tn 7 sn 34), retrying
wd0: soft error (corrected)

・・・・?なんだかよくわからないが最終的には正常になったようだ。同じメッセージが2回でる。とおもったらまた出る。何度も出る。もう3分ほどたっている。イヤな予感がする。

 10/02/12(Fri) 19:05

Ctrl+c・・・停まらない。何度か押す。停まった。もう一回やる。同じエラー。なんだよこれは!とりあえずrebootする。

 10/02/12(Fri) 19:09

さっき作ったアカウントでログインしてsuするが、「suできない」と言われるので、rootで入りなおす。またtar する。同じエラーがたくさん出る。とりあえず待ってみるか。 

10/02/12(Fri) 19:09

別の場所にコピーしたら直るかな・・・などと思う。こんなことやらせんなよ・・・ 

10/02/12(Fri) 19:19

 ダメそうなので、やめる。 windowsにapacheのソースを落として、ftpで移す。 httpd-2.2.14.tar.gz 解凍すると、同じエラーが一回だけ出たが、correctedとなって、解凍できた。

 10/02/12(Fri) 19:26 configureでエラーになる。さっさとあきらめて1.3.42にする。古いからな。

./configure
make
make install

ま、慣習だけど、なんで一発でインストールできないのかと思う。 終わった後、ここにインストールされましたよ、というメッセージがでる。コピペに失敗し、消えてしまう。
/usr/local/apache/bin

に、 apachectl というのがある。
apachectl start

で起動した。 windowsのIEからip addressでアクセスするとあの懐かしいテストページが表示された。 次はperlだ。www.perl.comから、perl-5.11.4.tar.gzを落とす。なんか、でかい。

./Configure (先頭は大文字)

すると、unstable releaseだという警告が出る・・・ったく・・。カレントリリースいうたやんけ!!と思いながら previous versionを落とす。 5.6.2 ./Configure すると、なんか言われる。どうもいくつか確認させられるらしい。急ぐなら ./Configure -d にしなさい、と書いてあったので、そうする。終わった・・・ which perl ・・・あれ、make してなかった・・・。make中もいろんなメッセージがダラダラと出たあげく、エラーでstopする・・・

cc: lib/auto/DynaLoader/DynaLoader.a: No such file or directory
*** Error code 1

・・・しらねえよ・・・。何がDynaLoaderだよ・・・どうせいらないんだろこれ?やっぱりpkgsrcから入れるべきなんだろうか・・・ バージョンをさげてみる。

5.005_04.tar.gz

拡張子がtar.tarになっている。リンクの表示名とファイル名が違っていたりリンクが切れていたり、かなりいい加減だ。がんばれがんばれ!落ちるなよ!! ・・・同じ。

pkgsrcをもう一回入れてみる。DMA errorが出まくっているが、すべてcorrectedとなるので、我慢して待っている。FreeBSDを入れてやり直したほうが速いかな・・・ ダメっすね。あきらめます。と思ったら終わった。

 10/02/12(Fri) 23:46

pkgsrcというのは、つまり、netbsdにインストールするプログラムというかアプリケーションというかツールというか、そういうものを管理するものだと思ったが、どうも、ソフトウェアそのもののようだ。あるサイトの案内どおりにアップデートしているのだがもう2,3時間たっている。 OSそのもののインストールよりはるかに長い。

 10/02/13(Sat) 06:35

 まだやってる・・・・。何してんだろう?

 10/02/13(Sat) 06:36 

bonoboとか・・・。明らかにいらない。apache, ftp, perlだけでいいのに・・・。 

10/02/13(Sat) 06:54 

だってもう、7,8時間経ってるんだよ。もちろん寝てたさ。だがここまで来ると最後はどうなるのかみたいので、これはこのままやらせておいて、やっぱりfreebsdをインストールしましょう。

 10/02/13(Sat) 07:11 バージョンは8.0

 10/02/13(Sat) 08:20 一度インストールしたがブートしない。やり直し。パーティションを A にするのを忘れたか?

 10/02/13(Sat) 10:57 だいぶ前にインストールが終わりました。ftpやらapacheやらperlやらは後でやります。netbsdの方は、まだやってます(笑)ほっときましょう! 

10/02/14(Sun) 09:46 どんな設定ミスだろうがなんだろうが24時間終わらない操作ってふざけんなよ!

 10/02/14(Sun) 09:48 freebsdはお急ぎインストールでやったら、nicのアドレスもゲートウェイも何も設定されていない。まず以下を設定する。 nicのアドレス(ifconfig, /etc/rc.conf) デフォルトルート(route, /etc/rc.conf) nameserver (/etc/resolv.conf) ftpとtelnetを有効にする(/etc/inetd.conf)

 10/02/14(Sun) 09:52 作ったアカウントでsuできないので、グループを変える。
usermod -n hoge -G wheel

ナンなの、wheelって。

 10/02/14(Sun) 09:53 さあ、perlだ! その前にxもいれとこうと思ったが、例のportのとこでまたなんかやりだした。膨大な時間がかかるという情報を見付けた。やや古い話だが丸二日かかるとか・・・馬鹿? なんだかウンザリしてきた。freebsdってこんなものなのか?あの味も素っ気もないWindowシステムが使いたかったのだが・・・また今度にするか。vineにはperlも入っていたのでこっちにする。

2010/02/12

RSS@perl

#!/usr/bin/perl -w
use strict;
use XML::RSS;
use encoding 'utf8';

use Jcode;


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


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 => "$3",
        );
    }
}

close SUBBACK;

print "Content-type: application/xml\n\n";

print $rss->as_string;

やっと書けた・・・。utf8フラグだのなんだのと悩んだが、

encode_output => 0


がポイントだったようだ。

ある方のソースを参考にさせてもらったのだが、そのままではうまくいかず、


use utf8;
binmode STDIN, ":utf8";
binmode STDOUT, ":utf8";


を、以下のようにした。

use encoding 'utf8';


めんどくさいねえ・・・。この辺も、仕様じゃなくてバグが潜んでるんじゃないかと思えてならない・・・。

あと、cgiはいきなりサーバーにあげず、とりあえずwinで動かしてエラーがないことくらいは確認するようにした。さくらと同じ環境をローカルに作れば一番いいんだよな・・・virtual pcでできるかな?

2010/01/30

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は、結局、閉鎖的で、クローズドで、お高くとまっている。

2010/01/24

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が返ってこなくなる。バグってるときもしょっちゅうあるが、ちゃんと書いていても返らないことがときどきある。

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