目前分類:資訊電腦 (121)

瀏覽方式: 標題列表 簡短摘要
7.8 這就是講 currying ,一般在用函式的時候,參數都要帶足才能用,currying 允許你,可以先給部分參數就好,然後回傳另外一個函式出來,你需要的時候,再把剩下的參數帶進去呼叫。Python 裡不需要另外自己實作,只要引用 functools 模組裡的 partial 即可。

除了舉出這個例子外,還提供其他應用作為參考,像是也可以應用在類別的建構子上,或是簡化函數所帶的參數等等。

7.9 把只有一個方法的類別改寫為函式:因為類別都要先初始化才能使用,這裡舉的例子,就是把這樣的類別改寫為函式,而函式裡再隱藏了一個函式,藉著這樣的機制,避免掉類別初始化的繁瑣。

7.10 讓 callback 函式多點變化:大部分情況下,callback 函式就只是傳參數進去呼叫;在某些時候會想要多輸出一些額外的資訊,但 callback 函式沒辦法記錄,這時候可以利用類別或是 7.9 提到的 closure 函式來記錄額外的資訊,就可以了。
另外也可以搭配 partial 來做更多的應用。

7.11 舉的例子有點複雜,我想他的意思應該是可以應用 functools.wraps 把函式包成 decorator 之後來使用。不過我還是看不太懂。

7.12 這個很妙,利用函數也是一個 first-class object 的特性,把函式指派為函式物件裡的 Method。藉著這個,就可以搭配 closure 做出一些應用。


補充:剛剛找了解說 wraps 的文章,講的很清楚,原來使用 decorator 的時候,你得到的函式資訊是 decorate 過的,functools.wraps 就是用來解決這問題,他會保留原來函式的資訊。
文章標籤

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

7.1 不定參數,就是在函式參數前加上 * ,例如 def foo(*arg) ,這樣 arg 會是 tuple 形態。
7.2 keyword arguments,就是可以用指定名稱來直指參數值,參數前面加上 ** 即可,例如 def foo(**kwargs) ,這樣 kwargs 會是 dict 形態。
7.3 說可以幫函式或參數加上 annotation,像是 def foo(i:int) -> int ,可是我試的結果卻不行。Annotation 的部分是定義在 PEP 3107 ,後來想到要在 Python 3 上面測試,果然,這是 3 才有的。
7.4 原來 return tuple 時可以省略括號,return 1, 2, 3 ,Python 會認定為 return (1, 2, 3)
7.5 default argument ,預先指定函式參數直,例如 def foo(arg=100) ,這一節有特別指出 default argument 的值是在函式宣告時就決定的了。
7.6 anonymous function :這就只能用 lambda 來替代了,但 lambda 有其限制在,要注意。
7.7 anonymous function 裡的變數值,依照執行時的前文來決定,而不是在宣告函式時決定。


文章標籤

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

第一章是 setup python 環境,以及安裝 numpy, networkx。
作者是用 easy_install 來安裝,我個人會建議使用 virtualenv + pip 來安裝,一來是因為 virtualenv 可以方便的構建出測試環境,二來是因為 easy_install 在未來會以 pip 來替代。

指令:
  1. virtualenv mining_the_social_web
  2. cd mining_the_social_web && source bin/activate
  3. pip install numpy
  4. pip install networkx
  5. pip install twitter
  6. sudo apt-get install libyaml-dev
  7. pip install nltk
  8. pip install pygraphviz


照著第一個範例要去取得 trends 時,會發生錯誤,說 "The Twitter REST API v1 is no longer active. Please migrate to API v1.1."
新的 twitter API 的變動不少,v1 已經都淘汰,我試的結果是,現在必須都要經過 oauth 驗證以後才能使用 API。
Trend 現在也需要指定 WOEID 才能使用:

第二個是搜索關鍵字,但現在已經沒有 page 參數了(GET search/tweets),搜索關鍵字的範例:

NLTK 不支援中文,要中文斷詞的話,得花另外一番工夫,可以參考 LACC - NLTK中文化處理及文字筆畫音調剖析工具整合套件

結果看這本書所花的時間多半是在試範例上,Twitter API 改版為 1.1,必須都要驗證過才可以使用。作者在 github 上有開 repository 來放範例程式碼,也都有隨著更新,之前應該先上那邊去看的,可以省許多時間。

更多有關 Mining the Social Web 的事情
文章標籤

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

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) 人氣()

第七章講 dialog, grid 跟 collapsible content。

dialog 的布局是以 page 為基礎,所以得建立一個 data-role="page" 的 div,假設是 page3,然後就可以用 a href="#page3" data-rel="dialog" 來顯示。
grid 不是使用 table,其實都是 div。 所以要先有一個 class 為 ui-grid- 的 div,最多可以有五欄,ui-grid-a 就是兩欄,ui-grid-b 是三欄,以此類推。
格子也是 div,class 則是用 ui-block-a, ui-block-b ... ui-block-e ,換列的話,就從 a 再一次。
書裡沒提到的,ui-block-a div 裡面可以再用一個 class 有 ui-body ui-body-d 的 div,這樣就會有比較好看的格子出來。

collapsible content 就是一個可以收起來的區塊,再點擊就可以打開。一樣也是在 div 加上 data-role="collapsible" 就可以。

第八章講設定 jQuery mobile 的方法,這要透過 bind 去繫結/處理 mobileinit 事件,用 $.mobile 去設置相關設定,p105~p107 有一章詳細的表格介紹。
除了設定以外,也有提供一些好用的工具函式跟變數,讓開發者可以判斷目前狀態或是處理。這邊很多細節的東西,主要都跟 javascript 開發有關係,沒特別細看,到時候再來找。

更多有關 JQuery Mobile Web Development Essentials 的事情
文章標籤

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


第四章講 list-view,我不知道的是,原來有階層的 ul 會自動做出階層的效果,而不必另外放到別的頁面去。當點選時,會自動帶出子階層的項目。另外,放 img 會自動把圖靠左,可以加上 ul-li-icon 會更漂亮;加 data-filter 就會出現搜索欄;span 加上 ul-li-count 則會靠右顯示小數字;以及 divider 跟 delete icon 等等。

第五章是實例演練,蠻輕鬆就弄出一個 mobile 網站。

第六章是 form,介紹了 radio、checkbox、slider、button、search、toggle ...等等,jqMobile 都已經為他們客製化了,都很漂亮。放這些欄位 div 的 class 要用 fieldcontain,欄位文字用 label,然後最好用 fieldset 把 label 跟 input 包起來。

翻到這裡,真的覺得這本書很好翻,程式碼之後馬上就有圖片可以看到畫面,淺顯易懂,非常適合初學者。我想再翻個兩天,就可以翻完了吧。

更多有關 JQuery Mobile Web Development Essentials 的事情
文章標籤

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


這本書使用的 jQuery Mobile 版本是 1.1.0,目前最新版本是 1.3.0。

第一章講的很基本,就直接跳到倒數第二節開始看了。以 data- 起始的 attribute 是 jQuery mobile 魔法的根源,設定好 attribute,大致上就完成了。

第二章就是介紹如何使用了。連結(a) href 寫 #page,jqMobile 會顯示 id="page1"、data-role="page" 的 div tag。若是外部檔案,則會以 ajax load 來載入該頁面,這個地方可以用 Firebug 來觀察。在 data-role="page" 的 tag 加上 data-tile attribute 可以自訂 title。在 a 加上 data-prefetch ,可以預先載入目標頁面,這樣可以提昇頁面切換的速度,當然,花在載入的時間就可能會增加。換頁的效果可以在 a 加上 data-transition 與 data-direction 來設定。

第三章,header/footer/toolbars。header 裡的 a 會自動變為 button,並且依照順序排,一般就是左邊一個,右邊一個,要特別指定放右邊,就是 class="ui-btn-right"。要放 back,可以在目標頁面的 tag 加上 data-add-back-btn="true",要修改文字就用 data-back-btn-text="Return"。另外還有介紹 footer/navbar 的切換技巧。toolbar 篇幅較少,似乎只是為了要避免按鈕被擠壓才需要加上 class="ui-bar"。

更多有關 JQuery Mobile Web Development Essentials 的事情
文章標籤

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


十四,存取 Camera,用 navigator.camera.getPictures ,會跳出系統的相簿程式或拍照程式,完成以後,會把選定的照片傳到 callback 裡。呼叫相簿或是相機,是用 第3個參數裡的 sourceType 決定,Camera.PictureSourceType.PHOTOLIBRARY 是相簿,而 Camera.PictureSourceType.CAMERA 則是相機。

十五,存送資料到遠端伺服器。PhoneGap 有內建檔案相關的函式庫,所以直接使用就可以。這邊示範怎麼使用 FileUploadOption 與 FileTransfer 兩個類別來上傳檔案到網站。

十六,錄製聲音與影像。用 navigator.device.capture.captureAudio 與 navigator.device.capture.captureVideo 即可,要儲存的話,就是搭配前一個 receipt 提到的檔案相關函式庫。

十七,Alert/Confirmation/Vibrate。你可以使用 javascript 本身就有的 alert/confirm,但作者這邊則是改寫為使用 PhoneGap 提供的 navigator.notification 來做,這樣就會出現 Android style 的 alert/confirmation。Vibrate 一樣是包在 notification 裡,除此之外,還有 beep 可以用。

十八,儲存資料在手機上。一樣也是使用檔案相關的函式庫來做,但這次不是上傳,而是用 FileWriter。使用上比上傳來的麻煩,得先用 window.requestFileSystem 去提出存取檔案系統的要求,然後用一堆 callback 下去才能取得可用的 fileWriter,作者是把取得的 fileWriter 放到公用變數裡,給其他函式使用。

十九,讀取手機上的資料,跟上面相似,但改為 FileReader 了。

二十,以 Plugin 擴充 PhoneGap 功能。PhoneGap 雖然包山包海,但難免力有未逮,在遇到這種情況時,可以自行撰寫 Plugin 來擴充。這邊是建立一個 Android library project ,也就是 plugin 來剖析 rss。第一個要點是要繼承自 com.phonegap.api.Plugin ,第二個是複寫 executePlugin 函式,並傳回一個 com.phonegap.api.PluginResult 物件。編譯完成以後,要在專案裡使用,就是在 plugins.xml 裡添加 plugin tag,並提供一個 js 檔案,裡面寫 wrapper 函式以 PhoneGap.exec 去呼叫 Plugin 即可。PhoneGap 的 github 上有很多人分享了很棒的 Plugin 可以用,在自建之前,最好先去找找看有沒有合用的。像是 Android 基本的 startActivity (PhoneGap 沒提供),就有 WebIntent 可以用,而不用再自己寫。

PhoneGap 在所有地方都使用了 callback 的概念,寫的時候得要特別注意,任務的完成或失敗不會是在下一行指令,而是在指定的 callback 函式裡。

整體來說,參考前面幾章,就可以建立起一個簡單專案的雛形,接著就可以用 js/html 撰寫頁面了。每一章的範例都很清楚,相當簡單易懂的一本書。

更多有關 20 Recipes for Programming PhoneGap 的事情
文章標籤

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