csv與StringIO

看了 python 網站上對 csv 的說明,就在想是不是一定只能藉著開檔才能使用呢?後來查了一下,然後看到 StringIO,藉著這個,就可以把字串以類似檔案的方式來操作了。

[python]
import csv
from StringIO import StringIO

def parse_to_get_record( csv_content ):
“””
According to csv to parse result.
“””
csv_lines = csv_content.splitlines()
# 還可以濾掉某些不要的行
csv_reader = csv.reader( StringIO( ‘\n’.join(csv_lines[2:-2]) ) )
result = []
for row in csv_reader:
print( row )
result.append( row )
return result

f = open(‘d:\\tmp\\aaa.csv’, ‘r’)
s = f.read()
print( parse_to_get_record(s) )
[/python]

電影流水帳(2012/3/30~2012/4/10)

Justin Timberlake y Amanda Seyfried en El Hormiguero
這張照片實在太有梗,我忍不住就挑了這一張照片。

  • In time(IMDB, Wikipedia),中譯:鐘點戰。這片最後的結局是鴛鴦大盜的誕生,所以其實這個故事沒有想要特別說什麼正氣凜然的道理。這片比較特別的世界設定是以時間代替了金錢,去工作,是為了賺時間,要買吃的、喝的、租房子等等的都要付時間,整個就是時間至上。男主角偶遇了一個大富翁,他不想一直這樣活下去,所以給了他一百年的時間,然後去自殺。而男主角拿到這一百年時間,拿了一些給好友,正打算為他媽媽慶生時,他媽媽卻因為沒時間而死在他的面前。他一整個看開豁出去了。於是他跑到高級區去賭,除了贏得上千年的時間外,也認識了女主角。然後開始被時間管理者追捕,女主角從本來被劫持,到變成一伙,就像是得了斯德哥爾摩症候群似的,總之,女主角因此得到新的人生體驗。兩人開始大搶特搶,並且把搶到的時間都分給窮人。片子的最後,他們搶了女主角父親所收藏的一百萬年時間,並且分出去。時間管理者在最後追捕的過程裡,因為沒補充時間而死了。男女主角則幸運地得到時間管理者的時間配給而活下來,從此,他們兩個變成鴛鴦大盜,繼續搶時間。
  • Money ball(IMDB, Wikipedia),中譯:魔球。專案管理老師真是佛心來著,讓我們看電影體驗什麼是所謂的專案管理。這是美國棒球聯盟的故事,在美國的棒球聯盟,會打球的明星就是招牌,所以球隊都以高薪來挖角球員,並以此帶來球隊的票房與勝利。Billy 看破了這一切,在某次去敵隊陣營,他認識了 Peter (Jonah Hill,我真的沒辦法從 IMDB 提供的照片認出他來,那張照片裡的他太瘦了!!),在聽了 Peter 的理論之後,Billy 決定採用他的理論,以數字決定一切,所以他開始根據統計數字去找能確實上一壘的打找,防禦率高的投手、壘手…等等。電影想說的就是這個,以統計數字去找出可能還沒大鳴大放的球員,然後加以任用,並以此打造出世界一流的球隊。可是我看到的不是這個,我看到的是他們在找到這些球員以後,確實地根據這些數字去強化球員的優點,修正球員的弱點,球員修正了,球隊也因此慢慢變強。最後他們創造了連續二十勝的記錄,平了以往的記錄,堪稱奇蹟。電影的最後,以紅襪隊準備以高薪挖角 Billy ,而 Billy 選擇繼續留在運動家隊而作終。片尾的字幕說,運動家隊後來還是沒有贏得聯盟冠軍,但是紅襪隊改採了 Billy 與 Peter 的策略而贏得冠軍。

OpenOffice/LibreOffice Calc Macros(3)

這篇文章是從 LibreOffice 的輔助說明裡挖出來的,列出了所有可用的服務、控制項以及控制項裡的屬性,相當的實用,給我很大的幫助。再搭配這篇教你如何建立對話盒文章裡的範例-dynamicDialog.py,就可以打造出自己的對話盒,並且顯示出來。

在試驗 DateModel (就日期控制項)時,發現了幾個有趣的事情:

  • Date 屬性的指定,必須是 20120408 這樣子的數字,所以以 python 來說就是 int( datetime.now().strftime(“%Y%m%d”) )
  • 指定 Dropdown 屬性為 True 以後,才會出現可以下拉的小按鈕,讓使用者可以簡易的選擇日期,不必手動輸入。

在翻找 LibreOffice 安裝目錄時,發現裡面就把 Python 2.6.1 包進去了,所以不需要額外安裝 Python,就可以使用 Python,這樣就可以跨平台了。

 

OpenOffice/LibreOffice Calc Macros(2)

為了想用內建的 BASIC 語法來抓網站內容,找了好一陣子,找到 OpenOffice 文件正體中文化網站OOo中文手冊網站 也利用Google爬了一些文,然後也看了 LibreOffice 的輔助說明,發現似乎沒有很方便的函數來做這件事情。

然後,又回頭試了 Python,這次是在 Windows 上試,要寫 script 的話,要把 script 放在 %USERPROFILE%\Application Data\LibreOffice\3\user\Scripts\python 下,這樣就可以執行了。當使用 [工具][巨集][執行巨集] 打開「巨集選擇器」以後,就可以在對話盒左邊的「我的巨集」項目裡找到你程式裡的函式,然後就可以選擇要執行哪一個了。

[python]
def main():
# 取得當前文件
doc = XSCRIPTCONTEXT.getDocument()
# 取得第一張工作表
sheet = doc.Sheets.getByIndex(0)

# 填字串,一般字串跟 unicode 字串都可以
sheet.getCellRangeByName(“A4”).String = sys.version
sheet.getCellRangeByName(“A5”).String = “Hello World”
sheet.getCellRangeByName(“A6″).String = u”Hello world2”
[/python]

使用 python 的話,要抓檔案或是要做什麼複雜處理的,就很方便了,需要什麼函式庫,就自己裝上去就行。但是缺點就是失去了部分的可攜性,在沒有 python 的環境下,無法執行。

OpenOffice/LibreOffice Calc Macros(1)

以下都在 Ubuntu 下進行。

目標是想做股市資料的蒐集跟分析。

首先想到,看可不可以做到像 Excel 一樣做 Web 查詢,Calc 的確有類似功能,Insert > Link to External Data 就是,輸入網址以後,速度相當慢,首先會問你語系,選 Automatic,然後過一段時間以後,會把該網頁裡的所有 table tag 都列出來,有 id 屬性的會顯示 id,沒有的,會用流水號代替,所以你不知道要匯入哪一個 table。Excel 在這裡會顯示一個預覽的視窗,並且將可以匯入的部份框起來,左上角有小圖示,按了以後就可以匯入,相較之下,Calc 一整個弱掉。

那就只能寫 Scripts 了,我花了一個小時在找 macro 存放的位置,大概是我裝過太多版本,所以家目錄下有 .openoffice 跟 .libreoffice 這兩個目錄,可是我存了 macro,這兩個目錄下都沒有,LibreOffice 的 wiki 上說是在 .libreoffice 下,我找了又找,就是沒有。本有想用 find 找,可是我家目錄下好多東西,想說不要花那個時間,但最後我還是用了。就目前 LibreOffice 3.5.1 來說,位置是放在 .config/libreoffice/3/user/basic 下。

我發現這方面的入門文相當相當的混亂而且少,目前看到還是 Wiki 上較多…

 

電影流水帳(2012/3/22~2012/3/29)

the descendants

  • Horrible Bosses(IMDB, Wikipedia),中譯:老闆不是人。還算是好笑的片,裡面蠻多大牌客串的,不過3個男主角有點過於用力擺爛了。3個男主角的老闆很機車,讓他們動了殺意,於是就開始殺人計畫。到最後,殺人計畫失敗,但是仍然成功的達成目的,讓3個男主角擺脫了惡老闆。Jennifer Aniston 在這片裡,相當的火辣,就看一看囉。
  • The Descendants (IMDB, Wikipedia),中譯:繼承人生。這部片的配樂很精彩、很好聽。Matt 的老婆因為意外而變成植物人,遵照她的遺囑,她不願意使用維生裝置延續生命,所以要拔呼吸器。醫生告訴 Matt,請 Matt 把跟她相關的人都找來道別,所以 Matt 就找了她的女兒、父母、朋友來看她。在這段期間,Matt 從女兒嘴裏知道了妻子的背叛,跟女兒重修破碎的關係,也去找了妻子的情夫,請他來看妻子最後一面。整個故事相當平淡,沒有令人驚奇的結局,但是很好看。還有就是大女兒的身材很棒,有幾個片段穿比基尼的時候,還不錯看。

APN的一些筆記

前一陣子看APN的一些筆記。

TelephonyProvider是主要的提供者,從這裡就可以撈到 APN 的列表,這是在第一次開機或 Reset 時,由 /system/etc/apns-conf.xml 載入到 sqlite3 的資料庫裡。

在「設定」那邊的 APN 列表,主要是根據 sim card 上的 mcc, mnc 去查詢符合條件的記錄,然後列出來。查詢 mcc, mnc 的方法是透過 System Property:TelephonyProperties.PROPERTY_ICC_OPERATOR_NUMERIC,這是在開機,Phone 相關服務初使化以後,會存到 System Property 裡。當移除 sim card 時,自然會因為無法取得 mcc, mnc (System Property:TelephonyProperties.PROPERTY_ICC_OPERATOR_NUMERIC 是空的)而查詢不到資料,列表就會是空的。這時候去撈 TelephonyProvider,還是可以撈到完整的 APN 記錄。

 

電影流水帳(2012/3/6~2012/3/21)

SDCC 2011: Offsite: Real Steel

  • Real steel(IMDB, Wikipedia),中譯:鋼鐵擂台。一個機器人拳擊與小孩的故事。個人覺得裏面機器人與親情的部份稍嫌薄弱,到了最後像是硬湊起來的結局。Charlie是一個醉心於機器人拳擊的人,他拋妻棄子,只為了機器人。就在又把機器人玩殘了以後,法院通知他說他的前妻死了,孩子撫養權需要他轉讓,才能讓給前妻的妹妹撫養,為此他勒索了前妻妹妹的丈夫一筆,並且同意他們去義大利玩的時候,暫時照顧這個孩子Max。於是Max就暫時跟著Charlie一個暑假,Charlie用這筆錢買了Noisy boy機器人打算大賺一筆,可是,Charlie實在不爭氣,Noisy boy機器人掛掉,他們去找零件時,Max不小心掉下去懸崖,還好Atom救了他,Max決定把他挖出來。挖出來以後,發現這是一個可以摹擬人動作的機器人,所以可以跟著Max跳舞,也可以跟著Charlie一樣打拳擊,在Max改造之下,Atom可以聲控,也重新記憶了Charlie的拳擊招數。然後再加上Max的提醒,他們鹹魚翻身了,Atom變得很紅,也賺了很多錢。最後挑戰Zeus,挑戰Zeus時,聲控壞掉,改成摹仿模式,摹仿Charlie打拳擊(這樣真的不算作弊嗎?),打贏了Zeus。這裏面的第一個疑點是,Charlie在遇到Max之前也實在太廢了,他的拳擊怎麼都沒派上用場?感覺上好像都在玩電動似的。第二個疑點是對於親情的描述不夠多,他們在暑假的感情是怎麼變得那麼好的呢?第3個疑點是Atom未免也太耐打,之前片頭一開始的機器人未免也太容易被玩殘,Noisy boy的頭一下就被扯下來是怎樣?
  • Late Bloomers(IMDB, Wikipedia),中譯:內衣小舖。這是一部瑞士的電影。一個老太太他因為喪夫,整整九個月都提不起精神,這一天,有人委託她做旗子,她的好朋友就跟她一起去了伯斯採買,採買的過程裡,讓她重拾起往日想開內衣店的念頭,於是回來以後,就決定衝了。衝的過程裡遇到很多困難,第一個是某些朋友與兒子的不支持,這個隨著時間過去跟捉到兒子的把柄而解決;第二個是小鎮的傳統還是不能接受內衣店,這讓我才知道原來歐洲鄉下也是很保守;第三個是賣不出去,這個是靠著她朋友突發奇想,想到可以網拍解決;第四個是產能不足,網拍之後,受到好評,但是一個人做不了那麼多,後來商請安養院的刺繡班幫忙,才順利出貨。後面的部份有點過於歡樂跟簡略了,但是整個故事緊湊,相當好看,也可以當作創業的一個參考,創業最主要真的還是熱情跟願景,片裡的老太太就是為了圓他年輕時的夢想,才咬牙撐過來。

次方根與MathML

本週投資學老師提到了幾何平均數,公式裡面有應用到次方根,然後看我們excel還不錯,就問我們excel裡面怎麼算次方根?班上沒人答的出來…

同學被考倒之後,老師就說了,這其實是基礎數學,n的平方根,就是n的 1/2 次方(維基百科。除了 ^ 以外,excel 有一個函數也可以用來做這件事情,這個就留給你們回家自己去查了。

剛剛上網找了一下,這函數就是 power,power 是用來傳回數字乘幕(次方)的結果。所以
xn=x1/n

我看我的數學已經差不多都快還給老師了,到時候要跟兒子一起再學一次…

寫到一半時,我想到要用MathML來顯示公式,在FireFox附件元件網站找到FireMath這個編輯器,算是方便很多了,不過次方根我還是遇到障礙,後來是參考了網站提供的次方根範例,才正確地產生了次方根的數學公式。

MathML是網路上用來顯示數學公式的最佳選擇,理論上應該是要各家瀏覽器都支援的標準,但可惜,某些瀏覽器不支援,像Chrome、IE7、IE8都需要額外的plugin才能正常顯示,如果你沒看到數學公式,就請去找MathPlayer來安裝或是參考W3C上的說明去做,才能看到MathML的結果。

c# webrequest二三事

前幾天遇到的一些問題跟解:

  • 要對ASP.Net網頁做POST,因為有ViewState的關係,沒辦法像一般簡單的HTML form那樣做,需要先讀取網頁之後,取出裡面的__VIEWSTATE 跟__EVENTVALIDATION ,再加上你要填的內容去重新組出網址,才可以正確地POST。參考自:C#的HttpWebRequest编程,支持带ViewState的网页POST请求通过HTTP抓包,深入理解ASP.NET WebForm ViewState
  • 需要使用帶有Cookie的HttpWebRequest,HttpWebRequest有個CookieContainer可以用,所以套上Cookie即可,參考自:WebClient 保持 Session 和 Cookie,基本上就套它的HttpClient。
  • Cookie怎麼來?除了可以透過WebBrowser控制項去撈以外,也可以用Win32 API:InternetGetCookieEx()去撈,我用WebBrowser控制項撈出來的有問題,後來就改用Win32API的InternetGetCookieEx()就行了。參考自:请问如何自动获取cookieContainer.Add()中的值Is it possible to transfer authentication from Webbrowser to WebRequest
  • utf-8轉big5的問題,轉了以後都放在字串裡,因為要拿來組網址,要使用Uri.EscapeDataString(),卻發現輸出結果一樣。沒辦法,只好自己來。首先先套轉換的過程,但是不要放回string,而是拿byte[]來用,拿來以後,取得每個byte的16進位,在前面加上 ‘%’ ,再組成字串,就可以拿來組網址。不知道有沒有什麼例外情況需要處理,又懶得去翻RFC,總之,試的結果是可以,沒問題,就先這樣用吧。