2016年4月1日 星期五

好書 : 我用死薪水輕鬆理財千萬

這本書已經從市圖借來很久了, 卻一直沒時間好好地看. 這幾天決心一口氣看完, 覺得這真的如作者安德魯-哈蘭所說, 是一本寫給完全不懂財務, 但渴望投資的人. 作者是一位在新加坡美國學校任教的高中英文老師, 以中等的收入, 在三十幾歲就成為零負債的千萬富翁, 靠的就是正確的投資觀念與穩當的投資策略-買指數型基金以及股債平衡配置.

#  我用死薪水輕鬆理財千萬

Source : 博客來

學校從來不會教我們如何投資理財, 這使得頂尖大學畢業生的理財知識只比一個 14 歲的中學生多一點而已. 缺乏理財知識與正確的投資觀念, 使得一般人養成錯誤的消費習慣, 例如剛出社會就想買新車, 使用卡債與信用卡循環利息等等. 當發覺理財很重要時又進入股市盲目追高殺低, 或聽信理專的建議投資, 這樣比不投資還糟糕. 理專是靠抽佣過活的, 他們對佣金高低的關心程度遠比你是否適合買這商品還重要. 理專比中世紀販賣贖罪券的赦罪僧還不如的地方是, 赦罪僧會明確告訴你上天堂要花多少代價, 但理專卻不會告訴你隱藏在漂亮包裝後面的高額費用 (顧問費, 管理費, 手續費, 危險保費等等), 還有他們拿了多少佣金.

作者是從一些謹慎理財的人身上學到的知識並從中獲得啟發, 他寫這本書的目的, 就是要彌補教育體系不教, 但對我們的人生是否富足非常重要的 "財商". 他把這些應該在學校裡學到的知識整理為九個容易實踐的投資理財法則, 希望讀者建立正確觀念, 不要受那些想把手伸進你荷包的理專操控, 同時能避免令人恐懼的貪婪陷阱, 自己做出最佳的投資.

以下是我的閱讀心得摘要 :

Lesson 1 : 像真的有錢人一樣花錢
  1. 想要建立財富, 必須像醫師誓詞 "避免病人受到傷害" 那樣, 做到避免財富受到傷害, 絕對不做有違財富累積的事. 第一步必須建立資產而非負債, 也就是花費要比收入少, 這樣才能累積資本. 其次是將累積的資本做聰明投資. 
  2. 許多人無法分辨甚麼是 "需要的", 甚麼是 "想要的", 不斷地為了滿足自己的慾望而透支消費, 欠下利率奇高的卡債, 以至於傷害了自己的財務狀況. 無論你的薪水有多高, 如果失去工作便無法過好生活, 那你就不算是真的有錢人, 你必須量入為出. 
  3. 甚麼是真正的有錢人 ?
    a. 如果不工作仍有足夠的錢過生活.
    b. 有足夠的投資, 退休金或信託基金, 可以提供兩倍於國內中等家庭所得之生活水準.
    以台灣來說年平均約 90 萬, 則不工作還必須有年收入 180 萬才算真正有錢人
    . 
  4. 美國職籃球員年收數百萬美元, 但統計顯示高達 60% 的球員在退休後五年內就宣告破產, 主因是他們對理財所知不多 (因為高中沒教), 加上收入高不知節制消費. 
  5. 九個致富法則的第一條是 : 要用 "想要有錢" 的態度和方式來花錢, 盡量減少購買不必要的東西, 便能夠存下最多的錢做為投資之用. 想要越來越有錢, 必須擬定計畫並觀察檢討花費狀況, 如此才有錢投資, 這是非常重要的第一步, 也是最不容易做到的法則.   
  6. 變成真正有錢人的起點是花得比賺得少, 把餘錢做長期投資, 利用股票市場的複利效果, 即使中等收入也能累積可觀的財富. 致富三部曲 : 控制消費, 累積資本, 有效投資.
  7. 許多人想要追求財富與財務獨立, 卻陷入 "看起來有錢" 的假象中, 舉債購買高檔商品 (例如豪華房車), 以至於無法真正變有錢. 調查指出, 最受千萬富翁青睞的汽車是平價的豐田, 而非 BMW 或法拉利. 車子不是投資, 而是負債, 因為它每年都會折舊 (即不斷貶值), 與不動產, 股票, 債券等會孳息的長期資產是天壤之別. 想要有錢就別做傻事, 應該把錢投資在會隨時間增值的資產上. 不要花大錢買新車, 應該買已經有人幫你付了折舊費的中古車 (建議低里程數保養良好的日系車).
  8. 有錢人得到的教訓是 : 銀行不是真正的朋友, 銀行存在的目的是為股東賺錢. 銀行會用最和藹可親的態度, 說服你購買差勁的投資商品或申辦要付很多年利息的房貸. 如果不想被不動產拖垮, 申請房貸前請將利率加一倍, 看看是否還有能力支付. 
  9. 中國俗諺 : 富不過三代, 把錢交給從來不知道賺錢辛苦的年輕一代會發生甚麼後果? 答案是揮霍. 因為輕易得來的錢也會被輕易浪費. 接受父母的財務協助, 反而妨礙了一個人創造財富的能力. 統計顯示,只有學校教師與大學教授這兩種職業的人, 在得到父母財富協助後仍然比較富有 (可能是老師通常比較理性與自制).
  10. 厭惡負債是成為有錢人的重要特質. 把負債視為一種危及生命的恐怖疾病, 會幫助一個人早日邁向財務自由. 
  11. 投資要趁早, 想要變有錢, 年輕時過著節儉生活, 將能大幅提升你成為有錢人的機會. 
Lesson 2 : 複利的諾亞定律
  1. 中學數學坦白說對於大多數人的未來人生並沒有多大用途, 除了神奇的複利公式以外. 複利的威力連愛因斯坦都讚嘆為宇宙間最大的能量, 是世界第八大奇蹟. 巴菲特很早就領悟了這個致富的秘訣, 他 11 歲就買進了人生中的第一支股票, 但還開玩笑說自己起步太晚了. 因為複利的秘密就是時間以及不斷滾進去的本金. 及早展開有效的投資是你能給自己最好的禮物.
  2. 不要直接給年輕人錢, 那會削弱他們致富的能力, 必須讓他們學會自己賺錢. 很多父母了解複利的威力之後, 就想要為子女的將來固定撥出一筆錢, 但這與鼓勵子女學會賺錢存錢及投資卻大不相同.
  3. 如果你想在股市與債市提升致富機會, 最好的策略就是及早開始, 這不僅讓你贏在起跑點, 還能產生神奇的複利威力, 使晚起跑的人無論如何也追不上你. 越早起步風險越低. 如果你已經五十歲, 那麼沒有時麼時刻比當下就做更好. 
  4. 確保成功的最好方式是在全球股市投資.
  5. 要知道自己多麼浪費, 只要在每天睡覺前寫下買了甚麼, 這是一種負責任衡量自己消費的方式, 開銷就會逐漸減少. 將每月收入減掉平均生活費後, 就是每月可用於投資的錢, 但是不要到月底才將錢用於投資, 應該一領到錢就自動將資金轉帳到已選定的投資帳戶中, 否則月底就會沒錢去投資了. 如果有外快或獎金, 應該將至少一半的錢放進投資帳戶, 剩下的錢可以放進一個獨立帳戶, 以備不時之需.
  6. 揹車貸卡債, 就算精通投資也白搭. 真正有投資頭腦的人絕對不會做這種傻事, 因為信用卡循環利率高達 18%, 你的投資必須有 18% 以上的稅後年報酬率才養得起卡債, 你有這種投資功力嗎? 
  7. 股票有漲跌, 但方法正確一定能創造財富. 平均而言, 短期買賣的投資獲利往往不如長期持有者. 為避免投資風險太高, 最佳的股市投資策略之一是持有股市中的每檔股票 (即指數型基金), 而不是猜測哪檔會上漲 (個股). 只要有耐心, 股市的雙重報酬率一定可帶來可觀報酬率, 關鍵是及早開始與持續投資.
Lesson 3 :
  1. 大多數專業理財顧問的建議並不能為我們帶來最佳的投資結果, 一般的投資人都被騙了, 因為大部分的理財顧問是用客戶的錢來幫自己賺錢, 他們其實是理財商品 (通常是主動型基金) 推銷員, 總是將自己的利益放在客戶的利益之前.
  2. 只要你購入三種指數型基金, 你的錢幾乎等於投資在全球金融市場, 投資績效可以打敗大多數的金融專家 :
    (1) 本國股市指數 : 例如 台灣五十, 台灣高股息等
    (2) 國際股市指數 : 例如那斯達克 100, 史坦普 500 等
    (3) 公債市場指數 : 例如巴克萊公債指數基金
  3. 巴菲特說 : "人們從專業基金經理人那裏得不到甚麼投資好處 ... 持有股票的最好方法是投資指數型基金". 1970 年諾貝爾經濟學獎得主薩繆爾森說 : "分散股票投資組合最有效的方法, 是投資低管理費的指數型基金". 1990 年諾貝爾經濟學獎得主米勒也說 : "大部分的退休基金經理人都應該採取被動式 (指數型) 的投資策略".
  4. 理財顧問會建議你購買主動型基金, 因為他們可以從中得到較多的佣金, 如果你購買被動式基金, 他們幾乎無利可圖. 但是理專會想盡辦法讓你相信他們有能力可以找到打敗股市指數的基金, 因為他們的生計全仰賴於你是否相信. 
  5. 從數學上來看, 整體股市指數型基金不可能打敗市場的平均報酬率. 
  6. 如果主動式基金不需要管理成本, 而且理專願意為你免費工作, 那麼就有可能打敗指數.
  7. 長達 15 年比較股票基金與標準普爾 500 指數表現的研究顯示, 96% 的主動型基金的表現不如股市大盤指數. 而長達 20 年的主動式基金資料則顯示, 基金的陣亡率是 17%, 績效不佳的基金往往只能與其他基金合併或退場 (清算).
  8. 當考慮了管理費用, 存活偏差與稅金時, 主動型基金的績效一定比指數型基金遜色很多. 主動式基金會主動吃掉你的錢, 因為投資人除了可能看到的管理費用與銷售佣金外, 其他費用如手續費, 交易費, 行銷費與稅賦等隱含成本都會被隱藏起來, 而且不管基金有沒有賺錢, 管理費都是一定要花的成本.
  9. 按照績效排名買基金必敗, 主動型基金在經歷一段時間的優異表現後, 通常績效會回歸到平均值或以下, 亦即, 若購買那些績效優異的基金, 最後可能為你帶來損失. 投資人的愚蠢行為之一是根據過去績效來選擇基金. 
  10. 吃掉主動型基金獲利的重要因素是持股的周轉率, 交易頻率越高, 其賦稅效率就越差, 稅前績效亮麗, 但稅後獲利卻比被動式的指數基金少. 對投資人而言, 唯一需要重視的數字是稅後淨利.
  11. 主動式基金高達 3% 的手續費會吃光你的獲利.
Lesson 4 : 等待下一回的股市暴跌, 開心
  1. 大多數的投資人會陷入與自己內心搏鬥的情況, 個人的情緒會對最佳投資計畫造成破壞. 投資人對於跌價的恐懼使他們無法再基金低點時買進; 而當基金來到高點時卻興致勃勃拼命買. 在投資上這是一種自我毀滅, 這種荒誕的行為使他們付出高於平均價格的成本去購買基金, 嚴重破壞了理財目標. 投資人其實不用盯著股市起落, 只要定時定額購買同一檔指數型基金, 長期投資報酬率會比主動型基金好.
  2. 一般投資人對股票市場的誤解 (以為市場是可以預測的), 誤以為自己可以正確掌握進出時機(所謂波段操作, 低買高賣), 使得他們必須時時面對自己的心魔. 股票市場具有隨機性 (投機性), 投資人的恐懼與貪婪使股市短期上非常不理性. 有紀律地機械性操作指數型基金才是長期投資人穩賺不賠的致富之道 (定時定額, 或漲時減碼, 跌時加碼). 股市何時進場不重要, 待多久才重要.
  3. 對付隨機不理性的股市, 正確的策略是不要去猜測股市的漲跌, 因為影響股市的因素非常多, 無法理出明確的關聯, 你不太可能猜對一頭情緒失控的拉不拉多犬會跑向何方, 所有漲跌的說法其實都是後見之明. 
  4. 建立一個可靠的分散式投資帳戶, 最簡單的方法是持有股票與債券的指數型基金. 債券獲利較慢, 但比較穩定可靠. 一個可靠的的投資組合是將部分資金放在股市, 部分放在債市, 隨年齡增長, 債券的比例要增加.  
  5. 一個簡單的股債配置原則是, 債券比例等於年齡, 例如五十歲的人, 股債約略各佔 50%. 當股市狂跌時, 債券比例會被拉高, 這時應該賣掉部分債券指數型基金, 轉進股票指數型基金, 以維持原先的股債配置比例. 反之, 當股市屢創新高時, 比例就會失衡, 這時應該賣掉股市基金, 轉進債券基金.
  6. 投資人應該關心的是企業獲利的變化, 而不是下周的行情. 當企業獲利與股價表現脫節時, 正是他們致富的時機. 投資人會在百貨公司結束營業大拍賣時搶購, 但股市崩盤時卻不敢進場瘋狂搶撈好貨色, 因為擔心還會跌更深, 此乃對股市運作不了解, 以至於無法堅持正確的投資策略之故.  
  7. 股市好比是雜貨店, 當它大降價時, 便是搶購保久產品 (例如罐裝豆子) 的好時機. 如果認為下周可能會更便宜, 你可能就錯失機會, 若下周價格續降, 那就多買幾罐. 對薪水族而言, 股市下殺是一場難得的盛宴. 巴菲特在回答富比世專訪時說, 當他面對股市大幅下跌時, 會覺得自己像是在後宮裡過度縱慾的傢伙.
  8. 如果用股票指數型基金與債券指數型基金建立一個可靠的投資組合, 就可以在保有穩定的投資獲利的同時, 又能好好地利用股票市場非理性行為所帶來的好處. 
Lesson 5 : 股市崩盤照樣賺 : 懶骨頭投資組合
  1. 只買股票指數型基金會使資產受到股市大盤波動的影響, 應該搭配債券指數型基金組成一個均衡的投資組合來避險. 
  2. 短期債券 (1~3 年公債或績優公司債) 是比較安全的資金停泊之處, 因為長期債券的利息可能被通膨所侵蝕.  
  3. 當通膨率或市場利率上升時, 債券價格會下跌, 因為債券利息扣掉上升的通膨後, 報酬率變少, 因此接手債券的意願會降低, 想賣掉手上債券的人只好壓低價格. 而銀行升息也會吸引資金轉定存, 同樣會使債券價格下降. 人們都想利用債券價格波動來賺錢, 這催生了債券交易市場的出現. 
  4. 在你的投資帳戶中, 應該要有一檔短期債券指數型基金, 一檔本國股市指數型基金, 以及一檔國際股市指數型基金, 此種配置模式在統計上可以為你創造最高的成功投資機率. 而股債的配置比率原則, 債券比例應該等於你的年齡, 例如五十歲時, 債券部分應佔全部投資的 50%. 如果可承受較大風險, 想再積極理財, 可以將年齡減掉 20, 即 30%. 
  5. 五十歲投資者的指數型基金股債平衡操作方式是維持股債各半配置, 然後定期 (例如每個月撥款時) 檢視資產是否維持平衡, 當兩種資產超過預定報酬率時 (例如 20%), 就賣出該資產投入另外一個資產, 以維持兩者 50:50 比例, 此方式能夠機械式地利用股票與債券兩種市場天然的翹翹板特性來創造最高而穩定的獲利. 每月持續投入的資金要買進表現落後的標的以重新取得平衡. 
  6. 如果你的投資組合中, 股市指數型基金包括本國與國際基金, 則其配置比例也可以參考股債配置原則, 即國內國際各半, 然後每個月撥款時檢視是否需要平衡, 賣掉表現好的基金, 投入表現較差的指數基金 (賣掉贏家, 買進輸家), 只要將投資組合調回原本的配置比例即可.  
  7. 投資國外市場應選擇整體鶻際股市指數, 避免風險高的單一國家股市指數.
  8. 主動式平衡基金也是採取股債平衡, 為何在金融海嘯時仍然慘跌? 唯一的解釋是基金經理人因為害怕而在股市下跌時把股票賣掉了, 失去了平衡機制所致. 
  9. 沒有採取股債平衡配置的缺點是, 當股市下跌時會因為手中沒有債券可賣, 完全無法趁機買便宜股票. 五十歲以上的中年投資人特別需要債券指數基金來保護資產的穩定成長. 
  10. 建立一個有紀律的投資計劃, 並定期調整以取得投資平衡, 便可以避免對市場作為位的猜測, 去除因情緒而產生的干擾. 
Lesson 6 : 在你居住的國家做指數化投資
  1. 永遠要記住 : 金融服務業的目標是為他們賺錢, 而不是為你.
  2. 只要學會如何建立指數化投資帳戶, 你花在投資決策與交易上的時間就會減少, 每年只需要花一小時在投資上, 你將有 90% 的機率能夠打敗投資專家.
Lesson 7 : 揭開理財顧問的把戲
  1. 要讓自己在股市有最好的機會, 關鍵是低成本的指數型基金. 主動型基金經理人無法在股市滅頂前即時浮出水面. 他們無法算準市場變化的時點, 而且研究顯示, 過去表現良好的基金少能夠維持高績效. 
  2. 你只要晚上花一些時間讀書, 不需要太久, 你就能比大部分的理財專員更了解個人理財.
  3. 任何想要從事投資的人都應該閱讀下列兩本經典著作 :
    (1) 普林斯頓大學教授墨基爾的 "漫步華爾街"
    (2) 先鋒集團創辦人伯格的 "共同基金必勝法則"
    當你讀完這兩本書後, 你的理財知識將比 99% 的證券經紀人與大多數的理專還要豐富.
  4. 組合基金 (fund of fund) 並不直接投資與持有股票, 而是持有一系列基金, 其費用比一般基金較高.
  5. 大部分的退休基金都買指數, 而且採取 60% 股票與 40% 債券的配置方式.
  6. 堅持投資指數型基金或許很無聊, 但這是能讓你避免被險惡的股市吞噬, 餅有最好的機會透過股票與債券致富.
  7. 遠離主動型基金, 不要妄想打敗市場, 請將錢放在指數型基金上. 
  8. 理財顧問會千方百計用各種說詞來誘惑你買他們推銷的主動式基金, 他們會把指數型基金形容為 "賤民", 其實投資產業是個大騙局, 是個龐大的財富掠奪機器, 透過高費率來奪取你荷包裡的金錢, 而你可能直到一切都太遲了才會發現真相.
Lesson 8 : 高投資報酬率背後的真相
  1. 學會打敗絕大多數的專業投資人並不難, 只要投資指數型基金就對了.
  2. 抗拒 "容易賺錢" 的誘惑很重要, 投資人最糟糕的是妄想以新的理財策略來獲致成功, 這會讓你的辛苦錢輕易被騙走. 超高利率就是一種警訊.
  3. 在生命中的某些時刻,有些人可能會對你做出一些極為有利可圖的承諾, 別理他們, 這只會讓你頭疼, 還可能把你的資產捅出個大黑洞. 錢被騙走只能怪自己.
  4. 垃圾債券 : 那些財務狀況不佳的公司所發行的債券 (通常利息很高, 違約率也高).
  5. 從歷史資料來看, 新興經濟體的投資報酬率不一定能勝過經濟成長趨緩地區的股市表現. 伯恩斯坦在 "投資人宣言" 一書中指出, 1988~2008 這 20 年統計顯示, GDP 成長達一定水準的新興國家, 其股市投資報酬率比成長趨緩的 (已開發) 經濟體還低. 不要落入 GDP 成長率的陷阱. 新興市場也許很刺激, 其躍升速度有如火箭發射, 但也可能如隕石般墜落 (這兩年的中國股市?). 不要在新興市場投入大把金錢.
  6. 黃金絕對是短線, 只能賺差價, 加計通膨因素後, 長期不會有獲利, 黃金不算投資, 而是投機. 黃金的價值在於讓持有者在戰亂時用來換取麵包.  
  7. 避險基金 (Hedge fund) : 又稱為對沖基金, 是利用金融期貨, 期權等衍生性金融商品或工具以及財務槓桿來規避風險增加收益的基金. 避險基金的風險很高, 而且缺點比優點多, 投資指數型基金才是較好的選擇.
  8. 1996~2004 期間統計顯示, 只有不到 25% 的避險基金存活, 陣亡率高達 75% 以上, 避險基金其實風險相當高, 因為交易頻繁導致效益很差, 其績效僅比大盤指數高出 1~2% 而已. 
  9. 伏爾泰 : "最好" 往往成為 "好" 的敵人, 目標太高反而容易失敗.
Lesson 9 : 如果你真的很想買股票
  1. 如果無法克制自己買個股, 那麼請將投資組合中 10% 的資金獨立出來, 其餘 90% 還是放在分散式的指數型基金.
  2. 大部分的千萬富翁並不交易股票, 他們會長期持有手中的股票. 交易越頻繁, 再扣除稅金與費用後, 獲利就變少了. 
  3. 不要管那些快速變換, 報導下個熱門產業或交易手法的投資資訊. 巴菲特長期以來在股市獲利的方法是 : 找到股價合理的好企業, 或是更理想地, 找到股價偏低的好企業. 
  4. 要買個股的人應該精通兩件事 :
    (1) 必須知道股價何時下跌, 股價跌是件好事.
    (2) 必須學會如何判斷企業好壞
    對於長期投資人而言, 股市上漲反而令人痛苦, 如果想要買股並進行至少為期物年以上的投資, 你應該比較希望看到停滯甚至下跌的股市.
  5. 連笨蛋都能經營的企業就是好企業. 彼得林區曾說, 投資人應該購買連笨蛋都能經營的企業, 因為總有一天, 有個笨蛋將會掌管這個企業. 
  6. 照理說科技股應該比傳產股便宜, 因為科技股的可預測性比較低, 但實際上卻剛好相反.
  7. 當投資人用分配到的股利再投資時, 買傳產股的報酬率會比科技股好很多. 
  8. 免盯盤的好企業 :
    (1) 具有長期競爭優勢, 股價處在相對低點
    (2) 經營相對簡單, 產品售價會隨通膨提高
    (3) 低負債水準 (看盈餘負債比, 而非資本負債比)
    (4) 總資本報酬率高的企業效率高 (>15%)
    (5) 經營者持股 10% 以上
關於指數化投資, 可以參看提倡指數化投資不虞餘力的綠角先生的這幾篇文章 :

# 寶來台灣加權股價指數基金與寶來台灣卓越50ETF的比較
# 寶來台灣加權股價指數基金與寶來台灣卓越50ETF的比較 : 續1
# 寶來台灣加權股價指數基金與寶來台灣卓越50ETF的比較 : 續2
# 寶來台灣加權股價指數基金與寶來台灣卓越50ETF的比較 : 續3

這篇也不錯 :

# 買指數型基金就對了



2016年3月31日 星期四

Raspberry Pi 1B/1B+/2B/3B 市調與評估

這幾天想要再買一塊樹苺派板子作為自走車的主控板, 上網發現目前樹苺派已推出新款的 Pi 3B, 硬體規格大躍進, 但價格卻維持美金 35 元 (以 32 元匯率算, 約 1120 元), 台灣樹苺派官網目前賣 1600 元 :

#  台灣樹莓派 : Raspberry Pi 3 Model B (現貨) $1600

但在露天最便宜 $1385 可以買到 :

# 樹莓派Pi3 B款 Raspberry Pi3 ModelB (英國製) $1385
# 【莓亞科技】樹莓派Raspberry Pi 3 B(含稅現貨NT$1388)
# (微控制器科技) <現貨> 英國製 Raspberry Pi 3 B (送初學者電子書) $1395
# 微控制器科技 英國原裝 Raspberry Pi 3 B 樹莓派 (含高透明外殼 高階USB線 散熱片) $1550

樹苺派 3 最大賣點是 CPU 升級為 64 位元 ARMv8 架構, 以及內建 WiFi 與藍芽無線網路, 這樣就不需要再買一顆無線網卡 (約 200~400 元) 與藍芽收發器了 (約 100~200 元). 如果把這兩項成本 (300~600) 加進去, 其實就比買前一代的 Pi 2 要划算了 (目前價位約 1100~1200) :

# 清庫存 特價中 樹莓派 2 RS 英國原裝進口 Raspberry Pi 2 B (送散熱片 x2 初學者電子書 ) $1100

樹莓派自 2012 年面世後的規格差異如下, 參考 :

# WiKi : 樹莓派
# WiKi : Raspberry Pi 

Pi 1B 主要規格 : (1B 於 2012-02-29 發布)
  1. CPU : Broadcomm BCM2835 (700MHz)
  2. DRAM : 512MB
  3. USB*2
  4. SD 擴充卡槽
  5. HDMI 1.3/1.4, RCA
Pi 1B+ 與 1B 的主要差異 : (B+ 於 2014-07-14 發布)
  1. 記憶卡槽從 SD 改為 Micro SD
  2. USB 槽從 2 組增加為 4 組
  3. GPIO 腳數從 26 增加為 40 腳 (前 26 Pin 相容)
  4. RCA 與耳機孔整合為一個複合式插孔
  5. 電源模組從線性改為交換式, 省電 20% 以上 (減少 0.5W~1W)
  6. USB 可熱插拔, 不會再重開機
Pi 2B 與 B+ 主要差異 : (2B 於 2015-02 發布)
  1. CPU 改為 900MHz 四核 Broadcomm BCM2836 (ARMv7 32 bits)
  2. DRAM 由 512M 增加為 1G
  3. 可執行 Windows 10 與 Ubuntu
Pi 3B 與 2B 主要差異 : (3B 於 2016-02 發布)
  1. CPU 改為 1.2GHz 四核 Broadcomm BCM2837 (ARMv8 64 bits)
  2. 增加 802.11n 無線網路
  3. 增加低功率 BLE 藍芽 4.1
從規格來看, Pi 2B 與 3B 時脈高, 功耗當然也比較高, 參考這兩篇 :

# Raspberry Pi 3 vs Pi 2 power consumption and heat dissipation
# How Much Less Power does the Raspberry Pi B+ use than the old model B?

Source : StackExchange

可見, Type B 系列中最省電的是 1B+, 無載時功耗差不多, 但有載時比 Pi 2B 省電 17%, 比 Pi 3B 省電 47% (省快一半了)! 畢竟 Pi 3B 除了時脈高, 又內建藍芽與 WiFi, 當然比較吃電. 如果用來作為電視機上盒播放影片, 當然要用最新的 Pi 3 啦! 但若不太要求效能 (例如控制機器人或自走車等), 其實 B+ 就很夠用了, 參考 :

# Raspberry Pi新板子Model B+概略介紹與開箱

我找到下面這個 900 元的 B+ :

# 鎰盛(庫存店-Raspberry Pi Model B+ (英國原裝 樹莓派)1pcs + case X1pcs"免運費 $900

因為手上還有兩顆之前多買的 USB 網卡可以給這塊 B+ 用, 但如果要放在鄉下當 Home Security Gateway 主機, 就會考慮買內建 WiFi 的 Pi 3B 了.

2016-04-07 補充 :

其實若只是做智慧小車控制板, A+ 也許更適合, 雖然記憶體只有一半 ( 256MB), 應該還是綽綽有餘啦! 由上圖可知 A+ 的耗電量只有 B+ 的一半 (有載時比 Zero 還低哩!), 而大小只有 B+ 的 3/4 而已, 唯一的不方便是只有一個 USB 埠, 若要接 WiFi 網卡與無線小鍵盤滑鼠組就必須使用 USB 集線器. 參考 :

# Raspberry Pi推出新版本Model A+,新低價約台幣600元

下面這篇文章中的影片有展示用 A+ 製作的智慧小車 :

# Raspberry Pi A+ System Specs

目前露天找到最便宜的是 $780 元一塊 :

# [原廠] Raspberry Pi A+ / 另有 B+ / 樹莓派 / 歡迎散戶經銷商 / 經銷價請私訊 $780 (宅配/快遞 0元)

A+ 只有一個 USB 是比較麻煩的問題, 因為要灌 Rasbian 與做系統設定等需要滑鼠鍵盤組, 若要設定 wifi 網卡就至少需要兩個 USB. 下面這篇文章提出一個方法, 如果已經有 B/B+/2B/3B 等多 USB 槽電路板者, 可以先在 B 中灌好 Rasbian 與設定好網卡, 再移到 A+ 中使用 :

# How to connect to your Raspberry Pi Model A / A+ (A Plus) - headless configuration

另外下面這篇則認為 A+ 的 US$20 的價格很適合做專案實驗 :

# Tinkering with the Raspberry Pi A+

此文中提到 Google 為小朋友及初學者設計的 Coder 專案, 很有創意.

其他參考 :

# 台灣 IOT 樹莓派 2 英國歐諾時 RS 原裝進口 Raspberry Pi 2 B A7四核1G記憶體,支持Win10


2016年3月30日 星期三

九美元的單板電腦 C.H.I.P.

今天在露天看到 Orange Pi 這款與 Raspberry Pi 功能類似的單板微電腦, 價格大約是樹苺派的一半多一點而已, 這是中國一家廠商推出的產品, 價格上非常有競爭力 :

# Orange Pi PC香橙派 (raspberry pi 3 banana pi 網路電視盒 可參考) $790
# orange pi pc 四核心 a7 超越 raspberry pi 3 樹莓派 banana pi $790

其官網為 :

# http://www.orangepi.org/index.html

此板比最新的 Raspberry Pi 3 勝出的地方是 :
  1. 內建紅外線接收
  2. 具有 USB OTG 接口
  3. 具有電源開關
  4. 具有 Debug UART 
但是我覺得這些優點都不是甚麼大不了的優勢, 最主要還是價格吸引人.

更吸引人的是下面這個在募資網站上打響名號的 C.H.I.P. 專案, 其特點是內建 wifi 與藍芽, 而且預售價格只要 9 美元, 預定 2016 年 7 月出貨 (上回好像是說 6 月喔).



此板使用成本較低的全志 1GHz CPU, 512M DRAM, 4G 內建記憶體 (似乎跟 Raspberry Pi Type B 差不多), 但不支援擴充卡. 目前可在官網預購, 每人最多可訂 5 片, 運送至台灣最低運費 $6.22 美元 (2 片以內), 最多 $11 美元 (買 5 片). 





我計算了一下, 單買一片最不划算, 含運費要 502 元; 買兩片運費跟買單片相同, 但平均只要 400 元不到; 買 3 片以上平均每片價格就差異不大了. 

1片: $9+$6.22=$15.22*33=502 元/片
2片: $18+$6.22=$24.22*33=799/2=399 元/片
3片: $27+$7.15=$34.15*33=1127/3=375 元/片
4片: $36+$9=$45*33=1485/4=371 元/片
5片: $45+$11=$56*33=1848/3=369 元/片


參考 :

# http://getchip.com/pages/chip
# 比 Raspberry Pi 還便宜:這片小晶片 CHIP 讓你擁有美金 $9 的個人電腦
# Raspberry Pi競爭對手CHIP電腦即將問世,只要9美元!
# 9美元的C.H.I.P.真能與Raspberry Pi比拼?
# 9美元電腦?! CHIP還要更CHEAP!
# 甚麼?9 美元就能買到一台電腦

樹莓派的 Wifi 設定 : 使用迅捷 FW150US

最近跟市圖預約的 "Raspberry Pi 最佳入門與實戰應用" (碁峰, 柯博文) 到館, 拿回來之後翻閱覺得這本確實是實戰之書, 裡面每個課題都是很實用的範例, 而且書附光碟有教學影片, 非常適合有心者自學.

Source : 博客來

這又燃起我心中的 maker 烈火. 找出塵封已久的 Raspberry Pi Type B 主板, 將 SD 卡中當初賣家幫我灌的 NOOBS 格式化掉, 然後去官網下載最新版的 NOOBS v1.9.0 (Kernel 4.1.19 #850, 2016-03-18), 將 ZIP 檔解開後直接在 PC 中複製進去 SD 卡即可, 不用像以前那樣需用 Win32 Disk Imager 去燒錄. 參考 :

# 樹苺派的 SD 卡與作業系統安裝

作業系統裝入 SD 卡後放進樹莓派裡, 開機即會自動進行安裝. 無線上網部分我按照這本書的 3-3 節說明, 先關電源插入以前那顆可用的 Edimax N8508 無線網卡再重開機, 結果竟然一直都只顯示 IPv6 位址, 沒顯示 IPv4 位址. 第二天早上想要繼續時發現網卡非常燙, 於是關機拔出, 發現溫度高到會燙人! 我想這顆應該毀了. 只好拿出迅捷 FW150US 這顆 CP 值頗高的中國製網卡來用, 但是這顆樹莓派沒支援, 必須自己安裝驅動程式, 參考葉難這篇 :

# Raspberry Pi:USB無線網卡迅捷FW150US

但是文中所說的驅動程式已無法下載, 我又找到下面這篇 :

# Raspberry Pi無線網卡設定(rtl8188eu)

但是同樣不能用, 因為新版的 NOOBS 的 Kernel 是 4.1.19 版. 後來終於在下面這篇找到明確的解決辦法 :

# Raspberry Pi – Driver for RTL8179/8188EU

此文中與 Linux 4.1.19 版相應的 8188eu 驅動程式是 20160305 發布的這一版, 只要以下面這五個指令即可順利安裝驅動程式 :

wget https://dl.dropboxusercontent.com/u/80256631/8188eu-20160305.tar.gz

tar -zxvf 8188eu-20160305.tar.gz

sudo install -p -m 644 8188eu.ko /lib/modules/$(uname -r)/kernel/drivers/net/wireless

sudo insmod /lib/modules/$(uname -r)/kernel/drivers/net/wireless/8188eu.ko

sudo depmod -a

https://dl.dropboxusercontent.com/u/80256631/8188eu-20160305.tar.gz


wget https://www.dropbox.com/s/vs6f0w7fkkjhu2s/8188eu-20160305.tar.gz?dl=0

我先用乙太網上網, 依序執行上面五個指令來下載並安裝驅動, 執行紀錄如下 :

login as: pi
pi@192.168.2.104's password:   (預設是 raspberry)

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Tue Mar 29 19:25:40 2016
pi@raspberrypi:~ $ ifconfig       (只看到乙太網卡的 192.168.2.104)
eth0      Link encap:Ethernet  HWaddr b8:27:eb:97:b6:52
          inet addr:192.168.2.104  Bcast:192.168.2.255  Mask:255.255.255.0
          inet6 addr: fe80::873a:49c1:5be0:24db/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:77 errors:0 dropped:0 overruns:0 frame:0
          TX packets:95 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:7749 (7.5 KiB)  TX bytes:15196 (14.8 KiB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:200 errors:0 dropped:0 overruns:0 frame:0
          TX packets:200 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:16656 (16.2 KiB)  TX bytes:16656 (16.2 KiB)

pi@raspberrypi:~ $ lsusb     (查看 USB 裝置 : 還讀不到網卡)
Bus 001 Device 004: ID 0c45:7403 Microdia Foot Switch
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast                                                                              Ethernet Adapter
Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp. LAN9500 Ethernet 10                                                                             /100 Adapter / SMSC9512/9514 Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
pi@raspberrypi:~ $ uname -a   (顯示 Linux 版本)
Linux raspberrypi 4.1.19+ #858 Tue Mar 15 15:52:03 GMT 2016 armv6l GNU/Linux
pi@raspberrypi:~ $ wget https://dl.dropboxusercontent.com/u/80256631/8188eu-20160305.tar.gz           (下載驅動程式)                                                       --2016-03-29 19:44:43--  https://dl.dropboxusercontent.com/u/80256631/8188eu-20160305.tar.gz
Resolving dl.dropboxusercontent.com (dl.dropboxusercontent.com)... 108.160.172.5
Connecting to dl.dropboxusercontent.com (dl.dropboxusercontent.com)|108.160.172.5|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 411563 (402K) [application/octet-stream]
Saving to: ‘8188eu-20160305.tar.gz’

8188eu-20160305.tar.gz                  100%[==============================================================================>] 401.92K   538KB/s   in 0.7s

2016-03-29 19:44:56 (538 KB/s) - ‘8188eu-20160305.tar.gz’ saved [411563/411563]

pi@raspberrypi:~ $ tar -zxvf 8188eu-20160305.tar.gz  (解壓縮)
8188eu.ko
8188eu.conf
install.sh
pi@raspberrypi:~ $ sudo install -p -m 644 8188eu.ko /lib/modules/$(uname -r)/kernel/drivers/net/wireless   (安裝驅動程式)
pi@raspberrypi:~ $ sudo insmod /lib/modules/$(uname -r)/kernel/drivers/net/wireless/8188eu.ko    (安裝驅動程式)
pi@raspberrypi:~ $ sudo depmod -a
pi@raspberrypi:~ $

哈哈! 沒有錯誤訊息, 這樣驅動程式就安裝成功了! 接下來必須修改網路介面設定檔 /etc/network/interfaces, 加入無線分享器的登入資訊, 用 nano 編輯此檔 :

pi@raspberrypi:~ $ sudo nano /etc/network/interfaces

編輯內容如下, 重點是 SSID 與連線密碼 :

auto lo
iface lo inet loopback

iface eth0 inet manual

allow-hotplug wlan0
auto wlan0

iface wlan0 inet dhcp
wpa-ssid "無線分享器 SSID"
wpa-psk "無線分享器連線密碼"

編好後先按 Ctrl+W 儲存檔案, 按 Enter 後再按 Ctrl+O 跳出 nano 編輯器, 再下 sudo poweroff 關機後重開機登入系統 :

login as: pi
pi@192.168.2.104's password:

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Tue Mar 29 19:48:33 2016
pi@raspberrypi:~ $ lsusb    (顯示 USB 裝置)
Bus 001 Device 005: ID 0bda:8179 Realtek Semiconductor Corp.   (有讀到無線網卡了)
Bus 001 Device 004: ID 0c45:7403 Microdia Foot Switch
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast                                                                              Ethernet Adapter
Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp. LAN9500 Ethernet 10                                                                             /100 Adapter / SMSC9512/9514 Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
pi@raspberrypi:~ $ ifconfig
eth0      Link encap:Ethernet  HWaddr b8:27:eb:97:b6:52
          inet addr:192.168.2.104  Bcast:192.168.2.255  Mask:255.255.255.0
          inet6 addr: fe80::873a:49c1:5be0:24db/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:117 errors:0 dropped:0 overruns:0 frame:0
          TX packets:123 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:11528 (11.2 KiB)  TX bytes:19569 (19.1 KiB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

wlan0     Link encap:Ethernet  HWaddr 08:57:00:16:88:0c
          inet addr:192.168.2.105  Bcast:192.168.2.255  Mask:255.255.255.0
          inet6 addr: fe80::a57:ff:fe16:880c/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:117 errors:0 dropped:57 overruns:0 frame:0
          TX packets:104 errors:0 dropped:1 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:23031 (22.4 KiB)  TX bytes:17043 (16.6 KiB)

pi@raspberrypi:~ $

可見有讀到無線網卡了, 其 IP 是 912.168.2.105, 在同網域另外一台電腦 ping 這個無線網卡所獲得的 IP 有回應了 :

C:\Users\petertw89>ping 192.168.2.105

Ping 192.168.2.105 (使用 32 位元組的資料):
回覆自 192.168.2.105: 位元組=32 時間=49ms TTL=64
回覆自 192.168.2.105: 位元組=32 時間=1ms TTL=64
回覆自 192.168.2.105: 位元組=32 時間=1ms TTL=64
回覆自 192.168.2.105: 位元組=32 時間=1ms TTL=64

192.168.2.105 的 Ping 統計資料:
    封包: 已傳送 = 4,已收到 = 4, 已遺失 = 0 (0% 遺失),
大約的來回時間 (毫秒):
    最小值 = 1ms,最大值 = 49ms,平均 = 13ms

如果於同網域 PC 再開啟一個 putty 視窗, 連線此無線網卡的 IP, 同樣可以連線 :

login as: pi
pi@192.168.2.105's password:

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Tue Mar 29 19:50:57 2016 from 192.168.2.110
pi@raspberrypi:~ $

使用 sudo iwlist wlan0 scan 指令可以掃描附近有哪些無線基地台 :

pi@raspberrypi:~ $ sudo iwlist wlan0 scan
wlan0     Scan completed :
          Cell 01 - Address: 80:1F:02:2D:5A:XX
                    ESSID:"EDIMAX-tony"
                    Protocol:IEEE 802.11bgn
                    Mode:Master
                    Frequency:2.462 GHz (Channel 11)
                    Encryption key:on
                    Bit Rates:108 Mb/s
                    Extra:wpa_ie=dd160050f20101000050f20201000050f20201000050f202
                    IE: WPA Version 1
                        Group Cipher : TKIP
                        Pairwise Ciphers (1) : TKIP
                        Authentication Suites (1) : PSK
                    Extra:rsn_ie=30180100000fac020200000fac02000fac040100000fac020000
                    IE: IEEE 802.11i/WPA2 Version 1
                        Group Cipher : TKIP
                        Pairwise Ciphers (2) : TKIP CCMP
                        Authentication Suites (1) : PSK
                    IE: Unknown: DD7F0050F204104A0001101044000101103B0001031047001063041253101920061228801F022D5A9E102100001023000752544C387878781024000D45562D323030392D30322D30361042000F3132333435363738393031323334371054000800060050F20400011011000F576972656C65737320526F75746572100800020086
                    Quality=2/100  Signal level=34/100
          Cell 02 - Address: E8:DE:27:60:1A:XX
                    ESSID:"TP-LINK_601A04"
                    Protocol:IEEE 802.11bgn
                    Mode:Master
                    Frequency:2.412 GHz (Channel 1)
                    Encryption key:on
                    Bit Rates:300 Mb/s
                    Extra:wpa_ie=dd160050f20101000050f20401000050f20401000050f202
                    IE: WPA Version 1
                        Group Cipher : CCMP
                        Pairwise Ciphers (1) : CCMP
                        Authentication Suites (1) : PSK
                    Extra:rsn_ie=30140100000fac040100000fac040100000fac020000
                    IE: IEEE 802.11i/WPA2 Version 1
                        Group Cipher : CCMP
                        Pairwise Ciphers (1) : CCMP
                        Authentication Suites (1) : PSK
                    IE: Unknown: DDA50050F204104A0001101044000102103B00010310470010000102030405060708090A0B0C0D0E0F1021000754502D4C494E4B10230014544C2D57523934304E2F544C2D57523934314E4410240003352E3010420003312E301054000800060050F20400011011001A576972656C65737320526F7574657220544C2D57523934314E44100800020086103C000101104900140024E26002000101600000020001600100020001
                    Quality:0  Signal level:0  Noise level:0
          Cell 03 - Address: 74:DA:38:15:16:XX
                    ESSID:"edimax.setup"
                    Protocol:IEEE 802.11bg
                    Mode:Master
                    Frequency:2.457 GHz (Channel 10)
                    Encryption key:on
                    Bit Rates:54 Mb/s
                    Extra:wpa_ie=dd160050f20101000050f20201000050f20201000050f202
                    IE: WPA Version 1
                        Group Cipher : TKIP
                        Pairwise Ciphers (1) : TKIP
                        Authentication Suites (1) : PSK
                    Quality:0  Signal level:0  Noise level:0
          Cell 04 - Address: 9C:D6:43:65:28:XX
                    ESSID:"CHT Wi-Fi(HiNet)"
                    Protocol:IEEE 802.11bgn
                    Mode:Master
                    Frequency:2.457 GHz (Channel 10)
                    Encryption key:off
                    Bit Rates:144 Mb/s
                    Quality:0  Signal level:0  Noise level:0


這樣就完成迅捷 FW150US 網卡驅動程式安裝, 可以拔掉乙太網線了.

參考 :

# [基礎] 命令列設置無線網路
# Raspberry Pi 的基礎 - 使用 Wi-Fi 無線網卡連上網路 
# Problem wpa_supplicant rapsberry pi 2
# 使用no-ip申請域名讓浮動IP也能架設網站
# 1.4 有線 或 無線 的DHCP 設定或固定IP設定 (學習樹苺派)
# 在 Windows 設置 Raspberry Pi (樹莓派) 遠端編輯環境
# 使用no-ip申請域名讓浮動IP也能架設網站
# 如何在無線路由器上設定 DDNS(DynDNS)
# 社區網路 DDNS 無解問題
# NOIP申請完,架設FTP


2016年3月29日 星期二

2016 年第 13 周記事

時序已過春分, 來到三月底白天也變長些了, 週六 3/19 回鄉下時走里港支線比較快, 17:17 出發回到家剛好六點天還很亮. 計算里程從高雄家到鄉下家僅 40 公里, 時間僅花了 43 分鐘, 只是里港沿荖濃溪河堤有一段路是混泥土路, 震動彈跳較大. 3/20 回高雄時走市區上國十, 里程為 48 公里, 多了 8 公里卻花了快 1 小時.

週日下午拿鐮刀將後院的過貓全數砍除, 一株不剩, 連根也刨掉, 驚覺原來蕨類的根在土下盤根錯結, 土下兩公分幾乎全被佔據, 難怪魚腥草等藥草被驅逐殆盡. 這些過貓盤據此處久矣, 最早應該是媽為了摘取嫩芽當菜而移植, 結果越長越密, 變成藏蚊子之處, 每到傍晚總是轟轟響. 剪除之後清爽多了. 枯葉讓太陽曬個一周後再燒掉, 順便烤地瓜. 

週日傍晚拿 4/9 日媽添罐所需準備之物品清單去給有能伯, 委其幫我準備五牲, 發粄, 紅龜粄, 新丁粄這四項. 家祠修繕工程也在周六下午起工, 需施作大理石桌面與引道等. 順道去農業資材行買 250 公升儲水桶, 打算在雨季來臨前完成雨水回收與自動澆水系統, 免得爸要提水灌溉大門的七里香與花草. 想說貨比三家不吃虧, 先去小漢五金看, 結果同樣產品資材行賣 980, 五金行竟然賣 1300! 實在賺太多了吧! 當下即轉往資材行先買一個, 我打算放在三樓頂, 將鐵皮屋集水槽原本的排水管導入儲水桶內, 這樣水壓夠大, 不需要幫浦來打水. 下周要先丈量所需水管長度, 再去買 3 分的 PVC 管, 小漢一支四公尺賣 32 元, 估計需要 40 公尺. 

週六下午去母校圖書館將校友證交給館員建檔, 之後才能借書. 畢業三十年後首次走進母校圖書館, 記得入學時舊圖書館是約三層樓高的環形建築. 後來才改建為十幾層的大樓. 架上新舊書並陳, 甚至我們當年的老書都還在哩! 下樓來陽光仍很炙烈, 校門口的校訓碑在藍天下顯得非常亮麗呢!



2016年3月25日 星期五

Appfog 主機升版為 v2 後 twstockbot 改版問題

前陣子 Appfog 通知要升版為 v2, 我以為它要藉此把早期加入的免費會員掃地出門, 所以就趕緊下載程式與資料庫備份, 打算轉移陣地. 昨天連線網站, 出現如下無法連線畫面, 更加肯定真的不能用了 :

# Appfog v1 退場了


所以就著手把相對應的 GAE 應用服務修改為去 trigger 英國 Hostinger 主機. 但回頭想說難道原來的Appfog 登入網頁真的進不去了嗎? 試試居然還可以, 但進去後發現兩個應用程式狀態為 stopped, 我猜它只是在升版時把全部應用程式都關閉, 升版後卻沒自動幫我啟動服務而已, 手動開啟後 cron jobs 就恢復運作了 :

# https://console.appfog.com/


真是太好了! 這樣我就不用另闢蹊徑, 可以繼續使用 Appfog 的穩定服務啦! 從上面的 cron_log 紀錄可知 Appfog 是在 3/22 日凌晨快兩點時關閉了我的應用程式.

不過前陣子我的 EasyuiCMS 架站機有改版, 除了全部改用 mysqli 函式庫 (因為 Hostinger 已不支援 mysql 函式庫), 也修改了訪客列表, 增加顯示訪客來自哪一個國家, 這部分需要在手動調整好資料表後再更新程式. 要修改的部分參考 :

# 從 IP 查來源國家 (二)
# EasyuiCMS 改版為 v2 (mysqli)

依照步驟下載最新的 ip2nation.zip 檔解壓縮後得到 ip2nation.sql, 然後進入 phpmyadmin 後台的 import 上傳此 sql 檔, 結果出現 "No data was received to import" 錯誤 :


仔細看原來是伺服器預設最多只能上傳 2014KB 檔案, 而解壓後的 ip2nation.sql 為 3883KB, 已經超過了. 解決辦法是上傳壓縮檔, 但檔名必須符合其規範, 亦即要以 .sql.zip 結尾. 所以將下載來的 ip2nation.zip 改為 ip2nation.sql.zip (351KB) 再上傳就可以了 :


左方可見已建立 ip2nation 與 ip2nationCountries 資料表了.

接下來是在 phpmyadmin 的建立 nation 這張資料表來達成中文化, 從下列網址下載 nation.sql 檔 :

# 下載國名簡碼與中文國名對照表 nation.sql

其內容如下 :

CREATE TABLE IF NOT EXISTS `nation` (
  `code` varchar(4) COLLATE utf8_unicode_ci NOT NULL,
  `name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`code`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

INSERT INTO `nation` (`code`, `name`) VALUES
('ad', '安道爾'),
('ae', '阿拉伯聯合大公國'),
('af', '阿富汗'),
('ag', '安地卡'),
('ai', '安圭拉島'),
.....

('bl', '聖巴泰勒米'),
('mf', '法屬聖馬丁'),
('sx', '荷屬聖馬丁'),
('ss', '南蘇丹'),
('um', '美國本土外小島嶼');

此檔案僅 7KB 而已, 不須壓縮, 直接 import 即可.

建立了這三張表單就可以更新應用程式了.

開啟 command 視窗, 切換到 twstockbot 目錄, 下這兩個指令就可更新檔案了 :

af login

af update twstockbot

但是上傳應用程式後瀏覽網頁卻顯示系統安裝畫面, 我原以為是 db.php 弄錯了別的主機, 更正之後還是一樣, 後來我試著改回匯入 mysql 函式庫後就都恢復正常, 原來 Appfog 不支援 mysqli! 看來需要維持兩個版本的 EasyuiCMS 了, 如果應用服務部署在 Hostinger 就要用 mysqli 版本.


2016年3月23日 星期三

辦校友證

昨天想到在母校當教授的老同學, 但不知其在何系, 就連上母校網站查詢, 原來老同學是研究資料探勘與機器學習, 嘿, 這我有興趣, 改天來去找他聊聊. 基於同樣對技術的熱愛, 當年剛出社會時, 他在宏碁工作常去當時的公司找我, 但他後來出國念書就沒見過面, 自林口一別至今 20 餘年矣.

回頭看到圖書館網站, 進去逛逛發現還蠻多書哩! 有些是市圖沒有的, 就打個電話去問校友可不可以借, 原來只要辦校友證即可. 經登錄資料上傳大頭照之後, 今天就收到掛號信寄來的校友證, 母校職員辦事效率真高啊! 打電話問了一下館員, 校友可借十本, 借期 15 天, 借書在 21:45 前, 還書在 22:00 前, 僅國定假日休假.

現在我手上已有三個母校的校友證了, 第三母校高師大之前常常去借書, 使用率最高, 磨損得最多. 而第二母校中山大學, 畢業典禮時發的校友證則是因為離家太遠幾乎沒用過. 第一母校離家還算近, 找時間來去看看有哪些寶可挖, 順便看看當年常窩的圖書館變啥樣了.


登昌恆 Nettv3 Dual

兩三年前在公司福利社網站有賣登昌恆的 Nettv3 mobile (第四台轉成網路訊號), 當時定價約 NT$3700, 雖然手上有五千元的福利券可用, 但躊躇再三還是沒買, 因為我每天都在忙著寫程式, 哪有空看第四台.

最近水某對這種產品很有興趣, 因為可在手機看鄉下第四台節目. 於是上露天搜尋, 找到這款二手的 Nettv3 dual, 這是比 mobile 還高一級的產品, 可讓兩人同時遠端連線, 而 mobile 只能一個連線 (人在國外也可以看). 此外, 此款可配合登昌恆另外一款 Nettv3 on TV 連接遠端電視機觀看.

剛好看到有一位買家在詢問價格, 賣家說兩款一起買算 3000, 我看買家遲未答覆, 而且往想要睡覺了, 就直接下標 (據賣家說我動作真快, 原先詢價的買家很錯愕) :

# ☆閃炫電腦☆登昌恆 UPMOST netTV3 Dual 網路電視盒 二人可同時登入觀看不同頻道

上週日 3/19 帶回鄉下安裝, 測試正常可用, 不過需要照使用手冊調整家中寬頻分享器設定才行, 主要是區域網路 DHCP 與防火牆的 DMZ 設定. 鄉下網路是中華 ADSL 5M, 使用信舟 EDIMAX BR-6228nS 無線路由器, 安裝過程如下 :

1. 接線 :

以所附網路線連接 ETHERNET 插槽與無線路由器的 LAN 插槽.
以所附 AV 端子線連接 AV-OUT 插槽與電視機的 AV-IN 插槽.
將第四台同軸電纜插入 ANTENNA-IN 插槽, 再把 連接 ANTENNA-OUT 到電視機的 ANT.

由於我以前有買一個 Splitter (分岐器), 因此我是直接從分岐器接到 ANTENNA-IN, 電視機仍然吃分岐器另外一個輸出.

2. 設定 DHCP 固定 IP :

用電腦連線寬頻分享器管理網頁, 我的 Edimax BR-6228nS 為 192.168.2.2
切到 "區域網路" 頁面, 勾選 "開啟固定 DHCP", 輸入 MAC 位址, 並於 "IP" 欄位輸入 DHCP 較後面位址, 我這裡選定 192.168.2.199, 按 "新增" 後再按 "套用" 鈕. 勾選底下的 "開啟已配置的 IP 使用列表", 此固定 DHCP 位址與所配對的 MAC 位址應該就會出現在列表中了.

固定 DHCP 的原因是每次 Nettv3 開機都可能從 DHCP 獲取不同 IP, 這樣防火牆的 DMZ 也要隨同修改為此 IP, 這樣很麻煩. 固定之後每次重開機時, 路由器就會固定指配此 IP 給 Nettv3 了.
指配最後面的 IP 是因為 DHCP 是從前面往後面指派 IP, 結果不知為啥, 水某手機一打開 Wifi 就會被指配跟 Nettv3 一樣的 IP, 導致衝突而無法連線. 指配最後面的 IP 就可以避免衝突了.


3. 設定防火牆 DMZ :

切換寬頻分享器管理頁面至防火牆, 預設已經開啟 :


切到 DMZ 分頁, 勾選 "啟用 DMZ", "公用 IP 位址" 欄位維持預設之 "動態 IP", 在 "IP 位址" 欄輸入上面所設定的固定 DHCP 位址 192.168.2.199, 按 "新增" 就可在下面 DMZ 列表看到此 IP, 再按 "套用" 即可 :


這樣 Nettv3 dual 就可以讓外面連線進來了.

4. 在電腦上安裝光碟裡的 Nettv-2012, 執行後會出現機上盒列表 :


點選下一步會進入頻道掃描 (但掃到的頻道編號與第四台似乎不同), 參考 :

# 南國頻道節目表

外語台 :
12 : 國家地理
13 : Discovery
16 : 動物頻道

洋片台 :
63 : HBO
64 : 東森洋片
65 : CINEMAX
66 : Holywood
67 : Movies
68 : AXN

戲劇電影台 :
42 : 八大戲劇
43 : 衛視中文台
71 : 東森電影
72 : 緯來電影
76 : 緯來日本台

新聞台 :
50 : 壹新聞
51 : 年代新聞
52 : 東森新聞
53 : 中天新聞
55 : 民視新聞
56 : 三立新聞
57 : TVBS 新聞

財經台 :
59 : 東森財經
60 : 非凡新聞
85 : 非凡商業

老三台與公廣 :
1 : 民視 HD
18 : 台視 HD
20 : 中視 HD
22 : 華視 HD
79 : 公視 HD

直接點機上盒則會進入登入表單 :


連線成功後就可以觀看影片了.

5. 手機安裝 Nettv4 mobile :

到 Google Play 下載最新的 Nettv4 mobile, 安裝後開啟 App 輸入 ID (盒裝光碟底下有寫) 與密碼 (預設 admin), 按 Login 即連線至 Nettv3 dual 了 :


連線成功後就可看節目了, 畫面雖然不是非常清晰, 但還可以接受啦! 在螢幕點一下會彈出選台器, 再按一下就會消失. 格式用預設的 CIF 就可以了 (5M ADSL 只能用這個), 除非家裡用光纖 :


回來高雄後有試著安裝 Nettv3 on TV, 是正常可以使用, 不過因為是大螢幕, 所以感覺畫面品質比不上在手機上好, 因為模糊感被放大了. 但一樣還是可以接受啦!

參考 :

#《開箱文》NetTV3 Dual網路電視盒,出門在外也能用手機/平板看第四台
# UPMOST netTV2網路電視盒安裝教學


2016年3月22日 星期二

好書 : 松本行弘談程式世界的未來

偶然機會在網路上看到這本書的電子版, 搜尋市圖網站發現有收藏此書就借來看看. 其實我只是想知道, 身為 Ruby 創造者的松本行弘如何看待同樣是 Dynamic Scripting 語言的 Lua. 這兩個語言有一個共通點 : Lua 是唯一起源於南美洲的程式語言; 而 Ruby 則是唯一起源於亞洲的語言, 我很好奇一個語言的設計者會怎麼看另外一個語言.
Source : 金石堂

松本行弘在本書的 3-5 節談到 Lua, 重點摘要如下 :
  1. Lua 的特徵是考慮到嵌入應用程式的通用指令稿語言, 與其想法類似的還有 Tcl, 不過 Lua 比 Tcl 更接近於通用語言. Lua 與 Tcl 為此目的都將語言規格都限制在非常小的程度, 例如 Tcl 只有字串這一個資料型別, 而 Lua 則使用一種表格結構來實作其所支持的資料型態. 
  2. Lua 在實作上完全以 ANSI C 撰寫, 實現了極高的可移植性, Lua 的虛擬機器以高速聞名. 
  3. Lua 的數值資料型別全部用浮點數儲存, 沒有整數 (Perl 也是如此). 而使用者資料型別 (User Data) 用在以 C 語言等擴充 Lua 功能時, 例如檔案 I/O 就是利用 User Data 達成.
  4. Lua 的函式是頭等物件 (first class), 即與數值等其他資料型別一樣, 可以存入物件, 當成引數傳遞, 或作為傳回值等. 
  5. Lua 最具特徵的資料型別是表格, 可實現其他語言中的 array(陣列), hash(關聯式陣列), object(物件) 等結構, 是萬能資料型別. PHP 也是 array 與 hash 合而為一, 而 Javascript 雖然也有關聯式陣列, 但與陣列是獨立的資料結構.
    array={1,2,3}     --陣列
    print(array[1])    --輸出 1
    hash={x=1,y=2,z=3}   --關聯式陣列
    array["x"]=1    --array 與 hash 混合 (賦值方法一)
    array.y=2         --array 與 hash 混合 (賦值方法二)
    print(#array)    --輸出 3 (陣列長度運算子 # 不會將 hash 元素算在內)
  6. Lua 表格用法需特別注意的地方有兩點 : 一是表格當陣列使用時, 其索引是從 1 起算的 (以前的 FORTRAN 與 PASCAL 也是), 而 C 語言及其徒子徒孫都從 0 起算, 很容易搞錯. 其次是 # 運算子只能計算表格中以陣列方式儲存之元素, 不包括關聯式陣列元素. 
  7. Lua 原始設計本來並非以物件導向為目標, 它的物件導向是以 metatable (詮釋表格) 方式實現的. Lua 的物件與類別是以表格來實作, 而方法是用函式來實作. 使用 metatable 好像可以看到物件的內臟一樣, 與早期 Perl 的物件導向類似. 
  8. 以嵌入式用途為設計目標的 Lua 核心相當簡潔, 沒有基本資料型別以外的東西, 只有表格操作, 一些數學函數, 載入套件的功能, 以及包含樣式比對功能的字串, 函式庫只有檔案輸出入而已, 比起附帶大量功能的 Ruby 來說, 實在非常貧弱. 不過 Lua 很容易以 C 擴充功能, 內建的功能不過是拿來描述邏輯. 
  9. 同樣是作為嵌入式用途的 Tcl 語言, 由於附屬的 GUI 函式庫 Tk 相當成功, 反而常被拿來當作 GUI 開發語言, 相較之下, Lua 似乎還是比較能不忘初衷, 主要以嵌入其他程式為主. 
  10. Lua 直譯器的資料結構統一歸納在名為 lua_state 的結構裡, 一個 process 可以擁有許多直譯器, 因此要讓遊戲裡的每個角色都擁有個別的直譯器也是可行的. 在 multi-thread 環境下, 各個 thread 也都能擁有直譯器, 可把多核處理器的效能發揮到極限.
  11. Lua 在垃圾收集方面也下了許多功夫, 採用遞增收集演算法 (Incremental GC, 將垃圾收集工作細分, 逐一執行, 將中斷時間限縮在一定值內, 避免影響即時性) 盡量縮短中斷時間. 因為在遊戲這種對即時性要求很高的環境下, 垃圾收集機制會使遊戲中斷, 導致無法操作, 即使只有一秒也會影響玩家的感覺. 
  12. 以前 Cisco 路由器是內嵌 Tcl, 但現在的趨勢卻是 Lua.
  13. 在嵌入式應用上, Ruby 可能比不上 Lua. 雖說要將 Ruby 嵌入其他語言不是不可能 (例如 RPG 製作大師), 但卻不是 Ruby 擅長之事, 特別是 Ruby 沒有統一表現直譯器的結構, 使得一個 process 只能擁有一個直譯器, 無法達到 Lua 那樣可協調多個直譯器, 配置到多個 thread 的功能.  
  14. 隨著嵌入式硬體性能提升, 軟體複雜化, Lua 這類小規模執行環境, 為嵌入其他程式而設計的語言, 今後將有越來越多發揮的機會. 
  15. 這幾年程式語言不斷進化, 其中最劃時代的, 應該是 Chrome 內的 Javascript V8 引擎與 LuaJIT (Lua 的高速實作), 這兩個語言都具備了動態語言方便開發與令人驚異的執行速度, 甚至超越實作得較差的編譯式語言. 
松本行弘看來還蠻公道地評論了自家的 Ruby 與活躍在嵌入式世界的 Lua, 雖然口裡還是說對 Ruby 非常有信心, 但也承認了 Lua 在嵌入式方面無可取代的優勢. 我個人是覺得 Ruby 雖然以方便快速開發著稱, Lua 在這方面也不遑多讓啊! 只是還沒出現 "Lua on Rails" 這樣的框架罷了. Ruby 若不是 Ruby on Rails, 恐怕也沒有這麼風光吧!  Ruby on Rails 的特徵如下 :
  • 完全 MVC 架構
  • 排除設定檔 (XML)
  • 採用簡潔語法
  • 活用 Metaprogramming
  • 大膽擴充 Ruby 核心
除了 Lua 外, 松本也介紹並評價了 Go, Dart, Coffeescript 等語言.

Go 語言是 Google 力推的新語言 (靜態), 主要考量是要充分發揮多核心的 CPU 性能並解決 C/C++ 的缺點, 因此 Go 語言具備了設計 Concurrent 平行處理程式的能力 (電信業界採用的 Erlang 也具有設計平行處理程式的能力, 但那已是誕生於 1987 年的老語言了, 而且很奇怪, 這是個沒有迴圈的語言哩!).

Dart 語言是結構化又靈活的 Web 語言, 最大特徵是具有可省略的靜態型別. 其設計動機是為了取代 Javascript, 因為 Javascript 有下列缺點 :
  • 無法對應功能豐富的網路應用程式
  • 難以高速化
  • 無法支援多核與 GPU
  • 無法修正
但 Javascript 仍在進化, 而且擁有極多使用者社群, Dart 要達成目的恐怕有很大困難吧!

Coffeescript 的出現也是基於對 Javascript 的不滿, Javascript 語法因為太簡單, 使程式變得冗長. 而 Coffeescript 是 "為了撰寫 Javascript 而生的便利語言". Coffeescript 程式執行前要先用 Coffeescript 編譯器 (也是用 Javascript 寫的) 轉成 Javascript 程式, 然後執行此 Javascript 程式. 其語法受到 Ruby 與 Python 的強烈影響 (特別是 Python), 語法比單純過頭的 Javascript 稍微複雜. (奇怪, 居然還有人嫌語法太簡單的!)

松本也提到了與 FORTRAN, COBOL 並稱為 "古代三大程式語言" 的 Lisp, 此語言是創立者 John McCarthy 從所設計的 lambda 演算法進化而來的, 是從數學誕生的語言, 特點是以清單 (list) 結構來操作運算, 這使其廣泛應用在人工智慧領域, 其運算式充滿了許多小括弧, 閱讀起來蠻吃力的. 而我們熟知的虛擬機器與垃圾收集機制也是 Lisp 最早提出並實作出來的, 我都一直以為這是 Java 帶來的創新呢!

松本觀察程式語言的進化方向, 認為最重要的是抽象化 (黑箱化), 例如將處理過程命名就是重點之一, 抽象化的好處是程式設計者不用涉入太多語言的內部細節, 抽象化的自然演進結果之一就是物件導向, 物件就是抽象化的資料. 但也有刻意不要物件化的語言, 例如 Lisp 創立者 Paul Graham 發展的 Arc 語言就是. 松本曾對其學生出過 "預測 20 年後的語言" 這樣的作業, 大多數人預測 :

  • 能更簡單寫出程式的語言
  • 能以自然語言對電腦下令

這也是我的期望. 我認為 Lua 蠻符合第一個期待.

這本書其實還談了非常多東西, 有些比較深入探討語言設計與實作的太艱深, 看不懂 (比如閉包我也覺得非常難以駕馭). 但較淺顯的例如 Big data 常用的資料庫 NoSQL, 摩爾定律, 非阻塞式 I/O 的 node.js 等等, 蠻有可看性的, 從語言設計者的觀點來看語言的特質, 自然有不同的光景.


2016 年第 12 周記事

週六因為參加阿塱壹健行活動, 回到家已晚上 9 點半了, 所以週日早上才回鄉下, 還趕得上下午來台祖的掃墓. 每次掃墓雖然檢查再檢查, 仍然會掛一漏萬, 忘了帶某個重要部品. 其實去年我就整理了一張清單如下 :

 # 掃墓用品

這裡面最容易忘記的是這幾項 :
  • 開瓶器
  • 五福紙
  • 糨糊
  • 打火機
  • 塑膠袋
今年堂嬸沒來掃墓了, 據說身體違和, 但多方輾轉詢問仍不知情況, 似乎不欲人知, 因此我們也不便當面問. 堂哥則因今年掃墓離春節較久先回中國了, 首次由其三位千金代表他們那房. 由於我們這房三代單傳, 這些親族其實都是堂堂叔, 堂堂嬸, 堂堂堂姪女 ... 六大房子孫應該很多才對, 但實際上每年來掃墓的人約 20 個, 有一房每年都是堂叔堂嬸兩夫婦來, 從來不曾見其子女, 很奇怪, 為什麼都不要求他們來呢? 老的一輩日漸凋零, 以後怎辦? 更何況昔日的三合院大宅早已被拆除轉賣, 各房早就搬出去開枝散葉, 只有每年來台祖掃墓才會聚在一起, 掃墓實在應該盡量出席才對.

掃墓回來本想照計畫將後院的過貓砍除, 但小舅來訪, 一聊就到傍晚. 但他們回去後我還是拿起柴刀砍砍砍, 將遮住走道的全部砍掉, 下周回來再將根部拔除, 然後鋪上泥土, 把魚腥草復育回來.