Tag Archives: Programming

程式設計之道 冼鏡光

大學的時代就看過冼鏡光的這篇文章, 當時覺得很神, 不過文章不知道存在那邊.

現在拜有網路之賜, 到處都找得到 (所以我也可以 COPY 一下. )

工作了十年, 不管是進銷存, 網路安全, 軟體, 硬體, 軔體都做過. 也碰到神奇的中醫, 在事業不順時也看了莊子

再回頭來看這篇文章, 特別有感覺

程式設計很簡單, 但是要悟程式設計的, 很難.

悟道之前的修行是又多又苦的.

Read more »

GCC ## Preprocessor

之前的程式有用到 ## 減少一些重複的程式, 當時是放在 Linux kernel 2.4 上面, 用的是 gcc 2.95.3, 不過因為改寫到 Linux kernel 2.6 的緣故, 所以 gcc 改用 3.4.6 . 這時就出現錯誤訊息了.
Read more »

[Google] Oops

今天在用 Google Reader 的時候, 看到這張圖片…….

看到 That wasn’t supposed to happen. …
不禁笑了出來 :p

Programming Texts and Tutorials

Unix(Linux/BSD) 下, 各種軟體, 程式語言的文件收集地.

除了中文以外, 其他己經整理得非常詳細了, 有問題可以到這邊 Search

Programming Texts and Tutorials

Flash Player 9 Update

11 月 20 日, Adobe 又釋出了新版的 FLAH.
這次仍然有 Flash 9 Plugin 和 Flash Player .

下載地點在 : Flash Player 9 Update

安裝方式仍然可以參照我的 Flash 9 Lab Version 這一篇

至於穩定性問題, 有一個問題是 .mo 的問題, 可以參考
chihchun 長輩的 Flash Player 9 for Linux

不過呢, 依照這樣做還是會當機, 晚上看到一篇
firefox自動關閉?
有人提到

如果是用 gcin 可以在 /usr/bin/firefox 開頭處加入

unset XMODIFIERS

防止 flashplayer open XIM。flashplayer 的 XIM 有bug。

加了這行gcin還是可以用 GTK_IM_MODULE=gcin 輸入中文。

簡單的說, 如果要手動執行, 可以

# unset XMODIFIERS
# LC_ALL=”zh_TW” /usr/bin/firefox

這樣就可以解決了, 試了一下沒有問題, 只是選單那邊怪怪的, 還有不能放大全螢幕.

這樣應該是堪用了!

P.S 還有另一個問題, 解法是

將 export XLIB_SKIP_ARGB_VISUALS=1 放在.xinitrc 內.

ref.
找到 firefox 裡面 flash plugin crash 的原因了

Wireless 的 Aggregation

電腦的世界內, 很多概念都是相同的, 有時候看看這些技術, 其實還很好玩的呢~

Aggregation 是一種概念, 我最近接觸到這個名詞是在 PreN 的 driver 上看到的, 主要的技術背景
就是將多個封包合而為一, 一起傳送出去. 主要還是減少大量封包傳輸時, 減少 Control Packet 的 Overhead.

其中主要的實作有以下幾種

  • Block ACK
  • Reducing Inter Frame Spacing (RIFS)
  • Frame Packing At MAC Layer (AMPDU)
  • Aggregating PPDU (APPDU)
  • 這些都是作用在底層的協定(Layer 2), 在實務上, 你用 Sniffer 並不會看到這些技術出現.

    首先來看 Block ACK 的機制, 這個機制就是希望在傳送的過程中, 不要再傳送 ACK
    而 Block ACK 又分成 immediate 和 delayed, immediate 是直接在 aggregation packet 傳送結束後,
    馬上傳回 ACK, 而 delayed 是等下一次傳送後再送出 ACK (心中 OS : 這種 Schema 有人用嗎…..?)
    一般來說, 大量資料傳送都會使用 Block ACK .
    而個人認為 Block ACK 也很像是 Scaling Window 的機制, 只是比較簡單, 不需要去判斷 Bandwidth.
    其實 ACK Packet 也是要耗用 Resource 去處理的, 如果這個 ACK 是用 hardware 處理也還好,
    不過如果這個 ACK Packet 是要用 CPU 去處理, 那就值得用 Block ACK 去減少 ACK 的耗用量
    畢竟一個 ACK 也是要耗用和一般 Packet 差不多的時間去處理(當然 Memory Copy 的時間少很多).

    RIFS 就比較容易理解了, 就是在 Frame 和 Frame 中間並沒有一些 Delay 或是空白的機制.
    以增加單位時間內可以傳輸的資料量.

    AMPDU
    AMPDU 圖示
    從這一張圖表可以很清楚的看到, AMPDU 就是將數個相同目地的資料, 集合成一次送出, 以減少底層 Hand Shaking 的時間, 同時也可以減少 Header 的重覆傳送, 以達到快速傳送的目地.

    APPDU
    和 AMPDU 不同的地方在於, APPDU 是 Physical Layer Header 集合在一起.

    一般來說, Aggregation 對於 Bulk Data Transfer 的效用並不大, 將 Header 減少的效用剛好在處理 Aggregation 這一段時間就補回來了, 但是 Aggregation 對於小封包就很有用了, 這時 Header 佔小封消耗的時間就比較多了.

    曾經看過 Aggregation 這樣處理的

    這樣的處理如果在 x86 內, 一點問題也沒有, 畢竟 x86 速度快, Memory Bandwidth 也大, 所以程式寫爛一點也沒有關係. 但是在 Embedded Linux 下, 畢竟資源有限.
    我們看到這個圖, 總共有幾次的 Memory Copy 呢? 答案是 3 次, 比起一般的收封包, 多了二次, 也就是三倍的 Memory 頻寬耗用量, 這還不包含 CPU 處理的時間.
    所以 Driver 這樣寫, 真是大方呀, 據我所知, 大概只有那家將文書編輯軟體內放模擬飛行的公司可以比而己…..

    這只是一個很簡單的例子, 在 Embedded Linux 下寫 Code 要特別小心, 並不是每次都有什麼 IXP420 266Mhz or 400MHZ+ 甚至是 C7 這樣高階的 CPU. 常常的狀況都是比較低階的 CPU .

    所以各位看倌可以發現, Aggregation 並沒有什麼了不起, 只是以前的概念拿來修修改改.
    在 802.11n 這些技術也己經很普遍了.

    Ref. 主要的參考文件
    Performance Analysis of Data Aggregation Techniques for Wireless LAN

    這真是太歡樂了……… U.S. Grants Patent For Broad Range Of Internet Rich Applications

    information week 看到的, U.S. Grants Patent For Broad Range Of Internet Rich Applications

    內文提到

    The patent–issued on Valentine’s Day–covers all rich-media technology implementations, including Flash, Flex, Java, Ajax, and XAML, when the rich-media application is accessed on any device over the Internet, according to the patent holders.

    所有的 Web 2.0 Application 或是網站提供者, 像是 Google Video , 或是股票網站(用 JAVA 看盤) 等等 都要向這家奇怪的公司拿取授權~
    這真是歡樂呀 XD

    ref.
    United States Patent Methods, systems, and processes for the design and creation of rich-media applications via the internet

    The Evolution of a Programmer

    在 digg 上看到的, The Evolution of a Programmer
    Read more »

    十年前的程式…………

    最近因為某長輩要求, 正在翻修十年前的程式.
    十年前, 我選用 Virtual Foxpro 做為開發程式, 以今日的眼光來看 VFP 還是一套非常好用的輕量化資料庫語言. 我整個程式庫壓下來才 1440K, 剛好可以放進一張磁片.
    VFP 5.0 TC 壓縮後才 70M. 哈. 那真是一個美好的年代 XD

    懷念那個年代寫 DB 很簡單的日子, 後來的 Delphi or VB 老實說都太難寫了, 不符合 DB Language 嘛.

    至於我翻修了什麼?
    我只能說, 我很久沒看 Code 了, 完全不知道做了什麼事.
    所以翻修的 Code 只有改名字 XD .

    比十年前進步的是, 我用了 Subversion 記錄我修改歷程, 算是我對十年前寫的東西,
    小小的敬意吧.

    Linux 是不是應該有 Binary Driver Layer ?

    最近在吵的是, The Japan OSS Promotion Forum 提出了 GKAI(General Kernel API Interface).
    而跟著這個 GKAI 提出來的, 就是 Go Taniguchi, Turbolinux, Inc. Kenichi Hori, NEC Corporation. 提的 New Device Driver Structure. 這個 Structure 最大的改變就是在 Linux 上加上 Binary Driver Layer . 以便可以像是 Windows 一樣, 載入 Binary Driver ..
    Read more »