There’s a delight in writing documentation, in putting the words down that you wish you could read when first starting to use a project. At that point nothing doesn’t make sense, and everything is going to proceed according to the clear picture you have. Things later change, but when done well I think the earlier documentation serves to get you back on track, and makes later maintenance so much better.
I fixed a bug in Tabulate last night, and released version 2.10.3. I’ve rather been neglecting this project for a while, so it’s been nice to come back to it. There are a few things that I might try to get done on it in the next few days or weeks (starting with more documentation).
The bug was to do with the change in WordPress’ default database character set and how that affected the reports ‘title’ column. Previously, a key length on this column of 200 was okay as it was under MySQL’s maximum of 767 (i.e. 767 bytes / 3 bytes for utf8 = max. 255 characters), but now the default is utf8mb4 each character can use up to 4 bytes instead of 3, and so the length must be reduced to 191 (i.e. 767 bytes / 4 bytes for utf8mb4 = max. 191 characters). WordPress core only does this for sites running on MySQL 5.5 and above, but it seemed easier just to reduce the key length for all Tabulate installations; it doesn’t seem likely to be an annoyance to anyone.
I just donated to Read the Docs.
+ // 'o' is better than 'Y' because it does not add leading + // zeroes to years with fewer than four digits. + // For some reason, though, this fails for some years - + // returning one year lower than it's supposed to - unless you + // add the equivalent of 3 days or more to the number of + // seconds. Is that a leap day thing? Weird PHP bug? Who knows. + // Anyway, it's easy to get around. + $yearString = date( 'o', $seconds + 300000 );
For my own future reference, resizing a Digital Ocean storage volume is (as described in the docs) quite easy:
- Resize the volume in the the DO control panel.
$ sudo resize2fs /dev/disk/by-id/scsi-0DO_Volume_volume-xxxn-nn
(I recommend Digital Ocean for anyone needing a VPS. I’ve been using them for a few years and have found it all quite brilliant.)
Podcast: The Last Night, Anny Shaw talking to Andrea Rangecroft.
It is time I think (5AM on a Friday) to finally try to get the Flicker2Piwigo CLI script working. Small job before breakfast?
I’ve been trying to replicate locally a bug with MediaWiki’s GlobalPreferences extension. The bug is about the increased number of database reads that happen when the extension is loaded, and the increase happens not on the database table that stores the global preferences (as might be expected) but rather on the ‘local’ tables. However, locally I’ve had all of these running on the same database server, which makes it hard to watch the standard monitoring tools to see differences; so, I set things up on two database servers locally.
Firstly, this was a matter of starting a new MySQL server in a Docker container (accessible at 127.0.0.1:3305 and with its data in a local directory so I could destroy and recreate the container as required):
docker run -it -e MYSQL_ROOT_PASSWORD=pwd123 -p3305:3306 -v$PWD/mysqldata:/var/lib/mysql mysql
(Note that because we’re keeping local data, root’s password is only set on the first set-up, and so the
MYSQL_ROOT_PASSWORD can be left off future invocations of this command.)
Then it’s a matter of setting up MediaWiki to use the two servers:
$wgLBFactoryConf = [ 'class' => 'LBFactory_Multi', 'sectionsByDB' => [ // Map of database names to section names. 'mediawiki_wiki1' => 's1', 'wikimeta' => 's2', ], 'sectionLoads' => [ // Map of sections to server-name/load pairs. 'DEFAULT' => [ 'localdb' => 0 ], 's1' => [ 'localdb' => 0 ], 's2' => [ 'metadb' => 0 ], ], 'hostsByName' => [ // Map of server-names to IP addresses (and, in this case, ports). 'localdb' => '127.0.0.1:3306', 'metadb' => '127.0.0.1:3305', ], 'serverTemplate' => [ 'dbname' => $wgDBname, 'user' => $wgDBuser, 'password' => $wgDBpassword, 'type' => 'mysql', 'flags' => DBO_DEFAULT, 'max lag' => 30, ], ]; $wgGlobalPreferencesDB = 'wikimeta';
I love the morning time, while the brain is still sharp enough to focus on one thing and get it done, but dull enough not to remember the other things and derail everything with panic about there being too much to do. The morning is when the world properly exists, and is broad and friendly.