Stephen Gold is a computer hobbyist who creates, collects, maintains, and publishes open-source JVM software, including apps, libraries, and documentation.
He holds an advanced degree in Electrical Engineering. He resides in California with his (long-term) sweetheart. At the present time, he seeks neither employment nor funding nor romance.
His current software interests include:
- 3-D graphics
- physics simulation
- skeletal animation
- software build automation
- evolutionary algorithms
- procedural generation of shapes, meshes, and textures
- approximate convex decomposition
You can follow his devlog at Tumblr.
Computer jargon
Digital devices (such as computers and phones) combine hardware and software. Hardware refers to the tangible parts, such as chips, circuit boards, buttons, and cables. Software is information, especially instructions that tell hardware what to do.
For example, a computer’s software determines what it does when the Enter key is pressed. Depending what software is running, the same hardware might respond differently to identical keystrokes.
Source code and open-source
Software, in its finished form, consists of long strings of numbers suitable for controlling a particular kind of device. Because strings of numbers are difficult for humans to understand, most software is authored in the form of source code (human-readable text) which is then translated (by a computer) into the desired numbers.
Open-source software refers to software whose source code is readily available.
Plenty of software is sold without its source code, in the belief that the buyer needs only the numeric software that runs on their device. That might be true if software were perfectly versatile and never became obsolete. But in order to substantially adapt or maintain a piece of software, one needs the source code. Lacking source code, buyers must rely on the vendor for customization and updates.
Software without its source code is like a pre-cooked meal. If the meal is too salty, you can’t do much except ask the cook to use less salt next time or try a different cook. Acquiring source code is like collecting recipes, so you can cook dishes at home and adapt them to your taste.
Apps and libraries
There are many kinds of software projects, including apps and libraries.
App is short for “application software.” An app is a piece of software whose function is clear to the end user, such as a word game, a web browser, or a video mixer.
A library is a software building block, used in other (larger) projects. Libraries matter greatly to people who create and maintain software, but are mostly invisible to end users.
For instance, a web browser app might use a library to render images to a screen. Doing so would free the app developer from dealing with the quirks of every image format and type of screen. Writing software is time-consuming and painstaking work. A good library might get re-used in thousands of apps, resulting in huge savings of effort.
Pursuing the food analogy, apps are dishes ready to be eaten, and libraries are ingredients ready to be cooked. The availability of mass-produced ingredients like flour and cheese frees cooks from needing to grow their own wheat or raise their own livestock.
Repositories and commits
Software projects often involve collaboration, with hundreds of people making thousands of changes to the source code over many years. To help manage all this activity, most projects keep a history of all changes (and who made them, and why) in a special-purpose database called a repository. The individual changes are called commits.
Projects also use repositories to keep a history of all their officially-published products.
Artifacts and coordinates
In the world of JVM software, libraries are distributed in the form of pre-built software artifacts. Software developers needn’t build libraries from source code or explicitly download the artifacts. Instead, they can simply refer to them by their Maven coordinates.
Maven coordinates consist of three parts: a group ID, an artifact ID, and a version string. Given the coordinates of a library, software build tools automatically download the corresponding artifacts from the repositories that hold them.
Stephen’s open-source software projects at GitHub
Stephen publishes source code and build instructions for his open-source software projects at GitHub. He also releases artifacts to the Maven Central Repository, under the com.github.stephengold group ID.
- Libbulletjme,
a 3-D physics library for JVM applications,
based on Bullet
and V-HACD
- Maven artifact ID: “Libbulletjme”
- find the latest release: Central, GitHub
- browse recent commits
- Add-on projects for Libbulletjme:
- LbjExamples, a tutorial for Libbulletjme, with simple example applications
- SPORT,
an OpenGL-based graphics engine for Libbulletjme,
with demo applications
- Maven artifact ID: “sport”
- find the latest release: Central, GitHub
- browse recent commits
- Macana,
integrates Obsidian user interfaces into SPORT
- currently in the testbed stage (unreleased)
- browse recent commits
- V-Sport,
a Vulkan-based graphics engine for Libbulletjme,
with demo applications and simple example applications
- Maven artifact ID: “V-Sport”
- find the latest release: Central, GitHub
- browse recent commits
- jolt-jni,
JVM bindings
for Jolt Physics
- Maven artifact IDs: “jolt-jni-Linux64”, “jolt-jni-Linux_ARM32hf”, “jolt-jni-Linux_ARM64”, “jolt-jni-MacOSX64”, “jolt-jni-MacOSX_ARM64”, and “jolt-jni-Windows64”
- find the latest release: Central, GitHub
- browse recent commits
- JMonkeyEngine,
a code-centric 3-D game engine based on LWJGL
- Maven group ID: org.jmonkeyengine
- find the latest release: Central, GitHub
- browse recent commits
- Add-on libraries for JMonkeyEngine:
- KK Physics,
a 3-D physics engine based on jolt-jni
- Maven artifact ID: “kk-physics”
- find the latest release: Central, GitHub
- browse recent commits
- Minie,
a 3-D physics engine based on Libbulletjme
- Maven artifact ID: “Minie”
- find the latest release: Central, GitHub
- browse recent commits
- Acorus,
a simple user interface for demo/test desktop applications
- Maven artifact ID: “Acorus”
- find the latest release: Central, GitHub
- browse recent commits
- Garrett,
a suite of camera controllers based on Acorus and Minie
- Maven artifact ID: “Garrett”
- find the latest release: Central, GitHub
- browse recent commits
- Heart,
a general-purpose add-on library
- Maven artifact ID: “Heart”
- find the latest release: Central, GitHub
- browse recent commits
- jme3-utilities-nifty, a graphical user interface based on NiftyGUI
- jme3-utilities-x, an experimental add-on library
- JmePower,
a loading animation
- Maven artifact ID: “JmePower”
- find the latest release: Central, GitHub
- browse recent commits
- jME-TTF,
a renderer for TrueType fonts
- Maven artifact ID: “jme-ttf”
- find the latest release: Central, GitHub
- browse recent commits
- MonkeyWrench,
a model loader based on the Open Asset Importer Library
- Maven artifact ID: “MonkeyWrench”
- find the latest release: Central, GitHub
- browse recent commits
- More Advanced Vehicles,
a vehicle simulator based on Minie
- Maven artifact ID: “MaVehicles”
- find the latest release: Central, GitHub
- browse recent commits
- SkyControl,
a sky simulator
- Maven artifact ID: “SkyControl”
- find the latest release: Central, GitHub
- browse recent commits
- tonegodgui,
another graphical user interface
- Maven artifact ID: “tonegodgui”
- find the latest release: Central, GitHub
- browse recent commits
- Wes,
edits and retargets skeletal animations
- Maven artifact ID: “Wes”
- find the latest release: Central, GitHub
- browse recent commits
- KK Physics,
a 3-D physics engine based on jolt-jni
- JMonkeyEngine apps:
- Archer-Game-Template2, a first-person shooter game
- Banana, a test suite for physics libraries
- BasicGame-on-Gradle, a template for building JMonkeyEngine applications using Gradle and Java
- BasicGame-on-Kotlin, a template for building JMonkeyEngine applications using Gradle and Kotlin
- DacWizard, a GUI app for configuring Minie ragdoll physics
- FuzeCreek, a real-time river-rafting game
- Georg, a suite of procedurally generated textures
- jme3-maze, a 3-D maze game
- Maud, an editor for animated 3-D models
- RyzomConverter, imports assets from the Ryzom Asset Repository
- RyzomDemos, example applications using assets imported by RyzomConverter
- VhacdTuner, a GUI app to tune the V-HACD algorithm for a specific mesh
- Ancient JVM libraries:
- asm 3.1,
a framework for manipulating JVM bytecodes
- Maven artifact ID: “asm-all”
- find the latest release: Central, GitHub
- browse recent commits
- jbullet,
a 3-D physics library written entirely in Java
- Maven artifact ID: “jbullet”
- find the latest release: Central, GitHub
- browse recent commits
- j-ogg-all,
reads Ogg bitstreams and decodes the media they contain
- Maven artifact IDs: “j-ogg-all” and “j-ogg-vorbis”
- find the latest release: Central, GitHub
- browse recent commits
- stack-alloc,
allocates JVM objects on the stack instead of on the heap
- Maven artifact ID: “stack-alloc”
- find the latest release: Central, GitHub
- browse recent commits
- asm 3.1,
a framework for manipulating JVM bytecodes
- Documentation projects:
- antora-ui-bundle,
an Antora user-interface bundle
- find the latest release: GitHub
- browse recent commits
- Minie-site-it, an Italian translation of the Minie project website
- stephengold.guihub.io, this website
- antora-ui-bundle,
an Antora user-interface bundle