A Necessary Storm

A few days ago, prominent Apple developer, podcaster and blogger, Marco Arment published a strongly written article, voicing his frustration at the decline in quality of Apple’s latest software offerings:

Apple’s hardware today is amazing - it has never been better. But the software quality has fallen so much in the last few years that I’m deeply concerned for its future.

Strong words indeed. The resulting media storm forced Marco into in a follow up post where he admits he probably went too far:

Instead of what was intended to be constructive criticism of the most influential company in my life, I handed the press more poorly written fuel to hamfistedly stab Apple with my name and reputation behind it. And my name will be on that forever.

Had I known that it would go as far as it did, I never would have written it.

He had unintentionally fed the great “Apple is Doomed” internet troll.

The thing is, whilst Marco could be criticised for his choice of language, the basis of his article was not wrong. He might regret his temporary notoriety, but the attention that his article garnered means that his message has surely made its way to the ears of the influencers inside Apple. If Apple still value their age worn “It just works” credo, they should sit up, take notice and do something about it.

Apple have done this before. The Snow Leopard (10.6) release of OSX was heavy on bug fixes and performance improvements, and light on new features. As a result it was (and remains) the most stable release of OSX to date.

The problem that Apple face now is compounded because their OS footprint is getting significantly bigger: Mac OSX, iOS, Apple TV and now Apple Watch. I buy and recommend a lot of these products on the basis that perceived quality. My kids went through university with Macbooks and iPhones and I can count the number of support issues I had to resolve on the fingers of one hand. Apple set that standard and it is all the more frustrating when they fail to meet it. I buy Apple at home so that I don’t have to deal with same crap I have to put up with in work, supporting Windows systems.

One of my favourite sub £100 gadgets is the Apple TV. Every now and then it cannot find my iTunes content hosted on the Mac Pro upstairs - easily resolved with a reboot, but still bloody annoying. It will happily stream content via Airplay from an iPhone 4 or 5, but the same content from an iPhone 6 takes ages to stream. Whiny First World problems for sure, but hey, like I said, Apple set the bar.

It is time for Apple slow down a bit and repeat the Snow Leopard exercise across all of their current platforms. As Gruber says:

It’s not that Apple has lost the “it just works” crown to a competitor, but rather that they’ve seeded a perception that Apple’s stuff doesn’t work, either.

View comments.

more ...

Static blogging with Pelican - Part 1

I have used a number of blogging engines over the years. I started off with Blogger, moved onto a self hosted Wordpress site and then onto the fully hosted solution offered by Squarespace (which is excellent btw).

Each solution had upsides and drawbacks. It was easy to outgrow Blogger. Wordpress was powerful but earlier versions were susceptible to hacking, plus managing plug-ins, MySQL and backups became a drag. Squarespace is superb, but the programmer in me yearned for more control.

I decided to look at some static blogging engines. My goals being:

  • All content should be pre-compiled to static web pages making the end result portable and quick to load
  • As much as possible, remove reliance on the server side web technology stack (PHP, MySQL etc.)
  • All content to be written using plain text Markdown files
  • The ability to perform staging and testing off-line

On top of these requirements, I also wanted to:

  • Keep my existing photo pages (imported from Flickr albums)
  • Import the comments from my existing blog

After digging around for a bit, I finally settled on Pelican - a static blog generator written in Python.

If you can find your way around the Unix command line, you can be up and running in minutes using the following:

sudo pip install pelican
sudo pip install Markdown

This will create the folder structure for your Pelican project:

├── content
│   └── (pages)
├── output
├── develop_server.sh
├── fabfile.py
├── Makefile
├── pelicanconf.py       # Main settings file
└── publishconf.py       # Settings to use when ready to publish

Creating content is easy. Simply create a markdown file in the content folder using the following metadata syntax at the top of the file:

Title: Static blogging with Pelican - Part 1
Date: 2014-10-27 18:02
Author: Allan Scullion
Category: Blogging
Tags: Blogging,Pelican,Python
Slug: pelican-1

Page content goes here

Save the file, then use the following command1:

make clean && make html DEBUG=1 && make serve

Open your browser to http://localhost:8000 and behold your new creation.

The output folder contains all of the generated HTML files and other assets. The Makefile also has a number of commands to publish these using a number of methods, including FTP and rsync+ssh.

In follow up posts, I will cover:

  • Site Templates (you will no doubt hate the standard template)
  • Adding comments using Disqus
  • Plug-ins
  • Automated publishing using Github and Codeship

  1. Better still, save it as a shell script, because you will be using it a lot 

View comments.

more ...

Cygwin, Crontab and Shared Windows Drives

If you have ever tried to setup crontab in Cygwin, you might also have struggled to schedule scripts that reside or read/write data on shared network drives.

When you run an interactive bash shell in Cygwin, by default, your shared network drives are mounted in /cygdrive. So, for example, drive S: in Windows is available as /cygdrive/S in bash.

The trouble is, even if you configure the cron service to run as a specific user, it will not have automatic access to these /cygdrive mount points. The service can see local disks, but not network disks.

To get around this, you have to create a new mount point that mounts the Windows share name directly, not the mounted drive letter. The command to do this is as follows (obviously substituting your own share and mount point):

mkdir /mnt
mount "//[server]/[sharename]" /mnt/[whatever]

Don’t try to create a new mount point under /cygdrive… that does not work (by design).

You can then change your crontab entry and/or script to reference the new mount point and everything should work as expected.

View comments.

more ...