2013年5月26日 星期日

The Free Translate API from Google

   The google translate api is not free in v2. but some way(hack) let it's work. we can sniff the Google Translate. and mimic the request, the example show as follow:

main.py
TRANSLATE_URL_PREFIX='http://translate.google.com.tw/translate_a/t?client=t&hl=zh-TW&sl=en&tl=zh-TW&ie=UTF-8&oe=UTF-8&multires=1&prev=enter&ssel=0&tsel=0&sc=1&q='
# the user agent is neccerry ...
query = "THE WORDS YOU WANT TO TRANSLATE"
user_agent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36'
headers = { 'User-Agent' : user_agent }
req = urllib2.Request(self.TRANSLATE_URL_PREFIX+query), None, headers)
res = urllib2.urlopen(req)
r = res.read()
while ',,' in r:
    r = r.replace(',,',',')
content = json.loads(r)
result = content[0][0][0]) 

The most trick is the response JSON is invalid. we should remove the wied tag : ",,".

hope it's help for you :)

2013年5月10日 星期五

[Android] The Bug of Set the different drawable for ProgressBar

   作RPG遊戲時,角色的血量通常會用ProgressBar,而比較精美的遊戲會在角色剩下20%或50%的時候給予不同的提示,例如閃爍、變紅等等這時候可以使用ProgressBar.setProgressDrawable(Drawable),將res/drawable/裡面不同的設定檔設定。

code
code
code

   但實際跑起來會發現,call setProgressDrawable後,整個progressBar就消失;這是Android的bug?!看起來是如此!目前的解決方法也很簡單,用xml裡用色票的start/center/endColor即可!

<?xml version=”1.0″ encoding=”UTF-8″?>
<shape xmlns:android=”http://schemas.android.com/apk/res/android”>
<gradient
   android:endColor=”#fff”
   android:centerColor="#aaa"
   android:startColor=”#999″
   android:type=”linear”
/>
</shape>


Reference:
  http://osdir.com/ml/Android-Developers/2010-06/msg02432.html

Pure Java java.util.zip Implementation

"Zipped"!!:)

   J2ME的世界裡,沒有java.util.zip的lib可以用(弔詭的是明明porting也需要jar decoder,還是要包一個zip lib),對於J2ME的開發環境,Jar size動不動就限制2M或4M(此時覺得nokia的偉大,隨便都16M),遊戲圖片想要多一點、華麗一點就可以宣告死刑,當然有很多種方式可以達成目的,例如:降低圖片解析度、減少code size(這有點...)、全部resource用OTA下載、有些programmer就會利用zip的方式減少Jar Size,就最後一個方案是最不傷遊戲畫面及遊戲邏輯的解決方案,該死的是J2ME沒有這個玩意!

   不過日本的J2ME(DoJa)有com.nttdocomo.util.JarInflater取代之,所以才發想此專案 - Jazzlib2me

https://github.com/bearprada/jazzlib2me

   主要還是改自jazzlib這個J2SE的solution,歡迎大家享用(不過話說寫J2ME App的Programmer應該不多了:( )




2013年5月5日 星期日

Virtual JoyStick on Android : Use AndEngine Framework



   天臨時被抓去寫Android的UI,主要是做一個藍芽控制器的界面,有點像任天堂的手把;之前自製Virtual Joystick時,一直迷失在操作搖桿的State Control以及G-sensor數值的處理(使用者體驗總是主觀阿!)。

   後來覺得,用Game Engine裡面的實作比較迅速,所以我選了AndEngine,類似的還有e3roid(後者Performance較弱,用起來會卡卡)。 AndEngine大概是一年前想寫天蠶變遊戲所接觸,直到現在也跟著進版到Android 4.0.x的Support,不過Joystick在1.6版就可執行!

最後還是要小小抱怨一下,AndEngine近版速度算快,但最不能接受的是API不能夠相容!(後來Nicolas Gramlich跑去Zynga Mobile Team,還在網站上徵人


Reference:

UI Framework in JAVA Swing


   什麼要討論已經過時以久的UI系統Swing呢?除了詭異帶點醜陋的UI元件、有點難以理解的 Layout系統、殘缺不堪的元件模組(想找個類似Android的ListView卻找不到);但它還是JAVA Desktop Application的首選(JDK/JRE Default就有的功能,相較於JavaFX,需要額外下載一包Runtime);很不幸的,我們只是需要一個皮(View)替演算法的細節視覺化,同時能夠做簡單的操作達到說明的效果,最後只好乖乖使用Swing這種old style的framework。

   用Swing拉Layout可以用Netbean IDE,但對於動態生成的情境卻是弱的可以(Android的ADT在11版就有支援),但Netbean說起來也只是幫您自動長出那些噁心的Layout Code,換句話說之後微調或修改還是需要直接碰到Source Code,而不是修改Configuration(Android的話就是layout.xml)就能直接使用;好在心灰意冷之餘,同事推薦了JavaBuilders,它把描述UI這件事情變成Yaml,並且引入別牌的LayoutManager : MigLayout,以下是官方的範例Code

 JPanel:  
   - JSplitPane(name=split1):  
     - JPanel:  
       - JPanel(name=p1,groupTitle=Titled Border): [JLabel(text=Groupbox border)]  
       - JPanel(name=p2,border=raisedEtched): [JLabel(text=Raised etched border)]  
       - JPanel(name=p3,border=loweredEtched): [JLabel(text=Lowered etched border)]  
       - JPanel(name=p4,border=raisedBevel): [JLabel(text=Raised bevel border)]  
       - JPanel(name=p5,border=loweredBevel): [JLabel(text=Lowered bevel border)]  
       - JPanel(name=p6,border=1): [JLabel(text=1 px wide border with default color)]  
       - JPanel(name=p7,border=4): [JLabel(text=4 px wide border with default color)]  
       - JPanel(name=p8,border=olive 4): [JLabel(text=4 px wide border with olive color)]  
       - JPanel(name=p9,border=orange 4): [JLabel(text=4 px wide border with orange color)]  
       - MigLayout(layoutConstraints="wrap 1"): [p1,p2,p3,p4,p5,p6,p7,p8,p9]  
     - JPanel(name=sourcePanel):  
       - JLabel(name=sourceLbl,text="YAML source:")  
       - JScrollPane(name=scroll1): JTextArea(name=source,editable=false,font=Monospaced)  
       - MigLayout: |  
         [grow]  
         sourceLbl  
         scroll1  [grow]  
   - MigLayout: |  
      [grow]  
      split1 [grow]    
 bind:  
   - source.text: this.yaml  

   JFrame/JPanel就會對應到檔案名稱相同的Yaml檔,雖然無法臻至完美,但也算是個區域最佳解,為Swing的MVC架構向前一大步。


(迷之聲:那麼難用的UI Framework不如直接寫Android!)