摘要:从太空探索到基因组学,从反向编译器到机器人控制器,Java 都是当今世界的核心。下面将介绍几个从众多 Java 应用程序中脱颖而出的优秀应用。
Java 的故事始于 1991 年,当时 Sun Microsystems 试图将其在计算机工作站市场的领先地位扩展到新兴且发展迅速的个人电子产品市场。几乎没有人预料到 Sun 即将创建的编程语言会使计算大众化,激发了一个全球范围的社区,并成为了一个由语言、运行时平台、SDK、开源项目以及许多工具组成的持久软件开发生态系统的平台。经过James Gosling领导的数年秘密开发之后,Sun 于 1995 年发布了具有里程碑意义的“一次编写,随处运行” 的 Java 平台,并将重点从最初的交互式电视系统设计转到了新兴的万维网应用程序上。在本世纪初,Java 就已经开始为从智能卡到太空飞行器的一切制作动画了。
如今,数以百万计的开发人员在使用 Java 编程,Java仍然在以越来越快的步伐向前发展。在 Java 诞生 25 周年之际,Java Magazine(Oracle 的双月刊)联合 Oracle Java 开发团队,共同撰文回顾 Java 是如何塑造我们这个星球的。
以下是迄今为止,最具创意和影响力的 25 个 Java 应用程序, 包含了从 Wikipedia Search 到美国国家安全局的 Ghidra 等。这些应用包罗万象,覆盖了包括:太空探索、视频游戏、机器学习、基因组学、汽车、网络安全等不同领域。
这份清单没有特定的顺序,也还不够详尽,可能会有遗漏,如果你认为文章中遗漏了哪个重要的 Java 应用,可以在文末给我们留言!
最后的边界
1、Maestro 火星探测器控制器。 2004 年,Java 成为首个扩展人类星球影响力的编程语言。那年在三个月的时间里,美国国家航空航天局(NASA)的科学家在位于加利福尼亚州帕萨迪纳的喷气推进实验室(JPL)里,使用了由 JPL 机器人接口实验室建造的基于 Java 的Maestro Science Activity Planner来控制“勇气号”火星探测器(Spirit Mars Exploration Rover )。在 JPL 里,Java 试验早在许多年前就开始,当时是为 1995 年的“逗留者”火星车(Mars Sojourner)创建了一个命令和控制系统。 Java 创始人 James Gosling 为 JPL 工作了很长时间,因此他成为了顾问委员会的一名成员。
2、JavaFX 深空轨迹探测器。计划进行一次太空飞行?您可能需要来自a.i.solutions的工具,a.i.solutions 是一家美国航空承包商,其产品和工程服务已经被国防公司和民用航天机构使用了 20 多年。
该公司的JavaFX深空轨道探测器(JavaFX Deep Space Trajectory Explorer)使轨迹设计人员可以计算深空三体系统的路径和轨道。该应用程序可以为任何行星-卫星系统或小行星生成多维视图和模型,并能在密集的视觉搜索中过滤数百万个点。
3、NASA WorldWind。NASA 发布了开源的WorldWind软件开发工具包,所有人都可以免费使用火箭科学家的工作成果。WorldWind 是一个虚拟地球 SDK,允许程序员将美国航天局的地理渲染引擎添加到自己的 Java、Web 或 Android 应用程序中。 WorldWind 的地理空间数据远远超过了谷歌地球(Google Earth),它是由 NASA 工程师通过高程模型和其他数据源可视化地形的方式生产的。其网站称:“世界各地的组织都使用 WorldWind 监测天气模式,可视化城市和地形,跟踪车辆移动,分析地理空间数据以及对人类进行地球知识的教育。”
4、JMARS 和 JMoon。 Java任务-遥感计划和分析(JMARS)是一个地理空间信息系统,由亚利桑那州立大学火星空间飞行设施人员编写,自 2003 年开始公开发行,至今仍为 NASA 科学家所使用。 月球JMARS(月球科学家称之 JMoon)可以分析月球勘测轨道飞行器(Lunar Reconnaissance Orbiter,LOR)拍摄的广角图像,它是一种自动航天器,自 2009 年发射以来,一直在 50 至 200 公里的月球轨道上运行,并能将观测结果发送给 NASA 的行星数据系统(Planetary Data System)。
5、小体映射工具( Small Body Mapping Tool ,SBMT)。 SBMT在太空科学家中很受欢迎,是由约翰霍普金斯大学应用物理实验室开发的,它使用来自航天器的任务数据以 3D 的形式可视化小行星、彗星和小卫星等不规则天体。 SBMT 是用 Java 编写的,并使用了用于 Java 3D 图形处理的开源可视化工具包(VTK)。“黎明“号(Dawn)、“罗塞塔”号(Rosetta)、“奥西里斯-雷克斯”号(OSIRIS-REx)和“隼鸟二号”(Hayabusa2)飞行任务团队在探索彗星、小行星和矮行星时都使用了 SBMT。
数据的强度
6、Wikipedia Search。一部大众百科全书应该运行在开源软件上,并且具有一个由 Java 驱动的搜索引擎,这是再合适不过的了。Lucene是由Doug Cutting于 1999 年编写,并以他妻子的中间名命名的,它实际上是 Cutting 开发的第五个搜索引擎。他作为工程师先后为 Xerox PARC(施乐帕克研究中心)、Apple 和 Excite 创建了其他的引擎。 2014 年,Wikipedia 用Elasticsearch代替了 Lucene 引擎,Elasticsearch 是一个分布式的、支持 REST 的搜索引擎,也是用 Java 编写的。
7、Hadoop。 Lucene 并不是唯一一个进入我们这个榜单的 Cutting 创建的作品。2003 年,Google 在一篇研究论文中描述了在大型商用计算机集群上处理数据的 MapReduce 算法,受该论文的启发,Cutting 用 Java 编写了一个 MapReduce 操作开源框架,并以他儿子的玩具大象命名,称为Hadoop。 Hadoop 1.0 于 2006 年发布,催生了大数据趋势,并激发了许多公司开始收集“数据湖”(data lakes),制定挖掘“数据排放”(data exhaust)的策略,并将数据描述为“新石油”(the new oil)。到 2008 年,Yahoo(当时的 Cutting 曾在该公司工作)宣称他们的 Search Webmap 运行在 10,000 个内核的 Linux 群集上,是现有的最大的产线 Hadoop 应用程序。到 2012 年,Facebook 声称在全球最大的 Hadoop 集群上拥有超过 100 PB 的数据。
8、并行图形分析(Parallel Graph AnalytiX,PGX)。图形分析是有关理解数据中的关系和连接的。根据基准测试,PGX是世界上速度最快的图形分析引擎之一。 PGX 是用 Java 编写的,由 Oracle Labs 研究员 Sungpack Hong 领导的团队于2014年首次发布,PGX 允许用户加载图形数据并运行分析算法,比如,社区发现(Community Detection)、聚类、路径查找、页面排名、影响因素分析、异常检测、路径分析和模式匹配等算法。在健康、安全、零售和金融领域,它的用例比比皆是。
9、H2O.ai。机器学习(ML)的曲线非常陡峭,这可能会阻止领域专家实现伟大的 ML 想法。自动化 ML(AutoML)可以通过推断 ML 流程中的某些步骤(例如特征工程、模型训练和调整以及转译等)来提供一些帮助。 由 Java 冠军 Cliff Click 创建的基于 Java 的开源H2O.ai平台,旨在实现 AI 的大众化,并能为那些刚入门的人们充当虚拟数据科学家,同时能帮助 ML 专家提高效率。
有趣的世界
10、 Minecraft。该游戏的和平环境是由生物群落、人以及自己用积木搭建的住所组成的,它对世界各地的儿童和成人都有着持久的吸引力,这使得它成为历史上最受欢迎的视频游戏。 Minecraft及其 3D 宇宙是由 Markus “Notch” Persson 用 Java 开发的,并于 2009 年以 Alpha 版本发布,它是永无止境的创造力之源,因为没有两个衍生的世界是一样的。该视频游戏对Java的使用也可以让在家和学校的程序员创建自己的模块。
11、Jitter 机器人和 leJOS。在自动吸尘器 Roomba 出现之前,就已经有Jitter。Jitter 是一个用来吸取国际空间站(ISS)中漂浮颗粒的原型机器人,它能够在失重状态下导航,在墙壁上弹跳,并能使用回转仪进行自我定位。据报告称,俄罗斯宇航员发现该机器人的 x、y、z 旋转操作令人印象深刻,能让人联想到国际空间站自身是如何控制其方向的。Jitter 是leJOS最出类拔萃的原型,leJOS 是 Lego Mindstorms 的 Java 虚拟机,是 Lego 的硬件软件环境,可用于从积木玩具中开发可编程的机器人。玩具 OS 可以追溯到 1999 年由 José Solorzano 发起的 TinyVM 项目,该项目后来演变成 leJOS,由 Brian Bagnall、JürgenStuber 和 Paul Andrews 领导。这个功能齐全的环境具有许多特定于机器人编程的类,这些类使用 Java 的面向对象特性进行了简化,使得任何人都可以利用其高级控制器和行为算法。
12、Java 小程序。根据牛津英语词典,小程序(applet)一词最早出现在 1990 年的 PC Magazine(计算机杂志)上。但是直到 1995 年 Java 出现后,小程序才真正腾飞。Java 小程序可以在网页(Frame、新窗口、Sun 的AppletViewer或测试工具)中启动,并能运行在于浏览器相独立的 JVM 上。一些人将 Minecraft 的早期成功归功于这样一个事实:玩家可以通过 Java 小程序在 Web 浏览器中玩游戏,而不必下载并安装游戏。尽管 Java 小程序自 Java 9 以来就不被推荐,并且在 2018 年也被从 Java SE 11 中剔除掉了,但它们一度是最快的游戏。一个有趣的事实是:Java 小程序还可以访问 3D 硬件加速,这使得它们在科学可视化方面很受欢迎。
荣誉代码
13、NetBeans 和 Eclipse IDE。最早进入 Java 集成开发环境世界的是NetBeans,NetBeans 于 1996 年在布拉格的查尔斯大学(以 Xelfi 的名义)创立,并于 1997 年由企业家 Roman Staněk 创立的同名公司进行商业化。 Sun 在 1999 年购买了支持所有 Java 应用程序类型的模块化 IDE,并于次年将其开源。 2016 年,Oracle 将整个 NetBeans 项目捐赠给了 Apache 软件基金会(Apache Software Foundation)。
另一个流行的基于 Java 的集成开发环境是开源的 Eclipse IDE,它不仅可以用于 Java 编码,还可用于从 Ada 到 Scala 的其他语言的编码。 Eclipse SDK 由 IBM 于 2001 年推出,是基于 IBM VisualAge 的,它是面向 Java 开发人员的,但是可以通过插件进行扩展。 Eclipse IDE 于 2004 年从 IBM 分离出来并加入 Eclipse 基金会,它目前仍然是可用的顶级 IDE 之一。
14、 IntelliJ IDEA。IDE 有很多,但 IntelliJ IDEA 在 2001 年推出后就成为了人们的最爱。如今,IntelliJ IDEA 已成为许多 IDE 的框架,这些 IDE 适用于 Python、Ruby 和 Go 等多种语言。 IntelliJ IDEA及其相关的JetBrains IDE套件是使用Java编写的,可以提高许多开发人员所依赖的生产力和导航功能。其中包括代码索引、重构、代码完成(这要早于智能手机上的文本自动完成)以及发现错误的动态分析(类似于拼写检查器)。 “ IntelliJ IDEA 帮助克服了在某个框架下管理和调试基于 Java 和 JVM 的复杂应用程序的挑战,”驻英自由软件和数据工程师、Java 冠军 Mani Sarkar 说。 “它们让开发人员在使用它们的工具时,感到高效、多产,最重要的是能感到快乐。”
15、Byte Buddy。开源 Java 库Byte Buddy的创建者,来自奥斯陆(挪威 Oslo)的软件工程师Rafael Winterhalter坦承,他的一生(有时令人发狂)专注于小众市场。尽管如此,他的贡献还是大受欢迎:Winterhalter 说,用于 Hibernate 和 Mockito 等 Java 工具的 Byte Buddy 运行时代码生成和操作库每月下载量高达 2000 万次。
16、Jenkins。 Jenkins由 Sun Microsystems 工程师 Kohsuke Kawaguchi 于 2004 年创建,是一个功能强大的开源的持续集成服务器。 Jenkins 用 Java 编写,可帮助我们快速自动地构建、测试和部署应用程序。它通常被认为是使“基础设施即代码”(Infrastructure As Code,Iac)成为可能的早期 DevOps 工具之一。 Jenkins 及其 1500 多个由社区贡献的插件可以处理各种各样的部署和测试任务,从与 GitHub 合作,到支持色盲开发人员,再到提供 MySQL Connector JAR 文件。
17、GraalVM。由Oracle Labs的Thomas Wuerthinger领导的一个苏黎世(Zurich)研究团队,花费了多年的时间来磨练三个想法:我们是否可以用 Java 编写编译器(原始 JVM 是用 C 编写的)呢?它是否可以运行以任何语言编写的程序呢?它是否够高效呢?在发表了 60 篇研究论文之后,GraalVM最终胜出,并成为了一个商业产品。 Twitter 是这项技术的狂热爱好者之一,它使用 GraalVM 来提高服务的速度和计算效率。
18、Micronaut。为云编写代码的开发人员需要仔细考虑其应用程序使用了多少内存,以及应用程序如何使用这些内存。Micronaut的创建者 Graeme Rocher 说: “您必须使应用程序对重启、故障自动切换、停机再恢复非常敏感,并在启动时间和内存消耗方面进行优化,” 。Micronau 是一个用于微服务的 Java 框架,该微服务需使用注解元数据,以便 JVM 能够有效地编译应用程序的字节码。
19、WebLogic Tengah。 1997 年,WebLogic Tengah成为企业级 Java 服务器的首个实质性实现。 “它早于 Java 2 企业版,并成为 BEA 的主要产品,最终导致了 Oracle 收购 BEA Systems,”Java Magazine 和 Dr. Dobb’s Journal 的前主编 Andrew Binstock 说。 与此同时,IBM 在业务对象框架San Francisco Project上的成功,“使 Java 真正从酷孩子们正在玩的一个有趣的新事物中脱颖而出,并成为一种严肃的业务工具,”Binstock 说。如今,Oracle WebLogic Server 仍然是领先的 Java 应用程序服务器。然而,另一种选择仍在蓬勃发展:开源应用程序服务器GlassFish,它于 2005 年由 Sun 创建,于 2018 年捐赠给 Eclipse 基金会。
20、Eclipse Collections。工作在投资银行、证券交易所和其他金融服务公司的许多高薪开发人员都需要强大的 Java 技能,这是有原因的:Java 编程语言擅长处理并发,即管理高频交易和其他大规模金融事务中常见的多个执行线程。Eclipse Collections最初称为 Goldman Sachs Collections,后来捐赠给了 Eclipse 基金会,它扩展了原生 Java 的性能密集型特性,“具有优化的数据结构和丰富的、功能强大的、流畅的 API”,Java 冠军 Mani Sarkar 说。 Sarkar 指出,Eclipse Collections 包含缓存、原语支持、并发库、通用注解、字符串处理、输入/输出等等。
21、NSA Ghidra。在旧金山举行的 2019 年 RSA 大会上,美国国家安全局( U.S. National Security Agency)推出了一款基于 Java 的开源工具Ghidra,安全研究人员和从业者现在可以使用它来了解恶意软件的工作原理,并检查自己的代码是否存在漏洞。这个逆向工程平台可以将软件从机器语言反编译回源代码(例如 Java 语言)。该工具有一个故事,即使不是声名狼藉,也是传奇:2017 年 3 月,维基解密(WikiLeaks)将其存在公之于众。
绘制基因组图谱
22、集成基因组浏览器( Integrated Genome Browser,IGB)。绘制人类基因组图谱的竞赛始于 1990 年,并在 13 年后结束。当时,医学研究人员成功地对生物技术专家 Craig Venter 的 30 亿个 DNA 碱基对进行了测序,这项工作历时 10 年,涉及 3,000 人,耗资 30 亿美元。测序完成后,科学家们很想深入研究我们这个物种的源代码,但是怎么做呢?进入基于 Java 的基因组浏览器,这是一个由包括生物信息学教授 Ann Loraine 在内的团队开发的可视化工具,可用于探索基础数据集和参考基因注解。开源的集成基因组浏览器(Integrated Genome Browser )允许研究人员放大、平移和绘制基因组数据,以便识别和注解遗传特征。为了配合这一全球努力,加州大学圣克鲁兹分校(University of California Santa Cruz)提供了一个类似的工具,即由 Jim Kent 管理的基因组浏览器(Genome Browser)。
23、BioJava。 BioJava于 2000 年启动,至今仍很强大,它是一个用于处理生物数据的开源库,生物数据领域也被称为生物信息学。科学家使用该库可以处理蛋白质和核苷酸序列,并可以研究有关基因到蛋白质翻译、基因组学、系统发育和大分子结构的数据。该项目得到了开放生物信息学基金会(Open Bioinformatics Foundation,OBF)的支持,其全球范围的贡献者得到了各种制药、医学和基因组学领域的资助。 “BioJava 是方法论和软件开发的一个热门选择,这要归功于 Java 的可用工具及其跨平台的可移植性,” Aleix Lafita 及其同事在 2019 年发表的一篇题为“ BioJava 5:社区驱动的开源生物信息库”的论文中写道。该论文进一步指出,自 2009 年以来,BioJava 已经接受了 65 个不同开发人员的贡献,并且在过去的一年中,它已在 GitHub 上累积了 224 个 fork 和 270 个 star,并且下载次数超过了 19,000 次。
最喜欢的“东西”
24、VisibleTesla。这款基于 Java 的应用程序是由特斯拉(Tesla)汽车爱好者 Joe Pasqua 于 2013 年创建的,它是一个免费程序,可用于监视和控制他的特斯拉 Model S。VisibleTesla的灵感来自于特斯拉汽车俱乐部社区,它提供与电动汽车制造商官方移动应用程序类似的功能。用户可以为诸如解锁的门或充电状态之类的东西设置地理围栏和通知,以及收集和处理行程数据。该项目的开源代码托管在 GitHub 上。
25、SmartThings。该物联网(IoT)应用程序是由SmartThings开发的(SmartThings 是由 Alex Hawkinson 于 2012 年联合创立的,后来在 Kickstarter 上筹集了 120 万美元的资金),可以让我们通过智能手机或平板电脑控制和自动化所有的东西,从家用照明、锁、咖啡机、恒温器以及收音机到全部家用安全系统。该应用程序使用基于 Java 的 Micronaut 框架(请参阅 #18),因此它基于云的服务可以以亚秒级的速度运行。该公司于 2014 年被三星电子(Samsung Electronics)以 2 亿美元的高价收购。
原文链接:
https://blogs.oracle.com/javamagazine/the-top-25-greatest-java-apps-ever-written
评论 11 条评论