Perl

SOAP ではまったこと

Perl には型がありません。SOAP では と明示的に型が決まっているためにいろいろはまりました。以下はまったことをまとめます。 int型とdouble型 SOAP における数値型は 1、1 のように表現します。仕方ないので、 my $int_a = 1; my $dobule_b = $int_a . '.…

CGI についての誤解

自分も今の会社に入るまでは完全に誤解していました。 Perl == CGI という誤解 そもそも最近では CGI といえば PHP のほうが有名ですが、私もずっと誤解していました。Perl を使うということは、結局 javac Hello.java java Helloとか、 gcc -o main main.c …

Perl6 vs PHP5

Perl6 のチュートリアルを読んで思ったこと。「Perl は 5 で終わりだな・・。」 PHP5 の洗練された非常に簡素で美しいオブジェクト指向文法と比較すると、Perl6 の拡張文法はどう見ても破綻しつくした感じ。Catalyst がやっている sub Hoge : Private {} と…

車輪の再発明はやめよう

うちの会社には Web アプリケーション開発用のフレームワークがあります。しかし、今回のプロジェクトは試験的に Catalyst で開発することになり、ようやく Catalyst の学習期間が終わりつつあります。改めて思うことは「車輪の再発明はやめよう」という格言…

Class::DBI

こんな感じで使えてGoodです。 my @users = Hoge::Model::ClassDBI::User->search (disable => 0, {order_by => 'id'}); foreach my $user (@users) { # ごにょごにょ printf("%s,%s,%s\n", $user->id(), $user->name(), $user->pass()); }一瞬 $user->{'id'…

Catalystその後

バージョンがしょっちゅう変わる 最新版を追いかけるのをやめることで回避 その度に挙動がしょちゅう変わる 最新版を追いかけるのをやめることで回避 巨大なライブラリーなのでブラックボックスだらけ 諦める(笑) POSTで固まる orz XXX_server -r p YYYY …

Catalystに悪戦苦闘中

バージョンがしょっちゅう変わる その度に挙動がしょちゅう変わる 巨大なライブラリーなのでブラックボックスだらけ POSTで固まる orz Class::DBIの挙動がアホすぎる 一番軸を開発している人が夜中にならないと来ない(怒

自作仮想DBドライバ

Perlを使っている人には空気のように貴重な存在があります。それがCPANというPerlモジュールの図書館のような場所です。ここにはPerlハッカーによる無数のライブラリーが貯蔵されていて自由にインストールして使うことができます。 そのなかに DBD::Google …

PHP脆弱性を見て思ったこと

元ネタはこちら。http://itpro.nikkeibp.co.jp/article/NEWS/20051102/223939/ このセキュリティ・ホールは,ファイル・アップロードでグローバル・ シンボル・テーブル$GLOBALSが書き換えられることにより,リモート からPHP のスクリプトを実行される可能…

WSDL自動生成

WebAPIを公開するにあたって避けては通れないWSDLファイルを自動生成する方法です。といってもapache axis にはその機能があるのでそれを使うだけですが。 前準備 tomcat4.1 をインストール http://ftp.kddilabs.jp/infosystems/apache/ws/axis/1_2_1/ あた…

インターネットをかける泡

GoogleやAmazonでもうすっかりおなじみの WebAPI、別名 SOAP、日本語で訳すと泡が最近インターネットで大人気です。PerlでSOAPを使うなら以下のサイトは必見です。http://guide.soaplite.com/上記の記述を元にHelloモジュールを世界に公開しちゃいましょう。…

PerlからDBを使う

DBIモジュールなんて意識したことなかったのですが、調べる機会があったのでメモしておきます。 createdb test psql test create table test (id int, name text, date timestamp); insert into table (id, name, date) values (1, 'hoge', now()); insert i…

pdoc

私は「あるプログラムにおいて最新の仕様書は?」と聞かれたら間違いなくソースファイルと答えます。だからソースファイルから仕様書を作ってくれる、Javadoc や http://www.stack.nl/~dimitri/doxygen/ は開発にはなくてはならない存在です。JavaおよびC++…

EclipseでPerlハック

PerlによるCGI開発では、エディタを使う方が多いと思いますが、業界標準となりつつある(?)Eclipseでも開発できます。EclipeseでPerlのプログラムを書くにはEPICプラグインを使います。以下メモ的な手順です。 JRE5.0をインストールします Eclipse 3.0.1をイ…

レンタルサーバーでソースをコンパイルしちゃう方法

telnet.cgi をアップロードする 任意のソースコードをアップロードする コンパイルする g++ -Wall -O3 -o /tmp/a.out ~/public_html/cpp/hoge.cpp cp /tmp/a.out ~/public_html/cpp/hoge.cgi rm /tmp/a.out strip hoge.cgiあとはhoge.cgiを実行すればオーケ…

Iteratorパターン

オブジェクト指向プログラミングを身に付けるためには、デザインパターンを勉強するのが一番です。というわけでPerlでデザインパターンを実装してみます。 元ネタは こちら から拝借しました。元ネタはshift;を多用していたのですが、C++やJavaっぽく@_;を使…

ファイルアップローダー

Perlは現在勉強中の言語でわからないことが多いです。画像の登録等で使いそうなファイルアップローダーを作ってみました。CGIがおいてあるディレクトリのuploadディレクトリ以下にファイルをアップロードできます。uploadのパーミッションは777等で実行して…

真珠発 → 珈琲行(2)

この前のベンチマークの続きです。実行させるには Inline::Java モジュールと、JDKがインストールされていることが必要です。実行速度は1秒弱。Perlのコードよりは早いですが、JVMを起動させることがネックになっているのかインラインC++よりはかなり遅めで…

ベンチマーク

昨日の続きです。単純な加算を5000万回繰り返してどのくらい時間がかかるか見てみます。 bench_cpp.cpp(g++ -O3 -o bench_cpp.cgi bench_cpp.cpp) ネイティブだと0.04秒くらいで終わってしまいました。さすがに早いです。 #include <stdio.h> int main() { printf("</stdio.h>…

ちょっと変わったCGI

CGIというとRubyやらPerlやらで書く人が多いと思いますが、CやC++でも書けるようです。 hello.cppを次のように作ります。文字コードはEUCにしておいてください。 #include <stdio.h> #include <stdlib.h> #include <string.h> class Page { protected: char title[256]; public: Page() {}</string.h></stdlib.h></stdio.h>…

真珠発 → 珈琲行

CPANから Javaモジュール をダウンロードします java -jar JavaServer.jar JavaServerが起動します こんな感じで使います use Java; $java = new Java; $frame = $java->create_object("java.awt.Frame","Frame's Title"); $frame->setSize(400,400); $frame…

ことはじめ(2)

今日は継承の勉強です。bless関連がまだまだ理解しきれていません。コンストラクタの代わりに初期化メソッドを用意してしのいでみました。use vars qw($hoge); はC++でいうところのstaticフィールドのようです。またBEGIN節は一度しか呼ばれないようです。 H…

今日の成果

Perlにコンストラクタはない 階層はなるべく浅めに 継承を使いたいときは以下の呪文を唱える use base qw(Parent); も教科書に載ってました(汗) use strict; use vars qw(@ISA); @ISA = qw(Parent); インスタンスフィールドはパッケージのグローバルハッシ…

ことはじめ

とりあえずクラスを1個作ってみました。メソッド名の命名規則がJavaっぽいのは気にしないでください。 use strict; package Bug; sub new { my $class = $_[0]; my $objref = { _id => $_[1], _type => $_[2], _descr => $_[3], }; bless $objref, $class; …