2009年8月12日 星期三

JavaScript練習筆記(2)

流程控制與迴圈
上一篇筆記裡忘記提到:JavaScript是區分大小寫,所以跟Java的使用相同!
如果你有任何一種語言的撰寫經驗,這一篇只要輕鬆看過就好!

  1. 你的第一個物件以及簡單的if判斷式:

    結果會是:


    如果您很習慣物件導向的語法,您還可以這樣寫:

    這種方法非常簡潔有力,也不會很難理解,建議大家使用。


  2. Math類別都有一個random()的方法,蠻好玩的!

    結果會是:

    Math.random()會創造出一個範圍大於等於0到小於1的小數,語法跟java幾乎一樣,太好了。

  3. 簡單條件判斷式:(condition)? A : B
    當condition為true時,回傳A, 否則回傳B。適用於僅兩種可能性時,比if的語法簡單多了。

    結果會是:

    你需要特別注意的是:禮拜天是0,禮拜一是1,禮拜六是6,非常好記。


  4. switch case條件判斷式:

    結果會是:


    "break;"的重要性我就不重複提了,default值可以不用再寫"break;",因為他是最後會執行的程式碼。要小心.getHours()是有s的阿!


  5. 關於 邏輯運算子的一點提醒:假設x=5, y=25:
    邏輯運算子 簡單描述 範例
    && and (x < 10 && y > 20)為真
    || or (x==5 || y==5) 為假
    ! not !(x==y) 為真
    在JavaScript裡沒有所謂的鬆散判斷"&"或是"|"。在Java裡, (x < 10 && y > 20)與 (x < 10 & y > 20)解讀上是不相同的。"&&"是聰明的邏輯運算子,假設前者已為false,則後續的比較必定為false,馬上就能回傳所定義的值;"||"也是假設前者已經是true,則總體必然為true,後續就可以不用在比下去了。
    JavaScript都是嚴謹的邏輯判斷式,對於script language來說更能提昇效率。

  6. 來個簡單的for迴圈吧:

    結果會是:

    就是一個簡單的九九乘法表啦!(雖然)沒有排版過真的很醜!
    for迴圈還有加強型的for-in(Java裡為foreach),我們講到陣列之後再回過頭來提一次。


  7. 來個簡單的while迴圈吧!

    結果會是:


  8. 先作一次再說的do-while迴圈

    結果會是:

JavaScript練習筆記(1)

What is Javascript?
根據Wikipedia對於JavaScript的定義:"JavaScript是一種廣泛用於客戶端Web開發的腳本語言,常用來給HTML網頁添加動態功能,比如響應使用者的各種操作。它最初由網景公司的Brendan Eich設計,是一種動態、弱型式、基於原型的語言,內建支援類。以它為基礎,制定了ECMAScript標準。"

您也應該知道,其實Javascript與Java是沒有任何關係的。Javascript最早是Netscape的Brendan Eich所開發的;後來的歷史我並不清楚,最後則又被SUN給買去。"JavaScript最初的確是受Java啟發而開始設計的,而且設計的目的之一就是「看上去像Java」[2],因此語法上有很多類似之處,許多名稱和命名規範也借自Java。"

就我自己認為,Javascript包涵了物件化與非物件化的撰寫風格,想要踏入真正純物件化程式語言的世界(例如java),可以先從javascript感覺那一點點味道。
另外,JavaScript與JScript是不同的喔!JScript是微軟為了對抗JavaScript所開發的,副檔名也取為.js。

初試啼聲

  1. 欲在網頁裡使用javascript,必須網頁內宣告,例如:

    結果會產生:


    利用document.write()將內容寫入網頁。

  2. 你也可以把javascript分開乘另一個檔案,只要用src導入即可:


  3. 你也可以在javascript內使用html語法:

    結果會產生:
    需注意html的語法要包在" "裡面,在外面接受的就是javascript的語法喔!


  4. 如果你熟悉程式語言的話,沒有用{ }控制區塊是很痛苦的,幸好javascript也有區塊的功能:

    結果會產生:

    請以";"作為該script statement的結尾,養成好習慣。另外JavaScript也利用//作為單行註解,利用/*...*/作為多行註解,


  5. JavaScript未必只能在body內宣告。你可以把他宣告在<head>裡,並且在<body>內呼叫javascript的方法:

  6. 因為是宣告在<head>裡,所以這裡看不出效果。利用function宣告一個方法;在這裡我習慣採用JavaBeans的命名方式,方法採用camel case命名方式,並且在html的body內利用onload叫出此自訂方法。

  7. JavaScript使用變數可說相當單純,不用宣告變數的類別;但你還是需要知道他是有類別的區分的:


    結果會是:

    利用+作為串接符號,真是很方便。


  8. 更多變數混用並疊加:


    結果會是:


    可以進行字串相接,也可以作浮點數運算。注意他雖然是script language,但定義變數名稱,變數以及指派運算子"="的中間都可以有空格。
    方法內直接填寫變數名稱會印出變數,如果用" "包住則變成字串,請注意。



2009年8月7日 星期五

Chromium for Linux

當我們談到Chrome for Linux時,就不免會看到Chromium這個字。實際上,這兩者是不同的東西:Google Chrome乃是根據Chromium這個開放原始碼的計畫去實做的。Chromium這個計畫並非以GPL授權,反之是以更自由的BSD的許可方式授權。詳細介紹可以參閱WikiPedia;版本上,Chromium每隔幾小時就會有一個更新,當測試後確定為穩定版本後,就會被Google納入Google Chrome裡,因此可以說Chrome是Chromium的穩定版本。然而,Google並沒有發布Chrome for Linux的穩定版,因此我們在linux所使用的都是Chromium for Linux,或是Google所打包的Google Chrome for Linux不穩定版(還是Chromium,只是灌上了Google的名字罷了),請特別注意。

Google Chrome Chromium

我們可以從Chromium開發者文件找到適合各種平台跟版本的Chromium來安裝。

Mac userGoogle Chrome.dmg
Debian-lile Linux(i386)google-chrome-unstable_current_i386.deb
Debian-lile Linux(amd64)google-chrome-unstable_current_amd64.deb

如果您是Debian的使用者,甚至可以加入google repository到/etc/apt/soutces.list裡:

deb http://dl.google.com/linux/deb/ stable non-free

如果您並非Debian-like的linux,可以到build.chromium.org下載每幾小時更新的「免安裝」版本:相較於以上是由Google官方所打包,這個版本就是最純的Chromium For Linux的版本了。

小結:
1. Chromium For Linux一開始就會偵測系統其他的瀏覽器,並且詢問是否要自動匯入到Chromium裡,很方便也很貼心。
2. 我所安裝的Chromium for Linux(from build.chromium.org)還是無法顯示含flash以及java的網頁,除非啟動時加入--enable-plugins。可以參考Google Chrome Linux 已經堪用了一文,裡面有網友熱心提供的一些建議參數可以使用。
3. Chromium for Linux還沒有實做出privacy feature,因此不建議一般人使用。
4. 尚未支援列印功能。

延伸閱讀:最友善IE版本!

the picture is cited from DeadDog.

gmail專屬圖示

很多人不敢在個人網站上光明正大的擺上自己的email,甚至是作一個連結放在html原始裡都不敢,原因是因為網路上蒐集email的機器人程式實在是太多了!一個比較好的解決方式是:把自己的email作成圖示吧!

於是我搜尋"email +icon +generator",真的出現一個網站可以自訂我們的email圖示,而且不只gmail呢!各位可以利用services.nexodyne.com來產生自己的email圖示喔!

不過!由於網頁是php寫的,我實在不敢保證這過程中我們的emial information會不會被偷偷存下來...如果有疑慮的看官還是別輕易嘗試吧!

完成後我的email圖示如下:

2009年8月4日 星期二

GSAS on Linux安裝筆記

第一次接觸到gsas這套自由軟體,是在成大地科系跟龔老師的高壓礦物研究室學來的。很幸運能夠幫忙開發轉換gsas格式的小程式,僅以此篇作筆記。

一、What's GSAS?
GSAS (General Structure Analysis System)是一套可以藉由中子繞射(neutron diffraction)以及X-ray資料來分析結構模型的一套系統。她可以分析單晶繞射、粉末繞射 (Rietveld analysis),或者兩者同時分析。 愧於筆者並非本領域出身,請詳見該網站的介紹。 作者是Allen C. Larson and Robert B. Von Dreele,Los Alamos National Laboratory。gsas並非開放原始碼軟體,作者也在首頁上說明別寫信跟他要原始碼。

二、下載及安裝
GSAS是一個文字介面(console mode)的程式,想要使用圖形介面還需安裝 EXPGUI;作者建議我們可以安裝bundle的版本:GSAS+EXPGUI。對於Linux的使用者,可以直接下載:

wget -c ftp://ftp.ncnr.nist.gov/pub/cryst/gsas/LINUX_gsas+expgui.tar.gz
假設把gsas放在/opt裡:
tar zxvf LINUX_gsas+expgui.tar.gz -C /opt
此時你需要以root權限設定一些變數:
echo " alias gsasgui=\"/opt/gsas/tcltk84+ /opt/gsas/expgui/expgui\"" >> /etc/skel/.bashrc

echo "export GSASHOME=\"/opt/gsas\"" >> /etc/skel/.profile
echo "export GSAS=\"/opt/gsas/exe\"" >> /etc/skel/.profile
有些linux版本(如RedHat系)可能是/etc/skel/.bash_profile,請自己留意。 最後,你需要在.profile裡對PATH作最後的修正:
export PATH="$HOME/bin:$PATH:$GSAS:$GSASHOME"
正規的Linux設定裡,.bashrc裡規範alias、終端機格式等;在.profile裡規範環境變數、區域變數,因此強烈建議依照筆者的設定方式去設定。 設定完成後,請使用者將/etc/skel裡的設定檔覆蓋到家目錄下即可:
cp /etc/skel/.bashrc ~/
cp /etc/skel/.profile ~/
設定在/etc/skel的好處在後續的維護上,往後新增使用者完全不必在設定一次。

你也可以參考for unix的教學。網站上的教學把alias設定在.profile裡,是違背當初設計的精神的;因此這樣設定雖然不會有誤,但還是強烈建議各位設定在.bashrc,而非.profile。

三、進階設定
使用者可以客製化自己的EXPGUI設定,請參考這裡
    請養成閱讀manual的好習慣,這裡有最新的手冊可以下載。

四、轉換小程式--JRaw2Gsas
我有為成大地科系高壓礦物實驗室寫了一個開放原始碼的小程式--JRaw2Gsas(The Java Raw to Gsas Transforming Program),各位可以到我的協作平台下載使用。不過功能只能轉換成大地科系的兩台X-ray機器,其他的可不保證喔!
這是我寫的第一個圖形程式,也是第一個考過SCJP後寫的小程式,我很高興!雖然功能很簡單,但是我還是把原始碼跟各位分享;只是諸位如果利用我的code修改後,還是要再使用GPL發佈出來唷!

2009年7月27日 星期一

MadEdit --An alternative to UltraEdit on Linux

在windows上非常著名的純文字編輯程式--UltraEdit,可以支援多種格式編碼,也能為各種不同語法彩色註解,甚至搭配一些簡單指令功能還可以直接進行編譯動作。最方便的地方莫過於可以轉換成16進位模式以及選取「欄位」(一般編輯器只能選擇「行」)。不過她畢竟是商業軟體,雖然最近正在努力猛推即將推出的新產品--UEX(UltraEdit for Linux),介面據說會跟windows的版本完全一樣;但她畢竟還是不開放的軟體。

本文要介紹的是一個在Linux下開放原始碼的ultraedit替代方案--MadEdit

由於開放原始碼的關係,各種平台都可以使用,並支援各種Encoding(UTF-8/16/32,Big5,GBK...);以下提供的版本為0.2.9.1,如果需要更新的版本,請參考這邊

Linux i386 rpmdeb
Linux amd64 rpmdeb
FreeBSD i386amd64
Source code code
M$ windows win32-bin


Fig 1.用MadEdit開啟純文字檔案。清楚的標示tab,空白鍵以及斷行符號,也會根據語法有彩色顯示。
Fig 2.可以方便的讓使用者選取欄位。
Fig 3.強力的搜尋功能。
Fig 4.強力的取代功能。

對我而言她已經非常足夠我學術上的使用了,推薦給各位;如果你們覺得有滿意或是不滿意的地方,請各位到這邊回報,讓開放原始碼軟體能夠更進步,謝謝您!

2009年7月26日 星期日

SCJP passed!!!

經過了半年多的努力,我從一個完全不會寫程式、完全不懂java的人提升到拿到了SCJP的證照,也許對很多人來說這是很基本甚至是很容易的事情;但對我這快三十歲又要兼顧其他工作的人來說,我真的讀得很辛苦。

並不怕丟臉,我考了三次才過;我沒有像其他人那麼輕而易舉的過關,我一而再、在而三的反覆練習,熟讀定義跟實做,對我而言是一種辛苦付出的證明,而不是表示我有多厲害的一張證書。

第一次考試:
我幾乎是在懂50%的情況下就去考試的。於是很悲慘的,考試成績很明顯,距離過關還有一大段距離。6.0的考試規定要答對65%才算過關,以總題數72題而言,我至少要答對47才算過關。
第二次考試:
距離第一次考試隔了一個月,我下定決心買了廣受好評的猛虎出閘這本參考書,細心規劃每一個章節;很多部份我如果唸不懂,作實例也不是很能明白,我就會跳到後面的練習題,透過理解題目來了解java。不過這實在不是學習java的好精神,因此很快就被我廢棄了;我超討厭背考古題,我想要真正的融會貫通,於是我下定決心預定的進度沒有讀完就不睡覺,遇到讀不懂的就盡量畫圖來幫助自己記憶。但是說實在的還是很多讀不懂,就先考考看吧!果然成績還是告訴我,拿SCJP還不夠格呢!
第三次考試:
距離第二次考試又隔了一個月;我發現自己唸猛虎還是有些似懂非懂的地方,無論我唸了幾次,不懂就是不懂。於是我只好忍痛再買「SCJP 6.0專業認證手冊」,十個章節規定自己12天內讀完,而我也確實從這一本書上理解許多不懂的地方。由於我知道我這次如果再沒考過,我應該就不會再有時間特地為了準備SCJP而練習java,因此我很扎實的練習,也很勤奮的作筆記,希望這樣的方法能夠避免自己去死被考古題;巨匠建議我選考5.0會比較容易,我想想也好,於是第三次我選考了5.0的版本,很幸運的終於過關了!
我的參考書籍。
為了能夠了解java se裡所提到的,多執行緒程式裡的方法,我大約畫了這張圖有十次之多。沒辦法,我頭腦不好,只好用苦工的方式去記憶跟理解。
Collection是我最害怕的部份,裡面的類別跟方法多如牛毛,對於沒有類似經驗的學習者而言,這真是痛苦的一個部份!我一樣把這個繼承關係圖畫了快要十次,幫助我對於這些類別的關係跟特性有比較系統的理解。
專業訓練手冊讀完一遍之後,又回頭在唸一次猛虎出閘。我為了確保每一題是真的理解,每一題都盡量把每個選項對錯的原因都找出來,並試著寫出正確的答案。
努力的成果終於在三週後寄來了!感謝偉財師在我考上的前兩個月幾乎每次都被我拖到晚上10:30以後才能下班,為了解決我的問題耐心的指導!真是謝謝你啦!如果沒有你的耐心,我的努力可能也很難達成目標!

最後,我還要感謝老婆在我這兩個月忍受我的壞脾氣跟不理不睬,為了讀書我犧牲了很多時間跟老婆相處,感謝你的善解跟體諒!沒有你的支持,我也沒辦法幸運的考過!

更要感謝媽媽給我調氣的補品,讓我免去頭痛的困擾,可以專心的唸書!

結論:
對於像我這樣的人而言,考過SCJP只是表示我看得懂se的程式碼罷了,不能表示我真的有能力靈活運用所有se的技巧。我會趕緊努力把基本功練起來,否則空有一張SCJP而沒有真材實料,恐怕也只是被人戲稱「paper engineer」罷了!
持續努力中!


大概也是一個多月才會收到實體證書喔!