Programming

A collection of 14 posts
ETHTokyo 2024 黑客松參賽心得
Programming

ETHTokyo 2024 黑客松參賽心得

如同去年的承諾,今年再次來到了東京!不過可能因為主辦單位的不同,與去年相比,規模相對比較小,不過這次在東京舉辦的參加 ETHTokyo 2024 駭客松的經歷依舊是充滿有趣的回憶,這次比賽的特別之處在於,我被同事們排擠,只好被迫自己組隊參賽然後竟然意外得獎,事後回想還是覺得蠻好笑的,就用文章記錄下我在這次活動中的一些心得。 第一印象與初步策略 活動第一天是晚上六點才開始,吃完晚餐抵達會場後,這次會場的環境還是不錯,在 PARCO 18 樓 Digital Garage 的辦公室,比起去年,今年的規模明顯小了很多,總共參加者大約只有兩三百人,但是場地佈置和網路、飲食等設施依舊很不錯,看得出來日本的主辦單位對於活動的精緻度都有一定的要求,現場的氛圍也非常好,參加者與贊助商之間的交流與合作非常熱烈。 接著,我就先坐下快速分析了這次比賽的策略,並開始思考如何充分利用時間來達成主要的比賽方向以及贊助商們所設定的目標。 自行組隊與漫長奮戰 第二天我來到會場的時間有些晚,大約下午三點才到達,當時同事們已經組了兩個隊伍,並且因為人數限制和題目簡單的關係,他們說「Kordan 自己組一
6 min read
一鍵生成:用 AI 將 Figma 設計稿直接生成可維護的程式碼
Programming

一鍵生成:用 AI 將 Figma 設計稿直接生成可維護的程式碼

長期以來,切板總是對於前端開發人員來說最痛苦且費時的事情,我們目睹了 Web 技術的驚人進步,但將設計稿直接轉化為程式碼一直沒有令人滿意的解決方案。 就在昨天, Builder Velocity 發佈了 Visual Copilot(由 AI 驅動的「Figma to Code」),只需一個滑鼠點擊即可將 Figma 設計即時轉換為 React 程式碼。
8 min read
ETHGlobal Tokyo 2023 黑客松參賽心得
Programming

ETHGlobal Tokyo 2023 黑客松參賽心得

ETHGlobal Tokyo 是一個在東京舉行的黑客松活動,為期 36 小時,邀請了來自不同背景的 Builder,包括開發人員、設計師和藝術家,一同使用以太坊技術建立創新項目。該活動將提供豐富的 Web3 資源,如導師、贊助商和軟體,以協助參與者在黑客松期間創造出卓越的作品。 該活動對參與者完全免費,但參加者需要抵押 0.06e 以確認其本人會親自到場參加,並且因為是現場活動有名額限制,在活動前會嚴格的審核,只有參加黑客松並在活動結束時送出項目,這部分抵押金額才會全額退還給參加者。 在活動期間,參與者可以根據自己的興趣和想法進行項目建立,只要是基於以太坊技術的都可以,目標是透過提供技術幫助、導師和資源來幫助參與者實現自己的項目想法。此外,許多贊助商會提供獎金,以鼓勵參與者集成其協定和 SDK,參與者可以利用這些資源進行項目建立。 我已經大概十年沒有參加黑客松比賽了,即便我很喜歡這類型的開發者活動,但是在台灣的比賽中,後面幾年讓我最怕的就是以下幾點: * 實際的成果都不是現場做的,最後變成商業簡報大賽 * 智慧財產權實際上沒有開源,而且還被有心人士濫用 * 要求是現場的
6 min read
C

好的設計是取得適當的折衷 - C# 語言特色淺探

好的程式語言必須讓程序員專注在功能上的開發,而不是被程式語言給制約。這是我個人的感觸,使用 MFC 開發 UI 實在是太過痛苦了,常常得查線上文件 API 的使用方式,光是字體跟字串就可以搞得很複雜。我實在很不喜歡心至碼不至的感覺,所以下定決定轉換到 C#,來看看 C# 有什麼特別吸引我的功能: LINQ(Language-Integrated Query) (C# 3.0) 一般我們只能對資料庫下 SQL 的語法,但是 C# 中我們可以透過 SQL-like 的方式直接對 List, Array 等常用的 LINQ-enabled 資料結構直接做查詢取值的動作!功能很強大,使用起來卻毫無負擔! 1 2 3 4 5 6 int[] scores =[new](http://www.
4 min read
Programming

為什麼你不該滿足於 SVN 而該改用 Git?

先講答案:因為 SVN Branch 維護非常麻煩(就我個人維護六七個以上 svn branch 的經驗…)。 常常做這些 code merge 動作都比寫程式本身還花時間,更可能一不小心就許多未知的錯誤。 以下是我推薦的改使用 GIT 來管理程式碼的理由: 1. **不只是 SVN 加強版:**GIT 跟 SVN 的根本架構跟概念完全不同,絕對不只是 CVS 到 SVN 這種躍進而已。 2. Branch:對 Git 來說,所有指令都是以 repository 基本單位,切換 branch 只要下個指令,你當下的程式碼就會變換(snapshot)。但對於 SVN 來說它先天上的弱點就是 Branch 的支援度不高,所以我們才需要 LABEL,
2 min read
Programming

同步機制比較:Spinlock v.s. Mutex

Spinlock 與 Mutex 都是很常用的同步機制,今天來看看這兩者在 Windows 上有什麼樣的不同!(推薦 MSDN 上的 Locks, Deadlocks, and Synchronization,寫得很不錯!) Spinlock 我們可以簡單的從中文翻譯「自旋鎖」看出一點端倪,基本上就是個 Busy waiting 的動作,得一直等待指定的鎖被釋放之後,才可以繼續進行下一步動作。概念上非常簡單,實作上就不是如此了。例如:如果鎖還沒被釋放這個執行緒就被 swap-out 而進入 sleep 狀態怎麼辦?兩個執行緒同時要求取鎖的同步該怎麼處理? Mutex 事實上 Mutex 是一種抽象概念:透過一個變數或物件確保 Critical Section 內的資料同一時間內只會有單一存取。所以文章標題本身就不是個很精確的命題。根據 MSDN 上的說明,Mutex 約可分為以下三類同步機制: * (Interrupt/Queued)
2 min read
Programming

物件導向程式設計五大原則:SOLID

前幾天看到一篇非常有趣的文章,因為作者的老婆生產完要回到軟體開發的工作,作者就藉由生活上的比喻讓他瞭解何謂物件導向設計。很推薦大家有空的話可以看一下,作者在文中用很有趣的方式解釋了 SOLID 原則: S: Single Responsibility Principle 單一責任原則,一個類別只負責一件事。當然,我們甚至可以把所有的程式都放在同一個原始檔中,但是這樣就會造成耦合度過高,導致維護成本高、可用性低。(就如同我們在前篇文章所提) 來看個例子,在 Rectangle 底下這兩個成員函式都是非常直觀的:畫矩形、算面積。問題出在什麼地方呢?問題就在於 draw() 與 area() 根本就是兩件獨立的事情,即使都與 Rectangle 有關。draw() 只會在圖形化應用被使用,而 area() 則是在地理計算應用中使用。 「但是,draw() 跟 area() 還是分開的啊,至少這作法直觀」,你可能會這樣想,這樣會有什麼缺點呢? * 明明不需要的,卻依舊被引用進去了,多出冗餘的程式。
5 min read
C

重新認識標頭檔(C/C++ Header Files)

讓我們來複習一下標頭檔的用途:對小型程式而言,基本上我們只需要把所有的原始檔一起編譯,就可以產生出所要的執行檔。但是如果到了大型的專案呢?很多程式勢必是朝向模組化並且講究可再使用性高的方向去設計。其中最關鍵的就是可再使用性(Reusability),但別人要怎重複使用這段程式呢? 首先,回想一下我們如果完全不使用標頭檔又要把一個程式切成好幾個原始檔完成,勢必得在各個原始檔前面加上必要的「事先宣告(Forware Declaration)」,這些東西對我們來說是相依性高的,因為這些事先宣告可能跟原始碼本身的實作沒有關係。所以為了可再使用性,我們把這些事先宣告都放進了標頭檔,如此一來,不論是動態函式庫或是靜態鏈結,我們都可以透過引用這個標頭檔而再用該函式庫。 但是也不是每種語言都有標頭檔的設計,例如 Java,就透過 package 的命名機制(有興趣可以詳讀這篇文章),避免歧義,讓編譯器可以直接找到所需要的 Symbol。 標頭檔的概念很容易理解,要照著做也只是把變數拉出去而已。那麼到底還有什麼值得寫出一篇文章的地方呢? 不要把標頭檔當垃圾桶 有些人可能會為了方
4 min read
Programming

如何在 Windows 中寫程式如同於 Linux 一般?

最近因為工作的需要,很多程式都得在 Windows 底下編譯、執行。這對於大二之後就再也沒有寫過任何 Windows 程式的我真的是綁手綁腳,怎麼用都不習慣。雖然我認為 Visual Studio 真的很強大很好用,但是很多時候我們並不需要這麼龐大的 IDE,殺雞焉用牛刀呢?這時候就會開始懷念起 Linux 底下的 Vim 與 GCC 了… 之前就知道 cygwin 可以在 Windows 底下創造出一個符合 POSIX 的系統(另外一套是 MinGW),但是一直沒有去使用,畢竟自己手邊的電腦不是 Mac 就是 Ubuntu。也因為沒有真正去使用的經驗,所以我一開始是以為他的功能並不是很完整,頂多就是堪用罷了。直到我把我在 Linux 的程式丟到 cygwin 執行後,才驚覺它的強大!因為我幾乎不用任何程式碼,就可以直接產生執行檔,除了可以在 cygwin
5 min read
Programming

簡單而有趣的雙執行緒同步問題

今天看到一系列有趣的文章:1, 2, 3 主要是這樣的,作者聽到有人說像是 int, float 這些基本的形態都是 atomic ,也就是說只要是 int 的變數就不能能同時有兩個以上的執行入對他做寫入/讀取動作(至少一個操作是寫入)。所以作者寫了以下的程式來驗證這個說法:(篇幅關係,我刪減了一些程式中錯誤檢查部分) include #include #include #include #include #include #include #include #define INC_TO 1000000 // one million... int global_int = 0; pid_t gettid( void ) { return syscall( __NR_gettid ); } void *thread_routine( void *arg ) { int
4 min read
C

序:平行化程式設計(多核心編程)

平行化程式設計會越來越重要的這件事情,我想也不必我多說(因為從很早就開始被提倡了),早在幾年前,大家就注意到單核心高頻率的 CPU 是不可行的,為什麼呢? 1. Power:當 CPU 的時脈頻率一直提高,所耗費的功率也會呈指數上升,為了省電,只好放棄了繼續提高時脈的想法。 2. ILP (Instruction-Level Parallelism):不是每道指令都可以拿來管線化的,所以時脈再高也無用武之地。 3. Memory Wall:當記憶體頻寬跟不上 CPU 處理速度時,時脈再高的 CPU 也只是增加閒置時間。 因此,就演變成現在大家所熟悉的多核心處理器,隨著硬體的進步,軟體當然也要配合才可以發揮最大的效能。這就是此篇文章的目的,從抽象的角度先跟大家分享平行程式設計所應該注意的,有什麼工具、函式庫可以用?接著,會開啟一系列的文章來討論相關的議題。 回到主題,在寫平行化程式的時候,基本上我們應該要注意幾點: 1. Scalability:寫程式的時候,你絕對不可以因為這只跑在你的雙核心電腦上,就只用兩個執行緒(舉例)
9 min read
Programming

程式語言熱門度排名

TIOBE Index 是全球公認客觀的程式語言熱門度指標,一個月會更新一次。要注意的是這個排名只是單純的熱門度,不代表程式語言的好壞或是用該程式語言寫出來的程式碼行數多寡。 如何評分? 排名是依據該語言在全世界工程師、課程、以及第三方廠商所使用的數量來評比其熱門度。而這些數字也依靠著許多知名的搜尋引擎 Google, MSN, Yahoo!, Wikipedia and Youtube 來協助計算。 TIOBE 眼中,怎麼樣才算是個程式語言? 1. 至少在有個維基百科的頁面。 2. 語言本身必須是 Turing-Complete。舉例來說:SQL 因為無法撰寫無窮迴圈,所以不算。 重點來了,截至今日,最熱門的語言是什麼? Position Nov 2010Position Nov 2009Delta in PositionProgramming LanguageRatings Nov 2010Delta Nov 2009Status11![](http://www.tiobe.com/tiobe_
5 min read
COSCUP

模組化與自我驗證的重要性

同樣是COSCUP一場精采的演講 原本的主題:Front-end Modular & Automated Development 但是我認為,這其實不只適用於Web Development的前端開發而已,所以決定下個中文標題 **[Front-end Modular & Autmomated Development ](http://www.slideshare.net/josephj/frontend-modular-autmomated-development "Front-end Modular & Autmomated Development ")**View more [presentations](http://www.slideshare.net/) from [Joseph Chiang](http://www.slideshare.net/josephj). [![](http://www.hitripod.com/blog/content/
2 min read