Portfolio renewed.

I just finished going in and heavily reworking the innards of my portfolio page. It’s not completely new —the design is the same, in fact, and it’s regrettably still using PHP under the hood,— but it now works properly on smartphones, for one. I of course also added a few newer projects, and pruned some others.

Copy&Paste JS.

Particularly when making small web pages, or userscripts, I don’t want to be importing huge libraries, or having to deal with cumbersome workflows that involve preprocessing. And so I find myself making little utility functions that fit my coding style, which end up being the same ones over and over. Sometimes I copy-and-paste them straight from an older project, or rewrite them altogether. At some point I decided to just collect them in a single location for easy managing and retrieval, and I might as well share that, so I made Copy&Paste JS. This was back in 2015, and I’ve had the repository up on Github for some time, but I wanted to make it both easy to browse and manageable, something that took me a lot of work to figure out (plus of course a long hiatus.) Right now it’s just listing utilities in ES2015-compliant (for modern platforms) and ES5-compliant (for backward-compatibility) formats, the latter mostly auto-generated from the former, and with no documentation or examples of use. I did take enough care to fully spec test every utility, and I plan on turning these specs into code that works as both documentation and tests, in addition to explaining what each one does in a brief paragraph. For now, at least they’re available and fully tested.

const partial = (f, args1) => (…args2) => f.apply(null, args1.concat(args2));

For instance, this little snippet is not difficult to write on the spot, but one might not get it right the first try. Having it there, tested and ready to use is pretty convenient. What this one is useful for is to ‘prepare’ a function by passing it a few arguments in advance. It returns a new function that will take the rest of the necessary arguments. Like in this example:

[1, 2, 3, 4, 5].map(partial(Math.pow, [2]));   //=> [2, 4, 8, 16, 32]


I’m not sure why I didn’t post about this in 2016, when I made it, since I did post about two other packages I published on npm that one time. This one’s a small Browserify plugin to require() files as UTF-8 strings, rather than as javascript code. There are a few alternatives out there, particularly stringify, but for my use case at that moment I needed something more versatile than just selecting based on extension. My implementation is simple and works, using glob patterns for selection. I certainly could have chosen a better name for it, though…

See require-textify‘s Github repository.

Virtual reality workshop at K-Arts.

One of the cooler things I was involved in during my studies at Tokyo University of the Arts was the two-week virtual reality workshop in Seoul I was invited in, last February—the “VR Cubic Workshop.” Students from three universities corresponding to three countries (Korea National University of Arts, Communication University of China, and ours) studied the technology and created content for the HTC Vive using Unity. Teams were split according to university, and given the task of creating a VR space inspired by a historical figure representative of their country. In our case, we chose Sen no Rikyu, a master of the tea ceremony that cemented most of its traditions during the 16th century. We based our space on one of his designs, the Taian, a two-tatami-small tea room that embodies the rustic simplicity of wabi-cha. While the video above shows a demonstration of our project, The tea room, I also edited a video (below) with the closing presentation for the workshop, which was held in Seoul with all of the students and professors. In it you can see demonstrations of the whole three projects. […]

A few of the things I found myself involved in while in Japan.

One unexpected thing during my stay in Japan was becoming a performer. Friend and seminar-peer Hiramoto Mizuki needed people to carry out her Sushi performance, which involves humans taking on the appearance of the popular traditional Japanese dish in the streets of the crowded night-life district Roppongi, as part of the Roppongi Art Night festival. So I became the rice to her tuna. I was actually part of the (huge) camera crew half of the time as well. I don’t normally enjoy performing in public, but the experience was actually pretty fun. She made a video out of the copious material her little army of camerapeople got for her, and made it her graduation project. The video’s spoken in Japanese, but if interested just skip to the performances.

Another performing experience was for a series of videos promoting a student art competition called the “21th [sic] Campus Genius Award.” They were going for a Hollywood aesthetic, and thus needed ‘foreigners.’ I’m awful in it, but here you can watch the whole slick sci-fi movie-inspired little series. The company in charge of the web and promotion was TNYU, which is run by former students of the program I studied, so that’s how I ended up there. I actually appeared in a different video ad, did some translation work, and did (terrible) voice work for them after that.

I was also asked by another friend from my seminar to develop her website in three short days, since she apparently needed it to apply for an art residence (she happily succeeded.) I just made a static site, since there was not enough time, and she made the design. Other than that, I made a little web flyer for a friend’s party (she’s a dancer and often participates in such things,) which marks one of the few chances I’ve gotten to do actual, standard graphic design these days.

Several installations.

The yearly schedule in the New Media program I attended revolves around two public exhibitions in which we show our works: the summer Open Studio and the winter Media Practice. Most of the work done for the exhibition itself is also done by us students, in fact (the brochure and poster design, the exhibit design, tending to visitors, public relations, etc.) So we all split the work and let each focus on different tasks. […]

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!