So now that a new year has happened, I will continue the tradition of doing the year in review, essentially a retrospective of it.
Okay, so commit wise under my dead name and my legal name, my legal name is at 50% and to meet the same amount it would be 3,383 commits so quite awhile before it is overtaken. But there will never be a new commit under that so as time goes on, it will dwindle. At least I convert the stuff in the Git repositories so it does not exist in the author data at all.
As for the review, I should eat breakfast first then get into it.
So now for the year in review... I will say that 2018 was the year with the first release of SquirrelJME which is nice, more releases are definitely coming this year. I am excited for the eventual ability to run more software and have it be faster, along with some ports to platforms such as RetroArch. Note that this was descriptive then just started turning into a changelog.
- Since December I did independent contracting for IOpipe and also had my main retail job.
- I worked on the ill-fated kernel and the old complicated service code which was stripped away since it complicated things greatly.
- Mostly worked on the packet system for the ill-fated kernel, since it was IPC based and used streams for the most part.
- I simplified the Kernel and the IPC by stripping a bunch of stuff out of it.
- I made the IPC interface much faster by optimizing the communication means. With things being simpler it performed better because the overhead was great.
- More work on the defunct kernel services, improving them.
- Made corrections to the IPC interface.
- More service related changes.
- Corrected the fossil building script, since I did have exports.
- I added permissions to the defunct kernel, sort of.
- Re-ordered all the error codes.
- JamVM on Linux is messed up and does not work properly with tools.jar, so a hack was done to fix this.
- I bought http://squirreljme.cc/ and as such, I moved everything in the
namespaces over. I did this because
net.multiphasicapps.squirreljmewas really long, took up a bunch of space, and was annoying to type all the time.
- Did some code cleanups following this.
- More work on packets.
- More kernel trust work.
- Added a basic shell for a potential Java to C compiler, but this did not pan out. Perhaps later it will, but there is RatufaCoat which will be written in C.
- More kernel trust work.
- Started a defunct WinterCoat idea, using compiled ROMs. WinterCoat was the original C based VM, but that will be done with RatufaCoat now.
- Worked on a bunch of ROM compilation stuff, which eventually was stripped in the future.
- Class file parsing improvements.
- Removed link to the IRC channel and closed it, it is no longer around.
- Created a scope document (which is still around) which specifies which APIs I will implement and which ones to not consider because they are not Java ME
- Dependency system work, which the code is pretty much still used today.
- This was a happy month for me because I started Hormone Replacement Therapy. I am a transgender woman and honestly since starting HRT I have felt much better and it has been reflected in SquirrelJME.
- Remove a bunch of the old system call stuff and simplify it.
- The kernel packet system was moved to its own library, although later it would be deleted.
- System calls were switched from using a stream of bytes over IPC to using calls to implemented classes.
- Refactoring of the system call interface.
- Added Base64 and MIME decoders, which are still used today.
- Added a test framework, however this one would never actually really be implemented. The newer TAC is much simpler. This is when I wanted very complicated parsing of class files to find tests and such.
- Corrected some of the utility scripts.
- Added ability to get path sets in the build system which are compatible with the compiler.
- The defunct JavaSE main preferred
- Added the only test for Base64 decoding but that really did not do anything.
- Defined super complex annotations for declaring tests and their parameters, later in TAC this would instead be done with resources since it does not require a special compiler.
- Complicated lookup of class trees.
- Worked on a Java language tokenizer, that is still around although I will probably redo the other compiler stuff in the future. The tokenizer is good however.
- Refactored the tokenizer to make it much better.
- Did more work on the abstract class system services code.
- Added a LCDUI interface, to interact with the host system. This would later be removed for something far simpler and portable.
- PGP key updated.
- Worked on a bunch of the LCDUI code, this would later be deleted.
- Worked on Squirrel Quarrel, this would be sitting idle for the most part but it is a planned StarCraft clone (logically for the most part) for fun.
- Added an event and replay system for Squirrel Quarrel, which would be useful for tests and such when it gets there.
- Added some useful methods to the manifest class.
- Made a more optimized
BasicGraphicswhich does all the pixel drawing routines, this would later be deprecated. Still need to figure out a better way to do this with auto-generation or something.
- More work on the tokenizer.
- More LCDUI work, adding a bunch of things which would later be removed.
- Removed the
TemplateArrayGraphicsbecause it ended up being a huge mess. This is the more optimal solution but I think for the future instead of implementing all of the formats by hand, I might make a basic language or similar.
- Renamed the LCDUI demos to be a better name.
- Took awhile figuring out how alpha blending is to work and such.
PixelFormatfor LCDUI, this is still used today and is very useful.
- The LCDUI interface at the time used native widgets which meant that manual garbage collection and cleanup has to be used. This was later removed with a simple framebuffer.
TODO.note()which is used today, is useful.
- Pretty sure I redid the LCDUI interface again to simplify things, but naturally those changes were removed.
- Worked on more Java source code parsing.
- Base for building the structure of a Java source file.
- Added a palette for Squirrel Quarrel to keep it simple and colorful and additionally color-blind safe.
- More parsing of class files into structures.
- More token parsing.
- Redoing of the class structure interface.
- Updated the As-A-Runtime document.
- As a note, the test parsing stuff used the tokenizer and class structure to find test that are available. Of course this was complex.
- Made the source code limit 79 columns because it messed with
nanoand caused lines to scroll all the way left making them hard to read at the end of lines.
- Worked on expression and such for the Java source parser.
DEBUGuse a simplified and shortened location for traces because including the entire package took so much space on screen.
- More compiler work.
- Added a parser for
- Still more compiler work.
- Added a dumper for class files and such, for testing.
- More compiler stuff.
- Switch from my own code of conduct which was very punny to a more format and serious one: Contributor Covenant Code of Conduct.
- Made the source code limit 79 columns because it messed with
- I got a full-time job at IOpipe, so I removed the for-hire notice in my project. I started June 25, 2018. I was very happy for this moment.
- Since I was starting a new job, I had to finish off my retail job which gave me a ton of hours so my time was not as available.
- I decided to take a haitus on SquirrelJME to concentrate on life first, which I sort of did.
- I just worked on the annotation parser for SquirrelJME.
- My birthday was on July 6 so happy birthday me!
- I went to AnthroCon for my birthday, this is a furry convention and I had a wonderful time there meeting with friends and generally being happy.
- I moved to Pittsburgh this month as well (July 20), leaving a very abusive situation. I lived in horrible conditions and additionally it was a very dangerous and transphobic area (I lived in West Virginia). Since moving out my blood pressure dropped so much, I lost weight, and I got so much healthier.
- Had a mid-project crisis, effectively I found myself endlessly running around in loops and doing nothing. With my short time working at IOpipe I pretty much learned how to run a project myself.
- Started the SpringCoat VM, which has been finished for the most part and
was released in December under version 0.2.0. SpringCoat was designed to
be not the best implementation being a pure interpreter.
- You can read more at 2018/07/21.
- Nothing much was really done with SquirrelJME, however with better living conditions at the end of the month and learning things from my Job I was able to save SquirrelJME. Realizing that I was over-designing and doing things I did not really have a grasp for yet, basically climbing a mountain before I even learned to climb.
- This is the turning point for SquirrelJME as previously stated.
- I am still very much moving in and working my new job, still getting settled so not much was done at all. Just a few things.
- I read more of the class file data needed for SpringCoat since some things were not implemented yet.
- I cycled the Discord invite since I changed the starting channel to the about channel.
- In a community I helped manage, which took a bunch of my time since it was a volunteer effort, formed a giant angry mob and I was picked as the target. Despite the angry mob generally saying I was a friendly, helpful, and made their day better I was sent death threats and rape threats by people joining in on the "fun". I then left and since that took up some of my time, I was able to work on SquirrelJME more. Definitely learned a lesson in community management that you need to have a zero tolerance policy on toxicity since it starts to pool and then when it spills it is impossible to cleanup.
- This month was far more active since I was more adjusted to living in my own apartment and I had more spare time on my hands despite working a full time job.
- I corrected the developer notes calendar being wrong.
- More class file parsing which was needed by SpringCoat, luckily this code
is completely reuseable and that will be done for SummerCoat and such.
- Source code file the class was compiled from.
- Line numbers.
- Add a script to mirror Fossil's unversion space to GitHub Wiki, which is a very horrible and limited feature.
- Much implementation of SpringCoat, lots of work on instruction parsing and many other things.
- Added the now modern SquirrelJME API which has made it to release. This one is far simpler and definitely makes porting easier because of its simplicity and such.
- Implementing a bunch of methods in the library.
- Added the ability to run SpringCoat using the projects provided by the build system, this simplified running things because I could just launch them directly.
- Add some annotations
ImplementationNotesince it will be quite useful for the standard libraries that developers should know. Kind of a gotcha.
- SpringCoat used to be in the build system, but now it is an actual runtime library which makes it easier to use.
- Lots and lots of instruction handling.
DebugAccessAPI for debugging stuff, this helped early on even before printing was supported.
- Made the raw stack traces uses
intso that way it could more quickly be initialized rather than resolving everything.
- Implemented calling of the native API methods.
- Made the
DEBUGtext more condensed and easier to read since it took so much screen space.
- Deprecated the old service calls and such that existed before hand, these were incredibly complex interfaces and they were starting to go away.
- Added encodings ISO-8859-1 and UTF-8.
- Added base
- Added some missing classes in the CLDC.
- Implemented a bunch of CLDC classes like String and such.
- Added a link to my Mastodon account, since I did have my Twitter linked as well.
- Added a note that SquirrelJME is not Java SE and it cannot run Java SE programs.
new TODO()is hit twice, halt the VM and exit with a fatal TODO exit instead of infinitely hitting TODOs as the TODO is being handled.
- Added base for system property support.
- Corrections to stack map table parsing (for later verification although it is not used in SpringCoat).
- Added a guard for
DEBUGprinting so that way it does not splice messages. It would infinite loop with recursion and then fail, so it is just symbolized with a caret.
- Added weak references, which are useful for very short lived caches and such but not long lived ones.
- On September 23, 2018, with a minor removal of some code which causes TODOs to fire the first ever running instance of SquirrelJME in all of its history happened. This was very exciting even though it was a simple hello world.
- More stack map parsing fixes.
Throwable's stack trace printing much cleaner and easier to read.
- Worked on
Formatterwhich is very complex, but not yet complete fully.
- I supported EBDIC 037 just for fun, it was interesting.
- Removed the old WinterCoat which is in C, this will be replaced by the eventual RatufaCoat later this year.
- Simplified the licenses.
- An actual logo for SquirrelJME drawn by Kat Adam-MacEwen, she did a wonderful job!
- I found out that the Fossil to Git conversion failed due to the
x-new-yeartags being duplicated which made all the tags go away in Git. It is valid in Fossil to have duplicate tags, but since I want it to work in Git I removed all of them.
- I additionally added the tag
x-date-201807because I forgot it.
- I updated the SquirrelJME Patreon and made it much better using the new logos and such.
- Made corrections to class name handling.
- Much more library work to make things better.
- On September 29, I made the same demo as before run but without commenting and code out, so it ran as is.
- Made the public key a markdown document for easy access.
- Added TAC which is a far simpler test framework, easier to implement and saved a bunch of time.
- Corrected the documentation URLs because they were not correct for Markdown.
- Test projects are now just MIDlets instead of being parsed through source code, this made it very simple.
- Implemented class resource lookup.
- Implement more SpringCoat instructions.
- Implement more CLDC classes.
- Wrote the backing bucket map for the various map methods which use the same base for classes.
- Correct the auto-flushing of
PrintStreamsince it was very odd.
- Corrected out of bounds array access throwing the wrong exception.
System.exit()being called in the VM.
- Deleted a bunch of the old and defunct JIT related stuff, it was nasty and it was also very moldy and stale.
- Removed an old interpreter I never really started, SpringCoat is the current VM.
- Refactoring and moving around of the project layout.
- Removed the old IPC based system call interfaces.
- Removed all of the old kernel code along with the IPC interfaces.
- Added a system call to get the Operating System type.
- Added base setup for database access, for Windows and Palm OS.
- Cycled CryptoCurrency addresses due to CoinBase changing things, this is for crypto donations.
- Corrected projects not being compiled properly due to missing projects and classes.
- Added notice in
asruntime.mkdstating that is out of date.
- Removed the LCDUI server based code, to later be replaced with a framebuffer.
- Lex has been completely redone by Kat Adam-MacEwen and gosh she made him look so handsome. Really greatful for her work.
- Added a runner capable to running every single TAC test.
- Added support for multiple suites and such in SpringCoat.
- Implemented uninitialized
thisin the stack map parser.
- Removed the old interpreter project, it was never used or worked on.
- Added the
ProgrammerTipannotation to help the developer out.
- Made class
instanceofactually be correct in SpringCoat and the library.
- On November 3, Mu and SquirrelJME became sister projects. We both released on December 25, which was very cool.
- Work on the common collections.
- Added base math needed for
- Implemented a bunch more missing instructions in SpringCoat.
- Implemented square root calculation, which surprisingly works.
- Implemented more library routines.
- Added the ability to launch new tasks in SpringCoat via SWM.
- Added an easier to use Base64 decoder method for quicker decode without messing with streams.
- Draw a bunch of fonts for the LCDUI interface.
- Stopped using BDFs and instead used PCFs, however this was short lived because PDF is too complex.
- Switched from using 0.0.2 to 0.2.0, so release versions could be done such as bug fixes.
- Added profiling to SpringCoat so things can be run in VisualVM, this helped find slow points and actually was useful for debugging.
- Reordered all of the errors.
- Added base for compressing ZIP data although it just writes compressed streams with no compression, this was needed by the profiler since it uses GZip in its snapshot format.
- Removed a bunch of thread safety from the ZIP classes, this improved performance.
- Removed a bunch of
- Implemented ZLib compression, which is used by the profiler.
- Implemented more library classes.
- Refactored decompression routines to be faster and easier to use.
- Added distinct array types for SpringCoat, greatly reducing memory and increasing array speed.
- Added native VM array wrapping for SpringCoat, so inside and outside of SpringCoat could access the same array data.
- Implemented a shaded VM which exists within a single JAR, this would later be used for release.
- Additionally made two variants for the shaded VM: Java SE and Java ME.
- Wrote a bunch of documentation on building.
- Implemented a bunch of the LCDUI launcher to run other programs.
- Added a common VM project since a bunch of things will end up being reused by the other VMs.
- The common VM can be initialized by a factory, this unifies the VM interfaces and allows for easy switching.
- Added date to output ZIPs although it is not valid, because
pack200fails if the date is invalid for the ZIP.
- Implement a bunch of LCDUI stuff.
- Threads can now be created in SpringCoat.
- Added a more optimized VM graphics call via serialized graphics so the host VM does the drawing instead of the code in SpringCoat.
- Added the ability to invoke static methods.
Threadhandle all of the thread starting code.
Object.wait(long, int)having the wrong signature.
- Learned that notifying on an object does not relinquish the lock it just sets a flag, I learned something new.
- Optimized the Java manifest reader because it took lots of time.
- If in the source tree any file ends with
.__base64it will be decoded and stored in the JAR. I do not like binary files in source repositories and also it cannot be printed in books.
- Made a bunch of adjustments to the font to make them look nicer.
- Removed unused font characters, saved space.
- Instead use files ending in
.__base64) and decode those into the output JAR.
- Refactor MIME file decoding to be line based and generally much faster and simpler.
- Reading of PCF data in the LCDUI code, however I found that it is very complex of a format and would be too complicated and slow for SquirrelJME to use. So I made a new format called SQF which is smaller and easier to read.
- Lots of font related work.
- Corrected the hosted launch script because it was wrong.
- LCDUI work.
- SquirrelJME was released on December 25 along with Mu.
- Lots of PCF to SQF conversion work.
- A bunch of LCDUI work which would be later be refactored.
- Made LCDUI much simpler by refactoring the layout code which made everything look much cleaner.
- Implemented more library classes.
- Implemented monitors and support for
- Implement a bunch of API methods.
- Implemented the service loader.
StandardErrorinto one, this was much easier and removed duplicated code.
Flushableit is not in Java ME and should not be there at all.
- Added an API to get the executable path of the JAR or program.
- Redid the LCDUI draw stack to be much better.
- Removed the old graphics routines.
- The shaded JARs now use the run-time instead of test so that way it is smaller and the hundreds of tests are not included.
- Corrections for the scripts on Mac OS X and make it work there. Sed on Mac OS X is weird.
- Implemented more of the launching and ways to go back to it.
- Added a scheme to gain control of the display via the event loop and get it back.
Timerwhich took a bit.
- Update the contributing document and simplified things because it was too complicated.
- Hid Squirrel Quarrel as it is not ready.
- Refactored the project layout and moved everything around.
- In the bootstrap handle MIME files as well by including the MIME decoder in it, this makes the binary files in the source worked because fonts used it and the code crashed due to missing fonts.
- Added launching to the build system so it works on every system.
- Added shading to the build system rather than being in an external script.
- Removed invalid project references.
- Added SquirrelJME to CircleCI and have it run each project for testing to see if it builds. Since CircleCI is time limited for the free tier, going to wait for a faster VM because otherwise it would consume all of the available time.
- Implemented the encoders and decoders for UTF-8.
- Added a means to grab files from the SquirrelJME source tree.
- Added usage instructions for the various builds.
- Added a release script.
- In the VM, allow
libto be specified in
user.dirand the executable path instead of just one or the other.
- Released SquirrelJME 0.2.0, yay! This is very exciting and it has been a long time coming. Mu was also released here, which is a cool project.
- Added the base for SummerCoat VM.
- The year ends now.
Okay so this took about three hours to write, so it was quite a bunch of work and now I am hungry again. It was fine but then it turned into a changelog. But next year it should be much cleaner.
I suppose I will work on SummerCoat. First I will start with a base VM manager of sorts which is at the upper level.
I need a name for the main class which contains the "containers" for each running task. It is kind of like a hub. It will run multiple virtual machines as their own individual tasks with their own memory and such.
Pretty sure I am going to need a compiled register representation form for class files and such. This could be cached and be allowed to be dumped into caches for faster operation. It could just act on a per-class basis which would be pretty simple. Although it would need to manage linking and such. It definitely needs to be cacheable, it also definitely needs to be reused by later parts of the virtual machine. Like so I can just dump things into a ROM file, which would be used by RatufaCoat. That would be really important. Then if I do caching of the ROMs and put the stuff on the filesystem then pretty much what I can do is make subsequent executions much faster if there is an available filesystem.