Jan 29, 2008

PHPとRubyについて

Ruby開発者のまつもとさんのMatzにっきのPHP論争を読んでいて思ったことをつらつら。私はPHPは好きな言語なので好きなものを貶されるとやっぱり一言言っときたいかな。・・・と言っても私は言語開発者でもなんでもないのであくまで「言語のユーザーとしての視点」からの意見ですけど。

これはまったく理論的な話ではなく、あくまでも感情論です。でも私は機械ではなく人間なので、感情論は大事だと思っています。

私がRubyをやってみようかと思うときに良くも悪くも頭に浮かぶのは開発者、まつもとさんのこういう多言語への見解と彼の思想なのです。つまり、Rubyをやろうとすると常にまつもとさんの顔がつきまとう。これが私がRubyをやろうとする意欲を削いでしまいます。開発者の思想・理念があまりに前面にみえる。あまりに「まつもとさんの言語」なのです。

これは他の言語を使ったり学んでいるときにはない現象です。PerlをやっているときにLarry Wallのことは考えないし、PHPをやっているときにRasmasのことやZendに働く人々の事は考えない。最近触り始めたPythonも、Guido van Rossumのことは考えない。CをやるときやObjective-Cをやるときにもそう。JavaやJavaScriptなんか、「作ったの誰だっけ?」って感じです。

なんでだろ?同じ日本人だからなのか、なんなのか。でも他の日本製のソフト、例えば日常的に使っているCotEditorやKEditやegword Universalを使ってるときにnakamuxuさんやkarinoさんやエルゴソフトの事を思い浮かべながら使っている訳じゃないのでそうとも言えない。

なんか、あまり開発者は自分の同業の他のプロダクトについて気にくわない面というか、「イケてない」とかいう意見は書かないほうがいいかもしれないな、って思いました。読んでてあまり気分がいいもんじゃないですね。プログラミング言語も結局「自分が機械にやらせたい論理を書いていく」という意味での「言語」なので、「英語とイタリア語、どちらが優れているか?」と一緒でつきつめていくと宗教論争になると思うんです。そうなるとユーザーとしては「この言語をやるにはこの宗教に入らないといけないの?」ってな気になってしまいます。

プログラミング言語も自然言語と同じで、自分の思想や論理が一番楽しく豊かに書けるのが自分にとっての一番の言語であり、その「一番」は相対的なもので、決して「絶対的なベスト」はありえないし、あってはいけない。ないからこそこれだけ多くの言語が生まれているのだし、それが絡み合って世の中をバランスよく形成していると私は考えます。日本語で楽しく喋ってる時に英語の偉い人が来ていかに英語が言語として日本語より洗練されていて世界のデファクトスタンダードであるか、と説かれると、仮に本当はそれが正しくても「使ってやるか!」って気になると思います。

【 補足:事実関係の整理  】

今後誤解が生じないために、ちょっとまとめを。

私が感情論と書いた部分の整理:

  • Rubyを使おうとするとまつもとさんの顔・思想がつきまとう。
  • それが学習意欲を妨げることがある。
  • 理由も解決方法も分からない。(なので感情論)
  • 他の言語を「イケてない」とあまり発言して欲しくない。それが好きな言語だと少なからず不愉快に感じるし、他の言語を貶す人の開発した言語にどっぷりハマりたくないから。(これも勝手に私がそう思っているので感情論)

誤解が生じやすそうな部分の整理:

  • 私は別にまつもとさんが嫌いなわけではない。むしろ尊敬している部分が多い。
  • 私はRubyが大嫌いなわけではない。むしろ出来れば使いこなしたいと思っている。(でもなんとなく違和感を感じる部分があるので挫折する。これも理由が分からないので感情論)
  • 私はまつもとさんのブログで書かれている意見・姿勢に多少違和感を感じたことがあるのは事実です。でも、「ムキー!!」と顔を真っ赤にして腹を立てているわけではない。

事実関係の整理:

  • 私はPHPとRubyでは、PHPの方が好きです。(キッパリ)でも、どっちが優れた言語であるか、という議論には実は正直なところあまり興味がない。
  • 上記のエントリーの例えが多少良くない箇所もあることを、認めます。(その時書いたときの思いつきを記録するためでもあるので修正せずそのままにしておきます)

Jan 28, 2008

ショック・・・egword販売終了

なんと、日々愛用していて私的には「世界一のワープロ」と思っているegwordの販売・サポートの終了が決定したそうです。

パッケージソフト事業終了のお知らせ

私の場合かなり惚れ込んでいたので世の中でどう受け入れられていたかは分かりませんが、多分私が思っているより売れなかったんだろうなぁ。。営利企業ですから、飯食っていかないといけませんからね。

一般的にはワープロというのがパソコンを使う目的ではなくなってきていて今時ワープロソフトと入力ソフトに何万円も払うって人は少ないと思います。・・が、やはり、今一度、声を大にしてあえて言わせていただきたい。

「egwordは、全てのOSの全てのワープロソフトの中で、史上最高のワープロだ。」

と。

オブジェクトがピクセル単位で自由自在に配置出来て、縦書きも横書きも原稿用紙モードもOK、レイヤーも使えるし、段組みしてテキスト流し込んで、という使い方もとっても簡単・快適。ルビの微調整もピクセル単位で思い通りに調整出来る。そしてなにより、レイアウトソフトに負けないこれだけの機能を兼揃えていながら起動が他のワープロに比べて圧倒的に早く、動作も軽い。

私的に消えてもいいと思っているのはMSワードとPagesなのになぁ。Appleも中途半端なPagesなんかやめてegwordを買い取って欲しかったな。

良いものが売れるわけではない、残るわけではない、のですね。ホント、心底残念。

関連:

Jan 27, 2008

Pythonを触ってみる(その3:ゲーム編)

python-logo.png

Pythonで書かれたGPLなゲーム「PyGletSpace」

  • コードが美しくかつシンプルで優れている
  • チュートリアルとしても優れている
  • オープンソース
  • クロスプラットフォームでどのOSでも動く
  • すぐ使えて遊べる

という条件を満たすものというとなかなか無いですが、この「PyGletSpace」は太鼓判を押して「オススメ」です。

Pythonで簡単なインベーダーゲームを作ってしまうチュートリアル。まずは、出来上がったサンプルが公開されている(上記のエントリーの一番したの方の「Done!」の画像の下の「here」というリンクをクリック)のでどんなものか実際動かして試してみます。

Pythonでゲームを作るライブラリが「Pyglet」として公開されているので、まずこれをダウンロードしてインストールします。

Mac OS Xの場合はパッケージインストーラをそのまま落としてインストール。Ubuntu (Linux)の場合は「pyglet-1.0.tar.gz」ファイルを落として解凍したあと、解凍したフォルダにターミナルで移動して

$ python setup.py install

でインストール。これで準備が整います。非常に簡単です。

ゲームの起動は、OS XもUbuntuも同じようにダウンロードして解凍して出来た「PyGletSpace」にターミナルで移動して、

$ python PyGletSpace.py

で起動。以下のように起動します。(クリックで原寸大拡大)

【Mac OS X】

pygletspace-macosx.png

【Ubuntu Linux】

pygletspace-ubuntu.png

遊び方は簡単で、マウスで動かして左クリックで攻撃、やられるとターミナルごと落ちて即死亡・終了 :-) 、というシンプルなものです。

私は基本的にゲーマー気質ではなく、RPGが嫌い・苦手で、普段もほとんどゲームはしない人間ですが、「インベーダー/ギャラクシアン」とか初代ファミコンの「スターフォース」で育った世代なのでこういう頭を使わないシンプルなシューティングゲームだけは大好きなので、久々に「オォッ!」とヒットしました。

ライセンスもGPLでオープンソース、コードもシンプルで短くPythonの勉強用チュートリアルとしても使えますし、カスタマイズしたりも出来るのでこれはGOODソフトウェアです。

Jan 26, 2008

Pythonを触ってみる(その2:GTK編)

python-logo.png

前回のHelloworldはフォントやボタンの部品の見た目ががしょぼくてイマイチだったので、なんとか出来ないかと調べて、PythonでGTKを使う方法を発見。

インターフェイス部分は「Glade」というソフトを使ってやる、ということなので早速導入して起動。

pygtk-glade.png

ようはMac OS XでいうこところのInterface Builderですね。あっちより少しシンプルでやや「突き放し系」です。Interface BuilderにあるようなクラスやインスタンスをGUIで作ったり関連付けたりというような感じではなく、純粋にGUI部品を作ることにフォーカスする感じです。部品を並べてプロパティやアクションの定義などをしていきます。

チュートリアルを参考にしながら、部分的に日本語にしてカスタマイズ。

#! /usr/bin/env python
#-*- coding:utf-8 -*-

import sys

try:
    import pygtk
    pygtk.require("2.0")
except:
    pass
try:
    import gtk
    import gtk.glade
except:
    sys.exit(1)
    
class HelloWorldGTK:

    # アプリケーションの初期化
    def __init__(self):
    
        # Gladeファイルをセット
        self.gladefile = "gtkhelloworld.glade"
        self.wTree = gtk.glade.XML(self.gladefile)
        
        # dictionaryを作成し、接続
        dic = { "on_buttonHelloWorld_clicked" : self.buttonHelloWorld_clicked,
            "on_MainWindow_destroy" : gtk.main_quit }
        self.wTree.signal_autoconnect(dic)

    # 「こんにちは」ボタンがクリックされた時に呼ばれるメソッド
    def buttonHelloWorld_clicked(self, widget):
        print u'こんにちは!'


if __name__ == "__main__":
    hwg = HelloWorldGTK()
    gtk.main()

$ python gtkhelloworld.py

で起動。

pygtk-helloworld.png

・・・と、こんな感じで上手く起動出来ました。GUI部分がGTKになることでフォントや部品の見た目が綺麗になってGNOMEとの親和性も高くなった感じですね。

関連URI

Jan 25, 2008

Pythonを触ってみる

python-logo.png

.to_sとかputsという書き方が気にくわない」という理由でRubyに学習意欲が沸かず放置中の私なのですが、第二言語としてRuby以外の選択肢を物色してみることに。

そんな中、Ubuntuを使い始めてからというもの、あちらこちらで目にする「.py」の拡張子。「なんかLinuxの世界ではPythonが来てるのかな?」と思いつつ、その事を知人と話していると「Python凄いよ。少ないコードで簡単にGUIが出来る」と言われ、試してみることに。

私が言語を始めて勉強する時にまずやることは、

  1. とりあえず自分がやりたそうなことが出来るコードを探し、それをそっくりそのまま真似て書いてみる。
  2. 変数名とメソッド(関数)名をオリジナルに変える。これだけで「自分のコードになった気」になる。ここ大事。
  3. 別のサンプルコードで同じ事をやり、それらを合体させてみる。

という手順です。2.は「なんだそれパクリじゃないか」と言われそうですが、はい、そうです、パクリです。パクリは学びの全ての基本です。・・・ということで、一番大事な部分だと思ってます。

では早速、このセオリーに従ってやってみました。参考にしたのは以下のサイトの「Helloworldチュートリアル」

で、これを真似て書いたのが以下のコード。

#! /usr/bin/env python
# -*- coding:utf-8 -*-

from Tkinter import *
import Tkinter as Tk

# Applicationクラスの定義
class Application(Frame):

    def sayHi(self):
        # 文字を書き出す処理
        aLabel = Tk.Label()
        aLabel["text"] = u'こんにちは'
        aLabel.pack()

    def createWidgets(self):
        # 終了ボタンを作成
        self.quitButton = Button(self)
        self.quitButton["text"] = u'終了'
        self.quitButton["fg"]   = "red"
        self.quitButton["command"] = self.quit
        
        self.quitButton.pack({"side": "left"})
        
        # Helloボタンを作成
        self.sayHiButton = Button(self)
        self.sayHiButton["text"] = "Hello"
        self.sayHiButton["command"] = self.sayHi
        
        self.sayHiButton.pack({"side": "left"})
    
    def __init__(self, master = None):
        Frame.__init__(self, master)
        self.pack()
        self.createWidgets()

# Applicationクラスからインスタンスを生成し、実行。
app = Application()
app.mainloop()

これを「helloworld.py」というファイル名で保存し、実行してみます。Terminal上で

$ python helloworld.py

と打つと、以下のようなプリミティブなGUIを持ったアプリが立ち上がりました。(おぉっ!と感動)

python-hello1-macosx.png

クリックすると、「こんにちは」の文字が書き出されます。「終了」ボタンで終了。

python-hello2-macosx.png

同じコードをネットワーク経由しているUbuntuのTerminalからも実行してみる。

python-hello2-ubuntu.png

と、同じように実行出来ました。いやはや素晴らしい。

Pythonは、実は以前は「本家サイトのデザインとロゴがダサい」という理由で敬遠していました。「そんな理由で・・・」とお叱りを受けそうですが、私は言語といえどもそういう部分は大事だと思っています。で、最近はロゴもサイトも新しくなって洗練されたものになったのでいい感じになったと思います。LinuxとMac OS Xで同じコードが普通に動くのも気に入りましたし、なによりコードがシンプルに書けて見た目も美しい。見た目的にはPHPより好きかも。・・・ということで次の研究対象言語はRubyではなくPythonにすることにしました。

Jan 18, 2008

フレッツ光開通

工事に思いのほか時間がかかりましたが、ようやくネット回線をフレッツ光に移行しました。

通常のブラウジングも体感速度がアップしてます。特に画像などの読み込みが早い。iMac G5からIntel Macに移行した時の感覚くらい違いがあります。

ただ、自宅サーバーの設定周りがちょっと手間取り気味。これまで長年使っていたYAMAHAのルーターからNTTのCTUに変えたのですが、使い勝手が違うので少々戸惑ってます。一応サーバーマシンのポート解放もされていてDNS解決のステータスも問題なし。なので、無事このエントリーが見えていればちゃんと公開されているはずなんですが、ローカルネットワーク内の別のマシンからサーバーにドメイン経由でアクセスしようとすると表示されません。(ローカル内IPアドレスからのアクセスは可)

YAMAHAのルーターでは簡単にサーバーが公開出来てローカルネットワーク内のほかのマシンからも公開しているサイトのドメインにアクセスしてもちゃんと表示されたのですが、この辺の設定関係がまだよく分かりませんね。

Jan 16, 2008

MacBook Air

新製品が出たようなので、久しぶりにMacの事を書いてみようかな。

macbookair.jpg

アップル - MacBook Air

以前にも書いたように、私は長年PowerBookからMacBookに至るまでAppleノートのユーザーではあったんですが、モバイラーだったことが一度もないし、モバイルノートとしてノートパソコンを見たり欲しいと思ったことがないので、正直、「究極のMacのモバイルノート」というのには全く興味を持っていません。そんな私から見た視点もあっていいかな、と思うので、ひとことふたこと。

まず、ファーストインプレッションは、

「ようやく前のデザインが古くさく見えるMacBookが出たな」

ということでした。(参考 ↓)

Apple MacBook Air and MacBook Pro size showdown - Engadget

究極とも思えるPowerBook G4のデザインからこの数年間はほとんどデザインが変わらなかったので、新しいのが出ても新鮮味がありませんでした。正直、今、手元にMacBook Airの実物がないので、今目の前にある自分のPowerBook G4やMacBook(Black)を見ても「古い」という感じはしません。そのくらい、究極でソリッドな「工芸品」だと思ってます。

でも、今回のMacBook Airで「デザイン」という観点からみたら、ようやく一歩抜けた感じがします。もちろん、それを実現するためにはCPUのスペックダウン(とは言ってもインテル特注なんですが)だったり、ドライブの外付けだったりインターフェイス部分の淘汰だったりする部分が目に移るんですが、欲しがるひとは素直に「欲しい!」と思えると思います。

「マルチタッチ」も順当なアップグレードながらやはり「他にはない」という意味で斬新で、「iPod Touch」で心を掴まれたユーザーが「あ、iPodと同じだ〜」ととっつき易い。一つのインターフェイスとして多くの人がガーッと飛びついて定着すればそれがデファクトスタンダードとなり、一度それにどっぷり慣れてしまうとそれがないものには「不便」を感じるものです。(Excel&Wordも一つのインターフェイスとして捉えたら、そうじゃないでしょうか)

Macじゃなく、より多くの人に触れる可能性があるiPodに先にマルチタッチを採用してきたのは順序として正解でしょう。私の憶測ですが、おそらく練られた上での戦略で、2年くらいまえからMacBookに搭載されるのは技術的にはクリア出来ていて決まってたんじゃないでしょうか。

私が思うに、実はこの辺が意外に重要なポイントだと思います。「あ、iPodと同じだ」というのと、「あ、Macと同じだ」というのでは、世の中の一般的にWindowsしか持っていない・使ったことのないユーザーへの印象が違う。私がWindowsを持っていない人だとして、新製品に「わー新しいやつ!」と飛びついたときに隣のWinユーザーの友人が「なんだオレのWinと同じだ」と言われると正直面白くないと思います。それと同じかなぁと。

「薄〜い」ってのも、世の中の一般的な人は大好きなので、単純に「強調するとウケる要素」を兼ね揃えてると思います。

・・・と、良い点は、やっぱり「外側」に集中します。:-)  あと難点は、やはり「値段」と「拡張性」かな。 HDDの容量も小さいので本当に「サブノート」として使いたい人・ライトユーザーには最高でしょうけど、サブにこの値段は簡単には出せないです。「現MacBookユーザーの私自身が購入したいと思うか?」という観点から見ると、CPUもHDDのスペックも一昨年購入した私のMacBookより下なので、そうとうApple病にやられているか頭がイカれたか大金持ちじゃないかぎり、「薄い」「新しくオシャレになったデザイン」「マルチタッチ」だけに2~30万円は出せません。

現行MacBookオーナーの視点からみたらそんな感じです。

なんか、でも、デザインは単純にいい感じなので、「あ〜こういうデザイン力を投入した拡張性がそこそこあるミドルクラスのMacが出ればいいのに」って余計に思います。MacBook(これまでの、普及クラスのやつ)のコンセプトを詰め込んだコンパクトなデスクトップ。今のAppleのラインナップって、ぜんぶ極端で、「いい感じに中途半端な製品」がないんですよね。中途半端なユーザー層のほうが圧倒的に多いと思うんですけど。

次へ