[OpenData]在駭客松前試做一個把csv與xml轉成json的converter (csv/xml parser) 主要在解決big5/utf8 編碼問題

最近為了要參加OpenData的Shareable Cities駭客松,也為了好好練習一下Python.決定從頭到尾都要使用python當做我主要的程式語言. 比賽中一開始以為資料都來自于政府的OpenData網站 data.gov.tw,所以去觀察了一下這個網站裡面的資料,發現有以下的一些問題: 資料格式不統一: 可以看到政府單位的Open Data  有 XML,CSV與JSON 三種資料格式 資料內容格式不統一: 先提到所謂的內容的格式,也就是編碼(encoding)不統一.有的檔案用big5 有的用utf8,這在 python(2.7)與 Ruby (2.1) 是很大的問題,也是這次主要解決的問題. 資料內容不統一:  有些資料第一列是敘述欄位,有的時候卻是直接開始資料. 所以,我在比賽前想先做出一些工具,可以在比賽當場使用: 統一輸出JSON資料,並且統一編碼為utf8 可以轉換CSV與 XM: 到JSON 可以解決 big5/utf8的編碼問題 可以是情況的把前面幾列忽略掉,輸出更漂亮的資料格式 於是在比賽的前一個禮拜,開始做這個工具.主要會用到以下的python libraries: PyQuery: 主要是拿來做為xml 的parser,相當好用. request  : 主要拿來作為網路資料的下載,一般人常用的url lib 是不錯用,只是有時候遇到長網址會出現問題. csv, json, os 這些必用的  python libraries 就不詳細敘述 這裡記錄一些在做工具的時候發生的事情: Encoding error的問題 原因: 有的檔案用big5 有的卻用utf8,這裡影響兩個地方,一個是csv的資料讀入.一個是json資料dump 解法: 會試著去使用各種預先列出的encoding 方式,然後傳回正確的結果     * 參考: * [http://stackoverflow.com/questions/15918314/python-detect-string-byte-encoding](http://stackoverflow.com/questions/15918314/python-detect-string-byte-encoding) Error: 在Mac 上面想要安裝 PyQuery 會發生錯誤  ”unknown argument: ‘-mno-fused-madd’” 原因:  似乎是 python 2.7 的問題(regression?) 除了等官方正式修復之外~請用以下解法 解法: sudo ARCHFLAGS=-Wno-error=unused-command-line-argument-hard-error-in-future python setup.py install 參考: http://bbs.csdn.net/topics/390767158 http://stackoverflow.com/questions/22313407/clang-error-unknown-argument-mno-fused-madd-python-package-installation-fa Error: [Heroku] ! [remote rejected] master -> master (pre-receive hook declined) 原因: 主要是Procfile 內容有問題 解法: 先去查詢錯誤log  “heroku logs” 發現問題在 “Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch” 於是去修改 Procfile 從   web: python manage.py runserver 到 web: python manage.py runserver “0.0.0.0:$PORT” Error: renamed heroku app from website, now it’s not found git remote rm heroku  git remote add heroku [email protected]:yourappname.git Refer: http://stackoverflow.com/questions/7615807/renamed-heroku-app-from-website-now-its-not-found  最後列一下這邊的github...
繼續閱讀

[研討會心得]2014/03/22-微軟技術關卡破解日

會議的時間是2014/03/22 全部影片的網址在這裡: http://channel9.msdn.com/Events/MVP-Virtual-Conference/MVP-Comcamp-Taiwan-2014 這個研討會我沒有辦法參加,雖然在週末但是有事情無法參加.不過盡量用自己的時間來找一些有趣的topic來看. Visual Studio + C# 開發 Android APP VS2013可以利用Xamarin 來利用C#開發Android,對於C#可以說是又愛又恨.愛的是它簡單易入手,恨的是他的delegate,event跟Lambda相當的難懂.沒錯,易入手但是要深究相當的累. 這篇是中文介紹,利用C#做了幾個範例: Hello world,Toast 範例,JSON string parsing跟Web service的範例. 整體開發界面跟ADT沒有太大差異(檔案架構) layout -> 可以跟 Android共用 檔名不同 xml-> axml drawable -> 跟Android用法一樣 使用的語言,當然就是C#甚至可以使用微軟的.net相關的 System 函式庫 感想: 可以使用 .Net函式庫算是很方便,而且就IDE的上手度而言Visual Studio應該會讓很多人上手度比起ADT 的Eclpse 或是 Android Studio快多了. 有許多可以下載即用的函式庫 Newtonsoft.JSON 就是其中之一,代表許多你在desktop 的跟資料處理有關的函式庫可能都可以直接搬過來. 總結:  想要開發工具可以考慮,若是長期而言還需要好好的考量.畢竟許多可以參考的open source library都沒有能幫助你在C# for Android 的部分. 如果,不愛了呢-談程式設計師的生涯規劃 這篇想探討的是跟程式設計以外的事情,也就是面對著新技術接踵而來,該如何學習?該如何繼續從事這行? 所謂的薪資是公司把員工留下來的最低成本,而所謂的成本就是: 公司是否賺錢 你能幫公司賺多少錢 你在企業內外的影響力 你的市場行情 特別重要的是~企業內外的影響力 所謂得工程師 除了深度還要有廣度 接近老闆,主動回報 名言摘錄: 你的時間花在哪裡~成就就在哪裡 大部人努力的程度都不夠到拼天賦 感想: 要不斷的努力,懂得分配時間到正確的時間
繼續閱讀

[python][mac][OpenCV]在Mac上面利用Python來操作OpenbCV (Using OpenCV in Mac via python)

最近不斷地為了PyCon APAC 2014在惡補Python,在臉書的討論區裡面看到這邊討論OpenCV for Python的文章. 有介紹到有人為了OpenCV for Python 寫了專門的講解 blog 好奇之下開始去尋找如何去使用python在Windows上面,想不到真是有點麻煩. 於是又把念頭動到Mac上面,想不到比想像中的簡單多了,參考這篇(update-installing-opencv-on-mac-mountain-lion/) brew tap homebrew/science brew install opencv mkdir -p ~/Library/Python/2.7/lib/python/site-packages echo ‘/usr/local/lib/python2.7/site-packages’ > ~/Library/Python/2.7/lib/python/site-packages/homebrew.pth 找了一篇測試的程式碼搭配著JPEG果然是成功的,於是開始去把自己之前OpenCV Camera Testing Sample拿來改成python版本. 要改其實不難,主要是要去一個一個把API從C++換成Python.可以去官方API列表來找,幾乎都有兩個語言的版本. 要找詳細的code可以去看Github https://github.com/kkdai/python_learning/blob/master/OpenCV_OpenCamera.py  目前開起相機是成功的,不過要抓取keycode有點問題還需要解決,解決完後就可以弄旋轉的部分.   雜話: 我真的不了解,身為一個軟體工程師有什麼理由不買Mac 的.就算你是Windows 的開發工程師,Mac可以直接裝Windows.更何況如果你是非Windows工程師,使用Homebrew任何程式語言都可以馬上裝好.最近安裝不論是Scala或是這次安裝OpenCV或是之前安裝Django就是那麼簡單.
繼續閱讀

[python][django] 自己開始寫符合RESTful的server與client(2)

其實比起架設RESTful的django伺服器,撰寫一個client去對它存取似乎是簡單多了. 要用到的東西也很少,因為Python本身對於JSON的處理就相當的簡單. 所有的處理都是使用到原先架設好的伺服器裡面的資料 http://sleepy-plateau-3929.herokuapp.com/snippets/.json 這裡稍微提一下GET需要注意的事情 可以使用urllib2的urlopen來讀取網頁 JSON有個直接可以使用的json.load 處理過來如果一開始是object可以使用 result[“object”] 來找,反之可以用 list 去處理 List Data context 的部分,可以處理多個以上的context context = {“context_1” :value1, “context_2” : value2} 接下來直接看code   POST需要注意的事情 要存取網頁上面的表單資料(form)其實很簡單 request.POST[“value_name”] 表單(form)的樣板(template)記得要有csrf_token 先確認你的伺服器支援post 的RESTful Add,如果要上傳JSON你的Content-Type要對 Python requests 是個好用的library,一定要用 接下來看code     最後完整的github在這裏    
繼續閱讀

[python][django] 自己開始寫符合RESTful的server與client(1)

前言: 前幾次開始了Django設計之後,雖然弄出了RESTful的網站,也使用了DjangoRESTFramework.但是,都是依照範例程式來跑出來的. 所以現在決定除了裡面的範例程式之外,另外在同一個網站裡面弄了一個部分是模擬遠端連線 依照著tutorial 1~3 去修改,所以他的架構如下: tutorial (主要的專案部分) snippet (RESTful web site) 負責RESTful的部分,裡面都是使用到DjangoRESTFramework所提供的function. 主要的API 是 snippet webs (模擬的viewer遠端) 主要這裡就是這次開發的部分,主要提供兩個部分: 一個是顯示所有資料的的部分(json get) ,其中全部顯示已經完成但是顯示詳細的部分還沒有. 另外一個是新增資料(使用 json post)(尚未完成) 遇到的問題集錦: 這裡整理一下 ,我這次做出來所遇到的一些問題: 字串的編碼問題 其實這種問題算是基本的,而且也跟我在中文系統上面執行python有關. json出來的資料想要parse出來會成為一堆list 每個list裡面的格式會是utf8~如果要在中文上面正確顯示成字串需要decode(‘big5’)~據說Heroku 預設是utf8但是我使用big5還是可以跑.這個要持續觀察. 樣板的目錄設定(TemplateDoesNotExist) 問題狀況: TemplateDoesNotExist: 500.html 主要原因: 之前在設定的時候都只有一個project 叫做tutorial.但是這次另外建立了一個webs所以template的目錄會出現問題. 依照之前的經驗會以為templates資料夾應該就放在目錄下的/templates/app/,結果因為webs是第二個專案.所以template的設定會維持在第一個,也因為我並沒有在setup.py裡面把TEMPLATE_DIRS設定好.所以會發生這樣的錯誤.  解決方法: 在setup.py 加上以下的部分 PROJECT_PATH = os.path.realpath(os.path.dirname(file)) TEMPLATE_DIRS = ( PROJECT_PATH + ‘/templates/’ ) 接下來把原本打算放在webs/templates的檔案移到tutorial/template/ 參考: http://stackoverflow.com/questions/4705962/need-help-with-django-tutorial 最後再寫一次如何把你的Django Code上傳到heroku python manager.py runserver 首先要確定你可以正常的執行 產生Procfile檔案,其內容為 web: python manage.py runserver 0.0.0.0:$PORT –noreload heroku login foreman start 確認沒有錯誤訊息 利用 localhost:5000 查看如果任何功能有問題 pip freeze > requirements.txt vim .gitignore 確認把virtualenv 產生的目錄加入 *.pyc git init git commit -m “任何comment” heroku create git push heroku master heroku ps:scale web=1 記得要先把其他的app dyno設成0或是砍掉~因為沒有付錢的時候heroku只允許dyno=1 heroku ps heroku open 其實成功之後,之後就可以用其他比較熟悉的git client比如說是SourceTree不需要在console mode的下指令. 查看結果: Server:  http://sleepy-plateau-3929.herokuapp.com/snippets/ Client:   http://sleepy-plateau-3929.herokuapp.com/webs/ Github:  https://github.com/kkdai/DjangoREST_Client/   先寫到目前的狀況~之後會把POST的部分完成當成第二個部分~~~   
繼續閱讀

[UNIX] 關於在Ubuntu 13.04上面安裝XMPP server Jabberd2 (Jaberd-2.3.2)

太久沒有去操作UNIX的系統來灌東西,這次決定完整灌一台Ubuntu 13.04來跑一些東西 Jabber(後來稱為XMPP)是一個開放式的即時通訊協定,之前在公司內部則是有在研究延伸出來的另外一個module Jingle service. 這次回頭來灌系統盡量都使用Advanced Packaging Tool[APT] (ex: apt-get/apt-cache)來完成. 不過Jabberd2 本身是不方便使用APT來裝,因為有牽扯一些設定與更改database 與網路安全的設定 所以在我的流程裡面還使用tarball 自行來設定跟compile **小抱怨: ** 只能說~很多東西真的一段時間沒摸就會生疏~ 連個permission 也能搞我半天~更別說一些指令…  加上近幾年都是在mac上面灌一些東西~有些權限的東西也沒在特別注意… 記錄一些容易出錯的東西…..  Install command in Ubuntu: 13.04 (using jabberd2 as server) sudo apt-get update sudo apt-get apache2 Check localhost in web browser for validation sudo apt-get mysql-server It will save your mysql root password. using “mysql -uroot -pPASSWORD” to verify it. sudo apt-get install phpmyadmin Web server to reconfiguration choose “apache2” How to verify installation? Check file exist in /usr/share/phpmyadmin make link, in /var/www ln -s /usr/share/phpmyadmin Web browser open http://localhost/phpmyadmin install jabberd2 (refer for more detail) Install wget first: sudo apt-get install wget Install dependency libraries: sudo apt-get install libexpat1-dev sudo apt-get install libidn11-dev sudo apt-get install libudns-dev sudo apt-get install libgsasl7-dev sudo apt-get install libssl-dev sudo apt-get install libmysqld-dev Download package from web side: wget https://github.com/jabberd2/jabberd2/releases/download/jabberd-2.3.2/jabberd-2.3.2.tar.gz unzip files tar -xvf jabberd-2.3.2.tar.gz Enable MySQL, SSL and debug with configure ./configure...
繼續閱讀