zoukankan      html  css  js  c++  java
  • 值得关注的开源软件推荐

    看了值得关注的开源软件推荐,感觉很不错,作者接触开源软件十几年,协作开发了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#作为一门适合于金融和计算密集型的语言而闻名。

  • 相关阅读:
    正则表达式周二挑战赛 第七周
    [译]视区百分比,canvas.toBlob()以及WebRTC
    [译]因扩展Object.prototype而引发Object.defineProperty不可用的一个问题
    [译]JavaScript需要类吗?
    [译]JavaScript中几种愚蠢的写法
    [译]JavaScript中对象的属性
    JavaScript:数组的length属性
    [译]JavaScript中的变量声明:你可以打破的三条规则
    [译]ES6:JavaScript中将会有的几个新东西
    [译]ECMAScript 6中的集合类型,第三部分:WeakMap
  • 原文地址:https://www.cnblogs.com/doit8791/p/9094175.html
Copyright © 2011-2022 走看看