Twitter LinkedIn Github

Latest Posts

Viktor on Open Source, Scaling, Unix/Linux and Entrepreneurship.

Installing Windows 7 on a MacBook Air

December 8, 2013 3:59 am    Posted by Viktor Petersson    Comments (0)

It’s blasphemy, I know. Why would anyone in their right state of mind do such thing?

Unfortunately, people outside the tech-world, and ISV who provides them with software, are still stuck with Windows (due to ignorance or lack of choice).

If you want to equip someone in that world with a great and light laptop, a MacBook Air is a pretty good choice. It’s affordable, and since you will be installing a pure (i.e. non vendor/bloatware infected version) of Windows, it makes a pretty good Windows machine (an oxymoron, I know).

Are They Using Google Apps?

August 2, 2013 5:21 am    Posted by Viktor Petersson    Comments (0)

Are they using Google Apps?

In the past few months, I’ve started moved most of my conference calls from Skype to Google Hangout. The video and audio quality is a lot better, and it’s more convenient to manage. There is however one problem: If the other party isn’t using Google Apps or Gmail, they cannot join the Hangout. This has delayed many conferences calls for me.

To resolve this issue, I wrote a simple web app called Are They Using Google Apps?. You can enter either the domain, or the email address, and the tool will tell you if the other party is using Google Apps (by simply checking the MX records).

If they are using Google Apps, I will schedule a Google Hangout, and if not, I will schedule the conference call with UberConference.

My presentation from Pi and More 3

June 15, 2013 5:31 am    Posted by Viktor Petersson    Comments (0)

I just finished delivering presentation from Pi and More 3 in Trier, Germany. Here’s the slide deck.

Update: As it turns out, the presentation was also recorded. You can find the video here.

Join me on Pi and More on June 15

June 1, 2013 12:29 am    Posted by Viktor Petersson    Comments (0)

On June 15 I will be speaking at Pi and More in at Trier University in Germany.

The event is all about Raspberry Pi, and I’m really excited to be part of the event.

My presentation will be about Screenly and how we built the most popular digital signage solution for the Raspberry Pi thanks to the awesome Raspberry Pi community.

You can read more about the event here (German). The event is free to attend, and you can sign up here.

See you there!

Major update to Screenly

February 21, 2013 6:34 am    Posted by Viktor Petersson    Comments (2)


I’m excited to announce that we’ve released a major update to Screenly. As you can see in the screenshot above, we’ve given the user interface a major overhaul. The workflow is significantly more streamlined, and a lot prettier.

You can take the new interface for a spin here. For upgrade instructions, please take a look here.

More information about Screenly is available here.

Ok, this a long rant, but I just need to warn anyone else looking to buy this monitor. It’s the worst piece of garbage I’ve ever owned. If you’re thinking about buy one, just don’t. Pretty much anything else you can get your hands on is better.


On paper, it’s a pretty decent monitor. It’s a regular 23″ monitor with 2x HDMI input and one VGA. It seemed pretty ideal, since I was primarily looking to use it for my Raspberry Pi labs. For me, monitors are pretty disposable, and I don’t pay much attention to them these days.

This monitor however must have been created by a bunch of either extremely incompetent engineers, or skilled engineers with an extreme hate for the human race.

For instance, the input detector is so shitty that when you plug in a regular computer to it, you’ll be way into the operating bootup before it even detects the monitor (if at all). That means, there’s no way in you’ll be able to do access the BIOS with this monitor (unless you know the exact key combinations (and no, it’s not just ‘Delete’ as it used to be in the good old days)). When using this monitor with the Raspberry Pi, things gets way worse.

In order for this piece of garbage to detect the Raspberry Pi, you need to carefully time when you power up the Raspberry Pi compared to the power up cycle for the monitor. If you either power up the Raspberry Pi too early, or too late, it won’t detect it at all and go to sleep.

Then there’s the monitor’s menu system. You’d imagine that a feature like switching between inputs on a monitor with three inputs would be pressing one key. Nope, on the Acer S235HLBII, you need to dive into the menu and dive into a submenu to do this. Moreover, you can’t even get to the menu if the monitor can’t detect any input.

If you could at least force the monitor to a given input, I guess I could live with this monitor, but you can’t. It will automatically jump back and fort in order to its own pathetic probing.

For the above reasons, I want to congratulate Acer for designing the world’s shittiest monitor.

Since we started WireLoad, the number of websites we host have grown steadily. It’s a myriad of sites, ranging from product sites to websites belonging to friends and family. Many of them are WordPress-sites (just like this one), while others are more complicated. Some use databases, while others don’t. Since we’re often in a rush when we set up a site, documentation often suffers, and you have to spend time later on trying to decipher how things were set up.

This past week I finally had enough and decided to resolve this issue once and for all. What we really needed was a template-based system that could take care of everything and provide us with a user friendly interface. Puppet felt like the best tool for the job so I got busy writing a custom module for this.

The final result is a module I named Puppet-hosting. It allows you to manage all your websites using Puppet. To add a new site, all you need to do is to add a few lines to in your site.pp, and you’re all set.

Here’s an example of how it can look:

hosting::site { 'My Website':
  type        => 'wordpress',
  url         => '',
  url_aliases => ['mysite.*', ''],
  ip          => $ipaddress_eth0,
  contact     => 'Viktor Petersson [email protected]>',

Not only does this make it much easier to manage all the sites, it also speeds things up and avoids human errors, such as typos (and if you do have a typo, it’s easy to spot, since it’s only a few lines in sites.pp).

Screenly now has its own website

January 22, 2013 7:52 am    Posted by Viktor Petersson    Comments (0)

I’m astonished by the amount of traction we’ve been seeing for Screenly. The Open Source-version is growing rapidly in traction, while the wait-list for the Pro-version is growing.

Given the amount of traction, we’ve now allocated more resources from WireLoad towards Screenly. The first priority right now is a cleanup of the code base and to improve the user interface for Screenly OSE.

Since I’ve been receiving a lot of emails from the contact form on my website about Screenly, we felt that it was important to push out a website for Screenly. We’ve now done this, and you can find it at On the website, you’ll find more information about Screenly, along with a live-demo of Screenly OSE.

There’s no doubt that virtualization and the cloud is here to stay. So you migrated your entire architecture to the cloud and everyone is happy. Eventually, you’ll come to a point where you start decommission servers.

If this was an on-premise server, all you had to do was to powered it off and perhaps put it to use elsewhere (or if virtualized, simply delete it). In the cloud however, it’s tempting to do the same.

What people don’t think about however is that most cloud vendors use regular magnetic disks. This means that when you delete a virtual drive, it will be provisioned to someone else. Normally, the first thing the next person who gets provisioned your old disk blocks (or parts of it) would do is to format it and fill it with data.

However, if this person is a malicious user, s/he could restore what was written to those disk blocks, just as s/he could with a magnetic drive that has been formatted.

Therefore, before I decommission any drives in the cloud, this is what I do:

  • Power off the system
  • Change the boot device to a Live CD (most linux-distributions will do)
  • Run shred on the device
  • Power off the system and delete the drive

While shredding the drive will take a fair amount of time, we know that even if a malicious user is provisioned the same disk blocks, they won’t find any of your data.

Axis M1114 + mplayer = Win

January 9, 2013 11:53 am    Posted by Viktor Petersson    Comments (0)

I’m a long-time fan of Axis’ IP cameras. I’ve played with a few other IP cameras too, but I’ve never come across a camera with the performance and stability of Axis’ products.

Recently I deployed two Axis M1114-cameras. It’s an impressive device with built in motion sensor (that can record to a SMB or FTP) with Power over Ethernet (PoE). The optics in the device is equally impressive, as it capable of recording data in down to 0.6 Lux.

Once I had deployed the cameras, I wanted to view the feeds on two statically mounted monitor. With the help of two spare monotors and an Asus EEEPC (a low-powered Atom-based computer with both HDMI and VGA output) I was able to do just that. A simple Ubuntu installation with auto-login did the trick. The secret sauce however was mplayer.

Since this is a low-powered computer with a rather powerful GPU (Nvidia ION), I had to offload the rendering to the GPU to avoid overheating. After installing the required GPU drivers and configure both monitors, all I had to do was to create two scripts and have them launch at boot:

sleep 5
while [ true ]
	mplayer -nosound -display :0 -quiet -vo vdpau -vc ffh264vdpau -fs rtsp://cam0/axis-media/media.amp?videocodec=h264 -rtsp-stream-over-tcp -hardframedrop
	sleep 2

sleep 5
while [ true ]
	mplayer -nosound -display :0.1 -quiet -vo vdpau -vc ffh264vdpau -fs rtsp://cam1/axis-media/media.amp?videocodec=h264 -rtsp-stream-over-tcp -hardframedrop
	sleep 2

Simple as pie! Even with two streams, the computer is at 99% idle. Also, even if the power goes out, the computer will automatically boot up and show the stream.

If you have different hardware, you might need to adjust the ‘-vo’ and ‘-vc’ variables to fit your hardware.