Building Images for multiple monitors in windows

During the slide project one of our main focuses was allowing users full control over how images were displayed on their monitors. These days a large percentage of users utilise multiple monitors, so we set about implementing a robust set of tools for managing backgrounds in multi-monitor setups on Windows, Mac OS and Ubuntu. This meant allowing resolution and aspect ratio filtering on each monitor and proper image scaling options for each monitor.

It would be reasonable to assume that this would be simple to implement on windows. You can already set different images as the desktop background on different monitors on windows, so surely a separate application can hook into and use this system? No such luck. In fact, out of all of the operating systems Windows was the most difficult to work with in this case.

In this article I will go through our methodology for solving this problem, with full go code examples and visual representations.

Continue reading!

A mutable time.Ticker

At the core of Slide, there is a ticker which runs at a user specified interval. The ticker is used to perform operations on a loop at the given interval. For example, Slide’s ticker runs every x interval and finds a new background from the database and applies it as the wallpaper. Another ticker is used to check for new images and download them at a user defined interval.

The normal use case for a time.Ticker is as follows:

package main

import "time"

func main() {
    interval := time.Second * 5
    ticker := time.NewTicker(interval)

    for range ticker.C {
        // do something every 5 seconds

In Slide, we allow users to modify the interval at which backgrounds are changed. If the interval changes, the ticker needs to be updated (or replaced?) to reflect these changes, without requiring a full application restart. We need a way to change the interval with as minimal an impact to the application as possible.

Continue reading!

The iOS 9 release: or, Why I Love Cloudflare

In September, Apple Released iOS 9 to the public. It was also ipsw.me's best month to date.

All of the previous traffic records for the site have been broken: most concurrent visitors on the site, most visitors in a day, week, month. Most number of iOS files downloaded, most penguins seen, etc. it goes on and on. Without Cloudflare, a significant number of users wouldn't have been able to get their iOS downloads, or see the penguin! When the iOS 9 release hit, traffic went through the roof, and was too much for my poor server to handle on it's own.

Continue reading!

A (delayed) April Fools from Apple?

As you may know, I recently added Apple Watch support to ipsw.me.

Today I checked the source file for the updates and saw a new OTA file that my updaters had not picked up, so I modified them to add it, and announced it via twitter. (The file seemed pretty big, I thought maybe closer to full Apple Watch firmware :P). This was not the case.

Upon extraction, I found the following in the BuildManifest.plist


This is the iPad 2 (WiFi)'s DeviceClass. Weird, huh?

Further inspection showed this is the OTA file for iOS 8.3 for this device.

Continue reading!