2010年3月10日

[ASPNET] 動態更新 Gridview 上的資料

前陣子坎尼在 MSDN 論譠上看到有人問
「如何每10秒刷新一次資料?」
今天就抽個空寫了個範例來介紹一下如何動態刷新頁面上的資料

I. 流程說明

此次的流程很簡單:
Gridview 顯示資料 –> 使用者修改資料 –> Gridview 刷新資料
當然,是以 AJAX 做為 Client-side 及 Server-side 的溝通橋梁

為了呈現方便,坎尼用了 iframe 分別讀入資料修改頁及呈現頁
dgd01資料部分在此次範例中是以 xml 檔來存取資料
資料欄位含有:ID(唯一值)、Name 及 Age
dgd02
明顯地,這是人蛇集團的童工目錄

II. 程式說明

Gridview 的呈現和資料的修改坎尼就不贅述

最主要的是下列這段 Javascript
可針對每個 Table Row 進行取 ID 的動作,並透過 AJAX 到後端取資料
dgd03取得資料的部份 Code
dgd04 
以下為實際執行畫面
Kenny 謊報年齡所以偷偷的進系統修改
dgd05 在人蛇集團還沒發現之前,身份證上的年齡還是假造的
dgd06 被發現了,所以拿到一張新的身份證繼續行騙
dgd07
換頁之後一樣可以做部分更新 (注意 ID 一定要是唯一值)
dgd08
如何,很簡單吧 :P

III. 結論

其實以現在的開發語言而言,很多問題都已經不是無解或難解
重點是如何將習得的技術拼湊起來,成為新的應用 :)

此次的 範例下載
2012/6/7 調整

2010年3月5日

利用 Joomla 做資產管理 (Asset Management) -2 : 安裝過程紀要 (Linux)

在上一篇文章中,我紀錄的是在 Windows 平台上的安裝過程,今天開始在我的 Red Hat Linux 測試機上安裝 Joomla,因此再來補完一下。基本上也是透過 Joomla 內建的 installer.php 進行安裝,以下記錄在 Linux (RHEL5) 上要特別注意的地方。(安裝 AMP 還在卡關中,等之後搞清楚再來補補完 … 用 RHEL 安裝預設的 AMP 套件就可以繼續往下安裝 Joomla 了。)
補充0:Joomla 的發音
前陣子看到一篇好文:網路流行新名詞 Linux, Google, Skype, …的正確念法,因此對於 Joomla 這個拼字看起來很特殊的字也找了一下正確的發音,以下是兩個比較有代表性的參考資料 (都是相同的發音):
希望大家都可以唸出正確 (比較順耳) 的發音阿 XD
補充1:在安裝 Joomla! 1.5.x 的時候,無法安裝預設範例資料的解法。如同此文中所說,我在 RHEL 中如果把 configuration.php 檔案設定為可以寫入,就會遇到「ERROR: The XML response that was returned from the server cannot be processed」的錯誤訊息,按照此文中的解法即可正確安裝預設資料。
補充2:調整 Joomla 網站首頁顯示的內容
Joomla! 安裝完成後,若不安裝預設資料,也不安裝中文化支援,則網站首頁會長的像下面這樣,非常簡潔:
joomla_English_default_blog
若有安裝預設資料以及中文化支援,網站首頁就會看到很多資料:
joomla_Chinese_default
如果要讓網站首頁變得簡潔一點,有以下幾個設定可以調整。首先是模組管理:
joomla_module_management
再來是首頁管理:
joomla_homepage_menegement
補充3:手動安裝中文化支援
參考: Joomla! 123 圖解架站教學網-安裝 joomla 繁體中文化,language 檔的安裝目錄分成以下兩個層級:
  • Site (網站): [Joomla installation folder]/language
  • Administrator (管理區): [Joomla dir]/administrator/language
將從 Joomla! 123 圖解架站教學網下載的 joomla 完整安裝的主程式解壓縮以後,在相對應的 language 資料夾中,把各語系的 .ini 檔複製到 Joomla! 安裝目錄內相對應的 language 資料夾中,再到管理員後台設定預設語言即可。
.ini 檔的內容類似下圖:
joomla_i18n
補充4:查看 Joomla 的系統資訊
進入管理員後台-> 說明->系統資訊,包括 Linux、Apache、MySQL、PHP 以及 Joomla 的版本:
joomla_system_info
補充5:查看 Joomla 內建的說明文件
進入管理員後台-> 說明->Joomla!說明
joomla_builtin_help
接下來說明 Joomla 擴充套件 (extensions) 的安裝,以 Fabrik 套件為例:
步驟一:賦予 apache 對各目錄的寫入權限 (command: chmod o+w [dir])
  • [Joomla dir]/administrator/components
  • [Joomla dir]/administrator/language/en-GB
  • [Joomla dir]/components
  • [Joomla dir]/language/en-GB
  • [Joomla dir]/media
註:
  1. 由於安裝套件也是透過 joomla 的 web 介面,因此對於 OS 來講是以 apache 這個帳號存取 file system。
  2. 不用更改父目錄的存取權限! (例:不需要變更 [Joomla dir]/administrator 目錄的權限,僅需變更 administrator 下的 components 目錄權限即可)
  3. 在 WinXP SP3 上面安裝 Fabrik 的話,基本上不用擔心權限設定問題。
步驟二:進入管理員後台 –> (上方工具列) 擴充套件 –> 安裝/移除
install_component_menu
下一個畫面長這樣:
Joomla_component_installation_UI
要注意的是,把 component 解壓縮到 tmp 目錄下後,UI 上的安裝目錄路徑要寫:/var/www/html/Joomla/tmp/[component name] 才可以 ([component name]也是一個目錄)。
一切順利的話,不用幾秒鐘整個 extension 就安裝成功啦!
步驟三:手動建立以下目錄,並解壓縮相對應的 tar.gz 檔 (tar –xzvf)
  • Joomla/components/com_fabrik/libs
  • Joomla/components/com_fabrik/views
註:
  1. 不知道為什麼自動安裝檔在這個步驟都會失敗 (在 Windows 上不會有這個問題),但是手動執行以後網站都可以正常運作。
  2. Fabrik 套件的 libs.tar.gz 檔案解壓縮後不會自動產生 libs 資料夾 (同理,views.tar.gz 也不會自動產生 views 資料夾),有點麻煩。
步驟四:開始使用 Fabrik!
安裝好了以後,在管理員後台的「元件」中,就會看到 Fabrik 套件的管理 UI 了:
fabrik_admin_UI
包括 Tables、Forms、Groups、Elements 都是需要設定的:
fabrik_admin_UI_homepage
至於詳細的設定,就留待下一篇再來細談囉!

本系列其他文章:

2010年3月2日

在 IBM x3650 上安裝 RHEL5 & 設定 RAID5

昨天灌好一台 IBM x3650 Server,組長有提到要先 survey 要做 RAID5 or RAID6 比較好,所以我找了以下資料:
  1. RAID (zh.wikipedia.org) : 針對各種 level 的 RAID 技術的簡介
  2. Chapter 3. Redundant Array of Inexpensive Disks (RAID) (redhat documentation) : RHEL 的 RAID 說明文件
  3. RAID5 到 RAID6,數據安全提高多少?: 這篇討論的蠻深入,還有提到 RAID 機制背後的數學基礎
  4. RAID-6 的必要性 : 這篇蠻白話的,看完上面的基礎文章後可以很快瞄一下
看完 wiki 以及上述第三篇資料以後,由於這台 Server 是要給內部使用,不是對外提供服務給用戶使用,因此為了較高的讀寫效能,我決定採用 RAID5。
接下來又找了怎樣在 RHEL 上設定 RAID5 的資料:
  1. Chapter 10. Software RAID Configuration (redhat documentation) : 又是 RHEL 的說明文件,蠻詳細的,可惜只有舉 RAID1 為例。
  2. 3.3 Hardware RAID versus Software RAID (redhat documentation) : 看到這篇我才注意到 RAID 還有分 Hardware/Software,基本上用 Hardware 來做效能會比較好,但是硬體當然比較貴。但這篇對於 Hardware RAID 的說明很少。
跟組長確認過之後,確定要以 Hardware 來做 RAID,於是又找到另一篇參考資料:
這篇就講的很清楚了,除了 Hardware/Software RAID 之外,另外提出一種以主機板晶片來協助做到 RAID 機制的作法,稱為 ATA(SATA) RAID / BIOS RAID / Fake RAID (假的XD)。雖然這篇文章是以華碩主機板+Fedora Core 5的環境為範例,但其實在 IBM x3650 + RHEL5 的環境下步驟也是一樣的,簡單來說就是以下幾個步驟:
  1. 開機後,按「Ctrl+A」進入 IBM ServeRAID Controller 設定畫面 (這張就是內建在 IBM Server 中的硬體 RAID 控制卡,設定畫面看起來/操作上跟 BIOS 差不多)。(為什麼我會知道要按 Ctrl+A 呢? 因為開機的時候螢幕上面有印出這個訊息嘛~)
  2. 如果目前 Server 上已經有設定 Disk Array,就先把它砍掉。
  3. Create 一個新的 Disk Array,把所有的硬碟都選進去這個 Array,幫這個 Array 取個名字,並且把 RAID level 設定為 RAID5,之後系統會自動處理好剩下的設定。
  4. 退出 ServeRAID Controller 的設定畫面,此時應該會看到成功建立起 Disk Array 的訊息。
  5. 以 RHEL5 安裝光碟重新開機,開始安裝 RHEL5。此時對 RHEL 來說,所有的實體硬碟在邏輯上會被 group 成一個稱為「sda」的硬碟 (也就是對 OS 來講只看到單一一顆硬碟啦),所以接下來就按照一般切割 partition 的方式,把「/」、「/boot」、「/home」、「/usr」、「/var」、「/tmp」、「/swap」切一切就好啦!比 Software RAID 簡單很多!(不用自己設定 RAID Device/RAID Group)
這台 Server 上共安裝四顆實體硬碟,每一顆的容量都是 136.6G,總和為 546.4 G,做成 RAID5 之後,可用空間剩下 400.85G,耗損率約為 27%。
以上就是第一次在 IBM Server 上安裝 RHEL & 設定 RAID5 的心得,用硬體來做實在是太簡單啦 XD

2010年3月1日

iPhone App 推薦-1: 如何免費(不用信用卡)申請各國 iTunes Store 帳號

上次介紹過 iPhone 的操作介面使用心得,接下來的重點就是 AppStore 上多達 14  萬個應用程式啦!

第一次使用 iPhone 會進入首頁,裡面都是內建App:訊息、行事曆、相機、地圖、天氣等等,如下圖:
003
最下面則是最常用的幾個功能,包括打電話、收發郵件、上網瀏覽,和 iPod。關於內建 App 的使用方式還有 iPhone 基本的操作,可以參考以下網頁:
接下來就是申請 iTunes Store 的帳號啦!
由於 iTunes Store 有台灣版,因此預設應該會連到台灣版的網站,裡面的內容就是 AppStore:
iTunes Store Taiwan
對於大部分使用者來說,在 App Store 就可以下載到絕大多數好用的 App,但是美國的 iTunes Store 的商品比台灣多太多了,包括電影、影集、音樂等等:
iTunes Store US
至於美國的 iTunes Store 有啥好康呢?可以參考手機王:善用你的 iTunes Store 帳號吧,包括以下幾點:
  • 每週送歌曲:只要你登入 iTunes Store 的首頁,中間就有一個大大的圖寫著「Single of the Week」,讚啦!(送的歌曲都是挑選過的)
  • 下面還有個 「free on iTunes」專區。按一下「See All」就可以知道本週送什麼東西囉!
  • 除了免費音樂之外偶爾運氣好會看到免費的電影喔!
看到這邊就很想趕快申請一個美國帳號阿!那要怎麼作呢?
申請台灣帳號很簡單,若要申請其他國家的帳號,我參考的是 m01 的教學:[教學]免費(不用信用卡)取得各國Itunes Store帳號,照著教學內容一步一步往下作就 ok 啦!
iTunes Store create account 
填寫地址時,Apple 只會檢查地址格式是否正確,反正沒有要真的買東西,所以格式對了就好。我用的是微軟總部的地址 XD
在申請過程中,如果輸入的資料格式錯誤,會看到清楚的錯誤訊息:
iTunes Store clear error message
要注意的是,zip code 是 5 碼,必須要跟你選的 county 可以 match,電話號碼則是前3後7,例如:091 - 2345678,這樣就可以啦!
iTunes Store 美國帳號的使用上沒什麼問題,但是有些 App 或者網站是會鎖 IP 的,例如 Pandora Radio,還有 CNN:
009 (4)
除此之外,絕大部分的 App 在台灣都可以正常使用喔!
以上是申請 iTunes Store 帳號的介紹,之後會再慢慢介紹好用的 App :D

[Linux/Unix] 養成好習慣,使用 passwd 指令要註明欲變更的帳號

今天維護廠商要以 root 帳號登入某台 linux 主機的時候發現無法登入,密碼不知道被誰改掉,查了老半天之後發現兇手就是我 Orz(不過廠商還不知道這件事情=.=) 在將 root 密碼還原以後,從 /var/log/secure 裡面就可以看到 pam_unix 模組所寫的 log 了。


根據 log 可以看出,造成這次意外的原因在於上週剛好進行設備交接,因此在該主機上建立了我的帳號,但我在沒注意到目前使用者身份是 root 的情況下使用 passwd 指令變更密碼,才會造成這樣的結果。因此,養成好習慣,在變更系統狀態前先確認目前的使用者身份是誰,思考一下會不會造成副作用,是很重要的!

先來看一下 passwd 指令的說明:
passwd_1

重點在於 [username] 這個參數,此參數若忽略,表示要變更的是「目前下達 passwd 指令的使用者」的密碼;若加上 [username] 參數,則可變更指定使用者的密碼 (當然前提是執行指令的 user 要有足夠的權限)。由於大部分時候都是用自己的帳號在系統中操作,因此下 passwd 指令也只會影響自己的密碼,因此都養成習慣忽略掉 [username] 參數,這時候如果不小心用「su」或「su -」指令切換為 root 身份,就有可能不小心變更到 root 的密碼 。

雖然下達 passwd 指令後螢幕上會印出一行:Changing password for user [username],但是有時候就是沒注意到,當成功變更密碼後,螢幕上印出的是:passwd: all authentication tokens updated successfully.,看到 successfully 這個字眼以後就覺得很放心,不會想太多了 =.=
所以,在變更 root 密碼的過程中,螢幕上會看到以下資料:

passwd_2

結論:養成習慣加上 [username] 參數是最好的作法,這樣在下指令的時候就會很清楚要變更的密碼是屬於哪個使用者的,例如確實要變更 root 密碼時:
passwd_3

都已經打了「passwd root」了,總該有自覺現在是要變更 root 的密碼了吧!
補充1:雖然上面有出現「BAD PASSWORD: it is based on a dictionary word」的警告訊息,但系統還是讓我成功變更密碼了,為什麼呢?那是因為目前我的執行身份是 root,而 root 的權限是最大的,可以忽略在 pam_unix 模組中所設定的任何限制!

之所以要補充這一點,是因為前陣子我在練習實作帳號管理的功能時,一開始都用 root 帳號登入 (這也是因為當時沒有限制 root 不能以 SSH 連線登入,but … 這個改天再講好了),導致我設定的「密碼必須大於 6 個字元」等等限制看似完全無效,因為 root 是可以為所欲為的!害我一直覺得很奇怪,不是有「BAS PASSWORD:」的 warning 嗎,為甚麼系統還是可以讓我變更密碼 Orz 這又說明了「隨時隨地都要注意到目前是以甚麼身份下達指令」的重要性,否則可是會平白無故的浪費很多寶貴時間的阿!

補充2:若某帳號有 sudo 權限,則 sudo passwd 命令修改的會是 root 的密碼,如下圖:
passwd_4

而透過 sudo 下的指令在 /var/log/secure 中會留下紀錄:
passwd_5

2010年2月23日

[Shell Script] 如何擷取字串中的子字串

今天要分享的是,在 shell script 中擷取子字串 (俗稱 substring) 的技巧 (各程式語言都要提供的最基本功能)。

一開始在學 shell script 的時候,我看的是臥龍小三的網站 (News 裡面的 Shell 入門),按照順序看過一遍固然收穫很多,但也僅止於「快速入門」的程度,也就是「讓你不要害怕 shell script」的作用,其中對字串處理這種重要的功能並沒有整理的很詳細,因此我一開始連「取出某個字串的最後一個字元」這樣的功能都不知道如何下手,用 sed 和 awk 都不太對。後來透過孤狗大神找到了幾種方法:

法一:Bash Shell Programming in Linux (搜尋 substring)

time=”20:06:16”
unit=${time:${#time}-1:${#time}} –> $time變數要寫三次!
這個寫法顯然相當之囉嗦,但是它是有效的。

法二:parsing a string in a shell script (透過 awk 來做)

time=”20:06:16”
unit=`echo $time | awk '{print substr($0, length($0), length($0))}'` –> 可用 $0 取代 $time,較簡潔


但整體看來還是非常囉嗦,我只是要取出一個字串的最後一個字元而已阿!

法三:臥龍小三-Linux Shell 程式設計實務 (Chapter 08: 8-4 使用外部程式 expr 做算數運算)

time=”20:06:16”
startPos=$(expr length $time)
unit=`expr substr “$time” $startPos 1` -> 注意 $time 要被包在“ “裡面


這章介紹的 expr 功能還蠻多的,有找子字串 index 和做 substring 等等功能,值得練習一下。這個作法雖然少了很多小括號,但感覺還是挺麻煩的,最後,終於讓我找到一個最簡單直覺的作法:

法四:一樣出自 parsing a string in a shell script (看這個留言)

time=”20:06:16”
unit=`echo $time | tail -c 2` 
–> 重點在 -c 這個參數,以及用 tail 的話 byte 數要多 +1 (取最後1個字元:2)

tail-c

一行搞定!而且非常的直覺!除了要取出特定字串以外,如果是要正取 (用 head)或倒取 (用 tail) 固定幾個字元的話,應該都會用 head/tail 來做吧!

以上就是今天的分享,如有更好的作法還請不吝賜教 ^^~

PS. 取出字串的最後一個字元,在 Perl 中也非常簡單:substr $time, -1,負號代表由字尾開始往前面取

WCG 網格計畫發表新專案:Discovering Dengue Drugs – Together – Phase 2 (第二階段)

前陣子 (2010.2.17) 收到 World Community Grid (WCG) 的信 (不知道 WCG 是什麼的朋友請看這篇介紹:WCG網格計畫),信中提到 Discovering Dengue Drugs (研製對抗登革熱、C型肝炎、西尼羅熱、黃熱病等等的藥物) 這個計畫要進入第二階段 (Phase 2) 了!(新聞全文請參考這裡)

這個專案事由 The University of Texas Medical Branch (UTMB)、The University of Chicago 兩所大學共同主持,計畫的詳細內容可參考這裡。在第二階段中的工作項目是以瀑布式 (waterfall) 的方式來組織,也就是說工作項目A的結果會產生工作項目B,而工作項目C的內容則是根據工作項目B的結果來決定。藉由如此的設計,研究人員期望可以節省大量的計算時間,以加速專案的進展。(基本上就是在進行B的時候,不用重新計算進行A的時候已經計算過的東東~)

為了提昇 WCG member 的參與感,很久之前 WCG 就設計了 Project Badge 的機制,Discovering Dengue Drugs – Together – Phase 2 的 Badge 長得像下面這樣:

dddt2_ffffff[1] (一隻蚊子加上一個數字 2,呃 …)

這已經是在 WCG 上 launch 的第 15 個專案啦,希望每個專案都可以順利的進行阿!

另外補充一篇科景 (Sciscapr.org) 的新聞:物理:網格運算未來將可進入家用電腦

Google Spreadsheet 裡用規則運算式

最近因為工作關係,遇到要用 Google Form 及 Google Sheet 所以研究了 Google Sheet 裡的一些 function 怎麼用 首先,分享一下如何在 Google Sheet 裡用規則運算 :D