Category Archives: Webapps

Switching from Google Reader to Feed a Fever

In my opinion Google Reader has become a lot less nice to work with by completely removing the share functionality and modifying the interface in a way I didn’t like it. I recently found Feed a Fever, a self hosted, one time purchase RSS reader ($30). I bought and configured it and so far I really like it. The interface looks nice and is very fast compared to Google Reader. Feed a Fever is also able to detect duplicate posts and important articles (in the “Hot” section), meaning I will save time by being able to focus more on the important things :)

Another step in the migration away from Google Services

Last year I switched from Gmail to Fastmail. I did this because I got fed up with the changes Google made to Gmail and because their IMAP service and the webmail client only became slower.

Well, a few weeks ago Google anounced another bitch-slap for their users: deprecating Exchange Active Sync. This basically means anybody with an Apple iOS device will need to use the Google apps in order to have push mail support and syncing contacts and calendars becomes a lot more difficult as well. To make things worse, Windows Phone users will not be able to sync their contacts or calendars at all.

I own a Windows Phone device, so I started to search for a better alternative to Fastmail (they don’t have calendars and don’t have a sync mechanism for contacts). I finally found hosted Zimbra to be a viable alternative. I opened up an account at XXL Webhosting for only € 4 a month! As an added benefit none of my email, calendar or contact information is stored in the US anymore, because this is a company based in the Netherlands.

Using Nagios to monitor multiple VirtualHosts

On first sight, Nagios it doesn’t look like Nagios can be used to monitor websites hosted on the same server. All concepts in Nagios revolve around services and hosts. The whole “sub-part of service”, like a VirtualHosts in the HTTP service, doesn’t seem to fit. It is perfectly possible though.

Let’s start with a simple plugin to check whether a VirtualHost if functioning correctly (returning HTTP status 200, 301 or 302). This can’t be done with check_http, because it will only warn when a 404 is found.

#!/usr/bin/php
<?php
$headers = @get_headers($argv[1], 1);
if(!$header) { echo "Could not connect to $url"; exit(2); }

if(preg_match('/200/', $headers[0])) {
        print_r($headers[0]);
        exit(0);
} elseif(preg_match('/302/', $headers[0])) {
        print_r($headers[0]);
        exit(0);
} elseif(preg_match('/301/', $headers[0])) {
        print_r($headers[0]);
        exit(0);
} else {
        print_r($headers[0]);
        exit(2);
}
?>

Save this in /usr/lib/nagios/plugins/check_www and make the file executable.

Next, we have to create a command for Nagios to use. Paste the following in /etc/nagios-plugins/config/www.cfg

define command{
        command_name    check_www
        command_line    /usr/lib/nagios/plugins/check_www '$ARG1$'
}

Now finally, add service definitions like this to your Nagios configuration file.

define service {
        host_name               yourservername
        service_description     theurlyouwanttomonitor.com
        check_command           check_www!http://theurlyouwanttomonitor.com
        use                     generic-service
}

Good luck!

Screenshot

Automatic Invariant Detection in Dynamic Web Applications

For the last year, I have been working on my master project and two weeks ago I finally graduated. I did my master project at Tam Tam, an internet agency that provides full service internet services. It was nice to work there and if I did not have the opportunity to expand my own company I would have applied for a job at Tam Tam.

The project was about automatically finding invariants in web applications. The first focus was finding invariants in the JavaScript parts, but later on we extended the scope a bit and also included invariants over the DOM. While most of the techniques I developed can be used in a very generic way, my implementation depends on Crawljax. I developed plugins to Crawljax, under the name of InvarScope, that can automatically find these invariants and use them for regression testing.

We submitted a paper based on my work to ICSE’11, so before that was finished I was not allowed to blog or publish any of my work. Well, we made the deadline, so I can now release all of the code, my thesis and the paper itself.

The code I wrote is available in a subdirectory of the Crawljax plugins Google code project. We’re currently in the process of fixing all Maven dependencies, cleaning up some code and making it all work with the current Crawljax trunk version, so expect a binary release in a few days.

Don’t hesitate to contact me if you have any questions!

Screenshot-1

Symphony CMS; the Best CMS?

I’ve been looking for a good Content Management System (CMS) the last couple of days after a colleague and I had some discussion about what CMS to use for our clients. Sometimes we have clients with specific needs, which are difficult to fulfill using WordPress. The solution we used to choose was either build some plugins or use our custom developed CMS. However, none of these are a great solution. WordPress can be complicated for novice computer users, has a messy code-base and our own CMS is not really user-friendly either.

My colleague decided to try out ExpressionEngine. He bought the freelancer edition and he’s been trying things out. Up until now, it all seems to work quite well, although the back-end can still be too complicated for our clients. Also, I hate the fact that you should pay 300 dollars to use ExpressionEngine for a commercial company. Thats an added fee some customers would rather spend on different things.

So, I started to search for open-source CMSes myself and made a list of requirements.

  • It should not be page based, it should allow you to model your own content. If you use a CMS that supports types/entities/resources/sections/whatever you can create your own page type, but you can also create more advanced things like portfolio items, projects or products (yes, even a simple web shop is possible then).
  • The back-end should be as simple as possible.
  • It should be written in PHP, object-oriented if possible, and use MySQL for storage.
  • There should be a good, flexible templating engine for the views.
  • It should have a good plugin API.

Well, using this list it was a lot easier to search for the most fitting CMS, as quite a lot CMSes are only page or post based. The list of possible candidates shrunk by more than 75%. Eventually I found a CMS I had never heard of, but which seemed to have all the things we were looking for: Symphony CMS.

I’ve been trying it out in the last few days and I still haven’t found any deal-breakers. Symphony CMS has a great website, friendly community (because it’s still small I think), great features, simple back-end, small code-base and it can be easily extended by writing extensions.

Some things might give problems for specific clients though: multi file upload is non-existant (there’s one extension that doesn’t do what it should) and the WYSIWYG editor extensions, with support for placing images etc., don’t seem to be integrated well enough with Symphony CMS yet. Well, maybe I’ll just fix those two myself and contribute them upstream. That is, if I have some spare time… :)

Screenshot

Guest Blog Post Published at CDT

The launch of pleaserobme.com received a lot more media attention than we had expected. We were on a number of international radio stations, national television etc.

Furthermore, Adam Rosenberg of Center for Democracy & Technology (CDT) asked us to write a guest blog post. Of course we were interested in doing so, because it gave us another opportunity to make people aware of the potential problems of sharing your location with the whole world. The post was pusblished today and can be read on the CDT website.

Screenshot

Location spam, annoying and.. risky?

Hey, do you have a Twitter account? Have you ever noticed those messages in which people tell you where they are? Pretty annoying, eh. Well, they’re actually also potentially pretty dangerous. I’m about to tell you why.

Don’t get me wrong, I love the whole location-aware thing. The information is very interesting and can be used to create some pretty awesome applications. However, the way in which people are stimulated to participate in sharing this information, is less awesome. Services like Foresquare allow you to fulfill some primeval urge to colonize the planet. A part of that is letting everyone know you own that specific spot. You get to tell where you are and if you’re there first, it’s yours. O, and of course there’s badges..

Foursquare Foursquare

The danger is publicly telling people where you are. This is because it leaves one place you’re definitely not… home. So here we are; on one end we’re leaving lights on when we’re going on a holiday, and on the other  we’re telling everybody on the internet we’re not home. It gets even worse if you have “friends” who want to colonize your house. That means they have to enter your address, to tell everyone where they are. Your address.. on the internet.. Now you know what to do when people reach for their phone as soon as they enter your home. That’s right, slap them across the face.

To raise some awareness on this issue and emphasize how easy it is to retrieve this information let me introduce: http://www.pleaserobme.com. Have fun and please don’t hook up Foursquare to your Twitter account, okay?