WordPress en PHP Exception

Binnen WordPress core wordt nog niet heel veel gebruik gemaakt van PHP Exceptions. In plaats daarvan wordt er veel gebruik gemaakt van de WP_Error class. Binnen de populaire webwinkel plugin WooCommerce is de overstap naar PHP Exceptions echter al wel gemaakt. Afgelopen maanden zijn we ook binnen de Pronamic Pay plugin de overstap naar PHP Exceptions aan het maken. In het artikel “Modern WordPress Development: You should throw an exception when you encounter a WP_Error” zijn enkele argumenten te vinden voor PHP Exceptions. Ook vond ik de Stack Overflow vraag “Best practices: Use of @throws in php-doc, and how it could be handle” en antwoorden interessant om te lezen. Ik denk dat het voor veel WordPress ontwikkelaars interessant is om (meer) gebruik te maken van PHP Exceptions.

ASCII kunst met FIGlet en TOIlet

Voor de nerds ๐Ÿค“, ASCII kunst met FIGlet en TOIlet:

FIGlet

figlet Pronamic

Er zijn veel FIGlet fonts beschikbaar, deze kun je bekijken via het showfigfonts commando. En op http://www.figlet.org/fontdb.cgi is ook een lijst te vinden van fonts.

figlet -f shadow Pronamic

TOIlet

TOIlet werkt vergelijkbaar met FIGlet maar heeft coole kleuren filters ๐Ÿฆ„๐ŸŒˆ.

toilet Pronamic --filter gay

TOIlet kan ook overweg met FIGlet fonts:

toilet -d $(figlet -I 2) -f standard Pronamic --filter metal

Het subcommando figlet -I 2 geeft de standaard FIGlet font map terug zodat TOIlet weet waar de FIGlet fonts te vinden zijn.

Bronnen

PHPUnit geen kleuren output in Composer script

Bij Pronamic maken we binnen WordPress projecten veel gebruik van Composer, PHPUnit en andere tools. Om het aanroepen van scripts te vereenvoudigen maken we ook wel gebruik van Composer scripts. In plaats van bijvoorbeeld vendor/bin/phpunit te typen kunnen we dan composer phpunit gebruiken.

{
	"name": "โ€ฆ",
	"description": "โ€ฆ",
	"config": {
		"sort-packages": true
	},
	"require": {
		"php": ">=5.6.0"
	},
	"require-dev": {
		"phpunit/phpunit": "^5.7"
	},
	"scripts": {
		"phpunit": "vendor/bin/phpunit"
	}
}

Nadeel daarvan was echter dat composer phpunit geen kleuren output gaf. Terwijl het aanroepen van vendor/bin/phpunit wel een kleuren output gaf. Dit terwijl in het PHPUnit configuratie bestand phpunit.xml.dist wel colors="true" stond. Na een kleine zoektocht kwam ik de oorzaak en oplossing tegen op Stack Overflow:

I added --colors=always from PHPUnit master (4.6) branch which did the trick. It seems PHPUnit actually detects it is called through another scripts and suppresses the colors itself.

Haralan Dobrev – https://stackoverflow.com/questions/27024298/keep-color-output-when-running-scripts-on-composer#comment44218731_27024464
{
	"name": "โ€ฆ",
	"description": "โ€ฆ",
	"config": {
		"sort-packages": true
	},
	"require": {
		"php": ">=5.6.0"
	},
	"require-dev": {
		"phpunit/phpunit": "^5.7"
	},
	"scripts": {
		"phpunit": "vendor/bin/phpunit --colors=always"
	}
}

Hoe we dit bij Pronamic in gebruik hebben is bijvoorbeeld te zien in de WordPress pay core bibliotheek:

https://github.com/wp-pay/core

Disney emoji quiz

  1. ๐Ÿ”Ž๐Ÿ 
    Finding Nemo (Op zoek naar Nemo)
  2. ๐Ÿดโ€โ˜ ๏ธโš“๏ธ๐Ÿ
    Pirates of the Caribbean
  3. ๐Ÿ๐Ÿ›๐ŸŒ๐Ÿž๐Ÿœ
    A Bug’s Life
  4. ๐Ÿฆ๐Ÿ—๐Ÿ˜๐ŸŒ…๐Ÿ‘‘
    The Lion King (De Leeuwenkoning)
  5. ๐Ÿ‘น๐Ÿ•ฏ๐Ÿ•‘๐ŸŒนโœจ๐Ÿ‘ฉ๐Ÿปโ€๐Ÿฆฐ
    Beauty and the Beast (Belle en het Beest)
  6. ๐Ÿถ๐Ÿ๐Ÿถ๐ŸŽน๐ŸŽ
    Lady en de Vagebond (Lady and the Tramp)
  7. ๐Ÿ‘พ๐ŸŽฎ๐Ÿ”จ๐Ÿ‘Š๐Ÿญ๐Ÿ…
    Wreck-It Ralph
  8. ๐Ÿ ๐Ÿš๐ŸŸ๐Ÿ”ฑ๐Ÿ™๐ŸŒŠ๐Ÿงœโ€โ™€๏ธ
    The Little Mermaid (De kleine zeemeermin)
  9. ๐Ÿญ๐ŸŽช๐Ÿ‘‚๐Ÿ˜
    Dumbo (Dombo)
  10. ๐Ÿ‘ฆ๐Ÿผ๐Ÿ‘ด๐Ÿป๐Ÿ ๐ŸŽˆโฌ†๏ธ
    Up
  11. โ˜ƒ๏ธ๐Ÿ‘ธ๐Ÿ˜จ
    Frozen
  12. ๐Ÿ๐Ÿป๐Ÿง’๐Ÿ“–
    The Jungle Book (Jungle Boek)
  13. ๐Ÿ“–๐Ÿค ๐Ÿ‘ข๐ŸŒต๐Ÿš€๐Ÿ‘จโ€๐Ÿš€๐Ÿ•
    Toy Story
  14. ๐Ÿ’ฏ1๏ธโƒฃ๐Ÿถ
    101 Dalmatians (101 Dalmatiรซrs)
  15. ๐Ÿงž๐Ÿ‘ณโ€โ™‚๏ธ๐Ÿ•Œ๐Ÿ‘ฉ๐Ÿปโค๏ธ
    Aladdin
  16. โ„๏ธ๐ŸŽ๐Ÿ’Ž7๏ธโƒฃ
    Snow White and the Seven Dwarfs (Sneeuwwitje en de zeven dwergen)
  17. ๐Ÿš•โšก๏ธ๐Ÿš—๐Ÿš™๐Ÿ’จ๐Ÿโ›ฝ
    Cars
  18. ๐Ÿ‘ต๐Ÿป๐Ÿ’‡๐Ÿผโ€โ™€๏ธ๐Ÿด๐Ÿคด๐Ÿป๐Ÿฐ
    Tangled (Rapunzel)
  19. ๐Ÿ‘ ๐Ÿ‘—๐ŸŽ€๐Ÿคด๐Ÿป๐ŸŽƒโœจ
    Cinderella (Assepoester)
  20. ๐Ÿ‘ธ๐Ÿ’‹๐Ÿธ๐ŸŽถโœจ
    The Princess and the Frog (De prinses en de kikker)
  21. ๐ŸฆŒโ„๏ธโ›ธ๐Ÿฐ
    Bambi
  22. ๐Ÿคฅ๐Ÿฆ—๐Ÿ‘ด๐Ÿป
    Pinocchio (Pinokkio)
  23. ๐Ÿ‘ฆ๐Ÿป๐Ÿงšโ€โ™€๏ธ๐Ÿดโ€โ˜ ๏ธ
    Peter Pan
  24. ๐ŸฆŠ๐Ÿ‘ฆ๐Ÿป๐Ÿน๐ŸŒณ
    Robin Hood
  25. ๐Ÿญ๐Ÿฝ๐Ÿง€๐Ÿ‘จโ€๐Ÿณ
    Ratatouille

Bron:

Update macOS via terminal

Het updaten van macOS via de App Store gaat bij mij niet altijd even snel. Na een snelle zoektocht kwam ik er achter dat het updaten ook via de terminal kan met het softwareupdateย commando:ย 

Updating macOS through the App Store can take a very long time โ€” for me itโ€™s typically around 30 mins of rebooting and waiting. macOS has a built in softwareupdate utility, which is much faster.

https://9to5mac.com/2017/07/20/how-to-update-mac-using-terminal/
softwareupdate -l

WP-CLI – PHP Fatal error: Uncaught Error: Maximum function nesting level of ‘256’ reached

~/.wp-cli/config.yml

require:
  - config.php

~/.wp-cli/config.php

<?php

ini_set( 'xdebug.var_display_max_depth', -1 );
ini_set( 'xdebug.var_display_max_children', -1 );
ini_set( 'xdebug.var_display_max_data', -1 );

ini_set( 'xdebug.max_nesting_level', -1 );

WordPress websites migreren via SSH, rsync, mysqldump, mysql

Het migreren van WordPress websites kan vaak erg snel gerealiseerd worden met behulp van SSH en enkele commando’s. Hieronder een aantal commando’s die hierbij van pas komen:

rsync --archive --verbose --compress --exclude-from=/data/www/example.com/public_html/.gitignore user@123.456.789.0:/home/user/domains/example.com/private_html/ /data/www/example.com/public_html/.
rsync --archive --verbose --compress --rsh='ssh -p 18765' /Users/remco/Downloads/example.com/ user@123.456.789.0:/home/user/public_html/.
mysqldump --host=123.456.789.0 --user=user_wp --password=******** --databases db_wp > /data/www/example.com/databases/db_wp.sql
mysql --host=123.456.789.0 --user=user_wp --password=******** mysql --execute="DROP DATABASE db_wp; CREATE DATABASE db_wp;"

mysql --host=123.456.789.0 --user=user_wp --password=******** db_wp < /data/www/example.com/databases/db_wp.sql
find /data/www/example.com/public_html/wp-content/uploads -type d -exec chmod 775 {} \;
find . -type d -exec chmod 755 {} +
curl http://*.s3.amazonaws.com/site.zip --output site.zip

unzip site.zip -d site

WordPress Coding Standards en Squiz.Commenting

Iedereen die met de WordPress Coding Standards weet waarschijnlijk ook dat deze kan controleren op hoe goed de code is gedocumenteerd. Hiervoor wordt gebruik gemaakt van de Squiz.Commenting sniffs. Bij Pronamic schakelen we deze sniffs vaak uit, omdat het voor maatwerk trajecten vaak niet uit kan om ook de documentatie tip top in orde te hebben. Voor de Pronamic Pay plugin willen we echter toewerken naar beter gedocumenteerde code. Daarom hebben we binnen deze plugin deย Squiz.Commenting sniffs weer ingeschakeld. Dit resulteert momenteel nog in veel PHP_CodeSniffer fouten, zoals bijvoorbeeld:

   1 | ERROR | [ ] Missing file doc comment
     |       |     (Squiz.Commenting.FileComment.Missing)

Het is niet altijd even duidelijk wat PHP_CodeSnifer precies verwacht bij dergelijke fouten. De foutmelding geeft wel aan dat er een FileComment ontbreekt. Hoe deze FileComment๏ปฟ er uit moet komen te zien wordt er echter niet bij vermeld. Na een kleine zoektocht kwam ik gelukkig wat resources tegen met meer informatie hierover:

Sublime Text 3 en SourceTree openen via command line (CLI)

Als WordPress ontwikkelaar maak ik veel gebruik van de command line. Tijdens het ontwikkelen van WordPress oplossingen werk ik namelijk veel met command line tools zoals git, npm, grunt, gulp๏ปฟ,ย composer๏ปฟ, etc. Andere zaken regel ik weer liever via een app. Gelukkig kunnen deze vaak ook eenvoudig via de command line opgestart worden. Voor Sublime en SourceTree gebruik ik daarvoor de volgende commando's:

Sublime Text 3

โžœ wp-pronamic-ideal git:(develop) subl .

SourceTree

โžœ wp-pronamic-ideal git:(develop) stree .

Deze commando's openen automatisch Sublime Text 3 of SourceTree met de huidige project map. Hoe je deze commando's beschikbaar kunt maken is te lezen in de volgende artikelen:

Twinfield storing 4-9 januari 2018

Helaas begint het jaar voor Twinfield met de nodige storingen. Op 4 januari gaf ik al via Twitter dat het genereren van een PDF-factuur ruim 30 minuten duurde:

Twinfield reageerde daar erg vlot op en gaf ook binnen een uur aan dat alles weer op volle snelheid zou moeten functioneren:

Zo'n snelle reactie zonder toelichting waarom Twinfield zo traag reageerde geeft mij als programmeur niet veel vertrouwen. Ik vraag me dan al snel af of er รผberhaupt naar de oorzaak van de vertraging is gezocht.

Een paar dagen later blijkt ook wel dat Twinfield hier waarschijnlijk niet heel goed naar gekeken heeft. In de periode van 4 t/m 9 januari klagen namelijk meerdere gebruikers over de traagheid. Inmiddels toont Twinfield ook binnen het dashboard hier een melding over:

De snelheid op het accounting cluster is langzamer dan u gewend bent. Wij werken aan een oplossing.

Twinfield

Naast bovenstaande melding is tijdens het werken in Twinfield ook goed te merken dat het systeem niet stabiel draait. Zo zien wij regelmatig de volgendeย ๏ปฟ500-meldingen:

Deze issues komen met het einde van 2017 en het 4e kwartaal op een vrij ongunstig moment. Hopelijk weet het Twinfield team het probleem snel op te lossen. En hopelijk geven ze dit keer ook goed aan het wat het probleem precies was en hoe dit in de toekomst voorkomen gaat worden.

Update 11 januari 2018

Inmiddels zijn we 2 werkdagen verder en helaas heb ik nog niks van Twinfield vernomen. Tijdens het werken in Twinfield komen er echter nog wel zeer regelmatig fouten voorbij, bijvoorbeeld:

An error occurred on the server. Always include the following error reference when you report this error: 11/01/2018 P92376.

Twinfield