Your SlideShare is downloading. ×
KSDG Python and MongoDB for web
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

KSDG Python and MongoDB for web

3,797
views

Published on

影像紀錄區製作過程與未來經營方向 …

影像紀錄區製作過程與未來經營方向
http://pi.isuphoto.org/

Published in: Technology

0 Comments
7 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
3,797
On Slideshare
0
From Embeds
0
Number of Embeds
9
Actions
Shares
0
Downloads
68
Comments
0
Likes
7
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Python + MongoDB for Web 2012/10/04 KSDG Toomore影像紀錄區pi.isuphoto.org
  • 2. 自我介紹● Toomore [to●mor] [Blog.] – 義守大學財務金融系 研究所肄業 – Python (2009~) – 社群 ● MozTW[YouTube] / COSCUP2012 行政組 [YouTube] – 作品 ● goristock (2009) - goristock 台灣股市分析機器人 [YouTube] – Python + Google AppEngine http://goristock.appspot.com/ ● grs (2012) – 台灣上市股票價格擷取含即時盤 [YouTube] – grs PyPI http://pypi.python.org/pypi/grs – grs web http://grs.toomore.net/ 影像紀錄區 pi.isuphoto.org
  • 3. Agenda● 影像紀錄區 ● 製作內容 – 2008 – Python ● PHP + MySQL + – Flask Apache – MongoDB – 2012 – Twitter-bootstrap ● Python + MongoDB + Nginx – Amazon S3 、 SES 影像紀錄區 pi.isuphoto.org 3/70
  • 4. 2008影像紀錄區pi.isuphoto.org 4/70
  • 5. 影像紀錄區 當時的版面pi.isuphoto.org 5/70
  • 6. 影像紀錄區 當時的地圖定位pi.isuphoto.org 6/70
  • 7. 影像紀錄區 當時的 Google Earth 定位pi.isuphoto.org 7/70
  • 8. 影像紀錄區 全台灣的地圖作品,很壯觀。pi.isuphoto.org 8/70
  • 9. 影像紀錄區 影像足跡,只有文字定位資訊,分享景點。pi.isuphoto.org 9/70
  • 10. 影像紀錄區 後端:定位介面pi.isuphoto.org 10/70
  • 11. 影像紀錄區 多國語系 正體→簡體,英文→日、韓pi.isuphoto.org 11/70
  • 12. 影像紀錄區 使用者管理頁面pi.isuphoto.org 12/70
  • 13. 2012影像紀錄區pi.isuphoto.org 13/70
  • 14. 影像紀錄區pi.isuphoto.org 14/70
  • 15. ● 使用者功能選單 – 使用者頭像 – 觀看留言 – 積分狀況 – 設定 – 與 Facebook 連結 – 與 twitter 連結 – 登出影像紀錄區pi.isuphoto.org 15/70
  • 16. RSS 資訊(包含 geo location 資訊) 影像紀錄區 pi.isuphoto.org 16/70
  • 17. 地圖定位, KML 檔下載 影像紀錄區 pi.isuphoto.org 17/70
  • 18. ● EXIF – 讀取圖片資訊 – 光圈 – 快門 – ISO – 拍攝日期 – ...影像紀錄區pi.isuphoto.org 18/70
  • 19. ● 作品授權 – C 版權所有 – CC 部份授權 – CC0 放棄版權影像紀錄區pi.isuphoto.org 19/70
  • 20. ● 喜愛的作品 – 使用者對於其他人的作 品喜愛收藏。影像紀錄區pi.isuphoto.org 20/70
  • 21. ● 上傳介面 – 上傳限制 ● Jpg 、 10MBs – 分類 – 作品內容 – 自訂標籤 Tag – 作品授權 ● C 、 CC 、 CC0影像紀錄區pi.isuphoto.org 21/70
  • 22. ● 作品分類 – 風景:天空 / 大海 / 森林 – 人像: Model – 黑白:黑與白 – 膠捲:底片 /LOMO – 創作:設計 / 圖文 / 手繪 – 文化:人文 / 地方 / 新聞 – 動物:貓 / 狗 – 植物:花 / 草 / 樹木 – 美食:食物 / 擺盤影像紀錄區pi.isuphoto.org 22/70
  • 23. ● 作品集 影像紀錄區 pi.isuphoto.org 23/70
  • 24. Python影像紀錄區pi.isuphoto.org 25/70
  • 25. Python● 初接觸 Python – 2009 年為了使用 Google AppEngine 學的。 – 簡單易學 ● 《 Python 學習手冊》 – 程式碼可讀性高 ● 強制縮排 – Script language ● 簡單腳本處理 ● 實驗小程式 影像紀錄區 pi.isuphoto.org 26/70
  • 26. Python for web● Web Framework – Django – Flask – … (參考: http://wiki.python.org/moin/WebFrameworks)● Platform – Google AppEngine – Heroku 影像紀錄區 pi.isuphoto.org 27/70
  • 27. Flask● Flask – Microframework 輕量級框架 – 整合 Werkzeug 、 Jinja2 兩個套件 ● Werkzeug ( WSGI utility library ) ● Jinja2 ( template engine ) 影像紀錄區 pi.isuphoto.org 28/70
  • 28. Flask● Flask – 實作 RESTful URL Ref. ● REST : Roy Fielding 2000 提出的一個架構風格。 – 『設計良好的網路應用表現為一系列的網頁,這些網頁可以看作 的虛擬的狀態機,用戶選擇這些連結導致下一網頁傳輸到用戶端 展現給使用的人,而這正代表了狀態的轉變。』 - Ref. ● RESTful : – GET http://pi.isuphoto.org/post/4 – GET http://pi.isuphoto.org/post/4/exif – POST http://pi.isuphoto.org/post/4/delete – GET http://pi.isuphoto.org/toomore – GET http://pi.isuphoto.org/toomore/shutter ● PUT/DELETE 在 HTML5 將被移除。 影像紀錄區 pi.isuphoto.org 29/70
  • 29. Flask● Flask – 實作 RESTful URL Ref. ● POST http://pi.isuphoto.org/post/4 影像紀錄區 pi.isuphoto.org 30/70
  • 30. Flask● Flask 其他資源 – Flask extensions [URL] ● 擴充套件 ● Flask-Cache ● Flask-Gravatar – Flask snippets [URL] ● 使用技巧 tips ● SSL for particular views [URL] ● Simple Authorization [URL] 影像紀錄區 pi.isuphoto.org 31/70
  • 31. Flask● Flask 支援 WSGI – WSGI ? ● Web 伺服器網關介面( Python Web Server Gateway Interface , WSGI ) ● Python 定義一個伺服器與網頁框架簡單的溝通介面。 ● PEP 3333 [URL] – Werkzeug ( WSGI utility library ) ● 範例: python ./app.py 影像紀錄區 pi.isuphoto.org 32/70
  • 32. uWSGI ● [uWSGI] [URL] – 處理與 Nginx 溝通 – 效能 [Ref.] ● [uWSGI] Top3理由很弱,只因為效能好… 影像紀錄區 pi.isuphoto.org 33/70
  • 33. uWSGI→nginx● [uWSGI] – uwsgi -s /Xweb/pi/pi.sock -d /var/log/uwsgi_pi.log --pythonpath /web/pi -w app:app● [nginx] – server{ – listen 80; – server_name pi.isuphoto.org; – location / { – Include uwsgi_params; uwsgi_pass unix: /Xweb/pi/pi.sock;} 影像紀錄區 pi.isuphoto.org 34/70
  • 34. nginx● [nginx] .conf – 4 核心,讓大家都有事情做: ● worker_processes 4; ● worker_cpu_affinity 0001 0010 0100 1000; – Gzip on 影像紀錄區 pi.isuphoto.org 35/70
  • 35. MongoDB影像紀錄區pi.isuphoto.org 36/70
  • 36. MongoDB● MongoDB – NoSQL ● 不同於傳統的關係式資料庫 – Memory-mapped ● 32bit 2G limit. → 64bit – Schema free ● {name: toomore, age: 27} ● {name: toomuch, loc: Taiwan, tel: 0800123123} 影像紀錄區 pi.isuphoto.org 37/70
  • 37. MongoDB MySQL 與 MongoDB 對應名稱 MySQL MongoDB database database table collection row document更多參考資料:http://www.mongodb.org/display/DOCS/SQL+to+Mongo+Mapping+Chart 影像紀錄區 pi.isuphoto.org 38/70
  • 38. MongoDB● 選擇 database – > show dbs – > use test● 選擇 collection – > db.getCollectionNames() – [ksdg, system.indexes, ...]● 列出所有資料 – > db.ksdg.find() – {...} 影像紀錄區 pi.isuphoto.org 39/70
  • 39. MongoDB● > u = {name: toomore, loc: kaohsiung}● 新增 – > db.ksdg.save(u)● 修改 / 更新 – > db.ksdg.update(u, {$set: {loc: TW}})● 刪除 – > db.ksdg.remove({name: toomore})● 尋找 – > db.ksdg.find({name: toomore}) 影像紀錄區 pi.isuphoto.org 40/70
  • 40. MongoDB ● ObjectId [Ref.] – > db.ksdg.find() – – ● 一組 16 進位的字串 – 兩兩一組python– >>> from datetime import datetime 1349256546 – >>> datetime.fromtimestamp(int(506c0562, 16)) – datetime.datetime(2012, 10, 3, 17, 29, 6) 所以理論上來說,不需要額外設定一欄位存放時間 紀錄,可以從 ObjectId 解析時間。 影像紀錄區 pi.isuphoto.org 41/70
  • 41. MongoDB Index● .explain() 檢查 find 的運作 由 explain 觀察 scan 資料的行為,未建 立 Index 時是掃描所有資料。 影像紀錄區 pi.isuphoto.org 42/70
  • 42. MongoDB Index● Index [Ref.]: .ensureIndex() 由 explain 觀察 scan 資料的行為,發現 以 BtreeCursor 方式 scan 資料。 影像紀錄區 pi.isuphoto.org 43/70
  • 43. MongoDB Index ● Index [Ref.]: .stats() – Stats(1024) : byte → KB更多參考資料:http://www.mongodb.org/display/DOCS/Monitoring+and+Diagnostics 影像紀錄區 pi.isuphoto.org 44/70
  • 44. MongoDB GeoIndex● Geospatial Indexing [Ref.] : – 地理座標索引 ● { loc : [ 50 , 30 ] } //SUGGESTED OPTION ● { loc : { lon : 40.739037, lat: 73.992964 } } – 建立索引 ● db.places.ensureIndex( { loc : "2d" } ) – 搜尋 ● db.places.find( { loc : [50,50] } ) ● db.places.find( { loc : { $near : [50,50] } } ) ● db.places.find( { loc : { $near : [50,50],$maxDistance : 5}}) 影像紀錄區 用在 作品定位 欄位的資料為 GeoIndex 格式。 影像紀錄區 pi.isuphoto.org 45/70
  • 45. MongoDB TTL● TTL ( Time to live ) [URL.] – 2.2 新功能 – 在 ensureIndex 新增 expireAfterSeconds 參數 – 每分鐘 mongod 檢查一次,指定的欄位必須為時間 屬性的 BSON 資料格式。● 範例: 1800 秒後刪除 – db.ksdg.ensureIndex({date: 1}, {expireAfterSeconds: 1800}) – db.ksdg.save({user: toomore, date: New Date()}) 影像紀錄區 用在 忘記密碼 時取得有時效性 的 Token. 讓使用者限時內重新設定密碼。 影像紀錄區 pi.isuphoto.org 46/70
  • 46. MongoDB Master-Slaves● 主從式架構 – 設定請參考 ● http://www.mongodb.org/display/DOCS/Master+Slave● 影像紀錄區 – 使用 1 Master (R/W) + 2 Slaves (R) – 有時 M/S 會來不及同步,重要的資料會強制指向 Master 存 / 取資料。 Master Slaves Slaves MongoDB 影像紀錄區 pi.isuphoto.org 47/70
  • 47. MongoDB 參考資料● TechTalk@TW: 專訪 Episode 4 – MongoDB: – FlipTop 採用 MongoDB 的經驗、 Amazon EC2 、 sharding 。 – http://www.techtalk.tw/2012/02/episode-4- mongodb.html● MyNoSQL – 關於 NoSQL 的文章蒐集 – http://nosql.mypopescu.com/tagged/mongodb 影像紀錄區 pi.isuphoto.org 48/70
  • 48. twitter-bootstrap影像紀錄區pi.isuphoto.org 49/70
  • 49. twitter-bootstrap影像紀錄區pi.isuphoto.org 50/70
  • 50. twitter-bootstrap● Front-end framework – 方便快速建立前端網頁樣式。 – Responsive layout – twitter 風格的 CSS 、 javascript● 缺點:如果不客製化調整,會到處撞衫。 – 建立客製化的 LESS 檔,再用 Node.js 編譯新的 twitter- bootstrap – LESS 設定參考: http://twitter.github.com/bootstrap/extend.html – 或 線上自訂樣式: http://twitter.github.com/bootstrap/customize.html 影像紀錄區 pi.isuphoto.org 51/70
  • 51. 其他套件影像紀錄區pi.isuphoto.org 52/70
  • 52. 其他套件● Python 來不及詳細介紹,但他們都是默默工 作的套件。 – PIL :處理圖片縮圖。 – pyexiv2 :解析圖片 EXIF 資訊。 – boto :與 Amazon AWS 溝通。 ● S3 :上傳圖片 ● SES :傳送郵件通知、電子報發送…。 – Celery : task 排程。 – pymongo :驅動 MongoDB 。 – requests :處理 Facebook 、 twitter API 。 – fabric : SSH / Deploy 影像紀錄區 pi.isuphoto.org 53/70
  • 53. 其他套件● Front-end web – YUI ● compress both JavaScript and CSS files ● http://yuilibrary.com/download/yuicompressor/ – Font Awesome ● iconic font 字型圖示,放大縮小不會變形 ● http://fortawesome.github.com/Font-Awesome/ 影像紀錄區 pi.isuphoto.org 54/70
  • 54. 架構圖 SES S3 AmasonScript :電子報、郵件通知 Social Network : Facebook 、 twitter Slaves tb* 分享照片 Master Flask uWSGI nginxmongoDB Pymongo python Linode 影像紀錄區 - tb* : twitter-bootstrap pi.isuphoto.org 55/70
  • 55. 影像紀錄區pi.isuphoto.org 56/70
  • 56. 影像紀錄區 現況與未來影像紀錄區pi.isuphoto.org 57/70
  • 57. 緣起● 影像紀錄區 在 義守大學攝影社 (2006) 是一個讓 社員分享作品與切磋攝影技術的平台。 !● 當時偷偷架在財金系主機,與系網頁共享資源。● 2009 年主機被雷劈,資料有救回來,但偷放在 系上主機的事情也被發現。之後也找不到主機就 一直擱置到現在。● 到 2012 年 5 月重新製作上線… 影像紀錄區 pi.isuphoto.org 58/70
  • 58. 現況● 會員 – 第一批使用者:歷屆攝影社社員。 – 開放申請:逐步審核(有 攝影作品) – 未來:找攝影團體推薦平台。● 實際參考數據 (2012/5 ~ 2012/10) – 使用 / 註冊: 40 / 59 – 作品數: 648 – 作品瀏覽人次: 31,434 – 網站停留時間: 00:06:16 – 跳出率: 51.85% 影像紀錄區 pi.isuphoto.org 59/70
  • 59. 實驗功能 明信片● 近期實驗功能:印製明信片 影像紀錄區 pi.isuphoto.org 60/70
  • 60. 實驗功能 明信片● 明信片 – 作品實體輸出的可能模式 ● 攝影師自己下單印製。 ● 攝影師設定作品單價,販售明信片。扣除印製成本與抽 成,盈餘歸攝影師所有。 ● 或是直接與 hypo 、點點印 接資訊流,將攝影師導引過去 下單製作。 – 小結:獲利空間可能不大,但可成為一個附加服務。 影像紀錄區 pi.isuphoto.org 61/70
  • 61. 實驗功能 攝影履歷● 近期實驗功能:攝影履歷 [URL.] 影像紀錄區 pi.isuphoto.org 62/70
  • 62. 實驗功能 攝影履歷● 攝影履歷 – 提供有接案的攝影師一個接洽的頁面。 ● 拍攝風格 ● 攝影器材 ● 作品案例 – 小結:希望扮演媒合的角色,讓有攝影拍攝需求的人 到 影像紀錄區 尋找屬意風格的攝影師。 影像紀錄區 pi.isuphoto.org 63/70
  • 63. 實驗功能 粉絲專頁● 近期實驗功能:粉絲專頁 [URL.] 影像紀錄區 pi.isuphoto.org 64/70
  • 64. 實驗功能 粉絲專頁● 粉絲專頁 – 主要作為網站宣傳 或 與非會員互動的地方。 ● 非會員:尚未成為影像紀錄區攝影師,但希望持續關注影 像紀錄區。 – 功能需求發現區。 ● 例如:(右圖) – 不定時發文 ● 特色作品介紹 ● 攝影師介紹 ● 攝影活動、新聞 影像紀錄區 pi.isuphoto.org 65/70
  • 65. 夥伴尋覓● 需要的人員 – CEO *** ● 需要一個可以帶領 / 指引我們方向或是建議的大大。 – 行銷公關 *** ● 目標客群:攝影團體 ● 外拍活動、網站說明活動 – 技術人員 * ● Python... 影像紀錄區 pi.isuphoto.org 66/70
  • 66. 大致上是這樣… (突然變謙虛)影像紀錄區pi.isuphoto.org 68/70
  • 67. 最後再說一個小故事影像紀錄區 我也拍過 yumi , 2008 年攝影作品金牌 [IMG.]pi.isuphoto.org 69/70
  • 68. Thanks~影像紀錄區pi.isuphoto.org 70/70

×