2013年9月14日 星期六

活動:Tainan.py x MOSUT 2013 8 月聚會

這一陣子在趕專案,儘管對於 Flask 的使用及 API Server 的規劃有所收獲
卻苦於撥不出時間整理相關資料跟想法,嘗試分享給朋友們以供改進
更慘的是,聚會文跟筆記都完全拖稿 … Orz

趕緊來補一下!
8月炎炎夏日,聚會時間首次(可能也是近期唯一的一次)選在週六晚上舉辦
並且達成了成就:聚會時間破十一點 + 我要征服臺南牛肉湯 的作者領軍帶大家吃牛肉湯續攤
photo by mosky@府城牛肉湯





這次聚會首先邀請到了來自 Taipei.py 的 Tim 分享「Python 打包注意報」



這個演講相當實用啊!
儘管使用 Python 已經快要滿兩年,我對 distutils, setuptools … 的關係都不太瞭解
聽完演講後,毅然決然以後 pip install 都只在 virtualenv 下使用,確保乾淨


第二場演講的講者是來自 pinkoi 的 Mosky,帶來了「Web App 實戰:Mr.Bus

此為開場部分的錄影,下週陸續上傳後續片段
(檔案放公司電腦 Orz)

此演講涵蓋 nginx, uwsgi, flask 許多願望一次滿足 XD
其中 Mosky 分享的 nginx config 設定小技巧有趣而實用
不過 flask 聽不夠啦 XD 備註:講者還在改投影片,修正錯誤且做完整後才會釋出


中場休息時間時,我們安排了「吃鹹酥雞配綠豆湯」的活動
這次總算讓大家吃到熱的鹹酥雞了 XD


第三場演講是 Descent 帶來的「linux 下中文終端機徹底研究, 輸入法與秀字」



儘管當年大家在用倚天系統的時候,我大概還在玩彈珠跟搜集旋風卡 XD
但是對於沒用過的人來講,此講題仍非常有趣,大家的氣氛非常熱絡!
強烈推薦觀看錄影!


第四場演講是宗翰帶來的「使用有限時域差分法計算電磁波」Reference

什麼? python 版本比 c++ 還要快 !!??

強烈建議不要只讀 Reference ,一定要看錄影
若對數學沒轍,可從影片 13 分開始觀賞,歡樂到結束 XD

常規演講結束後,BitCoin 中文社群的朋友也投了個 lightning talk

縱觀這幾次 Tainan.py x MOSUT 的聚會
發現南部的朋友投稿都很踴躍,講者演講時的參與度也非常高 而每次聚會都有「驚喜」能讓人意外地學到更多 XDDD


--
下次聚會改善事項:錄影, 拖稿
最懶的方法是不是找一個行車記錄器,掛在大電視對面的牆上就好了 XD


2013年7月22日 星期一

筆記:Python 輸出 .csv .xls .tsv …

近期恰好遇到需要在網站上提供輸出 .csv 檔案的功能
而無奈地,由於內含 utf8 中文字元的關係
使得輸出後的 .csv 檔案,透過 excel 開啟後會出現亂碼(明明 google 表單匯入都正常)

為了解決此問題,於是我曾嘗試使用 python 內建的 csv module, 高階版的 unicodecsv, 手動 補上 BOM 的資訊 … 但是透過 excel 2011 for mac 開啟後,中文仍然都是亂碼 Orz

仔細想想,既然假定使用者會用 excel 開啟檔案
那也不用強求一定要輸出 csv, 直接輸出 醜醜的 excel 檔案即可
於是最後找到了 tablib ,神速的短短幾行程式碼便能完成工作:

# 安裝
sudo pip install tablib

# 使用
headers = (u'中文', u'沒在怕的')
data = [
    ('John', 'Adams'),
    ('George', 'Washington')
]
data = tablib.Dataset(*data, headers=headers)

# 轉換成各種格式的字串
data.csv
data.xls
data.xlsx
data.yaml
data.tsv
data.json
… 

2013年7月9日 星期二

活動:Tainan.py x MOSUT 2013 6月 - 首次聚會

第一次正式聚會,人潮馬上擠爆了聚會場地!
講者恰好位於畫面的兩端遙遙對望,此照片構圖真好啊


身為在 PyConTW2013 閃電秀跟大家說要在南部舉辦 Tainan.py 的 用 Vim 男子漢
會後 因為騎虎難下 馬上就寄信與母系成大資工、jserv 大大大橋場地跟邀約演講,且都得到正面回應
更幸運地,才剛搬回台南就參加到了 MOSUT 在isrlab 場地的聚會,認識許多朋友,且得知該場地有協助社群的打算
在鼓勵之下,我立刻斗膽決定在 6/29 (六)舉辦 Tainan.py x MOSUT 的聚會
且於 6/14 就先安排一場「微聚會」,看看能不能約出在台南對 Python 有興趣的人



微聚會時我所分享的投影片(又是 Bottle 的簡介),而且我講的頗爛 XD


結果,一切都很順利!

微聚會時已約莫有十位朋友參加活動
正式聚會時,原本預估約 20 位朋友會過來,最後則出現了 35 位朋友!
意外的是,或許由於場地較小,因此講者與聽眾之間非常的「沒有距離」
有問題、有看法,皆能即時進行討論,且反應熱烈
而原本預估,唯一的一場閃電秀過後應不會有朋友臨時想上台演講,結果卻完全相反 …
後面的臨時投稿才開始了聚會的第二回合演講:Abaqus, Forth, MOSUT, isrlab …
各主題、各組織的介紹接踵而來
最後請大家來個自我介紹以後,活動就已經超過六點了 XD
(活動的演講量大概是平常 Taipei.py 的兩三倍以上吧 XDDDD)



至於 Taipei.py Logo 的小故事,就不附在此 下次去台北再上台說嘴 XD)


由 Tim 所帶來的「手把手教你在一分鐘內做 HTML5 Slide」線上觀看投影片



這次 Tagtoo 的 David 所帶來的 google cloud platform 介紹
(截圖是 google 官方的網頁,點擊「View the presentation」可以下載 David 引用的投影片)


這是 MOSUT 朋友 descent 所帶來的 x86 演講! (好硬啊 XD)
觀看影片時請參考他的 部落格文章


這是 Clifford Yen 所帶來的「Python 在有限元素軟體 Abaqus 的應用」
(臨時出現的隱藏講者!反應非常熱烈!)


強者我學弟小畢 CrBoy 現場寫 投的閃電秀,介紹 MOSUT 


以上還只是聚會的部分內容,有一些演講因為沒有錄到、尚未蒐集到影片或講者未授權等等因素,而尚未出現在上述的介紹中。總之, 既有的錄影 已經放到 youtube 之上,而 Tainan.py 的 meetup 社團 內亦有聚會的補充資訊可供參考!之後若有取得其他的錄影檔案、講者投影片,亦會陸陸續續更新上去! 


本次的聚會能夠成功舉辦,得感謝:
  • MOSUT 社群朋友的幫忙跟 isrlab 對場地、餐點的協助(鹹酥雞 + 杏仁豆腐,好棒啊)
  • 北部 python 社群朋友們的火力支援(從 Logo 、講者到聽眾真的是出人又出力!)
  • 所有願意過來參與活動的朋友們(尤其是看到許多正在唸書的學弟妹們過來參與活動,非常感動)



有了這次的經驗,我相信下次的聚會會辦得更好!



備註:
搬到台南兩個月後,強烈感受到台南的活力!
無論是「創業抬槓」的活動、「MOSUT 社群聚會」、台南「HPX 讀書會」、
近期剛開始以學生族群為主「Wheel Lab」的 Web, App, 創業相關聚會、
再加上 Rails 社群與 Python 社群的聚會、
還有,八月份 Forth 社群的前輩們亦有與 MOSUT 合辦的聚會、
還有,難以計數的讀書分享會 …
對了,還有堅持在濁水溪以南舉辦的 MOPCON …
(講的好累 … )
這些活動的熱絡,皆再再的證明技術性社群活動在台南已經逐漸發酵 :)
我想,您若是喜歡南部的生活 美食 ,已經可以準備搬過來了 XD

活動:AppWorks Demo Day #6

活動正式開始前,會場放著五月天熱血的音樂,各組要上台的人正努力地準備等一下的演出


仔細算一算,這已經是我第四次參加 Demo Day 了!
這次參加的心境,又有別於前三次
這一次,我所在的公司已經從台北搬遷回台南,而且經歷了半年的多元嘗試
我也鎖定音響、耳機領域,做了些嘗試性質的服務(目前在協辦八月初某一場耳機迷的 聚會
對於創業無成這一件事情,自認有更深的領會


因此,心態上可以說是老了很多
但,想不到 … 這次上台的團隊大都比我(們)還要老很多 XDDD


對於 Demo Day 的看法,去年 我所寫的文章 已經大致描寫過,亦沒有太大的改變
對於新創的團隊,我永遠都是抱持著多些善意批評、多些鼓勵的態度
畢竟,用說的容易做事難,倘若這個世界沒有人願意嘗試做些新東西
那麼整個環境是無法越變越好的


我之所以說這次的團隊老,其實不只年紀,還包括事業成熟度、產業類型 …
看來,近期 Jamie 招生時的老鳥策略有所奏效
但,卻也可能帶來了一些問題:
(以下為個人的不負責任推理與猜測)
  • 真的過得不錯的老鳥是不會進 Appworks 的
  • 進來的老鳥,礙於既有的生存模式,參與度與可培育性未必會高
  • 老鳥與老鳥間的協力合作、媒合是相對較為困難的,除了心態以外,產業相異就是一個不小的鴻溝
  • 老鳥與菜鳥間的互相激勵、帶動,未必能有預計中強大的效果(做的東西很可能差異太大)
  • 最後,菜鳥與菜鳥間的互相激勵、幫助,很可能因為團體太小,而無法有 1+1>2 的效果
舉例而言,這次的團隊組成亮點大概是有軟硬整合的團隊,但我卻難以想像這些團隊要怎麼與其他做社群、做旅遊、電子商務 … 的團隊進行溝通或是合作
當然,每個團隊做的東西有所差異,互相交流時是能夠開拓視野的
但是,我似乎更樂見是由 20 個剛出社會的菜鳥團隊全部做 web 與 app 的服務。很有可能很多東西會很蝦而死掉,但是我相信團隊間的隔閡會更小、交流更多、培訓期間的成長更大


這次另一個比較明顯的問題是,有些團隊太不「網路」了 ... 對此我就不再贅述 :)
我猜測對於 #7 的團隊篩選,Jamie 應該會調整比例


而這次的 Demo Day,整體的 presentation 皆較往年為佳
缺點為,我個人不喜歡所有人都套上樣板用「廣告式」的方式來推銷自己
應該還有更多的可能性才是 (這次的團隊呼叫政府當然是走向另外一個路線了 XD)


最後,附上這次「玄米設計」推出的 Picaca App 的 官方網頁連結,我個人認為此產品在這次 Demo Day 中表現非常突出!


備註:
好吧,我先承認,其實敝公司 利昇科技 與「玄米設計」是有合作關係的
之前也曾一起推出一款文青拍照標價 App - PicValue
歡迎大家一起 下載 試用!

2013年7月8日 星期一

活動:PyConTW 2013


這張海報是我跟一個學妹(偷懶時)貼的,噢耶!



今年的 PyCon 心得很不一樣 =v=:
  • 心得文拖搞兩個月 …
  • 此次由原本純參加者的身分轉變為志工與小小(閃電秀)講者
  • 這次議程沒有現場聽到很多場,所以沒有辦法像去年的文章來拜所有的大神們 Orz
  • 取而代之,今年參與到了 PyCon 的籌備,能夠用另外一種角度來看看 PyCon
  • 過了兩個月,很多當時的小細節老早都忘了,但或許現在想得起來的部分是比較重要的也說不定(我當然要這樣講)


與其說今年我「參加」了 PyCon,倒不如說,我一起參加了「做」 PyCon 的(部分)過程
而在過程中,我看見了一群 Pythonista 用 Python 的思維做事情的方式:
  • 籌備團隊之間的 namespace 分組明確,且大家總能將自己的事情做好
  • 籌備時重要的 rules 皆明確地被寫在 handbook 內,遇到爭議時主席會跳出來重申重要的主張
  • 即便團隊已有自己的文化與規則,但是遭遇突發的狀況時,仍能夠調整規則並且應變
  • 或許同樣身為工程相關人員,同樣熱愛 Python,當遭遇問題時,大家永遠都在尋找在特定情況下的「one obvious way」去解決問題


這次 PyCon 有不少新的嘗試,像是採用三軌制,滿足各領域朋友們的願望;提供早餐餐盒,超級貼心的服務;提供財務協助方案,讓財務較為困難的朋友仍然能夠參與活動;晚宴規劃了表演與夜市,氣氛一級棒!

因為擔任志工,我也參與了
看都看不完的mailing list 籌備信件轟炸、場地佈置、發便當、會後聚餐 … 雖然當天聽到的 talk 少了一點,但是所認識的朋友與講者帶來的收穫是遠遠值回票價的!



擺攤時,各攤位都畫上了有趣的圖案 XD

自行吐槽 XD

這太強大了吧!

台北的 Python 社群 害我跳進 Python 坑的人都在裡面



事實上,我今年生日的時候,某 Taipei.py 使用 Pyra*** 框架的朋友有寄信向我邀搞:


Hi Joe,

你知道的,工作別太累,要留點時間投稿啊 XD

http://tw.pycon.org/2013/zh/blog/2012/11/21/call-for-proposals-zh/


生日快樂在哪裡 XD
還記得去年的心得文我曾寫到「希望某年我能夠熟 python 熟到能上台向大家介紹牠 ... Orz」
結果今年我雖然還是不太會寫 Python ,但是還是丟了個閃電秀上台 …






這是我第一次上台講閃電秀,非常緊張!
事前我大約又花了十來個小時準備投影片跟演講內容
花費的時間真的遠超過預估(我之前已經在 Taipei 介紹過 Bottle 了!)
講題跟內容我刻意一直用前陣子很紅的形容詞「微」當作梗,效果看起來不錯 XD
因為本人沒什麼技術能夠分享出來,所以也就只能簡單跟各位介紹自己使用 Bottle 的經驗
順便搞笑一下
檢討一下自己:
  • 原本是以 ipad 做簡報工具,不過轉接線與現場設備不合,會閃爍!好在後來有向 ccc 借到筆電 XD
  • 演講前缺乏預演,主要都是前一天睡覺前自己在心中默默演練演講情況
  • 因為使用的設備不是自己的,緊張,所以加快了演講速度,結果演講時間比預計短了要整整一分鐘 XD
  • 上台後完全就偏一側的麥克風講話,前一兩分鐘非常沒有安全感,整個人都龜起來
  • 講話吃了一些螺絲



意外在會場發現了一張必須倒著看的神秘貼紙 XD



最後的心得嗎?
這是我這半年多以來參與北部 Python 社群聚會後,所投入的一個大型活動
在此,除了認識許多熱愛 python 的熱血朋友們以外
我也發現有投搞演講就是有差,自己除了在準備時能夠整理思緒以外,現場演講亦是經驗的累積,而演講後也會有不少朋友們願意主動過來給我意見
(竟然有人說我可以出道了 XD)



付出,而後,得到更多更多。
怎麼看都划算!



夜市結束後,我與帽子的文青圖


週日與籌備的朋友、講者們聚餐後就回家(台南)去啦!




備註:
不嘴砲,Tainan.py 真的成立並且已經舉辦過聚會了!
點此 加入社群可以得知 Tainan.py 的最新消息!

2013年5月11日 星期六

活動:Taipei.py 2013 4 月聚會



這次的聚會下著大雨,即便如此大家還是風雨無阻地來前來參與!


這次的流水帳系列心得文,來的比較慢一點   =口=
因為恰逢公司搬家 與工作上的撞牆期 ... Orz

對於 The Manx 這幾個月以來的協助再次表達感謝!

#本次聚會照片、投影片皆可至 Taipei.py 的 Meetup 社群 下載



Talk 1: Recoverable PDB

講者為在  The Manx 工作的果凍,是從高中就開始使用 Python 的大大
此議題超級有趣!竟然有人在翻 pdb 的 source code ,而且還講解給大家聽,這實在太棒了!
身為一個也是習慣使用 pdb 方式來除錯的人,此演講內容相當具有參考性

這次演講最可惜的地方是由於設備頻頻出問題,使得過程經常被中斷
可能會使聽眾較難集中注意力 ... Orz
補充:其實我平常 debug 用的 tool 是 pdb++
他除了相容於 pdb 以外,還支援語法上色、自動補全、以及一些額外的功能
相當推薦一試! (額外一提,我使用 bottle 是從不開 debug mode 的!) 


Talk 2: NLTK

講者為  Rueshyna ,帥氣的正妹講者一名

此議題我個人很感興趣,因為目前執行的專案接下來極有可能要去做 text mining
於是就當作吃大補丸般的認真聽講了(握拳)

此演講是有 錄影 的,有興趣者可以參考之。

演講時 demo 的 data source 是來自 stackoverflow 的標題
所以講者也得出了一些有趣的結論 XDDDDD
(有興趣的朋友請參考影片吧!我不能亂爆雷啊 !)



閃電秀


分別由 Kilik 與 Keith 帶來 RunSnakeRun 及 Ipython Notebook 的介紹
前者可以圖形化 profile 後的結果,讓人一目了然的了解程式慢在哪裡
後者則為一便捷的 web 介面,可用來分享程式碼,及讓人 Try 程式碼!


這次聚會最後的重點,就是與一群志同道合的朋友一同討論 PyLadies 的未來(這好像不是我們這群 Py豬哥該討論的事情??)

本次聚會除了認領到一個在趨勢當研替的強者我學弟以外,也初次遇到 PyConTW 註冊組的老大 jack ,趕緊向他拜碼頭一下!聚會時,每次遇到從新竹遠道而來的 CCC (這次還有另一位朋友),就覺得非常的熱血 。抱持著這個想法的同時,我所在的公司已於近日從台北搬遷到台南了,所以之後 Taipei.py 的聚會我可能會較少出現吧!但我也希望改天如果出現的時候,能讓人也會對 Python 的社群有熱血感 XD ... 無論如何,秉持著取之於社群回饋於社群的想法,之後我就在台南嘗試組織類似的聚會吧!(就叫做 Tainan.py 吧!)


2013年3月29日 星期五

活動:Taipei.py 2013 3 月聚會

聚會結束後,走在路上,看到一台機車的安全帽長這樣 !!(Keith 的)



這次由 Tim 發起了「入場先收 50 塊,稍稍補貼一下茶水費」的活動
對於 The Manx 同時提供「人力、場地、器材、餐點」,只能說感謝了 Orz …

#本次聚會照片、投影片皆可至 Taipei.py 的 Meetup 社群 下載



Talk 1: Scrapy - 網路爬蟲框架

講者為在 Tagtoo 工作的 Theon 學長
演講專業而結合範例,讓人能清晰的了解到 Scrapy 此框架的威力
如果熟 XPath 的話,大概真的參數填一填,實作上不用五分鐘就可以寫出爬蟲了!
由於我前陣子有寫過爬 Ptt 的機器人,去擷取備份文章
對比於自己寫的 糟糕 程式,我馬上就能感受到了此一框架的優良架構
雖然我為 XPath 苦手,不過我想現在的瀏覽器都有相關的工具可供協助找到 XPath
之後若有機會,值得一試
另外,對於小型的抓網頁,讀取特定數值的程式
如丟關鍵字給 google,然後抓出搜尋結果的連結 … 這樣的應用
我蠻推薦使用 pyquery 來處理問題
直接使用:d = pq(url='http://google.com/')
接下來就可以使用類似 jquery 的方式存取 html 元素了:d("#hello") …

Talk 2: 先不談 Django,你聽過 Bottle 嗎?

講者 竟然 是我 XD ... 因為沒有辦法自己幫自己的演講給心得文
那我來檢討一下演講準備過程,與附上補充資料
因為近日專案極忙,這次的演講,我一直拖到演講前兩小時才把投影片做完
對我而言有許多第一次:
  • 第一次用 iPad 的 Keynote 做投影片
  • 第一次用 iPad + 轉接線 投影到螢幕
  • 碩論口試後第一次公開演講(當兵的時候倒是主持過很多次莒光園地 …
  • 第一次在社群中分享自己的經驗
我原本自以為可以用閃電秀的密度,快速的用 15 分鐘把該講的都講清楚
但是做出來投影片的品質太差,又沒有演練過 ... 所以就變成了冗長的碎碎念亂講 … 囧rz
對於這一點,我正在深刻的反省中 …

另外,使用 iPad 製作起來的過程雖然算流暢
但是在投影片內要插入超連結,頗有困難,且輸出成 ppt 或 pdf 以後,格式都容易跑掉
之後得多加注意此問題
這次來不及測試 remote 遙控投影片的功能,小可惜
不然就可以帥氣的走來走去了 …



會後補充:

再度推薦一下 gevent 社群的文件:Gevent Tutorial
值得一讀,讀了以後就會發現,在一般的 Python web framework 中
比較難以實作的 Comet 之類的功能,都能透過 gevent 輕易地達成

我記得 Appier 的朋友有問我 Bottle + gevent 能不能夠做效能調教?
(話說,您已經是此搭配的成功案例了:5000 qps …跪求 Bottle 進階演講)
雖然我不知道怎麼做,但我之前查資料時
有看到過 Douban 釋出與 Python 相關的投影片,或許仍可供參考(2011年的):



補充一下,對於 bottle 要提供 http auth basic 的話,可以這樣做:
def check_user(usr, pwd):
    acc_pw = { "user1" : "pw1", "user2" : "pw2" }
    return True if usr in acc_pw and pwd == acc_pw[usr] else False

@bottle.get('/admin/')
@bottle.auth_basic(check_user)
def test():
    pass
當然, auth_basic 的參數要直接塞 lambda 也是 OK 的
但是不建議用這個當會員系統啊 XDDDD

最後,至於為什麼我講的是 Bottle、用的是 Pyramid、大多數情況推薦的卻是 Flask 
這個傷心的問題就不要再問我了 囧rz  


PS. 這次演講後與許多朋友交換名片,聊: Web 框架、Testing、用數學變魔術的經驗 … 真的有 Level Up 的感覺!
您若也想來個常規或是閃電秀的演講,可以先加入 Taipei.py 的社群,然後直接找 Tim, Keith (或我)報名!