| File | Date | Author | Commit |
|---|---|---|---|
| dist | 2019-05-22 |
|
[040175] commit of version 0.1 |
| screenshots | 2021-03-21 |
|
[c8adbb] BWD impl : added scaling, BWD api : added methods |
| src | 2025-03-30 |
|
[3e6e08] BWD impl : diamond operator cleanup for compila... |
| CHANGELOG.txt | 2021-07-16 |
|
[72514f] BWD : mouse/wheel events : upgrade, and posInCl... |
| LICENSE | 2019-04-28 |
|
[332cba] Initial commit |
| README-BWD.md | 2020-11-14 |
|
[6a325e] little code/docs upgrades |
| README.md | 2020-11-14 |
|
[6a325e] little code/docs upgrades |
| TODOLIST.md | 2021-04-13 |
|
[4835e2] BWD impl : added smooth image scaling (off by d... |
| coding_guidelines.md | 2019-05-22 |
|
[040175] commit of version 0.1 |
Jolikit is a Java library which APIs only depend on the most basic JDK classes
and Java language features, for easier translations into other languages,
and which aims to abstract away things not abstracted away by the JDK,
to serve as a low lock-in decoupling basis.
There is no top-level class or package dependency cycle in the code,
which should simplify a lot porting into languages such as Go.
See README-BWD.md for more info about the 2D UIs API.
Apache License V2.0
BWD bindings libraries (JavaFX 8, SWT, etc.)
src/build/java:
Jadecy 2.0.1
src/test/java:
JUnit 3.8.1
src/samples/java:
HeisenLogger: Low-overhead logger to debug concurrent treatments.
net.jolikit.threading.locks:
Provides an API to abstract away whether locking and waiting is done using
a monitor or an implementation of Lock, and an API extending Lock
with check methods to help guard against deadlocks or wrongfully locked
or unlocked sections.
Also provides default implementations of these APIs.
Principal entry points:
net.jolikit.threading.locks.InterfaceCheckerLock
net.jolikit.threading.prl:
Provides APIs to abstract away parallelization.
Also provides default implementations of these APIs.
Principal entry points:
net.jolikit.threading.prl.InterfaceSplitmergable
net.jolikit.time:
Provides APIs for clocks to abstract away time, and APIs for scheduling
treatments based on such clocks, either and transparently:
net.jolikit.time.sched.InterfaceScheduler
net.jolikit.bwd:
Provides a simple 2D UI API to abstract away UI libraries, by defining types
and interfaces corresponding to related basic concepts and use cases
(UI thread scheduling, windowing and related events, graphics (drawing
primitives, text, images, rectangular clipping, translations and 90 degrees
rotations), fonts, cursors, and devices (mouse, wheel and keyboard) events).
Also provides implementations of this API based on various UI libraries.
Principal entry points:
Jars content and inter-dependencies,
with compilation target version in parentheses:
jolikit.jar (1.6):
Everything except BWD bindings implementations
(even those based on AWT/Swing).
jolikit-bwd-impl-utils.jar (1.6):
Utilities for BWD bindings implementations.
Depends on:
jolikit.jar
jolikit-bwd-impl-awt.jar (1.6):
A BWD binding based on AWT.
Depends on:
jolikit-bwd-impl-utils.jar
jolikit-bwd-impl-swing.jar (1.6):
A BWD binding based on Swing.
Depends on:
jolikit-bwd-impl-awt.jar
jolikit-bwd-impl-jfx.jar (1.6):
A BWD binding based on JavaFX.
Depends on:
jolikit-bwd-impl-utils.jar
jolikit-bwd-impl-swt.jar (1.6):
A BWD binding based on SWT.
Depends on:
jolikit-bwd-impl-utils.jar
jolikit-bwd-impl-lwjgl3.jar (1.8, due to a lambda in LWJGL3):
A BWD binding based on LWJGL3.
Depends on:
jolikit-bwd-impl-awt.jar (for fonts)
jolikit-bwd-impl-jogl.jar (1.6):
A BWD binding based on JOGL/NEWT.
Depends on:
jolikit-bwd-impl-awt.jar (for fonts and images)
jolikit-bwd-impl-qtj4.jar (1.6):
A BWD binding based on QtJambi4.
Depends on:
jolikit-bwd-impl-utils.jar
jolikit-bwd-impl-algr5.jar (1.6):
A BWD binding based on Allegro5.
Depends on:
jolikit-bwd-impl-utils.jar
jolikit-bwd-impl-sdl2.jar (1.6):
A BWD binding based on SDL2.
Depends on:
LWJGL3 BWD binding requires Java 8+ to run due to a lambda.
Update xxx_config properties files in:
Launch BwdTestLauncherMain, choose binding(s) on the left panel
and test(s) case(s) on other panels.
Tests will launch as soon as at least one binding and one test case
are chosen.
To kill the tests, left-click on the "Kill Gui" that pops up
in top left corner, or for most tests middle-click on test GUI.
On Mac, sometimes also need to launch KillBwdTestJvmsOnMacMain
for complete cleanup.
"I'm here to motivate you to be a better engineer (...) The super-power
that allows me to do this is (...) a deep and strong hatred for technology,
all kinds, without limitation." (Theo Schlossnagel,
https://www.infoq.com/presentations/Scalable-Internet-Architectures, 5m47s)
"Why Java?"
For its portability, its backward compatibility (i.e. portability in time),
its simplicity, its basic multi-threading features, and now its openness.
"Why stick to Java 6?"
I don't see any new feature from Java 7+ which value for this library would
compensate the fact of not be usable by all the people still using Java 6,
by far.
Main reasons why I didn't stick to Java 5 instead: AWT/Swing API a bit behind,
no AtomicXxx.lazySet(...), no JavaCompiler class, and easy to make code Java 5
compliant if needed by removing the few Java 6 specific code.
"Why not use a build tool?"
Jolikit build is trivial, so it doesn't require a powerful build tool: we can
just use JavaCompiler and JarOutputStream more or less directly for it.
"In scheduler API, why not use java.util.concurrent.TimeUnit?"
I consider the use of TimeUnit as a code smell, for I've seen too many
precision loss bugs related to it, such as when people convert a duration
from nanoseconds to seconds, and then back to nanoseconds.
Instead, I prefer to use:
This first version is 0.1, to allow for taking eventual feedback into account
before moving to 1.0.
You can send your remarks to "jolikit" google group, after joining it by sending
an email to jolikit+subscribe@googlegroups.com and following the little process.