Read the transcript
Jeroen Leenarts: Welcome to
another special episode of my
podcast. I'm sitting here with
Chris facili. He is the creator
of the knee hongo app. And it's
an interesting story he likes to
share with us because he's an
indie developer. But in his own
words, he took a while to get
there. And we're probably going
to dig into this a lot more. And
by the sound of it is someone
that is further along the same
path that that I'm on currently
because I have my day job and do
some stuff on the site. So
Chris, hi. Hi.
Chris Vasselli: Thanks for
having me.
Jeroen Leenarts: So how are you
doing today?
Chris Vasselli: I'm pretty good.
It's cold here in Vermont, that
snow on the ground. So that's
nice.
Jeroen Leenarts: So and it's now
at your place. It's afternoon
writes? Yeah, about four o'clock
in the afternoon. Okay, just to
get things started. Most people
if they know you, they probably
know you from your product.
Knee. hongo. Can you tell us a
little bit about that product?
Chris Vasselli: Yeah, sure. You
hongo is, you know, I talked
about it as a Japanese
dictionary and study tool.
Basically, it's got, you know,
full Japanese dictionary in it,
and then flashcards and some
tools. So you can like paste,
copy and paste text into it and
look up words from the paste
text really easily. As of about
six months ago, you can now take
pictures of you know, Japanese
texts that you see out in the
world. Or if you're reading
manga, or something, you can
take pictures to look up words.
But the sort of unique thing
that I was trying to do with
building the hongo was to make
it easy to have more context for
the words that you're studying.
So instead of just going and
getting a list of vocabulary off
the internet, the 1000 most
common words in Japanese or
something like that. It's all
about finding ways to study
words that you're actually
encountering in your real life.
Or in you know, if if you're
into video games, playing
Japanese video games, or if
you're living in Japan, things
you're encountering in real
life. So every word that you
look up in the dictionary
automatically gets turned into a
flashcard. And when you like,
copy and paste text into the
app, it automatically finds all
the words in it and turns those
into flashcards. So and then it
sort of links back to those. So
if you're looking at a word
later, you can see Oh, I saw
this, you know, this word showed
up from this chapter of an ebook
I was reading or this mug I was
reading or something like that.
So that's kind of the basic
premise of the app is really
trying to add more context to
the words and vocabulary that
you're studying in Japanese.
Jeroen Leenarts: Why your
Japanese dictionary app?
Chris Vasselli: Yeah, I mean, it
all started, I was living in
Japan. I lived in Japan for two
years. And when I was there, I
was studying Japanese full time
at a Japanese language school.
And it was kind of just the, you
know, the the app that I wish
existed. So you know, I can
actually tell the story where
when I was starting off in
Japan, I was studying in Japan.
You know, I had apps that I was
using, I had a flashcard app, I
use one called flashcards to
locks. I had a Japanese
dictionary app that I was using.
And, you know, I would try to
look up words in my Japanese
dictionary, and then make the
flashcards and flashcards to
locks to like be to study those
words that I'm actually
encountering. It got so tedious
just this act of constantly
trying to write out all of the
definitions of the word, looking
them up copying the definitions
over making flashcards and
finding myself spending way more
time just making the flashcards
than I was actually studying and
learning. So I ended up my first
sort of attempt at solving this
problem was I figured out that
the Japanese dictionary app I
used had an export option where
you could export to like a CSV
file. And you could export that
to Dropbox. And, and the
flashcard app I used had an
import that you could import,
you know, obviously, completely
different format. But so I had
this whole thing set up where
when I was living in Japan, I'd
leave my laptop sitting out on
my little desk in my tiny
Japanese apartment, connected to
the internet, I had a folder
action so that it would detect
when a new file got added to a
certain folder and Dropbox, it
would detect when I like
uploaded one of these exported
word lists from the dictionary
app, run a script that would
convert the file from the format
that they export to the format
expected by my flashcard app.
And then I could go on my phone
and go and then down in a wait
30 seconds and then go and
download it into my flashcard
app from Dropbox. So I kind of
got to this point where I was
like, Wait, there's got to be,
you know, a better way to do
this. And that's kind of where
any home goes. That was like the
first thing I did with the Home
Depot was basically build out a
dictionary that would
automatically create flashcards
from the words I looked up. That
was like feature number one, and
that's just something that I
wanted for myself. And then it's
all sort of like that was the
core sort of flow I wanted and
then I've sort of added on to
that and added on and added on
for a while now.
Jeroen Leenarts: I'm here A lot
of interesting stuff because I
know that the hongo app is an
iOS application. If you're an
iOS developer, did you study
Japanese in Japan? How the heck
did all that happen? Well, where
do I start? I guess, let's start
at the beginning. Okay, when did
you? When did you grown interest
into computers? Computer
Science, maybe programming?
Chris Vasselli: Sure. I mean, I,
it all kind of grew out of
videogames. For me. I was really
into video games as a kid, I
still am very into video games.
And so in my freshman year of
high school, I took my first
programming class, and I took a
visual basic class. So you know,
this is all Visual Basic is very
focused on forms and buttons and
fields and sort of just the
basic sort of stuff like that.
Jeroen Leenarts: Was that Visual
Basic dotnet, or Visual Basic?
Five or six?
Chris Vasselli: Oh, man, I don't
remember. So this was 2001. So
whatever it would have been,
then
Jeroen Leenarts: I think that
was like before the Common
Language Runtime. So that would
be like the true original Visual
Basic.
Chris Vasselli: Yeah. So. So I
was, I was learning this stuff.
And you know, but there was some
point where we learned how to
make like a shape. And then I
learned how to do keyboard
input. And then there was like,
then one day, they introduced
the timer. Oh, and it was just
this moment where like, wait, I
have a shape, I have keyboard
input, and I have a timer, I
could make a game with this. And
it was like this lightbulb
moment. And I went home that
night. And I made I made Pong,
you know, just like a basic two
player Pong, but like, Okay, if
I detect if the keyboard is, you
know, I have a timer that runs
and then every, whatever number,
you know, seconds or frames or
whatever it detects if the key
is down, and then it moves this
shape around. And yeah, I mean,
in retrospect, that was a pretty
pivotal moment for me that I
kind of figured out how to do
that. And then I went on and
took Java classes in high school
and switched over mostly to
doing Java stuff. But in high
school, I just did a lot of
making games, like I made a lot
of 2d 2d stuff, I liked to just
play around with trying seeing
how to build games in different
genres. So I made, you know, a
platformer game, I made a sort
of shmup shoot 'em up game, I
made, like an Advance Wars style
strategy game, and just played
around with it a lot and love
doing that. So. So that's kind
of how I got into the coding
side. Um, and, and then I went
to college and got a degree in
computer science ended up just
really sticking with that, and
really enjoying doing that. And
I went to work at my first job
out of college, actually, I had
an internship in college, and
then that went to my full time
job was at a company called Big
fix. And they're, like,
Enterprise Security Management.
stuff. So, so various, sort of
the kind of software that you'd
have installed on like, say,
you're a company with like,
hundreds of 1000s of computers
all over the world, and you need
to be able to have visibility
into what software is installed
on them. And, you know, what,
what, if they have the latest
patches, what their energy, you
know, sec power saving settings
are like all this sort of stuff.
So we wrote like a little client
that would run on all the
machines, and then you know, a
server component that could and
control and you know, deploy
patches and things like that. So
very different from what I'm
doing now.
Jeroen Leenarts: So just to
recap a little bit, you did
Visual Basic in your freshman
year, in high school, high
school. Yeah. Yeah. And then you
to Java classes, you graduated.
And then you started working at
this company that did remote
management of machines. Yeah. So
and then what happened? Because
we're not like, in any way,
shape, or form close to an indie
developer lifestyle? By the
sounds of it.
Chris Vasselli: No. I mean, that
was around the time I started
doing some side projects. Again,
I did a game. So my first iOS
project was a game called pipe
drop, which is still still out
there on the App Store. And, and
that was like iOS, maybe? I
think I started in iOS two, I
think it was I was four by the
time I actually released it, but
very early, early going of iOS,
and did that on the side. The
company I worked for got bought
by IBM. I stayed there for a
little bit, but then was kind of
just not really wanting to work
for IBM and wanted to do
something different. So my
husband got a job teaching
English in Japan through the JET
Program. And so I went with him
to Japan. Yeah, so with him to
Japan, I basically left my job
and did the full time Japanese
language classes for two years
while I was there. And during
that time was when you know,
actually my original plan when I
went to Japan was I wanted to
just make games Like, I went
there with the idea, okay, I'm
leaving my job. This is my
chance to just do my own thing.
I'm going to be an independent.
I'm going to be an indie game
developer. You know, that was my
plan.
Jeroen Leenarts: And how young
were you done?
Chris Vasselli: Oh, yeah. 21
Something like that. Yes. Yeah.
Jeroen Leenarts: Okay. So full
of ideas and hoping Yes. Which
is good. Because that's what you
need to be at that age. Yeah. So
Chris Vasselli: I mean, it's,
Jeroen Leenarts: I sound old
now.
Chris Vasselli: No, I know.
Yeah. Dreams. What are those?
Jeroen Leenarts: So yeah, you
were you were in Japan, focusing
your attention to the Japanese
language and the indie game
developer lifestyle. Yep. So you
mentioned your husband. So were
you already married at that
point? Or was it still something
that was ahead in the future?
Chris Vasselli: We were married
by then. Okay, so we met got
married maybe a year before we
left for Japan.
Jeroen Leenarts: So how did the
two of you meet?
Chris Vasselli: We met in high
school actually. We met in high
school sweethearts. Yeah,
exactly. Yeah. So we met in high
school, and then got married
actually, exactly 10 years after
we met.
Jeroen Leenarts: So then you
were in Japan? Yep. Studying,
trying to become an indie app
developer, then what happens?
Chris Vasselli: Yeah, so um, you
know, what I found was, as much
as I liked making games, these
like little projects that were
just kind of fund checking, kind
of trying to build a game engine
for, you know, a platformer,
game game engine for this or
that. When I decided I wanted to
get serious about it, I decided,
you know, it doesn't really make
sense for me to making these
game engines, game engines have
been kind of commoditized. I'm
not sure if that's the right
word. But there's unity, there's
all these things that the
engineer in me said, it makes no
sense for me to be spending my
time rebuilding this from
scratch, I should be using the
tools that are out there. And
then I can just focus on the
actual game making part. The
problem with that was once I
started to do that, I find I
didn't like that nearly as much.
I just found, like, without the
technical challenges of trying
to actually build, you know, the
internals of the game, and more
focused on just like game
design, and the game scripting
sort of stuff. I like it, but
not something I could do, you
know, 40 hours a week, and and
be satisfied with that. So.
Jeroen Leenarts: So you
basically you pivoted from game
development to other areas of
software development.
Chris Vasselli: Yeah, exactly.
So it was really then that I
sort of had around that time
when I was kind of realizing
that, and honestly, that was a
tough realization, that was
hard, because that was, this was
something I had been thinking
about for since I was a kid, you
know, wanting to be a game game
developer, and then realizing,
you know, all this sort of goal
I had been striving for for so
long, and then feeling like I
wasn't living up to that, you
know, that was really, really
hard. And one of the things that
really helped pull me out of
that was just finding something
to dive into, and really get
passionate about which I was
like, Okay, this is this thing
that I really want to exist, and
just really focusing on that.
And, you know, so that was when
I kind of started working on the
hongo. And, and yeah, it was
really sort of a tool for me to
really pull out of kind of what
could have been a really bad
depression, I think, was just
having this thing to focus on.
And, and, you know, I'm really
glad I did now it's, yeah, so
because I mean, the story that
goes from there, then as we come
back from Japan, I basically
launched an E hongo. About a
month before we came back from
Japan. And for the next like two
years, it basically didn't make
any money. And I was fine with
that. I basically had built it
for myself, and I wanted to
launch it on the App Store, as
you know, an accomplishment, but
wasn't really focused on it
making money. I went back and
joined a new company with some
of my colleagues from big my big
fix days. We formed a startup, I
worked on that, that one got
that startup got acquired by
box. And so I went and worked at
box for four years, I think it
was or maybe three.
Jeroen Leenarts: And in the
meantime, you kept adding and
improving the hongo.
Chris Vasselli: Yeah, so I kept
on it on the side, when I could
and kept building it and got to
a point where, you know, it was
making enough, my initial goal
was definitely to stick it out
until, you know, I could have
that be, you know, a full time
income. And I didn't quite get
there before I left to go on it
full time. But I got to the
point where I felt like okay, I
have a path here we have enough
savings to sort of,
Jeroen Leenarts: you could
decide upon, I give myself an X
amount of time, and if it
succeeds, it succeeds. If it
fails, then we'll just consider
other options.
Chris Vasselli: Exact That's
right. So that's the point that
I got to after. Yeah, I guess
four years at box. And then. And
that was two years ago now. So.
So yeah, it's continued to grow.
And now I'm doing it. You know,
I wouldn't say I'm a full time
indie developer, because I
really split my time with being
just a stay at home dad, I have
a four year old kid now. And so
it's, you know, a pretty great
lifestyle that I get to, you
know, keep on working on this
while he's at school, and then
spend a lot of time, you know,
in the afternoons and get to
sort of have that half of my
life, that's sort of half
fulfilling half of my life as
well.
Jeroen Leenarts: Okay. So just
to grab back a bit on box, you
were, what was your role there,
I was soft developer or?
Chris Vasselli: Well, so I came
in, I did a bunch of different
things at Box, actually, I came
in as part of this group that
was doing the security related
work. And I actually went on the
iOS app team, sort of as almost
like a guest developer on their
team. For a while, it wasn't
really part of their team, but I
came on to do some security
work. So I developed this extra
level of encryption, an extra
layer of encryption in their
their iOS app on top of what
Apple provides. So that was
basically based on your like box
credentials in your box, like at
Box specific credentials. And
then I went, and we were
building out our box for
desktop, which is a got releases
Box Drive is the name of the
public name for it. And so I was
the Mac developer for that. So I
basically built from scratch
their, their Mac UI for their,
their desktop client. And then
my like, last year there, I just
decided to try something totally
different that I've never done
before. And I went and worked on
their web app team for a year.
So it gives
Jeroen Leenarts: you valuable
experience and techniques that
you can now use for any hongo, I
guess. So with an E hongo. You
did it as a as a as a passion
project for quite some time. And
at some point, you started
gaining income from it. But can
you look back and say, What were
key moments in the business
model of the hongo that actually
allowed you to start creating an
income out of it and actually
growing that out to like, a
sustainable income for you and
your family?
Chris Vasselli: Yeah, sure.
Well, the first key moment, I
mean, the first things are just
around pricing. I started as a
single $4 in app purchase to
unlock clippings and flashcards.
So basically extra
functionality.
Jeroen Leenarts: So that was
like a pay once model.
Chris Vasselli: Yep, pay once
model. At some point, I decided
to up that to $8. And like,
basically got the same number of
sales at $8 as $4, maybe a
little bit less, but like, there
was just no reason to do it at
four instead of eight. Then the
next big moment that I had was,
was when I had a big surge in
downloads from China. And this
was kind of surprising to me as
it was an English Japanese
dictionary, wire, why am I
getting all these downloads from
China. And I eventually found
that there was a someone on like
a Japanese or not, I'm sorry, a
Chinese sort of q&a website,
almost like Quora, but in
Chinese had written up almost
like a guide to how to use my
app to look up Japanese words,
then get and use all the
features of the app to get to
Japanese words. And then when
you have the English definition,
to run it through. At the time,
it was a workflow now shortcuts,
iOS shortcuts to automatically
then translate that to Chinese.
And so there was this whole
contingent of people that were
using it. And it was like a
highly upvoted post that drove
all this traffic to my app. So I
took that as a sign that I
needed to take this Chinese
Chinese users more seriously,
and went ahead and spent a bunch
of time working on localization
into Chinese. And I couldn't get
access to a data source for
Japanese definitions of Japanese
words in Chinese. But I just did
what they were doing and tried
to make it a better experience.
So I machine translated all of
the English definitions upfront,
and added them in basically next
to the English you can have it
so that it will show the Chinese
machine translation. And all of
the like searching within the
app will search against the
Chinese machine translations and
things like that. So it just
kind of make gives it a little
more first class support to this
flow of having the Chinese
translations so that has been
really popular in China for a
long time was my largest market,
you know, up until maybe six
months to a year ago, which was
kind of mind boggling to me and
I never would have thought of
that that. That Chinese machine
translations of the English
definitions of Japanese words
would be useful. But it was. So
that was a big one.
Jeroen Leenarts: Okay. And you
mentioned that that that that
source of downloads sort of
dried up like a year ago, he's
me, you mentioned
Chris Vasselli: it leveled off
level, whereas I'm getting
growth elsewhere as the Chinese
stuff has kind of leveled off or
maybe gone down a little bit in
the last year, whereas I'm
finally kind of getting traction
in, in Europe and in the United
States now, that I didn't have
before. So I've continued to go
on and do localizations into
more languages. A lot of the all
the other languages, I actually
have native written definitions
for the Japanese words.
Jeroen Leenarts: So how big is
the word list for Japanese terms
in your dictionary app,
Chris Vasselli: it's about a
right now it's at about 190,000.
Japanese words. So it uses a
project called JM dict, which a
lot of the Japanese dictionaries
and apps you'll find out there
use. So that's yeah, up to about
190,000 with English
translations. And then I think
the second highest is Russian or
German, I think at like 60, or
80,000, or something like that.
So
Jeroen Leenarts: and with each
localization you do you have to
do translation, or that's
already available in this TMD
data source.
Chris Vasselli: So I do the
translations for the UI of the
app, but I, the translations, so
I do the translations for the
UI. And then I have a whole
system setup, that'll
automatically every time I down,
I have a Jenkins job that every
week, it generates the new set
of new JMX dict. File, finds all
of the untrained and machine
translated strings, you know,
all of the strings that don't
have a translation into say
German. And it'll run those
through a machine translator. So
when you're using the app in
German, maybe half all the
common entries will have native
trans native translations, all
of the other entries will have
machine translated translations.
And so every time I add a
language, it's sort of adding
that but it's mostly automated
at this point.
Jeroen Leenarts: So how many
languages does the app supports?
Chris Vasselli: It's English,
German, Spanish, French,
traditional Chinese simplified
Chinese, and Russian.
Jeroen Leenarts: Okay. So and
because there's a big difference
between Well, language as, as,
as Westerners know, it, compared
to, for instance, China, or
Japan, because they have like,
the symbols that they use for
writing, is that like,
challenging to wrap your head
around? If you're any regular
iOS app developer out there? Or
how is it to like, work with
these symbolic languages?
Chris Vasselli: Yeah, I mean,
there's some quirks to it. Like,
fonts are kind of a funny thing,
I'll give you an example of a
bug that's very specific to
that. I was getting these
reports that, like things were
getting cut out like strings or
elements of the UI were getting
cut off and things like that, or
looking looking wrong, or
showing showing the wrong
character. And what I finally
realized is, because the system
font is San Francisco and San
Francisco doesn't exist, for
Chinese or Japanese, they have
their own, like, fonts that are
effectively the system font. The
system font for Chinese draws
certain characters differently
than the system font for
Japanese. And if your phone is,
say, in English, or the but the,
you have like the preferred
language order, if Chinese is
above Japanese, it's going to
use the Chinese version of the
characters when it draws them.
So even in my app, when I'm
trying to display Japanese
characters, it will display them
using the system font in
Chinese, which is going to
display them differently than
the Japanese font. So funny
things like that, where I have
to, like I can't rely on the
system font, displaying things
in a consistent way. So I have
to be really careful to be like
using the correct font in
different places, making sure
I'm using a Japanese font. Other
than that, I mean, Apple is all
of the, you know, stuff in
Objective C and Swift all use
UTF, eight strings pretty easily
and universally. So there's not
a lot of challenge there. You
kind of get into all the same
challenges that you have with
localizing entity language. So
like Russian has been tricky,
just because it's a lot of the
texts and Russian comes out
really, really long. You know,
all the sort of classic
localization problems like that,
Jeroen Leenarts: but okay.
Currently, the app is listed
within app purchases that are
recurring. Is that change that
you made? A long time ago? Or
when did you switch from the
single purchase to like a
subscription model?
Chris Vasselli: Yeah, that's
kind of the next store step.
Next step of that story,
Jeroen Leenarts: I noticed that
you have recurring subscriptions
in your app. When did you create
that change? Because you
mentioned the leveling off of
the Chinese market like a year
ago. But when did you make the
change from a single purchase to
a subscription based model?
Chris Vasselli: Yeah, that was
about three or four years ago.
And that was another big moment
that had a big impact on on the
income from the app. I did it
right, just about right when
Apple started allowing apps to
switch to subscription models,
apps that weren't doing, you
know, content updates, but we're
doing feature updates. So I made
that switch. And that definitely
had a big impact, I think, I'd
guess it may be doubled my
income from the app switching to
that. So I switched from a
single $8 in app purchase to a
recurring subscription with a
lifetime option. The lifetime
option was effectively the same
in app purchase actually is the
exact same in a purchase as the
$8. Purchase used to be. But I
switch to something where I now
have an $8 per three month
subscription, a $20 per year or
a $50. Lifetime. Yeah. And so
that's helped a lot. That was a
big, big help. And then.
Jeroen Leenarts: So what was the
feedback that what was the
feedback that you were getting?
When you made this change to
your product, because of
obviously, the people that
already had the lifetime
subscription option at a at a
low rates, they could continue
working with the app the way it
already was, I guess. But any
any feedback positive or
negative when you made this
change?
Chris Vasselli: Very little, I
mean, I think most people that
owned it already, probably were
oblivious to the fact that the
price changed. I did get like
one really nasty App Store
review of someone saying this
person's, you know, price
gouging that, you know, don't
pay attention to any of these
five star reviews. They're all
from before he changed the
pricing. And now, you know, I
don't know something like that.
So I got a little bit of
pushback on that, but not a
significant amount, not enough
to worry about it.
Jeroen Leenarts: But it does it
change the way that you look or
deal with your products and
feature developments if you have
like either, initially you had
like single purchase events. And
now you have like, pretty much a
recurring income stream because
people are subscribed to your
product, it does that change
your way of working or how you
deal with feature releases on
your products.
Chris Vasselli: It does. And the
biggest thing about it that I
really love is it sort of aligns
what I want to be spending my
time on with what's going to
make me more money. And what I
mean by that is, when I had a
single in app purchase, once
someone purchased it, that was
it, like they weren't going to
be able to give me any more
money. So I ended up feeling
compelled to spend a lot more
time on marketing and trying to
get people to make that one
purchase, you know, trying to
get people improve the
experience the like, free part
of the app experience, improve
the free part of the app,
improve the Yeah, the marketing
and try and do Facebook ads and
all this sort of stuff. Once I
switch to a subscription model
all the sudden, actually just
making this paid experience of
the app better. So that people
will continue their
subscriptions is directly in
tied to how much money I make
from the app. So that that
really feels great, because
that's the part that I really
enjoy more, much more than the
marketing is actually building
out new features. And now that's
like, I can feel really good
that well, this is what I need
to be doing to keep my
subscribers happy.
Jeroen Leenarts: So and how
sticky are your subscribers if I
might ask?
Chris Vasselli: Um, it's a good
question. I'm it's still
steadily growing. I think I'm up
to maybe a little over 1000
subscribers now. So I definitely
have significant churn but but
it's overall I'm, I'm, you know,
growing slowly, so I feel pretty
good about that. And, you know,
I just people are some people
are going to be taking a
Japanese language class for a
semester or something, and then
they're not going to use
Japanese anymore. So I
understand that. Yeah. I don't
expect people to sort of use it
forever.
Jeroen Leenarts: Um, so let's
see. We talked about ni hongo in
the sense. Yeah, ni hongo is
currently an iOS app. And I
think it also runs on the new M
one apple silicon if people try
that. So how's that experience
been for you like supporting
somewhat like this new platform,
even though it is strictly an
iOS app? By the looks of it?
Chris Vasselli: Yeah, It's kind
of nice in a way that I can dip
my toes into the Mac catalyst
world. And I can get an app out
there without needing to deal
with all of the, you know,
making sure I have x86 versions
of all of the libraries that I'm
importing and things like that.
So I did get the developer
transition kit. And I built me
hongo on it, which was kind of a
pain, to be honest, like, these
days are definitely rough, rough
products, not meant for public
consumption. So but I got it
running. And I was able to fix a
couple crashes. And I adjusted
some of the text, you know, that
was very iOS specific, like, go
to the Settings app and do XYZ,
I could change to go to System
Preferences and do this and
things like that. So I have, I
think, a grand total of maybe 20
users that are on the Mac
version right now. And I don't
have an M one Mac yet. So
they're kind of, you know, the
wild west there right now.
Jeroen Leenarts: Yeah, they're
testing it for you.
Chris Vasselli: Exactly. They're
testing it for me. And, you
know, I'd be happy to fix
anything if it goes wrong. But
it's not a focus right now, just
because the number of people is
so small. But like I said, it
was a nice way actually to kind
of test the waters. And I think
if I go into a Mac catalyst,
now, Mac catalyst version, a lot
of the a good chunk of the work
has already been done just
getting that the M M, one Mac
version going. So it sort of
splits up that work nicely. And
I think I'd like to do it, I
think it's a natural app to do a
Mac catalyst version, because a
lot of people want to create
their flashcard decks on the
Mac, or copy and paste text from
a website that they're viewing
on their Mac, or things like
that. And then they want to do
study their flashcards they want
to do on their phone, and they
want to read their, you know,
ebook, or manga or something
they want to do on their iPad.
So it's like, there's a really
natural way to use kneehole on
all these devices. So it's a
pretty natural fit to do Mac
catalyst.
Jeroen Leenarts: So um, if you
look at a product, is there any
backend involved with Nihon
Gore's all the data packaged in
the app binary,
Chris Vasselli: it's basically
all in the app binary, it's
actually been really nice, as
you know, a developer with
experience and apps that have
more of a back end component.
Just like from a testing
perspective, it's so nice to not
have to worry about having a
back end that you're interacting
with and have everything feel a
little more self contained. And
deterministic, is nice. But
yeah, I'm working on Cloud
syncing right now. And that's
going to be the biggest sort of,
you know, quote, unquote, back
end feature I have. But even
that is I'm not running my own
servers, I'm just using Cloud
kit, and letting you know, Apple
do that part.
Jeroen Leenarts: So using the
cloud kit, key value data store,
most likely, I guess, to sync
the data between the devices.
Chris Vasselli: I'm using that
for this, like preferences and
things like that, but the Oh. So
I'm, I'm using a library called
ensembles for the syncing,
because that's mostly a core
database app. And I tried out
the core data over cloud kit,
stuff that Apple added in iOS
13, and didn't quite fit my
needs. So I'm using a library
called ensembles, which then
basically ensembles is just a
layer that sits atop any cloud
file system. So you can choose
your back end, it could be
cloudkit. It could be Firebase.
It could be, you know, Dropbox,
any any number of things. But
I'm choosing to use Cloud kit
for them
Jeroen Leenarts: now, because it
scales nicely with the amount of
usage of your product. Yeah, and
I don't have to pay anything. So
basically, the data is
serialized into into cloudkit
records, then,
Chris Vasselli: yeah, so
basically, ensembles does
everything in terms of files.
And so it treats cloudkit Almost
as if it were like a virtual,
like a file system. So you
actually have each record
represents a file, and then you
have a record that represents
like a directory, and things
like that. So it's sort of this
weird abstraction layer where
it's turning cloudkit into a
file system. Even that's not how
it really normally is. But and
then ensembles sort of works
with having files that contain
lists of changes, basically,
like these JSON files that are
lists of this, you know, this
core data object with this
identifier made a change to this
property. And so it's all sort
of, there's sort of a bunch of
layers of abstraction there.
Jeroen Leenarts: Oh, well, the
cool part is that you don't have
to run your own data center now.
And, and one is this syncing
feature. Is it already live or
are you still working on it?
Chris Vasselli: Still working on
it? I'm hoping maybe by the end
of this month, I can get it out
but it was one of these features
that I started, you know, back
in June or something and thought
this year would go a little
differently. So I thought I'd
have it out by the end of
September. And here we are in
January. And
Jeroen Leenarts: so So what are
your plans for 2021? With ni
hongo. And you're in the end
your indie dev lifestyle?
Chris Vasselli: Yeah, I mean,
I've got a huge backlog, I get
feature requests from people all
the time. So I want to, you
know, take off some of those
feet common feature requests,
adding example sentences onto a
flashcards is a big one. Things
like search as you type, you
know, the searches, right now
you have to type something out
in the hit enter. So I want to
make that faster. And then the
bit larger scope things is I
think a Mac catalyst version is
something I'd love to tackle
this year. I was waiting on the
cloud syncing before doing that,
because I think, like I said, I
think your phone is still going
to be kind of your primary tool
for any hongo. And the Mac is a
little bit of a secondary one.
And so you really need to be
able to sync the data for that
to work well. So. But now that
I've got the cloud syncing,
almost done, Mac catalyst app
would be great.
Jeroen Leenarts: Um, one thing
that we didn't discuss yet about
your product is that you also
use the camera to detect
Japanese literature's from any
source out there. So any
challenge is there to actually
do the machine translation of
what you actually capture with
the camera to something that is
usable within your app.
Chris Vasselli: Yeah, there was
a lot that went into that
feature, I've the first thing I
did was I used I spent a lot of
time trying to get Tesseract to
work well, this is a library
that's been around for maybe 20
years, Google sponsors it now.
And with Tesseract, I'd be
running the machine or the OCR
the optical character
recognition on device. And that
was really appealing to me,
because you know, the app is so
there's no back end for the app
right now. So that was really
appealing to just keep it on on
device, you don't have to have
an internet connection. So I
started by working really hard
at trying to get Tesseract to
work well and just was not
getting good results, I'd have
accuracy in the like 60 to 70%
range. Whereas Google's OCR
cloud, OCR would be like 95%. So
I ended up, you know, building a
whole toolset that's agnostic to
what back end you're using, you
could stick Tesseract in there,
you could do a call off to
Google's servers, or Microsoft
or any other service. I ended up
settling on Google's just
because they're, you know, as
getting the best performance
from them. So I ended up using
Google's cloud back end. But
then the other thing that I
really wanted to focus on was
coming up with a better way to
present this to users. So a
really common pattern that
you'll see in apps for doing OCR
is you have a little sort of
viewfinder box, and you drag
around this viewfinder box in
the corners of this and position
it over the text that you want
to do the OCR on, and then it'll
like show the definition of that
word next to it or something
like that. Yeah. Or in the case
of Google Translate, you take a
picture, and then you like scrub
your finger over the text and
sort of draw around the text you
want. So I wanted to try
something different. And what I
came up with was this idea of
having the text basically turn
into turn blue, and make it look
like you can just tap on it. And
so that's what I did is I
basically made it so every word
that it detects it highlights in
blue, and you can tap on them to
like get a little pop over that
shows the definition. So there
was a lot of work that went into
that of doing, I actually got to
dive into some core image stuff
and metal shaders. And to do
that thresholding, the, where
you tried to detect the edge of
the character, so that I could
turn just the pixels within the
character blue. Because what you
get back from Google is just a
bounding box around the text
that it detected. But I wanted
to actually highlight very
precisely the character and turn
it blue in the image. And so
that was actually a lot of fun
and really interesting new area
to get into of trying to do that
thresholding and image
processing stuff.
Jeroen Leenarts: Okay. And this
is typically because if I'm
correct you using the online
Google Cloud Vision API for
this, but this is typically one
of those features, features that
you cannot do without this
feature that you cannot do
without a subscription model,
right? Because if it's a one
time purchase, then how are you
going to offset the costs of
interacting with this API? I
guess?
Chris Vasselli: It's true. And
that's one you know, good case
for doing the the subscription
model i and i I was paranoid
about that I was very paranoid,
like, it's really a little scary
when you're first going to
launch this feature, and like,
well, what if people are, you
know, taking 50 photos a day,
and I totally miscalculated, and
I'm gonna go broke, but I
actually end up spending, I
think I spend, I send 20 bucks
to Google a month or something.
So, you know, I probably could
not, you know, I'm not worried
about my lifetime subscribers,
you know, making me go bankrupt
or anything.
Jeroen Leenarts: Okay. Well,
really cool. Because basically,
it's, it's a simple app, if you
look at it, and you hongo but it
packs a lot of features, and you
do some, some interesting things
within the app, just to
streamline the to streamline the
process for the end user. So
people learning Japanese
probably will end up with this
app quite naturally. I think. So
are there any other things that
you would like to share with my
listeners?
Chris Vasselli: Hmm, um, I mean,
I think that's been, I guess, I
would love to just emphasize
that my path was not, you know,
straight, straight to, you know,
high profitability. This was
something that I really enjoyed
finding something that I wanted
to work on. I was happy to be
working on it every day, because
I was using it every day. And it
was something that I wanted. And
going into that with that
mindset, I think made it a lot
less stressful, I think, just to
be able to not be so much
focused on making a ton of
money, but just building
something that I loved, and I
wanted, and then sort of
nurturing that on the side. And
yeah, I think from the time that
I started it to now it's been
about eight years, I think. And
so it's just been kind of a
slow, slow, steady process. And
you know, that's a total,
totally legitimate alternative
path towards indie development.
Jeroen Leenarts: So because it's
now I think, four years ago,
that you really started gaining
traction on the product, right?
And that's about right. And when
did you? When did you actually
quit your day job and fully
focus on anyango?
Chris Vasselli: About two years
ago and
Jeroen Leenarts: a half, two
years ago? Okay, cool. So yeah,
that's an interesting journey, I
think. And it's interesting to
hear that, that you actually
took a while to actually develop
the product, because you really
were scratching your own itch.
And in the end, you ended up
something that was, maybe by
chance, I don't know how focused
you were on actually marketing
it, but that it was really
something that was marketable,
and creates the sustainable
income for you and your family.
Any parting words of wisdom or
tips that you'd like to share
with people?
Chris Vasselli: I think another
thing is just don't tie your own
self worth to your professional
goals. I think that was a lesson
I learned really hard with that
experience of trying to become
an indie, indie game developer.
I think keeping a fair distance
between that and realizing that,
you know, there's other other
paths that your life can take,
and, and that's good, too, and,
and to not sort of have your
heart set in one direction was
something that was important for
me to learn. And I would
definitely suggest anybody else
that's trying to do this to sort
of have that flexibility in
mind.
Jeroen Leenarts: So keep your
mind open and find what you're
passionate about. Yeah. Okay,
Chris, thank you very much for
your time. It was an interesting
story you were able to share
with people that are listening.
And thank you so much for your
time. Thanks for having me.