December 29, 2010

Mac去掉重複的"打開檔案的應用程式"

有時候當安裝了新版的軟體就會讓 右鍵->"打開檔案的應用程式"中的選單多了一個重複的出來,是無礙但看起來有點討厭。

當然這也可以用一些系統清除的軟體去做清除的動作,比如OnyX就有這個功能。


但每次要去開OnyX還是有點煩,我只是要重建LaunchService而已嘛。於是找到底下指令,執行完之後重新登入就會生效了。
#/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister -kill -domain local -domain system -domain user以上是給MaxOSX 10.6.5使用的,較舊的版本應該是用底下這個。/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister -kill -domain local -domain system -domain user仔細一看就會發現,應該是某個版本以後的LaunchService路徑有改,所以不確定的人就兩個都試試看吧。

December 28, 2010

link android source in eclipse

承上篇,花大半天把整包android source code拉下來之後有什麼好處呢?
有一點還不賴的就是,原本debug到最後只能看到一些根本看不出什麼來的地方,link起來之後就可以直接連到source去了。

具體的作法如下。
在左邊專案列表的地方,找出Android/android.jar,按右鍵選擇properties

在Java Source Attachment的地方把source code的路徑設上去。

就可以囉。

參考文章

December 27, 2010

download android source on Mac

官方參考文件在這邊
如果懶得看英文的話,簡略步驟如下。
1.建立一個區分大小寫,日誌式(case sensitive, journaled)的磁碟映像檔。
2.環境建置
2.1安裝MacPort。參考這邊
2.2.安裝底下這些package
sudo port install gmake libsdl git-core gnupg
3.安裝repo
3.1在某個路徑下建立bin資料夾
3.2執行下列指令安裝,安裝完請用chmod +x設定執行權限。
curl http://android.git.kernel.org/repo >~/bin/repo

如果要把整包source都拉下來的話才需要repo。
設定repo在當前目錄。
repo init -u git://android.git.kernel.org/platform/manifest.git
要把整包拉下來就用repo sync

如果只要某個package的話,只需要用git package name就好。例如:
git clone git://android.git.kernel.org/platform/external/sqlite.git
其中package name可以參考這裡

December 12, 2010

替logcat加上顏色

一般來說我都直接用eclipse裡面的logcat,可以做filter也有顏色區分非常方便。但它有一個缺點就是,buffer有大小限制。如果說今天有一個發瘋的案子一直吐log出來就會把一些想看的訊息通通洗掉了。當然我們可以去把那些囉嗦的log關掉就解決了這個問題,不過要是沒辦法關掉的話,就只能另外想辦法了。

平常打開terminal執行adb logcat就可以讓log從terminal跑出來了。
這時候可以加上個grip讓它只顯示需要的log出來,如下adb logcat|grep xxx
但吐出來的log不像用eclipse那樣有顏色區分很難閱讀。參考這個網頁裡面提到,加上一個perl程式去替logcat出來的log加上顏色。
這裡可以下載perl的source code,存下來之後改為可執行檔後,就可以用底下指令讓logcat也有顏色囉。adb logcat | ~/coloredlogcat.py

November 27, 2010

word for mac 替文字加入方框、圓框

在windows的word有替文字加入圓框或方框的功能,直接在上面的工具列就有了。但換到mac之後卻遍尋不著這個功能。

原來office for mac有一個奇妙的設定,當把語系切為日文時,就可以開啟一些隱藏功能。
在應用程式/Microsoft Office 2011/Additional Tools/Microsoft Language Register/Microsoft Language Register.app

打開之後可以看到以下視窗。

設定完成打開word就可以看到這些按鈕了。

November 23, 2010

去掉plurk未讀通知的鮮豔紅底

最近噗浪不知道在發什麼瘋,把未讀通知全部改成紅底,造成跟原本的佈景根本不搭,醜爆了

找了一下CSS找到規定這部份的code如下
#alert_beacon, .unread_generic {
background-color: red;
border-bottom-left-radius: 3px 3px;
border-bottom-right-radius: 3px 3px;
border-top-left-radius: 3px 3px;
border-top-right-radius: 3px 3px;
color: white !important;
padding: 0px 2px;
}

大家把這一段貼到CSS裡面,然後把red改成其他顏色就可以了。

註:如果要改成透明的話,用background-color: transparent;
後記:頁面上面通知的數字如果不是0的話,也會被標成紅色。如果要一併改的話就用.unread #alert_beacon, .unread_generic
{...}
即可。

November 2, 2010

AppleScript小試

最近工作上需要用到一點小工具。網路上找到的工具是一支jar,一般情況下要使用的時候要打開終端機,輸入像底下這樣的程式碼。#java -jar xxx.jar [source file]當然這樣一行一行指令,一個一個檔案轉換也是沒什麼問題,不過最近一時興起想玩玩apple script,於是就拿這來牛刀小試一番。

其實我跟本一點apple script都不懂,不過想要用什麼功能只要google一下,很容易可以找到需要的指令。

最後做成一個app,執行之後會有一個選擇檔案的視窗,可以多選檔案,然後選擇目標路徑資料夾,最後對多個檔案執行操作之後輸出到目標路徑中。

整個不難阿。大概花不到一天的時間就兜出一個還不錯像樣的軟體出來了。像這樣的東西如果用其他語言寫不曉得要寫多少行的程式碼拉多少library進來,但用apple script只有這短短十行code就做到了。

具體程式碼如下。tell application "Finder"
set workingDir to POSIX path of (get folder of (path to me) as Unicode text)
set aSourceFiles to choose file with prompt "Select Source files:" of type ("xml") with multiple selections allowed
set aTargetFolder to POSIX path of (choose folder)
repeat with aFile in aSourceFiles
set aTarget to name of aFile
set aFile to POSIX path of aFile
do shell script "java -jar " & workingDir & "/xxx.jar " & aFile & ">" & aTargetFolder & "/" & aTarget
end repeat
end tell

compile/debug完成之後,儲存為應用程式即可。
以上這段程式碼會執行跟app同一個資料夾下的xxx.jar檔,以所選擇的xml檔案作為輸入,輸出至所選擇的目標路徑中。很簡單吧。

P.S 應該很容易看出來,底層還是一樣是跑java -jar的command啦,所以說就只是小試一下咩。

October 29, 2010

在finder中開啟終端機

先前曾經找過從finder直接開啟該目錄下的終端機的作法。今天又找了一個用小機器人(Automator)達到這件事的作法。參考網址

照參考網址做大概就可以了。只不過有一點小問題就是,在新的automator中並沒有save as plugin的選項。後來找到這篇討論裡面提到新的automator把這個選項取消掉了,所以如果要做同樣的事情,請在新增的時候選擇"服務"就可以了。

具體的步驟如下
1.打開automator,開啟一個新的服務。
2.從左邊拉一個AppleScript進來,script內容如下。on run {input, parameters}
tell application "Terminal"
activate
if (the (count of the window) = 0) or ¬
(the busy of window 1 = true) then
tell application "System Events"
keystroke "n" using command down
end tell
end if
do script "cd \"" & (POSIX path of ¬
(input as string)) & "\"" in window 1
end tell
return input
end run

3.存檔即可。

操作畫面如下。

直接用action script的作法有一個缺點就是,每次開起來都會多開一個在~/底下的terminal,雖然無礙,但是惱人。用小機器人的這個作法雖然不會出現兩個視窗了,但缺點就是有一點慢... orz 實在是有一好沒有兩好呀...

10/31後記。
仔細研究過兩邊的apple script之後找出可以讓他開出來只有一個視窗的辦法。雖然有點笨,不過總算可以達到目的。
程式碼如下-- this subroutine processes does the actual work
--
on process_item(this_item)
set thePath to quoted form of POSIX path of this_item
tell application "Terminal"
activate
if (the (count of the window) = 1) then
tell application "System Events"
keystroke "w" using command down
end tell
end if
do script with command "source ~/.bashrc; cd " & thePath
tell window frontmost
set custom title to this_item
end tell
end tell
end process_item

其中tell application "System Events"
keystroke "w" using command down
end tell
這一段就是把前一個視窗關掉的指令。
這樣就不會再跑兩個視窗出來了。

October 27, 2010

eclipse syntax highlight settings

今天把工作環境搞死了... (昏)

花半天時間重新建過eclipse+ADT,最後要把eclipse裡面改過用的很習慣的黑色底色的syntax highlighting移植到新的workspace裡,找到這篇有詳細的設定存放位置。

具體的位置在workspace內.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.jdt.ui.prefs這個位置。複製到新的workspace即可。

後記。
eclipse中所有跟syntax highlight相關的設定如底下圖中這些檔案。(當然去掉.bak才是對的。)

October 26, 2010

ProGuard on android LVL

今天一整天被android的混淆搞的烏煙瘴氣,害我又浪費掉一整天的時間。

最近先前的案子要發佈到android market上,臨時說禮拜五前要上,於是昨天花了一天弄那包LVL,下半前終於搞定。本以為今天只要再做個混淆就可以release了,沒想到ProGuard又耗了我一天。

終究原因如下。在google所release的market licensing的那包library裡面有用到enum這個東西。由於先前聽說在android上使用enum會有某些奇怪的問題,所以我們自己寫的code一律都是使用static final int來做。

沒想到的是,就在這包android的ref design裡面竟然有用到enum。混淆之後enum的value/valueof被混淆過,於是就不能用了。

在ProGuard官方網站裡面有提到這點,詳細請參考這邊

具體的作法就是把-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
這段加到ant build的xml中ProGuard那段裡面即可。

反組譯android app

其實這篇強者學長的文章更值得參考!反組譯並修改 Android 應用程式實例

今天在用ProGuard混淆的時候遇到一點機車的問題,搞不清處問題到底出在哪裡,於是同事建議我把build出來的東西反組譯回去看看是不是該混的都混了,不該混的沒有混。上次其實同事就教過我用,但最近腦筋不好都忘光光,於是自己搜尋一次果然找到相關文章。具體要反組譯android class的作法如下。
1. 到smali下載baksmali.jar檔。

2. 把.apk檔用解壓縮工具解開來,就可以看到裡面有如下圖這樣的目錄結構。
3. 把jar檔跟classes.dex放在一起之後執行底下指令#java -jar baksmali.jar classes.dex 之後就會得到一個out的資料夾,內含如下圖的smali檔。
然後接下來要做什麼就看各人囉。

October 14, 2010

monkey test

今天才知道,原來android有提供一個測試的tool叫做monkey,用來作UI的測試。執行之後會送給機器一連串的command,用來測試軟體的可靠度。

要跑monkey test需要從adb去下指令。指令格式如下:$ adb shell monkey [options] [event-count]例如:$ adb shell monkey -p your.package.name -v 500

跑下去之後就看到手機像發瘋一樣一直亂動,還會叫音樂播放軟體起來,其實還挺有趣的。剛測了一下前幾天剛release的軟體頗正常,沒有掛掉。

官方網頁看這邊

October 13, 2010

雜感

最近莫名又有點惶恐,覺得好像太過依賴強者同事,導致自己的進步趨緩,等於退步了。

今天認真了一天,雖然很慢,但多多少少也有回升一點自信。也許也不是那麼糟糕,總之開始努力是怎麼都不嫌晚的。

總是以不要後悔作為思考未來決定的關鍵,可偏偏有些決定在當下似乎不管選了哪一邊都可能會有所失去。果然人生的難題也不是用單一把鑰匙就可以解開全部謎題。

build android native code on eclipse -II

上次這篇還是單純的build native code的部份。昨天又找到一篇寫到java code跟native code在同一個專案import進來,一起build的作法。
具體的作法大概就是,先將含有jni folder的專案import進來之後,建一個native-builder負責jni code的building動作。windows上的相關設定參考這篇。第一支Android NDK程式--HelloJni
若在mac上可以參考底下。

eclipse crash on OS X 10.6 Snow Leopard

最近在mac上開發的project需要用到jni。無奈環境設定好之後,eclipse老是莫名掛掉,照這樣根本沒辦法工作下去。google了老半天,終於找到一篇相關文章。
看起來意思似乎是新的eclipse跟1.6的JVM有某種衝突,所以不能用1.6的版本。而在機器上的1.5的java是直接link到1.6上,故需要自己安裝1.5.0的JVM,然後再把1.5的調到比較優先的位置。
詳細的具體做法可以參考這一篇:Snow Leopard Java problems (and fix)
照樣做完之後如果還是一樣會發生crash的問題,請檢查eclipse.ini裡面是否有底下這個參數。若有請把它設成1.5-Dosgi.requiredJavaVersion=1.5理論上這樣應該就可以正常了。

後記。
今天小麥上出現了Java更新,更新之後之前做的修改就都不見了。不過似乎更新之後crash的問題也沒再發生,天下太平了,可喜可賀。

September 21, 2010

build android native code in eclipse -I

最近要開始porting一些東西到android上,在看要用什麼來寫native code的時候,同事建議我可以直接用eclipse就好。底下記錄相關環境的安裝設定。

首先要在eclipse上安裝CDT。當然不想在同一台機器上再裝一包eclipse囉,所以就像在安裝android ADT一樣的方式,安裝CDT上來。參考eclipse CDT官網,repository如下http://download.eclipse.org/tools/cdt/releases/helios/,在eclipse/help/install new software的地方將repository加入,安裝即可。

安裝完成之後,import c/c++ project


build的部份在project的Properties可以做設定

build command的部份可以用${eclipse_home}../android-ndk-r4-crystax/ndk-build -C ${ProjDirPath}或者直接寫一個script來做build的動作。

如果build成功執行的話,就可以在console看到如同在terminal中看到的編譯訊息。這樣就成功了。

July 26, 2010

陪你到世界的終結

作詞:莊鵑瑛/沈聖哲 作曲:沈聖哲

流完了最後一滴淚
準備把悲傷告別
別懷念灑的面包屑
趁昨天重來之前

我陪你到世界的終結
就算倒了都要在你的身邊
要陪你到世界的終結
我們擁抱住 相信的死穴


流完了最後一滴淚
終於把悲傷告別
別懷念灑的面包屑
趁明天毀滅之前

我陪你到世界的終結
就算倒了都要在你的身邊
要陪你到世界的終結
就算發現了歪斜
你就像是香水 讓香味遍野

你就是絕對 天造的美學
一切的一切都要為你改寫

我陪你到世界的終結
如果死了都要在你的身邊
要陪你到世界的終結
我們牽手聆聽 萬物正在舉行的和諧

July 22, 2010

很好

孫燕姿 - 很好

下雨也好 迷路也好 空氣裡有種相依為命的味道
愛你很好 連風都知道 第一次心甘情願不想逃

當愛相隨 能完美一切不完美
當你皺眉 我陪你留在天黑的世界

我們是座城堡 愛情放在裡面很好
就算沒有人看好 幸福是因為互相依靠
愛情這座城堡 牽著手才能找到
當我們彼此微笑 請不要打擾

July 9, 2010

Plurk Smile for Safari5

瀏覽器換到哪一套,噗浪就要跟著用到哪一套。最近想來用用safari,就在找了找有沒有plurk smile for safari。

在safari也有類似擴充套件的東西,不過plurk smile沒有像chrome直接一個plurk的擴充套件。在safari比較像firefox那樣的作法。有一個相當於油猴的套件可以使用。我是用這套NinjaKit。裝完之後safari上面有一個醜醜的icon,點下去就可以打開設定頁了。


之後在網路上試用過幾個版本的plurk smile script有些都怪怪的跑不出來,要不就是圖示太少之類的。最後終於找到一個穩定版本,再整理過他的圖示,彙整成一份js code。放在底下這邊,有需要的朋友可以打開,裡面有安裝連結。

這網站真蠻方便的。不然只放在google code,release出來卻不能安裝有點麻煩。

7/12後記。
後來不知道為什麼又無法顯示新加的表情圖示了。
目前看來在mac上,還是用chrome+extension較穩定又正常。

July 8, 2010

溫柔

有什麼會梗在心裡,好像都是一時的。當不再刻意去想,不刻意去分辨,某一天好像就忽然可以放下了。懂了,所以不會在意了。

好像一瞬間就長大了一樣。大家也都是大人了。
開車的時候有人會貼心的找話題聊,明明都累了還是可以講一整路。
還有細細的關切,一點也不八卦,反而令人感到舒服的溫暖。
大家都好溫柔。我有一群好朋友。

忽然發現自己也變了。不再那麼害怕有人接近,不再那麼害怕傷害別人。不那麼膽小畏縮了。

像這樣的感覺是寫不出來的。希望以後還可以回想起此刻的感受。

June 21, 2010

在iCal加上中國農曆

原本用Office Outlook,上面自動可以顯示農曆。但換到mac之後,ical似乎沒有類似的功能。之前找的時候也不知道是不是關鍵字下錯,一直找不到農曆可以訂閱。結果今天忽然就找到了。

具體的作法只要把這個link加入訂閱就可以囉。雖然不比office那樣直接顯示來的方便,不過這樣可以點一下選擇要不要顯示也算還不錯用囉。

引用來源: 點這邊

June 9, 2010

用tab切換控制項

本身其實是個鍵盤族,vim的愛好者,按一兩顆按鍵就可以做到的事就不想再伸手去拿滑鼠。換到mac上之後,還有一個地方很不習慣。有時候系統就是會跳一個dialog來問什麼問題,問你要"確定"或"取消"。在windows上可以用tab做切換,但在mac上卻怎麼按都按不動。

今天終於不耐煩了開始找答案。最後終於找到在這個地方做設定。

預設是在"僅限文字框與列表",把它改成選擇"所有控制選項"。如此一來,在那些dialog上面按tab就可以在按鈕之間做切換了。

不過與windows不同的地方仍有。即使用tab切換到其他按鈕的時候,若有預設選項,按下enter仍會選擇預設的那一個。用tab切走之後,就要用空白鍵做選擇,如此即可。

June 6, 2010

These Days.

我也曾經擅於批評論斷而不自覺,直到有人劈頭罵我,我還覺得他罵的真是莫名其妙。但經過一些日子以後,我終於發現自己原來也會有某種粗魯而武斷評論別人,所以開始努力改變。每個人有每個人美好的地方,價值也不是單一而論。(可惜他罵我的其他點現在都忘光了...)

我也曾經很會寫一些意有所指的東西,那樣的東西可能包含很多人事物在同一個句子裡。直到有一天,我發現這樣的東西有可能造成多大的誤會之後,我現在會努力小心使用。

我現在明白,當別人直指自己的缺點所在,才是最令人惱羞成怒的。所以我努力對別人的建議虛心檢討,盡量把情緒分開處理。

我知道,當人在討厭一個人的時候,這個人不管說什麼做什麼都不會討人喜歡。所以我會避開。

最近,度過了一小段不是那麼好過的日子。即使心裡也知道這是一個合適的結局,要輕鬆面對仍然不是一件易事。僅僅是這個原因,就讓我沒有多餘的力氣去討好任何人。

我知道,過去曾經有過的美好,會是未來珍藏的回憶。分開之後,就讓那些缺點隨風而去,把優點藏在心底。

至於鬧彆扭的朋友。也許你希望回到往日的親近,但當彆扭的感覺沒有消除,卻是一梗一梗的加上去的時候,請原諒我實在無法露出豁然開朗的笑容。

你有很棒的朋友,我很羨慕,而那是誰也搶不走的。但若你自己一梗一梗的擺上在你跟朋友的中間,也請別把帳算到我的頭上。別把我當成那種卑劣的搞小團體霸凌別人的人。

我知道我是個幸運的孩子,可能很多人間的苦我沒有嚐過,很多別人的苦惱我也不曾有。但這並不會令我有什麼特別的感覺。每個人有每個人的難處,比我幸福的人也所在多有。當我和你們相處,我們就是站在同一個立足點。沒有誰比較優越,也沒有誰比較低落。

可能有人覺得我工作輕鬆薪水好。也許我某方面也的確是樂在我的工作,所以同樣的事對我來說會不那麼辛苦一點。也許某方面是因為我也倔的不愛說我怎麼樣累或者怎麼樣惱。對我來說,抱怨一點點就夠了,太多抱怨也改變不了事實。思考解法比抱怨實際多了。

要鑽牛角尖想很多,這我也很擅長。但是經過這些日子以來,我學會了,自己愛鑽就鑽,但不要鑽太久。放開一點點,世界會變得很不一樣。

然後我實在不知道,該看的人看完之後究竟是多了一支牛角去鑽,還是有沒有可能豁然開朗。

我許願希望大家都能溫柔而堅強。這是陳老師教的。因為那是一種自信的帶來的堅強,卻因為曾經的卑微膽小,所以懂得溫柔。

陳老師說:「如果今天你聽我的歌感到快樂,那麼你的心中就是充滿快樂。如果今天你聽我的歌感到悲傷,那麼你的心中就是充滿悲傷。如果今天你聽我的歌心中有太陽,那麼你的心就是向著陽光。每一個明天都很美好,每一個未來都充滿希望。」音樂如此,人生何嘗不是?

6/6後記。
我想引的原文應該是『我常常覺得,我的音樂像一面鏡子。如果今天你聽我的歌感覺到快樂,那是因為你現在心中充滿快樂。如果你感到悲傷,那是因為你正在悲傷。如果你覺得看到太陽,那是因為你自己就是太陽。』類似這樣的話。

June 3, 2010

eclipse on Mac

今天要弄一點android的測試程式,弄一段時間下來就覺得,媽呀,eclipse真是慢到爆。在java/debug/ddms之間的切換有一種想抓狂的感覺。然後同事說,這是正常的,eclipse for mac好像有些問題。囧。

晚上回家找找,果然找到跟windows上一樣,可以去調個記憶體大小,讓他稍微順一點。不然這樣慢下去絕對會抓狂的。

具體的作法如下。

在eclipse.app選擇檢視套件內容,找到Contents/MacOS底下的eclipse.ini,修改如下。
-vmargs
-Dosgi.requiredJavaVersion=1.6
-Xmn100m
-Xms512m
-Xmx700m
-Xss4m
-XX:PermSize=400M
-XX:MaxPermSize=500M
-XX:+UseParallelGC
-XX:+UseCompressedOops

其他沒寫到的部份就不動它。

改完之後再重新開啟eclipse,果真有好一些。要不然某一天我可能會氣到砸機器之類的吧。XD
參考來源看這邊

June 2, 2010

finder & terminal

今天又做了一件有趣的事。

最近開始在mac上工作,常常遇到一種情況是,已經開了finder到某個路徑下之後,需要下些指令的時候,開了terminal出來又得再重新cd一遍,非常不方便。今天在找別的東西的時候不小心看到一個小東西,可以讓你直接從finder裡面開terminal出來,還真的頗方便呢!

在mac上可以寫一些簡單的script,類似程式那樣,可以直接儲存為執行檔。今天弄的這個小玩意兒就是用action script寫的。
具體的程式碼參考這邊。打開本機的這個頁面上面的那一段code直接貼到"AppleScript編寫程式"裡面,如下。

然後選擇儲存為應用程式

就可以囉。

接下來在finder內,把存好的app拉到上面的toolbar,按下去就可以直接在這個路徑開一個terminal出來了。像這樣

btw, 這個圖示是從mac上的terminal複製換上來的,當然不可能這麼厲害存成app就會自己抓一個合適的圖案上來的啦。

那如果是要倒過來呢?如何在terminal開一個所在路徑的finder?
其實只需要輸入open .就可以囉。夠簡單吧~

May 30, 2010

用Mail.app收GMail

電腦剛setup好之後頭幾個動作之一就是設定email帳號。比起公司的mail來說,gmail反倒是我更常使用的mail account。使用mac的mail.app,要設定gmail就跟從web登入一樣簡單,什麼都不必設定就自動把IMAP設定好了。

不過,不知道為什麼非常囉嗦的是,它會把gmail上的所有郵件全部拉下來顯示在mail裡面給你看,造成左邊的bar動輒數千封mail等著我,著實令人不耐。讓我一度放棄使用mail.app來收gmail信箱。反正現在我有小N幫我check mail也不會造成什麼困擾。

找了一兩天,剛剛終於找到一個小tip寫到這件事。
底下記錄一下設定方式。

1.在Gmail端增加兩個label。(mail.app把label當做folder)
IMAP/Sent
IMAP/Trash

2.在Mail帳號加入之後,設定信箱動作如下。


然後是"進階"。

如此一來,就可以還我一個乾淨的左邊的bar了。

原文請參考這裡

May 25, 2010

MacVim之於輸入法

其實本來想下標題為"Mac的十大不可思議事件"。不過因為其實也沒有十件,所以也不能這樣下標。XD

在mac上工作非得用上vim不可。這兩天非常令人不解的是,為什麼每次打開vim都好好的,只要一切到insert mode就會自動跳輸入法。= = 同事還說應該是我按到什麼去切到了吧。結果剛剛一再反覆驗證,確定只要一切insert mode就會自己跳。人家明明工作在用的東西,比較需要的是英打,結果老是不預期給我跳到中打去,實在很令人抓狂。

還好驗明原因之後,確定是vim的鬼問題。搜尋之後發現,只需要在vimrc中加入設定"set imdisable"即可。

這樣設完之後,按原本的切換快速鍵還是可以正確切換的。只是就不再會因為進insert mode就跳輸入法了。

May 24, 2010

first week on Mac

為了未來工作上的需要,以及禁不住大家勸敗,終於買下人生第一台MAC。託朋友遠從米國帶回來的新改版的MBP 13" 最低階的版本。要從米國帶是為了自己莫名的潔癖,大概是自從用過TaClick,發現原來自己已經可以盲打注音,於是就開始就不喜歡鍵盤上有注音符號了。

第一週。其實很多地方都很不習慣。而且又急著要上工作環境,還沒什麼時間適應就要開工了。匆匆灌了android的開發環境,還有XCode,然後symban跟MS都得灌到VM上。這一周只能用非常忙碌來形容。

Mac很漂亮。所以第一步不需要像win7一樣,先上個GDI++才能開始工作。不過很快就會發現,沒有新酷音的mac輸入法還真是不太好用。試過眾人推薦的香草,也試過內建的注音輸入法。為了選字的關係還是頗不順手。最後同事推薦用yahoo注音。終於可以改到跟新酷音接近一點了。但少了tab去切字詞的功能,還是稍弱一點。不過起碼堪用便是。

之外。還改了terminal的shell設定。預設的bash不知道為什麼不會自己去source home底下的.bashrc。需要在terminal的偏好設定裡面,更改過預設的配色之後,在shell的地方設定執行指令"source ~/.bashrc"即可。就可以在這邊把ls的顏色打開,還可以把promote的字串設成自己想要的樣子。這就是使用UNIX like system的好處呀~大概差不多什麼都可以自訂了。

需要的朋友可以參考這兩篇。ls command 的顏色自訂Bash terminal promote

May 19, 2010

Plurk Smileys on Chrome

改用chrome之後,陸續裝了幾個extensions。現在的chrome比起當年真是好用許多。其實中間一度為了噗浪的表情小圖又換回firefox,還好後來找到這個。然後終於可以全部轉換過來了。

不過這個RPlurkSmileys版本似乎有些小問題。新掛上去的圖是又大又好看沒錯,不過怎麼預設的圖示按下去卻跑了一大串網址出來呢?有點精神潔癖如我,實在無法接受。本想直接解開chrome ext的安裝檔試著改看看,結果看來似乎是不可行的。

後來東翻西找,直接在chrome的ext.的folder裡面找到,原來這些extensions其實也都是一個一個的java script,也就是說應該跟firefox用的addons差不多才對。點開一看,果不其然也是稍稍看得懂啦。程式的部份看不懂無所謂,只要看得懂哪些是表情符號,哪些是圖案連結就改的動了。

如果有興趣自己動手的朋友可以到這邊找c:\Users\[username]\AppData\Local\Google\Chrome\User Data\Default\Extensions\[一大串亂碼]\2.3\
裡面的RPlurkSmiley.js檔案點開來修改即可。

這邊我做的修改只有
1.拿掉一部分我自己用不到的表情符號
2.把預設表情按下去之後會出現在輸入框的東西改回原本的縮寫。ex:(dance) 安裝版本有些表情按下去會跑一大串網址出來。然後稍稍修正了某些符號的縮寫。
3.新增Karma 100的幾個表情符號。
4.移除了某些用不到的東西

具體怎麼修改的要寫起來太麻煩了就改天再說吧。有興趣使用的朋友可以到這邊下載。但因為我不知道怎麼把他包成chrome的extension,所以直接放js出來。需要的話應該直接找上面的路徑,找到同一個檔案覆蓋過去即可。

注意:覆蓋之前請先將原本的版本備份起來,以免有什麼意外。
好吧,真的有意外的話應該移除該extension再重新安裝原始版本可以恢復原狀。
之外,這樣的修改應該也不會造成系統損毀才對,但這一切還是屬於個人行為,有什麼意外本人概不負責唷。


5/20附註
若使用MAC可以在底下路徑找到
/Users/[username]/Library/Application Support/Google/Chrome/Default/Extensions/[亂碼]/2.3

May 18, 2010

5/17 女巫店。陳綺貞



批踢踢抄來的歌單

1.靈感
2.越洋電話
3.微涼的你
4.小步舞曲
5.小塵埃
6.黑眼圈
7.孩子
8.After 17
9.下個星期去英國
10.每天都是一種練習
11.失敗者的飛翔
12.太陽
13.魚
14.讓我想一想
15.我親愛的偏執狂
16.吉他手
17.1234567 (偷偷摸摸版)
18.和妳在一起
encore
19.旅行的意義
20.80%完美的日子
21.九份的咖啡店
22.夜遊

May 14, 2010

關於android app的向下相容

今天要做一個multi-touch的功能。事實上android的multi-touch在2.0版本以後系統才有支援。所以說,在我的小N1上使用這些API當然是沒有問題的。然而,應該不會有人想做了一隻程式卻要限定2.0以上才可以使用吧,畢竟1.5/1.6的市占率還是不低呢(版本分佈參考這邊)。尤其又有某些廠商遲遲不願替手機升級... 殘念...

言歸正傳。程式寫好之後,若沒有限定minSDK版本的話,是可以安裝的。安裝的時候或者upload到market的時候並不會檢查裡面是不是有用到哪些不支援的API。像這樣的API錯誤,會在run time才出現。

幸運的是,很快就找到相關文章有寫到解法了。

所以說,如果希望寫出來的程式能夠向下相容,ex.在2.0以上可以具有multi-touch的功能,但在舊版的android也至少不要當掉。該如何做呢?

android的Dalvik VM使用delayed class loading的作法。也就是說,class會在要被使用到的時候才會load起來。如果class沒有被用到,那就不會load,也就不會讓VM complain有VerificationError了。

所以我們查查API,發現可以使用android.os.Build.VERSION.SDK_INT來作為OS版本的判別,於是很開心的用下去的結果,卻發現怎麼在1.5 Cupcake上還是照樣掛點...囧...。原來,這個SDK_INT從1.6 Dount之後才開始出現,還真是搞笑了... XD

再檢查一下,原來我們應該要用Build.VERSION.SDK去做check。這是跟SDK_INT完全一樣的數字,只不過是String的版本。所以說,我們的code可以這樣寫
public boolean onTouchEvent(MotionEvent event) {
boolean hasMultiTouch = Integer.parseInt(Build.VERSION.SDK) >= 5;
int nPointer = hasMultiTouch ? WrapNew.getPointerCount(event) : 1;
// ...
}

至於裡面的WrapNew的class則是我們自己implement的一個static class,用來把那些舊版SDK不存在的method包起來的一個class。類似底下這樣
class WrapNew {
static int getPointerCount(MotionEvent event) {
return event.getPointerCount();
}
}

這樣一來,就可以避免VM發生VerificationError了。

詳細請參閱引用來源。這篇文章真的寫的超棒的,淺顯易懂,英文又不難。雖然我有把主要重點的地方翻譯/寫出來了,還是相當值得一看。

May 6, 2010

好快的Chrome!

其實是因為看了這個影片。


超快的於是我就去裝來玩玩看了。

因為慣用firefox幾個好用的add-ons,但原生的chrome並沒有那些功能。所幸新的chrome也支援extensions了。幾個常用的add-ons都找的到對應的extension for chrome。照樣加上chrome為關鍵字做搜尋即可。

剛裝到現在試用了ad-block,flash block,以及chrome gesture。基本上常用到的大概也就這幾個吧。

adblock方面,可以從firefox的adblock把filter匯出,然後貼到"C:\Users\water\AppData\Local\Google\Chrome\User Data\Default\Extensions\gighmmpiobklfepjocnamgkkbiglidom\1.4.26\filters\adblock_custom.txt"這個檔案裡面是可以work的,看來語法並無差異。

之外,若要在chrome直接block某些頁面的ad,安裝"Browser Button for AdBlock",右上角會出現adblock的按鈕,按下按鈕選擇"block an ad on this page",之後點擊頁面上ad的區塊,再拉動那個bar,選擇想要block的範圍大小就可以了。操作上比ff的adblock還要更直觀一點。

之外,開啟facebook跟plurk的速度都蠻快的。不過一開就發現我的噗浪幾個圓角都不見了。chrome是webkit base的瀏覽器。需要的朋友可以參考這篇去對plurk的CSS做修改即可。

目前這樣短短的用了一會兒,各方面的使用都頗正常。也許也可以考慮拿來取代firefox了咧。真的是好快呀!

5/7。從ff版貼上去的adblock filter不曉得有沒有作用,發現原本的filter就已經可以慮掉很多東西了。這點還有待觀察。

March 7, 2010

Nexus One -programming

把玩了這麼久,總該做點正事。

把公司開發的軟體直接丟上去跑的結果,就是出現了搞笑的超小字的界面,UI layout整個亂掉。果然1.5到1.6的升級不是升假的,難怪market上面一堆軟體都以這為分界,切成兩個版本發布,也難怪一堆使用者都覺得拿著1.5的magic整個很像孤兒一般。

把project改了一些相關設定之後升級至1.6的SDK,原以為惡夢到此為止。結果才發現核心部份也有少許不相容,造成底層沒有反應。這問題目前尚待解決。

UI Layout。
UI亂掉的部份主要是因為1.6以上開始支援One app, Multi screens。更多技術內容可以參考這裡。我這邊具體的作法是先把底下這段加入Manifest.xml中。

然後再改用1.6的SDK去build,如此一來UI的layout就可以保持原樣了。

不過SDK有說,這樣做是讓它跑在相容模式底下,會不會有什麼performance issue我就不清楚了。也許比較好的方式還是依大中小三種尺寸做不同的UI設計吧。

Root Directory。
另外玩一玩就發現,原本應該"/"底下每個folder都可以正常進去的,到了N1上卻發現某些folder沒辦法 listFiles了。原本的code沒有去check listFiles()得到的東西是不是null,這就是造成crash的原因。

在N1上,"/config"與"/cache"對這兩個folder listFiles()會return null,如果有去掃folder的請稍微注意。

像這幾天用aFile Lite也有相同的crash的狀況,同時還造成http server沒有反應的問題。不過只要把軟體設為"只管理SD卡的文件",一切就又恢復平靜了。



然後然後還有一個看起來是N1的bug。順便也寫在這邊。
我在使用某些ap的時候,比如PlurQ,如果按home回主畫面,會回到主畫面的右邊那一頁(但應該回到中間那頁,按home都是回中間那頁呀。),而且桌面上所有widget或者icon會全部不見!需要左右滑過桌面才會再回來~

這個狀況似乎不是每次會發生的,目前還沒找到什麼固定的步驟可以複製出來。就是有時候會,有時候又不會那樣。

然後之外網路上有討論到的,點一點變兩點的狀況今天早上也發生過一次,不過在關掉螢幕再打開之後就恢復正常了。看樣子是軟體bug吧。




結語。
總的來說這還是隻不可多得的好手機啦~ 也是一個工程師的超棒玩具!夠我把玩好一陣子不會膩的了!

Nexus One -playing

N1不像Magic上面有HTC sense可用,意謂少了一些貼心的小功能。像通訊錄智慧搜尋、標準配置的注音輸入法、一些好用的控制widget。少了這些不會像牛肉麵少了牛肉,大概只算是少了蔥花而已。而這少了的蔥花有些人會覺得就少了一味很可惜,有些人則覺得不要正好!然後,用了N1的我才知道,原來我還是想要蔥花的呀~(笑)

大部分的東西在market上面都找的到還不錯合用的替代品。像APNdroid可以拿來開啟跟關閉3G網路,一些控制開關CurveFish都有替代軟體,用來顯示不同時區的時鐘,我用OCMEC Clock Widget。至於噗浪, PlurQ就很好用了,我也很久沒用HTC的噗浪來噗了。

注音。
輸入法則是一大麻煩!當然,沒在台灣上市的機子也不會預載有中文輸入法。要找個HTC CIME的替代品不是那麼容易。大部分找的到的按鍵式的輸入法(我不用手寫的)配置都與標準鍵盤配置不同。目前試過的有market上的新注音台以及google拼音輸入法。

新注音台的新式按鍵配置說實在很不適應。不過它底層是用google拼音的引擎,所以關聯字詞這方面做的非常好。但不適應就是不適應,攤手。

倒是google拼音算蠻不錯的,只是需要練習把注音符號轉成用拼音的方式來拼,學習曲線比我預想的低多了。把幾個比較難聯想的音背起來之後,已經比較少卡住打不出來的狀況發生。這個的鍵盤大小也是比較合適的。不過就是要常用一點,因為他是繁簡混合的,一開始用前面的字都是簡體,很傷腦筋。

另外今天新發現有一個注音輸入法,他的鍵盤配置就是標準的鍵盤,只可惜它的輸入方式比較像ㄅ半,需要打上音調,然後一個一個選字。以及鍵盤size比較小一點,很容易發生誤觸。而又沒有做的像HTC CIME那麼聰明,誤觸的時候還得自己把錯的消掉,而不能直接打一個新的上去,簡單說就是還有進步的空間囉~

目前我是以上三個全裝,正在適應google拼音中。過陣子再考慮保留哪一個吧。

Facebook。
然後說到這facebook與通訊錄的關聯,真的是比較笨了一點,沒有辦法手動指定。不過今天發現可以用一個方法去自設關聯。就是,先把聯絡人的名字改成跟facebook上面的一樣,等到抓到關聯之後再把它改回原來的,這樣關聯也不會跑掉。姑且勉強算是有個解法了吧。不過這樣做有沒有什麼side effect目前是沒看到了,要是有就再說吧~

Google Voice。
剛用兩天我就發現,奇怪,market上明明看得到我有安裝google voice,但不曉得為什麼是顯示成不能移除又無法開啟的狀況。查了好幾天都找不到相關訊息,可能是國內有用的人太少了的關係。後來用英文硬查,才找到一篇文章有寫到這件事。原來在google voice第一次啟動的時候會先去check sim card,如果不是美國地區的sim卡,就會把voice disable掉了。

解法則是先把手機恢復至原廠狀態,把sim卡拔出來,連上網路後先設定voice,然後再把sim卡插上去。這樣就可以了。

另外有一個新東西我覺得很棒!就是有像milestone一樣的多媒體界面
這個我超喜歡的!只可惜N1的dock合體之後是直式的,我更愛上面這種橫式的界面~ 以後如果有出橫式的基座的話搞不好真的會去買一個來用咧。


目前為止大概是這樣。之外一些常用軟體幾乎都運作正常,非常棒!

March 6, 2010

Nexus One -using

對原本拿的是HTC Magic的我來說,拿到N1後第一個超級明顯的感覺就是,快!超快!原本已經差不多習慣於magic那種偶爾會因為GC頓一下頓一下的感覺,拿到N1之後幾乎沒有感覺到那種頓過。上網也超快的,平平是用wifi上網,load網頁的速度比起magic真的有驚豔到!

持握的感覺則是尚可。對我的手來說,magic的寬度是比較適合單手持握的,拿著N1時不時的就會想用另一隻手來操作。這個寬度對我的拇指來說已經有點吃力了。

機身是霧面的質感,相較於magic有不易沾染指紋的優點。不過對握感來說,magic的機殼握起來比較不會有害怕一不小心就脫手飛出去的感覺。就是...你知道嘛,那種鏡面,手一摸上去是會比較黏一點的。然後不曉得是不是因為太寶貝N1了,也會有點捨不得太大力抓它。然後又是這種相對比較滑的機殼,就比較會怕不小心就脫手了。會有一點沒安全感。然後機身又沒有吊飾孔,看來得想想怎麼做可以讓它安全點。

螢幕很漂亮,摸起來很明顯跟magic的不同。也許是因為抗刮處理的關係,或者玻璃本身材質不同的緣故。雖然也有抗刮了,還是捨不得萬一刮到。連milestone都有傳出災情的此時,還是乖乖貼個保護貼的好。到光華去找保護貼還彷彿又是在炫耀一樣,有些店家根本不知道這隻。後來一位店員一眼就認出來,建議我直接去包膜店請他們裁一張來貼。也不貴,才兩百塊而已。用的是跟iphone一樣的抗刮保護貼。很便宜阿,貼上去完全沒感覺,然後又變得更好滑了一點。

本來還很擔心那四顆觸摸式的按鍵會很容易誤觸的。不過實際用起來是比想像的好。會,偶爾還是會不小心碰到,不過頻率並不高。然後本來還擔心會不會感應不良,實際用起來的狀況也比想像中的好。基本上這四顆按鍵算有及格就是了。並且以現在握起來的感覺,料想若是Desire那四顆在那麼低的位置,不曉得會不會更讓拇指有想要抽筋的感覺了。另外N1的左右邊框很薄,大拇指又得伸很長的時候,有時候手掌就會碰到螢幕的範圍也會造成一點誤觸。不過總觀以上,使用上是可以接受的,而且再用久一點應該就會因為習慣而更減低一些誤觸的發生了。

這兩天終於有接聽跟撥打電話了。以我聽對方的聲音來說是蠻清楚的。推測對方聽我似乎也是很清楚,今天中午明明在吵雜的火車站接電話,對方卻以為我在家裡,瞬間覺得還蠻妙的,看來降噪處理的效果有出來!不過也沒仔細問對方聽到的聲音。下回有機會再來做個調查好了。

另外,在電話中聽筒靠近臉會自動關掉螢幕,拿開又會自動打開這點做的不錯,很靈敏也很聰明。剛發現這件事的時候我以為是我按到什麼東西了之類的,想想才想到應該是它自己開關的。

電量方面,尚可。也許還比想像中的好一點。如果只當一般手機使用的話,要撐個幾天應該不成問題。不過以我現在差不多每天都會開無線網路,出門會開3G,一般使用的狀況用一天下來也是差不多就要充電了。果然還是逃不過智慧型手機每天充電的命運。但電量使用起來基本上是滿意的。目前因為小心使用的關係,也沒遇過在外面忽然就沒電了的狀況。萬一用到快沒電了,就少用一點,只做撥接電話使用的話,應該再撐到晚上不會有問題才對。


今天先暫時寫到這,睏了我。接下來理論上還有一篇關於一些我之前會用的軟體現在到了N1上有什麼問題,然後還有一篇關於寫程式遇到的問題。

March 5, 2010

2010 Android Developer Lab

Yes, i am one of the 200 lucky guys~ 禮拜三我去參加ADL,然後得到一隻Nexus One!

到底是幾月報名的去了?好久了喔~ 某日在GTUG上看到ADL的消息,快速填完報名表之後,還把資訊forward給幾位同事。然後我就完全忘了這件事了。

然後然後2/10收到confirmation的mail已經是個大驚喜,報名的時候很清楚有寫說因為座位有限,所以並不一定可以報到名,要大家收到確認之後再規劃行程。

然後這週的前面幾天,不曉得在忙什麼,睡眠品質也沒有很好,所以ADL當天早上完全呈現一種睡眠不足的頭昏狀態。

起床之後還到公司上班到11點,才回家放了東西,打理一下搭捷運出門。

今年的ADL選在六福皇宮,地點離內湖不遠,在木柵線上而已。抵達之後距離可以入場還有約半個小時,在會場外面發了點呆,拿了google taipei的宣傳看一看。最近google真的要大舉徵才的感覺,每次有google出現的場合都有看到要徵才。然後每次看一看都會想一下要不要再來整理一下履歷咧~ XD

坐定位之後,先介紹了GTUG Taipei,然後一連串漫長的英文簡報,關於Android的介紹、機會,然後是market的介紹。然後中場休息前主講人放了底下這段影片。

然後主持人說,google準備了一點小禮物給大家。『有沒有人要G1的呀?』,『那有人要N1嗎?』剛講完大家都還有些不知所措,不曉得是不是主辦單位在開玩笑之類的,有些錯愕的大家還呆立在原地。大概是因為這種反應,所以主持人又用中文再講了一遍,叫大家等等去外面排成兩列,領自己的N1,然後吃些點心,就可以進來座位上做自己的開箱了~

其實因為ADL的對象是開發者,所以其實在場大多數人自己都有手機了。有N1或者Milestone的也所在多有。再者,因為ADL是免費的活動,所以根本沒人預料到google會這麼大方的一人送一台台灣還沒上市的N1,真是個超級大surprise呀~

然後下半場是兩段code lab。相較於上半段,下半段的內容適合多了。不過大家應該都還沉浸在拿到N1的喜悅中吧~

做完lab也沒心思跑去問啥問題,就趕快帶著N1回公司炫耀了。


看今年這樣沒參加到的大家超扼腕的,下一次的ADL報名應該會大爆滿吧~


其實從拿到公司的magic之後的這幾個月以來,我都一直有在注意新機動向,朝思暮想的,在等看看哪一支上市了要準備入手。本來N1是不錯,但有實體按鍵的Desire是更好的。

不過現在既然都免費得到一隻了,就也不用再去關切那些上市消息啦~

開心開心,都已經是拿到手機的兩天過後,還是有些不可置信的感覺。真是感謝超大方的google,又讓我更愛你啦~ 拿著N1我也會好好寫程式的!不能自己寫也會好好幫大家抓bug的!

February 12, 2010

歲末

工作的殘酷。
以前總天真的以為,工作,就是找一件喜歡的事,然後付出熱情,這樣就對了。不曾意識到的是,不管做什麼工作,總有一天會需要做自己不喜歡做的事。就算是自己當老闆,也一定會需要做些不喜歡做的事呀。

有些逃避的不願面對現實。一昧的否定,覺得那是不可能做到的、不必要做的、做了也沒有意義的事。很小孩子氣的不想做就是不想做。甚至還想乾脆換工作算了。

還好跟老師聊過之後發現自己原來這麼幼稚。仔細想想,也沒什麼做不到的呀,沒那麼難,只是自己在逃避而已。然後才開始認真面對。

這樣算是有多認識一點現實的殘酷了嗎?原來面對工作有十分的熱情當然是最好,但當偶爾面對困難或者面對討厭的事情,還是需要一點自虐式的強迫自己面對,這樣才能有所提昇。

至於那件討厭的工作現在呢,其實也算已經突破瓶頸了。而且我發現,其實我也沒那麼討厭它,不喜歡它只是因為更想做別的東西而已。

好吧,所以下次不能再這樣囉。



送禮。
以前總不愛送禮物,也許是因為老是收不到真正很喜歡的禮物的緣故吧。認真想想,好像沒收過什麼特別棒的禮物。所以我總是不懂該怎麼送禮物,而且對於要送禮物,常常異常的焦慮,怕買的東西對方不喜歡。

不過今年送出幾樣超棒的禮物,看得出來收的人都超開心的。

所以心得是,送的禮物不必貴重,但要是對方喜歡想要,卻又不會自己跑去買的東西。那方向應該就對了。

然後我就開始喜歡想要送人家什麼禮物了。收到一件貼心的禮物得到的開心,是遠遠大於它的實際價值的。



朋友。
然後我認識了一個好朋友,教我原來不用總是當好人,可以發脾氣也要學會道歉。對朋友不必小心翼翼,有話就說,好的壞的生氣抱歉都一樣。這真是我應該要好好學習的地方。




最後。文筆變差了。太少寫blog造成有些詞不達意。不過有些東西還是需要長一點的篇幅來好好表達,雖然這次也沒表達的很好。