Wednesday, 20 December 2017

This is an experiment; if you've found this post then please go ahead and use either of these codes, you're very welcome.

I'm very keen to know whether people try Googling to find voucher codes for these apps. Eventually this blog post will be buried within the blog but hopefully can be found by searching for 'voucher code for Scrutiny' or voucher code for Integrity Plus.

I'll obviously be able to see how many people have viewed this post and how many people have used the codes. And that's all I ask. Go ahead!

50% Voucher code / coupon code for Scrutiny for Mac

FFE8E206

50% Voucher code / coupon code for Integrity Plus for Mac

79EBB0B8

Use these codes in the checkout window within the app, or by using the 'Buy' button on the respective home pages:

It's possibly the top 3rd-party app to have installed on your Mac. Not Mac-like at all in its UX but it does stuff that the system ought to be doing by default.

And who knew that Terry Pratchett was responsible for this essential piece of kit?

[Update] Be very careful when installing VLC. It's easy to search, spot a result claiming to be the VLC download / install, but turns out to be a third party installer which may or may not install VLC, and will attempt to install other less desirable software at the same time.

Tuesday, 19 December 2017

Here's a personal story; I was a stained glass artist for some years and have a few pieces in my home and office now.

LIFX have recently released their 'Z' multizone light strips. I must admit that at first I thought it was a bit of a novelty. I bought some because I had to add support to PeacockMedia's LIFXstyle app.

After playing around a bit and trying strips in various places, I tried lighting this particular stained glass panel in my office. I tried various placements before I tried sticking a metre of the stuff behind the thick vertical line down the middle.

And here's how it looks after putting it back up and switching on:

It really works well, I'm chuffed to bits with it. But even better than that - you can change the light from warm white to cold white, and all the colours of the spectrum:

At first, LIFXstyle (v3.0) was capable of switching the entire strip to the same colour / brightness. One of the great features of the lightstrip is that it's divided into 'zones' (hence Z, multizone). After a little work on LIFXstyle we were dialling up different colours / settings for each 'zone'.

Version 3.1 allows you to mess around with colour and save the settings you like as a preset, apply cycling effects to the whole strip or parts of it. (An early version of 3.1 will be available very shortly.)

Finally, because I can't resist another picture, here are some pretty pastels.

Monday, 20 November 2017

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.

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)

Sunday, 9 July 2017

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)

Monday, 19 June 2017

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.

Wednesday, 7 June 2017

Today for the first time I noticed that I'm no longer able to choose Objective C as my preferred syntax

It's bugged me for a long time that these pages always appear pre-selected with Swift and don't remember my selection of Objective C.

To be fair, this isn't entirely unexpected. When Swift was announced, it was unlikely that they'd run the two languages in parallel for any length of time. I've been forced to learn another language in the past; my first dealings with Cocoa were in Java-cocoa (sounds tasty!). (Java was the first OO language I learned). Translating an entire project from the Java syntax to Obj-C when I could no longer compile the Java-Cocoa code was a PITA.

I felt the wind of change when I started to notice that the first solutions I found to problems contained Swift code rather than Objective C, and I either had to translate (easy if you're just looking for the best method to use, but harder if it's a whole block of example code you want to use) or keep Googling for another answer with an Obj-C code example.

I guess I'll have to find out how to use the built-in documentation and wait for the day that things are available in Swift but not Obj C.

Tuesday, 6 June 2017

With each year's announcements it's always a relief to hear that the Mac has at least another year of life. The convergence of Mac and iOS is taking many years to happen. Yesterdays talk of enhancing Sierra with efficiencies and switch to the Apple File System was pretty welcome.

I'm very curious about the VR and AR stuff, but more from a 'playing' perspective rather than seeing ways to incorporate them into what I do. But the machine-learning stuff I really can; I've been waiting for an API built into the OS for doing that kind of stuff.

I'd always expected the Mac to continue morphing into iOS but the biggest surprise yesterday was files / drag and drop / enhanced dock in iOS. (Meaning that the convergence is going to end up closer to the Mac than anticipated.) And as Craig demo'd all of this, his iPad screen looked more like the macOS than I'd ever expected.

I'm not that bothered about the home pad, I think the built-in intelligence is a lot of guff, and they're very late to the party with a voice-activated computer in the room, I guess they thought the advanced speaker stuff was an area that Google and Amazon had been neglecting.

Monday, 5 June 2017

This makes me laugh out loud... seen at the bottom of one of my favourite sites:

Thankfully the days of 'this site is best viewed in...' are now largely confined to history - but I'm fully with anyone who doesn't want the ball-ache of spending days trying to make their site look half-decent in certain versions of IE.

Yesterday Screensleeves (free and pro versions) received a maintenance update; some small updates, improvements and the odd little glitch fixed.

It's the first update in a while. But then if something's working pretty well, should it be important to do some work and release a new version? There are definite marketing advantages (exposure).

Over the weekend I had an app pulled from the App Store, on the grounds that it hadn't been updated for a while. I hate the Store and haven't supported it for a long while, and this is a minor app that I haven't sold a copy of for a long time and have been wondering whether to stop supporting anyway. When uploading apps is such a headache anyway, the obligation to do it regularly in order to avoid them dropping an app just seems like another hoop to jump through. But it did make me feel a little offended.

On the positive side, the Apple's policy does keep their store free of abandoned apps. I've seen users refer to apps as 'abandonware' if they haven't been updated in a couple of years.

Friday, 2 June 2017

I'm thoroughly enjoying this read. I love the film but the medium of film doesn't allow for a lot of explanation, and Kubrick seems to go out of his way to *not* find clever ways to explain things, leaving quite a hallucinogenic experience.

Something I really love about old sci-fi (I recommend Metropolis, Solaris) is seeing the vision of the future from the past.

The film (2001 a space odyssey - 1968) famously contains images of what look like iPads. And just like today, the pads are sitting on the table while people are eating.

I was delighted to read the description of the 'newspad' in the book. It goes well beyond the physical description depicted in the film. Clarke uses far more words to describe the convenience of instant access to the world's news, up-to-the-hour if not the minute than the physical form of the pad.

Much is made of Clarke's accurate predictions, but in this book as well as others, the missed predictions are as delightful. Along with all sci-fi authors, Clarke predicts the future with his own world around him, thus the newspad needs connecting with a wire, and it's necessary to read a reference code on each news article and type the code into a keyboard to read the article, thus no prediction of wireless data, hyperlinks or touch-screens.

The best mis-prediction I've read in this book, is of pictures being taken by the moon colonists - and sent to the lab for processing!

Wednesday, 31 May 2017

Wix make it easy to create a website, but their reliance on javascript and plugins (including Flash apparently) makes it a challenge for webcrawlers, including Googlebot, to index the content.

It seems that Google have had to go out of their way to index these sites. There used to be a hack to get at plain html content, which I used to give as a workaround to users wanting to scan Wix sites, but that no longer appears to work.

As someone with a background in website accessibility, this all seems appalling to me*.

But they're gaining ground, I seem to be seeing more support questions about scanning WIX sites. (and their *!^%$ advert that I have to skip before almost every Youtube video I watch. When is Yotube Red going to be available in the UK??)

Unless anyone knows otherwise (please, please tell me if you know), WIX relies on a/ providing its users with an xml sitemap for submission to Google, and b/ Google being able to render js before indexing a page (again, as an old-fashioned gal, something I heartily disapprove of* )

Scrutiny has long been able to render javascript before parsing page content. There have always been a small number of sites which have menus and links that are written by js when the page loads. I've recently done some work to ensure proper scanning of such a site.

So... here's my best advice for scanning a Wix site using Scrutiny (Integrity and Integrity Plus don't have the necessary js option).

2. Switch on 'Render Javascript' which is in the Advanced settings for your site.

3. Turn down your number of threads. You can see I'm using 3 here (first notch). Using the js option is very heavy in terms of client-side processing. You don't want pages timing out without having loaded because Scrutiny is working hard at rendering a large number of pages. If your website scans fully then maybe edge this up a bit but best to err on the side of caution.

4. Go and make a cup of tea. This is going to take some time.
5. After the scan, switch on the Target Size column of the 'by link' table and check whether any of the Internal links have a target size of zero (switch the Filter button to Internal to see this more easily). If an internal page has zero kb as the target size, then it may have timed out before the page had finished loading / rendering, which means that you may have an incomplete scan.

If that looks well then you're good to go with your data, which should be complete.

* It's not the javascript I disapprove of, but the fact that the page is 'invisible' without the js being rendered. Accessibility guidelines state that we must "Ensure that pages are usable when scripts, applets, or other programmatic objects are turned off or not supported. If this is not possible, provide equivalent information on an alternative accessible page." (Web content accessibility guidelines, checkpoint 6.3 - a priority 1)SaveSave

Tuesday, 30 May 2017

SharpResize v2 is now out of beta. It's a lightweight application (ie quick to start up) for making a better thumbnail / resized for web image. The great result is due to the combination of the resizing algorithm it uses along with an additional sharpening slider.

Despite being a lightweight app it now has a good selection of adjustment sliders and built-in filters. (sepia, black and white, posterize etc).

We've decided to keep the price down. In fact as it's now priced in dollars (1.95 USD) it's a little less in real terms than the previous GBP price.

Friday, 26 May 2017

Alongside our recent post about supporting International Domain names within our web crawling tools, we're very proud and excited to announce that work has started on translating some apps and some web pages into other languages. Initially French, and initially Integrity, Integrity Plus and Scrutiny.

It's impossible to do all of the work at once, it will take a little while but the web pages for Integrity, Integrity Plus and Scrutiny now allow you to choose (top-right) English or French versions of the pages.

Localized context help in French is shortly to go into those apps, followed by the rest of the text within the apps.

Thursday, 25 May 2017

The website being scanned was http://peacockmedia.software. As you can see, the link found during the crawl is a link to a page on peacockmedia.co.uk . That looks like an external link, and so Scrutiny has marked it as an external link, therefore checked its status but not followed it.

However, it redirects to a url on peacockmedia.software - so the ultimate destination is an internal one.

There are a bunch of pages which will only be discovered if this link is considered internal.

(the pages are old manual pages - I want them to be orphaned, but that's beside the point...)

The question is - should Integrity and Scrutiny consider that link *internal* (and therefore follow it and discover more internal pages) or *external* (so it's checked but then is a dead end). Remember that the original link is to an external domain.

Wednesday, 24 May 2017

We're a UK-based concern, our apps have been almost always available in a single language - UK English (or just English as we call it here in England!) The vast majority of our users as I write this are from English-speaking countries.

Our alphabet entirely consists of characters available in ascii, and so there has been little call for Integrity, Integrity Plus and Scrutiny (and other tools based on the same engine) to support domain names - ie domain names which contain characters not found in the ascii character set.

But now we've started work on localisation of our apps and web pages, and have received the odd question concerning IDNs.

Let's not confuse this with unusual characters in the path and filename of the url. Our apps have long supported these. You may still see the non-ascii characters displayed, but behind the scenes, those characters are encoded before the http request is put together, usually using a percent-encoding system.

The method is similar with the domain name, but using a a more complex and clever system of character encoding. Browsers (and our web crawlers) often still display the user-friendly unicode version.

You can enter your starting url in the unicode form or the 'punycode' form and it'll be handled correctly. The same goes for unicode or punycode links found on your pages.

After lots of extra homework for us, Scrutiny is now handling IDNs, and is in testing.

[update 26 May 2017] Integrity and Integrity Plus also have this enhancement and are also in testing.

If this is useful for you, and you'd like to try the new version (remembering that there may still be the odd bug to iron out) then you're very welcome to download and use it (with the condition that you let us know about any issues you spot.)

Monday, 22 May 2017

A recent enhancement to Scrutiny and Integrity make it easy to see a list of all images on a site, with file size.

It was already possible to check all images (not just the ones that are linked, ie a href = "image.jpg" but the actual images on the page, img src = "image.jpg" srcset = "image@2x.jpg 2x" )

The file size was also held within Scrutiny and Integrity, but wasn't displayed in the links views.

Now it is. It's a sortable column and will be included in the csv or html export.

Before the crawl, make sure that you switch on checking images:

or

You may need to switch on that column if it's not already showing - it's called 'Target size'.

Once it is showing, as with other columns in these tables, you can drag and drop them into a different order, and resize their width.

To see just the images - choose Images from the filter button over on the right (Scrutiny and Integrity Plus)

If you're checking other linked files (js or css) then their sizes may be displayed, but will probably have a ? beside them to indicate that the file size shown has not been downloaded and the uncompressed size verified (the size shown is provided in the server header fields).

This last point applies to Integrity and Integrity Plus, and will appear in Scrutiny shortly.

Note that all of this is just a measure of the sizes of all files found during a crawl. For a comprehensive load speed test on a given page, Scrutiny has such a tool - access it with cmd-2 or Tools > Page Analysis

Thursday, 18 May 2017

Self-service is great, if all goes as planned then it's efficient and easy for both customer and seller. (Though I still resist the self-service tills at my local convenience store - I think I care too much about the 4 or 5 jobs that have clearly gone redundant as a result. Plus - the store is reaping the benefit of the customer doing those ladies' jobs, without paying the customer in any way for doing that job.)

Anyway. When it doesn't go as planned is when the fun and games start.

Today I found myself needing to get back to a customer urgently, but the email address bounced as 'user not known'. Leaving me with a postal address.

The old business-letter-writing skills came back pretty easily; my address on the right, their address below and to the left, sincerely if you know their name, faithfully if you don't etc.

(I'm an old-fashioned kinda girl. Printing off the attempted email and putting that in an envelope wasn't going to happen.)

I was wrong to think that it would be quicker to write the address on the envelope than to work out how to print it on a label or put the envelope through the printer.

I draw a lot, but I don't write very much at all now. My handwriting was never great, it seems to be appalling now. After several practice goes, I got a result that wasn't as hideous as the first ones.

.... then turned it over and found that the address was upside-down! How crap does that look?

I'm not going to be among the survivors after the aliens come and hit us with a big EMP device.

Wednesday, 17 May 2017

I've just Googled 'html5 page structure' to check something. The post that appeared first consists of a very simple code snippet followed by around a hundred comments, some asking questions but mostly asserting an opinion. (none spammy or trolly).

Without wanting to get very deeply into the actual topic itself (and maybe risking the odd comment myself....) a large number of those comments are about whether a section tag is allowed within an article tag and vice versa. It seems that anything goes as far as these two are concerned. But my, don't we love rules?

It reminds me of those areas of cities where the pavement and road have been paved over into one homogenous area. I hate them; surely it's better if there are rules that everyone knows?

It occurs to me that the vast number of relevant comments could be responsible for that post being ranked #1 for such a popular search term. I'm sure there's a lesson there somewhere...

Tuesday, 16 May 2017

So the app is reporting a broken link (or maybe it's a redirect you're interested in, or just a good link). You can easily see, copy or visit the target of the link, or the page it appears on. But how did the crawl find this particular page?

The Locate function will tell you. First open the link inspector by double-clicking on the link in one of the Links views Then highlight the 'appears on' page you're interested in, and click 'Locate'.

It won't show you every possible route to that link, but it will show you the shortest.

note that there's a context menu there too with these options.

You may have noticed that the link inspector and the context menus have a 'Highlight' option too. If you're having trouble seeing the link on the page, the Highlight option will do its best to open the page and apply yellow highlighter.

Sunday, 14 May 2017

This article uses SharpResize and is updated for version 2, which creates better thumbnails. Version 2 is available shortly as beta.

In this article:

Opening an Image

Quality and Size

Adjustments

Additional Output Sizes

Batch Image Processing

Saving

Opening an Image

There are several ways to get your image into SharpResize.

New from clipboard using File > New From Clipboard or cmd-N

Drag the image onto application's dock icon

Drag the image onto application icon or alias

Drag the image into SharpResize's image well

File > Open or cmd-O

Tip: You can grab an area of the screen using cmd-ctrl-shift-4. Drag a rectangle and see the width and height of your selection. It's not an easy shortcut to remember but worthwhile.

In addition there are toolbar buttons for New from Clipboard, Open and Save.

Retina Screens

A note about retina screens. This is a confusing subject, pixels can refer to the number of dots within an image and the actual physical pixels on the display, or it can be used as a a measurement similar to points.

Because SharpResize is designed primarily for resizing images for the web, it will display your image at '1x' - ie the size that it would appear if you specified your size in pixels in a CSS. If you're using a retina screen, then this would obviously look fuzzy and you wouldn't be able to make proper judgement when making adjustments to sharpness etc.

So SharpResize has a setting in Preferences:

As it says, the 2x version of your image will be displayed while you're working. This setting should be auto-detected when you first run SharpResize.

If you want to save the actual version of the image that you're seeing while you're working, make sure that you have 2x selected in the Additional sizes.

Quality and size

When you open a new image, the width and height won't immediately set themselves to the size of your image because Sharpresize is about creating thumbnails, and the width and height fields may be set to the size that you want your thumbnail to end up.

If you do want to set the output size to the actual size of the image, press 'Actual' or cmd-=

If you want the resized image to have the same aspect ratio as the original, make sure the padlock is in the 'locked' position.

If the padlock is in the 'unlock' position, then you can set the height and width to whatever you like, and you'll see additional controls relating to whether you want to crop your original image to size or add white, grey or black etc.

Resizing will be performed with Lanczos sharpening which is noticeably better than the more usual bicubic. You will see the output image displayed in the image well.

The Sharpening slider applies a further filter to further improve a resized image. Use judiciously - too much will result in an artificial look. The best setting here will depend on the image. Most pictures seem to look best with the slider about a third of the way. If the image includes text, any more than a small amount of sharpening can spoil the anti-aliasing and make the text look jagged.

Under the Output File tab, the Quality slider sets the jpeg compression of the output. (If you have the jpg output file format selected.) For maximum quality you'll also get the maximum file size but the file size can be reduced significantly (maybe halved) by backing off that slider a tiny bit below maximum.

Adjustments

Version 2 has more controls for adjusting the output image, and also a few filters, such as Sepia and Black and White.

Like a little extra vibrance with your sharpening? No problem.

Additional Output Sizes

The height and width fields are important, they'll set the dimensions of the primary output image for all input images. You can now create and select additional sizes (for example, a banner-format image, or a square image, or a @2x image). These can be relative to the original image size, or your primary output image, or have absolute dimensions.

Batch Image Processing

Version 2 allows you to drag and drop or open multiple images. They'll all be resized using the height and width that you've set and all using the same sharpness and adjustments that you've set. if you've created and selected additional output sizes, each input image will be saved with all output sizes.

Saving

You can save the image using File > Save, cmd-S or the toolbar Save button.

If you have opened multiple images, you will be asked to choose a folder for the output images (at least one output image for each that you've opened). Files will be saved with their original names. If you've chosen additional sizes for each image, the filename modifier will be applied.

There's a preference to set whether SR saves all of these images directly in the folder that you've chosen, or whether it creates a new folder with a unique name and saves the images within that. The latter method is set by default, and is less likely to cause filename conflicts.

If you have opened a single image (regardless of how many output images you want) then you'll be asked to choose a filename, and your output images will be saved with that filename, with modifier where appropriate.