https://www.wxwidgets.org
Framework 總覽
Linux 的開源,但對大多數人而言,等於閉源。不說完全理解,終其一生未必能讀完!
編譯一下內核可能是唯一的娛樂,想改內核?能合併成功嗎?
反覆造輪子是一個必然的過程,只是誰來造?是大廠造還是小廠造?科學家造還是民科造?
即使技術不發展,用戶的需求和使用習慣也會發展。微軟不會滿足有了 MFC,就從此打住;諾基亞即使收購了 QT,它仍然會研發其他平台。
MFC,QT 並不是不優秀,至少在它鼎盛的時代,它是王者。當然,任何優秀都是在一個時間域裡面的。相信谷歌開發 Go 語言的時候,並不是認為其他語言不優秀,而是應用場景發生了變化。
新的軟件框架,必定層出不窮,這是無法阻擋的趨勢!新的軟件框架由於考慮到了最新的用戶場景,往往較舊軟件有很大優勢,比如 Chrome 比 IE 强;Edge又比 IE 强。
輪子必定是需要重覆製造的,為的是更適應變化後的場景。即使作了最好的自行車輪子,也不能把它裝在汽車上,重覆造輪子本身不是一個問題,問題只是誰來造?給誰用?
MFC、WTL、WPF、wxWidgets、Qt、GTK 等等有何差別、優劣:https://www.zhihu.com/question/23480014
基本上 C++ 開發界面可以分成幾個時代:
Gen1:MFC/QT時代
這個現在可以說確實已經過時了,龐大的鏈接庫才實現了基本的界面元素。同時可定制化界面要花很大的功夫。
Gen2:directUI/ATL/輪子哥的庫
MFC後續沒有什麼大發展後,確實很多程序員轉向了微軟的另一個解決方案,那就是 ATL 以及直接利用基礎庫再自己畫界面的階段。首先這種方案確實是減小了程序的體積,但是缺點與上述 Gen1 差不多,界面的實現往往需要很多的代碼。
Gen3:WPF等微軟提供的新技術
所有的程序員都不得不接受的兩個事實是,第一 C++ 在微軟開發工具裡面確實都不如 C# 能拿到更多的資源,第二是微軟自從比爾蓋茲離職後,在開發框架上搖擺不定,出現了很多的框架然後又自我否定。很多的 C++ 程序員在這麼長的時間裡面已經消磨掉了微軟過去建立的優勢了。
Gen4:webkit\Chrome\Electron
當放棄 MS 的解決方案後就會發現世界還是很美好的。眾多的第三方都提供了很多更好的方案。這些方案代表了未來的趨勢,那就是把瀏覽器引擎包裝起來,利用 html 來製作界面。Github,Google,Apple 都貢獻良多。在這些基礎之上,很多公司也把自己的一些方案提供給大家,很多大公司的選擇也表明了這才是未來的發展方向。
如何實現 iOS 和 Android 跨平台的開發:https://www.zhihu.com/question/36019568
編譯一下內核可能是唯一的娛樂,想改內核?能合併成功嗎?
反覆造輪子是一個必然的過程,只是誰來造?是大廠造還是小廠造?科學家造還是民科造?
即使技術不發展,用戶的需求和使用習慣也會發展。微軟不會滿足有了 MFC,就從此打住;諾基亞即使收購了 QT,它仍然會研發其他平台。
MFC,QT 並不是不優秀,至少在它鼎盛的時代,它是王者。當然,任何優秀都是在一個時間域裡面的。相信谷歌開發 Go 語言的時候,並不是認為其他語言不優秀,而是應用場景發生了變化。
新的軟件框架,必定層出不窮,這是無法阻擋的趨勢!新的軟件框架由於考慮到了最新的用戶場景,往往較舊軟件有很大優勢,比如 Chrome 比 IE 强;Edge又比 IE 强。
輪子必定是需要重覆製造的,為的是更適應變化後的場景。即使作了最好的自行車輪子,也不能把它裝在汽車上,重覆造輪子本身不是一個問題,問題只是誰來造?給誰用?
MFC、WTL、WPF、wxWidgets、Qt、GTK 等等有何差別、優劣:https://www.zhihu.com/question/23480014
基本上 C++ 開發界面可以分成幾個時代:
Gen1:MFC/QT時代
這個現在可以說確實已經過時了,龐大的鏈接庫才實現了基本的界面元素。同時可定制化界面要花很大的功夫。
Gen2:directUI/ATL/輪子哥的庫
MFC後續沒有什麼大發展後,確實很多程序員轉向了微軟的另一個解決方案,那就是 ATL 以及直接利用基礎庫再自己畫界面的階段。首先這種方案確實是減小了程序的體積,但是缺點與上述 Gen1 差不多,界面的實現往往需要很多的代碼。
Gen3:WPF等微軟提供的新技術
所有的程序員都不得不接受的兩個事實是,第一 C++ 在微軟開發工具裡面確實都不如 C# 能拿到更多的資源,第二是微軟自從比爾蓋茲離職後,在開發框架上搖擺不定,出現了很多的框架然後又自我否定。很多的 C++ 程序員在這麼長的時間裡面已經消磨掉了微軟過去建立的優勢了。
Gen4:webkit\Chrome\Electron
當放棄 MS 的解決方案後就會發現世界還是很美好的。眾多的第三方都提供了很多更好的方案。這些方案代表了未來的趨勢,那就是把瀏覽器引擎包裝起來,利用 html 來製作界面。Github,Google,Apple 都貢獻良多。在這些基礎之上,很多公司也把自己的一些方案提供給大家,很多大公司的選擇也表明了這才是未來的發展方向。
如何實現 iOS 和 Android 跨平台的開發:https://www.zhihu.com/question/36019568
美43%勞動力 納入零工經濟
《富比世》統計,美國至少有43%的勞動力在2020年前變成自由工作者。
零工經濟在美國到底有多夯?根據麥肯錫顧問公司最新的統計,在美國,大約有1/4的勞動力成為參與零工經濟的大軍。
這些工作包括從互聯網和各式APP尋找和接受指派的特定工作,如替人清潔房屋,修理水管到開車迎接陌生人和送他(她)到目的地,甚至將自己的房子分租出去,在廣義上都屬於零工經濟的一環。
透過網站人脈 找到工作
令人吃驚的是,零工經濟並不是一項瞬間即逝的新型現象,而是一項持久趨勢。根據《富比世》統計,美國至少有43%的勞動力在2020年前變成自由工作者。趨勢專家指出,對於已經退休的勞動力或是女性勞動力,零工經濟絕對是未來的趨勢。
自己就是老闆 不停轉換
今年35歲、畢業於紐約大學的史密斯最近剛剛辭去了顧問公司的工作。他早就參與了零工經濟。過去2年他利用業餘時間,透過網站找到了臨時工作,在紐約下城區開設小提琴課,讓他能繼續從小對音樂的摯愛。另一方面,他透過過去人脈接下短期項目,為一些公司給予教育訓練和諮詢等工作。
史密斯表示,剛開始時覺得收入不固定,有些憂心。但他發覺在參與零工經濟的同時,讓他重燃了對工作的熱情。不用在乎老闆的臉色,自己就是老闆,為自己負責。在不同專業上轉換,拓寬了他的眼界和適應能力。
住在舊金山,今年58歲從IBM退休的比爾目前就因參與零工經濟獲得了人生的第二春。他利用Airbnb軟件當上了分租房東!比爾一開始每個月只有4~5天將有美麗視野的房間租出去,到現在幾乎每個月客滿,導致他去年清理女兒的房間並開始也放在Airbnb上出租,他現在每個月固定收入超過新台幣10萬元。他開心地表示,從未想到退休後還會繼續有固定收入,他計畫將租金收入存下來購買離市區比較遠但適宜出租的便宜公寓,並且將他成功出租房屋的模式(提供照片,服務和合理的房租)擴展,利用Airbnb投資房地產。
大展個人專長 月賺29萬
推廣零工經濟的TaskRabbit網站,公司發言人威廉斯女士表示,有任何專業技能的人都可以登錄他們的網站,詳列他們能夠提供的專業服務和收費計畫,並且根據市場反應隨時調整。她透露,已經有許多人透過他們的網站月賺超過新台幣29萬元(1萬美元)以上。她認為這樣的模式可能是未來強調個人專長但又不希望被公司捆綁的另一工作選項。
寫下暢銷書《零工經濟》的作者黛安.穆爾卡認為,未來全職工作將越來越少,進入高度競爭市場的勞動力必須將零工經濟作為生涯規畫的一環。積極找到既能貢獻專業,又能在工作中保持對工作熱情的持久動力,零工經濟的概念對年輕人,已經從職場退出但仍想貢獻所長的人非常重要。但如何能找到更好的工作,有更多自主的時間並相應得到可以讓你滿意的生活支撐,則需要細心的計畫和準備,並且還要不斷求新和充實自己。
零工經濟在美國到底有多夯?根據麥肯錫顧問公司最新的統計,在美國,大約有1/4的勞動力成為參與零工經濟的大軍。
這些工作包括從互聯網和各式APP尋找和接受指派的特定工作,如替人清潔房屋,修理水管到開車迎接陌生人和送他(她)到目的地,甚至將自己的房子分租出去,在廣義上都屬於零工經濟的一環。
透過網站人脈 找到工作
令人吃驚的是,零工經濟並不是一項瞬間即逝的新型現象,而是一項持久趨勢。根據《富比世》統計,美國至少有43%的勞動力在2020年前變成自由工作者。趨勢專家指出,對於已經退休的勞動力或是女性勞動力,零工經濟絕對是未來的趨勢。
自己就是老闆 不停轉換
今年35歲、畢業於紐約大學的史密斯最近剛剛辭去了顧問公司的工作。他早就參與了零工經濟。過去2年他利用業餘時間,透過網站找到了臨時工作,在紐約下城區開設小提琴課,讓他能繼續從小對音樂的摯愛。另一方面,他透過過去人脈接下短期項目,為一些公司給予教育訓練和諮詢等工作。
史密斯表示,剛開始時覺得收入不固定,有些憂心。但他發覺在參與零工經濟的同時,讓他重燃了對工作的熱情。不用在乎老闆的臉色,自己就是老闆,為自己負責。在不同專業上轉換,拓寬了他的眼界和適應能力。
住在舊金山,今年58歲從IBM退休的比爾目前就因參與零工經濟獲得了人生的第二春。他利用Airbnb軟件當上了分租房東!比爾一開始每個月只有4~5天將有美麗視野的房間租出去,到現在幾乎每個月客滿,導致他去年清理女兒的房間並開始也放在Airbnb上出租,他現在每個月固定收入超過新台幣10萬元。他開心地表示,從未想到退休後還會繼續有固定收入,他計畫將租金收入存下來購買離市區比較遠但適宜出租的便宜公寓,並且將他成功出租房屋的模式(提供照片,服務和合理的房租)擴展,利用Airbnb投資房地產。
大展個人專長 月賺29萬
推廣零工經濟的TaskRabbit網站,公司發言人威廉斯女士表示,有任何專業技能的人都可以登錄他們的網站,詳列他們能夠提供的專業服務和收費計畫,並且根據市場反應隨時調整。她透露,已經有許多人透過他們的網站月賺超過新台幣29萬元(1萬美元)以上。她認為這樣的模式可能是未來強調個人專長但又不希望被公司捆綁的另一工作選項。
寫下暢銷書《零工經濟》的作者黛安.穆爾卡認為,未來全職工作將越來越少,進入高度競爭市場的勞動力必須將零工經濟作為生涯規畫的一環。積極找到既能貢獻專業,又能在工作中保持對工作熱情的持久動力,零工經濟的概念對年輕人,已經從職場退出但仍想貢獻所長的人非常重要。但如何能找到更好的工作,有更多自主的時間並相應得到可以讓你滿意的生活支撐,則需要細心的計畫和準備,並且還要不斷求新和充實自己。
Peer-to-Peer
比特幣 - 總覽:http://21st.each1.net/2017/03/blog-post_30.html
比特幣的論文標題為 Bitcoin: A Peer-to-Peer Electronic Cash System
其中涉及到 Peer-to-Peer 這類的技術,相關技術筆記整理於本文
BitTorrent協定(簡稱BT,俗稱位元洪流、BT下載)是用在對等網路中檔案分享的網路協定程式。用戶越多,下載同一檔案的人越多,下載該檔案的速度越快。且下載後,繼續維持上傳的狀態,就可以「分享」,成為其用戶端節點下載的種子檔案(.torrent),同時上傳及下載。
根據BitTorrent協定,檔案發布者會根據要發布的檔案生成提供一個.torrent檔案,即種子檔案,也簡稱為「種子」。
種子檔案本質上是文字檔案,包含Tracker資訊和檔案資訊兩部分。Tracker資訊主要是BT下載中需要用到的Tracker伺服器的位址和針對Tracker伺服器的設定,檔案資訊是根據對目的檔的計算生成的,計算結果根據BitTorrent協定內的Bencode規則進行編碼。它的主要原理是需要把提供下載的檔案虛擬分成大小相等的塊,塊大小必須為2k的整數次方(由於是虛擬分塊,硬碟上並不產生各個塊檔案),並把每個塊的索引資訊和Hash驗證碼寫入種子檔案中;所以,種子檔案就是被下載檔案的「索引」。
詳細內容:
https://en.wikipedia.org/wiki/Peer-to-peer
https://en.wikipedia.org/wiki/BitTorrent
How to write a simple BitTorrent application?
https://stackoverflow.com/questions/5400828/how-to-write-a-simple-bittorrent-application
https://en.wikipedia.org/wiki/Libtorrent
https://www.libtorrent.org
比特幣的論文標題為 Bitcoin: A Peer-to-Peer Electronic Cash System
其中涉及到 Peer-to-Peer 這類的技術,相關技術筆記整理於本文
BitTorrent協定(簡稱BT,俗稱位元洪流、BT下載)是用在對等網路中檔案分享的網路協定程式。用戶越多,下載同一檔案的人越多,下載該檔案的速度越快。且下載後,繼續維持上傳的狀態,就可以「分享」,成為其用戶端節點下載的種子檔案(.torrent),同時上傳及下載。
根據BitTorrent協定,檔案發布者會根據要發布的檔案生成提供一個.torrent檔案,即種子檔案,也簡稱為「種子」。
種子檔案本質上是文字檔案,包含Tracker資訊和檔案資訊兩部分。Tracker資訊主要是BT下載中需要用到的Tracker伺服器的位址和針對Tracker伺服器的設定,檔案資訊是根據對目的檔的計算生成的,計算結果根據BitTorrent協定內的Bencode規則進行編碼。它的主要原理是需要把提供下載的檔案虛擬分成大小相等的塊,塊大小必須為2k的整數次方(由於是虛擬分塊,硬碟上並不產生各個塊檔案),並把每個塊的索引資訊和Hash驗證碼寫入種子檔案中;所以,種子檔案就是被下載檔案的「索引」。
詳細內容:
https://en.wikipedia.org/wiki/Peer-to-peer
https://en.wikipedia.org/wiki/BitTorrent
How to write a simple BitTorrent application?
https://stackoverflow.com/questions/5400828/how-to-write-a-simple-bittorrent-application
https://en.wikipedia.org/wiki/Libtorrent
https://www.libtorrent.org
比特幣 - Source Code - 筆記
比特幣 - 總覽:http://21st.each1.net/2017/03/blog-post_30.html
檔案:src/base58.h
Base58 是用於 Bitcoin 中使用的一種獨特的編碼方式,主要用於產生 Bitcoin 的錢包地址。相比 Base64,Base58 不使用數字 "0",字母大寫 "O",字母大寫 "I",和字母小寫 "l",以及 "+" 和 "/" 符號。
設計 Base58 主要的目的是:
1. 避免混淆。在某些字體下,數字 0 和字母大寫 O,以及字母大寫 I 和字母小寫 l 會非常相似。
2. 不使用 "+" 和 "/" 的原因是非字母或數字的字符串,如果作為帳號會比較難被人們所接受。
3. 沒有標點符號,這樣子通常不會被從中間分行。
4. 大部分的軟體支持雙擊選擇整個字符串。
由於 256 不能被 58 整除,Base58 無法像 Base64 那樣轉換為 8bits 的 2 進位後依次取出 6bits 就可以快速完成轉換。因此,Base58 編碼算法需要除法運算實現,如果被編碼的數據較長,則要用特殊的類來處理大數,Bitcoin 使用了 OpenSSL 中的 BIGNUM。
編碼符號表:https://zh.wikipedia.org/wiki/Base58
比特幣區塊鏈的關鍵核心技術,包括採用 Hashcash 演算法來進行工作量證明,讓區塊鏈中的各節點有機會參與驗證,達到公正性,且交易過程採用橢圓曲線數位簽章演算法來確保交易安全,並在每筆交易與每個區塊中使用多次 Hash 函數以及 Merkle Tree,不只是為了節省儲存空間,更重要的是藉由將前一個區塊的 Hash 值加入新區塊中,讓每個區塊環環相扣,也因此做到所謂的可追蹤且不可竄改的特性,同時也使用時間戳來確保區塊序列。
關鍵技術 1
採用工作量證明達到去中心化及公正性
首先,最關鍵的便其工作量證明機制(Proof of Work,POW),這是一個可以讓每個參與的節點可共同參與交易驗證的方式,來實現一個能多方共同維護的單一系統,並共享同一份記錄交易的帳本,以形成一個基於零信任基礎,卻能實現去中心化的P2P網路系統。
工作量證明是讓任一運算節點,花費時間和運算資源來計算出一組數學公式的結果,且要完成一次有效的工作量證明,需經過一連串地嘗試與失敗。不過,一旦這個數值被算出來後,其他參與節點也可用相關的數學公式,便能很容易去驗證這個值是否有效。
比特幣區塊鏈採用Hashcash演算法(雜湊現金演算法)作為工作量證明,讓各節點經由POW計算來產生每一個有效的新區塊,再經由其他節點驗證並接受。
進行POW計算的過程也被稱作挖礦,很多人用解一道數學題、或是解一個數獨來形容,不過,怎樣才是真的算出一個有效的新區塊,這些節點到底在算什麼?
由於每個區塊中Block Header會包含許多固定的值,其中只有Nonce值為一隨機值,因此每個節點進行POW計算時要算的就是,藉由不斷替換這個Nonce值,來讓這個區塊的Block Header Hash值,小於一個被設定好的難度目標值(Difficulty Target),至於為什麼要小於這個目標值,則是因為這個難度值意味著每個區塊在理論上應該要被產生完成。
這裡提到的難度值(Difficulty)是指,節點要運算出低於困難度目標值的Hash值,平均需花多久時間,也就是平均要完成一次POW的時間。而比特幣區塊鏈目前設定為,大約每10分鐘會有節點成功算出新的區塊,不過這10分鐘只是基於理論值,實際每個新區塊產生的時間,有可能只需要17秒(第407062個區塊的實際產生時間),也有可能需要20分鐘以上(第407068個區塊的實際產生時間)。
Difficulty可動態調整,目前每產生2016個區塊會調整一次難度,以每10分鐘產生一區塊估算,大約是每兩周會調整一次Difficulty。 由於POW具有一定的難度,因此無法預期哪個運算節點可以最快算出新區塊,藉此來確保交易驗證的公正性。
關鍵技術 2
每筆交易採橢圓曲線數位簽章演算法加密
比特幣區塊鏈便採用橢圓曲線數位簽章演算法(ECDSA),與另一種RSA演算法,都屬於公開金鑰加密演算法(Public Key Cryptography),公開金鑰加密技術在1970年代被發明,也稱為雙金鑰密碼安全系統,每個使用者會擁有公開金鑰(Public Key)與私密金鑰(Private Key)這兩把鑰匙,公開金鑰可讓其他人知道,而私密金鑰則只有本人知道。當A要傳送一筆訊息或交易給B時,需使用B的公開金鑰來將這份交易加密,而這這個加密過的訊息或交易,只有使用B的私密金鑰才能解開。
在比特幣區塊鏈中,比特幣區塊鏈便採用橢圓曲線數位簽章演算法,每一個比特幣區塊鏈中的節點使用者,會同時擁有這兩把金鑰,以及一次性使用的比特幣位址(Address),公開金鑰可讓區塊鏈網絡中的其他人知道,而私密金鑰則須自行保管,可用來接收貨幣、進行電子簽章或是發送貨幣,而Address就像電子郵件一樣可用來當作存取比特幣的地址,使用者可重複取得新的Address,且可以在離線狀態下產生,不過,每個Address只能使用一次。
在比特幣區塊鏈中,每一枚電子貨幣被視為一串數位簽章,使用者要進行比特幣交易時,必須將前一筆交易以及收款方的公開金鑰經由Hash產生數位簽章,加到電子貨幣那串數位簽章的後方。
RSA加密演算法是一種非對稱的加密演算法,利用兩個質數作為加密與解密用的兩把鑰匙,金鑰長度約在40個位元到1024位元。不過比特幣所採用的ECDSA能算出更短的金鑰長度,也就是能夠使用相對較少的資源,做到與RSA相同的安全性。在ECDSA演算法中,由私密金鑰算出公開金鑰很容易,但要從公開金鑰推回私密金鑰卻很困難。
關鍵技術 3
Hashcash演算法及多種Hash函數確保資料不被竄改
前面提到比特幣區塊鏈採用Hashcash演算法來進行工作量證明,Hashcash可將任意長度的資料經由Hash函數轉換為一組固定長度的代碼,原理是基於一種密碼學上的單向雜湊函數 (One Way Hash Function),這種函數很容易被驗證,但是卻很難破解,還回推出原本的值。先前Hashcash演算法也被用來做阻擋垃圾郵件的機制。
常使用的單向雜湊函數包括MD5、SHA-1、SHA-256、SHA-384及SHA-512等,MD5的Hash值長度為128位元,雖然廣為使用,但因長度不夠較容易破解,SHA-1的Hash值長度有160位元,雖比MD5好但仍然不夠安全,因此美國國家安全局(NSA)又提出多種更複雜的SHA-2演算法,包括224、256、384、512位元長度的Hash值算法。
Hashcash最早在1997年由Adam Back提出,並於2002 正式發表一篇描述雜湊現金系統的論文。比特幣區塊鏈採用Hashcash來建立一套幾乎無法被竄改的電子現金系統,每個區塊的Block Header都會被Hash成一串很難被回推的代碼後,放進下一個區塊中,來確保區塊的正確性。
關鍵技術 4
經由Merkle Tree將大量訊息縮短成一個Hash值
在比特幣區塊鏈中,每筆交易產生後,都已經被Hash成一段代碼才廣播給各節點,不過這樣做還不夠,因為在各節點的區塊中,可能包含數百筆到數千筆的交易,因此,為節省儲存空間並減少資源耗費,比特幣區塊鏈的設計原理採用Merkle Tree機制,讓這些數百到數千筆的交易Hash值,經由兩兩一組形成一個新Hash值的方式,不斷重複進行,直到最後產生一組最終的Hash值,也就是Merkle Tree Root,這個最終的Hash值便會被記錄到Block Header中,只有32 Bytes的大小。Merkle Tree機制可大幅減少資料傳輸量與運算資源消耗,驗證時,只需驗證這個Merkle Tree的Root值即可。
關鍵技術 5
用時間戳伺服器(Timestamp Server)確保區塊序列
比特幣採用時間戳伺服器機制(Timestamp Server),將每個區塊Hash後加上一個時間戳(Timestamp)並發布出去,這個時間戳用來證明資料在特定時間的有效性,每一個時間戳章會與前一個戳章一起進行Hash,這個Hash值會在與下一個時間戳章進行Hash,因此而形成一個用來確保區塊序列的鏈條。
含英文字幕的影片,在 20分鐘左右有 proof-of-work (PoW) 的程式碼實作
https://www.youtube.com/watch?v=5Tr13l0O1Ws
中文字幕,必須等待廣告跑完:https://www.leiphone.com/news/201802/1C2RI7Zrk89Tp8OV.html
檔案:src/base58.h
Base58 是用於 Bitcoin 中使用的一種獨特的編碼方式,主要用於產生 Bitcoin 的錢包地址。相比 Base64,Base58 不使用數字 "0",字母大寫 "O",字母大寫 "I",和字母小寫 "l",以及 "+" 和 "/" 符號。
設計 Base58 主要的目的是:
1. 避免混淆。在某些字體下,數字 0 和字母大寫 O,以及字母大寫 I 和字母小寫 l 會非常相似。
2. 不使用 "+" 和 "/" 的原因是非字母或數字的字符串,如果作為帳號會比較難被人們所接受。
3. 沒有標點符號,這樣子通常不會被從中間分行。
4. 大部分的軟體支持雙擊選擇整個字符串。
由於 256 不能被 58 整除,Base58 無法像 Base64 那樣轉換為 8bits 的 2 進位後依次取出 6bits 就可以快速完成轉換。因此,Base58 編碼算法需要除法運算實現,如果被編碼的數據較長,則要用特殊的類來處理大數,Bitcoin 使用了 OpenSSL 中的 BIGNUM。
編碼符號表:https://zh.wikipedia.org/wiki/Base58
比特幣區塊鏈的關鍵核心技術,包括採用 Hashcash 演算法來進行工作量證明,讓區塊鏈中的各節點有機會參與驗證,達到公正性,且交易過程採用橢圓曲線數位簽章演算法來確保交易安全,並在每筆交易與每個區塊中使用多次 Hash 函數以及 Merkle Tree,不只是為了節省儲存空間,更重要的是藉由將前一個區塊的 Hash 值加入新區塊中,讓每個區塊環環相扣,也因此做到所謂的可追蹤且不可竄改的特性,同時也使用時間戳來確保區塊序列。
關鍵技術 1
採用工作量證明達到去中心化及公正性
首先,最關鍵的便其工作量證明機制(Proof of Work,POW),這是一個可以讓每個參與的節點可共同參與交易驗證的方式,來實現一個能多方共同維護的單一系統,並共享同一份記錄交易的帳本,以形成一個基於零信任基礎,卻能實現去中心化的P2P網路系統。
工作量證明是讓任一運算節點,花費時間和運算資源來計算出一組數學公式的結果,且要完成一次有效的工作量證明,需經過一連串地嘗試與失敗。不過,一旦這個數值被算出來後,其他參與節點也可用相關的數學公式,便能很容易去驗證這個值是否有效。
比特幣區塊鏈採用Hashcash演算法(雜湊現金演算法)作為工作量證明,讓各節點經由POW計算來產生每一個有效的新區塊,再經由其他節點驗證並接受。
進行POW計算的過程也被稱作挖礦,很多人用解一道數學題、或是解一個數獨來形容,不過,怎樣才是真的算出一個有效的新區塊,這些節點到底在算什麼?
由於每個區塊中Block Header會包含許多固定的值,其中只有Nonce值為一隨機值,因此每個節點進行POW計算時要算的就是,藉由不斷替換這個Nonce值,來讓這個區塊的Block Header Hash值,小於一個被設定好的難度目標值(Difficulty Target),至於為什麼要小於這個目標值,則是因為這個難度值意味著每個區塊在理論上應該要被產生完成。
這裡提到的難度值(Difficulty)是指,節點要運算出低於困難度目標值的Hash值,平均需花多久時間,也就是平均要完成一次POW的時間。而比特幣區塊鏈目前設定為,大約每10分鐘會有節點成功算出新的區塊,不過這10分鐘只是基於理論值,實際每個新區塊產生的時間,有可能只需要17秒(第407062個區塊的實際產生時間),也有可能需要20分鐘以上(第407068個區塊的實際產生時間)。
Difficulty可動態調整,目前每產生2016個區塊會調整一次難度,以每10分鐘產生一區塊估算,大約是每兩周會調整一次Difficulty。 由於POW具有一定的難度,因此無法預期哪個運算節點可以最快算出新區塊,藉此來確保交易驗證的公正性。
關鍵技術 2
每筆交易採橢圓曲線數位簽章演算法加密
比特幣區塊鏈便採用橢圓曲線數位簽章演算法(ECDSA),與另一種RSA演算法,都屬於公開金鑰加密演算法(Public Key Cryptography),公開金鑰加密技術在1970年代被發明,也稱為雙金鑰密碼安全系統,每個使用者會擁有公開金鑰(Public Key)與私密金鑰(Private Key)這兩把鑰匙,公開金鑰可讓其他人知道,而私密金鑰則只有本人知道。當A要傳送一筆訊息或交易給B時,需使用B的公開金鑰來將這份交易加密,而這這個加密過的訊息或交易,只有使用B的私密金鑰才能解開。
在比特幣區塊鏈中,比特幣區塊鏈便採用橢圓曲線數位簽章演算法,每一個比特幣區塊鏈中的節點使用者,會同時擁有這兩把金鑰,以及一次性使用的比特幣位址(Address),公開金鑰可讓區塊鏈網絡中的其他人知道,而私密金鑰則須自行保管,可用來接收貨幣、進行電子簽章或是發送貨幣,而Address就像電子郵件一樣可用來當作存取比特幣的地址,使用者可重複取得新的Address,且可以在離線狀態下產生,不過,每個Address只能使用一次。
在比特幣區塊鏈中,每一枚電子貨幣被視為一串數位簽章,使用者要進行比特幣交易時,必須將前一筆交易以及收款方的公開金鑰經由Hash產生數位簽章,加到電子貨幣那串數位簽章的後方。
RSA加密演算法是一種非對稱的加密演算法,利用兩個質數作為加密與解密用的兩把鑰匙,金鑰長度約在40個位元到1024位元。不過比特幣所採用的ECDSA能算出更短的金鑰長度,也就是能夠使用相對較少的資源,做到與RSA相同的安全性。在ECDSA演算法中,由私密金鑰算出公開金鑰很容易,但要從公開金鑰推回私密金鑰卻很困難。
關鍵技術 3
Hashcash演算法及多種Hash函數確保資料不被竄改
前面提到比特幣區塊鏈採用Hashcash演算法來進行工作量證明,Hashcash可將任意長度的資料經由Hash函數轉換為一組固定長度的代碼,原理是基於一種密碼學上的單向雜湊函數 (One Way Hash Function),這種函數很容易被驗證,但是卻很難破解,還回推出原本的值。先前Hashcash演算法也被用來做阻擋垃圾郵件的機制。
常使用的單向雜湊函數包括MD5、SHA-1、SHA-256、SHA-384及SHA-512等,MD5的Hash值長度為128位元,雖然廣為使用,但因長度不夠較容易破解,SHA-1的Hash值長度有160位元,雖比MD5好但仍然不夠安全,因此美國國家安全局(NSA)又提出多種更複雜的SHA-2演算法,包括224、256、384、512位元長度的Hash值算法。
Hashcash最早在1997年由Adam Back提出,並於2002 正式發表一篇描述雜湊現金系統的論文。比特幣區塊鏈採用Hashcash來建立一套幾乎無法被竄改的電子現金系統,每個區塊的Block Header都會被Hash成一串很難被回推的代碼後,放進下一個區塊中,來確保區塊的正確性。
關鍵技術 4
經由Merkle Tree將大量訊息縮短成一個Hash值
在比特幣區塊鏈中,每筆交易產生後,都已經被Hash成一段代碼才廣播給各節點,不過這樣做還不夠,因為在各節點的區塊中,可能包含數百筆到數千筆的交易,因此,為節省儲存空間並減少資源耗費,比特幣區塊鏈的設計原理採用Merkle Tree機制,讓這些數百到數千筆的交易Hash值,經由兩兩一組形成一個新Hash值的方式,不斷重複進行,直到最後產生一組最終的Hash值,也就是Merkle Tree Root,這個最終的Hash值便會被記錄到Block Header中,只有32 Bytes的大小。Merkle Tree機制可大幅減少資料傳輸量與運算資源消耗,驗證時,只需驗證這個Merkle Tree的Root值即可。
關鍵技術 5
用時間戳伺服器(Timestamp Server)確保區塊序列
比特幣採用時間戳伺服器機制(Timestamp Server),將每個區塊Hash後加上一個時間戳(Timestamp)並發布出去,這個時間戳用來證明資料在特定時間的有效性,每一個時間戳章會與前一個戳章一起進行Hash,這個Hash值會在與下一個時間戳章進行Hash,因此而形成一個用來確保區塊序列的鏈條。
含英文字幕的影片,在 20分鐘左右有 proof-of-work (PoW) 的程式碼實作
https://www.youtube.com/watch?v=5Tr13l0O1Ws
中文字幕,必須等待廣告跑完:https://www.leiphone.com/news/201802/1C2RI7Zrk89Tp8OV.html
商品潮流觀察
https://www.amazon.com/MultiPot-Programmable-Pressure-Cooker-Mealthy/dp/B076QJNK8G/ref=sr_1_8?s=kitchen&ie=UTF8&qid=1520756563&sr=1-8&keywords=instant+pot
https://www.amazon.com/dp/B00I4VPYTO/ref=twister_B00IO5VPF2?_encoding=UTF8&th=1
https://www.amazon.com/Vincero-Luxury-Womens-Wrist-Watch/dp/B078YCN8N1/ref=sr_1_8?ie=UTF8&qid=1520753607&sr=8-8&keywords=vincero
https://www.amazon.com/gp/product/B01FIS82WQ/ref=s9_acss_bw_cg_gclptcg_2a1_w?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=merchandised-search-3&pf_rd_r=AZV917W9DJ6BTV4DBHVH&pf_rd_t=101&pf_rd_p=97b46b55-3374-443f-bc63-bbdcf30e73e5&pf_rd_i=2238192011
https://www.amazon.com/dp/B0758HHJY5/ref=sspa_dk_detail_1?psc=1&pd_rd_i=B0758HHJY5&pd_rd_wg=m3VFc&pd_rd_r=2943V95SZQB6K1GEMFCZ&pd_rd_w=GjXyP
https://www.amazon.com/gp/product/B00OJAI96Y/ref=s9_dcacsd_dcoop_bw_c_x_1_w
虛擬記憶體 Swap
http://linux.vbird.org/linux_basic/0230filesystem/0230filesystem.php#swap
https://yungke.li/how-vultr-swap/
在設定之前,先檢查系統裡有沒有既存的 swap 文件。
swapon -s
free -m
如何在 Linux 裡建立 Swap file,步驟與解說如下:
1. 本範例建立一個 2G 大小的 swap 檔,命名為 swapfile 放在根目錄
$ sudo dd if=/dev/zero of=/swapfile bs=1M count=2048
2. 設定 swap
$ sudo mkswap /swapfile
3. 啟用 swap
$ sudo swapon /swapfile
4. 設定開機自動啟動 swap
$ sudo vi /etc/fstab
在 fstab 這個檔案裡頭加上這一行
/swapfile swap swap defailts 0 0
完整解說:
dd 是 convert and copy a file。
/dev/zero是一個特殊的檔案,當讀取它的時候,它會提供無限的空字元 ( NULL, ASCII NUL, 0x00 )。
一個典型用法是用它提供的字元流來覆蓋資訊,另一個常見用法是產生一個特定大小的空白檔案。
if 是輸入文件,of 是輸出文件,
dd 可以轉換類型,然後把這些 0x00 寫入一個 swapfile。
bs 是區塊大小,count 是數量,所以本範例建立了 2048 個 1M 大小的區塊,共計 2G。
做完這一步以後,可以用如下指令查看一下:
$ file /swapfile
接著,mkswap 可將磁盤分區或文件設為 Linux 的交換區。
因此,基本的流程就是:
以 dd 指令來建立 swapfile ;
以 mkswap 來將 swapfile 格式化為 swap 的檔案格式;
以 swapon 來啟動該檔案,使成為 swap。
刪除swap file
Step 1 . sudo swapoff /swapfile
Step 2 . 將 /etc/fstab 中的設定移除
Step 3 . sudo rm /swapfile
https://yungke.li/how-vultr-swap/
在設定之前,先檢查系統裡有沒有既存的 swap 文件。
swapon -s
free -m
如何在 Linux 裡建立 Swap file,步驟與解說如下:
1. 本範例建立一個 2G 大小的 swap 檔,命名為 swapfile 放在根目錄
$ sudo dd if=/dev/zero of=/swapfile bs=1M count=2048
2. 設定 swap
$ sudo mkswap /swapfile
3. 啟用 swap
$ sudo swapon /swapfile
4. 設定開機自動啟動 swap
$ sudo vi /etc/fstab
在 fstab 這個檔案裡頭加上這一行
/swapfile swap swap defailts 0 0
完整解說:
dd 是 convert and copy a file。
/dev/zero是一個特殊的檔案,當讀取它的時候,它會提供無限的空字元 ( NULL, ASCII NUL, 0x00 )。
一個典型用法是用它提供的字元流來覆蓋資訊,另一個常見用法是產生一個特定大小的空白檔案。
if 是輸入文件,of 是輸出文件,
dd 可以轉換類型,然後把這些 0x00 寫入一個 swapfile。
bs 是區塊大小,count 是數量,所以本範例建立了 2048 個 1M 大小的區塊,共計 2G。
做完這一步以後,可以用如下指令查看一下:
$ file /swapfile
接著,mkswap 可將磁盤分區或文件設為 Linux 的交換區。
因此,基本的流程就是:
以 dd 指令來建立 swapfile ;
以 mkswap 來將 swapfile 格式化為 swap 的檔案格式;
以 swapon 來啟動該檔案,使成為 swap。
刪除swap file
Step 1 . sudo swapoff /swapfile
Step 2 . 將 /etc/fstab 中的設定移除
Step 3 . sudo rm /swapfile
十年後人類能夠實現備份大腦?
十三歲侵入NASA的黑客之王談「2045」計劃:https://kknews.cc/tech/x5zx5n8.html
李開復談人工智慧的可能趨勢:https://kknews.cc/tech/r98eq2v.html
李開復談人工智慧的可能趨勢:https://kknews.cc/tech/r98eq2v.html
一位行為經濟學家的銷售策略建議
漲價一向會讓消費者感到不悅,但透過心理學技巧,能夠降低反彈的機率。這裡以巧克力茶壺(用巧克力做成的茶壺,不但不會漏水,且泡出的茶還有淡淡巧克力香氣)的案例來看看怎麼做。
《訂價背後的心理學》作者李.考德威爾(Leigh Caldwell)在開賣的第一天觀察到,由於是推出的第一天,非常明顯的一點就是價格幾乎不重要,顧客被激起的好奇心更勝於價錢。
隔週,他走訪一家超市分店,那是他們巧克力茶壺進貨的首日,那裡賣得沒那麼快。幾個在挑選冰沙或優格的人,曾經拿起一整包的茶壺看,但是等到一、兩個小時後才有人買。
接下來幾週,超市的銷售漸有起色,但發展卻出乎意料:訂價1.59元(本文提到價格都是英鎊標記)的小茶壺賣光光,訂價1.99元的大茶壺卻在貨架上文風不動。在超市工作的瑪姬有一天約作者一起去一家店,觀察顧客怎樣做選擇。
「我一直在考慮調高小茶壺的售價,鼓勵大家多買大的。」她解釋,「營收沒有完全達到零售商的目標,因為太多人買小茶壺,可是我們也沒把握價錢調高後,不會流失既有顧客。」
「為了提高營收而失去一些現有顧客,不值得吧?」考德威爾問。
「大體上我並不在意。但這個時間點可能是關鍵。我們才剛開始建立初期的忠誠顧客基礎,絕對不想引起他們反感。但如果堅持這個價位,我們不是虧錢,就是失去超市的訂單。」
「那妳打算怎麼做?」
一週後,超市的貨架上出現三種新包裝:尺寸較大的茶壺、厄瓜多莊園巧克力的豪華版以及白巧克力版。三種新包裝的價格都落在2.10元到2.49元之間。原來的大茶壺售價還是1.99元,但存貨已經減少很多。
又過了一週,瑪姬發電子郵件給作者看新產品的銷售成績——大獲成功!每位顧客的銷售額增加了12%。產品重新調整成功,增加了營收卻沒有影響到現有的顧客。
更改產品的呈現方式,別只是更改價格
產品問世是關鍵時刻,因為會在顧客心中建立期待心理;一旦建立了,就很難改變。
我們很難想像及預測消費一項產品的體驗,所以購買時必須仰賴記憶;然而,我們上一次使用產品的體驗印象,多半複雜又不可靠。但是,我們對上次付多少錢的記憶,卻是相對簡單。相較於今天和上週的產品主觀體驗,比較今天和上週的價格容易多了。
這使得廠商要改變價格時,變得很棘手。同樣的產品,如果今天的價格比昨天高,顧客就有明確的理由(不管漲幅多麼微不足道)不買。一般人很難衡量做決定時不同因素的重要性比重,但是衡量有多少理由贊成或反對某件事情,可就容易多了。只要調漲價格,即使幅度很小,也是為消費者製造反對購買的理由;而調降價格,不管幅度多小,對消費者來說都是多了一個購買的理由。
因此,不管漲價的理由多站得住腳——原料的成本上漲,或舊有價格的需求超出負荷——都會打擊銷售。所以,企業應該設法調整產品的呈現方式,避免顧客直接比較新舊價格,這種手法稱為賦予購買決定新的框架(reframing the decision)。最常見的方式是改變包裝的大小,或增加產品的特色;或是提高價格,但提供暫時性的折扣。
有時解決辦法是頻頻改變價格,讓顧客記不住。你可以去你家附近的超市,比較2公升瓶裝的百事可樂或健怡可樂的價錢。過去兩個月,作者家附近超市的價格落在1.40到1.99元之間,另外還有兩瓶2.99元的包裝、由1.89元降為1.50元的促銷價,以及各種不同標價策略:有時是製造商在標籤印上1.79元的促銷價,有時則是由商家貼上1.99元的價格標籤。有一次,價格甚至同時超出這個範圍的上、下限:一瓶2.06元,四瓶4元。
這種矛盾的現象,可以讓消費者對產品標準價格的記憶變得模糊。在這種狀況下,當價格訂為1.89元,消費者就不會像看到漲價時那樣直覺地產生反感。或許消費者還是覺得這瓶可樂算是正常價格範圍內偏貴的一端,但會大為沖淡價格上揚激起的負面情緒。
縮小尺寸也是常見的漲價方法,但缺點是無法直接提高營收。不過,小包裝能為將來推出大包裝創造「空間」。你可以留意一下,很多巧克力棒本來都是單一尺寸,現在銷售的標準尺寸卻變小了,然後再推出比較貴的大包裝或「特大」包裝。這種方法通常都有效,只不過注意到你在玩什麼把戲的顧客會抱怨,這可能是你必須承受的。
如何應用
你可以有一些不同的變數用以區隔產品。例如瑪姬沒有在產品上市第一天就推出厄瓜多莊園豪化版。如此一來,才有機會推出新的價位,而不惹惱已經習慣現有價格的顧客。
推出新版本的產品時,可以利用暫時性的折扣,鼓勵大眾嘗試。目標是打破他們購買便宜產品的習慣,好讓便宜版本逐步淘汰、提高價格或縮小尺寸,才不會引起顧客抗拒或反對。
要密切留意顧客對各種改變的反應——不只是剛推出的時候,而是觀察一段時間。隨著他們習慣新的策略,反應也會跟著時間改變。有時一開始的價格震撼令顧客卻步,但會漸漸回籠。
反過來說,他們也許接受價格改變,但時間久了,卻會漸漸想要光顧其他地方。直接調漲價格通常會產生這種影響——銷售額不會馬上下跌,但幾個月後逐漸萎縮。持續與顧客交流可以觀察到這些,不光是抽象的空談,你要盡可能在購買現場觀察,問他們為什麼買(或不買)你的產品,問他們是否有注意到價格。
價格調整得愈多,能蒐集到的顧客反應數據就愈多。不是所有顧客的反應都一樣。如果是針對一小群顧客提供商業服務,或許跟他們個別協商調整價格會比一體通行更好;假如是銷售給一般顧客,不同的銷售通路應該採行不同的價格決策。對大部分的產品來說,不同的銷售通路乃至不同的購買行為,比不同的人口結構更重要,所以不必太費心分別徵詢55歲及25歲的意見。
可能的話,請保留調回原先價格、大小或產品選項的可能性。有時某些改變就是行不通,把產品調整回顧客熟悉、習慣購買的原樣,通常可以爭取顧客回頭。但是調整價格如果能規畫得宜又小心處理,就不太需要走回頭路了。
《訂價背後的心理學》作者李.考德威爾(Leigh Caldwell)在開賣的第一天觀察到,由於是推出的第一天,非常明顯的一點就是價格幾乎不重要,顧客被激起的好奇心更勝於價錢。
隔週,他走訪一家超市分店,那是他們巧克力茶壺進貨的首日,那裡賣得沒那麼快。幾個在挑選冰沙或優格的人,曾經拿起一整包的茶壺看,但是等到一、兩個小時後才有人買。
接下來幾週,超市的銷售漸有起色,但發展卻出乎意料:訂價1.59元(本文提到價格都是英鎊標記)的小茶壺賣光光,訂價1.99元的大茶壺卻在貨架上文風不動。在超市工作的瑪姬有一天約作者一起去一家店,觀察顧客怎樣做選擇。
「我一直在考慮調高小茶壺的售價,鼓勵大家多買大的。」她解釋,「營收沒有完全達到零售商的目標,因為太多人買小茶壺,可是我們也沒把握價錢調高後,不會流失既有顧客。」
「為了提高營收而失去一些現有顧客,不值得吧?」考德威爾問。
「大體上我並不在意。但這個時間點可能是關鍵。我們才剛開始建立初期的忠誠顧客基礎,絕對不想引起他們反感。但如果堅持這個價位,我們不是虧錢,就是失去超市的訂單。」
「那妳打算怎麼做?」
一週後,超市的貨架上出現三種新包裝:尺寸較大的茶壺、厄瓜多莊園巧克力的豪華版以及白巧克力版。三種新包裝的價格都落在2.10元到2.49元之間。原來的大茶壺售價還是1.99元,但存貨已經減少很多。
又過了一週,瑪姬發電子郵件給作者看新產品的銷售成績——大獲成功!每位顧客的銷售額增加了12%。產品重新調整成功,增加了營收卻沒有影響到現有的顧客。
更改產品的呈現方式,別只是更改價格
產品問世是關鍵時刻,因為會在顧客心中建立期待心理;一旦建立了,就很難改變。
我們很難想像及預測消費一項產品的體驗,所以購買時必須仰賴記憶;然而,我們上一次使用產品的體驗印象,多半複雜又不可靠。但是,我們對上次付多少錢的記憶,卻是相對簡單。相較於今天和上週的產品主觀體驗,比較今天和上週的價格容易多了。
這使得廠商要改變價格時,變得很棘手。同樣的產品,如果今天的價格比昨天高,顧客就有明確的理由(不管漲幅多麼微不足道)不買。一般人很難衡量做決定時不同因素的重要性比重,但是衡量有多少理由贊成或反對某件事情,可就容易多了。只要調漲價格,即使幅度很小,也是為消費者製造反對購買的理由;而調降價格,不管幅度多小,對消費者來說都是多了一個購買的理由。
因此,不管漲價的理由多站得住腳——原料的成本上漲,或舊有價格的需求超出負荷——都會打擊銷售。所以,企業應該設法調整產品的呈現方式,避免顧客直接比較新舊價格,這種手法稱為賦予購買決定新的框架(reframing the decision)。最常見的方式是改變包裝的大小,或增加產品的特色;或是提高價格,但提供暫時性的折扣。
有時解決辦法是頻頻改變價格,讓顧客記不住。你可以去你家附近的超市,比較2公升瓶裝的百事可樂或健怡可樂的價錢。過去兩個月,作者家附近超市的價格落在1.40到1.99元之間,另外還有兩瓶2.99元的包裝、由1.89元降為1.50元的促銷價,以及各種不同標價策略:有時是製造商在標籤印上1.79元的促銷價,有時則是由商家貼上1.99元的價格標籤。有一次,價格甚至同時超出這個範圍的上、下限:一瓶2.06元,四瓶4元。
這種矛盾的現象,可以讓消費者對產品標準價格的記憶變得模糊。在這種狀況下,當價格訂為1.89元,消費者就不會像看到漲價時那樣直覺地產生反感。或許消費者還是覺得這瓶可樂算是正常價格範圍內偏貴的一端,但會大為沖淡價格上揚激起的負面情緒。
縮小尺寸也是常見的漲價方法,但缺點是無法直接提高營收。不過,小包裝能為將來推出大包裝創造「空間」。你可以留意一下,很多巧克力棒本來都是單一尺寸,現在銷售的標準尺寸卻變小了,然後再推出比較貴的大包裝或「特大」包裝。這種方法通常都有效,只不過注意到你在玩什麼把戲的顧客會抱怨,這可能是你必須承受的。
如何應用
你可以有一些不同的變數用以區隔產品。例如瑪姬沒有在產品上市第一天就推出厄瓜多莊園豪化版。如此一來,才有機會推出新的價位,而不惹惱已經習慣現有價格的顧客。
推出新版本的產品時,可以利用暫時性的折扣,鼓勵大眾嘗試。目標是打破他們購買便宜產品的習慣,好讓便宜版本逐步淘汰、提高價格或縮小尺寸,才不會引起顧客抗拒或反對。
要密切留意顧客對各種改變的反應——不只是剛推出的時候,而是觀察一段時間。隨著他們習慣新的策略,反應也會跟著時間改變。有時一開始的價格震撼令顧客卻步,但會漸漸回籠。
反過來說,他們也許接受價格改變,但時間久了,卻會漸漸想要光顧其他地方。直接調漲價格通常會產生這種影響——銷售額不會馬上下跌,但幾個月後逐漸萎縮。持續與顧客交流可以觀察到這些,不光是抽象的空談,你要盡可能在購買現場觀察,問他們為什麼買(或不買)你的產品,問他們是否有注意到價格。
價格調整得愈多,能蒐集到的顧客反應數據就愈多。不是所有顧客的反應都一樣。如果是針對一小群顧客提供商業服務,或許跟他們個別協商調整價格會比一體通行更好;假如是銷售給一般顧客,不同的銷售通路應該採行不同的價格決策。對大部分的產品來說,不同的銷售通路乃至不同的購買行為,比不同的人口結構更重要,所以不必太費心分別徵詢55歲及25歲的意見。
可能的話,請保留調回原先價格、大小或產品選項的可能性。有時某些改變就是行不通,把產品調整回顧客熟悉、習慣購買的原樣,通常可以爭取顧客回頭。但是調整價格如果能規畫得宜又小心處理,就不太需要走回頭路了。
區塊鏈的可能應用
分析、預測
隨著不同產業逐漸投入區塊鏈運用層面,甚至有平台運用至「預測未來事件」。Augur 透過區塊鏈技術,允許所有用戶預測未來事件,對可能發生的事情下賭注,其中的獎勵機制促使用戶準確預測。該公司聲稱,整個過程預測過程將是分散的,運用「群體智慧」(Wisdom of Crowds),群眾的預測將會比單獨專家或機構來得更準確。他們的用戶可從股票市場預測到體育,甚至發生自然災害都可以是預測範疇。
加密貨幣尚未被實現的隱藏能力:貨幣分配
英文原文:https://hackernoon.com/why-everyone-missed-the-most-mind-blowing-feature-of-cryptocurrency-860c3f25f1fb
中文翻譯:https://buzzorange.com/techorange/2017/08/15/why-everyone-missed-the-most-mind-blowing-feature-of-cryptocurrency/
關於智慧合約
https://www.zhihu.com/question/27687960
很多人都已經從技術的角度解釋了區塊鏈技術的原理和一些技術細節,不過這些對普通人來說不重要。就好比現在逛網站並不需要懂 TCP/IP 協議一樣。
一句話概括,如果互聯網技術解決的是通訊問題的話,區塊鏈技術解決的是信任問題。
比如我和A賭NBA總冠軍,我說是勇士,A說是騎士。但是A的賭品我深表懷疑,擔心他輸了賴賬不給錢。沒想到A反咬一口,還懷疑我的賭品不好,簡直豈有此理!那咱倆就需要一個可信第三方來做公證人。我們可以各自出20塊錢給我們都信得過的公證人來保管。如果屆時勇士贏了,40塊錢就歸我。如果騎士贏了,40塊錢就歸A。
總決賽系列終於結束了,公證人捲了巨款40元跑了……
人和人最基本的信任到哪裡去了?
出於對人性墮落的失望,我和A決定使用區塊鏈技術來解決這個價值40塊錢真金白銀的問題。
辦法是寫一個『智能合約』來實現對賭。
方法是這樣的,我們先各自出20塊錢打到一個『智能合約』的賬戶裡,這個合約不被任何人控制,只被合約的代碼控制。現在『智能合約』的賬戶上有了40塊錢,我們開始運行智能合約。
合約代碼大概這樣:
比赛结果=NBA官方网站API.get("总决赛")
if(骑士赢)
pay 40 to A
else
pay 40 to B
這個賬戶唯一會動賬的可能就是獲取比賽結果後,按照規則支付。我把代碼給A看後,表示無異議。我們就把代碼放到一個區塊鏈上去運行。這個叫做『智能合約帳號』的賬戶,事實上是一個無人信託,它只會按照代碼去執行。等比賽結果出來了,代碼一執行,誰都賴不了賬。 A再信不過我,我再信不過A,我們都能實現對賭。
別的行業先不說,金融行業裡實在太多這樣的需求要這樣做。
比如私募基金協會出了個新八條,股票配資不讓超過1:1了,賭場老油條們怎麼辦?吃慣優先利息的銀行怎麼辦?
於是大家想了一個利用信託的辦法。劣後資金比如5000萬,要搞個1:3的槓桿,然後銀行出優先資金1.5個億,雙方都把錢打入信託賬戶。這時候信託賬戶上就有2個億了,然後再拿信託的名義去券商開戶做交易。
信託負責審核,如果產品的淨值小於0.8了,那麼平倉,銀行本金和利息拿走,剩下的錢歸劣後拿回去。如果淨值很高,並且到期了,銀行拿走本金和利息,剩下歸劣後。信託是銀行和劣後都認可的可信第三方,問題是這活不是白乾的,信託要收管理費用的。
如今一塊信託牌照大概能賣好幾十億,這錢太好掙了。
整個流程耗時耗財不說,千三的通道費管理費忍了,最關鍵的問題,如果信託公司出問題了呢?信託公司可不是都做無風險業務的,天天嚷嚷著要打破剛兌啥的,如果哪一天真出問題了咋辦。託管賬戶在銀行這裡,銀行也不是沒倒閉的風險。
要解決信任問題的辦法恰恰是誰都不信。咱們再寫個智能合約
净值=券商报告.get(产品名称)
运行天数=DateTime.Now - 起始日期
应计利息=优先资金量×日利息×运行天数
银行应收=优先资金量+应计利息
劣后应得=净值×总额-银行应收
if(净值<=0.8 or 运行天数>=到期天数)
{
pay 银行应收 to 银行
pay 劣后应得 to 劣后
}
往區塊鏈上那麼一放,一樣實現這個效果,但你不用擔心任何一個第三方違約或者倒閉,因為這裡並沒有第三方。或者說全世界都是你的第三方。具體的底層技術細節不是碼農兄弟就別管了,就跟你不需要知道鏈路層通訊協議照樣能打王者榮耀一樣。好了,民間配資公司都可以洗洗睡了。標準優先劣後協議開源後,資金方自己可以打錢進智能合約,等劣後方打錢進去,填寫個產品名稱後就可以跑起來了。配資公司吃掉的利息差有多大,舊模式其實浪費的資源就有多大。比信託的通道費和管理費大多了。
撇開費用不談,想想債券代持的蘿蔔章事件吧,不信任任何第三方是何等的重要。
如果債券代持這筆業務是放在區塊鏈上的話,那根本不可能有公章是偽造這種奇葩藉口。因為區塊鏈上的身份確認,是用高級加密算法的數字簽名來實現的,不是地攤上私刻公章能做出來的。人類科技都發展到這水平了,還在用印章和筆跡來驗證核實身份,這是何等奇怪之事。
說到中間人的浪費,莫過於保險公司了。保費里只有一小部分是真正發揮作用的,你的錢都付給 brokers 和宏觀的核心CBD地段大樓去了。更別說各種模糊摳字眼的不理賠條款了。
我們再寫個智能合約
這裡 I 是保險公司,C是客戶。 I 要先充1000到智能合約裡,B 要充30到智能合約。這是個標準合同,任何人充個1000都能當保險公司,試圖去賺個30塊錢。當然啦,保險公司靠大數定律賺錢,最好別只搞一次。智能合約在區塊鏈上跑不是沒有成本的,是要付費的,但遠比傳統大型金融中介機構要便宜得多得多。航班抵达时间=航空公司官网.get(航班号) pay 30 to I if(航班抵达时间-预期时间>3小时) pay 1000 to C
成本還不是主要考量,最最關鍵的是,沒有模糊條款。比起自然語言,代碼沒有歧義性。
如果保險公司和信託公司的違約風險大家沒體會的話,想想場外期權的違約風險,行業是有血的教訓的。比如現在大熱的螺紋鋼,沒有期權不給力啊,搞個場外的話,但交易對手違約風險怎麼辦。
這和槓桿的保險有點像,這是一張執行價4000的螺紋鋼的歐式看漲期權,期權的買方只需要充值期權費用進去就可以了。關鍵是期權的賣方,保證金充多少進去。到期了,如果期權的賣方保證金不足以支付了怎麼辦?螺纹钢报价=上期所报价.get("rb1801") Pay 期权费 to Seller if(DateTime.Now()>=到期日 and 螺纹钢报价>4000) 内在价格=螺纹钢报价-4000 pay 内在价值 to Buyer
我們有兩種解決方案,一個是在智能合約裡規定,一旦賣方的保證金不足以支付,直接強制平倉將保證金全部給多頭。另外,智能合約是可以發送消息的,讓賣方追加保證金進去,否則觸發強平。這裡的保證金不是給交易所的,而是打到智能合約的賬戶上的。
雖然是場外,但你也不用擔心對手盤風險了。事實上,合約你可以自己定義規則,不一定要是標準的期權期貨合約,衍生品人人可以設計,不用等交易所上市產品。
A股股票融券難,不易做空?
多頭(Long)和空頭(Short)都充值保證金進去,然後開始對賭。保證金比例大家商量在合約裡體現,也設計保證金 Margin Call 功能,這就是個股期貨了。看好 600516 的可以獲得沒有配資利息的槓桿,空頭可以不用融券做空。股价=上交所报价.get("600516") 价差=股价-对赌价 if(价差>0) pay 价差 to Long else pay Math.Abs(价差) to Short //Math.Abs 的意思是取绝对值
所謂『現金交割』的金融期貨,無非就是拿個指數對賭。滬深300啦,VIX期貨啦,莫不如此。
其實只要是有公允數據的東西,都可以拿來對賭,NBA比賽和飛機航班是否延誤之外,還能有各種各樣的公開數據,對沖掉你不想要的任何風險,只要你有交易對手。
其實在區塊鏈智能合約出現之前,金融行業裡已經有個東西有點像智能合約。這東西叫信用證,是銀行開具的。什麼意思呢?
大家都用過支付寶。在淘寶上賣家擔心發貨了買家不付款,買家擔心付款了,賣家不發貨。那怎麼辦?買家先打錢給支付寶,然後支付寶收到錢後告訴賣家買家已經付款,發貨收貨完成后買家確認收貨,支付寶放款給賣家。支付寶是淘寶交易的可信第三方。
信用證是貿易過程中,銀行充當可信第三方的角色。比如A公司要買B公司的貨,是筆跨國貿易。 A公司擔心付錢給B公司貨過不來,B公司擔心發貨了A遲遲不打款。於是,A公司給自己的銀行打保證金讓銀行開具一張信用證給B的開戶銀行,信用證裡寫了只要海關數據顯示貨到了,我就會支付給你錢。如果條件遲遲不觸發,那麼銀行會把保證金退還給客戶。這裡銀行就是支付寶的角色。
問題是如果跨國貿易對手是一家名不見經傳的小銀行怎麼辦?信用不足怎麼辦?
誰都別信誰的,大家用區塊鏈技術做。根本不信任任何機構比任何機構要可信。如今,已經有大量的國際信用證開始使用區塊鏈技術來做了。
智能合約怎麼寫?相信大家已經有數了。
供應鏈金融也是區塊鏈技術應用得比較多的一個領域。
放貸方要知道有沒有真實上下游的交易,應收確權等等。誰都別信誰,上區塊鏈,上下游把自己有沒有發貨有沒有應付寫上去。誰都別想賴賬,明明白白的公開賬本。放貸方就能做風險控制了。
上面說的主要是金融方面的應用,區塊鏈技術能做的其他領域的應用還很多。
比如房地產的確權工作,這比一紙地契要可靠,在一些法治程度比較差的地方應用。還節約了房地產交易的費用,當然這不如打保證金去智能合約裡那麼牢靠。畢竟公開賬本里明明白白就是你的地,地方軍閥完全不可以不認賬。
投票系統也是大的應用場景,不用擔心『被代表』了。因為區塊鏈上所有的信息都是靠數字簽名來驗證你的身份的,並且信息的一致性有保證,所以利用區塊鏈技術可以做到非常可信的投票體系。 NasdQ 交易所的區塊鏈交易系統 Linq 就是個好例子,股票的股東在做投票的時候,誰有多少股誰就有多少個投票權,股東決議變得可信而高效。
區塊鏈技術因為是跑在一個完全P2P的網絡裡的,完全不知道運行在網絡裡的哪裡,擁有絕佳的保密性和安全性。所以有一個比較有意思的項目,利用這個做的保密通訊工具。每個人的身份通過數字簽名技術驗證,不需要根證書啥的。
一個不需要中心化網絡的加密通信信道,簡直可以再造一個升級版暗網。
版權也是個大的應用領域,版權的交易可以去中心。這樣的場景在各行各業還有很多,區塊鏈技術的價值還等待大家去挖掘。
值得一提的是,智能合約的設計是區塊鏈這個技術本身就自帶的。第一個版本的 Bitcoin 就是跑一個腳本來解鎖一個加密數字貨幣的。
大意是說:我希望比特幣在 0.1版 就能擁有穩定的架構,未來不需要再做底層改變。在過去幾年設計比特幣的過程中,我發現只有使用腳本系統才能完成我希望支持的各種複雜交易類型——擔保交易、連帶合同、第三方仲裁、多方簽名等等。
中本聪:智能合约?比特币自带:http://www.8btc.com/satoshi-smartcontract
這就叫先見之明。
訂閱:
文章 (Atom)
程式語言編年史
程式語言編年史原文 下面這張圖片描繪了整個程式語言的歷史。包括各種程式語言的發明人、程式語言的特點和適用領域、被什麼網站或公司使用等 (檢視 完整高清圖 )。 之所以會有那麼多不同的程式語言是因為設計程式語言的初衷不同、對語言學習曲線的追求不同、不同程式之間的執行成本差異...












