Adjust sourcize.c to use _snprintf if using MSVC.
[SquirrelJME.git] / history.mkd
blob3b586c67515de4428db51169ac348eff9a93b61e
1 # History
3 SquirrelJME is an idea and execution that extends from previous ideas and
4 projects. The base idea extends from my desire to write an operating system to
5 run on systems, since such things have fascinated me.
7 # Old Projects (2011/01/15 - 2016/02/25)
9 These are old defunct projects which I have previously worked on.
11 I will say that it can take years before you can find a project you enjoy
12 working on and one that inspires you. Keep searching. Just be careful where
13 you step and do not take in more than you can handle.
15 ## HandOS (2011/01/15 - 2011/01/22)
17 This was an attempt at creating an open source implementation of Palm OS.
18 Palm OS was not actively used much often and additionally existing emulators
19 for Palm OS are sub-par in that they were either old or were horribly out
20 of date. The goal of the project was to run m68k and ARM Palm OS applications
21 on the host system.
23 The project was fully structured and had all the default applications in place
24 as placeholders for when they were ready.
26 However, the project could not actually be compiled, it was mostly pretty much
27 just placeholders, some reference documentation, and notes. It did include
28 some tests which showed that threading was indeed possible on Palm OS like
29 modern systems.
31 ## MPA Orange-Sapphire (2011/12/12 - 2011/12/13)
33 This was a very short project which never really took off. It was intended
34 to be an operating system written in a BASIC-like language. Obviously BASIC
35 is rather horrible compared to the languages of today.
37 ## MPAYAOS (2012/02/20 - 2012/02/29)
39 Standing for __Yet Another Operating System__.
41 This was a short attempt at another operating system, it never really got
42 past the bootloader stage. It was written in C.
44 ## HandNIX (2012/05/28 - 2012/05/29)
46 Standing for __Hand UNIX Environment__.
48 This was an attempt to make a UNIX-like environment for Palm OS so that I could
49 do development for my projects on Palm OS. It existed as a single C source code
50 file.
52 Only a few things were implemented. The major thing which was implemented was
53 a basic cooperative tasked system which was based on Palm OS's versions of
54 `setjmp` and `longjmp`. There also was a basic terminal emulator which did not
55 support any escape sequences.
57 Every POSIX command that existed on the system was referenced via a function
58 pointer and the intention was to have virtual files (via `#!`) which would
59 execute those internal commands when requested. The environment would have
60 started on the shell (`sh`) which would then be available to execute other
61 programs.
63 ## HandOS 6.3 (2012/05/31 - 2012/08/17)
65 HandOS is a clone of Palm OS, however the main purpose of this project was to
66 implement the only released in a simulated environment: Palm OS Cobalt.
68 It was written in C and it required the Palm OS SDK for compilation.
70 I did not have headers for Palm OS 6, so I was writing the headers from
71 scratch.
73 ## MPAPCOS (2012/09/30 - 2013/01/16)
75 Standing for __Posix Compatible Operating System__.
77 This was an attempt to write an operating system which was compatible with
78 POSIX:2008 and could run such programs. A C preprocessor was written and some
79 basic utilities were supported, but generally that was as far as it got.
81 ## HandOS 5.6 (2013/01/23 - 2013/02/05)
83 This was another attempt at writing a Palm OS clone, it did not get very far.
84 There was basic project structure but not much else.
86 ## MPAMSEK (2013/03/31 - 2013/04/14)
88 Standing for __Multi-System Emulation Kernel__.
90 This project was I believe to write an operating system which could run many
91 other operating systems in a very bare bones emulated environment to run as if
92 it were on native hardware. Basically, you would boot into a system and instead
93 of running an OS with an emulator running on it, the emulator would be
94 directly running on the hardware.
96 I only really got a basic system launch on PowerPC's Open Firmware. I was able
97 to print to the system's framebuffer console but not much else.
99 ## MPAOSKP (2013/04/14 - 2013/05/15)
101 This project is based off MPAMSEK.
103 I am not too sure what the acronym stood for, very likely it stood for
104 __Operating System Kernel Project__.
106 I wrote a memory allocator but it never really got past the boot loader and
107 early kernel initialization stages.
109 PowerPC and x86 worked on Open Firmware.
111 I failed to get SPARC working, I could just not get the bootloader to run
112 properly and it usually ended up just crashing or not working at all. It may
113 have been related to register windows.
115 I thought about writing a C compiler but I gave up quickly and abandoned that
116 idea because that would be too much work with too little of a benefit.
118 ## POSIX Environment for Palm OS (2013/07/25 - 2013/07/27)
120 This project was essentially similar to an earlier but was a POSIX environment
121 for Palm OS. By reverse engineering bits of Palm OS previously I determined
122 that some things were very possible. For Palm OS 5 I had pretty much a concept
123 background threading and server system. Basically a daemon would be launched
124 in the background which would keep the environment running. There would be a
125 connection made to the daemon with locks and semaphores. There would then be
126 a terminal interface which would show what was being output to the console.
128 There would be threads in the background running tasks. However to access the
129 server process a pointer would have to be remembered. This is where the
130 feature manager was used to keep a persistent handle in memory so the daemon
131 could be connected to. I determined that it was very important to be able to
132 switch programs outside of the environment.
134 For SquirrelJME on Palm OS, I have an idea to do something very similar so
135 that it runs in the background while other applications may be used.
137 ## POSIX Environment for Palm OS (2014/10/12 - 2014/10/12)
139 This project never went past a few files and headers. The purpose of this
140 project was the same as the previous.
142 ## k5 (2013/12/25 - 2014/04/25)
144 This project had 503 commits.
146 This is basically the start of my delving into Java virtual machines. It was
147 written in Java and was pretty bloated when it came to the compiler, using very
148 abstract concepts for compilation. It was to target Java SE but I am not too
149 sure which version it was for. Very likely it was Java 7 as Java 8 was released
150 shortly before this project ended.
152 I never really got past the JIT stage in the project. It was also quite massive
153 of a project.
155 Anything that was made for the documentation was written in LaTeX, which is
156 far less friendly compared to Markdown.
158 ## k8/Squirrnix (2014/04/26 - 2016/02/25)
160 This is the direct predecessor to SquirrelJME. Utilities and classes in
161 SquirrelJME have been derived from this project. Generally if I find a class
162 which is missing in SquirrelJME I check this project and copy all the code
163 from there since the bulk of it is just placeholder.
165 This project had a massive number of commits: 9041.
167 It intended to implement the entirety of Java SE 8 with all of its profiles.
168 This was for the most part a very unrealistic goal. As with _k5_, it never
169 really got past the JIT stage. The massive requirements in place were
170 unrealistic. This project was doomed for failure even when it began but I was
171 a bit foolish to take up this task.
173 # SquirrelJME
175 ## Starting Background
177 SquirrelJME stems from the following ideas:
179 I had a growing fascination with J2ME. I had an old cell phone which could run
180 J2ME applications. I would make a few concept projects but they did not last
181 long because programming for J2ME is quite horrible as it is very lacking when
182 it comes to Java. I did have the idea of writing a virtual machine that could
183 run J2ME applications so that I could use some again.
185 Another thing is that the write once and run anywhere aspect of Java pretty
186 much fascinated me also. The idea of writing a program once and having it
187 work pretty much everywhere was indeed interesting. I wanted to do this with
188 _k8_ but it was not really a feasible thing to do because it was so gigantic.
190 However, there was much frustration with my then current project _k8_. It was
191 gigantic and the number of classes to implement was essentially an impossible
192 mountain to cross. There was a growing sense of doubt that the project would
193 never get anywhere because it had unrealistic goals that would be impossible
194 for a single woman to obtain all by herself. I calculated that it could take
195 perhaps up to a decade to implement the core classes of Java SE 8. By a
196 decade's time, Java SE 8 would be obsolete and nobody would be using it anyway.
197 So this compounded a wasted effort. Additionally, being a third-party VM, there
198 would quite literally be very little interest in it, so it could not be for
199 fame. Basically it was too much and too ambitious of a project and sadly it
200 took two years to realize that.
202 Near the end of the project's life span I was a very depressed person, I felt
203 like the project was a complete waste of time and that life was rather
204 meaningless. I felt trapped working on the project with no escape. My life was
205 melting away into nothingness and worthlessness. I did not want to admit that
206 the project was a failure and would be going nowhere, I was naive.
208 In February of 2016 I watched Hack Summit 2016, it was pretty much the first
209 online conference which I have visited. It was really exciting. It did move
210 me a bit. However, I think the one talk which really moved me was the one by
211 _Sarah Allen_ (you can see her on YouTube here:
212 <https://www.youtube.com/watch?v=S1iYeThQO-g>). It really resonated with me.
213 It has really given me the light shining through my own fog to realize that my
214 own project was ruining my life. After that I decided that my own project was
215 not something I really wanted to do, that my ambitious goals were not even
216 caring for myself. I decided that I should care more about myself and that I
217 had to cut my project loose.
219 When that happened, I was still so very much interested in Java and having
220 write once and run anywhere, portability and virtual machines. I found Java to
221 be very awesome. I knew that _k8_ would never fit on the systems I would have
222 liked to target. I got the motivation to push Java as small as it can go. I
223 knew the gigantic size of _k8_ was too much, so I decided to switch to the
224 small scale. I remember my fascination with J2ME, I wanted to clone that
225 environment because I found it interesting. Java was seen as this gigantic
226 bloated monster that ate so much CPU and so much memory. But working with the
227 JVM so much made me realize how wrong it was. Java was in fact very small and
228 very light. J2ME was very light and very simplistic.
230 The first thing to do is determine has J2ME been updated ever? To my surprise
231 it actually was updated for Java 8. So this was quite something. Although it
232 was not really a microscopic Java 8 VM it was Java 7, which was good enough.
233 It added extra classes and was in general quite cool. JSR360, which is the
234 specification for Java ME 8 was proposed on October 2, 2012. The final release
235 was made on April 30, 2014. Java SE 8 being released on March 18, 2014. So
236 Java ME 8 came out very shortly after Java SE 8. However, with Android and iOS
237 being everywhere it never really stood a chance and Java ME 8 never really got
238 the chance to actually be anything.
240 I decided to study Java ME 8, to see if it was indeed viable. I took a quick
241 glance at it and then deeper dives into it. Java ME 8 imported quite a number
242 of things from Java SE 7. It basically was bringing it up to date with the
243 modern Java language rather than languishing in the past. It did remove some
244 things but, in the essence of compatibility those could still be brought in.
245 These removed things were stuff such as LCDUI, which were pretty much
246 nowhere. It took a bit to verify compatibility but the changes made do not have
247 an impact on backwards compatibility. As such this was a bonus.
249 One added bonus that I liked is that Java ME was so small compared to Java SE.
250 It is very tiny and extremely compact. Basically what is in the language is the
251 bare minimum sane choice. I will say that there are some errors and perhaps
252 some omissions but in general it has been rather good. The thought of Java SE
253 being implemented and the gigantic task I knew was impossible and the small
254 size of Java ME is actually is within reach. The small number of classes, up
255 around 512 classes for the standard makes it very reasonable. This estimated
256 512 classes is about half the size of Java SE 8's compact1 and does not include
257 things such as SQL. I really liked the fact that it gave you the minimum set
258 of classes and you could just bring your own classes in if you care about it.
259 Personally, I do not really care for SQL and stuff like CORBA because I do not
260 often use them at all.
262 ## Naming and Mascot
264 The name _SquirrelJME_ comes from the fact that I personally find squirrels to
265 be very interesting and curious animals, not to mention that they are cute.
266 Where I used to live I would see squirrels all the time so they were quite
267 common, although where I live currently as of this writing I do not often see
268 squirrels.
270 Originally my plan for a mascot at least for _k5_ or _k8_ would be to have a
271 pink bunny rabbit in reference to _The Legend of Zelda: A Link To The Past_.
272 In this game there is a region that you can enter called the _Dark World_ where
273 every human who enters is transformed into an animal that reflects their
274 inner self. I then switched my idea to having the mascot be albino because
275 these animals are a bit more rare (since they are more easily predated in
276 nature because their bright white fur stands out). Then when _SquirrelJME_ has
277 come around I decided to keep the same mascot but make him a squirrel instead.
278 So the green tunic that Link wears is a reference to the Zelda series.
280 It was difficult finding a name for him, as such I initially decided on just
281 placeholder name for awhile. I thought about _Lexer_ but that was quite long
282 and slightly complicated, so I shorted it to _Lex_. It was nice and for the
283 most part the name stuck since I was happy with it. Therefor it was never
284 changed.
286 He was uploaded on 2016/05/07 to the repository.
288 He has subsequently been redrawn on 2018/10/19 by Kat Adam-MacEwen, where he
289 ended up very handsome. She is quite a wonderful artist.
291 The C based virtual machine **RatufaCoat** was named by _meepingsnesroms_ of
292 the Mu project. Ratufa being the sub-species of squirrels in southeast Asia.
294 ## Gaining a Sister Project
296 On 2018/11/03 the developer of Mu, _meepingsnesroms_, wanted to become a sister
297 project of SquirrelJME, so this was very exciting! The link to her repository
298 is in the [readme](readme.mkd)! We will be cooperating mostly by word of mouth
299 by linking to each other's projects to hopefully gain interest in both of our
300 projects.
302 ## The First Release
304 The first version of SquirrelJME was released along with Mu on
305 December 25, 2018. The repository had 10,571 commits. This version spent
306 two years in development.
308 This release was mostly just a demo to show that SquirrelJME exists and that
309 it is being worked on. It is very primitive and not much can be done with it.
310 From the release though there has been slowly increasing interest in the
311 project since there are not many emulators that support J2ME that exist and
312 are actively worked on.
314 ## The Second Release
316 This is the currently being developed release. In 2019 without knowing the
317 calamity of the year 2020, I put down here:
319 > It is expected to be at most in development for two years and six months
320 > in development.
322 Naturally, as of this writing I am now at the two years and six months mark.
323 Having lost probably a year of productivity during 2020, this will definitely
324 mean this release gets pushed back.
326  * [There is this article here you may read](assets/articles/anewvm.mkd)!
328 ### 2019
330 The history from January to June was taken from a note, although it was never
331 completed.
333 #### January
335 This is the month that was right after 0.2.0 was released. I started the
336 initial work on SummerCoat which has taken pretty much the entire year and
337 more to develop, it is a really complex system and it really shows. From
338 this run I had the initial SCRF compiler which would eventually be thrown
339 out and which would result in the current compiler that I wrote. I even
340 had a base project setup for RatufaCoat at the middle of January. I also
341 performed some refactoring of the compiler stuff as well making it cleaner
342 because it did get a bit messy. I did get method processing put in but that
343 was later split apart because wow it was complex. Also added a bunch of
344 new tests and implemented parts of the class library since they were needed
345 for the VM to function. I figured at this time that I should write a compiler
346 which is not all that optimized to keep it simpler, although today I do have
347 basic optimization in place. For CircleCI I put in JUnit reporting for the
348 tests that ran which has been around for awhile now. Also, for the tests that
349 run within the VM, the profiler snapshots are stored as well so that way
350 I can determine how fast stuff has been running accordingly. I defined an API
351 level for 0.4.0 but eventually later in the year I determined that the API
352 stuff is too complex, so I opted for the much simpler system call stuff.
353 I added system properties support for SpringCoat since I needed to enable or
354 disable debugging.
356 #### February
358 More work was done with SCRF. Added the ability to launch tasks with system
359 properties and such. SummerCoat VM went through a slight refactor as well.
360 Some of the stuff that I worked on this month have somewhat survived to the
361 end of the year such as the stack map stuff which worked well. I mostly just
362 implemented a ton of methods. Not much here this month.
364 #### March
366 This month was very rough for me because I had gotten laid off at the start of
367 the month and it was devastating to me. I pretty much still worked on this
368 project because it helped me get through the rough times and it also acted as
369 a resume for me as well. I was in and out of depression so I did not exactly
370 work on this every single day as I was job hunting as well.
372 One big thing I did was remove `tool-scrf` and put it in `tool-classfile` and
373 built it up from that. I know in 2020 I will be pretty much splitting that
374 back out and writing a far more streamlined compiler which hopefully is faster
375 and more efficient as well. This is where the `MinimizedClassFile` started
376 from so it has quite been around. It is still around and it has always been
377 improving from this point. SummerCoat had this class library kind of thing
378 that basically cached single classes and such I believe in memory. I know with
379 the compiler refactoring I brought stuff back in from SCRF since it still
380 worked just fine. For the class file stuff I implemented more things that were
381 missing such as the exception handler. I had all of the narrow and long stuff
382 which was a bit confusing, I know later this eventually was removed because it
383 was just impossible to handle while keeping things simpler. I know today that
384 everything is 32-bit for the most part. I also worked on the graphics stuff
385 too, which is interesting. This was even the advanced graphics stuff. This
386 graphics stuff needs to be refactored but that will get done eventually.
387 I also worked on Squirrel Quarrel when it was a Starcraft clone still, but now
388 today it is more of its own original game that I have planned. You could kind
389 of play it and command units I think and such. For graphics I added a
390 serializer so that it could be done by the host VM, being faster. I may do
391 that again for SummerCoat although it would be a bit more difficult. This
392 was also when I was more going twords <https://squirreljme.cc/> instead of my
393 standard domain that I use. I also am actually glad the complex type handling
394 was removed from SummerCoat. Even reference queues and such were their own
395 instructions, but now that is different.
397 #### April
399 At the start of this month I did some fixing of the class parser. I did lots
400 more compiler work. More library methods were implemented.
402 I renamed my Twitter and used my `MultiPhasicApps` handle for SquirrelJME
403 stuff, which actually helped me much.
405 I worked on the graphics stuff. Implemented some base record store stuff which
406 was nice. Refactored XPM and PNG image loading. Added a Null Audio system.
408 Lots of more compiler work.
410 Later in the month I completely refactored SummerCoat, it pretty much should
411 be the same as it is today just more worked on.
413 Also corrected testing stuff.
415 At the end of the month I put a bunch of work into the fonts too, I did so
416 much with them! I actually still need to finish the symbol fonts a bunch too.
418 Also kinda glad I do not have class IDs and such today as well.
420 #### May
422 More font stuff, yay!
424 This month I added the concept of BootRAM and this has actually simplified
425 things making things easier to load and such.
427 Added some more implementations to methods as well and HTTP support!
429 Also big refactor of the testing framework, which ended up going rather
430 nicely. I also added my first sorting algorithm which was ShellSort. However,
431 I guess now there is just block sort which does nothing? Oh wait no
432 there is ShellSort.
434 #### June
436 The notes stopped before June, so this and anything following was written
437 much later on at the end of 2020.
439 This month there was much work done on RatufaCoat and SummerCoat since they
440 are shared. The compiler has seen a number of changes as well. There was much
441 going back and forth, fixing things, and debugging things. A compiler and
442 virtual machine combination is very complex. Additionally, at the end of the
443 month SummerCoat got profiling output.
445 #### July
447 This was the month when I was hired for my second programming job, as such
448 from work there has been a great reduction in available time to work on
449 SquirrelJME. However money is important, I was a single month away before
450 I would have ran out which would not have been good.
452 At the start of the month I worked on Squirrel Quarrel a bit, I am assuming
453 at this point I was to make it a turn based strategy although it may have
454 been a real time strategy.
456 I did port RatufaCoat partially to Palm OS however it was not really
457 functional and there were a number of limitations. Other than that, there was
458 more minor work on SummerCoat/RatufaCoat. I decided it would be best to
459 split the constant pool into a static pool with a run-time pool, that is still
460 here to this day, however it is something that has simplified and reduced the
461 need to load everything at once.
463 However due to my new job, the month mostly just had progressed at the start.
465 #### August
467 Due to my job, there was little progress this month. I worked a bit on the
468 compiler, refactoring it and otherwise.
470 #### September
472 This month more work was done on the compiler, mostly with fixing bugs,
473 making it better, and other such things. I did do much more than what I did
474 the previous month however.
476 Unrelated to other things, I did put in support for a demo that requires a
477 proprietary JVM to run a game.
479 #### October
481 Worked more on SummerCoat and attempting to get it booting up and otherwise.
482 This would prove to be very difficult for me to do.
484 Otherwise, not much was done this month.
486 #### November
488 More work on SummerCoat and such, there were optimizations and fixes.
490 Most of this was done during the holidays where there were few days off.
492 #### December
494 Very much this was more work on SummerCoat. It was much work and I was
495 getting more and more burnt out from working on this.
497 ### 2020
499 Virtually everyone who has spent some time in 2020 will know how rough the
500 year has been, there were no exceptions for myself.
502 #### January
504 I worked a bit more on SummerCoat but slowed down greatly, I decided to
505 implement some other classes and such.
507 #### February
509 This was a difficult month... my close friend Emily passed away at the start
510 of the month. I was devastated and was broken from it, I remember being at
511 work and hearing the news and I sunk in my chair. I remember going outside
512 and sitting on the small bench employees went to for their break. I broke
513 down and cried. I remember calling my fiance and asking her to pick me up
514 early from work. I knew she could tell that something was very wrong. I
515 stuttered to tell her. My fiance comforted me so much. I still think of Emily
516 often and I feel an emptiness inside of me when I do so. Typing this is
517 difficult, but... I will remember her always. She was a close friend to me
518 and we would talk so often. I do know that she was very thankful to have me
519 as a friend. I hope that she is resting in peace.
521 Being devastated, I did my best to distract myself.
523 I remember just sitting down and was thinking how many months have gone by
524 working on SummerCoat and such, being in an endless loop. I decided to change
525 how I was doing SquirrelJME to use more modern development tools. I had always
526 previously wrote it using a basic terminal and a basic text editor. I decided
527 to make the switch to IntelliJ, which I can definitely say made development
528 much easier. The first most important thing to do was to setup the Gradle
529 build system, which I was doing. I never went with Gradle in 2016 because
530 it was too limited, however in 2020 it has gone far enough in development to
531 where it could work well with SquirrelJME. I did major cleaning up and
532 otherwise. Organizing things and setting up testing like I had before. I 
533 setup a basic JNI wrapper for native calls since I need to do SquirrelJME
534 things in Java SE to run them properly. I worked a bunch on the dependency
535 system and otherwise, building a SquirrelJME plugin that could do everything
536 I needed. I additionally started development in branches so I could do
537 multiple things back and forth, this would help at times with ADHD.
539 #### March
541 SquirrelJME for the time was keeping me distracted much, my fiance was there
542 for me as well. At the start of this month I married her, so from now on she
543 is my wife. I know she has helped me get through this year so many times and
544 I love her very much. We married the day before lockdown, we were very lucky.
546 For SquirrelJME, I continued on the Gradle work. By the second I had already
547 merged in all of Gradle changes. It did feel good the direction this was going
548 and it was the start of taking a new path. I know there were many thoughts to
549 when I started SquirrelJME, how it was basically started from the realization
550 that I was going nowhere with my SummerCoat work. So that was shelved for
551 awhile.
553 I started work on bringing up SpringCoat. This would involve a large number
554 of refactors and otherwise, to improve the old virtual machine I was intending
555 to originally remove. I decided it would be best to keep SpringCoat because
556 it is an additional vector into making sure things are operating. At least
557 with the optimizations I have done it much quicker. I effectively continued
558 it throughout the month. I made much progress. By the end of the month much
559 was done but there was still a way to go.
561 #### April
563 This month started with continuing the refactoring and upbringing of
564 SpringCoat. For the most part it was continuing but at a slower pace.
566 #### May
568 For the most part, I continued work on bringing up SpringCoat. However after
569 about two months of working on it I realized that I was falling into the same
570 pit as before with SummerCoat. So I decided to backpedal and start a new
571 branch which was effectively cherry picking what I did. This was the second
572 half of the month.
574 I had previously rewritten TAC, which that was cherry picked. I picked up
575 some other things, but I suppose a bunch of it was dropped. This is okay
576 though. This cherry picking was merged into `trunk`.
578 I additionally at the end of the month did a bunch of syntax and miscellaneous
579 cleanup, this was a nice way to organize.
581 At the very end of the month, I decided that I needed to do this another way.
582 So SpringCoat was very high-level and SummerCoat was very low-level, but it
583 was difficult to bridge these together. So I decided on an idea of having a
584 Mid-Level Emulation (MLE) which would bridge the gap. This is still around
585 to the time of writing, so it has definitely been a good decision.
587 #### June
589 The first half of the month, little progress was made as I was mostly thinking
590 about the best way to do things. It was thinking from nothing again, but I
591 eventually figured it out. I did so some refactorings and such naturally.
593 However the second half of the month, I did much more work. I improved testing.
594 I wrote new APIs for SpringCoat and put these on the emulation layer. I
595 decided that it would be best if SpringCoat not do any `Assembly` stuff since
596 that was complicated and I did not want to handle that for now. I did end
597 up doing much work on SpringCoat as well. The speed increased more and it
598 was much better.
600 At the very end of the month, I worked on utilities to replace the old
601 shell scripts so that I could develop purely on Windows rather than a Linux
604 I continued to do much more work on Mid-Level SpringCoat and eventually merged
605 everything in accordingly! It was a very nice feeling.
607 #### July
609 This month was my birthday month but also I started work on Mid-Level LCDUI
610 Refactoring and work on access control. Also the ability to launch tasks
611 was added as well in the access control branch. Otherwise the Mid-Level LCDUI
612 work is basically a complete refactoring of the LCDUI code. Before I had
613 something that was too high and native while another that just used the
614 framebuffer. So I decided to take a path that would allow both. For now it is
615 based on Swing but it is very possible for it to be backed on a Framebuffer.
616 Naturally for what is running on RetroArch will be using the framebuffer along
617 with any system that lacks native widgets. However, for the systems that
618 support it, it will effectively reduce the work that is needed to be done to
619 make everything consistent to make it feel like it would be for that
620 operating system.
622 The access control stuff carried on a bit and I decided I could really use
623 what I wrote via the tasks, so I forked off that branch and merged that into
624 `trunk`. I then merged `trunk` into the other branch. So this way whatever
625 work I done could be used. Since access control is not too important. But
626 otherwise, I made improvements there.
628 Near the end of the month I started on a slight refactor to RatufaCoat
629 and switching it to CMake. Using CLion which is a very nice IDE, it should
630 make it easier to work on it. It took about two days to do all of this so
631 it was a really short-lived branch. But other than that, it did pave the way
632 for refactoring of RatufaCoat. Regardless though I took a short break on
633 the LCDUI stuff since I have been working on it for awhile.
635 On the 28th, I spent a day working on a user guide and a FAQ to answer some
636 questions. This gets synced to GitHub accordingly. Something I feel is
637 important since people tend to ask a bunch of questions about this.
639 #### August
641 This month I continued work on the LCDUI refactoring. I also started a new
642 branch for refactoring the handling of the many virtual machines
643 and the means for testing it. This work has been very helpful as I still use
644 it and it is helping me progress and making sure everything is tested.
646 I also additionally started work on refactoring RatufaCoat which is ongoing
647 but that is expected as I wanted to start some of it through interest despite
648 SummerCoat itself not being ready. Of course once SummerCoat is ready I will
649 likely work on this.
651 But majorly the month was spent on the build refactoring.
653 #### September
655 This continues the build refactoring and by the second week of the month I
656 merged it in. It has been very beneficial. But from doing this and taking a
657 break from the LCDUI work, I continued work on that. Pretty much the entire
658 rest of the month was working on this.
660 #### October
662 This month continued the LCDUI work. At the start of the month I removed a
663 bunch of the old code as it was no longer needed. Other than the LCDUI work
664 I did some additional changes to the CI/CD pipelines. Progress on the LCDUI
665 was scattered though and was generally slow to progress.
667 #### November
669 This month at the start was more of the same, working on the LCDUI. However
670 after about half the month the branch was merged in. It was not 100% however
671 it was at a level I was good with and I did not want to drag it on for more.
672 So I took what I had and merged it in.
674 By the end of the month I started work on building the SummerCoat ROM, this
675 was a combined image file and otherwise that would be needed by SummerCoat.
676 This was mostly just to get the tasks running but not a ROM that could actually
677 be ran. However I did merge this in.
679 After that, at the very end of the month I started working on Mid-Level
680 SummerCoat. Like MLE SpringCoat, this was a refactor and simplification of
681 SummerCoat, so I could get things running again.
683 #### December
685 This month I continued work on Mid-Level SummerCoat, although work has been
686 scattered. I have been making very good progress on this however, since
687 whatever progress I make is good.
689 Other than that, at the end of the month I started work on doing the completion
690 counts which would be used to determine how far I am with standard API
691 implementations and otherwise.
693 Near the very end of the month, publishing was added to Maven Local, BinTray,
694 and OSS SonaType. This would allow documentation to potentially be downloaded
695 or browser, but will mean that SquirrelJME can be consumed by others. There
696 were additional fixes to task launching.
698 ### 2021
700 This was written up until August 3 years ago, as it is now 2024, however I
701 am completing it now. A few years to catch up but they were quite some years.
703 #### January
705 I finished up the end of the year fixes on launching on the first day of
706 the month.
708 I essentially spent this month working on mostly SummerCoat, would say good
709 progress was made on this.
711 There were minor fixes to the RetroArch build.
713 I planted roots for better graphics handling that would allow for more
714 accuracy and acceleration.
716 #### February
718 I started the month working on SummerCoat, but also decided I wanted to work
719 on RatufaCoat as well. So half of the month was dedicated to each. Before
720 this point, the RatufaCoat work was based on `trunk` but I then switched it
721 to be based on the SummerCoat WIP since there would be no other way to
722 reliably work on it. I also did major CMake work on this branch, since it is
723 a very nice build system.
725 #### March
727 I continued work on the RatufaCoat branch, making good progress and cleaning
728 up accordingly. 
730 I discovered that there is an issue in SummerCoat, but it was disparaging to
731 find and fix. There was not much motivation to do so. I needed a debugger
732 first and foremost.
734 I started work on shiny new JDWP support, which would help with finding issues
735 and otherwise.
737 I did attempt to cherry-pick the improved LCDUI event handling but that
738 failed, however that eventually got brough in by a future cherry-picking in
739 July.
741 #### April
743 This was a big month for the JDWP support, I finished the debugging support
744 for SpringCoat which allowed me to find potential issues and otherwise.
745 Being able to debug in IntelliJ was very useful as well, although it is not
746 the only supported debugger (Eclipse and JDB are supported).
748 Otherwise I worked on support for software `float`.
750 #### May
752 Base64 had some fixes and improvements, along with the addition of encoding
753 to Base64.
755 A class dumper was added so that I could debug the SummerCoat compilation
756 issues that existed. There were bug fixes centered around this. From this
757 a discovery was made that SummerCoat's handling of stack exchanges was
758 incorrect. However, there was not much motivation to fix this, it just
759 made a bad feeling in me.
761 I made a WIP branch for an SDK, which will be a modern way to develop for
762 SquirrelJME and J2ME.
764 #### June
766 Not much was done this month other than the detection of _i-Mode_ titles in
767 the launcher. Previously I planned to have a separate launcher that did this
768 but I decided against that since it would be better if it were all included
769 at once. This should make it easier to use this software. It does though
770 require the two files that are needed. In light of needing these additional
771 support files, I improved support for non-JARs in the library pickups.
773 Other than this, there was minor work and optimizations on SummerCoat.
775 Fixes were made to LCDUI and the floating-point functions were corrected.
777 At the very end of the month, one of my closest friends Near passed away. I
778 will miss you lots, you helped me immensely, you will be missed always. It
779 was an honor to be your friend.
781 #### July
783 I decided this month to celebrate my birthday for the first time in a very
784 long time, since it has never really been a day I wanted to celebrate ever.
785 I had a wonderful birthday with my wife, who makes me very happy. I decided
786 to add an extra candle for both Emily and Near, since they never really
787 were able to celebrate their own birthdays. I wanted to do this if at least
788 in spirit.
790 Additionally, at work I was placed on an important project, which at times I
791 would be working overtime. So I am doing my best to maintain a work/life
792 balance.
794 By the end of the month I very heavily realized how long the SummerCoat branch
795 has been going on for, since November 2020. I could not find the heart or
796 feeling to work on anything in SquirrelJME because this branch was just too
797 big, I made unrelated changes in it that were very important. Probably one of
798 the biggest things I have done this month is cherry-picked into `trunk`
799 from this branch.
801 These cherry pickings include:
802  * All the various Gradle changes and fixes.
803  * Base64 fixes.
804  * Fixed event handling for LCDUI.
805  * LCDUI form related functions.
806  * MLE changes that I want to keep but both affect SpringCoat and SummerCoat.
807  * Fixes to SpringCoat.
808  * Optimized and corrected sorting algorithms (ShellSort).
809  * Software math support for `float` and `long`. 
810  * Additional tests which caused compilation issues within SummerCoat.
811  * Task improvements.
813 Additionally, the WIP branches for BuildVM and RatufaCoat had an improvement
814 for the automated tests. The list of lists are now dynamically generated
815 rather than having to copy them into two separate locations, this will make
816 it easier to use and otherwise.
818 The long-standing SummerCoat issue was fixed and corrected this month with
819 an unoptimized, but working, solution. 
821 #### August
823 There was not much done this month, I mostly just continued work on the
824 RatufaCoat refactor.
826 #### September
828 Apart from RatufaCoat work, I did update the branding for this month, updating
829 and simplifying the copyrights and making sure all the logos or otherwise
830 have been placed in the repository.
832 #### October
834 More RatufaCoat work, this was starting to drag on.
836 #### November
838 More RatufaCoat work still, definitely continuing to drag on. I started some
839 work on UI reworks, however I would stop and pick this up a bit later.
841 #### December
843 Not much done other than RatufaCoat work.
845 ### 2022
847 This year was more or less much the same. Looking back at it from 2024 in
848 this retrospective, even though I did not have much free time to actually
849 work on things, there were a few good things in here. Unfortunately, I did
850 not have the time to really sit down and think what I wanted RatufaCoat and
851 otherwise to become.
853 #### January
855 More RatufaCoat work.
857 At the end of the month I did some Gradle refactors in `trunk` to make
858 testing better and easier, along with debugging.
860 Additionally, at the end of the month I finished the work in the UI branch
861 and merged that in. It was mostly just minor improvements and DoJa support.
863 #### February
865 I performed some cleaning up of the modules to get them more organized and
866 neat. I did open up the GIF support branch, although did not work on it much.
867 Most other cleanups I did were UI related. There were also various other
868 fixes and adjustments to the UI. I definitely had a thought on making new
869 UI code, however that would be quite a thing to figure out first.
871 Shift-JIS support was added for decoding Japanese text such as those in
872 DoJa titles.
874 Some minor work into running a few DoJa titles.
876 #### March
878 Adding support for handling KJX files, which are just JADs prefixed to
879 a JAR. Additionally, to support this, raw Jar access was added in so that
880 libraries could be read directly.
882 More RatufaCoat work.
884 #### April
886 I took a break from RatufaCoat this month to work on MIDI support, I spent
887 the month working on this mostly.
889 #### May
891 Continued MIDI work.
893 A cherry-picked a bunch of nice changes I had in the RatufaCoat refactor
894 branch such as the ability to perform full complete tests.
896 Other than these, I continued work on RatufaCoat.
898 #### June
900 More work on RatufaCoat, I did some more cherry-picking surrounding various
901 fixes I have done since it was a long-running huge branch at this point.
903 I did fix PNGs being corrupted, however.
905 TODOs and Debugging notes were completely refactored, which ended up being
906 a very good thing to do for consistency purposes.
908 I also worked on more GIF reading support.
910 #### July
912 Minor work was put into GIF reading.
914 Made fixes for M1 macOS systems since those were not working too well.
916 There were some additional methods in `Collections` implemented.
918 I also started an experiment on a framebuffer based UI interface, however
919 that did not go anywhere.
921 #### August
923 I started work on SummerCoat AOT code generation.
925 Also worked on JavaDoc writing to markdown, partially.
927 #### September
929 There was a bunch of SummerCoat AOT work, but like RatufaCoat it started to
930 feel like a bad idea.
932 On the otherwise, there was a positive which was a complete rewrite of the
933 testing framework to take advantage of Gradle's testing features. This
934 would allow me to see test results in _IntelliJ_ which was pretty important
935 as the number of tests have been growing constantly. I still use this to
936 this day, and it was well worth it.
938 I additionally made some debugger improvements.
940 #### October
942 More SummerCoat and RatufaCoat work, reluctantly.
944 I added some more support for DoJa titles.
946 #### November
948 I took a break this month.
950 #### December
952 I continued work on SummerCoat and RatufaCoat. Making lots of new code.
954 ### 2023
956 This was quite a year, most of it I feel was wasted, but it started to turn
957 around in July.
959 #### January
961 More RatufaCoat and SummerCoat.
963 I started work on some ideas I had surrounding the UI, but ultimately that
964 would not really lead anywhere.
966 One of the bigger and more important things was tagging all the methods,
967 classes, interfaces, and packages with the new `@Api` annotation.
969 At the start of the month I started to work on utilizing ProGuard to make
970 SquirrelJME ROMs a bit smaller by obfuscating them, mostly using it as just
971 compression of sorts.
973 #### February
975 The work with ProGuard continued, this was merged in after about a month of
976 work and has been going very well so far. I made a very extensible system
977 and the ability to add some extra options for use when building libraries
978 that get obfuscated. Additionally, there is `@SquirrelJMEVendorApi` which
979 was very important. ProGuard I would learn would delete lots of code and
980 otherwise, which SquirrelJME being a library for the most part was very
981 problematic. Luckily it was worked around. This work was merged into `trunk`!
983 I did more cleanups and any vendor specific APIs I prefixed with `vendor-api`
984 in the modules, this kept everything nice and organized and easy to find.
985 Very helpful in the long run.
987 #### March
989 More RatufaCoat work!
991 #### April
993 I added support for JVLite2 binary ADFs which were the raw storage types used
994 for some DoJa phones.
996 More RatufaCoat work, however at this point I was completely drained from
997 working on it.
999 #### May
1001 For most of the month, I took a break from things.
1003 However, despite the break at the end of the month I would do something
1004 pivotal to the project, and that is abandon RatufaCoat and SummerCoat. I
1005 created the new NanoCoat which I intended to be much smaller and otherwise.
1006 It would be simpler, be a basic interpreter, and otherwise be much cleaner.
1007 Seeing as I am writing this August 2024, I will say that NanoCoat has been
1008 progressing very well. I will say also that some projects are not meant to
1011 #### June
1013 I was pretty much excited with NanoCoat, so I worked on it much, building it
1014 up and otherwise. I was being more thoughtful and careful this time around.
1016 #### July
1018 I continued work on the foundations of NanoCoat.
1020 I added a number of tests for Java byte code instructions and otherwise to
1021 test out in SpringCoat and ultimately eventually NanoCoat. These were
1022 very helpful in figuring out some weird quirks of the JVM.
1024 I also started using the JetBrains annotations for code inspections, which
1025 to this day have been rather helpful. Those are more for reference and so
1026 that the code inspecting and otherwise would have an easier time of things.
1028 There was an old DoJa branch which was sitting around as well, I merged
1029 that in since it was pretty stale.
1031 #### August
1033 More work on NanoCoat.
1035 For IntelliJ, I added file scope colors and otherwise, which helps at a glance
1036 see which class I am looking at. Java standard APIs are purple for the
1037 most part. Out of tree stuff is a different set of colors.
1039 I also fixed a SpringCoat issue that I would say is
1040 called: `invokespecial super.__packagePrivateMethod()`. Which is a very
1041 one off edge case which one would likely not hit.
1043 I also started an experimental branch for JFR, however that has not been
1044 worked on since. That was mostly just an idea of getting profiling working
1045 in IntelliJ, but VisualVM works fine for now.
1047 #### September
1049 Mostly just minor NanoCoat housekeeping.
1051 #### October
1053 Most of these days I was not working on the project, if I did for the few days
1054 I just made some NanoCoat changes.
1056 I also got laid off from my job at Philips, so after the shock of that I
1057 would definitely have more time than I thought I would have to think.
1059 #### November
1061 I continued work on NanoCoat.
1063 #### December
1065 This month I merged in NanoCoat, it cannot run anything yet however I did
1066 not want it to drag on like RatufaCoat and NanoCoat. I felt that it was
1067 fine enough to merge in, which ended up being a very good decision to make.
1069 I mostly worked in `trunk` this month, making a bunch of fixes and
1070 refactorings to the standalone environment.
1072 There were also some more core NanoCoat code along with their tests as well,
1073 such as memory management. I did so much foundational work in NanoCoat for
1074 stuff that is still around to this day. I was invigorated and energized from
1075 this.
1077 ### 2024
1079 To be written...
1081 #### January
1083 I did much to improve and refactor the JDWP support in SpringCoat, along
1084 with building my own debugger interface. This was a very nice month
1085 for debugging.
1087 #### February
1089 I started work on a `Calendar` implementation to run one of the MMBN games
1090 which for some reason used that class, not sure why.
1092 I also additionally worked on descriptor and name parsing in NanoCoat which
1093 has gone very well.
1095 I finally got back around to MIDI support and merged that in. With the help
1096 of my musically inclined wife, she was able to help me figure out MIDI timings
1097 and otherwise. So very much thanks to her!
1099 At the end of the month, I had a new idea for the UI: ScritchUI.
1101 #### March
1103 I started work on ScritchUI, basically to replace the old UIForm interface
1104 which was a giant mess and difficult to work with. This would be very pivotal
1105 work in terms of UI support.
1107 I added building of FlatPak containers as well, so you could run standalone
1108 as a Flatpak.
1110 At the end of the month, I closed all the branches for RatufaCoat, SummerCoat,
1111 and  even an extended version of SpringCoat. I was feeling very good about
1112 NanoCoat and ScritchUI, like a breakthrough very good feeling.
1114 #### April
1116 I did mostly cleanups and work on ScritchUI.
1118 #### May
1120 More of the same, ScritchUI work and otherwise. ScritchUI has been really
1121 shaping up very well. It was clean, efficient, and easy to implement for.
1122 It also fixed some glaring issues with some software.
1124 #### June
1126 ScritchUI had a bunch of nice changes that were not entirely related to it,
1127 so I cherry-picked those into `trunk`. This helped reduce the scope of the
1128 branch and made the nice features of it mainline. It was at this point that
1129 I decided it would be best to finish off what I had, get Windows support
1130 in and worry about macOS later.
1132 #### July
1134 I continued the ScritchUI finalization and Windows support and spent most
1135 of the month doing final cleanups, specifically around images and buffer
1136 support, such as drawing and otherwise. I made ScritchUI serialized and single
1137 threaded, where it would force everything to happen in the UI thread. This
1138 was very important for all the different UI frameworks and how broken
1139 they are generally. Also as well, how broken applications are in a modern
1140 multithreaded multi-CPU world.
1142 #### August
1144 I finalized ScritchUI and got it merged into `trunk`. I was very happy about
1145 this. ScritchUI took about five months to develop from scratch, but it turned
1146 out very nice.
1148 I did start a branch for Cocoa support in ScritchUI, but that is a side
1149 project for now.
1151 Otherwise, I started work on Zip support along with many helper
1152 utilizes and weak references in NanoCoat.
1154 I do start a new job back at Philips at the start of next month, so we
1155 shall see how that goes.
1157 #### September
1161 #### October
1165 #### November
1167 ....
1169 #### December
1171 ....