2009年6月16日 星期二

Opera Unite



一個軟體架構與 NUWeb 相似的 Project ,以 Browser 結合 Client 和 Server 架構,讓使用者的電腦既是 Client 又是 Server 的軟體。
















以 NUWeb 來說,當初秉持著「民有、民治、民享」的信念而實作,希望盡可能地讓使用者創作的資料、知識,保留其個人的權力,不再受現況 Web 2.0 那種 Server 端鯨吞使用者的權力,以此,創造研發出 NUWeb 服務。


目前 Opera Unite 恰好成品像 NUWeb 的雛型,未來將會如何變化?或許雲端架構又會再掀一股風波吧!


2009年6月15日 星期一

[PHP] 透過 Web Server 背景執行 PHP Script 程式

明明 PHP 就是常常搭配 Apache HTTP Server 透過瀏覽器直接執行的程式語言,那為什麼又需要用到背景執行呢?


這個理由是因為我把 PHP 當作像 Perl 、bash、csh 等 script 語言來使用,然而,當這個 script 需要花費大量的時間處理時,背景執行就是個不錯的選擇。


我以為寫一個小網頁用 shell_exec( '/usr/local/bin/php /tmp/test.php &' ); 的方式就能搞定,但試了很久並沒有那種效果,最後我發現必須把輸出導向才行!



  • shell_exec( '/usr/local/bin/php /tmp/test.php > /tmp/cmd_out &' );


另外,也可以直接用 ` 來執行



  • `/usr/local/bin/php /tmp/test.php > /tmp/cmd_out &`


至於 Windows 上則是可以使用類似下面的方式



  • pclose(popen("start /B C:\php\php.exe > C:\temp\out", "r") );


看來我寫的程式架構又可以再更新一下了!


2010/01/24 更新!


關於 Windows 的運行方式,如果 Web Server 只有一支 process 還是會有問題,請參考 Executing background processes from PHP on Windows ,可改成


<?php
$cmd = 'C:\php\php.exe C:\test.php' ;
$WshShell = new COM("WScript.Shell");
$oExec = $WshShell->Run("cmd /C $cmd", 0, false);
?>


其中 cmd /C 的部份,可以自行在 Windows 下的 cmd mode 打入 cmd /? 可看看說明囉!至於 WScript.Shell 執行時所帶的參數意義,可以到 Run Method (Windows Script Host) 查看。


相較於之前的 "start /B ..." ,原先在 taskmgr 會看到有一支 php.exe 在運行,改成新的方式後,會再多一支 cmd.exe 囉


2009年6月10日 星期三

[Unix] svn db 之 backup script

前天下午,學校突然發生大停電,讓我回想起自己好像三月份起就忘了備份自己的 project 了,這個原因是基於壓縮後的單檔已經超過 Gmail 附件的檔案大小的關係,前陣子 bluesway 恰好有提到自己的備份 script ,就要來稍微修改修改。


使用上非常懶,直接對 svn db 壓縮,然後丟到 gmail 上,在透過 filter 將帶有 "[Backup] My Project with SVN Servce" 字樣的標題信件進行管理即可。最後就是搭配 crontab 來執行囉。


#!/bin/sh

DATE=`date +%Y%m%d%H%M`
BASE_PATH="/tmp"
BACKUP_PATH="/home/uid/svn/"
BACKUP_TEMP="${BASE_PATH}/project_svn.${DATE}.tgz"
BACKUP_EMAIL="email@gmail.com"
PREFIX_NAME="${BACKUP_TEMP}."
MAIL_SUBJECT="[Backup] My Project with SVN Servce"

/usr/bin/tar -zcvf ${BACKUP_TEMP} ${BACKUP_PATH} > /dev/null 2>&1
if [ -f ${BACKUP_TEMP} ]; then
        /usr/bin/split -b 14m ${BACKUP_TEMP} ${PREFIX_NAME}
        filelist=`/bin/ls  ${PREFIX_NAME}*`
        for fn in ${filelist}
        do
                #echo "/usr/local/bin/mutt -s \"${MAIL_SUBJECT} - Part - ${fn}\" -a ${fn} ${BACKUP_EMAIL}"
                test -r ${fn} && /bin/ls -la ${BACKUP_PATH} | /usr/local/bin/mutt -s "${MAIL_SUBJECT} - Part - ${fn}" -a ${fn} -b ${BACKUP_EMAIL}
        done
        #ls -1d ${PREFIX_NAME}* | xargs -n 1 -J % /usr/local/bin/mpack -s ${BACKUP_TEMP} % ${BACKUP_EMAIL}
        rm -rf ${BACKUP_TEMP}*
fi
#restore: cat ${PREFIX_NAME}* >> RESTORE_NAME


旅遊節目之背後的故事

昨天早上,無意間看到這篇文章:脫光之後...然後呢??,這是旅遊節目主持人陳櫻文的部落格文章,我也才發現原來她還有參加幼幼台的,是布丁姐姐。


我很少出門、很少看電視、很少接觸規律生活外的事物,宅度很高,所以,週末時總會期待看些旅遊節目。我記得我第一次看見她時,覺得很像侯佩岑,好像正在介紹歐洲那邊的故事吧。儘管不是很熟練的感覺,如語言啊或什麼的,當時我覺得她的特色就是有活力,沒想到,她還是非常敬業的主持人,甚至我覺得有點過頭了!


看完這篇文章,深深覺得,世上充斥著許多看不見的故事。回憶起這幾年的感觸,有時追逐著他人的步調,總覺得對方好強好厲害,貪心的下場,卻沒想到,有得必有一失,每人一天僅有 24 小時啊!


忘記什麼時候開始,當老妹跟我說最近的旅遊節目幾乎轉型成吃吃喝喝後,恰好週末我也開始較常寫程式,便也越來越少看旅遊節目。或許,也戒掉這看似美好的刻意安排。但不可否則的,我開始比較想跟家人往外頭走走吃吃喝喝了。


免費網路廣播鬧鐘 - 以 Hinedo 實作

恰好看到有人有這個需求,所以就嘗試用輕便的 Hinedo 來實作囉。關於 Hinedo 是由 PCMan 的作者所創作的,以下是相關資訊


下載網址:http://of.openfoundry.org/projects/814/download
文章介紹:http://azo-freeware.blogspot.com/2007/06/hinedo-hinet-radio-10.html
相關位置:http://pcman.sayya.org/blog_read.php?id=pcman&article=85


關於製作成鬧鐘的方式,就純粹只是搭配作業系統的排程,以 Windows XP 為例,在 [控制台] -> [排定的工作] 即是管理與設定的地方,在 Unix 系統則有 crontab 等,在此不多作探討。


首先,要先了解 Hinedo 的架構,下載完後解開與執行後,可看到以下檔案



  • Hinedo.exe

  • License.txt

  • Menu.txt

  • Play.vbs

  • Update.vbs

  • UpdateMenu.vbs

  • Version.txt


其中比較重要的就屬 Hinedo.exe、Menu.txt 和 Play.vbs。


有興趣的可以在 cmd mode 下依序執行



  1. C:\Hinedo> Hinedo.exe

    • 開啟 Hinedo 廣播程式



  2. C:\Hinedo> Play.vbs 206

    • 播放 206 電台,即 Menu.txt 中的 "中廣音樂網i radio    206"




上述第一步,其實是開啟 Hinedo 廣播軟體,第二步是播放指定的電台。


以下是製作成定時排程播放的方式:(感謝 rain 提供使用 start 指令,可以解決必先預先開啟 hinedo 的限制 @ 2010/02/05)



  1. 製作批次執行檔,如 run_radio.cmd ,其內容如下

    • start C:\Hinedo\Hinedo.exe
      start C:\Hinedo\Play.vbs 206

    • 第二行的 206 則是查詢 Menu.txt 中所獲得的電台編號

    • 其中,假設 Hinedo 安裝解壓縮在 C:\ 位置,而 run_raido.cmd 建議擺在 C:\Hinedo\run_radio.cmd 吧



  2. 設定排程

    • 以 Windows XP 為例,可透過 [控制台] -> [排定的工作] 開啟。

    • 點選"新增的排定工作",並且透過[瀏覽]來選擇,選 C:\Hinedo\run_radio.bat ,接著設定工作的名稱和工作執行的方式,即鬧鐘的話,就設定每日,按下一步後則是設定切確的時間,接著還要輸入該台電腦的帳號密碼,即可完成設定。

      01 02
      03 04
      05

      最後可以按[執行] 看看是否能成功囉!過程會彈跳一個視窗出來,但隨即就會關閉,如果該視窗沒有關閉,算不正常的現象,請參考第三點。



  3. 使用上,目前有些限制

    • 電腦需開機

    • 需預先已執行 Hinedo.exe 程式,可以關閉播放,但至少一定要出現在右下角常駐程式那邊。




如此一來,設定的時間一到,就可以當作鬧鐘,自動執行播放廣播的動作囉!


PS. 原先規劃 bat 檔以為可以用上述兩道指令來正確開啟軟體、接著播放廣播,但測試的結果,發現會卡在第一道指令,因此,退而求其次,變成需要在開機狀態 + 程式已執行(不必播放廣播) 的情境下,才能正常播放廣播。