Developer Spotlight: Yose “Jormy” Widjaja, Developer of The Revolutionary Keyboard ‘Nintype’ [Interview]
From a very young age, Yose had a foot in the door with computers and programing. He was learning BASIC in an upscale Indonesian primary school, playing around with DOS when he was around six years old and getting addicted to Starcraft map editors circa 2000. You could say that he was a computer guy from the start. After dropping the Starcraft maps and learning some Flash and Actionscript he dropped out of his PhD and started his journey to Jormy Appstudio.
Nintype is short for ninja-type and was uploaded as “nin” for a test when it was still in Cydia and it sort of stuck. After developing it for nearly two years and going through many evolutions and permutations, Nintype leapt over quite a few hurdles here and there to be what it is today. Check out the interview for more information and a great story about it’s development.
Question #1: How long have you been developing?
I actually remember my primary school in Indonesia teaching us some form of BASIC. Yeah, now that I look back that was pretty advanced for an Indonesian school. Granted, it was an upscale primary school, and I didn’t really learn much out of it, but yeah.
I did get an early start with computers — played with DOS and Windows when I was ~6 yrs old, and was generally a computer nerd forever. Started kinda “coding” with Starcraft map editors back in ~2000, with its triggers system and the like. I was asked to drop down from advanced mathematics because of addiction to Starcraft, so I decided it’s time to be productive and stop Starcraft, and then I started learning to code in Flash, Actionscript, and the like. That’s when I started learning how to code etc. followed by university and the like. Dropped out of PhD, and here I am.
Question #2: What does NIN stand for?
Was originally “nintype”, which is from “ninja”, but I used its short name “nin” as the jailbreak name as a test upload. Somehow it stuck as people started using it more.
Question #3: What are your inspirations for making NIN/Hipjot?
Hipjot was originally Fastminder, meant to be a simple app which will use natural language processing to turn things like “dinner tmr 830” into a calendar event. It was a simple textbox app, actually.
Somehow the scope creeped and it became a full reminder app. Then a full notes app, and one day I got an idea about making a keyboard to make text input work faster. After a bit of brainstorming, two-handed swiping was an idea, and I thought it was possible to do it. So I stuck at it and spent 1/2/3 weeks (ish?) making a prototype.
Question #4: About how long was it’s development?
Hard to say, two years I’d say, but since it’s a one-man job and I’ve mostly spent the first year being distracted and making things like this.
Judging from the top charts maybe I should have stuck with making crappy bird game clones.
Question #5: What problems or setbacks did you have to overcome?
iOS 8 memory issues, its cryptic behavior when using OpenGL with keyboard extensions, really dodgy API design, broken API and behaviors from the API.
Question #6: How did you overcome them?
iOS 8 keyboard API has extremely small memory limits, I had to rewrite some parts from scratch and put in some really dodgy optimization techniques, which somehow actually works. Seriously though, optimizing memory usage in 2014? It’s a bit ridiculous, Apple should have just shipped with bigger RAM.
Jailbreak-wise, well, it’s like trying to implant a robotic arm into an unwilling participant. Thankfully there was #theos on irc.saurik.com and the people there helped.
I can’t believe it was actually easier to port the keyboard to Android than it was to iOS. It’s mind-boggling.
The problem with Android is that the touch input lags behind noticeably, even if a little bit. I guess that article from a while back about iPhones’ responsiveness higher than Android is true.
Question #7: Does Nintype replace HipJot?
For now — though HipJot is still its own app. I’m not sure how I’m gonna update it. Hipjot has this super-strong encryption system and I actually use it as a password storage system. Mainly because it uses tested cryptography and I’m a bit too paranoid to trust external password services.
Question #8: Have any plans for Android?
Yeah, eventually I’ll make it work, but right now Google’s asking for my address to be put publicly before selling it, so I’ll think about it again later.
Question #9: Any other cool apps you’ve developing that you can talk about?
There’s that calendar app, but it’s still under development and the only reason I’m thinking of finishing it is because it looks fancy and I’ve spent way too much time working on it. Actually was made back in iPhone 4 days, but got distracted by everything else.
I need to get back to gamedev too.
Question #10: If you could give any advice to aspiring tweak developers or App Store developers, what would it be?
As for advice – for tweak developers, learn to use cycript? Most useful tool (besides the almost mandatory theos).
For app developers… beware of new Apple APIs. Used to be they’re pretty good and works nicely (the Bluetooth GameKit API back in the day), but the keyboard extension API is a disturbing data point in a downward spiral of API quality.
Question #11: Have interesting stories you can tell about developing NIN?
Yeah, I have some beef with some Apple employees.
A while back, after Apple announced the keyboard API, I was happy. But when I tested the API, it turns out that iOS 8 beta launches a separate copy of every keyboard on every app. So, if you have Facebook, Messages, Yik Yak, Twitter, Viber and Whatsapp open, that would be at least 6 instances of the keyboard open.
That means 6 times the loading time, 6 times the memory, and synchronization issue. Not only that, with the kind of memory iOS devices usually have, that’s bad news. Really ridiculous design decision right?
So I filed bugs on radar, mailed Apple and the like. No replies, and radar bugs are usually just a one-way communication channel.
However, an Apple headhunter tried to get me a job with Apple, so they scheduled me to talk to the guy in charge of keyboards, or something like that. Got a phone interview with the guy — not because I wanted a job, but because I wanted to know if this was going to eventually be fixed or anything like that.
The guy made it sound like a change was unlikely to happen. I don’t know if it’s Apple’s culture of secrecy, but something about it really annoyed me, which is why I started giving up on iOS 8 version and went full ahead on Android.
A while later, after many tweets about iOS 8 version, I decided to try again make it work for iOS 8. Fully prepared to make it work with the multiple-instanced design flaw and the like, until other mess-ups with the API was discovered and I got fed up, and decided to write an email to Tim Cook about the whole thing.
I used i-words and m-words (incompetent, malicious) in that email. I was not a happy man that day, when I wrote that email. Far from it. But strangely, writing that email felt therapeutic, so I wrote a bunch more emails to Tim Cook whenever I have some grievances about Apple. From my late iPhone 6 shipment to things like missing links on the Apple website. I thought his secretary would just trash these mails.
Well, to my surprise, I got an email from Craig Federighi not long after, and it is from this email that I found out that the multiple-instancedness is no more ever since the GM release. Didn’t see this change anywhere on the change logs etc.
I mean, seriously. That was one of the best news of the year, but for it to only happen on the GM release, and with not much notification, is kinda frustrating. Felt like that previous guy mislead me.
I thought it would be smooth sailing from there, but there were more maddening API issues that Apple had. Their code example on resizing the keyboard simply did not work, and I had to do some ridiculous workaround that reminded me of my jailbreak development to get it working properly.
It’s totally ridiculous. Here’s another keyboard developer’s rant about 3rd party iOS keyboard development:
I experienced almost all that he experienced. It’s totally ridiculous.
The story from there was kinda monotonic then. Wrote a few more angry emails, got some responses, fumed at night out of anger from the API, but had to be rational and press on.
I’ve never been angrier/raged harder than the time when I tried to use their API. It’s kinda insane.
To Apple’s credit though, they didn’t ignore my emails and at least got me some engineers. Craig could have decided to just ignore my angry rants, but it looks like they’re doing something about it, however slowly.
But still. You can tell how frustrated I was by the length of this story I’m writing. There’s no way I’d have written anything as long as this if it weren’t for the enraging experience from developing the keyboard.