2015年9月21日 星期一

FloatMath在Android M版本不見了

   升級到Android M版本拿掉很多官方覺得不適用的Classes,像是AndroidClient以及FloatMath,只要你將專案的版本升級到23之後就會發現。AndroidClient的問題可以在build.gradle裡面加上:
useLibrary 'org.apache.http.legacy'
    但是FloatMath的問題官方就沒有特別說明處理的方式,而公司的專案剛好用到兩個library都踩到這個雷,它們分別為PhotoView跟Aviary;如果要等它們升級到最新版本可能要等到天荒地老,而且Aviary最近好像要停止支援,希望大家去另外一套library叫做Adobe Creative SDK(其實跟Aviary長的一模一樣),可能是Adobe正在宣示主權吧!

   最後想到一招可以解決目前的過渡期,那就是自行新增一個android.util.FloatMath.java,然後把Method全部bypass到Math的物件,就能夠安然的編譯完成。


更新:PhotoView在1.2.4把這個問題解決了(commit)

2015年9月6日 星期日

斷捨離之開不完的分頁

   資訊爆炸的時代好在有強大的電腦,能夠讓瀏覽器開啟幾百個分頁還是如此順暢,也因為如此閱讀的習慣變得很不一樣,不知道有多少人跟我一樣是看完標題後,覺得這個文章很有價值,但不想現在花時間看完,所以就讓它躺在某個分頁之中;這種狀況也可以延伸到書本,我也得了一種看了書的封面就想買回去的症狀,自己深信不疑買了就能獲得那本書的知識,但它們只是悄悄躺在書架上,直到書架不夠放時才意識到它也不是那麼重要。

    為了解決這類型的問題,亦或者是習慣造成的延伸問題,有各式各樣的小工具發展出來,以下會介紹到自己本身有在用的工具及心得。用Chrome瀏覽器但是記憶體沒有那麼多的人,非常建議安裝OneTab的套件,堪稱一鍵備份所有分頁,我用的非常勤勞,也用的非常錯誤,所以最高紀錄有超過250分頁備份在此,但從不打開它。

    同時我也有用稍後閱讀(Read It Later)的應用,我選擇Pocket只因為它做得還不錯,而且是免費的,同時還有支援手機的APP,還支援Offline閱讀;而臉書也有自己的儲存連結,我把它用來紀錄臉書上看到不錯的文章,但我在裡面也塞了幾百個連結但從不打開。

    這些工具讓我們覺得安全,讓腦中那些有趣的連結(回憶)永遠存在世界的某個地方,但對腦袋來說並沒有消化任何內頁的知識,而只像個龐大的圖書館但只有目錄;就像我買的那些書一樣,除了有些封面挺有設計感,可以當作書櫃的裝飾外,對它的內頁仍然一無所知。

    但現有的工具似乎沒有辦法把這些氾濫的資訊處理得很好,有天偶然在做捷運時又再想了一次這個問題,頓時覺得閱讀文章的類型跟閱讀時的場域有很大的關係,例如坐捷運的時候就不適合讀長文章,因為隨時就要換車或者讓座;而在慵懶的下午就適合看些長文章,以及跟工作沒什麼相關的主題;而工作時最適合看能夠解決問題的文章,或者能提升工作能力的文章。

    有了這個想法後,開始就把Pocket裡面的文章利用Tag的功能把每篇文章貼上像是Work、MRT、Holiday等等,就在適合的時間把相對應的Tag消化完畢,我想應該會有更專門的服務能幫助用戶把這些"回憶"處理的更恰當。

文中提到有250分頁塞在瀏覽器裡,這些分頁雖然不佔記憶體,但跟放在連結墳場沒什麼兩樣,所以我花了一個下午把它們分類並塞到Pocket裡面(當中也丟了一堆後來看起來不重要的連結),如同標題提到的"斷捨離"的技巧用在分頁上,最重要的概念是:

    處理資料不應該是一口氣解決,而是不斷迭代的過程,如同看書也不該是從第一個字看到最後一個字(小說可能可以這樣),而有點像金字塔的結構,從最上層的概念(標題),抽絲剝繭的往下看(目錄),到最後每個章節的每個字句,有點像麥肯錫在用的金字塔原理。有時看到某個層次後就可以停止閱讀下去。

完整的Flow有點像:

瀏覽器 --(開啟連結)--> 分頁中 --(添加Tags)--> Pocket --(offline備份)--> Mobile APP


後記:最近才發現Pocket發現相同的問題,開始替每個Link加上分類標籤像是Best Of、LongStory或者ShortStory,應該非常多人跟我把一堆Link塞到Pocket然後就不讀它了。

Nvidia GTC Conference


  在網路上看到的活動,我自己是沒寫過Cuda,對OpenCV也沒直接操作過,只有用Engine來開發過,會參加這個活動也是純粹看看不同領域東西的心態,果然一到會場就覺得跟我所處的世界有很大的不同,大概所有有用到NVidia顯示卡的硬體廠商都來了,而主要也是在推廣他們的主機有多少GPU在上面,跑的效能曲線有多高,可以說是另一種類型的電腦展。

但開場的Talk倒是挺吸引我的,連NV也對於DeepLearning的領域有高度興趣,可能現在所以
ML相關的運算很饑渴吧?!而NV大概跟Intel等晶片公司想的差不多,那邊有計算的需求就往哪跑,對他們而言都是靠相同的玩意賺錢。

    而其中一個講者是騰訊的ML部門負責人,同時也是一位教授,他說了蠻多騰訊的核心理念跟成長過程,以及每個有用到ML功能的細節,我對ML或者DeepLearning也是新手的狀態,倒是沒有真的好好把這個黑盒子實作出來。不過如同一開始提到,我是真的來走馬看花找關鍵字來刺激想法的。

超過六億的用戶實在很噁心


不知道多少的虛擬紅包在今年過年送出

WeChat有用到的AI技術們

這功能對我來說挺特別的,廣告變成另一種身份地位的象徵

個人廣告的資料

全中國有超過兩千萬人是盲胞,這塊跟台灣人數差不多了,花個60秒替他們讀個一小段,能夠享受獲取知識的平等。但後來覺得可以透過Google翻譯直接唸出不就可以了?

語音辨識用的技術
他們如何用GPU加速運算 
這是語音匹配用的技術
WeChat的核心原則

2015年8月23日 星期日

Implementation of Undo/Redo on Android



    最近公司的產品拼貼趣想做Undo(上一步)和Redo(下一步)的功能,因為使用者常常不小心就把拼好的作品誤移,然後又很難移回來,其中一個發想就是參考Photoshop可以做Undo/Redo(還有其他發想例如把某個Layer鎖住的功能),聽起來對現在的code非常有挑戰,但還是花了一個下午做出第一版Prototype(只支援Undo),看起來會動只是畫面會狂閃;後來iOS的同事才跟我介紹他們實作的方式 - UndoManager。

    秀了幾行code給我看後,感覺這個設計架構根本就超好,結果Android內建沒有這套實作,結果它藏在Android Framework裡,而且命名規則也很iOS(每一個Command叫做Operation),感覺是給內部UI Widget用的功能。

    解決這類型問題也有常用的Design Pattern,在SO找到這篇推薦Command Pattern,有空再來消化這個Pattern的其他應用方式。


2015年8月22日 星期六

Android Vision library

   Google Play Service 7.8 introduces the android vision library. that can easy to implement the function of face detection and barcode reader. the best part of it is that supports android 2.2 devices. you can checkout the sample code here.

Random idea: the traditional digital camera support smile mode. that means you can take photo by your smile face. now you can do the same thing on the android app. or you can trigger it by a wink

 

Solving the confliction on Android BuildToolsVersion 23 with RenderScript v8 library

If you using renderscript support library, and you try to upgrade the android tools version to 23.0.0. you will get the issue likes when compile your project :

UNEXPECTED TOP-LEVEL EXCEPTION:com.android.dex.DexException: Multiple dex files define Landroid/support/annotation/AnimRes;
at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:554)
at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:535)
at com.android.dx.merge.DexMerger.merge(DexMerger.java:189)
at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:502)
at com.android.dx.command.dexer.Main.runMonoDex(Main.java:334)
at com.android.dx.command.dexer.Main.run(Main.java:277)
at com.android.dx.command.dexer.Main.main(Main.java:245)
at com.android.dx.command.Main.main(Main.java:106)

it cause the renderscirpt support library includes the annotation library's source code. you can solve this issue by adding a few of code in build.gradle

configurations {
    all*.exclude group: 'com.android.support', module: 'support-annotations'
}

reference : http://stackoverflow.com/questions/32051938/getting-multiple-dex-error-when-using-render-script-support-lib/32090710#32090710

2015年8月1日 星期六

Feedback : Upgrade Android M Preview 2

   最近大膽地將自己的Nexus 6升級到Android M的Preview版本,正所謂第一次將Preview版本用在自己手機就上手,反正也是前陣子才從iPhone換成Android,該遺失的資料也早該丟光光了,正所謂沒什麼很失去的時候,人就會變得特別有勇氣。

以上是用起來的後果:

1. Google Now Launcher瘋狂閃退:只要你用adb裝一次apk它就一定閃退給你看
2. Line已不舉:不知道它用了哪個API來檢查網路狀況,升級過後你永遠沒辦法登入Line的帳號,它只會不停的跟你說: "Please make sure that you have network connectivity and try again",這也表示Line的所有遊戲都GG了
3. 如果你是開發Camera App,可以特別把Camera的permission關掉,當你Call Camera.open()時就會拿不到Camera,請做好error handling,以我們的App(SelfieGrid)來說,雖然不會crash,但就剩黑畫面

如果還有其他後果歡迎與我分享