ActionScript 3.0 について、ちょっと調べてみた。Flex SDKを使えば、プログラム開発できるということで、興味がでてきましたが、どれくらいのものなのでしょう。ネットワーク用クラスもあって、結構いろいろできそうですが。
「Program」カテゴリーアーカイブ
MailForm Plugin for Movable Type
MTOSへMailFormというプラグインをいれたのですが、メール送信で文字化けが発生して大変でした。とりあえず、パッチを作って対応しましたが、いかにも付け焼き刃的な対応のような気がします。とはいえ、ソースコードがこうやって公開されていると、自分で対応できることがあるので、嬉しい限りです。MailFormのライセンスが明確でないのがちょっと気にはなりますが…
Six Apart – Movable Type プラグインディレクトリ: MailForm
http://www.sixapart.jp/movabletype/plugins/mailform.html
ちなみに、文字化けが発生したのはアルファメールというサービスでMTOSを動作させようとしたときでした。具体的な対応策としては、MailForm.pm でMT::Mailを使ってメール送信をする前に下記の処理を追加しただけです。head{Subject}へ値を代入をしている行の直後に下記をいれておけばいいはずです。
eval "require Jcode;";
$mail_body = Jcode->new($mail_body)->jis;
$head{Subject} = Jcode->new($head{Subject})->mime_encode;
$head{'Content-Type'} = 'text/plain; charset="ISO-2022-JP"';
ちょっと記憶をたよりに記事を書いているので、変数名とか間違えているかもしれません。そのあたりはコードをよく読んで確認をしてみてください。Perlは大体こんなもんだろう、というのはわかるのですが、細かい文法までは覚えていなかったので、場当たり的に動作確認をしながら対応しました。そういうことをしていると、やはり時間がかかってしまいます。やれやれです。
Java and Ruby
さっと読んでみました。オブジェクト指向言語ということで、どちらもプログラミングしやすいのですが、PHP5とかも最近はいい感じだと聞いています。これからの主流はどの言語になるのか、予想しにくいですね。Pythonとかもありますし、Scalaとかもあるし。
JavaとRuby:主要機能の比較 (japan.internet.com コラム/developer.com)
http://japan.internet.com/column/developer/20080408/26.html
ps2pdf.php
こんなかんじじゃなかろうかと。
# cat ps2pdf.php
<html>
<head><title>ps2pdf</title></head>
<body>
<br /><br />
< ?
$command = ‘/usr/bin/ps2pdf’;
$dir = "/var/www/html";
if (!empty($_FILES)) {
$uploadedFile = $_FILES[‘uploadedFile’][‘tmp_name’];
$fileName = $_FILES[‘uploadedFile’][‘name’];
$file = $dir . ‘/’ . $fileName;
move_uploaded_file($uploadedFile, $file);
$exeCommand = $command . ‘ ‘ . $file;
exec($exeCommand, $output, $ret);
$downloadFileName = ereg_replace(‘\.ps$’, ‘.pdf’, $fileName);
$downloadFile = ‘<a href="’ . $downloadFileName . ‘">’ . $downloadFileName . ”;
echo $downloadFile;
?>
< ?
} else {
?>
<form enctype="multipart/form-data" action="/ps2pdf.php" method="post">
<input type="file" name="uploadedFile"/>
<input type="submit" value="submit"/>
</form>
< ?
}
?>
</body>
</html>
KisoJava 6
改訂版 基礎 Java を執筆するにあたって意識した事 その6
KisoJavaをキーワードとして、Google検索をすると本サイトがトップになることに気がつきました。稀少なキーワードとはいえ、トップというのは、なかなか凄い事ではないか、と勝手に思う事にしたいと思います。
「KisoJava 5」では文字や数値の表現について取り上げた理由を述べました。今回は、ファイルの入出力について、取り上げた理由についてです。
プログラミングの基礎という観点からすると、実はファイル入出力というのはできてもできなくても、それほど重要ではありません。メモリにあるデータを扱うプログラムの方が、データをプログラム中で用意できるので、実装するべきプログラムの処理をどうすればいいのかを考えることに集中できます。最近はやっているJUnitでも、テストデータはテストクラスに持たせて、そのクラス内でテスト用のデータを初期化したりするのが普通でしょう。これは、ちょっとしたプログラムを作成するなら、そのままプログラム内でデータを用意する方が手っ取り早いからです。そう考えてみると、ファイル入出力については説明しなくてもプログラミングの基礎を学ぶ事は十分可能なのです。
では、なぜわざわざファイル入出力のサンプルプログラムを採用したのかというと、まずは、プログラムの処理結果を補助記憶装置へ保存するためには必要な機能だということが挙げられます。こういった実用的な機能は是非一度は見ておくべきですし、電気を切ったら計算結果が消えてしまうプログラムしか作成できないというのは、ちょっと寂しいと思いました。
また、コンソール画面を使った対話的な処理を実装するためには、標準入出力を利用するプログラムが必要です。GUIアプリケーションの作成についてはあきらめましたが、CUIアプリケーションの作成についてはきちんとできるようなJavaプログラマに読者にはなってもらいたいと考えたので、採用したのです。
標準入出力などというのは、UNIXやWindowsなどのOSを勉強したことがないと、わかりにくいものかもしれませんが、CUIアプリケーションを作成するためには避けて通ることはできません。クラスやメソッドなどについて、Part 1ではまともに説明していないため、難易度的にはかなり高いような気がしますが、できるだけ、プログラミングが初めての人でも理解できるような説明を心がけたつもりです。
ところで、ファイル入出力用のプログラムを解説するにあたって、ここでもBeanShellを使っていて良かったことがあります。それは、BeanShellを使っていると、例外については基本的に考える必要がないという点でした。Javaプログラムでファイル入出力について話をしようとすると、かならず例外がつきまとうので、それについて簡単に説明するとか、throws Exceptionをメソッドへつけてtry文がでてこないようにして文法の説明を後回しにしたりする対応が必要でした。ところが、BeanShellではそういった説明は必要なく、とにかくファイル入出力用プログラムを作成するために重要だと考えられる点だけ説明をすれば済むので、初心者にはわかりやすいと思っています。もちろん、内容の難易度としては難しいので、簡単だとは言えませんが、例外などについて考える必要がない分、Part 1の内容を勉強する人にとっては負荷が低いはずです。
KisoJava 5
改訂版基礎Javaを執筆するにあたって意識した事 その5
「KisoJava 4」ではPart 1のサンプルについて考えた事を述べました。今回は、数値の表現や文字の表現について説明した理由について述べます。
プログラミングを意識するまでは、なぜ2進数しか扱えないコンピュータが文字を表示することができるのかを考えた事もない人が多いはずです。そのせいか、コンピュータ画面に表示される「1」は、内部でも1の値だと勘違いしてしまう人が多いようです。何を言っているのか難しいですね。説明がしにくいのですが、文字としての「1」と数値としての「1」は違うものなのですが、それがなかなか理解できないのです。
プログラミングを理解するにあたり、このことについて理解することは、実は必須ではありません。計算ができればいいということなら、JavaであればIntegerなどを使って計算すれば何の問題もなく計算できますから、わざわざコンピュータ内で数値や文字がどのように表現されているのかというのは知らなくても、とりあえず、こう書けばいい、と覚えてしまえば、なんとかなるのです。
では、なぜわざわざ書いたのかというと、日本語を扱うにあたっては必ず文字の表現方法については理解が必要となる場面に会いますし、そのときに文字コードの原理だけでも知っておけばずいぶんと違うだろうと思ったのと、整数や小数点数もどうやって2進数で表現しているのかを原理的に知っておけば応用がききますから、避けて通るべきではないと考えたのです。こういった表現方法がいろいろあるということを理解できると、データ型がなぜ存在しているのかも理由がわかるはずです。データ型を導入することにより、メモリをどうやって使うのか、どの領域に文字をいれるのか、数値をいるのか、といった計算を人間がしなくても済むようになりました。こういった計算は、ソースコードをコンパイラがコンパイルするときに行って、問題がないかチェックしてくれるようになったのです。
また、単純なプログラムを使う事で、2進数の世界を簡単に表現できるのも、ぱっと見は地味なのですが奥が深くて良い例題だと思っています。「ファイルにどんな値が入っているのかをバイナリデータとして表示するプログラム」というのは、ファイルを生成するプログラムなどで文字化けが発生していた時に確認のために使えたりします。もちろん便利な既存のツールを使ってチェックすることもできますが、そういったツールがどうやって実装されているのか想像できるようになるという点が重要だと考えています。
問題解決のためにダンプデータをとるといった作業を、学習の最初の方で経験しておけば、次にそれが必要な場面に出会ったときに、それほど難しい作業だとは思わないのではないでしょうか。そういったプログラムはプログラミング学習とは別の機会に勉強すればいいのかもしれませんが、せっかくプログラムを作るのだから、後でも役に立つプログラムをと思ったのです。もちろん、プログラム自体よりは、アイデアというか、考え方が後でも役に立つというのが重要だと思っています。そういう意味で、地味ですがいいプログラムをサンプルとして提示できていると自負しています。
ところで、残念だったのは、画像ファイルを解析するプログラムも提示したかったのですが、都合により採用にいたらなかったという点です。ここのブログで、BMPファイルを解析するためのCで書かれたプログラムを紹介しているのですが、それのJava版も紹介したかったのです。ところが、そこまで気力がでなかったり、紙面の都合もあったりで、ボツとなりました。画像ファイルのフォーマットは、それはそれで面白いので、また機会があったら紹介してみたいところです。
KisoJava 4
改訂版基礎Javaを執筆するにあたって意識した事 その4
「KisoJava 3」ではIDEを採用しなかった理由について説明をしました。今回はPart 1のサンプルプログラムについて考えた事を整理してみます。
実際にプログラミングができるようになるためには、興味深いテーマを扱うのが一番なのですが、これは読者にとって様々であるため、これ、と決めるのは難しいものです。できるだけ色々な文法事項を説明できるもので、しかもシンプルな題材ということで、「テキストファイルを読み込んで、行番号つきで表示するプログラム」というものにしました。
Part 1では、「逐次処理」、「繰り返し処理」、「条件分岐処理」といった処理を基本単位として、これらの「基本となる処理」を組み合わせることにより、プログラムが作成できることを説明しています。ゴールとなるプログラムを完成するためには、こういった処理が必要、そのために、こういった文法が用意されている、といった形で説明をするように意識しています。厳密な文法の説明をしているわけではありませんし、ステップ方式で説明をしているので、それほど難しいと思うことなく、学習を進める事ができるはずです。ですから、順に読んでいけば、本書に書いてある通りのプログラムを作る事はできるようになるはずです。
本書のPart 1の内容を理解できれば、基本的には好きなプログラムが作れるようになるはずですが、そうなれる読者は一般的には多くはないと思います。本書で紹介してあるプログラムを真似して動かすだけではなく、自分で考えてプログラムを創り出すことができるようになるためには、壁があるのです。この壁を乗り越えるのは難しいのですが、こればっかりは自分で乗り越えてもらうしかありません。野球で言ったら、「ボールの投げ方は教えた」という段階であり、この後、自分で何度もボールを投げる練習をすることによって、はじめてボールを投げられるようになるというのと同じです。
話をサンプルプログラムに戻します。扱っている題材や、実際に行っている処理は、きわめてシンプルなものなので、サンプルプログラムを実行するところまでやってみても、大きな達成感はないかもしれません。読者としては苦労して達成感のあるプログラムを作成してみたいと思うかもしれませんが、執筆者としては、初心者が苦労することもなく、サンプルプログラムを実行できてPart 1を終わる事ができるなら、その方がいいと考えています。一番心配なのは、「ファイルを読んで行番号をつけて表示するプログラム」の有用性がよくわからないまま読み進んでしまうことです。そうすると、サンプルで提示しているプログラム全体が文法事項を説明するためだけのサンプルのように感じてしまい、内容的につまらないプログラムだ、と感じてしまうはずだからです。
「ファイルを読んで行番号をつけて表示するプログラム」が有用だと思う理由は、プログラムの仕様は「入力、出力、処理内容」で定義することができ、それを実現しているからです。このサンプルは、テキストデータについて、「データを読み込んで、加工処理をして、データを出力する」という基本的なデータ処理プログラムであり、処理内容自体は難しくありませんが、考えれば考えるほど味がでてくる例なのです。これを理解できれば、テキスト処理のプログラムを作成する事は、それほど難しくありません。
サンプルプログラムの題材については、厳選したつもりですが、ゲームを題材にしたり、GUIアプリケーションを題材にしたりした方が面白いはずだ、といった意見もあるでしょう。機会があれば、そういったテーマを使った書籍も執筆してみたいところですが、今回は比較的固めのテーマを採用しました。