So in my spare time, I code. Most of my code is open source, so you can check it out over on GitHub. While you're at that, for a profile of my coding habits, have a look at my Open Source Report Card (disclosure: it provides a view that is biased in favor of the coder; disclosure two: I contributed a tiny bit of work to that project).
I do a lot of original work, although usually I hit a reality block somewhere along the way, where I realize that what I am doing isn't really useful at the moment, that I'm taking a severely wrong approach to solving the problem, or that my idea is a bit past something I can do on my own:
Omnic: I tried to write an assembler for my own assembly language using line by line parsing. Needless to say, that was not a good idea.
OTOH, I did learn some good skills, and did manage to write up a fairly restrictive license that a lawyer friend gave me a thumbs up for. So there's that.
portenv: The IT department in my district are so incredibly idiotically restrictive that we have almost all OSX machines, yet none of them have even a basic POSIX development environment. Seriously, we could be taught to code if there was just a basic POSIXy dev environment.
Anyways, my idea with this one was that I could create a portable POSIX environment that could be stored on a USB2 flash drive, since I keep like five or six on my keyring (and they're all empty).
There were quite a few too many limitations for that, apparently. Ah well.
I also do tiny edits, usually on projects that I find fascinating, but where I cannot really make any real contributions. I like to think of it as incremental changes that help to improve the overall quality of projects in the open source community over time. Some of these include:
libgit2: two edits to that README:
mailing lists are shitshows: the README said that (emphasis mine):
The libgit2 mailing list has traditionally been hosted in Librelist, but Librelist is and has always been a shitshow. We encourage you to open an issue on GitHub instead for any questions regarding the library.
Yeah well, I kind of disagreed with one point. You see, in general, almost all mailing lists are shitshows. Apparently everyone agreed, and one of the main authors actually did some spring cleaning on the README.
formatting and clarifications: minor cleanups to the README - nothing too fancy.
osrc: again, nothing noteworthy, just added more intro lines, a file to list the contributors, a truly minor spelling fix, and the part I'm actually proud of, added tons of descriptive names for coders of various languages.
There's more, but the main point I was trying to get at with all of those is that I was just playing around with useful stuff that was primarily the work of others or just making stuff that couldn't realistically be done the way I would have liked them done.
Lately though, I've been doing some stuff that I feel can actually make a difference. While these projects often seem to go slowly, especially because of my lack of time and occasional lack of motivation, they do make steady progress, and more importantly, include others.
See, what I basically got to learn the hard way is, you honestly can't do much alone these days. It takes a team effort, and you need to not only be able to accept what help does come your way, you need to be able to freely seek the help of others too.
Recently, I started a project, haneefmubarak/Aixen (eye-kss-sin):
A partially distributed online multiplayer service,
which currently aims to support Xenia and RPCS3,
while also providing a partially open service for the
development of new games that run on consumer computers.
Now this actually started from a thread back in benvanik/xenia (an X360 emulator), #64, where @benvanik pointed out that having multiplayer functionality would actually be kinda cool. A few days later, I had a repo up and running, and Aixen was born.
Progress is slow, but it's chugging. I try my best to involve any major team members in making major project decisions, but I also factor in the advice of whomever likely has the most experience with the topic, along with their justification on their choice.
Recently, I found out about DHrpcs3/rpcs3 (a PS3 emulator). It occurred to me that might be useful for them to have multiplayer abilities too. Since Aixen is platform-abstracted, it should be easy to natively support RPCS3 in the mix as long as support is added in in the early stages.
So I made a thread about that on RPCS3. It was received kind of coldly at first, sort of in that
kind of way, but one of the original authors stepped in and said that it was all cool, we could work together on that as a long term goal, and feel free to ask him for anything particular.
Nice guy, that author, @Hykem.
Another project I'm working on is
haneefmubarak/chrysalis. This one is actually in coop with another macroproject, EvolveOS.
I wanted to contribute to EvolveOS, so I ended up having a private chat with its creator, another rather pleasant fellow, @ikeydoherty. I ended up finding out that EvolveOS needed a package manager.
Just the prior week, I had had an idea for exactly that; a package manager. I wanted something that worked cross platform; something more flexible and easier to use than
homebrew. Something that wouldn't break your system and your workflow at the slightest triviality, but would rather catch the error before it was applied and would log every action. Also something a bit on the faster side, preferably written in clean, pure, portable, POSIXy C with minimal extra external dependencies.
We discussed the idea, after which I began work on Chrysalis.
I didn't really write any of this with an intent (I just felt like writing), but I guess that there are a few things that can be taken away from this:
- 'You can't do jack shit' alone in a modern world.
You honestly can't. So try to forge as many alliances a you can, and get peole to work with (obviously, there is a limit to anything).
If at first you do not succeed, try, try, try again.
- William Edward Hickson
Damn right. The thing is, if you don't fail the first few times because you look out for every single mistake, you won't learn much and you won't go very far. In fact, you'll just end up failing at a later date on something critical.
Failure is part of learning. Embrace it and try again.
Others often yield experience and skills that are highly useful. Making them feel included in the decision making process will help to motivate them and keep the unity and effort flowing. It will also attract new people over time.
Reach out to others.
Others are often strongly willing to help you, especially when you share a common interest. Ask politely and also show them what's in it for them.
If you're like me, you have a fairly good idea every few days. In the modern world, ideas are a commodity, but only if they are developed out.
So don't be afraid to share ideas; worst case scenario, someone steals your idea - just point out that it was your idea along with relevant notes, and next time you have an idea, people will go along with it pretty willingly.
See? Even the worst case scenario benefits you.
Well, anyways, it's about 01:15 PDT and I need some sleep.