Force phplist to re-fetch Top Level Domains.

Question from a client recently; why won’t my phplist installation subscribe an email address?

phplist still stores a default list of TLDs in admin/inc/userlib.php –  as a fallback for the TLD list it now stores in the internet_tlds row of the phplist_config database table.  

By default it checks and fetches new TLDs every 180 days.

You can override this behaviour by temporarily adding the line:


to config/config.php and waiting for 1200 seconds / 20 minutes, checking that the internet_tlds row has been updated and replacing the config definition with its default value;


The public URL listing the TLDs is defined in admin/init.php as:

define('TLD_AUTH_LIST', '');

and used within admin/lib.php within:

function refreshTlds()

Existing Umbraco installation fails after installing Articulate blog (or anything that schedules posts)

2017-04-06 13:42:45,673 [P3048/D15/T45] ERROR Umbraco.Web.Scheduling.KeepAlive – Failed (at “http://(domain)/umbraco”).
System.Threading.Tasks.TaskCanceledException: A task was canceled.
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Umbraco.Web.Scheduling.KeepAlive.<PerformRunAsync>d__4.MoveNext()

This may be related to: :

“Create config to explicitly set the ‘base url’ for a website that is not running as a load balanced site – used for scheduled tasks/publishing/keepalive”

Setting umbracoApplicationUrl=”https://(domain name)/Umbraco” in Config/umbracoSettings.config …and restarting the application pool and the website has fixed the problem; the site is responsive once more and the required  nodes have been published:
2017-04-06 14:15:00,997 [P3460/D2/T30] INFO Umbraco.Core.Publishing.PublishingStrategy – Content ‘Blog’ with Id ‘3316’ has been published.
2017-04-06 14:15:01,544 [P3460/D2/T30] INFO Umbraco.Core.Publishing.PublishingStrategy – Content ‘Archive’ with Id ‘3317’ has been published.
2017-04-06 14:15:01,638 [P3460/D2/T30] INFO Umbraco.Core.Publishing.PublishingStrategy – Content ‘Test post’ with Id ‘3320’ has been published.
2017-04-06 14:15:01,716 [P3460/D2/T30] INFO Umbraco.Core.Publishing.PublishingStrategy – Content ‘Authors’ with Id ‘3318’ has been published.
2017-04-06 14:15:01,779 [P3460/D2/T30] INFO Umbraco.Core.Publishing.PublishingStrategy – Content ‘Demo author’ with Id ‘3319’ has been published.



LetsEncrypt with Umbraco – serving static, extensionless URLs within an Umbraco installation.

Situation; you have a bunch of domains and subdomains which are secured using Letsencrypt. by default, Letsencrypt will try to put a static, extensionless file like named e.g.  “jCk1zSkjsiuJHrmnSFnxdvkhkjnnNNkjsaaRo” in a “/.well-known/acme-challenge/” subfolder of the site root.

If that file isn’t reachable and browsable – the Letsencrypt acme servers won’t authenticate your domain. Letsencrypt will warn you at this point and recommend re-ordering the IIS Handler Mappings to promote the “StaticFile” handler above the three “ExtensionlessUrl” handlers.

However even if you reorder the handlers, you’ll still see a 404-page not found error when browsing directly to the static file’s URL e.g. http://yourdomain/.well-known/acme-challenge/jCk1zSkjsiuJHrmnSFnxdvkhkjnnNNkjsaaRo

If you check the logs in your Umbraco /App_Data/Logs directory, you may see “Status code is 404 yet TrySkipIisCustomErrors is false – IIS will take over”

IIS won’t log anything useful though.

What’s happening can only be seen once you tell Umbraco not to pass error handling onto IIS; so edit /Config/umbracoSettings.config and set trySkipIisCustomErrors=true

This will force Umbraco to print its own, more informative error, confirming the problem:

No umbraco document matches the url ‘/.well-known/acme-challenge/jCk1zSkjsiuJHrmnSFnxdvkhkjnnNNkjsaaRo’

Finally; to fix the problem and exclude the /.well-known/acme-challenge/ directory from Umbraco’s control, you need to edit Umbraco’s main Web.config file, and add the following:

<add key=”umbracoReservedPaths” value=”~/umbraco,~/install/,~/.well-known/,~/.well-known/acme-challenge/” />

The next time you load http://yourdomain/.well-known/acme-challenge/jCk1zSkjsiuJHrmnSFnxdvkhkjnnNNkjsaaRo in a browser, you should see a plain-text string of json that the acme server needs to authenticate your control of the domain for which you’re requesting the certificate.

Retrying the Letsencrypt client at this point should be successful.

Have a coffee and don’t forget to revert the logging and error handling changes you just made.


Umbraco fails to update log in App_Data/Logs directory – IIS 8.x – Fixed

Umbraco logs a great deal of helpful debugging information to its /App_Data/Logs subdirectory. If the log files aren’t present or haven’t been added to since a server migration, check that the App Pool user has modify access to the directory tree.

If your Umbraco application is running in an Application pool named “Umbraco Blog Dev” the automatically-generated App Pool user would also be named “Umbraco Blog Dev”

If the”Umbraco Blog Dev” user is missing entirely, add it as “IIS AppPool\Umbraco Blog Dev” in the usual permissions dialogue and add modify access afterwards.

Note: the “IIS AppPool…” prefix is essential, as is the server-name Location scope; Windows won’t find the virtual user without both present.


Transfer Previous Recipients and Facetime contacts between macs on Mavericks and Yosemite Mail

Recovering a trashed Mail installation from an orphaned drive or just want to transfer Recents without using VCards?

The files you’ll need to copy are:


Optionally, copy the other “recents” plists as well for facetime, maps, iCal, messages etc:

…and finally reboot your mac to force the operating system to reload the new plists – instead of using cached copies.


Write a Raspberry Pi disk image to an SD card on OSX

Download your .img file archive.

Extract it the .img to your desktop.

Insert your blank SD card.

Identify it from terminal (diskutil list) or Disk Utility (select the disk, then click File >> Get Info and read off the Disk Identifier).

Unmount  (not eject) any volumes on the SD card, again with the gui or from terminal (diskutil unmount diskxsn where x is Disk Identifer and n is partition ID)

Finally write the image to the unmounted disk using terminal:

sudo dd if=RPi-TC_ARMv6j_R5.img of=/dev/disk4 bs=16k

You can see how far along the dd write process is at any point by pressing CTRL+T in the terminal window; the equivalent of passing SIGUSR1 or SIGINFO to dd: