Xyzzy上で新規作成した javascript とか ruby のバッファに毎回モード設定をするのがめんどくさかったので書いた。 siteinit.l か ~/.xyzzy のどこかに貼りつけて使ってください。

※同じ拡張子に複数のモードが紐付けられていると、古い方に設定されるようになっていたので修正


PythonのGUI,Tkinterを使おうとこのページの一番上のサンプルを動かそうとすると動かず第一歩をくじかれる。
http://www.pythonware.com/library/tkinter/introduction/hello-tkinter.htm

エラーメッセージはこんなの。
ImportError: No module named Tkinter

環境はWindows7でPython3.0.1 Portable。

エラーメッセージで検索しても「yumを使ってモジュールインストールしろ。」とかLinux向けの情報しか出てこない。 適当にあさってやっと見つけた解決策はこれ。

from Tkinter import *

from tkinter import *
に変える。 どうも Python3からmodule名の大文字小文字が変更されたのが原因だったようだ。


テキスト形式でUMLが書けるPlantUML

PlantUMLはテキスト形式でUMLを記述して画像に出力できるオープンソースのソフトウェアです。 UMLが書けるフリーソフトはいくつかありますが、テキストベースで記述できるのは大変ありがたいですね。

PlantUMLの具体例

サンプルをPlantUMLのサイト内から引用します。
http://plantuml.sourceforge.net/classes.html

 
こんなUMLが以下の記述で作れちゃいます。

PlantUMLのインストール

http://plantuml.sourceforge.net/download.html
から plantuml.jar をダウンロードしてください。
plantumlの実行にはJavaが必要になりますので、もしJavaがインストールされていなければ
http://www.java.com/ja/download/
からインストールを行ってください。

“Sequence Diagram” 以外の画像の出力、つまり普通に使うのであれば Graphviz もインストールする必要があります。
http://graphviz.org/Download_windows.php
からダウンロードしてインストールしてください。

以上でインストールは終了です。

xyzzyからPlantUMLを使う方法

さて、次は以下のコードを siteinit.l か .xyzzy に記述してください。

*plant-uml* と *graphvizdot* の値は適宜変更してください。
これでテキストファイルにUMLを記述して M-x plant-uml と入力すれば画像ファイルが出力されているはずです。


xyzzyから直接javascriptを使う

今回の記事はRhinoのインストールが行われてる事と xyzzy で jscript-mode がインストールされている事が前提条件になります。 RhinoのWindowsでのインストール方法については前回の記事『Windows(cygwin+zsh)環境でRhinoを使う』を参考にしてください。 今回の記事の設定を行うと xyzzy から直接Rhinoを呼び出して下の画像のように簡単なスクリプトを気軽に書けるようになります。

下記のlispはruby-modeから引っ張ってきて少し修正を加えたもので、これを ~/.xyzzy や siteinitl. に貼りつければjscript-mode で C-c C-x すれば現在編集中のバッファの javascript が実行されます。

*js-classpath* と define-key は好みに合わせて適宜変更の事。


Rhinoとは何か?

javascript を記述するときに毎回htmlファイルを作る作業が手間なので何か方法がないか探してみた。 どうやら、JAVAで書かれたjavascript実装のRhinoでやりたい事ができるらしい。

Rhino – MDC

Rhino はすべてが Java で記述された JavaScript のオープンソースな実装です。それは一般的には、Java アプリケーション環境へ組み込まれて、エンドユーザーによるスクリプトの記述が可能になります。

Rhinoのインストール方法

J2SE 6には標準で入っているらしいがEverythingで探しても見つからないので今回は http://www.mozilla-japan.org/rhino/download.html からダウンロードして使うことにする。

ダウンロード+解凍して適当なディレクトリに移動する(私の環境ではSugarSyncで共有してるディレクトリ配下のX:\sugarsync\bin\rhino1_7R2)。 スペースや日本語の文字列を含まない場所に置くのが無難だろう。 次に CLASSPATH を設定する。

これでインストールは完了したので

と入力すればインタープリタが起動する。

zshrcでエイリアスの設定

しかし毎回これを打つのはあまり現実的ではないため ~/zshrc で alias を設定しておくと良い。

インタープリタを呼び出さずに直接実行することや、jsファイルを直接指定して実行することもできる。

これでjavascriptの動作をちょっと確認したいときに簡単に動かせるようになったし、JAVAで実装されているため、JAVAのクラスをjavascript内部で呼び出したりもできるようだ。 色々と遊んでいこうと思う。


MSのブラウザ選択のバグに関する説明が、全くわかってない人が書いてるとしか思えない内容だったので javascript の sort について少し解説をしようと思う。

MS、Webブラウザ選択画面にアルゴリズム上のバグか - @IT

JavaScriptの配列の並べ替え(sort)は比較関数を渡すことで柔軟な並べ替えが行える。ここではMath.rand()で半々の確率で正負の値を返しているので、隣り合う要素の並べ替えはランダムに起こる。これで結果もランダムになるように思えるが、実際に意味のある並べ替えを行うためには、並べ替えた後の配列が一定の基準に従っている並べられていることが不可欠で、例えば「a>b」であれば「b<a」、「a<bかつb<c」であれば「a<c」でなければならない。これは、隣り合う要素同士をただランダムに入れ替えるだけでは達成できないのだという。

この「並べ替えた後の配列が一定の基準に従っている並べられていることが不可欠」という意味の分からない部分はおそらく下記を訳した物と思われる。

Doing the Microsoft Shuffle: Algorithm Fail in Browser Ballot

Sorting requires a self-consistent definition of ordering. The following assertions must be true if sorting is to make any sense at all:

だから正しい訳は「並べかえには首尾一貫した”大小の定義”が必要である。」になる。

実際にどのようなバグがあったかを説明するにはコードで示すのが一番わかりやすいので直接書いていこう。 問題の、 javascript の sort関数では引数に比較関数を取れる。例えば

このように「どういう基準で並び替えを行うかをユーザー自身が関数で定義できるようになっている。ところが問題のコードは恐ろしいことに、この比較関数に以下のような同じ引数でも呼び出しごとに返り値が異なる書き方をしてしまっていたらしい。

これじゃ sort 関数ががんばって並び替えを行なってる最中に「昇順で並べてね」という命令と「降順で並べてね」という命令が錯綜して与えられる事になる。 そりゃ動くはずもないよ、というわけだ。