網誌文章封存

Eclipse 換Theme,換Color

eclipse

對程式設計師來說很喜歡使用黑底白字的(PS.自己覺得顯得格外專業=P )

在eclipse 內開始時是預設使用白底的,

從前我會在http://eclipsecolorthemes.org/這裡下載回來,

再Import 入Eclipse 轉顏色。

今天介紹大家另一個方法。

只要裝一個叫 Eclipse Color Plugin就可以了
Eclipse > Help > Install New Software > add following URL
http://eclipse-color-theme.github.com/update

Screen Shot 2013-09-23 at 12.37.54 PM

 

安裝完成後在Preferences 內的 Appearance ->Color Theme 改一改即可 =) Amazing

Screen Shot 2013-09-23 at 12.45.07 PM

 

是不是很容易呢 =]

 

廣告

Volley: Google 自家制 Android Network Library – ImageLoader

上回: Google I/O 2013 (1) – Volley: Google 自家制 Android Network Library

初試試Google 的Volley Library , 發現是比從前簡單了一點兒,由於沒有任何的Document,只有上網找找人家的案例再從錯誤中學習一下。今次講一講ImageLoader ,從前但部份也是用github上某個大大的Library 吧,今次試試使用volley實作。

首先,Volley 已經有很完善的Http Request 的流程,也有一推Caching Helper。

要做一個類ImageLoader Library ,Volley內已經有以下元件:

  • ImageLoader ( com.android.volley.toolbox.ImageLoader)
  • RequestQueue
  • ImageCache

實戰過程中,沒有像Youtube Google 神使用得那麼簡單。Youtube 內有BitmapLruCache,但是原來它的tool內沒有包括在內,需要用家親自處理。ImageLoader 內需要的是一個RequestQueue 處理Request ,及一個ImageCache。

/**

* Constructs a new ImageLoader.

* @param queue The RequestQueue to use for making image requests.

* @param imageCache The cache to use as an L1 cache.

*/

public ImageLoader(RequestQueue queue, ImageCache imageCache) {

mRequestQueue = queue;

mCache = imageCache;

}

本人做了一個類BitmapLruCache的Class

/***

* Helper Class for Volley ImageLoader Bitmap ImageCache, since it need LruCache

* Memory Cache Class

* @author 阿目

*

*/

class VolleyBitmapLruCache extends LruCache<String, Bitmap> implements ImageCache {

public static int getDefaultLruCacheSize() {

final int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);

final int cacheSize = maxMemory / 8;

return cacheSize;

}

public VolleyBitmapLruCache(Context context) {

this(context , getDefaultLruCacheSize());

}

public VolleyBitmapLruCache(Context context , int sizeInKiloBytes) {

super(sizeInKiloBytes);

}

@Override

protected int sizeOf(String key, Bitmap value) {

return value.getRowBytes() * value.getHeight() / 1024;

}

@Override

public Bitmap getBitmap(String url) {

return get(url);

}

@Override

public void putBitmap(String url, Bitmap bitmap) {

put(url, bitmap);

}

}

另外為了方便自己使用整個流程,也起了一個Class 為VolleyImageLoaderHelper,如下:

/***

* VolleyImageLoaderHelper  Class for Volley ImageLoader

* Memory Cache Class

* @author 阿目

*

*/

public class VolleyImageLoaderHelper {

// ImageLoader From Volley

private static ImageLoader sImageLoader;

/**

*

* @return Volley ImageLoader

*/

public static ImageLoader get() {

return sImageLoader;

}

public static void initImageLoader(Context context) {

if (sImageLoader != null) {

return;

}

sImageLoader = new ImageLoader(

Volley.newRequestQueue(context), // Volley Request

new VolleyBitmapLruCache(context) // Volley BitmapLruCacheHepler

);

}

}

第一次使用時,在e.g. MainActivity 下啟動VolleyImageLoaderHelper

VolleyImageLoaderHelper.initImageLoader(getApplicationContext());  // init VolleyImageLoaderHelper

VolleyImageLoaderHelper.get().get(url, new ImageListener() {

@Override

public void onErrorResponse(VolleyError error) {

img.setImageResource(R.drawable.ic_launcher);

}

@Override

public void onResponse(final ImageContainer response, boolean isImmediate) {

// response.getBitmap();   // 這個就是最後得來的Bitmap

}

}

這使得成個流程也非常簡單。

以下是 上面的簡單例子:github.com/extralam/VolleyImageHelper

*有沒有發現像流了一點東西呢?其實這個實作不是完全品,這個helper 是沒有做fileCache ,在Volley 內有DiskBasedCache可以幫助你完成這工作。

除此以外,Volley Library 已經有一個NetworkImageView 的widget 幫手處理Image 。

Google I/O 2013 (1) – Volley: Google 自家制 Android Network Library

Google IO 2013

前言

每一年既 Google I/O 都有好多好精彩既 Presentation。今年當然不會例外,除左現場網上直播的環節,其他同時間進行的環節已經上載到 GoogleDevelopers 的 Youtube Channel。有興趣可以到Youtube 或 Google I/O 2013 的主頁觀看,而筆者也會在這裏不定期分享一下本人有興趣的題目,也歡迎大家投稿分享。

Volley: Easy, Fast Networking for Android

講到 Android Network library,Java本身已經有Apache HttpClient、HttpURLConnection。咁點解Android 要做Volley?根據片中所講,因為以上方法有幾個問題:

  1. 網絡請求(Network Request) 是序列進行。(假設沒有用到Async Task)
  2. 當你旋轉屏幕時所有東西要重新從網絡載入一次,所以要自己處理緩存(cache)的問題
  3. 當View重用的時候,AsyncTasks會重疊 (AsyncTask stomp on recycled views)
  4. HttpURLConnection 在 Froyo 或以前的版本有兼容性間題

Google 推出Volley這個框架(framework),只要用很少的程式碼就可以處理到網絡請求,並解決以上的問題!在筆者看來,Volley 的功能就似Android 版的 ASIHTTPRequest (ASIHTTPRequest 是Objective-C 上知名的專門用來處理HTTP requests 的框架)。

Volley 有以下幾個特點:

  • 使用漂亮和簡單的API來執行REST請求
  • 將底層抽象化(abstracting)來統一REST請求機制 (也就是說,你不關心任何更多關於HttpClient的或HttpURLConnection類。在較低版本(GINGERBREAD)Volley使用AndroidHttpClient並沒有更高的使用HttpURLConnection類)
  • 非常快!根據片中所講,他們測試了Volley在Google與幾個不同的應用程序,Volley在當中是明顯的勝出
  • 可擴展!你可以用它為基礎創建自己的自定義類型的請求(以及回應處理/解析)

有興趣可以到以下地方下載:

https://android.googlesource.com/platform/frameworks/volley

Android Fragment 問題

Android 有一種新的開發模式是用Fragment, 但筆者我常常發現當用家按Home 鍵後,長時間後回來App就發會有null point Exception  問題。

這是因為os本身為你解放咗一些memory 問題。

解決方方是當使用者按Home 後,先保存Fragment 到Bundle 那裡去

以下是簡單的例子。

Fragment mContent;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState != null)
             mContent = getSupportFragmentManager().getFragment(savedInstanceState, “mContent");
if (mContent == null)
              mContent = new Fragment();
}
@Override
public void onSaveInstanceState(Bundle o) {
super.onSaveInstanceState(o);
getSupportFragmentManager().putFragment(o, “mContent", mContent);
}
本文是記得筆者自已的解法方法,希望也幫到你吧。

Apple 真的擋不住攻擊嗎?

Apple 真的擋不住的攻擊嗎?

自Steve 離開人世後,Apple 被打得慘慘的。

  • 看看去年股價逹$702高位跌到現今的$470左右水平。
  • 往年人事大調動
  • 自家地圖問題
  • iPad Mini 被7寸平價Android 平板狂攻
  • 再來是4″ iPhone 5 擋不住五寸Android 電話

Tim Cook領軍後的新時代是否不能保得住招牌呢?為了頂一頂問題所在,先是把MAC系列砍價$200 增加NB 銷售數字 (這應該是前所未有的,上市只有四個月的機款作出減價。) ,再來是連續第三季發出現金股息。如何應付GOOGLE的Android系統,成了目前最大的挑戰。

ifc_mall_apple_steve_jobs

Read the rest of this entry

智能手機軟件市場大戰

app-store-3

就智能系統市場佔有率而言,安桌無疑是首位,其次是蘋果iOS系統,之後才到BB / WINDOWS PHONE。

當然談論系統上的程式數量,當然也是安桌市場完勝,主要原因是沒有檢查便可以快速上架了。

但論程式質素,無疑iOS 的系統,單單送批也要兩個星期才可以上架,可見蘋果公司是多重視用家的體驗。

另一個原因,很可能開發iOS程式比其他系統更容易,容易在於手機只是幾款,但是安桌則上萬款,開發iOS 得到一個保證。

還有的是整個生態系統更完善,更多人使用正版軟件,令開發者更有利可圖,更願意付出並做得更好。

下圖是在兩個市場上購買正版軟件的比例。可以看出整體表現也是iOS  完勝 Android。

Screen_Shot_2012-12-03_at_09.42.05

Relative value of app purchases from App Store and Google Play by month. App Store in January = 100. (Source: App Annie)

Read the rest of this entry

難度亞洲沒有人材了嗎?創意工業去了那裡?

Creative-2

為何我們常常聽到的科技創新公司,新科技產品都是在美國呢?這是我一直想問的問題?難度真的他們物以類聚?整體發展人材也比亞洲地區好?

RaspberryPi

Raspberry Pi (http://zh.wikipedia.org/wiki/%E6%A0%91%E8%8E%93%E6%B4%BE)

就RaspberryPi而言這是一塊信用卡大小的電腦板,包括了CPU,RAM,LAN等等。這是多麼簡單的玩意!

筆者相信在國內工程師隨時都能夠打造一塊比它更好的東西吧!

它所謂的CPU,在國內很早已經出現了如全志S8600, 近來更有A13, 這些平價高性能的CPU!全部都能運行1080P電影,GPU也有不錯的效果。為何呢?為何造不出呢? Read the rest of this entry

hTC 要亡嗎?

ti

曾幾何時,made in Taiwan是一個保證,大部份電腦產品也是出自台灣的手,並且創立了不少品牌,如華碩,技嘉,宏碁﹐,等等,是台灣的驕傲。

另一個台灣的驕傲當然要計算上hTC ,這間成立不到十年的手機公司。2011年4月更成功超諾廿諾基亞的市值逹337.9億美金。

不到一年時間,被三星拿下位置,2012年 對於hTC 來說可說是悲慘的一年

HTC的利潤更創下近8年來的最低值,不過hTC的情況還在進一步惡化,因為該公司今年第一季度收入最高將比上一季度下降17%,而利潤則會再度降低。

另外近來嚴凱泰事件更顯出,hTC已經被打得沒有退路了。 (台灣企業被打得沒有退路更合切)

不說上iPhone , i 系列產品。 Read the rest of this entry

勁up 系列 (11) – Android Game Console Ouya

 

話說小弟上去kickstarter 支持咗呢個Ouya 遊戲平台。

呢個Ouya 有乜特別呢究竟?

先講下配置

  • Android系統
  • Tegra 3四核心SoC
  • 1GB記憶體
  • 8GB儲存空間
  • 遊戲手制
  • 主機Ouya將會與扭計骰一樣大小

看完上去就會覺得只係一台nexus 7 + 手制。

冇錯,你啱呀。

重點係前XBOX副總開發,相信佢地會創造一個新的game platform。

令大家有一個更容易購買及下載遊戲,並提供一個更好的tv遊戲平台。

所開發的Android Game 可能會以tv作建立,創造。

所以真係值得奇待。

勁up 系列 (10) – Nexus 7

 

(Sorry 太亂張桌面 =P)

講下Nexus 7 啦~~~上星期小弟係美國訂了的Google Nexus 7 到貨,用咗一陣話你知感覺係爽=)。

最可惜最可惜的係呢部機冇3g上網,唔係就變得更加一流了。

講一下呢部機加上Android Jelly Bean , 成個畫面係好順咗好多。

我可以話去番iPad 八九成質素~只講流暢度。

講game 就更加冇問題la~ N仔的gpu 我冇worry 過。

好似上面呢隻mini motor HD , ios同android都玩過,兩者沒有太大差別了。

部機手感一流一隻手就可以用到成部機。感覺上部機身有少少厚,唔算太重。

總知~正機~~~你應該要有一部。