2014/10/28

Chrome 中文輸入問題終於解決了 !

  Chrome 瀏覽器更新到 38.0.2125.111m(64 bit)終於解決中文輸入法無法正常輸入中文問題。這問題持續了好一陣子,至少超過一週以上。好巧,FireFox 也更新到 33.0.1 ,但不是相同的問題。

2014/10/21

Processing loadJSONArray() 問題

 在 Processing 中要載入一個 json 檔中存放的 array 資料會參考官方網站中以下列的程式碼執行:

JSONArray values;

void setup() {
  try {
    // values = new JSONArray();
    values = loadJSONArray("data.json");
  } catch(Exception e) {
    print(e.getMessage());
  }
  if (values == null) {
    println("values is null");
    exit();
  }
  for (int i = 0; i < values.size(); i++) {   
    JSONObject animal = values.getJSONObject(i);
    int id = animal.getInt("id");
    String species = animal.getString("species");
    String name = animal.getString("name");
    println(id + ", " + species + ", " + name);
  }
}

但一執行會遇到 cannot convert from JSONArray to JSONArray 的奇怪錯誤訊息,如果你在Eclipse 中開發很快就會發現問題在那裡。若是第一次接觸Processing 的人,真的是會被搞死。只要把第一行 JSONArray values;
前面加上 processing.data. 即可。

2014/10/12

Python 另人頭痛的 Singleton 問題

  最近學習使用Python 寫網路爬蟲程式,除了一些動態及需要輸入查詢條件的網頁問題外,最惱人的還是在Python 語法上,因為對Java 較熟悉,程式撰寫習慣會以OO的方式做思考,所以將一些Python 程式碼要重構時發現光一個Singleton pattern 的寫法就夠人煩的了,在Java 中是簡單的不得了,  在Python 中卻是寫法好幾種,重點是不夠簡單易懂。請參考 Stack Over Flow 網站上以下這篇討論:

 Creating a singleton in Python

以下是其中一種個人認為比較簡單的方法,缺點是無法避免被誤繼承的問題,但還不致於造成大問題。

class Singleton:
    __single = None
    
    def __init__(self):
        if Singleton.__single:
            raise Singleton.__single
        Singleton.__single = self
        self.name = None
        
    def __str__(self):
        pass
    
    def dump(self):
        if self.name == None:
            print ''
        else:
            print "Name : " + self.name
        
    def setName(self, name):
        self.name = name
        
    def getName(self):
        return self.name
        
class WorldSingleton(Singleton):
    pass

  個人是習慣使用Eclipse 搭配 PyDev 這個plugin 來開發 python 程式,以上程式碼無法在開發時就先警告,要到執行階段才能發現。