2019年1月31日 星期四

Python 學習筆記 : 陣列模組 array 測試

本篇探討 Python 的串列與 array 模組的功能在資料科學方面的限制, 作為學習 Numpy 的前置測試. 本篇測試參考了如下書籍 (特別是第 6 本) :
  1. Python 資料科學手冊 (碁峰, 何敏煌譯)
  2. 高效率資料分析-使用 Python (碁峰, 賴屹民譯)
  3. Python 資料運算與分析實戰 (旗標, 莊永裕譯)
  4. Python 資料科學與人工智慧應用實務 (旗標, 陳允傑)
  5. Python程式設計學習經典:工程分析x資料處理x專案開發 (碁峰, 吳翌禎, 黃立政)
  6. Data Science from Scratch 中文版 : 用 Python 學資料科學 (碁峰, 籃子軒譯)
資料科學中的數學運算大部分是工程數學中的線性代數, 主要是向量與矩陣運算, 所謂向量 (vector) 是相對於純量 (scaler) 而言的概念, 在物理學中純量是只有大小沒有方向的實數, 而向量則是有大小也有方向的量, 例如溫度, 體積, 質量, 電量, 速率等等都是純量, 而速度, 位移, 磁矩等等則是向量, 參考 :

https://zh.wikipedia.org/wiki/标量 (純量)
https://zh.wikipedia.org/wiki/向量 (矢量, 向量的別名)

但是在線性代數中的向量指的是組成向量空間 (例如一個線性坐標系) 的元素, 一個 n 維向量是以一個有序純量數列例如 (a1, a2, a3, .... an) 來表示 (這也是此向量的終點座標), 其中每一個元素代表向量在該維之分量. 而一個矩陣是二維的有序數列, 可以視為由多個列向量或行向量組成 (默認是列向量). 在程式語言中使用陣列來表示向量 (一維) 或矩陣 (二維), 高於二維的陣列則稱為張量 (Tensor).

陣列是科學計算最常用的資料型態, 不過 Python 內建的資料型態 List  (串列) 不是陣列, 它是比陣列更具彈性的序列型資料結構, 它與其他語言如 Java 的陣列不同之處在於 :
  1. List 的元素可以是任何同質或異質資料 (可混合), 而 Java 的陣列必須是同質性資料. Python 的串列相當於 Java 中的 ArrayList 型態. 
  2. List 的長度是可變的 , 具有 append(), pop() 等函數; 但 Java 的陣列長度宣告後即固定不可變.
Python 從 3.3 版開始增加了一個內建模組 array 以支援陣列運算, 使用前須先引入 :

import array     

然後呼叫建構式 array() 並傳入一個串列以建立 array.array 物件 :

a=array.array('type code', list)    #傳入串列 list 將其轉成陣列

其中必要的第一參數 type code 是一個字元, 用來指定陣列元素之資料型態, 數值計算常用的type code 如下 :

  • 'i' : signed integer (2 bytes)
  • 'I' : unsigned integer (2 bytes)
  • 'l' : signed long (4 bytes)
  • 'L' : unsigned long (4 bytes)
  • 'f' : float (4 bytes)
  • 'd' : double (8 bytes)

參考 :

Python Arrays

陣列物件可用與 List 一樣的索引與 slice 方法存取元素, 例如 :

>>> import array
>>> a=array.array('i', [3, 6, 9, 12])
>>> type(a)
<class 'array.array'>
>>> print(a)
array('i', [3, 6, 9, 12])
>>> a[0]
3
>>> a[1]
6
>>> a[2]
9
>>> a[3]
12
>>> a[-1]    #負索引表示從最後面 (-1) 往前定位元素
12

array.array 物件提供如下方法以便操作陣列 :

 array.array 物件的方法 說明
 append(element) 將元素 element 添加到陣列尾端
 extend(list) 將串列 list 添加到陣列尾端
 remove(element) 將元素 element 從陣列中移除 (一次一個)
 pop(index) 將索引為 index 之元素從陣列中移除並傳回

例如 :

>>> a
array('i', [3, 6, 9, 12])
>>> a.append(99)
>>> a
array('i', [3, 6, 9, 12, 99])
>>> a.extend([6, 12, 18])
>>> a
array('i', [3, 9, 12, 99, 6, 6, 12, 18]) 
>>> a.remove(6)               #移除第一個 6
>>> a
array('i', [3, 9, 12, 99, 6, 12, 18])
>>> a.remove(6)               #移除第二個 6
>>> a
array('i', [3, 9, 12, 99, 12, 18])
>>> a.pop(2)                     #傳回索引 2 元素並刪除之
12
>>> a
array('i', [3, 9, 99, 12, 18])

但 array.array 物件與 List 都不適合直接進行向量運算, 例如向量乘以一個純量會得到另一個向量, 其元素是每一個原向量元素乘以該純量, 但直接用 List 或 array.array 物件乘以一個正整數會使元素倍增; 乘以一個實數則會出現錯誤, 例如 :

串列不是向量 :

>>> list1=[1,2,3] 
>>> list1 * 3
[1, 2, 3, 1, 2, 3, 1, 2, 3]       #若是向量應該得到 [3, 6, 9]

array 物件不是向量 :

>>> import array 
>>> arr1=array.array('i', [1,2,3])   #建立一個整數陣列
>>> arr1 * 3
array('i', [1, 2, 3, 1, 2, 3, 1, 2, 3])      #若是向量應該得到 [3, 6, 9]

向量運算預期 (1, 2, 3) * 3 得到 (3, 6, 9), 但上述範例顯示 List 與 array.array 物件都不是向量, 不能直接進行向量運算, 必須借助自訂函數處理才行. 而且 array.array 只能處理一維陣列, 無法處理矩陣或高維陣列, 傳入 2 維 List 給 array.array() 會出錯, 例如 :

>>> b=array.array('i', [[1, 2, 3], [4, 5, 6]])    #只能傳入一維串列
Traceback (most recent call last):
  File "<pyshell>", line 1, in <module>
TypeError: an integer is required (got type list)

因此若要做向量, 矩陣或高維陣列運算, 必須用串列與自訂函數來模擬. 在 "Data Science from Scratch 中文版 : 用 Python 學資料科學" 這本書的第四章 "線性代數" 介紹了幾個自訂函數可將串列 List 當成向量來進行向量與矩陣運算 :


Source : 博客來


例如 :


測試 1 : 向量乘以純量

def vector_multiply_scalar(s, v):
    """ s=scalar, v=pseudo vector(list)"""
    return [s*vi for vi in v]

v1=[1,2,3]
v2=vector_multiply_scalar(3, v1)
print("{} {}".format(type(v2), v2))
v3=vector_multiply_scalar(3.1, v1)
print("{} {}".format(type(v3), v3))

此程式以自訂函數 vector_multiply_scalar(s, v) 模擬串列的向量運算, 第一參數 s 為純量, 可傳入整數或實數, 第二參數為偽向量, 傳入值是串列, 使用串列推導式 for 迴圈計算純量與每一個串列元素的乘積, 然後傳回結果串列, 執行結果如下 :

<class 'list'> [3, 6, 9]
<class 'list'> [3.1, 6.2, 9.3]

兩個相同維度的向量可以相加減, 也可以進行點積 (dot) 運算, 這會用到 Python 內建的好用函數 zip(), 此函數會將傳入的數個可迭代物件之元素一一配對成 tuple 後傳回可迭代之 Zip 物件, 可用 list() 函數轉成串列, 例如 :

>>> a=[1,2,3]
>>> b=[4,5,6]
>>> c=[7,8,9]
>>> d=zip(a, b, c)
>>> type(d)
<class 'zip'>
>>> list(d)
[(1, 4, 7), (2, 5, 8), (3, 6, 9)]

參考 :

https://docs.python.org/3.3/library/functions.html#zip

我將書上向量相加減與點積之自訂函數改寫與測試如下 :


測試 2 : 向量相加減與點積運算

def vector_multiply_scalar(s, v):
    """s=scalar, v=pseudo vector(list)"""
    return [s*vi for vi in v]

def vector_add(v1, v2):
    """v1, v2=pseudo vector(list)"""
    return [v1i + v2i for v1i, v2i in zip(v1, v2)]

def vector_substract(v1, v2):
    """v1, v2=pseudo vector(list)"""
    return [v1i - v2i for v1i, v2i in zip(v1, v2)]

def vector_dot(v1, v2):
    """v1, v2=pseudo vector(list)"""
    return sum(v1i * v2i for v1i, v2i in zip(v1, v2))

v1=[1,2,3]
v2=[4,5,6]
print("vector_add: {}".format(vector_add(v1, v2)))
print("vector_substract: {}".format(vector_substract(v1, v2)))
print("vector_dot: {}".format(vector_dot(v1, v2)))

執行結果 :

vector_add: [5, 7, 9]
vector_substract: [-3, -3, -3]
vector_dot: 32

以上是以串列模擬向量之操作, 使用二維串列當偽矩陣的做法更麻煩, 更不用說高維陣列了, 這就是發展 Numpy 套件的原因, 它可以更快速更有效率地解決向量, 矩陣, 與張量之運算.

參考 :

Python Arrays
numpy: list, array, matrix小结
Indexing vectors and arrays in Python
從零開始學資料科學:Numpy 基礎入門
Should I use scipy.pi, numpy.pi, or math.pi?
Quick Tip: The Difference Between a List and an Array in Python

2019年1月30日 星期三

好站 : 點評 11 種資料科學相關程式語言

科技報橘看到下面這篇 :

想當資料科學家?除了 Python 之外,你還應該要認識這 6 個資料界的超強 coding 語言

此文很有條理地比較了目前資料科學常用語言的優缺點 :
  1. R
  2. Python
  3. SQL
  4. Java
  5. Scala
  6. Julia
  7. MATLAB
  8. C++
  9. Javascript
  10. Perl
  11. Ruby
其中 Python 與 R 是目前市場上的主流, Python 勢頭這兩年更壓過 R 扶搖直上, 其主要缺陷在於動態語言所帶來的型別安全問題, 但只要小心 Coding 其實也還好. R 的問題主要是執行效能; SQL 分析能力有限且各家實作差異性大; Java 缺乏好用的統計函式庫; Scala 太難學; Julia 太年輕資源不足; MATLAB 要錢; C++ 生產力太低; Javascript 的 Node 也是太年輕; Perl 是出了名的火星文; Ruby 也是起步太晚.

總之, 目前學習資料科學還是以 Python 為首選, 行有餘力學學有強大統計奧援的 R 也不錯, 另外則是密切關注 Julia 的發展.

2019年1月29日 星期二

IoT 與區塊鏈

我一直認為源自比特幣底層技術的區塊鏈只應用在 Fintech 領域, 但今天在 Design Spark 看到下面這篇, 才知道原來它還可以用在物聯網 :

RS IoT Blockchain Demonstrators Part 5: Host Software

此文使用 Python 語言與區塊鏈網路技術來實作物聯網專案, Python 的角色是整合感測器 (輸入) 與致動器 (輸出), 並透過區塊鏈網路使其互動. 關於 Python 的區塊鏈應用可參考下面這幾篇 :

Building A Simple Blockchain Data Structure With Python
A Practical Introduction to Blockchain with Python
Python Tutorial for Beginners - Learn Python by Building a Blockchain & Cryptocurrency




其實 Design Spark 網站上有一系列 IoT 區塊鏈應用的文章如下 :

Blockchain and IoT
RS IoT Blockchain Demonstrators Part 1: Introduction
RS IoT Blockchain Demonstrators Part 2: Mechanical Build
RS IoT Blockchain Demonstrators Part 3: Electronics
RS IoT Blockchain Demonstrators Part 4: Blockchain Network
RS IoT Blockchain Demonstrators Part 5: Host Software
RS IoT Blockchain Demonstrators Part 6: GitHub Repository

今年長達 9 天的春假可以好好地讀一下這些文章.

明儀買書兩本

昨天早上請半天假載二哥到學校去聽選填志願說明會, 請來義大李嘉崑老師傳授書面備審資料準備方法與面試技巧, 原來這兩個不是獨立的東西, 備審資料中的自傳, 人格特質, 讀書計畫, 以及未來期望等等都可以拿來用在面試上, 重點是要一致與有條理. 參考 :

推薦甄試準備心法(訪賓:李嘉崑助理教授)

二哥聽完演講說想準備多益, 晚上就載他去明儀, 挑了下面這本 :

全新制50次多益滿分的怪物講師TOEIC多益閱讀攻略+模擬試題+解析(2書+防水書套)




二哥要考的話, 我也想趁此機會把流失的英文能力補回來, 也一起報考好了. 另外買了酆世昌出的新書 :

給工程師的第一本理財書:程式金融交易的118個入門關鍵技巧




此書範例使用 Python 與 R, 之前買過酆世昌的 R 語言書, 都是實戰性強的好書.

查詢與檢舉惡意網站

我在 Tsung's Blog 看到這篇可查詢與上傳惡意網址的資料庫 :

https://urlhaus.abuse.ch/browse/

參考 :

URLhaus:查詢網址是否為散佈惡意程式的網站

2019年1月28日 星期一

Win10 出現 "沒有任何應用程式與此檔案相關可執行此動作" 問題

今天在複製原 INHON 筆電 D 碟 Micro SD 卡檔案到新筆電時每隔十幾秒持續出現如下錯誤訊息 :

「沒有任何應用程式與此檔案相關可執行此動作。請安裝應用程式;或者,若已安裝了應用程式,則請在[預設應用程式設定]頁面建立關聯性。」




我到 "控制台/預設程式" 的 "變更自動播放" 選項, 將抽取式磁碟機與記憶卡的預設動作改成 "開啟資料夾以檢視檔案" 即可 :





不過網路上有人說這是 Win 10 更新後的問題, 參考 :

【問題】昨天更新後 電腦出問題@@

2019 年第 4 周記事

週三下班終於去買了新筆電 ACER SF515, 這幾天已把資料大致轉移過來. 用手機拍攝新舊兩台電腦排排坐照片發現, 新筆電螢幕在手機螢幕中靜止不動, 而舊筆電卻一直往上閃爍, 我想這就是所謂的 PWM (脈波調變), 舊筆電使用 PWM 來控制螢幕亮度, 其速率很快, 超出人眼感覺範圍, 但長時間看螢幕可能容易讓眼睛疲勞; 新筆電則不採用 PWM.




兩台筆電放在一起比較, SF515 螢幕大好多, 右邊的 INHON Carbonbook 螢幕中間的黑影就是 PWM 調光造成的 Aliasing 現象 (手機的攝鱌頻率比筆電螢幕 PWM 頻率低就會產生假信號), 那個黑影條在手機螢幕上是以緩慢頻率往上移動.

周五周六大學學測, 週五請一天假去陪考. 二哥說數學與自然似乎不是很理想, 回來對答案似乎僅中正機械 OK, 不過國防大學中科院代訓生他很有興趣, 如果能上好像也不錯.

週六傍晚考完又立刻回鄉下, 順路去高鐵站載小阿姨回鄉下. 週日大阿姨出殯, 送到隔壁鄉去火化. 經過公墓的時候, 看到新坟舊坟交錯排列, 不論英雄狗熊, 人生最後的歸宿就是如此, 到底是在爭什麼?

2019年1月25日 星期五

陪考

今天二哥參加大學學測, 請了一天假去陪考. 由於中正高中門口是車水馬龍的中正路, 附近沒有店家, 因此穿堂一早就有池上便當擺攤預約便當, 二哥他們學校已經訂了, 所以只要訂我的即可.

第一天考英文, 國文, 社會, 是第一類組的主科, 明天才是自然組主科 : 數學,作文, 與自然. 雖然現在是五選四, 二哥還是有去考社會. 一整天看完當期商周, 去年十月份的 Smart, 以及本期今周刊.

2019年1月24日 星期四

漢神海港餐廳尾牙

明天學測登場, 下午請了兩小時載二哥去中正高中看考場. 下班後就直接去成功路漢神海港參加尾牙宴. 去年與前年都在 85 大樓君鴻, 今年福委會改回海港, 我覺得海港菜色較多.

2019-01-30 :

今年現場雖沒有抽到大獎, 回來後安慰獎抽到 1000 元, 但被下午茶豬母稅扣掉 100 元, 淨拿 900 元.

購買 BRITA 濾心與美的微波爐

去年福利金直到年底才用完, 用來買了一台東元冰箱 (福利品), 今年的 8000 點福利金今天全部都用光了, 買了 4 組 BRITA 濾心, 一組 12 個 1920, 平均一個 160 元, 跟露天最便宜的差不多 :




剩下 300 多塊不知道要買甚麼, 剛好看到美的微波爐 1590 元, 扣掉 300 多只要自付 1270 元, 查過露天最便宜也要 1700 左右 :




一開年就解決掉, 免得拖到年底過期被嘲笑.

參考 :

譚敦慈:微波食物不會致癌,反而保留較多營養素


2019年1月23日 星期三

購買新筆電 ACER SF515

經過兩三個月的調查研究, 最後新筆電決定買 ACER SF515, 本來想要跟台北光華商場的琪琪買, 34800 + 100 元運費共 34900. 上週三打電話給茂訊的阿楓詢價, 報價是 35800 元. 周日接到阿楓店長電話, 說因快過年了拚業績, ACER SF515 可照我想的價格 35000 元出售, 這兩天較忙, 所以今天下班才過去取貨, 之前的調研參考 :

新筆電市調
新筆電市調 (二) : ASUS ZenBook UX533FD
新筆電市調 (三)

決定買 SF515 主要考量是 :
  1. 輕量僅 999 公克 (好攜帶)
  2. 15.6 吋觸控大螢幕 (對治老花眼, 無滑鼠時操作方便)
  3. 無獨顯 (耗電且用不到)
原先考慮的 ASUS UX533 因為太重 (1.6KG) 與獨顯耗電被我排除; 新 MacBook Air 太貴且要學新 OS 很煩也被排除, 我其實只要能方便帶著走寫程式就好啦, 何必帶著用不到的獨顯卡呢?

本來打算只買本機, 再到加油站對面的青蘋果貼滿版螢幕保護貼, 但阿楓說保護貼加防毒可算 1800, 所以乾脆就在店裡貼了. 以前 INHON 筆電我既沒貼螢幕保護貼, 也沒有買鍵盤保護膜, 結果四年下來, 螢幕上竟出現鍵盤的方塊痕跡, 應該是放在背包受到壓力烙上去的, 所以這次要貼螢幕保護貼, 也要買個鍵盤保護膜 (目前還沒有).

主機加配件總共花了近 37000 :

本機 : 35000
霧面螢幕保護貼) + PC-cillin 防毒軟體三年版 : 1800
備用的 65W 原廠充電器 (群光代工) : 1000

以上為茂訊部分計 37800 元

藍芽滑鼠 : 270
電腦包 * 2 : 591

以上為露天部分計 861 元
合計 38661 元

原本想買藍色的 SF515, 但到現場看到新出的銀色款似乎較不沾油污, 所以臨時改拿銀色的 (型號是 SF515-51T-57XE). 備用充電器本來在露天找到 LiteOn 製造的 SF515 充電器一個 750 元 :

宏碁 原廠 變壓器 acer SWIFT5 SF514 SF515 A065R094L 充電器 $750

跟原廠盒裝一模一樣的正方形小充電器聽說可在 ACER 高雄服務中心 (自立陸橋附近) 買到, 但我打電話去問一個要 1500 元 (需要充電器序號較好找), 感覺有點貴, 而茂訊這個群光代工的便宜 500 元, 所以最後決定買這個就好 :

http://www.i-write.idv.tw/life/info/acer/acer-13.html

參考 :

ACER SF515 規格
羅技(原廠盒裝) M337藍牙滑鼠(藍) $600
現貨 公司貨 Logitech 羅技 M337 藍牙滑鼠 黑 雷射 適用 Mac Chrome OS Android $620
[羊咩咩小鋪] 翔龍國際代理 15~17吋筆電用鍵盤保護膜- 通用型 $50
ACER SF515-51T 靜電式筆電LCD液晶螢幕貼 (可選鏡面或霧面) $430
ACER SF515-51T TOUCH PAD 觸控板 保護貼 $99
大家喜歡鏡面還是霧面的螢幕
輕就是王道 SF515-51T-57XE


在使用新筆電之前要先做下列準備工作 :

1. 更新 Win 10 : 

新機拿回來後先做 Windows Update, 按開始選 [設定 (齒輪)]  > [更新與安全性]  > [Windows Update] , 然後選取 [檢查更新], 參考 :

https://support.microsoft.com/zh-tw/help/4027667/windows-10-update


2. 製作初次映像檔 (尚未安裝應用軟體) : 

我先接上 2TB 隨身硬碟, 按照下列程序執行 : "更新與安全性/備份/移至 [備份與還原] (Windows 7)/建立系統映像/硬碟上/開始備份", 參考 :

# 升級 Win10 並建立系統映像檔

初次映像檔占了硬碟 41GB 容量.


3. 安裝應用軟體 :

參考之前文章稍作修改, 不再安裝 JDK :

Carbonbook 系統更新與軟體安裝紀錄
  1. Office
  2. Chrome
  3. Adobe PDF Reader
  4. PotPlayer
  5. Bandizip (壓縮解壓)
  6. Classic Shell (傳統開始鈕)
  7. PicPick (截圖)
  8. Python 3 64 bit (v3.7.2) 
  9. NodeJS  (v10.15.0)
  10. R 語言 (v3.5.2)
  11. Editplus 3.7
  12. Thonny (Python 編輯器)
  13. Apowersoft 螢幕錄影王
注意, 安裝 R 語言時, 在下面這步應選 No (accept default), 才不會問 SDI/MDI, 參考 :

http://kanchengzxdfgcv.blogspot.com/2016/03/r-by-win.html

安裝完上面的工具程式後再做一次映像檔, 又耗去 D 碟 49GB 容量來儲存映像檔, 這是常備還原映像檔, 但也會複製到 2TB 硬碟中備份.


4. 安裝 Python 機器學習套件

python -m pip install --upgrade pip (升級 pip)
pip3 install scipy (會同時安裝 Numpy)
pip3 install matplotlib
pip3 install pandas
pip3 install scikit-learn
pip3 install ipython
pip3 install https://download.pytorch.org/whl/cpu/torch-1.0.0-cp37-cp37m-win_amd64.whl (PyTorch)
pip3 install torchvision  (PyTorch 影像支援)


5. 安裝 Python 網路爬蟲套件

pip3 install requests
pip3 install beautifulsoup4
pip3 install selenium


6. 安裝語音相關套件

pip3 install SpeechRecognition  (Google 語音辨識)
pip3 install PyAudio  (讀取麥克風, 需 VC++ 14.0, 尚未支援 3.7 版)
pip3 install gTTS  (文字轉語音)
pip3 install pygame  (讀取及播放語音檔)

參考 :

Windows 安裝 Python 機器學習工具
Windows 安裝深度學習框架 TensorFlow 與 Keras
安裝深度學習框架 PyTorch
# Python 學習筆記 : Selenium 模組瀏覽器自動化測試 (一)
好用的 Python 編輯器 Thonny
利用 Google 語音辨識 API 將語音轉成文字


2019-01-24 補充 :

今天將新筆電帶到公司, 放在辦公桌發現銀色太亮, 剛好上面日光燈照過來時鍵盤下方一大片銀色會反光, 有點小後悔選了銀色, 如果是藍色應該就不會反光了. 不過銀色真的很漂亮, 有 MacBook Air 的 Fu. 


2023-01-11 補充 :

這台筆電再過兩周就滿四歲了, 目前都正常順暢使用中, 電池充到 80% 用到 10% 續航力都還有4 4~5 小時, Acer 品質很不錯. 最近因為鄉下家光世代升速到 300M, 打算買新的路由器來充份使用到 300M 高速網路, 預計買 WiFi 6 (AX). 突然想到我筆電的 WiFi 速度, 查詢網路發現是 WiFi 5 (AC), Swift 5 的無線網卡採用的是 Intel 9560 晶片 :




Intel 9560 只支援到 AC, 如果換成 AX 路由器, 筆電的網速應勉強還能吃到 300M, 還要看環境時測看看才能確定. 

Swift 5 詳細規格如下 : 

ACER SF515-51T-57XE銀詳細規格表 
作業系統:Windows 10 Home 
CPU:Intel® Core™ i5-8265U(1.6GHz/3.9GHz) 
LCD 尺寸:15.6" FHD/IPS/觸控/鏡面 
解析度:1920x1080 
顯示晶片:Intel® UHD Graphics 620 
記憶體1:8GB DDR4 (Onboard) 
記憶體2:不可擴充 
Audio
Acer TrueHarmony:Y 
built in speaker:Y 
Built-in microphone:Y 
儲存:512GB PCIe SSD (Onboard) 
光碟機:N 
Webcam 前:HD (1280 x 720)/SHDR 
無線網路:2x2 802.11a/b/g/n/ac     
藍牙:BT 5.0 
區域網路 RJ-45:N 
Kensington lock slot:N 
尺寸(mm):高:1.59cm/寬:35.8cm/深:23cm 
重量:0.999 kg 
電源變壓器:45W 
電池:54.0 Wh 4670 mAh 
Battery Life:Up to 10 hours (MobileMark2014) 
Input/Output: 
Card Reader:N 
USB 3.1 Gen :1 
USB 3.0:2 
HDMI:Y 
Acer Converter port:N 
External display (VGA) port:N 
耳機/喇叭輸出:Y 
麥克風輸入:Y(與耳機/喇叭輸出共用jack) 
安全:指紋辨識:Y 
TPM:N

最小的 AIoT 臉部辨識開發板 ESP-EYE

今天在 Pinterest 看到 ESP-EYE 這塊上海樂鑫公司 (ESP8266 的開發商) 新推出的 AIoT 開發板, 令我驚艷 :

ESP-EYE ESP32 AI Development Board Supports Face detection, Voice wakeup
https://www.espressif.com/zh-hans/products/hardware/esp-eye/overview
The Mysterious ESP-EYE Development Board from Espressif?

此 AIoT 板內建 WiFi 與藍芽, 200 萬畫素攝影鏡頭, 以及一個麥克風, 詳細規格如下 :
  1. WiSoC- ESP32 dual core Tensilica LX6 processor with WiFi and Bluetooth
  2. Memory – 8MB PSRAM
  3. Storage – 4MB flash
  4. Camera – 2MP OV2640 camera
  5. Audio – Microphone
  6. USB – 1x micro USB port for power and programming
  7. Misc – Reset, boot and function buttons, 2x LEDs
  8. Dimensions – 41 x 21 mm
此開發板支援 WiFi 視訊傳送, 樂鑫提供 ESP-WHO 人工智慧框架, 可進行影像識別專案開發, 參考 :

https://github.com/espressif/esp-who









此板目前可在淘寶網與樂鑫自營商城預購, 一塊 159 元人民幣, 約合台幣 736 元左右 :

# 淘寶網 : ESP-EYE(预售)
# 樂鑫科技自營商城

2019-06-28 補充 :

現在露天有賣, $1390 很貴 (可以買 Pi 3B+ 了) :

# [芸庭樹] 現貨 樂鑫 原廠 ESP-EYE ESP32-CAM 影像應用開發板 ESP-WHO (AIOT) AWS

好書 : 深度思考

此書為前蘇聯西洋棋王卡斯帕洛夫所寫, 從市圖借來一段時間了, 今早在書架上喵到, 突然想看看到底寫些甚麼, 結果花了大約一小時就翻完了, 不是因為寫得太簡單, 而是描述了很多西洋棋細節, 而我對棋藝沒啥興趣, 就快速翻過去了. 我主要是想知道被 IBM 深藍打敗的卡斯帕洛夫對人工智慧的看法是甚麼. 卡斯帕洛夫不只是棋王而已, 自從敗於深藍後, 對於人工智慧演進也做了相當深入的觀察與研究.


Source : 博客來


摘要如下 :
  1. 圖靈夢想的人工智慧, 背後的基本假設是大腦本身就是一種電腦, 而目標是創造出一種可以成功模仿人類行為的機器.
  2. 語言翻譯就是機器學習的先驅, Google 翻譯就是機器學習所驅動, 雖然它能處理幾十種語言, 但它對這些語言的規則卻一無所知 (因為它不是 Rule-based, 而是 Statistics-based). 解決像語言這麼 "人類" 的問題, 光靠資料規模與速度就能應付. 一位 Google 翻譯的工程師說 : 當你的訓練範例從一萬筆增加到一百億筆後, 就會開始有用處了, 資料勝過一切.
  3. 認知科學家侯世達 (Douglas Hofstadter) 的 1979 年著作 "哥德爾, 艾舍爾, 巴赫 : 集異壁之大成" 影響甚鉅, 他一直忠於理解人類認知的使命, 但人工智慧界追求的卻是立竿見影的成效, 以及可以出售的產品, 因此排擠了他的研究. 目前 AI 界想要處理的是他們能解決的問題 (機器學習), 人類的智能是非常難解的問題, 相較之下, 機器學習卻能快速帶來成效. 
  4. 貝爾實驗室的理念是先描述廣義的問題, 再想辦法製造出解決這些問題的機器, 而不是一開始就計畫製造某個特定產品. 但工業界在連續數十年的企業合併與收購後, 這種思維模式已不再盛行. 許多大公司經常假定, 世界上某個地方一定有人在進行某種創意, 等他們發明之後再來收購就好. 
  5. 圖靈獎第一屆得主, 電腦先驅佩利 (Alan Pelis) 在 1982 年寫下一系列程式設計相關格言, 其中有一條是 : "最佳化會阻礙演化". 演化的本質並非改良,  而是改變. 演化通常是由簡至繁, 關鍵是會增加多樣性, 改變某個東西的本質. 佩利認為最佳化會使程式碼運作得更快, 但不會改變其本質或是創造新事物. 他認為大膽的目標會朝演化方向推進, 因為這樣會創造出原先未預期的需求與挑戰. 只靠最佳化現有的工具與方法是不足以應付的. 其實這就是機會成本的問題, 過度重視最佳化就不會創造新事物, 因而可能變成停滯不前. 
  6. 人工智慧效應是指 "智慧就是機器還沒有達成的事情", 我們一旦找到方法讓電腦做出某種有智慧的事情, 那麼這件事情並不是真正的智慧. 一旦某個東西變成實用, 通用, 這個東西就不再被稱為人工智慧了. 
書中提到了下面兩本書 :
  1. 哥德爾, 艾舍爾, 巴赫 : 集異壁之大成
  2. 超智慧:出現途徑、可能危機,與我們的因應對策
第一本好像在明儀看過; 第二本 "超智慧" 已借來一段時間, 很厚, 而且不是能跳著快速翻看的那種書, 過年可以來看看.

2019年1月22日 星期二

關於 18650 鋰電池

行動電源常用的 18650 鋰電池用途越來越廣, 我在下面這篇文章發現特斯拉電動車竟然也採用 18650! 而且還是電動車廠中唯一使用 18650 鈷酸鋰電池者, 其他車廠如比亞迪, 日產, 雪佛蘭等都採用磷酸鋰電池, 摘要整理如下 :

電動車為何選用18650電池,包括特斯拉?
特斯拉为何坚持使用钴酸锂电池?

特斯拉堅持使用 18650 鈷酸鋰電池原因是 :
  1. 技術成熟
  2. 穩定性高
  3. 能量密度高
  4. 輸出功率高
  5. 電池一致性高
磷酸鋰鐵電池雖然可循環充電次數較高, 但其充放電曲線差異大, 一致性較差, 且能量密度較低, 使續航力受到影響. 特斯拉曾測試超過 300 種電池, 最終採用了松下生產的 NCR18650 鈷酸鋰電池.

18650 鋰電池最早是 SONY 公司為節省成本而以其尺寸形狀命名制定的標準電池型號, 18 表示直徑 18mm, 65 表示高度為 65mm, 最後的 0 表示為圓柱形包裝. 標稱電壓 3.7V, 充飽電為 4.2V, 最小放電電壓 2.5V. 特斯拉的 Model S 使用了 8000 節的 18650, 利用分層管理方式控制這些以串並聯模式組合起來的 18650 模組電壓與溫度. 特斯拉各車款至今未發生電池自然問題.

鈷在鋰離子電池中的角色是作為負極, 鈷 Colbalum 字源來自德語 kolbat (妖怪), 因早期礦工發現含鈷的礦石 (輝鈷礦) 會發出幽微的藍光, 接觸的礦工或冶煉者因此而得到怪病, 這種礦石被認為是一種妖怪, 因而得名. 事實上鈷常以具有劇毒的砷化物或硫化物形式存在, 但鈷本身對人體倒是沒甚麼危害.

鈷原子序 27, 是鐵鎳銅的鄰居, 鐵鎳銅礦中常含有微量鈷. 鈷在地殼中的含量極少, 約僅 0.0023%, 具有稀有性, 主要礦脈包括剛果與澳洲等, 根據彭博社訊息, 目前剛果鈷產量佔世界總產量之 65%, 而中國則是剛果鈷的最大買家 .

參考  :

https://zh.wikipedia.org/wiki/钴
中國掌握剛果生產線 在全球鈷礦爭奪戰遙遙領先
供應拉警報 BMO:鈷礦價格未來2年將「翻倍」上漲
常見六種鋰電池特性
钴元素还能在电池里“作妖”多久

購買筆電包

周日接到阿楓店長電話, 說 Acer SF515 可照我想要的價格出售後, 買新筆電的事便確定下來, 接下來要先買筆電保護套, 依據 SF515 的尺寸寬 358 mm 深 230 mm, 找到如下幾款 :

我覺得 $268 元的那款有一個隱藏內袋可放滑鼠或充電線比較方便, 於是向 24 小時出貨的賣家買了 2 個, 268*2 + 55 =591 元. 這款是為 MacBook Pro 量身訂做的, 我最終雖沒選擇 MacBook, 但卻買了 MacBook 用的包包, 算是 ... 解饞吧! 

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

在 Win10 順利安裝了 MongoDB 後, 我想在樹莓派上也安裝看看, 雖然我比較偏向於 Redis, 但兩個 NoSQL 架構不同, 都玩玩看唄.

我參考 "不一樣的 Node.js (第二版)" 這本書的 7.3.1 節以下列指令進行安裝 :

sudo apt-get install mongodb

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Mon Dec 31 08:22:50 2018 from 192.168.2.109
pi@raspberrypi:~ $ sudo apt-get install mongodb 
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
  libboost-dev libboost1.55-dev libpcap0.8 mongodb-clients mongodb-dev
  mongodb-server
Suggested packages:
  libboost-doc libboost1.55-doc libboost-atomic1.55-dev
  libboost-chrono1.55-dev libboost-context1.55-dev libboost-coroutine1.55-dev
  libboost-date-time1.55-dev libboost-exception1.55-dev
  libboost-filesystem1.55-dev libboost-graph1.55-dev
  libboost-graph-parallel1.55-dev libboost-iostreams1.55-dev
  libboost-locale1.55-dev libboost-log1.55-dev libboost-math1.55-dev
  libboost-mpi1.55-dev libboost-mpi-python1.55-dev
  libboost-program-options1.55-dev libboost-python1.55-dev
  libboost-random1.55-dev libboost-regex1.55-dev
  libboost-serialization1.55-dev libboost-signals1.55-dev
  libboost-system1.55-dev libboost-test1.55-dev libboost-thread1.55-dev
  libboost-timer1.55-dev libboost-wave1.55-dev libboost1.55-tools-dev
  libmpfrc++-dev libntl-dev
The following NEW packages will be installed:
  libboost-dev libboost1.55-dev libpcap0.8 mongodb mongodb-clients mongodb-dev
  mongodb-server
0 upgraded, 7 newly installed, 0 to remove and 214 not upgraded.
Need to get 20.4 MB of archives.
After this operation, 207 MB of additional disk space will be used.
Do you want to continue? [Y/n] Y
Get:1 http://mirrordirector.raspbian.org/raspbian/ jessie/main libpcap0.8 armhf 1.6.2-2 [121 kB]
Get:2 http://mirrordirector.raspbian.org/raspbian/ jessie/main libboost1.55-dev armhf 1.55.0+dfsg-3 [5,809 kB]
Get:3 http://mirrordirector.raspbian.org/raspbian/ jessie/main libboost-dev armhf 1.55.0.2 [3,378 B]
Get:4 http://mirrordirector.raspbian.org/raspbian/ jessie/main mongodb-dev armhf 1:2.4.10-5+deb8u1 [1,073 kB]
Get:5 http://mirrordirector.raspbian.org/raspbian/ jessie/main mongodb-clients armhf 1:2.4.10-5+deb8u1 [10.1 MB]
Get:6 http://mirrordirector.raspbian.org/raspbian/ jessie/main mongodb-server armhf 1:2.4.10-5+deb8u1 [3,245 kB]
Get:7 http://mirrordirector.raspbian.org/raspbian/ jessie/main mongodb armhf 1:2.4.10-5+deb8u1 [12.2 kB]
Fetched 20.4 MB in 54s (374 kB/s)
Selecting previously unselected package libpcap0.8:armhf.
(Reading database ... 123977 files and directories currently installed.)
Preparing to unpack .../libpcap0.8_1.6.2-2_armhf.deb ...
Unpacking libpcap0.8:armhf (1.6.2-2) ...
Selecting previously unselected package libboost1.55-dev:armhf.
Preparing to unpack .../libboost1.55-dev_1.55.0+dfsg-3_armhf.deb ...
Unpacking libboost1.55-dev:armhf (1.55.0+dfsg-3) ...
Selecting previously unselected package libboost-dev:armhf.
Preparing to unpack .../libboost-dev_1.55.0.2_armhf.deb ...
Unpacking libboost-dev:armhf (1.55.0.2) ...
Selecting previously unselected package mongodb-dev.
Preparing to unpack .../mongodb-dev_1%3a2.4.10-5+deb8u1_armhf.deb ...
Unpacking mongodb-dev (1:2.4.10-5+deb8u1) ...
Selecting previously unselected package mongodb-clients.
Preparing to unpack .../mongodb-clients_1%3a2.4.10-5+deb8u1_armhf.deb ...
Unpacking mongodb-clients (1:2.4.10-5+deb8u1) ...
Selecting previously unselected package mongodb-server.
Preparing to unpack .../mongodb-server_1%3a2.4.10-5+deb8u1_armhf.deb ...
Unpacking mongodb-server (1:2.4.10-5+deb8u1) ...
Selecting previously unselected package mongodb.
Preparing to unpack .../mongodb_1%3a2.4.10-5+deb8u1_armhf.deb ...
Unpacking mongodb (1:2.4.10-5+deb8u1) ...
Processing triggers for man-db (2.7.0.2-5) ...
Processing triggers for systemd (215-17+deb8u6) ...
Setting up libpcap0.8:armhf (1.6.2-2) ...
Setting up libboost1.55-dev:armhf (1.55.0+dfsg-3) ...
Setting up libboost-dev:armhf (1.55.0.2) ...
Setting up mongodb-dev (1:2.4.10-5+deb8u1) ...
Setting up mongodb-clients (1:2.4.10-5+deb8u1) ...
Setting up mongodb-server (1:2.4.10-5+deb8u1) ...
Adding system user `mongodb' (UID 113) ...
Adding new user `mongodb' (UID 113) with group `nogroup' ...
Not creating home directory `/home/mongodb'.
Adding group `mongodb' (GID 121) ...
Done.
Adding user `mongodb' to group `mongodb' ...
Adding user mongodb to group mongodb
Done.
Setting up mongodb (1:2.4.10-5+deb8u1) ...
Processing triggers for libc-bin (2.19-18+deb8u7) ...
Processing triggers for systemd (215-17+deb8u6) ...

可見相依套件還真不少, 總共需要 207MB, 比 Win10 還少.

查詢是否已有 mongodb 使用者 :

pi@raspberrypi:~ $ grep mongodb /etc/passwd 
mongodb:x:113:65534::/home/mongodb:/bin/false 


在Raspberry Pi 2代和3代(Jessie版Raspbian系統)安裝MongoDB 3.0.9
樹莓派 Raspberry Pi 安裝 Node.js 與 MongoDB 資料庫
Web Development With Node And Express

2019年1月21日 星期一

購買藍芽滑鼠

上週在露天購買的藍芽滑鼠至今未看到寄出, 早上接到賣家電話說金色已無, 紅色可否? 我不喜紅色, 故要求取消交易, 改向另一賣家購買藍色 :

第二代 藍牙滑鼠(充電版) 藍牙3.0 一鍵配對 蘋果風格 可以連接電視 平板 手機 蘋果MAC/WIN7/8/10系統 $230

含運 40 共 270 元, 明天寄出應該周五才會到, 此賣家交易規則明確, 很好.

羅技的滑鼠品質最好, 但比較貴 :

羅技(原廠盒裝) M337藍牙滑鼠(藍) $600
現貨 公司貨 Logitech 羅技 M337 藍牙滑鼠 黑 雷射 適用 Mac Chrome OS Android $620

市圖還書 15 本

本周繼續對市圖借書進行清倉, 還掉下面幾本書 :
  1. 為何有錢人都用Excel輕鬆存1000萬? :富爸爸教你33招致富祕笈,就算薪水2萬5也能翻身!
  2. 大師級Excel取巧工作術 :一秒搞定搬.找.換.改.抄,資料分析一鍵結果就出來,對方秒懂.服你專業.
  3. 精通正規表達式
  4. 資本論完全使用手冊 :版本.系譜.爭議與當代價值
  5. 實戰物聯網開發 :使用ESP8266
  6. 社群網站的資料探勘
  7. HTML5与WebGL的编程
  8. 超簡單,初學者OK!太極拳一星期練習計劃
  9. 人人可作卡米狗 :從零打造自己的Line聊天機器人
  10. R語言 :邁向Big Data之路
  11. R錦囊妙計
  12. Arduino穿戴式裝置專案製作
  13. 前端&行動網頁設計速成班 :Bootstrap 4 + CSS3 + HTML5 + JavaScript
  14. Python新手使用Django架站的16堂課
  15. It's django :用Python迅速打造Web應用!
黃色部分是有空還要再借的.

關於 PyAutoGUI v0.9.36 安裝檔 (tar.gz)

網友 Sony 兄留言問我是否還留有 PyAutoGUI v0.9.36 版的離線安裝檔, 因若安裝最新版, 需要額外的相依模組 PyGetWindow, 但安裝時會出錯. 我查了 PyPi 網站, 目前最新版是 v0.9.41 :

https://pypi.org/project/PyAutoGUI/#files

不過 PyAutoGUI 官網最新版已到 v1.0.0 :

https://pyautogui.readthedocs.io/en/latest/

老實說 PyAutoGUI 我只是淺嘗即止, 還沒時間做完整的測試學習, 自動化主要還是用 AutoIt. 參考 :

在 Windows 上離線安裝 PyAutoGUI 的方法

我在電腦中找到了 v0.9.36 版的 PyAutoGUI, 放在 DropBox :

https://www.dropbox.com/s/ff4n6am2pt3q6wr/PyAutoGUI-0.9.36.tar.gz?dl=0

2019年1月20日 星期日

2019 年第 3 周記事

感冒服藥第二天沒發燒後雖然感到自然些, 但咳嗽過了一周還是沒好, 吃過三付魚腥草酸梅麥芽湯感覺有較好, 但這兩天起床後後腦杓還是會暈暈的, 直覺是與喉嚨尚未全好有關. 這次感冒還真猛, 一周來下班吃過晚飯都昏沉沉跑去補眠, 即使如此精神還是不濟.

早上起床後接到左營阿姨電話, 說大阿姨昨夜往生了! 下午燜胡瓜弄好後近四點才得空過去捻香祭拜. 印尼外勞 Cindy 服侍了三年多吧, 也有感情了, 看她眼睛也是腫腫的, 月底後仲介會幫她轉職. 靈堂遺照似乎有點不專業, 表嫂說之前要申請殘障手冊, 說好說歹都不去照相館, 只好在家用手機拍. 長輩年事漸高便要對此深謀遠慮, 老一輩會忌諱的, 便要想些法子不著痕跡地留下照片 (例如去拍全家沙龍照時一定會拍美美的個人照). 母親五姊妹已走了兩個, 至今我尚未找到五姊妹合照. 母親走的前一年生日 (2013), 本想請眾阿姨去海港聚餐, 順便拍一張姊妹合照, 但忙著就錯過了. 來日並不方長, 應作如是觀.

上週整理鄉下衣櫥找到兩套西裝, 這麼好看的衣服長年都鎖在衣櫃太可惜. 為此決定不再理平頭, 週三晚上跑去 JIT 理回小西裝頭, 這樣四月小安結婚時穿西裝才速配. 坦白說這幾年理平頭的主要原因是要掩蓋白髮日多的事實, 理個五分平頭不僅看起來像高中生, 白髮似乎也不那麼明顯了, 其實這只是自欺欺人罷了. 認清事實吧, 先生.

2019年1月19日 星期六

Win 10 安裝 IPython

今天去市圖拿預約書 "PyTorch 讓你愛不釋手", 很快看完前兩章. 第二章介紹了 IPython, 這是增強版的 Python Shell, 加上了自動補全 (按 Tab 鍵) 與內省 (說明) 功能, 比 IDLE 要強大多了, 所以立馬安裝是用看看  :

C:\Users\Tony>pip3 install ipython 
Collecting ipython

  Downloading https://files.pythonhosted.org/packages/f0/b4/a9ea018c73a84ee6280b2e94a1a6af8d63e45903eac2da0640fa63bca4db/ipython-7.2.0-py3-none-any.whl (765kB)
Requirement already satisfied: colorama; sys_platform == "win32" in c:\python36\lib\site-packages (from ipython) (0.3.9)
Requirement already satisfied: traitlets>=4.2 in c:\python36\lib\site-packages (from ipython) (4.3.2)
Collecting pygments (from ipython)
  Downloading https://files.pythonhosted.org/packages/13/e5/6d710c9cf96c31ac82657bcfb441df328b22df8564d58d0c4cd62612674c/Pygments-2.3.1-py2.py3-none-any.whl (849kB)
Collecting backcall (from ipython)
  Downloading https://files.pythonhosted.org/packages/84/71/c8ca4f5bb1e08401b916c68003acf0a0655df935d74d93bf3f3364b310e0/backcall-0.1.0.tar.gz
Collecting jedi>=0.10 (from ipython)
  Downloading https://files.pythonhosted.org/packages/c2/bc/54d53f5bc4658380d0eca9055d72be4df45e5bfd91a4bac97da224a92553/jedi-0.13.2-py2.py3-none-any.whl (177kB)
Collecting pickleshare (from ipython)
  Downloading https://files.pythonhosted.org/packages/9a/41/220f49aaea88bc6fa6cba8d05ecf24676326156c23b991e80b3f2fc24c77/pickleshare-0.7.5-py2.py3-none-any.whl
Collecting prompt-toolkit<2 .1.0="" from="" gt="" ipython="" p="">  Downloading https://files.pythonhosted.org/packages/d1/e6/adb3be5576f5d27c6faa33f1e9fea8fe5dbd9351db12148de948507e352c/prompt_toolkit-2.0.7-py3-none-any.whl (338kB)
Requirement already satisfied: setuptools>=18.5 in c:\python36\lib\site-packages (from ipython) (38.5.1)
Requirement already satisfied: decorator in c:\python36\lib\site-packages (from ipython) (4.3.0)
Requirement already satisfied: ipython-genutils in c:\python36\lib\site-packages (from traitlets>=4.2->ipython) (0.2.0)
Requirement already satisfied: six in c:\python36\lib\site-packages (from traitlets>=4.2->ipython) (1.11.0)
Collecting parso>=0.3.0 (from jedi>=0.10->ipython)
  Downloading https://files.pythonhosted.org/packages/09/51/9c48a46334be50c13d25a3afe55fa05c445699304c5ad32619de953a2305/parso-0.3.1-py2.py3-none-any.whl (88kB)
Collecting wcwidth (from prompt-toolkit<2 .1.0="" gt="" ipython="" p="">  Downloading https://files.pythonhosted.org/packages/7e/9f/526a6947247599b084ee5232e4f9190a38f398d7300d866af3ab571a5bfe/wcwidth-0.1.7-py2.py3-none-any.whl
Building wheels for collected packages: backcall
  Running setup.py bdist_wheel for backcall ... done
  Stored in directory: C:\Users\Tony Huang\AppData\Local\pip\Cache\wheels\98\b0\dd\29e28ff615af3dda4c67cab719dd51357597eabff926976b45
Successfully built backcall
Installing collected packages: pygments, backcall, parso, jedi, pickleshare, wcwidth, prompt-toolkit, ipython
Successfully installed backcall-0.1.0 ipython-7.2.0 jedi-0.13.2 parso-0.3.1 pickleshare-0.7.5 prompt-toolkit-2.0.7 pygments-2.3.1 wcwidth-0.1.7


相依模組還真是不少哩! 

我以前已安裝過 PyTorch, 那就用它來試試自動補全功能吧! 在命令列輸入 IPython 進入 REPL 介面, 先用 import torch as t 引入 PyTorch 模組, 然後輸入 t.Float 後按 Tab 鍵, 果真出現自動補全提示選單 :




按上下鍵可以移動選項, 按 Enter 即填入選定的項目, 好用. 

在 [In] 輸入列按上下鍵可以回溯顯示之前輸入過的指令, 可叫出來修改或重新執行, 省卻重新 Key 指令的麻煩. 

另外, 它還提供以 % 開頭的魔法指令如下 :

 IPython 魔法指令 說明
 %timeit command 執行 command 指令並計算其執行時間
 %hist 顯示輸入歷史
 %paste 貼上剪貼簿中的指令
 %cat test.py 顯示 test.py 內容
 %run -i  test.py 在目前命名空間中執行 test.py
 %quickref 顯示快速參考
 %who 顯示目前命名空間中的全部變數
 %debug 進入偵錯模式 (輸入 q 退出)
 %env 顯示系統環境變數
 %xdel variable 刪除變數 variable 及其全部參考
 %magic 顯示全部魔法指令

魔法指令也支援說明功能, 在指令後面加 "?" 會顯示指令之說明文件,  加 "??" 會顯示指令之原始碼, 例如 :

C:\Users\Tony>ipython 
Python 3.6.1 (v3.6.1:69c0db5, Mar 21 2017, 18:41:36) [MSC v.1900 64 bit (AMD64)]
Type 'copyright', 'credits' or 'license' for more information
IPython 7.2.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]: import torch as t      #引入 PyTorch

In [2]: a=t.Tensor(3,4)         #建立一個 3*4 矩陣

In [3]: %timeit a.sum()       #計算矩陣元素和與所耗時間
4.65 µs ± 77.9 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

In [4]: %hist                         #顯示下過的指令
import torch as t
a=t.Tensor(3,4)
%timeit a.sum()
%hist


In [5]:


關於經濟學人雜誌

最近二哥說學測模考出了一題與經濟學人雜誌有關的題目, 問我這本雜誌是怎樣? 我說就是一本分析全球政治, 經濟, 軍事等新聞的周刊啊! 前天又說如果學測上大學的話, 想要來看經濟學人, 咦, 好像每天早餐跟我一起看 CNN, BBC, 與 Al Jazeera 看出興趣了.

經濟學人不便宜, 應該是英文新聞雜誌中最貴的, 我是在讀碩士班時利用學生身分以師生價訂閱的 (代理商是玉龍山), 畢業前又訂了 3 年, 大概看了 6 年左右, 後來價格暴漲, 我又失去學生身分, 便改訂 Newsweek 與 Reader's Digest. 但以分析深度與全球涵蓋面來說, 還是經濟學人好得多.

今天查了 Economist 訂價, 學生價一年 51 期 6750 元 (平均每期 132 元); 兩年 102 期 12375 元  (平均每期 121 元), 真的不便宜. 但我問了明儀, 零售價是 275 元打 9 折約 248 元, 是學生訂閱價的兩倍 ! 還是訂的划算, 參考 :

http://www.ec.conn.tw/ (台時亞洲)




2019年1月18日 星期五

購買藍芽滑鼠

因為近期可能要換新筆電 (ACER SF515), 故先行準備藍芽滑鼠. 我原先用在 INHON 筆電上的 LOGITECH M545 真的非常滿意, 用了四年摔了好幾次仍然頭好壯壯, 但是, 它是 USB 無線滑鼠, 需要一個 Pico 接收器, 會佔用一個 USB 槽, 藍芽滑鼠則無此困擾.




全家取貨付款免運 210 元, 可惜沒有藍色, 但金色也可接受.

另外, 我在建國路找到鍵盤保護膜, 自取一張 50 元 :

[羊咩咩小鋪] 翔龍國際代理 15~17吋筆電用鍵盤保護膜- 通用型 $50

2019-01-21 :

賣家通知只剩紅色, 故取消交易, 另行購買.

2019年1月17日 星期四

ACER SF515-51T 的最新評價

今天在 lattopmedia.com 上看到 ACER SF515 筆電的全面評價, 是 2019-01-14 釋出的最新報告, 總結來說, 該網站對此款筆電褒多於貶, 特別是電池續航力與觸控螢幕評價方面得到了讚賞, 測試結果顯示 Acer 的設計充分發揮了此機的 54W 鋰電池的使用效能, 在瀏覽網頁部分達到 11 小時, 影片播放可達 9 小時, 遊戲部分可達 2.5 小時. LG 觸控螢幕是目前市場上較好的面板, 擁有精確的 sRGB 色彩覆蓋 (網頁設計友好) 與相對高的最大亮度, 最重要的是, 亮度控制方式並非 PWM. 

Acer Swift 5 (SF515-51T) review – the world’s lightest 15-inch laptop yet

缺點部分有二 :
  1. 散熱不甚理想使 CPU 只發揮 80% 效能.
  2. 太輕巧容易折彎, 滑動螢幕會使主機晃動
事實上此兩缺點瑕不掩瑜, 對文書作業 (寫程式, 上網, 看影片等) 幾乎無感, 總體評價是一台非常不錯的輕薄筆電.

經過幾個月的評估, 從 MacBook Air 到 ACER SF314, SF514, MSI PS42, ASUS UX533 最後回到 Acer SF515, 我應該會買這台來替換 INHON 的小筆電, 因為眼睛老花現象越來越明顯, 必須改看大螢幕了.

# 青蘋果行動科技 高雄市三民區建國二路51之6號  07 235 0322 (螢幕保護貼 980)

2019年1月16日 星期三

MongoDB 學習筆記 (一) : 在 Win10 上安裝 MongoDB

MongoDB 是以 Javascript 當作腳本語言且以 JSON 儲存資料 (嚴格來說是 Binary JSON) 的 NoSQL 資料庫, 為 10gen 團隊於 2007 年開始發展, 與 Node.js 搭配使用非常方便 (資料不須轉換直接交換). 它支援 Map/Reduce 功能, 可用於大數據資料處理. 除了在操作時使用 Javascript 讀寫資料庫, 還支援伺服端 Javascript 腳本, 相當於傳統關聯式資料庫的預儲程式功能.

NoSQL 資料庫概念始於 1998 年, 原先是指一種不同於傳統關聯式, 不提供 SQL 功能的資料庫, 但目前已被重新定義為 Not Only SQL, 意指無綱要 (Schemaless), 分散式, 非關聯式, 不提供 ACID 特性的資料庫. 所謂 ACID 是指 :
  1. 最小性 (Atomicity)
  2. 一致性 (Consistency)
  3. 隔離性 (Isolation)
  4. 持久性 (Durability)
NoSQL 資料庫實作方式大致可分成如下四類, MongoDB 屬於其中的文件導向式資料庫 :

 NoSQL 資料庫種類 說明
 文件導向式 (Document) MongoDB (Sourceforge), CouchDB, RavenDB
 鍵值式 (Key-Value) Redis (Flickr), Memcached, Dynamo (Amazon)
 欄式 (Column) Cassandra (Facebook), BigTable (Google), HBase, Hadoop
 圖形式 (Graph) Neo4J, GraphDB FlockDB (Twitter)

文件導向式資料庫將資料以集合 (Collections) 的方式儲存 (相當於資料表), 每個集合包含多筆文件 (Document, 相當於列或紀錄), 而每筆文件為 Web 結構化資料 (XML 或 JSON), 例如 MongoDB 採用的是 JSON 格式, 適用於儲存 Web 資訊. 鍵值資料庫設計理念來自資料結構裡的雜湊表 (Hash table), 在 Key 與 Value 之見建立映射關係來儲存資料, 適用於大數據之高速存取. 其資料以桶 (Bucket) 儲存, 相當於資料表, 桶裡面存放著鍵值對. 欄式資料庫將同一欄的資料儲存在一起, 適用於分散式檔案系統. 而圖形式資料庫採用 Graph 結構來儲存資料, 適用於社交網路與推薦系統等與關係圖譜有關之系統.

我在市圖借到下面這本 mongoDB 的書, 以下按照其說明進行安裝.

# 7 天學會大數據資料處理 NoSQL-MongoDB 入門與活用


Source : 博客來

1. 下載 MongoDB :

https://www.mongodb.com/download-center?initial=true#enterprise




預設為下載 msi 安裝檔, 我改為免安裝的 zip 檔 (約  290 MB),

mongodb-win32-x86_64-enterprise-windows-64-4.0.5.zip

先在 C 碟下建立一個空的 MongoDB 資料夾, 然後將解壓縮後的目錄改為簡短的 mongodb 資料夾 (約 1 GB) 搬移到 C:\MongoDB 下面, 結構如下 :




2. 將 MongoDB 的 bin 資料夾加入環境變數 Path 中 :

然後在 "控制台/系統/進階系統設定/環境變數" 中新增 MongoDB 的 bin :

C:\MongoDB\mongodb\bin




3. 建立相關目錄與系統設定檔 :

在 C:\MongoDB 下建立如下目錄 :

C:\MongoDB\data\db
C:\MongoDB\data\backup
C:\MongoDB\log

然後建立一個 mongod.cfg 檔案, 這是啟動 MongoDB 服務時必須設定的參數組態文件, 用來指定 db 與 log 目錄, 檔案內容如下 :

dbpath=C:\MongoDB\data\db
logpath=C:\MongoDB\log\mongod.log




4. 啟動 MongoDB 服務 : 

以系統管理員身分開啟命令提示字元視窗, 並輸入如下指令 :

mongod --config "C:\MongoDB\mongod.cfg" -install

C:\WINDOWS\system32>mongod --config "C:\MongoDB\mongod.cfg" -install
2019-01-16T23:06:21.132+0800 I CONTROL  [main] log file "C:\MongoDB\log\mongod.log" exists; moved to "C:\MongoDB\log\mongod.log.2019-01-16T15-06-21".

C:\WINDOWS\system32>

這時若在檔案總管的 "本機" 按滑鼠右鍵, 選 "管理/服務" 就可看到 MongoDB 服務已啟動, 電腦重開機也會自動開啟此服務, 不須再手動啟動.




於命令提示字元視窗輸入如下指令 :

net start MongoDB

C:\WINDOWS\system32>net start MongoDB
MongoDB 服務正在啟動 ..
MongoDB 服務已經啟動成功。


C:\WINDOWS\system32>

這時服務視窗會顯示 MongoDB 目前狀態為執行中 :




執行 mongo 進入 MongoDB 指令介面 :

C:\WINDOWS\system32>mongo
MongoDB shell version v4.0.5
connecting to: mongodb://127.0.0.1:27017/?gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("55c54591-173e-4213-9721-a1d0353da01e") }
MongoDB server version: 4.0.5
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
        http://docs.mongodb.org/
Questions? Try the support group
        http://groups.google.com/group/mongodb-user
Server has startup warnings:
2019-01-16T23:07:12.243+0800 I CONTROL  [initandlisten]
2019-01-16T23:07:12.243+0800 I CONTROL  [initandlisten] ** WARNING: Access control is not enabled for the database.
2019-01-16T23:07:12.243+0800 I CONTROL  [initandlisten] **          Read and write access to data and configuration is unrestricted.
2019-01-16T23:07:12.243+0800 I CONTROL  [initandlisten]
2019-01-16T23:07:12.243+0800 I CONTROL  [initandlisten] ** WARNING: This server is bound to localhost.
2019-01-16T23:07:12.243+0800 I CONTROL  [initandlisten] **          Remote systems will be unable to connect to this server.
2019-01-16T23:07:12.244+0800 I CONTROL  [initandlisten] **          Start the server with --bind_ip <address> to specify which IP
2019-01-16T23:07:12.244+0800 I CONTROL  [initandlisten] **          addresses it should serve responses from, or with --bind_ip_all to
2019-01-16T23:07:12.244+0800 I CONTROL  [initandlisten] **          bind to all interfaces. If this behavior is desired, start the
2019-01-16T23:07:12.244+0800 I CONTROL  [initandlisten] **          server with --bind_ip 127.0.0.1 to disable this warning.
2019-01-16T23:07:12.244+0800 I CONTROL  [initandlisten]
MongoDB Enterprise >         (已進入 MongoDB Shell)

可見不帶參數直接輸入 mongo 預設會連線 localhost 的 27017 埠.

MongoDB Enterprise > help 
        db.help()                    help on db methods
        db.mycoll.help()             help on collection methods
        sh.help()                    sharding helpers
        rs.help()                    replica set helpers
        help admin                   administrative help
        help connect                 connecting to a db help
        help keys                    key shortcuts
        help misc                    misc things to know
        help mr                      mapreduce

        show dbs                     show database names
        show collections             show collections in current database
        show users                   show users in current database
        show profile                 show most recent system.profile entries with time >= 1ms
        show logs                    show the accessible logger names
        show log [name]              prints out the last segment of log in memory, 'global' is default
        use         db.foo.find()                list objects in collection foo
        db.foo.find( { a : 1 } )     list objects in foo where a == 1
        it                           result of the last line evaluated; use to further iterate
        DBQuery.shellBatchSize = x   set default number of items to display on shell
        exit                         quit the mongo shell

此 Shell 介面是全功能的 Javascript 直譯器, 可執行 Javascript 程式碼與標準函數. MongodDB 是無綱要 (Schemaless) 資料庫, 基本資料結構是 field:value 組成的 JSON 格式文件 (document), 相當於關聯式資料庫中的一列紀錄

MongoDB 與 SQL 的術語對應如下 :

 MongoDB 術語 SQL 術語
 database 資料庫 database 資料庫
 collection 集合 table 資料表
 document 文件 row 列/紀錄
 field 欄位 column 行/欄


選擇資料庫 :

MongoDB Enterprise > use test
switched to db test

參考 :

MongoDB 基礎入門教學:MongoDB Shell 篇

[Database][MongoDB] 新增、修改、查詢、刪除操作 1 ( CRUD operation 1 )
https://docs.mongodb.com/manual/reference/program/mongo/

購買長春樂活樂捷

爸說樂捷快吃完了, 所以今天上真享購再買 12 盒, 這次有另外折價 980 元, 故實付 16500-980=15512 元, 大概是一年份的量.

滿仟現折↘【常春樂活】靈活樂捷膠囊12盒(60顆/盒) 下單再贈600購物金




參考去年此時購買紀錄 :

購買樂活樂捷

汽車險與機車險續保

今年汽車仍保和泰, 每年保費都是 5470 (含拖吊), 機車險則保明台, 兩年 960 元, 因明台線上加保車主與持卡人須為同一人, 旅平險也是, 所以無法用自己的信用卡幫家人付費投保, 明年全改為明台好了, 但非車主投保要用傳真, 不能用線上. 參考 :

# 明台產物保險
2018年14家機車強制險保費比較表

2019年1月15日 星期二

Node.js 學習筆記 : 套件管理工具 npm

隨著 Node 安裝的 npm 是 Node 的套件管理工具 (Node Package Management), 功能類似 Python 的 pip 或 Ruby 的 gem, 都是用來管理與分享模組或套件的中介軟體, 主要是用來線上安裝第三方模組, 只要指定套件名稱, npm 會從網路下載欲安裝的套件以及其相依之模組進行安裝, 預設之模組下載來源為 :

# https://www.npmjs.org

經過 npm 安裝好的套件便可像內建的核心模組那樣用 Node 的全域指令 require 引用至應用程式中使用.

Node.js 雖然主要是伺服端的 Javascript 框架, 但另外一個身分是跳脫瀏覽器藩籬而獨立的 Javascript 執行時期環境, 亦即只要安裝了 Node.js 便能執行任何 Javascript 程式檔案. 這使得許多 Javascript 應用例如前端網頁框架的 Vue 等也利用 Node.js 的 npm 套件管理功能來配置其檔案與目錄.

Node 的模組系統遵循 Common JS 模組系統架構, 此架構規範 Node 模組的製作方式, 開發者需照此規範建立模組, 這樣才能確保模組之間互相運作順暢 (Interoperable). npm 官網與說明文件網址如下 :

# http://npmjs.org
https://docs.npmjs.com/

目前 npm 已有超過 88 萬個 Node 第三方套件可供下載安裝, 而且持續不斷快速增加中 :




npm 必須在命令列執行, 開啟命令提示字元視窗, 輸入 npm -v 會顯示目前已安裝的 npm 版本, 例如 :

Microsoft Windows [版本 10.0.17134.556]
(c) 2018 Microsoft Corporation. 著作權所有,並保留一切權利。

C:\Users\User>npm -v 
6.4.1 

若要更新 npm 版本至最新, 可輸入 npm update -g npm, 例如 :

C:\Users\User>npm update npm -g 

若輸入 npm update -g 則是更新所有已安裝套件與其相依模組至最新, 這可能會耗費較久時間.

npm 指令格式為 npm <command> 常用的指令如下 :

 npm 常用指令 說明
 npm install pkg 安裝套件 pkg
 npm uninstall pkg 刪除已安裝套件 pkg
 npm list 顯示全部已安裝套件
 npm view pkg 查詢套件資訊如版本, 相依模組等 (JSON)
 npm search pkg 搜尋套件 pkg
 npm cache 顯示或清除 npm 上的快取
 npm publish pkg 上傳套件 pkg 至 npmjs.org
 npm unpublish pkg 把已上傳至 npmjs.org 之套件 pkg 移除
 npm home pkg 開啟套件 pkg 首頁
 npm repo pkg 開啟套件 pkg 寄存庫 (repository)
 npm update pkg 更新套件 pkg 與其相依模組至最新版本


例如輸入 npm help 會顯示 npm 之用法說明, 輸入 npm list 會顯示目前已安裝之套件 :

Microsoft Windows [版本 10.0.17134.556]
(c) 2018 Microsoft Corporation. 著作權所有,並保留一切權利。

C:\Users\User>npm help 

Usage: npm <command> 

where <command> is one of:
    access, adduser, audit, bin, bugs, c, cache, ci, cit,
    completion, config, create, ddp, dedupe, deprecate,
    dist-tag, docs, doctor, edit, explore, get, help,
    help-search, hook, i, init, install, install-test, it, link,
    list, ln, login, logout, ls, outdated, owner, pack, ping,
    prefix, profile, prune, publish, rb, rebuild, repo, restart,
    root, run, run-script, s, se, search, set, shrinkwrap, star,
    stars, start, stop, t, team, test, token, tst, un,
    uninstall, unpublish, unstar, up, update, v, version, view,
    whoami

npm <command> -h  quick help on <command>
npm -l            display full usage info
npm help <term>   search for help on <term>
npm help npm      involved overview

Specify configs in the ini-formatted file:
    C:\Users\User\.npmrc
or on the command line via: npm <command> --key value
Config info can be viewed via: npm help config

npm@6.4.1 C:\nodejs\node_modules\npm

C:\Users\User>npm list 
C:\Users\User
`-- (empty)     

因還沒有安裝任何第三方套件故顯示 empty.

輸入 npm view pkg 會查詢指定套件之相依模組與最新版本等資訊, 例如查詢 Express 套件 :

C:\Users\User>npm view express

express@4.16.4 | MIT | deps: 30 | versions: 261
Fast, unopinionated, minimalist web framework
http://expressjs.com/

keywords: express, framework, sinatra, web, rest, restful, router, app, api

dist
.tarball: https://registry.npmjs.org/express/-/express-4.16.4.tgz
.shasum: fddef61926109e24c515ea97fd2f1bdbf62df12e
.integrity: sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==
.unpackedSize: 206.1 kB

dependencies:
accepts: ~1.3.5            depd: ~1.1.2               on-finished: ~2.3.0
array-flatten: 1.1.1       encodeurl: ~1.0.2          parseurl: ~1.3.2
body-parser: 1.18.3        escape-html: ~1.0.3        path-to-regexp: 0.1.7
content-disposition: 0.5.2 etag: ~1.8.1               proxy-addr: ~2.0.4
content-type: ~1.0.4       finalhandler: 1.1.1        qs: 6.5.2
cookie-signature: 1.0.6    fresh: 0.5.2               range-parser: ~1.2.0
cookie: 0.3.1              merge-descriptors: 1.0.1   safe-buffer: 5.1.2
debug: 2.6.9               methods: ~1.1.2            send: 0.16.2
(...and 6 more.)

maintainers:
- dougwilson <doug@somethingdoug.com>
- hacksparrow <captain@hacksparrow.com>
- jasnell <jasnell@gmail.com>
- mikeal <mikeal.rogers@gmail.com>

dist-tags:
latest: 4.16.4       next: 5.0.0-alpha.7

published 3 months ago by dougwilson <doug@somethingdoug.com>

可見 Express 目前最新版本為 4.16.4.

用 npm 安裝第三方套件時, 安裝位置有下列兩種 :
  1. 區域安裝 :
    npm install 預設 (不加 -g 參數) 會將套件安裝在目前資料夾的 node_modules 下, 因此不同的專案要用到相同套件時都要重新安裝一次, 但透過多重安裝卻可解決版本衝突問題, 因為在用 require 引入同一模組時, 只會從該專案目錄下的 node_modules 下尋找該模組, 因此各專案目錄下的相同套件 (版本可能不同) 彼此是隔離互不影響的. 不過, 區域安裝的套件只是被安裝到 node_modules 下而已, 其下的 bin 子目錄並不會註冊到 PATH 環境變數中, 因此無法在命令列直接執行此模組之執行檔.  
  2. 全域安裝 :
    npm install 指令若加上 -g 參數會將安裝在 Node 的安裝目錄下 (Linux 通常是在 /usr/local/lib/node_modules), 同時會將其下的 bin 子目錄註冊到 PATH 環境變數中, 因此可在命令列直接執行此模組之執行檔. 在 Linux 系統中, 全域安裝除了將模組安裝到 /usr/local/lib/node_modules 下之外, package.json 檔案中 bin 欄位所列之執行檔也會被連結到 /usr/local/bin, 此為 PATH 環境變數之預設路徑, 因此可在命令列下執行.
    不過在 Linux 系統下, 全域安裝的模組不能直接在 js 檔中用 require 引入模組, 因為 require 不會搜索 /usr/local/lib/node_modules 目錄, 但可用 npm link 在專案目錄與全域模組之間建立符號連結來解決此問題 (npm link 不支援 Windows). 
以安裝架站框架 Express 為例, 區域安裝指令如下 :

npm install express

npm install 指令會連線 npm 套件資料庫, 下載指定套件與其所有相依的模組, 全部安裝於目前目錄的子目錄 node_modules 下 (自動建立).

安裝完畢就可以在程式中以 require 指令引用新安裝的套件, 這時 Node 會到 node_modules 子目錄下找尋已安裝的模組來用 :

var express=require('express');

npm 預設是區域安裝, 亦即只有在目前 App 目錄下的程式可引用所安裝的第三方套件, 別的 App 目錄如果也要用到此套件必須在該目錄下再次安裝. 此外, 區域安裝不會將 node_modules 底下的 bin 子目錄註冊在 PATH 環境變數中. 區域安裝的模組是 require 指令最優先搜尋的位置, 亦即, 當 Node 執行 require('module_name') 時會先到 node_modules 子目錄下搜尋 'module_name' 模組並載入到 cache 記憶體中.

如果要讓任何目錄下的程式都能引用所安裝的模組, 必須用全域安裝, 因它會註冊 PATH 環境變數, 方法是在 npm install 指令後面加 -g 選項 (Linux 要加 sudo), 例如 :

npm install express -g

Node 的 npm 與 Python 的 pip, Ruby 的 gem 最大不同就是有分區域與全域安裝 (預設是區域安裝), 而 pip 與 gem 都是全域安裝, 優點是安裝一次, 全部應用程式都可使用, 但缺點是會有版本衝突問題. 區域安裝優點是各 App 不用擔心版本衝突問題, 但缺點則是同一個模組可能會在不同專案目錄安裝很多次.

npm install 預設安裝最新版模組, 但也可以指定版本, 格式是在套件名稱後面以 @ 指定版本號, 例如指定安裝 Express v4.4.3 版 :

npm install express@4.4.3  

此外 npm install 也可以從本機檔案系統中已從 GitHub 下載的套件資料夾安裝, 但要先安裝 git, 用 git clone 指令先下載套件, 例如下載 Express :

$ git clone https://github.com/visionmedia/express.git

然後用 npm install 安裝 :

$ npm install ./express 

2019 年第 2 周記事

本周很衰, 週三晚上樓下七樓的又上來按門鈴, 這回是先生, 問說你們家是不是有甚麼機器轟轟響很吵, 哇咧又來了, 沒有, 沒有, 就是沒有 (如果有的話, 那就是我的腦袋, 每天不停地超高速運轉). 好, 不相信請進來看看, 沒有車床, 鋸床, 也沒有平車考克, 總之, 我沒有在搞副業, 我的收入也沒有提供足夠誘因需要我花時間去搞副業. 他左看右看找不到罪證便無言地回去了.

但不到五分鐘, 又來按門鈴了, 這回是他太太. 要我下去她家看看我家後陽台地板滲水到她女兒房間的現象還是存在 (跟她下去是一個錯誤). 天啊! 我前年不是花了好幾萬請師傅打掉後陽台地板重新鋪上好幾層防水層嗎? 她意思是可能沒做好, 要請師傅重做. 重做可以, 上回我全額支付是因為受不了她在電梯內破口大罵, 我想說花錢消災算了, 但這回我可沒這麼傻了, 先把錢怎麼分攤談好再說. 關於大樓漏水問題, 參考 :

「漏水」誰負責出錢修? 先抓漏「責任歸屬」

多年來我為此困擾不已, 這家人怎麼那麼愛按人家門鈴? 每次樓上傳來巨響, 我就想, 慘了, 待會兒肯定又要接到管理室電話, 說七樓又投訴你了. 我說不是我們家製造的, 但這位神經質又兼不講理喋喋不休的七樓太太就說不管, 反正聲音從樓上傳來, 你住我樓上, 我當然懷疑你. 要不然舉證責任在你, 你必須去查到底是哪一樓! 哈, 我變成全棟的居住環境品質維護者了!

第二天我就重感冒了, 週四早上頭昏沉沉, 到公司後一直想睡覺, 苦撐到下午三點受不了, 只好請假兩小時去看醫生. 這幾天感冒好一點後回想, 我覺得樓下這家磁場不對勁, 感覺怪怪的, 充滿了負能量, 到處抱怨, 我看整棟大樓住戶有不少都被她煩過了吧!

好了, 負能量到此為止, 現在交待正能量. 本周看完韓劇 "信號", 但結局很奇怪, 心中仍然有許多疑問. 過去被改變了, 李材韓警官既然沒死, 那為何他要搞失蹤, 躲在療養院 15 年? 這種結局明顯是為第二季埋伏筆, 但兩年過去了還沒上映哩!

"信號" 這部戲傳達了幾個思維 :
  1. 堅持信念, 不放棄就還有希望.
  2. 不要因為邪惡橫行而放棄對抗, 甚至因此而墮落成為幫凶.
  3. 人若失去了善良, 便漸漸與魔鬼為伍了.
連續看了兩個月的韓劇, 好像有點累了, 本周開始想放空, 不看戲劇了. 週五遇到樓上同事阿達, 之前有教他怎樣架設 Wordpress 網站, 但他一直搞不定, 希望我再抽時間教他網頁設計, 但我很忙啊! 他說你為什麼總是那麼忙, 這倒說到我心裡邊了, 是啊, 我一直覺得很忙, 好像一直在趕路似地奔跑, 我在趕甚麼? 我有績效壓力嗎? 這個周末回鄉下時我一直在思考這問題 : 以前回鄉下時那種閒適感哪裡去了? 是的, 我要慢下來, 就算甚麼事都不做, 發呆看天空也可以.