Priorities

2014-06-19

As you may or may not know I switched to being a freelancer/contractor a few months ago. One of the perks of this is being your own boss and deciding on your own when you do the work. This blessing can also be a curse if you don't have the discipline to actually work, but that's not a problem for me.

After I quit my permanent job I actually have more time on my hands. I won't go into details but this is a fact. However it feels much different. It feels like I have no time at all for the things I want to do. This has a few reasons;

- I'll take more time to start up in the morning. There's no pressure to get started so I can take my time keeping up with the web. Where I normally started 10am, I now tend to start at 11am (though it still varies). The time gained here is obviously lost because I don't actually do anything in this hour, I only lose money over it because the hour is non-billable.
- I think I take more frequent breaks. In part I tend to do a bit more chores, especially when it comes down to picking up groceries (or something like that) since there's nobody demanding me to actually be at work. If I take a break, I note down the time and I do the same when I return, not billing the time in between (obviously).
- There's more sneaky overhead to being a freelancer than there is to being employed. And I've not even had to actually put effort into acquisition so far! Still, there's a bunch of paperwork and organization involved running your own company.
- Flying all over the place. We've been on vacation in the US this winter holiday, to Lisbon (Portugal) this March. I've been to JSConf.us last May. I'll be at LXJS in June. Berlin for a holiday in the summer vacation. Berlin again in September for JSConf.eu and Amsterdam for Fronteers in October. And finally a family holiday in Florence (Spain) in October. While initially I intended to visit another conf later in the second conf season, I decided against it in light of I don't mind being home for a while. This might sound like fun, and sure it is, but at the same time it means I'll be away for a few days to a week at least once a month. And these conferences, while very leisureful in our community (thank heavens), are now also a bit of work since I'm self-employed and the burden of having to at least a bit of networking is now upon me. Also, I don't really like to fly and don't care much for being abroad so all this travelling is very much lost on me anyways. Again, more of a burden than a blessing.

So it's really first-world problems here. No doubt. By definition too, since it's about not having enough free time, rather than life threatening stuff :) Still, something has to change because I can't bear this very well. So...

Pet projects to keep


I have decide to focus on only two pet projects for now;

ZeParser


While the work seems endless when working on a parser, there's still a few things I need to do before I can mark it a stable release. I'm currently nearly done with making it a _streaming parser_, which I think is a first for a JS parser in JS. All through the help of code transformations. I have no idea what those transformations do to the speed though, but I'll figure that out. Apart from streaming I also need to do some style-specific benches. But for this I need the streaming parser because I need to "beautify" a 40mb script to certain styles. Some of the code transformation projects can't deal with that much code. ZeParser can :) After that there's some polishing to be done.

I've also been playing with the idea of ZeParser generating a Spidermonkey AST, which would allow you to shoehorn ZeParser onto Esprima (kinda like Acorn does). But I haven't even been able to check viability yet so I don't know whether this will happen.

Secret game


I've had this game idea in my head for a while now. I worked on it for a bit last year, teased it on twitter (if you can remember it ;)) but got side tracked. The last few months I've been thinking more about it again, partially inspired by the upcoming Binding of Isaac; Rebirth, as well as similar rogue-like titles. In short; I've got a killer game idea and need to put some time and money into it to develop it to an actual product.

Ditching...


That leaves me with a bunch of ideas I won't put any time into. I might as well put them here. Maybe somebody will be inspired and take over, or maybe somebody decides to pay me to do them. I'll even give you a discounted rate ;) If you are interested, contact me through c80.nl. Some of the ideas I wanted to work on:

Semantic diff


I work a lot with git and github and I see many diffs that are just bad. I also see that these diffs could be drastically improved if they were geared towards the languages being diffed. There are basically two sides to this semantic diff idea. One is simply producing better diffs. If you add a function definition between two existing defs, let the diff be just that new function. Instead right now we usually get the closing bracket of the previous function being part of the diff and the closing curly of the new function being ignored. This makes perfect sense from the diff algo point of view, but semantically it's crap. I think there is some low hanging fruit here and would love to pick some of this fruit. The other side is actually reporting to the user what changed. "Added one function, changed two var names, oh hey and you missed one instance of that var name". Like a diff linter. Github, you should totally pay me to do some research in this area! It'll put the service on a whole other level.

ES6 parser


I love working on ZeParser, but it's only an ES5 parser. So far I've been holding off starting on ES6 because the syntactic rules of ES6 are still in flux. This is annoying because it's easier to write a parser from scratch than to change the rules after the fact. Regardless, I would love to actually start on an ES6 parser because it'll be very useful in the feature. It's also gonna be a lot of work to figure out the various new syntactic rules and pitfalls. Time I simply don't have right now, especially for a spec still in flux. Of course, there's plenty of companies out there that may want to pay me to work on this. Either from a spec verification / implementation point of view (ECMA) or perhaps because they need fast parsers as the basis of their own (ES6) tools. Personally I'm putting my priorities elsewhere, though I may still start on this in two or three years.

ES6 to ES5 transformations


After doing unyield, which transforms ES6 yield to ES5 semantics, I kind of wanted to do this for all ES6 features for as for it was possible. But I've also decide against doing this since it's very time consuming and besides a good learning experience, I think it won't be of much use to anybody.

JavaScript normalization database


I've tried to get started on this thing a few times, but stranded every time because forming normalization rules for JS source is pretty difficult. The main idea is a database that contains normalized functions which you could query for golfing. Say you have function f(a,b,c) { return a && (b && c); }, the tool could tell you that the database is aware of a shorter way, dropping the parenthesis. You could also set a bunch of unit tests or input/output requirements, possibly making it possible to use logical AND (single character `&`) instead of double character (`&&`). This database could be used by golfers to either golf down certain function+requirements or to search the database for shorter versions of their function. This obviously hinges on some way of normalizing the function and like I said this is a very open space making it pretty difficult.

Golf fuzzer


Related to above I wanted to create a fuzzer that would automatically golf down code based on unit tests. Such a fuzzer could have hardcoded tricks/rewrites it may try, transforming the original function and running the unit tests. If a golfed down function would pass all unit tests, a shorter function would be found, naturally. The fuzzer could either just fuzz, or work like a "genetic algorithm". The approach is pretty simple, somebody just has to build the damn thing :)

VR


I actually started on this project. Or well, made my first ray tracing 2d environment, wanting to upscale it to 3d. I wanted to use the mobile as my viewport and try and make DIY VR glasses using two mobile devices and their capabilities (gyro, wifi, gpu, camera). The camera could map out the environment, much like some apps are already doing, and the VR code would allow you to navigate this environment. I'm positive VR is the future and it makes sense to invest into it now, while it's still at its infancy. But that won't be me after all. I'll publish the little poc I constructed and move on.

Feed reader


Something I've wanted to do for a while now but always been a bit reluctant to do. During the feedly debacle I nearly went for it, but obviously did not. I consume a lot of information from the web. Information relevant to my field of work. Besides that I also read a lot of comics, news, and tweets. I don't have the time to visit each page individually so a long time ago I built a tool to gather this information for me. It's hinging on rss/json feeds being available, but it works fine. For me. I have considered making it a public service a couple of times but I'm always too afraid of the consequences. I can see various ways in which such a service can be abused and I'm not super confident I can plug them all. There's also the case of twitter making a fuzz over how tweets are represented, that I don't even want to bother with. And of course I strip various noise from feeds, which I'm not sure I can get away with legally if I would do this for a large audience. I've always been too scared of repercussions like that. I had the idea to do geo location tracking way before the first site that did this. I didn't do it because I figured it'd be a nightmare because people wouldn't want to be traceable like that. Obviously I was wrong (*cough*foursquare*cough*) but I'm sure their path hasn't been free from these kinds of issues. Anyways, I see similar issues with a public feed reader service and while I still think a customizable feed reader could be an awesome product, I also have to wonder whether that would only be awesome for a very small audience (people who program). The answer being "probably".

Marble coasters


I've been wanting to build a marble roller coaster generator. This would be a 3d design environment in which you could design your coaster and then hooking it up to a 3d printer to actually produce them. The plan is totally viable and I'm sure you can sell coasters like that. But building such a 3d program is gonna take a lot of time and I don't have nearly enough of it to fix that. So I won't, for now anyways. I'm still gonna do some physical tinkering with creating marble coasters. But nothing as fancy like 3d printing them.

Game real-time develop environment/framework


I had started on an environment/framework where you could live edit and build 2d/isometric games. Web-based of course. Then I got side-tracked in the aforementioned game and after getting side-tracked from that, I haven't really spent time on it anymore. The product works and I'll publish it soon, as is. But it could need some obvious polish, work I don't think I'll be putting in for now.

So...


There were some other projects, but I forgot.

Obviously I'll still do JS1k stuff (also very time consuming, but very rewarding). There are some interesting future plans to be revealed regarding this, but you'll have to wait for the future for that :)

Time, who has time. Not me!