2015/07/29

[廣告] Java SE 8懶人包(Java SE 8 for the Really Impatient)

嗨,我翻譯了一本書,在這裡打打廣告。

書名:Java SE 8懶人包
原書名:Java SE 8 for the Really Impatient
作者:Cay S. Horstmann,也是Java暢銷書《Core Java》的主要作者
譯者:我
出版社:博碩
出版日期:2015年7月30日
頁數:256


簡介

在上百萬名程式設計師的殷切期盼下,Java SE 8可說是近年來最重大的Java 改版。引進lambda 運算式(閉包)以及串流,為 Java 程式設計所帶來重大改變,毫不亞於當年泛型以及註文所造成的衝擊。

本書由國際知名的Java書籍作者Cay S. Horstmann為大家一一介紹Java 8最具價值的新功能,除此之外還包含一些不為人知、但卻相當重要的Java 7功能。如果你已是一位熟練的Java程式設計師,本書的實作能夠讓你快速瞭解Java語言及平台的新特性。

這本不可或缺的指南包含了:
  • 說明如何運用lambda運算式,撰寫可重複使用的程式碼片段。
  • 全新的串流 API,讓Java群集更加靈活且更具效率。
  • 藉由lambda 運算式(filter/map/reduce)進行並行運算,為共享計數器與雜湊表帶來顯著的效能提昇。
  • 利用完整一章來說明如何在程式中運用lambda運算式。
  • 說明備受期待且功能強大的date/time/calendar程式庫(JSR 310)。
  • 簡要說明JavaFX(Swing GUI的替代技術)和JavaScript引擎Nashorn。
  • 詳細介紹許多程式庫的細微變化,這些變化能夠讓 Java 程式設計更富生產力也更有樂趣。
本書率先涵蓋了所有這些備受期待的改進,並且能夠協助開發者撰寫出最健全、高效並且安全的 Java 程式碼。

目錄
  1. Lambda運算式
  2. 串流API
  3. Lambda程式設計
  4. JavaFX
  5. 嶄新的日期時間API
  6. 並行處理增強之處
  7. JavaScript引擎Nashorn
  8. 其他好東西
  9. 你可能忽略掉的Java 7功能

2015/07/12

新書發表:Python程式設計入門

嗨,各位好,我寫了一本Python程式語言的入門書,還請多多指教。

書名:Python程式設計入門
作者:我
出版社:博碩文化(書號PG21421
出版日期:2015年3月29日
頁數:544頁
ISBN:978-986-434-005-7


自從1980年代末以來,Python程式語言經過二十多年的耕耘,蓬勃發展,已成為世界當紅的主流開發語言之一,不論是開放原始碼界和商業公司,採用Python來開發軟體專案的例子比比皆是,更有許多成功的案例,而且不論是哪個領域,諸如網站開發、機器人控制、影像辨識、數學運算等,都可見其身影,足可知Python擁有非比尋常的的彈性與能力。

回想起過去的年代,當作者還是莘莘學子之時,學校開設的課程大都為C/C++/Java等語言,而在更早之前,作者的老師們學習的第一支程式語言,多半是Basic或Pascal,時至今日,許多學校與程式設計課程紛紛轉而使用Python作為教學語言,不僅是因為其語法簡潔易懂,適合作為初學者走入程式世界的第一支語言,也因為Python擁有豐富的功能與特色,即便將來欲走向其他領域或某特定的範疇,也都能使用Python,不必耗費時間學習另一支語言。

這是一本Python程式語言的入門書,將會詳細介紹Python的語法和語意,此部份屬於基本功夫,就好像學習英語時,需要學習單字、詞性、時態、文法等等,然後加以運用依據適當的結構寫出句子,也就是撰寫程式;但光如此並不足夠,我們還會介紹程式設計的各種概念,諸如函式、遞迴、閉包、物件等,並且會解說程式執行的抽象模型,透過該模型,思考寫下來的程式碼(死的)在執行時的動態交互作用(活的),如此一來,方能通透明白。

Python目前分為2.x版與3.x版兩個系列,彼此並非完全相容,換句話說,某些2.x版舊程式無法給3.x版執行,反之亦然;雖說3.x版較新較先進,但仍有很多人使用2.x版,仍有眾多的2.x版舊程式,所以本書將會同時兼顧,當有差異處時將會特別註明。以2.7、3.3、3.4版為主,這也是目前最新最普及的版本。

學習資訊科學相關知識時,免不了還是需要英文,因為許多第一手資料與文件,都只有英文,所以本書會放入英文詞彙,為了避免搞混,將會多次出現中英並呈,若原詞彙沒有適當且眾人公認的適當譯詞,或是直接使用原詞彙更顯得清楚明瞭時,將會直接使用原來的英文詞彙。


章節大綱:

第1章,介紹電腦的硬體與軟體,說明程式語言在其中扮演何種角色,簡述Python歷代版本的演進差異,然後下載並安裝Python實作,準備好開發環境,然後才能開始學習Python語言。

第2章,真正開始動手撰寫Python程式,從基本概念開始講起,介紹Python直譯器、何謂名稱與物件、指派的意義、各種運算式與述句、基本的資料型別、迴圈、函式、程式庫模組等。企圖以一章的篇幅介紹必備的基礎知識,有了這一章為底,接下來就可深入,繼續探究Python的各個面向。

第3章,介紹數值型別,包括整數、浮點數、複數、布林等等,以及可用的運算,介紹與數值相關的概念,譬如加總、平均、兩數的關係等等,數值是程式設計的基礎,說到底,電腦裡的所有資料終歸是一堆0與1、也就是數值罷了。之後會介紹具備特殊用處的十進位數和分數,以及整數的位元運算。

第4章,介紹Python的主力容器型別:序列,以及相關的迭代概念,這是一種一個接著一個、具備順序性的資料結構與操作方式,Python最重要的序列型別:序列,便是其中之一,許多議題與功能皆圍繞著串列打轉,譬如可迭代者與迭代器。除了串列外,還有元組與字串,並且介紹字串格式化。

第5章,介紹序列型別以外最重要的容器型別:字典,這是一種具備映射形式的的資料結構,每個元素都是所謂的鍵值配對,本章會介紹雜湊、集合等相關主題,最後簡介具有預設值和具有順序性的特殊字典。

第6章,函式是一門大學問,此章將從基礎逐步介紹函式的裡裡外外,包括如何定義、參數的傳遞、回傳值等基本知識,以及可被呼叫者和可視範圍等概念,並會以詳細的圖示解說何謂命名空間與環境,藉以了解遞迴、閉包、高階函式等進階主題,最後介紹直接由Python語法支援的產生器和延遲綁定的概念。

第7章,本章主題包括資料與編碼,重點放在檔案開啟與文字檔案,將會詳細解釋何謂文字編碼系統,期望能掃除此方面的疑惑,搞清楚底端的二進位資料只不過是一堆0與1(或說是一堆數字),須經過解釋後才具備意義;檔案是種抽象概念,不一定指硬碟裡的檔案,也可代表網路連線或其他資料讀寫來源。

第8章,認識的工具越多,便能根據狀況使用最適當的工具來解決問題,此章介紹串列和字典以外的其他容器型別,包括具名元組、雙向佇列、模組heapq、ChainMap、陣列等等。

第9章,函式實在太過重要,所以此章再談函式,再次深入探討,主題包括遞迴、尾呼叫、裝飾器、函數式程式設計、延遲執行等。

第10章,模組是管理大型軟體的重要利器,Python程式就是由模組所組成,本章介紹如何模組與套件的概念,如何建立模組,以及各種匯入模組並使用的語法,如何尋找、安裝、使用別人開發好的模組。

第11章,雖然至此章才介紹物件導向程式設計,但我們早已使用各種型別的物件撰寫程式;本章將介紹物件導向的主題,包括定義類別、封裝、繼承、重載、覆寫與多型,也會介紹多重繼承與後設類別。

第12章,現代程式語言碰見錯誤、無法執行、意外狀況時,都會提供一套異常處理機制來讓我們著手處理,本章介紹如何引發異常、該怎麼捕抓異常、如何自行定義異常類別。

第13章,學海無涯,此章將列出讀完本書後,接下來可進一步探索研究的主題。

附錄A,分類列出Python內建函式。

附錄B,概略列出Python 2.x與3.x版的差異。

附錄C,ASCII字元表,簡述ASCII和其在今時今日的用處,以及與其他文字編碼系統的關係。

附錄D,參考資料與學習資源,包括Python官方網站裡最常使用的頁面,學習Python的書籍著作與線上教材網站,程式設計的論壇、Q&A討論區、社群以及擷取最新資訊的新聞網站,並列出幾個不錯的練習題網站,藉以磨練寫程式與思考的能力。


原始碼:

書裡所有的原始程式碼檔案,都已上傳至GitHub,可自由下載,直接點按網頁上的「Download ZIP」,便會將所有檔案打包成zip壓縮檔下載,或自行使用git指令下載;章節內文中都會註明相對應的檔名,此外,某些練習題需要的輔助檔案,也一併放在此處。


勘誤表:

若發現任何錯誤,還請留言告知,謝謝。嚴重程度分為三等:大、中、小。

日期:2015.04.13
嚴重程度:中
位置:第27頁,第1行。
原文:因為Python有可變物件(int、float、str)與不可變物件(list)之分
修正:因為Python有不可變物件(int、float、str)與可變物件(list)之分

日期:2015.04.16
嚴重程度:中
位置:第26頁,下方程式碼區塊的第2行、第3行、第6行、最後一行。

原文:>>> weight = 177          # 身高
修正:>>> height = 177          # 身高

原文:>>> height = 68           # 體重
修正:>>> weight = 68           # 體重

原文:>>> li4 = [name, weight, height, title, langs]
修正:>>> li4 = [name, height, weight, title, langs]

原文:['Frank', 185, 75, 'engineer', ['C', 'Python']]
修正:['Frank', 177, 75, 'engineer', ['C', 'Python']]

日期:2015.04.19
嚴重程度:小
位置:第54頁,小節「return述句」的第一段。
原文:但可回傳tuple物件,所以可把許多物件放在tuple裡,
修正:但可回傳容器物件,所以可把許多物件放在tuple或list裡,

日期:2015.04.30
嚴重程度:中
位置:第57頁,第三個程式碼區塊的第5行,註解
原文:任何數的0次方都是0,包括0
修正:任何數的0次方都是1,包括0

日期:2015.05.05
嚴重程度:中
位置:第236頁,程式碼區塊的第5行
原文:return n * fact(n)
修正:return n * fact(n-1)

日期:2015.05.05
嚴重程度:中
位置:第263頁,第一個程式碼區塊最後一行的註解
原文:# 印出0、5、15
修正:# 印出0、5、10

日期:2015.05.05
嚴重程度:中
位置:第263頁,第二個程式碼區塊,第1行跟最後一行的註解

原文:x+n
修正:x*n

原文:# 印出0、5、15
修正:# 印出0、5、10

日期:2015.05.12
嚴重程度:中
位置:第36頁,第一個程式碼倒數第二行
原文:>>> li0 or li2
修正:>>> li1 or li2

日期:2015.06.06
嚴重程度:大
位置:第496頁,上面程式碼區塊
原文:
for i in range(num_agents):
    t = Thread(target=sell_tickets, args=(i, num_tickets, Lock()))
    t.start()
修正:
lock = Lock()
for i in range(num_agents):
    t = Thread(target=sell_tickets, args=(i, num_tickets, lock))
    t.start()

日期:2015.06.26
嚴重程度:小
位置:第33頁,底下程式碼區塊,倒數第二行與第四行
原文:# a等於b嗎?
修正:# a不等於b嗎?

原文:# a等於b嗎?2.x版才有「<>」
修正:# a不等於b嗎?2.x版才有「<>」

日期:2015.05.05
嚴重程度:小
位置:第46頁,倒數第三段、第一行。
原文:首輪的i是0
修正:首輪的i是1

日期:2015.06.29
嚴重程度:中
位置:第107頁,練習題3.7的圖3.1。
原文:
修正:

日期:2015.07.16
嚴重程度:小
位置:第126頁,上面的程式碼區塊,第12行的註解
原文:刪除奇數位置的元素
修正:刪除從索引值0開始、每隔2個位置的元素,直到最後

日期:2015.07.19
嚴重程度:小
位置:第360頁的程式碼區塊的註解
原文:# 0非偶數
修正:# 0不是奇數

原文:# n是不是奇數,等同於n-1是不是偶數
修正:# 「n是不是奇數」等同於「n-1是不是偶數」

原文:# n是不是偶數,等同於n-1是不是奇數
修正:# 「n是不是偶數」等同於「n-1是不是奇數」

日期:2015.07.2
嚴重程度:中
位置:第193頁,上面的程式碼區塊,倒數第七行
原文:{3, 4, 5, 6}
修正:{1, 3, 4, 5, 6}

日期:2015.07.26
嚴重程度:小
位置:第117頁,第一行。
原文:math、pi、circle
修正:math、pi、c、circle

日期:2015.07.26
嚴重程度:小
位置:第133頁,上面程式碼區塊的第二行,應加上底下的註解:
修正:# 注意li.copy(),3.x版的型別list才有方法copy


底下是一般性質的文句修改,嚴重程度都是「小」:

日期:2015.04.16
位置:第71頁,2.7節中的第2小節標題。把全形冒號改成半形冒號。
原文:忘記冒號「
修正:忘記冒號「:

日期:2015.04.19
位置:第49頁,小節「break述句與continue述句」的第1行。
原文:使用迴圈述句(包括while與for)時,有時處理到某輪時,
修正:迴圈述句(包括while與for)處理到某輪

日期:2015.04.19
位置:第52頁,下方程式碼區塊的上面那一段。
原文:函式定義完成後,便可使用它,
修正:函式定義完成後,

原文:函式呼叫屬於運算式
修正:函式呼叫在Python語法中屬於運算式

原文:在括號內傳入適當的參數
修正:在括號內傳入適當的參數

日期:2015.04.30
位置:第59頁,最後一行。
原文:呼叫boo()可得知某物件代表的真假值。
修正:呼叫bool()可得知某物件代表的真假值。

日期:2015.06.05
位置:第22頁,倒數第二段的倒數第三行。
原文:a最後會指向整數物件
修正:a最後會指向整數物件7

日期:2015.06.05
位置:第29頁,第一段的第二行,末尾。
原文:所以必須如上述程式碼加個逗號
修正:所以必須加個逗號

日期:2015.06.17
位置:第40頁,上面的程式碼區塊,倒數第三行。
原文:# 注意i先成為1,然後才指派x[i]
修正:# 注意,i先被指派為1,然後x[i](x[1])才被指派為2

日期:2015.06.23
位置:第107頁,練習題3.3,第二行。
原文:直到最後得到的和是3
修正:直到最後得到的和可被3整除

日期:2015.06.25
位置:第414頁,倒數第三行。
原文:未免太陽春
修正:未免太陽春


日期:2015.06.25
位置:第7頁,第三段、倒數第二行。
原文:PythonXY、Anaconda Python
修正:Python(X,Y)、Continuum Analytics的Anaconda、Enthought Canopy

2015/06/29

Raspberry Pi情報彙整(52)

我收集整理網路上看到的、感興趣的、跟Raspberry Pi相關的資訊,如果您發現任何新奇驚人的專案、新聞、活動等等,還請留言告知。

LifeBox with Raspberry Pi,有藍黃兩物種,不斷複製並競爭,不斷地形成新的樣子(畫面),可以由旋鈕改變參數。聽起來類似於Conway's Game of Life,不過我沒找到背後的演算法規則。

Kite mapping - Raspberry Pi,熱氣球太貴買不起嗎,試試看風箏吧,也能把相機與rpi送上天。
Garden Robot - Raspberry Pi,基金會的新教材:花園機器人,可以偵測光強度、溫濕度、土壤濕度,收集資料並儲存。
Raspberry Pi Official Case - Raspberry Pi,哇,rpi基金會官方設計推出的外殼,嗯,市面上已經有超多很棒的外殼產品,而且乍看之下,似乎看不出這個外殼是rpi官方產品;不過造型仍不錯,可看看文章,詳述設計過程。
Diddyborg metal edition - Raspberry Pi,PiBorg新產品,限量喔。在文章中,這台車還可以載一個人,真的還假的?
Flappy Brain EEG controlled game by Albert Hickey @winkleink » RasPi.TV,用腦波玩Flappy Bird,嘿,能過關嗎?
Outernet - Raspberry Pi,outernet?這什麼東西啊?透過與地球同步旋轉的衛星,廣播發送各種資料內容,譬如醫藥健康、維基百科、新聞消息等,屬於單向傳輸;這麼一來,許多遭受管制的地區,只要使用簡單的裝置,就可以接收這些資料,嘿嘿。
Moving Timelapse Féria de Nîmes 2015 | Nitchevo !,把縮時攝影裝置放在身上,呃,還不錯,不過拍下來的作品,看得我頭昏眼花。
PicoCluster - Computer and STEM education for everyone! by PicoCluster LLC — Kickstarter,推廣STEM教育的硬體載具,含有五台Pi 2,應該類似於運算叢集的概念,募資成功的話,之後會陸續教材與學習內容。
Raspberry Pi Posters,免費且有趣的rpi海報,真有心啊。
Naturebytes Wildlife Cam Kit - Digital Making for Wildlife by Naturebytes — Kickstarter,戶外攝影套件組合,捕捉野生動物的身影。

其他: