KisoJava 3

改訂版基礎Javaを執筆するにあたって意識した事 その3

BeanShellを使う事についてのメリットを「KisoJava 2」で書きましたが、実は統合開発環境(IDE)と言われるEclipseやNetBeansを使うと言う選択肢もありました。しかし、今回はそれらを採用しませんでした。編集部さんが別途Webサイトにページを用意してくださり、そこにIDEを使う場合の解説をしてくれています。(改訂新版 基礎Java−統合開発環境。ちなみに、impress Direct:改訂新版 基礎Javaでは立ち読みもできると書いてありますね。iBookのFirefoxではうまく動作しませんでしたが…)

IDEを使ったJavaプログラミングの入門としては、Eclipseを使ったものを@ITで記事(@IT:Eclipseではじめるプログラミング)として執筆した事があります。そのときに、意外とEclipseについての説明が多くなってしまうため、プログラミングについての説明が減ってしまうと思いました。また、学校などでは、いろいろな開発環境を使って教えているので、Eclipse、NetBeansを使うと絞ってしまうと、Javaプログラミングの参考書として推薦されにくいという事情があります。また、IDEは結構頻繁にバージョンアップされるため、それに依存するような入門書にしてしまうと、学校のように毎年のカリキュラムが決まっていて、毎年大体同じように教えているところでは使いにくいということになりそうです。とはいえ、最近またJDKがバージョンアップされた事からもわかるように、JDK自体も頻繁にバージョンアップされるので、書籍についているもので完結しておく、という割り切りも必要なのかもしれません。

いずれにせよ、使っているIDEに強く依存していると、読者が限定されてしまいますので、本書のようなスタイルになりました。とはいえ、本書ではPart1はBeanShellに依存しているので、この部分の評価が大きく影響しそうです。そのことを考えると、「BeanShellで学ぶプログラミングの常識」、「Javaで学ぶプログラミング入門」、「Javaで学ぶオブジェクト指向プログラミング」という3分冊にすることにより、BeanShellに依存する部分を切り離すことも考えられたのですが、分冊形式は読者にとっては割高感がありますし、3冊持ち歩くことになるのも嫌だろうと思って、Part1、Part2、Part3構成の1冊にまとめたのでした。

BeanShellは、クラスの説明やメソッドの説明をすることなく、Javaの文法を使ってプログラミングの常識を理解してもらえるベストソリューションだと、個人的には思っています。学校で参考書指定をもられると一番良いのですが、本屋さんで独習のために良い本がないかと探す読者も多いはずですから、そういう人が地道に理解を深めるためには、コンパイラ方式よりもインタプリタ方式で確認できた方がいいはずです。

もちろん、プログラミング経験がどれくらいあるのか、コンピュータをどれくらい使ったことがあるのか、そういった点が影響してくるので、他の方法と比較してこれがいい、と断言するのは難しいものです。実際のところ、Visual C++などを使った事がある人は、EclipseやNetBeansから入った方が効率的でしょうし、実際に使用するIDEが仕事場などで決まっているなら、それを使う入門書を読んだ方がいいかもしれません。ただし、個人的には、Javaプログラミングの入門については本書のような学習用参考書を、Eclipseについて知りたい場合はEclipse解説本を、それぞれ購入することを推薦します。つまり、目的に応じて選ぶということです。その結果、Eclipseを使ったプログラミング入門書を1冊購入すればいいという結論になることもあるでしょう。

KisoJava 2

改訂版基礎Javaを執筆するにあたって意識した事 その2

しばらく、このネタでいこうと思っています。今日、東京駅の近くにある丸善に行ったところ、嬉しい事に目立つところに置いてもらってありました。帯が見えるように置いてもらえると、やはり嬉しいものです。

さて、本書はJavaプログラム初心者のために、Javaプログラムを実行するところから説明を始めています。なぜそうしたのかは、「KisoJava 1」で説明しましたが、実はBeanShellというJavaプログラムをここで紹介しておきたかったというのもあります。本書で詳しく説明していますが、これはJavaプログラムをインタプリタ実行するアプリケーションです。これを使う事により、プログラムを入力したらすぐに実行することができるようになりました。初心者にとっては、入力した命令がすぐに実行されて結果が出るという事がわかりやすいだろうと考えて採用したのです。

オブジェクト指向プログラミングを理解するまでには、「プログラミングの常識」とも言えるいくつかの事項を先に理解する必要があるので、それをインタプリタを使って説明したいと考えました。インタプリタを採用するメリットとしては、すでに説明をした「入力後にすぐ実行できる」ということの他にも、「入力するコードが短くて済む」ということもあります。Javaプログラムはクラスというものを基本単位とするので、例えば「class A { public static void main(String[] args) { System.out.println(0); }」と書かないと動作させることができません。しかし、プログラミングの常識を学習するにあたって、ここで実行したいのは「System.out.println(0); 」のプログラムの部分だけなのです。キーボード入力がなかなかうまくできないうちは、入力が必要なコードが多いと大変です。そんな人にとっては、入力をしたらプログラムを動作させることができるわけではなく、コンパイルしてからでないと動作させることができない、というのはかなり辛いことでしょう。さらに、コンパイル中にエラーがでたときには、サンプルとにらめっこしながら、どこがおかしいのかと文字の比較をしないといけません。こういった作業はもちろんプロフェッショナルになるなら乗り越えないといけませんから、避けることはできませんが、本書ではこの作業はずっと先にいってからになります。

ということで、Javaの文法を使って書いたプログラムを実行できるインタプリタを探したところ、ちょうどBeanShellという素晴らしいJavaアプリケーションがあったので使わせてもらう事にしたのです。このアプリケーションのおかげで「1行から実行」を実現する事ができました。感謝、感謝です。また、知る人ぞ知る、ですが、BeanShellはJDK6から導入されたScriptingFrameworkにも対応しているはずなので、これを知っていて損をする事はありません。もっと有名になってもおかしくないJavaプログラムのうちの1つだと個人的には思っています。とはいえ、このあたり、Eclipseがいい、NetBeansがいい、JDKだけでいい、BlueJがいい、と色々な意見があると思いますので、好みで分かれるのだと思います。

KisoJava 1

改訂版基礎Javaを執筆するにあたって意識した事 その1

プログラミングについて理解する前に、まずはコンピュータがどういうものなのか、どう使うことができるのか、どれくらい便利なものなのか、といったことを知らないと、興味がわかないのではないか、と考えています。最近は、学校でパーソナルコンピュータを使ったり、携帯ゲーム機や携帯電話などで使っているので日常的にコンピュータを使っていますから、コンピュータがあるとどれくらい便利なのか、ソフトウェアとはどういうものか、といった基本的な部分については知っている人が多いはずです。そういう意味では、自分がプログラミングについて勉強をしたころに比べると、遥かに良い環境なのだと思います。

そんなことを思いながら、Javaを使ったプログラミングを勉強しようと思った人がまず理解した方がいい事は何か、と考えたところ、Javaのプログラムを実行する方法だと思いました。これから勉強しようとしているプログラム言語で、いったいどういったプログラムを作成することができるのか、作ったプログラムはどうやって実行することになるのか、こういった部分はプログラミングには直接関係ありませんが、重要な事です。プログラムを動かすためには、まず自分でプログラムを作成することから始める、という順番でもいいのですが、先にどういうものが実現できるのかを知った方が興味を持てるのではないかと思ったのです。

ということで、Javaプログラムの例としてBeanShellとRobocodeを持ってきて紹介しています。これらを実行するためには、JREが必要なので、それをインストールすればJavaプログラムが動く事を説明し、どうやってJavaプログラムを実行することができるのかも説明しています。

コンピュータを使い慣れていない人が、プログラムを勉強するということはないと思いますが、JavaプログラムはWindowsアプリケーションの中ではちょっと特殊ですから、やはり、こういった常識的な部分から入って行くのがいいのではないか、と考えた結果なのです。

JREのインストール、Javaプログラムを実行してみる、というプログラミング以前のことを導入に持ってきているJavaの入門書籍はあまり見かけないのですが、皆さんの評判はどうなのでしょう。気になります。:)

ereg.php

PHPで正規表現を使う方法。

# php -f ereg.php 
<a href="phpinfo.ps.pdf">phpinfo.ps.pdf</a>

# cat ereg.php 
<?php
      $fileName = ‘phpinfo.ps.ps’;
      $downloadFileName = ereg_replace(‘\.ps$’, ‘.pdf’, $fileName);
      $downloadFile = ‘<a href="’ . $downloadFileName . ‘">’ . $downloadFileName . ”;
      echo $downloadFile;
?>

date, time (PHP)

PHPプログラムで時刻を扱う場合のサンプルです。time関数とdate関数を使えば大体のことはできそうです。


$ cat time.php
<?php
var_dump(time());
$currentTime=time();
var_dump(date('YmdHis', $currentTime));
var_dump(date('YmdHis'));
?>

VM

Perl で 8ビット CPU を作る – naoyaのはてなダイアリー
http://d.hatena.ne.jp/naoya/20080104/1199428155

昔、「CPUの創り方」という本を購入したときに、仮想マシンで用意してあげると面白そうだなぁと思ったことがあったのですが、そのままになっていました。CPUを構成する部品を全部ソフトウェアで実装するということを想像していたのですが、面倒になってやめてしまったのです。教材として使うことを想定していたので、あまり難しいことはしないで実装するにはどうすればいいのか、とか余計なことを考えていたのがいけなかったかもしれません。octopusでは、もっと単純に実現しているような感じなので、JavaとかRubyで結構簡単に実装できてしまうような気がします。どうなんでしょう。

PHP Smarty

Smarty

PHPのテンプレートエンジンとして有名なものにSmarty(http://smarty.php.net/)があります。Mac OS X 10.3.9 で使ってみました。

まずはサイトからダウンロード
http://smarty.php.net/download.php

次の手順で sample.smarty ディレクトリの下にセットアップしました。

mkdir sample.smarty
mkdir sample.smarty/htdocs
mkdir sample.smarty/lib
mkdir sample.smarty/lib/Smarty
tar xzf ~/Smarty-2.6.18.tar.gz
mv Smarty-2.6.18/libs/* sample.smarty/lib/Smarty/
rm -fr Smarty-2.6.18/
mkdir sample.smarty/etc
mkdir sample.smarty/etc/templates
mkdir sample.smarty/etc/templates_c
mkdir sample.smarty/etc/cache
mkdir sample.smarty/etc/configs

PHPファイル(sample.smarty/htdocs/index.php)は次のようになります。
<?php
require(‘../lib/Smarty/Smarty.class.php’);
$smarty = new Smarty();

$smarty->template_dir = ‘../etc/templates’;
$smarty->compile_dir = ‘../etc/templates_c’;
$smarty->cache_dir = ‘../etc/cache’;
$smarty->config_dir = ‘../etc/configs’;

$smarty->assign(‘name’, ‘hiro345’);
$smarty->display(‘index.tpl’);

?>

テンプレートファイル(smarty.sample/etc/templates/index.tpl)を用意します。

<html>
<head>
<title>Smarty</title>
</head>
<body>
Hello, {$name}!
</body>
</html>

カレントディレクトリをsample.smarty/htdocsとして実行すると、次のようになります。
———
$ php -f index.php 
<html>
<head>
<title>Smarty</title>
</head>
<body>
Hello, hiro345
</body>
</html>

簡単ですね。ディレクトリの指定が相対ディレクトリなので、実際のWebアプリケーションを開発するときには、絶対ディレクトリにする必要がありそうです。コマンドラインだけで確認してみたわけですが、本格的に使うには、GETパラメータやPOSTパラメータが必要なので、きちんとApacheなども準備しなければならなそうです。