物聯網的 30 個關鍵字:https://www.bnext.com.tw/article/34549/BN-ARTICLE-34549
商業模式:
1.資料販售與交換(羊毛出在狗身上,豬來買單)
特徵:資料為王:硬體定價很低,甚至 0 元,廠商販售或交換使用者的資料盈利
知名案例:Nest
備註:硬體價值壓縮
2.產品即服務
特徵:有感服務:廠商售出硬體產品後,利用大數據分析、軟體升級、直接提供人力、售後服務盈利
知名案例:Tesla、奇異、中興保全 MyVITA、Dropcam
備註:透過軟體升級,提供給使用者更好的服務
3.產品共享
特徵:共有共享:廠商擁有硬體產品,使用者依硬體使用量付費
知名案例:YouBike、Zipcar
備註:產品共享趨勢
駭客公布惡意程式 Mirai 原始碼,讓數十萬 IoT 裝置組殭屍網路大軍的元兇現形:http://www.ithome.com.tw/news/108775
https://github.com/jgamblin/Mirai-Source-Code
物聯網安全警報響起,可癱瘓裝置的 BrickerBot 現身:http://www.ithome.com.tw/news/113335
大數據
巨量資料(英語:Big data),指的是傳統資料處理應用軟體不足以處理它們的大或複雜的資料集的術語。在總資料量相同的情況下,與個別分析獨立的小型資料集(Data set)相比,將各個小型資料集合併後進行分析可得出許多額外的資訊和資料關聯性,可用來察覺商業趨勢、判定研究品質、避免疾病擴散、打擊犯罪或測定即時交通路況等;這樣的用途正是大型資料集盛行的原因。
巨量資料的定義取決於持有資料組的機構之能力,以及其平常用來處理分析資料的軟體之能力。「對某些組織來說,第一次面對數百 GB 的資料集可能讓他們需要重新思考資料管理的選項。對於其他組織來說,資料集可能需要達到數十或數百 TB 才會對他們造成困擾。」
隨著大數據越來越常被提及,2012 年《紐約時報》的一篇專欄中寫到,大數據時代已經降臨,在商業、經濟及其他領域中,決策將日益基於資料和分析而作出,而非基於經驗和直覺。
巨量資料時代的來臨帶來無數的機遇,但是與此同時,個人或機構的隱私權也極有可能受到衝擊,大數據包含各種個人資訊資料,現有的隱私保護法律或政策無力解決這些新出現的問題。有人提出,巨量資料時代,個人是否擁有「被遺忘權」,被遺忘權即是否有權利要求資料商不保留自己的某些資訊,巨量資料時代資訊為某些網際網路巨頭所控制,但是資料商收集任何資料未必都獲得用戶的許可,其對資料的控制權不具有合法性。2014 年 5 月 13 日歐盟法院就「被遺忘權」(right to be forgotten)一案作出裁定,判決 Google 應根據用戶請求刪除不完整的、無關緊要的、不相關的資料以保證資料不出現在搜尋結果中。
巨量資料必須藉由計算機對資料進行統計、比對、解析方能得出客觀結果。美國在 2012 年就開始著手大數據,美國當時的總統歐巴馬更在同年投入 2 億美金在大數據的開發中,更強調巨量資料會是之後的未來石油。
資料探勘(data mining)則是在探討用以解析巨量資料的方法。
有的學者會用「4V」或「4Vs」來定義:Volume(資料大小)、Velocity(資料輸入輸出的速度)、Variety(多樣性)和 Veracity(真實性)。處理速度快、來源多元、具備真實性的大量數據,能產生 Value(價值),可以在多種層面應用,這就是大數據的特質。
大數據特性,謹記四字箴言:「大、快、雜、疑」:資料量龐「大」、變化飛「快」、種類繁「雜」、真偽存「疑」。
大數據的資料來源不只網際網路服務,只要是可以連上網路的裝置 ,都可能是大數據的資料來源,未來物聯網時代來臨後,包括家裡的冰箱、電視、烤箱,廠商分析由智慧家電回傳的資料,就能瞭解用戶開冰箱的頻率、看那些節目、溫度都怎麼控制,所有的日常行為都可以數據化。
Airbnb 如何應用大數據?
Airbnb 蒐集了在自家網站上的眾多數據,利用照片分析、數據資料整合分析後,開發出一套名為 Aerosolve 的演算法工具,來幫助之後的屋住制訂房間的出租價格。
租金要訂多少錢,其實是一門很大的學問,從床的尺寸大小、屋內的裝潢、房子的位置、附近的交通,都是考量點,Airbnb 原本以為,房屋的地點決定了房價,所以這套系統會自動把房子歸在「市區」或是「郊區」,不過經由反複驗算之後,他們發現地點並不是重點,房子內部的規劃以及整體條件搭配,才會影響出租價格,而且多上傳房間的照片,拍攝風格又是溫暖色調,更能吸引其他人的目光,因此出租價格也可以訂的比較高,有了過去龐大用戶的資料,後來的屋主在制訂出租價格時,就不用傷腦筋了。
A machine learning package built for humans. Aerosolve 的開放原始碼:http://airbnb.github.io/aerosolve/
更多應用大數據的舉例:
● 許多老舊的人孔蓋是不定時炸彈,但其中有些更容易闖禍,運用大數據分析及早有效地找出它們悠關公共安全。
● 在公共衛生上,Google 搜尋的關鍵字,可以預測流感的蔓延,讓官方掌控疫情。
● 預測機票的價格,美國網站 Farecast.com, 讓使用者可以依據機票浮動的機率,決定是否下單。
● 美國零售商 Target 用大數據可以預測女生是否懷孕,以便提前進行郵寄孕婦嬰兒用品折價卷等策略。
● 規劃快遞的送貨路線, 尋找節約能源或省時的路線。
巨量資料的定義取決於持有資料組的機構之能力,以及其平常用來處理分析資料的軟體之能力。「對某些組織來說,第一次面對數百 GB 的資料集可能讓他們需要重新思考資料管理的選項。對於其他組織來說,資料集可能需要達到數十或數百 TB 才會對他們造成困擾。」
隨著大數據越來越常被提及,2012 年《紐約時報》的一篇專欄中寫到,大數據時代已經降臨,在商業、經濟及其他領域中,決策將日益基於資料和分析而作出,而非基於經驗和直覺。
巨量資料時代的來臨帶來無數的機遇,但是與此同時,個人或機構的隱私權也極有可能受到衝擊,大數據包含各種個人資訊資料,現有的隱私保護法律或政策無力解決這些新出現的問題。有人提出,巨量資料時代,個人是否擁有「被遺忘權」,被遺忘權即是否有權利要求資料商不保留自己的某些資訊,巨量資料時代資訊為某些網際網路巨頭所控制,但是資料商收集任何資料未必都獲得用戶的許可,其對資料的控制權不具有合法性。2014 年 5 月 13 日歐盟法院就「被遺忘權」(right to be forgotten)一案作出裁定,判決 Google 應根據用戶請求刪除不完整的、無關緊要的、不相關的資料以保證資料不出現在搜尋結果中。
巨量資料必須藉由計算機對資料進行統計、比對、解析方能得出客觀結果。美國在 2012 年就開始著手大數據,美國當時的總統歐巴馬更在同年投入 2 億美金在大數據的開發中,更強調巨量資料會是之後的未來石油。
資料探勘(data mining)則是在探討用以解析巨量資料的方法。
有的學者會用「4V」或「4Vs」來定義:Volume(資料大小)、Velocity(資料輸入輸出的速度)、Variety(多樣性)和 Veracity(真實性)。處理速度快、來源多元、具備真實性的大量數據,能產生 Value(價值),可以在多種層面應用,這就是大數據的特質。
大數據特性,謹記四字箴言:「大、快、雜、疑」:資料量龐「大」、變化飛「快」、種類繁「雜」、真偽存「疑」。
大數據的資料來源不只網際網路服務,只要是可以連上網路的裝置 ,都可能是大數據的資料來源,未來物聯網時代來臨後,包括家裡的冰箱、電視、烤箱,廠商分析由智慧家電回傳的資料,就能瞭解用戶開冰箱的頻率、看那些節目、溫度都怎麼控制,所有的日常行為都可以數據化。
Airbnb 如何應用大數據?
Airbnb 蒐集了在自家網站上的眾多數據,利用照片分析、數據資料整合分析後,開發出一套名為 Aerosolve 的演算法工具,來幫助之後的屋住制訂房間的出租價格。
租金要訂多少錢,其實是一門很大的學問,從床的尺寸大小、屋內的裝潢、房子的位置、附近的交通,都是考量點,Airbnb 原本以為,房屋的地點決定了房價,所以這套系統會自動把房子歸在「市區」或是「郊區」,不過經由反複驗算之後,他們發現地點並不是重點,房子內部的規劃以及整體條件搭配,才會影響出租價格,而且多上傳房間的照片,拍攝風格又是溫暖色調,更能吸引其他人的目光,因此出租價格也可以訂的比較高,有了過去龐大用戶的資料,後來的屋主在制訂出租價格時,就不用傷腦筋了。
A machine learning package built for humans. Aerosolve 的開放原始碼:http://airbnb.github.io/aerosolve/
更多應用大數據的舉例:
● 許多老舊的人孔蓋是不定時炸彈,但其中有些更容易闖禍,運用大數據分析及早有效地找出它們悠關公共安全。
● 在公共衛生上,Google 搜尋的關鍵字,可以預測流感的蔓延,讓官方掌控疫情。
● 預測機票的價格,美國網站 Farecast.com, 讓使用者可以依據機票浮動的機率,決定是否下單。
● 美國零售商 Target 用大數據可以預測女生是否懷孕,以便提前進行郵寄孕婦嬰兒用品折價卷等策略。
● 規劃快遞的送貨路線, 尋找節約能源或省時的路線。
比特幣 - 總覽
Satoshi Nakamoto:http://p2pfoundation.ning.com/profile/SatoshiNakamoto
整個歷史足跡的整理 (當初的 Email、Code 等):http://satoshi.nakamotoinstitute.org
version 0.1.3:
https://github.com/trottier/original-bitcoin
https://github.com/trottier/original-bitcoin/commit/92ee8d9a994391d148733da77e2bbc2f4acc43cd
[研發筆記] 比特幣 - Source Code:http://21st.each1.net/2018/03/blog-post_20.html
[研發筆記] 相關技術 Peer-to-Peer:http://21st.each1.net/2018/04/peer-to-peer.html
Original Satoshi Nakamoto Bitcoin White Paper:https://bitcoin.org/bitcoin.pdf
白皮書中文翻譯版本 1:http://www.8btc.com/wiki/bitcoin-a-peer-to-peer-electronic-cash-system
白皮書中文翻譯版本 2:https://zhuanlan.zhihu.com/p/28614698
在2010年8月6日,比特幣協議被發現重大漏洞,在不到一小時內,這筆異常交易就被發現,並在漏洞修復後被從交易記錄上刪除,整個網路也更新為新版的比特幣協議。截至目前為止,這是比特幣歷史上唯一發現並被利用的重大安全漏洞。參見
https://21st.each1.net/2019/03/20108151840.html
https://zh.wikipedia.org/wiki/比特幣歷史
警告消息並不經常使用,但在大多數節點上都有此功能。警告消息是比特幣的“緊急廣播系統”,比特幣核心開發人員可以藉此功能給所有比特幣節點發送緊急文本消息。這一功能是為了讓核心開發團隊將比特幣網絡的嚴重問題通知所有的比特幣用戶,例如一個需要用戶採取措施的的嚴重bug。警告系統迄今為止只被用過幾次,最嚴重的一次是在2013年,一個關鍵的數據庫缺陷導致比特幣區塊鏈中出現了一個多區塊分叉。參見 http://zhibimo.com/read/wang-miao/mastering-bitcoin/Chapter06.html
持續更新中的程式碼:
https://bitcoin.org/en/version-history
精通比特幣:https://github.com/bitcoinbook/bitcoinbook
What does the term "Longest chain" mean, as there is only one 'right' blockchain exists? How another longer chain would make the 'right' chain invalid?
https://bitcoin.stackexchange.com/questions/5540/what-does-the-term-longest-chain-mean
Strongest vs Longest chain and orphaned blocks
https://bitcoin.stackexchange.com/questions/29742/strongest-vs-longest-chain-and-orphaned-blocks
區塊鏈的分叉:https://applealmond.com/posts/22846
SPV、SPV節點和SPV錢包:http://8btc.com/thread-15128-1-1.html
比特幣礦場實錄:https://kknews.cc/tech/2aoq5ge.html
比特幣區塊鏈擴容為什麼選擇 2 MB?
https://book.douban.com/review/8010511/
比特幣區塊 1 MB 大小的起初設置主要是為了防止 DOS 網絡攻擊。粗略計算每秒 3.5 次交易意味著一年要容納 110,000,000 次交易,並伴隨一年 52.56 GB 的區塊鏈增長。也意味著地球上 1.6% 的人每年可以交易一次。
https://kknews.cc/zh-tw/tech/q2poe3o.html
比特幣網絡有兩個特性:清算系統,現金系統。
隨著比特幣的繁榮,交易數量會越來越大,有限的塊容量會使得低價值的交易(例如發送1分錢)永遠無法進塊,因為低價值的交易不可能支付高網絡手續費。進而網絡退化為清算系統,低價值含量交易被趕出,這些交易由第三方記賬系統進行代替完成。
在閃電網絡出現之前,第三方記賬系統主要是鏈外錢包提供商。用戶信任某第三方錢包平台,把比特幣存入其中,同一平台用戶之間轉賬僅帶來賬戶餘額變更,並不會產生比特幣交易。
https://zhuanlan.zhihu.com/p/33939518
解決比特幣容量和需求問題有幾種方法:
https://tw.saowen.com/a/69538eb4fa573d2cb3582a913c37c5d6ddb19fa21c39b99f107bb3ebd433d16c
事實證明,比特幣無法滿足不斷增長的需求,但其並不偏離中本聰原來“點對點電子現金系統”的最初設想。
它目的是提供一種不使用傳統的金融體系、快速、安全且低手續費的支付方式。 而如今它依然掌握著相對於Visa、萬事達卡很小的一部分流量,且速度變得非常慢、手續費非常昂貴。
解決比特幣的擴容問題已成為開發人員的首要關注點。 但事實證明,這個問題很棘手。
而現在它的缺點反而變成優點:比特幣就是“ 數字黃金” 。 其2100萬的內建數量限制,讓它成為了一個類似嚴格的金本位硬通貨金融體系的理想錨定物。 一個新的支付系統可以建立在這之上。
問題是,不可能通過完全的去中心化、固定的貨幣供應量和足夠的流動性來建立高效的支付系統。 這是比特幣的“三元悖論”。
比特幣硬分叉所衍生出來的議題精選:
繁體版翻譯:https://read01.com/zh-tw/PMRM0zk.html
https://kknews.cc/zh-tw/tech/bkobgxo.html
整個歷史足跡的整理 (當初的 Email、Code 等):http://satoshi.nakamotoinstitute.org
version 0.1.3:
https://github.com/trottier/original-bitcoin
https://github.com/trottier/original-bitcoin/commit/92ee8d9a994391d148733da77e2bbc2f4acc43cd
[研發筆記] 相關技術 Peer-to-Peer:http://21st.each1.net/2018/04/peer-to-peer.html
白皮書中文翻譯版本 1:http://www.8btc.com/wiki/bitcoin-a-peer-to-peer-electronic-cash-system
白皮書中文翻譯版本 2:https://zhuanlan.zhihu.com/p/28614698
在2010年8月6日,比特幣協議被發現重大漏洞,在不到一小時內,這筆異常交易就被發現,並在漏洞修復後被從交易記錄上刪除,整個網路也更新為新版的比特幣協議。截至目前為止,這是比特幣歷史上唯一發現並被利用的重大安全漏洞。參見
https://21st.each1.net/2019/03/20108151840.html
https://zh.wikipedia.org/wiki/比特幣歷史
警告消息並不經常使用,但在大多數節點上都有此功能。警告消息是比特幣的“緊急廣播系統”,比特幣核心開發人員可以藉此功能給所有比特幣節點發送緊急文本消息。這一功能是為了讓核心開發團隊將比特幣網絡的嚴重問題通知所有的比特幣用戶,例如一個需要用戶採取措施的的嚴重bug。警告系統迄今為止只被用過幾次,最嚴重的一次是在2013年,一個關鍵的數據庫缺陷導致比特幣區塊鏈中出現了一個多區塊分叉。參見 http://zhibimo.com/read/wang-miao/mastering-bitcoin/Chapter06.html
https://bitcoin.org/en/version-history
https://github.com/bitcoin/bitcoin/releases
Bitcoin 比特幣官方客戶端有兩個版本:一個是圖形界面的版本,通常被稱為 Bitcoin-Qt(首字母大寫),以及一個簡潔的版本(稱為 bitcoind)。它們相互間是兼容的,有著同樣的命令行參數,讀取相同的配置文件,也讀寫相同的數據文件。您可以在同一台電腦中運行其中一個(如果您不小心嘗試同時運行另外一個客戶端,它會提示您已經有一個客戶端在運行並且自動退出)。
Bitcoin-Qt 是使用 Qt 開發的比特幣客戶端,目前該項目已經成為比特幣官方的客戶端,合併到比特幣項目中,不再單獨立項。
詳見:http://webcache.googleusercontent.com/search?q=cache:RdoQ6miaNGgJ:wiki.8btc.com/doc-view-95.htm+&cd=2&hl=en&ct=clnk&gl=twBitcoin 比特幣官方客戶端有兩個版本:一個是圖形界面的版本,通常被稱為 Bitcoin-Qt(首字母大寫),以及一個簡潔的版本(稱為 bitcoind)。它們相互間是兼容的,有著同樣的命令行參數,讀取相同的配置文件,也讀寫相同的數據文件。您可以在同一台電腦中運行其中一個(如果您不小心嘗試同時運行另外一個客戶端,它會提示您已經有一個客戶端在運行並且自動退出)。
Bitcoin-Qt 是使用 Qt 開發的比特幣客戶端,目前該項目已經成為比特幣官方的客戶端,合併到比特幣項目中,不再單獨立項。
What does the term "Longest chain" mean, as there is only one 'right' blockchain exists? How another longer chain would make the 'right' chain invalid?
https://bitcoin.stackexchange.com/questions/5540/what-does-the-term-longest-chain-mean
Strongest vs Longest chain and orphaned blocks
https://bitcoin.stackexchange.com/questions/29742/strongest-vs-longest-chain-and-orphaned-blocks
區塊鏈的分叉:https://applealmond.com/posts/22846
SPV、SPV節點和SPV錢包:http://8btc.com/thread-15128-1-1.html
比特幣礦場實錄:https://kknews.cc/tech/2aoq5ge.html
比特幣區塊鏈擴容為什麼選擇 2 MB?
https://book.douban.com/review/8010511/
比特幣區塊 1 MB 大小的起初設置主要是為了防止 DOS 網絡攻擊。粗略計算每秒 3.5 次交易意味著一年要容納 110,000,000 次交易,並伴隨一年 52.56 GB 的區塊鏈增長。也意味著地球上 1.6% 的人每年可以交易一次。
https://kknews.cc/zh-tw/tech/q2poe3o.html
比特幣網絡有兩個特性:清算系統,現金系統。
- 清算系統
隨著比特幣的繁榮,交易數量會越來越大,有限的塊容量會使得低價值的交易(例如發送1分錢)永遠無法進塊,因為低價值的交易不可能支付高網絡手續費。進而網絡退化為清算系統,低價值含量交易被趕出,這些交易由第三方記賬系統進行代替完成。
在閃電網絡出現之前,第三方記賬系統主要是鏈外錢包提供商。用戶信任某第三方錢包平台,把比特幣存入其中,同一平台用戶之間轉賬僅帶來賬戶餘額變更,並不會產生比特幣交易。
- 現金系統
https://zhuanlan.zhihu.com/p/33939518
解決比特幣容量和需求問題有幾種方法:
- 增加區塊容量,讓節點運營商承擔擴容的成本,這會導致部分節點和挖礦的中心化。
- 進行鏈下交易,但這類交易安全性不高,也沒有去信任化操作。目前已經有人這麼做了,但這類交易被存儲在大型交易所的私有數據庫裡。
- 閃電網絡等第二層技術。
https://tw.saowen.com/a/69538eb4fa573d2cb3582a913c37c5d6ddb19fa21c39b99f107bb3ebd433d16c
事實證明,比特幣無法滿足不斷增長的需求,但其並不偏離中本聰原來“點對點電子現金系統”的最初設想。
它目的是提供一種不使用傳統的金融體系、快速、安全且低手續費的支付方式。 而如今它依然掌握著相對於Visa、萬事達卡很小的一部分流量,且速度變得非常慢、手續費非常昂貴。
解決比特幣的擴容問題已成為開發人員的首要關注點。 但事實證明,這個問題很棘手。
而現在它的缺點反而變成優點:比特幣就是“ 數字黃金” 。 其2100萬的內建數量限制,讓它成為了一個類似嚴格的金本位硬通貨金融體系的理想錨定物。 一個新的支付系統可以建立在這之上。
問題是,不可能通過完全的去中心化、固定的貨幣供應量和足夠的流動性來建立高效的支付系統。 這是比特幣的“三元悖論”。
比特幣硬分叉所衍生出來的議題精選:
- 硬分叉為 BTC 和 BCH ,背後隱含對隔離見證的思考
繁體版翻譯:https://read01.com/zh-tw/PMRM0zk.html
- 重放攻擊
https://kknews.cc/zh-tw/tech/bkobgxo.html
- 算力炸彈
- 藉由比較 比特幣 與 乙太幣 進行硬分叉後的差異來研究探討
區塊鏈 概論
區塊鏈技術演進史:http://www.ithome.com.tw/news/105370
2008 年出現的比特幣是第一個採用區塊鏈技術打造出來的 P2P 電子貨幣系統應用,不過比特幣區塊鏈並非一項全新的技術,而是將過去數十年所累積的跨領域技術結合。
比特幣之後也陸續出現許多基於區塊鏈技術的電子貨幣,許多年後,大家才終於意識到區塊鏈的真實價值,不僅僅電子貨幣系統,現在的區塊鏈技術與應用,已經遠超過比特幣這項應用。
由於區塊鏈協議幾乎都是開源的,因此要取得區塊鏈協議的原始碼不是問題,重點是要找到好的區塊鏈服務供應商,協助導入現有的系統。
》1982 年
Leslie Lamport 等人提出拜占庭將軍問題,把軍中各地軍隊彼此取得共識、決定是否出兵的過程,延伸至運算領域,設法建立具容錯性的分散式系統,即使部分節點失效仍可確保系統正常運行,可讓多個基於零信任基礎的節點達成共識,並確保資訊傳遞的一致性,而 2008 年出現的比特幣區塊鏈便解決了此問題。
David Chaum 提出注重隱私安全的密碼學網路支付系統,具有不可追蹤的特性,成為之後比特幣區塊鏈在隱私安全面的雛形。
》1985 年
Neal Koblitz 和 Victor Miller 分別提出橢圓曲線密碼學(Elliptic Curve Cryptography,ECC),首次將橢圓曲線用於密碼學,建立公開金鑰加密的演算法。相較於 RSA 演算法,採用 ECC 好處在於可用較短的金鑰,達到相同的安全強度。
》1990 年
David Chaum 基於先前理論打造出不可追蹤的密碼學網路支付系統,就是後來的 eCash,不過eCash 並非去中心化系統。
Leslie Lamport 提出具高容錯的一致性演算法 Paxos。
》1991 年
Stuart Haber 與 W. Scott Stornetta 提出用時間戳確保數位文件安全的協議,此概念之後被比特幣區塊鏈系統所採用。
》1992 年
Scott Vanstone 等人提出橢圓曲線數位簽章演算法(Elliptic Curve Digital Signature Algorithm,ECDSA)
》1997 年
Adam Back 發明 Hashcash(雜湊現金),為一種工作量證明演算法(Proof of Work,POW),此演算法仰賴成本函數的不可逆特性,達到容易被驗證,但很難被破解的特性, 最早被應用於阻擋垃圾郵件。Hashcash 之後成為比特幣區塊鏈所採用的關鍵技術之一。
Adam Back 於 2002 年正式發表 Hashcash 論文。
》1998 年
Wei Dai 發表匿名的分散式電子現金系統 B-money,引入工作量證明機制,強調點對點交易和不可竄改特性。不過在 B-money 中,並未採用 Adam Back 提出的 Hashcash 演算法。Wei Dai的許多設計之後被比特幣區塊鏈所採用。
Nick Szabo 發表去中心化的數位貨幣系統 Bit Gold,參與者可貢獻運算能力來解出加密謎題。
》2005 年
Hal Finney 提出可重複使用的工作量證明機制(Reusable Proofs of Work,RPOW),結合 B-money 與 Adam Back 提出的 Hashcash 演算法來創造密碼學貨幣。
》2008 年
Satoshi Nakamoto(中本聰)發表一篇關於比特幣的論文,描述一個點對點電子現金系統,能在不具信任的基礎之上,建立一套去中心化的電子交易體系。
Blockchain 1.0:加密貨幣
數位貨幣與支付系統去中心化。
》約 2012 年之後
Blockchain 2.0:智慧資產、智慧契約
市場去中心化,可作貨幣以外的數位資產轉移,如股票、債券。如 Colored Coin 便是基於比特幣區塊鏈的開源協議,可在比特幣區塊鏈上發行多項資產。
》約 2014 年之後
Blockchain 2.5:金融領域應用、資料層
強調代幣(貨幣橋)應用、分散式帳本、資料層區塊鏈,及結合人工智慧等金融應用。
Blockchain 3.0:更複雜的智慧契約
將區塊鏈用於政府、醫療、科學、文化與藝術等領域。
更多區塊鏈專題報導:http://www.ithome.com.tw/article/105368
高盛 2016 年區塊鏈 79 頁研究報告:https://read01.com/neJeNn.html
( 收錄了正在實現讓現實世界使用區塊鏈應用的 50 個私人企業 與 10 個上市企業 )
高盛眼中的區塊鏈五大應用:https://read01.com/0z2RNR.html
應用一:在 Airbnb 等平台上建立信用體系
應用二:家庭發電與供電
應用三:降低房地產市場交易成本
應用四:改良股票交易機制
應用五:有助於反洗錢及金融企業客戶身份核驗
區塊鏈將成救地球藥方:https://buzzorange.com/techorange/2017/06/09/blockchain-save-earth/
以太幣或成虛擬貨幣老大、2018年底超車?
http://www.msn.com/zh-tw/money/topstories/%E6%AF%94%E7%89%B9%E5%B9%A3%E8%AE%93%E8%B7%AF%EF%BC%81%E4%BB%A5%E5%A4%AA%E5%B9%A3%E6%88%96%E6%88%90%E8%99%9B%E6%93%AC%E8%B2%A8%E5%B9%A3%E8%80%81%E5%A4%A7%E3%80%81%E6%98%8E%E5%B9%B4%E5%BA%95%E8%B6%85%E8%BB%8A%EF%BC%9F/ar-BBCBE1z?li=AA4Zjz&ocid=spartandhp
2008 年出現的比特幣是第一個採用區塊鏈技術打造出來的 P2P 電子貨幣系統應用,不過比特幣區塊鏈並非一項全新的技術,而是將過去數十年所累積的跨領域技術結合。
比特幣之後也陸續出現許多基於區塊鏈技術的電子貨幣,許多年後,大家才終於意識到區塊鏈的真實價值,不僅僅電子貨幣系統,現在的區塊鏈技術與應用,已經遠超過比特幣這項應用。
由於區塊鏈協議幾乎都是開源的,因此要取得區塊鏈協議的原始碼不是問題,重點是要找到好的區塊鏈服務供應商,協助導入現有的系統。
》1982 年
Leslie Lamport 等人提出拜占庭將軍問題,把軍中各地軍隊彼此取得共識、決定是否出兵的過程,延伸至運算領域,設法建立具容錯性的分散式系統,即使部分節點失效仍可確保系統正常運行,可讓多個基於零信任基礎的節點達成共識,並確保資訊傳遞的一致性,而 2008 年出現的比特幣區塊鏈便解決了此問題。
David Chaum 提出注重隱私安全的密碼學網路支付系統,具有不可追蹤的特性,成為之後比特幣區塊鏈在隱私安全面的雛形。
》1985 年
Neal Koblitz 和 Victor Miller 分別提出橢圓曲線密碼學(Elliptic Curve Cryptography,ECC),首次將橢圓曲線用於密碼學,建立公開金鑰加密的演算法。相較於 RSA 演算法,採用 ECC 好處在於可用較短的金鑰,達到相同的安全強度。
》1990 年
David Chaum 基於先前理論打造出不可追蹤的密碼學網路支付系統,就是後來的 eCash,不過eCash 並非去中心化系統。
Leslie Lamport 提出具高容錯的一致性演算法 Paxos。
》1991 年
Stuart Haber 與 W. Scott Stornetta 提出用時間戳確保數位文件安全的協議,此概念之後被比特幣區塊鏈系統所採用。
》1992 年
Scott Vanstone 等人提出橢圓曲線數位簽章演算法(Elliptic Curve Digital Signature Algorithm,ECDSA)
》1997 年
Adam Back 發明 Hashcash(雜湊現金),為一種工作量證明演算法(Proof of Work,POW),此演算法仰賴成本函數的不可逆特性,達到容易被驗證,但很難被破解的特性, 最早被應用於阻擋垃圾郵件。Hashcash 之後成為比特幣區塊鏈所採用的關鍵技術之一。
Adam Back 於 2002 年正式發表 Hashcash 論文。
》1998 年
Wei Dai 發表匿名的分散式電子現金系統 B-money,引入工作量證明機制,強調點對點交易和不可竄改特性。不過在 B-money 中,並未採用 Adam Back 提出的 Hashcash 演算法。Wei Dai的許多設計之後被比特幣區塊鏈所採用。
Nick Szabo 發表去中心化的數位貨幣系統 Bit Gold,參與者可貢獻運算能力來解出加密謎題。
》2005 年
Hal Finney 提出可重複使用的工作量證明機制(Reusable Proofs of Work,RPOW),結合 B-money 與 Adam Back 提出的 Hashcash 演算法來創造密碼學貨幣。
》2008 年
Satoshi Nakamoto(中本聰)發表一篇關於比特幣的論文,描述一個點對點電子現金系統,能在不具信任的基礎之上,建立一套去中心化的電子交易體系。
Blockchain 1.0:加密貨幣
數位貨幣與支付系統去中心化。
》約 2012 年之後
Blockchain 2.0:智慧資產、智慧契約
市場去中心化,可作貨幣以外的數位資產轉移,如股票、債券。如 Colored Coin 便是基於比特幣區塊鏈的開源協議,可在比特幣區塊鏈上發行多項資產。
》約 2014 年之後
Blockchain 2.5:金融領域應用、資料層
強調代幣(貨幣橋)應用、分散式帳本、資料層區塊鏈,及結合人工智慧等金融應用。
Blockchain 3.0:更複雜的智慧契約
將區塊鏈用於政府、醫療、科學、文化與藝術等領域。
更多區塊鏈專題報導:http://www.ithome.com.tw/article/105368
高盛 2016 年區塊鏈 79 頁研究報告:https://read01.com/neJeNn.html
( 收錄了正在實現讓現實世界使用區塊鏈應用的 50 個私人企業 與 10 個上市企業 )
高盛眼中的區塊鏈五大應用:https://read01.com/0z2RNR.html
應用一:在 Airbnb 等平台上建立信用體系
應用二:家庭發電與供電
應用三:降低房地產市場交易成本
應用四:改良股票交易機制
應用五:有助於反洗錢及金融企業客戶身份核驗
區塊鏈將成救地球藥方:https://buzzorange.com/techorange/2017/06/09/blockchain-save-earth/
以太幣或成虛擬貨幣老大、2018年底超車?
http://www.msn.com/zh-tw/money/topstories/%E6%AF%94%E7%89%B9%E5%B9%A3%E8%AE%93%E8%B7%AF%EF%BC%81%E4%BB%A5%E5%A4%AA%E5%B9%A3%E6%88%96%E6%88%90%E8%99%9B%E6%93%AC%E8%B2%A8%E5%B9%A3%E8%80%81%E5%A4%A7%E3%80%81%E6%98%8E%E5%B9%B4%E5%BA%95%E8%B6%85%E8%BB%8A%EF%BC%9F/ar-BBCBE1z?li=AA4Zjz&ocid=spartandhp
自造者 概論
自造者浪潮不是科技革命,而是一場社會運動:https://www.inside.com.tw/2015/10/19/lets-talk-about-what-maker-movement-is
來自台灣現在在美國印地安那大學任教的盧少雯教授與她的丈夫 Jeffrey Bardzell 教授,近年獲得美國國科會 120 萬美金補助,計畫研究內容基本上是以台灣自造者、大陸創客的生態與活動為藍本,來探討美國中西部 Maker 運動的未來。美國政府相當重視這方面的發展,並且拉高到國家戰略的等級,其實是為了將生產製造拉回到美國本土的措施之一。
來自台灣的團隊,透過集資來完成的紀錄片 Maker《自造世代》,梳理了今日所稱的 Maker ,其實是來自我們喜愛動手做的天性,在人類活動中就一直存在著,是隨著社會演進的文化。
所以美國過去的車庫文化形成就是很好的例子,並且常被拿出來舉例說明,而創立蘋果公司的賈伯斯等人更是其中的代表人物。因此 Maker 運動中,動手製作進而創業的議題,變成很熱門的討論之一,而大眾集資就成為創業獲得資金,進而實踐夢想的最佳出口。
在 kickstarter 集資平台上, Maker 進而創業成功的例子一再湧現,雖然最容易吸引到大眾目光的集資案件都集中在 Arduino 相關的電子套件、3D 印表機與多軸飛行器的相關計畫,但是也讓媒體對於凝聚這些走向創業的 Maker 的空間深感興趣,例如生產 3D 印表機的 MakerBot Industries 就是從 NYC Resistor 空間出來的,但是這些空間與過去的賈伯斯之於車庫是不一樣的,因為 Maker 空間不只限於實體的空間,還有包括網路上相關主題的社群。
從媒體報導的角度而言,空間描述相對於網路社群是比較容易的切入點,所以像 Hackerspace、Makerspace、Fablab、Techshop 等空間都被一一介紹,這些空間在台灣都被稱為自造者空間,在中國被稱為創客空間,不同的英文名稱卻在中文翻譯後被歸納成為同一個,但是實際上這些空間卻是有所不同的。
● Hackerspace 是 90 年代從歐洲開始的,組成與執行偏向集體主義,並且共享資源與工具,對於自由軟體有強烈的愛好,空間通常也呈現混亂的狀態。
● Makerspce 是因應 Make 雜誌主題而發展出來的,空間內提供多樣工具給會員使用,多半比較偏向商業化經營。
● Techshop 是商業公司經營的模式,提供會員使用各項機具之外,還有專門的教學課程。
● Fablab 則是由麻省理工學院的 Neil Gershenfeld 教授所發起的,多半以非營利的方式在經營,或是在不同的地方有不同的經營方式,而且必須要有符合設立的規則才能成立 Fablab ,另外每年都會舉辦國際的 Fablab 年會,吸引來自全世界的 Fablab 成員聚集在一起討論相關議題。
廣義來說,所謂的 Maker 應該非常多元,涵蓋各種動手製作的活動,木工、金工、烹飪、裁縫、繪畫等等都是,是一種貼近生活模式的文化活動,其實在美國的 Maker faire 可以看到各種類型的製作分享。( 物理少女 12 歲就自造飛機:http://21st.each1.net/2017/03/12.html )
另外 Maker 不管是上集資平台、創業,通常都是解決自己的問題或是針對觀察問題發生的原因,和想把自己腦海裡的的念頭做出來之後的事情,並非一開始就是為了創業。
一些透過群眾募資完成的產品:http://www.damanwoo.com/taxonomy/term/47578
若想透過群眾募資創業,應先了解法律問題與思考仿冒者競爭等問題。
已公開發表的發明,是否仍能取得專利?
詳見:http://chungchuan-ipto.blogspot.tw/2011/11/blog-post.html
世界上大多數國家的『新穎性優惠期』是 6 個月或 12 個月。
Google 關鍵字『專利 已公開無法申請』。
北美智權報 第 138期 創業者想玩群眾募資?先把智財權搞明白再說:http://www.naipo.com/Portals/1/web_tw/Knowledge_Center/Industry_Economy/publish-404.htm
前車之鑒:衆募未完同類商品已上市
創業衆募:保護創意要做好智財權功課
1. 提前做好商標保護。
2. 適當做好專利布局。
3. 做好商業秘密保護。
小米的「米鍵」抄襲 Pressy 成了經典案例,給美國創業者上了一堂課:http://www.techbang.com/posts/18985-chinese-copycats-who-are-hurting-hardware-renaissance
也許有人會說,唉,不就是「山寨」嗎?這種事多了去了,有什麼大驚小怪呢?確實,從軟體時代起,對來自於矽谷的創意進行「模仿」的中國公司不計其數,每個人都有些麻木了,尤其對於熟悉中國的人來說,這事情好像也沒什麼大不了,但後來發現,這次真的不一樣。事情的影響遠遠超過了 Pressy 被抄襲本身,而變成了智慧硬體領域一個標誌性事情、一個符號、一個警告,套用一個身在矽谷的中國硬體創業者的話說,「成了中國公司給美國創業者上的一堂課」。
仿造熱門集資產品心安理得?24 歲山寨商的自述與原創提案者的回應:http://crowdwatch.tw/reports/1211
群眾集資=見光死?產品眾所皆知後的命運只能等著被抄走嗎?http://crowdwatch.tw/reports/1081
一切都從上群募網站開始
究竟問題是怎麼發生的?
1、山寨最佳環境──代工製造大國
2、商標搶註──在我的地盤,有我的規矩
3、網域搶註──你的商標,我的網址
對集資者而言,有什麼預防措施?
1、雇用法律顧問
2、盡早權利卡位
3、精算揭露產品的時間點
4、定期追踨
5、善用國際紛爭解決機制
除了建議,我們更要行動:數位智財標籤
來自台灣現在在美國印地安那大學任教的盧少雯教授與她的丈夫 Jeffrey Bardzell 教授,近年獲得美國國科會 120 萬美金補助,計畫研究內容基本上是以台灣自造者、大陸創客的生態與活動為藍本,來探討美國中西部 Maker 運動的未來。美國政府相當重視這方面的發展,並且拉高到國家戰略的等級,其實是為了將生產製造拉回到美國本土的措施之一。
來自台灣的團隊,透過集資來完成的紀錄片 Maker《自造世代》,梳理了今日所稱的 Maker ,其實是來自我們喜愛動手做的天性,在人類活動中就一直存在著,是隨著社會演進的文化。
所以美國過去的車庫文化形成就是很好的例子,並且常被拿出來舉例說明,而創立蘋果公司的賈伯斯等人更是其中的代表人物。因此 Maker 運動中,動手製作進而創業的議題,變成很熱門的討論之一,而大眾集資就成為創業獲得資金,進而實踐夢想的最佳出口。
在 kickstarter 集資平台上, Maker 進而創業成功的例子一再湧現,雖然最容易吸引到大眾目光的集資案件都集中在 Arduino 相關的電子套件、3D 印表機與多軸飛行器的相關計畫,但是也讓媒體對於凝聚這些走向創業的 Maker 的空間深感興趣,例如生產 3D 印表機的 MakerBot Industries 就是從 NYC Resistor 空間出來的,但是這些空間與過去的賈伯斯之於車庫是不一樣的,因為 Maker 空間不只限於實體的空間,還有包括網路上相關主題的社群。
從媒體報導的角度而言,空間描述相對於網路社群是比較容易的切入點,所以像 Hackerspace、Makerspace、Fablab、Techshop 等空間都被一一介紹,這些空間在台灣都被稱為自造者空間,在中國被稱為創客空間,不同的英文名稱卻在中文翻譯後被歸納成為同一個,但是實際上這些空間卻是有所不同的。
● Hackerspace 是 90 年代從歐洲開始的,組成與執行偏向集體主義,並且共享資源與工具,對於自由軟體有強烈的愛好,空間通常也呈現混亂的狀態。
● Makerspce 是因應 Make 雜誌主題而發展出來的,空間內提供多樣工具給會員使用,多半比較偏向商業化經營。
● Techshop 是商業公司經營的模式,提供會員使用各項機具之外,還有專門的教學課程。
● Fablab 則是由麻省理工學院的 Neil Gershenfeld 教授所發起的,多半以非營利的方式在經營,或是在不同的地方有不同的經營方式,而且必須要有符合設立的規則才能成立 Fablab ,另外每年都會舉辦國際的 Fablab 年會,吸引來自全世界的 Fablab 成員聚集在一起討論相關議題。
廣義來說,所謂的 Maker 應該非常多元,涵蓋各種動手製作的活動,木工、金工、烹飪、裁縫、繪畫等等都是,是一種貼近生活模式的文化活動,其實在美國的 Maker faire 可以看到各種類型的製作分享。( 物理少女 12 歲就自造飛機:http://21st.each1.net/2017/03/12.html )
另外 Maker 不管是上集資平台、創業,通常都是解決自己的問題或是針對觀察問題發生的原因,和想把自己腦海裡的的念頭做出來之後的事情,並非一開始就是為了創業。
一些透過群眾募資完成的產品:http://www.damanwoo.com/taxonomy/term/47578
若想透過群眾募資創業,應先了解法律問題與思考仿冒者競爭等問題。
已公開發表的發明,是否仍能取得專利?
詳見:http://chungchuan-ipto.blogspot.tw/2011/11/blog-post.html
世界上大多數國家的『新穎性優惠期』是 6 個月或 12 個月。
Google 關鍵字『專利 已公開無法申請』。
北美智權報 第 138期 創業者想玩群眾募資?先把智財權搞明白再說:http://www.naipo.com/Portals/1/web_tw/Knowledge_Center/Industry_Economy/publish-404.htm
前車之鑒:衆募未完同類商品已上市
創業衆募:保護創意要做好智財權功課
1. 提前做好商標保護。
2. 適當做好專利布局。
3. 做好商業秘密保護。
小米的「米鍵」抄襲 Pressy 成了經典案例,給美國創業者上了一堂課:http://www.techbang.com/posts/18985-chinese-copycats-who-are-hurting-hardware-renaissance
也許有人會說,唉,不就是「山寨」嗎?這種事多了去了,有什麼大驚小怪呢?確實,從軟體時代起,對來自於矽谷的創意進行「模仿」的中國公司不計其數,每個人都有些麻木了,尤其對於熟悉中國的人來說,這事情好像也沒什麼大不了,但後來發現,這次真的不一樣。事情的影響遠遠超過了 Pressy 被抄襲本身,而變成了智慧硬體領域一個標誌性事情、一個符號、一個警告,套用一個身在矽谷的中國硬體創業者的話說,「成了中國公司給美國創業者上的一堂課」。
仿造熱門集資產品心安理得?24 歲山寨商的自述與原創提案者的回應:http://crowdwatch.tw/reports/1211
群眾集資=見光死?產品眾所皆知後的命運只能等著被抄走嗎?http://crowdwatch.tw/reports/1081
一切都從上群募網站開始
究竟問題是怎麼發生的?
1、山寨最佳環境──代工製造大國
2、商標搶註──在我的地盤,有我的規矩
3、網域搶註──你的商標,我的網址
對集資者而言,有什麼預防措施?
1、雇用法律顧問
2、盡早權利卡位
3、精算揭露產品的時間點
4、定期追踨
5、善用國際紛爭解決機制
除了建議,我們更要行動:數位智財標籤
物理少女 12 歲就自造飛機
在微冷的一月早晨,一個小女孩走進了麻省理工辦公室,要為她自己打造的單引擎飛機申請認證。她是 Sabrina Pasterski,頂著一頭亂髮的 14 歲女孩,並且已經有單獨駕駛飛機的經驗。
( 編按:美國麻省理工有一項重要的工作是為聯邦政府替飛機做適航性認證,看看飛機有沒有合格,能不能安全飛行。)
在 12 歲,其他人連作業都寫不出來的時候,她已經開始自己打造一台飛機。
此舉後來讓她進了麻省理工,雖然一開始她只在麻省理工的候補名單,多虧秘書拿了她之前造飛機的影片給 Allen Haggerty 和 Earll Murman 兩位教授看,她才成功入學。「我們看完影片都嚇傻了,連嘴都合不起來。」Haggerty 說,「她的潛力超乎常人。」Pasterski 也不負期望,不但順利進入麻省理工,還以全校最高的平均分數畢業。
在芝加哥郊區出生長大的她,父母來自古巴,Pasterski 沒有 Facebook 、LinkedIn、Instagram,也沒有智慧手機,不過倒是架了一個叫做 PhysicsGirl 的網站,裡面沒有多餘的裝飾,直接按時間列出一長串的成就和專長,也可以在上面找到她的演說紀錄和論文。
Pasterski 總是全力以赴,選擇的路途也和同儕不太一樣,像是還沒學會開車前,她就先學了開飛機,也積極規劃未來的物理夢,她的人生計畫,總是在挑戰很遠大的目標。
( 編按:美國麻省理工有一項重要的工作是為聯邦政府替飛機做適航性認證,看看飛機有沒有合格,能不能安全飛行。)
在 12 歲,其他人連作業都寫不出來的時候,她已經開始自己打造一台飛機。
此舉後來讓她進了麻省理工,雖然一開始她只在麻省理工的候補名單,多虧秘書拿了她之前造飛機的影片給 Allen Haggerty 和 Earll Murman 兩位教授看,她才成功入學。「我們看完影片都嚇傻了,連嘴都合不起來。」Haggerty 說,「她的潛力超乎常人。」Pasterski 也不負期望,不但順利進入麻省理工,還以全校最高的平均分數畢業。
在芝加哥郊區出生長大的她,父母來自古巴,Pasterski 沒有 Facebook 、LinkedIn、Instagram,也沒有智慧手機,不過倒是架了一個叫做 PhysicsGirl 的網站,裡面沒有多餘的裝飾,直接按時間列出一長串的成就和專長,也可以在上面找到她的演說紀錄和論文。
Pasterski 總是全力以赴,選擇的路途也和同儕不太一樣,像是還沒學會開車前,她就先學了開飛機,也積極規劃未來的物理夢,她的人生計畫,總是在挑戰很遠大的目標。
互動設計
互動設計,又稱交互設計,(英文 Interaction Design, 縮寫 IxD 或者 IaD),是定義、設計人造系統的行為的設計領域。
比爾. 摩格理吉在 20 世紀 80 年代後期提出了互動設計的概念。初始名為"SoftFace",後改名為互動設計。
在 1989 年,Gillian Crampton-Smith 在倫敦的皇家藝術學院建立了互動設計的碩士學位教育(初始名為「電腦相關的設計」,後改名為"互動設計")。2001年,她在 Ivrea 建立了互動設計研究所,專門從事互動設計的研究和教育。目前,全球眾多的教育機構已經開展互動設計的教育。
互動設計在於定義人造物的行為方式 (the "interaction", 即人工製品在特定場景下的反應方式) 相關的介面。
互動設計師首先進行用戶研究相關領域,以及潛在用戶,設計人造物的行為,並從有用性,可用性和情感因素(usefulness, usability and emotional)等方面來評估設計品質。
以一個實際項目為例,從 0 到 1 的產品中,互動設計師如何避免踩坑:https://read01.com/JNozRa.html
比爾. 摩格理吉在 20 世紀 80 年代後期提出了互動設計的概念。初始名為"SoftFace",後改名為互動設計。
在 1989 年,Gillian Crampton-Smith 在倫敦的皇家藝術學院建立了互動設計的碩士學位教育(初始名為「電腦相關的設計」,後改名為"互動設計")。2001年,她在 Ivrea 建立了互動設計研究所,專門從事互動設計的研究和教育。目前,全球眾多的教育機構已經開展互動設計的教育。
互動設計在於定義人造物的行為方式 (the "interaction", 即人工製品在特定場景下的反應方式) 相關的介面。
互動設計師首先進行用戶研究相關領域,以及潛在用戶,設計人造物的行為,並從有用性,可用性和情感因素(usefulness, usability and emotional)等方面來評估設計品質。
以一個實際項目為例,從 0 到 1 的產品中,互動設計師如何避免踩坑:https://read01.com/JNozRa.html
程式語言編年史
程式語言編年史原文
下面這張圖片描繪了整個程式語言的歷史。包括各種程式語言的發明人、程式語言的特點和適用領域、被什麼網站或公司使用等 (檢視完整高清圖)。
之所以會有那麼多不同的程式語言是因為設計程式語言的初衷不同、對語言學習曲線的追求不同、不同程式之間的執行成本差異等。
這麼多的語言中只有一些是常用或實用的。
1951 – Regional Assembly Language
1952 – Autocode
1954 – IPL ( LISP 語言的祖先 )
1955 – FLOW-MATIC ( COBOL 語言的祖先 )
1957 – FORTRAN ( 第一個編譯型語言 )
1957 – COMTRAN ( COBOL 語言的祖先 )
1958 – LISP
1958 – ALGOL 58
1959 – FACT ( COBOL 語言的祖先 )
1959 – COBOL
1959 – RPG
1962 – APL
1962 – Simula
1962 – SNOBOL
1963 – CPL ( C 語言的祖先 )
1964 – BASIC
1964 – PL/I
1966 – JOSS
1967 – BCPL ( C 語言的祖先 )
1968 – Logo
1969 – B ( C 語言的祖先 )
1970 – Pascal
1970 – Forth
1972 – C
1972 – Smalltalk
1972 – Prolog
1973 – ML
1975 – Scheme
1978 – SQL
1980 – C++ ( C 語言變化的自然演進,於1983年更名 )
1983 – Ada
1984 – Common Lisp
1984 – MATLAB
1985 – Eiffel
1986 – Objective-C
1986 – Erlang
1987 – Perl
1988 – Tcl
1988 – Mathematica
1989 – FL
1990 – Haskell
1991 – Python
1991 – Visual Basic
1993 – Ruby
1993 – Lua
1994 – CLOS ( ANSI Common Lisp 的一部分 )
1995 – Java
1995 – Delphi ( Object Pascal )
1995 – JavaScript
1995 – PHP
1996 – WebDNA
1997 – Rebol
1999 – D
2000 – ActionScript
2001 – C#
2001 – Visual Basic .NET
2002 – F#
2003 – Groovy
2003 – Scala
2007 – Clojure
2009 – Go
2011 – Dart
Learning curve of programming language:http://prog3.com/article/2014-12-29/2823340-programming-language
圖檔來源:IEEE 公布 2016 年熱門程式語言排行榜
https://www.bnext.com.tw/article/40380/BN-2016-07-28-180528-218
圖檔來源:https://read01.com/DKEzmP.html
一個有趣的程式語言與魔戒角色對照表,圖檔來源:http://i.imgur.com/B6xhPDd.jpg
對照另一個有趣比較:程式語言與金庸小說中的絕世武功 (資料來源:http://pydoing.blogspot.tw/)
C 比之九陰真經,學會並掌握指標,天下無敵。
C++ 比之龍象般若功,有十三層,但修煉不易,無人超過第十層。
C# 比之彈指神通,高手運用手指的巧勁就能施展。
Java 比之獨孤九劍,敗中變化出的招式,不限平台的 JVM 。
JavaScript 比之胡家刀法,六字訣變幻莫測,瀏覽器上都能運作。
Objective-C 比之六脈神劍,獨家不傳絕技。
Perl 比之龍爪手,少林正宗武學,幾乎 Linux 高手必備。
PHP 比之黯然銷魂掌,需要深厚內力才能使出。
Python 比之降龍十八掌,簡單卻威力強大。
Ruby 比之乾坤大挪移,這要用過了才會知道。
Swift 比之一陽指,六脈神劍的精髓,本來同樣是獨家不傳絕技,不過現在 open source 了。
下面這張圖片描繪了整個程式語言的歷史。包括各種程式語言的發明人、程式語言的特點和適用領域、被什麼網站或公司使用等 (檢視完整高清圖)。
之所以會有那麼多不同的程式語言是因為設計程式語言的初衷不同、對語言學習曲線的追求不同、不同程式之間的執行成本差異等。
這麼多的語言中只有一些是常用或實用的。
1951 – Regional Assembly Language
1952 – Autocode
1954 – IPL ( LISP 語言的祖先 )
1955 – FLOW-MATIC ( COBOL 語言的祖先 )
1957 – FORTRAN ( 第一個編譯型語言 )
1957 – COMTRAN ( COBOL 語言的祖先 )
1958 – LISP
1958 – ALGOL 58
1959 – FACT ( COBOL 語言的祖先 )
1959 – COBOL
1959 – RPG
1962 – APL
1962 – Simula
1962 – SNOBOL
1963 – CPL ( C 語言的祖先 )
1964 – BASIC
1964 – PL/I
1966 – JOSS
1967 – BCPL ( C 語言的祖先 )
1968 – Logo
1969 – B ( C 語言的祖先 )
1970 – Pascal
1970 – Forth
1972 – C
1972 – Smalltalk
1972 – Prolog
1973 – ML
1975 – Scheme
1978 – SQL
1980 – C++ ( C 語言變化的自然演進,於1983年更名 )
1983 – Ada
1984 – Common Lisp
1984 – MATLAB
1985 – Eiffel
1986 – Objective-C
1986 – Erlang
1987 – Perl
1988 – Tcl
1988 – Mathematica
1989 – FL
1990 – Haskell
1991 – Python
1991 – Visual Basic
1993 – Ruby
1993 – Lua
1994 – CLOS ( ANSI Common Lisp 的一部分 )
1995 – Java
1995 – Delphi ( Object Pascal )
1995 – JavaScript
1995 – PHP
1996 – WebDNA
1997 – Rebol
1999 – D
2000 – ActionScript
2001 – C#
2001 – Visual Basic .NET
2002 – F#
2003 – Groovy
2003 – Scala
2007 – Clojure
2009 – Go
2011 – Dart
Learning curve of programming language:http://prog3.com/article/2014-12-29/2823340-programming-language
圖檔來源:IEEE 公布 2016 年熱門程式語言排行榜
https://www.bnext.com.tw/article/40380/BN-2016-07-28-180528-218
圖檔來源:https://read01.com/DKEzmP.html
一個有趣的程式語言與魔戒角色對照表,圖檔來源:http://i.imgur.com/B6xhPDd.jpg
對照另一個有趣比較:程式語言與金庸小說中的絕世武功 (資料來源:http://pydoing.blogspot.tw/)
C 比之九陰真經,學會並掌握指標,天下無敵。
C++ 比之龍象般若功,有十三層,但修煉不易,無人超過第十層。
C# 比之彈指神通,高手運用手指的巧勁就能施展。
Java 比之獨孤九劍,敗中變化出的招式,不限平台的 JVM 。
JavaScript 比之胡家刀法,六字訣變幻莫測,瀏覽器上都能運作。
Objective-C 比之六脈神劍,獨家不傳絕技。
Perl 比之龍爪手,少林正宗武學,幾乎 Linux 高手必備。
PHP 比之黯然銷魂掌,需要深厚內力才能使出。
Python 比之降龍十八掌,簡單卻威力強大。
Ruby 比之乾坤大挪移,這要用過了才會知道。
Swift 比之一陽指,六脈神劍的精髓,本來同樣是獨家不傳絕技,不過現在 open source 了。
Rust
Rust 是一個由 Mozilla 主導開發的通用、編譯型程式語言。它的設計準則為「安全,並行,實用」,支援函數式,並行式,程序式以及物件導向的編程風格。
Rust 語言原本是 Mozilla 員工 Graydon Hoare 的私人計畫,而 Mozilla 於 2009 年開始贊助這個計畫,並且在 2010 年首次揭露了它的存在。
Rust 是在完全開放的情況下進行開發,並且相當歡迎社群的回饋。在 1.0 穩定版之前,語言設計也因為透過撰寫 Servo 網頁瀏覽器排版引擎和 rustc 編譯器本身,而有進一步的改善。雖然它由 Mozilla 資助,但它其實是一個共有專案,有很大部分的代碼是來自於社群的貢獻者。
維基百科:https://en.wikipedia.org/wiki/Rust_(programming_language)
專訪黃東旭:從 Python 到 Go 再到 Rust 的二十載程式設計長路
http://www.readhouse.net/articles/155719950/
Rust 一直自稱是一種系統程式語言,也就是和 C 一樣的 System Program Language。
黃東旭的團隊發現 Rust 規避了很多 C++ 的缺陷,C++ 在開發大規模專案的時候存在一些問題和安全隱憂,也就是說如果 C++ 水平不夠高的話,記憶體洩露、懸掛指針、空指針異常等狀況都會頻繁發生,Rust 會運用很多 PL(Programming Language)領域學術界這些年的創新,嘗試解決這些問題。簡言之,黃東旭認為 Rust 能用更少的程式碼,花費更小的代價去寫出安全的程式,也是 Rust 最突出的特色。Rust 換得這項優勢的代價是把某種程度的複雜工作轉嫁給開發者,而非執行時。如果使用 Java 或 Go,當然也可以很輕易地寫出同樣安全的程式,但是其付出的代價卻變成了執行時 GC(Gabage Collection)的開銷。選擇使用 Rust 後,唯一的代價就是程式師的學習成本會稍微高一些,程式師須要稍微轉變一下思維,這就相當於把一部分複雜度移交給了程式師。
如果一個項目能用 C++ 跟 Rust 寫,黃東旭肯定會選擇 Rust,他認為實際上 Rust 反而比 C++ 更容易上手。
Rust 是一個沒有 GC 的語言,其延遲非常穩定,口號是『Zero Cost』,意思是無執行時開銷,而這一特點能夠使效能最大化,因此在黃東旭看來,無論是資料庫,還是作業系統,亦或是瀏覽器核心,都非常適合使用 Rust。
另外 Rust 做得比較好的一個地方就是它和 C Library 這種 Native Code,或者說跟C 語言的互動,其代價確實很小,所以很多時候可以把 Rust 當作一個高效能的膠水語言,比如說一個系統的底層要用 RocksDB,或者用一些 C 的 Library,但是如果在上層需要呼叫時,不管是用 Java、用 JNI 去調用,亦或是使用 Go 的 Cgo 這種框架去調用,其開銷都是很大的。但是如果因此而直接使用 C/C++ 的話,業務開發成本又會比較高,畢竟 C/C++ 這些語言仍然還是比較原始,開發效率相對較低。因此如果使用 Rust 就可以享受這種新語言帶來的開發效率,同時又不會損失掉底層已經寫好的 C 函式庫的效能。
Rust 語言原本是 Mozilla 員工 Graydon Hoare 的私人計畫,而 Mozilla 於 2009 年開始贊助這個計畫,並且在 2010 年首次揭露了它的存在。
Rust 是在完全開放的情況下進行開發,並且相當歡迎社群的回饋。在 1.0 穩定版之前,語言設計也因為透過撰寫 Servo 網頁瀏覽器排版引擎和 rustc 編譯器本身,而有進一步的改善。雖然它由 Mozilla 資助,但它其實是一個共有專案,有很大部分的代碼是來自於社群的貢獻者。
維基百科:https://en.wikipedia.org/wiki/Rust_(programming_language)
專訪黃東旭:從 Python 到 Go 再到 Rust 的二十載程式設計長路
http://www.readhouse.net/articles/155719950/
Rust 一直自稱是一種系統程式語言,也就是和 C 一樣的 System Program Language。
黃東旭的團隊發現 Rust 規避了很多 C++ 的缺陷,C++ 在開發大規模專案的時候存在一些問題和安全隱憂,也就是說如果 C++ 水平不夠高的話,記憶體洩露、懸掛指針、空指針異常等狀況都會頻繁發生,Rust 會運用很多 PL(Programming Language)領域學術界這些年的創新,嘗試解決這些問題。簡言之,黃東旭認為 Rust 能用更少的程式碼,花費更小的代價去寫出安全的程式,也是 Rust 最突出的特色。Rust 換得這項優勢的代價是把某種程度的複雜工作轉嫁給開發者,而非執行時。如果使用 Java 或 Go,當然也可以很輕易地寫出同樣安全的程式,但是其付出的代價卻變成了執行時 GC(Gabage Collection)的開銷。選擇使用 Rust 後,唯一的代價就是程式師的學習成本會稍微高一些,程式師須要稍微轉變一下思維,這就相當於把一部分複雜度移交給了程式師。
如果一個項目能用 C++ 跟 Rust 寫,黃東旭肯定會選擇 Rust,他認為實際上 Rust 反而比 C++ 更容易上手。
Rust 是一個沒有 GC 的語言,其延遲非常穩定,口號是『Zero Cost』,意思是無執行時開銷,而這一特點能夠使效能最大化,因此在黃東旭看來,無論是資料庫,還是作業系統,亦或是瀏覽器核心,都非常適合使用 Rust。
另外 Rust 做得比較好的一個地方就是它和 C Library 這種 Native Code,或者說跟C 語言的互動,其代價確實很小,所以很多時候可以把 Rust 當作一個高效能的膠水語言,比如說一個系統的底層要用 RocksDB,或者用一些 C 的 Library,但是如果在上層需要呼叫時,不管是用 Java、用 JNI 去調用,亦或是使用 Go 的 Cgo 這種框架去調用,其開銷都是很大的。但是如果因此而直接使用 C/C++ 的話,業務開發成本又會比較高,畢竟 C/C++ 這些語言仍然還是比較原始,開發效率相對較低。因此如果使用 Rust 就可以享受這種新語言帶來的開發效率,同時又不會損失掉底層已經寫好的 C 函式庫的效能。
Go 語言
我給朋友推薦 Go 有三個原因,安全性、生產力和並發性:
安全
個人而言,你和我或許完全有能力在 C 中編寫程序,既不會洩漏內存,也不會不安全地重複使用內存。然而,整體上,即使有超過 40 年的經驗,用 C 的程序員也無法可靠地這樣做。
儘管靜態代碼分析、valgrind、tsan 以及 “-Werror” 已經存在了幾十年,卻很少有證據表明這些工具被廣泛認可,更不用說廣泛採用。總而言之,事實表明,程序員根本無法安全地管理自己的內存。現在是離開 C 的時候了。
Go 不需要程序員直接管理內存,所有內存分配都由語言運行時自行管理,使用前初始化,必要時檢查邊界。它肯定不是提供這些安全保障的第一個主流語言,Java(1995)可能是該冠軍的競爭者。關鍵是,世界對不安全的編程語言沒有胃口,所以人們默認認為,Go 是內存安全的。
開發人員生產力
從 20 世紀 70 年代末,開發人員的時間變得比硬件所耗費的時間更昂貴了。開發人員的生產力是一個不斷擴展的話題,但它歸結為這一點:你花了多少時間做有用的工作,又有多少時間等待編譯器或者失望地迷失在外部代碼庫中。
有個笑話說 Go 是在等待 C ++ 程序編譯時開發的。快速編譯是 Go 的一個重要功能,也是吸引新開發人員的關鍵工具。雖然編譯速度仍然是一個永久的戰場,但公平地說,在其他語言中需要幾分鐘的編譯,在 Go 中只需要幾秒鐘。
Go 程序員意識到生產力的更根本的問題是代碼是為了讀而寫的,所以將代碼的閱讀行為放在編寫之上。 Go 通過工具和自定義來強制所有代碼格式化成特定的樣式。這消除了學習項目特定語言的方言時的困難,並有助於發現錯誤,因為它們看上去就是不正確。
由於專注於分析和機器輔助,Go 開發人員開始採用越來越多的工具來發現常見的編碼錯誤,這種工具從來沒有在C 語言開發者中產生共鳴- Go 開發人員希望工具幫助他們保持代碼清潔。
並發性
十多年來,芯片設計師一直在警告免費午餐將會結束。從最低端的手機到最耗電的服務器,硬件的並行性以更多、更慢、堆砌 cpu 內核的形式出現,但只有當你的語言可以利用它們才有意義。因此,並發特性需要內置到我們編寫的要在今天的硬件上運行的軟件中。
通過提供一種基於協程的輕量級並發模型,或者是 Go 中已知的 goroutines,Go 超越了那些暴露操作系統的多進程或多線程並行模型的語言。 goroutines 允許程序員避開復雜的回調,而語言運行時確保有足夠的線程來保持你的內核的活躍。
總結
我給朋友推薦 Go 有三個原因:安全性、生產力和並發性。有些語言可以涵蓋一個也有可能是兩個方面,但是這三個方面的結合使得 Go 成為主流程序員的絕佳選擇。
https://zhuanlan.zhihu.com/p/26397991
https://dave.cheney.net/2017/03/20/why-go
為什麼要從其他語言轉換到 Go?Go 語言如何帶給公司更大的利益?否則為什麼要多花時間跟人力去嘗試 Go 語言。如果團隊要建置一個商業 Web 服務,選擇 Go 語言的最主要優點包括如下:
● 快速又簡單部署
● 支援跨平台編譯
● 保護原始程式碼
● 善用多核心處理
https://blog.wu-boy.com/2017/01/business-benefits-of-go/
http://cepave.com/why-they-choose-golang/
https://kknews.cc/tech/k8ngmev.html
Go,為了方便瀏覽和識別,部分人稱其為 Golang,是 Google 開發的一種編譯式並具有垃圾回收功能的程式語言。Go 語言於2009年11月正式宣布推出,成為開放原始碼專案,並在 Linux、Mac OS X、Windows 平台上實現。
Go 語言的語法接近 C 語言,但是對於變數的聲明是不同的。與 C++ 相比,Go 語言並不包括如例外處理、繼承、泛型等功能,但增加了 Slice、並行、管道、垃圾回收、Interface 等特性的語言級支援。
在 Go 語言中有幾項規定,而且這些是強制的,當不符合以下規定時編譯將會產生錯誤。
1. 每行程式結束後不需要撰寫分號(;)。
2. 花括號({)不能夠換行放置。
3. IF 判斷式和 For 迴圈不需要以小括號包覆起來。
Go 語言亦有內建 gofmt 工具,能夠自動整理程式碼多餘的空白、變數名稱對齊、並將對齊空白轉換成 Tab。
Go 語言的重要特色在於容易使用的併行設計,這個方法叫做 Goroutine,透過 Goroutine 能夠讓程式以異步的方式執行,而不需要擔心一個函式導致程式阻塞,因此 Go 語言也非常適合網路應用。
讓我們假設有個程式,裡面有兩個函式:
func main() {
// 假設 loop 是一個會重複執行十次的迴圈函式。
// 迴圈執行完畢才會往下執行。
loop()
// 執行另一個迴圈。
loop()
}
在這個時候我們可以透過 go 來讓其中一個函式以並行的方式執行,如此一來就不需要等待該函式執行完後才能執行下一個函式。
func main() {
// 透過 `go`,我們可以把這個函式以並行執行,
// 如此一來這個函式就不會阻塞程式的執行。
go loop()
// 執行另一個迴圈。
loop()
}
Goroutine 是類似線程的概念,但並不是線程。線程屬於系統層面,通常來說建立一個新的線程會消耗較多的資源且管理不易。而 Goroutine 就像輕量級的線程,但被稱為併發,一個 Go 程式可以執行超過數萬個 Goroutine,並且這些效能都是原生級的,隨時都能夠關閉、結束。透過 GOMAXPROCS 參數能夠限制 Gorotuine 可以佔用幾個系統線程來避免失控。
在內建的官方套件中也不時能夠看見 Goroutine 的應用,像是 net/http 中用來監聽網路服務的函式實際上就是建立一個不斷執行迴圈的 Goroutine。
維基百科:https://en.wikipedia.org/wiki/Go_(programming_language)
Go 是由 Google 設計用來解決 Google 的問題:http://www.csdn.net/article/2014-12-09/2823025
在 Go 語言中,語法規定了我們敲入怎樣的字元才能夠撰寫出 Go 語言編輯器認可的程式。
Go 語言的所有原始程式碼都必須是 Unicode 編碼標準的 UTF-8 格式。
Go 語言的語言符號可分為:識別符號 (identifier)、關鍵字 (keyword)、運算符號 (operator)、分隔符號 (delimiter)、以及字面常數 (literal)。
識別符號可以由許多字母、底線 "_" 、和數字組成,而第一個字元必須為字母。
一個可匯出的識別符號需要滿足兩個前提條件,第一個條件是關於字母的大小寫差異,當第一個字元是大寫時,其存取權限為「公開的」,小寫的存取權限為「套件級私有的」。第二個條件是關於識別符號必須是被宣告在一個程式套件中的變數或類型的名稱,或是屬於某個結構類型的欄位名稱或方法的名稱。
Go 語言的關鍵字只有 25 個,可以分為如下 3 大類。
1. 程式宣告:import, package
2. 程式實體宣告和定義:const, chan, func, interface, map, struct, type, var
3. 程式流程控制:go, select, break, case, continue, default, defer, else, fallthrough, for, goto, if, range, return, switch
Golang: Understanding 'null' and nil => https://newfivefour.com/golang-null-nil.html
Golang 的 if...else、switch 語法:https://openhome.cc/Gossip/Go/IfSElsewitch.html
與 C/C++ 或 Java 等語言不同的是,Go 的 switch 比對成功後,不會自動往下執行,因而不用撰寫 break,有多個條件想符合時,在同一 case 中使用逗號區隔。如果真的想在比對成功後,往下一個 case 中的陳述執行,可以使用 fallthrough。
Go 語言支援的型態與其範圍:https://ithelp.ithome.com.tw/articles/10156046
Golang之類型及轉換介紹:https://kknews.cc/zh-tw/other/j69mqyp.html
在 Golang 如何精確計算小數:https://imhanjm.com/2017/08/27/go%E5%A6%82%E4%BD%95%E7%B2%BE%E7%A1%AE%E8%AE%A1%E7%AE%97%E5%B0%8F%E6%95%B0-decimal%E7%A0%94%E7%A9%B6/
Go 是 物件導向語言 嗎?
從歷史來看,物件導向觀念起於 Simula 語言,歷經 Smalltalk-80 等融入語言之中,在 Java 話題性高的年代風行草偃,但隨之而來的就是各種批評,有開發者甚至棄之如敝屣,在新生代的語言中,Go 語言乍看令人迷惑,表面上看起來有物件導向的概念,實際上卻又似乎不是那麼一回事。
如果在網路上搜尋,可以找到無數種不認同物件導向的理由。有人認為,它創造了太多的名詞與產物,封裝、繼承、多型、模式、框架、UML 與各種方法論。
在抨擊物件導向的相關文件中,儘管理由眾多,然而其中必定會提到的一點就是繼承,特別是只為了重新使用程式碼而使用了繼承,卻因為繼承的階層性反而帶來了許多困擾。
對此,Erlang 的創建者 Joe Armstrong 有個傳神的比喻:「你只是要根香蕉,結果卻得到一隻拿著香蕉的大猩猩,還有整座叢林。」
詳見:http://www.ithome.com.tw/voice/107839
Golang 編譯出來的執行檔,本身就能擔任 Web Server 的功能:
package main
import (
"fmt"
"net/http"
)
type Hello struct{}
func (h Hello) ServeHTTP(w http.ResponseWriter, r *http.Request) {
fmt.Fprint(w, "<h1>你好!</h1>")
}
func main() {
var h Hello
http.ListenAndServe("localhost:4000", h)
}
執行後,使用 Browser 打開網址,如下圖:
https://golang.org/doc/articles/wiki/
https://golang.org/pkg/net/http/
Golang 適合做 web 開發嗎:https://www.zhihu.com/question/30649593
從 PHP 轉換到 Golang 的筆記:
https://github.com/YamiOdymel/PHP-to-Golang/
https://yami.io/php-to-golang/
[ 用 Golang 完整實作出一個網站的過程中可能會需要的範例 ]
給初學者的範例:https://openhome.cc/Gossip/Go/HelloWorld.html
Golang 的 Package 之組織方式 (关于 golang 中包(package)的二三事儿):http://www.cnblogs.com/dajianshi/p/3596492.html
Go 語言實現處理表單輸入範例:http://www.jb51.net/article/62552.htm
GO 與 MySQL 的結合使用
http://www.grdtechs.com/2016/11/11/go-use-mysql/
https://segmentfault.com/a/1190000003036452
http://studygolang.com/articles/3022
http://go-database-sql.org/
https://github.com/Go-SQL-Driver/MySQL/wiki/Examples
連結資料庫
func main() {
db, err := sql.Open("mysql", "user:password@tcp(127.0.0.1:3306)/database?charset=utf8")
if err != nil {
log.Fatal(err)
}
defer db.Close()
}
MySQL 欄位使用 Null 值時需要額外處理:https://golang.org/pkg/database/sql/#NullString
在開發動態網頁時,我們常常將不變的部分提出成為模板,可變部分通過後端程式來生成動態網頁,Golang 就此提供了 text/template 與 html/template package 支持:
http://ju.outofmemory.cn/entry/255384
http://www.admpub.com/blog/post-221.html
https://github.com/astaxie/build-web-application-with-golang/blob/master/zh/07.4.md
https://www.google.com.tw/search?q=渲染模板+golang
http://blog.jiamin.info/2016/12/29/Golang%20Template%20%E7%AE%80%E6%98%8E%E7%AC%94%E8%AE%B0/
https://golang.org/pkg/text/template/#example_Template
https://golang.org/pkg/html/template
http://www.nljb.net/default/Golang-%E5%81%9A%E8%87%AA%E5%B7%B1%E7%9A%84%E5%8A%A8%E6%80%81%E7%BD%91%E7%AB%99/
http://www.ctolib.com/topics/2712.html
https://segmentfault.com/a/1190000010283841
http://blog.xiayf.cn/2013/11/01/unescape-html-in-golang-html_template/
表單驗證 範例:https://kknews.cc/other/z63p2ng.html
留言板 範例:http://www.ctolib.com/topics-41088.html
在 template 中多層循環:
https://www.google.com.tw/search?q=golang+range+%E6%A8%A1%E6%9D%BF
http://golangtc.com/t/50d6bf54320b527e6d00001a
https://github.com/jimmykuu/gopher/blob/master/templates/topic/show.html
Golang 開發 web 應用時的靜態文件處理方法:
http://blog.csdn.net/yavobo/article/details/9374221
http://www.01happy.com/golang-http-file-server/
http://blog.csdn.net/yavobo/article/details/9380011
https://gist.github.com/erasin/6339684
如何在根目錄同時提供主頁與靜態文件,比如說 robots.txt, sitemap.xml,favicon.ico 等必須放在根目錄的檔案:
https://stackoverflow.com/questions/14086063/serve-homepage-and-static-content-from-root
https://stackoverflow.com/questions/28793619/golang-what-to-use-http-servefile-or-http-fileserver
Cookie 的使用:
http://www.jianshu.com/p/3b84aec28855
http://studygolang.com/articles/5905
http://www.grdtechs.com/2016/07/10/go-setcookie/
https://segmentfault.com/a/1190000004556040
Cookies 的替代品:在與伺服器傳輸資料時,通過在位址後面添加唯一查詢串,讓伺服器識別是否合法用戶,也可以避免使用Cookie。
Golang 的字串處理方式:
https://justjii-justdrink.rhcloud.com/archives/1351
http://ithelp.ithome.com.tw/articles/10158675
隨機字串演算法效率評估測試:http://codeday.me/bug/20170607/22281.html
使用 fmt.Sprintf 或標準函數庫做類型轉換的差異:http://liyangliang.me/posts/2014/06/donnot-use-fmt-sprintf-for-type-conversion/
Go 語言中操作 slice 的技巧:http://tsunghao.github.io/post/2015/02/useful-tips-of-slice-tricks-in-golang/
將矩陣存入 Cookie (将map存入cookie):https://my.oschina.net/tongjh/blog/266051
Json 編碼 / 解碼:
http://lolikitty.pixnet.net/blog/post/129844768-golang-%2C-go-%E8%AA%9E%E8%A8%80-%E5%85%A5%E9%96%80%EF%BC%9Ajson-%E7%B7%A8%E7%A2%BC---%E8%A7%A3%E7%A2%BC
http://www.cnblogs.com/fengbohello/p/4665883.html
用 Go 語言實現 PHP 的 serialize() 和 unserialize() 函數:
https://github.com/wulijun/go-php-serialize
https://github.com/yvasiyarov/php_session_decoder
獲取 當前的 URL:
https://www.jianshu.com/p/f95558a49e98
http://www.qingpingshan.com/jb/go/111280.html
Golang 的 time package:http://www.cnblogs.com/zhepama/archive/2013/04/12/3017230.html
時間的加減:https://studygolang.com/articles/8919
SHA256 散列實作:https://stackoverflow.com/questions/30956244/golang-base64-encoded-sha256-digest-of-the-user-s-password
https://play.golang.org/p/oFBePRQzhN
PBE加密算法概念:http://baike.baidu.com/item/PBE/13013200
用途於密碼的標準作法:https://github.com/elithrar/simple-scrypt
實作橢圓曲線加密算法:https://www.urecv.com/archives/135
交叉編譯:http://dmdgeeker.com/goBook/docs/ch01/cross_compile.html
在 Windows 下 cmd 進行交叉編譯
使用 go env 查看 Go 相關環境變數
# 編譯到 linux 64bit
GOOS=linux
GOARCH=amd64
# 編譯到 linux 32bit
GOOS=linux
GOARCH=386
# 編譯到 windows 64bit
GOOS=windows
GOARCH=amd64
# 編譯到 windows 32bit
GOOS=windows
GOARCH=386
# 編譯到 Mac OS X 64bit
GOOS=darwin
GOARCH=amd64
https://golang.org/cmd/cgo/
The cgo tool is enabled by default for native builds on systems where it is expected to work. It is disabled by default when cross-compiling. You can control this by setting the CGO_ENABLED environment variable when running the go tool: set it to 1 to enable the use of cgo, and to 0 to disable it. The go tool will set the build constraint "cgo" if cgo is enabled.
商業軟體一定要刪除 debug 信息 go build -ldflags "-s -w" ( 破解 Go 執行檔的相關討論 ):
https://gocn.io/question/487
http://golangtc.com/t/5639e100b09ecc3197000004
-w 禁止生成debug信息,注意使用该选项后,无法使用 gdb 进行调试
-s 禁用符号表
可以使用 go tool link --help 查看 ldflags 各参数含义
https://javasgl.github.io/go-build-args/
Go 內嵌靜態資源:
使用 Go 開發應用的時候,有時會遇到需要讀取靜態資源的情況。比如開發 Web 應用,程式需要加載模板文件生成輸出的 HTML。在程式部署的時候,除了發布可執行檔,還需要發布靜態資源。
這給發布過程增加了一些麻煩。既然發佈單獨一個可執行檔是非常簡單的操作,就有人會想辦法把靜態資源也打包進 可執行檔 中,比如說 go-bindata, go.rice, esc 等等。
詳閱 http://blog.golangclub.com/articles/5068
怎麼學習 Golang:https://gocn.io/question/4
《Effective Go》中英双语版:https://bingohuang.gitbooks.io/effective-go-zh-en/content/
Go 語言聖經(中文版):https://wizardforcel.gitbooks.io/gopl-zh/content/
Golang Basic:http://blog.jex.tw/blog/2014/01/20/golang-basic/
Go 快速入門:http://wdxtub.com/2016/08/11/golang-first-step/
Go Web 编程:
https://www.kancloud.cn/kancloud/web-application-with-golang/44105
http://www.runoob.com/go/go-tutorial.html
https://astaxie.gitbooks.io/build-web-application-with-golang/content/zh/
http://dmdgeeker.com/goBook/index.html
https://zengweigang.gitbooks.io/core-go/content/
Youtube 教程:
https://www.youtube.com/playlist?list=PL7vIp5DG7s8C50r0yt8U6EuH2kxYG5XMD
Go: SQL Databases:
https://www.alexedwards.net/blog/practical-persistence-sql
Golang 新手可能會踩的50個坑
https://segmentfault.com/a/1190000013739000
Golang 代码示例汇总持续更新:http://www.01happy.com/golang-example/
Golang concepts from an OOP point of view:https://github.com/luciotato/golang-notes/blob/master/OOP.md
https://openhome.cc/Gossip/Go/index.html
http://www.runoob.com/go/go-tutorial.html
https://hsinyu.gitbooks.io/golang_note/content/index.html
Go 程式設計導論:http://golang-zhtw.netdpi.net/
初學 Golang 30 天系列:http://ithelp.ithome.com.tw/users/20079210/ironman/721
各種加密算法在 Go 語言中的使用方式:https://blog.51cto.com/634435/2117647
30天就 Go:教你打造 LINE 自動回話機器人 系列:http://ithelp.ithome.com.tw/users/20103452/ironman/1211
http://www.golang-book.com/books/intro
http://www.wklken.me/posts/2014/03/02/01-intro.html
Go 指令教學:https://github.com/hyper0x/go_command_tutorial
Golang 官方網站,可以線上執行、分享程式碼、參考文件等相關內容:https://golang.org/
Go 原始碼:https://golang.org/src
官網下的功能,可以說是 Golang 練功房:https://tour.golang.org/welcome/1
各種 Golang 程式碼範例:https://gobyexample.com/
Go packages 的文件,包含 opensource 的 package:
https://godoc.org/
https://github.com/golang
Google Go 語言從入門到應用必備開源項目:https://kknews.cc/tech/anpxrq6.html
有的沒的 Go 筆記:http://www.evanlin.com/weekly-note-20150206/
Go 語言的學習資源:http://www.ituring.com.cn/tupubarticle/3651
旨在成為下一代的 robotics/IoT framework:https://gobot.io/
在 Go 語言用一行程式碼自動化安裝且更新 Let’s Encrypt 憑證:https://blog.wu-boy.com/2017/04/1-line-letsencrypt-https-servers-in-golang/
用 Golang 寫 Command line 工具:https://blog.wu-boy.com/2017/02/write-command-line-in-golang/
以 Go 語言快速實作 HTTP GET/POST API:http://cepave.com/http-restful-api-with-golang/
Golang 如何處理多國使用者的網頁輸出:http://www.evanlin.com/go-generate-content-by-user-lang/
Go 語言的錯誤訊息處理:https://blog.wu-boy.com/2017/03/error-handler-in-golang/
大家使用 Go 語言的心得分享與社區:
2014 ~ 2017 論壇討論 https://www.douban.com/note/353996627/
2015 某網友的個人分享文章 https://read01.com/kgaRQ.html
2015 年中開始採用 Golang 的團隊之經驗分享 https://gocn.io/article/23
Go 與 桌面 (GUI):https://www.zhihu.com/question/22483719
Golang 中國:http://golangtc.com
Go 語言中文網:http://studygolang.com/
安全
個人而言,你和我或許完全有能力在 C 中編寫程序,既不會洩漏內存,也不會不安全地重複使用內存。然而,整體上,即使有超過 40 年的經驗,用 C 的程序員也無法可靠地這樣做。
儘管靜態代碼分析、valgrind、tsan 以及 “-Werror” 已經存在了幾十年,卻很少有證據表明這些工具被廣泛認可,更不用說廣泛採用。總而言之,事實表明,程序員根本無法安全地管理自己的內存。現在是離開 C 的時候了。
Go 不需要程序員直接管理內存,所有內存分配都由語言運行時自行管理,使用前初始化,必要時檢查邊界。它肯定不是提供這些安全保障的第一個主流語言,Java(1995)可能是該冠軍的競爭者。關鍵是,世界對不安全的編程語言沒有胃口,所以人們默認認為,Go 是內存安全的。
開發人員生產力
從 20 世紀 70 年代末,開發人員的時間變得比硬件所耗費的時間更昂貴了。開發人員的生產力是一個不斷擴展的話題,但它歸結為這一點:你花了多少時間做有用的工作,又有多少時間等待編譯器或者失望地迷失在外部代碼庫中。
有個笑話說 Go 是在等待 C ++ 程序編譯時開發的。快速編譯是 Go 的一個重要功能,也是吸引新開發人員的關鍵工具。雖然編譯速度仍然是一個永久的戰場,但公平地說,在其他語言中需要幾分鐘的編譯,在 Go 中只需要幾秒鐘。
Go 程序員意識到生產力的更根本的問題是代碼是為了讀而寫的,所以將代碼的閱讀行為放在編寫之上。 Go 通過工具和自定義來強制所有代碼格式化成特定的樣式。這消除了學習項目特定語言的方言時的困難,並有助於發現錯誤,因為它們看上去就是不正確。
由於專注於分析和機器輔助,Go 開發人員開始採用越來越多的工具來發現常見的編碼錯誤,這種工具從來沒有在C 語言開發者中產生共鳴- Go 開發人員希望工具幫助他們保持代碼清潔。
並發性
十多年來,芯片設計師一直在警告免費午餐將會結束。從最低端的手機到最耗電的服務器,硬件的並行性以更多、更慢、堆砌 cpu 內核的形式出現,但只有當你的語言可以利用它們才有意義。因此,並發特性需要內置到我們編寫的要在今天的硬件上運行的軟件中。
通過提供一種基於協程的輕量級並發模型,或者是 Go 中已知的 goroutines,Go 超越了那些暴露操作系統的多進程或多線程並行模型的語言。 goroutines 允許程序員避開復雜的回調,而語言運行時確保有足夠的線程來保持你的內核的活躍。
總結
我給朋友推薦 Go 有三個原因:安全性、生產力和並發性。有些語言可以涵蓋一個也有可能是兩個方面,但是這三個方面的結合使得 Go 成為主流程序員的絕佳選擇。
https://zhuanlan.zhihu.com/p/26397991
https://dave.cheney.net/2017/03/20/why-go
為什麼要從其他語言轉換到 Go?Go 語言如何帶給公司更大的利益?否則為什麼要多花時間跟人力去嘗試 Go 語言。如果團隊要建置一個商業 Web 服務,選擇 Go 語言的最主要優點包括如下:
● 快速又簡單部署
● 支援跨平台編譯
● 保護原始程式碼
● 善用多核心處理
https://blog.wu-boy.com/2017/01/business-benefits-of-go/
http://cepave.com/why-they-choose-golang/
https://kknews.cc/tech/k8ngmev.html
Go,為了方便瀏覽和識別,部分人稱其為 Golang,是 Google 開發的一種編譯式並具有垃圾回收功能的程式語言。Go 語言於2009年11月正式宣布推出,成為開放原始碼專案,並在 Linux、Mac OS X、Windows 平台上實現。
Go 語言的語法接近 C 語言,但是對於變數的聲明是不同的。與 C++ 相比,Go 語言並不包括如例外處理、繼承、泛型等功能,但增加了 Slice、並行、管道、垃圾回收、Interface 等特性的語言級支援。
在 Go 語言中有幾項規定,而且這些是強制的,當不符合以下規定時編譯將會產生錯誤。
1. 每行程式結束後不需要撰寫分號(;)。
2. 花括號({)不能夠換行放置。
3. IF 判斷式和 For 迴圈不需要以小括號包覆起來。
Go 語言亦有內建 gofmt 工具,能夠自動整理程式碼多餘的空白、變數名稱對齊、並將對齊空白轉換成 Tab。
Go 語言的重要特色在於容易使用的併行設計,這個方法叫做 Goroutine,透過 Goroutine 能夠讓程式以異步的方式執行,而不需要擔心一個函式導致程式阻塞,因此 Go 語言也非常適合網路應用。
讓我們假設有個程式,裡面有兩個函式:
func main() {
// 假設 loop 是一個會重複執行十次的迴圈函式。
// 迴圈執行完畢才會往下執行。
loop()
// 執行另一個迴圈。
loop()
}
在這個時候我們可以透過 go 來讓其中一個函式以並行的方式執行,如此一來就不需要等待該函式執行完後才能執行下一個函式。
func main() {
// 透過 `go`,我們可以把這個函式以並行執行,
// 如此一來這個函式就不會阻塞程式的執行。
go loop()
// 執行另一個迴圈。
loop()
}
Goroutine 是類似線程的概念,但並不是線程。線程屬於系統層面,通常來說建立一個新的線程會消耗較多的資源且管理不易。而 Goroutine 就像輕量級的線程,但被稱為併發,一個 Go 程式可以執行超過數萬個 Goroutine,並且這些效能都是原生級的,隨時都能夠關閉、結束。透過 GOMAXPROCS 參數能夠限制 Gorotuine 可以佔用幾個系統線程來避免失控。
在內建的官方套件中也不時能夠看見 Goroutine 的應用,像是 net/http 中用來監聽網路服務的函式實際上就是建立一個不斷執行迴圈的 Goroutine。
維基百科:https://en.wikipedia.org/wiki/Go_(programming_language)
Go 是由 Google 設計用來解決 Google 的問題:http://www.csdn.net/article/2014-12-09/2823025
在 Go 語言中,語法規定了我們敲入怎樣的字元才能夠撰寫出 Go 語言編輯器認可的程式。
Go 語言的所有原始程式碼都必須是 Unicode 編碼標準的 UTF-8 格式。
Go 語言的語言符號可分為:識別符號 (identifier)、關鍵字 (keyword)、運算符號 (operator)、分隔符號 (delimiter)、以及字面常數 (literal)。
識別符號可以由許多字母、底線 "_" 、和數字組成,而第一個字元必須為字母。
一個可匯出的識別符號需要滿足兩個前提條件,第一個條件是關於字母的大小寫差異,當第一個字元是大寫時,其存取權限為「公開的」,小寫的存取權限為「套件級私有的」。第二個條件是關於識別符號必須是被宣告在一個程式套件中的變數或類型的名稱,或是屬於某個結構類型的欄位名稱或方法的名稱。
Go 語言的關鍵字只有 25 個,可以分為如下 3 大類。
1. 程式宣告:import, package
2. 程式實體宣告和定義:const, chan, func, interface, map, struct, type, var
3. 程式流程控制:go, select, break, case, continue, default, defer, else, fallthrough, for, goto, if, range, return, switch
Golang: Understanding 'null' and nil => https://newfivefour.com/golang-null-nil.html
Golang 的 if...else、switch 語法:https://openhome.cc/Gossip/Go/IfSElsewitch.html
與 C/C++ 或 Java 等語言不同的是,Go 的 switch 比對成功後,不會自動往下執行,因而不用撰寫 break,有多個條件想符合時,在同一 case 中使用逗號區隔。如果真的想在比對成功後,往下一個 case 中的陳述執行,可以使用 fallthrough。
Go 語言支援的型態與其範圍:https://ithelp.ithome.com.tw/articles/10156046
Golang之類型及轉換介紹:https://kknews.cc/zh-tw/other/j69mqyp.html
在 Golang 如何精確計算小數:https://imhanjm.com/2017/08/27/go%E5%A6%82%E4%BD%95%E7%B2%BE%E7%A1%AE%E8%AE%A1%E7%AE%97%E5%B0%8F%E6%95%B0-decimal%E7%A0%94%E7%A9%B6/
Go 是 物件導向語言 嗎?
從歷史來看,物件導向觀念起於 Simula 語言,歷經 Smalltalk-80 等融入語言之中,在 Java 話題性高的年代風行草偃,但隨之而來的就是各種批評,有開發者甚至棄之如敝屣,在新生代的語言中,Go 語言乍看令人迷惑,表面上看起來有物件導向的概念,實際上卻又似乎不是那麼一回事。
如果在網路上搜尋,可以找到無數種不認同物件導向的理由。有人認為,它創造了太多的名詞與產物,封裝、繼承、多型、模式、框架、UML 與各種方法論。
在抨擊物件導向的相關文件中,儘管理由眾多,然而其中必定會提到的一點就是繼承,特別是只為了重新使用程式碼而使用了繼承,卻因為繼承的階層性反而帶來了許多困擾。
對此,Erlang 的創建者 Joe Armstrong 有個傳神的比喻:「你只是要根香蕉,結果卻得到一隻拿著香蕉的大猩猩,還有整座叢林。」
詳見:http://www.ithome.com.tw/voice/107839
Golang 編譯出來的執行檔,本身就能擔任 Web Server 的功能:
package main
import (
"fmt"
"net/http"
)
type Hello struct{}
func (h Hello) ServeHTTP(w http.ResponseWriter, r *http.Request) {
fmt.Fprint(w, "<h1>你好!</h1>")
}
func main() {
var h Hello
http.ListenAndServe("localhost:4000", h)
}
執行後,使用 Browser 打開網址,如下圖:
https://golang.org/doc/articles/wiki/
https://golang.org/pkg/net/http/
Golang 適合做 web 開發嗎:https://www.zhihu.com/question/30649593
從 PHP 轉換到 Golang 的筆記:
https://github.com/YamiOdymel/PHP-to-Golang/
https://yami.io/php-to-golang/
[ 用 Golang 完整實作出一個網站的過程中可能會需要的範例 ]
給初學者的範例:https://openhome.cc/Gossip/Go/HelloWorld.html
Golang 的 Package 之組織方式 (关于 golang 中包(package)的二三事儿):http://www.cnblogs.com/dajianshi/p/3596492.html
Go 語言實現處理表單輸入範例:http://www.jb51.net/article/62552.htm
GO 與 MySQL 的結合使用
http://www.grdtechs.com/2016/11/11/go-use-mysql/
https://segmentfault.com/a/1190000003036452
http://studygolang.com/articles/3022
http://go-database-sql.org/
https://github.com/Go-SQL-Driver/MySQL/wiki/Examples
連結資料庫
func main() {
db, err := sql.Open("mysql", "user:password@tcp(127.0.0.1:3306)/database?charset=utf8")
if err != nil {
log.Fatal(err)
}
defer db.Close()
}
MySQL 欄位使用 Null 值時需要額外處理:https://golang.org/pkg/database/sql/#NullString
在開發動態網頁時,我們常常將不變的部分提出成為模板,可變部分通過後端程式來生成動態網頁,Golang 就此提供了 text/template 與 html/template package 支持:
http://ju.outofmemory.cn/entry/255384
http://www.admpub.com/blog/post-221.html
https://github.com/astaxie/build-web-application-with-golang/blob/master/zh/07.4.md
https://www.google.com.tw/search?q=渲染模板+golang
http://blog.jiamin.info/2016/12/29/Golang%20Template%20%E7%AE%80%E6%98%8E%E7%AC%94%E8%AE%B0/
https://golang.org/pkg/text/template/#example_Template
https://golang.org/pkg/html/template
http://www.nljb.net/default/Golang-%E5%81%9A%E8%87%AA%E5%B7%B1%E7%9A%84%E5%8A%A8%E6%80%81%E7%BD%91%E7%AB%99/
http://www.ctolib.com/topics/2712.html
https://segmentfault.com/a/1190000010283841
http://blog.xiayf.cn/2013/11/01/unescape-html-in-golang-html_template/
表單驗證 範例:https://kknews.cc/other/z63p2ng.html
留言板 範例:http://www.ctolib.com/topics-41088.html
在 template 中多層循環:
https://www.google.com.tw/search?q=golang+range+%E6%A8%A1%E6%9D%BF
http://golangtc.com/t/50d6bf54320b527e6d00001a
https://github.com/jimmykuu/gopher/blob/master/templates/topic/show.html
Golang 開發 web 應用時的靜態文件處理方法:
http://blog.csdn.net/yavobo/article/details/9374221
http://www.01happy.com/golang-http-file-server/
http://blog.csdn.net/yavobo/article/details/9380011
https://gist.github.com/erasin/6339684
如何在根目錄同時提供主頁與靜態文件,比如說 robots.txt, sitemap.xml,favicon.ico 等必須放在根目錄的檔案:
https://stackoverflow.com/questions/14086063/serve-homepage-and-static-content-from-root
https://stackoverflow.com/questions/28793619/golang-what-to-use-http-servefile-or-http-fileserver
Cookie 的使用:
http://www.jianshu.com/p/3b84aec28855
http://studygolang.com/articles/5905
http://www.grdtechs.com/2016/07/10/go-setcookie/
https://segmentfault.com/a/1190000004556040
Cookies 的替代品:在與伺服器傳輸資料時,通過在位址後面添加唯一查詢串,讓伺服器識別是否合法用戶,也可以避免使用Cookie。
Golang 的字串處理方式:
https://justjii-justdrink.rhcloud.com/archives/1351
http://ithelp.ithome.com.tw/articles/10158675
隨機字串演算法效率評估測試:http://codeday.me/bug/20170607/22281.html
使用 fmt.Sprintf 或標準函數庫做類型轉換的差異:http://liyangliang.me/posts/2014/06/donnot-use-fmt-sprintf-for-type-conversion/
Go 語言中操作 slice 的技巧:http://tsunghao.github.io/post/2015/02/useful-tips-of-slice-tricks-in-golang/
將矩陣存入 Cookie (将map存入cookie):https://my.oschina.net/tongjh/blog/266051
Json 編碼 / 解碼:
http://lolikitty.pixnet.net/blog/post/129844768-golang-%2C-go-%E8%AA%9E%E8%A8%80-%E5%85%A5%E9%96%80%EF%BC%9Ajson-%E7%B7%A8%E7%A2%BC---%E8%A7%A3%E7%A2%BC
http://www.cnblogs.com/fengbohello/p/4665883.html
用 Go 語言實現 PHP 的 serialize() 和 unserialize() 函數:
https://github.com/wulijun/go-php-serialize
https://github.com/yvasiyarov/php_session_decoder
獲取 當前的 URL:
https://www.jianshu.com/p/f95558a49e98
http://www.qingpingshan.com/jb/go/111280.html
Golang 的 time package:http://www.cnblogs.com/zhepama/archive/2013/04/12/3017230.html
時間的加減:https://studygolang.com/articles/8919
SHA256 散列實作:https://stackoverflow.com/questions/30956244/golang-base64-encoded-sha256-digest-of-the-user-s-password
https://play.golang.org/p/oFBePRQzhN
PBE加密算法概念:http://baike.baidu.com/item/PBE/13013200
用途於密碼的標準作法:https://github.com/elithrar/simple-scrypt
實作橢圓曲線加密算法:https://www.urecv.com/archives/135
交叉編譯:http://dmdgeeker.com/goBook/docs/ch01/cross_compile.html
在 Windows 下 cmd 進行交叉編譯
使用 go env 查看 Go 相關環境變數
set CGO_ENABLED=0set GOOS=linuxset GOARCH=amd64go build main.go
# 編譯到 linux 64bit
GOOS=linux
GOARCH=amd64
# 編譯到 linux 32bit
GOOS=linux
GOARCH=386
# 編譯到 windows 64bit
GOOS=windows
GOARCH=amd64
# 編譯到 windows 32bit
GOOS=windows
GOARCH=386
# 編譯到 Mac OS X 64bit
GOOS=darwin
GOARCH=amd64
https://golang.org/cmd/cgo/
The cgo tool is enabled by default for native builds on systems where it is expected to work. It is disabled by default when cross-compiling. You can control this by setting the CGO_ENABLED environment variable when running the go tool: set it to 1 to enable the use of cgo, and to 0 to disable it. The go tool will set the build constraint "cgo" if cgo is enabled.
商業軟體一定要刪除 debug 信息 go build -ldflags "-s -w" ( 破解 Go 執行檔的相關討論 ):
https://gocn.io/question/487
http://golangtc.com/t/5639e100b09ecc3197000004
-w 禁止生成debug信息,注意使用该选项后,无法使用 gdb 进行调试
-s 禁用符号表
可以使用 go tool link --help 查看 ldflags 各参数含义
https://javasgl.github.io/go-build-args/
Go 內嵌靜態資源:
使用 Go 開發應用的時候,有時會遇到需要讀取靜態資源的情況。比如開發 Web 應用,程式需要加載模板文件生成輸出的 HTML。在程式部署的時候,除了發布可執行檔,還需要發布靜態資源。
這給發布過程增加了一些麻煩。既然發佈單獨一個可執行檔是非常簡單的操作,就有人會想辦法把靜態資源也打包進 可執行檔 中,比如說 go-bindata, go.rice, esc 等等。
詳閱 http://blog.golangclub.com/articles/5068
怎麼學習 Golang:https://gocn.io/question/4
《Effective Go》中英双语版:https://bingohuang.gitbooks.io/effective-go-zh-en/content/
Go 語言聖經(中文版):https://wizardforcel.gitbooks.io/gopl-zh/content/
Golang Basic:http://blog.jex.tw/blog/2014/01/20/golang-basic/
Go 快速入門:http://wdxtub.com/2016/08/11/golang-first-step/
Go Web 编程:
https://www.kancloud.cn/kancloud/web-application-with-golang/44105
http://www.runoob.com/go/go-tutorial.html
https://astaxie.gitbooks.io/build-web-application-with-golang/content/zh/
http://dmdgeeker.com/goBook/index.html
https://zengweigang.gitbooks.io/core-go/content/
Youtube 教程:
https://www.youtube.com/playlist?list=PL7vIp5DG7s8C50r0yt8U6EuH2kxYG5XMD
Go: SQL Databases:
https://www.alexedwards.net/blog/practical-persistence-sql
Golang 新手可能會踩的50個坑
https://segmentfault.com/a/1190000013739000
Golang 代码示例汇总持续更新:http://www.01happy.com/golang-example/
Golang concepts from an OOP point of view:https://github.com/luciotato/golang-notes/blob/master/OOP.md
https://openhome.cc/Gossip/Go/index.html
http://www.runoob.com/go/go-tutorial.html
https://hsinyu.gitbooks.io/golang_note/content/index.html
Go 程式設計導論:http://golang-zhtw.netdpi.net/
初學 Golang 30 天系列:http://ithelp.ithome.com.tw/users/20079210/ironman/721
各種加密算法在 Go 語言中的使用方式:https://blog.51cto.com/634435/2117647
30天就 Go:教你打造 LINE 自動回話機器人 系列:http://ithelp.ithome.com.tw/users/20103452/ironman/1211
http://www.golang-book.com/books/intro
http://www.wklken.me/posts/2014/03/02/01-intro.html
Go 指令教學:https://github.com/hyper0x/go_command_tutorial
Golang 官方網站,可以線上執行、分享程式碼、參考文件等相關內容:https://golang.org/
Go 原始碼:https://golang.org/src
官網下的功能,可以說是 Golang 練功房:https://tour.golang.org/welcome/1
各種 Golang 程式碼範例:https://gobyexample.com/
Go packages 的文件,包含 opensource 的 package:
https://godoc.org/
https://github.com/golang
Google Go 語言從入門到應用必備開源項目:https://kknews.cc/tech/anpxrq6.html
有的沒的 Go 筆記:http://www.evanlin.com/weekly-note-20150206/
Go 語言的學習資源:http://www.ituring.com.cn/tupubarticle/3651
旨在成為下一代的 robotics/IoT framework:https://gobot.io/
在 Go 語言用一行程式碼自動化安裝且更新 Let’s Encrypt 憑證:https://blog.wu-boy.com/2017/04/1-line-letsencrypt-https-servers-in-golang/
用 Golang 寫 Command line 工具:https://blog.wu-boy.com/2017/02/write-command-line-in-golang/
以 Go 語言快速實作 HTTP GET/POST API:http://cepave.com/http-restful-api-with-golang/
Golang 如何處理多國使用者的網頁輸出:http://www.evanlin.com/go-generate-content-by-user-lang/
Go 語言的錯誤訊息處理:https://blog.wu-boy.com/2017/03/error-handler-in-golang/
大家使用 Go 語言的心得分享與社區:
2014 ~ 2017 論壇討論 https://www.douban.com/note/353996627/
2015 某網友的個人分享文章 https://read01.com/kgaRQ.html
2015 年中開始採用 Golang 的團隊之經驗分享 https://gocn.io/article/23
Go 與 桌面 (GUI):https://www.zhihu.com/question/22483719
Golang 中國:http://golangtc.com
Go 語言中文網:http://studygolang.com/
C++
比雅尼·斯特勞斯特魯普博士在貝爾實驗室工作期間 ( 20 世紀 80 年代 ) 發明並實現了 C++ 程式語言,大多數 C++ 編譯器不支援垃圾收集機制。通常使用 C++ 編程的時候,程式師在程式中初始化對象時,會在主機記憶體堆疊上分配一塊記憶體與位址,當不需要此對象時,進行解構或刪除的時候再釋放分配的記憶體位址。如果對象是在堆疊上分配的,而程式師又忘記進行刪除,那麼就會造成記憶體漏失(Memory Leak),由於疏忽或錯誤造成程式未能釋放已經不再使用的記憶體,從而造成了記憶體的浪費。另一個問題是,如果同一記憶體位址被刪除兩次的話,程式會變得不穩定,甚至崩潰。因此有經驗的 C++ 程式員都會在刪除之後將指標重設為 NULL,然後在刪除之前先判斷指標是否為 NULL。
C++ 可以使用智慧指標(Smart Pointer)或託管擴展編譯器的方法來實現自動化記憶體釋放,智慧指標可以在標準類庫中找到,而 C++ 託管擴展被微軟的 Visual C++ 7.0 及以上版本所支援。智慧指標的優點是不需要引入緩慢的垃圾收集機制,而且可以不考慮線程安全的問題,但缺點是不斷地分配和釋放記憶體可能造成記憶體碎片,需要手動對堆疊進行壓縮。除此之外,由於智慧指標是一個基於模板的功能,所以程式師必須學習如何使用多態特性進行自動清理。
維基百科:https://en.wikipedia.org/wiki/C%2B%2B
C++ 教學:
http://www.runoob.com/cplusplus/cpp-tutorial.html
http://pydoing.blogspot.tw/2014/06/cpp-guide.html
https://openhome.cc/Gossip/CppGossip/
C++ 的輸出入 cin/cout 和 scanf/printf 誰比較快:http://chino.taipei/note-2016-0311C-%E7%9A%84%E8%BC%B8%E5%87%BA%E5%85%A5cin-cout%E5%92%8Cscanf-printf%E8%AA%B0%E6%AF%94%E8%BC%83%E5%BF%AB%EF%BC%9F/
C++缺點之一,是相對許多語言複雜,而且難學難精。許多人說學習C語言只需一本K&R《C程序設計語言》即可,但C++書籍卻是多不勝數。學習C++可分為4個層次:
第一層次,C++基礎:挑選一本入門書籍,如《C++ Primer》、《C++大學教程》、或Stroustrup撰寫的經典《C++程序設計語言》或他一年半前的新作《C++程序設計原理與實踐》,而一般C++課程也止於此,另外《C++ 標準程序庫》及《The C++ Standard Library Extensions》可供參考;
第二層次,正確高效地使用C++:此層次開始必須自修,閱讀過《(More)Effective C++》、《(More)Exceptional C++》、《Effective STL》及《C++編程規範》等,才適宜踏入專業C++開發之路;
第三層次,深入了解C++:關於全局問題可讀《深入探索C++對象模型》、《Imperfect C++》、《C++沉思錄》、《STL源碼剖析》,要挑戰智商,可看關於模版及模版元編程的書籍如《C++ Templates》、《C++設計新思維》、《C++模版元編程》;
第四層次,研究C++:閱讀《C++語言的設計和演化》、《編程的本質》(含STL設計背後的數學根基)、C++標準文件《ISO/IEC 14882:2003》、C++標準委員會的提案書和報告書、關於C++的學術文獻。
PHP
1995 年,丹麥人 Rasmus Lerdorf 發明 PHP ,採取接近 C 語言的語法,主要用於網站伺服器的應用,用來處理動態網頁。現在 PHP 由 PHP Group 和開放原始碼社群維護,廣泛用於網路程式的開發。
維基百科:https://en.wikipedia.org/wiki/PHP
PHP 是極少數單純為了網站開發而設計出來的程式語言,不過它的可用範圍也不再只限於網站,事實上,PHP 可以用來開發命令列或者 GUI 程式等。
PHP 最大的特色就是簡單易學,其動態語言特性讓初學者不用煩惱變數的型別,可以專注在學習邏輯的操作。而從 JAVA 借鑑過來的錯誤處理與各種語言特性也讓 PHP 適合用來編寫大型健壯的網頁應用程式。另一方面,PHP 非常快,其效能在動態語言中算是非常高的,尤其 PHP7 比前一版有了近一倍的效能提昇。
PHP 的使用族群非常多,大量的職缺不怕找不到工作。不過也因為使用人口龐大,相對素質低落的三角貓也不少,拉下了工程師的整體素質。且框架種類較多較繁雜,初學者也不容易了解每種框架的特性來選擇合適的學習方向。
知名使用者: Facebook, Yahoo
框架: Symfony, Zend, Laravel, Yii, Phalcon, CodeIgnitor, Slim, Joomla
圖表資料來源 ( 10 年漫長等待,PHP 7 終於問世):http://www.ithome.com.tw/news/101599
為什麼大型網站前端使用 PHP,後台邏輯用 Java:https://read01.com/Le66BM.html
PHP 線上教學:http://tianen.com/book/php/index.asp.htm
PHP 物件導向的第一課:class
http://ithelp.ithome.com.tw/articles/10114633
PHP 物件導向的第二課:重談「方法」,物件「屬性」及「成員」
http://ithelp.ithome.com.tw/articles/10114707
PHP 物件導向的第三課:建構式
http://ithelp.ithome.com.tw/articles/10114761
PHP 物件導向的第四課:繼承
http://ithelp.ithome.com.tw/articles/10114805
http://ithelp.ithome.com.tw/articles/10114871
PHP 物件導向的第五課:介面 & 虛擬類別
http://ithelp.ithome.com.tw/articles/10115273
為什麼大型網站前端使用 PHP,後台邏輯用 Java:https://read01.com/Le66BM.html
PHP 線上教學:http://tianen.com/book/php/index.asp.htm
PHP 物件導向的第一課:class
http://ithelp.ithome.com.tw/articles/10114633
PHP 物件導向的第二課:重談「方法」,物件「屬性」及「成員」
http://ithelp.ithome.com.tw/articles/10114707
PHP 物件導向的第三課:建構式
http://ithelp.ithome.com.tw/articles/10114761
PHP 物件導向的第四課:繼承
http://ithelp.ithome.com.tw/articles/10114805
http://ithelp.ithome.com.tw/articles/10114871
PHP 物件導向的第五課:介面 & 虛擬類別
http://ithelp.ithome.com.tw/articles/10115273
比較 PHP-MySQL 與 PDO (PHP Data Object) 的差異:https://blog.roga.tw/2010/06/2403
使用 Laravel 的優缺點:http://oomusou.io/laravel/laravel-for-newbie/
編寫 MVC 框架的案例:http://www.awaimai.com/128.html
PHP 不要結尾標籤:https://segmentfault.com/q/1010000000437998
官方手册上推荐的用法,手册上有详细说明:
如果文件内容是纯 PHP 代码,最好在文件末尾删除 PHP 结束标记。这可以避免在 PHP 结束标记之后万一意外加入了空格或者换行符,会导致 PHP 开始输出这些空白,而脚本中此时并无输出的意图。
如果使用闭合标签,任何由开发者,用户,或者 FTP 应用程序插入闭合标签后面的空格都有可能会引起多余的输出、php 错误、之后的输出无法显示、空白页。因此,所有的 php 文件应该省略这个 php 闭合标签,并插入一段注释来标明这是文件的底部并定位这个文件在这个应用的相对路径。这样有利于确定这个文件已经结束而不是被删节的。
<?php
echo "Hello world";
// ... more code
echo "Last statement";
// 脚本至此结束,并无 PHP 结束标记
怎麼防止 SQL 注入攻擊(SQL Injection)?
1、過濾掉一些常見的資料庫操作關鍵字:select, insert, update, delete, and, * 等
或者通過系統函數:addslashes (需要被過濾的內容) 來進行過濾。
2、在 PHP 配置文件中
Register_globals=off; 設置為關閉狀態 //作用將註冊全局變量關閉。
比如:接收 POST 表單的值使用 $_POST['user'], 如果將 register_globals=on; 直接使用 $user 可以接收表單的值。
3、SQL 語句書寫的時候儘量不要省略小引號 (tab鍵上面那個) 和單引號
4、提高資料庫命名技巧,對於一些重要的欄位根據程序的特點命名,取不易被猜到的
5、對於常用的方法加以封裝,避免直接暴漏 SQL 語句
6、開啟 PHP 安全模式
Safe_mode=on;
7、打開 magic_quotes_gpc 來防止 SQL 注入
Magic_quotes_gpc=off; 默認是關閉的,它打開後將自動把用戶提交的 sql 語句的查詢進行轉換,把 ' 轉為 \',這對防止 sql 注入有重大作用。
因此開啟:magic_quotes_gpc=on;
8、控制錯誤信息
關閉錯誤提示信息,將錯誤信息寫到系統日誌。
9、使用 mysqli 或 pdo 預處理。
PHP-MySQL, PHP-MySQLi, PDO 的差異討論:
http://www.tsingpost.com/articles/201312/239.html
https://blog.roga.tw/2010/06/2403
教學:http://140.114.89.25/~geniusturtle/tutor_web/php_mysqli_pdo.php
MySQLi 的用法
http://php.net/manual/en/function.mysqli-connect.php
http://php.net/manual/en/mysqli.query.php
<?php
$link = mysqli_connect("127.0.0.1", "my_user", "my_password", "my_db");
if (!$link) {
echo "Error: Unable to connect to MySQL." . PHP_EOL;
echo "Debugging errno: " . mysqli_connect_errno() . PHP_EOL;
echo "Debugging error: " . mysqli_connect_error() . PHP_EOL;
exit;
}
echo "Success: A proper connection to MySQL was made! The my_db database is great." . PHP_EOL;
echo "Host information: " . mysqli_get_host_info($link) . PHP_EOL;mysqli_close($link);?>
PDO 的用法
http://easonyo.pixnet.net/blog/post/22966510
http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php
<?php
$dsn = "mysql:host=localhost;dbname=test";
$db = new PDO($dsn, root, );
$count = $db->exec("INSERT INTO foo SET name = heiyeluren,gender=男,time=NOW()");
echo $count;
$db = null;
?>
SELECT, INSERT, UPDATE, DELETE prepared queries
SELECT:$stmt = $db->prepare("SELECT * FROM table WHERE id=:id AND name=:name"); $stmt->execute(array(':name' => $name, ':id' => $id)); $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);INSERT:$stmt = $db->prepare("INSERT INTO table(field1,field2) VALUES(:field1,:field2)"); $stmt->execute(array(':field1' => $field1, ':field2' => $field2)); $affected_rows = $stmt->rowCount();DELETE:$stmt = $db->prepare("DELETE FROM table WHERE id=:id"); $stmt->bindValue(':id', $id, PDO::PARAM_STR); $stmt->execute(); $affected_rows = $stmt->rowCount();UPDATE:$stmt = $db->prepare("UPDATE table SET name=? WHERE id=?"); $stmt->execute(array($name, $id)); $affected_rows = $stmt->rowCount();
PHP 程式設計實務上常見的問題:
1. include 與 require 的區別,require 與 require_once 的效率哪個高?
2. cookie 和 session 的區別,禁止了 cookie 後 session 能正常使用嗎?session 的缺點是什麼? session 在伺服器端是存在哪裡的?是共有的還是私有的?
3. 怎麼防止 sql 注入?
4. 資料庫索引有幾類,分別是什麼?什麼時候該用索引?
5. 引用傳值和非引用傳值的區別,什麼時候該用引用傳值?什麼時候該用非引用傳值?
6. 寫幾個魔術方法並說明作用?
7. $_REQUEST、$_POST、$_GET、$_COOKIE、$_SESSION、$_FILE 的意思是什麼?
8. 數組中下標最好是什麼類型的,為什麼?
9. ++i 和 i++ 哪一個效率高,為什麼?
10.magic_quotes_gpc()、magic_quotes_runtime() 的意思是什麼?
11.Echo()、print()、print_r() 的區別?
12.MVC 概念與其優缺點
13. 框架中,什麼是單一入口和多入口?單一入口的優缺點?
14.列印一個用『.』連結的字符串時候,還可以用什麼代替『.』連結效率更高些?
15. 提示類型 200、404、502 是什麼意思?
16. 編寫一個自定義函數提取這段路徑的的後綴名
17. Memcach 優缺點有哪些?
18. PHP 需不需要結尾標籤?
PHP学习路线图
PHP学习的关键是:多看代码,多写代码,多总结。
https://github.com/yeszao/phproad
HTML5 和 CSS
推荐书籍《HTML5+CSS3从入门到精通》·李东博
HTML标签
CSS样式
Javascript脚本
PHP 基础
推荐书籍《PHP编程》·Kevin Tatroe,Peter MacIntyre,Rasmus Lerdorf
变量
数组
循环控制
函数
Cookie 和 Session
JSON 和 XML
AJAX
文件读写
上传和下载
图片处理
RESTful
WEB 服务器
推荐书籍《鸟哥的Linux私房菜基础篇》·鸟哥
Linux基础
LNMP安装
PHP-FPM配置
PHP MySQL 操作
推荐书籍《PHP和MySQL Web开发》·Luke Welling
增查改删操作
表单处理
MySQLi和PDO扩展
PHP 面向对象和设计模式
推荐书籍《深入PHP:面向对象、模式与实践》·Matt Zandstra
类和对象的关系
继承、封装、多态
性状
面向对象设计原则
类UML关系
设计模式
代码编写和规范
推荐书籍《代码整洁之道》·Robert C. Martin
PHP-FIG PSR1~4规范
phpStorm集成开发环境
Git版本控制
Github代码仓库
MVC 框架
单一入口
MVC职责划分
PHP框架
组件
Composer
组件
Nginx
推荐书籍《Nginx高性能Web服务器详解》·苗泽,《大型网站技术架构 核心原理与案例分析》·李智慧
Nginx配置优化
负载均衡
反向代理
集群
CDN
数据库
推荐书籍《高性能MySQL》·Baron Schwartz,Peter Zaitsev,Vadim Tkachenko
ORM
索引和全文索引
锁机制
分表
集群
Redis缓存
PHP 高级
推荐书籍《Modern PHP》·Josh Lockhart
Opcache
xDebug调试和分析
Xhprof + Xhgui性能分析
PHPUnit单元测试
持续集成
訂閱:
文章 (Atom)
程式語言編年史
程式語言編年史原文 下面這張圖片描繪了整個程式語言的歷史。包括各種程式語言的發明人、程式語言的特點和適用領域、被什麼網站或公司使用等 (檢視 完整高清圖 )。 之所以會有那麼多不同的程式語言是因為設計程式語言的初衷不同、對語言學習曲線的追求不同、不同程式之間的執行成本差異...




























