Screensaver Ninja might be coming back

Since discontinuing Screensaver Ninja, I have received many messages asking when it is coming back: over Twitter, Facebook, email, and even one person tracking me down on Reddit..

For those of you who don’t know what Screensaver Ninja is, here is the old explainer video:

It has been very painful to read these messages for a couple of reasons. Firstly, I strongly believe in the product. I want to have it; use it; and enable others to use it. I constantly see expensive and badly designed dashboards or wasted screens, which my product will address. Secondly, judging by the requests, other people want this just as much as I do. Not proceeding with Screensaver ninja could be a wasted business opportunity; although it is hard to tell if the demand is enough to support its development right now.

I set up a landing page explaining what happened to Screensaver Ninja and a form for people to register for notifications of its potential comeback. This was a way to save everybody’s time and frustration; for those emailing requests for up to date information when I could only say, with sadness, “it’s over”. To my surprise, this form has been gathering five or so leads a week, which is rather a lot for an abandoned product.

I have started playing with the idea that I might revive Ninja: This time I have designed a bigger system that covers many more use cases and allows me to support both Windows and Mac OS as well as other platforms just as easily.

During this process I identified the technological bottlenecks; the aspects to product creation that can take months to negotiate and solve, such as hacking Apple’s cookie jar or packaging Chromium. In doing so, I have built a selection of prototypes testing my choices – and everything is working beautifully.

So that’s it: I have decided to revive Screensaver Ninja. I have emailed all of you whom have shown interest to tell you the good news, and have received an overwhelmingly positive response from both individuals and corporations; some wanting to run hundreds of instances.

I want to be completely transparent with my supporters; I am building Screensaver Ninja by myself in my spare time between long days and after hours work at two different consultant gigs. Whilst I am looking into the options of partnerships, developers, and marketers, I have decided not to wait for these additions to the team in order to make progress. I’m very excited about this phase both from the technical as well as the business points of view so Screensaver Ninja is moving forward and I will have frequent updates.

Advertisements

Free-form version 0.2.0 released

We are very happy to announce version 0.2.0 of our form building library Free-form. This version includes:

The Bootstrap 3 support means that you can have whole fields defined as succinctly as:

[:free-form/field {:type        :email
                   :key         :email
                   :label       "Email"}]]

Enjoy!

 

Prerenderer 0.2.0 released

We are proud to announce the release of version 0.2.0 of our ClojureScript library Prerenderer, a library to do server side pre-rendering of single page applications. In this release, we include:

The two first items in the changelog came hand in hand and they are the biggest changes to keep in mind if you are upgrading. We are very happy that we no longer need a fork of re-frame and we would like to extend our gratitude to Mike Thompson for working with us on having the appropriate API to make this happen.

The change in API means that your Prerenderer module now would look something like this:

(ns projectx.node
  (:require [prerenderer.core :as prerenderer]))

(defn render-and-send [page-path send-to-browser]
  (send-to-browser (render page-path)))

(set! *main-cli-fn* (prerenderer/create render-and-send "ProjectX"))

instead of:

(ns projectx.node
  (:require [cljs.nodejs :as nodejs]
            [prerenderer.core :as prerenderer]))

(defn render [req res]
  (let [page-path (.-path (.parse url (.-url (.-query req))))]
    (.send res (render page-path))))

(set! *main-cli-fn* (prerenderer/create render "ProjectX"))

Enjoy!

Moving to London, joining a startup

The Palace of Westminster at night seen from the south bank of the River Thames.
London by Jim Trodel

I’m making a lot of changes in my life. I’m moving to London… tomorrow. I’m really excited about it. I wanted to live in London for a while already. In that topic, do you know anyone that wants to share a flat in the London Bridge area?

Also, I’m changing jobs. In London I’m joining a startup called Watu. Well, I’m part of the founding team and I’ll be the CTO, which for now, it’s just an overly fancy way to say the coder, but I like it. We are solving the problem of managing employees from publishing the open positions at a company to interviewing, to paying salaries, to assigning and managing shifts. The whole deal. I’m really excited about it and I’m looking forward to it.

Suspending and activating trackings on Keep on Posting

You asked for it and you got it. If you go on a vacation or you temporarily stop posting in a blog, you can now suspend the tracking at Keep on Posting (without deleting it) and activate it whenever you want.

What’s the difference between suspending and deleting? There are two. First, you still have the tracking on the list, so re-enabling is just one click, and you don’t have to remember which blog it was, it’s just there.

The second is that while in suspended mode we keep all the data we gathered and we keep on gathering data, so when you hit activate, we can analyze that data for you without having to re-fetch it and any long term analysis we’ll implement will be possible (blogs only publish the last 10 posts over feeds but we keep track of previous posts when we can).

fofof was useless

It’s always hard to kill your own code, but not killing it when you have to is worst in the long run. My idea for fof and consequently my gem fofof was useless.

First I’ve discovered it didn’t work at all with the new Rails 3 query syntax. When I started to find a fix I’ve discovered I could replace the whole thing with:

 || raise(NotFound.new)

The examples in the Find or 404 post would end up like:

Blog.find_by_id(id) || raise(NotFound.new)

and

blog = Blog.fof.find(blog_id)
post = blog.posts.find_by_id(id) || raise(NotFound.new)

It’s less code, it’s more robust, I even think it’s much more readable. So there you, I’m killing fofof.

Sharing my code

I’ve recently wrote several posts that contiained code to copy and paste:

I don’t like copying and pasting code and since I was already doing it between several of my projects, I took those pieces of code and package them as gems. If you want, you can use them too:

I find it really awesome how many times some of my gems were downloaded:

Update: fofof is actually useless.