2011年11月23日 星期三

[dotnet]WebBrowser1.DocumentText

因為打算使用 WebBrowser 這個控制項當做 UI 上顯示 log 的控制項,
這是一個快速筆記。

http://msdn.microsoft.com/zh-tw/library/system.windows.forms.webbrowser.documenttext(v=vs.85).aspx 

即使已要求另一份文件,這個屬性仍會包含目前文件的文字。如果設定這個屬性的值,然後立即重新擷取這個值,則在 WebBrowser 控制項尚未有時間載入新內容時,所擷取到的值可能會與設定的值不同。您可以在 DocumentCompleted 事件處理常式中擷取新的值。

有人說,用doevents等一下可以

        While (True)
            Application.DoEvents()
            If Not WebBrowser1.Document.Body Is Nothing Then
                Exit While
            End If
        End While

2011年10月28日 星期五

[備忘]雲端的資料庫系統

資料來源

http://www.ic975.com/Main/Rundown.ic?id=7496

  • 節目來賓:立即科技有限公司 技術經理 郭家甫

因為發現身為資訊相關的工程師的生活,實在是有很多不為人知的痛苦跟麻煩,
因此決定開發出一系列的軟體與服務來讓自己、以及所有相關的工程師的生活更加輕鬆愉快。
Ragic Builder可以快速建立企業所需要的資料庫,
而不需要傳統資料庫的困難開發技術、冗長過程。
利用簡單Excel的開發介面,您不需要寫一行程式,
也可以建立網站式的資料庫系統。
本周的數位領航家
將為您邀請即科技有限公司技術經理郭家甫先生
與各位分享--雲端的資料庫系統

感想:

  1. 它不是用真的excel當開發介面,而是長得像excel的網頁介面,讓人使用控制遠端的資料庫的表格及設定。
  2. 把有關資料庫的開發方式中,比較固定的部份用這套軟體搞定。
  3. 一般企業可以雲端方式來使用這軟體,算月租,也可以買斷放在自家。
  4. 這公司的網站:http://www.ragic.com/tw/index.html

2011年10月17日 星期一

[C#]集合已修改; 列舉作業可能尚未執行

使用 dictionary 會有的一個使用狀況是,
把dictionary 裡的所有值都處理過一遍,像是
foreach( string k in dict.Keys)
{
  dict[k] = dict[k] + “abcd”;
}

這時候會出現「集合已修改; 列舉作業可能尚未執行」的錯誤。
我非常想不懂,這樣,dictionary 就超難用的!
還好有人也遇到。
http://godleon.blogspot.com/2011/06/linq.html
裡面提到的解決方法,把 foreach 的集合,先變成不會變化的 array。
免得 runtime 覺得有危險。
foreach ( string k in dict.Keys.ToArray() )
或者使用
System.Collections.Concurrent namespace 中的 thread safe 集合物件
搞這樣,還滿麻煩的…說真的。

我習慣把資料放在 dictionary 裡傳遞。
因為我用 python 習慣了。
尤其 javascript 的物件,事實上跟 dictionary 沒兩樣…。
這在小程式的時候很好用,如果是超大團隊的話,還是建專用物件來傳會好一點。
這又是題外話了…

2011年9月9日 星期五

[python]python on mac

我還記得以前,在 mac 上要跑 python,不是很開心。
因為 mac 上的 python 版本舊很多。
所以要另外裝所謂的 macpython 才有比較新的。
而且,裝了之後,在 finder 裡點兩下,應該啟動的 python 程式,也不正常。
另外,在 windows 底下寫的程式,無法直接拿到 mac 下執行,
原因居然是換行符號的問題。
因此,我隔了很久都不再 mac 上使用 python。

我去年裝了 mac OS 10.5 之後,我也一樣沒再去想 python 的問題。
最近想把一些每天要執行的程式搬到 mac 上,才能每天有股票資訊可看。
才突然發現,它居然更新到 python 2.7 了,而且,
在 console 底下,打 python xxx.py 也可以順利執行,沒有換行的問題了。
(雖然直接執行還是有問題,因為沒有加上 !#/bin/python)
(直接點兩下也沒辦法執行,這個問題我還沒有找出來)
這樣,就讓我很開心了。

原本,還想說,要不要把 python 程式轉成 jython 可用之後拿到 mac 上執行,
看來除非程式執行需要gui,否則我可以不用花這麼大的工夫了。
哈哈。

[jython]json到哪兒去了?(2)

經過了一段掙扎,回頭再看一下jyson的文件。
http://opensource.xhaus.com/projects/jyson/wiki/JysonUserObjects
這裡面提到,要輸出自己的 class 就要實作 __json__() 這個 method。

回頭再測試一下,jyson 的 loads 及 dumps 根本不看 object_hook 及 cls 的參數。
那麼,
a = json.loads(b,object_hook=ext.as_orderdict)
這個 a 只是一個 dict,所以,要自己再產生物件,於是乎從檔案讀回來就要改成

f = open(json_filename,'r')
  b = f.read()
  f.close()
  a = json.loads(b,object_hook=ext.as_orderdict)
  if sys.version.find('Java')>-1:
    c = ext.OrderDict()
    c.list = a['list']
    c.dict = a['dict']
    a = c
  return a

還有,物件  的定義裡要加上 __json__(self) 的方法。

def __json__(self): # for jyson
    return u"""{'list':%s,'dict':%s}""" % (json.dumps(self.list),json.dumps(self.dict))

文件中,說明一定要回傳 unicode 的字串。

呼,終於搞定了。

[jython]json到哪兒去了?

看著 python 2.6.5 可以快樂的使用 json,
jython 卻還不行使用。
網路上有 jyson,雖然他的用法已經很接近 python 的,
但是,就是不一樣,就是會遇到:

class OrderDictEncoder(json.JSONEncoder)

JSONEncoder 不在 jyson,所以沒辦法照用。

唉~~~,事情不會這麼美好。

以下就開始改變程式,讓 python 及 jython 都能用。

(1)
import sys
if sys.version.find('Java')>-1:
  import com.xhaus.jyson.JysonCodec as json
else:
  import json

(2) 這一段我超喜歡的,條件式的宣告在 python 及 jython 裡,就跟寫程式沒兩樣。讚!
if sys.version.find('Java')>-1:
  import com.xhaus.jyson
  class OrderDictEncoder(com.xhaus.jyson.JysonEncoder):
    def default(self, obj):
      if isinstance(obj, OrderDict):
        return {'list':obj.list,'dict':obj.dict}
      return com.xhaus.jyson.JysonEncoder.default(self, obj)
else:
  class OrderDictEncoder(json.JSONEncoder):
    def default(self, obj):
      if isinstance(obj, OrderDict):
        return {'list':obj.list,'dict':obj.dict}
      return json.JSONEncoder.default(self, obj)

(3) 因為 jyson 不支援 load 及 dump,只有 loads 及 dumps,所以全改成 loads 及 dumps。
例如:
f = open(json_filename,'r')
a = json.load(f,object_hook=ext.as_orderdict)
改成:
f = open(json_filename,'r')
b = f.read()
a = json.loads(b,object_hook=ext.as_orderdict)

但是…天不從人願…
    b = json.dumps(result,cls=ext.OrderDictEncoder)
        at com.xhaus.jyson.JysonEncoder.append_json_repr(Unknown Source)
        at com.xhaus.jyson.JysonEncoder.json_repr(Unknown Source)
        at com.xhaus.jyson.JysonCodec.dumps(Unknown Source)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)

java.lang.ClassCastException: java.lang.ClassCastException: org.python.core.PyCl
ass cannot be cast to org.python.core.PyType

這個我就不知道該怎麼辦才好啦…
jython 還是跑不過去…

[python][jython]關於Exception的不同

在 python 裡以下的敘述可用

except Exception as ex:

但是,在 jython 卻會出問題:

except Exception as ex:
SyntaxError: mismatched input 'as' expecting COLON

耶~~~~

http://jythonpodcast.hostjava.net/jythonbook/en/1.0/ExceptionHandlingDebug.html

經過查詢上列網頁,jython 2.5.2 還不支援這種寫法。

那就只好先寫舊寫法。

except Exception , ex:

擋著先。