July 3, 2012
JJ’s Studio
最近將會與合作許久的朋友 John[1] 一同以工作室的方式提供 Android 以及 Embedded Linux 的相關服務。工作室的名字就叫 JJ's studio。
從退伍後第一份工作以來,就持續過著賣命完成上級命令的生活,一直到了去年終於有機會喘口氣稍微休息,找回比較正常的社交生活,並且接觸一些自己從來沒有想過的領域。
這幾個月裡的走走停停,使得自己對於「目標」一事有更清晰的執著,更幸運的是有個認識許久的朋友擁有相同的目標。為了凝聚彼此的動能,我們兩個這幾天經過討論,打算以工作室的角色,用我們累積的技術與經驗為公司提供服務。
由於我們兩人在 openmoko 與 0xlab 的經驗之故,目前為止想要先將範圍鎖定在
- Embedded Linux
- Android app
- Android framework
若有相關的需求,歡迎寫信給 john@0xlab.org 洽談,John 會與我同步討論。
[1] JJ's Studio - http://asleepfromday.wordpress.com/jjs-studio/
從退伍後第一份工作以來,就持續過著賣命完成上級命令的生活,一直到了去年終於有機會喘口氣稍微休息,找回比較正常的社交生活,並且接觸一些自己從來沒有想過的領域。
這幾個月裡的走走停停,使得自己對於「目標」一事有更清晰的執著,更幸運的是有個認識許久的朋友擁有相同的目標。為了凝聚彼此的動能,我們兩個這幾天經過討論,打算以工作室的角色,用我們累積的技術與經驗為公司提供服務。
由於我們兩人在 openmoko 與 0xlab 的經驗之故,目前為止想要先將範圍鎖定在
- Embedded Linux
- Android app
- Android framework
若有相關的需求,歡迎寫信給 john@0xlab.org 洽談,John 會與我同步討論。
[1] JJ's Studio - http://asleepfromday.wordpress.com/jjs-studio/
June 9, 2012
Debian Linux 傳送檔案到 ICS 的 Galaxy S2
因為老婆熱愛桃紅色的手機,於是換了一台 Samsung 的 Galaxy S2 給她。
身為一個阿宅,當然要盡快幫老婆的手機升級到 Android 4.0 的 Ice Cream Sandwich. 升級到 4.0 之後,比較重大的改變就是 USB storage 的功能變成了 MTP,目前看到的 windows 使用好像沒啥問題 (有問題應該也不敢賣吧),但是很不巧的,在 linux 底下好像麻煩許多。
稍微 google 一下,解法不外乎是用 gmtp 或是 mtp-tools 去 mount mtp,但我在 更新到 4.0 的 S2 上面怎麼試怎麼失敗,完全無法 connect。直到我看見這篇 MTP connection between Galaxy S2 裡面有段話
所幸底下有解法,解法意外的簡單,打開 Settings,進入 wifi 的設定,裡面有個 USB 工具,在 Connect Storage to PC 點一下即可。
底下是傻呼呼 Step by Step 教學
1. 首先拔掉手機跟電腦之間的 USB 線
2. 在桌面的 Menu 裡頭點 Settings
3. 在 Wireless and Network 那一區裡頭點選 More
4. click USB Utilities
5. Connect Storage to PC
6. 出現這個對話框的時候,把 USB 線接上
7. Here you go! 人生依然美好
同場加映:在 4.0 之後要抓圖,是「按著 Power 鍵 + Home 鍵持續一秒」,抓的圖會放在 Pictures/Screenshots 目錄底下
身為一個阿宅,當然要盡快幫老婆的手機升級到 Android 4.0 的 Ice Cream Sandwich. 升級到 4.0 之後,比較重大的改變就是 USB storage 的功能變成了 MTP,目前看到的 windows 使用好像沒啥問題 (有問題應該也不敢賣吧),但是很不巧的,在 linux 底下好像麻煩許多。
稍微 google 一下,解法不外乎是用 gmtp 或是 mtp-tools 去 mount mtp,但我在 更新到 4.0 的 S2 上面怎麼試怎麼失敗,完全無法 connect。直到我看見這篇 MTP connection between Galaxy S2 裡面有段話
In short: your device doesn't use MTP as libmtp understands it. It's a custom stack by Samsung and you're sort of just screwed.
(簡單來說,libmtp 並不了解你的裝置上面的 MTP,那是 Samsung 自己搞的一套,你吃屎了)好吧。Base on Linux 的 Android 搞了一個 Linux desktop 很難溝通的機制,Android team 真是太傑出了。
所幸底下有解法,解法意外的簡單,打開 Settings,進入 wifi 的設定,裡面有個 USB 工具,在 Connect Storage to PC 點一下即可。
底下是傻呼呼 Step by Step 教學
1. 首先拔掉手機跟電腦之間的 USB 線
2. 在桌面的 Menu 裡頭點 Settings
3. 在 Wireless and Network 那一區裡頭點選 More
4. click USB Utilities
5. Connect Storage to PC
6. 出現這個對話框的時候,把 USB 線接上
7. Here you go! 人生依然美好
同場加映:在 4.0 之後要抓圖,是「按著 Power 鍵 + Home 鍵持續一秒」,抓的圖會放在 Pictures/Screenshots 目錄底下
March 13, 2012
Android Clickable Span in TextView
Spannable 可以讓一個 TextView 顯示不同外觀的字串,也可以加入 Click 事件的 callback。
通常想讓 TextView 觸發 Click 事件,最直接的正規作法就是 View.setOnCilckListener。倘若運氣不好,遇上一些比較奇怪的需求,例如一串文字的某一部份用一種顏色,另外一部份使用其他顏色,而這兩者同時都要能夠 Click。
這樣的需求能以 ViewGroup + TextView 完成,但更進一步的問:是否用一個 TextView 就解決?解答就會導向 Spanned/Spannable
不知道 Span 該如何翻譯,單從功能上來看,Span 是賦予一段文字(CharSequence)額外的能力。舉例來說我有一個字串 TheFinalAnswerIs42,我希望 Final 的部份以紅色顯示,42 的部份可以被 click,就是把 ForegroundColorSpan 設給 Final,ClickableSpan 設給 42,如此一來,TextView 仍然是顯示這一段文字,內容卻變得更加豐富。
先看看物件之間的關係,Spanned 介面繼承了 CharSequence,Spannable 介面繼承了 CharSequence,TextView.setText 的對象是 CharSequence,因此所有的 Spanned/Spannable 都可以直接放入 TextView 而不會出錯。因此問題簡化成如何從一個 String 變出我們需要的 Span。
查閱 Android 本草綱目,利用 SpannableStringBuilder 產生 SpannableString
如此一來,這個字串的其中一部分就被賦予了變色的能力,如果要使其成為 clickable
最技巧的部份就是 setSpan,使用的對象是最原始的 Object 而非比較嚴謹的 Spanned 之類介面,本草綱目也說你可以任意綁上自己定義的物件,問題就在此:TextView 怎麼知道如何用我定義的物件?反過來想,TextView 是如何使用 ClickableSpan?
簡單挖一下 TextView 的 source code 即可明白:TextView 的 onTouchEvent 有針對 ClickableSpan 做處理。換句話說自己定義的 Span 無法被 TextView 認得,必須繼承 TextView,針對自己的 Span 做處理,至於 Api 裡頭提供的 Spannable,TextView 應該都已經認得,不須擔心。
於是,一個原本單調的 TextView,賦予 Span 進去之後就會開始變得多采多姿。
通常想讓 TextView 觸發 Click 事件,最直接的正規作法就是 View.setOnCilckListener。倘若運氣不好,遇上一些比較奇怪的需求,例如一串文字的某一部份用一種顏色,另外一部份使用其他顏色,而這兩者同時都要能夠 Click。
這樣的需求能以 ViewGroup + TextView 完成,但更進一步的問:是否用一個 TextView 就解決?解答就會導向 Spanned/Spannable
不知道 Span 該如何翻譯,單從功能上來看,Span 是賦予一段文字(CharSequence)額外的能力。舉例來說我有一個字串 TheFinalAnswerIs42,我希望 Final 的部份以紅色顯示,42 的部份可以被 click,就是把 ForegroundColorSpan 設給 Final,ClickableSpan 設給 42,如此一來,TextView 仍然是顯示這一段文字,內容卻變得更加豐富。
先看看物件之間的關係,Spanned 介面繼承了 CharSequence,Spannable 介面繼承了 CharSequence,TextView.setText 的對象是 CharSequence,因此所有的 Spanned/Spannable 都可以直接放入 TextView 而不會出錯。因此問題簡化成如何從一個 String 變出我們需要的 Span。
查閱 Android 本草綱目,利用 SpannableStringBuilder 產生 SpannableString
Spannable span = (new SpannableStringBuilder()).newSpannable("TheFinalAnswerIs42");
span.setSpan(new ForegroundColorSpan(0xFFFF0000), 3, 5,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
如此一來,這個字串的其中一部分就被賦予了變色的能力,如果要使其成為 clickable
span.setSpan(new MyClickableSpan(), 16, text.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); mTextView.setText(span); mTextView.setMovementMethod(LinkMovementMethod.getInstance());MyClickableSpan 是繼承 ClickableSpan 的實作,只要覆寫 onClick 即可。
最技巧的部份就是 setSpan,使用的對象是最原始的 Object 而非比較嚴謹的 Spanned 之類介面,本草綱目也說你可以任意綁上自己定義的物件,問題就在此:TextView 怎麼知道如何用我定義的物件?反過來想,TextView 是如何使用 ClickableSpan?
簡單挖一下 TextView 的 source code 即可明白:TextView 的 onTouchEvent 有針對 ClickableSpan 做處理。換句話說自己定義的 Span 無法被 TextView 認得,必須繼承 TextView,針對自己的 Span 做處理,至於 Api 裡頭提供的 Spannable,TextView 應該都已經認得,不須擔心。
於是,一個原本單調的 TextView,賦予 Span 進去之後就會開始變得多采多姿。
February 6, 2012
Cat Library
日前 Tony 在 Facebook 分享了一個愛貓人士專用書架 (original website),果然許多養貓的人一看都直呼:「想要買這個!」
厲害的設計師,透過三種簡單的元件就可組成一個開放書架,只要看懂那三個組件之後就可以請木工師父做一個。恰好最近因為要裝潢自己的新房,透過 Bizkit 的介紹用了 SweetHome3D 這個非常棒的室內設計軟體。
SweetHome3D 有 Linux 版可用,Debian 系應該是一行指令就裝完了。使用上非常簡單,基本上就是 2D 的編輯畫面把各個 3D model 排在一起,底下就會出現 3D 的視圖。
我用做了一個簡單的 Cat Library 3D model,可以在 SweetHome3D 裡面使用。其實用 Google 的 Sketchup 來作應該很快,但是它沒有 Linux 版,只好用 blender。
從來沒用過強大的 Blender,光是學一些最基本的操作就花了我好多好多時間。一開始產生的元件,貼圖之後不知為何在 SweetHome3D 裡面的顯示結果很奇怪,最後我只好忍痛放棄貼圖,改用類似木頭的顏色當成材質。
如果你也需要,可以從這邊下載
4 x4 格 Cat Library 的 Blender 檔
4 x4 格 Cat Library 的 Obj 檔 (SweetHome3D 可以直接 import 進去)
5 x5 格 Cat Library 的 Blender 檔
5 x5 格 Cat Library 的 Obj 檔 (SweetHome3D 可以直接 import 進去)
厲害的設計師,透過三種簡單的元件就可組成一個開放書架,只要看懂那三個組件之後就可以請木工師父做一個。恰好最近因為要裝潢自己的新房,透過 Bizkit 的介紹用了 SweetHome3D 這個非常棒的室內設計軟體。
SweetHome3D 有 Linux 版可用,Debian 系應該是一行指令就裝完了。使用上非常簡單,基本上就是 2D 的編輯畫面把各個 3D model 排在一起,底下就會出現 3D 的視圖。
我用做了一個簡單的 Cat Library 3D model,可以在 SweetHome3D 裡面使用。其實用 Google 的 Sketchup 來作應該很快,但是它沒有 Linux 版,只好用 blender。
從來沒用過強大的 Blender,光是學一些最基本的操作就花了我好多好多時間。一開始產生的元件,貼圖之後不知為何在 SweetHome3D 裡面的顯示結果很奇怪,最後我只好忍痛放棄貼圖,改用類似木頭的顏色當成材質。
如果你也需要,可以從這邊下載
4 x4 格 Cat Library 的 Blender 檔
4 x4 格 Cat Library 的 Obj 檔 (SweetHome3D 可以直接 import 進去)
5 x5 格 Cat Library 的 Blender 檔
5 x5 格 Cat Library 的 Obj 檔 (SweetHome3D 可以直接 import 進去)
January 30, 2012
2011 歐洲記遊
2011 年中的時候,參加了 Canonical 在布達佩斯所舉辦的 UDS-O,這篇記事不但拖過了新年,連農曆年都沒有趕上,懶惰可見一斑。
不到一週的行程,雖然過了很久,小事忘記不少,歐洲美麗風景給我的感動其實一直持續到現在。主要分成 Budapest 與 Armsterdam 兩部份,大部分的照片已經放上 Picasa,有興趣的可以去看看。
在出發的前幾天發生了一些不愉快的事情,耽誤了許多準備的時間,很可惜忘記帶單眼過去以致於所有的照片都是用手機拍照,不過再來一次,我是否願意帶著單眼到處跑也很難講 XD
啟程
一大早從新店搭計程車至中正機場,以節省預算的方法下,我們的路線是 桃園 -> 香港 -> 阿姆斯特丹 -> 布達佩斯。雖然花上不少時間在轉機,一路上多停留感受一下出國的真實感也不錯。
![]() |
| From Budapest & Armsterdam |
香港機場等了 11 個小時,坐在大廳裡用 Kindle 幾乎看完了一整套的漫畫。香港的機場比起桃園機場真是先進太多,整體的設計感十分現代。機場內有遇見許多大陸旅客,也見識到大陸旅客不排隊的特色。當大家都在排隊買東西的時候,前方突然有幾個講著標準北京腔的人插隊,隨即呼朋引伴:「陳老師、徐老師,快過來這兒。這裡的東西比較便宜呀!」。瞬間我們的前方就擠滿了十幾個穿著相同背心的旅客,當然他們彼此之間也是沒有排隊習慣。有幾個已經排隊好一段時間的外國人向服務生抗議,只見服務生聳聳肩一臉無奈。站在後方聽他們的對話,這些習慣插隊的大陸客似乎是某校的教師團出遊。
由於缺少行前準備,許多東西我們是出發後才慢慢補足。甚至連當地的變壓器是何種形式我們都不知道 XD。一直到當晚十一點上飛機時,前前後後的同班機旅客都是西方臉孔的時候,才真正有著要去歐美國家的感覺。十幾個小時的飛行,除了睡覺就是不斷地餵食飛機餐。長腿的困擾在這時候就出現了,沒事我就要站起來走動走動,好險我一向容易入眠,昏睡幾次就到了阿姆斯特丹。
清晨抵達阿姆斯特丹的史基普機場,周遭已經很難看見東方臉孔。驚訝的是還能看見許多簡體中文字的 DM,果然中文快要變成強勢語言了。史基普機場非常大,而且有許多購物的商店。可惜我們回程的時間沒抓好,Kanru 原本想要趁機買一台相對便宜的 iPad 回家,不但沒找到還差點趕不上飛機 XD
抵達布達佩斯
約兩三個小時的航行,從晴朗的阿姆斯特丹飛抵匈牙利的布達佩斯。落地的時候看見的就是雨天,入境的機場有點陳舊,讓人感覺心情不好。怎知這是我們來這幾天唯一遇上的壞天氣,而且整個機場剛好就這個地方比較不先進。
![]() |
| From Budapest & Armsterdam |
我們出發前除了知道會住在哪間旅館之外,剩下的貨幣、交通方式等等一無所知,當場發揮阿宅本色,開始用各種方式收集資訊理出頭緒之後,也在機場就看見許多一同要參加 UDS-O 的阿宅們,一同坐車到市中心的旅館。我們住的是 King's Hotel,離會場距離不遠,在大馬路旁的小巷子內。
從機場往旅館的路上,總能看見牆壁上有許多噴漆塗鴉,這一點至少我是很不習慣的,雖然路上看見的垃圾不多,總覺得不太舒服。
旅館看得出來有點年紀,整體很乾淨很舒服。大門對面的公寓有濃濃的東歐味(老房子 + 鐵網 XD)。雖然緊鄰大馬路,但是整個街道非常、非常安靜,跟前一天的新店街道的經驗比起來,這才是人住的地方。我的運氣不錯,房間有個小陽台。不時有小鳥飛過,站在陽台俯瞰整個後院,還看得見鄰居的工作環境、琴房。
緊急採購逛大街
身上幾乎什麼裝備都沒有,不久後我們就出發到街上採購。當天是星期日,見識了歐洲人週末不工作的風氣,除了大賣場或超級市場以外之外完全找不到可以買東西的地方。當地可以使用歐元或是福林兩種貨幣,換算後發現當地的物價比台灣還要低,也許是因為匈牙利在 1989 年共產主義才開始瓦解,在歐洲不必當窮人的感覺真好。
![]() |
| From Budapest & Armsterdam |
在匈牙利的首都布達佩斯逛大街的首要感想是,人行道竟然幾乎比大馬路還要寬,而且這條馬路在查了地圖之後才知道是主要道路之一。最不習慣的是無論你在巷道過馬路時,駕駛發現你都會停下來讓你先過,不論他剛剛開得多快,這大概是我有生以來首次在馬路上覺得自己像個人。
Subscribe to:
Posts (Atom)












