Frank Groeneveld's blog

A Good BSD Versus Linux Explanation

The following link is a good written article about some of the differences between the BSDs (mostly FreeBSD) and Linux. I especially liked this explanation:

It’s been my impression that the BSD communit{y,ies}, in general, understand Linux far better than the Linux communit{y,ies} understand BSD.

» BSD vs Linux

Switched to a Different Google Reader Alternative: Feedbin

Last december I switched to Feed a Fever for RSS reading. I really enjoyed it, but after I while I got fed up with the fact that it didn’t work that well in Firefox on Android and in Internet Explorer on Windows Phone. After some searching I found Feedbin. A hosted RSS reader build by Ben Ubois, which looks just great. I signed up right away and tried it for three days (after that, your credit card will be charged). It didn’t take me the full three days to convince me: it works a lot better than Feed a Fever and I don’t need to host it myself.

Screenshot from 2013-06-23 10:57:36

There is a mobile interface as well, which works great on FIrefox for Android and pretty good on Internet Explorer for Windows Phone. The most annoying problem is the fact that Microsoft decided @font-face was not worth implementing on Windows Phone, which means the icon font that is used for all the icons shows just blank squares. After using Feedbin for an hour, you’ll know all these by heart though.

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.

The Perfect Google/Asus Nexus 7 Case?

A week ago I finally decided which case I wanted for my Nexus 7: Poetic Slimline Portfolio Case for Nexus 7 Tablet. A case that sort of resembles the Apple Smart Cover for iPads. I ordered it through Amazon and received the case yesterday.

My first impressions are good. The front cover feels nice with the microfiber finish on the inside and it can be folded back in order to make the Nexus stand on a table for example. The case doesn’t add much weight or thickness to the tablet. Furthermore, the front cover can be folded in such a way that you can type on table much easier than without the it. The case’s magnets make sure it stays closed in my bag and when opening the case, the tablet will automatically wake.

You can find the case on Amazon:
Poetic Slimline Portfolio Case for Nexus 7 Tablet

If you have any questions, feel free to ask them in the comments.

Using Nagios to Monitor Multiple VirtualHosts

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

Let’s start by adding three simple commands that use check_http with various arguments to make sure the VirtualHost is returning a page correctly. Paste the following in your command config, for example in /etc/icinga/object/commands.cfg

define command {
        command_name check_http_vhost
        command_line /usr/lib/nagios/plugins/check_http -I '$HOSTADDRESS$' -k 'Host: $ARG1$'

define command {
        command_name check_https_vhost
        command_line /usr/lib/nagios/plugins/check_http -S -I '$ARG1$' -k 'Host: $ARG1$'

define command {
        command_name check_http_vhost_url
        command_line /usr/lib/nagios/plugins/check_http -I '$HOSTADDRESS$' -k 'Host: $ARG1$' -u '$ARG2$'

This will add three commands to your config, allowing you to check a normal VirtualHost, an https VirtualHost and a normal VirtualHost on a certain url (this can be handy if your front page redirects to a logiin page for example). You can now add a service definition to a server for every VirtualHost you want to monitor. For example:

define service {
        host_name               yourservername
        check_command           check_http_vhost!
        use                     generic-service

define service {
        host_name               yourservername
        check_command           check_https_vhost!
        use                     generic-service
define service {
        host_name               yourservername
        check_command           check_http_vhost_url!!/sessions/new
        use                     generic-service

Good luck!

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!

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 ;)

Dropbox on Your Own Server

I’ve always liked Dropbox, except for one thing: I don’t trust them with my data. Also, it seems wrong to pay $ 10,00 for 50 GB of storage when you have your own server with much more storage and available on a fast network.

Well, finally there is a solution. It’s called SparkleShare and it’s completely open source and uses Git as a backend. Today they released a very early alpha version and I tried it out immediately. After having some trouble with the interface (you need to insert / in the folder input box if you use Github), everything worked great. However, I don’t advice anybody to use it in production. It’s still in development and can contain serious bugs. I can’t wait till it gets more mature and ready for production usage!

Crawljax 1.9 Released

We just released Crawljax 1.9, the project I’m working on for my master thesis. It’s mostly a “bug fix and clean up” release, but some important changes were made as well.