深度分析 Puffin OS Phone—搶攻第三世界的智慧手機
- January 29, 2020
- Liu, An-Chi 劉安齊
現代人不聯誼了,以前抽鑰匙如今改抽卡,我與現任女友是在交友軟體上認識的,說說去年夏天以來的故事。
命運非常奇妙,當你越認為這個人和你的人生沒關係,你們彼此的牽絆就越強烈。一開始,我從來沒想過這女生會變成我女友。
Continue reading
Common Gateway Interface, CGI 讓伺服器(Server)將路由(Route)轉給轉外部程式(CGI 程式),使外部程式可以直接和客戶端(通常為瀏覽器) 互動。在 WEB 剛興起的時候,主要還是處於靜態伺服階段,單純傳送檔案或文字資訊而已。如果想要有表單之類的互動,也就是動態網站的話,就要靠呼叫外部程式來幫忙。隨著網路科技的發達,CGI 至今仁廣泛使用,像是 PHP 搭配 Apache。不過同時也有其他架構興起,例如以 Python、NodeJS、PHP、Java 等語言為基礎的網頁框架,像是 Flask 或 Express,抑或著實現前後端分離的 RESTful API 架構。
Continue reading不管使用本地端 Unix、Windows 或是連線到伺服器,我們都會打開終端機(Terminal),而連線等入進去的起使畫面會是 Shell,然後開發者可以輸入指令來跑程式。某方面來說,當我們在講「使用終端機」就等同「使用 Shell」,即便他們原本代表意思其實不一樣。關於 Shell 的詳細介紹可以參考「C Sehll」英文維基。
Continue reading
Paper: Not So Fast: Analyzing the Performance of WebAssembly vs. Native Code
Author: Abhinav Jangda, Bobby Powers, Emery D. Berger, and Arjun Guha, University of Massachusetts Amherst
Source: USENIX ATC 2019
作者們先前開發了 BROWSIX,可以讓 Unix 程式直接轉成 JavaScript 並跑在瀏覽器。BROWSIX 基本上就是把程式碼轉成 JavaScript 並且用 Browser API 來模擬 Unix System Call。此篇作者更進一步,開發 BROWSIX-WASM(fork 自 Emscripten)將程式碼轉成 WebAssembly,一來解決原本 JavaScript 效能不佳問題,同時也能可以拿來和 Native Code 在 SPEC CPU suite of Benchmark 上做效能比較。實驗結果 WebAssembly 在現代瀏覽器(Chrome & Firefox)上慢 Native Code 大約 50%,並深入探討為什麼會這樣。
整體來說我覺得是很有趣的一篇論文,整理了重點並加入一些我個人的見解。
Continue reading
我正在念交大資工所,我決定要走資工是一個漫長的過程,這篇故事想從最早開始講起,描述過往我對資工的興趣如何慢慢建立。每個人的故事都是獨一無二,但我的故事希望可以給別人一些靈感和借鏡。
Continue reading
紅黑樹是一種特別的資料結構,他具有跟 AVL Tree 一樣可以自動平衡的功能。
一個紅黑樹具有一下特性:
NIL 且為黑遵循這樣的規則,可以確保在增加和刪除節點時,保持著樹的平衡狀態。紅黑數保證當 node 數量是 n 時,他的高度最多不會超過 2log(n+1)。
在現實生活中,常常用來實作 set 和 dictionary,C++ 中的 std::set 和 std::map 背後正是紅黑樹。
Unix 中 processes 之間溝通有很多種,本篇介紹 signal 的簡易使用。可以先閱讀 Beej 的介紹。顧名思義,signal 就是程序發送和接受訊號,例如我們在使用 Shell 的時候,之所以 Ctrl-C 可以中斷程式執行,就是因為 Shell 捕捉到 Ctrl-C 發送的 SIGINT 訊號,知道有一個 interrupt signal,所以將程式中斷。
發送 signal 可以用 sigaction() 或 signal(),不過建議使用 sigaction 因為比較新,詳細差別可以看 Stack Overflow 這篇 「What is the difference between sigaction and signal?」。
如果想觸發 signal,可以用 kill() 或 sigqueue(),差別在於後者僅限 Linux,但後者可以藉由傳送 siginfo 加一些資訊在 signal 中。此外一些 system call 本身也會觸發 signal,例如如果嘗試 send() 到不存在的 socket,就會觸發 SIGPIPE。
當我們有很多 processes 時,並想用實現 shared memory 處理共用資料時,就可以使用 shared memory,來實作。建立 shared memory 可以使用 mmap 或是 System V shmget,但根據 Stack Overflow 「How to use shared memory with Linux in C」回答,shmget 已經有點過時,mmap 則比較新和彈性。
Shared memory 讓我們可以建立一塊共用的記憶體空間,mmap 會回傳一塊記憶體空間的指標,型別是 void *,如果我們想要放資料進去,可以用 memcpy 將物件、字串或任何東西拷貝進去。我們也可以直接將 void * 轉型成物件指標,這樣就建立 shared object,不同 process 可以直接對 process 存取物件。
Sunshine, blue sky, and sprinkles of rain — such diverse weather on August 16th-17th echoed the lively atmosphere at NTUST in Taipei, where the COSCUP was held. Participating in the conference, Rust Taiwan community hosted the “Everything in Rust” track with 11 talks, which were relevant to Rust. Speakers came from all over the world, including India, Netherlands, China, Hong Kong, and Taiwan, representing for some of the top influencers in the global Rust community. With more than one thousand attendees in COSCUP, it was the first time for these hundreds of people encountered the efflorescence of the Rust programming language.
Continue reading

TL;DR
I am glad to announce that the Traditional Chinese (正體中文) version of the Rust official website has been launched. Thanks to all contributors in the community. This article records our experience to achieve the work.
<風起>是日本知名動畫導演宮崎駿生平最後一部作品,內容以零式艦上戰鬥機設計者堀越二郎的生平作為主軸,穿插小說家堀辰雄的兩篇小說作品《風吹了》和《菜穗子》的劇情。 Continue reading
前陣子把 《The Clean Coder》(中譯: 無瑕的程式碼 番外篇-專業程式設計師的生存之道) 看完,剛好可以回答一個網路上最常看到的問題之一:
菜鳥工程師與資深工程師的差別是甚麼?
菜鳥工程師與資深工程師的差別是甚麼?
Continue reading其實我認為我大學期間,除了課業失敗的一蹋糊塗之外,其他方面還算優秀。不得不稱讚台大是一個很棒的舞台,讓我的立足點更高,使我有機會跟各式各樣的人接觸,參加各種有趣的活動,到不同的地方工作。在這環境下,我覺得過得還算是順遂。即便如此,仍有些事件是難以忘懷的失敗,給我很大的教訓和反省,但其中一個最難忘的故事莫過於我接下來要說的。
Continue reading
Chaos implies a disorder or complex non-linear system. It manifests any little changes could probably result in a massive transformation of the system, such as a butterfly flapping in Brazil could cause a hurricane in Texas, which is well known as the butterfly effect. The traits of chaos are in many fields, including math, physics, atmospheric science, fluid dynamics, ect., which leads Chaos to a vital research topic.
Continue reading
The technology around us affects us profoundly - emotionally, behaviorally, and cognitively. We could easily spend an enormous span not only to watch videos online but also browse websites on the internet every day. However, have you ever thought about how the sites work and what the mechanism is inside the box?
Continue readingIt’s a late night, and the man is still at the office, being in deep water over the crashed program. Everything goes wrong. He doesn’t even know why the code cannot run as usual. Unfortunately, he has forgotten what he had changed, regardless of the changes, which must be of paramount importance to the incident.
Continue reading
大資工時代,所有人都一窩蜂轉行、跨行進資工領域,尤其是這陣子人工智慧話題被炒起來,好像人人都該懂機器學習、深度學習。市面上產品好像都該有個「智慧」當作前墜,智慧手環、智慧眼鏡、智慧監控系統等等。而幾年前則是雲端技術很紅,所有東西都該加個雲。區塊鏈也被當作明日之星,各種公有鏈、私有鏈的新創如雨後春筍。再加上網頁前端、後端、手機 APP等人才需求本來就大,可以說資工領域的市場需求已經被捧到了極高點。
因為市場需求大,前景看好,所以很多人半路出家改當軟體工程師,這邊廣義包含各種程式開發的人才。國民教育都把資訊科學列為必修了,代表已經是全民皆碼農的時代。連非工程職位的業務、PM、顧問好像都必須會寫個 Python 才夠生存。
Continue reading
終於都放榜了,所以可以來寫心得。如副標題,推甄上108學年度交大資工所丙組,然後台大網媒所只有備取 10。
我承認標題與某專頁有點似曾相似(半路出家的軟體工程師:咦?),內容也有點老生常談,不過還是不寫不快,所以決定來分享一下整個過程。
Continue reading
Gitbook 連結: https://tigercosmos.github.io/master-js-in-30-days/
接下來介紹控制程式的方式之一,也就是條件判斷。
條件判斷顧名思義就是針對不同的條件來判斷要做出怎樣的結果。舉例來說,現在要採收水果,但我們只要取下已經成熟的水果,還沒熟的我們要讓他繼續成熟。
或是我們有更多條件,例如大於 500 公克的蘋果放到 A 籃子,介於 200 到 500 公克的蘋果放到 B 籃子,小於 200 公克的蘋果不要摘下來。
現實生活中我們都在做各種判斷,而我們當然可以把這種判斷的工作交給電腦來做,接著讓我們來了解電腦怎樣做判斷的。
Continue readingGitbook 連結: https://tigercosmos.github.io/master-js-in-30-days/
接下來介紹控制程式的方式之一,也就是條件判斷。
條件判斷顧名思義就是針對不同的條件來判斷要做出怎樣的結果。舉例來說,現在要採收水果,但我們只要取下已經成熟的水果,還沒熟的我們要讓他繼續成熟。
或是我們有更多條件,例如大於 500 公克的蘋果放到 A 籃子,介於 200 到 500 公克的蘋果放到 B 籃子,小於 200 公克的蘋果不要摘下來。
現實生活中我們都在做各種判斷,而我們當然可以把這種判斷的工作交給電腦來做,接著讓我們來了解電腦怎樣做判斷的。
Continue reading
Gitbook 連結: https://tigercosmos.github.io/master-js-in-30-days/
電腦科學中資料讀寫包含存取(input, I)和輸出(output, O),這也是為什麼常常看到 I/O 這個術語的原因。在電腦科學術語中中,廣義的 I/O 包含直接對檔案(file)、緩存(Buffer)以及數據流(stream)做操作。檔案就是已經存放在儲存裝置中的文件,緩存是還在記憶體中的資料,數據流則是一串序列化的抽象資料,這再晚點會深入介紹。
資料傳輸在寫程式的時候,不管是你想要從文件中讀取資料,或是資料從網路上傳輸,亦或是資料在程式與程式之間傳送,都常常會用到。事實上我們寫程式通常也就是為了處理資料,如果沒有資料的話,還真的不曉得程式能做什麼事情!(有啦,算算質數之類的 XD)
本篇會將 NodeJS 上會用到數據型態作介紹,當作先備知識。接著只會著重在檔案讀寫講解範例,其餘像是數據流的操作、緩存的處理,待日後的進階文章才會詳細介紹。
Continue readingGitbook 連結: https://tigercosmos.github.io/master-js-in-30-days/
我們知道程式碼可以幫我們做很多事情,例如睡不著要數羊的時候,就讓程式跑個迴圈,一下就幾百幾千萬隻羊了。但是目前為止,所以工作都是被放在一起的,並且只能被執行一次。也就是說,假設我有三件工作,寫成程式碼可能會長這樣:
Continue readingGitbook 連結: https://tigercosmos.github.io/master-js-in-30-days/
這個世界由各種不同的東西(Things)組成,我們身處的宇宙、太陽系、每天繞地球的月球,山海與花花草草。
有一部電影〈The Theory of Everything〉描述一位已逝的偉大物理學家——霍金,年輕時候的愛情故事。霍金一生為追求宇宙的真理而努力,物理學家堅信世界應該是由一個可以統合並解釋所有物理現象的理論所支配,亦即萬物的理論。
在 JS 的世界中,萬物的理論就是 object 這個物件型別,這個物件型別包含各種形形色色的玩意,讓我娓娓道來。
Gitbook 連結: https://tigercosmos.github.io/master-js-in-30-days/
JS 可以當作獨立的程式直接運行,也可以跑在網頁上。本篇先介紹如何直接運行 JS 就好,因為要跑在網頁上,我們必須寫一份網頁出來,其中概念不只 JS,還必須懂 HTML,但這邊我們先了解 JS 就好,所以跑在網站上的方式待晚點再作介紹。
Continue readingGitbook 連結: https://tigercosmos.github.io/master-js-in-30-days/
我們已經了解一個最簡單的程式是如何建立,以及知道電腦跑程式背後的原理了。為了正式開始學習怎麼寫一個程式,我們首先要了解變數(Variables)是怎麼一回事?
Continue reading

This summer, I have been a software engineering intern at CloudMosa, Inc., a company which develops Puffin Browser.
During two months of the summer, I have participated in some features development and fixed some bugs. Meanwhile, I have a look at the whole picture of Puffin Browser.
Continue reading大約在一年前,因緣際會我開始接觸瀏覽器開發,一開始是貢獻 Mozilla 的 Servo Brower Engine 專案,後來覺得還是不夠了解瀏覽器,就想說就由寫文章來強迫自己學習。ITHome 的鐵人賽剛好給了我一個行動的契機,於是就開始寫了有關於瀏覽器的系列文章。
Continue reading
Servo is a huge project. I have counted the lines of code for you. There are almost a hundred thousand lines of code in the Servo project. To develop such a big project, knowing how to debug in a right way is very important, since you would like to find the bottleneck in a fast and efficient way.
In this article, I will teach you some tips to use GDB developing and debugging your Rust code in the Servo project.
Continue reading
在台大的日子已經過完三年整了,本篇記錄從大三寒假到大三下在生機系的生活。故事線大概可以分三條,研究篇、課業篇、課外篇,不過雖然我念生機系,但大部分都不是在生機系的故事就是了。
Continue readingThe First Time Developing Github App via Probot

最近在開發氣象機器人的時候,為了要促進工作流程的效率,不得不加入 bot(機器人) 進來工作流程。所以就邊研究邊實做了一個,在此記下開發心得。
Continue reading
沒有人會懷疑了解天氣的重要性,我們總是看氣象預報或查天氣來決定等下外出時要不要帶傘,衣服要穿多厚是否需要帶件外套,或是需不需要先擦防曬油戴一副墨鏡出門等等。
想查天氣的時候我想大部分人可能就是 Google 一下、上中央氣象局網站、使用 APP、看新聞。或是有種很潮的做法是問 Siri,不過效果可能不太好 ⋯⋯。
Continue reading
Your First Big OSS Project: Servo Browser

開放原始碼軟體,又稱開源軟體(Open Source Software),顧名思義是將軟體的原始碼公開。詳細介紹可以看維基百科介紹以及什麼是開源一文。
身為軟體開發者,我們常常會需要很多工具來幫助我們更簡單完成工作,而且我們都知道沒事不要自己造輪子,這時候就會看看網路上有沒有現成的工具。例如想要開發機器學習可能就會用 Tensorflow,想要開發網頁前端可能會使用 Angular,想要開發 Android App 可能會用 Kotlin,平常用的 gcc 或 clang,甚至 Linux 作業系統通通都是開源軟體。
Continue reading
開源專案中,如何找出問題,並解決他?

開源專案的流程很簡單,看 issue 有甚麼,然後改 code,接著發 pull request,順利的話就會被 merge,成為一個 commit。開源,就是一直重複這些步驟。
發 issue 很簡單,你哪邊看不爽,不管是 bug、feature、doc、style,就可以發個 issue。當然發 PR 也很簡單,但能被 merge 的 PR 就不簡單。所以如何寫點新東西或是修正 bug,然後發 PR 最後被 merge 進去?
Continue reading
Angular 5即將在近期發布,讓我們來看看有啥特別的呢?
沒用過 Angular 也聽過 Angular,沒聽過 Angular 總之你現在看過了 XD
Angular 5即將發布,本文將介紹什麼是 Angular 以及新版本有啥有趣的東西。本文為了友善初學者,會從最基礎的東西講起,如果想直接看版本 5 的新功能可以直接跳到後面。

不知不覺,兩個月下來已經在 Mozilla 的 Servo 有 8 次 commits。 Servo 為新一代 Firefox 的基石,所以做起來非常有成就感,也對瀏覽器本身開始有極大興趣。而且這個社群非常友善,開發過程讓人覺得很快樂,看著兩個月以來的紀錄,有感而發寫下這篇文章。
Continue reading
I know there are many people want to join the open source community whether they are already a coder or a newbie to writing codes. I was once a guy who want to contribute to open-source projects, and I did not know how to do it. Now I am a contributor to many open-source projects.
I thought many people would have the same question which is how to commit to open source, so I write this article to record my experience and guide you to find the way. If you just want to read open-source parts, skip the previous paragraphs and jump to the rear.
Continue reading最近機器學習、人工智慧、深度學習等等名詞非常夯,本篇用深度學習簡單實作一個可以辨識不同種類花朵的 Android App。第一部分是訓練圖片的模型,這時已經可以在電腦上作辨識了。第二部分是將第一部份訓練的模型放進 Android 裡面,實作手機辨識的部分。
Continue reading