2011年10月4日 星期二

Javascript Canvas Frameworks

http://www.nublue.co.uk/blog/javascript-canvas-frameworks/



Times as ever are a changing. Carrying on from my last article on websockets, I’ll be looking at how the user interfaces of future web applications will work. For truly spectacular human computer interaction it is necessary to demand more than what’s possible with the usual elements of the document object model (DOM). For this web developers have invariably turned to Flash for videos and online browser based gaming. Often cited as the nail in the coffin for Flash, the HTML5 Canvas draft specification is now almost fully implemented on the latest versions of most browsers. With mobile and tablet devices we are seeing more and more having native support for Flash removed. But do not shed a tear.

Yes. Why? Here are a few reasons.
  1. It’s more efficient with fewer lines of code and smaller deliverable size
  2. It is debuggable via the browser
  3. No compilation step
  4. Intuitive event handling
Of course with any emerging technology there is the issue of lacking community support and mature frameworks with which to work with it. However, we are already seeing a number of new frameworks and ports emerging and gaining popularity. Here are a few to consider with some demos.

The new Canvas element in HTML5 is powerful, but it can be difficult to work with. It has no internal concept of discrete display elements, so you are required to manage updates manually. The Easel Javascript library provides a retained graphics mode for canvas including a full hierarchical display list, a core interaction model, and helper classes to make working with Canvas much easier.
In the following example we see many loaded bitmap images handled simultaneously with make shift force under gravity applied and a small impulse force. We see how well easel manages the rendering of the layers given canvas itself has no concept of discrete objects. Mouse over the black area and click to begin spawning images:

Box2d is a physics engine written for C++. It has been ported to many other languages and now there is a version for javascript and canvas ported from the flash version. Box2d is a rigid body simulator that can handle dynamics and collisions of free bodies, fixtures and joints. Unlike the previous example, the objects created in this framework will instantly afford real world dynamics. In the example below we see a swinging set of pendulums. Click on the canvas to reset the program:

WebGL is a cross-platform JS API used to create 3D graphics in a Web browser. Based on OpenGL ES 2.0, it will be familiar will persons with exposure to the standard OpenGL API, which would include most University educated IT professionals. Because it runs in the HTML5 Canvas element, WebGL fully integrates with all DOM interfaces. Major browser vendors Google (Chrome), Opera (Opera), Mozilla (Firefox), and Apple (Safari) are members of the Khronos consortium’s WebGL Working Group. It’s key advantage is its hardware-accelerated 3D graphics capability.
The following is best viewed in Chrome. To rotate the cube click on it and use the keyboard arrow keys to set it spinning in a certain direction.
In conclusion there are some exciting possibilities on the horizon. It will certainly all begin to kick off when all major modern browser have native webGL support allowing for hardware accelerated 3D graphics. As ever Microsoft are dragging their heals and are keeping their cards close to their chest on this one. Google seem to be in full force behind openGL being the first to implement it. Also head on over tohttp://www.chromeexperiments.com/webgl for some really impressive examples. As I mentioned before this new technology goes hand in hand with the new low latency duplex websockets in terms of bumping the browser up to being an infallible platform for distributed systems. We shall have to wait and see.

Fabric is a drawing tool that utilizes the HTML5 Canvas. It comes with a built in SVG parser. It was envisioned in order to createa high performance SVG manipulation tool for use on T-Shirt design websites. Using Fabric.js, you can create objects on canvas such as rectangles, circles, polygons, or more complex shapes consisting of hundreds or thousands of simple paths. You can then scale, move, and rotate these objects using the mouse by default as well as modify their display properties. You can also manipulate these objects in group with a simple mouse selection.  Visit http://kangax.github.com/fabric.js/svg_rendering/ for some example of the complex SVG objects you can render and manipulate.
Below is an example where you can select and resize, and rotate the letters of the Nublue logo.

為網頁加入多點觸控功能

http://blog.darkthread.net/post-2011-10-02-html5-mutli-touch.aspx



為網頁加入多點觸控功能

相信大家應該看過不少用HTML5做的繪圖板範例(例如: 這個這個這個這個),事實上,只要一個canvas元素配合mousedown, mousemove, mouseup事件,加上幾行Code我們就可以自己寫一個陽春手繪板。不過,這種陽春寫法在iPad、iPhone、Android等觸控平台瀏覽器就吃不開了。
在觸控操作時,自然不會有mousedown、mousemove、mouseup這些事件(難道得抓一隻黃金鼠在螢幕上磨蹭嗎?),而是另外定義了touchstart、touchmove、touchend等觸控平台的專屬事件(參考: iOS APIW3C草案),HTML5 Rocks有一篇很棒的文章介紹開發支援觸控事件網頁的相關知識,小小地研究一番,以下是我的心得筆記:
  1. 在touchstart、touchmove、touchend等事件中,可透過事件參數的touches屬性取得多個觸點位置,可以實現多點觸控甚至捕捉複雜手勢的網頁。(但偵測手勢的演算法會是一大挑戰)
  2. 事件參數提供了touches(螢幕上所有的觸點)、targetTouchs(接觸到特定DOM元素的觸點)、changedTouches(目前事件中發生變化的觸點,例如: touchmove事件移動中的觸點或touchend事件離開螢幕的觸點)等觸點資訊。
  3. 上述觸點資訊物件會提供幾個屬性: identifier(識別碼,可供在多個事件中持續追蹤同一觸點的變化)、target(觸點所操作的DOM元素)、client/page/screen座標(相對於元素、網頁、螢幕的座標)、radius座標及rotationAngle(可用來描述手指接觸面形狀,但目前尚無瀏覽器支援)
  4. 為避免原本瀏覽器的兩指縮放、拖拉捲動操作干擾,可加入viewpoint meta及加掛document.body touchmove事件將其停用,寫法如下: 
     
    document.body.addEventListener('touchmove', function(event) { 
      event.preventDefault(); 
    }, false);
  5. 由於touchmove的觸發頻率很高,若每次被呼叫就立即執行回應邏輯,可能造成系統過度負擔,因此可在touchmove時將touches等資訊保存下來,再透過setInterval以固定頻率執行回應邏輯。(window.requestAnimationFrame會依瀏覽器更新動畫的頻率觸發,可完全配合裝置基於效能及省電考量下的動態調整,算是更好的解決方案,但要考量瀏覽器是否有支援)
  6. 在PC環境下摸擬觸控效果可降低開發及測試的難度,有個很不錯的Touchable jQuery Plugin可以將mousedown/mousemove/mouseup對應成觸控事件。事實上,它另外定義了tap、touchablemove、touchableend等事件,可同時對應到滑鼠操作及觸控,讓網頁程式可同時支援滑鼠及觸控兩種操作平台,如果網頁只要做到單點觸控,算是很好的跨平台選擇。
  7. 針對MacBook或MagicPad等支援多點觸控的裝備,HTML5 Rocks文章有提供一套在Mac實現瀏覽器多點觸控的方法。
  8. 從jquery.UI.iPad plugin偷學到簡單偵測瀏覽器是否支援觸控的方法: 
    $.extend($.support, { touch: "ontouchend" in document }); 
    以上程式碼擴充了jQuery,如此便可由$.support.touch傳回true或false偵測是否瀏覽器是否有觸控功能囉~
光說不練是嘴砲,實彈射擊不可少!
想實地觀察多點觸控事件所能擷取的資訊,所以我寫了以下的測試網頁:
排版顯示純文字
DOCTYPE html>
 
<html>
<head>
    <title>Mutli-Touch Testtitle>
    <script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.6.4.js" 
            type="text/javascript"> script>   
    "viewport" 
     content="width=device-width, initial-scale=1.0, user-scalable=no">
    

4 CSS Tricks That You Should Know


CSS is full of fun and you can't argue on this! The more you work on it, the more you learn about it. You might have seen several pages that are amazingly designed, but often fail to notice the concept behind that. Based on my experiences and observations, I have these 4 CSS techniques which aren't familiar enough to be used by you in your designs. Knowing these will help you a lot by giving you more customization options to your design.

1. Merge Textboxes into your Design
You can do this by selecting the textboxes you want and apply the CSS below. With this code you are removing the border and making the background of the text box transparent. Will be extremely useful in designs, where you want to remove border of the elements and merge them.
input[type='text'] {
    border: 0;
    outline: none;
    outline-offset: 0;
    background:transparent;
    padding:0px;
}
2. Access the disabled Textboxes
Sometimes the background color of the disabled text boxes may annoy your users, might be because of the gray color that comes by default.
input[disabled]{
  color:red;
  background:transparent;
}
3. Change the default selection text color
You can change the color of the selection with the CSS below. Works with webkit as well as firefox.
::selection{
  background-color:orange;
  color:green;
}
::-moz-selection{
  background-color:orange;
  color:green;
}
::-webkit-selection{
  background-color:orange;
  color:green;
}
4. Change the Look and Feel of scroll bars
You can access your scroll bars and modify them into what ever you want. You can see that this blog has different kind of scroll bar than the usual scroll bar ( if you are using webkit). I have no interest in finding the property for mozilla, opera and others, if you do care follow this bug, which might lead to right resource.
::-webkit-scrollbar {
margin-right: 5px;
background-color: #EEE;
width: 7px;
}

::-webkit-scrollbar:horizontal {
margin-right: 5px;
background-color: #EEE;
height: 7px;
}

::-webkit-scrollbar-thumb {
border: 1px #EEE solid;
border-radius: 12px;
background: #777;
-webit-box-shadow: 0 0 8px #555 inset;
box-shadow: 0 0 8px #555 inset;
-webit-transition: all .3s ease-out;
transition: all .3s ease-out;
}

::-webkit-scrollbar-track {
-webit-box-shadow: 0 0 2px #ccc;
box-shadow: 0 0 2px #ccc;
}
That's it for now and hopefully these are useful to you at one point or the other. Stay with us for more interesting posts. You might want to see these interesting posts about CSS.

2010年6月4日 星期五

人家的蟻族...那我們呢?

這幾天看了文茜的世界周報的報導
關於大陸最近的一個現象-蟻族有一些感觸


因為大陸的開放
大陸的教育體制也開始了一些變革
90年代開始在各地廣設大學以因應大陸人口爆炸的教育需求
大陸廣設大學後的一個現象就是蟻族的出現


在這先介紹一下蟻族是什麼
蟻族是一群群居在都市邊緣貧困地區的高學歷族群
在一個人口龐大教育體制卻缺乏的社會中
只要能考上大學就鐵定是當地的小秀才
不是第一名 也至少是前幾名
背著父母到處籌來的錢跟全村的期望
來到大都市的學校讀書才發現
自己從千中選一的角色變成萬中之一的角色





“上京讀書後 可以在京裡找到好工作 努力工作讓父母過好日子”


等到讀完了書更才發現
外面的世界根本不是像當初在鄉村想的那樣單純
萬中之一的角色變成百萬中之一
在京裡幾乎微不足道
更才發現…自己找不到工作
因為背著鄉民的期待所以不敢回鄉
只能在京裡找零工住在貧民區勉強養活自己
也希望能在那裡等待一份工作的出現….


這跟台灣有什麼關係呢?
台灣現在面臨了跟大陸教育體制很像的命運
台灣從1990年開始提倡“教育改革”
大量的民間團體開始出現在教務改革的路線上
因為大環境、民粹主義和政客干擾的情況下
台灣的教育開始越走越偏…..
也許開始的本意都是善的
可是出現的爭議已經超過原本的宗旨




「打倒升學主義、減輕升學壓力」
這是教育改革最終的宗旨
希望小孩能在免試、優質、快樂、競爭力的狀況下成長


從自學班(自願就學)開始實驗
自學班的學生不用考聯考可以減輕升學壓力
希望在沒有升學的壓力下
可以讓學生獲得全人教育…
真是如此嗎?
分發入學的分數是以每次段考的成績
所以每一次段考都變的非常重要….
所以每一次段考都很有壓力
(91年絕跡)


開放教課書希望能讓孩子在多元的環境下成長
一綱多本而不是讀制式化的內容
也可以讓教課書在多家廠商的競爭下品質更好
真是如此嗎?
多元的版本讓學生無所適從
多元沒有監督的版本錯誤百出
多元要採購的版本出現圖利之嫌
月考會考哪一個版本 大考會考哪一個版本….
學生只好全部都買全部都讀
或是透過補習班來個重點分析
書…讀的更多…更多小孩不得不補習
(現在式,台北市將推一綱一本)




希望學生能在「建構與理解」中學會數學
而出現了一個建構式數學的計畫
希望學生能更輕鬆的方式理解數學
真是如此嗎?
比九九乘法複雜很多老師都很難理解的情況下
強制推行建構式數學
91年第一批建構式的實驗小白鼠進入國中
數學成績整體下滑
92年政府馬上停止此項計畫….




為了讓學生能更貫徹的學習
出現了九年一貫政策
一切希望能彌平國小跟國中階段的落差
讓學習毫無階段的貫徹學習內容
所以改變了國中的學習內容
此後國中一年級也改跟國小有銜接代表的7年級
真的銜接了嗎?
這是台灣最大一次的教育改革
不只是從小學一年級開始實施
還有延伸至同年份中的其他年級
很多已經讀過舊體制的小學生國中生
突然間要改變課程內容出現了大量的不適應現象
為了讓國中與國小的課程內容有所銜接
改變課程方式成合科學習…
什麼叫做合科學習呢?
歷史課跟地理都屬於文科
歷史老師也要會一些地理的東西
為了銜接課程而把課程刪減簡單化
讓九年一貫變成課目劃分更模糊、教學簡單化的狀況出現…
而學生呢……
我只能說..還好我是末代聯考生…
(現在式…)


人的學習應該是多才多藝的
多元入學就是希望小孩能在多才多藝的環境下成長
在課餘時光偶爾可以學學鋼琴、小提琴、畫畫、跳舞…..
多多充實美感與運動細胞
真是如此嗎?
在課程不變的情況下
課後除了要補英文、數學….又多出了跳舞、鋼琴….
父母都希望小孩不要輸在起跑點上
父母都希望小孩能比其他小孩更多一項才藝多一點競爭力
父母……
在我小學期間….除了過年過節會超過9點睡…
(罰跪偶爾也會看到天亮)
現在的小孩….不知道都幾點睡覺….唉….
在這一切為了升學的情況下
越來越多的補習…也讓多元入學被譏為多錢入學
多元入學…是錢堆出來的玩意兒…
教育平等…貧富差距的落差誰來平衡….
更別提敞開的後門與假資料….
(現在式…)


在某總統讀大學不用離開家的政見下
教育部放寬了技校升等大學的條件
台灣的大學突然間像雨後春筍般冒出
廣增大學的結果
從83年的50幾間到95年的147間
大學入學率高達九成
大家的平均學歷都變成了大學
人人真的都讀了大學嗎?
許多技校在設備師資不足的情況下
為了校名門面的好看
強行增設院所至教育部的條件成為大學
使的大學課程品質下滑
更使得外界有 大學生水準低落 的觀感
在少子化的影響下
就學人口逐年下滑
招生缺額的問題逐漸浮出檯面
缺額入取學校的何去何從
將是未來教育體制的大問題….


最後的十二年國民教育…
希望台灣的國民教育
可以從國小國中延升至高中
希望以後的高中可以採取
像目前國小國中般的社區就讀
讓國民的教育品質整體提升…
國民教育真的提升了嗎?
國民教育有沒有提升沒有人能肯定
因為這是一個決策即將執行的教育改革
這是在偉大的杜正勝部長宣佈即將執行
未來的高中將社區化
未來將沒有明星高中菁英高中
教育逐漸走向有教無類
未來也會成 “哇!!!你建中畢業的喔”
變成 “喔.你建中畢業的喔…”
這牽涉到的不止明星學校的生存
國家財政問題….
還有房價地產的炒作….
政客民粹反覆的政策
從冷飯熱炒出來的新聞再變回一鍋冷飯
十二年國民教育真的是遙遙無期
看在之前的錯誤政策
也希望這政策能繼續遙遙無期


這就是台灣的教育….
在說說看在台灣教育下的小孩吧
一個在高中多大學多就學貸款容易的台灣
每個父母心中都希望自己的也是大學生
在入取率高達九成的情況下
許多明明討厭讀書的小孩
不得不考間大學來讀…
來滿足父母、這社會的認同
硬是考上了一間不知名的大學
選了一個不知道在讀什麼的科系
經濟狀況不好的
還借了幾年的就學貸款…
四年後…
不知道讀了什麼的狀況下畢業
身上一身四年就學貸款30幾萬的債
出了社會找了兩萬多塊跟科系毫無關係的工作….


明明不想讀書的學生
也許先行出社會
少了四年的大學生活
多了四年的社會歷練
許多東西是學校學得到的..
可是更多的東西是學校學不到的
但…社會大環境的壓力
四年就這麼不見了




再說說自己的狀況吧…
自己從介壽國中畢業
在介壽國中這種明星學校中
程度不如其他人的情況下
感覺自己很遜很爛永遠考不過別人
最後甚至快放棄自己
可是聯考完分發到了私立聯招的私立大同高中
在相同成績相同程度的同儕間
也才發現了
我也不是那麼不如人
雖然考試分數這種東西不代表一個人的全部
可是可以粗略的區分出群體
高中甚至大學即將走向社區化
教育一直朝向著"去精英化"人人平等的虛假狀況下
這種環境真的平等嗎?
高低落差大的學習環境
會犧牲了高程度的學生也放棄了低程度的學生
高程度的學生沒辦法受到他容許範圍高程度教育
低程度的也只能一直在同班高程度的屁股後面追著跑
這樣的平等教育真的平等嗎?
在有教無類的前提下
是不是也想想因材施教
區分出學生的不同程度
來針對不同程度給予不同的教育
別跟我說社區化的高中教育也能提供相同的因材施教
一個老師哪有能力同時給予同一班不同程度學生該有的個別教育
最後還是得平均班級程度然後給予教育….
這種結果…誰受利?
老師? 還是學生? 還是房地產商…..


從大陸的蟻族反觀台灣現在的大學…
其實他們的大學生還是很有競爭力只是市場不夠
當市場出現時他們就可以展露頭角…
台灣呢?
台灣的教育長期被掌控在一群政客手上
還有一群自以為的學者(就是在說你 李遠哲 先生)
意識形態、政黨輪替這些跟教育明明沒關係的事情
也都可以影響著薄弱的教育體制
台灣的教育大方向沒錯
一切都是為了學生的快樂多元發展
其實每一個階段都是善意的政策
可是執行面卻種是錯誤連連漏洞百出
使得教改總令人詬病
其實錯在大人對於教育的觀念
強迫為了升學而升學…
讓好好的政策不斷變質…

從聯考變成多元入學再變成指定考科
從頭到尾都是為了升學
回過頭來..還是要考試
只是考試的次數變多了
機會變多了
機會變多不代表只要選一個
而是變成每一個都得嘗試
所以...壓力變多了...
所以...學生的書包越來越沉重
除了國文英文數學
還要學個鄉土教學
包包裡可能還有一件等等要去補跳舞的芭蕾舞衣
或是手上提著晚上要去音樂班的小提琴


在看這篇廢話有小孩的爸媽們...
你家的小孩..現在都幾點睡?
你們小時候都幾點睡....




ps.以上純屬個人觀感....拒絕筆戰...



2010年4月18日 星期日

一些體悟....

今天...提分手後的一個禮拜
一個禮拜有點短
可是也很漫長
漫長到每分每秒都在想
這段感情六年的路程
我到底是走錯哪一步
走到最後到了這一步.....




六年來走走停停....
我真的很愛她
可是不知道為什麼
總是無解的問題不斷出現...

走到最後一刻卻變成
多一秒鐘的陪伴就是太黏...
多一分的關心就是管太多...
多一句的叮聆就是煩....
我知道會嫌會煩都不是沒有原因的
心如果早就不在我身上了
就算只是多那麼一點點也都是讓人無法忍受

如果這樣....愛你....真的就是要放手....
讓你去追求你認為的愛情吧

============================================


放手了....就一瞬間的感覺
心空了....腦空了....人空了
我好像一無所有了
多一無所有呢?
在部隊裡想打電話找人說話找不到
放假要去哪裡不知道
分手難過得心情也找不到人可以說
分了手....我變成不是我了

我到底是誰呢??

突然發現我誰都不是了
這六年來....
我從滷蛋變成了歡歡的男朋友

因為愛
所以我尊重你一切以你為優先
當你有事時我一定會帶你去陪你

因為愛
所以我希望你吃得保穿得暖
食衣住行如果在我能力範圍內
我就會幫你多出一點只希望你能多存一點錢

因為愛
所以我盡我可能不讓你孤單難過
有空一定會陪你把大部分的時間都預先留給你
大部分朋友的約ㄊㄨㄚ都取消了....

因為愛
所以我自然而然的做出了這一切....

也慢慢的....一切我都居於幕後了
變成了一個附屬品....
我忘了....我是我....

感情就是這樣
只有在人事時地物都對得情況下才會發生
生活的劇烈改變
也振動了我們的關係
不知道什麼時候開始
不管你玩得在晚我都會等你去接你的這動作
不管再忙再煩都定時打給你關心加班工作狀況
都從貼心變成了你同事口中的管太多
到最後的一點點關心 也都是管太多

唉....

=======================================

放手後....
發現自己突然變成空空如也....
發現過去在規劃時間的時候
都沒有規劃自己的時間
現在突然空了一大堆時間不知道該怎麼用

發現自己突然好像手頭寬鬆
不用在擔心突發狀況....

可是好像一切都不知道該怎麼動

坐下來想想
我好像好久沒有去逛書店好好買一本小說來看
我好像好久沒有自己騎車跑山
我好像好久....

我....我多久沒想到自己阿...

========================================

scott先生跟我聊了兩個小時
我發現....我好像好久好久沒有好好的充實自己
停擺了好久....
因為停擺了....所以開始變得很灰暗
因為停擺了....所以開始變得沒有魅力

因為自己開始變得很虛沒自信
沒了自信....沒了幽默....沒了熱情

這樣的人...誰愛....

愛情....就是無怨無悔的付出
可是在愛別人之前...
要先愛自己...
愛自己多一點
當愛到忘了自己...
連你自己都忘了你....誰還會記住你

愛得太過頭忘了自己....
忘了去面對真實自己的感受....
以為愛可以征服那些問題
也以為愛可以去阻擋那些閒人雜語
更以為愛得行為能被看到被注意
可是一切都是...
忘記愛自己....
我討厭自私
但我忘了...愛是自私的
我該自私一點愛自己


決定...
從今天開始我愛多愛自己一點
好好充實自己的內外
從回以前大一那時後的滷蛋
笨歸笨...傻歸傻
可是熱情自信具備...
開朗快樂熱情....又有能力的時候
雖然我不是外表帥氣的帥哥
可是....我可以帥在內在押!!





我會繼續等
因為我愛
可是我會繼續充實自己
等到時間過了
我會用全新的自己
再去找新的愛