2013年7月27日 星期六

memcached quick note

Installation

  • sudo apt-get install memcached

Command line

  •  $ telnet localhost 11211
add foo 0 0 11
hello world
STORED
get foo
VALUE foo 0 11
hello world
END
delete foo
DELETED

PHP extension

  • sudo apt-get install php5-memcached
$m = new Memcached();
$m->addServer('localhost', 11211);

$m->set('int', 99);
$m->set('string', 'a simple string');
$m->set('array', array(11, 12));
/* expire 'object' key in 5 minutes */
$m->set('object', new stdclass, time() + 300);


var_dump($m->get('int'));
var_dump($m->get('string'));
var_dump($m->get('array'));
var_dump($m->get('object'));
?>

Example from: http://www.php.net/manual/en/memcached.set.php

Reference

2013年6月3日 星期一

PHP Extensions: php-filter & php-tidy

今天介紹兩個有用的 PHP Extensions: php-filter  & php-tidy。

php-filter

這是 input validator,可以用來過濾使用者輸入的資訊,避免 XSS 攻擊。
在 Ubuntu 中,如果 PHP 版本 > 5.2 ,則已經內建了這組函式庫。

使用範例:從 GET 裡面取得 'source' 變數。也就是我們要 Filter $_GET['source'] 的值

$source = filter_input(INPUT_GET, 'source', FILTER_SANITIZE_STRING);

參考文件:http://php.net/manual/en/book.filter.php

php-tidy

這可以幫你整理/修復 HTML 碼,讓 HTML 比較好被處理。
通常用在需要 parsing HTML 的時候。

Ubuntu 安裝:sudo apt-get install php5-tidy

使用:

$config = array(
                       'indent'         => true,
                );

$tidy = new tidy();
$tidy->parseString($html, $config, 'utf8');
$tidy->cleanRepair();

$output = (string) $tidy;

參考文件:

2013年3月9日 星期六

Windows 遠端桌面連線到 Ubuntu Desktop

我使用的 Ubuntu 版本是 12.04 LTS

Windows 遠端桌面用的是 RDP Protocal。
在 Linux 上可以藉由 xrdp 這個軟體讓 Ubuntu 桌面支援這個通訊協定,這樣我們就可以利用 Windows 的遠端桌面連線 Client 連到遠端的 Ubuntu Desktop。

安裝

Ubuntu 已經包好現成的 package,裝好就可以用了。
  • sudo apt-get install xrdp

設定

不用修改設定就可以使用。設定檔在 /etc/xrdp/xrdp.ini
如果你有用防火牆,記得開啟 3389/tcp

ufw 指令
  • sudo ufw allow from 192.168.1.0/24 to any port 3389 proto tcp

現在你可以從 Windows 的機器連過去看看,應該可以正常使用了。

參考資源

2013年3月3日 星期日

Ubuntu 動物機 + dlna Server

最近身邊有一些人在玩 NAS, 我也想用手做來架一個。我的需求:
  • BT 動物機 - Headless Transmission
  • DLNA Server - minidlna
Ubuntu: 12.04 LTS

廢話不多說, 直接來裝吧。

Headless Transmission

安裝 transmission-daemon + 設定防火牆 ufw
sudo apt-get install transmission-daemon
cd /home
sudo mkdir -p ./torrents/download
sudo mkdir ./torrents/upload
sudo mkdir ./torrents/incomplete
sudo chown -R debian-transmission:debian-transmission ./torrents
sudo chmod g+w -R ./torrents/
sudo ufw allow 9091
sudo ufw allow proto tcp to any port 49152:65535
sudo /etc/init.d/transmission-daemon stop
sudo vim /etc/transmission-daemon/settings.json
設定 /etc/transmission-daemon/settings.json
"download-dir": "/home/torrents/download",
"incomplete-dir": "/home/torrents/incomplete",
"incomplete-dir-enabled": true,
"rpc-authentication-required": true,      // 需要驗證
"rpc-whitelist": "127.0.0.1,192.168.*.*", // 可以連線的 ip
"rpc-username": "你的帳戶",
"rpc-password": "你的密碼",
"umask": 2, // 讓下載的檔案 user & group 擁有相同權限
"port-forwarding-enabled": false,
"peer-port-random-on-start": true,
"upload-limit": 100,       // 上傳限制 100 K
"upload-limit-enabled": 1, // 啟用上傳限制
把你的帳戶加入 transmission 所屬 group
sudo usermod -a -G debian-transmission
讓 transmission-daemon 重新讀取設定 (當他關閉時會自動複寫 settings.json)
invoke-rc.d transmission-daemon reload
啟動 transmission-daemon
sudo service transmission-daemon start
打開瀏覽器, 輸入網址
http://:9091/transmission/web/
就可以開始用網頁操作了。

minidlna

安裝
sudo apt-get install minidlna
建立 DLNA server 檔案目錄
sudo mkdir -p /d/music
sudo mkdir -p /d/photo
sudo mkdir -p /d/video
sudo chown -R minidlna:minidlna /d/

sudo mkdir -p /var/{cache,log}/minidlna
sudo chown -R minidlna:minidlna /var/{cache,log}/
設定防火牆 ufw (我的區網是 192.168.1.*)
sudo ufw allow from 192.168.1.0/24 to any port 1900 proto udp
sudo ufw allow from 192.168.1.0/24 to any port 8200 proto tcp
設定 /etc/minidlna.conf

把下面設定註解取消,並改成設定的值
friendly_name=Ubuntu DLNA Server    # 要顯示的名稱
network_interface=eth1  # 如果不是 eth0, 請指定

media_dir=A,/d/music
media_dir=P,/d/photo
media_dir=V,/d/video

db_dir=/var/cache/minidlna
log_dir=/var/log
inotify=yes         # (default)
enable_tivo=no  # (default)
strict_dlna=no    # (default)
notify_interval=900  # (default)
serial=12345678  # (default)
model_number=1  # (default)
重建 media db & restart
sudo service minidlna stop
sudo service minidlna force-reload
sudo service minidlna start

參考資源

2013年2月17日 星期日

Nokia Symbain to Android

最近 push 老人家,把 Nokia Symbain 手機改成 Android 手機。

但是因為受害者被迫強制轉移 (直接買一台手機送他叫他用 XD),加害者當然也要幫忙把該轉的東西轉過去。
 在尋找解法的時候,也漸漸體會舊式手機在一些設計上的哲學以及厲害之處,也是智慧型手機可以藉進改善的地方。不過這是題外話。

這邊講主要的聯絡人和簡訊的方法。

工具

備份 Nokia 手機

  • 安裝 Nokia 電腦端套件
  • 將原本手機資料全部備份, 會產生一個 .NBU 檔案

讀取並解開 Nbu 檔

  • 安裝對應的 .NET Framework
  • 解開並執行 NbuExplorer
  • File -> Open -> 開啟剛剛產生的 .NBU 檔案
  • File -> Export all -> 選擇匯出目錄 (例如: exports)
    • exports/Contacts/*.vcf : 每個 vcf 就是一個聯絡人
    • exports/Messages/*/*.vmg: 每個 vmg 就是一封簡訊

將聯絡人匯入到 Gmail 通訊錄

  • 首先要把所有 vcf 合併成一個檔案
    • cd exports/Contacts
    • copy /B *.vcf output.vcf
    • output.vcf 就是合併後的檔案
  • Gmail -> 通訊錄 ->  匯入通訊錄...
  • 將 output.vcf 上傳即完成匯入動作

將簡訊匯入

ABC Amber Nokia

  • 安裝並執行 ABC Nokia
  • Open a folder with VMG files
    • 選擇 exports/Messages 或其下面某些子目錄
  • 將所有簡訊選起來
  • Export (destination) 選擇 CSV
  • 按下 Save As... 存成指定 CSV 檔案

將 CSV 轉成 SMS Backup & Restore 可以吃的 XML 格式

使用 SMS Backup & Restore 匯入簡訊

  • 將 output.xml 複製到 Android 手機裡面
  • 可用 SMS Backup & Restore 先查看要匯入的檔案再決定是否匯入

其他方法

2012年8月21日 星期二

在 Mountain Lion 上編譯 libchewing

本文參考迷途小書僮的筆記 在 mac osx 10.7 下編譯 libchewing ,成功在 Mountain Lion 上編譯 libchewing。
步驟如下:
  1. 先去 github clone 一份乾淨的 source code 回來
    • git clone https://github.com/chewing/libchewing.git
  2. 安裝 xcode
  3. 安裝 homebrew : 依照首頁的指示安裝
  4. 安裝以下套件
    • brew install autoconf automake check libtool pkg-config
  5. 開始編譯
    • cd libchewing
    • ./autogen.sh
    • ./configure
    • make
    • sudo make install

2012年6月25日 星期一

Media Center + XBOX 360 心得

幾個月前買了 Xbox 360,玩了一陣子,就放在電視旁邊生灰塵。

今天心血來潮,把最近為了要玩 D3 而重灌的 Windows 串接到 360 上面,看看微軟所謂的「多媒體中心」會是長什麼樣子。畢竟最近微軟的產品,越來越多是受到 Xbox 的影響,如 Windows phone、以及即將出爐的 Windows 8,其介面都是參考 Xbox 360 的經驗的成果。

我的 OS 是 Windows 7 ,內建 Microsoft Media Center 的程式,因此串接過程還蠻簡單的。只要打開 Xbox,進入 Media Center ,就會出現一組序號,然後再輸入到 PC Media Center 中,就完成串接了。

雖然 XBox 本身只能播放若干格式的 WMV 檔案。但使用 Media Center 是沒有此限制的,也就是說 PC 播的出來,XBox 就能夠幫你播!

聽起來還蠻厲害的。那就實際來試試看吧......

測試的結論是:非常不穩定。

我用來測試的是一個 rmvb 影片 (1080p)、XBOX 的解析度設定為 720p、Windows 裝的是 K-lite Codec Full。
  1. 如果要對影片做「暫停」、「搜尋」,都有可能讓影片播放失敗,或者是我的 PC 就當掉了 (死機) 。
  2. 另外,在觀看影片時,如果畫面場景變動過快,畫面就會有馬賽克,解析度自動下降。等動作場面平靜以後,又恢復高畫質水準。
  3. 我的 PC 和 Xbox 都是直接吃無線網路,結果播出來斷斷續續。後來我把 Xbox 用實體網路線接上 AP,才能夠順暢播放。
  4. 按鍵操作不夠直覺。我還要千辛萬苦在網路上才找到搖桿操作播放器的使用說明。而且看了說明以後,才驚呼:靠,原來暫停在這裡!
最讓我無法忍受的應該是 1。只要稍微做任何播放的操作,如最基本的暫停,播放器就會死掉。馬賽克的問題也蠻嚴重的,或許是我的 CPU 不夠力,但好歹我也是第一代 i5,應該比一些人的電腦好一點。

我的使用經驗,應該是五顆星等級的非常痛苦。

不過我在這邊卻看到了更大的商機,只能說微軟浪費了自己大好的平台資源,這一兩年難怪會被 Google、Apple 打假的。

首先分析一下,微軟有哪些平台資源:
  1. 壟斷的 PC 桌面作業系統。
  2. 豐富的多媒體播放環境 (in Windows)。
  3. 和 Sony 平分天下、體感完勝的家用遊樂器 XBox。
  4. 最近努力振作的 Windows Phone。
  5. 最近想要搞的平板 Surface。
 微軟的強項:
  1. 把所有自己的產品綁在一起賣,所以你買 A,就要買 B。你買 Office ,就要買 Windows。雖然 Office 也有 Mac 版,但 Linux 肯定是不行的。
  2. 深厚的多媒體技術:
    1. 最廣泛使用的多媒體 API: DirectX (有很多專利)
    2. 自有的媒體播放格式:WMV / WMA (想必也有很多專利)
    3. 最先進的遠端桌面播放技術:RDP (這個應該也有專利)
    4. XBox 遊戲機。遊戲一直是多媒體的極致展現,多媒體應該已經是無庸置疑了。
微軟的機會:
  1. 我看到裡面有一個網路頻道,可以收看網路影片。其實應該增加許多影片來源,如 Youtube、或大陸一堆奇奇怪怪的視頻網站、或是機上盒業者如網樂通合作。這一部份就會成為收益的來源。而 XBox 其實就是一台萬能的機上盒。如果這部分沒做起來,就表示微軟搞不清楚這部分的平台費用該怎麼算。
  2. 當 XBox 和 Windows 的結合,就只是這樣而已,實在讓人有點失落。應該要不只是這樣。例如用最簡單的遠端桌面連線控制電腦,再加上 Kinect 操控介面,不是更屌更直覺嗎?
  3. 當這一切都結合起來以後,再加上 Windows Phone 或 Surface 各種不同的使用情境,就像 Gmail、Google Map 與 Android 間的關係。就如同要用 Google 的服務,就要用 Google 的親生兒子 Android 才會得到最完整的使用體驗這種感覺,這樣市場不就拉抬上來了?
我對這個多媒體平台有這麼多期望,但當我看到結果是這麼的糟糕,真是讓我失望到差點把 Windows 砍掉。但把 Windows 砍掉,打 D3 就不順了,所以我還是忍了下來...

微軟,加油好嗎?