Feeds in your inbox

Google Reader will be dead by the 1st of July. Everyone has moved or at least is considering moving to new feed aggregators. There is a heap of options out there (out of which I recommend that you try out Newsblur). But none of them has been able to boast of a good public API as our good old Google Reader did.

I used to have this IFTTT recipe that would send the articles of the most important feeds I follow to my inbox. Now that Reader is dying and no other options out there seem to offer IFTTT channels, the best solution seemed to be rss2email.

rss2email (how appropriately named!) is a tool used to send new feed items to your email inbox. It has been first written in Python by Aaron Swartz (who happened to commit suicide a few months back). The source can be found in github.

Prerequisites

It would be much convenient if you have your own server (or a shared host). Even a desktop that runs on Linux or Mac OS X would do, but make sure it stays powered on most of the time and has a constant internet connection. This is because rss2email should be invoked periodically to check feeds using a cron job. To send email, you need to have a mail server installed and configured. If you’re using a web host, this might have already been done for you. Also make sure you have Python installed.

Setting up rss2email

1. Download

Download rss2email with wget and extract.

wget http://www.allthingsrss.com/rss2email/rss2email-2.70.tar.gz
tar xf rss2email-2.70.tar.gz

2. Configure

This is the most important step. The newly extracted directory contains a file called config.py which contains all the necessary configs. Most are self-descriptive. Make sure you configure the mail server settings correct. Here’s my setup:

SMTP_SEND = 1
SMTP_SERVER = “mail.thameera.com:[port]
AUTHREQUIRED = 1
SMTP_USER = ‘[emailid]@thameera.com’
SMTP_PASS = ‘[password]

You can set the email address that would be in the ‘From‘ field of emails in the DEFAULT_FROM config.

3. Set your ‘To:’ address

See the r2e script in your extracted directory? That’s what you need to invoke for the tasks we do from now on. First, set the address of where the mail should be delivered to using the following command:

./r2e new

4. Add feeds

Time to add those feeds. You can add them one by one using ./r2e add. For example, to add the feed of this blog:

./r2e add http://blog.thameera.com/feed

Now if you run the following command it would grab all the feeds and send them to your email:

./r2e run

However, it would send all the items available in the feeds in the first run. This could even be hundreds. Since most of you wouldn’t want this to happen, make sure you run it with --no-send first.

./r2e run –no-send

The next time you run r2e, it would mail only the new feed items.

5. Set the cron job

You’re almost done. The last step would be to set up a cron job that would invoke r2e periodically. If you don’t know how to set up cron jobs, be a lamb and look for a tutorial online. The cron job should cd to the r2e directory and run the command ./r2e run. You can set the time interval as you wish. A small interval means you get the articles mailed quickly, but would cause more server load and cost bandwidth. I’ve set mine to 15 minutes.

That’s it. No more Google Reader. You can sit back and relax while rss2email makes sure you never miss an important feed item. If you’re feeling adventurous, you can also go ahead and edit the python scripts to change the email format and tweak to make it more awesome.

Check your movies

Ever started watching a movie only to realize after 30 minutes that you’ve actually watched that one before?

Django Unchained

Django Unchained Official Poster

There was this guy in our uni who kept a poster of each movie he watched, so that he wouldn’t watch the same movie again, ever. When you look at a movie’s poster you immediately get a flashback of what it was about, who the cast was as well. Added bonus.

But now we don’t have to go into such lengths to keep track of the movies. We have the great big movie database IMDb and dozens of other sites made right for the purpose. But then comes the problem, which one to choose?

IMDb logo

If you look around, there are many who use the former, the International Movie Database. You sign up for an account, then start rating the movies you’ve watched. 9/10 for Reservoir Dogs and 4/10 for What Happens in Vegas and so on. After that, there’s nothing much you can do. Also note that you can’t check in for a movie without actually giving it a rating. Heck, I watched Original Sin so many years back, all I remember of it is the Antonio Banderas and Angelina Jolie having sex. No way I could _rate_ that movie now.

WatchTh.is

I was using watchth.is since about 2010 until I got tired of it a few months ago. It pulls data from the IMDb’s database and lets you check and favorite movies and comment on them. Other than being able to add friends, that’s pretty much of what it can do. Unlike in IMDb, you don’t have to rate anything. Just check them and feel good about it.

goodfil.ms

Then there is goodfil.ms. It has a modern-looking UI and some cool features like movie performance graphs from various sources like iTunes and Netflix. What I hate about the site is that it asks you for two ratings, the “critical quality” and the “rewatchability”. It trashes my idea of simply checking in the movie. Too complex for a simple guy.

iCheckMovies

I finally settled down with iCheckMovies. The site is simple and lets you just check the movies without the burden of having to rate them. You can favorite or dislike them, keep a watchlist, and so on. There are movie lists based on various tastes and you are awarded with medals if you finish watching half, three quarters, etc of these official lists. That’s an extra element of fun. Movie data are pulled from IMDb and the respective IMDb pages are linked to. You can even import your existing IMDb ratings, something most other sites don’t offer. Besides from the free tier, there are Basic and Pro pricing plans: it’s a startup with a business model. If you’re not much of a movieholic the free plan is just enough.

There’s a slew of other similar sites that lets you achieve much the same, like Rotten Tomatoes, Flixter and SeenTh.at. Some of them offer you much more than just checking in movies. Don’t be overwhelmed.

Finally it all comes down to personal taste. If you’re looking for one, make sure you check out iCheckMovies. IMHO, it does a rather good job at what it’s supposed to do. You can find me there.

This blog just moved

This blog just moved from wordpress.com to its own host and domain. The new URL is http://blog.thameera.com. The new RSS feed URL is http://blog.thameera.com/feed.

But why?

I dunno. Having my own URL is nice, maybe. But mostly, I was getting tired of the unpredictable wordpress.com admin panel. It just won’t load and stuff won’t work, and things have gotten worse by the day.

Also, this means you get full control over everything. It’s possible to customize this inside out, which I haven’t done yet. The Jetpack plugin gives most of the niceties wordpress.com had, like site stats. So not losing much there.

This new theme is ugly

I know. Might mess with it soon and bring it into some level.

Why not Jekyll?

I considered Jekyll, but decided to stick with WordPress for the moment. You _can_ use Markdown in WordPress and compiling the whole thing after each and every update to the blog didn’t appeal. Also, have you noticed that 90% of the Jekyll blogs out there look pretty much the same?  I might still change my mind though.

Old links get broken?

Not really. The URLs of the old wordpress.com domain should redirect to the new site without a hitch. So all the link juice from Google will still come here. I’ve changed the permalink style by removing the date in the post URLs. This won’t affect incoming links as I’ve setup the Redirection plugin to deal with these. Not quite sure if email subscriptions get broken or not. Just resubscribe with the new box in the sidebar.

But still, you should subscribe to the new feed and ditch the old one. The redirections might not work indefinitely. (If you’re using an intelligent RSS reader like Newsblur, chances are it has done this already for you.)

 Why all these subheadings?

Heh. Just felt like. :)

Action.io, django and poya days

Last week I got an early access invite to the private beta of Action.io. Coincidentally, I wanted to learn some Django. Hence Next Poya When? was born and it only took a few hours to start coding from scratch to deploying successfully in the Google App Engine.

Action.io is a place to start your projects without worrying about all the mundane setup tasks. Once you sign up, you can create boxes. There are cardboard boxes, plastic boxes, and.., oh wait, wrong kind of boxes. The boxes in action.io are comparable to VPSs. You can choose from Ruby on Rails, Django, Node.js and Go boxes to start with. If you get a Django box it’s already pre-installed with python, django and all other utilities required for a typical Django project. All the boxes come with a Web IDE, Emacs and everyone’s favorite Vim as editors. There is PostgreSQL and MongoDB integration as well.

Action.io interface

Action.io interface (click to enlarge)

To set up, all I needed to do was copying my .bashrc and .vimrc files, install some Vim plugins with Pathogen and add the SSH key of my box to Github. All this takes less than 10 minutes. (But don’t tell that to your Project Manager, give him 2 hours effort and he wouldn’t know!)

Now create a project and start coding right away!

django-admin.py startproject poya

Once you build stuff to some extent and want to test how it’s doing, the site can be previewed easily. For example, start the server with

python manage.py runserver 0.0.0.0:3000

and click on Preview -> Port 3000. You can choose from a range of ports from 1024 to 9999.

Previewing the site

Previewing the site

Once done, deploying was a piece of cake. Action.io has Heroku and Google App Engine integration. Deploying the site in GAE took only a single command:

appcfg.py --oauth2 --noauth_local_webserver update nextpoyawhen

Then I pointed my domain to GAE and, voila, we have nextpoyawhen.com moving like jagger!

It’s really amazing how fast you can get everything done with action.io. If I did all this in my laptop it’d have taken ages. It goes without saying how mundane and time-consuming it is to install all libraries, dependencies and get the environment set up in your machine. More often than not, we get tired of the project even before we really start it. We spend 80% of time setting the things up, and much less time coding.

Also, since action.io lives in the web, it’s accessible from anywhere. If someone reports you a bug when you’re at office or travelling, you can just log into your box from the browser, do a hotfix and deploy within minutes. No effort spent for syncing files. You get your favorite environment setup anywhere in the world.

Action.io doesn’t work offline though, at least yet. It doesn’t require a fast connection, but if yours gets disconnected often, be wary. I hope they would implement the offline capability soon.

As for Django, I’m impressed by the framework. It’s quite easy to catch up with, and it’s Python. You can host Django sites in most web hosting providers (unlike node.js), including Google App Engine and Heroku both of which have free plans to serve small sites. I’m studying with The Django Book, recommended by Raditha. Of course, nextpoyawhen could’ve been done with some client-side javascript, but that’d have defeated the purpose. I wanted to do something with django and try out action.io, so it’s like catching two stones with one angry bird, or whatever that is. The source code is hosted in github.

So, the next time you are tired of working all week and want to know when the next Poya holiday is on, you know where to look. :)

Louie gives me hope

Louie is a good show. It’s the kind of show I’ve always wanted to watch. Not many shows interest me. TBBT was good for its humor, Two and a Half Men was equally good and Spartacus is good with all its blood. For the record, I’m not watching Spartacus for its sex. Of course you don’t believe.

louie

I wasn’t aware of Louie till @mdsoysa mentioned it on Twitter about a week back. Almost finished the first season and it’s hooked me up. For one, the episodes are just 20-25 minutes long, which is the right length for a TV episode. The black humor, when done right, is tempting, as in the case with Louie. But the best thing about Louie is, well, Louie. He’s the kind of washed up guy, single father, doesn’t really have much hope, but despite all of this, he’s cool and not complaining. He’s like myself, but done right. I ain’t no single father, but you get the idea. Even the opening credits scene cheers me up. And the music isn’t half bad.

I’ve decided to do stuff that cheers me up. Like watching Louie. And coding. Get immersed in a sea of Python or Javascript and watch your worries get washed away! I like my job; it may not be exactly what I want to be doing, but it’s hell of a lot better than what most people do for jobs out there. I don’t think Louie loves his job anyway. He’s a comedian. Comedians comede because they have to make a living. Not exactly the reason I code.

Being away from places like Facebook lessens your chances of depression. Even Twitter can be depressing at times. It used to be fun and lively some time back. Nothing is what they used to be anymore. I even registered at app.net looking for solace, but that ain’t the place.

Just sitting in your room with a lot of tic tac and a mug of Coke can cheer you up. Do you know what’s cool about tic tac and Coke? There’s this tiny little chance that you might die when you stuff yourself with a handful of tic tacs and a big gulp of Coke. That shit explodes when mixed right. Death by tic tac! Awesome!

Not sure if there’s anything that makes any sense in this post. Just ignore for good. It’s just that I like Louie coz it cheers me up.

Typing.lk beta released

The day before the christmas Thilanka said, ‘how about we build a Sinhala typing tutor?’. I said, ‘why not?’. We finally ended up building an English one. Its beta version is now live at http://typing.lk.

Typing.lk is basically a place to learn and practice touch typing. The site has three modes at the moment: Learn, Practice and Code. The first needs no explanation, it’s where you can learn to touch type. The Practice mode gives you stuff to practice typing with, like common English words, quotes from books, etc. The Code mode is for, well, coders. You can choose code snippets from you favorite programming language and practice typing them.

The three modes at typing.lk

The three modes at typing.lk

One thing we wanted to make sure was that the site should be hassle-free. You can start typing from the moment you visit typing.lk. No sign ups or any such crap. We _might_ bring an option to sign-up and keep track of your typing in the future, but that would be an _option_. And we tried to keep the design minimal.

And about the Code mode. Currently typing.lk has code from four major programming languages: C++, Java, PHP and Python. More languages will follow in the coming days. All the code snippets were extracted from popular repositories at github. Some snippets have been modified to suit the purpose and fit in the site.

Typing.lk is by no means perfect yet. The site may get effed up on some small screens. It’s recommended that you use Google Chrome. Works well in Firefox as well. Not on IE though. Who uses IE anyway?

It’s just a small start; we are hoping to keep adding cool features in the days to come. These include a better lesson structure, a more engaging experience, more languages for the Code mode and, of course, typing games. We might even implement a separate section to learn typing in Sinhala.

We’d love to hear your thoughts and suggestions of the app. Do mail us or send in a tweet. You can follow us on Twitter for updates and Like Typing.lk on Facebook. Happy typing! :)

So much for housing NDT inside UoM

I’m writing this with tears in my eyes. Just witnessed the damage the NDT has done to the University of Moratuwa premises yesternight. The rooms we used to stay in have been ruined. The doors axed and the windows shattered. They have raided the girls’ hostel as well. Several students from the Engineering Faculty are now being treated, and it’s said that the condition of one is critical.

This is history repeating. The damage NDT has done to the name of University of Moratuwa through the years is huge. In 1999, after considering the circumstances, the (then) vice chancellor had filed the Jayantha Wijesekare Report stressing that the resources allocated to the NDT and the head count of that institute should NEVER be increased. The NDT was not abolished to cater to the need of technical officers in the country. Despite this, the violence has continued.

In 2007 (as I remember), they were allocated a block of land in Diyagama to shift the institute from the UoM premises. The administration agreed that having them here at Moratuwa would cause only more trouble. The land thus allocated is lying without notice now. The last time we inquired, no money had been yet allocated from the budget to continue with the constructions.

As you may know, the NDT is not even a faculty of UoM, but just an institute offering a technical diploma. Their close connection with that notorious political party is well known. The infamous ‘NDT Api’ (we, the NDT) slogan is used to force-feed their power inside the university.

Someone who doesn’t really know the circumstances might not see the gravity of the situation. All they can see is one group of students firing petrol bombs at others. The only solution for this problem is banishing the NDT from UoM premises. Despite the being harsh, in reality, no other solution would work.

They have never worked.

(Pictures are from Dailymirror)

Spaced repetition like a boss

Derek Sivers has a post about spaced repetition. If you are new to Spaced Repetition or even if you are not, I highly recommend reading his article or googling about this cool technique a bit. Derek’s article is focused on memorizing a programming language, which is a cool use of SR. However, the way he does it has a weakness: he’s using Anki.

I came across SR while I was learning Spanish. This technique is widely used among language learners to remember new words and phrases they are learning. Most of them use Anki, which is an app built for remembering stuff using flash cards and spaced repetition. But unless you are the really persistent type, it’s not an easy task remembering to load up Anki every day and reviewing the day’s cards.

I used Revunote for some time. It’s an Android app that integrates with Evernote. It gets the notes that you tag as ‘Revunote’ from Evernote and shows them up in increasing intervals (1, 3, 7, 14, 30 and 60 days). Revunote is simple and does exactly what it says, and I still use it; but is there a better solution?

A possible candidate is email. We don’t ‘forget’ to check mail and we check them every day, no exceptions. If we could plug in SR to our email, that would be perfect. And how do we do that? FollowupThen.

Email followups

FollowupThen is a free email service (with optional premium service) that lets you make email reminders. For example, if you send an email to 3feb@followupthen.com, the mail will be sent back to you in the 3rd of February. If you send it to 10h@followupthen.com, it would bounce back in 10 hours. If you want to reply to an email and if you can’t do it till tomorrow, you can forward it to tomorrow@followupthen.com and you can guess the rest. Pretty cool, huh? It’s can be a life-savior to most of us. There’s a comprehensive how-to on using FollowupThen here.

Now think about this: what will happen if you send a mail to both tomorrow@followupthen.com and 3days@followupthen.com? You will get the mail both tomorrow and in three days. Can you see where I’m getting at? Spaced repetition coming into play!

So here you go:

  • Open up your email client and create a new contacts group.
  • Add the following contacts to that group (with each followed by @followupthen.com):
    3h, 24h, 3days, 7days, 2weeks, 1month, 3months, 6months.
  • Compose a mail with what you want to remember.
  • Send it to your new group of contacts.

Voila! FollowupThen will make sure you remember whatever crap you put into that mail! You can add/remove the times you’d like to review as you wish. YMMV. Just make sure you read each email that followupthen sends; no skipping, please. If you can stick to this simple rule, I’m telling you, this simple system can work miracles.

What do I want to remember?

Fair question. What, indeed? Here are some suggestions.

  • Some new words or phrases in a language you are learning
  • An interesting code snippet or a design pattern
  • Lyrics of a song or a poem
  • A Linux/Git/Vim/whatever command
  • Facts for general knowledge
  • Some telephone/credit card/whatever numbers
  • Anything that you wish you could remember

This is no rocket science. There’s little effort required to set it up. And there’s no reason why you shouldn’t give spaced repetition a try. Go!

Kichibichiya

It’s been just a day since Kichibichiya was released. Here are some thoughts on the new app.

For those who heard the name for the first time, Kichibichiya is a Twitter client for Android written by the Sri Lankan developer Pahan. Kichi-bichi is Sinhala for the chirping of birds; hence the name. It has extracted all the goodness of the open-source client Twidere and added loads of useful features into it. The chief motivation for the app has been coming up with a Twiiter client with seamless Sinhala unicode support.

I was skeptic at first. Pahan was posting screenshots of his not-yet-released prototype since a few weeks and they mostly included tweets with Sinhala rendered beautifully. But would you use a Twitter app if all it did right was rendering a language properly? Well, I wouldn’t.

Timeline

Timeline

Sinhala tweets

Sinhala tweets

The first impression I got after installing Kichibichiya was, “Oh man, this is slick”. And it indeed is. Smooth scrolling between timelines, holo theme and less messy interface. Most common actions a regular tweep would need are easily accessible. Username auto-completion can improve, though. The customizability is impressive. Custom tabs, day and night themes, custom notifications, multiple accounts, ability to set DNS servers, host mapping, hardware acceleration are only a few of them. You can even set your own retweet format.

My favorite feature is the content filter. Kichibichiya lets you mute users (eg: @NisansaDdS), keywords (eg: changumee) and sources (eg: foursqure) hassle-free. Not every good client out there supports tweet filtering well, but Kichibichiya does it like a boss. It feels good when the timeline is not cluttered with foursquare and getglue tweets anymore.

Apparently there’s support for extensions as well. Not quite sure if it would allow third-party extensions or not, but it’s good to know that the app is extensible.

Composing tweets

Composing tweets

Some of the settings

Some of the settings

Kichibichiya is awesome. I say awesome and I mean it. Not saying that it’s the best Twitter client out there. It’s hard to beat powerful clients like Falcon Pro, but then, Kichibichiya boasts of several features the former doesn’t offer. Of course, it was just launched. You’d find an obscure bug now and then. Some setting might not work perfectly. But let’s hope the developer keeps up with the good work and continue to come up with updates. And more cool features. This is one app with great potential.

Diving into Haskell

As mentioned in the previous post, I started a ‘Learn Haskell in a Day’ project yesterday evening. As of this writing, I’ve finished the 5th of the 14 chapters in the tutorial.

Yeah, it’s a bit disappointing. Well, my uncle and his daughter came to stay yesternight, so I couldn’t focus on Haskell while they were here, could I? Could have made a better excuse out of that, but to whom am I cheating?

Even the tutorial I’m following is quite

Anyway, here are some interesting stuff I came across after yesterday’s post:

Types and Typefaces
Types are much like the types of variables you can use. Those include Int, Integer (which is an unbounded int), Char, Bool, Float, etc etc. A string is a list of Chars. Talking about lists, they play a central role in Haskell. Much more powerful than the lists in the languages we are used to.

Typefaces are sort of like interfaces in OOP. Types implement typefaces. (At least that’s what happens as far as my current understanding goes). A type that implements the Eq typeface can be checked for equality. One that implements Show can be presented as a string. For example, you can make a function that takes types that implements both Eq and Show.

No loops for you, baby!
Haskell has no for or while loops. Like, seriously. But you can use recursion elegantly to achieve what you’d have done with loops in an imperative language. This can be tricky at first; how does one do _anything_ without a loop?

Suppose we want to write a function to get the maximum value in a list. Of course there’s an in-built function, but say we wanted our own. How we do it is create a recursive function that would return the maximum of the current element and the maximum of the rest of the list, which, as you can see, is a recursive call.

maximum' :: (Ord a) => [a] -> a
maximum' [] = error "maximum of empty list"
maximum' [x] = x
maximum' (x:xs) = max x (maximum' xs)

This uses the in-built max function to get the maximum of two values.

Tabs are evil
The GHC compiler does not get on well with tabs. Spent nearly 20 minutes one time to find a bug which had been caused by using tabs. The solution is to ask your editor to use spaces for tabs. If you use Vim, this can be done using :set expandtab.

I tried implementing stuff like the fibonacci series and some math problems, which, IMO, is one of the best ways to learn a language. There’s always a better implementation with more elegant code, though.

So.. I’m hoping to finish at least 3 more chapters by 6pm today. Guess it’d be as easy as it sounds.

Also, funny story, the internet connection here sucks so much that I wasn’t able to clone a 6MB repo from BitBucket. And I tried 6 times. Yeah, not easy to imagine.

Await another update later today.