成就更好的自己

成就更好的自己

學習 / 生活 / 體驗

Android

RenderScript: 不只繪圖,還有計算!

跟上一篇文章一樣,整理自 Android Developer Blog 。這次主要介紹的是「Compute」以及當初設計上的考量,而會使用 RenderScript 來做計算的原因是因為透過 RS 寫成的程式可以直接在多個處理器執行,替 Dalvik 減輕負擔。 讓我們一起來看看: RenderScript 的三大設計目標: 1. Portability: 應用程式不能因為硬體的不同就無法執行。光是現今的 ARM 規格就非常多變,例如說:有的有 VFP、有的沒有 NEON,或是不同的暫存器數量。更何況除了 ARM 之外還有許多不同的 CPU 架構(如: x86)、GPU、以及 DSP。 2. Performance:第二個目標就是在伴隨著 Portability 的限制之下,追求最大的效能。RS 一定要比現存的解決方案(如:
5 min read
clang

Clang 入門教程 - 解析 C 語言程式

在前幾天的文章中有稍微提到 LLVM ,今天則是要介紹從 LLVM 延伸出來的子計畫(subproject):Clang。 這個教程其實是參考"How to parse C programs with clang: A tutorial in 9 parts.“,那你可能會好奇說我這樣做不就是把它翻譯過來而已?不是的,因為 Clang API 快速的更動,兩年多前的程式碼早已不敷使用,所以範例程式的參考價值已經大不如前,於是我決定把範例程式重寫,這也就是此篇文章誕生的原因。 開始之前 你必須先編譯好所需要的 LLVM & Clang 函式庫,步驟可以參考這裡。因為此篇文章所用到了 LLVM 以及 Clang 版本為 r124522,如果讓程式保證可以執行,請在所有 svn checkout 的網址後面加上"
7 min read
iPhone

新手上路:上傳 iPhone 應用程式

最近寫了一個小程式,嘗試自己把它上傳到 App Store,經過了大概一個禮拜的 Review 過後,當然是 Failed。 蘋果果然是龜毛出名,但是也就是因為這樣才保證了程式的品質,幾點原因與經驗歸納如下: * 如果程式對硬體裝置有特殊要求,一定要在 plist 中嚴格設定 UIRequiredDeviceCapabilities * 小圖57×57跟大圖512×512要一致(或相近) ,不然會混淆使用者 * 不可以使用有 Apple 產品的照片 * 如果程式沒有要用到最新的功能,千萬不要手癢去更新最新的 SDK ,這樣會導致你編出來的程式沒辦法上傳,像我現在就得重新安裝 XCode。至少我沒有找到可以切換的方式…
1 min read
Android

RenderScript: Android 3.0 中使繪圖效能提升的祕密武器

Android 在繪圖的性能表現在差不多等級的硬體規格上,跟 iPhone 比起來一直都不怎麼令人滿意,就算是 NDK ,頂多就是與 iPhone 打平而已。於是 Google 從 2.0 在原始碼中就開始出現了 RenderScript ,也陸續看到使用 RenderScript API 的 Live Wallpaper 範例。 終於,經過大幅度的改進後,在 Honeycomb 中正式的發佈了這個量身打造的殺手級 Framework! 說了這麼多,讓我們從上面引用的官方部落格文章一起來看看到底有多厲害? 一、 專門設計來處理 3D Rendering,提供一個低階操作而高效能的 APIs 其實大家對新東西的出現會有排斥是難免的,所以 Google 也不是打算推出 RenderScript 來取代任何東西,而是給開發者多一個選擇。而推出這個的最主要目的就是給那些想儘可能提升自己應用程式效能的開發者族群使用。(或是將之使用在效能表現特別重要的部分程式區段) 二、 不只繪圖、還可以計算
3 min read
iPhone

usbmuxd: 用類似 ADB 的方式來存取 iPhone

開發 Android 的時候,我們可以透過 ADB (Android Debug Bridge) 進入 Android shell 來除錯。 而在 iPhone 通常只能透過 OpenSSH 來達到這件事,雖然也沒有多麻煩,但是網路多少還是會造成延遲。 只要透過 usbmuxd 就可以解決這個問題了! 1. 下載 libusb、CMake、usbmuxd (版本依該網站為主) 2. 在 usbmuxd 底下的 python-client 資料夾中有個 tcprelay.py,將權限更改為可執行 3. $ ./tcprelay.py -t 22:2222 ,其中 -t 的參數是透過多執行緒處理多重連線,而 22 是你 iPhone
1 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
Python

Type System

Type System 往往是設計新程式語言時,最先考量的一個重要關鍵。 以下就來針對一般常見四種 Type System 用簡單的範例來介紹,避免混淆: 1. Static Typing 2. Dynamic Typing 3. Structual Typing 4. Duck Typing Static Typing 使用 Static Typing 的語言中,最常見的自然就是大家所知的 C/C++ ,也就是所有的型態都是靜態宣告,而且要明確的指出每個變數的型態,程式範例如下: void foo() { int a =1; int b =2; int c = a + b; } Dynamic Typing 而對於 Dynamic Typing
3 min read
Python

用 C 編寫 Python 的延伸模組 (Python calls C)

「藉助於擁有基於標準函式庫的大量工具、能夠使用低階語言如C和可以作為其他函式庫介面的C++,Python已成為一種強大的應用於其他語言與工具之間的膠水語言。」 – 維基百科 所以讓我們來看看 Python 如何呼叫以 C 語言寫好的程式,見識一下何謂膠水語言(Glue Language)。 以下說明的是 Python 內建的作法,所謂的內建指的是 Python.h 通常安裝完 Python 都會存在於 /usr/lib/python/ 之中。另一種作法是透過 Boost.Python 的 C++ 函式庫。 首先,此範例程式的功用:執行 Shell command ,並且做簡單的加法運算(1+2=3),然後回傳。 我們就先來看一下要編譯成 Python 模組的 C 原始碼吧! include static PyObject *spam_
4 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
Essay

設計品味

好的設計通常具有什麼特色? 1.  好設計是簡單的。從數學到繪畫都聽得到相同說法。簡單是指「美」在於寥寥樹種精心挑選的結構元素,而不是堆砌表面的裝飾品。(裝飾本身沒有問題,當裝飾掩蓋了乏味的形式才有問題。)在繪畫中,精心勾勒的幾筆靜物,反而筆濫用華美但無意義的反覆筆觸(例如花邊)更為引人入勝。 2. 好設計歷久彌新。在數學中,每個定理都是永恆的,除非它本身有物。哈迪說:「醜陋的數學沒有長存的價值」,意思是說:**如果某個東西是醜陋的,一定不是最佳解決方案。**一定還有更好的方式,最後一定會有人發現。 3. 好設計解決正確的問題。 4. 好設計會引發聯想。例如說,好的建築應該能融入居住者想要的生活,而不是讓居住者照著設計師畫好的圖生活。對軟體而言,這項規則提供使用者能自己組合的基本元件,就像玩樂高積木一樣。在數學中,則是說某個證明若能變成許多新工作的基石,一定優於困難但無法引導未 來發現的證明。在科學中,引證次數普遍被視為價值的粗略指標。 5. 好設計通常會有點好笑。這一點不一定完全適用。傑出的設計不一定會好笑,但在缺乏幽默感的事物中卻也很難找到稱得上傑出的設計。
11 min read
Essay

真正的「財富」

製造財富 財富不等於金錢,財富存在的時間就跟人類的歷史一樣久遠,事實上,比人類存在更久,就連螞蟻也擁有財富。今年是種比較近代的創造物。財富是最基礎的事物、財富是我們需要的事物。財富是你想要的東西,並非金錢,金錢只是移動財富的方式。 財富不是固定不變的,小孩知道自己可以創造財富,儘管它們不曉得自己知道。如果要送朋友禮物,而身上又沒有錢時,你會自己做。 老爸財富模式(Daddy Model)與現實最大的分歧,就是勤奮工作的評定,老爸模式看工作的努力程度而支付報酬。但現實世界中,財富是由一個人實現的成就來衡量,而不是其努力程度。如果我用牙刷幫別人漆牆壁,屋主不會因為我的辛苦而多付我錢。 如果一個人想致富,我想最好的機會莫過於自己創業,或是加入新興創業團隊。 創業通常牽涉到科技,「高科技新創企業」反而像是個重複同語義的贅詞。新創企業就是成立一間處理艱深科技問題的小公司。 就經濟學的角度,創新可以想像成壓縮人的一生經歷至短短數年中。與其庸庸碌碌的工作四十年,還不如用盡全力工作四年。科技產業中,這份衝勁將帶來豐厚的回報,快速工作為你帶來額外報酬。 **工作上的不變法則:
10 min read
Essay

永保懷疑

找出不可說的禁忌 在每一個時代,人們都會相信一些可笑的事情。如果持有相反的意見,當時的大眾信念會為你惹來一身麻煩。如今,我們的時代有什麼不一樣嗎?對於任何唸過一點歷史的人來說,答案几乎是百分百否定。如果我們是歷史上頭一遭可以把事情做對的時代,那麼一定是非常非常巧的巧合。 我們不能說些什麼?想要找出答案的四個方法: 1. 就是看人們因為說了什麼而陷入麻煩。找出會被未來嘲笑的禁忌的另一個方法,便是注意這些標籤。以「性別歧視者」為例,想想哪些主張會被貼上這些標籤,然後捫心自問,這是真的嗎? 2. 回顧過去:回顧曾被接受,但現在卻難以置信的事情。 3. 檢視禁忌如何發生。道德流行如何興起?為何會被採納?如果我們可以瞭解這些機制,我們也許就能夠在自己的時代裡找出解答。 4. 觀察流行的機制,試著預測他所禁止的事情。 這些技巧無法找出所有我們不能說的事情。我可以想到某些不是鬥爭產物的禁忌。我們有許多禁忌根植於過去的觀念。但是這項技巧可與前面的四種方法結合,找出許多我們想都不能想的想法。 為什麼要找出不可說的禁忌? 1. 單純的好奇 2. 不喜歡被誤解。如果像其他
3 min read
C

駭客與畫家

節錄自此 駭客(Hacker)良好的壞習慣 對大眾媒體來說,「駭客」指的是某個入侵電腦的傢伙。在程式設計師心中,它卻代表著優秀的程式設計師。但是這兩種意義具有連結。對程式設計師來說,「**駭客」最主要的字面意義就是支配:一個隨心所欲操控電腦的人 **– 不論電腦想不想。 還可以更混亂一點。「駭」這個名詞也有兩種意義。它可以是讚美,也能是羞辱。當你用某種難看的方法來做事時,叫做駭。當你用很聰明的方法、顛覆原有系統時,也叫做駭。這個字通常是以前者的意思出現,而非後者,可能是因為難看的作法總比高明的作法還常見。 不論你相不相信,這兩種概念也一樣相互連結。難看和創意的確有共同點:打破規則。這兩種打破規則的作法之間,具有連續性的漸進過程,從一般的難看(改裝腳踏車)進步到非常有創造力(推翻歐幾里德幾何學)。 所謂的Computer Science 電腦科學,是一個許多不太相關的領域混雜在一起的歷史意外,就像南斯拉夫。 一個極端是真正的數學家,他們必需把工作稱作電腦科學,才能取得DARPA的補助。 中間是鑽研電腦博物學的學者,例如研究某種演算法是如何規畫資料在網路間傳
14 min read
Essay

花個十年學習寫程式吧!

原文“Teach Yourself Programming in ten years." — 為什麼大家總是這麼想短時間內學會一個程式語言呢? 筆者發現一個很有趣的現象,當他用"day" & “teach yourself"的關鍵字搜尋近十幾年的書,結果有73/248電腦相關的書籍,更令人訝異的是,當筆者再把"day"換成"hours"之後,竟然出現了77/253電腦相關的書籍,不管是電腦或是非電腦,都比"day"還多… 那讓我們挑本書來看看Learn C++ in Three Days這樣的標題代表著什麼含意: 學到:這三天你可能根本不會寫到什麼有意義的程式,或是從程式的錯誤中學習,也沒有時間跟有經驗的程式設計師一起工作並瞭解C++的執行環境。簡單來說,
6 min read
iPhone

簡單地認識iOS Crash Report

Crash Reports的種類 一、跟iOS有關的:基本上這類Crash就是違反iOS規範而被終止的。 1. Watchdog timeout 透過一個timer去觀察某個事件(通常是網路存取)是否已經超過預期的時間,如果是的話就發出中斷告訴OS結束此程式(Your application failed to Launch/Resume/Suspend/Quit in a given timeframe),最主要的原因都是因為synchronous http request導致整個畫面動彈不得,毫無反應。 * Exception code: 0x8badf00d * Don’t block main thread * Use API for asynchronous URL request 2. User force-quit 使用者會強制結束程式的執行可能就是因為程式在某些情境下沒有反應,所以這種狀況也會被視為crash而寫入crash report。 * Exception Type:
7 min read
Linux

用Vim來分析程式碼

在比較大型的專案之中,如果只靠Vim本身的find, grep是不太夠的,因此,我們需要借助一些工具,可以讓我們更方便的來分析程式碼。 首先,先準備以下三樣: * Taglist:在你的Vim呈現出所有變數、函式列表(這是個Vim Script) * ctags:會先掃過你所有的程式,並且對每個函式名稱自動做標籤 * cscope:補上ctags沒有的功能(檔案間的跳躍,並且加上變數的支援) 安裝方式: 1. 到此下載Vim Script,然後解壓縮到~/.vim之中 2. 透過套件管理員安裝ctags與cscope,以Mac為例:sudo port install ctags cscope 在使用之前,我們必須先讓ctags與cscope掃過專案底下的所有程式檔: $ cd ~/PROJECT $ ctags * $ cscope -bR 接著我們就可以開始來Trace Code了~ * :Tlist 打開Tag List列表,可以透過" control w+
1 min read
Essay

[轉錄] 為什麼在大公司工作,總是很無聊?

作者: 阮一峰 日期: 2009年6月15日 下面的內容是我在網上看到的。 我沒有找到原作者和出處,但是感覺說得相當有道理。 ================================ 以前,公司都願意找能力強、資格老的人來做研發,有點個人英雄主義在裡面。一個優秀能幹的員工能給公司帶來很大的利益。 但是,凡事都有雙面性。 現在這個社會,人才流動很快。能力強的、聰明的人,雖說給公司帶來過不少利益,但也經常給公司帶來很大的傷害,做幾年就遠走高飛的人太多了。他們的離開給公司造成了很大的缺口,很多地方都要好久才能補上。總之,元氣大傷。 這種情況見得多了,這些大公司就精了。他們發現,不能讓公司太依賴人才,而應該讓人才依賴公司才對頭。管理層的最終作用,就是讓誰離開了都無所謂,公司都能正常運作。所以,他們把各個部門劃分得很細很細,每個人負責的東西很單一。這樣一來,「術業有專攻」,效率上去了,經驗積累了,工作都流程化了。漸漸地,公司的運作流程化了。 結果就是,員工的工作就變得很單調了,沒有太多的創作性在裡面。什麼創意、可靠性、穩定性等都有專人做了,你就只需要拿個小手
2 min read
Essay

做研究!

王汎森《如果讓我重做一次研究生》[原文下載] 研究生應該: * 從接受知識轉換成製造知識,要期許自己的論文有所創新,跟研究所以前的單向接收無法幫助成長 * 大量閱讀 -> 老師提點 -> 通任督二脈 -> 產生興趣 -> 主動學習 -> 習慣養成(良性循環) * 博碩士不是訓練你寫出經典的論文,而是寫出結構嚴謹、論述清楚與言之有物的論文(透過大量閱讀,以及寫作培養此能力) * 形成自己的知識樹:學習要有所取捨,找出自己的主幹(具延展性的題目),再延身旁枝,最後掛上屬於自己的東西(創新) * 跳脫桎梏、精緻思考:conceptualization與跨領域學習 * 責任感與罪惡感 * 設定目標、模範學習、勇於挑戰 MIT * 做研究,要以正確且深厚的理論基礎為出發點,並利用身邊的有限資源,,以最有效率的方式解決問題 * Think with
3 min read
AppEngine

App Engine Tips

一樣是COSCUP重點整理: 首先提到的是Internationalization,在這之前先介紹一下相關名詞(中間數字代表英文字母數) I18N (Internationalization):國際化,把原先只支援英文的程式語言擴展成支援多國語言(也就是解決編碼相關問題) L10N:本地化,將軟體使用語言自動依據使用者所在區域不同而不同 M17N:多語言化,讓軟體可以支援、呈現多國語言 **Tips 1:**在App Engine使用i18n,django有提供一個template可以做到這件事 **Tips 2:**注意 1. 資料存放在何處?(資料是分散式存放的,注意data store id連續性) 2. 有多少processes正在跑?(request次數可能會超過程式可以處理的程度) 3. 超過免費額度了嗎?(30s timeout) 4. 例外處理了嗎?(善用Task Queue) Q&A經典問題「請問你為什麼不付錢?」 (註:這場演講是利用app engine如何完成報名確認信件發送的實例做討論)
1 min read
COSCUP

UI Design Pattern

這COSCUP的演講其實只著重於在Android上,但是我認為可以把它其實可以更為廣泛些 所以我把Android的字眼拿掉,做些適度修改 以下是把COSCUP的演講做個整理: 在設計應用程式時,不管程式是怎麼實作的,使用者都不知道,也不會知道 所以不僅是程式要下苦工,UI更是要仔細鑽研: 好的UI,第一眼給人的感覺就是有質感 好的UI,讓使用者體驗良好,知道怎麼用,才會想繼續用 好的UI,帶來高評分,高評分帶來高下載量,高下載量帶來高獲利 所以,UI設計上該注重些什麼? * 簡潔 而非 簡單 * 內容充實 而非 華而不實 * 一致性卻又吸引人的互動體驗 * 巧妙的利用雲端跨平台 聚焦在使用者 1. 要知道使用者需要的是什麼(e.g., 最常用操作應該可以第一眼看見且易於使用) 2. 從使用者角度來設計產品(e.g., UI要有適度的回饋讓使用者瞭解,如:按下按鈕) 3. 儘早且頻繁的給目標市場上實際使用者測試 Don’t make the
2 min read
AppEngine

股票機器人 – Goristock

在未投入股市之前,不知道大家會不會認為說要在股市賺錢好像不難啊?! 像之前金融風暴,我就在心裡想說,如果我有錢我一定趁現在狂買 用這樣的疑惑去問我朋友,發現歹誌沒有傻人想的這麼簡單,當你真的在玩股票的時候,你每個買賣動作都會關乎到你的金錢!所以就沒辦法像看新聞的時候這麼處之泰然 這程式的概念就是出自於此,讓心情起伏的干擾因素降到最低(投影片有白痴的阿斯拉比喻) 講者講得不錯,不過太有自信能在五分鐘之內(lightning show限制)講完了,一開始還說不知道為什麼想跟大家敬禮XD,最後只講了一半就被趕下台,哈! **[goristock in Coscup flash](http://www.slideshare.net/toomore/goristock-in-coscup-flash "goristock in Coscup flash")**View more [presentations](http://www.slideshare.net/) from [Toomore](http://www.slideshare.net/
1 min read
iPhone

EPUB with HTML 5 in iBooks

原來的講題是"HTML5 電子書閱讀器",讓我以為就單純的是用HTML 5寫的線上閱讀器,興趣缺缺… 沒想到竟然是說iBooks裡面的EPUB改用HTML5的格式來寫,測試之下,發現目前所有行動電子書閱讀器,就是Apple的iBooks支援度最高了! 其實我對電子書一直也有這樣的需求:要是還能夠互動就好了 我也知道EPUB其實就是HTML的寫法,但是我沒想到iBooks竟然可以吃HTML5!! 而且他不是單純的用UIWebView,而是自己利用webkit核心來重刻,但是有HTML5只可以實現canvas以及聲音影像,但是還少了互動! 解決方案在此! 有空的時候一定要親自試試XD!
1 min read