electronic_blue

用了 octopress 就沒理由再不寫 blog

Weak Typing Explained

|

常常聽到有些人誤解了 weak typing 的意義,或是對 C 語言同時是 static typed 與 weak typed 感到疑惑,因此提出一些我自己的想法。

我們先從 type checker 說起吧。

筆記:RSA 簽章驗證

|

RSA 是廣為使用的非對稱加密演算法,原本我以為已經很熟悉它了,想不到最近試圖用 Python 實作簽章驗證的時候,才發現有很多小細節是以前沒注意到的地方。

使用 RGBA4444 與 Dithering 減少記憶體用量

|

在 2D 遊戲中,圖片一向在消耗的記憶體中占用最大的比例。尤其在記憶體資源寶貴的行動裝置上,為了減少記憶體使用量,縮減圖片的大小常常是最有效的方法。

大部份的遊戲會使用材質壓縮 (texture compression) 來縮小圖片的記憶體用量,而在這篇文章中,我會介紹另一種方法:使用 RGBA4444 的材質格式,並配合 dithering 維持圖片品質。

回應「建築師蓋房子要畫藍圖,難道工程師寫 Code 不用嗎?」

|

原文

不知道為什麼 techorange 會登這麼沒 sense 的文章。

  1. 軟體當然有藍圖,也叫 specification,但有常識的人不會把它翻成「注釋」,而是「規格書」。
  2. 除了規格以外,工程師也會針對系統的架構與運作流程進行設計並製作文件。UML 就是為此而存在。所謂「很少有程式設計師會在他們開始編碼之前規畫藍圖」
  3. 以前做大型軟體就是像蓋房子這樣一步一步來的:分析規格、設計架構、寫程式、除錯、出貨,這種開發流程叫 waterfall,現在不流行這套了 XD
  4. Waterfall 的確可以做出軟體,但關鍵是產出的東西往往不是客戶要的。因為軟體開發與蓋房子之間有決定性的差異,你拿蓋房子的流程去開發軟體會是悲劇。
  5. 為什麼有了規格書後,工程師還是做不出客戶想要的軟體呢?因為人類對房屋的理解能力,與對軟體的理解能力是不一樣的。人類容易理解具體化的東西,只要看到房間的佈置圖、看到樣品屋,他可以很容易地想像出房子會長怎樣。
  6. 但軟體規格卻是抽象的。一般人很難理解「如果●●●發生時,程式會做出○○○的反應」,甚至連使用者自己也不知道他們想要怎樣的軟體,大部份的需求通常是在實際使用後才出現的。
  7. 更有甚者,沒有人會等房子蓋了三層才跟建築師說他希望一樓挑高改做樓中樓,但同樣的事在軟體開發的世界中卻天天上演。
  8. 放眼所及,各位現在在使用的軟體,幾乎沒有一項是畫完整張藍圖後才開始實作。每個成熟的軟體,都是在傾聽大量使用者的抱怨後,經過無數次的蛻變、進化,讓他們一點一滴更貼近人性的需求。
  9. 軟體開發並不像是在蓋房子,反倒比較像是在玩美少女夢工廠(?)。
  10. 回到原作者的主題,註解的確會影響到理解程式碼的速度,但它終究只是一種溝通工具。軟體開發的瓶頸通常在於規格清不清楚、架構好不好、以及我們做的東西究竟符不符合客戶的需求。
  11. 作者反對「用程式碼解釋程式碼」,但我反而鼓勵這件事,亦即 self documentation。這意思並不是叫你不用寫註解,而是當你把程式碼寫得非常簡單非常容易理解,那根本連寫註解的必要性都消失了,這才是註解的最高境界。

在 Linux 上設定 DLNA 分享服務

|

DLNA 是 Digital Living Network Alliance 的縮寫,它是由 Sony 為首的多家廠商所組成的聯盟,並且制定出一套適用於數位媒體分享的協議。最近的家用數位產品,比如說手機、平板電腦、數位電視及遊樂器等幾乎都標榜它們是符合 DLNA 認證的多媒體裝置。

只要家中的數位裝置連接到同一個區域網路,使用 DLNA 就可以很方便地把數位媒體分享給不同的播放裝置。比如說把手機中的影片直接送到電視上播放,或是把照片送進印表機中列印等等。由於可以透過無線網路進行資料傳輸,不需要接上傳輸線也不需要額外的設定動作,相當方便。

這篇文章會簡單介紹如何在 Linux 上架設 DLNA server 來分享媒體,同時使用 ebtables 來限制使用裝置。

使用 Easing Function 製作動畫

|

在製作遊戲的時候,動畫是不可或缺的一部份,即使是與遊戲核心無關的 GUI 部份,若少了動畫就顯得粗製濫造。然而大多數的 GUI 效果:像是視窗飛進畫面中央、按下按鈕時放大效果之類的動畫等等,其內容都有很高的相似性,也就是「在某段時間內,把物件的某些狀態轉移到另一個狀態」。若要使用 3D Max 之類的軟體一一製作,將顯得麻煩而沒有效率。

在這篇文章中,我會以 Unity 作為範例,介紹如何實作一個簡單的 easing function 元件。

Unity+ex2D v.s. Corona SDK

|

Unity 是最近相當受歡迎的遊戲引擎,具備了易於非技術人員使用的編輯器、以及完整的跨平台支援。Corona SDK 則是專注於手機平台上的 2D 遊戲引擎,由於架構簡單學習容易,也是手機平台上的熱門開發工具。

僅管這兩套引擎的規模不同,不適合拿來比較,但若是以「開發手機平台的 2D 遊戲」作為前提,我倒是可以從個人經驗中做出一些分析。Unity 本身是 3D 引擎,我會以 Unity 加上 ex2D 這套功能強大的 2D plugin 來進行比較。