2016年8月26日 星期五

不必要的工作

避免做錯誤的選擇?

人生就是不斷地進行選擇,
或許有時候會對生存的意義存疑,
但是這其實這就正是開啟了尋找生命價值的路。

-- 因為疑惑,或許才產生尋找答案的動力。
自己開始先從嘗試、到感受,再到思考,生命中遇到的各種人或事,
哪一個抉擇,才是自己想要的,才是適合自己的

昨天看到一個關於人生中做抉擇的心得:
1。選擇正確的工作
2。選擇如何利用下班時間
3。選擇逃離安逸的舒適圈

其中也作了一些整理,有一說得非常正確,
「人生最怕的是投入太多的時間與心力在錯的事情上,最後浪費了時間和青春,
只換了點足夠養活自己的薪水」

確實反觀自己現在的生活,
看似每天都忙得頗累,回家了沒有心情做更多的事情
每天都覺得可以做更多的學習但往往卻只等著十二點來臨然後就告訴自己很累了該去睡覺。
就這樣一直讓書本、要實踐的夢想擱置、長眠

我大概又忘了scrum的精神,不用一次做出偉大的事情,只要把每件事情做切割得足夠細小,找出可以產出MVP (Minimum viable product 最低程度可行性的產品) 的方式
以從每個小地方改善生活的品質

看到家裡亂掉的角落就馬上整理,不要累積以影響到自己的工作或生活環境;
路上剛好遇到朋友就馬上停下步跋來聊幾句,不要只想著有機會再約;
想到要做的事情就馬上用紙筆把最簡單的想法記下來,以免三分鐘過後想法變成曇花一現;


今天也正正感受到自己浪費了一兩個小時在做不太有意義的事。

同事的操心大意,造成code裡面有recursively的injection,
仔細一看才發現多個地方都出現同樣問題,但既往只是將錯就錯,
撰寫了一些基於這些有inject問題的code之前的test case,
導致我在修好了這些inject問題之後,一堆test case就run fail了
然後我就有點煩悶地一個一個地去修這些fail的test case
最終花了一兩個小時在整理,而且修完之後只感到一堆抱怨。

按照「選擇正確的工作」和「選擇如何利用下班時間」這兩條原則,
我靜下來想到我這個做法造成了幾個問題:


  1. 我花費了自己下班的時間,去修正這幾個只是在dev環境上build fail的問題,但完全不緊急,大可以等到下禮拜一再來解決;
  2. 我幫別人修正了他不注意的地方,之後還要再找時間告訴他問題在哪裡,不然他只會一直repeat這樣的問題。
    然而就算我把問題告訴他,但因為不是他自己親身修正的,他不知道這個問題有多耗時和痛點在哪,或許不會切身處地去思考怎麼改善這個問題,找出原因。
  3. 這些修正基本上對我個人能力沒有甚麼學習價值,還影響到了我下班時間該擁有的輕鬆情緒。
所以下次如果遇到類似的情況- 「別人造成的bug,是否要自己去進行修正」時,
我會先思考以下2個因素:
  • 是否會影響到正式產品 => 是否有時間急迫性?
  • 是否該由我來修正會比較好 => 應提昇團隊的整體平均水平
  • 這個工作會否帶給我正向的成長 => 不浪費自己的時間


2016年6月22日 星期三

到底怎樣從面試知道一個人適不適合一份工作


今天被叫去一起面試一位candidate,
主管希望多一些人來針對一個candidate多給一些意見

candidate 32歲,已婚,工作五六年

之前待過上百人的團隊,主要負責後端的開發工作

在對談中,大概可以確認他跟我們現在正在開發的工作項目
大概只有java是有關係的
前端的開發經驗、佈署工作似乎都沒有接觸
其他用的開發工具、開發環境也是不認識,

主管從事後跟主管的談話的內容來推測,
主管覺得他有五六年工作經驗,但到我們這邊來可能就會像白紙一樣甚麼都要從頭學
感覺主管會錄用他的意願不大

面試中幾乎我們一直在推出一連串的問題來連珠爆式狂問他,
印象中還記得的一些問題整理如下:


  • 負責過甚麼專案,在專案中負責哪些部份?
  • 在專案開發的過程中,怎麼跟其他團隊的人cross side合作?
  • 有用過spring,近幾年spring的發展很多,改變很大,在使用上覺得有甚麼差異?
  • 有在寫unit test, Integration test嗎?
  • 如我們公司用的工具或程式你都沒有碰過,若你進來後有三個月時間可以去摸索,請問你會怎麼開始,三個月時你覺得你能到達怎樣的程度?
  • 你自己有在接觸一些新的技術嗎?遇到沒接觸過的技術會怎麼辦?
  • 現在其實技術工作會主要分為front-end, back-end, devOps這樣的三塊,請問你有比較偏好往哪一方面發展嗎?
  • 當service使用量很大時,你使用hibernate為主,有沒有試著用甚麼方式去優化你的資料庫使用方法?
  • 在大型專案時,常遇到需求改變、spec change的狀況,但時程若不足時,請問你怎麼跟product owner去處理?



其實一開始我自己就先問了他一個跟技術無關但議題很廣的問題 -
「你工作了也有五六年了,請問你對接下來工程師這樣的工作職涯上,對自己有甚麼期許?」

他的回答大概就是 -
「因為一個技術學會了,也用了好一陣子,也想要有一些突破或學一些新的技術,所以希望能有一個能給予學習和實踐空間的工作環境,也希望公司的發展方向能有自主的想法,有自己的核心價值。」

其實我比較希望聽到的答案是他能夠描述一下為何想要繼續當工程師,
希望自己能在工程師這樣的職位上能有怎麼樣的發展?
更進一步的或是可以描述一下覺得自己能作出甚麼作為來幫助公司產品的發展

然而他卻給了我一個「你對未來就職的公司環境有甚麼期許」的答案。
不過也至少覺得他可能不是一個安於現狀的人吧(?)

我會問這樣的問題,剛好是他跟我的工作年資差不多
自己也工作了快五年了,對「工作」這件事,
有一些養成的習慣、培養了一些小技巧、職場上的一些小心得
但卻還沒有得到一個問題的答案

「工作對你來說是為了甚麼,你想要做甚麼事情?」

最近這個問題,讓我有著一股越來越強烈想要解答自己的慾望,

工作久了,漸漸地自己發覺了,自己的工作只是在幫助別人來完成他的夢想,
幫助主管、幫忙老闆、幫助股東來做他們想做的事情,幫助他們來賺他們想要賺的錢

為甚麼工作都是為了別人,為甚麼人生要花費三份之二的時間來做別人的事,
而不是把時間和精力花在自己想做的事上面

所以,就會問自己,「那我能為自己做點甚麼嗎?我想做的事又是甚麼?」

能問出這個問題,就代表你開始為自己的生命負責
因為你開始覺得,你的人生該做甚麼,應該不是交給你的老闆、你的主管來決定
不要把這千千萬萬個小時浪費在你無法獲得成就感、沒有收獲、無法能肯定自己的工作上

那麼,大家都不需要配合別人,大家都做自己想做的事,大家都來當老闆嗎?

當老闆需要人格特質、需要環境、需要資源資金,這並不是每個人都能擁有
嚴格來說,這也不一定是一個人努力就能爭取到的條件
再者,當老闆亦未必是知道自己想做甚麼的人都想要做的事

正如「異數:超凡與平凡的界線在哪裡」書中的觀點提到,
成功的人不是只靠自己一人努力就能成功,
往往是身處的社會時空、家庭背景和一連串客觀環境的幸運湊合,
最後加上自己努力而迎接機會,才有辦法成功。

所以我覺得重點是要打造自己身邊的環境,
找到一個適合自己的環境,讓客觀因素可以配合,甚麼幫助自己去做想要做的事

我希望可以做一個app能衝上app store top 3
我希望我可以讓公司產品能在Q3就能賣給台灣第一大的xx經銷商來使用
我希望我能讓團隊能力提昇到就算主管請假時,大家也可以如期把產品交付出去..

要為自己設定一些具體的事項,可以微不足道,但要穩定前進

跟自己講「我要當個有用的人」這樣抽象話語根本沒有任何威力
因為現階段的自己,就是無法定義「有用」是甚麼
到底做了甚麼事情,才會覺得「有用」


----離題扯很遠了-----

回到面試,
故我希望面試的人能夠確切告訴我,你想在未來的職涯路上做出甚麼,
越具體越好,
這樣我才能判斷你是否是個有企圖心的人,
才能判斷你的企圖心是否能夠給你提供不斷學習的動力

其實我覺得能在實作型的大公司工作過幾年也都不放棄寫程式,
某程度上在學習技術上應該不會有太多的障礙
問題就是在於有沒有學習的動機跟意欲,再來才是方法
有了動機跟意欲,你才會去為自己挑一個好的方法來學習,或是別人也才樂於指導
不過畢竟商場也是個適者生存的地方,職場上也是沒有人有義務為會你所有事,
最終就是只能透過自己的學習

所以我才會問出「請問你對接下來工程師這樣的工作職涯上,對自己有甚麼期許」這樣的問題,
而不是一昧的去挑戰candidate對技術多了解或多不了解

其實技術不會使人定型,心態才會。






2014年8月3日 星期日

[JAVA] 解決 javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated

[symptom]

最近工作關係,需要串接財政部的發票明細API, domain為 https://www.einvoice.nat.gov.tw/
使用 HttpClient 執行 HttpGet方法時,
卻發生 javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated 的exception

[root cause]

查了一下,原因是要進行request的url使用https加密連線方法,
但因為java client使用的certification資訊太舊,不認得較新的SSL認證,
所以便發生了SSLPeer Unverified的問題

[solution]

此時,需要更新client端的SSL certification資訊。
下面簡單說明一下步驟:

1. 先開啟一個瀏覽器(我用的是chrome),連至目標的url, 然後透過瀏覽器把這個網站的SSL認識資訊匯出, 獲得一個 sitename.cer 檔, ,


2. 開始 cmd 工具,到你的JRE 環境中 lib\security\ 資料夾底下, 如 C:\Program File\JAVA\jre6\lib\security
在這裡應該會看到一個 cacerts 的檔案, 它就是我們需要更新的憑證檔

3. 執行

keytool -import -keystore cacerts -alias <any Unique Name> -file <filepath>\sitename.cer" -storepass changeit

其中, 以下請改成自己的設定:
<any Unique Name>為這個新增憑證的別名, 不能與其他別名重覆,
<filepath> 為剛剛你匯出sitename.cer 所儲存的路徑

4. 指令會請你確認是否要加入此憑證資訊, 輸入 "y" 進行確認
然後你就會看到 "Certificate was added to keystore" 的資訊, 表示成功

5. 再次執行java的部份,應該就可以成功通過https的連線了

※ 若仍然無法解決 SSLPeerUnverifiedException,代表憑證檔可能沒有成功更新,請檢查一下你的java runtime是否就是你剛剛所更新的jre版本,像我自己就有jre6, jre7, jdk等幾個環境。


[refernece]

http://coldfusion-tip.blogspot.tw/2012/04/javaxnetsslsslpeerunverifiedexception.html

2013年4月24日 星期三

2013年1月8日 星期二

javascript 效能評測

SunSpider 是一個線上評測 Javascript 效能的benchmark test.
按照官方說明,SunSpider只是純粹評測Javascript的核心性能,並不包括DOM或其他browser相關的API:
SunSpider官方網站
http://www.webkit.org/perf/sunspider/sunspider.html


在Javascript 中,有一項JIT(Just in time)的技術,是一項可以加快javascript運作速度的編譯技術,JIT的啟用能夠提高javascript的performance.
refer:
http://blog.csdn.net/wozaiwogu/article/details/7865650
http://ccckmit.wikidot.com/cd:v8

2012年6月11日 星期一

[Android] framework 不支援的streaming mime-type

某些mime-type檔案在網路上可以直接取得,
透過browser點擊網路上的檔案,可以直接存取這些檔案

當檔案是影音檔時,browser會發送intent出去問有哪些AP支援這種mime-type
讓user選擇要download或是streaming play

不過android framework中的streaming player有以下的mime-type不支援

.midi
.mid
Android使用來支援midi的Synthesizer為Sonivox,
但根據Sonivox EAS(Embedded Audio Synthesis) API所載,卻沒有支援streaming play


refer:
http://blog.umito.nl/index.php/2010/05/07/midi-on-android/
http://code.google.com/p/android/issues/detail?id=8201


.imy


2012年6月6日 星期三

[XHTML] XHTML well-form


為解決大部份網頁都是含有錯誤的語法問題
W3C於1998年重組HTML小組,以XML的形式去重新描述HTML,而沒有加入任何新元素。
這套規格後來便成為了“XHTML1.0”

使用XHTML的好處,在於可以用XML的well-form形式去明確定立元素間的關係
與HTML4.0區別開來
而XHTML也嚴謹地定義了一些語法
如:

  1. 所有element和property皆使用小寫
  2. 所有property的value用引號來包覆
  3. 所有非空標籤都需要有結束的標籤
  4. property和value都不能簡化,使用property就需要指定其value
  5. 空的element也要有結束標籤,不然就是要使用“ />”


<div name="main"><br /><hr /></div>



今天遇到一個問題,使用chrome瀏覽 一個網頁時這個網址時,會發生error
Below is a rendering of the page up to the first error.

查看這個網頁的source code,有一行這樣寫著
<tr><td align="center" bgcolor="#FFCC00">--> .jpg <--</td></tr>


有沒有注意到竟然有“-->” 和"<--"
就是有"<" less than小於號和 “>”greater than大於號,
這樣的情況可能會導致兩個XHTML會認為是語法錯誤的問題

在W3C對XML的DTD文件中,針對特殊字元(special characters)有定義其該使用的html字串,如 "<"小於號就要使用 "&#38;#60;" 這樣的一串
refer: http://www.w3.org/TR/xhtml1/dtds.html#a_dtd_Special_characters

另一個問題則是,根據上一點,XHTML parser就會把">" "<"視為是元素的標籤號,如若把那些小破折號都拿掉,變成 “ >.jpg< ”的話,更加會造成破壞well-form格式,一對小於大於號裡,含有其他的小於大於號,"  <> ><<> "
當然在parse XML的過程中就會出錯

由於HTML中沒有明確限制一個開標籤就要對應一個閉標籤,所以html在遇到這類網頁時,大部份情況下還是可以成功render的
當然,安全起見,在編寫網頁時,特殊符號就應該用html字串來取代。

另外在Android device上測試過
從ICS(Android4.0) 之後的Browser就會顯示有錯誤
而ICS之前的版本則可以正常顯示出來
這說明了一點, Android ICS使用了XML parser來處理XHTML網頁
而之前的版本則用HTML的parser來處理,以HTML parser一向高寬容性作風,就不會那麼容易出錯了.

2012年5月29日 星期二

[HTML5]檢測 HTML5 的功能 - Modernizr

HTML5已經是現行網頁開發的趨勢,雖然各大主流的Browser都已經支援大部份的HTML5功能,但是各家Browser支援程度也有所差異,亦有鑒於還有相當部份的user仍在使用老舊的Browser(如IE 6,7等)。
網頁開發者在開發上,不管是要做到相容各個版本,還是只是簡單的告訴user“你的瀏覽器並不支援XXX功能”,都需要進行支援度的判斷

因為HTML5並不是一種獨立的功能或是語言,而是很多獨立功能的集合,所以我們需要判斷的,並不是這個Browser有沒有支援HTML5,而只是需要判斷他有沒有支援HTML5某個功能而已。

在這裡介紹一個javascript的plugin - Modernizr
Modernizr是一個可以測試HTML5 函式庫的opensource。可檢查許多針對HTML5和CSS3功能的支援。
請自行下載modernizr.min.js,引用到自己的網頁內。


當Modernizr執行時,會建立一個static object - Modernizr,透過直接呼叫Modernizr內的object來產生判斷是否有支援某個功能的boolean值。


Canvas

HTML5中透過<canvas>元素,可使用javascript進行繪圖,要知道user的瀏覽器有沒有支援<canvas>,我們可以直接使用:
if(Modernizr.canvas){
  //support!
  // draw something
}else{
  // not support
  alert("你的瀏覽器不支援canvas元素");
}


Canvas Text

有些Browser雖然支援<canvas>,但卻不支援在canvas中繪製文字,這是因為canvas text是在後期才加入的API,故有些早期有支援canvas的browser後來卻沒有引入。
檢查canvas text,我們可以使用:
if(Modernizr.canvastext){
  //support!
  // draw some text
}else{
  // not support
  alert("你的瀏覽器不支援canvas中繪製文字");
}

Video

在HTML5中,不用透過如window media player或flash等的plugin,只要使用<video>元素,指定其src,就可以直接播放影片,相當方便。要檢查有否支援<video>,可使用:



另外,雖然某些browser有支援影片<video>元素,但未必每種影片的格式都會支援,這時便需要判斷browser是否有支援某種codec,而這個檢查,Modernizr也有提供相對的功能




Local Storage

使用local storage,讓用戶端的資料能夠儲存於local端,不用受限於cookies,也可節省時間和頻寬去和server做溝通,使用HTML5 storage,用javascript就可以直接存取儲存起來的data了。檢查是否有支援Local Storage功能,可使用:



Web Workers

Web workers就是為browser提供可在background執行javascript的方法。若有寫過java的朋友,web workers就相等於 thread(執行緒)的作用。
有了background threads,在user操作UI的時候,就可以同時在背後執行一些運算,而又不會讓user的介面操作卡在某個運算的過程中,諸如複雜的數學運算,網路request,data access等,都會是一些耗時的動作,讓這些耗時的動作在background執行,便不會影響user在介面操作上的流暢度。
對於Web Workers的支援,可用:



Application Cache

若果有些網頁的操作不用隨時都使用到網路上最近的資料,像是網路小說,文件,影片等,基本上如果下載完之後,就可以在local site去閱讀或使用的話,可以考慮使用application cache來處理
當browser瀏覽有支援application cache的網站時,一旦browser下載了所有必要的檔案後,即使並未接上網路,我們也可以瀏覽這網站。在離線狀態所做的改變,變網路恢復時也可以被上傳到server裡,gmail離線版就是使用了這個功能。
檢查Application cache:





以下的一些功能比較簡單,我就直接介紹用法了

Geolocation 定位

Modernizr.geolocation


Input Type 表單輸入

HTML5中新增了十幾種表單中的類型,以方便進行某些情況的輸入
像是

  • search
  • number
  • range
  • color
  • tel
  • url
  • email
  • date
  • month
  • week
  • time
  • datetime
  • datetime-local


Modernizr.inputtypes.search

Modernizr.inputtypes.number

Modernizr.inputtypes.range

...
...


Placeholder Text

當輸入欄是空白或不是被focus的時候,會預設在輸入欄中的文字,通常是用來當輸入的說明用的


Modernizr.input.placeholder



Auto Focus

使用autofocus,就可以在一個網頁載入後指定滑鼠遊標直接跳到哪個input輸入欄中,就像到Google首頁時,會自動幫你把遊標跳到search bar裡。

Modernizr.input.autofocus

P.S. 以上所有的用到的Modernizr中的方法都是回傳boolean值
有支援 - true,
沒支援 - false
還要注意的是,像是localstorage, applicationcache,等的複合字,必為小寫,與DOM的寫法不一樣。





以上資料由我自己閱讀 O'Reilly的<<HTML5 建置與執行>> 一書後整理出來,也有引用到當中一些句子說明。

2012年5月22日 星期二

[Webkit] CSS支援能力整理

針對各家的Browser,CSS的支援似乎是存在於其中的最大差異
很多web designer都需要針對不同的瀏覽器來最佳化CSS,來讓網頁能在各個瀏覽器上有最好的呈現效果。

這篇文章旨在整理一些沒有被廣泛支援的style ,能有個了解。

首先,針對Webkit
可以在 Webkit debug的網站上看到現時你正在使用的瀏覽器的webkit 版本
因為某些CSS或是property都是在某個版本之後才開始支援,
先清楚webkit的版本,很重要。



<marquee behavior="alternate" >

marquee,跑馬燈,這個tag並不是W3C所定義的,是IE早期自己發展的
因為歷史悠久,各家的瀏覽器也會支援
refer: http://msdn.microsoft.com/en-us/library/ms533502(v=VS.85).aspx

behavior 是指定其多動的行為
有{scroll | slide | alternate}這三種,沒有設置的話,default 為scroll

今天遇到了一個問題

<marquee behavior='alternate'>來回移動</marquee>

這樣的一句,可以正常顯示的話,
應該是會有"來回移動"這四個字在螢幕上左右來回

來回移動

而問題就是在Android4.0 的Browser上面卻沒有反應
當behavior為scroll / slide時都沒有問題,就只有alternate沒反應

經自己多方測試後,發現是Webkit 535之後的版本才有支援
而Android4.0上的Webkit是534.3,所以沒支援。

refer:
非IE瀏覽器對marquee的支援:
http://www.hoxing.net/Knowledge/Website/20111103326.html
mozilla: https://developer.mozilla.org/en/HTML/Element/marquee
safari: https://developer.apple.com/library/safari/#documentation/AppleApplications/Reference/SafariHTMLRef/Articles/Attributes.html



2012年5月20日 星期日

[Webkit] WCSS支援能力

WCSS (Wap CSS/Wiress CSS), 是WAP2.0專屬的CSS,屬於CSS 2.0的一個sub set 和一些WAP的特性所集結而成的,顧名思意,是應用於mobile上的CSS。
(refer:
http://www.developershome.com/wap/wcss/
http://baike.baidu.com/view/1689014.htm

WCSS應用於Xhtml MP文件中
關於WCSS的使用範疇
refer:
http://bbs.blueidea.com/thread-2905812-1-1.html



以下為一些我遇到過在Webkit支援上比較有問題的style

-wap-input-required : { true|false }

/*if true, 指定的input text 不能空白,submit時會發出alert */
根據測試,只有opera有support




vendor-prefixed 的CSS style在各家browser的支援度

OMA doc:

2011年11月14日 星期一

[Android] 解決ListView在scroll時會變黑的問題

使用ListView時,若有更改過他的layout,


如我自己把它的背景顏色改為自己定義的color/bgColor

當執行這個APP時,若果這個ListView中的child很多
就需要拖拉(scroll)畫面才能看到其他的內容

問題就在於這個scroll動作,
在拖拉這個ListView時,會發現拖拉的過程它會變成一坨黑
感覺是buffer的問題

解決的方法在SDK blog上有提到,
只要在Layout中加入一句 android:cacheColorHint="#00000000"
剛剛的Layout xml更改後變為


便可以解決這問題了。

2011年11月9日 星期三

[Android] 取得Resource asset的URI

有時候可能需要取得resource中某個asset的URI來供一些function使用
例如 BitmapFactory.decodeImageURI(Uri uri) 這樣的function

如以透過下面方法取得



如此便能得到我想要的URI了

2011年8月21日 星期日

Liquid Galaxy

http://code.google.com/p/liquid-galaxy/

昨天在coscup2011看到這個計劃的介紹
Demo影片說明了這個計劃在做些甚麼事情


介紹的人,說liquid Galaxy主要就是用了
Google Earth和WebGL
讓google earth可以在web上面流暢地檢視3D的場景
同時透過同步多台電腦,設定誰是master,誰是slave
就做到這樣子的類似電視場的效果

以我的理解,基本上他就是做了一個可以同步化多台畫面
省了支援多顯的顯卡

但就是...幾個螢幕就要幾台電腦的樣子

蠻有趣的,而且聽介紹者說,要自己安裝設定也不難
只要透過修改google earth裡的driver.ini檔就可以了

可惜我沒有這麼多台電腦呀....

2011年5月6日 星期五

[jquery] 網頁內嵌音訊檔

最近接的兩個case中,一個要在網頁裏放影片,一個要在網頁裏放影片加音樂

翻了一下一些網路上的jquery liberary,也試了好幾個,不過不知道是我沒有翻到他們的API還是我太弱不知道怎麼用,好幾個都只是很簡單播放功能而已

因為我那兩個的case是某研究的實驗問卷性質,,所以都需要限制使用者的瀏覽行為
像是一定要看完影片或是聽完音樂才能按下一步,又或是要看播了網頁上的「我已看完說明」的按鈕就馬上開始播放音樂,諸如此類的...

音樂播放的話,我個人會推薦 jplayer
它是一個適用於html5 和Flash的jquery liberary

我推薦它的原因有幾個

  • 官網上的說明蠻詳細的,有很多教學的範例
  • 它可以控制影音的功能夠齊全,最基本的播放、停止、暫停,然後比較進階的像是從幾秒開始播放、重覆播放、靜音等等
  • 有齊全的event事件可以抓取, 只要設定特定事件的listener, 便可作很多控制了!
  • player interface有豐富的css module可供使用,都在官網上面可以找到


在這來個簡單的範例好了

首先要把jquery.jplayer.min.js載下來,嵌到你的網頁裏,'js/'是我自己放javascript的目錄
要是想要用遠端檔案的話也是可以。

當然...jquery.js是必要的,不過我懶得貼上來了

然後,最簡單的嵌進一個音樂mp3檔


至於UI方面的話, 因為我還沒有需要用到, 所以也沒有特別去看
便大概應該就是設定一些CSS屬性而已
有需要的人可以去官網裡, 有教學

至於影音方面,比較遺憾的是他只支援 .m4v .ogv

下次再來介紹一次有甚麼好用的video player liberary

2010年11月28日 星期日

Bonjour! 法文筆記 (1)

今天終於去實現去學法文的第一步了

去了台灣法國文法協會學初級法文

課堂上都用全法文授課

老師叫做 Thierry, 感覺就是一個法國人, 然後很浪漫的會一邊上課

一邊哼歌, 然後慢慢地優雅地擦掉白板上的字


今天雖然第一次上課, 但還是一口氣就上了三小時, 中間有兩次十分鐘的休息時間
而且教得不少耶, 一到十, 簡單問候, 字母A~N, 一些簡單的名詞


~A跟B兩人簡單對話~

A: Bonjour.
B: Bonjour.

A: Ça va? 你好嗎? (Ç, 這個有尾巴的c是一個像s的氣聲)
B: Ca va. 不錯

A: Je m'appelle Thierry, et vous ? 我叫Thierry, 你呢?
B: Je m'appelle Zen. 我叫Zen.

A: J 'habite à Paris, et vous ? 我住在Paris, 你呢?
B: J 'habite à Marseille. 我住在Marseille.

A: Au revoir 再見!
B: Au revoir! 再見!

就是很莫名的問完住哪裏然後就say goodbye了....XD


~字母~
A B C D E F G H I J K L M N
其中,
A, H, K→ 聲母為[a]
B, C, D, G→[e]
E→[ɜ]
F→好像跟英文唸法一樣
L, M, N → 跟本來英文差不多, 但最尾會有個[Lɜ]音, L唸起來就像Ella

~名詞~ 法文的物件會分陽性跟陰性, 所以量詞也有差別
陽性
Un sac 背包
Un tableau 畫板,黑板
Un stylo
Un livre
Un garçon 男生

※Un 是陽性量詞, 一個

陰性
Une radio 收音機
Une télévision 電視
Une chaise 椅子
Une table 桌子
Une fille 女生

※Une就是陰的一個囉~

Qu' est-ce que c'est? 這是甚麼?
C'est un stylo 是一支筆呀


~數字~

0 zéro
1 un
2 deux
3 trois
4 quatre
5 cinq
6 six
7 sept
8 huit
9 neuf
10 dix


還教了幾個聲母consonnes, 感覺跟英文的聲母唸法差不多
b d f k, l m n


老師最後下課叫我們回去要自己先複習, 要寫一篇, 這樣才記得

總括來說
蠻有趣的, 雖然一開始先教的不是聲母韻母
而是簡單的對話, 然後讓我們跟隔壁的同學互相練習
這樣學起來比較有親切感.

現在每天都聽法文歌好了!


2010年8月1日 星期日

[XML schema] simple element, attribute, restriction

在撰寫XML時, 我們或許會定義一份格式檔

他的功用就是說明你的XML裏面元素的結構是如何

讓讀者可以透過這份格式檔來快速理解你的XML內含甚麼元素、元素的類型代表甚麼

這樣的格式檔, 現時有兩種: XML schema與DTD

因為XML schema完全使用XML原本語法的關係,在使用上已經漸漸取代掉DTD了
我不太想要學快被淘汰沒用的東西, 在這裏就記錄一下XML schema基本的使用方法吧


simple element
simple element代表這個物件裡只含有單一的值(如"string, integer, date, time "等), 而不會再有階層式的其他物件

<xs:element title="my blog" type="string" />

而type的類型共有以下幾種:
xs:string
xs:decimal
xs:integer
xs:boolean
xs:date
xs:time

-----------------------------
Attribute跟 restriction

<xs:attribute name="letter" type="xs:string" use="required" default="A">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[A-Z]|[a-z]"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>

其中,
<xs:attribute name="letter" type="xs:string" use="required" default="A" />
use的值為required代表這個attribute是必要的屬性, 而使用optional則是選擇性的
default="A" 則是說這個attribute預設的值為"A"

<xs:restriction base="xs:string">
<xs:pattern value="[A-Z]|[a-z]"/>
</xs:restriction>
這是限制的部份, 定義letter這個attribute值的範圍
base="xs:string"代表這個是限制字串的屬性
pattern value 說明這個限制字串的屬性是只能填大或小寫的一個英文字母



2010年5月2日 星期日

安裝與設定SVN server

當常常會在不同地方工作時,會常常需要把手中的資料在每台電腦上同步後才能繼續工作
而對於寫程式來說,更加需要版本控管來減低把自己的code改爛後無法復原的情況發生

實驗室的學長以前架了CVS server, 但其實CVS已經越來越少人在用了..
大家都改用SVN, 雖然不知道主要原因是甚麼, 但應該至少是用起來比較方便

記錄一下如何架設SVN

基本上要架設SVN, 都會一並使用svn server端跟client端
最普遍的, server 端使用Subversion, 而client端則使用TortoiseSVN

先把TortoiseSVN安裝好後
我們再來安裝Subversion (Subversion需配合Apache使用, Apache的安裝請自己再找文章吧)

安裝完Subversion後, 請把目錄資料夾裏 Subversion/bin 底下的
mod_dav_svn.so
mod_authz_svn.so
libdb4X.dll <--因版本不同, X可能會不一樣, 我下載的版本就是libdb44.dll
libeay32.dll ssleay32.dll
這5個檔案copy到Apache底下modules的目錄裏

然後開啟 Apache底下conf目錄裏的 httpd.conf 檔案apache的設定
找到以下這兩行
#LoadModule dav_module modules/mod_dav.so
#LoadModule dav_fs_module modules/mod_dav_fs.so
然後把其前的 '#' 刪掉, 讓apache執行時讀取這兩個模組

接著, 再加上下面這兩行指令
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so

再來, 我們需要設定SVN存放版本資料的位置,
繼續在httpd.conf裏加入以下
####SVN設定###########
<Location svn/code>        #設定網址, ex: http://localhost/svn/code
DAV svn
SVNPath c:/svn/myCode #設定SVN資料在本機裏的絕對路徑, 待會我們再來建這個檔


# how to authenticate a user
AuthType Basic
AuthName "Subversion repository"

#進行帳號驗證時的帳號、密碼資料
AuthUserFile "c:/svn/myCode/conf/passwd.ini"

# only authenticated users may access the repository
#操作時要進行帳號驗證,拿掉此行就不會進行驗證
Require valid-user

# our access control policy
# authz.ini 是設定帳號對各 Project 可讀/寫權限的設定檔
AuthzSVNAccessFile "c:/svn/myCode/conf/authz.ini"
</Location>

儲存好之後, 我們接下來使用
按照剛剛打的路徑建立一個 C:/svn/myCode 的資料夾, 以放置SVN的資料

成功建立repository後, myCode內應該會有以下檔案
因為要提供網路存取的關係, 需要把這個c:/svn 資料夾共用出去, 使用者為everyone


剛剛設置 httpd.conf 時應該有注意到我們有設SVN的存取密碼及權限檔
現在先利用Apahce來建立密碼檔 - passwd.ini
開啟cmd, 輸入
"C:\Program Files\Apache Software Foundation\Apache2.2\bin\htpasswd.exe" -c passwd.ini [帳號]
輸入帳密後, 在apache/bin 裏應該就會產生一個passwd.ini的檔案
裏面就會有剛建的帳號跟加密過的密碼
把passwd.ini 放到 c:/svn/myCode/conf/passwd.ini

接著我們建立存取權限的檔案authz.ini
自己手動新增這個檔, 然後修改內容為以下
# 先定義群組
[groups]
developer = user1,user2,user3
art = user4
everyone = *

# 預設拒絕所有人進入瀏覽
[/]
* = # *為annoymous, *= 即匿名不可存取
# 設定儲存庫訪問權限,語法:[儲存庫:專案路徑]

[ProjectName:/]
@developer=rw #可讀寫
@art=r #僅可讀取

存檔.

以上步驟皆完成後, 現在便來重開Apache, 更新設定吧.

最重要的時刻來了, 我們連到 http://localhost/svn/myCode
如果SVN成功的話, 將會出現 Revision 0:/ 的畫面


如果不成功的話...可能就要檢查:
1. svn的資料夾的共用設定
2. 在httpd.conf設置讀入模組那4行程式的順序
3. 環境參數中是否有Subversion的路徑

再不行的話, 我也不知道了...再砍掉重練吧

2010年4月4日 星期日

架端web server不能連結至localhost的問題

之前在windows vista上架了一個Apache2.2 http server.
剛架設完後, 當然是很興奮地開啟 http://localhost
來測試一下有沒有出現"It works!"的畫面呀

因為再之前也有架過, 即使在httpd.conf設置後路徑前, 大概至少也看得到it works吧
但我錯了, 事情絕非單純

我開始http://localhost後
IE竟然是顯示404 page not found的頁面
這代表連不到這一頁.


於是便進行了以下測試

  1. 確認Apache monitor有否正常啟動apache server, 亮綠燈 (綠燈呀! 但如果是紅燈但restart後也一直不能正常運作, 可能就要重灌一次apache了, 因為可能灌的時候某些程序出錯了)
  2. 檢查Apache目錄裏htdocs裏是否有index.html (有的, 所以應該是路徑設定有問題)
  3. 再檢查conf裏的httpd.conf,檢查一下各種Directory跟root的路徑有沒有跟真實檔案位置不一樣,這有可能是因為在案裝過程中打錯了路徑或甚麼的(都正確呀,見鬼了@@)
  4. 然後再檢查防火牆跟防毒的設定,確定沒有因為中毒或奇怪地被設定把自己的IP位址給封鎖掉...orz(都好好的呀...)

真是百思不得其解,但後來發生
我打自己的IP(http://140.xxx.xxx.xxx)卻是成功的出現It works!
所以如果跟我遇到同樣的情況,上面檢查的第1,2,3點,應該都不用進行了
基本上應該是localhost這個遮罩沒有對應到本機的IP

後來我去請教高手
高手請我輸入 http://127.0.0.1/ 試試看
結果真的成功,証明應該是跟Apache的設定沒關係
然後高手判斷這應該是localhost沒對應到本機IP的問題

他告訴我開啟
windows/system32/drivers/etc/hosts 這個檔案
然後加上一行
127.0.0.1 localhost
意即把IP對應到後面的host name

儲存後我再開啟 http://localhost/

It works了耶!! 太感動了QQ
雖然我也不知道為甚麼我電腦原本的設定沒有把127.0.01跟localhost對應起來
不過以後再遇到這種不能開localhost的情況, 大概就可以試這些方法吧.

2010年1月11日 星期一

安裝使用wiiusej


wiiusej是一個可以供java讀取wiimote事件的JAVA API
使用wiiusej這個套件, 可以讀到wiimote中各種訊號
如x, y, z各軸的加速度, 轉動量、按了哪顆鍵等
joystick的資訊也可以抓得到

此套件還實作了一個詳細的UI來讓使用者看到各種訊號的變化

而且撰寫者還加入了一個可以支援guitor hero3三介面

wiiuseJ的快速使用教學

1) import wiiusej.jar in your java project.

2) put the 2 dlls files libWiiUseJ.dll and wiiuse.dll at the root of your project (or the two .so files if you are under linux).Connect your wiimote to your bluetooth stack.

3) In your code : Wiimote[] wiimotes = WiiUseApiManager.getWiimotes(X, true);//x is the number of wiimotes to connect. True : make it rumble the first time you get the wiimotes.

4) Make a class (MyListener) implementing the WiimoteListener interface.

5) wiimote[0].addWiiMoteEventListeners(new MyListener());//register my class as a listener of the first wiimote.

===> MyListener will receive events from the wiimotes is registered on.


wiiuseJ的官網
Powered By Blogger

Label Cloud

2009 (1) 不能連localhost (1) 內嵌音訊 (1) 求職 (1) 面試 (1) 音樂 (1) 動畫師 (1) 帳號管理 (1) 排程 (1) 畢展 (1) 創意市集 (1) 惡意程式 (1) 電腦動畫 (1) 權限管理 (1) adobe (1) android (4) animation (1) animator (1) apache (3) art (5) art taipei 2008 (1) audio (2) bbs (1) birthday (1) black and white (1) browser (2) career (2) certification (1) cgw (1) cinematography (1) code (3) Collie (1) color (2) command (16) competition (1) computer science (3) connection (1) cover (1) crafyJS (1) creative (1) CSS (1) DBN (2) design (7) developer (1) display (1) drawing (1) eclipse (3) embed (1) engine (1) EntityJS (1) exception (1) exhibition (1) flower (1) frame (1) freebsd (11) french (1) friends (3) function (1) game (1) google (2) graphic (3) html (2) HTML5 (1) https (1) illustrator (1) image processing (1) interactive storytelling (1) internet (3) interview (1) introduce (1) ip (1) japan (1) java (4) javascript (3) JIT (1) jmonkey (1) job (1) jquery (1) LAMP (1) LimeJS (1) linux (8) liquid galaxy (1) ListView (1) localhost (1) log (1) mail (1) marquee (1) midi (1) mime-type (1) mis (1) MIT (2) mo-cap (1) mobile (1) Modernizr (1) motion capture (1) movie (1) music (3) narrative (2) NCCU (3) news (1) note (10) originality (1) otaku (1) painting (4) performance (1) photography (2) photoshop (7) php (1) player modelling (1) poster (1) postfix (1) programming (5) QuarkJS (1) resource (1) schema (1) scroll (1) self aware (1) semantic (1) server (1) share (1) sketch (2) software (4) solve (2) Sonivox (1) speaking (1) ssl (1) SSLPeerUnverifiedException (1) streaming (1) Subversion (1) sunspider (1) SVN (3) svn server (1) system (1) taipei (1) test (1) tfam (1) tool (1) TortoiseSVN (1) tutor (1) ubuntu (3) update (1) uri (1) video (1) vim (1) w3c (1) wap wcss css css2.0 (1) web (8) WebGL (1) webkit (2) well-form (1) wiimote (1) wiiusej (1) workshop (1) xhtml (1) xml (2)