Code makes the world a better place

在 Linux 上使用 Perf 做效能分析(入門篇)

簡介

透過效能分析工具 (Profiler),我們可以得知更多關於軟體的運行資訊,像是花了多少記憶體、多少 CPU Cycles、多少 Cache Misses、I/O 處理時間等等,這些資訊對我們去找到程式效能瓶頸很有幫助。想辦法找到那裡讓程式變慢,進而最大化效能,便是我們做效能分析的最大目的。

本文將介紹 Linux 上的 perf 效能分析工具,藉由一個簡單的程式範例,示範如何使用 perf 去分析一隻程式,我們將會發現使用分析工具時能更輕易的發現問題根源。本文參考 Gabriel Krisman Bertaz 寫的 Performance analysis in Linux

Continue reading

使用 Elixir 建立簡易 HTTP Server

簡介

Elixir 是一個動態 Functional Programming 語言,專門用來打造可擴展且易維護的系統。

Elixir 基於 Erlang VM 所建,適合用在需要低延遲、分散式、錯誤容忍(fault-tolerant)的系統上,同時也可以用在網頁開發、嵌入式軟體、資料處理、多媒體處理等用途上。這篇文章「Game of Phones: History of Erlang and Elixir」介紹了 Elixir 來龍去脈,值得一看。

Elixir 寫起來滿有趣的,寫了之後才意識到原來 JS 和 Rust 從 Functional Programming 借鏡了不少概念,所以在從頭學 Elixir 的過程,一些 FP 的特色,像是 Pattern Matching、Enumerable 都已經在先前接觸過。

看完官方的語言教學後,覺得需要藉由寫小專案更熟悉,所以就研究如何用 Elixir 建造一個簡單的 HTTP Server。

Continue reading

交大觀察與心得(三):碩一下課美術社&研究篇

前言

接續上篇介紹碩一下的修課,接下來談談課外活動和研究。課外活動只有去美術社畫畫,相較於大學時到處實習、參加開源專案和參與社群,就顯得比較單調。由於我比較晚才下定決心好好念碩士,在探索領域和找題目上已經比較晚,但我依然在這學期發現自己有興趣研究的領域,並且也找到題目,暑假也開始進行研究了。

Continue reading

完整介紹 WebAssembly 使用方式

1. 簡介

先來說說 WebAssembly 是甚麼,為甚麼我們需要這玩意?

如今網頁技術已經無所不在,人們上網時間佔一天好幾個小時,人們透過網路享受各種服務,各種應用服務也漸漸都轉移到網頁上,桌面程式或手機程式也越來越多採用網頁程式 (Web App) 或混合式程式 (Hybrid App),可以說網頁技術已經主宰了世界。

網頁是採用 JavaScript (JS) 語言,隨著瀏覽器進步、JS 引擎發展,我們似乎已經達到優化效能的瓶頸,JS 不管怎樣快,由於是直譯式語言,會一行一行讀程式碼同時進行編譯,這種模式鐵定會比編譯式語言像是 C++ 還要慢。那你會問,為啥網頁不用 C++ 這種編譯式語言?這是因為不管是事先編好,編譯出來的執行檔會很大,這樣傳給瀏覽器反而會造成網路傳輸花太多時間,或是瀏覽器拿到檔案才開始編譯,那要等他全部編完才能跑也會花太多時間。所以直譯式語言的 JS 先傳給瀏覽器,由於是原始檔檔案不會很大傳輸時間就還行,然後拿到檔案後一行一行編譯,先編譯好的部分可以先跑,也不會讓速度過慢。

不管如何,JS 效能已經到上限了,人們開始想要怎樣讓網頁可以在瀏覽器上跑得更快,於是就有 WebAssembly (WASM) 的誕生了,WASM 是一個低階類似組合語言的語言,其效能可以接近原生 (Native) 的程式,像是 C++ 或 Rust 跑出來的效能。開發網頁時,JS 和 WASM 會搭配使用,概念簡單來說是一般程式邏輯一樣給 JS 跑,但把部分負擔很重的程式碼改成事先編譯的 WASM,這樣就可以讓效能更加進化。同時享有 JS 可以快速啟動的好處,也享有 WASM 在運算複雜的程式碼上有高效能的表現。

接下來本文將會介紹如何使用 JS 搭配 WASM 進行開發。

Continue reading

交大觀察與心得(二):碩一下修課篇

前言

我感覺這學期是這兩三年來過的最快樂的學期了。過得很充實,修了四門課,依舊參加美術社,寫了不少文章,找到研究方向和題目。念資工果真是一件很開心的事情。大致上,碩一下分為三個方面,分別介紹修課方面、美術社和研究方面,本篇先介紹修課方面。

Continue reading