public marks

PUBLIC MARKS from YukuanBlog with tag programming

2008

Two Ways to Solve a Problem

這些年下來,我反覆觀察到一個現象:程式員各有一套慣用的方法來克服自己遭遇到的問題,這些解題習慣可區分成兩種,工程師多只專精其一,只有少數能任意在兩者間自在地切換。

Make a Secure Code Server

原先架設的版本控制系統 SVN 及搭配的問題追蹤系統 Trac ,兩者都是透過 HTTP 協定和用戶端連線,現在為了隱密地傳輸資料,最直接的方案就是改走 HTTPS (HTTP over SSL)協定。

2007

The Art of Design

為甚麼好的設計會來自於差的設計呢? Scott 在 Why Good Design Comes from Bad Design 提到攻讀 CMU Computer Science 博士時選了門介面設計課,第一堂課上他發現一位年輕人素描著隨身聽的各種變異版本,而且圖紙上已經堆積了三、四十種不同考量的版本了。 Scott 於是湊過去問這個小伙子「幹嘛費勁畫那麼多草稿?」

SVN & Trac Installation 備忘

說起 Issue Tracking System,要跟 Subversion 搭配良好,且一樣是 freeware 的,當然非 Trac 莫屬。細查之下,乖乖, Trac 竟然要裝那麼多相關套件,且各個套件還要挑正確版本,才可運作良好。 為了避免大家(或將來的自己)白走冤枉路,這裡把要安裝的東西及安裝步驟條列於後:

Python 與 CSV

許多資料,像通訊錄或試算表之類的,很適合列表呈現。而 comma-separated values, CSV是微軟牌視窗軟體存放表格資料常用的檔案格式。這種純文字格式的檔案格式是以逗號(comma)來為每筆(record)資料的欄位(field)作分隔。

Logo 也 3D

前陣子 survey 描述機器動作的程式語言時,看到幾個賣像不錯的 Robot 產品,竟不約而同地都說 Logo 語。

2006

Motor-controlling PWMs

一個脈寬調變(Pulse-width Modulation, PWM)訊號可控制一顆 DC motor 轉速,或決定一具 servo motor 的方向、位置或轉速。在複雜的機器人身上,常用上好幾顆馬達,因而能以一顆微控制器(microcontroller, uC)產生多組 PWM 訊號是非常實用的。

Analyze the Sunspots

上次以 Python 搭配 matplotlib 改寫張智星老師傅立葉轉換教學例子。後來逛到 Anders Andreasen 的專文,裡面有個分析太陽黑子活動週期的例子,相同的例子竟然也出現在 Mathworks 展示 Matlab FFT 用法的網頁上。既然大家那麼愛用太陽黑子,我也來攪和攪和,再次以 Python 搭配 matplotlib 改寫,以饗各位看官:

Software Anti-interference

為了維持機器正常運作,除了硬體設計上要把雜訊干擾納入考量外,軟體也不可以坐以待斃,以下整理一些簡單、低階的軟體抗雜訊手段:

FFT in Python

張智星老師的 on-line book《音訊處理與辨識》的〈離散傅立葉轉換〉這個章節,有許多運用快速傅立葉轉換(Fast Fourier transform, FFT)的教學,FFT 其實就是 DFT 的快速算法。張老師是以 Matlab 作為程式範例;實際嘗試後,我發現可以很容易將其轉成 Python code ,

Be Pythonic -- 字正腔圓說 Python

Pythonic 一詞被用來形容合於 Python 慣用法的 code 。Pythonic 的 code 除了讓人們更好理解外,機器執行時,也往往更具效率--語言設計者會絞盡腦汁最佳化語言慣用法的執行效率。這在 Python 這類高階、動態的語言,尤其明顯 :)

Console I/O Without OS

在沒有 preemptive multitasking OS 支援下,很容易因 print out 的訊息太多,使系統 delay 過久。這在許多場合是無法接受的。一個常見的例子是同時處理另一個網路連線下,許多 protocol 都嚴格限制裝置回應時間

Dynamic Plot on Python

之前介紹 Python 在複雜網路模擬實驗的應用時,曾提到用 Matplotlib 來繪製該實驗的圖表。其模仿 Matlab 的繪圖功能,用起來方便,所繪製的圖也在水準之上。有圖有真相,這就秀秀用 Matplotlib 為該實驗繪製的兩張圖表:

Graph-based Modeling on Python

by 1 other
模擬複雜網路,也可以套用 Agent-based modeling 架構。不過諸如網路的群聚度(clustering coefficient, C)及網路特徵的路經長度(characteristic path length, L)等統計數據計算需耗費的時間,隨著網路的規模成長很快,所以不適合運作太頻繁。但我們卻得靠這些統計數據來判斷網路是否收斂、試驗是否該終止了,想試驗各個參數排列組合時,更是雪上加霜。

Boost to Python

前陣子費了番功夫評估一些工具,跑複雜網路的模擬實驗要用的。這些實驗,圖論用得特別兇;會用到許多隨機抽樣的東西;實驗結果、數據,也要以圖表繪出。

Programming as a Specialist Doing

這裡我就不談工作流程了,只談談作為一門專業,程式設計有哪些值得我們關注的小細節:

An Array Implementation of Queue

Embedded System 程式開發, queue 是很常用的資料結構: UART 在接收及傳輸資料時,通常各需要一個 character queue;在處理 keypad 的按鍵輸入時需要一個 key queue ;task 間的溝通,也可能要用到某種 event queue 。

Enjoy the Fine Code

由〈初等概念〉文末附的 links,我尋線逛到 Dan Saks 在 Embedded.com 發表的專欄,並發現許多精緻優雅的 C 程式片段,堪稱為程式中的小品文,值得好好駐足欣賞:

A Unit Testing Toy

Unit Testing 的 framework,最早是由 Kent Beck 在 Simple Smalltalk Testing 中提出的。隨著 Java 的流行,及其和 Smailltalk 的相似性,Kent Beck 又完成了在 Java 下的 Unit Testing framework -- JUnit 。隨著 Extreme Programming 的熱門,以及 test-driven development 在實務上的成功,現在幾乎各種程式語言都有它們的 Unit Testing Framework ,大家都來 Unit 一下,被通稱為 XUnit。

2005

Re: 請問在何種狀況下會考慮使用exception?

就大部分的軟體系統而言,想在程式還沒完成時就知道效率的瓶頸在哪?無異是緣木求魚!在應該使用 Exception 時就使用,在程式還沒正確之前,效率再高都是枉然。

Re: 有沒有好的機制來判斷物件是否已被 delete

如果整個程式都是由我一個人開發的話(包括使用的 Library),通常是不必動用到這類的工具。

Assertion

Assertion 的使用目的,就是要防止客戶對程式庫的誤用。以 Design by Contract 的原則再加上 OOP 的術語,簡單說來:就是要確保物件在執行操作或行為後還要維持其內部狀態的正確。

程式的再利用(Reuse)

就一個程式設計師而言,增進程式碼與設計的“再利用”程度是一個值得關切的議題。所以,這次就來探討一下程式的再利用。

程式設計的箴言──擷取自《資料結構與程式設計》

前一陣子轉貼了《教堂與市集》的格言後,大家的反應還蠻正面的,於是就趁年假,再為大家剪貼一下《資料結構與程式設計》中的箴言:

程式設計的箴言──擷取自《Writing Solid Code》

這一陣子以來,公司瀰漫在一片除錯的淵藪當中,搞得很多人都顯得心力交瘁,包括我自己也被攪得焦頭濫額。這不禁讓人想起一句品管上的名言:品質是內建的,不是外加的(Quality is build-in, not add-on.)──這時讀來,倍感切心。

YukuanBlog's TAGS related to tag programming

assertion +   BGL +   book +   boost +   c +   complexity +   concept +   cpp +   CSV +   debug +   design +   document +   documentation +   dsp +   embedded +   exception +   fft +   font +   framework +   graph +   graphics +   literate programming +   logo +   matlab +   note +   plot +   PWM +   python +   pythonic +   queue +   quote +   refactoring +   reuse +   robot +   scientific +   scm +   simulation +   small world +   timing +   tools +   UART +   unit test +   universe +   version control +