Mutexes VS Semaphores 大揭秘
2014-01-30
尋著 jserv 的文章,找到了這一篇文章 Mutexes and Semaphores Demystified 。
Mutex 與 Semaphore 都是用在保護 critical section,確保多個 process 平行運作並存取資源時,執行結果不會因為執行程序的時間先後的影響而導致錯誤。 Mutex(Mutual Exclusion) 與 Semaphore 的差別在於: 1. process 使用 mutex 時,process 的運作是持有 Mutex,執行critical section 來存取資源,然後釋放 Mutex. Mutex 就像是資源的一把鎖。 2. process 使用 semaphore 時,process 總是發出信號(signal),或者總是接收信號(wait),同一個 process 不會先後進行 signal 與 wait。也就是說,process 要嘛當 producer,要嘛當 consumer,不能兩者都是。Semaphore 是為了保護 process 的執行同步性。
Mutex 與 Semaphore 要解決的是不同的問題。了解這個部份後,就可以來區分 mutex 與 binary semaphore。mutex 確保數個 process 在一個時間點上,只能有一個 process 存取單項資源,而 semaphore 則是讓數個 producer 與 數個 consumer 在訊號上進行合作。
另一個 mutex 與 binary semaphore 的差異在於,使用 mutex 會導致 priority inversion。也因此 mutex 中多半採用了一些機制來防止 Priority Inversion。Priority Inversion 是基於 process 持有 mutex 的概念,使得數個不同 priority 的 process ,在等待資源時透過 mutex 傳遞 priority,避免 priority inversion 發生。
註:Mutex與Semaphore在很多書、文章中都有很多不同的解釋。我認為這篇文章談的是最嚴格定義的 Semaphore (Dijkstra 所提出),因此兩者有相當不同的區分。而後衍生出的 semaphore ,則包含了 counting semaphore 與 binary semaphore,也才能夠用於保護資源,或是處理 multiple identical resources 的問題。
Other Link:
- Difference between binary semaphore and mutex
- Wikipedia: Example: Producer/consumer problem
每個C語言開發者都要了解的 Undefined Behavior
2014-01-21
在閱讀LLVM 部落格中的 What Every C Programmer Should Know About Undefined Behavior #1⁄3 後,決定簡短的記錄這系列文章的重點並且在seminar上分享出來。我認為這篇文章是C語言開發者在開發一段時間後必讀的文章。文章中提到許多的 undefined behavior 是很容易犯的錯。這之中牽涉到 compiler 進行的最佳化,使得撰寫C語言時必須注意一些細節,才能避免在最佳化的過程中,產生與預期不相同的執行結果。
如果需要中文翻譯的讀者,已有中國網友翻譯,可參考以下文章 1. 未定义行为:What Every C Programmer Should Know #1⁄3 2. 未定义行为:What Every C Programmer Should Know #2⁄3 3. 未定义行为:What Every C Programmer Should Know #3⁄3 4. About Undefined Behavior[译文]
kaggle 試玩
2014-01-20
Kaggle,是machine learning 的 crowd-sourcing網站。有需要的公司可以在上面提出專案,讓大家去解,通常會給獎金,甚至是一份工作。已經在上面提出專案的包括
- Amazon,獎金$5000,Amazon.com - Employee Access Challenge
- Facebook,一份工作,Facebook Recruiting Competition、Facebook II - Mapping the Internet、Facebook Recruiting III - Keyword Extraction
- StumbleUpon,獎金$5000,StumbleUpon Evergreen Classification Challenge
以前在學校時上過 Machine Learning 的課,而 kaggle 提供了很棒的資源讓大家接觸更大規模的資料。這2周試玩 Kaggle,我先做了由 kaggle 所提供範例。
Titanic: Machine Learning from Disaster 這個練習有很詳細的說明,教大家使用 excel 做最基本的資料分析,或是改用 python 寫最基本的運算。最後是用 random forest 這項演算法來做機器學習。初學者從這項練習可以了解到進行機器學習時會遇到的狀況。
https://www.kaggle.com/wiki/GettingStartedWithPythonForDataScience
Operating Systems: Three Easy Pieces
2014-01-20
Operating Systems: Three Easy Pieces 剛翻到這本線上作業系統書,他的表格整理的很不錯。把作業系統的功能規類到 Virtualization, Concurrency, Persistence。把這些小分類的名詞弄懂了,也大致能了解作業系統的作用了。
kimono Turn websites into structured APIs
2014-01-16
kimono : Turn websites into structured APIs from your browser in seconds
kimono: a 60 second introduction from Kimono Labs on Vimeo.
今天看到這東西滿酷的。過去我們需要撈網站資訊時,常要自已動手做爬蟲、再做成API。以前氣象局還沒有開放資料平臺時,想做氣象app的人就等自已想辦法做API來餵。像是這個我送過小patch的專案 twweather。而kimono 把這個過程變的相當簡單。不過這種東西會面臨到一個問題,就是內容來源始終是別人提供的,所以一旦 html 格式改了(像是以前氣象局常大改格式),data extraction就得重做(當然在kimono上看起來相對簡單)。但我覺得最好的方式還是能想辦法找來源提供者合作,如果是公家機關就要要求開放資料,如果是商業機關就談商業授權,能夠由來源提供穩定一致的API還是最好的解決方式。
Google Shows How To Scale Apps From Zero To A Million Requests Per Second, For $10 你可以在 7分半鐘的時間內,利用他們的工具架出一套架構,包含一台 load balance, 數百台 apache server 可以接受 1M/second 的 Request.
等於是自已加 64台機器當 client, 用 curl 每秒發送 1M http request 然後架一台 load balance, 200台 apache server,當做server 來接收 request 用這樣的方式來模擬網路服務
2014/1/15 GDG Taipei #1 - A Tour of Google Cloud Platform
Session #0: A Tour of Google Cloud Platform
LittleQ, Organizer, GDG Taipei
上半場的session,講者littlq介紹Google Cloud Platform的ecosystem,以及他們團隊所開發的BigData lab,有需要分析大量資料的人非常推薦去看一下他們的作品。他們將Google App Engine 與 Google Cloud Platform, Google Bigquery 等服務串接在一起,只要在網頁上就可以寫簡單的程式進行 Bigdata 的分析、圖表甚至是機器學習。
這讓我想到 Jeff Bezos 的演講,未來資訊的應用將會像水電一樣讓一般人容易使用,而我覺得 BigData Lab 我們向前推了一大步。
Session #1: Google Compute Engine 101
Karthikeyan Rajasekharan, Technical Lead of Google Cloud Platform Asia
這下半場的 session 則是Google於新加坡的 Technical Lead 來介紹 Google Compute Engine。基本上就是 cloud virtual machine。類似的服務像是Amazon EC2。這部份大家都很熟悉,不過 Google 推出的效能、價錢都不錯,未來兩家公司在雲端基礎建設有的拚了。
演講包含一些簡單的 demo,另外也有 Google Compute Engine Demos 讓大家可以自行體驗在 Google Compute Engine 上開機器的速度有多快,現場 demo 開10台 instances 大約是10秒鐘。體驗這個應用需要經過身份認證,要收費的,要玩的人自已得注意一下。
那些年,我們一起上的 BBS: 洪任諭 PCMan at TEDxNCTU 2013
2014-01-13
我的偶像PCMan,精采的演講
如果你有自己的興趣 希望不要放棄他 不管你做的工作你到底喜不喜歡 其實你都不需要放棄你自己的興趣 大家永遠都不要放棄自己的特色 不要放棄自己的興趣 永遠不要放棄一個讓自己與眾不同的機會
永遠
Embed base64 image in markdown
2014-01-11
Today I come up an idea with embedded image inside markdown. When writing document with markdown syntax, we can embedded inline html code to enhance the content. It turns out that base64 images could also be embedded inside markdown document by using img
tag. Below is an example showing HTML5 Logo using embedded base64 image (instead of external resources). However, be careful about this kind of inline base64 image. Size of document would be largely increased which would make your webpage slow even you only embedded a medium-size (100KB) image.
今天我想到了一個可以在 markdown 中嵌入圖像的作法。使用 Markdown 編寫文件時,我們可以使用 inline html 使文件更豐富。這也代表我們可以用 img
tag 把 base64 影像放置在 Markdown 文件中。下面是一個利用 base64 影像來顯示 HTML5 Logo 的例子(而不需用到任何外部的影像資源)。不過在使用這種嵌入 base64 影像時要特別小心。即使你只是放了一個中等大小(100KB)的圖像,你的文件大小會增大很多,使得頁面要花上很多時間載入。
TechTalk@TW Episode 24 - 開放原始碼授權
2014-01-10
TechTalk@TW: 專訪 Episode 24 - 開放原始碼授權 中央研究院資訊科學所的林誠夏介紹數種開放原始碼的授權。聽完後對軟體授權有一些基本的認知,推薦給像我一樣的軟體專利新手。