SlideShare a Scribd company logo
1 of 68
Download to read offline
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/Moni
toring+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

          Amason



Script :
電子報、郵件通知

                                               Social Network :
                                               Facebook 、 twitter


 Slaves                                             tb*                     分享照片

 Master                                         Flask     uWSGI     nginx

mongoDB      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

More Related Content

Viewers also liked

WCIT 2010 Dov Winer
WCIT 2010  Dov WinerWCIT 2010  Dov Winer
WCIT 2010 Dov WinerDov Winer
 
ginaisraelScientix
ginaisraelScientixginaisraelScientix
ginaisraelScientixDov Winer
 
Wikis and Blogs: When, Why, and How to Use Them
Wikis and Blogs: When, Why, and How to Use ThemWikis and Blogs: When, Why, and How to Use Them
Wikis and Blogs: When, Why, and How to Use ThemLeslieOflahavan
 
030714 Vaadat Internet Jafi Pedagogia
030714 Vaadat Internet Jafi Pedagogia030714 Vaadat Internet Jafi Pedagogia
030714 Vaadat Internet Jafi PedagogiaDov Winer
 
Samsung mp3 YP-S3
Samsung mp3 YP-S3Samsung mp3 YP-S3
Samsung mp3 YP-S3julia135
 
061112 Eva Minerva2006 Final
061112 Eva Minerva2006 Final061112 Eva Minerva2006 Final
061112 Eva Minerva2006 FinalDov Winer
 
Semibase Portfolio
Semibase PortfolioSemibase Portfolio
Semibase Portfoliosemibase
 
Inverted Image
Inverted ImageInverted Image
Inverted Imageyangbqada
 
Tomorrow's Web and Future Technologies - WDC2011
Tomorrow's Web and Future Technologies - WDC2011Tomorrow's Web and Future Technologies - WDC2011
Tomorrow's Web and Future Technologies - WDC2011Robin Hawkes
 
ZinZin - Para Pengunjung Misterius
ZinZin - Para Pengunjung MisteriusZinZin - Para Pengunjung Misterius
ZinZin - Para Pengunjung MisteriusNur Agustinus
 
Kitab Pertama tentang Masa Kecil Yesus Kristus
Kitab Pertama tentang Masa Kecil Yesus KristusKitab Pertama tentang Masa Kecil Yesus Kristus
Kitab Pertama tentang Masa Kecil Yesus KristusNur Agustinus
 
Calculating building heights using a phone camera
Calculating building heights using a phone cameraCalculating building heights using a phone camera
Calculating building heights using a phone cameraRobin Hawkes
 
Absolutely Cool Photos Ys
Absolutely Cool Photos YsAbsolutely Cool Photos Ys
Absolutely Cool Photos Ysyangbqada
 
Rawkets - A Massively Multiplayer HTML5 Game [Mozilla GameOn10]
Rawkets - A Massively Multiplayer HTML5 Game [Mozilla GameOn10]Rawkets - A Massively Multiplayer HTML5 Game [Mozilla GameOn10]
Rawkets - A Massively Multiplayer HTML5 Game [Mozilla GameOn10]Robin Hawkes
 
งานนำเสนอ1
งานนำเสนอ1งานนำเสนอ1
งานนำเสนอ1wannis
 

Viewers also liked (20)

Maths Presentation
Maths PresentationMaths Presentation
Maths Presentation
 
Pattern
PatternPattern
Pattern
 
WCIT 2010 Dov Winer
WCIT 2010  Dov WinerWCIT 2010  Dov Winer
WCIT 2010 Dov Winer
 
Majalah OMEGA
Majalah OMEGAMajalah OMEGA
Majalah OMEGA
 
Epos Gilgamesh
Epos Gilgamesh Epos Gilgamesh
Epos Gilgamesh
 
ginaisraelScientix
ginaisraelScientixginaisraelScientix
ginaisraelScientix
 
Wikis and Blogs: When, Why, and How to Use Them
Wikis and Blogs: When, Why, and How to Use ThemWikis and Blogs: When, Why, and How to Use Them
Wikis and Blogs: When, Why, and How to Use Them
 
030714 Vaadat Internet Jafi Pedagogia
030714 Vaadat Internet Jafi Pedagogia030714 Vaadat Internet Jafi Pedagogia
030714 Vaadat Internet Jafi Pedagogia
 
Samsung mp3 YP-S3
Samsung mp3 YP-S3Samsung mp3 YP-S3
Samsung mp3 YP-S3
 
Profile Lembaga
Profile LembagaProfile Lembaga
Profile Lembaga
 
061112 Eva Minerva2006 Final
061112 Eva Minerva2006 Final061112 Eva Minerva2006 Final
061112 Eva Minerva2006 Final
 
Semibase Portfolio
Semibase PortfolioSemibase Portfolio
Semibase Portfolio
 
Inverted Image
Inverted ImageInverted Image
Inverted Image
 
Tomorrow's Web and Future Technologies - WDC2011
Tomorrow's Web and Future Technologies - WDC2011Tomorrow's Web and Future Technologies - WDC2011
Tomorrow's Web and Future Technologies - WDC2011
 
ZinZin - Para Pengunjung Misterius
ZinZin - Para Pengunjung MisteriusZinZin - Para Pengunjung Misterius
ZinZin - Para Pengunjung Misterius
 
Kitab Pertama tentang Masa Kecil Yesus Kristus
Kitab Pertama tentang Masa Kecil Yesus KristusKitab Pertama tentang Masa Kecil Yesus Kristus
Kitab Pertama tentang Masa Kecil Yesus Kristus
 
Calculating building heights using a phone camera
Calculating building heights using a phone cameraCalculating building heights using a phone camera
Calculating building heights using a phone camera
 
Absolutely Cool Photos Ys
Absolutely Cool Photos YsAbsolutely Cool Photos Ys
Absolutely Cool Photos Ys
 
Rawkets - A Massively Multiplayer HTML5 Game [Mozilla GameOn10]
Rawkets - A Massively Multiplayer HTML5 Game [Mozilla GameOn10]Rawkets - A Massively Multiplayer HTML5 Game [Mozilla GameOn10]
Rawkets - A Massively Multiplayer HTML5 Game [Mozilla GameOn10]
 
งานนำเสนอ1
งานนำเสนอ1งานนำเสนอ1
งานนำเสนอ1
 

Similar to KSDG Python and MongoDB for web

模块加载策略 - 2012 SDCC, 北京
模块加载策略 - 2012 SDCC, 北京模块加载策略 - 2012 SDCC, 北京
模块加载策略 - 2012 SDCC, 北京Joseph Chiang
 
Using google appengine (2)
Using google appengine (2)Using google appengine (2)
Using google appengine (2)Wei Sun
 
Django入门
Django入门Django入门
Django入门oikomi
 
2012 php conf slide PIXNET 如何使用 php
2012 php conf slide   PIXNET 如何使用 php2012 php conf slide   PIXNET 如何使用 php
2012 php conf slide PIXNET 如何使用 phpronnywang_tw
 
Pyramid框架介绍
Pyramid框架介绍Pyramid框架介绍
Pyramid框架介绍panjunyong
 
Tornado开发实践
Tornado开发实践Tornado开发实践
Tornado开发实践ZY Zhang
 
Ryu Learning Guide
Ryu Learning GuideRyu Learning Guide
Ryu Learning Guide呈 李
 
Python meetup 1
Python meetup 1Python meetup 1
Python meetup 1Vic Yang
 
高雄和春資工系-Axure RP基礎課程
高雄和春資工系-Axure RP基礎課程高雄和春資工系-Axure RP基礎課程
高雄和春資工系-Axure RP基礎課程Souyi Yang
 
Using google appengine_1027
Using google appengine_1027Using google appengine_1027
Using google appengine_1027Wei Sun
 
HTML5 实战 WebApp 阅读应用– Shiu
HTML5 实战 WebApp 阅读应用– ShiuHTML5 实战 WebApp 阅读应用– Shiu
HTML5 实战 WebApp 阅读应用– ShiuJingchao Di
 
從雛形到設計-了解您的使用者在想什麼
從雛形到設計-了解您的使用者在想什麼從雛形到設計-了解您的使用者在想什麼
從雛形到設計-了解您的使用者在想什麼Souyi Yang
 
Node js实践
Node js实践Node js实践
Node js实践myzykj
 
HPX台南讀書會-Axure RP基礎課程
HPX台南讀書會-Axure RP基礎課程HPX台南讀書會-Axure RP基礎課程
HPX台南讀書會-Axure RP基礎課程Souyi Yang
 
Openshift by mtchang
Openshift by mtchangOpenshift by mtchang
Openshift by mtchangChang Mt
 
Linux network monitoring hands-on pratice
Linux network monitoring hands-on praticeLinux network monitoring hands-on pratice
Linux network monitoring hands-on praticeKenny (netman)
 
Python 于 webgame 的应用
Python 于 webgame 的应用Python 于 webgame 的应用
Python 于 webgame 的应用勇浩 赖
 
Using google appengine_final
Using google appengine_finalUsing google appengine_final
Using google appengine_finalWei Sun
 

Similar to KSDG Python and MongoDB for web (20)

How to setup mastodon in chinese
How to setup mastodon in chineseHow to setup mastodon in chinese
How to setup mastodon in chinese
 
Banquet 39
Banquet 39Banquet 39
Banquet 39
 
模块加载策略 - 2012 SDCC, 北京
模块加载策略 - 2012 SDCC, 北京模块加载策略 - 2012 SDCC, 北京
模块加载策略 - 2012 SDCC, 北京
 
Using google appengine (2)
Using google appengine (2)Using google appengine (2)
Using google appengine (2)
 
Django入门
Django入门Django入门
Django入门
 
2012 php conf slide PIXNET 如何使用 php
2012 php conf slide   PIXNET 如何使用 php2012 php conf slide   PIXNET 如何使用 php
2012 php conf slide PIXNET 如何使用 php
 
Pyramid框架介绍
Pyramid框架介绍Pyramid框架介绍
Pyramid框架介绍
 
Tornado开发实践
Tornado开发实践Tornado开发实践
Tornado开发实践
 
Ryu Learning Guide
Ryu Learning GuideRyu Learning Guide
Ryu Learning Guide
 
Python meetup 1
Python meetup 1Python meetup 1
Python meetup 1
 
高雄和春資工系-Axure RP基礎課程
高雄和春資工系-Axure RP基礎課程高雄和春資工系-Axure RP基礎課程
高雄和春資工系-Axure RP基礎課程
 
Using google appengine_1027
Using google appengine_1027Using google appengine_1027
Using google appengine_1027
 
HTML5 实战 WebApp 阅读应用– Shiu
HTML5 实战 WebApp 阅读应用– ShiuHTML5 实战 WebApp 阅读应用– Shiu
HTML5 实战 WebApp 阅读应用– Shiu
 
從雛形到設計-了解您的使用者在想什麼
從雛形到設計-了解您的使用者在想什麼從雛形到設計-了解您的使用者在想什麼
從雛形到設計-了解您的使用者在想什麼
 
Node js实践
Node js实践Node js实践
Node js实践
 
HPX台南讀書會-Axure RP基礎課程
HPX台南讀書會-Axure RP基礎課程HPX台南讀書會-Axure RP基礎課程
HPX台南讀書會-Axure RP基礎課程
 
Openshift by mtchang
Openshift by mtchangOpenshift by mtchang
Openshift by mtchang
 
Linux network monitoring hands-on pratice
Linux network monitoring hands-on praticeLinux network monitoring hands-on pratice
Linux network monitoring hands-on pratice
 
Python 于 webgame 的应用
Python 于 webgame 的应用Python 于 webgame 的应用
Python 于 webgame 的应用
 
Using google appengine_final
Using google appengine_finalUsing google appengine_final
Using google appengine_final
 

More from Toomore

如何用 grs 擷取台灣上市股票股價資訊 PyCon APAC 2014
如何用 grs 擷取台灣上市股票股價資訊 PyCon APAC 2014如何用 grs 擷取台灣上市股票股價資訊 PyCon APAC 2014
如何用 grs 擷取台灣上市股票股價資訊 PyCon APAC 2014Toomore
 
如何用 Twilio 發送 COSCUP 追殺簡訊
如何用 Twilio 發送 COSCUP 追殺簡訊如何用 Twilio 發送 COSCUP 追殺簡訊
如何用 Twilio 發送 COSCUP 追殺簡訊Toomore
 
創業抬槓 20130831 分享 Pinkoi
創業抬槓 20130831 分享 Pinkoi創業抬槓 20130831 分享 Pinkoi
創業抬槓 20130831 分享 PinkoiToomore
 
Toomore 20130627 Taipei.py
Toomore 20130627 Taipei.pyToomore 20130627 Taipei.py
Toomore 20130627 Taipei.pyToomore
 
MOPCON Lightning Talk 閃電秀 用照片說故事 - 影像紀錄區
MOPCON Lightning Talk 閃電秀 用照片說故事 - 影像紀錄區MOPCON Lightning Talk 閃電秀 用照片說故事 - 影像紀錄區
MOPCON Lightning Talk 閃電秀 用照片說故事 - 影像紀錄區Toomore
 
又一個誤聽 GAE 的悲劇
又一個誤聽 GAE 的悲劇又一個誤聽 GAE 的悲劇
又一個誤聽 GAE 的悲劇Toomore
 
goristock in Coscup flash
goristock in Coscup flashgoristock in Coscup flash
goristock in Coscup flashToomore
 
財務個案分析報告 尖美建設
財務個案分析報告 尖美建設財務個案分析報告 尖美建設
財務個案分析報告 尖美建設Toomore
 
「兩岸簽訂Mou後,證券業之未來發展佈局」心得報告
「兩岸簽訂Mou後,證券業之未來發展佈局」心得報告「兩岸簽訂Mou後,證券業之未來發展佈局」心得報告
「兩岸簽訂Mou後,證券業之未來發展佈局」心得報告Toomore
 
981金融機構與管理辯論報告(反對方)
981金融機構與管理辯論報告(反對方)981金融機構與管理辯論報告(反對方)
981金融機構與管理辯論報告(反對方)Toomore
 
建構金融機構SaaS服務之探討-以Google App Engine為例
建構金融機構SaaS服務之探討-以Google App Engine為例建構金融機構SaaS服務之探討-以Google App Engine為例
建構金融機構SaaS服務之探討-以Google App Engine為例Toomore
 
海峽西岸經濟區
海峽西岸經濟區海峽西岸經濟區
海峽西岸經濟區Toomore
 
Present Maps
Present MapsPresent Maps
Present MapsToomore
 
Analytics GAE - Plurk Avatar History 20090825-20090909
Analytics GAE - Plurk Avatar History 20090825-20090909Analytics GAE - Plurk Avatar History 20090825-20090909
Analytics GAE - Plurk Avatar History 20090825-20090909Toomore
 
MozTW Off-Line Paper at 2009
MozTW Off-Line Paper at 2009MozTW Off-Line Paper at 2009
MozTW Off-Line Paper at 2009Toomore
 
南區勞工課程-Picasa網路相簿
南區勞工課程-Picasa網路相簿南區勞工課程-Picasa網路相簿
南區勞工課程-Picasa網路相簿Toomore
 
Moztw 問卷調查
Moztw 問卷調查Moztw 問卷調查
Moztw 問卷調查Toomore
 
MozTW 離線報
MozTW 離線報MozTW 離線報
MozTW 離線報Toomore
 

More from Toomore (18)

如何用 grs 擷取台灣上市股票股價資訊 PyCon APAC 2014
如何用 grs 擷取台灣上市股票股價資訊 PyCon APAC 2014如何用 grs 擷取台灣上市股票股價資訊 PyCon APAC 2014
如何用 grs 擷取台灣上市股票股價資訊 PyCon APAC 2014
 
如何用 Twilio 發送 COSCUP 追殺簡訊
如何用 Twilio 發送 COSCUP 追殺簡訊如何用 Twilio 發送 COSCUP 追殺簡訊
如何用 Twilio 發送 COSCUP 追殺簡訊
 
創業抬槓 20130831 分享 Pinkoi
創業抬槓 20130831 分享 Pinkoi創業抬槓 20130831 分享 Pinkoi
創業抬槓 20130831 分享 Pinkoi
 
Toomore 20130627 Taipei.py
Toomore 20130627 Taipei.pyToomore 20130627 Taipei.py
Toomore 20130627 Taipei.py
 
MOPCON Lightning Talk 閃電秀 用照片說故事 - 影像紀錄區
MOPCON Lightning Talk 閃電秀 用照片說故事 - 影像紀錄區MOPCON Lightning Talk 閃電秀 用照片說故事 - 影像紀錄區
MOPCON Lightning Talk 閃電秀 用照片說故事 - 影像紀錄區
 
又一個誤聽 GAE 的悲劇
又一個誤聽 GAE 的悲劇又一個誤聽 GAE 的悲劇
又一個誤聽 GAE 的悲劇
 
goristock in Coscup flash
goristock in Coscup flashgoristock in Coscup flash
goristock in Coscup flash
 
財務個案分析報告 尖美建設
財務個案分析報告 尖美建設財務個案分析報告 尖美建設
財務個案分析報告 尖美建設
 
「兩岸簽訂Mou後,證券業之未來發展佈局」心得報告
「兩岸簽訂Mou後,證券業之未來發展佈局」心得報告「兩岸簽訂Mou後,證券業之未來發展佈局」心得報告
「兩岸簽訂Mou後,證券業之未來發展佈局」心得報告
 
981金融機構與管理辯論報告(反對方)
981金融機構與管理辯論報告(反對方)981金融機構與管理辯論報告(反對方)
981金融機構與管理辯論報告(反對方)
 
建構金融機構SaaS服務之探討-以Google App Engine為例
建構金融機構SaaS服務之探討-以Google App Engine為例建構金融機構SaaS服務之探討-以Google App Engine為例
建構金融機構SaaS服務之探討-以Google App Engine為例
 
海峽西岸經濟區
海峽西岸經濟區海峽西岸經濟區
海峽西岸經濟區
 
Present Maps
Present MapsPresent Maps
Present Maps
 
Analytics GAE - Plurk Avatar History 20090825-20090909
Analytics GAE - Plurk Avatar History 20090825-20090909Analytics GAE - Plurk Avatar History 20090825-20090909
Analytics GAE - Plurk Avatar History 20090825-20090909
 
MozTW Off-Line Paper at 2009
MozTW Off-Line Paper at 2009MozTW Off-Line Paper at 2009
MozTW Off-Line Paper at 2009
 
南區勞工課程-Picasa網路相簿
南區勞工課程-Picasa網路相簿南區勞工課程-Picasa網路相簿
南區勞工課程-Picasa網路相簿
 
Moztw 問卷調查
Moztw 問卷調查Moztw 問卷調查
Moztw 問卷調查
 
MozTW 離線報
MozTW 離線報MozTW 離線報
MozTW 離線報
 

Recently uploaded

函數畫圖_習題6.pptx 函數畫圖_習題6.pptx 函數畫圖_習題6.pptx
函數畫圖_習題6.pptx 函數畫圖_習題6.pptx 函數畫圖_習題6.pptx函數畫圖_習題6.pptx 函數畫圖_習題6.pptx 函數畫圖_習題6.pptx
函數畫圖_習題6.pptx 函數畫圖_習題6.pptx 函數畫圖_習題6.pptxNCU MCL
 
买假和真英国驾驶执照买了假的英国驾照,那跟真的有什么区别吗?买假和真正的澳大利亚驾驶执照【微信qoqoqdqd】
买假和真英国驾驶执照买了假的英国驾照,那跟真的有什么区别吗?买假和真正的澳大利亚驾驶执照【微信qoqoqdqd】买假和真英国驾驶执照买了假的英国驾照,那跟真的有什么区别吗?买假和真正的澳大利亚驾驶执照【微信qoqoqdqd】
买假和真英国驾驶执照买了假的英国驾照,那跟真的有什么区别吗?买假和真正的澳大利亚驾驶执照【微信qoqoqdqd】黑客 接单【TG/微信qoqoqdqd】
 
20211119 - demystified artificial intelligence with NLP
20211119 - demystified artificial intelligence with NLP20211119 - demystified artificial intelligence with NLP
20211119 - demystified artificial intelligence with NLPJamie (Taka) Wang
 
20170104 - transaction_pattern
20170104 - transaction_pattern20170104 - transaction_pattern
20170104 - transaction_patternJamie (Taka) Wang
 
函數微分_習題4.pptx 函數微分_習題4.pptx 函數微分_習題4.pptx
函數微分_習題4.pptx 函數微分_習題4.pptx 函數微分_習題4.pptx函數微分_習題4.pptx 函數微分_習題4.pptx 函數微分_習題4.pptx
函數微分_習題4.pptx 函數微分_習題4.pptx 函數微分_習題4.pptxNCU MCL
 
20161220 - domain-driven design
20161220 - domain-driven design20161220 - domain-driven design
20161220 - domain-driven designJamie (Taka) Wang
 
函數畫圖_習題5.pptx 函數畫圖_習題5.pptx 函數畫圖_習題5.pptx
函數畫圖_習題5.pptx 函數畫圖_習題5.pptx 函數畫圖_習題5.pptx函數畫圖_習題5.pptx 函數畫圖_習題5.pptx 函數畫圖_習題5.pptx
函數畫圖_習題5.pptx 函數畫圖_習題5.pptx 函數畫圖_習題5.pptxNCU MCL
 
函數畫圖_習題7.pptx 函數畫圖_習題7.pptx 函數畫圖_習題7.pptx
函數畫圖_習題7.pptx 函數畫圖_習題7.pptx 函數畫圖_習題7.pptx函數畫圖_習題7.pptx 函數畫圖_習題7.pptx 函數畫圖_習題7.pptx
函數畫圖_習題7.pptx 函數畫圖_習題7.pptx 函數畫圖_習題7.pptxNCU MCL
 
SymPy 在微積分上的應用_5.pptx SymPy 在微積分上的應用_5.pptx
SymPy 在微積分上的應用_5.pptx SymPy 在微積分上的應用_5.pptxSymPy 在微積分上的應用_5.pptx SymPy 在微積分上的應用_5.pptx
SymPy 在微積分上的應用_5.pptx SymPy 在微積分上的應用_5.pptxNCU MCL
 
SymPy 在微積分上的應用_4.pptx SymPy 在微積分上的應用_4.pptx
SymPy 在微積分上的應用_4.pptx SymPy 在微積分上的應用_4.pptxSymPy 在微積分上的應用_4.pptx SymPy 在微積分上的應用_4.pptx
SymPy 在微積分上的應用_4.pptx SymPy 在微積分上的應用_4.pptxNCU MCL
 

Recently uploaded (15)

函數畫圖_習題6.pptx 函數畫圖_習題6.pptx 函數畫圖_習題6.pptx
函數畫圖_習題6.pptx 函數畫圖_習題6.pptx 函數畫圖_習題6.pptx函數畫圖_習題6.pptx 函數畫圖_習題6.pptx 函數畫圖_習題6.pptx
函數畫圖_習題6.pptx 函數畫圖_習題6.pptx 函數畫圖_習題6.pptx
 
买假和真英国驾驶执照买了假的英国驾照,那跟真的有什么区别吗?买假和真正的澳大利亚驾驶执照【微信qoqoqdqd】
买假和真英国驾驶执照买了假的英国驾照,那跟真的有什么区别吗?买假和真正的澳大利亚驾驶执照【微信qoqoqdqd】买假和真英国驾驶执照买了假的英国驾照,那跟真的有什么区别吗?买假和真正的澳大利亚驾驶执照【微信qoqoqdqd】
买假和真英国驾驶执照买了假的英国驾照,那跟真的有什么区别吗?买假和真正的澳大利亚驾驶执照【微信qoqoqdqd】
 
20200323 - AI Intro
20200323 - AI Intro20200323 - AI Intro
20200323 - AI Intro
 
20211119 - demystified artificial intelligence with NLP
20211119 - demystified artificial intelligence with NLP20211119 - demystified artificial intelligence with NLP
20211119 - demystified artificial intelligence with NLP
 
20170104 - transaction_pattern
20170104 - transaction_pattern20170104 - transaction_pattern
20170104 - transaction_pattern
 
函數微分_習題4.pptx 函數微分_習題4.pptx 函數微分_習題4.pptx
函數微分_習題4.pptx 函數微分_習題4.pptx 函數微分_習題4.pptx函數微分_習題4.pptx 函數微分_習題4.pptx 函數微分_習題4.pptx
函數微分_習題4.pptx 函數微分_習題4.pptx 函數微分_習題4.pptx
 
20161220 - domain-driven design
20161220 - domain-driven design20161220 - domain-driven design
20161220 - domain-driven design
 
函數畫圖_習題5.pptx 函數畫圖_習題5.pptx 函數畫圖_習題5.pptx
函數畫圖_習題5.pptx 函數畫圖_習題5.pptx 函數畫圖_習題5.pptx函數畫圖_習題5.pptx 函數畫圖_習題5.pptx 函數畫圖_習題5.pptx
函數畫圖_習題5.pptx 函數畫圖_習題5.pptx 函數畫圖_習題5.pptx
 
函數畫圖_習題7.pptx 函數畫圖_習題7.pptx 函數畫圖_習題7.pptx
函數畫圖_習題7.pptx 函數畫圖_習題7.pptx 函數畫圖_習題7.pptx函數畫圖_習題7.pptx 函數畫圖_習題7.pptx 函數畫圖_習題7.pptx
函數畫圖_習題7.pptx 函數畫圖_習題7.pptx 函數畫圖_習題7.pptx
 
Entities in DCPS (DDS)
Entities in DCPS (DDS)Entities in DCPS (DDS)
Entities in DCPS (DDS)
 
20161027 - edge part2
20161027 - edge part220161027 - edge part2
20161027 - edge part2
 
20151111 - IoT Sync Up
20151111 - IoT Sync Up20151111 - IoT Sync Up
20151111 - IoT Sync Up
 
SymPy 在微積分上的應用_5.pptx SymPy 在微積分上的應用_5.pptx
SymPy 在微積分上的應用_5.pptx SymPy 在微積分上的應用_5.pptxSymPy 在微積分上的應用_5.pptx SymPy 在微積分上的應用_5.pptx
SymPy 在微積分上的應用_5.pptx SymPy 在微積分上的應用_5.pptx
 
20200226 - AI Overview
20200226 - AI Overview20200226 - AI Overview
20200226 - AI Overview
 
SymPy 在微積分上的應用_4.pptx SymPy 在微積分上的應用_4.pptx
SymPy 在微積分上的應用_4.pptx SymPy 在微積分上的應用_4.pptxSymPy 在微積分上的應用_4.pptx SymPy 在微積分上的應用_4.pptx
SymPy 在微積分上的應用_4.pptx SymPy 在微積分上的應用_4.pptx
 

KSDG Python and MongoDB for web

  • 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
  • 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
  • 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
  • 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
  • 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/Moni toring+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
  • 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
  • 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 Amason Script : 電子報、郵件通知 Social Network : Facebook 、 twitter Slaves tb* 分享照片 Master Flask uWSGI nginx mongoDB Pymongo python Linode 影像紀錄區 - tb* : twitter-bootstrap pi.isuphoto.org 55/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