2016/07/14

plone.app.event tzinfo

如果你使用新版 Plone 5.x 或 Plone 4.3.x 加上 plone.app.contenttypes 昇級,應該就會遇到 plone.app.event 帶來的 tzinfo 時區衝擊。假設 item = app.mysite.events['20160701'] 那我們可以用 item.creation_date 讀取建立時間,類似 DateTime('2016/07/01 00:30:23.674693 UTC') 這樣的格式,這表示它還是使用傳統的時間格式,試 item.start 和 item.end 的話,會發現類似 datetime.datetime(2016, 3, 23, 16, 0, tzinfo=) 的格式。

文件 Zope DateTime 有基本的說明,可惜並沒有幫到忙,我想要把上述時間轉成 GMT+8 的格式,這會影響到「三月23日」和「三月24日」的差別。找到 Converting Time Zones for datetime Ojbects 讓事情有了進展:

fmt = "%Y-%m-%d"
item.start.strftime(fmt)

from pytz import timezone
item.start.astimezone(timezone('Asia/Taipei')
datetime.datetime(2016, 3, 24, 0, 0, tzinfo=<DstTzInfo 'Asia/Taipei' CST+8:00:00 STD>)

2016/06/13

OpenGeo Suite

Boundless Exchange 是 Boundless GIS Platform 的一部份,它的功能看來是對應了 GeoNode,而 GeoNode 文件表示它是個 GIS CMS,能夠用來新增 Layer, Map, Document (例如 Excel, PPT, PDF 等),也有群組和簡易權限控制,加入我們的歷史圖資或 Shape File 內容,都可以做到,但我沒發現能直接編輯 HTML 或調整呈現的功能。

整體來說,Boundless Exchange 是編輯 GIS 素材最好的 Open Source 系統環境,算是提供地圖資訊的後台便利環境,但直接在上面「說故事」似乎還不適合,短時間內應該要搭配其他能夠編輯 HTML 的前台環境。如果搭配 LocalWiki 的話,方便共同編輯,但呈現形式要調整後,才容易具備彈性。

GeoNode fig1 GeoNode fig2 GeoServer fig1 GeoServer fig2

擴充開發的角度來看,Python 寫成的元件 (像 Django, pycsw) 偏向前端,以 Java 寫成 (例如 GeoServer) 是後端核心,在調整顯示的情境下,主要應是修改 JavaScript 和 Python 的前端元件部份。

2016/04/28

在地深耕, 迎向國際

2016 台灣 Python 年會 (PyCon Taiwan) 六月 3日 到 5日 在台北南港中研院 舉辦三天,總數超過 40場演講,主題涵蓋資料科學、人工智慧、金融科技、網站開發技術、雲端應用、青少年程式教育,會前搭配專案實作 (Sprint) 和專業課程 (Tutorial) 活動,會後在政治大學搭配新手村 (PyDay) 活動,更多資訊請參考 http://tw.pycon.org/2016/events/overview/ 介紹。

五位主題講者,包含網站技術專家、微軟 Python 工程師、迪士尼動畫工程師,還有黃敬群和唐鳳,兩位出身台灣、自學成才、享譽國際的自由軟體資深貢獻者。

本地出身的主題講者,佔了五分之二,這樣安排,是為了體現 PyCon Taiwan 的願景目標: 發展 Python 技術,提昇社群專業。簡單地說,我們要在台灣搞出一系列一流的產品服務,不限於 PyCon 或 Python,但我們選擇 Python 為核心,從年會出發累積。這個願景方向,我們努力了五年,交出讓自己驕傲的成績單,但還有很大的天地等我們去發展和成長。

如果能作夢,我期待成立台灣 Python 基金會,做什麼事呢? 推展青少年教育,讓 Python 成為各行各業的核心技術,社群專案和講者多到滿出來,台灣成為技術重鎮,工作效率提昇系統穩定成長,大家早點下班去做自己覺得有意義的事。如果要有這樣的一天,那麼搞好一個持續成長的 PyCon,也只是個起點罷。人生苦短,你想做的是什麼呢?

提到程式教學,幾場相關的講題摘要如下:

  • 主題演講 Jim Huang (jserv) 分享應用 Python 在大學作業系統和編譯器課程的經驗,以及 Python 編譯器與虛擬機器的內部設計。
  • 分享兒童程式教學經驗 Teach Kids to Learn Python: Eric Huang 針對小六到高一設計 Python 入門課程,說明學習 Python 應先具備的能力,入門的九個重點,提供上機練習體驗,最重要的是,如何引發學生學習的動機,培養寫程式的能力和自信心。
  • Learning the Basics: 來自香港的十一歲少年 Isaac Li (英文演講) 經由小遊戲的設計概念,分享自己學習 Python 的經驗談,用意是激勵更多青少年朋友接觸程式學習。
  • Coaching Teens to Learn Python: Edward Duh 檢視多種可能適合青少年學習的工具,包括 Raspberry Pi、Minecraft Pi、CheckiO、IPython Notebook 等,並分享教學設計的實務經驗,怎樣讓學習變得有趣。

早鳥優惠到五月1日 18:04,還沒買票的朋友,別錯過囉。

"The past cannot be changed. The future is yet in your power." -- Hugh White

Let's Implement the Future, Together!

Get Your PyCon Taiwan 2016 Tickets

學習程式語言,第一先要入門產生興趣,再培養良好的自學能力。
寶寶心裡爽,但寶寶還是要說: Python 的好 妙不可言啊
阿榮啊,放假要記得去買 PyCon Taiwan 門票,順便再捐 500 給 OCF 基金會。

2015/11/17

Omeka Notes

安裝 Omeka 2.3.x 之後,有幾個常見問題,依自身實務的需求優先順序來說明:

* Item 只能對應一個 Collection 不能對應多個。所謂的 Collection Tree 通常幫不上任何忙。

* Theme 客製化機制建議先參考這一系列說明,Common Layout 無法依 Item 或 FrontPage 來客製,例如 Disqus Embed Code 無法依 Item (or Item Type) 來顯示

* Navigation 管理方式只有一招,每個 Tab 都要指定 Link URL。

* Item 與 Collection 不能容易地自訂網址。

* 描述欄位的中文斷字預設無法正常顯示,至少要修改下列檔案:

  • application/views/scripts/items/single.php
  • application/views/scripts/collections/single.php
  • themes/.../collections/show.php
  • application/views/scripts/items/browse.php

* 地圖座標搭配 CSV Import 時,無法批次處理。

* Exhibit 的 SubItem Navigation 不能客製化

* Slide Show 模組整合選項有限制,較可行的是像 CSSlider。

* 利用 GetText 建立翻譯用的 pot po 檔,但沒有支援 Multi Lingual 機制。測試用 msgfmt -o 產生的 mo 並沒有成功生效。

* 留意 Version One vs Two 的差異

* Short Code 範例

* Collection 排序調整 數量統計 的範例

試用 Plugin 的心得記錄:

* Youtube 會新增一個匯入介面,輸入個別的影片網址,會自動填寫欄位資料。

* 安裝 GeoLocation Plugin 後,搜尋表單會增加地理相關搜尋欄位,但測試會造成錯誤,要從 application/views/scripts/items/search-form.php 移除 php fire_plugin_hook() 來停用搜尋欄位。

2015/10/26

Python Course at NanGang High School

Almost 10 years from now ... http://www.openfoundry.org/en/component/content/article/580-ossf-

Slides at http://www.openfoundry.org/download/cat_view/212

2015/07/28

Custom JavaScript Pattern Settings in Plone5

Plone 5 beta 3 is now released. Building from the source code is easier, compared to how we did it before.

$ virtualenv myenv
$ git clone -b 5.0 https://github.com/plone/buildout.coredev ./plone50dev
$ cd plone50dev
$ ../myenv/bin/python bootstrap.py
$ bin/buildout

Playing with Mockup is fun in Plone 5. See Customizing JavaScript Pattern Settings in Plone 5 to get started.

One way to work with your project: checkout the codes in src folder, edit core.cfg to modify eggs and develop under [buildout] section.