Jython
2008年06月22日
SICPの図形言語をJython(のアプレット)で実装した
せっかく「Jythonプログラミング」読書会やったので
なんかアウトプットがないともったいないおばけが出る。なお読書会につきましては→短期集中Jythonプログラミング読書会終了!で。
https://livedoor.blogimg.jp/r_c_3/imgs/2/f/2f9711dd.jpg
実行は、JythonでSICPの図形言語 - 310ちゃんねるで。環境によっては動かないかもしれません。なんつってもいまんところ俺PCでしか動いてないし。ハウスの共有PCで動かなくて涙目。管理者権限がないからJavaコンソール見れないっぽいし。アプレット版が動かないときは、ずう〜〜っと↓のリンクにあるJavaScript版でおk。JavaScript版は大抵のところで動くと思う。ケータイは知らんがな。
文句
- Pythonはインデントめちゃくちゃな糞コードが書けない。
- たまには書きたいときもある(エディタを使いこなしてないからかもね)。
- コンパイル時に検出できそうじゃね?ってエラーが実行時に出る。
- かもしれない。詳細は不明。
- Eclipseの起動に2分半かかる。
- 画面は、EclipseのJiglooってやつで作ってから秀丸にコピペした。
- Eclipseを使うのはそんときだけ。
- ボタンクリックを最初MouseEventでやってた(ActionEventへ修正)。
- Javaは昔とった杵柄&aname(_1)&size(10){[[*1>#1]]}でやってる。どこかでブラッシュアップしたいなあ。
- コンパイルに2分弱、ビルドに約5分かかる。
- 実行(アプレットのロード)に1分かかる。
環境
- Windows 2000 SP4
- Celeron800MHz(笑)
- java version "1.6.0_06"
- Jython 2.2.1 on java1.5.0
- どうもIBMのJREを見に行ってるっぽい。SunのJREもインストール済み。
ビルド手順
1 C:\>jythonc --jar sicpapp.jar --all sicpapp.py~~
2 C:\>mkdir jars~~
3 C:\>copy sicpapp.jar jars~~
4 C:\>cd jars~~
5 C:\jars>jar xf sicpapp.jar~~
6 (エクスプローラで)jython.jarを展開してできたorg\pythonをjars\org\pythonへ上書き~~
7 (エクスプローラで)sicpapp.jarを削除~~
8 C:\jars>cd ..~~
9 C:\>jar cfm sicpapp.jar jarsicp\META-INF\MANIFEST.MF -C jarsicp .~~
10 C:\>jarsigner -keystore sicpkey sicpapp.jar mykey~~
1 コンパイル~~
2〜9 org\python\parser\ast\とかが入ってないので、強引に入れる~~
10 署名付きアプレットへ。証明書の作り方はJythonプログラミングを参考に。この認証局に申請していない証明書は「オレオレ証明書」と呼ばれるらしいです。~~
ビルドの2〜9、やっていいんかな〜?
2. Can't use "exec" or "eval" in (unsigned) applets.~~
〜(ry〜~~
Any applet that wants to dynamically execute arbitrary strings of
Python code must be signed and given permission by the user.~~
とあるように未署名アプレットでは、execが使えない。署名すると使えるよ、と書いてあるように読めるので、署名したところ、org.python.parser.ast.exprTypeがノットファウンドになってしまう。なので、強引にjarアーカイブに追加した。
アフィ
リンク
- SICPの図形言語をJavaScriptで実装した(はてな)
- (2008/02) JavaScriptによる実装(310ちゃんねる)
- (2002ごろ) Ruby/Gtkによる実装(310ちゃんねる)
- SICP 2.2.4 Example: A Picture Language
- Cloud Garden - Jigloo GUI Builder (SWT and Swing) for Eclipse
- Swingを使ってみよう - Java GUIプログラミング
- 高木浩光@自宅の日記 - オレオレ証明書の区分 改訂版
- ---
&aname(1) &size(10){[[※1>#_1]]・・・きねづか、これ豆知識な。}
2008年06月15日
短期集中Jythonプログラミング読書会終了!
参加者は1名でした!
読書会 アーカイブ
- Java + Python = Jythonその1
- Jythonプログラミング読書会 in 千駄木 その2、その3
- Jythonプログラミング読書会 in 千駄木 その4
- Jythonプログラミング読書会 in 千駄木 その5
プログラミング3.0についていけないかも・・・
JRubyについて少し調べたら、JPythonと似たような感じかな。これまでPythonってほとんど使ったことがなくて、自分の中でスクリプトといったらRubyになってる。Perlはむか〜し使ったことがあるけど、忘却の彼方。この勢いでJRubyでもやるかと思ったけど、jruby\bin\_jrubyvars.batにJAVA_HOMEを定義して、swingのサンプルを起動して終了して終了。
というのも、言語Xと言語Yの融合をどう使うかが見えてこない。そこで本節のタイトルですよ。これは非常にセンスの問われるアレだと思う。おれはプログラミングのセンスないし。センスないからあきらめる、じゃないんだけど、なんてーか融合とかまーいいかーって感じぃ。なんかScalaがプ3.0時代の言語なのかな?あーもーよくわからん。
%%というわけで、千駄木から半径5kmぐらいなら自転車便でデリバリーいたしますよ!CD-ROM未開封新品同様(ただし中古)2000円ぐらいでどうでしょうか!!ハンディバイク8でお伺いします!!%%って思ってたんだけど、やっぱやめた。もう少しPythonのところじわじわ読んでみる。ただ、Jythonの本としてはびんみょー☆ミだと思う。
2008年05月03日
Jythonプログラミング読書会 in 千駄木 その4
6章.お絵かき
まずはジャイ子とやらのインストール。LibreSource - Downloadから1.4をダウンロード、batを実行。
>F:\Tool\JyConsole-1.4-bin>java -cp "JyConsole.jar:thirdpart/jython2.2/jython.jar:thirdpart/ArtTk/ArtTk.jar" com.artenum.jyconsole.JyConsole~~
>Exception in thread "main" java.lang.NoClassDefFoundError: com/artenum/jyconsole/JyConsole~~
>Caused by: java.lang.ClassNotFoundException: com.artenum.jyconsole.JyConsole~~
> at java.net.URLClassLoader$1.run(Unknown Source)~~
> at java.security.AccessController.doPrivileged(Native Method)~~
> at java.net.URLClassLoader.findClass(Unknown Source)~~
> at java.lang.ClassLoader.loadClass(Unknown Source)~~
> at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)~~
> at java.lang.ClassLoader.loadClass(Unknown Source)~~
> at java.lang.ClassLoader.loadClassInternal(Unknown Source)~~
涙目。1.3をダウンロード、batを実行。たぶんおk。
- JyConsole-1[1].3-bin.zip MD5:D134EBD4E0E9E6CB226C40647727794B 2,458,866
- JyConsole-1[1].4-bin.zip MD5:DF65DDB731E9B71713EFB9511594D2CE 2,026,946
(FastHash(0.39b))
171ページ
「大きなプログラム」〜。断念されたのは残念。続きはWebで〜は虫がよすぎるか。
175ページ
>import com.artenum.jyconsole.*;~~
はいらないんだけっか?
176ページ draw()のBをpublicフィールド化、
177ページ f()のAをB同様にpublicフィールド化。
177〜8ページ Aのsetter/getterを作成し、repaint()追加
179ページ
実行しても再描画されない。JyConsoleとJFrameのフォーカスを手動で切り替えると、再描画される。/検索しまくる/paintComponentsとかupdateとかToolkit.getDefaultToolkit().sync()とかかなり必死/できねー/本を見直し/179ページ 『publicなフィールドaがない場合、〜』。/ソース見直し/public double a → private double a/実行/解決。/長かった・・・。
次からテーマが変わるみたいなのでここらで休憩。
根津じんじゃー後に再開。
183ページあたりで飽きてここからはコードを入力せずに読んだだけ。
7章.Jythonの応用例
斜め読み。
Jythonプログラミング読書会 in 千駄木 その2、その3
- Jythonプログラミング(livedoor wikiではタイトルにwiki記法は使えない?)
4章.(続き)
4.4制御構造から。昼間の再開するか、と意気込んでから1時間以上経ってから再開。これもインターネットのせい。
111ページ
>class Foo(aa):~~
> pass~~
>Traceback (innermost last):~~
> File "
>NameError: aa~~
どこが間違ってるのかよくわかんねかった。お約束、で読み進めたら、116ページの3倍速カウンターを見て解決。
privateについては付録で、とあるように『elifってなに』も付録にあるとうれしいかも?そこは範疇外かな。
4.4制御構造はCounterの辞書がうんたらのあたりで息切れ気味になってしまった。今日は寝かせて、明日またじっくり読んで見よう。
5章.○○
むずかしそう。6章はなんか絵が出てきて楽しそうだ。
↑昨日/今日↓
復習
昨日は久しぶりにこの手の内容を詰め込んだので、さらっと復習。
昨日はさっと読み飛ばした1章。1.0→アセンブリからC言語へ(抽象化)、2.0→C言語からJavaへ(ライブラリの肥大化)、そして200X年 プログラミング3.0 言語融合化の時代へ。前からこの時代がくればいいなと思ってました。by佐藤I子。画面はVBのやつ(Visual Studioかな。VB5か6を仕事でつかってて結構便利だった。Delphiでもいいか?)で作って、文字列処理はスクリプト言語でやりたいよね。.NETが出たとき、これでできるかも!と思ったけどぜんぜん手ぇ出してなかった。時は流れて、Jythonでやっとこできるようになったよ。これまでPythonはぜんぜん使って無くて、スクリプトはずっとRubyだったけど、JRubyもJythonと似た感じなのかな?JPerlはない?/昨日ダウンロードだけしておいたJava DOCとsrc.zipの設定をしておく。
フリーズ実績のあるelicpseでSwingを実行。実行おk。よかった。
昨日寝る前に、付録を読んで文字コードの設定やっておけばよかった・・・。朝からやりたくないので残念ながらスルー。
5章.○○
4章の理解度が甘いなとは思うけど、先に進みたいので、5章。5.1、5.2は楽勝だったが、5.3で挫折。{}、[]、__に慣れてないのかな、コードを読んでてなんかうっとおしい。インスタンスメソッドもどきメソッドへselfを渡しているのを見て、Java謎+落とし穴徹底解明を思い出した。こっちの本にも似たようなことが書いてあったような気がする。Amazonで、キーワード:javaで検索して、20ページぐらい見たけど出てこなくて涙目だったが。
5.4”「変数は箱」を卒業しよう”の表題だけを読んでまた涙目。変数は箱だと思ってました。以降は飛ばして、6章へ。6章は絵が出てくるので楽しそうと思ったけど、JyConsoleというのを導入してからやるらしい。面倒なので[あとでやる]。
本書でツートップの長さを誇る4章と5章は、Jython関係ないような予感。
2008年05月02日
Java + Python = Jythonその1
- Jythonプログラミング読書会 in 千駄木
0章.その前にJava
JDK1.1、1.2、1.3ぐらいまではなんとなく見てたんだけど、それ以降はまったくのノーチェックだった。なので、少しチェックしとく。Java in the Boxによると、1.4はたいしたことなくて、SE 5.0(JDK1.5?)で文法の変更があったのかな。SE 6.0はそれほどでもなさそう。これでチェックしたことになんのかって言われそうだがとりあえずおk。
2章.環境構築
本購入以前にJava、Eclipse、CPythonはインストール済み。足りないJython、Pydevを本のとおり忠実にインストール。Pydevのインストール途中でMy〜 Integration 0.2がどうのっていわれてたけど、リストに(正常にインストールできそうな)0.3があるみたいなので、エラーになってる0.2のチェックをはずしてインストール。(たぶん)インストールおk。
https://livedoor.blogimg.jp/r_c_3/imgs/3/4/341afb52.jpg
jythonもなんかアイコン欲しくね?ここではCPythonのアイコンをお借りしました。
3章.Hello, Jython
JavaとPythonをいったりきたりして頭痛くなってくる。セロリン800MHzでEclipseはきつい。就職したらX300を買うじゃなくて、前倒しでアウトレットのやつ買おうかな〜。
65ページのソース。
>(import省略)
泣いた。本を高値で売るために付属CD-ROM未開封なので、Eclipseでエラーになるたびggr。以下でおk。
>import java.awt.event.*;~~
>import java.awt.Dimension;~~
>import javax.swing.*;~~
68ページのRunCodeInTextPane.java。今度はソース完全省略。なんて厳しい本なんだ・・・。以下のワンライナーで対応。あってるかは不明。その後の実験ではとりあえず動いてる。動く=正しい。
>import org.python.util.PythonInterpreter;public class RunTextPane {PythonInterpreter pyi = new PythonInterpreter();public RunTextPane() {pyi.set("pyi", this);pyi.execfile("src/runtextpane.py");}public void exec(String s){pyi.exec(s);}public void execfile(String s){pyi.execfile(s);}public static void main(String[] args) {new RunTextPane();}}
71ページの最後のところ
>b2 = f2.contentPane.componens[0]~~
>b2.bounds = (300, 300, 50, 50)~~
>f2.add(b2) #おれっちのところではこれを入れないとf2のボタンがどっかにいってしまう~~
>f2.validate()~~
4章.何回目かのPython入門
SGウォッチをダウンロード。
81ページ[あとで読む]
日本語出力のあたり。付録の回避方法があるらしい。
86ページ
>re.search~~
>NameError: re~~
>import re~~
>
正規表現のグループ名のところでいったん休憩。ここまで30分くらい。/どうせ着てないメールチェック、RSS、フリーセル等を経て再開。/グループ名は記号が多くて目が痛くなってきたので[あとで読む]。
リストとタプルはぽちぽち実行しながらやったけど、jarrayのあたりで集中力が切れる。以降4章の終わりまで斜め読み。ここまで20分。
ごはんを食べる前におそるおそるNetBeansを起動。ようはここで長い休憩になるので、NetBeansを起動して(もし)フリーズ画面になっても強制電源オフでもいいかなというニュアンス。起動、終了おk。
PCスタンバイにして飯。そういえばまだ書いてなったと思ったけど、昨日だかおとといあたりから米炊いてる。今日はとろけるチーズ+ハンバーグ(もちろん温めるだけ)+目玉焼き。ハムが切れてたのが残念。
95−96ページ
>print "%d" % (1)
がエラーにならない、ふしぎ、って思ったら、(1)は整数の1が返るなので問題なしか・・。
4章はこのタイミングで終わらそうと思ってたけど、今回は4.3まで。4.4を斜め読みしたところで10分くらい。4.4制御構造は[あとで読む]。ここまでは、3章の動的な話しはおもしろかった。4章のPython入門はこの本でページを割くにはもったいないような気がするけど、Pythonをまったく知らない人、まで対象にしてるみたいなので必要なのかな。
これから、1週間以上やってなかった家計簿の整理、履歴書執筆(俺的締め切り(先方からの指定は特になし)は今日だったけど、まだなんもやってない。これからごめんなさいメールを出す。もうG.W.かもね。)、GPS遊びをちょっとやる。夜になったら、5章を斜め読みするかもしれない。