Wishful Coding

Didn't you ever wish your computer understood you?

First internet enabled Game Boy Pokemon trade is a fact

IT WORKS!!! I traded a Pokemon from one Game Boy to another over the internet.

Last week I blogged about trading Pokemon with an Arduino, which made some people wonder if you could trade over the internet.

This is not a new idea, but one that was previously considered impossible. The Game Boy uses a synchronous protocol that does not tolerate the latency associated with the internet.

But only when using its internal clock. When using an external clock it will go as slow as you want. Normally one of the Game Boy’s drives the clock line. The solution therefore is to trick both Game Boy’s into thinking the other Game Boy is driving the clock line.

This trick is specific to the first and maybe second generation of Pokemon games, and it is a lot slower than a direct Link Cable, but it works nonetheless!

It’s not quite ready yet, so a post with more details is coming soon. Keep an eye on my RSS, Twitter or Youtube.

The gist of it is that a Teensy puts the Game Boy in slave mode and forwards the data over USB HID to a Chrome App that uses WebRTC to transfer the data over the internet.

Pepijn de Vos

Comparing cars to planes

I was thinking about two of my favourite programming languages. While I think that the one is a better language, I keep coming back to the other for a lot of tasks.

The car

Cars get you very quickly to your short to medium distance destination. They are quick to start up and quick to turn around.

Cars are firmly rooted in the ground environment. They give you access to a lot of infrastructure, but you’ll have to deal with all the road signs and crossings(accidental complexity).

Cars are kind of awkward for going really fast, or really far. There are JIT cars and touring frameworks, but they only get you so far.

The plane

Planes on the other hand, are a lot faster and full of advanced technology. Flying is also super fun.

But planes have a slow startup time. You have to submit a flight plan, warm the engine, and wait for the runway to clear, before you can fly.

The controls of a plane are slightly more difficult than the car, but there aren’t any obstacles(Not easy, but simple).

Planes live in this dual world. They can drive on the ground and use the infrastructure, but it’s really kind of awkward to drive your plane.

The in-air infrastructure is mind-blowing, but sometimes you need to land to get stuff done.

Conclusion

Like most people, I take the car more often than the plane. But for long journeys, the plane is definitely superior.

Pepijn de Vos

How I learned to program in 10 years

Inspired by a blog post from Julia Evans with an identical title, here is how I learned to program.

Unlike Julia, I learned most of my programming from my own hacks and projects. I feel like the jobs I had where plateaus in my learning curve rather than spikes.

I must have stared somewhere mid-’00, before which I was raised without much technology in my life. I did not watch TV, smartphones where not invented yet, and I did not have my own computer.

I’m really fuzzy about the timeline, but several different things happened, seemingly independently of each other. I did not consider myself a programmer during any of this.

My brother likes to take apart computers, so we kind of grew into the system administrators of our tiny school, recombining and configuring donated hardware into usable computers.

Back when Game Maker was still owned by Mark Overmars, I made a lot of silly games with friends. Later we also used an RPG thing called Elysium, which ceased to exist.

This got me in touch with a guy who wanted to make a clone in Java. This lead me to read Head First Java, to date the only programming book I read extensively, including all the exercises.

I always played with LEGO, but at some point I got a LEGO RCX for my birthday, and built a lot of robots with it. Like Game Maker, it was programmed by dragging blocks around.

A guy at my school taught me and a friend some Basic. Nothing much came of this.

I did a course in web development. I learned HTML and a tiny bit of CSS, but not how to use classes and ID’s, so for a while, I would just style tag names, and use frames for layout.

Later a woman at my school who was a web designer taught me and the same friend proper HTML and CSS and introduced us to PHP.

So at this point in time I know some Java and PHP. What follows is a period where I teach myself a lot of things, do a lot of crazy hacks, and get more serious about programming.

I learned JS, Python, and Clojure by reading things on the web, and just building random stuff with it.

I used to have a folder of projects and ideas. But this was before I knew version control, and before Github. At some point I tried moving the whole thing into SVN, but I messed it up. This whole folder and its ~50 projects is lost in time.

It contained crazy things like a site that was only text. The background was a PHP-generated text image, the borders where text images, the text was text. They where only distinguished by color. I also had a memo app when local storage was new. And a HTML editor with a circular context menu.

The only thing that remains form this era is my first blog. This is your only chance to see code I wrote in 2009.

I did an internship with Oblivion, where I did some CSS and HTML prototypes. Then I did an internship with Eight media where I did Django projects.

I also started doing my first paid jobs for this designer at the school. Followed by Wordpress websites for other people.

Now we are getting to “recent history” where I know dates and stuff is on Github. By this time I was doing freelance webdev an knew several programming languages quite well.

So far, I did not have many peers. All of my friends that where interested in technology moved on to television, photography, theatre, and other things.

This changed radically in 2012, when I went to Hacker School, where I learned a ton of things and met a ton of people who where interested in the same kind of things as me. Amongst many other things, I learned C and Haskell.

After Hacker School I started living on my own and tried having a job at Silk where I did some Haskell and JS things. This did not work out very well, so I went back to freelancing.

Around this time I got a LEGO NXT. This time I programmed it using Not Exactly C. I also learned how to make NXT sensors using PICAXE. Later, when Arduino became a thing, I moved my hardware hacking to that platform.

In 2013 I did some freelance work for Freenom, who then hired me to do Python stuff. I worked there for over a year.

This brings me to today. I quit Freenom to see some more of the world. Visit far places, take on odd projects, find weird jobs. Help in this area is highly appreciated.

Pepijn de Vos