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