目前分類:編程 (4)

瀏覽方式: 標題列表 簡短摘要

前陣子買入了一部 Android 電話,心想也是時候寫些程式在機上玩玩。雖然有一定的程式開發經驗,可是寫手機程式還是新手一名。千里之行,始於足下。好!就看看應如何開始。

寫 Android App 比 iPhone App 一個方便的地方,就是不一定要以 Mac OS 來開發,我用的是 Ubuntu,當然也沒有問題。

在網上爬文了一會,由於 Android App 是以 Java 來編寫的,一般開發環境都是 Java Development Kit 配合 Eclipse IDE。在 Ubuntu 上有點需要注意的,由於開放源碼問題,Ubuntu 所配搭的,是 OpenJDK 而不是 Oracle JDK。雖然兩個 JDK 基本上具有相同功能,但始終也是兩個獨立的軟體,在網路上,有不少人都會建議改用 Oracle JDK,冀可消除一些因兩者間些微分別所引申出的問題。可惜的是,Oracle 官方並沒有提供類似 PPA 方式來安裝,懶懶的我也就想說,一動不如一靜好了。

說到這,在安裝 Eclipse 時,也當然經由 Ubuntu Software Center 來安裝。安裝後,便要安裝 ADT Plugin:

https://dl-ssl.google.com/android/eclipse/

但也別心急的按 Next,繼續前,請再加入:

http://download.eclipse.org/releases/indigo/

就可以了。

理論上,到些便大功告成了。重新開啟 Eclipse 看看?咦!為甚麼會出現錯誤呢?

再查了一回,原來這是因為我所用的是 64-bit 的系統,不能直接執行 32-bit 的程式,只要安裝 IA32 便可:

sudo apt-get install ia32-lib

再次開啟 Eclipse,所有錯誤都不見了!

小輝 發表在 痞客邦 留言(0) 人氣()

在架設伺服器時,若預計的流量不大,通常會把網頁伺服器和數據伺服器設成同一台電腦上,以減低成本。

在主機上,如果我們要測試首頁,會到這個網址:

http://localhost/

又或是這一個:

http://127.0.0.1/

這兩個網址當然沒有分別啦!硬要說的話,便是 losthost 是一個 domain name,要經過解析,才會變成 127.0.0.1。然而,這一基本的解析,早已儲存和系統中,不用 DNS 也能解析到。

 

好了,有了網頁伺服器,現在要連接 MySQL 伺服器:

mysql_connect('localhost', 'user', 'password');

很間單吧!

像測試首頁時一樣,這一個也可以連到本機的 MySQL 伺服器:

mysql_connect('localhost', 'user', 'password');

這兩個做法當然沒有分別啦!其實不然。雖然上文已指出 localhost 就是 127.0.0.1 的 domain name,但就 mysql_connect 這函式來說,其運作原理是有分別的!

 

根據 PHP 的說明,當伺服器為 localhost 時,PHP 的 MySQL 函庫會以 local socket 或在 Windows 中的 named pipe 來連接 MySQL 伺服器;而當伺服器為 127.0.0.1 時,它才會以 TCP/IP 的方式來連接。

說了大半天,既然 localhost 指的是本機,127.0.0.1 指的也是本機,那分別在哪?會有用不到 local socket 而非要用到 TCP/IP 的時候嗎?有,就是當你並不是身在主機,只是用 ssh tunneling 的方式把 MySQL 伺服器的 port 調到你所在的機器上時,這時你的機器並沒有 local socket,但你要這樣才可以登入到只限本機連接的使用者中。

 (c.f. http://php.net/manual/en/function.mysql-connect.php)

小輝 發表在 痞客邦 留言(0) 人氣()

用 PHP 來列出數據庫中的一些資料,這些字串有長有短,放在同一個列表中,會使得列表時闊時窄,不太好看。還好的是,我們並不是要準確地知道這些字串的全部內容,大約查看一下便可。這情況下,最自然的做法,便是把字串一律限於特定的長度內,過長的字串,以尾綴 ... 來提示。

其實這是很常見的做法,phpMyAdmin 也是用這種方式來顯示數據的。如果在純英數的環境下,要自行編寫這樣的省略法式,做法並不難。但是,如字串中有中英混雜,由於一般來說中文字會佔兩個英數字的闊度關係,增加了把字串做省略的難度。困難在於我們要判定每一個字為中文還是英數,以便我們計算出應在那個位置略去字串。

這看來的確是件苦差,幸好貼心的 PHP 有內建函式去處理這問題:mb_strimwidth,還打正旗號是適合多位元字串而設。

string mb_strimwidth ( string $str , int $start , int $width [, string $trimmarker [, string $encoding ]] )

  • $str 是要省略的字串。
  • $start 是開始的位置,如字串頭開始,則 $start 為 0。
  • $width 是想要的字串長度,即長度上限,注意:此長度包括尾綴提示!
  • $trimmarker 是在過長串字的尾綴提示。
  • $encoding 是字串的編碼。

例如:

echo mb_strimwidth("abcdefghij", 0, 10, "...", "UTF-8");
echo mb_strimwidth("abcdefghij", 0, 8, "...", "UTF-8");
echo mb_strimwidth("中文字串", 0, 4, "...", "UTF-8");
echo mb_strimwidth("中文字串", 0, 5, "...", "UTF-8");
echo mb_strimwidth("中文字串", 0, 6, "...", "UTF-8");
echo mb_strimwidth("中文字串", 0, 7, "...", "UTF-8");
echo mb_strimwidth("中文字串", 0, 8, "...", "UTF-8");
echo mb_strimwidth("abc中文字", 0, 8, "...", "UTF-8");

便會得到

abcdefghij
abcde...
...
中...
中...
中文...
中文字串
abc中...

(c.f. http://php.net/manual/en/function.mb-strimwidth.php)

小輝 發表在 痞客邦 留言(0) 人氣()

很多 scripting language 都可以直接在 command line 執行。如要取用 command line arguments ,應怎樣做呢?

 

Python:

import sys

print sys.argv[1]

 

PHP:

<?php

echo $argv[1];

?>

小輝 發表在 痞客邦 留言(0) 人氣()