2018年12月31日 星期一

2018 年第 52 周記事

終於來到第 52 周, 今晚要告別 2018 年了. 每年大家都瘋跨年, 但誰記得哪一年過得如何? 人的記憶真的很不可靠, 所以我才要每周寫周記, 雖都是些雞毛蒜皮的流水帳, 但也只有透過流水帳, 才能如實看到我們怎麼活過來的不是嗎?

週二上完基本電學第六堂課後, 再次擁抱自由研究的感覺真好. 但前幾天看到新聞說由於新南向政策以及減少少子化衝擊而開的東南亞專班出現一些問題, 例如廉價勞工與非法打工等, 我看到的不是這樣, 這些年紀與我孩子同齡的小朋友真心學習者還是很多, 我亦鼓勵他們要向 Professional 方向挺進.

姊姊週五下午回到家, 今天中午回台北, 寒假要留在台北打工 (蛋黃哥餐廳), 只回來過年. 孩子長大了, 以後能常回來機會不多, 更別說是一起回鄉下, 想起來就覺得有點蒼涼. 我向來就孤僻, 孤獨從來不是我該煩惱的問題, 但為何現在竟有感了呢?

昨天接到棋濤學長來訊, 說他在鄉下又買了一塊地, 地點在上清街, 與岳父的農舍很近, 下午便聯絡他說要過去看看, 其地頗方正, 正打算賣掉十軍團附近那塊五分地, 籌得銀兩後在新農地上蓋農舍. 好幾年沒見面, 一整個下午便在百香果架下聊得很開心, 參觀他的新領地也發現他裝了幾塊太陽能板, 我還沒時間做的他已著手了.

昨晚更新鄉下安博的愛奇藝帳號後隨便挑了一部韓片 "我的大叔" 來看, 結果一發不可收拾, 連看七集到三點, 實在太過分, 真的太廢了. 不過收穫是, 對於人生的看法又有一些體會.

"我的大叔" 描寫在一家大企業三安 E&C 擔任結構技師與部長的朴東勳, 在公司高層內鬥中意外被已爬上代表職務的後輩學弟都俊永栽贓收取賄賂, 但賄款卻又意外地被部內一個年僅 21 歲的冷漠女派遣工李知安偷去償還高利貸, 但怕被報警而丟進垃圾桶, 反而讓朴部長逃過一劫 ... 朴部長在私下調查中意外發現妻子與學弟都俊永外遇 ... 朴部長不知道李知安在擠電車時趁機在手機中安裝監聽軟體, 在長期監聽朴部長手機過程中似乎愛上了這位大叔 ... 還沒看完.

劇中朴家這三兄弟的際遇, 或許是南韓社會的一種寫照, 但不論怎麼不幸, 如何不順, 如何委屈, 我們都要厚著臉皮活下去! 那個出家為僧的德謙 (鄭熙喜歡的人) 說, 把犧牲從字典中劃去, 別再委屈自己, 讓自己先幸福起來吧! 以此迎接我的 2019 生日 !

劇中主題曲 Sondia (孫敏京) 唱的 "大人" 超好聽, 好純淨的聲音 :




還有一首 "There is a ranbow (有一道彩虹)" 也很療癒 :




第 8 集裡, 得知妻子外遇的朴部長問鄭熙說, 要怎樣才能不重新投胎重回自己的家? 鄭熙說 : 傻瓜, 真的不知道嗎? 怨恨的 ... 怨恨的心早已不在, 願為你毫無保留 ... 毫無保留的付出一切 ... 就能飛向那眷戀已久的美麗行星 ... 就是下面這首 "百萬朵玫瑰" 中的歌詞. 此原為 Alla Pugacheva 原唱之俄語名曲, 但我覺得這位韓語翻唱者 Ko Woo-rim 唱得更好, 他聲音好有磁性.  :





2019-01-01 補充 :

今天終於把 "我的大叔" 看完了, 過癮.

我注意到都俊永心不甘情不願地在朴部長的升職審查結果上簽的是漢字姓名都俊永, 但愛奇藝字幕卻翻作都俊英, 字幕翻譯品管似乎 ...

另外, 此劇中飾演朴家三兄弟媽媽的就是 "雞龍仙女傳" 中飾演咖啡婆婆宣玉南的高斗心, 化妝後幾乎認不出來. 另外飾演朴家大哥朴尚勳的朴浩山就是在 "客 The Guest" 中一直罩著姜吉英的高警官. 飾演李知安奶奶的也在九號房間飾演張華娑聾啞的母親.

"了解一個人, 就算他做了甚麼事都無所謂, 我了解你"

# 我的大叔完結篇
三萬歲: 加油
FULL OST MY AHJUSSI
https://www.youtube.com/watch?v=Ywr34E7LY6Y

在樹莓派上編譯安裝 Python 3.5.6

在 Win10 上安裝測試 PyTorch 後, 初步覺得 PyTorch 真的好用, 跟 Keras 一樣簡潔但彈性更大, 所以就想在樹莓派上也安裝看看. 我在 PyPi 上找到一個樹莓派用的 v0.4.0 版 whl 檔 : 

https://pypi.org/project/torch-raspi/

在 Download 頁面複製下載連結, 用 wget 指令下載安裝卻出現 "not a supported wheel on this platform" 訊息 :

pi@raspberrypi:~ $ wget https://files.pythonhosted.org/packages/94/2e/45178cbf729f96d961c97a940fd1780f8054a740fa959cf7555e8434e0fd/rpi3.torch-0.1.0-cp35-cp35m-linux_armv7l.whl    
--2018-12-30 08:29:08--  https://files.pythonhosted.org/packages/94/2e/45178cbf729f96d961c97a940fd1780f8054a740fa959cf7555e8434e0fd/rpi3.torch-0.1.0-cp35-cp35m-linux_armv7l.whl
Resolving files.pythonhosted.org (files.pythonhosted.org)... 151.101.73.63, 2a04:4e42:36::319
Connecting to files.pythonhosted.org (files.pythonhosted.org)|151.101.73.63|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 52261275 (50M) [binary/octet-stream]
Saving to: ‘rpi3.torch-0.1.0-cp35-cp35m-linux_armv7l.whl’

rpi3.torch-0.1.0-cp 100%[=====================>]  49.84M   247KB/s   in 91s

2018-12-30 08:30:41 (563 KB/s) - ‘rpi3.torch-0.1.0-cp35-cp35m-linux_armv7l.whl’ saved [52261275/52261275]
pi@raspberrypi:~ $ pip3 install rpi3.torch-0.1.0-cp35-cp35m-linux_armv7l.whl   
rpi3.torch-0.1.0-cp35-cp35m-linux_armv7l.whl is not a supported wheel on this platform.  

由於此 whl 檔標明是使用 Python 3.5 編譯, 我懷疑是不是因為我的 Pi 3 上的舊 Raspbian 系統為 v3.4.2 版之故, 所以想另外安裝 Python 3.5 試試看 :  

pi@raspberrypi:~ $ python3
Python 3.4.2 (default, Oct 19 2014, 13:31:11)
[GCC 4.9.1] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>

我找到下面這篇安裝 Python 3.6 的文章, 按其程序來安裝 3.5 版. 在 Python 官網的 ftp 站可找到各版本的 Python 源碼, Python 3.5 最後一個更新是 Python 3.5.6, 我下載的源碼是 Python-3.5.6.tar.xz :

https://www.python.org/ftp/python/

下載編譯與安裝需要依序執行下列指令, 每一個都需要一點時間, 總共大約要花近 1 個小時 :
  1. wget https://www.python.org/ftp/python/3.5.6/Python-3.5.6.tar.xz
  2. tar xf Python-3.5.6.tar.xz
  3. cd Python-3.5.6
  4. ./configure
  5. make
  6. sudo make altinstall
完畢後執行 python3.5 就會進入 IDLE 介面 :

pi@raspberrypi:~ $ python3.5   
Python 3.5.6 (default, Dec 30 2018, 13:58:11)
[GCC 4.9.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>

可用 whereis 或 which 指令查詢 python3.5 安裝位置 :

pi@raspberrypi:~ $ whereis python3.5 
python3: /usr/bin/python3.4 /usr/bin/python3.4m /usr/bin/python3.4-config /usr/bin/python3.4m-config /usr/bin/python3 /usr/lib/python3.4 /usr/lib/python3 /etc/python3.4 /etc/python3 /usr/local/bin/python3.5 /usr/local/bin/python3.5m /usr/local/bin/python3.5m-config /usr/local/lib/python3.5 /usr/local/lib/python3.4 /usr/include/python3.4 /usr/include/python3.4m /usr/share/python3 /usr/share/man/man1/python3.1.gz
pi@raspberrypi:~ $ which python  
/usr/bin/python     (Python 2)
pi@raspberrypi:~ $ which python3.5  
/usr/local/bin/python3.5   (Python 3.5)
pi@raspberrypi:~ $ which python3   
/usr/bin/python3  (Python 3.4.2)
可見目前這塊 Pi 3 SD 卡內已經有三種 Python 版本了, 但是用 pip3 安裝那個 whl 檔還是不行, 查詢 pip3 還是跑 Python 3.4.2 版的, 如果是這個造成的要怎麼改?  

pi@raspberrypi:~ $ sudo pip3 install rpi3.torch-0.1.0-cp35-cp35m-linux_armv7l.whl    
rpi3.torch-0.1.0-cp35-cp35m-linux_armv7l.whl is not a supported wheel on this platform.
pi@raspberrypi:~ $ which pip3   
/usr/local/bin/pip3
pi@raspberrypi:~ $ pip3 --version
pip 18.1 from /usr/local/lib/python3.4/dist-packages/pip (python 3.4)

等有空再來研究到底哪裡有問題. 我在想, 是不是乾脆參考下面這篇從源碼編譯算了 :

在 RaspberryPi 上编译 PyTorch

2018年12月29日 星期六

Julia 學習筆記 (二) : 樹莓派安裝 Julia

今天在 Win10 上安裝 Julia 並做個簡單測試後, 我在想樹莓派上是否也能安裝最新版的 Julia 1.0.3 呢? 可以的, 作法跟 Windows 上一樣, 就是下載壓縮檔, 然後解壓縮就可以了, 只要用兩個指令即可 :
  1. wget https://julialang-s3.julialang.org/bin/linux/armv7l/1.0/julia-1.0.3-linux-armv7l.tar.gz  (下載)
  2. tar -xvf julia-1.0.3-linux-armv7l.tar.gz  (解壓縮)
參考 :

Try out the Raspberry Pi Model 3 B Plus! - Review

下載網址可在 Julia 官網下載頁的 ARMv7 這個超連結找到, 有 32/64 位元兩種版本, 我下載的是 32 位元版 :




pi@raspberrypi:~ $ wget https://julialang-s3.julialang.org/bin/linux/armv7l/1.0/julia-1.0.3-linux-armv7l.tar.gz
--2018-12-29 22:58:18--  https://julialang-s3.julialang.org/bin/linux/armv7l/1.0/julia-1.0.3-linux-armv7l.tar.gz
Resolving julialang-s3.julialang.org (julialang-s3.julialang.org)... 151.101.54.49, 2a04:4e42:200::561, 2a04:4e42:600::561, ...
Connecting to julialang-s3.julialang.org (julialang-s3.julialang.org)|151.101.54.49|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 78956998 (75M) [application/octet-stream]
Saving to: ‘julia-1.0.3-linux-armv7l.tar.gz’

julia-1.0.3-linux-a 100%[=====================>]  75.30M   615KB/s   in 2m 12s

2018-12-29 23:00:39 (585 KB/s) - ‘julia-1.0.3-linux-armv7l.tar.gz’ saved [78956998/78956998]

pi@raspberrypi:~ $ tar -xvf julia-1.0.3-linux-armv7l.tar.gz   

解壓縮完成後會在目前工作目錄下產生 julia-1.0.3 這個目錄, 執行檔為 /bin/julia, 執行它即可進入 REPL 介面 :

pi@raspberrypi:~ $ julia-1.0.3/bin/julia 
               _
   _       _ _(_)_     |  Documentation: https://docs.julialang.org
  (_)     | (_) (_)    |
   _ _   _| |_  __ _   |  Type "?" for help, "]?" for Pkg help.
  | | | | | | |/ _` |  |
  | | |_| | | | (_| |  |  Version 1.0.3 (2018-12-18)
 _/ |\__'_|_|_|\__'_|  |  Official https://julialang.org/ release
|__/                   |

julia> println("Hello World") 
Hello World

julia> exit()
pi@raspberrypi:~ $

參考 : 
Julia language for Raspberry Pi
Julia available in Raspbian on the Raspberry Pi
Playing with Julia 1.0 on the Raspberry Pi

2019-04-10 補充 :

我在下面這篇看到可用 pip3 安裝 julia :

Julia language for Raspberry Pi


pi@raspberrypi:~ $ sudo apt install julia
正在讀取套件清單... 完成
正在重建相依關係       
正在讀取狀態資料... 完成
下列的額外套件將被安裝:
  curl libamd2 libarpack2 libarpack2-dev libbtf1 libcamd2 libccolamd2
  libcholmod3 libcurl3 libcurl4-openssl-dev libcxsparse3 libdsfmt-11213-1
  libdsfmt-1279-1 libdsfmt-132049-1 libdsfmt-19937-1 libdsfmt-216091-1
  libdsfmt-2203-1 libdsfmt-4253-1 libdsfmt-44497-1 libdsfmt-521-1
  libdsfmt-86243-1 libdsfmt-dev libfftw3-bin libfftw3-dev libgmp-dev
  libgmpxx4ldbl libklu1 libldl2 libmetis5 libmpfr-dev libopenblas-base
  libopenblas-dev libopenlibm2 libopenspecfun-dev libopenspecfun1
  libpcre2-16-0 libpcre2-32-0 libpcre2-8-0 libpcre2-dev libpcre2-posix0
  librbio2 libspqr2 libsuitesparse-dev libumfpack5 patchelf
建議套件:
  libcurl4-doc libcurl3-dbg libidn11-dev libkrb5-dev libldap2-dev librtmp-dev
  libssh2-1-dev libssl1.0-dev | libssl-dev libfftw3-doc gmp-doc libgmp10-doc
  libmpfr-doc
下列【新】套件將會被安裝:
  julia libamd2 libarpack2 libarpack2-dev libbtf1 libcamd2 libccolamd2
  libcholmod3 libcurl4-openssl-dev libcxsparse3 libdsfmt-11213-1
  libdsfmt-1279-1 libdsfmt-132049-1 libdsfmt-19937-1 libdsfmt-216091-1
  libdsfmt-2203-1 libdsfmt-4253-1 libdsfmt-44497-1 libdsfmt-521-1
  libdsfmt-86243-1 libdsfmt-dev libfftw3-bin libfftw3-dev libgmp-dev
  libgmpxx4ldbl libklu1 libldl2 libmetis5 libmpfr-dev libopenblas-base
  libopenblas-dev libopenlibm2 libopenspecfun-dev libopenspecfun1
  libpcre2-16-0 libpcre2-32-0 libpcre2-8-0 libpcre2-dev libpcre2-posix0
  librbio2 libspqr2 libsuitesparse-dev libumfpack5 patchelf
下列套件將會被升級:
  curl libcurl3
升級 2 個,新安裝 44 個,移除 0 個,有 163 個未被升級。
需要下載 19.9 MB/20.4 MB 的套件檔。
此操作完成之後,會多佔用 112 MB 的磁碟空間。
是否繼續進行 [Y/n]? [Y/n] Y
下載:1 http://archive.raspberrypi.org/debian stretch/main armhf julia armhf 0.6.0-2 [11.0 MB]

..... (略)
                                     
讀取改變紀錄(changelogs)... 完成
從套件中提取樣板:100%
(讀取資料庫 ... 目前共安裝了 137724 個檔案和目錄。)

..... (略)

設定 libspqr2:armhf (1:4.5.4-1) ...
設定 libmpfr-dev:armhf (3.1.5-1) ...
設定 libumfpack5:armhf (1:4.5.4-1) ...
設定 libpcre2-dev:armhf (10.22-3) ...
設定 libsuitesparse-dev:armhf (1:4.5.4-1) ...
設定 julia (0.6.0-2) ...
Processing triggers for libc-bin (2.24-11+deb9u3) ...

安裝完畢在命令列輸入 julia 即進入 shell : 

pi@raspberrypi:~ $ julia    
               _
   _       _ _(_)_     |  A fresh approach to technical computing
  (_)     | (_) (_)    |  Documentation: https://docs.julialang.org
   _ _   _| |_  __ _   |  Type "?help" for help.
  | | | | | | |/ _` |  |
  | | |_| | | | (_| |  |  Version 0.6.0 
 _/ |\__'_|_|_|\__'_|  |
|__/                   |  arm-linux-gnueabihf


結果版本很舊, 是 v0.6.0.

# 如何更新Raspbian?
Raspberry Pi 輕鬆學
Playing with Julia 1.0 on the Raspberry Pi


2019-10-16 補充 :

目前最新版為 v1.2.0 版.

明儀買書 : PyTorch 深度學習與自然語言中文處理

今天去逛明儀想找 Julia 的書, 結果新書尚未到貨, 卻找到下面這本 PyTorch 的書, 是對岸出版品的繁體版, 寫得蠻精練的, 因此篇幅不大 :

PyTorch 深度學習與自然語言中文處理



現在手上已有兩本 PyTorch 的書了, 上回那本 "AI 視覺大全" 屬於影像處理部分, 目前抽空樂讀中; 而這本則是專注自然語言處理部分, 想先看完前面幾章基礎章節再說. PyTorch 還蠻新的 (臉書於 2017 年才剛把 PyTorch 開源), 圖書館這方面的書不多.

Julia 學習筆記 (一) : Win10 安裝 Julia 1.0.3

前陣子同學老張分享了新興程式語言 Julia 的訊息, 我想 Python 與 NodeJS 已經很好了, 已經可解決全部會遇到的問題, 沒必要再學一個吧? 但今天在博客來找書時看到下面這本五南剛出的書 :

Julia程式設計:新世代資料科學與數值運算語言 $432


Source : 金石堂


看了簡介才知 Julia 是為資料科學而誕生的語言, 源自麻省理學院 (MIT) 應用計算實驗室的一個專案, 它是專為數值分析與科學計算而設計的語言, 很年輕, 才滿 6 歲 (發布於 2012), 已發展到 v1.0.3 版, 目前在 TIOBE 排行第 44 名, 參考 :

The Julia Programming Language
https://www.tiobe.com/tiobe-index/




Julia 的開發者都是 Matlab 的高手, 但他們希望有一個更理想的的程式語言可以應用在資料科學上, 期望它 :
  1. 像 Python 般語法簡潔 (但更快速)
  2. 像 C 語言般快速 (但更容易上手)
  3. 像 Matlab 般具備強大的線性代數運算能力 (但免費)
於是原始的三位位設計者 Jeff Bezanson, Stefan Karpinski, 以及 Viral B. Shah 在 Alan Edelman 教授的指導下從 2009 年開始著手設計這種高階高效能的程式語言, 2012 年正式公開此計畫, 並於 2014 年釋出 v0.3 版, 目前下載數已超過 200 萬. 參考維基百科 :

Julia (程式語言)
https://en.wikipedia.org/wiki/Julia_(programming_language)

Julia 的源碼寄存在 GitHub, 目前擁有 1165 個關注度 (watch) 以及 23275 顆星星 (star) :

# https://github.com/JuliaLang/julia

教學文件網址如下 :

https://docs.julialang.org/en/v1/

Julia 的運算效能令人驚豔, 來自於語言本身同時支援靜態與動態型別之故, Julia 編譯器具有型別推論 (type inference) 功能, 並根據變數之推理結果進行目的碼最佳化; 亦即 Julia 語法容許你以類似 C 的寫法明訂資料型別, 這樣編譯出來的程式碼就會跟 C 一樣快, 甚至超越 C; 反之, Julia 也容許你像 Python 那樣使用動態型別來寫程式, 那麼執行效能就會接近 Python.

在下面這篇文章中, 作者以計算費伯納西數為例比較靜態型別與動態型別寫法之效能差異, 可知若要達到像 C 那樣的高效率, 則 Julia 程式碼要盡量以靜態型別來寫才能最佳化 :

Julia (7) -- 雜談: 為什麼julia的速度可以接近C甚至更快?

另外, 在 Learning Julia (Packt 出版) 一書中則針對 Julia, Python, R, MATLAB, Go, 以及 Java 這四種語言跑 fib, quick sort 等運算的效能做了比較, 結果最佳化的 Julia 程式碼在各項計算評比出沒有一項是輸人的.

安裝 Julia 執行環境可從官網下載安裝檔 :

https://julialang.org/downloads/

我下載的是 Windows 64 位元版 julia-1.0.3-win64.exe, 約 55MB 左右. 預設是安裝在 C 碟使用者的 Local Data 下 (例如 C:\Users\tony\AppData\Local\Julia-1.0.3), 但可安裝在硬碟任何目錄中, 也可裝在隨身碟中帶著走 (Portable), 建議更改安裝路徑為 C:\Julia-1.0.3 或 D:\Julia-1.0.3 :




事實上安裝過程只是解壓縮而已, 安裝完整個 Julia 目錄約占 377 MB 左右. 點擊 Julia 捷徑會執行 bin\julia.exe 顯示 REPL 介面 (Julia 解譯器), 可以像 Python 的 IDLE 介面那樣輸入 Julia 指令進行互動式操作, 例如 :

julia> println("Hello World!")
Hello World!




更多 Julia 教學參考 khl 的 30 篇系列文章 :

科學運算和資料處理的潛力新秀--Julia語言

我想在學習 Python 資料科學的同時也與 Julia 對照, 同步比較語法與效能上之差異. 不過在 khl 的教學裡提到,  Python 的 Numpy 與 Pandas 雖然很強, 但是因為 Python 一開始並不是專為資料科學而設計的, 因此在執行效率上還不是很讓人滿意, Julia 的出現便是想彌補這方面的缺憾. 不過 Julia 太年輕了, 資源還不夠多, 所以我還是以 Python 為主要的工具, Julia 只是對照而已.

參考 :

程式語言Julia歷經6年開發,融合多語言特性終釋出1.0
# Julia vs. Python: Julia language rises for data science

2018年12月28日 星期五

《資本論》完全使用手冊

今天收信時看到樂天寄來的購書優惠資訊, 其中這本 "《資本論》完全使用手冊" 吸引了我的目光. 看了博客來的介紹, 頓時有迫不急待要一讀為快之感.

馬克思是活躍於 19 世紀的德國猶太裔社會哲學思想家, 也是共產主義思想的祖師爺, 今年剛好是其誕生 200 周年 (馬克思生於 1818 年). 共產主義在 20 世紀的實踐雖然已被證明破產, 但馬克思對社會科學與左派思想家的影響還是非常深遠, 其所描述的社會矛盾仍然在地球的各角落持續拉扯. 作者在序中提到 "要盡量閱讀馬克思本人的著作,而不是閱讀「關於」馬克思的著作", 有趣的是, 這本書也是「關於」馬克思的作品.

https://www.books.com.tw/web/sys_serialtext/?item=0010798317




查了市圖發現這本可不是沒人借閱的冷門書, 但所幸還借得到 :

http://webpac.ksml.edu.tw/bookDetail.do?id=1600033

2018年12月27日 星期四

購買電鬍刀

最近在浴室看到洗手台上擺著刮鬍刀, 原來是二哥鬍子長了, 也是, 都上高三了, 現在開始會注意外在, 所以上露天幫他買了一支電鬍刀比較方便 :

【德國設計4D 電動 刮鬍刀!當天出貨+送鼻毛刀/鬢角刀】浮動三刀頭 除毛刀 可水洗機身 BRAUN鼻毛刀【DD047】 $559



年底前有運費優惠, 總計 564 元.

樹莓派 Raspbian 升版

最近因為想在鄉下那台 Pi 3 上安裝 PyTorch 卻發現 SD 卡容量剩下 200MB 左右, 研究發現樹莓派支援最高 32GB, 所以跑去建國路維碁買了一張 32GB 的創見 C10 MicroSD 卡來替換. 昨天清查鉛筆盒裡的 SD 卡收藏盒, 找到一張 ADATA 16GB MicroSD 卡, 好像是買 2T 硬碟送的贈品, 最早是用在 INHON 筆電的擴充槽當 D 碟用, 後來買了 64GB 卡後就退下來了. 所以今天就先用 16GB 來安裝目前最新版的 Raspbian 吧!

首先將此卡在 PC 上以 FAT 格式化 :




完成後到樹莓派官網下載 2018-11-13 發布, Kernel 版本 4.14.79 的 Raspbian 映像檔 :

https://www.raspberrypi.org/downloads/raspbian/




我下載的是左上角含有 Desktop 桌面建議軟體的壓縮檔, 解壓後為一個 2018-11-13-raspbian-stretch-full.img 檔案, 然後用 Win32 Disk Imager 將此映像檔燒進 SD 卡中, 參考 :

樹莓派重新安裝 Raspbian 作業系統
樹苺派的 SD 卡與作業系統安裝
樹莓派 SD 卡覆寫格式化

燒錄完成後用檔案總管檢視, 發現此 SD 卡被分成兩個 drive, 一個是名稱為 boot 的啟動區, 另一個是未格式化的 drive :



然後將燒錄好的卡放進 Pi Zero W 裡, 還要準備一個 Micro USB 對 USB 母接頭, 一個無線鍵盤滑鼠組與一個 Mini HDMI 對 HDMI 轉接頭 :




開機後進入設定畫面, 按 Next :




Country 選 Taiwan, Language 選 Chinese, Timezone 選 Taipei, 且勾選 Use US keyboard :




按 Next 即開始設定 :




接著出現更改密碼視窗, 預設密碼是 raspberry, 務必更改以策安全 :




然後是軟體更新, 因為需要一些時間 (視網路速度而定, 我大約花了半小時), 所以按 Skip 跳過 :




安裝完成按 "Reboot" 重開機 :




現在的 Raspbian 設定比之前更方便, 更人性化了, 不但內建 VNC 功能, 而且會自動擴展可用之 SD 容量至最大, 不須再手動擴展.

重開機後按視窗右上角的無線網路設定按鈕 || (我使用 Pi Zero W, 已內建藍芽與 WiFi), 點選要連線的無線基地台, 輸入連線密碼即可看到右上角 || 按鈕變成電波形狀, 表示已連線成功 :






按左上角的樹莓派按鈕進入 "偏好設定/Raspberry Pi 設定" 頁面, 將預設關閉的 SSH 與 VNC 功能開啟 :




連上網路後開啟 Comand Line 介面用 ifconfig 指令查詢樹莓派分配到的 IP 就可以在 PC 上用 SSH 與 VNC 透過 WiFi 遠端連線樹莓派進行無頭存取 (headless access) 了, 參考 :

樹莓派的 "無頭存取" (headless access)

進行無頭存取之前要先知道樹莓派被分配到的 IP, 開啟 LX 終端機輸入 ifconfig 即可查得 IP :




這樣即可在 PC 用 Putty 以 SSH 協定連線此樹莓派了 (PC 須連線到同一基地台). 用 df -h 指令可查詢 SD 卡使用情形 :




我這張 16GB 卡實際上可用 15GB, 系統使用了 4.5GB, 佔掉 32%, 還有 9.5GB 可用.

完成後關機改安裝 32GB SD 卡也順利完成 :



此卡片可用 30GB, 系統一樣是 4.5GB, 佔掉 17%, 剩 24G 可用, 這用在鄉下的 Pi 3 抓資料儲存上應該綽綽有餘了.

檢視軟體開發工具, 主要的亮點是內建了 Thonny Python IDE 以及 IBM 開發的 IoT 視覺化開發工具 Node-RED :




Python 版本分別是 2.7.13 與 3.5.3 :

pi@raspberrypi:~ $ python 
Python 2.7.13 (default, Sep 26 2018, 18:42:22)
[GCC 6.3.0 20170516] on linux2
Type "help", "copyright", "credits" or "license" for more information.

pi@raspberrypi:~ $ python3
Python 3.5.3 (default, Sep 27 2018, 17:25:39)
[GCC 6.3.0 20170516] on linux
Type "copyright", "credits" or "license()" for more information.

Node 則是 v8.11.1 版 :

pi@raspberrypi:~ $ node --version
v8.11.1
pi@raspberrypi:~ $ node
> console.log("hello")
hello
undefined

如果要升到最新版, 參考 :

如何更新樹莓派的 Node.js

樹莓派應用參考 :

「技術交流」樹莓派搭建智能家居 造就你心目中的變形金剛

最後進行 SD 卡更換前程式移植與設定複製作業 :

一. 複製網路運作監控程式 :
  1. reportip2.py : 在 ip 變更時發出郵件中
  2. reportip3.py : 每 10 分鐘會發出電郵通知目前的 ip
  3. checkwifi.sh : 檢查網路連線是否正常, 否則重開機 
注意, checkwifi.sh 須用 dos2unix 改檔案格式才能順利執行, 參考 :

樹莓派自動偵測網路斷線時重開機的方法


二. 複製 crontab :

在原系統中用 crontab -l 顯示目前 Crontab 內容 :

*/10 * * * * /usr/bin/python2 /home/pi/reportip2.py
0 * * * * sudo /usr/local/checkwifi.sh
30 * * * * /usr/bin/python3 /home/pi/reportip3.py

在新 SD 卡系統中, 以指令 crontab -e 編輯定時執行檔, 貼入上面的內容, 再按 Ctrl+O 存檔即可.

2018年12月26日 星期三

用瀏覽器跑 AI : TnsorFire 與 Cyber Writer

我在找尋 WebGL 資料時找到 TensorFire 這個網站, 它是一個在瀏覽器內執行神經網路應運算的框架, 利用 WebGL 來加速. 使用 TensorFire 的應用可以無須安裝或設定, 在瀏覽器裡執行深度學習運算. 參考 :

https://tenso.rs

由於現在的桌上型電腦, 筆電, 與手機很多都有為遊戲而內建的 GPU 以進行平行運算, TensorFire 將神經網路權重轉換為 WebGL Texture (紋理), 利用瀏覽器的繪圖能力來加速神經網路計算. 

其中的一個應用是 Ctborg Writer, 只要按 Tab 鍵就會自動產生選定風格 (例如莎士比亞或川普) 的文句, 參考 :

Cyborg Writer




連 AI 也可以在瀏覽器上跑, 真是厲害. 我在想, 這些應該都是搭建在 Javascript 上的框架 (例如 NodeJS), 是否在 Chrome 上執行會比較快速?

但是也有人認為用 Javascrip/NodeJS 跑 ML 效率不好, 我覺得那要看應用啦! 如果是網頁上的小應用計算量不重的話應該OK, 網頁應用如果加上 AI 效果應該蠻有創意的. 參考 :

Why doesn't anyone recommend JavaScript/Node.js as a language for machine learning or data analysis?

關於 WebGL 參考下列教學 :

WebGL 理论基础

關於 Javascript 資料科學, 參考 :

# Learn JS Data
5 JavaScript Tools to go from Developer to Data Scientist
4 Useful JavaScript Libraries for Data Analysis and Visualization

基本電學 & 電路學的好書

基本電學授課 6 堂終於在昨天結束, 明年春季班約 5~6 月還要去上. 這次的經驗非常奇特 : 一是我已超過 30 年未再讀電路學, 但好像觀念都已烙印在腦海中, 翻一下書又復活起來; 二是須用英文授課, 對已冷落英文十年的我來說還真是挑戰. 英文的確必須每天擁抱, 多少都沒關係, 否則真的會掉漆.

這次最累的是要打授課簡報, 因為學生沒錢買昂貴的教科書, 所以我得在簡報中附上例題與習題. 還好我找到下面這本 Charles Alexander 與 Mathew Sadiku 寫的基本電路理論第六版, 此書編排很有邏輯, 行文非常簡易流暢, 而且提供大量範例與習題, 所以準備簡報時大部分是參考這本書 ;

Fundamentals of Electric Circuits 6th Edition (McGrow Hill 出版)


Source : Amazon


還有另外一本內容也很豐富 :

Schaum's Outline of Electric Circuits 7th Edition (McGrow Hill 出版)


Source : Amazon


不過此書的編排我比較不習慣, 還是比較喜歡上面那一本.

2018年12月25日 星期二

89 年次役男兵役登記 (兵籍資料調查)

昨天收到區公所來函通知關於 89 年次役男兵籍調查登記事宜, 上回二哥有從學校拿一張兵役資料上網登錄的通知單回來, 但我上網卻找不到超連結, 可能那時系統還沒上線, 後來竟忘記此事. 收到的通知書說 12/31 日前仍可上網登記, 超過時間就得親自跑一趟區公所進行紙本申報了. 網路登記網址為 :

107 年兵籍調查線上申報

2018年12月24日 星期一

購買 HDMI mini 轉接頭 + USB 電壓電流計

因遍尋不著以前買給 Pi Zero 用的 HDMI mini 接頭, 只好上露天再買, 還好找到市區可面交的賣家, 因要滿 120 元才能面交, 所以又多買了兩個 USB 電壓電流檢測器 :

【ULU】miniHDMI 轉 HDMI 公轉母 轉接頭 $30*3=$90
【ULU】USB 充電 電流 電壓 檢測儀 測試儀 $55*2=$110

合計 $200 元, 在漢神巨蛋對面十字路口上神腦門口自取.

此賣家還賣一個壓麵機, 詢問水某意見, 說還要弄麵糰很麻煩, 我想買來可能會變庫存, 就算了.

【ULU】手持式壓麵機 麵條機 5模板 家用 不銹鋼 $280

此壓麵機上方好像是塑膠的, 我找到另一賣家的是全不鏽鋼的, 開價 800 元 :

# ◆電の店◆ E023 家用 手動麵條機 手持式壓麵機 自製麵條 3種圓麵條選擇 $800

購買 USB 音效卡

最近想錄製 Praat 教學影片, 但由於我的 INHON Ultrbook 沒有 MIC 麥克風插口, 筆電本身的隱藏式麥克風離嘴巴太遠讓信躁比太低, 錄音效果不好 (雜音太大), 所以上露天找到下面這款 USB 音效卡, 可接麥克風錄音與外接喇叭放音 :

USB音效卡 7.1聲道 外接音效卡 電腦音效卡 筆電音效卡 聲卡 直播聲卡 麥克風音效卡 $35*2

買 2 個一個給樹莓派用. 賣家 (耀升) 在大順路 272 號可自取.

2018年12月23日 星期日

2018 年第 51 周記事

終於來到 2018 倒數第二周了, 週六補班許多人請假, 結果反而沒啥事情可做. 週六早上要上班時發現大灰熊左前輪消氣了, 中午回來吃過午飯趕緊下去地下室用打氣機充氣, 還好下班時看還鼓鼓的. 下周要約時間去驗車並檢查一下左前輪為何會不定時漏氣.

基本電學授課剩下下周二下午三堂, 簡報上周已打完, 終於可以回來搞自己的研究了, 自由真好. 上週教授告知明年春季班還有一批新生要進來, 已先預約我再次負責交流電部分的授課. 其實, 我更喜歡教程式設計部分, 不過想到要備課打簡報, 就覺得好累.

免費教學影片錄製軟體 ActivePresenter

12/19 日從彰師大回來後, 覺得短短的兩小時演講實在不足以讓學生了解 Praat 的基本操作, 而且兩地往返很花時間, 我想何不利用螢幕錄影軟體錄製操作影片, 上傳到 Youtube 分享呢? 於是上網找尋免費的螢幕錄影方案, 找到這個功能強大的 ActivePresenter, 參考 :

2018新手教學:螢幕錄影怎麼做?(手機/電腦/Windows/MAC/iOS/Android)
10大螢幕錄影軟體推薦比較!搞定電腦手機錄影教學
最強免費螢幕錄影軟體 ActivePresenter 教學影片神器
使用 ActivePresenter 自製數位影片教材教學,超強大免費螢幕錄影工具!
ActivePresenter 7 無水印,免費螢幕錄製教學
我之前常用 Apowersoft 螢幕錄影軟體, 它有單機版也有瀏覽器線上錄影版, 但免費版會有浮水印以及三分鐘錄影限制, 參考 :

關於螢幕錄影軟體

終生版 1 人商業版價格為 $1999 元, 參考 :

https://www.apowersoft.tw/store/screen-recorder.html?v=208

相較而言 ActivePresenter 標準版價格為 $149 美金, 相當於台幣 4500 元左右, 相對較貴. 但 ActivePresenter 免費版好處是沒有浮水印, 也沒有 3 分鐘錄影限制, 因此若無商業使用需求, ActivePresenter 免費版就很好用了.

ActivePresenter 免費版下載點如下 :

https://atomisystems.com/activepresenter/free-edition/

一鍵安裝後即可使用 :




錄製視頻之前先將麥克風插入 PC 的 MIC 插口, 然後點選檔案總管路徑的第一個下拉式選單開啟控制台 :




改變檢視方式為 "大圖示" :






點選 "聲音" 並切換到 "錄製" 頁籤, 可看到插入之麥克風, 這時對著麥克風發聲, 右邊的電平會跳動 :




若電平跳動不明顯, 表示音量放大倍數不夠, 點選 "內容" 並切換到 "等級" 頁籤去調整, 通常麥克風調到 100% 應該就可以了, 若還是不夠大聲, 就將底下的麥克風增量調大 :




這樣麥克風錄音部分就沒問題了. 就可以回到 ActivePresenter 開始錄製螢幕教學.

按 ActivePresenter 第二個按鈕 "錄製視頻" :




在對話框中的 "錄製區域" 選擇 "全屏" (即全螢幕), 按 "開啟音頻" 選單確認輸入設備是 "麥克風" (也可在 "系統音頻" 勾選 "喇叭" 同時錄製喇叭輸出之系統聲音), 然後按最右邊的 "REC" 按鈕即倒數計時, 3 秒後開始錄製全螢幕視頻, 終止錄製是同時按 "CTRL + END" :






錄製完成後可以對視頻與音頻進行編輯, 完成後可導出為 mp4 視頻格式上傳至 Youtube.

參考 :

8 種方法快速在 Windows 10 開啟傳統控制台
筆電外接麥克風

URL 字串中含有特殊字元如 % 的處理方法

今天回覆網友關於 Arduino 傳送資料給 ThingSpeak 等物聯網伺服器遇到的問題時, 突然想起來 URL 字串中好像不能直接傳送一些特殊字元例如 %, 否則所傳送的網址將斷在特殊字元處而不完整, 例如傳送百分比資訊時 :

action?temperature=25.3&humidity=78%&pressure=120.3

伺服器將收到如下 request 字串 :

action?temperature=25.3&humidity=78

亦即 % 之後的資訊都收不到.

一時忘記我記錄在哪兒, 查詢 blogger 終於找到了, 是在下面這兩篇的 Q&A 中, 為了便於搜尋, 我特地記錄下來 :

利用網頁控制 Arduino (二)
使用 ESP8266 傳送 Twitter 訊息

URL 字串中 % 字元有特殊用途 (表示編碼), 要傳送 '%' 字元本身要改用 '%25', 而跳行則要改用 '%0d%0a'. 參考 :

# http://www.convertstring.com/zh_TW/EncodeDecode/UrlEncode
# https://openhome.cc/Gossip/Encoding/URLEncoding.html

"在URI的規範中定義了一些保留字元(Reserved character),像是「:」、「/」、「?」、「&」、「=」、「@」、「%」等字元,在URI中都有它的作用,如果你要在請求參數上表達URI中的保留字元,必須在%字元之後以十六進位數值表示方式,來表示該字元的八個位元數值。"

2018年12月22日 星期六

Git 學習筆記 (一) : 安裝 Git

我常常從 GitHub 下載開源資料, 卻一直沒有利用 Git 來保存控制自己的軟體版本. 最近從市圖借到幾本 Git 的書, 決定在 Win10 電腦上安裝 Git 看看.

# 為你自己學Git (博碩, 2017)
版本控制使用Git (碁峰, 2013)
7天學會Git版本控制 (博碩, 2016)
完整學會Git,GitHub,Git Server的24堂課 (第二版) (碁峰, 2018)

關於 Git 摘要如下 :
  1. Git 是一個分散式版本控制系統 VCS (Version Control System), 最初是 Linux 的原始開發者 Linus Torvalds 為了有效地管理當時已有上千人參與的 Linux 核心開發而設計的版本控制系統, Linus 當時 (2005 年) 只花了 10 天以 C 語言寫出 Git 的第一版. 
  2. Git 在 Linux 與 MacOS 都已預載, 不須安裝立即可用, Windows 則需另行安裝. 
  3. Git 與其他版本控制系統主要的差異在於 Git 關心的是檔案的整體性, 而非每個檔案的版本修訂關係, 亦即, Git 不僅僅是個版本控制系統, 比較精確地說, Git 是一個內容追蹤系統, Git 追蹤的不是檔案或目錄名稱, 而是檔案的內容.  
  4. 版本控制系統是一個程式碼管理系統, 用來保存程式檔的修改紀錄與歷史版本. Git 是分散式 VCS, 每一個協作者均可取得任何程式碼進行更改, 然後再送回 Git 伺服器進行合併. 
  5. 目前許多開放原始碼的程式專案都使用 Git 控管版本, 例如 Linux 與 Android. 
參考 :

https://zh.wikipedia.org/wiki/Git

Git 的相關網站如下 :
  1. https://git-scm.com/ (官網) 
  2. https://git-scm.com/downloads (下載頁)
  3. https://git.kernel.org/pub/scm/git/git.git/ (原始碼)
  4. https://zh.wikipedia.org/wiki/Git (維基)
下載 Windows 版的 Git (2.24.1 版約 47 MB) :

https://git-scm.com/downloads

安裝過程很簡單, 幾乎都是照預設值即可, 只有預設編輯器我不用預設的 Vim 改選 NotePad++, 主要選單如下 :





注意, 這裡要勾選第二項 "Git from the command line and also ...", 這樣才能在命令提示字元視窗中直接下 git 指令 :






安裝好後, 開啟命令提示字元視窗, 輸入 git 若出現一堆指令使用說明即表示安裝成功了 :




如果沒有, 表示在上面安裝選單中沒有勾選 "Git from command line ..." 這一項, 這樣只能從程式集的 Git 目錄中開啟 Git Bash 視窗來操作 git 命令了, 輸入 git 指令會出現一堆指令使用說明 :




到這裡 Git 安裝即完成矣. 到 C:\ProgramFiles 底下找到 Git 目錄量一下竟然高達 616 MB ! 好龐大啊!

接下來就可以用 git init 命令設定儲存庫了. 儲存庫 (Repository 簡稱 Repo) 就是我們存放專案內容的地方, 實體上就是 Windows 檔案總管下的一個 資料夾, 專案中的所有檔案與目錄都放在此資料夾底下.

首先在檔案總管下建立一個空資料夾例如 GitRepo 當作儲存庫, 然後在命令提示字元視窗切換至此資料夾, 下達 git init 指令 :

D:\GitRepo>git init 
Initialized empty Git repository in D:/GitRepo/.git/

回應是說已在 GitRepo 資料夾下面建立了一個 .git 子資料夾, 但此 .git 是隱藏目錄, 必須在檢視選單中勾選 "隱藏的項目" 才會顯示 :





這個 .git 目錄底下的資料就是 Git 所控管之專案的儲存庫, 由 Git 指令自動管理, 所以絕不可以手動去修改或刪除裡面任何一個檔案或目錄.

網路上有許多 Git 教學, 參考 :

30 天精通 Git 版本控管
連猴子都能懂的Git入門指南
Git 教學(1) : Git 的基本使用
Git達人教你搞懂GitHub基礎觀念
1.6 開始 - 初次設定 Git


2019-08-01 補充 :

睽違近一年後重新研究 Git, 我找到一些 Windows 上結合 Git 與 GitHub 於一身的 GUI 版控軟體, 適合沒有時間研究 Git 用法的人 :

https://gitforwindows.org/
https://desktop.github.com/

2020-01-04 補充 :

因為要還 "Python新手使用Django架站技術實作" 這本書, 匆匆讀完其中第 14 章的 Mezzanine CMS 架站, 最後介紹如何在 Heroku 佈署網站時要用到 Git, 所以順勢在 Swift 5 筆電把 Git 環境搭起來, 反正學 AWS 也要用到. 安裝時發現新版畫面與上面不太一樣, 更新如下 :
















若有勾選 Launch Git Bash 就會開啟 Git 命令列視窗 :




也可以在 "開始/程式集" 的 Git 項下找到 Git Bash, 可將其放到桌面上 :




以上程序除了第五步 "Choosing the default editor used by Git" 我改為慣用的 EditPlus 外, 其餘都用預設值即可.

Git Bash 命令列介面顯示 MINGW64, 表示這是 MinGW 64 位元版. MinGW 是 Cygwin 的簡化與效能加強版, 而 Cygwin 則是 Linux/Unix 系統在 Windows 上的移植, 因此在 Git Bash 上使用的是 Linux/Unix 指令, 參考 :

https://zh.wikipedia.org/wiki/MinGW
https://zh.wikipedia.org/wiki/Cygwin

關於 Git 安裝與 Git Bash 操作可參考 :

Git 介紹與在Windows系統下安裝