読者です 読者をやめる 読者になる 読者になる

perl

Net::Twitter->updateのresをMojo::JSONに通すとidがズレる

TweetのIDはMojo::JSONを通る過程で丸められてしまう事がある、という話。 use feature 'say'; use Net::Twitter; use Mojo::JSON 'j'; my $nt = Net::Twitter->new( ... ); my $res = $nt->update( scalar localtime ); say $res->{id}; => 362827222706438…

TwitterのOAuth認証なボットを書くのは簡単

Twitterボットを書くこと自体はとても簡単だけれど、OAuth認証?面倒そう!って人がいそうなので、全然そんなこともないよ、と言う話を書いておこうと思う。いろいろ探すといくらでも出てくる情報ではあるのだけれど、APIへのアクセスをライブラリに任せてい…

IM::EngineとStardustで3分クッキング

YAPC::Asia 2009で(少なくとも個人的に)話題だったセッションから、StardustとIM::Engineを使って3分クッキングしてみる。(実際どのくらいかかるかはよくわからん。) 概要 Stardust(CPAN, github)は簡単に使えるCOMETサーバ。COMETでStardust…ああ、ネ…

perlでUTF-16LE + BOM

稀に、ファイルをUTF-16LE + BOMで保存したいということがある。そもそもBOMが付いている訳だから、エンディアンがどうであるかを気にする必然は無いと思うし、特定のエンディアンしか読めないのならUTF-16LEと言い切ってしまえば良い訳で、その場合BOMは無…

Storable

どうでも良い話なのだけれど、Storableって、どう読むんだろう?『すとらぶる』?『すとれいぶる』?いろいろ調べたのだけれど、分からない。ネイティブに聞けばいいんだろうけれど、近場にいないしなぁ。つーわけで、人力で聞いてみようかな。→question:114…

use lib

use libで複数のパスを指定した時、どっちが優先されるか。うる覚えで先が優先だったと思っていたのだけれど、確信が無かったのでid:hideokiさんに聞いた。プラグマ系は割とコードを読めば分かるよと教えてもらった。実際、perldoc -m libとすると、 sub imp…

StorableとIntel Mac

Perlの構造体を永続化するモジュールで、Storableというのがある。Storableは諸般の事情(バージョンアップで以前のバイナリが読めなくなったりするとか)の為に長期間の永続化には向かないが、キャッシュとかそういうのはわりとStorableでいいやという判断…

rand

Perlで簡単に乱数を使うときはrand関数を使う。ただこれ、乱数の種がtimeだったりして、短い間に複数回使うと同じ値が返ってきた。のでsrandで工夫する。てか、前はsrandを呼ばないとrandが呼べなかったし。これはいつの事だっただろうか。最近気になる事が…

マジカルなPerl

JavaScriptで、渡ってくる引数を全部取り出したくて、ちょっと調べた。つまり、Perlで言えば、次のようなことがしたい。 sub func { my @args = @_; ... http://www.openspc2.org/dhtml/javascript/arguments/index.html どうやら、argumentsで取れるらしい…

文字列の中から、特定の文字列の出現回数を数える

例えば、 my $str = 'はてなアンテナ、はてなブックマーク、はてなカウンター、はてなダイアリー';とあったとき、その中の『はてな』の個数を数えたい。私だと、ぱっと思いつくのは次のコードである。 my $count = $str =~ s!はてな!はてな!g;ちなみに$strを…

きよへろリファクタリング

id:kiyoheroさんがPerlを勉強し始め、そのソースを公開し始めた。Perlを勉強し始めてます - kiyoblo(@kiyohero)そうしたらid:naoyaさんがリファクタリング(?)記事を書いた。 きよへろの Perl コードをリファクタしようのコーナー - naoyaのはてなダイア…

2ヶ月前の末日を取り出す

例えば今日(10/11)なら、8/31を取り出したい。これが思ったより厄介な問題だ。原因は1ヶ月の日数が一定ではないという点。例え10/11から8月という月を取り出すだけであっても、単純に60日分の秒数を引けばよいということにはならない。1ヶ月で考えればよ…

JSONで遊びたい

JSONをいじってみようと思っていたのだが、うまい具合にデータを出してくれているところが少ない。(del.icio.usくらい?)そんなわけで、RSSをJSONに加工して、それで遊んでみることにした。 #!/usr/bin/perl use strict; use CGI::Carp qw(fatalsToBrowser…

useとrequireの違い

よく『大ざっぱに言うと最初に読み込まれるか、実行時に読み込まれるかだ。』みたいなものを見かけるが、大ざっぱじゃないところが知りたい。で、これまで見かけたいろいろを合わせると、こういうことなのだろうか? use Foo;は BEGIN{ require Foo; Foo->im…

Perl/CGI

mod_perlはかなり凄いということが分かったが、だから諸手を上げて何でもmod_perlというわけにも行かないのが悩ましい。mod_perlの唯一にして最大の弱点は、サーバにmod_perlがインストールされていて、ある程度権限をもらっていないと使えないということだ…

FillInFormのインスタンスを使い回す

mod_perl環境では、いったんロードしコンパイルしたインスタンスは永続的に使用可能である。従って、これを利用すればもっと速いんじゃないかという話。前回はCGI環境を想定したのでさらにmod_perlも考えてみよう。 というわけで、ベンチコード。 #!/usr/bin…

HTML::Template only VS HTML::FillInForm

さて、こうなってくると、毎度おなじみベンチマーク。 今回は、HTML::Template(test1)とTemplate::Tool(test2)ということにしました。その結果は、以下のとおりです。 HTML::FillInForm便利!って話なんだが、確かに便利そう。ただ気になるのは、HTML::P…

UNIVERSALクラス

自分用メモ。Perlでblessされて作成されるオブジェクトは、すべてUNIVERSALクラスを継承するらしい。という話を聞きつつ、これまで特に用は無かったで放っておいたのだが、最近ちょっと気になって調べてみた。 perldoc UNIVERSALUNIVERSALクラスでいくつかの…

Perl 6

ところで、噂?ではPerl 6ではメソッド呼び出しに矢印演算子ではなくてドットを使うらしい。Synopsis 6 - Perl.com相変わらず頭に$があって、さらにドット+メソッドというのがなんとも違和感を覚えるが、気にしないことにしよう。(ただ、別に矢印でも良か…

呼び出し方の続き

昨日はJava的と書いたのだが、よく考えてみるとJavaでこういう書き方をするのはコンストラクタだけだなぁ。何となく思ったので書いておく。 Class instance = new Class(); instance.do();こう考えてみると、コンストラクタでnew Class、メソッド呼び出しで…

メソッド呼び出しの書き方

Perlの場合、メソッド呼び出しの書き方が選べる。一つは my $instance = Class->new; $instance->do;のように矢印演算子を使うパターンと、 my $instance = new Class; do $instance;のようなJava的な書き方だ。TMTOWTDIを標榜するPerlらしい。出来ることは…

あ。

d:id:naoya:20050615:1118815343feed mergeのアップデート時に、XML::RSS::LibXMLに変えてみようかなー。

XMLRPC::Liteの警告

PingBadge ver.3を作っているのだが、-wオプションのせいか、どうもApacheのエラーログにwarningが出る。 XMLRPC::Transport::HTTP::CGI->dispatch_to('weblogUpdates')->handle;Use of uninitialized value in pattern match (m//) at /Library/Perl/5.8.6/…

デバッガ

perl -dでデバッグモードで動く。結構そっけないデバッガなので、通常はいわゆるprintデバッグで何とかしてしまう場面が多いんだが、モジュールを作りすぎて?大変なことになっているので、デバッガで追っかけることに。どうもこれ、あんまり効率が良いとも…

changes.xmlを利用したウェブリングもどき

changes.xmlを使って得たリストを、順にめぐっていけるようなシステムを考えてみる。一言で言えばウェブリングだが、順番が動的(更新順)であること、登録も動的(changes.xmlに載れば登録、消えれば削除)であること、ウェブリング用のリンクを張ってもら…

XML::Simpleを使ってみる

『正規表現でもいいけど XML::Simple もいいぜよ。』なーんて書いてもらっていたので、XML::Simpleを使ってみる。XML::Simpleは、XMLをPerlの構造体にしてくれるモジュール。要するに、XMLを食わせればPerlで扱える形にしてくれるというわけだ。これを使って…

前回のミス

ランダムジャンプのほうで、ちょっとミスというかなんというか。 $array->[ int rand $#{$array} ]->{uri}こうすると、ひとまずだいたい動くんだが、よく考えてみるとちょっとだけおかしい。分解して考ると…intは引数の小数点以下を切り捨てる、randは0以上…

changes.xmlのおさらい

はてなダイアリーがchanges.xmlの出力を始めたらしいので、おさらい。まずは仕様。→ http://newhome.weblogs.com/changesXmlchanges.xmlはweblogs.comが出していた、とてもシンプルなXMLで、更新されたURLのリストを配信するためのもの。単にURLだけを並べた…

カレンダーを作る

お仕事でカレンダープログラムを作ることになって、『簡単CGI: カレンダーを作ろう』なんかを参考にとりあえずクラスを作る。(長いので)一部削除しているが、公開されているものを参考にさせていただいたので、感謝を込めて肝のところだけ私も公開。 packa…

ヒント

灯台下暗し。『Catalyst入門: Actionの定義とその処理の流れ(前編) - qootas.org/blog』の一番下にヒントが。さっそく(時間のあるときに)perldoc attributesしてみよう。

属性ってなに?

Catalystをいじったりしているのだが、私程度の初心者にはなかなか厳しい。『Perl の MVC フレームワーク Catalyst に入門してみた : NDO::Weblog』などの記事を読みつつ、とりあえず見様見まねでやってみよう。上記にもあるのだが、: Globalやら : Private…

Perlセットアップ

昨日Perlモジュール関連をセットアップした。ncftp、expatを導入してからCPANシェルをセットアップ、XML::Parser、DBI、LWP、SOAP::Lite、…等々、必要なものを入れる。Class::DBIは失敗続きでこれまで入れていなかったのだが、いい加減に使ってみたいのでエ…

HTML::TemplateとDigest::MD5

数日前、結構制限された環境のサーバ用に掲示板を作っていた時、テンプレートシステムにHTML::Templateを使っていたのだが、内部でロードされているDigest::MD5が存在しない為に動かないと言う事があった。HTML::Templateの中身を読んでみると、md5_hexを一…

Catalyst

The CPAN Search Site - search.cpan.org Perl on Rails な Catalyst を試す - qootas.org/blog教えていただいたフレームワーク。はてなブックマークがメンテ中らしいのでこっちにメモ。家についてから遊んでみよう。

はてなブックマークナビゲータ

えーと、一般に出していいのか考えるところではあるが、分からないので取りあえず出しておく(それはどうか。404 Not Foundもともとデモンストレーション用で出すつもりはなかったのだが、これが自分の思っていたよりも面白い出来になってしまったので、ちょ…

1本のコネクションとの戦い

再三書いている通り、XMLHttpRequestは同時には1本のみ。そうすると、これだけでページ構成する事は、効率的とは言えない。同時に2ヶ所以上書き換えたい時には対応出来ないからだ。順に処理するならページ全体を書き直したほうが速い。結局、何事も万能と…

というわけでAjax

始めてやってみたが、結構面白い。重い事柄を分散処理したり、時間がかかる処理の前に画面表示だけ行なったりできる。サーバプッシュもどきのインタラクティブなインターフェースが作れるわけだ。また、1つのリンク(等)からいくつものプログラムを叩き、…

JavaScriptとオブジェクトのダンプ

XMLHttpRequestを使って、非同期通信する手に出てみた。処理に時間がかかるのだから、取りあえず表示出来るものだけ画面表示してしまい、裏でこそこそキーワード抽出を行なって、出来たものから表示させてみる。これ、結構面白そうだが、知らない人が見ると…

さらに実験…

今度はもっと大量のデータを全て順に入れてみる。適当に取ってきた50エントリー分のRSSの概要データだ。warnで進行状況を確認しながら実行させてみる。処理にかかった時間は1エントリーあたり約10秒、50エントリーなら500秒…。うーん、やはり実用に…

原因究明

たまたまお隣日記に出てきたid:naoya:20050408さんを読んで見ると、『正規表現をもりっとGETして』…なんて書いてあるってことは、それなりに実用になるという事か。うーん。そこで、まずuse utf8;を外し、正規表現ファイルをEUC-JPに戻し、さらにプログラム…

はてなダイアリー自動リンクAPIをどう使うか

http://d.hatena.ne.jp/hatenadiary/20040205/1075960162実は、ダイアリーの自動リンクではなくて、文中のキーワードを見つけるというただそれだけの為に、利用してみようと実験したのだが、これが案外シャレにならない。正規表現自体は1MB程度で、単純にキ…

XML::RSS::JavaScript

ついでに周辺技術なんかを小出しにして見ようかと思う。そんなに大したものは使っていないし、大した事をやってはいないのだが。(というか、私の腕ではこれが限界。)初期のfeed mergeでは、JavaScript出力にはXML::RSS::JavaScriptというモジュールを使っ…

スタック

スタックは、popとpushでアクセスする、ただの配列である。つまり、単にpopとpushでアクセスすると、自分で決めたものに過ぎないわけだが、何かの内側に入ったらpushでスタックを加え、出たらpopで一つ取り出してあげることで、ネストを上手い事解析出来るの…