Skip to main content

Senior Web Engineer. Open web / music. Remote DJ. Tall Dutch guy. #3million

micro.blog/sander

svandragt

mixcloud.com/cloudseer

 

Hide Trackbacks 1.1.4

Hide Trackbacks is a WordPress plugin that hides pingbacks and trackbacks from your website comments.

The minimum supported WordPress version is now 5.0 and I've bumped up the version to indicate it is tested against the upcoming 5.4 release.

 

Cuttlefish v0.4 Released

Cuttlefish is a PHP based hackable blog framework -- with the goals of being fast, easily hackable, and easy to adopt. I've been working on it since 2012, when it was known as Carbon. It can generate a static HTML site for uploading anywhere, or run dynamically.

Version 0.4 licenses the code as MIT, so anyone can build on top of the project. Cuttlefish now has API documentation courtesy of PHPDox, which is updated whenever code is changed. I've changed the code style from 'WordPress-like' to the PHP community default of PSR12. The project now comes with a Docker container which means getting up and running is even easier.

Install Cuttlefish is easy using the instructions. For a fuller list of changes see https://github.com/svandragt/cuttlefish/releases/tag/v0.4.

Known issue:  I still have trouble getting Xdebug to work, if you're familiar with Docker Compose and Xdebug I could use your help.

For v0.5, now that the codebase is in a better state, I'm looking at adding more features again.

 

My Let's Encrypt Setup

Scheduled Task (renewal)

$ sudo crontab -e

# Lets encrypt twice daily
0 7,19 * * * certbot -q renew

 

Script that reads le.txt and requests certificates for each domain

$ nano le.sh && chmod +x le.sh

DOMAINS=$(paste -s -d, le.txt)
sudo letsencrypt certonly --webroot -w /var/www/html -d $DOMAINS
sudo service nginx reload

Note: Recently certbot changed from seperating each domain with -d to comma seperated.

List of Domains (one per line, add to the end)

$ nano le.txt

vandragt.com
www.vandragt.com

 

 

WordPress Canonical URLs for Category/PostName Permalinks

When the permalink format is set to %category%/%postname%/ then a post is available under category/postname links for all categories, as well as under all parent/child/postname links.

If you use Yoast SEO and have set a primary category, that  becomes the canonical URL that's used for SEO. If you don't then the postname for whatever category has a lower ID (was created first) becomes the canonical URL.

 

What is the meaning of a site's Last Updated property?

When running a WordPress multisite, in the site directory each site has a Last Updated property. I previously incorrectly assumed this reflected  when the site's metadata changed, for example the site's attributes. However, archiving and deactivating a site does not change the Last Updated value, so what does it do in WordPress 5.2.1?

As usual the best place to look is the WordPress codebase. It turns out that, on a multisite, this value is updated whenever a post is updated or deleted. It reflects the last content update, not the site's metadata.

By inspecting the html and looking up the property name, we find that the function that updates this is called wpmu_update_blogs_date and there is an action hook wpmu_blog_updated that receives the site_id variable. This function can be called whenever we want to update the value. It isn't used anywhere else.

If we're looking to update this date whenever the site's status changes, then via the same process it appears that he actions to hook into site attribute updates are in wp_maybe_transition_site_statuses_on_update so one could write a quick mu-plugin that updates the Last Updated property whenever these fire.

 

Updating Known

I wrote a quick and dirty upgrade.sh script that sits in the parent directory of my Known site (updated now with the new composer setup). I'm using the following directory structure:

config.ini  
Uploads/
html/
upgrade.sh 

The offical Known git repository is checked out in html/. The config.ini and Uploads folder have been moved to the folder to sit alongside it.

The contents of the upgrade.sh script can be viewed as a gist on Github:

It's not elegant but it makes updating to the latest Known changes pretty seamless.

 

Hide Trackbacks 1.1.3

Hide Trackbacks is a WordPress plugin that hides pingbacks and trackbacks from your website comments.

I’ve updated the plugin to indicate it works correctly with WordPress 4.9.9 and earlier. It's now also up to PHP 7.2 compatible, and has a number of small fixes to improve code legibility and alignment with the WordPress Coding Standards.

 

Transitioning to Gutenberg

The WordPress Project says:

The Classic Editor plugin will be officially supported until December 31, 2021.

[...]

Since the Classic Editor plugin is central in this transition, we are considering including it with upgrades to WordPress 5.0.

In the context of my professional work with WordPress it would be beneficial to see the Classic Editor plugin be included by default into the installation package. This would signal to plugin and theme developers that we are in a transition phase but supporting the existing installations, until Gutenberg is more fully accepted by the wider community. Not doing do could put pressure on smaller developers to just test their updates for Gutenberg only, resulting in a lot of broken sites or a security nightmare where people won’t be able to update to the latet versions of WordPress or their plugins until the teams and processes are ready.

 

Hide Trackbacks 1.1.1

Hide Trackbacks is a WordPress plugin that hides pingbacks and trackbacks from your website comments.

I've updated the plugin to indicate it works correctly with WordPress 4.9 and earlier.

 

Traktor streaming to SHOUTcast servers using LiquidSoap

I've been using Traktor for years now as my deejaying solution and broadcasting tool. The one missing feature on the broadcasting side is that it can only stream directly to Icecast servers, lacking the ability to stream to SHOUTcast based servers. Most servers use the SHOUTcast streaming protocol which grew popular through the MP3 movement back around the turn of the century. We will setup a transcoding link to enable streaming to SHOUTcast servers.

This guide will focus on OS X but on a general level is also applicable to Windows users.

This replaces my previous guide at https://sites.google.com/site/traktorshoutcast/

Overview

We will need the do the following things:

  1. Install Homebrew, a package manager to help set things up.(OS X)
  2. Install and setup Icecast, a streaming server that will accept the Traktor stream. (aka local streaming server)
  3. Install and setup LiquidSoap, a transcoder that will connect to the local stream, and broadcast it in SHOUTcast format.
  4. Configure Traktor's broadcasting settings to point to the local streaming server.

Also useful is to keep the SHOUTcast stream (remote stream) details to connect to at hand (host, port, password).

signal flow

1) Install Homebrew

Homebrew is a terminal package manager to add / remove / update OS X software and compile it from source code for us, so we don't have to.

Homebrew installs the stuff you need that Apple didn’t.

To install, follow the directions on http://brew.sh. Currently (as of Feb 16) that says:

  1. Open a terminal window.
  2. Run /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Follow any instructions about the Xcode commandline tools.

After everything is setup you can run brew update to update your formulae, brew upgrade to upgrade to their latest versions, and brew doctor to diagnose any issues with your particular installation. Keep the terminal open for the next step.

2) Install and setup Icecast

Icecast is a streaming media server which [...] can be used to create an Internet radio station or a privately running jukebox and many things in between.

We will setup the local streaming server so that we can connect Traktor and the transcoder to it.

Install

In the terminal window you left open, run brew install icecast.

If I remember correctly, everything should go smoothly and before long you'll get a message saying it's successfully installed.

Configuration

To keep the configuration files we are about to create nicely together, create a broadcast folder somewhere (I used ~/Music/Broadcast).

I have prepared a very simple configuration file for you, download it from https://gist.github.com/svandragt/f7ecb720416a68f096a1 (right click the raw button and select Download Linked File As.. and save it as icecast.xml in the broadcast folder you just created).

You won't have to change the contents of this file, apart from the passwords.
This configuration creates a mount point on http://localhost:8000/traktor.ogg for Traktor and LiquidSoap to connect to.

Starting and Stopping the Local Streaming Server

In the terminal window, in your broadcast folder, run icecast -c icecast.xml. It should show a few warnings but no errors, and your local streaming server is now running. Stop it now by pressing ctrl+c.

3) Install and setup LiquidSoap

Our flagship is liquidsoap, a swiss-army knife for multimedia streaming, notably used for netradios and webtvs. Liquidsoap is a powerful and flexible language for describing your streams. It offers a rich collection of operators that you can combine at will, giving you more power than you need for creating or transforming streams. But liquidsoap is still very light and easy to use, in the Unix tradition of simple strong components working together.

We will install the program and setup a flow (configuration) to connect to the local streaming server, and broadcast it to the remote stream.

It should have been simple to install using brew, but unfortunately it was not. After several days of debugging here is a working set of instructions I produced.

Install

In the terminal window you left open, we will run the following commands:

  1. brew tap drfill/liquidsoap -- This enabled homebrew to install it.
  2. brew install --env=std liquidsoap --with-shout -- this installs LiquidSoap using the standard build environment with shoutcast support

Grab a drink. After a while hopefully all works fine. I noticed that LiquidSoap is now recommending OPAM to install it so you could try that if this doesn't work for you. (http://liquidsoap.fm/download.html) - I have not tried it.

Configuration

As before, I have created a very simple flow. You will need to setup one flow per destination stream so if you play at multiple radio stations / SecondLife clubs then you will need multiple flows.

Download it from https://gist.github.com/svandragt/af43c07d5842c9c429d5 (right click the raw button and select Download Linked File As.. and save it as example.liq in the broadcast folder).

This time you have to edit it, to add the remote stream details. Change the following lines to suit your purposes:

  • output_host = "example.com"
  • output_port = 8124
  • output_pass = "mypassword"

The configuration above is for broadcasting to a SHOUTcast server at http://example.com:8124 (using the password mypassword). Leave the rest of the file alone or make a copy and start experimenting LATER, see http://liquidsoap.fm/documentation.html. LiquidSoap is very powerful.

Starting and Stopping the Transcoder

In the terminal window, in your broadcast folder, run liquidsoap example.liq. It will start showing a lot of messages, and because you are not currently broadcasting also some errors. Stop it now by pressing ctrl+c.

Traktor

Start Traktor and open the Preferences menu item. Open the Broadcasting tab.

Use the following information to point to the local streaming server:

Server settings:

  • Address: localhost
  • Port: 8000
  • Mount path: traktor.ogg
  • Password: hackme (but you changed this, right)
  • Format: Ogg Vorbis, 44100 Hz, 192 kBit/s (highest quality, bottom option)

You can enter whatever you like in the Metadata Settings.

tractor broadcasting settings

In Traktor, click the broadcast button (the little attenna). It will flash because the local streaming server isn't running and therefore Traktor cannot connect to it. Whenever Icecast is running but the button is still flashing, check that the password and other connection details match.

For now, click it again to stop broadcasting.

All together now

Before you start streaming:

  1. Start Icecast and keep it running.
  2. In Traktor, click the broadcast button and confirm its not flashing.
  3. Open another terminal window / tab in the broadcast folder for the next step.

When you start streaming:

  1. Start LiquidSoap with the flow of your remote stream. Keep it running.
  2. Start deejaying!

When you are finished

  1. Stop broadcasting with Traktor.
  2. Stop liquidSoap to let the next DJ on the stream.
  3. Stop Icecast because nothing is connected to it now.

Final thoughts

I hope this helps anyone having trouble deejaying online, I enjoy it very much and if you'd like to listen to deep house / electronica, please listen to my mixes.

 

Hide Trackbacks works with WordPress 4.2

Hide Trackbacks is a WordPress plugin that hides pingbacks and trackbacks from your website comments.

I've updated the plugin to indicate it works correctly with WordPress 4.2.

 

Microblogging with WordPress and Twitter

Manton Reece has been having very interesting discussions about microblogging and content ownership recently. He's working on an unannounced project in this area and I've been following his progress.

A few days ago he wrote a post about Microblogging with Wordpress in which he describes most of the process of writing your status updates on your own blog first. As I had to adapt his process for it to work with my configuration of WordPress and as I am using Twitter instead of App.net I thought it would be useful to detail how I went about, based on Manton's write-up.

Requirements

  • A theme that supports post-formats.
  • an IFTTT and Twitter account.
  • A self-hosted WordPress installation, hosted using Apache.
  • (optionally) the DoNote app from IFTTT for your mobile device.

Step 1: Link a status updates feed to Twitter

In order to post only the status updates to twitter, we have to identify them in both WordPress and for IFTTT.

Create a dedicated category

In Wordpress, if you do not have a category for status updates, create a Snippets category (with the slug snippets). Note the category ID. In addition, create a new category called ifttt-status if you plan to post to Wordpresss from your mobile device later, as I did (this is a workaround to allow WordPress to convert from this category to the status post format).

Setup the RSS feed endpoints

With the category ID, we can now create a new feed by editing the .htaccess file in your WordPress installation directory, see my gist comment on manton's configuration. I had redirection issues with Manton's original setup so I amended it. What we do here is create two endpoints, one for posts without status updates (rss.xml); and one for only status updates (snippets.xml). We then point any requests to /feed (the default WordPress endpoint) to the first endpoint.

Update (26 June): I updated the gist comment after identifying issues in initial configuration. Please reread the gist if you had problems using the initial configuration.

Post new status updates to Twitter

Now create a new recipe that is triggered from the snippets RSS feed, with the action to post a tweet with the tweet text EntryContent.

You can now blog from WordPress to twitter (just leave the title empty).

Step 2: Post status updates from your mobile device

I'm using DoNote to post to IFTTT which then posts to WordPress.

Setup WordPress

Login to your WordPress blog and in the users section create a ifttt user with the role of Author (this allows the user to create posts).

Install the "IFTTT Post Formats & Post Types" plugin, it will convert posts with the ifttt-status category to the status post-format. It will also hide the ifttt-status category from showing up in your template for example.

Link DoNote to WordPress using IFTTT

Back in IFTTT, In the My Recipe's DoNote section, create a new recipe for WordPress (you might get asked to provide the WordPress username and password you created for this purpose) with the action to create a post with the following values:

  • Title: (leave empty)
  • Body: NoteText
  • Categories: Snippets,ifttt-status
  • Tags: (leave empty)
  • Post status: Publish immediately

You are not limited to using DoNote if there is a trigger for your service, and you are not limited to usin IFTTT at all if there are WordPress plugins for your status update service and WordPress support for your writing app, but these will require similar configuration as detailed in this post.

Hope this helps!

 

Switched to secure connection [updated]

I've switched this site to HTTPS, a secure connection, using a ssl proxy service provided for free by Cloudflare, for reasons. Let me know if you come across any issues.

For those using WordPress, changing the settings Site Address and WordPress Address to HTTPS may make your site unavailable. FYI, the solution I settled on is to install the WordPress HTTPS plugin. Then I set the Site Address to HTTPS. Finally, I cleared the cache. All is working fine now.

Update (06/02/15):
I've moved away from Cloudflare as my DNS provider and as a side-effect this means I'm no longer HTTPS for now. Sorry.

 

Tweet: My Hide Trackbacks #wordpress plugin is now compat...

My Hide Trackbacks plugin is now compatible with version 4.1 (wordpress.org/plugins/hide-t…) Keep referrers, stop spam comments.

 

Tweet: Trying to figure out how to download all my past t...

Trying to figure out how to download all my past tweets using Twitter Tools for

 

Creating a Wordpress redirection page

This is the simplest way to add a page redirection feature to your WordPress theme.

First, create a new theme file called redirect.php with the following contents:

<?php
/*
Template Name: Redirect
*/
the_post();
header('Location: ' . get_the_content());
die();

To create a new redirection page:

  1. New page, change the template to 'Redirect'
  2. Switch to HTML editing mode and put the url in the content area.

 

Release 1.1 - wordpress-basetheme

The aim for wordpress-basetheme is  a bare bones, well structured, easily customisable WordPress base theme.

You can build on it to speed up your own theme development. It's so minimal that I wouldn't recommend it as your final site theme. Instead it makes it trivial to apply your design to a WordPress blog, or to build out from this starting point. This site is build on top of the project for example.

Version 1.1 is now available
Download | View on GitHub

Changes:

  • updated styling and version
  • previous next buttons on singles
  • ie style targeting (unused), remove admin bar until supported, top nav
  • archives added and accessibility improvement
  • date permalinks
  • consistent titling
  • edit link in footer, no home
  • moved comments into its own template file
  • padding issue

Your feedback is welcome.

 

Wordpress Base Theme

I've released a first look at "Wordpress Base Theme", a bare bones base for your own themes:

  • DRY
  • KISS
  • easily customisable WordPress base theme.

You can build on this to speed up your own theme development.

 

WordPress Coding Standards

If you are looking for guidance on how how to format your code, you could do worse than to base it this coding standards styleguide.

via WordPress Coding Standards

 

Wordpress Plugin Settings Chaos

I wish all Wordpress Plugins had their settings in ONE menu, and all entries in this Plugin Settings menu MUST be named identically to the plugin.

Not "broken links" plugin with settings -> permalinks -> "link checker" because I will never find it.

Time for a wordpress plugin settings corrector plugin