2010年4月8日 星期四

他X的台灣大學教育(恨文,要戰,請!)

『大學不是職業訓練所!』

對,是他X的學術殿堂,全台一開160幾間,比夜市還多。
夜市還能貢獻一些地下經濟勒。那些多出來的大學除了磨耗年輕人的青春來養只懂得教難以活用的知識的教授還能幹什麼? 還間間菜色都一樣,淨是某些系在那裡排列組合(拎盃唸的系是大獨盃成員,免疫,挖哈哈~)。

『我們要平衡城鄉差距!我們是通才教育!』
我看是平衡城鄉間學店所得級距的差距,還有把年輕人通通變成廢才的教育吧?


18~23歲這四年有多寶貴這些人知道嗎?『所有人都是大學畢業』,搞到不適合透過大學去學習的人不去浪費那四年都不行。 說大學不是職業訓練,問題是連『職業訓練課程』這種半年一期可以搞定的東西都搞不定,那是要搞定什麼更了不起的東西?

這年頭不管結果是出來工作當黑手、還是搞什麼了不起的研究、不管你大學有沒有畢業,你一定得要有的就是『獨立思考的能力』、『自我學習的能力』以及『解決問題的能力』。
 因為除了時候到通通都得拖去種以外,天底下沒有學校、老師、父母可以保證未來是什麼。

結果勒?常常遇到小朋友東西不教就不會、要他們自己想就是兩手一攤、幫他Google 完連結給他,有資料可以給就不錯了還敢對英文面有難色。

台灣不是中國、不是日本,不是那些有著上億人口可以單靠自己人跟自己人做生意就能開心過活的地方。要能自己掌握自己的命運,而不是到時候被中國一口吞掉再像當年一紙馬關條約隨意丟棄,還是被逃來台灣的外來政權隨意奴役,對小孩子就不要太好。

HTML5 Canvas簡介

今天下午寫SBIR工作記錄簿寫到實在很幹,我對這種沒啥意思的紙上文書作業一向很皮(這是病),像這種類似小學寫寒暑假作業到家庭聯絡簿的東西比起看牙齒都還來的令我難過。
所以後來寫到後來大爆炸,冥冥之中就想起Gaius Julius Caesar的名言:(他誰?凱撒大帝啦。)

『作一件事不要只有一個目的。』(真的有這句話?起乩是吧?)

剛好,想起前陣子客戶也對這方面的需要非常殷切,就把心一橫,硬是把SBIR的內容,從原本是寫ZK Studio的實做,轉向了研究起HTML 5 Canvas 與 Java 2D API之間的差別。(喂喂喂~)

於是,ㄟ死逼唉阿寫完了,HTML 5 Canvas + Java 2D的API K過了,客戶想做的東西:以AJAX呈現影像辨識結果實做實時管理的功能也有著落了,一魚三吃,一箭三雕啊 ,哇哈哈~~~

言歸正傳,Canvas。

HTML 5 的Canvas instance,其實只提供兩個方法,那就是:

 getContext()完取到的 CanvasRenderingContext2D 
才是實際2D繪圖的主角。
這個CanvasRenderingContext2D,提供了一系列標準的低階2D Graphic 方法,供開發者在Canvas上畫出所想要的圖形,以下稍微介紹幾個重要的(要詳細,乖,去看這裡):

向量圖形:
簡單的rectangular 系列,例如:

  1.     ctx.fillRect(25,25,100,100);  
  2.     ctx.clearRect(45,45,60,60);  
  3.     ctx.strokeRect(50,50,50,50);  

標準的line path 繪製:

  1. ctx.beginPath();  
  2. ctx.moveTo(75,50);  
  3. ctx.lineTo(100,75);  
  4. ctx.lineTo(100,25);  
  5. ctx.fill();
  6. ctx.closePath();
其中fill()會以目前ctx的current Style去作填色。

Arc Path 繪製(可與line並用):

  1. ctx.arc(x,y,radius,startAngle,endAngle, anticlockwise);  
  2. ctx.arcTo(x1,y1,x2,y2,radius)

二次曲線、貝茲曲線:

  1. ctx.quadraticCurveTo(25,25,25,62.5);
  2. bezierCurveTo(75,37,70,25,50,25); 


影像鑲嵌:

將一個Image加入Canvas其實很簡單,只要

  1. var img = new Image();   // Create new Image object  
  2. img.onload = function(){ ctx.drawImage(img,0,0);  }
  3. img.src = 'myImage.png'// Set source path  

當然你也可以在img.src之後馬上call ctx.drawImage(),但這樣drawImage就會等到image遠端讀取結束才會離開,而你的程式就得等了。
其他還有很多drawImage相關的 arguments,例如scaling, slicing 等。

填色:

支援兩種style 填充方式與多種色彩格式
  1. ctx.fillStyle = "orange";  
  2. ctx.fillStyle = "#FFA500";  
  3. ctx.fillStyle = "rgb(255,165,0)";  
  4. ctx.fillStyle = "rgba(255,165,0,1)";  
  5. ctx.strokeStyle = "orange";  

其中rgba 的a 就是指alpha值,也可以透過設定

  1. ctx.globalAlpha = 0.3;  

來單獨指定。

轉換:
translate, transform, scale,基本上就是平面的 仿射投影(Affine)支援。(詳細自己看,念資工的線代忘記就wiki一下,念測量的忘記請去找塊豆腐撞死)。


動畫(Animation):
曾經(像我一樣笨)認為Canvas會跟Flash compete的人可以放下心中的大石了。Canvas畫上去的東西就是潑出去的水,要改變就是砍掉重畫,基本上也不會支援甚麼canvas中的圖形物件事件處理(沒關係,Ajax的Framework例如ZK是作得到這段的,都有人在Canvas上porting Quake2了,雖然performance...)。

以下是Mozilla官方推薦的Basic Animation steps:

1. clear the Canvas
除非你接下來要畫的東西會填滿整個Canvas,否則你必須先清除你之前畫的所有東西,要清除當下畫面,最簡單的作法就是呼叫clearRect(...);

2. Save the Canvas State
如果你改變了任何可以改變Canvas狀態的設定(styles, transformations, etc)而且你想要確定前面曾經作出來的狀態可以保存下來,請記得在該save的時候save。

3. Draw animated shapes
把當前的Frame畫上去。

4. Restore the canvas state
這個frame畫完後,記得要restore到畫之前的狀態。
再來,就是用HTML底下的API呈現出Animation的效果。

  • setInterval(animateShape,500);

  • setTimeout(animateShape,500);



  • 想看這種東西可以作到怎樣,可以參考:
    http://www.benjoffe.com/code/tools/functions3d/


    呼~累了,該去睡了。

    2010年3月25日 星期四

    當你去面試的時候

    如果你是一個軟體開發者,或任何類型的知識工作者 。
    在台灣,當你面試的時候,你最重要的就是看清楚你眼前的面試官對管理的態度為何。

    馬沒有悍性就不可能日行千里,人沒有忍受痛苦的能力就難有成就,公司沒有給底下的人衝撞秩序的可能性就不會有所創新。

    面試官通常也是未來跟你一起作戰的人,而如果這個人對管理的看法還是依循著傳統台式管理文化的,那你最好再多加考慮,因為這種人通常不相信管理是一項工作,而比較把它當成一種權力。

    把管理當成權力,就會不去對它作該有的專業要求、磨練和檢討。
    把管理當成權力,最後組織的目標就會變成管理者的私人利益,而不是公司整體的成功。
    把管理當成權力,就越難有彈性的面對全球化競爭下比以往更難克服的無常。

    這樣的人不懂分享,偏好獨占,難以溝通,習於命令。



    如果缺錢、實力不足,這種公司練練功當跳板可以,但是千萬別待太久,這年頭企業、工作職位的生命遠比個人職涯的生命短。

    而這種類型的公司如果不幸還是小公司,未來就更沒機會了。

    你想當個軟體專案經理?

    如果是,那也許跟你一起工作的開發者 會想告訴你:

    1.這世上沒有天才會跑來寫程式,你手上可用的開發人員已經是上天的恩賜了。

     2.當專案主管的一定要悲觀,因為你的開發人員無可救藥的樂觀。

     3.不要錄取悲觀的開發人員,把他們從專案團隊中扔出去。

     4.開除那些讓別人愁眉苦臉、自己嘻皮笑臉的傢伙。

     5.當開發人員說他『真的』需要什麼辦公設備,買給他,『真的』。

     6.你如果讓開發人員決定『可以』,那他們就會讓專案『沒問題』。

     7.開發人員說的IF ELSE是不可分割的,只認得IF就要小心被ELSE修理。

     8.執行專案的心態:面對現實、冷血計算。

     9.加班是不應該發生的失控現象,除非在PUB裡。

    10.有的案子有毒,接了不該做的案子會毀掉往後的生產力。

    程式設計師基本工作準則:

    每個人寫的東西不一樣,有大有小、有複雜有簡單。
    如果你的工作跟我一樣具有以下特性:

    1.你的Humen Resource常常只有你自己一個人。
    2.老闆交代的任務,常常就是希望你能把任務搞清楚、順便結案。
    3.你永遠也不會有足夠的時間作開發、寫程式。
    4.你痛恨加班。
    5.老闆總是覺得事情很簡單,是你想得太複雜。
    6.你就是負責救火的,所以沒人會來救你。
    7.再強調一次,你痛恨加班

    那以下的玩意我相信對你會非常有用。

     1.不畫圖,包括你自己在內沒人知道你在做什麼。
     2.不測試,程式碼會臭到爹不疼、娘不愛。
     3.妥善計畫唯一的副作用是:你會準時下班。
     4.寫程式需要信仰,開機前記得先禱告。
     5.最好的計畫書通常誕生在需求書的背面...就是那片空白處。
     6.程式碼剪貼的次數乘上五,就是你未來一個月加班的時數。
     7.加班趕程式,只會讓編譯器製造出更多爛攤子。
     8.越重要的開發工具通常越原始,所以紙跟筆最重要。
     9.UML 只有在你把一個圖畫了N遍而不想畫第N+1遍時才需要。
    10.計畫書跟UML是不能編譯的,程式永遠是寫下去才知道。
    11.越重要的知識越硬,無知是要付出代價的。
    12.『聰明、而且把事情做好』把這句話背下來。

    2010年3月23日 星期二

    Google 對中國問題的解法:把Search Engine 搬到香港!

    簡單的講,Google想對中國政府說:

    『我還是想在中國做生意,但censorship,請用你的金盾工程去作。』

    這樣也是一種解套, 很聰明,利用中國政府對於內地與香港特別行政區之間法律系統的差別來解決整件事情在中國法規文化、Google企業文化與Google企業利益三個方面的衝突與需求。

    這樣一來中國的生意可以繼續作,二來香港的法規(最起碼中國政府還不敢動HONG KONG BILL OF RIGHTS)比較接近西方比較不需要跟中國的潛規則玩遊戲, 三來技術上也省掉censorship的部份,雖然企業文化上從『不做惡』變成比較消極的『不主動作惡』,但至少達到了一個大家都不滿意但還可以接受的妥協。

    再來就看中國政府是打算要『在商言商』放它去,還是不聽話的就是得抓來『殺雞儆猴』了。

    2010年3月22日 星期一

    道德可以用來要求自己,但不可以用來觀察詮釋世界

    前陣子在思考一個問題時,又犯了這樣的錯誤。

    戒之、慎之。