• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
KSDG Python and MongoDB for web
 

KSDG Python and MongoDB for web

on

  • 3,915 views

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

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

Statistics

Views

Total Views
3,915
Views on SlideShare
1,811
Embed Views
2,104

Actions

Likes
6
Downloads
65
Comments
0

13 Embeds 2,104

http://blog.toomore.net 2021
http://u9oenjoh1oarskm3mericjpa6gfq12lv-a-sites-opensocial.googleusercontent.com 33
http://1010761668539906800_399600664ac20c5e3a01b08ff8db31285f749c64.blogspot.com 14
http://www.plurk.com 9
http://feeds.feedburner.com 8
https://twitter.com 7
http://cloud.feedly.com 3
http://reader.aol.com 3
http://webcache.googleusercontent.com 2
https://twimg0-a.akamaihd.net 1
http://digg.com 1
http://feedproxy.google.com 1
http://feedly.com 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

CC Attribution License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    KSDG Python and MongoDB for web KSDG Python and MongoDB for web Presentation Transcript

    • Python + MongoDB for Web 2012/10/04 KSDG Toomore影像紀錄區pi.isuphoto.org
    • 自我介紹● 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
    • Agenda● 影像紀錄區 ● 製作內容 – 2008 – Python ● PHP + MySQL + – Flask Apache – MongoDB – 2012 – Twitter-bootstrap ● Python + MongoDB + Nginx – Amazon S3 、 SES 影像紀錄區 pi.isuphoto.org 3/70
    • 2008影像紀錄區pi.isuphoto.org 4/70
    • 影像紀錄區 當時的版面pi.isuphoto.org 5/70
    • 影像紀錄區 當時的地圖定位pi.isuphoto.org 6/70
    • 影像紀錄區 當時的 Google Earth 定位pi.isuphoto.org 7/70
    • 影像紀錄區 全台灣的地圖作品,很壯觀。pi.isuphoto.org 8/70
    • 影像紀錄區 影像足跡,只有文字定位資訊,分享景點。pi.isuphoto.org 9/70
    • 影像紀錄區 後端:定位介面pi.isuphoto.org 10/70
    • 影像紀錄區 多國語系 正體→簡體,英文→日、韓pi.isuphoto.org 11/70
    • 影像紀錄區 使用者管理頁面pi.isuphoto.org 12/70
    • 2012影像紀錄區pi.isuphoto.org 13/70
    • 影像紀錄區pi.isuphoto.org 14/70
    • ● 使用者功能選單 – 使用者頭像 – 觀看留言 – 積分狀況 – 設定 – 與 Facebook 連結 – 與 twitter 連結 – 登出影像紀錄區pi.isuphoto.org 15/70
    • RSS 資訊(包含 geo location 資訊) 影像紀錄區 pi.isuphoto.org 16/70
    • 地圖定位, KML 檔下載 影像紀錄區 pi.isuphoto.org 17/70
    • ● EXIF – 讀取圖片資訊 – 光圈 – 快門 – ISO – 拍攝日期 – ...影像紀錄區pi.isuphoto.org 18/70
    • ● 作品授權 – C 版權所有 – CC 部份授權 – CC0 放棄版權影像紀錄區pi.isuphoto.org 19/70
    • ● 喜愛的作品 – 使用者對於其他人的作 品喜愛收藏。影像紀錄區pi.isuphoto.org 20/70
    • ● 上傳介面 – 上傳限制 ● Jpg 、 10MBs – 分類 – 作品內容 – 自訂標籤 Tag – 作品授權 ● C 、 CC 、 CC0影像紀錄區pi.isuphoto.org 21/70
    • ● 作品分類 – 風景:天空 / 大海 / 森林 – 人像: Model – 黑白:黑與白 – 膠捲:底片 /LOMO – 創作:設計 / 圖文 / 手繪 – 文化:人文 / 地方 / 新聞 – 動物:貓 / 狗 – 植物:花 / 草 / 樹木 – 美食:食物 / 擺盤影像紀錄區pi.isuphoto.org 22/70
    • ● 作品集 影像紀錄區 pi.isuphoto.org 23/70
    • Python影像紀錄區pi.isuphoto.org 25/70
    • Python● 初接觸 Python – 2009 年為了使用 Google AppEngine 學的。 – 簡單易學 ● 《 Python 學習手冊》 – 程式碼可讀性高 ● 強制縮排 – Script language ● 簡單腳本處理 ● 實驗小程式 影像紀錄區 pi.isuphoto.org 26/70
    • Python for web● Web Framework – Django – Flask – … (參考: http://wiki.python.org/moin/WebFrameworks)● Platform – Google AppEngine – Heroku 影像紀錄區 pi.isuphoto.org 27/70
    • Flask● Flask – Microframework 輕量級框架 – 整合 Werkzeug 、 Jinja2 兩個套件 ● Werkzeug ( WSGI utility library ) ● Jinja2 ( template engine ) 影像紀錄區 pi.isuphoto.org 28/70
    • 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
    • Flask● Flask – 實作 RESTful URL Ref. ● POST http://pi.isuphoto.org/post/4 影像紀錄區 pi.isuphoto.org 30/70
    • 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
    • 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
    • uWSGI ● [uWSGI] [URL] – 處理與 Nginx 溝通 – 效能 [Ref.] ● [uWSGI] Top3理由很弱,只因為效能好… 影像紀錄區 pi.isuphoto.org 33/70
    • 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
    • nginx● [nginx] .conf – 4 核心,讓大家都有事情做: ● worker_processes 4; ● worker_cpu_affinity 0001 0010 0100 1000; – Gzip on 影像紀錄區 pi.isuphoto.org 35/70
    • MongoDB影像紀錄區pi.isuphoto.org 36/70
    • 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
    • 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
    • MongoDB● 選擇 database – > show dbs – > use test● 選擇 collection – > db.getCollectionNames() – [ksdg, system.indexes, ...]● 列出所有資料 – > db.ksdg.find() – {...} 影像紀錄區 pi.isuphoto.org 39/70
    • 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
    • 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
    • MongoDB Index● .explain() 檢查 find 的運作 由 explain 觀察 scan 資料的行為,未建 立 Index 時是掃描所有資料。 影像紀錄區 pi.isuphoto.org 42/70
    • MongoDB Index● Index [Ref.]: .ensureIndex() 由 explain 觀察 scan 資料的行為,發現 以 BtreeCursor 方式 scan 資料。 影像紀錄區 pi.isuphoto.org 43/70
    • MongoDB Index ● Index [Ref.]: .stats() – Stats(1024) : byte → KB更多參考資料:http://www.mongodb.org/display/DOCS/Monitoring+and+Diagnostics 影像紀錄區 pi.isuphoto.org 44/70
    • 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
    • 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
    • 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
    • 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
    • twitter-bootstrap影像紀錄區pi.isuphoto.org 49/70
    • twitter-bootstrap影像紀錄區pi.isuphoto.org 50/70
    • 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
    • 其他套件影像紀錄區pi.isuphoto.org 52/70
    • 其他套件● 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
    • 其他套件● 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
    • 架構圖 SES S3 AmasonScript :電子報、郵件通知 Social Network : Facebook 、 twitter Slaves tb* 分享照片 Master Flask uWSGI nginxmongoDB Pymongo python Linode 影像紀錄區 - tb* : twitter-bootstrap pi.isuphoto.org 55/70
    • 影像紀錄區pi.isuphoto.org 56/70
    • 影像紀錄區 現況與未來影像紀錄區pi.isuphoto.org 57/70
    • 緣起● 影像紀錄區 在 義守大學攝影社 (2006) 是一個讓 社員分享作品與切磋攝影技術的平台。 !● 當時偷偷架在財金系主機,與系網頁共享資源。● 2009 年主機被雷劈,資料有救回來,但偷放在 系上主機的事情也被發現。之後也找不到主機就 一直擱置到現在。● 到 2012 年 5 月重新製作上線… 影像紀錄區 pi.isuphoto.org 58/70
    • 現況● 會員 – 第一批使用者:歷屆攝影社社員。 – 開放申請:逐步審核(有 攝影作品) – 未來:找攝影團體推薦平台。● 實際參考數據 (2012/5 ~ 2012/10) – 使用 / 註冊: 40 / 59 – 作品數: 648 – 作品瀏覽人次: 31,434 – 網站停留時間: 00:06:16 – 跳出率: 51.85% 影像紀錄區 pi.isuphoto.org 59/70
    • 實驗功能 明信片● 近期實驗功能:印製明信片 影像紀錄區 pi.isuphoto.org 60/70
    • 實驗功能 明信片● 明信片 – 作品實體輸出的可能模式 ● 攝影師自己下單印製。 ● 攝影師設定作品單價,販售明信片。扣除印製成本與抽 成,盈餘歸攝影師所有。 ● 或是直接與 hypo 、點點印 接資訊流,將攝影師導引過去 下單製作。 – 小結:獲利空間可能不大,但可成為一個附加服務。 影像紀錄區 pi.isuphoto.org 61/70
    • 實驗功能 攝影履歷● 近期實驗功能:攝影履歷 [URL.] 影像紀錄區 pi.isuphoto.org 62/70
    • 實驗功能 攝影履歷● 攝影履歷 – 提供有接案的攝影師一個接洽的頁面。 ● 拍攝風格 ● 攝影器材 ● 作品案例 – 小結:希望扮演媒合的角色,讓有攝影拍攝需求的人 到 影像紀錄區 尋找屬意風格的攝影師。 影像紀錄區 pi.isuphoto.org 63/70
    • 實驗功能 粉絲專頁● 近期實驗功能:粉絲專頁 [URL.] 影像紀錄區 pi.isuphoto.org 64/70
    • 實驗功能 粉絲專頁● 粉絲專頁 – 主要作為網站宣傳 或 與非會員互動的地方。 ● 非會員:尚未成為影像紀錄區攝影師,但希望持續關注影 像紀錄區。 – 功能需求發現區。 ● 例如:(右圖) – 不定時發文 ● 特色作品介紹 ● 攝影師介紹 ● 攝影活動、新聞 影像紀錄區 pi.isuphoto.org 65/70
    • 夥伴尋覓● 需要的人員 – CEO *** ● 需要一個可以帶領 / 指引我們方向或是建議的大大。 – 行銷公關 *** ● 目標客群:攝影團體 ● 外拍活動、網站說明活動 – 技術人員 * ● Python... 影像紀錄區 pi.isuphoto.org 66/70
    • 大致上是這樣… (突然變謙虛)影像紀錄區pi.isuphoto.org 68/70
    • 最後再說一個小故事影像紀錄區 我也拍過 yumi , 2008 年攝影作品金牌 [IMG.]pi.isuphoto.org 69/70
    • Thanks~影像紀錄區pi.isuphoto.org 70/70