搜尋

隨機推薦

23 十一月 2010
12 八月 2013
23 十一月 2010
24 十二月 2010

看到這個標題大家一定會想到這篇神文《How Browsers Work》,這篇文章把瀏覽器的很多細節講得很細,而且也被翻譯成了中文。為什麼我還想寫一篇呢?因為兩個原因,

1)這篇文章太長了,閱讀成本太大,不能一口氣讀完。

2)花了大力氣讀了這篇文章後可以瞭解很多,但似乎對工作沒什麼幫助。

所以,我準備寫下這篇文章來解決上述兩個問題。希望你能在上班途中,或是坐馬桶時就能讀完,並能從中學會一些能用在工作上的東西。

瀏覽器工作大流程

廢話少說,先來看個圖:

從上面這個圖中,我們可以看到那麼幾個事:

 

1)瀏覽器會解析三個東西:

  • 一個是HTML/SVG/XHTML,事實上,Webkit有三個C++的類對應這三類文檔。解析這三種文件會產生一個DOM Tree。
  • CSS,解析CSS會產生CSS規則樹。
  • Javascript,腳本,主要是通過DOM API和CSSOM API來操作DOM Tree和CSS Rule Tree.

2)解析完成後,瀏覽器引擎會通過DOM Tree 和 CSS Rule Tree 來構造 Rendering Tree。注意:

  • Rendering Tree 渲染樹並不等同於DOM樹,因為一些像Header或display:none的東西就沒必要放在渲染樹中了。
  • CSS 的 Rule Tree主要是為了完成匹配並把CSS Rule附加上Rendering Tree上的每個Element。也就是DOM結點。也就是所謂的Frame。
  • 然後,計算每個Frame(也就是每個Element)的位置,這又叫layout和reflow過程。

3)最後通過調用操作系統Native GUI的API繪製。

 

vim的學習曲線相當的大(參看各種文字編輯器的學習曲線),所以,如果你一開始看到的是一大堆VIM的命令分類,你一定會對這個編輯器失去興趣的。下面的文章翻譯自《Learn Vim Progressively》,我覺得這是給新手最好的VIM的升級教程了,沒有列舉所有的命令,只是列舉了那些最有用的命令。非常不錯。

——————————正文開始——————————

你想以最快的速度學習人類史上最好的文字編輯器VIM嗎?你先得懂得如何在VIM倖存下來,然後一點一點地學習各種戲法。

  1. Vim the Six Billion Dollar editor

Better, Stronger, Faster.

學習 vim 並且其會成為你最後一個使用的文字編輯器。沒有比這個更好的文字編輯器了,非常地難學,但是卻不可思議地好用。

我建議下面這四個步驟:

  1. 存活
  2. 感覺良好
  3. 覺得更好,更強,更快
  4. 使用VIM的超能力

當你走完這篇文章,你會成為一個vim的 superstar。

在開始學習以前,我需要給你一些警告:

  • 學習vim在開始時是痛苦的。
  • 需要時間
  • 需要不斷地練習,就像你學習一個樂器一樣。
  • 不要期望你能在3天內把vim練得比別的編輯器更有效率。
  • 事實上,你需要2周時間的苦練,而不是3天。

文章來源:Best “must know” open sources to build the new Web

學習HTML 5編程和設計

http://i.imgur.com/Jz5KyRa.jpg
1.軟件開發價格估算方法
    軟件開發價格與工作量、商務成本、國家稅收和企業利潤等項有關。為了便於計算,給出一個計算公式:
軟件開發價格 = 開發工作量 × 開發費用/人·月
1.1開發工作量
    軟件開發工作量與估算工作量經驗值、風險係數和復用係數等項有關:
軟件開發工作量 = 估算工作量經驗值 × 風險係數 × 復用係數
1.1.1估算工作量經驗值(以A來表示)
    軟什開發工作量的計算,曾有人提出以源代碼行或功能點來計算,這些方法實施起來均有不少難度。目前國際上仍舊按以往經驗的方式加以計算,國內各軟件企業也是採用經驗的方式加以估算工作量。
    為了更好地規範估算方法,建議可按照國家標準“GB/T 8566-2001軟件生存週期過程”所規定的軟件開發過程的各項活動來計算工作量。
    工作量的計算是按一個開發工作人員在一個月內(日曆中的月,即包括國家規定的節假日)能完成的工作量為單位,也就是通常所講的“人·月”。
    特別要提醒的是軟件開發過程中既包括了通常所講的軟件開發,也應包括各類軟件測試的活動。
1.1.2風險係數(以σ來表示)
    估算工作量經驗值亦會存在較大風險,造成軟件危機的因素很多,這也是一個方面的因素。特別當軟件企業對該信息工程項目的業務領域不熟悉或不太熟悉,而且用戶又無法或不能完整明白地表達他們的真實的需求,從而造成軟件企業需要不斷地完善需求獲取,修改設計等各項工作。因此:
l ≤ 風險係數 ≤ 1.5
    根據我們對軟件企業的瞭解,超過估算工作量經驗值的一半,已是不可接受,所以我們確定“1.5”為極限值。當然這既要看企業的能力,也要看用戶能接受的程度。
1.1.3復用係數(以τ來表示)
    估算工作量經驗值是軟件企業承擔一般項目來估算的,但如果軟件企業已經採用“基於構件的開發方法” ,並己建立起能夠復用的構件庫(核心資產庫),或者已有一些軟件產品,僅作二次開發,從而使軟件開發工作量減少。因此:
0.25 ≤ 復用係數 ≤ 1
    根據國內外軟件企業在實施基於構件開發方法(軟件產品線)的經驗數據,提高工作效率達到25%(最高值)。

phones.png (463×411)

如果你一直以來從事著相對傳統的交互、視覺等方面的Web設計工作,而如今開始打算擴展視野、提升技能、隨“機”應變,做一名行動互聯網的弄潮兒...那麼本文很適合你閱讀。相關領域中的幾位牛人會在接下來的時間裡帶給我們一些很實在的經驗之談。全文大致分為三個主題:

  • Web設計師需要學習哪些知識和技能,才能進入行動應用的設計和開發領域?
  • 從設計的角度講,行動客戶端應用與傳統網站頁面之間的主要區別在哪裡?
  • 怎樣提升行動客戶端應用的用戶體驗?設計師需要特別注意哪些?

 

作者:周思博 (Joel Spolsky)
譯:Paul May 梅普華
Wednesday, October 08, 2003
屬於Joel on Software, http://www.joelonsoftware.com


還搞不懂那個神秘的Content-Type tag嗎?你知道的,就是那個應該放在HTML裡卻又永遠不知道該設成什麼內容的標籤啊。

你曾經收到在保加利亞的朋友寄來,主題是「???? ?????? ??? ????」的電子郵件嗎?

ibm.jpg

很多軟體開發者並未真正完全理解字元集、字元編碼、Unicode等等的神秘世界,當我發現不懂的人那麼多時真的很失望。數年以前,某位beta測試人員想知道FogBUGZ是否能處理日文的電子郵件?他們竟然用日文寫電郵?我完全不知道耶。我們用了一個商用ActiveX控制元件來分析MIME電郵訊息,當我仔細調查這個元件時,才發現它對字元集的處理完全錯誤,所以我們還寫了些了不起的程式,把錯誤的轉換還原後再重做正確的轉換。我又去看看另一個商用程式庫,它的字元編碼實作也是完全不對。我聯絡該軟體的開發者,結果他似乎有點認為沒辦法改善。他跟很多程式師一樣,只希望這個問題能憑空消失。

關於什麼是Engine(引擎)?

在Half-Life 完成之後不久,Valve開始籌備他們的下一個主打遊戲--Half-Life 2。在商討遊戲引擎的採用問題上,開發小組明白到原版遊戲改採用的改良Quake 1引擎對於Half-Life 2來說顯得過於破舊,而且在很多的方面都不符合這一代遊戲發展的要求。於是,vlave的開發小組決定從美工設計以及遊戲代碼開始,設計出一個全新的遊戲框架,並在其中加入了一套來自havok的定製物理引擎。 
對於一個遊戲來說,“引擎”就是一個系統,就像是一輛汽車的發動機一樣,他能輸入來自加速器的動能,並輸出到輪子的轉動。軟件(在這裡為遊戲)的引擎實現的東西和汽車的發動機一樣,輸入來自框架(某些程序或者文件的片段),然後輸出程序員們想要的結果。再次拿汽車的發動機為例,一個軟件的引擎不能自行運作,他必須依靠另外一個系統,就好像,你只能開著“一台汽車”而非“一台發動機”去上班。在Source中,一個純粹的引擎只能是一堆代碼,完全不具有可玩性。所以不難對引擎下這樣的定義:引擎就是一套讓遊戲元素發生互動關係並將其編譯成可玩程序的代碼或程式,依靠框架進行操作。

band

 

 

11.再接再厲―Unreal2引擎

Unreal引擎一炮打響,EPIC又再接再厲推出了Unreal2引擎。相比第一代Unreal引擎,Unreal2的全部代碼幾乎重寫,並集成了最新的編輯器。隨著遊戲開發的需要,遊戲引擎的內涵也在不斷擴大,Unreal2引擎擁有了更多的功能。


clip_image001


《Unreal 2》虛幻2的畫面

當時物理加速技術已然成形,Unreal2引擎便集成了Karma 物理加速技術開發包,引擎中的物理效果得以增強,並且開始支持XBOX、PS2等主機平台。Unreal2引擎期間有過一次小幅升級,被稱為UE2.5,渲染性能有了一定提高。

clip_image002 
這張Unreal 2的看起來更漂亮一些

 

遊戲引擎(Game Engine)是什麼?大多數人給出的解釋都是基於engine的英文翻譯,將遊戲引擎等同於汽車中的引擎(發動機),再好一些的解釋成動力,這些解釋都對,但是動力只說並不全面,不能完整反映出遊戲引擎在遊戲中的作用與地位。


clip_image001

先舉一個簡單例子,在某遊戲中的一個場景中,玩家控制的角色躲藏在屋子裡,敵人正在屋子外面搜索玩家。突然,玩家控制的是一個穿迷彩服的士兵,突然碰倒了桌子上的一個杯子,杯子墜地發出破碎聲,敵人在聽到屋子裡的聲音之後聚集到玩家所在位置,玩家開槍射擊敵人,子彈引爆了周圍的易燃物,產生爆炸效果。在這個簡單而常見的過程中,遊戲引擎便在後台起著作用,控制著遊戲中的一舉一動。

clip_image002 
一些遊戲中常見的場景都是引擎在後台起著作用

把這個過程用專業們的語言分解一下就會變成這樣:首先出場的是可以行動的士兵,也就是人物模型。模型由引擎中的動畫系統賦予運動能力,遊戲中角色能做出什麼動作便取決於動畫系統有多強大。人物的真實程度則取決於3D模型渲染引擎的能力,這也是遊戲引擎最重要的功能之一,遊戲的畫質高低便由它來決定。之後,士兵碰倒了杯子,這個過程涉及到引擎的碰撞檢測,它可以決定不同的物體在接觸的時候會產生什麼樣的結果,有的遊戲能穿牆有的則不能便是不同的碰撞檢測控制的。例子中設定的是把杯子碰倒了,杯子發出了破碎聲。在發生某種動作的同時發出相應的聲音則屬於引擎中的音效處理了。杯子破碎的聲音吸引了敵人的注意,這是引擎中的AI智能運算在起作用,最後雙方交火引發爆炸,爆炸產生的煙霧、爆炸物飛散則是引擎中的物理效果在起作用了。 
可以說,遊戲引擎雖然有著“動力(Engine)”之名,但是其實際上卻是行“大腦(brain)”之實,指揮控制著遊戲中各種資源。遊戲引擎的準確定義也是如此,“用於控制所有遊戲功能的主程序,從計算碰撞、物理系統和物體的相對位置,到接受玩家的輸入,以及按照正確的音量輸出聲音等等。”通常來講,遊戲引擎包含以下系統:渲染引擎(即“渲染器”,含二維圖像引擎和三維圖像引擎)、物理引擎、碰撞檢測系統、音效、腳本引擎、電腦動畫、人工智能、網絡引擎以及場景管理。(引自wikipedia)

Please publish modules in offcanvas position.