资讯管理
管理好你的资讯

Kafka 落选!InfoWorld 最佳开源数据平台奖公布

AI 前线导读:一年一度由世界知名科技媒体 InfoWorld 评选的 Bossie Awards 于 9 月 26 日公布,本次 Bossie Awards 评选出了最佳数据库与数据分析平台奖、最佳软件开发工具奖、最佳机器学习项目奖等多个奖项。在最佳开源数据库与数据分析平台奖中,Spark 和 Beam 再次入选,连续两年入选的 Kafka 这次意外滑铁卢,取而代之的是新兴项目 Pulsar;开源数据库入选的还有 PingCAP 的 TiDB。 

Bossie Awards 是知名英文科技媒体 InfoWorld 针对开源软件颁发的年度奖项,根据这些软件对开源界的贡献,以及在业界的影响力评判获奖对象,由 InfoWorld 编辑独立评选,目前已经持续超过十年,是 IT 届最具影响力和含金量奖项之一。一起来看看接下来你需要了解和学习的新晋数据库和数据分析工具有哪些。

现如今,没有什么东西能够比数据更大的了!我们有比以前多得多的数据,我们有更多方式来存储和分析数据:SQL 数据库、NoSQL 数据库、分布式 OLTP 数据库、分布式 OLAP 平台、分布式混合 OLTP/OLAP 平台。2018 年数据库和数据分析平台方面的 Bossie 大奖获得者也包括了流式处理方面的创新者。

Apache Spark

尽管新的产品层出不穷,Apache Spark 在数据分析领域仍然占据着举足轻重的地位。如果你需要从事分布式计算、数据科学或者机器学习相关的工作,就使用 Apache Spark 吧。Apache Spark 2.3 在二月份发布,它依然着重于开发、集成并加强它的 Structured Streaming API。另外,新版本中添加了 Kubernetes 调度程序,因此在容器平台上直接运行 Spark 变得非常简单。总体来说,现在的 Spark 版本经过调整和改进,似乎焕然一新。

Apache Pulsar

Apache Pulsar 最初由雅虎开发,后来进入 Apache 孵化器,最近正式毕业,成为 Apache 顶级项目。Pulsar 旨在取代 Apache Kafka 多年的主宰地位。Pulsar 在很多情况下提供了比 Kafka 更快的吞吐量和更低的延迟,并为开发人员提供了一组兼容的 API,让他们可以很轻松地从 Kafka 切换到 Pulsar。

Pulsar 的最大优点在于它提供了比 Apache Kafka 更简单明了、更健壮的一系列操作功能,特别在解决可观察性、地域复制和多租户方面的问题。在运行大型 Kafka 集群方面感觉有困难的企业可以考虑转向使用 Pulsar。

Apache Beam

多年来,批处理和流式处理之间的差异正在慢慢缩小。批次数据变得越来越小,变成了微批次数据,随着批次的大小接近于一,也就变成了流式数据。有很多不同的处理架构也正在尝试将这种转变映射成为一种编程范式。

Apache Beam 就是谷歌提出的解决方案。Beam 结合了一个编程模型和多个语言特定的 SDK,可用于定义数据处理管道。在定义好管道之后,这些管道就可以在不同的处理框架上运行,比如 Hadoop、Spark 和 Flink。当为开发数据密集型应用程序而选择数据处理管道时(现如今还有什么应用程序不是数据密集的呢?),Beam 应该在你的考虑范围之内。

Apache Solr

尽管大家都认为 Apache Solr 是基于 Lucene 索引技术而构建的搜索引擎,但它实际上是面向文本的文档数据库,而且是一个非常优秀的文档数据库。不管你是要 “大海捞针”,还是要运行空间信息查询,Solr 都可以帮上忙。

Solr 7 系列目前已经发布了,新版本在运行更多分析查询的情况下仍然能保证闪电般的速度。你可以加入很多文档,不到一秒钟就能返回结果。它还改进了对日志和事件数据的支持。灾备(CDCR)现在也是双向的。Solr 全新的自动扩展功能简化了集群负载增长时的扩展操作。

JupyterLab

JupyterLab 是新一代的 Jupyter,一个基于 Web 的 notebook 服务器,颇受全世界数据科学家的喜爱。经过三年开发,JupyterLab 完全改变了人们对 notebook 的理解,支持对单元格进行拖放重新排布、标签式的 notebook、实时预览 Markdown 编辑,以及改良的扩展系统,与 GitHub 等服务的集成变得非常简单。预计在 2018 年底,JupyterLab 将发布 1.0 稳定版。

KNIME 分析平台

KNIME 分析平台是用来创建数据科学应用程序和服务的开源软件。它提供了可拖放的图形界面,用来创建可视化工作流,还支持 R 和 Python 脚本、机器学习,支持和 Apache Spark 连接器。KNIME 目前有大概 2000 个模块可用作工作流的节点。

KNIME 还提供了商业版,商业版旨在提升生产效率和支持协作。不过,开源版 KNIME 分析平台并不存在人为限制,可以处理包含数亿行数据的项目。

CockroachDB

CockroachDB 是基于事务性和一致性键值存储而构建的分布式 SQL 数据库。它的设计目标是能够在磁盘、机器、机架甚至是数据中心的故障中存活下来,最小化延迟中断,不需要人工干预。CockroachDB v1.13 曾经获得过五星的高分,虽然仍然缺少很多功能,不过现在情况有所改变。

四月份发布的 CockroachDB v2.0 版本有了明显的性能改进,通过添加对 JSON(和其他类型)的支持扩展了与 PostgreSQL 的兼容性,还提供了生产环境的跨区域集群管理功能。CockroachDB v2.1 的路线图中包含了基于成本的查询优化器(用于查询性能的改进)、相关子查询(ORM)、更好地支持模式变更以及企业版产品的加密。

Vitess

Vitess 是通过分片实现 MySQL 水平扩展的数据库集群系统,主要使用 Go 语言开发。Vitess 将 MySQL 的很多重要功能与 NoSQL 数据库的扩展性结合在一起。它的内置分片功能可以让用户在不需要给应用程序添加分片逻辑的情况下对数据库进行扩展。Vitess 从 2011 年开始就是 YouTube 数据库基础设施的核心组件,它已经发展到成千上万个 MySQL 节点。

Vitess 并没有使用标准的 MySQL 连接,因为这会消耗很多 RAM,也会限制每个节点的连接数量。它使用了更有效的基于 gRPC 的协议。另外,Vitess 会自动重写会损害数据库性能的查询,通过缓存机制来调解查询,防止相同的查询同时进入数据库。

TiDB

TiDB 是一款兼容 MySQL、支持混合事务和分析处理(HTAP)的分布式数据库。它基于事务性键值存储而构建,提供全面的水平扩展性(通过增加节点)以及持续可用性。大多数早期的 TiDB 用户都在中国,因为 TiDB 的开发者在北京。TiDB 的源代码主要用 Go 语言编写。

TiDB 的底层是 RocksDB,RocksDB 是 Facebook 的日志结构键值数据库引擎,用 C++ 编写,因此能获得最好的性能。RocksDB 上面是 Raft 共识层、事务层,然后是支持 MySQL 协议的 SQL 层。

YugaByte DB

YugaByte DB 结合了分布式 ACID 事务、多区域部署、对 Cassandra 和 Redis API 的支持,对 PostgreSQL 的支持即将推出。相对 Cassandra 而言,YugaByte 是强一致性,而 Cassandra 时最终一致性。YugaByte 的基准测试也比开源的 Cassandra 要好,但比商用的 Cassandra 要差一些,而 DataStax Enterprise 6 具备可调一致性。YugaByte 相当于快速、具有更强一致性的分布式 Redis 和 Cassandra。它可以对单个数据库进行标准化处理,比如将 Cassandra 数据库和 Redis 缓存结合在一起。

Neo4j

Neo4j 图形数据库在处理相关性网络的任务时,执行速度比 SQL 和 NoSQL 数据库更快,但图模型和 Cypher 查询语言需要进行专门的学习。最近,俄罗斯 Twitter 流氓分析、ICIJ 的 Panama Papers 分析以及 Paradise Papers 的分析指出,Neo4j 是非常有价值的。

经过 18 年的开发,Neo4j 已经成为了一个成熟的图数据库平台,可以在 Windows、MacOS、Linux、Docker 容器、VM 和集群中运行。即使是 Neo4j 的开源版本也可以处理很大的图,而在企业版中对图的大小没有限制。(开源版本的 Neo4j 只能在一台服务器上运行。)

InfluxDB

InfluxDB 是没有外部依赖的开源时间序列数据库,旨在处理高负载的写入和查询,在记录指标、事件以及进行分析时非常有用。它可以运行在 MacOS、Docker、Ubuntu/Debian、Red Hat/CentOS 和 Windows 平台上。它提供了一个内置的 HTTP API 和 SQL 风格的查询语言,并旨在提供实时的查询响应(100 毫秒之内)。

原文地址 http://www.infoq.com/cn/news/2018/10/the-best-open-source-database?utm_campaign=rightbar_v2&utm_source=infoq&utm_medium=news_link&utm_content=link_text

2018 开发者生态报告:Java 最流行,Go 最有潜力

JetBrains 刚刚发布了 2018 开发者生态报告,该报告包含开发人员对各种编程语言以及数据库和团队工具的偏好。最终,和去年(2017 开发者生态报告一样,Java 被评为最流行的语言,JavaScript 是最常用的语言,而 Go 被认为是最有前途的语言。

一、编程语言

可以看到,JavaScript 是使用最多的语言,其次是 HTML/CSS 和 Java 。Go 是最多人想去尝试的语言,之后是 Kotlin 和 Python 。注意,下图数值皆为百分比(%)。

ps:有 38% 的受访开发者表示没有计划去学习或采纳新语言。

  • 绿色:频繁使用
  • 橙色:即将采纳 / 迁移 

此外,JetBrains 要求受访者按使用频率对 3 种主要编程语言进行排名,结果如下:

在过去一年内,开始学习或继续学习的编程语言:

二、工具

IDE 是开发者日常工作中最常使用的工具,紧随其后的是源码协作工具,以及轻量桌面编辑器。开发者普遍喜欢为自己定制自己的工作环境,只有 12% 的受访者不定制他们的 IDE / 编辑器。

三、开发环境 & 操作系统

四、开发类型

有 39% 的正在做后端开发,37% 的为前端开发。

五、一些有趣的

1、编码时爱听的音乐类型

2、睡眠时间

原文地址 https://www.oschina.net/news/96877/the-state-of-developer-ecosystem-in-2018

可用于企业的 7 个最佳开源 Web 服务器

自从 Tim Berners-Lee 在 1990 年开发 CERN httpd 以来,作为第一个 Web 浏览器的项目,Web 服务器已经走过了很长一段路。

虽天一些主要的网络服务器供应商为企业提供了闭源的 web 服务器,但许多其他企业仍保留 Tim Berners-Lee 所体现的开源价值。CERN httpd 的源代码于 1993 年公布。看着目前可用于企业的最佳开源 Web 服务器。

1. NGINX HTTP 服务器

NGINX 由俄罗斯工程师 Igor Syosev 于 2002 年开发,用于应对网站流量和宽带互联网的增长,并因此需要管理 10,000 个同时连接。他的解决方案是一个异步的事件驱动架构,以其高性能和高效率而闻名。

由于它的可扩展性和处理大量用户负载所需的最少资源,而变得特别受欢迎。它也可以用作反向代理和邮件代理服务器。

2. Apache HTTP 服务器

Apache 成立于 1995 年,并在第二年成为最常用的 HTTP 服务器,这个状况持续了将近 20 年。

长期以来,Apache 这个名字被认为是 “A Patchy Server” 这个词的双关语,直到其中一位创作者透露,它实际上是表达了对分享它的名字的美洲印第安部落的侵略战略的尊敬。

Apache 使用模块化体系结构来满足每个单独基础设施的不同需求。它以其可靠性,广泛的功能和支持众多服务器端编程语言而闻名。

3. Lighttpd

“Lighttpd”是 “Light” 和“httpd”的结合,但是用 “lighty” 来形容它的速度,灵活性和稳定性。轻量级服务器针对高性能高速关键环境进行了优化,非常适合高负载的服务器。

Jan Kneschke 开发的服务器与 NGINX 创始人 Igor Syosev 的出发点相同:解决在一台服务器上处理 10,000 个并发连接的 c10k 问题。Lighttpd 具有相对较低的内存占用量,较小的 CPU 负载和一组高级功能。 它有高度可集成性支持与外部程序的接口以及可以用任何编程语言编写的 Web 应用程序一起使用。

4. Hiawatha

Hiawatha 于 2002 年由 Hugo Leisink 开发,他在荷兰学习计算机科学,并希望学生宿舍可以支持互联网服务器。他的目标是开发一个系统,解决其他服务器中存在的安全限制和混淆配置工具的漏洞。

他编写的服务器为其他领先的 Web 服务器中的所有常规措施添加了许多独特的安全功能。它还使用可读的配置语法,可以在不需要 HTTP 或 CGI 专业知识的情况下使用。

Hiawatha 的优势在于其体积小巧,安全性高,易于安装。它非常适合寻求轻量级替代 Apache 的用户,他们将安全可用性,速度和性能优先于高级功能。

5. Cherokee

Cherokee 是我们这些服务器中第三个取自美洲原住民部落的名字。这个由 Akamai Technologies 工程总监 Alvaro Lopez Ortega 于 2001 年创建,他想将模块化和轻量化设计的速度和功能结合起来。

Cherokee 已经成为一个可扩展,高性能,用户友好的 Web 服务器,具有较低的内存占用空间和负载平衡设施。其中包括一个称为 cherokee-admin 的基于 Web 的管理界面  ,可支持服务器及其所有功能的直接配置。Cherokee 在 Linux,Mac OS X,BSD 和 Solaris 上本机运行,但不在 Windows 上运行。

6.Monkey HTTP 服务器

Monkey HTTP 是一个轻量级的服务器和开发堆栈,最初针对 Linux 进行了优化,但现在也与 Mac OS X 兼容。它专为嵌入式设备而设计,因此具有高度可扩展性,具有低内存和低 CPU 消耗。该项目于 2001 年开始,在 2008 年被改写为事件驱动系统时转向专业应用程序。

服务器通过混合机制运行,为每个线程提供数千个客户端的访问能力。它提供高性能的重负载服务器,易于安装,是嵌入式设备的理想选择。

7. Apache Tomcat

Apache Tomcat 是根据 Apache 许可证开发的 Servlet 和 Java Server Page c 容器,可以充当独立服务器和现有 Web 服务器(如 Apache)的附加组件。

虽然 Apache HTTP Server 作为开发静态网页的传统服务器,但 Tomcat 主要用于在动态网站中部署 Java servlet 和 JSP,  并运行 Web 应用程序。

Tomcat 可以与 Apache HTTP 服务器结合使用,但由于拥有自己的内部 HTTP 服务器,它也可以作为一个有能力的 Web 服务器。

来自:computerworlduk

原文地址 https://www.oschina.net/news/95690/best-open-source-web-servers

2018 年 114DNS、阿里 DNS、OneDNS、百度 DNS、DNSPOD、GoogleDNS、Quard9、SDNS 对移动线路支持情况测试

前言

两年多前,曾发帖对国内主流公共 DNS 对中国移动线路的支持情况做过测试, 随着近两年移动宽带用户数量持续快速增长,特别是今年 2 月,移动宽带用户增量已达到电信联通总和的两倍,其发展势头迅猛。但移动的 DNS 乱弹广告和劫持的情况依然没有得到改善,使用公共 DNS 不失为另一种选择。时隔两年再次测试下国内公共 DNS 对移动线路的支持情况和解析响应速度,供大家做个参考。


简介

这次在之前的基础上新增了 DNS 派、GoogleDNS 和 IBM Quad9,以下是各家 DNS 的简要介绍。

114DNS

依然国内公共 DNS 老大,国内用户最多的公共 DNS 服务,服务稳定。腾讯有注资,与运营商关系紧密。主备 ip 分别是 114.114.114.114/114.114.115.115

官网地址 http://www.114dns.com

阿里 DNS

阿里巴巴 2014 年推出的公共 DNS 服务,也是用户众多。主备 ip 分别为 223.5.5.5/223.6.6.6

官网地址 http://www.alidns.com

OneDNS

2013 成立的公共 DNS 服务至今已稳定运行 5 年,其恶意网站拦截和广告过滤和海外前端库加速功能较有特色。今年变动较大,推出了一对新的主备 ip 117.50.11.11/117.50.22.22 (经测试原 ip 112.124.47.27/114.215.126.16 仍在稳定服务。)

官网地址 https://www.onedns.com

百度 DNS

时隔两年过去了,百度 DNS 依然只有单个节点 180.76.76.76 ,官网建议用户将备用 DNS 设置为 114DNS。此前在 V2EX 有用户反馈使用百度 DNS 后被安装百度全家桶,此情况未证实,还待大家进一步反馈。

官网地址 https://dudns.baidu.com

DNSPOD

DNSPOD 的公共 DNS 是在腾讯全资收购后推出的,主备 ip 分别为 119.29.29.29/119.28.28.28 ,此 ip 同时复用于 httpsdns 业务。

官网地址 https://www.dnspod.cn/Products/Public.DNS

DNS 派

DNS 派是 360 投资的公司,360 安全卫士中采用了他们的 DNS。他们的 DNS 需要用户根据线路手动选择 ip 其中移动线路的主备 ip 为 101.226.4.6/218.30.118.6

官网地址 http://www.dnspai.com/

Google DNS

这个无需介绍,全球最有名的公共 DNS 服务,主备 ip8.8.8.8/8.8.4.4 如雷贯耳。

[官网地址]https://developers.google.com/speed/public-dns/

IBM Quad9

去年末 IBM、Global Cyber Alliance 和 Packet Clearing House 三家联合推出的面向全球用户的公共 DNS,与 OneDNS 类似也具有恶意网址拦截功能,其 9.9.9.9ip 一度成为网红,逼格甚高,成为与 8.8.8.8 并称最好记忆的 ip 了。主备 ip 为 9.9.9.9/149.112.112.112

官网地址 https://www.quad9.net

SDNS

官方机构 CNNIC (中国互联网中心)运营的公共 DNS,比较低调。主备 ip 为 1.2.4.8/210.2.4.8

官网地址 http://public.sdns.cn/

测试方法

北方某市移动宽带,Windows10 系统安装 dig 工具包,测试前先执行 ipconfig/flushdns 命令清空系统 DNS 缓存再 dig www.qq.com 根据返回的 ip 判断此 DNS 是否有移动线路节点,返回 ip 以 ipip.net 查询为准。每个 DNS 测试三次,取延迟最小值。

测试结果

114DNS

解析 www.qq.com 返回 111.30.132.101 为天津移动 ip, 解析延迟 60ms

阿里 DNS

解析 www.qq.com 返回 111.30.132.101 为天津移动 ip,解析延迟 79ms

OneDNS

解析 www.qq.com 返回 111.30.132.101 为天津移动 ip,解析延迟 40ms

百度 DNS

解析 www.qq.com 返回 120.198.201.156 为广东深圳移动 ip,解析延迟 56ms

DNSPOD

解析 www.qq.com 返回 120.198.201.156 为广东深圳移动 ip,解析延迟 63ms

DNS 派

解析 www.qq.com 返回 111.30.132.101 为天津移动 ip,解析延迟 72ms

GoogleDNS

解析 www.qq.com 返回 120.198.201.156 为广东深圳移动 ip,解析延迟 208ms

IBM Quad9

解析 www.qq.com 返回 184.51.1.17 和 2.16.106.48 和 2.16.106.56 为德国 ip,解析延迟 211ms 由于 Quad9 在国内没有节点,因此可以预想到其无法准确判断移动线路,但将中国 ip 识别为德国,相比 8.8.8.8 还是有所差距。

SDNS

解析 www.qq.com 返回 180.163.26.39 为上海电信 ip,解析延迟 36ms

总结

从测试结果来看,相比两年前,各大 DNS 对移动宽带的支持力度明显提升。由于测试地址位于北方,因此返回 ip 以最接近北方为佳。

支持移动线路的 DNS:

114DNS阿里 DNSOneDNS百度 DNSDNSPODDNS 派GoogleDNS


不支持移动线路的 DNS:

IBM Quad9、SDNS


解析延迟排序(由小到大,越小越好)

SDNS < OneDNS < 百度 DNS < 114DNS < DNSPOD < DNS 派 < 阿里 DNS < GoogleDNS < IBM Quad9


解析结果与测试地点最近的 DNS (即解析 ip 与测试地址同在北方城市)

114DNS阿里 DNSOneDNSDNS 派


注:以上测试仅供使用移动宽带的同学做个粗略参考,具体请根据自身所处网络环境测试使用。

原文地址 https://www.v2ex.com/t/442340#reply0

JDK 10 的 109 项新特性

虽然感觉 JDK9 发布才仅仅几周的时间,然而,随着新的 OpenJDK 的发布节奏,JDK10 已经到达发布候选里程碑阶段。

我看过各种关于 JDK10 新特性的博客,但是它们都倾向于关注通过 JEPS 定义的大方面。这篇博文,我将看看是否可以罗列出 JDK10 中已经发生变化的方方面面(包括新增的和剔除的)。

有时候,我会做一些关于 Java SE 的报告会。之前我在 “JDK9 的 55 个新特性” 的报告会上曾开玩笑说:下次我将做的恐怕是“ JDK10 的 5 个新特性”。然而事实证明,即使仅有六个多月的开发时间,JDK10 依然超乎想象。

即便我不再为 Oracle 工作,我也在此先做一个 “安全港声明”,以便消除误会。这个列表是由下面这些公开可用的信息整理编辑的:JDK Enhancement Proposals (JEPs)、the OpenJDK bug database 和 Java SE 10 public review specification (JSR 383) 。当然,尽管我已尽可能的研究以保证信息准确,但在 JDK 10 最终发布之前仍可能会发生变化。

大事记

JDK10 包含 12 个 JEP (改善提议):

  • 【286】局部变量类型推断 :对于开发者来说,这是 JDK10 唯一的真正特性。它向 Java 中引入在其他语言中很常见的  _var_,比如 JavaScript 。只要编译器可以推断此种类型,你不再需要专门声明一个局部变量的类型。一个简单的例子是:

           var x = new ArrayList();

    这就消除了我们之前必须执行的 ArrayList 类型定义的重复。我鼓励你们去读 JEP ,因为上面有一些关于这个句法是否能用的规则。

    有趣的是,需要注意 _var _不能成为一个关键字,而是一个保留字。这意味着你仍然可以使用 var 作为一个变量,方法或包名,但是现在(尽管我确定你绝不会)你不能再有一个类被调用。

  • [[310] 应用类数据共享](http://openjdk.java.net/jeps/310) (CDS) :CDS 在 JDK5 时被引进以改善 JVM 启动的表现,同时减少当多个虚拟机在同一个物理或虚拟的机器上运行时的资源占用。

    JDK10 将扩展 CDS 到允许内部系统的类加载器、内部平台的类加载器和自定义类加载器来加载获得的类。之前,CDS 的使用仅仅限制在了 bootstrap 的类加载器。

  • [[314] 额外的 Unicode 语言标签扩展](http://openjdk.java.net/jeps/314):这将改善 java.util.Locale 类和相关的 API 以实现额外 BCP 47 语言标签的 Unicode 扩展。尤其是,货币类型,一周的第一天,区域覆盖和时区等标签现在将被支持。
  • [[322] 基于时间的版本控制](http://openjdk.java.net/jeps/322):正如我在之前的博客中所讨论的,我们的 JDK 版本字符串格式几乎与 JDK 版本一样多。有幸的是,这是最后需要使用到的,我们可以坚持用它。这种格式使用起来很像 JDK9 中介绍的提供一个更加语义的形式。有一件困扰我的事是包含了一个 INTERIM 元素,正如 JEP 提议中所说,“永远是 0”。好吧,如果永远是 0,那它有什么意义呢?他们说这是为未来使用做保留,但我仍不是很赞同。我认为,这有些冗余繁杂。

    这也消除了在 JDK9 中有过的相当奇怪的情形。第一次更新是 JDK 9.0.1 , 非常符合逻辑。第二次更新是 JDK 9.0.4 ,不合逻辑。原因是,在 JDK9 的版本计数模式下,需要留下空白以便应急或不在预期安排的更新使用。但既然没有更新是必须的,为什么不简单称之为 JDK 9.0.2 呢?

  • [[319] 根证书](http://openjdk.java.net/jeps/319):在 JDK 中将提供一套默认的 CA 根证书。关键的安全部件,如 TLS ,在 OpenJDK 构建中将默认有效。这是 Oracle 正在努力确保 OpenJDK 二进制和 Oracle JDK 二进制功能上一样的工作的一部分,是一项有用的补充内容。
  • [[307] 并行全垃圾回收器 G1](http://openjdk.java.net/jeps/307) : G1 是设计来作为一种低延时的垃圾回收器(但是如果它跟不上旧的堆碎片产生的提升速率的话,将仍然采用完整压缩集合)。在 JDK9 之前,默认的收集器是并行,吞吐,收集器。为了减少在使用默认的收集器的应用性能配置文件的差异,G1 现在有一个并行完整收集机制。
  • [[313] 移除 Native-Header 自动生成工具](http://openjdk.java.net/jeps/313):Java9 开始了一些对 JDK 的家务管理,这项特性是对它的延续。当编译 JNI 代码时,已不再需要单独的工具来生成头文件,因为这可以通过 javac 完成。在未来的某一时刻,JNI 将会被 Panama 项目的结果取代,但是何时发生还不清楚。
  • [[304] 垃圾回收器接口](http://openjdk.java.net/jeps/304): 这不是让开发者用来控制垃圾回收的接口;而是一个在 JVM 源代码中的允许另外的垃圾回收器快速方便的集成的接口。
  • [[312] 线程 - 局部变量管控](http://openjdk.java.net/jeps/312):这是在 JVM 内部相当低级别的更改,现在将允许在不运行全局虚拟机安全点的情况下实现线程回调。这将使得停止单个线程变得可能和便宜,而不是只能启用或停止所有线程。
  • [[316] 在备用存储装置上的堆分配](http://openjdk.java.net/jeps/316):硬件技术在持续进化,现在可以使用与传统 DRAM 具有相同接口和类似性能特点的非易失性 RAM 。这项 JEP 将使得 JVM 能够使用适用于不同类型的存储机制的堆。
  • [[317] 试验性的基于 Java 的 JIT 编译器](http://openjdk.java.net/jeps/317):最近宣布的 Metropolis 项目,提议用 Java 重写大部分 JVM 。乍一想,觉得很奇怪。如果 JVM 是用 Java 编写的,那么是否需要一个 JVM 来运行 JVM ? 相应的,这导致了一个很好的镜像类比。 现实情况是,使用 Java 编写 JVM 并不意味着必须将其编译为字节码,你可以使用 AOT 编译,然后在运行时编译代码以提高性能。

    这项 JEP 将 Graal 编译器研究项目引入到 JDK 中。并给将 Metropolis 项目成为现实,使 JVM 性能与当前 C++ 所写版本匹敌(或有幸超越)提供基础。

新 API

有 73 项新增内容添加到了标准类库中。

  • **java.awt.Toolkit
    int getMenuShortcutKeyMaskEx()**: 确定哪个扩展修饰符键是菜单快捷键的适当加速键。
  • java.awt.geom.Path2D
    void trimToSize(): 将此 Path2D 实例的容量计算到它当前的大小。应用可使用此操作将路径的存储空间最小化。这个方法也被添加到 Path2D.Double 和 Path2D.Float 类。
  • **java.io.ByteArrayOutputStream:
    String toString(Charset)**: 重载 toString(),通过使用指定的字符集解码字节,将缓冲区的内容转换为字符串。
  • java**.io.PrintStream:
    lang.io.PrintWriter:**
    这两个类都有三个新的构造函数,它们需要额外的 Charset 参数。
  • **java.io.Reader:
    long transferTo(Writer):** 从这个 Reader 中读取所有字符,并按照所读的顺序将字符写入给定的 Writer 。
  • java.lang.Runtime.Version:
    有四种新方法返回新(JEP 322)版本字符串字段的整数值: feature()、interim()、patch() 和 update() 。
  • java.lang.StackWalker.StackFrame:
    String getDescriptor(): 按照 JVM 标准返回此堆栈帧所代表的方法的描述符。
    String getMethodType(): 返回此堆栈帧所代表的方法类型,描述参数类型和返回值类型。
  • **java.lang.invoke.MethodType:
    Class<?> lastParameterType():** 返回这个方法类型的最后一个参数类型。如果这个方法类型没有参数,则返回空类型作为岗哨值(_Sentinel_ _Value_)。
  • **java.lang.management.RuntimeMXBean:
    long getPid(): **R 返回正在运行的 JVM 的进程 ID 。
  • **java.lang.management.ThreadMXBean:
    ThreadInfo[] dumpAllThreads(boolean, boolean, int): **返回所有活动线程的线程信息,其中有指定的最大元素数量和同步信息的堆栈跟踪。
    ThreadInfo[] getThreadInfo(long[], boolean, boolean, int): 返回每个线程的线程信息,这些线程的标识位于输入数组中,其中有指定的最大元素数量和同步信息的堆栈跟踪。
  • java.lang.reflect.MalformedParameterizedTypeException: 添加了一个新的构造函数,它以字符串的形式作为参数来获取详细信息。
  • **java.net.URLDecoder:
    java.net.URLEncoder:**
    这两个类都有新的重载的解码和编码方法,将 charset 作为附加参数。
  • java.nio.channels.Channels:
    两个新的静态重载方法,允许使用 Charset 的 newReader(ReadByteChannel,Charset)和 newWriter(WriteByteChannel,Charset)。
  • **java.nio.file.FileStore:
    long getBlockSize(): **在这个文件存储中返回每个块的字节数。
  • java.time.chrono: 这个包里有三个类,HijrahEra、MiinguoEra 和 ThaiBuddhistEra ,都有同样的方法。
    String getDisplayName(TextStyle, Locale): 这将返回用于识别 era 的文本名称,适合于向用户展示。
  • **java.time.format.DateTimeFormatter:
    localizedBy(Locale):** 返回指定格式器的一个副本,其中包含地区、日历、区域、小数和 / 或时区的本地化值,这将取代该格式器中的值。
  • java.util: DoubleSummaryStatistics、IntSummaryStatistics 和 LongSummaryStatistics 都有一个新的构造函数,它包含 4 个数值。它使用指定的计数、最小值、最大值和总和构造一个非空实例。
  • **java.util.List:
    java.util.Map:
    java.util.Set:** 这些接口中的每一个都增加了一个新的静态方法,copyOf(Collection)。这些函数按照其迭代顺序返回一个不可修改的列表、映射或包含给定集合的元素的集合。
  • **java.util.Optional:
    java.util.OptionalDouble:
    java.util.OptionalInt:
    java.util.OptionalLong: **每一个类都有一个新的方法,orElseThrow() ,它本质上和 get() 一样,也就是说,如果 Optional 有值则返回。否则,将抛出 NoSuchElementException 。
  • java.util.Formatter: 
    java.util.Scanner:
    这两个类都有三个新的构造函数,除了其他参数之外,它们都带有一个 charset 参数。
  • java.util.Properties: 这有一个新的构造函数,它接受一个 int 参数。这将创建一个没有默认值的空属性列表,并且指定初始大小以容纳指定的元素数量,而无需动态调整大小。还有一个新的重载的 replace 方法,接受三个 Object 参数并返回一个布尔值。只有在当前映射到指定值时,才会替换指定键的条目。
  • java.SplittableRandom
    void nextBytes(byte[]): 用生成的伪随机字节填充一个用户提供的字节数组。
  • java.util.concurrent.FutureTask: 添加了 toString() 方法,该方法返回一个标识 FutureTask 的字符串,以及它的完成状态。在括号中,状态包含如下字符串中的一个,“Completed Normally” 、“Completed Exceptionally”、 “Cancelled” 或者 “Not completed”。
  • java.util.concurrent.locks.StampedLock:
    boolean isLockStamp(long): 返回一个标记戳表示是否持有一个锁。
    boolean isOptimisticReadStamp(long): 返回一个标记戳代表是否成功的进行了乐观读(optimistic read)。
    boolean isReadLockStamp(long): 返回一个标记戳表示是否持有一个非独占锁(即 read lock )。
    boolean isWriteLockStamp(long): 返回一个标记戳表示是否持有一个独占锁(即 write lock )。
  • java.jar.JarEntry:
    String getRealName(): 返回这个 JarEntry 的真实名称。如果这个 JarEntry 是一个多版本 jar 文件的入口,它被配置为这样处理,这个方法返回的名字是 JarEntry 所代表的版本条目的入口,而不是 ZipEntry.getName() 返回的基本条目的路径名。如果 JarEntry 不代表一个多版本 jar 文件的版本化条目或者 jar 文件没有被配置为作为一个多版本 jar 文件进行处理,这个方法将返回与 ZipEntry.getName() 返回的相同名称。
  • java.util.jar.JarFile:
    Stream versionedStream(): 返回 jar 文件中指定版本的入口对应 Stream 。与 JarEntry 的 getRealName 方法类似,这与多版本 jar 文件有关。
  • **java.util.spi.LocaleNameProvider:
    getDisplayUnicodeExtensionKey(String, Locale):** 为给定的 Unicode 扩展键返回一个本地化名称。
    getDisplayUnicodeExtensionType(String, String, Locale): 为给定的 Unicode 扩展键返回一个本地化名称。
  • **java.util.stream.Collectors:
    toUnmodifiableList():
    toUnmodifiableSet():
    toUnmodifiableMap(Function, Function): **
    toUnmodifiableMap(Function, Function, BinaryOperator): 这四个新方法都返回 Collectors ,将输入元素聚集到适当的不可修改的集合中。
  • java.lang.model.SourceVersion: 现在有了一个字段,它代表了 JDK 10 的版本。
  • java.lang.model.util.TypeKindVisitor6:
    javax.lang.model.util.TypeKindVisitor9:
    (我必须承认,我从来没听说过这些类)
    R visitNoTypeAsModule(NoType, P): 访问一个 MODULE 的 pseudo-type 。我不确定为什么只有这两个类得到这个方法,因为还有 Visitor7 和 Visitor8 变量。
  • javax.remote.management.rmi.RMIConnectorServer:
    这个类已经添加了两个字段: CREDENTIALS_FILTER_PATTERN 和 SERIAL_FILTER_PATTERN 。
  • javax.ButtonModel:看,Swing 还在更新!
    ButtonGroup getGroup(): 返回按钮所属的组。通常用于单选按钮,它们在组中是互斥的。
  • javax.plaf.basic.BasicMenuUI:
    Dimension getMinimumSize(JComponent): 返回指定组件适合观感的最小大小。

JVM 规范改动

这些改动相当小:

  • 4.6 节:类文件格式(第 99 页)。在方法访问标志方面有小的改动。
  • 4.7 节:模块属性(第 169 页)。如果模块不是 java.base ,则 JDK 10 不再允许设置 ACC_TRANSITIVE 或 ACC_STATIC_PHASE 。
  • 4.10 节:类文件的校验(第 252 页)。dup2 指令已改变了 typesafe form 1 的定义,颠倒了 canSafleyPushList 一节中类型的顺序(你需要仔细查看才能发现它)。
  • 5.2 节:Java 虚拟机启动(第 350 页)。该描述添加了在创建初始类或接口时可使用用户定义的类加载器( bootstrap 类加载器除外)。

对 Java 语言规范的更改

这里还有一些更改,但主要是为了支持局部变量类型推断。

  • 第 3.8 节:标识符(第 23 页)。在忽略了可忽略的字符之后,标识符的等价性现在被考虑了。这似乎是合乎逻辑的。
    (第 24 页)一个新的 Token,TypeIdentifier,它支持对局部变量类型推断的新用法,而 var 的使用不是关键字,而是一个具有特殊含义的标识符,作为局部变量声明的类型。
  • 第 4.10.5 节:类型预测(第 76 页)。这是一个相当复杂的部分,它涉及到捕获变量、嵌套类以及如何使用局部变量类型推断。我建议你阅读规范中的这一部分,而不是试图解释它。
  • 第 6.1 节:声明(第 134 页)。一个反映使用 TypeIdentifier 来支持局部变量类型的推断的小改动。
  • 第 6.5 节:确定名字的含义(第 153 页,第 158 页和第 159 页)。根据类型标识符的使用而更改类类型。
  • 第 6.5.4.1: 简单的 PackageOrTypeNames(第 160 页)
  • 第 6.5.4.2 节:合规的 PackageOrTypeNames(第 160 页)。这两种方式都与使用 TypeIdentifier 有细微的变化。
  • 第 7.5.3: 单静态导入声明(第 191 页)。这改变了导入具有相同名称的静态类型的规则。除非类型是相同的,否则这将成为一个错误,在这种情况下,重复被忽略。
  • 第 7.7.1: 依赖(第 198 页)。如果你明确声明一个模块需要 java.base ,那在必要的关键字之后,你就不能再使用修饰符(例如静态)了。
  • 第 8 部分:正式参数(第 244 页)。接收者参数可能只出现在一个实例方法的 formalparameters 列表,或者是一个内部类的构造函数中,其中内部类没有在静态上下文中声明。
  • 第 9.7.4 节:注释可能出现的地方(第 335 页)。有一个与局部变量类型推断相关的变更。
  • 第 14.4 部分:局部变量声明语句(第 433 页)。实现局部变量类型推断所需的大量更改。
  • 第 14 节:增强的 for 语句(第 455 页)。这个结构已经更新,包括对局部变量类型推断的支持。
  • 第 14.20.3 节: try-with-resources(474 页)。这个结构已经更新,包括对局部变量类型推断的支持。

最后,第 19 章有多处语法更新,反映了应更多使用 TypeIdentifier 类型标识符,而不仅仅是 Identifier 标识符,以支持局部变量类型推断。

原文地址 https://www.oschina.net/translate/109-new-features-in-jdk-10

Spring Boot 2.0.0 终于正式发布,重大修订版本

北京时间 2018 年 3 月 1 日早上,如约发布的 Spring Boot 2.0 在同步至 Maven 仓库时出现问题,导致在 GitHub 上发布的 v2.0.0.RELEASE 被撤回。目前问题已修复,官方重新发布了 Spring Boot 2.0,并提供了 Maven 中央仓库地址。

使用 Spring Boot 2.0.0 GA

Maven

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.0.RELEASE</version>
</parent>
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

Gradle

dependencies {
    compile("org.springframework.boot:spring-boot-starter-web:2.0.0.RELEASE")
}

而 Spring Boot 2.0.1 也被标记为 SNAPSHOT 状态

Maven

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.1.BUILD-SNAPSHOT</version>
</parent>
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies><repositories>
    <repository>
        <id>spring-snapshots</id>
        <name>Spring Snapshots</name>
        <url>https://repo.spring.io/libs-snapshot</url>
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
    </repository>
</repositories>

Gradle

dependencies {
    compile("org.springframework.boot:spring-boot-starter-web:2.0.1.BUILD-SNAPSHOT")
}repositories {
    maven {
        url 'https://repo.spring.io/libs-snapshot'
    }
}

官方表示,这个版本经历了 17 个月的开发,有 215 个不同的使用者提供了超过 6800 次的提交。非常感谢提供贡献的每一位用户,并感谢所有对这些里程碑版本提供重要反馈的早期采用者。

该版本是自 4 年前发布 Spring Boot 1.0 以来的第一次重大修订,也是首个提供对 Spring Framework 5.0 支持的 GA 稳定版本。

新版本值得关注的亮点:

  • 基于 Java 8,支持 Java 9
  • 支持 Quartz 调度程序
  • 大大简化了安全自动配置
  • 支持嵌入式 Netty
  • Tomcat, Undertow 和 Jetty 均已支持 HTTP/2
  • 全新的执行器架构,支持 Spring MVC, WebFlux 和 Jersey
  • 使用 Spring WebFlux/WebFlux.fn 提供响应式 Web 编程支持
  • 为各种组件的响应式编程提供了自动化配置,如:Reactive Spring Data、Reactive Spring Security 等
  • 用于响应式 Spring Data Cassandra, MongoDB, Couchbase 和 Redis 的自动化配置和启动器 POM
  • 引入对 Kotlin 1.2.x 的支持,并提供了一个 runApplication 函数,让你通过惯用的 Kotlin 来运行 Spring Boot 应用程序。更多信息请参阅参考文档中对 Kotlin 的支持部分
  • 启动时的 ASCII 图像 Spring Boot banner 现已支持 GIF

官方新闻:https://spring.io/blog/2018/03/01/spring-boot-2-0-goes-ga  
发布说明:https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.0-Release-Notes

这篇资讯介绍了 Spring Boot 2 中值得关注的新特性:https://www.oschina.net/news/93772/spring-boot-2-0-released-not-yet

有关 Spring Boot 2.0 更详细的迁移指南,可以保持关注我们正在翻译的官方文档。(https://www.oschina.net/translate/spring-boot-2-0-migration-guide)
欢迎有兴趣的开发者一起参与翻译~!

原文地址 https://www.oschina.net/news/93781/spring-boot-2-0-goes-ga

2018 编程语言关注度调查:Java 9 关注度上升

JAXenter 对流行度比较高的几门编程语言进行了调查,了解用户对它们的喜爱度与关注程度。

Java

数据显示,42% 的受访者对旧版本的语言更感兴趣。让人意想不到的是,62% 的人希望在 2018 年更多地关注 Java 9,并且只有五分之一的受访者认为 Java 9 没有意义。 也有三分之一的参与者表示对即将到来的版本(Java 10 和 11)感兴趣。

Kotlin 和 Go

有 43% 的受访者认为 Kotlin 很有趣,30% 的受访者更关注 Go。

脚本语言

调查发现,TypeScript 和 JavaScript 的关注度基本持平,TypeScript 以 42.8% 微超 JavScript (41.9%)

Scala

Scala 的知名度一直在不断增长。 今年也不例外 ,到目前为止,将近 48% 的受访者表示希望今年能尝试 Scala。

原文地址 https://www.oschina.net/news/93696/jaxenter-survey-preliminary-results

Spring Boot 2.0 正式发布,正式支持 Java 9

Spring Boot 2.0 目前已在 GitHub 上发布了 v2.0.0.RELEASE 版本 (https://github.com/spring-projects/spring-boot/releases/tag/v2.0.0.RELEASE)

不过还没同步至 Maven 中央仓库,请保持关注 https://projects.spring.io/spring-boot/ 。

Spring Boot 2 新特性概览:正式支持 Java 9

根据我们此前的报道,Spring Boot 2 最大的变化主要集中在以下几方面:

  • Spring Boot 2 基于 Spring Framework 5,而整个 Spring Framework 5.0 代码库运行于 Java 8 之上。所以,Spring Boot 2 要求的 JDK 版本最低也是 Java 8,同时也已正式支持 Java 9(这里有一份使用 Java 9 运行 Spring Boot 的文档 https://www.oschina.net/translate/spring-boot-with-java9
  • 与 Spring Boot 1 的差别在于,许多配置属性已被重命名或被删除,因此由 Spring Boot 1 迁移至 Spring Boot 2 需要注意一些配置属性
  • Spring Boot 为 Java 应用程序引入的关键创新是将 Servlet 容器嵌入到一个可执行的 jar 包中,这个 jar 包会打包整个应用。Spring Boot 还提供了 Tomcat、Undertow 和 Jetty 作为可选的方案

在此前发布的 RC 版本中,Tomcat、Undertow 和 Jetty 均已支持 HTTP/2,并通过 Conscrypt 库提供对原生 TLS 的支持。这对 Spring Boot 的默认服务器 Tomcat 8.5.x 来说意义重大,如果 libtcnative 库及其依赖项安装在主机操作系统上,则只支持 HTTP/2。

监控方面,Spring Boot 2 增强了对 Micrometer 的集成。RabbitMQ、JVM 线程和垃圾收集指标会自动进行 instrument 监控,异步控制器 (controller) 也会自动添加到监控里。通过集成,还可以对 InfluxDB 服务器进行监控。

数据方面,Spring Boot 2 让你能够以更加细粒度的方式自定义 Hibernate 属性。另外,还可以暴露 RedisCacheConfiguration,从而控制 RedisCacheManager。Flyway 和 Liquibase 配置也更灵活。

此外,Spring Boot 2 也大大增强了对 GSON 的支持,还包含了改进的 actuator JSON 架构。

还有一个值得关注的变更就是 Spring Boot banner —— 即启动时的 ASCII 图像,它被开发团队广泛应用于展示自己的应用品牌信息。在 Spring Boot 2 中,现已支持动画 GIF。

值得注意的是,在 Spring Boot 2.0 中,许多配置属性已被重命名或被删除,为了方便升级,Spring Boot 发布了一个新的 spring-boot-properties-migrator 模块。只要将其作为依赖添加到项目中,它不仅会分析应用程序的环境并在启动时打印诊断信息,而且还会在运行时阶段为项目临时将属性迁移至新的配置方式。

有关 Spring Boot 2.0 更详细的迁移指南,可以保持关注我们正在翻译的官方文档 (https://www.oschina.net/translate/spring-boot-2-0-migration-guide)。欢迎有兴趣的开发者一起参与翻译~!

下面我们来看看 Spring Boot 2 值得关注的新特性。

支持 Java 9

Spring Boot 2 最值得期待的新功能莫过于对 Java 9 的正式支持,现在要求最低的 JDK 版本是 Java 8,这意味着不可以使用 JDK 7 或更旧的版本运行 Spring Boot 2。

Spring Framework

Spring Framework 5.0 现已与 Spring Boot 集成。Spring Framework 5.0 一些有趣的功能:

  • 支持 JDK 9 和 Java EE 8 级别的 API(如 Servlet 4.0)
  • 与 Reactor 3.1, JUnit 5, 和 Kotlin 语言的全面集成
  • 带来了许多函数式 API 变体 (functional API variants)
  • 响应式堆栈 Web 框架 —— Spring WebFlux
  • 完全支持 JUnit 5 Jupiter,因此可以在 JUnit 5 中编写测试
  • 添加对 @Nullable 和 @NotNull 注解的支持,以在编译时而不是运行时处理空指针异常

Spring Security

虽然 Spring Security 并非是 Spring Boot 的正式组成部分,但这里仍值得一提,因为它能与 Spring Framework 5.0 很好地搭配使用。最新的 Spring Security 5 提供了超过 400 多项的功能增强和错误修复。有以下值得关注的新功能:

  • 用户可通过 OAuth 2.0 provider 使用现有帐户进行身份验证
  • 与 Spring Framework 5 一样,Spring Security 5 也添加了对响应式编程的支持
  • 以更现代的方式完成对密码的编码

@ConditionalOnBean

从 Spring Boot 1.x 迁移到 2.x 时需要考虑的重要一点是,当确定条件是否满足时,@ConditionalOnBean 注解现在使用逻辑 AND 而不是逻辑 OR 来表示。

对 WebFlux 和 WebFlux.fn 的支持

Spring Boot 2.0 为响应式的 Spring Web 框架提供了一个新的启动器 — spring-boot-starter-webflux,spring-boot-starter-webflux 本身包含 WebFlux,再加上 Reactor Netty 作为默认的 Web 引擎 (spring-boot-starter-reactor-netty)。

可以使用 @WebFluxTest 来测试响应式的控制器,它为 Spring MVC 提供了类似于 @WebMvcTest 的支持,而且 WebTestClient 是自动配置的。

最低支持版本的更新

  • Jetty 9.4
  • Tomcat 8.5
  • Hibernate 5.2
  • Gradle 3.4

Thymeleaf

Spring Boot 2 另一个值得关注的新特性是现已正式支持 Thymeleaf 3,包含了对 Thymeleaf 和 Spring Security Thymeleaf 依赖关系的更新。Thymeleaf 3 中值得关注的变化:

  • 由于使用了新的解析系统,Thymeleaf 不再基于 XML
  • 引入新的文本模板模式,它给 Thymeleaf 提供了输出 CSS,Javascript 和纯文本的功能
  • 重写了引擎,性能显著提升

最后的话

Spring Boot 2 是一个重大版本,以下新增的特性或许是你选择升级的理由:

  • 支持 Java 9
  • 对响应式应用更好的支持
  • 支持 Thymeleaf 3

如果你能从这些变化中受益,不妨考虑选择升级。另外,Spring Boot 2 还包含许多错误修复和性能改进,这些都是升级的重要原因。

原文地址 https://www.oschina.net/news/93772/spring-boot-2-0-released

从15000个Python开源项目中精选TOP30,GitHub平均star为3707

继推出 2017 年机器学习开源项目 Top 30 榜单后,Mybridge AI 又推出了一个 Python 开源项目 Top 30 榜单,包括开源 Python 库、工具等。该榜单基于项目质量、用户参与度以及其他几个方面进行了评估,从大约 15000 个开源项目中挑选了 Top 30,差不多都是在 2017 年 1-12 月发布。这些项目在 Github 上的平均 star 为 3707。

No 1:Home-assistant (v0.6+)

基于 Python 3 的开源家庭自动化平台 [Github 11357 stars,由 Paulus Schoutsen 提供]

https://github.com/home-assistant/home-assistant

No 2:Pytorch

PyTorch 是使用 GPU 和 CPU 优化的深度学习张量库,基于 Python 语言编写。[Github 11019 stars,由 PyTorch 团队的 Adam Paszke 和其他人提供]

https://github.com/pytorch/pytorch

No 3:Grumpy

Grumpy 是一个 Python to Go 的源代码翻译编译器和运行时,旨在取代 CPython 2.7。关键区别在于,Grumpy 是将 Python 源码编译为 Go 源代码,然后将其编译为 native code,而不是 bytecode。这也就意味着 Grumpy 没有虚拟机(VM)。编译好的 Go 源码是对 Grumpy 运行时的一系列调用,一个 Go 库服务于具有相似目的的 Python C API。 [Github 8367 stars,由 Google 的 Dylan Trotter 及其他工作人员提供]。

https://github.com/google/grumpy

No 4:Sanic

该项目是一个类 Flask 的 Python 3.5+ 网页服务器,专为加速而设计。Sanic 支持异步请求处理,意味着你可以使用 Python 3.5 中一些 async/await 语法。。[Github 8028 stars,由 Channel Cat 和 Eli Uriegas 提供]

https://github.com/channelcat/sanic

No 5:Python-fire

一个可以从任何 Python 对象自动生成命令行界面(CLI)的库。 [Github 7775 stars,来自 Google Brain 的 David Bieber]

https://github.com/channelcat/sanic

No 6:spaCy(v2.0)

该项目是一个使用 Python 和 Cython 的进行高级自然语言处理(NLP)的开源库 [Github 7633 stars,由 Matthew Honnibal 提供]

https://github.com/explosion/spaCy

No 7:Pipenv

Python.org 官方推荐的 Python 打包工具。它会自动为项目创建和管理 virtualenv,并在安装 / 卸载软件包时从 Pipfile 中添加 / 删除软件包。 [Github 7273 stars,由 Kenneth Reitz 提供]

https://github.com/pypa/pipenv

No 8:MicroPython

一个脱胎于 Python 且非常高效的 Python 实现,主要是为了能在嵌入式硬件上(这里特指微控制器级别)更简单地实现对底层的操作。[Github 5728 stars]

https://github.com/micropython/micropython

No 9:Prophet

该工具是 Facebook 开源的一款用于为多周期性的线性或非线性时间序列数据生成高质量预测的工具。[Github 4369 stars,由 Facebook 提供]

https://github.com/facebook/prophet

No 10:Serpent AI

该项目是一个 Python 写的游戏代理框架,简单而强大,可帮助开发者创建游戏代理。可将任何视频游戏变成一个 Python 写成的成熟沙箱环境。该框架的目的是为机器学习和 AI 研究提供一个有价值的工具,不过对于爱好者来说也是非常有趣的。[Github 3411 stars,由 Nicholas Brochu 提供]

https://github.com/SerpentAI/SerpentAI

No 11:Dash

Dash 是一个纯 Python 写成的框架,无需 JavaScript 即可构建交互式的分析类 web 应用程序。[Github 3281 stars,由 Chris P 提供]

https://github.com/plotly/dash

No 12:InstaPy

Instagram 机器人,喜欢 / 评论 / Follow 自动化脚本。[Github 3179 stars,由 TimG 提供]。

https://github.com/timgrossmann/InstaPy

No 13:Apistar

专为 Python 3 定制的 Web API 框架 [Github 3024 stars,Tom Christie 提供]。

https://github.com/encode/apistar

No 14:Faiss

用于密集向量的高效相似性搜索库和聚类的库 [GitHub 2717 stars,贡献者 Facebook Research]

https://github.com/facebookresearch/faiss

No 15:MechanicalSoup

一个与网站自动交互的 Python 库,自动存储和发送 cookies,支持重定向,并可以跟踪链接和提交表格。[Github 2244 stars]

https://github.com/MechanicalSoup/MechanicalSoup

No 16:Better-exceptions

该项目以更友好的形式展示 Python 中的异常信息。[Github 2121 stars,贡献者 Qix]

https://github.com/Qix-/better-exceptions

No 17:Flashtext

该项目基于 FlashText 算法,用以高效搜索句子中的关键词并进行替代。[Github 2019 stars,由 Vikash Singh 提供]。

https://github.com/vi3k6i5/flashtext

No 18:Maya

在不同系统上的不同语言环境中,Python 对日期时间的处理非常不畅,Maya 主要就是为了解决解析网站时间数据问题。[Github 1828 stars,Kenneth Reitz 提供]

https://github.com/kennethreitz/maya

No 19:Mimesis

是一个快速易用的 Python 库,可以用不同语言为基于不同的目的生成合成数据。这些数据在软件开发和测试阶段非常有用。[Github 1732 stars,由 LíkieGeimfari 提供]

https://github.com/lk-geimfari/mimesis

No 20:Open-paperless

该项目是一个一个文件管理系统,可扫描、索引和归档所有纸张文档。[Github 1717 stars,由 Tina Zhou 提供]

https://github.com/zhoubear/open-paperless

No 21:Fsociety

黑客工具包,渗透测试框架。[Github 1585 stars,Manis Manisso 提供]

No 22:LivePython

Python 代码实时可视化跟踪。[Github 1577 stars,由 Anastasis Germanidis 提供]

https://github.com/agermanidis/livepython

No 23:Hatch

一个 Python 项目、包以及虚拟环境的管理工具。[Github 1537 stars,由 Ofek Lev 提供]

https://github.com/ofek/hatch

No 24:Tangent

该项目是谷歌开源的一个用于自动微分的源到源纯 Python 库。[Github 1433 stars,来自 Google Brain 的 Alex Wiltschko 以及其他人]。

https://github.com/google/tangent

No 25:Clairvoyant

一个 Python 程序,用于识别和监控短期库存移动的历史线索 [Github 1159 stars,由 Anthony Federico 提供]。

https://github.com/anfederico/Clairvoyant

No 26:MonkeyType

该项目是 Instagram 开源的一款适用于 Python 的工具,通过收集运行时类型来生成静态类型注释。[Github 1137 stars,由 Instagram 工程师 Carl Meyer 提供]。

https://github.com/Instagram/MonkeyType

No 27:Eel

该项目是一个小型 Python 库,用于制作简单的类似 Electron 的离线 HTML/JS GUI 应用程序,当前仅支持 Python3。 [Github 1137 stars]

https://github.com/ChrisKnott/Eel

No 28:Surprise v1.0

用于构建和分析推荐系统的 Python scikit  [Github 1103 stars]

https://github.com/NicolasHug/Surprise

No 29:Gain

Web 爬虫框架。[Github 1009 stars,由高久力提供]

https://github.com/gaojiuli/gain

No 30:PDFTabExtract

一组用于从 PDF 文件中提取表格的工具,有助于在扫描的文档上进行数据挖掘。 [Github 722 stars]

https://github.com/WZBSocialScienceCenter/pdftabextract


原文地址 https://blog.csdn.net/csdnnews/article/details/79070542

2017 年最受欢迎的 10 个编程挑战网站

如果你正在在学习编程,那么我可以告诉你一个提高技能的好方法,那就是是敢于去解决编码过程中遇到的难题。解决不同类型的难题,可以帮助你成为一名优秀的问题解决者;不管编程语言多复杂,你也会得心应手;另外在面试准备以及学习新算法等很多方面,都会让你变得越来越出色。

下面是一些非常受大众欢迎的编程难题网站列表,文章还对每个网站所提供的信息进行了一番简短的描述。

1. TopCoder

TopCoder 是最开始的在线竞技编程平台之一。它提供了很多的算法挑战,用户可以使用平台上的编辑器直接完成挑战。每个月该平台会提供几次它们最受欢迎的 Single Round Matches,比赛要求用户在特定的时间内与他人竞争,看谁解决问题的速度更快。

TopCoder 上排名靠前的用户都是很有竞争力的程序员,他们会定期参加各种比赛。这些用户还可以通过名称为 ALGORITHMS WEEKLY BY PETR MITRICHEV 的博客平台去发表一些关于编程竞赛、算法、数学等方面的文章。

2. Coderbyte

Coderbyte 提供了 200 多项编码挑战,挑战者可以使用 10 门编程语言中的任意一种直接在线解决(看看这个例子)。这些挑战的难易程度各不相同。

另外 Coderbyte 还提供了很多的算法教程,入门视频和面试准备的课程。与 HackerRank 和其它网站不同,用户可以查看其他挑战者提供的解决方案,而不是 Coderbyte 官方 发布的。

3. Project Euler

Project Euler 提供了很多关于计算机科学和数学领域的挑战。挑战内容大致都是要求挑战者编写一段小程序从而为某个数学公式或方程式提供解决方案。

由于不支持直接在编辑器上编程,因此需要用户在自己的电脑上先写好解决方案,然后在网站上再提供出来。

4. HackerRank

HackerRank 提供了很多不同领域的挑战,比如算法、数学、SQL、函数式编程、人工智能等等。挑战者可以直接在线完成所有挑战(看看这个例子)。HackerRank 针对每一项挑战专门成立了讨论和领导委员会,而大多数挑战来自于一篇社论,它解释了更多的挑战,以及如何接近它提出解决方案。除了这篇社论,你目前还不能看到其他用户在 HackerRank 上的解决方案。

HackerRank 还支持用户提交应用程序,而且通过解决公司发起的编码挑战,挑战者还有机会获得一份工作。

5. CodeChef

CodeChef 是一家位于印度的编程竞赛网站,该网站提供了数百种挑战。挑战者可以通过在线编辑器进行编程,而且还可以根据自身的编程能力去查看已经分类好的适合于自己的挑战题目 (请查看本示例)。CodeChef 有一个庞大的编程社区,为论坛提供帮助,负责编写教程,而且也会参加 CodeChef 的编码竞赛。

6. CodeEval

CodeEval 类似于 HackerRank,它还提供了很多公司发起的挑战,如果能很好地完成这些挑战,你还有机会得到一份工作。公司可以创建挑战和举办竞争比赛来招募新的工作人员。挑战者可以在这里查看当前的挑战列表。

7. Codewars

Codewars 提供了很多的编码挑战,这些挑战都是由他们自己社区提交和编辑的。挑战者可以用几种语言在编辑器中直接在线完成挑战。用户还可以查看针对每个挑战的讨论以及其他用户的解决方案。

8. LeetCode

LeetCode 是一个很受欢迎的在线判题系统,它提供了 190 道挑战题目,这些题目可以帮助挑战者为面试做好技术准备。挑战者可以用 9 种编程语言直接在线完成挑战。虽然该网站不支持查看其他用户的解决方案,但用户可以为自己的解决方案提供统计数据,例如与其他用户相比,代码运行速度如何。

他们也有一个专门为面试准备的 Mock Interview 部分,这是由他们自己主持的编码竞赛,其中有一些文章帮助用户更好地了解某些问题。

9. SPOJ

Sphere Online Judge(SPOJ) 是一个在线判题系统,提供 20000 多个编程挑战。挑战者可以直接通过在线编辑器中提交代码。SPOJ 还举办了自己的竞赛,并有一个区域专门供用户讨论编码挑战。他们目前没有像其他网站那样提供任何官方解决方案或社论。

10. CodinGame

CodinGame 与其他网站有点不同,因为它不是简单地在编辑器中去完成编码挑战,而是让挑战者真正游戏的。用户可以在这里看到当前提供的游戏列表,在这里看到一个示例。这个游戏有一个问题描述,测试用例,和一个编辑器,你可以在其中一个 20 + 的编程语言编写你的代码。

虽然这个网站不同于上面提到的那些有竞争力的编程网站,但对于那些喜欢挑战并参与竞赛的程序员来说,它还是很受欢迎额。

原文地址 https://mp.weixin.qq.com/s?__biz=MjM5MjAwODM4MA==&mid=2650689845&idx=1&sn=364bd1c86d5017217fe712858d417e52&chksm=bea620e689d1a9f0e365a608057c9a0a8f2f6563a750657f8438096bdaacdd90e01c364806d2&scene=21#wechat_redirect