A. gypsum拉丁語劃分音節
拉丁語(Lingua Latīna)屬於印歐語系義大利語族,最早在拉提姆地區(義大利的拉齊奧區)和羅馬帝國使用。雖然拉丁語通常被認為是一種死語言,但有少數基督宗教神職人員及學者可以流利使用拉丁語。羅馬天主教傳統上用拉丁語作為正式會議的語言和禮拜儀式用的語言。此外,許多西方國家的大學提供有關拉丁語的課程。
在英語和其他西方語言創造新詞的過程中,拉丁語一直得以使用。拉丁語及其後代羅曼斯諸語是義大利語族(Italic Languages)中僅存的一支。通過對早期義大利遺留文獻的研究,可以證實其他義大利語族分支的存在,之後這些分支在羅馬共和國時期逐步被拉丁語同化。拉丁語的親屬語言包括法利斯克語、奧斯坎語和翁布里亞語。但是,威尼托語可能是一個例外。在羅馬時代,作為威尼斯居民的語言,威尼托語得以和拉丁語並列使用。隨著拉丁語的演化,它受到越來越多的人們所認可。
拉丁語是一種高度曲折的語言。它有三種不同的性,名詞有七格,動詞有四種詞性變化、六種時態、六種人稱、三種語氣、三種語態、兩種體、兩個數。七格當中有一格是方位格,通常只和方位名詞一起使用。呼格與主格基本一致,因此拉丁語一般只有五個不同的格。不同的作者在行文中可能使用五到七種格。形容詞與副詞類似,按照格、性、數曲折變化。雖然拉丁語中有指示代詞指代遠近,它卻沒有冠詞。拉丁語沒通過不同的方式簡化詞尾的曲折變化,不是羅曼語族。
B. Google內部的開發流程是怎麼樣的
首先,某 G 大部分產品線都不區分前端工程師和後端工程師,一個人需要用從前到後都負責開發,盡管這幾年似乎有變化,能看到專門的Front End 職位了,但應該是很少數產品線的做法。
N 年前有人去 G 面試過,和他閑聊後了解到某 G 要求應聘者必須至少要會 C++ 和 Java 中的一種,只會 Python/PHP 是不夠的,要是只懂 JS 就更不行了。這個信息很關鍵,能用來解釋一些內部現象,後面我會提到。
我個人認為前端工程師確實應該了解基本的後端知識,某 B 公司以前很多前端工程師都只負責模板(比如 Smarty)開發,這導致一個很嚴重的問題,那就是前端工程師往往不知道如何搭建環境,開發時需要依賴後端工程師提供環境和數據,嚴重影響了開發效率,這也是為什麼 FIS 還內嵌了本地服務功能。
另外國內有公司還對前端工程師做進一步細分,按照職能分為寫 HTML/CSS 和 JS 的,對於我所屬的團隊,我個人並不贊同這種做法,因為 HTML 和 JS 是密切相關的,這樣分工將不利於代碼管理與優化,尤其是交互復雜的頁面,因為 JS 很依賴 HTML,拆分反而增加溝通成本,但或許在重運營的網站這么做會更好。
代碼管理方法
以下是一些零碎了解到的幾點:
內部所有人都能看到代碼
據說在 09 年時某國家的 office 有例外(來自『In The Plex』第 6 章,內容比較不和諧,這里就不展開了)
提交代碼需要相關人員的 review
這使得某 G 內部工程師可以很方便地切換項目,很少一個人只負責一個項目
代碼只有最新版(trunk),沒有 release 版本,沒有版本號
一般大家喜歡新增介面
如果要修改原有的介面,就必須通知所有使用方,不過因為所有人都能看到所有代碼,所以很容易找到有誰使用
據了解某 F 也是這樣的
有個代碼的搜索引擎
我認為這種方式比讓工程師寫文檔靠譜多了,因為絕大部分調用這個庫的代碼都是相似的,所以直接給出例子能讓別人更容易上手
估計和下線的 Code Search 比較像(好像還是某高管寫的,不過我忘記在哪看到的了)
如果想使用某個基礎庫,最好的方法是搜索使用到這個庫的相關代碼,抄過來
代碼依賴是通過全局的方式統一管理的
我猜應該很類似 Chromium 中的 GYP,熟悉 node 的同學可以理解為 npm,不過是支持多語言的
之前在某 G 工作過的 iOS 工程師也在某篇後來刪除的文章中透露代碼中不放 Xcode 項目文件,而是由工具生成出來(話說這篇文章挺有價值的,可惜老外不喜歡轉帖,導致現在找不到了)
這種依賴管理方式讓人想起某 A 公司(賣書那個,不是賣水果的)內部完善的 SOA 機制,不過某 A 喜歡基於 service 來重用,而某 G 看起來喜歡代碼級別的重用
很少使用第三方庫
只能選用內部維護的版本,比如類似這個 MySQL
會將第三方庫的編譯工具改成內部的,比如 Chromium 中都改成 GYP 方便管理
據說想申請用某個新第三方庫需要審核,周期比較長
代碼管理軟體用的 Perforce
某 G 直接將這個公司買下了(未確認,但下面那篇論文是在某 G 網站上的,所以我感覺消息可靠),Perforce 的員工為某 G 內部定製了一套代碼管理工具
另外我找到一篇 Perforce 的性能優化的論文,這裡面透露了很多 G 公司內部的代碼情況(發表時間是 2011 年 5 月),以下信息取自這篇論文:
這個程序用了 17 年,有 2 千萬次 changelist(可以理解就是 ci 數量)
最大的 client 有 6 百萬個文件(應該絕大部分是數據吧,要知道 chromium 項目也就不到 30 萬個文件)
文檔及相關數據文件也放上面
Reivew 工具叫 Mondrian(確認就是 Rietveld 的前身)
整體來說某 G 的代碼管理方式有很多可取之處,尤其是代碼開放,能最大程度地調動開發人員的主動性與協作意識,從而創造出更大的價值。不過沒有版本管理這點是個雙刃劍,我也沒想好是否這樣會更好。
feature flag
因為沒有分支,代碼只有一份,所以要實驗新功能就得通過 flag 來控制的,這個 flag 由線上 Borg 系統來管理,能做到針對某一部分的 Cookie 開啟不同的 feature,方便進行對比抽樣。
如果某個功能最終不上線,後續需要手工刪除相關代碼。
這個 flag 開關功能在某 F 也有,我認為這是大型網站是必備功能,但需要注意,這個系統本身會成為關鍵節點,之前某 F 的類似系統掛過,直接導致整個網站大部分功能都關閉了,所以一旦出問題後果很嚴重。
嚴格的代碼檢查
據說某 G 工程師大部分時間在寫單元測試,單元測試可以保證 UI 無關代碼的質量,但對於頁面測試就很難了,雖然可以使用 selenium,但某 G 內部大家都不願意寫,我個人認為這個問題確實無解,頁面隨便一改就導致大量測試失效,我還沒見任何一家公司解決(某 F 說他們用的是 Watir,但主要用於保證登錄等基本功能可用),目前看來唯一可行的就是自動頁面截圖 diff,某 G 在 Consumer Surveys 這個產品中也在嘗試。
據說某 G 的項目大多沒有嚴格的上線時間點,所以不能以項目緊急為借口來不寫單元測試,這點和天朝不太一樣,大家更傾向犧牲質量來追求速度。
另外國外公司一般對瀏覽器兼容性問題都不怎麼關注,因為現代瀏覽器中的兼容性問題比以前好得多,這點某 G 和某 F 公司一樣,只支持高版本的 IE。
因為只有主幹,所以提交代碼很謹慎,需要經過 3 個主要階段:
代碼風格檢查
應該主要參考這個文檔
非常嚴格,據說還會檢查命名什麼的
有段子說 Python 作者 Guido van Rossum 寫的 Python 代碼無法通過檢查,所以一直沒提交。。。我認為這是假的,因為他老人家寫的 rietveld 還是挺符合某 G 規范的
單元測試檢查
代碼 owner 的 Review
提交一旦出錯可能會導致影響其它人的工作(因為每個人都依賴主幹啊),甚至遭到其它國家 office 工程師的指責,所以大家對於代碼提交都非常謹慎,再三確認,壓力不小。
在單元測試、代碼風格和 review 的執行上,某 G 做得很徹底,這點值得學習,國內大家似乎更喜歡開發效率而不是質量。
前端如何開發
除了 Gmail、Maps、Plus 這樣的特例,基本上都是由後端模板生成頁面,很少項目使用 JS 來寫界面,更少使用 MVC 框架,這點其實在很多公司都差不多,比如某 B 也是一樣的,除了地圖及廣告管家等產品,其它產品基本上都是通過模板生成的。
某 G 的頁面是通常是由 Java 或 C++ 語言所寫的模版引擎生成的,而且開源出來了,分別是 Closure,Templates 和 CTemplate,話說某 B 在幾年前也自己寫了個 C++ 的模板引擎,但目前基本被淘汰了。
對某 G 來說,「前端」工程師要寫 Java 和 JavaScript,而「後端」服務主要是 C++(某些地方開始使用 Go 了,比如這個)。
前面說到招人時都要會 Java,這帶來的結果是大多數團隊成員更了解 Java 而不是 JavaScript,於是在這種背景下很自然地誕生了 GWT 這個神奇的東西,它在內部很多地方使用,按照內部人士的說法,主要的考慮是:
能自動生成跨瀏覽器瀏覽器代碼
結構規范,通過編譯器就能提前發現很多問題
能使用強大的 IDE 來提高效率
C. node-gyp configure 出錯要怎麼解決
把具體環境和出錯信息發出來才能讓人幫你看是什麼問題 你這樣說太簡單根本不知道是什麼原因 可能是系統的問題也可能是網路的問題
D. 如何在windows下編譯Chrome源代碼
一,編譯之前的准備。
1) 了解代碼組織結構。
Chrome source非常龐大,並且在其主目錄下還包含有工具和組件,任何一個工具和組件也附帶有其源代碼。首先得熟悉這些源代碼的組織結構,在http://src.chromium.org/svn/中包含如下子目錄:releases,曾經發布過的chrome源代碼的正式版本;trunk,當前最新的源代碼。由於releases中的代碼比較舊,這里就不做說明了,只說明trunk的結構。在trunk下面有3個重要的目錄,deps包含了chrome編譯和運行所需要的全部組件的代碼。src裡麵包含的則是chrome的主程序的代碼,tools包含的是下載和配置編譯所需要的第三方工具的壓縮包和源代碼,其中就有svn和python這2個比較重要的工具,後面再詳細介紹。暫時做這樣一個簡單的介紹,因為其組織結構比較負責,以後再作補充斧正。
2)如何下載和同步源代碼。
首先談談下載:
1,最簡單的方法是從chrome官網上直接下載源代碼壓縮包,地址是http://build.chromium.org/buildbot/archives/chromium_tarball.html。
2,或者採用svn從http://src.chromium.org/svn/trunk/src這個地方heckout,這要求你先在本地建一個源代碼的主目錄。
3,另外一個辦法則是採用google提供的一個部署工具depot_tools。雖然這幾種辦法都可下載完整的源代碼,但目前的情況是:chrome基於Visual Stdio 2005 進行編譯,如果順利完成編譯工作,自然少不了sln文件,較早的源代碼中包含有現成的sln和vcproject文件,但後來做了修改,這些文件被拋棄掉,Google自己開發了一種腳本工具叫做GYP,這個工具採用python編寫,GYP採用了自定義的一套規則,用於生成各種工程文件。而關鍵的python則包含於depot_tools中,因此不論採用什麼方法下載的代碼,都得下載depot_tools這個工具,以獲得必須的工程文件。
depot_tools位於 http://src.chromium.org/svn/trunk/tools 下面,包括一個目錄和一個zip格式的壓縮包。
3)關於編譯器
前面提到Chrome採用Visual Stdio 2005進行編譯,根據http://dev.chromium.org的說明,需進行如下操作正常編譯
a, 安裝Visual Studio 2005.
b, 安裝Visual Studio 2005 Service Packe 1.
c, 安裝Visual Studio Hotfix 947315.
d, 如果是vista系統,還需安裝Visual Studio 2005 Service Packe 1 Update for Windows Vista.
e, 安裝Windows 2008 SDK,如果是Visual Studio 2008則不需要這一步。
f, 配置Windows 2008 SDK,使2008 SDK成為首選開發庫,以獲得一些新功能和特性。辦法是在開始->程序->Microsoft Windows SDK v6.1 > Visual Studio Registration > Windows SDK Configuration Tool,選擇make current按鈕。也可以在VS裡面手動配置include和libary路徑,效果是一樣的。
二,如何配置工程文件
1,如果是採用depot_tools,那麼從代碼下載到生成sln文件會自動完成。其步驟是
(1)下載depot_tools到本地存儲,假設位於d:/depot_tools.
(2)將d:/depot_tools添加到系統環境變數中。
(3)創建一個源代碼根目錄,假設為 d:/chrome,目錄不得包含空格。
(4)在命令行下切換當前目錄到d:/chrome。
(5)執行命令 gclient config http://src.chromium.org/svn/trunk/src ,該命令會首先下載svn和python分別到d:/depot_tools/svn_bin和d:/depot_tools/python_bin。
(6)執行命令 gclient sync 這個命令會調用svn同步源代碼。這個過程會比較漫長。全部完成之後全部源代碼就保存在d:/chrome裡面。未編譯的代碼大約有4個G左右,過程將十分漫長。這樣獲得的源代碼已經包含所有的工程文件,可直接打開。
重點說明一下gclient,它實際上是一個批處理文件,它主要做了如下一些事情,首先設置環境變數,如代碼根目錄,工具根目錄等。其次調用win_tools.bat從伺服器下載svn和python。最後調用python.exe對Chrome.gyp進行解析生成所有工程文件。
另外需要說明的是,gclient sync的過程非常漫長,根據命令行的提示來看總共需要同步67個項目(不是工程),期間可能會因為一些原因導致錯誤而退出這個過程,需要繼續調用sync。比如網路出現故障svn會多次進入sleep狀態然後重試,如果多次失敗就會報錯退出,還有的情況是某些子目錄的屬性問題無法同步,可根據提示進行操作。還有個目前新出現的問題,下面2個目錄「src/webkit/data/layout_tests/LayoutTests」和「src/third_party/WebKit/LayoutTests」的源代碼是從src.webkit.org簽出來的,但是這個網站目前存在問題無法簽出代碼, 需要屏蔽掉這2個目錄,由於裡面是測試代碼,即使丟棄也不會影響整個工程的編譯,方法是打開trunk下面的.gclient文件,向裡面添加如下內容
"custom_deps" : {
"src/webkit/data/layout_tests/LayoutTests":None,
"src/third_party/WebKit/LayoutTests":None,
},
這樣svn就能完成代碼的同步了。最後gclient會調用depot_tools/python_bin/python.exe 對 src/build/gyp_
chromium進行處理,這樣就得到了所有的sln和vcproject文件。
2,如果是下載的代碼壓縮包或者checkout的代碼,代碼目錄裡面沒有sln文件,這個時候需要調用命令行進入源代碼根目錄,然後執行命令 gclient runhooks --force,命令執行後會直接對Chrome.gyp進行解析,生成sln文件。
在實際下載過程中,最開始的時候我用TortoiseSVN從http://src.chromium.org/svn/trunk/src checkout源代碼,但是得到的代碼只有幾百兆,執行gclient runhooks --force命令後也沒有找到sln文件,具體原因未知,不建議使用此方式。而直接下載代碼壓縮包的方式沒有嘗試過,不知道是否可行。因此最穩妥的方法還是使用depot_tools來部署和處理源代碼。
三 編譯工程
啟動Visual Studio 2005打開 src/chrome/browser/chrome.sln,或者打開src/build/all.sln,如果打開的是chrome.sln裡麵包含480個工程,而all.sln則包含507個工程,一些09年的編譯說明提到有300左右的工程,可見chrome的代碼變動比較大。對整個解決方案進行編譯,打開需要2個小時才能完成編譯,視硬體環境而定,內存越大越快,推薦4G以上內存,酷睿2核或者4核。編譯完成以後據說會佔用30G的空間。編譯後的文件位於 d:/chorme/chrome/debug 目錄或者 d:/chorme/chrome/release目錄下。
四 chrome涉及的開源項目
Chrome 採用了很多開源項目,這里把它們列出來以備後用,目前Chrome涉及25個開源代碼:
1、Google Breakpad
/src/breakpad
開源的跨開台程序崩潰報告系統。
2、Google URL
/src/googleurl
Google小巧的URL解析整理庫。
3、Skia
/src/skia
矢量圖引擎。
4、Google v8
/src/v8
Google開源的JavaScript引擎。V8實現了ECMA-262第三版的ECMAScript規范,可運行於Windows XP 和 Vista, Mac OS X 10.5 (Leopard), 及 Linux等基於IA-32 或 ARM 的系統之上。V8可單獨運行也可嵌入到任何C++程序中。
5、Webkit
/src/webki
開源的瀏覽器引擎
6、Netscape Portable Runtime (NSPR)
/src/base/third_party/nspr
Netscape Portable Runtime (NSPR) 提供了系統級平台無關的API及類似libc的函數。
7、Network Security Services (NSS)
/src/base/third_party/nss
Network Security Services (NSS) 一套用於支持伺服器端與客戶端安全開發的跨平台函數庫。程序通過NSS可支持SSL v2 and v3, TLS, PKCS #5, PKCS #7, PKCS #11, PKCS #12, S/MIME, X.509 v3 認證及其它一些安全標准。
8、Hunspell
/src/chrome/third_party/hunspell
Spell checker and morphological analyzer library and program designed for languages with rich morphology and complex word compounding or character encoding.
9、Windows Template Library
/src/chrome/third_party/wtl
用於開發Windows程序與UI組件的C++ library。WTL擴展了ATL (Active Template Library) 並提供一套用於controls, dialogs, frame windows, GDI objects等開發的類。
10、Google C++ Testing Framework
/src/testing/gtest
Google用於編寫C++測試的基於xUnit架構的框架,可用於多種平台上:Linux, Mac OS X, Windows, Windows CE, and Symbian。支持自動測試發現,有一套豐富的Assertions斷言,用於可自定義斷言,death tests, fatal and non-fatal failures, various options for running the tests, and XML test report generation.
11、bsdiff 與 bspatch
/src/third_party/bsdiff 及 /src/third_party/bspatch
bsdiff 與 bspatch 用於為二進制文件生成補丁。
12、bzip2
/src/third_party/bzip2
bzip2使用Burrows-Wheeler block sorting text compression 演算法與Huffman編碼壓縮文件。
13、International Components for Unicode (ICU)
/src/third_party/icu38
ICU是一套成熟並被廣泛使用的C/C++ 及 Java 庫,可為軟體提供Unicode與全球化支持。
14、libjpeg
/src/third_party/libjpeg
用於處理JPEG (JFIF)圖像格式的庫。
15、libpng
/src/third_party/libpng
PNG圖像格式庫。支持絕大部分的PNG特性,可擴展。已經被廣泛地使用了13年以上了。
16、libxml
/src/third_party/libxml
C語言的XML解析庫。
17、libxslt
/src/third_party/libxslt
C語言的XSLT庫。
18、LZMA
/src/third_party/lzma_sdk
LZMA為7-Zip軟體中7z格式壓縮所使用的壓縮演算法,有很好的壓縮效果。
19、stringencoders
/src/third_party/modp_b64
一系列高性能的c-string轉換函數,比如:base 64 encoding/decoding。通常比其標准實現快兩倍以上。
20、Netscape Plugin Application Programming Interface (NPAPI)
/src/third_party/npapi
多種瀏覽器使用的跨平台插件架構。
21、Pthreads-w32
/src/third_party/pthread
用於編寫多線程程序的API
22、SCons - a software construction tool
/src/third_party/scons
開源的軟體構建工具——下一代的編譯工具。可以認為SCons是改進過的跨平台配上autoconf/automake與ccache的Make工具的子系統。
23、sqlite
/src/third_party/sqlite
大名鼎鼎的嵌入式資料庫引擎。自管理、零配置、無需伺服器、支持事務。
24、TLS Lite
/src/third_party/tlslite
SSL 3.0, TLS 1.0, and TLS 1.1的Python免費實現庫。TLS Lite支持這些安全驗證方式:SRP, shared keys, and cryptoIDs in addition to X.509 certificates。註:Chrome並不包涵Python。TLS Lite用於Chrome開發過程中的代碼覆蓋、依賴檢查、網頁載入時間測試及生成html結果比較等。
25、zlib
/src/third_party/zlib
zlib為一套用於任意平台與機器的無損數據壓縮的庫,它免費、自由、無任何法律專利問題。
E. 什麼是GIP
GIP_網路詞典
gip [dʒɪp]
[詞典釋義]
=gyp
[網路釋義]
1.吉普賽人
F. gyp 這是什麼意思誰知道 告訴我
給爺爬=給我滾 是四川話