1. 程式人生 > >值得關註的開源軟件推薦

值得關註的開源軟件推薦

這樣的 耦合 分發 pil 模式匹配 git 前端 結合 商業行為

看了值得關註的開源軟件推薦,感覺很不錯,作者接觸開源軟件十幾年,協作開發了10多個開源項目,對開源軟件的認識和實踐確實讓人大開眼界。

應用類:框架、企業應用、編輯器

數據類:數據科學、大數據、機器學習、汽車機器人

服務類:雲計算、數據庫、消息隊列、服務器

系統類:操作系統、編譯器、虛擬機、編程語言

作者按上面四類介紹了45個開源軟件的特性和要點,包括目前工作中常用到的JVM、Nginx、Tomcat、Kafka等,估計是工作技術棧原因,裏面沒有講到Spring、Spring Boot、SpringCould、Redis等也很常用的開源項目。

看過文章才感覺個人技術視野的狹窄,工作中主要關註框架應用層的技術,對現在流行的數據類、雲計算基礎實施類的技術了解大少。以後在加深工作中應用技術深度的同時,也要註意擴展自己技術的廣度才行。

https://github.com/huihoo/wiki有相關開源技術的資料索引,有時間要學習一下。

最後摘錄一下作者列出的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#作為一門適合於金融和計算密集型的語言而聞名。

值得關註的開源軟件推薦