Steve Ridout Indie web developer and creator of Readlang

Readlang - My Bootstrapped Language Learning Web-App

March 22, 2014

I’m 16 months into my language learning startup, Readlang. So far I’ve been working completely alone, learning a lot about web development, design and marketing as I go. I’d like to say that I’m learning about running a business too, but calling it a business sounds like a stretch, since it’s still only making pocket change.

This is going to be brutally honest, I’m not afraid to share numbers. For starters, here’s the performance of the site over it’s entire lifetime so far, from Nov 2012 to mid March 2014:

Unique visitors: 24,717
Signups: 4,667 (19% of visitors)
Paying Subscribers: 126 (3.1% of signups, excluding the first 600 users who have free lifetime membership)
Total Revenue: $1045

And this is how I arrived here, month by month…

November 2012 the idea

I’d been living in Madrid for 9 months, yet my Spanish was progressing slowly. I wanted to read a novel on my iPad and couldn’t find a method I liked. I wanted these features:

At the same time, I was looking for an idea that had the potential to turn into a small software business, and so the idea for Readlang was born.

The initial prototype, knocked together in an afternoon

I googled for similar projects and didn’t find anything exactly matching my needs (although I’ve since found many in this general area). The closest was a site called LingQ but the interface was too cluttered for my tastes, especially to read long form content like a novel, and the free plan is very crippled allowing a total of just 20 words, so you need to pay $10 / month to use it. If LingQ were making a business from this, I figured I had a chance by making a freemium app with a useable free plan, and geared towards reading long form content in a distraction free environment.

I created a static HTML page prototype in a few hours. A single page of text, where clicking on any word would trigger a Google Translate API call and replace the original word with an in-line translation. I’d never seen a reading tool do inline translation like this, it was simple, fast, and worked surprisingly well. Even where the translations weren’t perfect they were good enough to understand the meaning of the text almost all the time, and it felt less distracting and faster to read with than a typical popup dictionary.

I was encouraged enough to continue.

Development

  • Click to translate

Users 1

  • Just me

December 2012 the tech stack

My first decision was to choose a technology stack. This was my first project with a backend so my choice was wide open, and I decided upon:

In a couple of weeks I had a simple version working which let me ditch my paperback copy of Intervencion and start reading it on Readlang. Everything was very ugly and buggy but it worked, and I was using it religiously every night.

Development

  • Uploading of texts
  • Pagination: Tricky to implement in a web-app, but more suited to long form content like novels
  • User authentication
  • Simple flashcards

Users 3 (+2)

  • My girlfriend
  • An ex-colleague from Mendeley
Looks cool, but it should show alternative translations

January 2013 friends and family

Continued laying the foundations with more core features and bug fixing. It’s very exciting to iterate on such a young product you’re using yourself. Every night I would find bugs or come up with improvements that I would implement the following day. The only problem – reading before sleep was no longer so relaxing!

I created accounts for a few friends and family to try out. Almost nobody did, and I can’t blame them given that:

  1. it was still rough and buggy
  2. most of them weren’t even looking for such a tool

I started the Readlang Blog, and opened Readlang up for public beta, in preparation for the early adopters.

Development

  • Importer bookmarklet - imports plain text versions of websites a la Instapaper
  • Edit flashcards - for correcting bad translations
  • Spaced repetition algorithm - uses an algorithm to schedule learning

Users 15 (+12)

  • Friends and family - didn’t use it much
I don't know how to add my own texts
The flashcards are boring, I want to type or have multiple choice questions

February 2013 public beta

With no marketing effort, predictably few users turned up. This was intentional, I was still hashing out the core feature set, and adding more bugs than I was fixing.

One key decision I made was to let anybody use the site without signing up, I figured that people wouldn’t have enough confidence in the site without being able to try it out first. The anonymous pre-signup mode uses localStorage to store books and words, with the benefit that trial customers don’t put much load on the server so I am more resistant to traffic spikes more easily. It makes the client side javascript more complicated though.

To close the month, I created my first screencast video, which took hours of stops and starts to try to get right.

Development

Users 29 (+14)

  • Invited a few more friends and colleagues
I can't scroll, how do I change the page, this is confusing!

March 2013 first round of publicity

The introduction screencast, used prominently on the landing page for the next 6 months.

I put on my designer hat and spruced up the look of the site, and landed on the white Georgia font on a green background (Readlang) that’s still used today.

The old video was already out of date so I made a new one less than two weeks later, which would stay on the homepage for the next 6 months.

The first public call for feedback was this How To Learn Any Language post. I got 38 new visitors in March from this post, which is small but very well targeted. The forum is frequented by some hard core language geeks and polyglots, who discuss techniques like the Gold List Method, the 10,000 Sentences Method, and Massive Cloze Deletion. The response to Readlang was encouraging and they gave me a lot of great feedback, in fact all of the features listed this month were in response to their suggestions.

It was from this forum I learned about the existence of LWT (Learning With Texts), an open source clone of LingQ with very similar goals to Readlang. It’s creator hangs out there too and gave me some nice feedback and this ominous warning:

I don't think that you will make a lot money out of such a language learning website. IMHO you will never earn so much money that all the hours of work will ever get paid.

It gave me pause for thought, but buoyed by the rest of the feedback I carried on regardless.

The second call for feedback was this post on the /r/LanguageLearning subreddit. It sent a more healthy 183 visitors my way. Again the feedback was encouraging.

I was very excited to see an unsolicited blog post about Readlang here on Page F30. I added some social sharing buttons to the footer to try to capitalise on the new influx of users. Things were going well.

Development

  • Multi-word phrase translation
  • Additional dictionary definitions in sidebar
  • Export of words to Anki (popular open source flashcard tool, with offline mobile apps)
  • Chrome extension - Web Importer

Users 168 (+139)

  • Lots of feedback from Reddit and How To Learn Any Language
Wow, that's really nice:) … I LOVE the easy flashcard creation especially.
  • Blog post on pagef30.com
The site is still beta but has a nice clean design and feels very smooth… All in all it seems like a fairly effortless way to pick up some more vocabulary.

April 2013 the YouTube distraction

The Little Price, synchronised text and audio

This month marked a minor turning point – the site was finally working well for my needs. There was plenty of room for improvement but I wasn’t lacking any essential features. So when priorising tasks my mantra started shifting from “what do I want?” to “what do users want?” and most of all, “what will attract more users?”

I may have made a mistake at this point. I should have put effort on polishing and marketing the current feature set. Instead, seduced by feature-itis, I decided the site needed audio support to compete with LingQ and LWT.

I spent a couple of weeks on an embedded audio player which the user could synchronize with the text. I planned to store uploaded audio files on Amazon S3 but after taking a look at the YouTube API I realised that would be simpler to implement and would allow access to a huge library of free audio and video content.

The feature has since proved popular, with users syncing and sharing many videos, most commonly music videos. But I feel it’s made the site less focussed on it’s primary use case of reading long form content so I’m not convinced it was a the best idea, and that I should have abandoned it, or stuck to pure audio which would better suit listening to podcasts or audiobooks.

Development

  • Change the scheduling algorithm to provide all flashcards at a fixed time of day
  • Audio YouTube video synchronisation
  • Bug fixing - the code for updating word counts for your scheduled words was fiddly, but I got it working smoothly (and then 4 months later I would rip it out completely since I didn’t like the feature!)

Users 256 (+88)

  • I tried to be helpful on some Reddit threads and picked up a few more users along the way
I don't like the way the flashcards are scheduled at different times during the day

May 2013 metrics

I had basic Google Analytics set up but didn’t have a good handle on what users were doing with the site. I rectified this by storing all my API calls in the database and creating with a custom page showing the daily and weekly usage of various features. I realised many signed up users hadn’t even translated a single word, so I added a modal dialog the first time they see the reader page and tell them to “Click on any word to translate it”.

I put $20 into Google Adwords campaign and spent half of it over a few days. It was useless - I paid about $0.40 per click and got an 89% bounce rate from these visitors, when my average bounce rate at the time was 45%. Granted, there were many optimisations I could make, but even so, AdWords looked unlikely to ever make sense.

A big problem for new users was the lack of content ready to read on the site. They needed to either upload or import a text first. I tried to solve this by allowing users to share texts in a public library. Sharing didn’t take off at first because:

Despite this, the sharing feature it allowed me to seed content for newcomers to read, without need for importing.

(To date, over 900 texts have been shared, and to avoid copyright issues I’ve had to remove Harry Potter 20 times in various languages!)

Development

  • Walkthrough dialogs
  • Sharing feature
  • Hacked together a chapters feature, which has only ever been used for the El Principito example text (general support for chapters is commonly requested, I should to get back to that)
  • Audio pronunciation using Microsoft Translate API
  • Suggested links for each language, e.g. BBC, El Pais, Wikipedia
  • User activity metrics

Users 389 (+133)

Readlang + Podclub = My Latest Language Learning Obsession

June 2013 growing Google Translate expenses

I was happy to discover that a guy called Tom Tabaxzynski had created this YouTube screencast of Readlang. It was disturbing to see the way he translated a whole sentence as if that was the normal way to use Readlang. I would normally translate single words and occasionally phrases of up to 4 words or so. I dug into my usage logs and found that some users were routinely translating very long phrases. This had me spooked since:

  1. Google charge for translations per character.
  2. You had to build up a phrase one word at a time. e.g. to translate “not my cup of tea”, it would send all of the following to Google:
"not", "not my", "not my cup", "not my cup of", "not my cup of tea"

My Google Translate expenses had quadrupled from $4 to $16 in one month, which wasn’t a lot but the trend was alarming. For this reason, I finally got around to implementing drag/swipe to translate, which was better for my bank account and a nicer experience for users. I also limited the length of phrases to 6 words each (and later upped it to 8 words after some user feedback).

It was time to think about charging users. Since translations would be the largest per-user expense if the site grew, I based pricing around these. I chose to limit phrase translations to only 5 per day for free users, and offer unlimited phrases (up to 6 words each) for paying users. I chose an initial price of $10 per year, which was low, but I figured it should easily cover the Google translate costs and would test the waters to see if people would pay, after all the product was still in beta (and still is!). As appreciation for using the early beta, existing users were not charged, but soon I started asking for payment from new users…

Development

  • Add testimonials to landing page
  • Readability metrics - a very simple home-grown algorithm for estimated difficulty of texts, I’ve been meaning to open source this to encourage the community to improve it.
  • Drag to translate - required implementations for both the mouse dragging and touch swiping APIs
  • PayPal for subscription plans

Users 561 (+172)

July 2013 revenue begins

First version of the payment dialog

On July 1st I switched on payments. New users were presented with the basic looking dialog to the right after translating 5 phrases in a single day.

Amazingly, only 2 days later, I woke up to see an email from PayPal - I had my first paying customer! Actually, not just one, there were 2 on the same morning, while I was sleeping! It’s crazy but that $20 gave me a great boost, a feeling that this might actually work.

Development

  • Prioritise phrases based on the frequency of the words within
  • Allow a word to have multiple different contexts
  • While in the flashcards, allow clicking to translate words in the example context
  • Star word to prioritise learning them
  • Chrome web store app - just a glorified bookmark, but it’s free exposure

Users 1087 (+426)

August 2013 time for a break

Responding to a support request from Korchula, Croatia.

<nerdalert>In Dubrovnik we spotted Peter Dinklage a.k.a. Tyrion Lannister on a break from filming Game of Thrones!</nerdalert>

A disturbing story appeared on the front page of Hacker News at this time: Shutting Down a Dream. It’s the story of the web site Word Champ that includes a web reading interface, translation, and spaced repetition flashcards (sound familiar?) that was earning so little money it needed to be shut down. Language learning websites seem to be a tough niche to crack, was it possible to make a business with Readlang? This knocked my enthusiasm down a notch, but I was still optimistic. I commented thanking the author for the story and linked to Readlang.

Something that bothered me about the flashcard scheduling was the feeling of guilt that would take hold when you have a backlog waiting for you. It plagues Anki and other SRS (spaced repetition system) software too. I gave it some thought and decided to remove the guilt-inducing backlog count, and allow you to practise your flashcards in smaller batches as suited you. Read more here. I’m still very happy with this modification.

It was encouraging to be getting most of my traffic from word of mouth and referrals, but I felt I was missing out on search engine traffic, which was very low. In fact, most of the traffic from Google was from people specifically searching for “Readlang”. I wanted people who were searching for things like “read Spanish”, “learn French”, “learn Italian from stories”. I auto-generated landing pages for each of the supported languages, which were all identical except for the title and a short list of links to public texts if they existed. These pages never attracted many visitors, and I removed them months later just in case Google may penalise me for duplicating content.

I took my hard earned riches ($140 in revenue!) and went on holiday. I kitted myself out with an iPad, a bluetooth keyboard, and a copy of Prompt so that I could ssh to my server if needed, and headed to Croatia.

Development

  • Simplify spaced repetition scheduling
  • Landing page for each language

Users 1261 (+174)

  • Paying subscribers: 19 (+9)
  • User growth decreases back to normal
  • Some visitors arrived from a comment I left on the Shutting Down a Dream blog post

September 2013

I’d been thinking – it doesn’t make sense to have so many different language learning websites and apps, all of which are unaware of your general learning progress. Surely it would be better if there was an open platform that all learning tools would use.

I took a small step in that direction. I implemented OAuth to allow anyone to create an app or game that could read and edit user’s Readlang words. I created a pretty crappy game based on this and put the source code on github. I emailed a few people but didn’t publicise it. I’ll probably return to this in one of the following cases:

The promo video, out of date within weeks, but still used on the landing page.

I created a new video to put on the landing page. This one was scripted and edited to be a promo video instead of an instructional one. I even tried my hand at a Spanish version!

Almost immediately after creating the promo video, I added a feature that made it out of date – the Web Reader. The impetus for this was the feedback I saw in the comments to Shutting Down a Dream, a common theme was that users really wanted to find a replacement for it’s Web Reader feature. To implement this I improved the translator bookmarklet created way back in February. The old translator bookmarklet worked by doing some RegExp string substitution on the entire page HTML to fill it up with span tags. The new approach was to traverse the DOM and perform more selective replacement of each text node with span nodes, and worked more reliably than the old one.

This month I sent my first feature update newsletter to the site’s first 500 users and got a respectable 8% click through rate.

Development

  • Open API - allows access to users words
  • Promo video - out of date already
  • Credit card payment option with Stripe
  • Increase free plan to 20 phrases per day after a few complaints from users who ran through the 5 very quickly
  • Replace the old bookmarklet and Chrome Extension with the Web Reader – allows translating words without leaving the page. Old importer still available via the Import button in the toolbar

Users 1586 (+325)

Thanks for allowing use of this tool for free. I continue to recommend to anyone I can.
You got any investment/revenue for this yet? Seems to me like it has legs to be a proper business.

October 2013 traffic

I got very excited on 4th October to see 20 people using the site concurrently! The pattern suggested a school was using it in their classes throughout the day. I’ve since noticed other schools using it. This was pleasantly surprising since it was designed purely as a self study tool.

I followed up last months successful Mail Chimp newsletter with this failed one, which I’m almost embarrased to link to. The copy at the top provides no value to users and is written completely from my point of view. The interesting parts are buried at the bottom. This performed predictably worse, with a 4% click through and 1.8% unsubscribe rate, yikes! I haven’t sent another email via MailChimp, not because I don’t like it, but because it’s too expensive now that I’ve outgrown the free plan.

Being a single page app, Readlang was almost completely invisible to Google and other search engines. The only part they could see was the landing page. This seemed like a waste since I could potentially be generating a long tail of search engine traffic based on the growing library of public content on the site. To this end, I tried to serve static versions of many pages in <noscript> tags, pregenerated using Zombie.js. This has been in production off and on for a while but is a hacky solution and I’ve yet to solve this nicely.

The most exciting thing that happened this month was an influx of new visitors from this blog post on esl.about.com. Typical traffic at the time was about 50 new, and 70 returning visits per day. The largest spike of traffic from that blog post came on the 16th October (curiously, 6 days after it was posted) when I got a whopping 935 new visitors, of whom 158 signed up for accounts!

I had a couple of requests for an alternative payment option to PayPal. Stripe had just launched in the UK and I’d heard good things, so I added it. Integration was fairly simple, and the modal checkout dialog they provide is very nice, in theory allowing you to pay without leaving the page. In practise I needed to redirect to a https page in order to show the dialog, but still, it was nice. Of the payments this month, 15 (65%) came via Stripe. Since then, 42% have chosen to pay with Stripe, the rest with PayPal.

(You may wonder why I don’t just make the whole site https. It’s because I need to support http iFrames. There’s a few things I could write about the hassles of using both http and https, but that can wait for another blog post, this one’s long enough!)

Development

  • Stripe for payments
  • Use zombieJS to render HTML on the server

Users 2459 (+873)

cannot recommend this enough, it's simply brilliant

November 2013 happy birthday!

I wanted to inject some life into the public library, so I added Reddit style voting and spruced up the UI with thumbnail images. Ideally, I would have liked to add commenting too. I considered using Disqus as a stop-gap solution, but in the end decided to wait and one day implement a more integrated solution. I also added the Reddit style voting to the Web Reader bookmarklet/extension, so that users could recommend any web page without importing it to Readlang first.

I was worried about potential copyright issues with people sharing imported versions of articles. It’s the same issue I imagine read-it-later services like Instapaper, Readability and Pocket worry about. My solution was that any shared text that came via the importer would be shared as a link to the original article. Any user who follows the link would then need to open the Web Reader manually to translate, which they may not have installed yet. This sucks in terms of UX, ideally the Web Reader toolbar would be loaded automatically, but this isn’t technically possible (at least not for the bookmarklet, it probably is for the Chrome Extension) and the best solution I came up with was to present a dialog saying “You are leaving Readlang, please install the Web Reader bookmarklet or extension to read this article…”.

Readlang's new home - the Madrid International Lab

Up until then, I’d been working from the lounge of my flat in Madrid which wasn’t ideal. I wasn’t getting much exercise or interaction with people. In the evenings my girlfriend would want to relax, whereas I wanted to go out for a walk since I’d been stuck indoors all day! That’s why I jumped at the chance to get set up at the Madrid International Lab, a free co-working space for international entrepreneurs. I have a much healthier routine now that I come to work here every day. It’s great and I almost don’t want to recommend it in case it becomes too crowded!

I was planning to raise the price, but since it was approaching Readlang’s one year anniversary, to celebrate I created a special offer – for a few days I halved the price from $9.99 / year to $4.99 / year, and announced it via email to all users who had reached the free limit and not yet upgraded. It succeed – I received 16 new payments over 3 days. It wasn’t much money, but for people to pay anything shows they value the service.

Development

  • Reddit voting - get people sharing more, provide useful library of content.
  • Share links instead of imported texts on public library
  • Customisable Dictionaries - allow users to change the iframe dictionary themselves
  • Typing mode - allow typing answers to flashcards
  • Fix awkward bug where http and https version of site don’t share the same localStorage. Solution involved embedding an invisible https iframe on the http site, urgh!
  • Set up amazon SES emailing. Used for opt-in daily reminder emails, and automatic welcome emails
  • Start tracking events with Google Analytics

Users 2845 (+386)

  • Paying subscribers: 84 (+18 at $9.99 / year, +16 at $4.99 / year)
  • Main referral sources were Duolingo, About.com and Reddit
I've started using Readlang every day and I'm picking up the 'rhythm' of the language along with new words and phrases. Plus, it's fun to listen to new kinds of music. :)

December 2013 payments dry up

December got off to a slow start in terms of payments. No one was buying at the new $19.99 price point. I begun to regret the special offer, since it meant I couldn’t answer any of the following questions:

By the 11th there were still no payments, and I changed the pricing to be tri-monthly at $4.99. The orders finally started trickling in again, but whether this is due to the new pricing, or just the build up of new users after the offer, is unclear. In retrospect, I should have held out longer at the $19.99 / year price before changing my mind.

By the start of 2014, December had brought only 7 payments at $4.99, one of which from my mum! Things were starting to look bleak. After working over a year with no pay, and the prospect of earning anything like a salary still distant, I was questioning how much longer I should continue. There was still huge potential to grow, but there was also lots of competition, more that I realised when I started. Over the year I seemed to find a new competitor every couple of weeks and had to maintain a spreadsheet to keep track of them all!

I was entertaining thoughts of open-sourcing the whole thing like Samuel Clay did for Newsblur, in the hope that it may spur some interest and publicity, and that if I ever did move on, at least other developers would be able to continue it. I abandonded this idea since I reasoned that open source works best for libraries and infrastruture used by other coders, and not for monolithic consumer products, which are more likely to languish, unloved, on github. I still think it would nice to break off parts of Readlang to release as open source, but it’s tough to find the time to do the refactoring and documention needed when you’re in the trenches trying to get a struggling startup off the ground.

A glimmer of hope surfaced in an email from a College professor in New York asking for a teacher console to help him use Readlang with his classes. I’d received similar requests previously but always resisted since I foresaw a danger of getting lost down the rabbit hole, complicating the product by implementing lots of features of no interest to my current core user base of motivated independent learners, people like me! This time though, I was warming to the idea since he indicated that this would be something he would pay perhaps $89 / year for as an instructor, with the students paying about $10 / year. They aren’t huge numbers but if the appeal was wide enough this would be worth pursuing. Perhaps this was how to turn Readlang into a viable business. I reasoned I could create an MVP of some class management features in a couple of weeks, invite a bunch of teachers into a closed trial, and see what happened.

So despite my doubts, I geared up to continue in earnest in the new year, and welcome the teachers.

Development

  • Daily report - yet more metrics that I can ignore
  • Pricing at $19.99 not working - perhaps it’s because I’ve exhasted the pool with the offer, but change to $4.99 tri-monthly.
  • Adapt for Japanese and Chinese - users need to mark the characters making up each word manually because these languages don’t use spaces.

Users 3270 (+425)

  • Paying subscribers: 91 (+7 at $4.99 / 3 months)
  • No single large sources this month
  • Baseline traffic from diverse sources continues to grow

January 2014 redesign

Every now and then, I like to do some informal user testing, meaning I sit down with someone who has never used Readlang before and watch them try to use the site. As a developer this is one of the most painful things imaginable. I had one of these encounters with a fellow entrepreneur at the lab, Teun of NuezWeb, who was impressed with the site but was brutally honest about it’s shortcomings from a UX perspective. He couldn’t tell what it did from the landing page, he didn’t know what to do once he was within the site, he didn’t realise you needed to install the Chrome Extension to see the links in the public library. That night he sent me a present – a quickly mocked up .pdf of a new landing page design emphasising the Chrome Extension for new users. It was just what I needed to motivate me to improve the first experience for new users.

The main changes were:

And looking at my analytics I see that this changed… not much. The bounce rate remained similar, as did the visit duration of new users. Onboarding still has room to improve.

One thing that did make a difference was incorporating the new Shutterstock image in my Chrome webstore promo image:

Before
After

After this, hits to the webstore page immediately jumped from ~130 / week to ~480 / week, and installs via the webstore increased from about 60 per week to 220 per week. (Note to self: most of these app installs don’t result in signups, why not?)

Presentation Mode

The big new feature this month was a pilot programme allowing teachers to create classes. After getting the boring admin panels out of the way, I was excited to work on a stats page for a text that showed the teacher the most commonly translated words and phrases. The New York Professor liked it, and asked if WordReference definitions could be displayed when he clicked on a word so that he could present it in front of his class. This use case had never occurred to me and to support it I created a whole new Presentation Page allowing him to step one by one through the top 20 words in each text. This was well received so I geared up to invite more teachers to the trial in February.

Development

  • Teacher class management features
  • Add a secondary MongoDB to create replica set - use secondary for backup and non real-time tasks
  • Setup daily database backups to a netbook at home (off-site backup to complement the backup plan I already had with Linode)
  • More Google Analytics events - to monitor effect of changes
  • More custom analytics of my own
  • Landing page redesign
  • Nicer Chrome webstore images - success!
  • Nicer modal dialog design
  • Clearer leaving dialog

Users 3640 (+370)

  • Paying subscribers: 102 (+11 at $4.99 / 3 months)
  • Nothing out of the ordinary, solid baseline performance

February 2014 teachers

Nik Peachy's talk at the British Council

I polished up the teacher stuff, and set off in search of teachers.

I noticed that Nik Peachey, who originally shared Readlang on scoop.it back in June, was giving a talk here at the British Council in Madrid. It was on digital tools for English teachers, a perfect opportunity to get out and meet some potential customers! I quickly designed and printed a bunch of tri-fold brochures and went along, timidly handing them out after the talk, and chatting with a few teachers about their methods, and about the new features I was now adding to Readlang especially for them.

I announced the features publicly, and emailed the 15 or so teachers who had contacted me over the past year to let them know.

While waiting for a response from the teachers I took a break from the main Readlang code base, to hack together a simple game using the open API.

The response from the teachers was underwhelming. In total, 9 teachers requested access to the trial, but my analytics show that aside from the New York Professor, only one has actually used it with a real class. It would obviously take more effort to get teachers to buy into this, and it was effort I couldn’t afford. If teachers weren’t eager to use these additional features for free, it certainly didn’t seem like it would be an easy route to more revenue. So I decided to re-double my efforts on the original goal of making Readlang an awesome tool for individuals.

Development

  • Bug fixing teacher panel
  • New API game - sentences, just for a break
  • Weekly progress graph - flashcard use increased after adding this
  • Add onboarding hints - open sidebar dictionary, start flashcards

Users 4161 (+521)

I'd also recommend readlang. They have a great chrome plugin that does translation when you click on words, and words you want to study can be exported to a flashcard program. It's pretty fantastic.

Conclusion

Phew! I didn’t expect this to be so long, I hope you didn’t skip anything!

While writing this, it really hit home how much work I’ve put in and how little I’ve got back financially. I earned $1045, before processing fees for 16 months of full time work. On the other hand, I’ve built up a small but enthusiastic user base, have a cool product, which has a shot at becoming a sustainable business and helping many more people around the world to read and learn. So I’m not giving up just yet! On the contrary I’m on the lookout for someone else who might like to join me on this adventure and make Readlang even more awesome. If that might be you, get in touch. If you think you know someone suitable, please let them know.

If this post was interesting and you’d like to read more, or if you have any advice for me, or if you’d like to get in touch for whatever reason, please email me at: steveridout@gmail.com.

UPDATE:

iOS Chrome, browse the web in slow motion!

December 14, 2013

Chrome for iOS has been my main browser since I bought my iPad over a year ago. I love the way it syncs my bookmarks and history with my desktop Chrome browser and its familiar UI. But one thing that occasionally annoys me is its speed. From the start Chrome was marketed as the fast browser but so often on iOS it feels like I’m browsing in bullet time.

I blamed it partly on having the first iPad with a retina display (3rd gen) which is a little underpowered to push around all those pixels. But mainly, I just figured that all mobiles and tablets were slow, right? Well, not quite…

An early Xmas present to myself, the Nexus 5

Yep, I received my Nexus 5 just the other day, and man I’m impressed, everything is so fast. Maybe I was jaded by my old Android 2.35 phone, but I never expected the Nexus 5 to be so snappy and pleasant to browse the internet with. I’m almost preferring it to the iPad even given the massive difference in screen size. Could it actually be quicker than the iPad?

Benchmarking time!

Sunspider is a javascript benchmarking tool, and as such ignores important stuff like DOM manipulation and rendering, but still, for rich single page webapps such as my current project Readlang, raw javascript perfomance is important. Since Sunspider 1.0.2 wasn’t displaying the results page on iOS Chrome, I’ve used the older version 0.9.1 instead.

The Nexus 5 took 693ms to complete, and the iPad took a whopping 6283ms. The iPad 3 is an order of magnitude slower than the Nexus 5!

Could the iPad 3 hardware, released only 20 months before the Nexus 5, really be that much slower?

Let’s try iOS Safari

After browsing some heavyweight sites for a few minutes Safari definitely feels a good bit faster than Chrome, and the benchmarks confirm it. Sunspider 0.9.1 gave iOS Safari a result of 1303.4ms, half the speed of the Nexus 5 but almost 5 times the speed of iOS Chrome!

Sunspider 0.9.1 Results

(lower is better)

Android Chrome (Nexus 5, Android 4.4):693.2ms +/- 0.7%
iOS Safari (iPad 3, iOS 7):1303.4ms +/- 0.4%
iOS Chrome* (iPad 3, iOS 7):6258.5ms +/- 0.4%

* Strangely, while running the benchmark on iOS Chrome the little spinner in the iOS 7 status bar which normally indicates network activity would flicker on and off, which didn’t happen when running on iOS Safari. Probably not a clue to the bad perfomance though because this never happened when running Octane 2.0 which gave just as abysmal a result.

Octane 2.0 results

In case the Sunspider results were a fluke, here are results from Octance 2.0, a javascript benchmarking suite from Google representing the kind of code actually used in modern javascript heavy web-apps. I repeated each test hence the two results for each browser.

(higher is better)

Android Chrome (Nexus 5, Android 4.4):4042, 3876
iOS Safari (iPad 3, iOS 7):1346, 1484
iOS Chrome (iPad 3, iOS 7):260, 260

This test, probably more taxing than Sunspider 0.9.1, shows the same trend but this time the differences are actually magnified. The Nexus 5 was almost 3 times faster than iOS Safari, and this time iOS Safari was over 5 times faster than iOS Chrome. (Boy did Chrome feel slow on this one, each run took 13 minutes!)

Conclusion

iOS Chrome is a terrible choice for running javascript heavy apps. I think you’d need to be incredibly enamoured with Chrome’s UI or syning features to even consider using it instead of Safari given the difference in performance. I’m certainly switching to Safari for my daily iOS browsing.

Surviving the summer in Madrid

July 16, 2013

I’m living in Madrid at the moment. It’s a great place to work on Readlang. It keeps me in language learning mode, and it’s way cheaper to live than my old home of London, which is handy when trying to bootstrap a business. The one problem is the heat, my friends back in the UK are complaining about the 30 degree heat wave there at the moment, well that’s nothing compared to the 42 degrees (that’s “fourty-two” in case you suspected a typo) it reaches here in Madrid.

Oh, and we don’t have air conditioning.

Our strategy last summer was this:

It’s surprisingly effective, but this year we’ve decided to upgrade. We bought one of these:

This is a climatizador (Spanish) or evaporative air cooler (English) and works by blowing hot air across water, which transfers heat from the air to the water, thus vaporising the water and lowering the air temperature. Sounds good, but does it really work? The reviews on amazon seem to be very mixed:

Some say it’s useless, and some say it works but only in dry climates. All agree it’s nowhere as powerful as an air conditioner. A shopworker in an electronics shop here had no confidence in them, and told us that it was basically an overpriced fan. We bought one anyway and I decided to test it.

The test setup

Unlike an air conditioner, an evaporative cooler requires the doors and windows to be wide open, to keep a supply of dry air and to stop the humidy getting to swamp-like levels (in the US these kind of coolers are called “swamp coolers”).

For the first test I measured the temperature of the air directly leaving the cooler. This will give the best case, not representitive of what you’ll feel in the room itself, but at least we can tell if it’s doing something.

Here we go, I cycled back and forth a couple of times to make the data more convincing:

  1. Ambient - normal room temperature
  2. Cooler: Fan & Water - I turn on the cooler for a couple of minutes. Then switch to bring in some outside air I decide to turn on the…
  3. Basic Fan - The temperature raises slightly to 32.8 as hot air is pulled in from outside.
  4. Cooler: Fan & Water - This time I wait until the temperature stabilises, over 4 degrees lower at 28.2
  5. Basic Fan - The temperature climbs back 4 degrees to about 32.2
  6. No Fan or Cooler - No real change.
  7. Cooler: Fan & Water - Again, the temperature falls about 4 degrees.
  8. Cooler: Fan & No Water - The water pump is off, so once the water dries up, it acts like a normal fan and the temperature raises 4 degrees.
  9. Cooler Off: With the fan off, there’s no change.
  10. Cooler: Fan & Ice Water - With ice added to the water, the cooler is not significantly more effective. It drops a fraction lower than before, but notice that the high temperature is a fraction lower too. So I’d say there’s not much difference here.
  11. Basic Fan: A slight temperature bump from outside air, which is perhaps a tiny bit cooler than before, but probably within the error range when reading the thermometer I used - see the pictures!
  12. Fan Off: Experiment over.

So, it’s repeatedly dropping the temperature a full 4 degrees. Sounds pretty good, but remember this is air directly exiting the cooler.

I did another test 3 meters away, at a realistic sitting distance from the cooler. I didn’t take as many measurements this time, but after blasting away for 10 minutes the temperature 3 meters away dropped by 2 degrees. Not a huge amount, but remember that a regular fan doesn’t lower the temperature at all. (Note: I tried this on a different day which was hot but overcast and felt a little more humid - it only made a 1 degree drop at 3 meters away, it is important to use this on dry days.)

Caveat

Although it cools, it probably increases the humidity, which could cancel out some of the benefit. I didn’t measure this.

Consulsion

It does cool, the air exiting the device is 4 degrees cooler, and 2 degrees cooler 3 meters away. Subjectively, I can definitely feel the difference compared to a fan, and am fairly happy with the purchase, especially given my lowish expectations.

Go to your email

May 13, 2013

Busuu noticed that I have a gmail address and presented a “Go to your email” link taking me straight to gmail. It’s a nice touch.

Pity about the dodgy CSS in the spam folder message though.

Surprise Visitors

April 1, 2013

Wow, woke up this morning to see this at my readlang.com Google Analytics:

Wait a minute… just noticed the date :-)

Essential Javascript Libraries

March 8, 2013

These libraries share an ‘almost perfect’ quality of being compact, well designed, and I wouldn’t start a large project without them.

First Year In Web Development

March 7, 2013

It’s been close to a year now since I made the switch from desktop to web development, and there’s no turning back! Here’s some thoughts.

Why the switch?

It’s pretty clear that the vast majority of new application development is moving towards the web. The advantages are:

Native software still makes sense when raw processing power is required, like video editing on the desktop and applications on low powered mobile devices, but even this is gradually changing. The current trend as we get faster and more powerful brower technology is that right now everything is moving towards HTML / CSS / javascript.

How’s it to work with?

Awesome. The modern browser is the most productive environment I’ve ever had to try out my ideas and it’s unlikely I’ll move back to desktop development.

My New Boss Is An Asshole

January 4, 2013

I started a new position a few months ago. Its going OK but the boss is kind of an asshole.

He likes it when I get a new feature working quickly, but then expects that kind of progress all the time. Sure, he understands technical debt but still gets pissed off when he can’t see any visible progress he can play with. I try to explain that taking things slowly now will pay off in the long run but he’s not confident in whether the thing will even have a life in the long term. Last month, after a couple of weeks trying messing about with different ways to polish our photography website prototype he decided to drop everything and start work on a completely unrelated new site, just because he’s learning Spanish and thinks it might help him! How can I keep sane under these conditions!?

Steve Ridout
Independent software creator (working for myself)

A Welcome Delay

December 30, 2012

I quit full time employment at Mendeley in Feb 2012 to move to Spain, learn web development, and work full time on my own projects. I’d actually quit the same job in the same company 2 years before, that time to make a film and travel the world. So it probably didn’t come as a complete shock to my colleagues.

The plan was set back temporarily when my manager asked if I’d be interested in working on the CSL Editor project as a freelancer.

Reasons it sucked:

Reasons it was awesome:

Needless to say I accepted. I learnt web development as I went but only billed for time I felt productive, which meant occassionally working long hours. In the end we made a working editor I’m very proud of, it’s made editing CSL good enough for a far larger audience than before. It was definitely the right choice.