Shrimp Keyboard

Shrimp Keyboard

Evan Chu is the creator and developer of Ixhiamy Keyboard, an iOS 8 Keyboard aimed at Chinese & Japanese speakers. We saw that the highly rated app was among the top 10 sellers on Taiwan’s App Store, so we were eager to learn more about what Ixhiamy does and how it works.

Tim Anglade, VP of Product at Realm: How long have you been building apps for iOS?

Evan Chu: About two years. I’ve developed several apps. Actually, this keyboard extension is my third iOS app, but the other two were just free apps.

I usually develop apps that I want to use… The others didn’t sell well. [Laughter] But this keyboard app is actually selling pretty well. And part of that is because Realm is really a very powerful API. In the first place, I was using in-memory — I just used a map to look up my data, actually. I found that it took too much memory, which caused my keyboard to crash very often. So, that’s why I was trying to find a database solution. I figured that there’s Core Data and SQLite, but when I looked at the Core Data instructions, I just gave it up. [Laughter] So I searched the Web and found Realm, and thought that I could give it a try. And it turns out the performance is pretty good.

“I just used a map to look up my data, actually. I found that it took too much memory, which caused my keyboard to crash very often. So, that’s why I was trying to find a database solution.”

Tim: That’s good to hear. Let’s talk about the application a bit. So it’s a keyboard application, specifically targeted at the Chinese market. Could you explain what Ixhiamy is trying to do?

Evan: Simply put, this keyboard maps an English string to a Chinese word. So, for example, we can map an English string like “cop” to a single chinese word. It’s essentially a lookup tool.

T: Is this from the phonetic translation? Or is this from abbreviations that people use? Or from the first letter of every syllable? How does that lookup work, specifically?

E: The mapping was developed by a Taiwanese person, like, 20 years ago. He basically breaks down each Chinese word into an English string based on how it looks, how it sounds — how it’s pronounced — and relationships between Chinese words and English characters.

T: Is there a name for this mapping?

E: Yes, they have an official website. It’s Boshiamy.com. The mapping was actually patent-protected, but the patent expired, so I signed a contract with the original company back in Taiwan so that I could use the official mapping from them.

T: Is this for traditional Chinese speakers or also for Simplified Chinese?

E: It actually works for both. And also Japanese.

T: Oh, cool! That’s really nice. That explains the popularity of the application. And it’s not a free application. You make people pay for this keyboard, and you seem to be doing really well right now. The ratings are really good, and you’re getting a lot of likes on your Facebook page and everything. I was looking at App Annie, and it looks like you’re number eight this week overall in the Taiwanese App Store for iTunes, and you’re the number two utility. You’re doing well on the Chinese app store and a few other places as well. So that’s very exciting.

Let’s talk a bit more about the technical aspects of it. I actually installed quite a few keyboards when iOS 8 came out, and — as you mentioned — I saw a lot of crashes. The experience is very inconsistent for now, and I know it’s very tricky to do. Can you explain a little bit more about how the app works internally and what kinds of technologies you’re using?

E: In terms of the technology I’m using, it’s just basic Objective-C. I’m not using Swift because I am having a hard time understanding the optional values they introduce. I use Objective-C, and in terms of how it works, before I integrated Realm, I actually just read the mapping from a text file and put it into a map. And because there are approximately 100,000 mappings, 100,000 words for Traditional Chinese, Simplified, and Japanese, it’s about 400,000 words. So, I parsed the original text file and sent them into a map, and then saved that map into a user default. And then these would show in the hosting app. Then, in the keyboard extension, I just fetched the map out from the user default. That was the original implementation.

But when I integrated Realm, I actually just preprocessed the text file into Realm and used Objective-C to put those objects into Realm, and then I just copied the Realm file out and put them back into the bundle. That’s why I can use it in the keyboard extension.

T: What are you most proud of right now about the application? Is there a feature, or maybe an implementation detail, that you’re most excited about?

E: My keyboard has a special feature — dynamically extended buttons. So, when the user types, for example, “c” in options, I’ll put a list of words that map to “c.” Then, the user might key in “o” next to “c,” so that forms the string “co,” right? So, I need to present a list of Chinese words that map to “co.” One of my features is that the keyboard buttons will disable themselves if that button is not available for the next character.

T: That is a nice feature. I saw there are some very helpful screenshots and videos on your Facebook page.

E: Right, so it’s like filtering, because some English strings might not have any words associated with them. This feature is to eliminate the incorrect keystrokes.

During this process, for example, if the user types in three characters, some of the keys at the bottom of the keyboard will have been disabled. In this situation, when you touch the disabled buttons, I have a feature that programmatically finds the closest button and then outputs it. So, that’s what I call “dynamic button expansion,” because when some buttons are disabled and the user is typing very fast, he could mistakenly miss the button by several pixels. This is one of the features that causes a lot of low memory. [Laughs] The user probably won’t even notice the feature, actually, but it was pretty challenging to implement.

“The user probably won’t even notice the feature, actually, but it was pretty challenging to implement.”

T: That’s definitely great attention to detail. It’s nice to hear that you’re thinking of all these things to make the user experience better.

E: I really spent a lot of time on this application because the reason I developed it is that I myself need it. I learned this input method about 10 years ago, and I’ve been looking to use it on iOS for a very long time. So when Apple announced that iOS 8 would make custom keyboards available, I just jumped right in to start developing this keyboard. I’m glad it’s doing well. The response from most users has been pretty good.

T: That’s great. Do you have any upcoming apps that we should keep an eye out for?

E: I do have another very simple application, but it involves voice recognition, so it might not be available for several months.

T: Oh, OK, we’ll keep an eye on your website, and people can see if that next app comes live. But congrats on the keyboard. It’s good to hear that Realm worked out for you.

E: Sure, Realm is a pretty awesome product.

Ready for Realtime and Scale: Announcing Realm Mobile Platform 1.0

We’re proud to announce Realm Mobile Platform has left beta status and graduated to version 1.0! We’ve been hard at work fixing bugs, polishing rough edges, hardening the code, and adding more than a few new features. Learn more in the announcement post!


Realm Team

Realm Team

At Realm, our mission is to help developers build better apps faster. We provide a unique set of tools and platform technologies designed to make it easy for developers to build apps with sophisticated, powerful features — things like realtime collaboration, augmented reality, live data synchronization, offline experiences, messaging, and more.

Everything we build is developed with an eye toward enabling developers for what we believe the mobile internet evolves into — an open network of billions of users and trillions of devices, and realtime interactivity across them all.