Join 9,500+ smart developers

Get my monthly newsletter with what I learn from running Spatie, building Oh Dear, and maintaining 300+ open source packages. Practical takes on Laravel, PHP, and AI that you can actually use.

No spam. Unsubscribe anytime. You can also follow me on X.

Improve the error output of console commands in a Laravel app

If you execute an Artisan command and something goes wrong, the error output is not terribly detailed.

You can improve the output slightly by tagging on -vvv to make to output more verbose.

Now we already know the line that where the problem originates: there's something going wrong on line 41 of the MyBrokenCommand command.

But we can improve the error output still. Nuno Maduro coded up a fantastic package called Collision that, once installed, provides much nicer output.

In this output we can immediately see what the silly programmer did wrong.

Let's hope that a future version of Laravel will be able to spit out these nicely formatted errors out of the box.

Read more

PHP Versions Stats - 2017.2 Edition

Every six months Jordi Boggiano, co-creator and maintainer of Composer/Packagist, publishes statistics on which versions of PHP are used. Some good news: PHP 7.1 is the most used version.

A quick note on methodology, because all these stats are imperfect as they just sample some subset of the PHP user base. I look in the packagist.org logs of the last month for Composer installs done by someone. Composer sends the PHP version it is running with in its User-Agent header, so I can use that to see which PHP versions people are using Composer with.

https://seld.be/notes/php-versions-stats-2017-2-edition

Read more

Airplanes and Ashtrays

Harry Roberts makes the case for making technical debt visible instead of trying to hide it.

This means that, although far from ideal, the impact of these hacks is well contained and signposted, meaning that they won’t slip through the cracks and remain hidden in the codebase for the next five years.

This pragmatism and lack of stubbornness can make your codebase much more malleable, resilient, and ultimately much more useful. Everything is a compromise.

https://csswizardry.com/2017/10/airplanes-and-ashtrays/

Read more

Writing clean code

Jason McCreary, creator of Laravel Shift, wrote a down a two part series on how to write cleaner code.

To measure our change, we should ask: Did we improve readability?

Admittedly a bit subjective, but you push yourself to stay objective. I've been pair programming for the last two years. Developers tend to agree on fundamental readability. Where we differ at the edges. These nuances can lead to some pretty great discussion.

...

The answer to did we improve code readability may vary from developer to developer and project to project. But always ask the question…

https://dev.to/gonedark/writing-clean-code https://dev.to/gonedark/writing-clean-code-part-2-9fn

Read more

A little story about the `yes` Unix command

yes is a Unix command that will spit out and infinite stream of y's. In a post on his blog Matthias Endler, an engineer at trivago, shares that there's more than meets the eye to make this happen in a performant way.

The trivial program yes turns out not to be so trivial after all. It uses output buffering and memory alignment to improve performance. Re-implementing Unix tools is fun and makes me appreciate the nifty tricks, which make our computers fast.

https://matthias-endler.de/2017/yes/

Read more

Don't design your emails

You can spend a lot of time to make emails look pretty, but it might be better to just don't style them at all. Greg Kogan did some A/B testing an concluded that sending plain emails results in more opens, clicks, replies, ...

Why are the plain emails crushing the performance of designed emails?
  • They're less likely to be caught in spam filters. Having less HTML and fewer non-text elements such as images lowers the likelihood of triggering spam filters. You can use a free spam checker to validate this by testing plain and designed emails.
  • They're less likely to go into the "Promotions" tab in Gmail (used by ~16% of all email users), for the same reasons above. From my testing, the plain emails typically end up in the Updates tab and some times even in the primary tab. Of course, the text in the email also affects this.
  • They don't look like advertisements. The second the recipient interprets your email as an ad, promotion, or sales pitch—and it does take just a second—its chances of being read or acted upon plummet towards zero. A plain email leads people to start reading it before jumping to conclusions.
  • They feel more personal. It's no handwritten note, but it's much more personal than an over-designed email with the recipient's first name crammed somewhere inside.

https://www.gkogan.co/blog/dont-design-emails/

Read more

A beautiful webapp to fetch dns records original

by Freek Van der Herten – 3 minute read

Recently my company Spatie launched https://dnsrecords.io, a beautiful site to quickly lookup dns records. True to form, we also opensourced it, here is the sourcecode on GitHub. If you want to do some dns lookups in your own app, you'll be happy to know that we extracted the dns lookup…

Read more

What I've learned after giving 100 talks

Zeno Racha wrote down some of his thoughts around public speaking. I've not given as much talks as he has but surely agree with everything in his post.

Having 10 years of experience on something is nice, but don’t wait for it to get started. The best speakers I've seen are not the ones who knows all the in’s and out’s about a certain topic.

Here's the secret that nobody will tell you — the only requirement for giving a talk is passion. That’s it. No diploma, no famous project, no masters degree, no nothing. All you need is passion.

https://medium.com/@zenorocha/what-ive-learned-after-giving-100-talks-8f175654e945

Read more

Backup multiple sites and frameworks with Laravel Backup

Tim MacDonald, a freelance software developer living in Australia, wrote down how he used our backup package to backup his Laravel and Wordpress sites.

I’m not going to run you through the standard setup or all the great features of the package here, you should definitely get your feet wet and give it a go. You’ll be up and running with backups in no time at all. From here on I’ll assume you’ve had some experience with the package, as to not over explain every step along the way…I do tend to rant off topic otherwise ?

I wanted to have a standardised backup system in place for all my sites. This system would have to include Laravel and WordPress installs - so I tinkered with Spatie’s Laravel Backup package and have managed to get a single install of Laravel to backup all my sites independently, including my WordPress sites ?

https://timacdonald.me/backup-multiple-sites-frameworks-laravel-backup/

Read more

Improving the performance of PhpStorm

PhpStorm is a fantastic editor. Unfortunately it can be quite slow. Brent, one of our developers at Spatie, blogged a few tips to make it run a bit faster. I've followed all his suggestions and PhpStorm now feels a bit more responsive.

I didn't start this post by writing my own thoughts, because I figured people were looking for some quick tips to speed of their IDE. As a PHP developer, I think that PhpStorm is such a powerful tool, which helps me to write good and maintainable code. I don't want it to stand in my way though, so good performance is an absolute requirement.

https://www.stitcher.io/blog/phpstorm-performance

Hopefully future versions of PhpStorm will be more performant out of the box.

Read more

Debugging the dreaded "Class log does not exist" error in Laravel

My colleague Sebastian took the time to write down the solution to a problem many artisans will come across at some point in time. I hope that in a future version of Laravel that error message will be improved so that it makes clear what the actual problem really is.

Every now and then I come across a Class log does not exist exception in Laravel. This particular exception is thrown when something goes wrong really early in the application, before the exception handler is instantiated.

Whenever I come across this issue I'm stumped. Mostly it's related to an invalid configuration issue or an early service provider that throws an exception. I always forget how to debug this, so it's time to document my solution for tracking down the underlying error.

https://sebastiandedeyne.com/posts/2017/debugging-the-dreaded-class-log-does-not-exist-error-in-laravel

Read more