<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearch/1.1/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0' gd:etag='W/&quot;AkUER3oycCp7ImA9WhNRF00.&quot;'><id>tag:blogger.com,1999:blog-2478030962868352814</id><updated>2012-11-12T16:16:46.498+08:00</updated><category term='GAE'/><title>Angel Code</title><subtitle type='html'>I'm Joe Angel. I like coding and interesting in designing and developing API.
So, There are something about programming and tool articles.
Also, Some daily will be here!</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://angel10330.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2478030962868352814/posts/default?redirect=false&amp;v=2'/><link rel='alternate' type='text/html' href='http://angel10330.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Angel</name><uri>http://www.blogger.com/profile/15673839023700265796</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>10</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry gd:etag='W/&quot;C04HRH45fip7ImA9WhJUFUk.&quot;'><id>tag:blogger.com,1999:blog-2478030962868352814.post-6005491717534235879</id><published>2012-09-13T21:12:00.001+08:00</published><updated>2012-09-13T21:12:15.026+08:00</updated><app:edited xmlns:app='http://www.w3.org/2007/app'>2012-09-13T21:12:15.026+08:00</app:edited><title>get file basename</title><content type='html'>&lt;br /&gt;Two ways for getting base name frome file path.&lt;br /&gt;&lt;br /&gt;/* way 1by Rifur */&lt;br /&gt;static const char * _get_file_baseName(const char *str, int len)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for( ; str[len-1] != '/' &amp;amp;&amp;amp; len &amp;gt; 0; --len );&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return &amp;amp;str[len]; &lt;br /&gt;}&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;/* way 2 */&lt;br /&gt;static const char * gnu_basename(const char *path)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; const char *base = strrchr(path, '/');&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return base ? base+1 : path;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2478030962868352814-6005491717534235879?l=angel10330.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://angel10330.blogspot.com/feeds/6005491717534235879/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://angel10330.blogspot.com/2012/09/get-file-basename.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2478030962868352814/posts/default/6005491717534235879?v=2'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2478030962868352814/posts/default/6005491717534235879?v=2'/><link rel='alternate' type='text/html' href='http://angel10330.blogspot.com/2012/09/get-file-basename.html' title='get file basename'/><author><name>Angel</name><uri>http://www.blogger.com/profile/15673839023700265796</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry gd:etag='W/&quot;A0QMQX8_fSp7ImA9WhJUFU4.&quot;'><id>tag:blogger.com,1999:blog-2478030962868352814.post-617372985759321038</id><published>2012-09-13T20:29:00.002+08:00</published><updated>2012-09-13T20:29:40.145+08:00</updated><app:edited xmlns:app='http://www.w3.org/2007/app'>2012-09-13T20:29:40.145+08:00</app:edited><title>htaccess don't work no apache2, CustomLog don't dork</title><content type='html'>&lt;br /&gt;&lt;br /&gt;今天寫網頁時，發生了兩個問題：&lt;br /&gt;1. .htaccess 沒有正常工作&lt;br /&gt;2. 自訂 CustomLog ，不會正常輸出 log 內容 ( 有產生 log 檔案，但檔案內容一直都是空的 )&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;第一個問題，原因是：Using apache2 on a Ubuntu, the .htaccess does not work !&lt;br /&gt;reference : &lt;a href="https://www.dokuwiki.org/security"&gt;https://www.dokuwiki.org/security&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;解決方法如下：&lt;br /&gt;&lt;br /&gt;In the /etc/apache2/sites-available you need to modify the file default (or the file default-ssl if you use https rather than http) &lt;br /&gt;&lt;br /&gt;Default for AllowOverride in the &amp;lt;Directory /var/www/&amp;gt; is none, should be all&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;第二個問題的解決方法：&lt;br /&gt;別在 apache.conf 寫 CustomLog 腳本，要寫在這個檔案 &lt;br /&gt;&amp;nbsp;/etc/apache2/sites-available/default 才會動&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2478030962868352814-617372985759321038?l=angel10330.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://angel10330.blogspot.com/feeds/617372985759321038/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://angel10330.blogspot.com/2012/09/htaccess-dont-work-no-apache2-customlog.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2478030962868352814/posts/default/617372985759321038?v=2'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2478030962868352814/posts/default/617372985759321038?v=2'/><link rel='alternate' type='text/html' href='http://angel10330.blogspot.com/2012/09/htaccess-dont-work-no-apache2-customlog.html' title='htaccess don&apos;t work no apache2, CustomLog don&apos;t dork'/><author><name>Angel</name><uri>http://www.blogger.com/profile/15673839023700265796</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry gd:etag='W/&quot;Dk4ASHk9fip7ImA9WhJQEUk.&quot;'><id>tag:blogger.com,1999:blog-2478030962868352814.post-9198399990166601888</id><published>2012-07-24T23:49:00.000+08:00</published><updated>2012-07-24T23:49:09.766+08:00</updated><app:edited xmlns:app='http://www.w3.org/2007/app'>2012-07-24T23:49:09.766+08:00</app:edited><title>安裝及設定 LAMP ( Linux + Apache + MySQL + PHP )</title><content type='html'>&lt;br /&gt;&lt;br /&gt;[前言]&lt;br /&gt;LAMP 是縮寫，通常分別指以下自由軟體：&lt;br /&gt;&lt;br /&gt;Linux：作業系統&lt;br /&gt;Apache：網頁伺服器&lt;br /&gt;MySQL：資料庫管理系統 / 資料庫伺服器&lt;br /&gt;PHP：腳本語言&lt;br /&gt;&lt;br /&gt;Michael Kunze 在一篇為德國電腦雜誌c't（1998，第12期，230頁）而寫的文章中使用了縮略語LAMP。這篇文章意在展示一系列的自由軟體成為了商業包的替換物。由於IT世界眾所周知的對縮寫的愛好，Kunze提出LAMP這一容易被市場接受的術語來普及自由軟體的使用。[1]&lt;br /&gt;&lt;br /&gt;[安裝設定]&lt;br /&gt;安裝以下套件&lt;br /&gt;apache2&lt;br /&gt;mysql-server&lt;br /&gt;php5&lt;br /&gt;php5-mysql&lt;br /&gt;php5-gd&lt;br /&gt;phpmyadmin&lt;br /&gt;&lt;br /&gt;安裝指令，以 debian 系統為例&lt;br /&gt;$ sudo apt-get install apache2 mysql-server php5 php5-mysql php5-gd phpmyadmin&lt;br /&gt;&lt;br /&gt;注意&lt;br /&gt;安裝過程中，會詢問 mysql root 密碼，請設定好密碼。&lt;br /&gt;&lt;br /&gt;[後記]&lt;br /&gt;筆者先把安裝的套件寫出來，稍候補上設定過程。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[引註資料]&lt;br /&gt;
[1] &lt;a href="http://zh.wikipedia.org/wiki/LAMP"&gt;http://zh.wikipedia.org/wiki/LAMP&lt;/a&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2478030962868352814-9198399990166601888?l=angel10330.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://angel10330.blogspot.com/feeds/9198399990166601888/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://angel10330.blogspot.com/2012/07/lamp-linux-apache-mysql-php.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2478030962868352814/posts/default/9198399990166601888?v=2'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2478030962868352814/posts/default/9198399990166601888?v=2'/><link rel='alternate' type='text/html' href='http://angel10330.blogspot.com/2012/07/lamp-linux-apache-mysql-php.html' title='安裝及設定 LAMP ( Linux + Apache + MySQL + PHP )'/><author><name>Angel</name><uri>http://www.blogger.com/profile/15673839023700265796</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry gd:etag='W/&quot;DUUHQH46fyp7ImA9WhJREUQ.&quot;'><id>tag:blogger.com,1999:blog-2478030962868352814.post-8166296240322303899</id><published>2012-07-14T00:33:00.002+08:00</published><updated>2012-07-14T00:33:51.017+08:00</updated><app:edited xmlns:app='http://www.w3.org/2007/app'>2012-07-14T00:33:51.017+08:00</app:edited><title>Git + Dropbox，在 Dropbox 上建立 Git Server DB</title><content type='html'>&lt;br /&gt;
[前言] &lt;br /&gt;
Git 的強大版本控制、Dropbox 免費雲檔案儲存服務，是無人不曉的！&lt;br /&gt;&lt;br /&gt;本篇文章將教您如何在 Dropbox 上建立 Git Server DB！&lt;br /&gt;&lt;br /&gt;如果對於 Git 、 Doprpbox 想多了解如何使用，可以參考下列文章：&lt;br /&gt;&lt;br /&gt;關於 Git 使用方式，可以看看這份簡報&lt;br /&gt;&lt;a href="http://www.slideshare.net/littlebtc/git-5528339"&gt;http://www.slideshare.net/littlebtc/git-5528339&lt;/a&gt;&lt;br /&gt;Littlebtc ( Hsiao-Ting Yu )&lt;br /&gt;&lt;br /&gt;Dropbox 使用方式可以參考這篇文章&lt;br /&gt;&lt;a href="http://blog.xuite.net/yh96301/blog/36409663-Dropbox%E5%85%8D%E8%B2%BB%E7%A9%BA%E9%96%93"&gt;http://blog.xuite.net/yh96301/blog/36409663-Dropbox%E5%85%8D%E8%B2%BB%E7%A9%BA%E9%96%93&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[範例教學]&lt;br /&gt;
範例環境：Linux&lt;br /&gt;
假設 Dropbox 放在你的家目錄底下：~/Dropbox&lt;br /&gt;
&lt;br /&gt;
你可以如下方式設定好 git + dropbox !!&lt;br /&gt;
&lt;br /&gt;
# 安裝必要套件&lt;br /&gt;
$ sudo apt-get install git git-core&lt;br /&gt;
&lt;br /&gt;# 在 Dropbox 底下建立 git/test 目錄&lt;br /&gt;$ mkdir -p ~/Dropbox/git/test&lt;br /&gt;
&lt;br /&gt;# 將 git/test 初始化&lt;br /&gt;$ cd ~/Dropbox/git/test&lt;br /&gt;$ git init-db --bare&lt;br /&gt;
&lt;br /&gt;# 建立 ~/git ，準備 clone test&lt;br /&gt;$ mkdir -p ~/git/&lt;br /&gt;$ cd ~/git&lt;br /&gt;
&lt;br /&gt;# clone test&lt;br /&gt;$ git clone ~/Dropbox/git/test&lt;br /&gt;$ cd test&lt;br /&gt;
&lt;br /&gt;# 第一次使用，建立一個檔案並 push&lt;br /&gt;$ touch README&lt;br /&gt;$ git add README&lt;br /&gt;$ git commit -m "Init"&lt;br /&gt;$ git push origin master:refs/heads/master&lt;br /&gt;
&lt;br /&gt;# 大功告成 !&lt;br /&gt;# 以後就可以使用如下指令 push 啦！&lt;br /&gt;
$ git push&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[後記]&lt;br /&gt;
在 Dropbox 上建立好專屬的 git server 後，&lt;br /&gt;
如果開發專案/專題，可將 Dropbox/git/xxx 專案目錄分享給其他開發者，&lt;br /&gt;
方便協同開發！&lt;br /&gt;
Happy git, Happy coding!&lt;br /&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2478030962868352814-8166296240322303899?l=angel10330.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://angel10330.blogspot.com/feeds/8166296240322303899/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://angel10330.blogspot.com/2012/07/git-dropbox-dropbox-git-server-db.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2478030962868352814/posts/default/8166296240322303899?v=2'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2478030962868352814/posts/default/8166296240322303899?v=2'/><link rel='alternate' type='text/html' href='http://angel10330.blogspot.com/2012/07/git-dropbox-dropbox-git-server-db.html' title='Git + Dropbox，在 Dropbox 上建立 Git Server DB'/><author><name>Angel</name><uri>http://www.blogger.com/profile/15673839023700265796</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry gd:etag='W/&quot;DUICRns9eyp7ImA9WhJREUQ.&quot;'><id>tag:blogger.com,1999:blog-2478030962868352814.post-3176717685458573618</id><published>2012-07-13T04:29:00.000+08:00</published><updated>2012-07-14T00:39:27.563+08:00</updated><app:edited xmlns:app='http://www.w3.org/2007/app'>2012-07-14T00:39:27.563+08:00</app:edited><title>編譯 新酷音 libchewing</title><content type='html'>跟了 TSoC 計劃&lt;br /&gt;
&lt;br /&gt;
題目是，將 新酷音改良、支援多動態詞庫，並探討多詞庫與辨識率之關係。&lt;br /&gt;
&lt;br /&gt;
編譯時使用 Ubuntu / Kubuntu 11.x 遇到 libncursesw5-dev 都會錯誤&lt;br /&gt;
原來是 Ubuntu / Kubuntu沒把 ncursesw 包好...&lt;br /&gt;
&lt;br /&gt;
改用 12.x 版就沒問題了！&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1. 先抓 libchewing Repository&lt;br /&gt;
# &lt;a href="https://github.com/chewing/libchewing"&gt;https://github.com/chewing/libchewing&lt;/a&gt;&lt;br /&gt;
$ git clone https://github.com/chewing/libchewing.git&lt;br /&gt;
&lt;br /&gt;
2. 安裝如下套件&lt;br /&gt;
gcc&lt;br /&gt;
build-essential&lt;br /&gt;
automake &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; # for autoconf&lt;br /&gt;
libtool &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; # for autoconf&lt;br /&gt;
check&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; # for check&lt;br /&gt;
libncursesw5-dev&amp;nbsp; # for ncursesw&lt;br /&gt;
libgconf2-dev &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; # for autoconf &amp;amp; m4&lt;br /&gt;
&lt;br /&gt;
3. 安裝完後，到 libchewing 資料夾，下指令編譯&lt;br /&gt;
$ ./autogen.sh&lt;br /&gt;
$ ./configure&lt;br /&gt;
$ make&lt;br /&gt;
&lt;br /&gt;
4. 編譯完成！ 來跑測試程式&lt;br /&gt;
$ cd test&lt;br /&gt;
$ make install&lt;br /&gt;
&lt;br /&gt;
5. 測試程式使用方式，可以看 ./test/README&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
我們正在修改的程式，放在這個 github 位置&lt;br /&gt;
# &lt;a href="https://github.com/seachaos/libchewing"&gt;https://github.com/seachaos/libchewing &lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
目前支援「載入多靜態、動態詞庫」功能，&lt;br /&gt;
正在實作「分享 ( 匯出 ) 詞庫」及「加入多個詞庫，對原本的辨識率是否有幫助」的功能！&lt;br /&gt;
&lt;br /&gt;
如有任何想法，歡迎透過下列方式指教&lt;br /&gt;
&lt;a href="https://groups.google.com/group/chewing-devel"&gt;https://groups.google.com/group/chewing-devel&lt;/a&gt; &lt;br /&gt;
irc.freenode.net#im-dev&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2478030962868352814-3176717685458573618?l=angel10330.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://angel10330.blogspot.com/feeds/3176717685458573618/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://angel10330.blogspot.com/2012/07/libchewing.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2478030962868352814/posts/default/3176717685458573618?v=2'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2478030962868352814/posts/default/3176717685458573618?v=2'/><link rel='alternate' type='text/html' href='http://angel10330.blogspot.com/2012/07/libchewing.html' title='編譯 新酷音 libchewing'/><author><name>Angel</name><uri>http://www.blogger.com/profile/15673839023700265796</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total><georss:featurename>台灣</georss:featurename><georss:point>23.69781 120.960515</georss:point><georss:box>19.977947 115.906804 27.417673 126.01422600000001</georss:box></entry><entry gd:etag='W/&quot;CUEAQH44eSp7ImA9WhdRGUk.&quot;'><id>tag:blogger.com,1999:blog-2478030962868352814.post-7072220762984021824</id><published>2011-08-10T10:33:00.000+08:00</published><updated>2011-08-10T10:34:01.031+08:00</updated><app:edited xmlns:app='http://www.w3.org/2007/app'>2011-08-10T10:34:01.031+08:00</app:edited><title>How to build Android application package (.apk) from the command line using the SDK tools + continuously integrated using CruiseControl.</title><content type='html'>&lt;a href="http://asantoso.wordpress.com/2009/09/15/how-to-build-android-application-package-apk-from-the-command-line-using-the-sdk-tools-continuously-integrated-using-cruisecontrol/"&gt;How to build Android application package (.apk) from the command line using the SDK tools + continuously integrated using CruiseControl.&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2478030962868352814-7072220762984021824?l=angel10330.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://angel10330.blogspot.com/feeds/7072220762984021824/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://angel10330.blogspot.com/2011/08/how-to-build-android-application.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2478030962868352814/posts/default/7072220762984021824?v=2'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2478030962868352814/posts/default/7072220762984021824?v=2'/><link rel='alternate' type='text/html' href='http://angel10330.blogspot.com/2011/08/how-to-build-android-application.html' title='How to build Android application package (.apk) from the command line using the SDK tools + continuously integrated using CruiseControl.'/><author><name>Angel</name><uri>http://www.blogger.com/profile/15673839023700265796</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry gd:etag='W/&quot;DEIBR3w6fip7ImA9WhdSEkg.&quot;'><id>tag:blogger.com,1999:blog-2478030962868352814.post-6191080571053841033</id><published>2011-07-21T21:55:00.000+08:00</published><updated>2011-07-21T21:55:56.216+08:00</updated><app:edited xmlns:app='http://www.w3.org/2007/app'>2011-07-21T21:55:56.216+08:00</app:edited><title>Android 的學習流水帳: android 通訊錄存取(取得連絡人)</title><content type='html'>&lt;a href="http://abow520.blogspot.com/2011/07/android_12.html?spref=bl"&gt;Android 的學習流水帳: android 通訊錄存取(取得連絡人)&lt;/a&gt;: "在網路上參考的一些範例來取得連絡人資料   Reference   ContentResolver  (This class provides applications access to the content model)  ContactsContract.Contacts..."&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2478030962868352814-6191080571053841033?l=angel10330.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://abow520.blogspot.com/2011/07/android_12.html?spref=bl' title='Android 的學習流水帳: android 通訊錄存取(取得連絡人)'/><link rel='replies' type='application/atom+xml' href='http://angel10330.blogspot.com/feeds/6191080571053841033/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://angel10330.blogspot.com/2011/07/android-android.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2478030962868352814/posts/default/6191080571053841033?v=2'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2478030962868352814/posts/default/6191080571053841033?v=2'/><link rel='alternate' type='text/html' href='http://angel10330.blogspot.com/2011/07/android-android.html' title='Android 的學習流水帳: android 通訊錄存取(取得連絡人)'/><author><name>Angel</name><uri>http://www.blogger.com/profile/15673839023700265796</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry gd:etag='W/&quot;AkQEQHY5eSp7ImA9Wx9UE0Q.&quot;'><id>tag:blogger.com,1999:blog-2478030962868352814.post-1304183634680438178</id><published>2011-02-11T12:25:00.000+08:00</published><updated>2011-02-11T12:25:01.821+08:00</updated><app:edited xmlns:app='http://www.w3.org/2007/app'>2011-02-11T12:25:01.821+08:00</app:edited><title>Krilo 的筆記本: Hello , PyQt4</title><content type='html'>&lt;a href="http://kriloc.blogspot.com/2009/09/hello-pyqt4.html"&gt;Krilo 的筆記本: Hello , PyQt4&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2478030962868352814-1304183634680438178?l=angel10330.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://kriloc.blogspot.com/2009/09/hello-pyqt4.html' title='Krilo 的筆記本: Hello , PyQt4'/><link rel='replies' type='application/atom+xml' href='http://angel10330.blogspot.com/feeds/1304183634680438178/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://angel10330.blogspot.com/2011/02/krilo-hello-pyqt4.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2478030962868352814/posts/default/1304183634680438178?v=2'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2478030962868352814/posts/default/1304183634680438178?v=2'/><link rel='alternate' type='text/html' href='http://angel10330.blogspot.com/2011/02/krilo-hello-pyqt4.html' title='Krilo 的筆記本: Hello , PyQt4'/><author><name>Angel</name><uri>http://www.blogger.com/profile/15673839023700265796</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry gd:etag='W/&quot;DU8ARXgycSp7ImA9Wx9REUk.&quot;'><id>tag:blogger.com,1999:blog-2478030962868352814.post-1858009829622238654</id><published>2010-12-12T17:57:00.000+08:00</published><updated>2010-12-12T17:57:24.699+08:00</updated><app:edited xmlns:app='http://www.w3.org/2007/app'>2010-12-12T17:57:24.699+08:00</app:edited><title>Blog語法研究室: 讓Blogspot 也有數字分頁功能</title><content type='html'>&lt;a href="http://blogger-script-study.blogspot.com/2010/09/blogspot-pagenavi.html?spref=bl"&gt;Blog語法研究室: 讓Blogspot 也有數字分頁功能&lt;/a&gt;: "經常看到別人的部落格裡有【數字分頁功能表】，看起來又酷又炫，而且又好用，比起 Blogger/Blogspot 內建的分頁實在好用太多了，不過找來找去都只有 Wordpress 的外掛版本，讓使用 Blogspot 的網友望之興歎！這裡幫大家找到了一個 Blogspot 專用的..."&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2478030962868352814-1858009829622238654?l=angel10330.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://blogger-script-study.blogspot.com/2010/09/blogspot-pagenavi.html?spref=bl' title='Blog語法研究室: 讓Blogspot 也有數字分頁功能'/><link rel='replies' type='application/atom+xml' href='http://angel10330.blogspot.com/feeds/1858009829622238654/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://angel10330.blogspot.com/2010/12/blog-blogspot.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2478030962868352814/posts/default/1858009829622238654?v=2'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2478030962868352814/posts/default/1858009829622238654?v=2'/><link rel='alternate' type='text/html' href='http://angel10330.blogspot.com/2010/12/blog-blogspot.html' title='Blog語法研究室: 讓Blogspot 也有數字分頁功能'/><author><name>Angel</name><uri>http://www.blogger.com/profile/15673839023700265796</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry gd:etag='W/&quot;D0QGRHg-eSp7ImA9Wx9REk0.&quot;'><id>tag:blogger.com,1999:blog-2478030962868352814.post-8863074808388153634</id><published>2010-12-12T16:16:00.000+08:00</published><updated>2010-12-13T09:55:25.651+08:00</updated><app:edited xmlns:app='http://www.w3.org/2007/app'>2010-12-13T09:55:25.651+08:00</app:edited><category scheme='http://www.blogger.com/atom/ns#' term='GAE'/><title>Google App Engine: Simple Guest Book v1.1</title><content type='html'>&lt;h1&gt;&lt;br /&gt;Simple Guest Book v1.1&lt;/h1&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;簡易的留言板&lt;br /&gt;&lt;br /&gt;已做 防 HTML JavaScript injection&lt;br /&gt;&lt;br /&gt;Demo URL: &lt;a herf="http://angel10330.appspot.com/"&gt;angel10330.appspot.com&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;檔案結構:&lt;br /&gt;./app.yaml&lt;br /&gt;./index.yaml&lt;br /&gt;./favicon.ico&lt;br /&gt;./main.py&lt;br /&gt;./router.py&lt;br /&gt;./main.html&lt;br /&gt;./err.html&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;app.yaml&lt;br /&gt;&lt;pre class="brush:yaml;" name="code"&gt;application: angel10330&lt;br /&gt;version: 1&lt;br /&gt;api_version: 1&lt;br /&gt;runtime: python&lt;br /&gt;&lt;br /&gt;handlers:&lt;br /&gt;#- url: /&lt;br /&gt;#  script: main.py&lt;br /&gt;#&lt;br /&gt;- url: /err\.html&lt;br /&gt;&amp;nbsp;&amp;nbsp;static_files: err.html&lt;br /&gt;&amp;nbsp;&amp;nbsp;upload: err.html&lt;br /&gt;- url: /.*&lt;br /&gt;&amp;nbsp;&amp;nbsp;script: main.py #router.py&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;main.py&lt;br /&gt;&lt;pre class="brush:python;" name="code"&gt;#!/usr/bin/env python&lt;br /&gt;#&lt;br /&gt;# Copyright 2007 Google Inc.&lt;br /&gt;#&lt;br /&gt;# Licensed under the Apache License, Version 2.0 (the "License");&lt;br /&gt;# you may not use this file except in compliance with the License.&lt;br /&gt;# You may obtain a copy of the License at&lt;br /&gt;#&lt;br /&gt;#     http://www.apache.org/licenses/LICENSE-2.0&lt;br /&gt;#&lt;br /&gt;# Unless required by applicable law or agreed to in writing, software&lt;br /&gt;# distributed under the License is distributed on an "AS IS" BASIS,&lt;br /&gt;# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.&lt;br /&gt;# See the License for the specific language governing permissions and&lt;br /&gt;# limitations under the License.&lt;br /&gt;#&lt;br /&gt;import cgi&lt;br /&gt;import wsgiref.handlers&lt;br /&gt;from google.appengine.ext import db&lt;br /&gt;from google.appengine.ext import webapp&lt;br /&gt;from google.appengine.ext.webapp import template&lt;br /&gt;#from google.appengine.ext.webapp import util&lt;br /&gt;&lt;br /&gt;class Shout(db.Model):&lt;br /&gt;&amp;nbsp;&amp;nbsp;message = db.StringProperty(required=True)&lt;br /&gt;&amp;nbsp;&amp;nbsp;when = db.DateTimeProperty(auto_now_add=True)&lt;br /&gt;&amp;nbsp;&amp;nbsp;who = db.StringProperty()&lt;br /&gt;&lt;br /&gt;class MainHandler(webapp.RequestHandler):&lt;br /&gt;&amp;nbsp;&amp;nbsp;def get(self):&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;shouts = db.GqlQuery('SELECT * FROM Shout ORDER BY when DESC')&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;values = {'shouts': shouts}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#self.response.out.write('Hello!!')&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#self.response.out.write(template.render('main.html', {}))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.response.out.write(template.render('main.html', values))&lt;br /&gt;&amp;nbsp;&amp;nbsp;def post(self):&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;shout = Shout(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;message=cgi.escape(self.request.get(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'message')),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;who=cgi.escape(self.request.get(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'who')))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;shout.put()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#self.response.out.write('posted!')&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.redirect('/')&lt;br /&gt;&lt;br /&gt;def main():&lt;br /&gt;&amp;nbsp;&amp;nbsp;app = webapp.WSGIApplication([(r'.*', MainHandler)],&lt;br /&gt;&amp;nbsp;&amp;nbsp;debug=True)&lt;br /&gt;&amp;nbsp;&amp;nbsp;#util.run_wsgi_app(application)&lt;br /&gt;&amp;nbsp;&amp;nbsp;wsgiref.handlers.CGIHandler().run(app)&lt;br /&gt;&lt;br /&gt;if __name__ == '__main__':&lt;br /&gt;&amp;nbsp;&amp;nbsp;main()&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;router.py&lt;br /&gt;&lt;pre class="brush:python;" name="code"&gt;#!/usr/bin/env python&lt;br /&gt;#&lt;br /&gt;&lt;br /&gt;#from google.appengine.ext import webapp&lt;br /&gt;#from google.appengine.ext.webapp import util&lt;br /&gt;from google.appengine.api import urlfetch&lt;br /&gt;&lt;br /&gt;#class MainHandler(webapp.RequestHandler):&lt;br /&gt;#    def get(self):&lt;br /&gt;#        self.response.out.write('router.')&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;def main():&lt;br /&gt;&amp;nbsp;&amp;nbsp;print '[router]\n'&lt;br /&gt;&amp;nbsp;&amp;nbsp;#result = urlfetch.fetch(url)&lt;br /&gt;&lt;br /&gt;if __name__ == '__main__':&lt;br /&gt;&amp;nbsp;&amp;nbsp;main()&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;main.html&lt;br /&gt;&lt;pre class="brush:html;" name="code"&gt;&lt;h1&gt;Hello word&lt;/h1&gt;&lt;br /&gt;&lt;h2&gt;Very Simple Message v1.1&lt;/h2&gt;&lt;br /&gt;&lt;h3&gt;Author: Angel&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;&lt;br /&gt;&lt;form action="" method="post" accept-charset="utf8"&gt;&lt;br /&gt;&lt;p&gt;From: &lt;input type="text" name="who" value="" id="who"&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Messages: &lt;input type="text" name="message" value="" id="message"&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;input type="submit" value="Shout!"&gt;&lt;/p&gt;&lt;br /&gt;&lt;/form&gt;&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;&lt;br /&gt;{% for shout in shouts %}&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;{{shout.message}}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;from&lt;br /&gt;&amp;nbsp;&amp;nbsp;{% ifequal shout.who None %}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Anonymous&lt;br /&gt;&amp;nbsp;&amp;nbsp;{% else %}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{{shout.who}}&lt;br /&gt;&amp;nbsp;&amp;nbsp;{% endifequal %}&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;{% endfor%}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;err.html&lt;br /&gt;&lt;pre class="brush:html;" name="code"&gt;error!&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;test&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2478030962868352814-8863074808388153634?l=angel10330.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://angel10330.blogspot.com/feeds/8863074808388153634/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://angel10330.blogspot.com/2010/12/test.html#comment-form' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2478030962868352814/posts/default/8863074808388153634?v=2'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2478030962868352814/posts/default/8863074808388153634?v=2'/><link rel='alternate' type='text/html' href='http://angel10330.blogspot.com/2010/12/test.html' title='Google App Engine: Simple Guest Book v1.1'/><author><name>Angel</name><uri>http://www.blogger.com/profile/15673839023700265796</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry></feed>