Articles in the Uncategorized category

  1. I Resurrected My Dutch Movie Review Site From 2003

    Thu 09 June 2022

    Introduction

    Between 2003 and 2006, I ran a Dutch movie review site called moevie.nl.1 I built the site and wrote the reviews. It never made any money. It cost me money to host, and it cost me a lot of time writing reviews, but I remember enjoying writing reviews about films I liked.

    The gimmick of the site was that the reviews had two parts. The first part is spoiler-free, just giving a recommendation with some context to make up your own mind. The second part contained a reflection of the movie, which included spoilers.

    moevie

    Even back then, the site didn't win any design awards (from archive.org - click to enlarge)2

    I started building the site a few months after finishing college (IT) in 2002 as I felt inept and had little confidence. Building something tangible felt like a good way to build up and demonstrate skills. And I had something to say about movies.

    Although moevie.nl did not help me gain employment as far as I know, it was fun while it lasted. At some point, I didn't get much joy out of writing movie reviews and I let the site die.

    I did keep backups of the database the code and the pictures though. And now after 18+ years I decided to resurrect the site, including all (old) reviews.

    Why resurrect a dead website gone for 16+ years?

    Rebuilding the site was just a way to spend time, a small hobby project. Something to be bussy with. The second reason is some kind of misplaced nostalgia. I sometimes regret shutting down the site, wondering what could have been if I persevered.

    Losing and regaining the domain

    Back in 2006, my hosting provider (non-profit with just a few servers) abruptly stopped operating due to hardware failure 3 and I was forced to move my domain to another company. At that time, private citizens in The Netherlands could not register an .nl domain, only businesses could, so that was a bit of a hassle.

    Not long thereafter however, I decided to let the domain expire. It was quickly scooped up by 'domain resellers'. Years later I decided that I wanted moevie.nl back, but the sellers always asked insane amounts of money.

    In 2019, I visited moevie.nl on a whim. To my surprise it didn't resolve anymore, the domain was available! I quickly scooped it up, but I didn't do much with it for a long time, until now.

    Rebuilding the site

    I really wanted to preserve the aesthetic of moevie.nl as it was back then. Especially in the context of modern web design, it does stand out. As a sore thumb - but still - I had a goal.

    Having the code and database dump is one thing, but it doesn't tell you what it actually looked like in 2003-2006. I could have tried to get the old (PHP4) code working, but I just didn't feel like it.

    Instead, I chose to visit Archive.org and indeed, it captured old snapshots of my site back in 2006. So those were of great help. The screenshots at the top of this blog post are lifted from this page on archive.org. This snapshot was taken just before I decided to close the site.

    The challenge of mobile device screens

    To set the stage a bit: the rise and fall of moevie.nl happened a year before the iPhone was first announced. Smartphones from Blackberry were popular. I had a Palm VX PDA and later a HP Compaq PDA.

    Most people didn't have mobile data connections so as far as I know, the mobile web really wasn't a thing yet.

    So moevie.nl was primarily developed for the desktop. When I thought I was finished rebuilding the site, I quickly discovered that the site was unusable on my iPhone and way too small and finicky to use on my iPad.

    For somebody who has no experience with modern web development, it was quite a steep learning-curve discovering how to deal with the various screen sizes in CSS4.

    A very large part of the entire effort of rebuilding the site was spend on making the site workable on all different device sizes. Fortunately, iOS device simulators were of great help on that front.

    Technology

    I've recreated moevie.nl with Python and Django. For the database, I chose Postgresql, although that is total overkill, I could have used SQLite without any issues.

    I chose Django because I'm quite familiar with Python so that was a straight-forward choice. I selected Postgresql mostly just to regain some knowledge about it.

    Hosting

    I'm self-hosting moevie.nl on the same Raspbery Pi4 that is hosting this blog. This Raspberry Pi is powered by the sun.

    So moevie.nl is solar-powered during the day and battery-powered during the night.

    Closing words

    I'm not sure if I really want to start writing movie reviews again, knowing full well how much effort it takes. Also I'm not sure I have anything to say about movies anymore, but we'll see.

    The overall experience of rebuilding the site was frustrating at times due to the severe lack of experience and knowledge. Now that the site is done and working, even on mobile devices, that feels good.


    1. The name is based on the phonetic pronunciation in Dutch of the English word 'movie'. 

    2. sorry for the language but I could not find a better screenshot. 

    3. I was neglecting the site at that time due to losing motivation. 

    4. I admit I only tested with iOS devices so Android-based smartphones could experience issues. 

    Tagged as : web
  2. Finding a Good Blu-Ray Player for Mac OS X

    Sun 22 September 2013

    I find playing a Blu-ray movie on my Mac cumbersome. I've been using Plex, XBMC and VLC but these free open-source products are all a usability nightmare.

    To play a Blu-ray movie, you have to perform these steps:

    1. right-click on the BDMV file
    2. choose 'show packet contents'
    3. go to the STREAM folder
    4. sort the files by size (from large to small)
    5. select the biggest m2ts file and open it in the appropriate player

    I got so fed-up with this process that I started searching for any product that just allows me to point it to a folder with Blu-ray content and friggin' play it. Fortunately, there is such a product for Mac OS X, it's called Mac Blu-ray Player and it's a paid application. I paid 36 euro (48 dollar) including taxes.

    Those 36 euros are well spend. No it is not free, no it is not open-source, but I don't care. It is a good product. If you value your time I highly recommend buying this software.

    I don't have anything against free or open-source software, but I do have a grudge against software that is not user-friendly. If software is not easy to use, something you would expect from a media player, it's broken.

    Fortunately, you don't have to trust me on my word, you can download a free trial that seems fully functional, it only shows a trial message when playing a movie.

    Tagged as : blu-ray Mac OS X
  3. Setting Up a Jabber Instant Messaging Server |_Http-Title: Site Doesn't Have a Title (Text/html; Charset=utf-8).

    Sat 05 February 2011

    I wanted to see how dificult it is to setup an instant messaging server based on open source software. Now I know that it is very easy, unless you are stubborn and do things your own way. In this example, I'm setting up a small IM server that is only for internal company use, but there is no difference if you want to expose the server to the internet.

    First a bit background information. There is an open IETF standard for instant messaging called "XMPP" which stands for "Extensible Messaging and Presence Protocol". This protocol originated as part of the open source Jabber IM server software.

    Setting up ejabberd

    I decided to use ejabberd which is part of the Debian software archive. It is written in Erlang, but I can live with that. This blog posts documents how to setup the IM server with two accounts that can chat with each other. The configuration I use also enforces the use of SSL/TLS so authentication and all messages are encrypted.

    Steps to get things running:

    • apt-get update
    • apt-get install ejabberd
    • cd /etc/ejabberd
    • edit ejabberd.cfg

    Change the following line to your needs:

    %% Hostname
    {hosts, ["localhost", "jabber.domain.local"]}.
    

    Also enforce the use of encryption like this:

    starttls, {certfile, "/etc/ejabberd/ejabberd.pem"}
    

    Must be changed to:

    starttls_required, {certfile, "/etc/ejabberd/server.pem"}
    

    Generating a custom SSL certificate

    Security wise, it is very wrong to use the default SSL certificate as provided by the installation package for the server certificate. Anyone with access to this key material can decrypt encrypted communication. So you must generate your own server certificate. This is also required because IM clients may verifiy the certificate against the domain name used within the certificate. If there is no match, it will not work or it will at least complain.

    openssl req -new -x509 -newkey rsa:2048 -days 365 -keyout privkey.pem \ 
    -out server.pem
    

    So this creates a public key (server.pem) and a private key (privkey.pem) which are valid for a year. Feel free to make the certificate valid for a longer period, this is an example. You will have to fill in some stuff, the most important part is this part:

    Common Name (eg, YOUR name) []:jabber.domain.local
    

    You are forced to set a password on the private key, but we want to remove this because otherwise the ejabberd service will not start automatically.

    openssl rsa -in privkey.pem -out privkey.pem
    

    Just enter the password you entered earlier and you're done. We now have separate files for the public and private key, but ejabberd expects them in one single file.

    cat privkey.pem >> server.pem
    rm privkey.pem
    

    Set proper file system permissions:

    chown ejabberd server.pem
    chmod 600 server.pem
    

    Now we are done. Restart ejabberd to use the new settings.

    /etc/init.d/ejabberd restart
    

    Security caveats

    Please note that the ejabberd daemon provides a small build-in web interface for administration purposes on TCP port 5280. By default it is not protected by SSL or TLS and cannot be used unless you add users to this part of the confiuration file:

    {acl, admin, {user, "", "localhost"}}.
    

    Example:

    {acl, admin, {user, "admin", "localhost"}}.
    

    The user must also be registered as a normal IM user as described in the next section.

    Warning: it seems to me that this interface is not very secure, for example, there is no logout button.

    Furthermore, you might consider disabling the following section:

    ejabberd_s2s_in
    

    This prevents your IM server from communicating with other IM servers source. But we are not finished. When you install ejabberd, some other services are also started on the system. It is thus very important that you configure your firewall to block these ports. This small nmap port scan output shows some interesting services:

    4369/tcp  open  epmd?
    5222/tcp  open  jabber  ejabberd (Protocol 1.0)
    5269/tcp  open  jabber  ejabberd
    5280/tcp  open  http    ejabberd http admin
    |_http-methods: No Allow or Public header in OPTIONS response (status code 400)
    36784/tcp open  unknown
    

    Port 4369, 36784 and 5280 should be blocked by your firewall and not accessible from the internet.

    Adding users

    It is now time to create some IM users. A user account always looks like an email addres, for example:

    peter@jabber.domain.local
    

    To add accounts, use the ejabberdctl utiliy:

    ejabberdctl register peter jabber.domain.local <password>
    

    Please note that passwords that are entered on the command line end up in your bash_history file, so beware. Also, users running ps aux may be able to see the command for a brief moment. So be carefull.

    By registering two account, you can test your new server.

    Additional resources

    Nice to know: the domain names used for your accounts can differ from the domain used for the IM server.

    If you have a Windows Active Directory domain, you could consider authenticating your users against LDAP.

    Other resources: - tutorial 1 - tutorial 2

Page 1 / 18