我們每天的學習、工作、生活大多數都基於開源軟件完成,或許你也是這樣的,只是沒注意到。
- 一、關於這篇文章
- 二、開源軟件很多很多
- 三、第一類:框架和編程驅動的應用層
- 四、第二類:數據驅動的大數據、人工智能層
- 五、第三類:雲計算、基礎設施層
- 六、第四類:操作系統、編譯器、虛擬機、編程語言
- 七、45個開源軟件特性、要點
- 八、資源彙總
一、關於這篇文章
文章標題《值得關注的開源軟件推薦》這個話題不是很好理,先按著自己的思路試著寫些東西。這篇文章有點流水賬,大家多包涵。
我們知道值得關注的開源軟件實在是太多太多,選擇這個題目也讓自己有點為難。不過,試著去理一下對自己來說還是有蠻多收穫的,不管正確與否,或許也對大家有所啟發和幫助。
所選的45個開源軟件,它們可能不是最流行的,但具有一定的代表性,它們是眾多開源軟件中的很小一部分。
從這麼多開源軟件中進行篩選有不少困難,需要我們有個好的思路和方法去有步驟、系統化瞭解和學習,本Chat就是和大家一起交流和探討這個話題。希望這篇文章起到拋磚引玉的作用,這裡我們只交流、討論一些思路和方法,並不深入到某個具體項目,這個會留在以後的課程與大家一同學習交流。
開源軟件在操作系統、雲計算、大數據、編譯器、數據庫、移動、汽車工業等領域取得了巨大成功,已成主流,這篇文章就先圍繞著這些內容展開。
二、開源軟件很多很多
開源軟件的重要性就不用多說了,它是IT工業的基礎。它和我們每個人、每天的學習、工作、生活都息息相關,我們使用的互聯網、物聯網、車聯網都廣泛的依賴於它們。
先來看看,如何去尋找開源軟件,我這裡介紹一個可能是最有效的方式:通過GitHub上Awesome和GitHub Topics的方式去獲得,它們已對一些流行熱門的開源軟件做了梳理和篩選,方便你的選擇。這裡的開源軟件數量足夠你在整個職業生涯中去了解、學習和實踐的,而且還在持續增加中。
這麼多開源軟件,我們怎麼選?
這需要一個有層次、系統化的瞭解、學習的方法和步驟。
我們先來看看有層次、系統化的瞭解、學習、搭建軟件堆棧和平臺的重要性和必要性。
在我們的工作中,或許都有過這樣的經歷:前一個團隊或核心成員使用的是這個框架或那個平臺,新來的團隊或核心成員因為自身情況將會使用不同的框架和系統重構或替代前面的產品和架構體系。我自己就經歷過用Java平臺全面替代.NET平臺的經歷,其代價也是巨大的,這樣的替換相信大家也都有碰到過。若經常性的因為人員變動或其它因素而導致產品和體系架構總是變來變去,帶來的研發成本就會不斷上升,且因為沒有在穩定框架和基礎架構上的持續實踐和積累,團隊的技術沉澱沒有,框架和平臺價值的體現也就少的可憐,也不能吸引到優秀的人才聚在一起。
所以層次化、系統化的瞭解、學習、構建公司的技術體系和平臺架構就顯得尤為重要,這是公司技術委員會或團隊Leader的必修課。
舉個簡單例子:大家可從Anaconda開始Python數據分析之旅,它減少了安裝、維護各種Python軟件包和版本的工作量和帶來的各種不方便,畢竟它整合好了幾百個Python軟件包。
好了,找到或選型後,接下來就是學習和實踐、不斷積累的過程。
- 根據公司發展方向和戰略目標,擬定多年計劃,不要僅僅只解決眼前問題,要考慮框架、架構、平臺的長期有效性和持續發展,不要深度鎖定商業服務供應商,儘可能使用開源軟件,並可以方便的替換其中部件和重構;
- 從StackOverflow、知乎等專業網站通過搜索的方式迅速瞭解一下你所關注的開源軟件的基本特性和大家討論的熱點;
- 以Ecosystem的方式去思考和組織你所關注的開源軟件的知識體系,這裡給個參考:Node.js ecosystem
- 在學習和實踐的過程中,大家可藉助印象筆記或Wiki等方式對不斷學習和實踐的開源軟件做持續的整理。我個人就是通過Wiki的方式不停收集、整理各種開源軟件和相關資源的,這個過程持續了11年,有幾千個條目,近4000萬的瀏覽量。
本篇文章參考框架涉及的45個開源軟件都有Wiki條目進行跟進和維護,不少條目都持續維護了很多年,接下來我們就對它們一一做個大致瞭解:
- 應用類:框架、企業應用、編輯器
- 數據類:數據科學、大數據、機器學習、汽車機器人
- 服務類:雲計算、數據庫、消息隊列、服務器
- 系統類:操作系統、編譯器、虛擬機、編程語言
類似這樣的工作,你自己或團隊都可以經常去理一下。
此外,要緊跟所關注開源軟件的Conferencce技術大會,這是瞭解開源軟件最新進展和成功應用的一個非常好的方法。我在這裡也整理了一些開源軟件歷年大會幻燈片資料,很有參考價值,歡迎大家收藏。
三、第一類:框架和編程驅動的應用層
通過框架加快應用的開發和上線。
1. 框架:Django、Meteor、Qt
框架類開源軟件太多太多,每種語言、不同應用場景都有很多不同的框架可供選擇,這裡選擇了Python、JavaScript、C++三種主流編程語言框架加以簡要介紹。
這三個框架都是比較大而全的,覆蓋某個領域的大部分應用場景和技術堆棧,它們帶來的好處是快速的開發效率和生產力,但同時與會失去靈活性和自由度。喜歡用很多小軟件、小工具解決不同問題的用戶通常不會選擇這些大塊頭或者說全堆棧的軟件平臺。
Django是個全堆棧的Python框架,有嚴格的開發計劃和路線圖。
注意這裡的long-term support (LTS),很多開源軟件都採用這樣的版本支持服務,如:Ubuntu 它在你的版本選擇中非常重要。
Django的內容和討論的話題都很多,入門這塊可從Django book 2.0 的中文開始,它把Django重點、要點和內容組織的都很好。
這裡我列舉一些思路和路線供大家參考:
- 先動手構建一個最簡單的Django項目;
- 使用Django內置的Admin,再試試一些更好用的Admin解決方案;
- 看看成功Django項目長什麼樣的:Mezzanine;
- 瀏覽Django開發的開源網站,有沒有自己喜歡的,有的話先部署一個;
- 使用Django REST Framework構建REST API;
- 基於REST API構建一個單頁面Web應用(Single Page Application, SPA),這一架構可迅速創建響應式用戶交互界面;
- 如何在Django使用其它MVC框架;
- 將WebSockets、Tornado和Django結合起來,提供實時Web特性;
- Django實時服務器除了Tornado外,你也可以使用Erlang等語言編寫,這個內容大家自己去擴展下。
Qt是一個跨平臺的C++/JavaScript應用框架,是一個桌面、嵌入、移動應用的開發平臺,支持Windows、Linux、macOS、Android、iOS、Windows 10操作系統。
2011年,諾基亞出售Qt業務給Digia,該公司將接手Qt商業授權和服務業務,諾基亞也將移交大約3500家商業客戶。
Maya、Google Earth、Skype、Telegram、魔獸爭霸官方對戰平臺、網易爐石盒子等都基於Qt構建。Qt在汽車、自動化、醫療、數字電視機頂盒、物聯網、移動應用領域都有廣泛應用。其中,Qt Automotive Suite值得更多關注。
Qt通過整合JavaScript語言,加速用戶界面的構建。
QML是種聲明式語言(declarative language),它是一個用戶界面規範和編程語言,混合JSON語法和JavaScript表達式。
Qt應用目前主流的開發思路是:用QML(Qt Quick)構建交互界面,用C++實現業務邏輯,這也是推薦Qt的一個重要因素。
Meteor是基於JavaScript的框架,用於Web客戶端、服務器端以及移動應用。Meteor應用會對數據的變化作出即時響應,因此你將獲得即時響應體驗,同時,一致的構建過程、前後端統一的包系統以及單個命令的應用部署過程,將在從設計到發佈的每一環節上為你節省時間。
這是Meteor簡單的堆棧和框架:
Meteor帶來的優勢有:
- 全棧通用、統一的單一語言 JavaScript;
- 內置響應式支持;
- 代碼高度重用,提供一大堆基礎Packages;
- 提供強大構建工具,幫助快速構建JavaScript Apps;
- 擁有近13000個軟件包的生態系統。
Meteor的更多瞭解可從七大原則入手:
- Data on the Wire. Meteor 不發送 HTML,服務器端只負責發送數據,由客戶端渲染;
- One Language. 前後端都是 JavaScript 語言;
- Database Everywhere. 前後端都可以直接創建存取修改數據庫裡的數據,且數據安全;
- Latency Compensation. Meteor 在前端提前獲取數據並模擬數據模型,使其看起來像是從服務器端立即返回了數據;
- Full Stack Reactivity. 實時響應是 Meteor 的缺省配置。在所有層次,從數據庫到模板,都會在需要時自動更新;
- Embrace the Ecosystem. Meteor 完全開源並集成了很多現有的開源工具和框架。如 Angular,React。Meteor 有自己的 AtmosphereJS 包下載管理平臺,也可使用 NPM;
- Simplicity Equals Productivity. Meteor 簡單易上手,API 簡潔優雅。
除Meteor和Node.js外,Angular和React可能是大家關注最多的兩個JavaScript框架和平臺,它們背後是Google和Facebook的推動。鑑於React因為版權專利問題,我們先放一下。Angular2官方推薦語言是TypeScript。有關ECMAScript、JavaScript、TypeScript、CoffeeScript、ClojureScript標準、語言和框架的話題有很多很多,大家可去擴展這部分的知識體系。
同時,這裡也貼一張Angular2學習路線圖供大家參考。
此圖來自:知乎
我想,這幅圖對Angular2有用,對Meteor等其它框架的學習也有一定的參考價值。
說到選擇哪個框架,涉及的就是各種比較,本篇所列舉的45個開源軟件和項目也是各種比較的一些總結,所以生活在開源軟件的世界裡,比較就是家常便飯。若是作為開源軟件的開發者和維護者,要做的工作也就更多了,除編程基本功紮實,維護和Bug修復外,不停的學習其它優秀的同類項目也是一門必修課,從別人身上學習優點,但又不能完全照搬,需考慮自身項目的個性和特性,又要兼顧通用功能和特性的整合,在保證項目代碼和版本穩定的同時,又要不斷調整和平衡新版本的需求和特新,又要很好兼容老版本,其過程想想都覺得難。所以一個成功的開源項目,除了獨特的個性外,還要平衡和兼容好共性,在這裡給開源軟件開發者致個敬。
這節話題結束前,放一個Angular2 相比 Vue 有什麼優勢?項目對比的分析,是Vue作者寫得,挺有趣,大家可看看。
2. 應用:odoo、iDempiere、Moqui
在這裡我們說說三個企業應用,三個開源ERP/CRM開源軟件。
說到企業應用,首選Java語言。除了Java語言,這幾年因為數據科學和機器學習的熱潮,極大的推動了Python語言在企業的普及。此外,XML作為企業應用的數據表示、存儲、轉換的標準已被廣泛採用,而且各行各業的XML規範已經成熟和穩定。
所以簡單講,企業應用 = Java + Python + XML/JSON + RESTful API (當然, .NET也是一個不錯的選擇)
odoo是近幾年發展非常迅猛的開源ERP/CRM套件,使用Python、XML、PostgreSQL構建。之前,寫了篇odoo:開源 ERP/CRM 入門與實踐的文章,大家可看看,普及一下odoo的基礎知識。
iDempiere = OSGi + Adempiere
OSGi是Java模塊化的非官方標準,很強大,也複雜。它是很多開源軟件的基礎架構,如:Eclispe;也在工業界有很多應用,BMW汽車的應用控制系統就採用OSGI作為其底層架構, 這套系統主要用來控制汽車上的音箱、燈光等設備,總共由1000多個Bundle構成,但BMW汽車的應用控制系統啟動時間卻只需要3.5秒。
OSGi在汽車工業領域的應用可作為大家瞭解OSGi的重點。
Adempiere是一個很主流的開源ERP/CRM系統,也是一個完整的企業應用套件和堆棧。
Adempiere衍生自Compiere,因為Compiere越來越封閉和私有,就有了現在的Adempiere,很多開源軟件也都是這樣產生的。同時,Compiere也失去了可能成為No.1開源ERP/CRM的機會。
說到這,也說說Solaris和OpenSolaris,在Sun被Oracle後,因為Oracle的封閉,現在的它們也基本走向死亡,Oracle同時也玩死了NetBeans和OpenOffice,基於OpenOffice的LibreOffice代表著未來。
類似的故事還有很多很多,當前是個開放開源的時代,封閉自嗨的基本都會走向衰敗。就連很封閉的蘋果和騰訊也在不斷調整自己的開源、開放戰略,並陸續推出一些開源軟件。
好了,現在說說Moqui。
Moqui的作者是Apache OFBiz的設計者和開發者,在企業數據模型和流程上有非常深的造詣。Moqui基於OFBiz十多年來的項目實施經驗以及作者的設計、開發和方法論,包括純粹的關係 數據層以及面向服務的邏輯層。Moqui框架的核心代碼只有OFBiz核心框架代碼的15%左右,提供了更多有意義的功能和更多的高級工具,使用Groovy和Java語言。
Mogui是一個企業ERP/CRM的生態系統,一個類似地球:地核、地幔、地殼的的構造結構。
- Moqui Framework: 核心 Core,就像 Linux 的 Kernel 內核一樣
- Moqui Mantle,地幔業務構件: 一組通用的、可作為你各種場景業務系統的基礎業務構件集合,包含:
- 通用的數據模型,Universal Data Model (UDM)
- 通用業務服務庫,Universal Service Library (USL)
- 通用業務過程/流程庫,Universal Business Process Library (UBPL)
- Moqui Crust,地殼(插件):主題皮膚、 綜合的工具集、不同行業的應用支持、大公司規模支持、業務領域支持等
初步體驗了Moqui,感覺使用它構建應用很快,大部分工作就是編寫XML、腳本和構件,描述數據、業務和流程。介紹它是因為以往大多數企業應用都是硬編碼實現、數據、業務、編碼緊耦合,而Moqui採用XML定義模型、服務和流程,提高了整個系統的可描述、可維護性。Moqui支持如下的幾種類型的構件:
- 實體 entities : 貫穿於整個業務系統中的關係數據模型(直接使用模型,無需複雜的對象關係映射)
- 界面 screens 和 表單 forms : 用於基於 web 的應用界面或者其他用戶接口(通用方式是基本構件描述存放在 XML 文件中,或者用戶指定擴展存放於數據庫中)
- 界面轉換 screen transitions : 用於配置頁面到頁面的流轉以及設置頁面跳轉時,業務處理過程的必要輸入
- 服務 services : 遠程調用的方式運行內部邏輯交互或者曝露外部的服務
- ECA(事件-條件-行為 event-condition-action)規則 : 用於類似實體、服務操作以及 email 信息接收等系統級事件觸發
Mouqi應用中通用部分以及構件之間的關係:
Mouqi先了解到這,讓大家對它有一個總體認識,後續我們再深入下去。
3. 編輯器:Emacs、Vim、Atom
編輯器是所有計算機系統上最普遍的應用之一。
除了開發者日常使用的一些大塊頭IDE外:Eclipse、Visual Studio、Xcode等,這類小巧、輕盈的編輯器也備受程序員喜愛,它們是Emacs、Vim、Atom。
這篇文章由Emacs和Markdown Model編寫,在macOS(基於XNU/Dawnin)上完成,呵呵。
- Emacs:神一般的編輯器,一個不折不扣的“操作系統”,一個終極工具!
- Vim:改進的vi,命令行編輯器的標準。
- Atom:用戶友好的編輯器,照顧IDE用戶的鼠標使用習慣。
Emacs和Vim都鼓勵減少鼠標使用,強迫使用鍵盤,熟練使用鍵盤編程是進階和高效編程的必由之路,想想看在整個工作中,沒碰過鼠標,全部用鍵盤完成是不是感覺有點酷。
Vim有自己的語言Vimscript,Emacs有Emacs lisp。
Emacs的設計目標就是,你裝了個Unix或者Linux系統,不需要裝任何其它軟件,只要裝一個Emacs就夠了,它能幫助你完成所有的任務。也就是說,除了編程,你還可以用它寫論文、做幻燈片、瀏覽網頁、收發郵件、聊天、聽歌、看照片、玩遊戲……目前,好像除了直接在Emacs裡看電影還不行,其它的都實現了。(ps:這一段是直接引用,因為太贊同)
通過使用Emacs,接觸Emacs社區,讓自己感受和學習更多的黑客文化,通過Emacs接觸Emacs Lisp,這也是樂趣的開始!
Vim比較適合前端開發,其它語言,如:Java,還是使用IDE比較好。
Vim主要特點有:
- Vim有多種模式:普通模式,插入模式,可視模式,命令行模式;
- 使用Vim的主要精力在定位和操作上;
- 常見定位命令如:上下左右的操作,k 上行、j 下行、h 左、l 右;
- 定位後就是操作,Vim操作命令是原子性的,可隨意組合操作命令,如:daw(delete a word)、caw(change a word)。
除了Vim外,Vi家族還有幾個其它的克隆項目:
- nvi:新vi,vi官方的伯克利版本
- elvis
- vile:類Emacs的Vi
Atom 是一款基於 Electron framework、node.js 構建的跨平臺編輯器。它是 Emacs 和 Vim 之外推薦的開源編輯器,非常適合前端、Web開發,也支持廣泛的編程語言。
基於Atom和Electron framework構建的還有微軟的Visual Studio Code和Facebook的Nuclide。
Visual Studio Code是我很喜歡的,它非常強大和易用,擁有龐大的插件庫和資源。
四、第二類:數據驅動的大數據、人工智能層
大數據熱了好多年,這幾年是人工智能,它們的核心是數據和算法,這是一個數據驅動的時代,我們每天都在產生大量的數據,對數據來說,有個龐大的知識體系:數據科學。
4. 數據科學:Jupyter、Pandas、Anaconda
Juypter是一款面向數據科學和人工智能的前端交互工具,基於IPython構建,是IPython的未來發展方向。
Anaconda Python 是自由使用的面向大規模數據處理、預測分析和科學計算的企業級Python發行版。Anaconda 以 Red Hat 和 Debian Linux 發行版的方式來分發 Python企業版。
Anaconda是個大的數據科學軟件堆棧和平臺,當然,你也可以選擇自己去搭建。
使用Python進入數據科學領域的同學就可從Anaconda入手,主要是方便。它提供GUI和命令行兩種方式,使用包管理工具Conda,如安裝pandas、Jupyter:
conda install pandas
>>> import pandas as pd
>>> pd.show_versions()
conda install jupyter
Pandas是非常重要的數據科學Python軟件包,基於NumPy構建,簡化了以NumPy為中心的應用開發。NumPy的基礎是數組和矢量計算,NumPy的ndarray是一種多維數組對象,利用數組進行數據處理。
Pandas的優勢也體現在它的數據結構上,兩個主要的數據結構:
- Series
- DataFrame
寫個簡單的例子感受下
總之,進入數據科學領域的同學,這三個開源軟件都繞不過。
5. 大數據:HDP、CDH、HPCC
HDP和CDH都是Apache Hadoop分發版,HPCC是一個C++開發的大數據處理和分析平臺。
- HDP:100%開源,零鎖定;
- Hortonworks解決方案包含HDF和HDP;
- Hortonworks DataFlow(HDF)收集、組織、整理和傳送來自設備、傳感器、點擊流、日誌等的實時數據;
- Hortonworks Data Platform(HDP)用於創建安全的企業數據湖,為企業提供實現快速、實時商業洞察力所需的分析信息。
HDP是一個開源大數據的生態系統
Apache Metron實時大數據安全
CDH除沒有HDP那樣開放開源外,其它都很類似。Cloudera有很強的商業化解決方案和服務能力,取得了很好的商業價值,應該是目前最賺錢的Hadoop商業化公司,同時也開源了眾多優秀的開源軟件,如:Impala
HDP和CDH文檔都組織、整理的不錯,可作為了解、學習大數據、Apache Hadoop的一個重要資源。
ODPi: the open ecosystem of big data
在這裡提一下ODPi項目,這是Linux基金會下的一個項目,成員包括HDP的開發商Hortonworks。
鑑於Linux基金會的成功運作和治理能力,ODPi可關注,以生態系統的思考方式去了解整個大數據市場,國內已有大數據公司來此佔位。
ODPi大數據生態系統
在Apache Hadoop & Spark統治的大數據市場,HPCC顯得彌足珍貴,值得更多關注。
HPCC 包括以下核心組件:
- Thor (the Data Refinery Cluster)
- Roxie (Rapid Online XML Inquiry Engine, the Query Cluster)
- ECL (Enterprise Control Language)
- ECL IDE
- ESP (Enterprise Services Platform)
HPCC在安全、身份和風險管理有眾多成功案例。
6. 機器學習(深度學習):Caffe、MXNet、TensorFlow
選擇TensorFlow、Caffe(caffe2)、MXNet,一方面是軟件很好,另外一個重要因素是背後有Google、Facebook、Amazon等巨頭在推動,並在自己的產品服務線廣泛部署,其可靠性、可伸縮性得到最大規模和嚴格的驗證。
TensorFlow在GitChat人工智能板塊已有了最多的課程和介紹,它的重要性就不多說。
TensorFlow官方文檔中文版可作為你學習TensorFlow的重要參考,英文好的直接跳過。
編程語言入門有Hello World,機器學習入門有MNIST。MNIST是一個入門級的計算機視覺數據集,它包含各種手寫數字圖片。它也包含每一張圖片對應的標籤,告訴我們這個是數字幾。你可從MNIST開始你的機器學習,熟悉神經網絡和MNIST數據集,去構建一個深度卷積神經網絡。
ps:一個小道消息:MS因為內鬥嚴重很難發力,所以用CNTK,Torch,TensorFlow,MXNet,Caffe的都有,自家的CNTK很難形成規模。
相對於TensorFlow這種重量型的後端,MXNet的輕量化路線使得可以我們在花費Google brain 1/10的人力的情況下做到類似TensorFlow技術深度的系統。(MXNet開發者李沐)
那到底選擇哪個深度學習框架呢?或許賈楊清同學的這段話會給你個答案,他是Caffe(Caffe2)的作者,同時也是TensorFlow的開發者和貢獻者。
另外我還要強調的是我最近每個演講都會提到的“unframework”,或者說“unix philosophy”的觀點:framework不重要,重要的是技術,這也是我一直主張把核心軟件比如說Gloo,NNPACK,FAISS這些單獨放出來,不放在框架裡面的原因 - 每個框架都可以拿這些軟件來優化,這才是做community的道理。老實說,Caffe我也參加了,TensorFlow我也參加了,C2我也參加了,最重要的是大家開心,能學到技術,能用得方便。
說到機器學習、深度學習,我想表達自己的一個觀點。當前,我們都在關心機器學習,其實,我們也應該更多關心一下如何讓我們自己更高效的學習,成為一個學習機器。當然,這裡的學習機器是有更多思考和創造力的那種。未來是機器學習和學習機器相互學習、共同促進的世界,誰更聰明,誰就有更多支配和主導權,大家相輔相成,共同進化。
7. 汽車機器人:Automotive Grade Linux(AGL)、ROS、Apollo Auto
汽車、機器人是大數據和人工智能重要的應用領域,機器人裝上人工智能的大腦將更多從事人的工作,未來很多工作將被人工智能機器人取代,而給機器人餵食的就是大數據。
首先,基於AGL的豐田佳美(Toyota Camry)將於2018亮相北美市場。
AGL是Linux基金會項目,基於Tizen項目構建,最初由韓國三星主導,現在為Linux基金會項目。
美日韓三國高科技公司主要在推動這個項目,其System Architecture Team(SAT)包含5-10個核心成員:Denso, Fujitsu TEN, Microchip, Panasonic, Intel, Renesas/IoT.bzh, Toyota
這張圖很重要,它把AGL、Tizen和GENIVI三者以AGL UCB的方式融合在了一起。
在汽車工業使用LTS: Long Term Stable Kernel,這點很重要,這兩份文檔可參考。
- LTSI Project updateLong Term Support Initiative
- Linux Kernel selection guide for production use
不知道到百度阿波羅計劃的Linux核心是如何評估選擇的?
百度Apollo託管在GitHub的開源軟件:
- Apollo: An open autonomous driving platform
- Apollo Platform: based on Robot Operating System(ROS)
- Apollo Kernel: based on Linux Kernel 4.4.32
因為Apache v2, ROS, Linux Kernel,Apollo Auto也在這介紹一下。
百度Apollo開放平臺被稱為“汽車界安卓”,我想這個應該在成功後再被稱。
Apollo1.5開放五大能力:
- 障礙物感知
- 決策規劃
- 雲端仿真
- 高精地圖服務
- 端到端的深度學習(End-to-End)
金龍客車通過Apollo 1.0的成為首例商用車落地實例。
百度Apollo開放平臺通過阿波羅基金專注於汽車行業及自動駕駛領域的人民幣股權投資,簡單講就是砸錢和收購,快速形成一定規模。
目前,Apollo基金第一期20億已到位並在快速運行,目前已完成數個項目的投資。也將在未來3年完成100億&100+個項目的投資。總之就是有錢,自動駕駛創業的同學們這也是很快變現的方式。
我們都知道自動駕駛這件事是個非常複雜、非常龐大的工程,可有人一個人就幹成了,天才黑客George Hotz自己開發了一套汽車自動駕駛系統,而且成立了公司Comma.ai專注這件事,點開網頁看實測效果還是很不錯的。
百度Apollo和comma.i項目對比 (截止2017.11.8上午10點)
- comma.ai openpilot: 6516 Star
- comma.research: 3488 Star
- 百度Apollo: 6362 Star
我也知道這個對比沒什麼意思,只是出於對天才的仰視。
Robot Operating System(ROS)是一個應用廣泛的機器人系統和開源軟件框架,ROS的基本原理是無需改動就能夠在不同的機器上覆用代碼。ROS提供了一個標準的操作系統環境,包括硬件抽象、底層設備控制、通用功能實現、進程間消息轉發和軟件包管理等。
ROS 提供了 C++ 和 Python 兩種主要的編程接口,也可集成 Arduino,ROS 2.0 採用了DDS(數據分發服務)。
隨著ROS 2.0的開發,ROS能夠兼容除Linux之外更多的操作系統,如Windows、Android;能夠支持從工業計算機到Adruino開發板等各類型的硬件;能夠採集RGB-D攝像頭、普通攝像頭和各種類型的傳感器數據;能夠驅動類人形機器人、四軸飛行器等各類型的機器人。新版本的ROS在採用SOA架構的基礎上,集成了MVC框架,更加有利於機器人人機交互界面的開發和機器人控制。
由於ROS極大的開放性和包容性,它能夠兼容其他機器人開發工具、仿真工具和操作系統,使之融為一體。這使得ROS不斷髮展壯大,併成為應用和影響力最廣泛的機器人軟件平臺。
學習ROS,掌握一把通往未來的鑰匙。(ps: 這部分內容取自《ROS機器人程序設計》(原書第2版))
關於市場份額:作為一家擁有近37年曆史的嵌入式操作系統開發商,QNX在車載信息娛樂系統或車聯網系統佔據超過50%的市場份額,QNX是儀表盤背後的隱形王者,大家可關注下。
五、第三類:雲計算、基礎設施層
如何支撐上層的數據分析和應用,需要有個強大的軟件基礎設施,我們以雲計算、數據庫、消息隊列和Web Server來搭建這個基礎設施。
雲計算對所有的計算資源、存儲資源、網絡資源進行系統管理,用數據庫進行各種各種類型數據的存儲和處理。以消息隊列作為數據傳輸和應用交互的機制,Web Server將各種服務以RESTful的方式部署。
8. 雲計算:OpenStack、OpenShift、SaltStack
雲計算數據中心是一項具有戰略意義的基礎設施,其重要性和普及知識就不多講了。
這裡主要簡單介紹IaaS、PaaS兩種主要的雲計算服務模型,其代表有:OpenStack、OpenShift
OpenStack是開源雲平臺的事實標準。
OpenStack使用Python語言編寫,使用了Django、Tornado和Twisted等框架,使用AMQP消息協議和Redis分佈式K/V存儲。
OpenStack可以說是Linux之外最大規模的開源項目,有大量公司和開發者參與構建這個開源雲平臺生態系統,也有很多OpenStack發行版可供用戶選擇,國內用戶可關注這幾家OpenStack供應商:
- UnitedStack有云
- EasyStack 也提供ESContainer企業級容器平臺,深度融合Kubernetes與OpenStack兩個平臺。
- 華為OpenStack
Google加入OpenStack基金會推動著Docker/Kubernetes與混合雲加速融合;EasyStack聯合創始人&CTO劉國輝談到:
”Google加入OpenStack體現了對於數據中心控制平面的爭奪已經結束,以容器為代表的應用形態與以虛擬化為代表的系統形態將會完美融合於OpenStack之上,並與軟件定義網絡和軟件定義存儲一起統治下一代數據中心。“
OpenStack、Ansible、SaltStack等開源軟件也極大奠定了Python在數據中心的地位。
OpenShift是RedHat推出的基於Docker和Kubernetes構建的PaaS開源容器雲平臺。
OpenShift能給用戶帶來什麼?可參考紅帽OpenShift的業務價值。
OpenShift業務價值亮點有:
- 5年平均投資回報率:531%
- 每年每100名開發人員實現的年度平均效益:129 萬美元
- 應用程序開發生命週期加快:66%
- 開發每個應用程序所需的IT員工時間減少:35%
- 每個組織增加的收入:742萬美元
- 每個應用程序的IT基礎架構和開發平臺成本降低:38%
總結起來:加快產品、服務研發和交付時間,減少研發成本,增加企業收入,降低基礎架構投資,獲得更高的投資回報率。
為什麼在這裡把這個提出來說說,也是出於自己的一些經歷。
在我們運作開源軟件商業化服務時,開源軟件需要有個好的商業包裝。開源軟件對我們開發人員很熟悉,但很多最終用戶和客戶卻不瞭解,他們可能根本就不知道什麼開源軟件,你給他們大談開源軟件,他們會一臉茫然。若你把開源軟件以類似這樣的方式講給他們聽,效果可能會更好,也更容易成交業務,所以基於開源軟件做商業化服務的同學很有必要建立起這樣的思維模式,將好用、強大的開源軟件做更好的商業包裝。這方面的成功公司有很多,你可更多跟進Red Hat、Ubuntu、MongoDB、Hortonworks等開源軟件公司,它們把開源和商業融合都做得相當出色。
此白皮書也可作為開源軟件商業價值分析的參考,大家基於開源軟件做商業化公司和運營時可參照這樣的思路思考下去。
Docker容器和Kubernetes容器編排已成為企業交付軟件和服務的行業標準,OpenShift可直接作為企業DevOps & CI/CD的基礎設施, 成為部署微服務的多租戶平臺。
Red Hat也在積極推動區塊鏈技術在OpenShift的應用部署,與BlockApps的合作,為其提供區塊鏈平臺的PaaS基礎設施。
OpenShift生態系統已初具規模,這可增強大家選型的信心。不過,因為OpenShift的平臺規模也比較大,定製化和擴展的難度也會加大。這也是我們常碰到的問題,選個大塊頭的開源平臺堆棧,還是選擇自由裝配和維護各種小軟件的融合方式。這是兩種不同的思路,團隊Leader和技術團隊要仔細評估和做出平衡。
SaltStack是 Python開發的開源配置管理和自動化工具,SaltStack提供了一種全新的基礎設施管理方式,部署輕鬆,在幾分鐘內可運行起來,擴展性好,很容易管理上萬臺服務器,速度快,服務器之間秒級通訊。
關於SaltStack,大家可從以下幾點去加深瞭解:
- 理解Salt的動機,以及它們將影響運維人員的使用方式;
- 更好地使用雲服務,包括EC2、Azure及OpenStack等,支持更大規模雲計算平臺部署;
- 學習新的RAET協議,並瞭解它如何改變自動化工作方式;
- 使用ZeroMQ消息隊列,管理端Master,客戶端Minion,如何進行數據交換和消息傳遞的。
Ansible基於SSH協議傳輸數據,Saltstack使用消息隊列zeroMQ傳輸數據,MQ通訊和SSH通訊,速度相差大約幾十倍。
我們推崇使用消息隊列MQ來進行數據傳輸和通訊。
與Ansible的比較,SaltStack 與 Ansible 選擇?供大家選型參考。
9. 數據庫(數據倉庫):Riak、OrientDB、Apache Kylin
Erlang驅動的數據庫,在分佈式、消息、併發、可伸縮、容錯方面有天然優勢,Riak數據庫天生就擁有這些能力。
Riak數據庫以Riak Core、Riak KV、Riak TS、Riak S2的方式提供了構建分佈式系統、鍵值存儲、時序存儲、對象存儲的核心軟件基礎設施。
Riak公司在數據庫對比選型上做了充分的工作,把幾乎主流的開源數據庫都對比了一下:
- Riak Compared to Cassandra
- Riak Compared to Couchbase
- Riak Compared to CouchDB
- Riak Compared to HBase
- Riak Compared to MongoDB
- Riak Compared to Neo4j
- Riak Compared to DynamoDB
其實,每個選型的開源軟件都可能涉及這樣的廣泛比較,所以工作量是比較大的,大家可參考。
多範式、多流派(面向對象、模版、函數式、過程式)的混合式語言設計方法幫助C++成為解決複雜、多樣性問題的編程語言首選。
多模型數據庫OrientDB(對象模型、鍵值模型、文檔模型、圖模型)讓其集多種數據庫類型於一身,使其能應對多種應用場景,減少多種數據庫部署運維帶來的開銷和成本,OrientDB這樣的多模型設計是否也能像C++這樣被大多數開發者所認可與接受?
strong text對象模型
鍵/值模型
文檔模型
圖模型
再說說Kylin是什麼?
再說說Kylin是什麼?
- 可擴展、超快OLAP引擎:Kylin是為減少在Hadoop上百億規模數據查詢延遲而設計;
- Hadoop ANSI SQL 接口:Kylin為Hadoop提供標準SQL,支持大部分查詢功能;
- 交互式查詢能力:通過Kylin,用戶可以與Hadoop數據進行亞秒級交互,在同樣的數據集上提供比Hive更好的性能;
- 多維立方體(MOLAP Cube):用戶能夠在Kylin裡為百億以上數據集定義數據模型並構建立方體;
- 與BI工具無縫整合: Kylin提供與BI工具,如Tableau,的整合能力,即將提供對其他工具的整合。
Apache Kylin已成功部署於百度、美團、網易、京東、唯品會、中國移動、中國電信、國泰君安、華泰證券、聯想、OPPO、魅族、去哪兒等公司,支撐著用戶行為分析、流量日誌分析、電商分析,廣告效果分析,實時分析等基於數據倉庫及多維分析(OLAP)技術的數據服務。是傳統數據倉庫、商業智能技術在互聯網企業大規模應用的真實案例。
Apache Kylin有健康發展的生態系統
在這篇文章中,我們多次提及生態系統。這個大家多重視,逐步建立起層次化、系統化、平臺化的思考方式。
10. 消息隊列(即時通訊):RabbitMQ、Kafka、ejabberd
在介紹RabbitMQ之前,說說 Advanced Message Queuing Protocol (AMQP,高級消息隊列協議)
AMQP的願景是:從任何發佈者到任何感興趣的消費者之間的信息,通過一條軟件總線實時動態的連接起來。
RabbitMQ就是要實現AMQP願景的開源軟件,AMQP的就如同電話交換機的架構,選擇Erlang也在意料和情理之中。Erlang是一門消息併發編程語言,它為通信而生。
除AMQP標準外,Extensible Messaging and Presence Protocol(XMPP)是開放即時通信標準,其代表產品是Erlang開發的Ejabberd,可以說Erlang支撐起了AMQP和XMPP兩大標準的開源軟件實現。Erlang是消息隊列、即時通信的首選語言。
XMPP是一個有著18年曆史的開放消息標準,被廣泛應用於物聯網、即時通信、社交網絡和實時Web領域,支持眾多的開發語言和操作系統。
Apache Kafka 是一個高吞吐量的分佈式消息系統,使用 Scala 開發,它已是企業應用和大數據生態系統中的核心組件,它是消息、數據、實時流的中心Hub。
由阿里巴巴捐贈給Apache基金會的RocketMQ也在健康的發展著,和Kafka很類似,大家下來可做些對比評估和選型。
此外,ZeroMQ大家也可多關注,上面介紹的SaltStack就使用ZeroMQ作為傳輸機制,且大量的開源軟件中也包含了ZeroMQ的使用。
OpenMessaging項目由阿里巴巴發起,與雅虎、滴滴出行、Streamlio公司共同參與創立的分佈式消息中間件、流處理領域的應用開發標準,目前已正式入駐Linux基金會。
消息隊列是重要的基礎設施,因為它解耦、連接各種數據、應用和服務,充分體現互聯網連接一切的本質。
11. 服務器:Nginx、Jetty、Cowboy
Nginx是輕量級、高性能 Web Server的首選,幾乎部署在所有主流的互聯網公司。
除了Nginx官方版本外,大家也可關注Nginx兩個分發版本:
- OpenResty
- Taobao Tengine
Apache Tomcat和Eclipse Jetty是Java Web Server的默認選擇。
- Jetty更輕量、更容易定製;Jetty架構基於Handler,擴展更容易,而Tomcat是基於容器設計,不易擴展;
- Google GAE選擇Jetty,定製足夠小的Java Web Server支撐GAE業務;
- Apache Tomcat和Eclipse Jetty背後是兩大開源基金會的合作與競爭。
Cowboy是比較另類的,它使用Erlang開始,是一個小型、快速和模塊化的HTTP服務器,常用Cowboy構建嵌入式Web Server。
個人很傾向使用Erlang開發通用的Web Server,因為Erang分佈式、消息、併發、可伸縮、容錯方面的天然優勢,有興趣的同學可嘗試基於Cowboy構建。
六、第四類:操作系統、編譯器、虛擬機、編程語言
好了,現在我們來到最底下的一層:系統層,它包含操作系統、編譯器等核心軟件,是每臺計算設備不可或缺的組成部分。
12. 操作系統:GNU/Linux、XNU/Darwin、FreeBSD
首先簡單回顧下UNIX/BSD操作系統的歷史
我們只關心圖中上面BSD和GNU家族的東東,下面的都是商業的UNIX操作系統,我們就不考慮了。
BSD家族最具代表性的就是FreeBSD,它是GNU/Linux之外最可靠的選擇。它強大、穩定、堅如磐石,也是蘋果操作系統的重要組成部分。
蘋果最近開源了XNU項目
XNU是XNU is Not Unix的首字母縮寫,類似GNU是GNU's Not Unix的縮寫,我們暫且也以GNU/Linux的方式來稱呼XNU/Darwin。
OpenDarwin以前有發佈過,但因為一些原因關停,這裡有網站存檔。
XNU是個混合內核,包含兩部分:BSD和Mach。macOS在剝離了Cocoa、Carbon等東西后,剩下的叫Darwin,它包含POSIX兼容、UNIX線程、進程實現。
XNU內核是macOS和iOS的核心,由三個主要部分組成的一個分層體系結構:
- 內核的內環是Mach層,源自卡納基-梅隆大學開發的Mach內核;
- BSD層;
- I/O Kit。
macOS架構
Darwin和macOS
macOS核心架構
GNU/Linux的分發版很多,除了兩大主流Debian/Ubuntu和RedHat/CentOS外,大家可更多關注下:NixOS Linux
它包含幾個很有特色的項目:
- Nix:包管理器,也可用於macOS平臺。
- NixOps:雲部署工具
- Hydra:基於Nix的持續構建系統
- Disnix:分佈式服務部署工具集
GNU/Linux驅動的Android現在已成為移動操作系統的主導,基於它的生態系統會逐漸放大。此外,以OpenWrt、ROS為代表的嵌入式、機器人操作系統也在GNU/Linux的生態系統的驅動下逐漸壯大。
OpenWrt是適合於嵌入式設備的一個Linux發行版,國內主流的路由器:如極路由、小米路由器、魅族路由器、魔豆路由器等都基於OpenWrt構建。相比Android系統,OpenWrt被認為是更加適合智能設備和機器人的軟件平臺,被譽為下一個時代的Android,值得更多關注。
在操作系統環節,我想聊一下虛擬化和容器技術。
虛擬機技術在操作系統、程序設計語言和計算機體系結構中佔據了重要位置,它是系統與進程的通用平臺。
在“進程級“ 虛擬機技術可用於實現動態二進制翻譯、平臺無關的網絡計算等能力;而在“系統級",可以在同一個硬件平臺或一個服務器集群上同時提供多個操作系統環境。
可以說,Solaris Zone是操作系統虛擬化做得最出色的解決方案,只可惜。
最近,阿里巴巴也宣佈開源它的容器技術:Pouch
13. 編譯器:GCC、LLVM、Babel
GCC(GNU Compiler Collection,GNU編譯器集合)是最重要的開源軟件,因為其它幾乎所有開源軟件都在某種層次上依賴於它,核心編程語言是C語言。
LLVM(Low Level Virtual Machine)底層虛擬機,是一個開源(BSD)編譯器的基礎設施,使用C++編寫。
GCC和LLVM是編譯器領域的兩大巨頭。
GCC和LLVM的體系很龐大,其內容、細節和知識點太多太多,留在後續的課程我們學習交流,後面有推薦的編譯器書籍大家可參考。
Babel 是一個通用的多用途 JavaScript 編譯器。更確切地講是源碼到源碼的編譯器,通常也叫做“轉換編譯器(transpiler)”,簡稱轉譯。
Babel 能把用最新標準編寫的 JavaScript 代碼向下編譯成當前可用的老版本,Babel 能夠讓你提前使用 JavaScript新標準。
Babel 插件體系讓其擁有龐大的生態系統。
Babel 三個主要處理步驟是:解析(parse),轉換(transform),生成(generate):
- 解析代碼並輸出抽象語法樹(AST)含詞法分析和語法分析;
- 轉換接收AST並對其進行遍歷,對節點進行添加、更新及移除等操作, 這是最複雜的過程,同時也是插件將要介入工作的部分;
- 代碼生成把AST轉換成字符串形式的代碼。
Babel是下一代JavaScript編譯器,說到Babel,也會提及TypeScript。TypeScript是JavaScript超集,是JavaScript的強類型版本,通過TypeScript Compiler API,開發者可以自己實現編譯器。
可簡單理解為:TypeScript = Type + ES6
Babel Handbook可作為你學習Babel的入門參考。
14. 虛擬機(運行時):JVM、.NET Core、BEAM(Erlang)
在前面操作系統章節我們提到過虛擬機,這一節我們也將瞭解一些有關編程語言虛擬機的技術。
虛擬機技術極大的豐富和繁榮了編程語言的生態系統,我們知道JVM平臺有很多編程語言,可能你不知道有超過200多種編程語言運行在JVM平臺上,它們共同繁榮了JVM生態系統。
JVM的實現也有很多,大家可關注以下幾個:
- HotSpot Oracle官方實現
- IBM最近開源了OpenJ9Java虛擬機項目
- Kaffe
- Jikes RVM Java開發的虛擬機,可作為研究項目
常見語言也有很多JVM實現版本:
- Erlang: Erjang A JVM-based Erlang VM (多關注)
- JavaScript: Rhino
- Python: Jython
- Ruby: JRuby
- PHP: Caucho Quercus
此外,.NET平臺也託管了很多編程語言:C#, F# ...
JVM和.NET兩大平臺外,值得大家更多關注的是Erlang及其虛擬機生態系統。
這三類平臺,個人傾向選擇將其用於不同的領域,如:
- JVM平臺更多用於企業應用,如:電商ERP、大數據平臺等;
- .NET平臺更多用於泛娛樂、遊戲等,當前最火的王者榮耀就基於.NET的Unity平臺構建,且微軟幾十年個人電腦操作系統的使用和廣泛普及;
- Erlang平臺主攻消息、通信、電信基礎設施、軟件基礎架構。
15. 編程語言:Erlang、Clojure、F#
基於這三大虛擬機的三門主流語言:Erlang、Clojure、F#,它們也是函數式編程語言的代表。
JSR-335(Lambda Expressions for the Java TM Programming Language)中定義的Lambda對Java語言語法產生深遠影響,函數式編程將成為主流。
在上面,Erlang被多次提到在Riak數據庫、RabbitMQ消息中間件、Cowboy web server中的應用,Erlang的天然優勢就是:分佈式、消息、併發、可伸縮、容錯。你可以在筆記本上輕鬆創建300萬個進程。
Clojure 是一種運行在 Java平臺上的 Lisp 方言,Lisp 是一門可編程的編程語言 (Lisp is a programmable programming language) Clojure將這門函數式編程語言帶到了JVM生態系統。
Java、Scala、Clojure是JVM平臺上三種主流的編程語言,它們的定位是怎麼樣:
Clojure is about Data, Scala is about Types, Java is about Objects.
先了解幾個Clojue的成功應用:
- Apache Storm 是 Twitter 開源的大數據實時處理引擎,採用 Clojure、Java 語言開發,大概一半 Clojure、一半 Java;在進程之間,Storm採用ZeroMQ進行通信;
- 花旗信用實時風險估值系統Java/Clojure後端(1500節點分佈計算)花旗投資信用部實時風險計算系統,邏輯使用Clojure;
- 沃爾瑪: “Our Clojure system just handled its first Walmart black Friday and came out without a scratch.” - Walmart Labs
此外,ClojureScript: Clojure to JavaScript compiler 大家多關注。
F# = Objects + Functional
Mixed OO/Functional Programming Has Won
F#(F sharp)是微軟開發的基於.NET語言運行時的程序設計語言,採用 Apache v2 許可協議。這是一門函數式編程語言(FP,Functional programming),函數式編程語言最重要的基礎是Lambda Calculus。
F#和OCaml是ML函數式編程語言的兩種主要方言,有時F#和OCaml的程序是可以交互編譯的。
F#支持高階函數、柯里化、惰性求值、Continuations、模式匹配、閉包、列表處理和元編程。在早期,F#作為一門適合於金融和計算密集型的語言而聞名。現在,F#既用於算法密集型應用程序,也用於主流業務應用程序。在算法密集型應用程序中,正確性至關重要,而主流業務應用程序則在很大程度上受益於F#支持領域建模並讓非法狀態不可達。
F#在數據科學領域具有很大優勢,基於Atom編輯器的數據編程。
好了,我們走馬觀花般的過了一遍這45個開源軟件,主要讓大家大致瞭解和認識一下它們。
最後,我們把這45個開源軟件以核心特新和要點的方式再整理一下。
七、45個開源軟件特性、要點
思考、總結、提煉單個開源軟件的核心特性和要點,看看它能為團隊帶來什麼幫助,能力有哪些?
1. Django
- Django和Flask是使用最廣泛的Python Web框架;
- Django提供Web一站式解決方案:會話、緩存、ORM、驗證、表單處理、後臺管理等,但系統耦合度高,替換內置功能比較麻煩,學習曲線較陡;
- Django和Flask都基於WSGI,這是同步阻塞接口,不能使用異非阻塞的編程模式,你可考慮使用Klein微框架,用法很像Flask,可以異步方式編寫Web應用。
2. Meteor
- 一個面向Web和App的應用框架 和構建平臺;
- Meteor 7大原則;
- 超過12000個包的生態系統。
3. Qt
- Qt核心:元對象系統、屬性系統、對象模型、對象樹、信號槽(Signal/Slot),Qt的Signal/Slot很好解決了對象間通訊的問題,被其它語言框架借鑑;
- Qt使用QML定義用戶界面,使用C++編寫業務邏輯;
- Qt在在汽車行業有廣泛應用,是GENIVI汽車聯盟的推薦技術。
4. odoo
- odoo不僅僅是開源ERP/CRM;
- 還是一套伴隨企業成長可擴展的商業運營支撐系統;
- 一個巨大的應用生態系統,有近12500個Apps可供選用。
5. iDempiere
- iDempiere = OSGi + Adempiere;
- OSGi是Java模塊化一個領先的解決方案;
- Adempiere是一個世界級的集成的ERP/CRM開源軟件。
6. Moqui
- Apache OFBiz作者的又一力作;
- 快速的企業應用原型系統開發;
- 一個框架、一個生態系統。
7. Emacs
- Emacs是迄今為止功能最為強大的文本編輯器,Emacs是一種信仰,它是神一般的編輯器;
- Emacs是模塊化的,遵循do one thing, and do it well原則,需要什麼就安裝什麼,你可以像搭積木的方式搭建自己的環境和系統;
- Everything Emacs,你可以在Emacs完成你幾乎所有的工作:編程、寫作、瀏覽網頁、收發郵件、日程、娛樂遊戲、它是個人操作系統。
8. Vim
- Vim模式:普通模式,插入模式,可視模式,命令行模式;
- Vim的使用主要放在定位和操作上;
- 常見定位命令如:上下左右的操作,k 上行、j 下行、h 左、l 右;定位後就是操作,vim操作命令是原子性的,可隨意組合操作命令,如:daw(delete a word)、caw(change a word)。
9. Atom
- Atom由GitHub開發維護;
- Atom使用的Electron framework已有一個龐大的生態系統;
- 微軟Visual Studio Code和Facebook Nuclide都基於Atom/Electron框架構建。
10. Jupyter
- Jupyter is the new front end for data science and AI.
- Jupyter的操作過程可存檔、傳播、分享;
- Jupyter的核心是IPython,Jupyter是未來。
11. Pandas
- 在數據科學領域,Pandas是一個非常重要的Python軟件包;
- Pandas基於NumPy構建,讓以NumPy為中心的應用變得更簡單;
- Pandas使用的兩個主要數據結構:Series和DataFrame。
12. Anaconda
- Anaconda是一個企業級Python發行版,面向大規模數據處理、預測分析和科學計算;
- Anaconda 以 Red Hat 和 Debian Linux 發行版的方式來分發 Python;
- Anaconda 包含近500個最流行的科學、數學、工程和數據分析的Python軟件包。
13. HDP
- Hortonworks公司擁有最多的Apache大數據相關項目開發者和貢獻者,開發、發行100%開源的大數據平臺;
- Hortonworks Data Platform (HDP)和Hortonworks DataFlow (HDF)是兩大產品;
- 通過整合、交付統一的 Apache Spark 和 Hadoop,將 Spark 驅動的敏捷分析工作流程與 Hadoop 的海量數據集和經濟性相結合,企業可以使用行業最佳安全性、管制和運營能力來部署 Apache Spark。
14. CDH
- CDH可能是商業化運作最好的大數據平臺和解決方案;
- 開發維護了多個流行大數據開源軟件,是HDP最主要的競爭對手;
- Impala一個C++開發的Hadoop實查詢引擎,值得關注。
15. HPCC
- 一套C++開發的大數據處理和分析平臺;
- ECL (Enterprise Control Language) 和KEL (Knowledge Engineering Language) 是兩個High Level的腳本語言;
- HPCC比Apache Hadoop歷史更加悠久,在並行架構上也有自己的獨到之處:Data Parallelism、Pipeline Parallelism、System Parallelism。
16. Caffe(Caffe2)
- Caffe2 是賈揚清對Caffe的重新思考和重構,目前在Facebook,是Caffe2的核心開發者;
- Caffe2對移動端的良好支持,15行代碼Support WatchOS build 確實夠簡單;
- Caffe2可在手機與樹莓派上訓練和部署模型。
17. MXNet
- 比TensorFlow更加輕量、高效小巧,更適合自定義需求高的公司和研究者;
- MXNet允許用戶自由把圖計算和過程計算混合起來使用;
- MXNet正在Apache基金會孵化,相信很快孵化成頂級項目。
18. TensorFlow
- TensorFlow體格龐大,代碼量大,抽象層多,深度自定義會很困難;
- TensorFlow也是一個商業行為,背後是Google,它帶來的可行度和高質量;
- 一個事實:Google內部版的TensorFlow和Google Cloud深度綁定優化與開源的TensorFlow在速度和性能上會又巨大差異,美國的大廠都或多或少的在拒絕它。
19. Automotive Grade Linux(AGL)
- Automotive Grade Linux(AGL) 是 Linux基金會發布的開源Linux車載系統,AGL 基於 Tizen 構建;
- AGL + Tizen IVI + GENIVI = AGL UCB(Unified Code Base));
- Qt Automotive Suite based on GENIVI or Automotive Grade Linux。
20. ROS
- ROS是一個廣泛使用的機器人操作系統和軟件框架,ROS的基本原理是無需改動就能在不同的機器人上覆用代碼;
- 隨著ROS 2.0的開發,ROS能夠兼容除Linux之外的更多操作,如Windows、Android;能夠支持從工業計算機到Adruino開發板等各種硬件;
- 百度無人車阿波羅平臺基於ROS構建。
21. Apollo Auto
- 百度 Apollo(阿波羅)是一個開放的、完整的的平臺,將幫助汽車行業及自動駕駛領域的合作伙伴結合車輛和硬件系統,快速搭建一套屬於自己的自動駕駛系統,採用Apache v2許可協議;
- 阿波羅平臺基於ROS構建;
- 阿波羅核心核心基於Linux Kernel 4.4.32構建。
22. OpenStack
- OpenStack是開源雲平臺的事實標準;
- OpenStack + Kubernetes 開啟雲計算的新時代;
- OpenStack儘管非常好,國內也有很多廠商是自研雲計算平臺的,如:騰訊。
23. OpenShift
- OpenShift is Enterprise-Ready Kubernetes;
- Docker容器和Kubernetes容器編排已成為企業交付軟件和服務的行業標準,OpenShift可直接作為企業DevOps & CI/CD的基礎設施, 成為部署微服務的多租戶平臺;
- OpenShift是BlockApps區塊鏈平臺的PaaS基礎設施。
24. SaltStack
- SaltStack提供了一種全新的基礎設施管理方式,部署輕鬆,在幾分鐘內可運行起來,擴展性好,很容易管理上萬臺服務器,速度快,服務器之間秒級通訊;
- SaltStack使用ZeroMQ,帶來極高的通訊效率;
- SaltStack或許是構建、管理、運營雲計算基礎設施的最佳方式,它支持廣泛的雲平臺。
25. Riak
- Riak 是使用 Erlang 開發的開源(Apache V2) 分佈式 NoSQL 鍵/值(K/V) 存儲數據庫系統;
- 有 Riak Core、Riak KV 鍵值存儲、Riak TS 時序存儲、Riak S2 對象存儲的完整產品線;
- Riak擁有Erlang語言帶來的分佈式、消息、併發、可伸縮、容錯方面的天然優勢。
26. OrientDB
- OrientDB 是一個Java開發的開源(Apache v2)NoSQL文檔和圖形數據庫,也通過 OrientDB SQL 支持 SQL;
- OrientDB是一個擁有對象模型 鍵/值模型 文檔模型 圖模型的多模型數據庫;
- 多範式編程語言(面向對象、模板、函數式編程、過程式 )C++帶來極高的生產力,多模型數據庫OrientDB能否也帶來類似效果。
27. Apache Kylin
- Apache Kylin:商業數據倉庫、商業OLAP引擎的替代品;
- Kylin是為減少在Hadoop上百億規模數據查詢延遲而設計,Kylin為Hadoop提供標準SQL支持大部分查詢功能,通過Kylin,用戶可以與Hadoop數據進行亞秒級交互;
- 一個開源數據倉庫、商業智能生態系統。
28. RabbitMQ
- RabbitMQ是Advanced Message Queuing Protocol (AMQP)標準的Erlang語言實現;
- RabbitMQ是部署最廣泛的開源消息代理;
- 可以把ZeroMQ看作RabbitMQ這類消息隊列系統的補充,而不是替代品。
29. Apache Kafka
- Apache Kafka:下一代分佈式消息系統;
- Apache Kafka 是一個高吞吐量的分佈式消息系統,使用 Scala 開發,最初被用於 LinkedIn;
- Apache Kafka 解耦企業應用的複雜性,是信息和流數據的交換樞紐。
30. Ejabberd
- 與RabbitMQ實現的AMQP相比,XMPP廣泛應用於即時通信領域;
- Ejabberd是XMPP Server的首選;
- Ejabberd支持Elixir編程語言。
31. Nginx
- epoll(freebsd的kqueue)網絡IO模型是Nginx高性能的根本理由;
- 與Apache相比較,最核心的區別在於Apache是同步多進程模型,一個連接對應一個進程;Nginx是異步的,多個連接可以對應一個進程;
- 對於後端動態服務來說,比如Java和PHP。這類服務器(如JBoss和PHP-FPM)的IO處理能力往往不高。Nginx有個好處是它會把Request在讀取完整之前buffer住,這樣交給後端的就是一個完整的HTTP請求,從而提高後端的效率,而不是斷斷續續的傳遞(互聯網上連接速度一般比較慢)。同樣,Nginx也可以把response給buffer住,同樣也是減輕後端的壓力。(此條信息來自:知乎叔度。
32. Jetty
- Eclipse Jetty,一個更輕量、更易擴展和定製的Java Web Server;Jetty架構基於Handler,擴展更容易,而Tomcat是基於容器設計,不易擴展;
- Google GAE選擇Jetty,定製足夠小的Java Web Server支撐GAE業務;
- Apache Tomcat和Eclipse Jetty背後是兩大開源基金會的合作與競爭。
33. Cowboy
- Cowboy適合構建嵌入式應用,它沒有配置文件,也不會生成日誌,一切都由Erlang控制。
- Cowboy支持的協議有:HTTP/2、HTTP/1.1、WebSocket、HTTP/1.0、SPDY/3.1、SPDY/3;
- Erlang很適合開發Web server,可基於Cowboy做擴展和定製;
34. GNU/Linux
- Linux基金會不僅僅有Linux項目,還有眾多其它的開源項目,如AGL;
- 可更多關注類似Robot Operating System(ROS)這樣的機器人操作系統和嵌入式系統;
- 相比Android系統,OpenWrt被認為是更加適合智能設備和機器人的軟件平臺。
35. XNU/Darwin
- XNU是XNU is Not Unix的首字母縮寫,GNU是GNU's Not Unix的縮寫;
- XNU/Darwin與FreeBSD都有著BSD的血統,蘋果會持續投資和推動FreeBSD項目?
- 更深入的學習、研究iOS和macOS,就從Hack XNU開始吧。
36. FreeBSD
- FreeBSD TCP/IP協議棧實現是個經典;
- Facebook的WhatsApp是一個FreeBSD + Erlang 的公司,大量的路由器、交換機、防火牆、金融系統在使用FreeBSD,SONY PS4遊戲機操作系統基於FreeBSD構建;
- 蘋果與FreeBSD的關係應該是最密切的。
37. GCC
- GCC:最重要的開源軟件(從1987的1.0到2017年7.2歷經30年,對整個自由、開源軟件貢獻卓著),後來者LLVM(14歲)很出色,前途無量;
- GCC的基本語言是C語言,整個編譯系統由C編程程序開始,然後逐漸加入其它語言的支持;
- C++是C語言的直接擴展,它是GCC的第一個附加語言。C++能夠完成的所有事情C語言都可以做到,所以編譯器的後端保持不變,只需在前端加入一個新的語法語義分析器就可以了。一旦產生中間語言,編譯程序的其它部分就和C語言完全一樣了,其它語言的處理方式也類似。
38. LLVM
- FreeBSD從10.0開始,使用LLVM替換GCC作為默認的編輯器,除了一些技術的考量外,GCC的GPL v3與FreeBSD項目的不兼容性,LLVM/Clang的許可協議是BSD,兼容FreeBSD;
- Azul Systems推出Falcon,一個基於LLVM的新的Java即時編譯器;
- Clang是LLVM的前端,用來編譯C,C++,Objective-C。
39. Babel
- Babel 下一代 JavaScript 編譯器(轉譯器);
- 簡單講,Babel 就是把一個版本的 JavaScript 轉變為其他版本的 JavaScript;
- The Super Tiny Compiler可能是最小的編譯器,先感受和普及下JavaScript編譯器的知識。
40. JVM
- JVM是最大規模的編程語言虛擬機生態系統,有超過200多種編程語言運行在JVM上;
- Android Dalvik VM不是一個Java虛擬機,它沒有遵循JVM規範,不能直接運行Java Class文件,它執行的Dex(Dalvik Executable)可通過Class文件轉換而來;
- 由John Rose領導的the Da Vinci Machine Project正致力於讓JVM成為動態語言的最佳歸宿。
41. .NET Core
- .NET Core 是一個通用目的、模塊化、跨平臺的 .NET 開源實現;
- 核心項目:.NET Core Libraries (CoreFX)、.NET Core Runtime (CoreCLR)、.NET Compiler Platform (Roslyn);
- .NET Core 會包含 .NET Framework 的類庫,但與 .NET Framework 不同的是 .NET Core 採用包 (Packages) 的管理方式,應用程序只需要獲取需要的組件即可,與 .NET Framework 大包式安裝的作法截然不同,同時各包也有獨立的版本線 (Version line),不再硬性要求應用程序跟隨主線版本。
42. Erlang VM(BEAM)
- Elixir是一門運行在Erlang VM上的編程語言;
- 可在Erlang VM創建自己的語言;
- 可關注下Erjang:A JVM-based Erlang VM。
43. Erlang
- Erlang的世界觀是一切都是進程(一個Erlang進程包括PCB進程控制塊和堆棧只有幾K),進程通過消息傳遞相互通訊;
- Erlang是參與者模型(Actor model)最佳實踐;
- 可在一臺筆記本上輕鬆跑出幾百萬個Erlang進程。
44. Clojure
- Clojure 是一種運行在 Java 平臺上的 Lisp 方言;
- Clojure is about Data, Scala is about Types, Java is about Objects;
- ClojureScript: Clojure to JavaScript compiler。
45. F
- F#和OCaml是ML函數式編程語言的兩種主要方言;
- F# = Objects + Functional ,F#混合面向對象和函數式編程,可“對應”JVM平臺的Scala語言;
- F#支持高階函數、柯里化、惰性求值、Continuations、模式匹配、閉包、列表處理和元編程,F#作為一門適合於金融和計算密集型的語言而聞名。
八、資源彙總
以開源軟件介紹的順序彙集文檔、鏈接、書籍資源
文檔和鏈接
- GitHub上的Awesome資源 尋找開源軟件
- GitHub Topics 尋找開源軟件
- 各種技術大會、編程語言、應用的幻燈片資料彙總
- Django Book: 一本免費的自由Book
- Qt 5.7 License changes, The Qt Automotive Suite, The Qt Company in Japan
- odoo培訓參考資料
- Moqui應用開發指南
- 一年成為 Emacs 高手 (像神一樣使用編輯器)
- Vimer的程序世界
- spf13-vim : Steve Francia's Vim Distribution
- Vimcasts 各種Vim技巧
- 中文文案排版指北
- Awesome Atom
- OpenWrt中文網站
- Top 8 Meteor Open Source Projects
- Node.js, Meteor, React.js, AngularJS, JavaScript 和 HTML5 生態系統
- Awesome Meteor
- iDempiere維基
- An Introduction to Data Science
- Jupyter文檔
- Pandas文檔
- 中文 Python 筆記
- Deep Learning on HDP
- Cloudera官方中文文檔
- ECL程序員指導手冊、 更多文檔
- ODPi Runtime Specification
- Deep Learning Tutorial, ICML, Atlanta, 2013-06-16 Yann LeCun編寫,200頁幻燈片
- TensorFlow 官方文檔中文版
- MXNet設計和實現簡介
- AWS 上的 Apache MXNet
- Automotive Grade Linux大會幻燈片
- Open Source in Every Car with Automotive Grade Linux
- Next-generation ROS: Building on DDS
- 百度Apollo Auto @ GitHub
- Tizen Experts
- OpenStack文檔
- OpenShift 3 Technical Architecture
- OpenShift 3 and The Next Generation of PaaS
- Using OpenShift & PaaS to accelerate DevOps & Continuous Delivery
- 中國SaltStack用戶組 中文文檔
- SaltConf
- From NoSQL to Mo’SQL
- From Relational to Riak
- OrientDB文檔
- Apache Kylin Introduction
- 架構師特刊:Apache Kylin實踐
- 用Spring和RabbitMQ技術應對消息傳送挑戰
- Building a Distributed Data Ingestion System with RabbitMQ
- Using RabbitMQ to stream data events across PostgreSQL Databases
- Apache Kafka文檔
- Worktile中的實時消息推送服務實現
- Nginx架構圖
- Languages, and about languages, on the BEAM
- Jetty:The Definitive Reference
- Cowboy 2.0
- GNU Manuals Online 我們收集整理了一些GNU項目文檔資源
- Awesome macOS
- OpenDarwin存檔資源 OpenDarwin項目已關停11年
- LI, Xin.FreeBSD開發者
- LLVM and Clang: Next Generation Compiler Technology
- HotSpot Synchronization: A Peek Under the Hood
- An Introduction to JVM Performance
- .NET Core Documentation、.NET Core API Reference
- Erlang VM(BEAM)文檔資料
- Languages, and about languages, on the BEAM
- Awesome Erlang
- Awesome Elixir
- 為什麼我們仍需要Lisp(Clojure)
- Awesome Clojure
- Clojure Cookbook
- F# for fun and profit
- F#幻燈片資源
- F# Programming維基圖書
參考書籍
- 《輕量級Django》Lightweight Django中文版
- 《Python Web開發實踐》
- 《Meteor實戰》
- 《JavaScript高級程序設計(第3版)》
- 《數據模型資源手冊 (卷3): 數據模型通用模式》
- 《C++ Primer(中文版)(第5版)》
- 《學習GNU Emacs(第二版)》
- 《學習Vi編輯器(第六版)》
- 《利用Python進行數據分析》
- 《Hadoop: The Definitive Guide (4th Edition)》
- 《數據挖掘概念與技術(原書第3版)》
- 《機器學習》周志華
- 《深度學習》
- 《ROS機器人程序設計》
- 《視覺SLAM十四講:從理論到實踐》
- 《概率機器人: Probabilistic Robotics中文版》
- 《OpenStack設計與實現》
- 《OpenStack最佳實踐:測試與CI/CD》
- 《Docker:容器與容器雲(第2版)》
- 《SRE Google運維解密》
- 《精通SaltStack》
- 《七週七數據庫》
- 《PostgreSQL修煉之道:從小工到專家》
- 《RabbitMQ實戰:高效部署分佈式消息隊列》
- 《Kafka: The Definitive Guide》 PDF電子書
- 《編程語言原理(第10版)》
- 《七週七語言》
- 《七週七併發模型》
- 《七週七數據庫》
- 《OS X與iOS內核編程》
- 《編譯原理(第2版)》著名的龍書中文版
- 《自制編譯器》
- 《虛擬機--系統與進程的通用平臺》《Virtual Machines -- Versatile Platforms for Systems and Processes》
- 《深入理解Java虛擬機(第2版)》
- 《虛擬機的設計與實現 C/C++》
- 《Erlang程序設計(第2版)》
- 《Scala程序設計(第2版)》
- 《響應式架構:消息模式Actor實現與Scala、Akka應用集成》
- 《Clojure編程:Java世界的Lisp實踐》
- 《Real World OCaml(中文版)》
還有一些圖書,就不羅列了。
內容有些多,還是篇流水賬,感謝大家耐心閱讀。
閱讀更多 進擊吧程序猿 的文章