https://alexvanderbist.com/feed <![CDATA[Alex Vanderbist]]> 2024-03-18T00:00:00+00:00 <![CDATA[Converting HTML to PDF using PHP]]> https://alexvanderbist.com/2024/converting-html-to-pdf-using-php If you spend enough time building web applications, it's likely that you will eventually need a solution for generating PDF documents. Consider scenarios like invoice PDFs, printable tickets, gift vouchers in email attachments or printable shipping labels. Let's look at four options to accomplish this in a PHP application.

]]>
2024-03-18T00:00:00+00:00
<![CDATA[Measuring caffeine intake at Spatie]]> https://alexvanderbist.com/2021/measuring-caffeine-intake-at-spatie For a while now, we've had some empty space on our office dashboard. One of the more interesting ideas that we came up with, is a tile that can count the number of coffees brewed at the office based on a Raspberry Pi listening to the coffee machine.

]]>
2021-11-04T00:00:00+00:00
<![CDATA[Setting up and securing a private Composer repository]]> https://alexvanderbist.com/2021/setting-up-and-securing-a-private-composer-repository At Spatie, we host several packages on a private composer packagist server using Satis. In the first of this two-part blog series we'll take a look at how we're distributing these packages by hosting our own private Composer repository using Satis and how you can do that too.

]]>
2021-06-15T00:00:00+00:00
<![CDATA[Private Satis authentication backed by Laravel]]> https://alexvanderbist.com/2021/private-satis-authentication-backed-by-laravel In part one of this two-part series we looked at setting up a Satis repository for our private GitHub packages. Now that we've got a basic Satis server running, let's look at the options to secure this server.

]]>
2021-06-14T00:00:00+00:00
<![CDATA[Comparing DNS records on two nameservers]]> https://alexvanderbist.com/2021/comparing-dns-records-on-two-nameservers We've all been there: you've just manually copied 30+ DNS records from one server to another and you're about to press the metaphorical red button by updating the domain's nameservers. If only there was a way to make sure you've copied everything correctly...

]]>
2021-01-25T00:00:00+00:00
<![CDATA[Some notes on slow queues and Redis over TLS]]> https://alexvanderbist.com/2021/slow-queues-and-redis-over-tls When playing around with a load testing tool and Laravel queues I started noticing a weird pattern: every 22 dispatched jobs, there would be a 5 second delay on all queues before dispatching the next set off jobs. This only seemed to be the case using a DigitalOcean Droplet and their managed Redis servers.

]]>
2021-01-04T00:00:00+00:00
<![CDATA[Open‑sourcing Tinker.app]]> https://alexvanderbist.com/2020/tinker-app Back in 2017 I started working on Tinker.app: a hosted, in-browser version of Laravel's Tinker tool. It allows you to run and debug PHP code straight from a browser window. As an added bonus, package creators would be able to sandbox and demo their Laravel packages using embedded Tinker.app sessions.

]]>
2020-07-27T00:00:00+00:00
<![CDATA[Enable early access Metal support for JetBrains IDEs]]> https://alexvanderbist.com/2020/enable-early-access-metal-support-for-jetbrains-ides JetBrains probably has some of the best IDEs out there. However, if you've ever used one for more than two minutes, you'll know it's not their speed that puts them on the leaderboards. Project Lanai looks to (partially) solve this by using Apple's Metal API to render the application. Let's look at how we can enable an early access build with Metal support on any JetBrains IDE.

]]>
2020-06-23T00:00:00+00:00
<![CDATA[Advanced Laravel migrations using temporary tables]]> https://alexvanderbist.com/2020/advanced-laravel-migrations-using-temporary-tables If you've ever ran a big migration in Laravel before you might know there are a lot of things that can go wrong. Processes go out of memory, migrations crashing half way through leaving some data unmigrated, rollbacks going wrong, etc... Let's see how we can avoid all of the above when creating a somewhat more advanced migration.

]]>
2020-05-19T00:00:00+00:00
<![CDATA[Bringing TeamSpeak voice notifications to Discord]]> https://alexvanderbist.com/2020/teamspeak-voice-notifications-for-discord In the past few weeks my friends and I spent quite literally day and night on Discord's voice chat. This inevitably brought back some good memories from the Summer nights we spent playing games and chatting away on TeamSpeak. And even though Discord is pretty great, there's one TeamSpeak feature missing to complete the nostalgia trip: the obnoxious voice notifications. Let's bring them back. User joined your channel

]]>
2020-04-06T00:00:00+00:00
<![CDATA[Running Laravel's scheduler without setting up CRON jobs]]> https://alexvanderbist.com/2019/running-laravel-scheduler-without-setting-up-cron Scheduler is a tiny shell script to run Laravel's scheduler every 60 seconds, without having to configure any CRON jobs.

]]>
2019-06-10T00:00:00+00:00
<![CDATA[How migrations might be slowing down your Laravel tests]]> https://alexvanderbist.com/2019/how-migrations-might-be-slowing-down-your-laravel-tests Over the years I've read a lot of interesting posts about speeding up PHPUnit. The last one being a pretty good summary by Laravel News (link in article). Remarkably, there's one trick that wasn't mentioned in any of these articles. I swear this is not clickbait.

]]>
2019-01-04T00:00:00+00:00
<![CDATA[Fixing Imagick's “not authorized” exception]]> https://alexvanderbist.com/2018/fixing-imagick-error-unauthorized Over the last few days we've had a couple of issues with Imagick and processing PDFs on our servers. As it turns out, these issues are caused by automatic security updates. Let's look into the issue and its solution.

]]>
2018-10-26T00:00:00+00:00
<![CDATA[Quickly set up existing Laravel projects]]> https://alexvanderbist.com/2018/quickly-set-up-exisiting-laravel-projects-using-linstall Lately, a lot of cool shell aliases and functions have been posted on Twitter. I've decided to join in on the fun and create a shell function for something I do about 5 times per day: setting up an existing Laravel project.

]]>
2018-08-23T00:00:00+00:00
<![CDATA[How to ‘hack’ and win the May Mayhem blog contest]]> https://alexvanderbist.com/2018/how-to-hack-and-win-the-may-mayhem-blog-contest I feel like programmers are often as good at breaking things as they are at fixing things. Part of the thought process of programming anything new is figuring out its flaws, weaknesses and possible exploitations. As a web developer, I often find myself applying the same thought process to everything I see and read about online. Including Laravel's May Mayhem blog contest.

]]>
2018-05-27T00:00:00+00:00
<![CDATA[Building APIs with Laravel Query Builder]]> https://alexvanderbist.com/2018/builder-apis-with-laravel-query-builder If you've ever worked on any medium sized API I'm sure you quickly discovered a lot of frequently occurring patterns. Parsing the query string, retrieving necessary models, filtering, sorting, adding pagination and finally encoding the data as JSON. Creating a new endpoint quickly becomes an exhausting chore of making the same decisions repeatedly. To make some of these decisions for us, we built our latest package: laravel-query-builder.

]]>
2018-02-10T00:00:00+00:00