Monday, 20 November 2017

Smart home news

We've never really pushed this point but our smart bulb controllers for MacOS, LIFXstyle and Hue-topia, have deliberately functioned within your local network, free of dependency on the companies' cloud systems.

LIFXstyle has relied on LIFX's own development kit for Mac, which has long been unsupported and has gone out of date.

So we chose to put a lot of time into LIFXstyle,  writing our own code from the ground up to communicate via LIFXs LAN protocol (using their cloud system was never an option, even though it would have been an easier development journey). In early testing this seems reliable and responsive.

We've also made some well-overdue improvements to the interface. You can see from the early screenshots here that there's better navigation, allowing you to choose to view lamps / groups / locations / tags.  The status bar menu is improved, giving you more information and control up there in the status bar. There's a new minimalist layout, making four options for the layout of the interface. For changing the colour or warmth, we've made our own custom colour picker geared towards smartbulbs.



It still contains powerful features like scheduling, presets, the drag-and-drop effects designer, control of groups and locations (which will be in sync with the official phone app) and Applescript support. No price increase is planned and the new version will be a simple and free upgrade to existing LIFXstyle users.

Support for the new multi-zone strips and other enhancements are planned shortly.

Our Hue app, Hue-topia will inherit these interface changes after beta testing them. This new version of LIFXstyle is now available for download as a beta.

Black Friday / Cyber Monday offers on Scrutiny for Mac and Integrity Plus




50% off Scrutiny

For Black Friday / Cyber Monday


If you're a user of Integrity or Integrity Plus, or have trialled Scrutiny, we hope that this discount will help you to make the decision to add Scrutiny for Mac to your armoury. 

Simply buy through the app or Scrutiny's home page, the discount will be applied. Exp 28-11-2017


The offer will run for the next week or so, please feel free to share this offer, or use it to buy more licences if you have multiple users.


50% off Integrity Plus

For Black Friday / Cyber Monday


If you're a user of the free Integrity, you may like to learn about the extra power that Integrity Plus gives you. Search / filter / export your link results, Generate an XML sitemap and more. 

This offer is being run by MacUpdate, visit Integrity Plus's page at MacUpdate to take advantage. Exp 28-11-2017

The offer will run for the next week or so, please feel free to share this offer or use it to buy more licences if you have multiple users.


Improvements to website image size report in Scrutiny and Integrity



For image sizes you need to go to the links results, either the flat view (which will list each occurrence of each image) or the ‘by Link’ view (which will list each image once) and switch on the column ‘target size’ (if it’s not showing already). In the Filter drop-down you can select ‘Images’ to just show images.



Obviously you’ll need the ‘check images’ checkbox switched on in order to see images in the list.

There’s a new setting in your site’s settings, called ‘load all images’. With this checkbox off (it should be off by default) then you should still see image sizes in the columns, but they rely on the ‘content-length’ server response header field. That will be the compressed size of the image (if gzip compression is used) and may not be available in some cases.

With the ‘load images’ option on, each image is loaded so Scrutiny will know the exact size of the image. This is more reliable but obviously slows your scan a little.



The column in the by link and flat views can be sorted, so you can find the largest images easily.

If you export to csv then the export should reflect what you’re seeing in Scrutiny (ie filtered and sorted the same way)

This all applies to Scrutiny (from version 7.5.10) and Integrity and Integrity Plus (from version 6.11.6)


Thursday, 14 September 2017

High Sierra keeps Stickies!


They've been there since system 7 (That's OS7, not OSX 10.7). More than 20 years ago. I guess it's had some updates, but it looks pretty much the same.




Sunday, 9 July 2017

NSURLConnection won't die!


Integrity has been the most interesting project of my life.

I believe that the success of the web is down to the html standard and its flexibility *. It's human-readable, human-writable and web browsers do their best to render a page, whatever problems there might be.

I hate to think how many hundreds of hours of work that this has made for me over the last ten years.

With many applications, you can press every button, test all scenarios and be sure that it works. But with a web crawler you can test it on 99 websites, and it'll fail when the first person tries to use it **.

In order to have a reliable web crawler which parses html itself, you have to investigate every problem and improve your code  to handle whatever new unpredictable thing has been tripping it up.

It's taken ten years of this hard work for Integrity (and other related apps which use the same engine) to be as stable as it is. It has more users than ever and head-scratching problems are very few and far between now.

The worst times are where the problem happens at a deeper system level and you can get no debug information.

At a very high level, you can obtain data for a url in a single line. At the opposite extreme you can get involved with sockets etc. for Integrity I've taken the middle ground, creating the response and asynchronous  connection and using delegate methods to monitor what's happening and be able to intervene if necessary.

But there comes a point where you say au revoir to the request / connection and wait for your various notifications. If the response / notification is unexpected then you're down to some educated guesswork and trial and error.

That's what's happened this week. At a certain point through scanning particular sites, all NSURLConnections would appear to 'lock up' and all would return timeout notifications. (And any further NSURLConnections created to any url within that app would also time out until the app was quit and re-started even though the same urls would respond in any other app.

As usual there are many questions and answers online, with many suggestions that aren't relevant or have no effect.

I eventually got somewhere with a process of elimination - stripping the relevant code down to bare essentials until the problem had gone, then adding the original code back in, chunk by chunk until it stopped working again.

It appears that the problem is related to connections staying alive. The app obviously manages the number of simultaneous connections, and either lets one connection load all its data and complete naturally, or cancel it (if that data isn't needed)  before creating a new connection to replace it.

I think what's going wrong in these cases is that when you think you've let go of a connection with [connection cancel], that connection sometimes stays open, and the next one isn't replacing it but adding to the number until some limit is hit.

Removing all [connection cancel]s and allowing every connection to load and finish naturally completely solved the problem.

Making better use of the HEAD method (when you know that you only need the status but not the data) and explicitly making sure those requests have 'connection: close' in the request header should solve the problem but it doesn't entirely.

There's a lot I still don't know - why is a connection sometimes staying alive after it's been cancelled (or in the case of a HEAD request, when it has supplied the header info and says that it's done). If anyone knows, do tell!







* Despite Microsoft's and Netscape's best attempts to make it their own, it's survived as a truly universal standard - anyone can make a web page that can be read in any browser. It's an unusual thing and the IoT has a lesson to learn.

** There are some ridiculously unexpected things in the code of some websites (written by humans and written by machines)

Thursday, 6 July 2017

Effects Designer for LIFX and Hue bulbs

Here is the first look at a new drag and drop lighting effects designer for our Hue-topia and LIFXstyle light controllers.



You'll be able to create more sophisticated versions of the false dawn / dusk or go the whole hog and create a 24hr daylight simulator (blue hour / golden hour etc)

And you'll be able to get creative and design mood effects such as flickering fire, colour cycling for party effects or mood.

I think all bases are covered, you can set the length of the whole cycle from 1s to 24hrs, whether it's 'one shot' or loops, the length of the transitions.

You can apply effects to a single bulb, groups or rooms, manually or on schedule.

This feature is now in version 2.0 (beta) of  LIFXstyle and Hue-topia

Monday, 19 June 2017

Airfoil Satellite support in Screensleeves

Following some recent updates to Screensleeves I had a request for Airfoil satellite support.


Airfoil Satellite running on your Mac allows you to stream music from another device. Happily the stream contains meta data and Rogue Amoeba (AS's developers) have made that information accessible, so adding support to Screensleeves was a breeze.

So Screensleeves can now display cover artwork, track name, album name and artist name (assuming that the information is provided by the original music source). This will all display within any of Screensleeves' themes. Unfortunately the progress bar and some other details aren't available via Airfoil Satellite at this point, but maybe that will change in future.

The basic Screensleeves and Screensleeves Pro are now available at version 5.4.0  which contains AS support.