Two npm packages.

I decided to try my hand at creating and releasing some reusable code. I have a big inferiority complex on my code quality, but I’ve been getting over it little by little just by piling information on my brain. So, while I’ve had a Github account for some years (though only decided to actually start using it much recently), this is my first time offering some of my code on a module repository. So I created two tiny npm packages (that means Javascript) that do only one thing, and might prove useful to people other than myself.

The first is called dot-into, and it does something icky for most Javascript programmers; extending prototypes. It’s still under your control, as you can choose what prototype(s) to extend, but its power comes from extending the ‘holy’ Object prototype; that is, basically every object’s root prototype. All it does is put there an ‘into’ method that allows you to effectively reorder terms to fit a left-to-right flow, when you would otherwise be nesting functions. That is to say:

third(second(first(a), b));
// becomes
first(a).into(second, b).into(third);

I didn’t come up with this on my own, though, as it was Raganwald’s idea in Ruby that made me want it in Javascript. He also made a library that offers this, but also more baggage that I didn’t want.

The other one’s called function-promisifier. It’s a utility function that takes a sync function and spews out one that takes optionally promises instead of plain values, and returns a promise instead of the result value directly, making it entirely async-compatible. It’s one thing that I once wished existed, and when I looked I couldn’t find it, so I made it.

I guess I’ll be doing this again and releasing more code modules some time. We’ll see.


Buranko screenshot

I haven’t posted in a long while, and a lot has been going on, what with me coming to Japan to study. I guess I should start at the earliest since the last I wrote.

In my last post I presented a video reel that I made as part of the application process for the program I am currently studying. Another part of that process was the creation of an audiovisual piece based on any of a short selection of poems and fragments of prose—of course, in Japanese. The one I settled for is one Arakawa Youji’s Gallery (ギャラリー).

Although I have functional Japanese, enough to survive in most situations I’m confronted with at school, work, and otherwise daily life, reading poetry offers a different challenge altogether. This was one of my first times reading Japanese poetry, so I went with the one that most clearly brought an image to my mind. The poem uses strongly visual, and purposefully childish language; it speaks of a lover ably using a swing at a park, and the narrator failing to. At least on a superficial level, it’s about (lacking) self-esteem in front of an overwhelmingly capable partner. I can’t claim to have read it very deeply, and I don’t know the author. But I decided to take it up on the self-depreciation note. And so as to see what people were being frustrated about, I made a visualization of current Twitter tweets that contain the words ‘failure’, ‘ashamed’, or ‘afraid’, and putting them pretty literally on a swing. I wasn’t coming up with a compelling interpretation of the texts, so I brought in help in the form of live data, for a voyeuristic element. I took a screen capture of it and sent it to the school, but of course made the actual software available online:

See Buranko (web; source)

Actually, after considering the poem’s title a bit as well, it just occurred to me that it might just be about impostor syndrome


I’ve been applying for a Master’s at the Tokyo University of the Arts, a program called “New Media”. In typical Japanese fashion, there’s innumerable hoops I need to hop through for that. One of the steps involved the submission of a physical DVD-Video with a sample of my work (along with other documents), so I created a reel of some of the stuff I’ve made that I like. It’s five minutes long and is comprised of nothing new, but here it is.

Stretchy rectangles.

This is contract work I did some months ago but neglected to post about. It’s just a visual effect that my client wanted to implement in the website they were commissioned, but I think it’s a pretty nifty one. The site’s links are distributed in an array of rectangular picture crops of different proportions, which stretch and compress according to mouse input. So of course I did just the programming for this one. That’s all!

Aphasia poetica.

Acabo de terminar un asuntillo.

Prueba Aphasia poetica (web)

Esto comenzó como un trabajo en conjunto con Ilan Libedinsky el 2010. Era algo imposible de construir bien: requería mapear palabras con una palabra alternativa, manualmente y una por una. Pero el idioma es claramente demasiado vasto para hacer esto una tarea alcanzable por dos individuos, así que nunca se cumplió. Tres años y medio más tarde, lo llevé a cierre. Esto no pasa de ser un punto medio: usando un bastante nutrido diccionario de sustantivos, diferenciados por género, el intercambio es generado automáticamente, sin el mapeo manual.

The Pirate Bay Bundle.

The wonderfully enthusiastic Steve Cook put together a compilation of over a hundred free games, and made me a part of it by including my game Runnerby. It’s called the Pirate Bay Bundle.

I recognize only a handful of the included titles. But knowing the kinds of games that he reviews, I’m sure they’re all good stuff. I’m currently in the process of downloading the torrent, so I’ll be sampling them later.

Bye bye Pixelpost.

Spambots were having a field day with my neglected piclog Pixelpost installation (old picture blogging CMS, not updated in several years), and it was getting hit so ferociously that it was hogging resources and my host complained. So I took it down. But since I have a few blog posts that link to pictures over there, I fixed it. I basically scrapped Pixelpost, downloaded the database, and implemented a super simple version of it that uses YAML files as a database and PHP. And no commenting, since it wasn’t getting anything other than truckloads of spam anyway. The design and all, I couldn’t be bothered to update. I did, however, change the URLs to make them a tiny bit prettier, taking care to redirect links written in the old format.

Tiles visualizer.


I was contracted to finish a work that had been started but never completed, a floor and wall tiles in-context visualizer web app. You have a photo, and you can choose among the client’s catalog of tiles to place them in the photo’s walls and floors to see how they would look in a real setting. Although this work was almost finished, the source code had disappeared. Taking this as an opportunity, I revised the interaction design, ending up with a more focused and approachable app than what was originally conceived. I was originally only going to iron out the remaining programming wrinkles, but ended up doing the interaction design as well as a full code-up.

The biggest design challenge was making the app casually usable, since such a utility would see little action if it is not instantly understood and provides results in seconds. The number of choices is quite large, so I had to make these choices seem fewer. I put the user straight into the action by simply randomly choosing a photo for them to work on, with the ability to swap it. The flow of use goes from just selecting a surface to then one or two tiles for it. The tiles are filtered contextually according to the environment and the surface selected, so, for instance, for a bath wall there will only appear tiles that are appropriate to put on a bath’s wall. These tiles are arranged chromatically in a grid, and are all simultaneously visible in their correct relative dimensions, to make it quick to compare and find the desired one without having the need to specify any filtering criteria; however, if needed, several filters are available. When the user’s happy with what they did, they can take that with them in the form of a PDF with the image and information of the selected tiles, or they can share a link with friends (which takes them to the same utility, with the tiles pre-filled).

Technically challenging was figuring out a way to display the tiles in correct perspective according to the (flat) photos. Turned out that the easiest was using the same geometric technique that visual artists use, involving two vanishing points plus the horizon line for a flat surface, together with algorithms for finding segment intersections. I’ve obviously little idea of 3D coding, so this was all new to me, but I got good results! I also experimented with two interesting programming patterns that were new for me, reactive programming and promises, the combination of which made it easier working with the asynchronous loading of images and other data.

Although I am rather happy with my work on the interaction design end, the result does sadly have many shortcomings… […]

Muévete at the Design Biennale.


So yesterday it was the opening of this year’s Design Biennale here in Santiago, which featured that one project I worked on a year and a half ago with Sebastián Skoknic. He was invited to participate, and he chose that one to display. Despite having to endure an insufferable parade of politicians and academic officials speaking nonsensical, trivial formalisms for what must have been at least an hour and a half, the event itself was super high on polish, and featured a great deal of impressive projects from a variety of forms of design. We had the spot number 78. […]


What happens when you combine sports and words? That’s right, the unholy portmanteau of this post’s title. Conceived as a last minute entry into the TIGSource Sports competition, Spwords is a player-versus-computer match that puts your (English) vocabulary, spelling, and typing speed to the test.

Play Spwords (web)

Maybe you didn’t understand the commentator’s quick explanation of the rules. That’s fine, that’s what this paragraph is for. You and computer take turns typing words during rounds, and each round has an assigned letter. Each word played must start with the round’s letter. Also, a word must contain the last played word’s last letter for it to count. In addition to all this, you have a time limit, and words may never be repeated. Win three rounds to win the match. Have a go!

This game was possible thanks to Keith Vertanen’s word lists.