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一向高寬容性作風,就不會那麼容易出錯了.

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)