九月 17, 2016
» 烤肉

屋況不是很好 ,很怕烤肉當天太熱。事前很認真的打掃了房子,該收的雜物也全收到房間中。

好在天公作美,儘管雙颱夾擊,除了一開始的小雨外,過程中天氣都很涼爽,還看到了一小截的彩虹和不錯的夕陽。

九月 15, 2016
» 屍速列車

一懶,竟然三四個月沒做記錄。

這部電影評價很好,所以剛上映就趕快跑去看,省得被不小心爆雷。

在連預告都沒看過的情況下進了影院,最後很滿足的走了出來。

整部片幾乎從頭緊繃到最後,但不像好萊塢式動作片充滿了無所謂的打鬥場景
;在刺激的過程中,每個人的心境變化,每個人的處事方式,還是一點一滴地表現了出來。

看電影,不外乎追求聲光感官剌激,或是尋求感情的牽引。這部電影兩方面都顧及了,也難怪大獲好評。

» stranger things

一開始的劇情拖得有點長,所以看得斷斷續續的。中間大家開始追線索時才逐漸變得刺激。可惜最後的壞蛋感覺太弱了。

最後一幕看來是為下一季留了伏筆。希望下一季會有更多精彩的劇情。

九月 9, 2016
» 人蠢無藥醫

開會時不知道在想什麼,一不留神,600元就飛了。

八月 25, 2016
» 聊天機器人一份,不加咖啡



「聊天機器人一份,不加咖啡」是今年在 Coscup 2016 分享的講題,投影片在此
內容包含介紹聊天機器人與 Hubot,轉換Coffeescript到ES6,與移植經驗總結。
 
Webbybot 是我們將 Hubot 完全移植到 ES6 的成果。在準備這場演講時,有鑑於Server Side聊天機器人設定上還是稍嫌複雜,於是我參考 Hubot 架構,做了原始版本只有80行的網頁端聊天機器人。除了支援聊天機器人基本功能外,同時也支援擴充腳本(plugin)與擴充功能(addon)。由於參考了Hubot架構,於是命名時就取了Saihubot 這個既包含 Hubot,又有濃濃台味的名稱(SaiHu 即台語的「師傅」)。

這次活動官方有提供 LINE 版的聊天機器人。我在活動早上花幾小時基於 Saihubot 做了 Coscup 2016網頁版機器人,可以上去玩玩。

要做一個自己的網頁聊天機器人,只須在 github 上 fork 專案,然後就可以直接在 Github 上編輯,修改後的結果直接反應到 https://[your name].github.io/saihubot 網站上。修改極端容易,畢竟核心只有不到100行,對聊天機器人有點興趣的人可以照著上述說明試試,看看原始碼,當然若能送個 Issue 或 Pull Request,這場「扎根」議程達到的效果就最好了。
 

八月 20, 2016
» COSCUP2016

從兩個月前得知中獎之後,就一直處在緊繃的狀態。雖然分享的內容在這去年已經在比較小的場合講過,但畢竟場子規模不同,讓人難以等閒視之。

投影片陸陸續續有在修改,最後一週更是每天練習每天修小細節。

不過,看得出來效果並沒有第一次分享時來得好。一方面因為可能這不是純app分享的場合,另一方面,大家對於COSCUP的要求也高了許多,如果技術深度不夠,或是講得不夠精彩,就很容易讓人打瞌睡。

不論如何,總算是給了自己一個交代。

人在老的時候,會後悔的總是那些沒有做過的事,而不是已經做過的事。

» 天倫制裁

週末看這麼沉重的電影,似乎不大好。

一群窮凶惡極的壞小孩,一個天真爛漫的女生,什麼事也沒做的警察,失望透頂和最後爆走的母親。

片尾的訊息顯示出這樣的事件還是不斷地上演,持續被輕判。不知道什麼時候才能加重刑罰呢。

八月 13, 2016

marr's weblog
marrtw
marr weblog is about »

tag cloud

» Plone5 Theme Customization

Plone5 is released for quite a long time, but recently I finally get a chance to work with its default Barceloneta Theme. For Plone5 new comers, be sure to read first the article "Customize Plone 5 Default Theme On the Fly". One small thing about the Barceloneta theme, from the Front Page text, there's a big welcome string, named hero text, later turned into @@hero view in Plone 5.0.3. So you can reference the following code to highlight some text:

<div class="hero">
<h1>Welcome!</h1>
<p><a class="context" href="http://plone.com" target="_blank">Link</a></p>
</div>

Separated text, say in the end paragraph, with the hero class will display in the same box.

Barceloneta uses LESS as a pre-processor to generate the final CSS files. In addition, its LESS/CSS is not registered on the registry, so you need to compile it with gruntfile.

Then, if you want to develop your custom theme in the filesystem, take a look at plonetheme.persona. Persona Theme is good for blog-style site, not suitable for portal, anyway it is a good start to learn about customization based on Barceloneta. Here is the development buildout log:

$ bin/buildout -c develop.cfg
mr.developer: Queued 'plonetheme.persona' for checkout.
mr.developer: Filesystem package 'plonetheme.persona' doesn't need a checkout.
Develop: '/home/marr/plone505/zinstance/src/plonetheme.persona'
Uninstalling zopepy.
Uninstalling instance.
Installing _mr.developer.
Generated script '/home/marr/plone505/zinstance/bin/develop'.
Installing instance.
Getting distribution for 'mockup-highlightjs'.
Got mockup-highlightjs 1.0.0a2.
Getting distribution for 'plone.app.themingplugins'.
Got plone.app.themingplugins 1.0.
Getting distribution for 'z3c.jbot'.
Got z3c.jbot 0.7.2.
Generated script '/home/marr/plone505/zinstance/bin/instance'.
Generated interpreter '/home/marr/plone505/zinstance/parts/instance/bin/interpreter'.
Generated script '/home/marr/plone505/zinstance/bin/pilprint.py'.
Generated script '/home/marr/plone505/zinstance/bin/pilconvert.py'.
Generated script '/home/marr/plone505/zinstance/bin/enhancer.py'.
Generated script '/home/marr/plone505/zinstance/bin/thresholder.py'.
Generated script '/home/marr/plone505/zinstance/bin/viewer.py'.
Generated script '/home/marr/plone505/zinstance/bin/explode.py'.
Generated script '/home/marr/plone505/zinstance/bin/player.py'.
Generated script '/home/marr/plone505/zinstance/bin/pildriver.py'.
Generated script '/home/marr/plone505/zinstance/bin/pilfile.py'.
Generated script '/home/marr/plone505/zinstance/bin/painter.py'.
Generated script '/home/marr/plone505/zinstance/bin/createfontdatachunk.py'.
Generated script '/home/marr/plone505/zinstance/bin/gifmaker.py'.
Generated script '/home/marr/plone505/zinstance/bin/pilfont.py'.
Updating repozo.
Updating backup.
Installing zopepy.
Generated interpreter '/home/marr/plone505/zinstance/bin/zopepy'.
Updating unifiedinstaller.
Installing test.
Generated script '/home/marr/plone505/zinstance/bin/test'.
Installing diazotools.
Generated script '/home/marr/plone505/zinstance/bin/diazocompiler'.
Generated script '/home/marr/plone505/zinstance/bin/diazorun'.
Generated script '/home/marr/plone505/zinstance/bin/diazopreprocessor'.
Installing checkdocs.
Installing mrbob.
Getting distribution for 'MarkupSafe==0.23'.
Got MarkupSafe 0.23.
Generated script '/home/marr/plone505/zinstance/bin/mrbob'.
Installing releaser.
Generated script '/home/marr/plone505/zinstance/bin/fullrelease'.
Generated script '/home/marr/plone505/zinstance/bin/postrelease'.
Generated script '/home/marr/plone505/zinstance/bin/lasttagdiff'.
Generated script '/home/marr/plone505/zinstance/bin/addchangelogentry'.
Generated script '/home/marr/plone505/zinstance/bin/bumpversion'.
Generated script '/home/marr/plone505/zinstance/bin/prerelease'.
Generated script '/home/marr/plone505/zinstance/bin/release'.
Generated script '/home/marr/plone505/zinstance/bin/longtest'.
Generated script '/home/marr/plone505/zinstance/bin/lasttaglog'.
Generated script '/home/marr/plone505/zinstance/bin/pocompile'.
Versions had to be automatically picked.
The following part definition lists the versions picked:
[versions]

# Required by:
# plonetheme.persona==1.0a2.dev0
mockup-highlightjs = 1.0.0a2

# Required by:
# plonetheme.persona==1.0a2.dev0
plone.app.themingplugins = 1.0

# Required by:
# plone.app.themingplugins==1.0
z3c.jbot = 0.7.2

Look into profiles/default/metadata.xml you will see <dependency>profile-plonetheme.barceloneta:registerless</dependency>

八月 9, 2016
» The newbies workflow on Mozilla Gecko project

As our recent development focus shifting from Firefox OS to Firefox, we need contribute to gecko repository directly instead of contribute to gaia repository. The most of works are still related with Javascript, the main change is the workflow and API difference.  In Gaia we works between Bugzilla and github; In gecko, we have Bugzilla and mozReview.

Once you have setup the environment, the workflow could be still based on git, and most thing are dealt automatically. Mozilla is a pretty open workplace so I can share my workflow with the world. Here are a reference about how I did for per patch/weekly/per setup/one time workflow.

Per patch workflow

When I work on a new bug, I'll checkout a new branch (on mac)

$ git checkout -b bugxxxxxxx inbound/branches/default/tip
or (on ubuntu)
$ git checkout -b bugxxxxxxx inbound/default
Usually the bug is focus on a component of gecko, such as `browser/components/customizableui`. To make .js/.jsm changes work, we don't need to rebuild gecko. But to make some C++ code or new test code works, we need to rebuild this part of source via

$ ./mach build browser/components/customizableui

Once we have some progress for the patch, we can test code via command:
$ ./mach test browser/components/customizableui/test
Once the patch is ready, commit it as normal git commit, with a structured syntax:
`Bug xxxx - description. ;r=?reviewer_bugzilla_alias`.

Then, use git mozreview command to push the commit onto bugzilla for review.
$ git mozreview push
Ooh, you also need to make sure you've followed the JS code style https://wiki.mozilla.org/DevTools/CodingStandards#Code_style and CSS code style https://wiki.mozilla.org/Firefox/CSS_Tips

You can use try chooser http://trychooser.pub.build.mozilla.org/
 to select test suites that runs automatically on the test server. Treeherder is Mozilla's test server hosted on AWS (Amazon Web Service). Push code there and everyone will have the same base to validate if your code works well on anyone's computer.

The reference try script (credit from :Gijs) for `browser/component` is

try: -b od -t none -p win32,win64,macosx64,linux,linux64,linux64-asan -u mochitest-bc,mochitest-e10s-bc,marionette,marionette-e10s

You can manipulate the script based on what you need to test.

Weekly workflow

Because build takes more time, I usually do the following command only twice a week if necessary.

We need update gecko repository regularly:

$ git remote update

Checkout a new bug and then rebuild the stack

$ ./mach build

The command will compile the whole gecko.

 Do at every Setup

You may check MDN as a start point, with Developer Guide https://developer.mozilla.org/en-US/docs/Mozilla/Developer_guide and especially the source code page
https://developer.mozilla.org/en-US/docs/Mozilla/Developer_guide/Source_Code

I will do the setup flow everytime I got a new laptop.

1. Update git

Use the PPA from the maintainers of git on Ubuntu:
$ sudo apt-add-repository ppa:git-core/ppa
$ sudo apt-get update
$ sudo apt-get install git 
 2. Install git-cinnarbar

gecko itself managed via mercurial, we need install git-cinnarbar to help us deal with mercurial codebase via git.
Check http://mozilla-version-control-tools.readthedocs.org/en/latest/mozreview/install-git.html#mozreview-install-git 

$ sudo apt-get install mercurial
$ git clone https://github.com/glandium/git-cinnabar.git
 Then set git-cinnabar into system PATH

$ gedit ~/.bashrc

export PATH=$PATH:absolute_path_to/git-cinnabar

$ . ~/.bashrc
Then follow Mozilla: A git workflow for Gecko development to checkout gecko via git.

Make sure you follow the firefox build guide https://developer.mozilla.org/en-US/docs/Mozilla/Developer_guide/Build_Instructions/Simple_Firefox_build to setup firefox build environment.

You can install style check related libraries via following command:

$ ./mach eslint --setup

You may want install mozreview which is improve the overall experience of review with Bugzilla http://mozilla-version-control-tools.readthedocs.org/en/latest/mozreview/install.html
$ ./mach mercurial-setup
Will clone version-control-tools into `~/.mozbuild/version-control-tools`. We need update system PATH
$ gedit ~/.bashrc
export PATH=$PATH:absolute_path_to/git-cinnabar:/path/to/.mozbuild/version-control-tools/git/commands 
$ . ~/.bashrc
$ git config --global bz.username someone@example.com
$ git config --global bz.apikey as3r123hj325hjld3
$ git config --global mozreview.nickname mynick
$ git mozreview configure
Then, run bootstrap script to install required build environment

$ ./mach bootstrap
 
Then, the most time saving advice: setup mozconfig for artifact builds if possible. 
When you only work for front-end related work (non c++), Artifact build will download compiled platform code to save you lots of build time.
Do One time
 
Become committer
https://www.mozilla.org/en-US/about/governance/policies/commit/
 
Create Bugzilla API key
https://bugzilla.mozilla.org/userprefs.cgi?tab=apikey
Manage ssh
https://login.mozilla.com/ssh_keys_index

七月 31, 2016
» 原本

原本半夜想吃泡麵的,
結果看到一隻小強,嚇了一大跳,
整塊麵就這麼掉到地板上。

費了一點勁把小強送上西天。
我的宵夜也就這麼泡湯了。

七月 14, 2016

marr's weblog
marrtw
marr weblog is about »

tag cloud

» 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>)

七月 4, 2016
» 使用手機上傳 360 圖片到 Facebook

前幾天 Facebook 開放上傳 360 影片,經過幾番嘗試後,終於找出直接在手機上直接上傳 360 照片的方法。

剛嘗試的人建議使用 Google Street ViewCardboard Camera 試試效果,這兩個 App 可以在 Android 或 iOS 應用商店中找到。

透過這兩個 App 拍攝的 360影片,直接上傳到 Facebook 應該是沒問題的。


但現在有更方便的 360 影片拍攝工具如 Ricoh Theta S 或是 LG 360 CAM,這類設備搭載兩個鏡頭,拍攝時只要按一下拍攝鈕,就輕鬆完成全景照片。

使用全景相機拍攝 360 照片或影片

有的設備如 LG 360 CAM,目前 Facebook 還無法辨認(更新:現直接上傳 360 照片已經可以正確辨認),所以只能用一些繞過的方法。朋友傳來這篇教學文章。根據這篇文章的說明,我做了些嘗試與改進,並最終成功透過手機上傳360照片。

1. 首先準備一張 360 照片 (我用的是 LG 360 CAM)



2. 接著從應用商店取得可以編輯照片 Exif 資訊的應用。我選的是免費的 Photo Exif editor。
3. 從照片 (Gallery, Photo) App 預覽到想要修改的 360 照片,選擇分享(Share)到 Photo Exif editor。
 4. 照著修改 以下欄位的值:

Camera maker: Ricoh (首字母大寫)

Camera model: RICOH THETA S (全大寫)


5. 最後再透過相片軟體選擇分享到 Facebook 即可。如果成功,可以看到相片下角出現球狀 360 影片圖示。



我的觀察啦,360 相機使用上相當方便,按一下拍攝鈕啟動相機,再按一下就拍張照。長按就開始拍攝影片。

拍照時只要把相機往上平舉,就整個環境都拍到了(一個小技巧:拍攝時將相機舉在頭上就不會拍到自己),不需要什麼特別的攝影技巧。這對只是想分享當下體驗的我相當適合。這種特性也很適合團體拍照。這樣方便的新品,加上 Facebook 這樣容易分享相片的環境,相信很快 360 相機就會流行起來。
 
目前拍 360 相片時,附近的人其實並沒有意識到我在幹什麼,但其實附近的人也是全部入鏡的。使用 360 相機時要如何兼顧隱私的保護也會是一個議題。

六月 27, 2016

Thinker
heaven.branda
» 我們需要的是一個城市

linkname:[國發會對「亞洲矽谷」的定調,我們仍然憂心] http://rocket.cafe/talks/77404 這篇文章提到『原本就都是「去中心化」的發展 (IoT本身不就是科技應用的去中心化典範嗎?); 而我們不贊同未來繼續採用「聚落化」的產業發展政策,也是基於相同的理由。』 我贊成「去中心化/不要園區」的觀點,但對於「聚落化」則無法贊成。 == 創新是一種文化 == 新創產業不只是經濟活動而已,而是一種文化。 這個產業圈必需形成一種文化,而這種文化的形成,可以在網路上, 但也需要面對面的討論。 全球化的今天,即使是最為網路化的 Open Source 社群,你也能看到地理上的集中。 ...

六月 26, 2016
» 台大資工校友訪談

六月 23, 2016

Thinker
heaven.branda
» 亞洲矽谷也無不可,但不是大官、財團們想像的樣子

亞洲矽谷這個計劃這陣子被吵的沸沸揚揚的。我的重點只有一個,「人」。人是一切,如何讓人願意來,願意留下,才是亞洲矽谷的核心。 而讓人來,讓人留下的核心因素是「需求」。根據我的觀察,我來分析一下需求。 == 休閒 == 首先,休閒大概是矽谷最重要的一環。 這幾年矽谷的軟體人才紛紛往 SF 移動,就是看中 SF 的休閒活動比起加州其它地方豐富。 特別是在新創事業中,年輕人特別多,需要有良好的休閒空間和活動,才能吸引人才前來、留下。 百貨公司、商場我們是夠多了,多到爆。不如多規劃一些戶外的空間和活動。 而且必需多元,符合年輕人的需求。 這或許可以參考一下時下年輕人都去哪,分析出需要加強的地方。 ...

六月 13, 2016

marr's weblog
marrtw
marr weblog is about »

tag cloud

» 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 的前端元件部份。

六月 11, 2016
» 絕密搜查 韓國片

警察與道士合作破綁架案的故事。據說是由真實事件改編而來,但在真實的案件中,究竟道士是否真的那麼神,就不得而知了。目前韓文還在牙牙學語階段,沒辦法去找早期相關的報導。

» 忍者龜 II

打鬥畫面不斷的動作片。這一集的重點在於忍者龜們各自有各自的性格,要成為一個好的團隊,不在於強迫每個人都接受隊長的想法,而是接受每個人都是不同的,讓彼此能夠發揮自己最大的長處。

過程中雖然有不愉快,但最後忍者龜們還是團結在一起,阻擋了壞人的入侵地球。

一團肉的反派,一定要弄得那麼逼真嗎?

» さまよう刃 -- 東野圭吾

很沉重的一本書。法律似乎都是站在加害人的立場。對於被害人的家屬的未來和心情都沒有考慮在內。一個人究竟在犯罪之後會不會洗心革面,變成好人,誰也說不準。但被害人家屬卻一輩子見不到自己心愛的家人,活在生不如死的生活中。

雖然結局有點草率,但漫長的情節還是把很多想表達的說法都提出來了。

六月 1, 2016
» 海邊的房間 -- 黃麗群

很好看的一本小說。每個故事都有特別的地方,情節的張力也很夠,看起來很過癮。每天看兩三個故事,幾天就可以看完整本書。

biggo.com.tw

A Django site.