Skip to content

JacksonBailey/wheel

Repository files navigation

Reinventing the wheel

If you're reading this on GitHub, this project has migrated to Codeberg. Changes may be periodically synced back to GitHub.

Foreword

This repository has become more of a monorepo for Java projects I want to fiddle around with than a specific collection of "reinvented wheels." This makes it easy to just jump in and hack away without wasting time on how to set up projects "correctly." Versioning seems annoying in monorepos, but I also don't see myself actually releasing anything in the foreseeable future. I'll deal with that when I get to it, if ever. I still plan to make notes about things I learn along the way and to make detailed commit messages, so hopefully this is still a useful resource for folks.

Introduction

As developers, we often get cravings to rebuild things. We are also often told to "not rebuild the wheel." There is wisdom in that in the same way there is wisdom in "don't roll your own crypto." If something exists that works correctly and is complicated to implement then it is better to use that than to build your own. That advice applies for more critical things though -- not for hobbies or learning. For low stakes things, why not rebuild the wheel? It can be fun. It can be insightful.

Sometimes I ask myself questions like "How would Java's Collections API look if it were designed with Optional existing?" Of course, I understand why they didn't change it once it was added but it can't stop me from wondering if it might have been a better way to express b in {"a": null}. Even as I type this I see problems with the statement. "You want to check if a method returns null and if the Optional is present? That can't be better!" That's the beauty of this exercise though; I am not necessarily trying to make better wheels. I am just making wheels that I would've made if I had the freedom to make them. I'm sure if any seasoned wheel makers see these attempts they might shake their heads at the foolishness of some of my designs, but perhaps they'll smile remembering how they too thought doing certain things was a good idea early on when they were naive.

I say all that but this project is quickly turning into me just working on random things I feel like working on. That's fine. I have a tendency to restart projects from scratch all the time. Having something of a "monorepo" to keep all my projects in with my preferences will do me well so I don't waste time bikeshedding.

Goals

In general, these are the goals (in order of importance):

  1. To have fun. This should never be something to stress over.
  2. To learn. I should come away with a better understanding of why things are the way they are.
  3. To make things that are usable. This should be more than just theory.

In general, these are specifically the non-goals (in order of importance):

  1. To make something useful. I don't intend to make anything other people have a desire to use.
  2. (For now that's it!)

Ideas

For now these are a few of the ideas I have.

  • Collections API
  • Dependency injection framework
  • HTTP controller
  • Roll your own crypto
  • Database
  • Distributed database
  • Test framework with tests directly in classes

Licensing

As a whole this repository is licensed under AGPL-3.0-or-later. Each individual subproject may have different licenses. As an example, the collections project uses LGPL-3.0-or-later. See the LICENSE (and LICENSE.LESSER if present) file(s) for details. These should also be included in jar files built by this project.

Development guide

For information for developers working on this (mostly for future reference by me) please see the DEV_GUIDE.md file.

About

Reinventing wheels

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages