八月 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
» 海邊的房間 -- 黃麗群

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

五月 26, 2016

電腦做什麼事
pydoing
is about »

tag cloud

» index - 程式語言教學誌導覽目錄

我們的生活幾乎與工業密不可分,從日常用品到門鈴、電梯、路燈、指示牌等等 .... 等等,這全都是工業化的製品。工業,藉由機器早已取代了大量的人力,齒輪是很多機器裡的基本組成元件之一



大齒輪可以省力,小齒輪可以增加轉速,不同尺寸的齒輪相互巧妙的疊合,便可做出許許多多實用的機器來。利用齒輪的方式,我們需要了解齒輪間如何相互轉動的基本原理,也就是說,大小齒輪之間如何組合達到力矩平衡,齒輪的齒數、轉動的圈數、排列方式等等都得列入考量,這會是我們設計以齒輪為主要元件的機器前,所要先具備的知識。


早期的計算機也有利用齒輪製造的,不過當電子技術發展日新月異的今天,絕大多數的電腦都已經由電子線路所取代。電子線路的優點在於只需考慮有電壓及沒有電壓兩種情況,有電壓時,值趨近於 1 ,反倒沒有電壓時,其值趨近於 0 ,這樣一來,電子線路的思考變成 010101 .... 的方式,這便是數位化的由來。


0 與 1 構成二進位數字,就是說逢二就進位,以下為二進位數字與十進位數字對照表

十進位二進位十進位二進位十進位二進位十進位二進位
00161000032100000 48110000
11171000133100001 49110001
21018100103410001050110010
31119100113510001151110011
410020101003610010052110100
510121101013710010153110101
611022101103810011054110110
711123101113910011155110111
8100024110004010100056111000
9100125110014110100157111001
10101026110104210101058111010
11101127110114310101159111011
12110028111004410110060111100
13110129111014510110161111101
14111030111104610111062111110
15111131111114710111163111111


ASCII 則是利用七位元的二進位所組成的編碼系統,例如 1100001 表示十進位數字的 97 ,在 ASCII 中則表示英文小寫字母 a 。類似的方式,有許多不同需求的編碼系統衍生出來,如 Unicode 、 JPEG 、 MIDI 等。


電腦程式的主要工作就是處理編碼,不論把編碼形式儲存到檔案、傳送到輸出設備上,或是轉換成另一種編碼形式,這全都是電腦程式的功能。我們該如何寫程式呢?有許多不同的方法,最常見的就是準備好文字編輯器囉!

怎麼寫程式

如何自學程式設計
使用文字編輯器寫程式
整合開發環境

程式語言與金庸小說中的絕世武功

C 比之九陰真經,學會並掌握指標,天下無敵。
C++ 比之龍象般若功,有十三層,但修煉不易,無人超過第十層。
C# 比之彈指神通,高手運用手指的巧勁就能施展。
Java 比之獨孤九劍,敗中變化出的招式,不限平台的 JVM 。
JavaScript 比之胡家刀法,六字訣變幻莫測,瀏覽器上都能運作。
Objective-C 比之六脈神劍,獨家不傳絕技。
Perl 比之龍爪手,少林正宗武學,幾乎 Linux 高手必備。
PHP 比之黯然銷魂掌,需要深厚內力才能使出。
Python 比之降龍十八掌,簡單卻威力強大。
Ruby 比之乾坤大挪移,這要用過了才會知道。
Swift 比之一陽指,六脈神劍的精髓,本來同樣是獨家不傳絕技,不過現在 open source 了。

程式語言自修指南

1. 弄清楚程式語言能做什麼事情,也就是先了解程式語言的用途,技術面來說就是開發項目,像是桌上型電腦應用軟體、手機應用程式、遊戲或架設網站等等。
2. 弄清楚怎麼樣才能稱作一個程式,例如 Java 的可執行程式要有個 main() 方法, Python 的程式檔案都稱作模組。
3. 弄清楚程式的結構,也就是搞懂每個關鍵字的用途,基本上來說這就是邏輯的部份。
4. 弄清楚型態是什麼,型態跟變數有什麼關係,型態跟函數或方法又有什麼關係。
5. 最後,弄清楚程式庫是什麼,程式庫有什麼方便的地方。

程式設計解題指南

1. 弄清楚輸入項目,以及輸入的方式,例如從命令列輸入或是從檔案、網頁或 GUI 輸入。
2. 弄清楚輸入的內容要用什麼資料結構儲存,例如 C 、 C++ 、 Java 等有陣列, Python 有串列等。
3. 弄清楚怎麼處理資料,是否需要計算,計算結果要儲存到哪裡。
4. 弄清輸出項目,也就是要輸出什麼,計算結果抑或某種演算法。
5. 弄清楚要怎麼輸出,以及輸出到什麼設備上,例如命令列、檔案、網頁或 GUI 等。

程式設計問問題指南

1. 請說明程式的目的,例如要做什麼事情或計算出什麼結果。
2. 請說明自己的努力,自己寫了什麼東西或想要怎麼寫。
3. 請說明直譯器或編譯器提供的錯誤訊息,或是程式跑出哪些不如預期的結果。
4. 請提供排版過的程式原始碼,盡可能將程式碼張貼在分享網站上。

程式語言教材

C 語言入門指南 V1.00 電子書
C 語言速查手冊電子書
C 語言教材目錄
C++ 入門指南 V2.00 電子書
C++ 速查手冊 V1.00 電子書
C++ 教材目錄
C# 入門指南 V2.00 電子書
C# 速查手冊電子書
C# 教材目錄
Java 入門指南 V2.00 電子書
Java 速查手冊電子書
Java 教材目錄
JavaScript 教材目錄
Objective-C 入門指南 V2.00 電子書
Objective-C 速查手冊電子書
Objective-C 教材目錄
Perl 入門指南 V2.00 電子書
Perl 速查手冊電子書
Perl 教材目錄
PHP 入門指南 V2.00 電子書
PHP 速查手冊電子書
PHP 教材目錄
Python 新手之旅 V1.10 (Google Play)
Python 入門指南 V2.00 電子書
Python 速查手冊電子書
Python 教材目錄
Ruby 入門指南 V2.00 電子書
Ruby 速查手冊電子書
Ruby 教材目錄
Swift 入門指南 V1.00 電子書
Swift 速查手冊電子書

若您完全沒有電腦的基本概念,您可以先參考筆者另一份以 Python 2.5.2 為教學語言的

標記語言教材


HTML 5 入門指南 V2.00 電子書
HTML 5 速查手冊電子書
舊 HTML 教材目錄
CSS 的一堂課 V1.00 電子書 (Google Play)
舊 CSS 教材目錄

其他,關於本站所使用的語法高亮度


The End

五月 23, 2016
» 九份基隆山東峰

好久沒參加健行樂的活動了,聽說五月份的健行是有史以來最難的一次。想到當初傻傻地去爬南北插縱走,應該不會有比那還要難的路線了吧,所以就很自然地填了報名表。

到了出發的前一天才決定開車去。仔細看一下行程,原來要去的是基隆山,而且原來基隆山就在九份旁(為什麼不是在基隆呢?)。集合的時間是早上九點半,不過我怕到九份後沒有地方停車,所以七點左右就出門。結果車程五十分左右就到九份了。眼看離集合的時間還有一個半小時,而且店家也都還沒開。想想,乾脆直接先上基隆山頂納涼,不然一直在登山口等也不是個辦法。

從登山口到山頂大約只花了半小時,途中還有空檔可以讓我拍拍照。一路上蝴蝶很多,大都是蛺蝶類,在山頂時,也有一些鳳蝶飛來飛去。很幸運地可以拍到黑端豹斑蝶的近照,還有一對正在交配中。當它們飛的時候,我發現其中一隻把翅膀貼得緊緊的,完全靠另一隻的動力前進。

到達山頂後,果然有涼快一點點點,但是柵欄上的溫度計卻顯示目前氣溫是三十幾度。

» 五四縱走的感想

O 一直以為有在運動,體力應該愈來愈好才對,但最近接二連三地感覺到其實自己的體力沒有想像中的好:半馬跑得很辛苦,全馬速度出不來,連爬個山也是吊車尾。


O 不能再擺爛,都只靠隊友在帶路找路。這次的路線,如果沒有走錯的話,可以少走三四公里的路,少上下爬昇下降很多公尺,我應該就可以比較不會走到氣力耗盡。這兩天上網找了一下,其實只要花一點點時間,就可以把別人的路線下載下來,放到手機裡,連同地圖也一起抓下來。這樣子在爬山時,只要不時檢查一下自己是不是還在正確的路上,就可以不用一直擔心是不是走歪了,或是走太慢。只要跟別人的路線和花的時間稍做比較就可以。

O 爬山,不是我的興趣;拍照才是。但是,如果連爬完山的體力都沒有的話,那就別想要有什麼本事可以拍出像樣的照片。拍照,是在爬山行有餘力時,才做的事。

O 明明就離終點還很遠,隊友就是有辦法硬凹再來就好走了,快到了,再過xxx公尺就到xxx了。讓我在覺得自己已經沒有力氣了的情況下,硬是再走了好幾個小時。而自己的身體也比自己想像中的還耐操,在這種情況下持續上昇下降,都沒有腳抽筋。更神奇的是,隔天竟然沒有鐵腿。看來,我除了要練體力外,還要練練自己堅持到底的精神。

五月 14, 2016
» 東京島 -- 桐野夏生

接連著看第二本桐野夏生的小說,發現跟前一本"異常"有些相似之處。故事中也是有透過某些角色的記錄來了解他的想法。整個故事在幾個主角的角度間切換,一開始是夫妻檔的清子,再來是渡邊。場景設定在某個無人的小島,一群人因為不同的理由漂游到上頭,開始了長達多年的生活。

在現實世界中的限制,權利,地位全都被打破了,有了新的規則。儘管生活在無人島上,但人性還是一樣沒變,有私心,有貪婪,有迷惘。

難得可以一口氣看完一本書。接下來應該要休息一下了。

biggo.com.tw

A Django site.