13 章是講 Servelet, JSP, Applets 跟 WSGI/mod_jython,這一章我只大略看了 Servelet,其他部分跳過了。
Servelet 照理說都是 .jar,jython 並不能編譯為 .jar,因此要當作 Servelet,jython 是用一個事先寫好的 PyServelet 來做,這個 PyServelet 再去找到 .py 檔,這個設定都是在 web.xml 裡。

14 章是講 django 的部分,這一章我也跳過了。

15 章是介紹 Pylon。

16 章是講 Swing,Java 本身就有跨平台的 GUI framework,所以就不介紹其他的了。
Swing 的部分很容易從現有的 Java Swing 範例直譯過來,這裡用的是一個簡單的 Twitter client,Twitter API 用的是 v1,沒有使用 OAuth。

17 章是介紹怎麼 deploy web-based 應用程式到常見的 Java application 伺服器以及 GAE,我跳過了。

更多有關 The Definitive Guide to Jython: Python for the Java Platform 的事情


文章標籤

elleryq 發表在 痞客邦 留言(0) 人氣()

zxJDBC 讓開發者可以使用 Python DBI 2.0 標準去使用 JDBC,使用這個最大的好處是 JDBC driver 很多,用這個可以不用擔心找不到 driver 的問題。

這裡大量使用了 with 來讓 connection 自動關閉,由於 Jython 2.5 還沒有支援 with 敘述,使用的時候都得先用 from __future__ import with_statement 才行。

在建 cursor 時,可以帶 boolean 進去,True 的話表示是 dynamic cursor,因為沒有整個取回本地端,所以可以大幅降低記憶體用量,缺點就是無法取得 row count。

使用 cursor.tables(None, None, '%', ('TABLE',)) ,再去 cursor.fetchall() ,就可以取得 database 裡的所有 table。

使用 cursor.callproc('proc_test') 可以呼叫資料庫裡的 procedure

cursor 有一個 datahandler 的屬性,設置這個以後,可以去處理像是 preExecute, postExecute 或者是型別的轉換與處理。要設置的話,得先建一個繼承自 com.ziclix.python.sql.DataHandler 的類別,再去覆寫所需要處理的 method,然後再建立物件,指派給 cursor.datahandler 。

zxJDBC 不必另外安裝,已經包含在 jython.jar 裡。

ORM 的部分,介紹的是 SqlAlchemy。SqlAlchemy 是使用 mapper 來對應 Table 與類別 (from sqlalchemy.orm import mapper ),從範例看起來,是相當簡單。

接著是 Hibernate,但用 Hibernate 會不直覺,而且也比較複雜,需要寫 xml 等等的,作者不建議使用。

更多有關 The Definitive Guide to Jython: Python for the Java Platform 的事情


文章標籤

elleryq 發表在 痞客邦 留言(0) 人氣()

這一章主要是介紹可以搭配 jython 使用的 IDE (整合開發環境)

上半章介紹的是 pydev,這個是 eclipse 的 plugin,有蠻多優點的,像是自動完成、除錯、語法高亮等等,由於 eclipse 有專案的概念,會把設定寫到配置檔案,搭配版本控制系統可以確保團隊裡的成員都能使用相同的設定。再搭配原來 eclipse 就有的重構功能,是蠻不錯的開發環境。缺點就是 eclipse 太肥大,啟動慢。前一陣子 pydev 的作者有要求大家贊助他的開發,看起來是已經募集到足夠的金額 (連結)。

下半章介紹的是 nbPython,這是 netbean 的 plugin,同樣也是看起來相當好用。除錯、語法高亮、自動完成...等等的,pydev 有的,他都有。

不過這兩個我都沒在使用,所以就草草帶過,有用到的時候,再回來翻翻。

更多有關 The Definitive Guide to Jython: Python for the Java Platform 的事情


文章標籤

elleryq 發表在 痞客邦 留言(0) 人氣()

因為要用到 Python Testing ,就找書來翻,剛好翻到這本。

第一個介紹的是 doctest,用法很簡單,就是在 class/function 的 docstring 裡放測試程式碼,格式以 >>> 為起始,表示要測試的項目,>>> 下面則是放置測試結果。



第二個介紹的是 unittest,這就比較類似 JUnit 了,一個測試案例需要繼承 unittest.TestCase,然後寫 setUp(), tearDown() 跟需要測試的項目。測試項目就是類別裡的一個方法,方法的結尾通常是用 assertTrue, assertFalse, assertEqual, assertNotEqual, assertAlmostEqual, assertNotAlmostEqual, assertSetEqual, assertDictEqual, assertListEqual, assertSequenceEqual...等等以 assert 起始的函數來做判定。除了這些判定,也可以測試是否有丟出例外



這本書有很貼心的對 3.1/2.7 做出提醒,寫出兩者之間的差異。

相關參考資料:

更多有關 Pro Python 的事情
文章標籤

elleryq 發表在 痞客邦 留言(0) 人氣()

這一章主要是在講 Jython 跟 Java 合在一起使用的合體技。

第一個合體技是 BuildingFactory,主要是寫一個 factory 類別來專門產生 Python 程式裡的物件,在 Python 程式裡的物件都會是 Python Object,這裡使用了 PyObject 的 __tojava__ 函式,將 python engine 產生出來的物件轉換為 java 可直接用的物件。

如果今天又多了一些類別,照前面的方法就會改死,接下來作者就是改良前一個的做法。他的做法就是只傳入必要的型別參數,讓 createObject() 知道怎麼去轉換 (__tojava__()) ,然後傳回 Object,給使用的人自行去做轉換。另外原先的 BuildingType 也避免在 ctor 裡放參數,這樣就可以讓 createObject() 裡的程式簡單化,有需要設置屬性的,就呼叫 BuildingType 的 getter/setter 去設定即可。

第3個版本又做了一些調整與改善,主要是引入了 PySystemState 跟 Py。

接著提到 __doc__ ,這個其實前面都已經做完了,在 PyObject 轉換為 Java 物件的同時,會提供一個 getDoc() 方法,用這個就可以取得在 python 程式裡的 __doc__。

Applying the design to different object type 這一節直接給了一個範例,這個範例主要是引用了 PlyJy 這個 module,並不是使用之前所定義的 Factory 類別。

這邊有提到歷史,說 jython 2.5 之前,裡面有包個 jythonc 的程式,可以把 python 程式轉為 java,再編譯為 .jar,在編譯的同時,介面、類別的定義都會被固定下來,那 java 程式就可以直接引用,不需要另外處理。到了 2.5 之後就不建議使用這種方式,也不再包這個程式。

透過 JSR-223,跟前面相比,使用上會相對簡單,Java 可以嵌入 Jython engine 來執行 Python 的程式。相關資訊可以參考 http://scripting.dev.java.net (此網址已經失效),Jython 版本得用 2.5.1 以後的才行,然後要記得把 jython.jar 放到 CLASSPATH 裡。
作者提到使用 JSR-223 的另外一個好處是可以直接存取到 PyObject,我想這個好處應該是指可以利用 PyObject 的一些功能吧。

看到這邊,我是覺得有點奇怪,為什麼會特別提到 JSR-223?? 從上一節的範例裡看不出來有什麼特別的不一樣。參考這篇:为Java创建你自己的脚本语言-JSR 223介绍以後,才知道原來 JSR-223 提供了 ScriptEngineManager 類別,同時也提供了腳本引擎自動發現的機制,只要把必要的腳本引擎放到 CLASSPATH 裡,ScriptEngineManager 就會自動找到,透過 ScriptEngineManager 也可以去取得腳本引擎並執行腳本,不需要特別去 import 了。這樣跟前面一比較起來,就相差很多。

我認為前兩節的範例可能給錯了。

相關參考資料:

更多有關 The Definitive Guide to Jython: Python for the Java Platform 的事情
文章標籤

elleryq 發表在 痞客邦 留言(0) 人氣()

第九章

取參數:sys.argv
檔案列表:os.listdirs
目前所在位置:os.getcwd
檔案操作:os.rename()
要當作模組的話,記得要把非必要的程式放在 if __name__ == '__main__' 區塊裡
解析參數,得使用 optparse,不要再用 argparse 了。
透過 javax.tools 可以動態編譯 java 程式為 .class
第九章最後一節則是總結前面所提到的,做出一個簡單的類 ant 工具,可以自動找 .java 並且進行編譯。

更多有關 The Definitive Guide to Jython: Python for the Java Platform 的事情


文章標籤

elleryq 發表在 痞客邦 留言(0) 人氣()

第七章是講 Exception handling

Java 跟 Python 比較大的差異,一個是 throw,一個是 raise;再者,Java 會在成員函式加上 throw,表示這個函式會丟出 Exception,編譯器就會強制使用的地方得加上 try-catch 去處理,Python 則是沒有強制規定;Python 有多一個 else,try-except-else ,可以用來處理沒有例外發生時的情況。

除了在 except 接例外時,可以得知是什麼例外之外,也可以用 sys.exc_info() 取得是什麼例外。

except 一次接兩個或更多例外的寫法:except (NameError, ZeroDivisionError), err:

warnings module,可以讓程式提出一些警告,讓開發者瞭解程式的用法可能過時或是有誤等等的。warnings 也是有層級,可以透過 filters/showwarning 以及 category 參數來設定出現哪些層級的警告。這在設計 module 時會蠻需要的。(PYMOTW 範例)

assert 的用法與 C 相似,但卻是直接丟出 AssertionError 例外。

第七章的最後是回頭介紹前面帶過的 ContextLib 。一般在處理檔案或資料庫關閉,可能會利用 try-finally ,在 finally 裡去確保檔案或資料庫有關閉,在 2.5 以後有引進 with 敘述,with 可以將這種情況處理的更優雅。搭配 with 時,可以在類別裡增加 __enter__/__exit__ method 以配合處理。可是這邊就沒有特別提到 contextlib.closing() ,這到底是??

第八章介紹 module 以及 import,這邊看到一個用法,是我之前沒看過的:from . import submodule / from .. import submodule / from .module import submodule / from ..module import submodule ,作者是建議除了 from . import submodule 之外,後面幾種都不要用。

在 module 要隱藏類別或函式的話,就要定義 __all__ = [ "func1", "func2" ],明確的表示 module 提供了哪些類別或函式。

在搜尋 module 時,Jython 會同時搜索 CLASSPATH 與 sys.path。Jython 另外會去讀取 python.packages.paths , python.packages.directories , java.class.path 與 java.ext.dirs 這幾個 property (透過 System.setProperty) 以作為判斷。

使用 module 時,很重要的一件事情。Jython 在找 Python module 時,如果遇到同名的 module,他只用第一個找到的 module;在找 Java packages 時,如果遇到同名的,那麼會 merge 起來;那如果 Python module 跟 Java package 有同名情況時,那就看優先順序了。是故,在命名上,不要用 Java 慣例,就是 url reverse 的方式,以免踩到地雷。

Jython 獨有的 module:import pycimport 。在 import 以後,Jython 會搜索所有 *.pyc 放到 sys.path 裡,之後當你 import 時,會直接使用這個已經被 CPython 解譯過的 .pyc 檔案(裡面是 CPython byte code),而不重新解譯過。Jython 內部的處理手法是利用 sys.meta_path。

更多有關 The Definitive Guide to Jython: Python for the Java Platform 的事情


文章標籤

elleryq 發表在 痞客邦 留言(0) 人氣()

第五章講輸出輸入,先介紹 raw_input() 與 sys.stdin,再介紹檔案的輸出入,最後則是 pickle。

第六章是講 class,大致上的用法都知道了,古書上說,溫故而知新,真的是又從裡面學到不少東西。

有個範例使用到 with 與 contextlib 的 closing,以前倒是不知道有 contextlib.closing,只知道 with ,contextlib.closing 會負責真正的關閉動作,只單除使用 with 的話,似乎並沒有關閉的效果。可以參考 motw 上的範例

Runtime Binding of methods,這是利用 new module 來做的。首先 import new ,然後定義好函式,就可以像 javascript 那樣動態繫結一個函式為物件的方法:obj.method_func = new.instancemethod(func, obj, clazz)。但 new module 在 2.6 以後要廢棄了,之後儘量改用 types module,新的用法可以參考 StackOverflow上的解答,用法是 obj.method_func = func.__get__(obj, clazz) 。

最後有介紹到 cache decorator 的技巧,只要在 function 上加上 @cache,它會自動把函式傳回值放到 cache,避免重覆運算,相當實用的技巧。

更多有關 The Definitive Guide to Jython: Python for the Java Platform 的事情


文章標籤

elleryq 發表在 痞客邦 留言(0) 人氣()

第四章介紹定義函式。

此處有介紹一個 simplegeneric 的 module,可以簡化檢查函式參數的工作,技巧是利用 decorator。

寫 docstring 最好是參照 PEP 257

Generator expression 就是 List Comprehension。

最後提到一個 coroutines,這蠻神奇的。使用的 keyword 是 yield,在 python 使用 yield value,會變成 generator function,但這裡不使用 yield value,而是直接一個 (yield),程式會在此停住。函式一樣是傳回一個 generator,你可以用 next() 持續取得值,也可以用 send() 丟值過去。範例可以參考 Coroutine Tutorial

更多有關 The Definitive Guide to Jython: Python for the Java Platform 的事情


文章標籤

elleryq 發表在 痞客邦 留言(0) 人氣()

第一章主要是介紹 Python 語法,開宗明義的第1節 The difference between Python and Jython 並沒有特別說明什麼,只是簡短交代一下而已。

第二章介紹資料型態,有詳列出 string 的函式,一看之下,才發現有一半的函式我沒用過。除了 Python 原有的資料型態之外,還可以使用 Java 的。使用前得先 import,例如 java.util.ArrayList 就得 from java.util import ArrayList 。另外還有提到 jarray,這就等同於是 java 原生的 array,用途不大。
看到這邊我想到,那如果是 generic 呢? Jython 網站上有特別的 module 來處理:Generic
但好像並沒有特別的語法來處理,網路上也沒看到特別的說明,仔細想想,其實在 python 的世界裡,generic 是沒必要的,使用的時候特別去注意就可以了。

最後一節提到 Garbage Collection,作者說這是最大的不同。CPython 使用 reference counting 來為每個物件計數,以得知何時該回收。Jython 則是使用原來 JVM 的 GC 機制。作者建議沒必要去寫 __del__ 方法來自己做回收,就把這些事情交給 Python/Java 原本的機制來處理。

第三章是運算式跟程式控制流程,沒什麼特別好說的。只有看到一個 divmod 函式,可以傳回 tuple,tuple 裡是相除後的商跟餘,這樣可以省下不少 code。

更多有關 The Definitive Guide to Jython: Python for the Java Platform 的事情


文章標籤

elleryq 發表在 痞客邦 留言(0) 人氣()

打算看完這章就好。目前沒有要迫切使用,所以大概知道一下就好了。

expect 也可以用 glob pattern,這是 bash 下常用的,像 * 就是萬用字元,? 代表任一單一字元,[ ] 則是符合中括號裡的字元,使用 [] 時要注意的就是得用 \ (backslash)去 escape 掉,像 expect "\[a-z\]" 或 expect "\[0-9]" 都可以。作者討論了蠻多關於使用萬用字元的技巧。

使用 backslash (\) 也是要特別注意,作者在這邊也是討論了許多案例。

除了用 set timeout 之外,也可以在 expect 裡直接用 timeout exit,像是 expect { timeout exit ... } 這樣,就表示如果等不到要等的字串就離開這樣。
這邊有舉了一個 ping 的例子,一般 ping 是指定 -c 表示 ping 幾次之後就離開,用 expect + timeout 就可以做到連續 ping 一段時間都不行才離開的功能。

這一章後面還有討論到 eof, close 跟 wait,有點懶得看下去,就快快掃過了。

更多有關 Exploring Expect 的事情


文章標籤

elleryq 發表在 痞客邦 留言(0) 人氣()

最基礎的兩個指令,expect, send

先輸入 expect 進 expect 的互動文字介面,打 expect "hi" { send "hello\n" }
然後輸入 hi ,就可以看到 hello

可以同時等兩種回應的寫法:expect "hi" {send "hello\n"} "boo" {send "hooray!\n" }
也可以搭配 set timeout 來指定等候時間,這樣可以在某段時間沒回應的情況,自動輸出字串。

spawn 是可以執行一個外部指令,執行完,接下來的 expect/send 就都是針對這個 process,這邊舉了一個實用的例子,可以自動登入 FTP ,輸入帳號、密碼,然後抓取檔案,最後再把取得的檔案解壓縮。解壓縮的部分是用 exec 來執行外部指令。

interact 則是將輸出入交回給 spawn 出去的 process,這時候就得用鍵盤輸入之後,才能繼續。

更多有關 Exploring Expect 的事情


文章標籤

elleryq 發表在 痞客邦 留言(0) 人氣()

第一章是簡介,介紹 expect,expect 是可以幫助你解決掉想要程式自動執行,卻又必須跟程式互動的問題。或許這樣說會更好一點,就是想要讓程式自動執行,不需要人的操作,大部分的 unix like 程式都可以做到,但有些就是需要人為操作,例如 fsck 的修復,這時候就可以利用 expect 來幫你進行操作,當然,你還是需要懂 TCL script 才行。

第二章則是介紹 TCL script,TCL script 是 expect 的基礎,所以對 TCL 要有一定的瞭解。這一章從 TCL 的變數、控制敘述、串列陣列字串的操作、例外處理等等,全部都介紹了,因此這個章節非常的長,我認為相當詳盡,根本就是 TCL 的 pocket guide,看完就可以寫 TCL script,我個人是相當沒耐心地快速掃過一次。

更多有關 Exploring Expect 的事情


文章標籤

elleryq 發表在 痞客邦 留言(0) 人氣()

閱畢日期:2013/3/10 2013/5/3

上下兩集相隔了快一個月,其實也忘記上集的內容,所以乾脆就寫在一起。

這一部主要講的是勞勃國王 (Robert) 死後的事情,Robert 死了以後,他的兩個弟弟 Stannis 與 Renly 分別自立為王,再加上北境之王 Robb 與繼位的喬佛里 (Joffrey),就是四王的混戰。

Stannis 對 Robert 與 Renly 早就不爽了,因此首先對付的是自己的弟弟 Renly。為此,他服侍了新神,起用了女祭司 Melisandre,而女祭司也的確幫了他不少忙,暗殺了 Renly 並拿下 Renly 的居城 Storm's End。Stannis 家有個值得關注的角色 Davos Seaworth,綽號洋蔥騎士,是一個誠實有遠見的騎士,但卻被其他家臣看不起,在攻打君臨之後,生死不明。

Robb 在這兩部裡,倒是沒有太多著墨,只有交代他深入蘭尼斯特家領地,拿下了幾座城池。Tyrion 被父親 Tywin 派回來幫姪子 Joffrey ,他輔佐的相當出色,暗地裡安排了燒夷劑跟大鐵鍊作為防守的秘密武器。

這一部的後半段有一段是攻打君臨,算是這一部的重頭戲,前半段 Tyrion 成功的利用他的計謀拖延了 Stannis 並且有效打擊其部隊,但在後半段,由於守軍不足,以及 Cersei 的扯後腿,讓軍心渙散,導致 Tyrion 自己得領軍出去作戰,就在即將吞敗仗的時候,Tywin 跟 Baelish 討回的救兵一起回來攻打 Stannis 的背後,讓 Stannis 一敗塗地,但 Tyrion 也因此受了重傷。

Jon Snow 深入絕境之後,被下令要背叛守夜人軍團,以窺探 Mance 的內部。Arya Stark 仍然沒辦法回到臨冬城 (Winterfell),途中被擄到 Harrenhal ,很幸運的脫離了僕役的處境,然後準備要離去。

臨冬城被反叛的 Theon Greyjoy 拿了下來,本來是說,半身不遂的 Bran, Rickon, Meera, Jojen 幾個人逃跑,然後似乎是被抓住,但看起來 Theon 是手下留情了,用了另外的人來替代,最後 Bran 跟 Rickon 等到臨冬城被燒毀以後分道揚鑣。Theon 也沒有好下場,反而被波頓的私生子抓住,野心無法實現。

新的角色是愛著 Renly 的彩虹騎士布琳,有點悲的角色,作者好像有想利用這個角色來探討男性化的女性在社會所受到的不平等對待,這一部的最後是被派去押送 Jaime Lannister 去君臨要交換人質,第三部好像有他兩的火花。

剛好趕上 HBO 第三季影集的演出,有稍微看一下,不得不說 Cersei Lannister 真的選的很好,很漂亮,然後 Arya 、 Tyrion 這兩個角色我也覺得選的很好,不過很懶得看影集就是。截至目前為止最喜歡的幾個角色:Jon Snow, Arya, Tyrion 跟 Bran。

看完沒幾天,很失心瘋地在 Amazon 買了原文的一到四部的套書,特價 20 美金上下,算是很便宜的價格啊。這也是我為什麼這篇裡面夾雜了人物的英文,因為要看原文小說,就得把之前中文譯名跟英文連結起來才行,這樣才能瞭解故事來龍去脈,不過有點擔心是浪費錢。

更多有關 冰與火之歌 第二部 的事情
更多有關 冰與火之歌 第二部 的事情


文章標籤

elleryq 發表在 痞客邦 留言(0) 人氣()

閱畢日期:2013/5/2

作者傅瑞德節錄了他自己網誌上講了線上出版跟電子書的許多文章,文章是陸陸續續在這十年間寫的,所以可以看到作者這十年來對電子書及線上出版的預測與想法,同時也看到這十年裡的演化,還蠻有意思的一本書。

基本上,電子書勢在必行,在國外已經可以看見 iPad 與 Amazon Kindle 瓜分了電子書市場,而出版社也已經釋出許多電子出版刊物;而在台灣,只有少數出版社去取得了電子書的授權,電子書網站則多使用特定的格式,而非較為風行的 epub/mobi ,價格等等的因素都影響了台灣電子書的發展,未來仍然有待努力。

這本書有免費的電子版本可以下載,也可以購買實體版本,詳情可以參見 潑墨書房

作者網站:石墨工房

更多有關 一個人的出版史 的事情


文章標籤

elleryq 發表在 痞客邦 留言(0) 人氣()