2013年12月7日 星期六

活在當下

剛才邊上廁所邊上網查資料時...
小兒子跑進廁所問我:爸爸你在幹嘛?
我回答:在上網查資料啊
小兒子:爸爸你在上廁所啊

活在當下。

使用 python 分析網頁資訊

摘譯自
'My Data Is Big Because It Doesn't Load Into R': Why Python Is the Language of Web Science

當資料量大到不能直接交由 STATA/Excel(Google Drive)/R 分析網頁資料時,就該考慮使用 python 幫你預先處理資料格式,比如將資料庫資料轉為較通用的 csv 檔案格式,再將 csv 資料載入其他工具或函式庫做分析處理。

網頁科學會以統計學為各學科間的基礎,來進行分析、視覺化處理,客製化資料格式,也是用來搜集其他網頁,產生新集成資料的平台,在這領域因為還在發展階段,並不存在最佳解決方法,大家都還在討論、試圖理論化、實作並進行測試。

Python 的優點是好學好用,語法清楚,套件包山包海,有廣大的開源社群當你的智囊群。

底下的討論中 Todor Kazakov 提到 http://statace.com/ 提供 R 語言的雲端服務,讓 R 使用者可以將大量資料處理交給 statace 處理。

(譯註:看完發現 R 的資源也蠻多的啊 XD )

2013年9月30日 星期一

公開資訊觀測站 IFRSs 新制 每月營業收入表

臺灣證券交易所網站改版後,目前 IFRSs 新制的每月營收報
表位置為:

交易資訊(左上方橫條數來第二項) -> 統計報表 -> 
國內上市公司營業額及背書保證金額彙總表

-- 2013年編輯時原本資料位置 開始 --

公開資訊觀測站 每月財務分析資料在改版後(連舊版也有改)
,都有分採用 IFRSs 跟沒採用IFRSs 兩種:

新版點選方式:
彙總報表 -> 資訊揭露 -> 每月營收 ->採IFRSs前-財務分析資料查詢彙總表
彙總報表 -> 資訊揭露 -> 每月營收 ->採IFRSs後-財務分析資料查詢彙總表

舊版點選方式:
彙總報表 -> 採IFRSs前-財務分析資料查詢彙總表
彙總報表 -> 採IFRSs後-財務分析資料查詢彙總表

-- 2013年編輯時原本資料位置 結束 --

採用 IFRSs 需求原因:
為加強國內企業及國際企業間財務報告之比較性,提升我國
資本市場之國際競爭力並吸引外資投資國內資本市場,同時
降低國內企業赴海外籌資之成本

因為 102 年才導入 IFRSs, 所以採用 IFRSs 後的資料就只有
 102 年 1 月起才有

預計效益
一、 有效提高國內會計準則之制定效率及國際形象,並提升
我國資本市場之國際評比。
二、 加強國內企業及國際企業間財務報表之比較性,有助於
吸引外資投資國內資本市場。
三、 國內企業如欲赴海外發行有價證券,無須依國際會計準
則重編財務報告,可降低相關籌資成本。
四、 全球採用單一會計準則,對於有海外轉投資公司之國內
企業,可降低會計帳務之轉換成本,並提高經營管理效率。

參考:

2013年3月23日 星期六

Apple iOS UDID 替代方案

摘譯:
UDID 是一組辨識裝置(比如 iphone, ipad devices)的字母與數字組合字串,原本 iOS 的 UDID 優點是可以跨 服務供應商,分析廠商 辨識單一裝置。

可能的替代方案:
1. Wifi module 的 MAC address,但這做法一直有泄漏隱私的疑慮實作方式可以參考 UIdevice_with_UniqueIdnetifier-for-iOS5

2. Apple 官方建議改用 CFUUID (Core Foundation University Unique Identifier),由 iOS 的應用程式取得,但跟 Apple UDID 差異是可能會被刪除,非永久有效。使用者清除裝置(wipe/restore)資料時也會消失。另一個可能可以用的 id 是 advertisement identifier

3. OpenUDID 由 AppsFire 在 2011 年八月開發,但跟 Apple UDID 有同樣的隱私疑慮,可能要考慮被停用的風險。

4. 較新的是 SecureUDID 跟 OpenUDID 一樣是開源做法,但是多提供防止多個應用程式開發者共同存取同一個 SecureUDID 的功能,也讓使用者有機會取消 SecureUDID
5. mobile Cookies,已經有許多 Gmail, eBay, Facebook 之類的應用程式可以在 Android/iPhone/Blackberry 等手機平台上辨識你的登入資訊,當然也同樣可以儲存類似 UDID 等資訊。StrikeAd 已經採用並可以彙整資訊到 Google Analytics 或 Omniture(?) 等資訊中。

參考:

The End of UDIDs - what it means for mobile advertising

2013年3月15日 星期五

https 加密 http uri 與 response data

常有人好奇我們的瀏覽器 https 究竟保護了哪些資料呢? 而 http 的 GET/POST/DELETE 等 method 在 header 有沒有加密?

從 OSI model 來想,tls(ssl) 在 session layer, http 在之上的 application layer,因此知道 tls(ssl) 完整保護了 header 跟 response body data

從 python socket programming 來看,會是先建 socket 到 server host/ip 以及 port 443,再加上 ssl wrapper 後,才對 server 送出 GET /PATH/TO/URI 然後收到 response 資料,因此也可以理解 https 連線保護了 http uri 跟傳輸的網頁內容,竊聽者除了知道我們跟哪一台主機、跟 port 連線外(tcp/ip header),除非真正解密,或找到其他安全漏洞,否則無法知道連線內容。

參考程式碼:
    https://github.com/sjh/python/blob/master/demo_https_ssl_encryption_parts.py











2013年2月18日 星期一

ruby 2.0 bitmap marking 節省的多個 proccess 共用記憶體空間


閱讀 ruby 2.0 garbage collection

http://patshaughnessy.net/2012/3/23/why-you-should-be-excited-about-garbage-collection-in-ruby-2-0

原本的 ruby GC 演算法 mark and sweep:
Ruby 的 String 等物件在 ruby 記憶體配置中,都是由一組 flag/RValue 的雙欄位物件組成,RValue 儲存在 heap 中,當新申請的物件找不到足夠記憶體時,就會啓動 garbage collection(GC), GC 演算法就是去找到哪些 RValue 已經沒人在用可以重新釋放,讓新的物件使用,flag 中有個欄位稱為 FL_MARK,設定 FL_MARK 為 1 表示正在使用中,當整個 heap 檢查完,沒有 mark 的 RValue 就會加入一個 free list,被 sweep (清除),每當使用新的物件或數值就會使用 free list 中的 RValue,當 free list 又被用空後,就會再次執行 mark and sweep 的 GC 產生新的 free list,如此進入新的循環。

如果執行完 mark and sweep 後發現沒有多餘 RValue 可供生成 free list (空的 free list) 該怎麼辦? ruby interpreter 就會產生新的(一次十個) heap 並產生相對應的新 free list 給新物件使用。

Ruby 2.0 嘗鮮版 bitmap marking(號稱比 rubyEE 更快的 GC):使用 copy on write optimization 的 GC 可以讓不同的 heap arrays 共用有相同值的 RValue 物件,也就是多個 process(比如 ruby on rails 有許多共同的網頁物件),但可惜的是再 mark and sweep 演算法中,會把這些共用物件設定為 marked,因此無法繼續享受共用 RValue 來節省記憶體空間。但Phusion Passenger 的 Hongli Lai 已經在 ruby EE中改掉這個 marked as modified object 的問題。而現在 Narihiro Nakamura 的 bitmap marking 修改是放棄 flag/RValue 的資料結構,改在每個 heap header 採用 bitmap 紀錄記憶體是否已使用,因此 mark 的動作,不會再去改到 heap 本身的資料結構,享受到 copy on write optimization 來節省共用物件的記憶體空間了。

另外一個修改是這些 heap header 必須對齊到 2 的次方位置 (posix_memalign, not malloc),優點是計算 heap header 位址的方式較方便

在 heroku 的 ruby on rails 可以在 Gemfile 加上:
ruby "2.0.0"
指定 ruby 版本

因應 ruby(python) interpreter GIL 使用多核心的記憶體問題

閱讀 Malthe Boltche 的 Hog that CPU

http://www.maltheborch.com/2013/02/hog-that-cpu
原本是講 python 但是也有提到 ruby 的部分

使用多核心與記憶體的關係:
Python 跟 Ruby 兩個 script language 因為在 interpreter 採用 GIL,
因此單一 interpreter 會有無法用到多核心效能的問題,

如果要使用多核心的效能,必須為每一個核心各 fork 新增一個
 interpreter 實體,但同時也因此變成吃記憶體的怪獸,比如使用
ruby on rails framework 一個實體就可能吃掉數百 MB 的記憶體
空間,而使用多核心(或新增 ruby process 處理新的 http requrest)時
多產生的 interpreter 實體可能很容易就用完系統記憶體。

Ruby EE, Rubinius 跟 jRuby 一樣採用 copy on write 的 shared
memory 共享記憶體方式,而在 Ruby 2.0 加強的 bitmap marking GC
 algorithm 可以減少 ruby process 在 web framework 的記憶體使用量

而 ruby GC 演算法改進可以看
python 的使用者可能會對 hog that cpu 後半段討論的 CPython 在單
核心使用 mulithreading 但遇到 no thread safe 的討論有興趣。

2013年2月1日 星期五

靜態檢查 python 程式碼的工具

參考 StackOverflow 上關於 Abhijit 跟 Nick Bastin 討論關於靜態檢查
 python 程式碼的工具:

Standard Compliance verification - PEP8

  1. Pylint 
  2. PyFlakes
Metrics

  1. PyMetrics 
  2. Traceback 
  3. objgraph (Python reference chain metrics and debugging)
Code Coverage

  1. Code Coverage

擁抱與氣球

跟家人逛街發生了兩件事,擁抱與氣球。

一開始是帶著 sch 走在路上,有個應該是信仰天主教的信
徒(?)說他感受到天父的熱愛,想要給我一個擁抱,問我
是否願意接受,一開始猶豫了一下,但看起來應該蠻單純的
,就讓他抱了一下。

後來在捷運站時,ssh 在跟著我們等捷運列車時,突然收到
一位外國朋友送他一個 hello kitty 氣球,讓他開心了一
整晚。

感謝信徒與好心的外國朋友,讓我們有一個特別的夜晚。
;-)