SciJava项目是根据某些偏见开发的,我们在此进行描述。这一理念在很长的发展历史中不断演变,反映了几十年来吸取的许多经验教训。
开源
SciJava生态系统坚定地致力于open source软件开发。但该软件不是open source软件产品——它遵循open source开发流程的open source软件项目。
这些项目由纳税人的资金资助,因此该项目寻求透明度。有公共source code repositories,公共communication渠道,公共project management资源,当然还有这个community editable website。如所见,您喜欢§§4§§§!
自主学习
告诉我,我就忘记了。教我,我就记住了。让我参与,我就会学习。—standing on the shoulders of giants
这些项目不仅旨在培养科学的独立思考,而且同样是independent learning。我们不仅要teach people how to fish,还要“教他们如何学习”。
因此,对public channels问题的回答通常是“你尝试过什么?”。或者“你能做一个最小的、完整的、可验证的例子吗?”——详情请参阅Bug reporting best practices。对于提问者来说,一个好的经验法则是“在你的问题上投入关心多的精力,就像你希望在回答中投入的精力一样”同样”——对于回答者来说,要真诚地鼓励提问者的这种行为。响应可能会为图像分析问题提供详细的宏或脚本解决方案,但它们通常还包括“如何生成此类解决方案”的详细信息,以及“如何针对其他类似场景或定制它们”的详细信息。
我们一直在寻找更多方法来改进软件,以实现鼓励自主学习的目标。写信给Image.sc Forum表达你的想法!
可扩展性
Extensibility是ImageJ的最大力量。ImageJ2不仅仅是一个软件应用程序——它是一个可扩展的平台,用于开发visualization、segmentation、registration和分析示例过程。
艾萨克·牛顿将他的成功Xunzi。SciJava component collection建立的plugin§软件流程和open source软件本身隐喻编入软件本身。不仅有许多不同类型的插件,而且还可以使用您自己的新类型插件来扩展系统。有关详细信息,请参阅第Extensibility页面。
互操作性
SciJava component collection的核心目标是在新的方向上扩展Java的“一次编写,随处运行”的口号:ImageJ Ops用于图像处理算法,SCIFIO用于科学图像I/O。
ImageJ2命令不仅适用于用户界面,还适用于SciJava ecosystem中的许多other applications,包括CellProfiler、OMERO、KNIME和Alida。
##兼容性
格式兼容是 ImageJ2 最重要的目标。新版本的 ImageJ 必须仍然可以使用现有的 plugins 和 macros。有关详细信息,请参阅Compatibility页面。
提前发布,定期发布
ImageJ遵循软件工程界经常引用的convention over configuration(RERO)原则。特别是——特别是因为有一个小型核心开发团队——该项目是由Boyd’s Law of Iteration驱动的:迭代速度项目胜过迭代质量。这并不是说我们不追求品质——我们确实追求品质。但我们通过经验发现,与较慢的发布周期相比,更多的发布以及指导用户反馈可以更有效地推动前进。
为了确保快速发布,每个 SciJava 组件都是独立发布和版本控制的,使用 reproducible builds 和“发布就绪”main分支。这使得各个 SciJava 组件可以在“五分钟的时间”内与 push of a button 一起发布。这将迅速将错误修复传递到用户手中。
约定配置
随着§§1§§§的增加,复杂性也随之增加。这个问题的一个关键方法是提供合理的默认值(例如,big green Xerox button)作为处理复杂软件程序的一种方式。我们近年来致力于解决许多大型软件项目所采用的release early, release often理念。因此,SciJava 使用Maven构建工具来构建project management。
##为什么选择Java?
虽然Java总是比C++慢,但现在情况已不再如此。There have been与a few benchmarks比较Java与C++的性能,this one可能是所有的祖父。
其中,需要注意的是,将 Java 与 C++ 进行比较时,性能实际上并没有棘手的差异。
Java 程序可以在 Windows、macOS 和 Linux 等主要平台上无问题地运行,并且无需重新编译。在一个平台上编译的插件也可以在所有其他平台上执行,而无需重新编译。使用 Java 进行分析和调试比使用 C++ 更容易。所有程序/插件兼作库。
所以我们使用 Java 的真正原因可能是:它使 ImageJ 易于访问。 另请参见第LOCI’s Why Java page。