Articles
With a high severity security issue just announced in curl, you might be wondering which curl version you are using in your PHP script. Here’s how to find it.
When you use nvm
to update a node version, you lose all globally installed npm
packages. Use these steps to reinstall those packages.
Some of the commands that I use to install and maintain my web server.
I’ve heard many devs working on MacOS that their Docker development environment is slow. Enabling these experimental features can be a quick and easy improvement.
Clean code with consistent formatting is easier to read. Writing code in a consistent way is hard. That is why I’m a big fan of tools that automate this process.
This article describes what I’ve learned building a new Docker-based development environment for this blog.
I made a script to easily take consistent measurements using Apache Benchmark. It includes an easy way to compare multiple measurements in a visual way.
After almost 2 years of (non)development, this blog finally received a big overhaul. Let’s go over the biggest changes in this new version.
Another year has gone by. Time to reflect and look ahead.
Today I learned about 2 easy ways to instruct PurgeCSS to not remove certain styles: safelists and comments.
I ran into this error about malformed characters when return a JSON response. The solution is using multi-byte safe string functions.
If you need to connect to a database over an SSH tunnel, here is how to do that in Laravel. You need a new database connection and command to create the tunnel.
Now that 2019 comes to an end, it is time to reflect and make plans for the new year.
Every time I’ve updated Laravel Homestead or started a new environment, I’ve had problems running Laravel Dusk. These are solutions for the most common problems.
Changing the primary key from an auto-incrementing integer to a UUID is really simple in Laravel Eloquent.
Service buses exist in different flavors. This article explains the overall concept of the service bus. Then it shows differences between the command bus, query bus, and event bus.
This article explains the basic concepts of the command bus. Why should you use it and how? Pointers are given to advanced use cases and good resources.
I’ve migrated my blog from Apache to NGINX. In the process, the .htaccess file was converted into an NGINX Server Block. This article shows both files and serves as an example for others that want to migrate.
This articles explains how to install a private PHP package with Composer. Using SSH keys and a little composer.json magic, in just 3 steps.
SSH keys can be used to create secure connections between computers. This article explains the basics of creating and using SSH keys.
Now that 2018 comes to an end, it is time to reflect and make plans for the new year. The theme for 2019: learn new things and becoming an “activist” for online privacy.
If you develop code on both Windows and Linux machines you might have run into inconsistent line endings. This might lead to “empty” commits, consisting only of changed line endings. This post describes how a .gitattributes file can solve all your (line ending-related) problems.
The SOLID design principles are guidelines for building software that is easier to understand and maintain while also being more flexible. These 8 resources explain what SOLID is, and what it isn’t.
PHP 7+ has support for strict type checking. Using PHP Code Sniffer we can enforce the use of declare(strict_types=1);
at the beginning of each file.
On June 7, 8, and 9, the Dutch PHP Conference 2018 was held. Now that all information has settled down, and most talks are available on YouTube, I want to share the talks I liked the most.
It is best to prevent the usage of “unsafe-inline” in your Content Security Policy (CSP) header. In this article, I will explain why that is the case and how to transform unsafe assets into safe ones.
Filtering Laravel Collections can become a performance bottleneck. Using the filter
method is significantly faster then the where
method, if used properly. Read the article for a full comparison and benchmark results.
Code coverage results can give a false sense of quality. With the @covers
and @coversNothing
annotations, you can better express the intention of your test. This leads to better code coverage results that truly reflect the coverage of your tests.
This article explains how you can require a package from a local path into your project with Composer. This way you can run a local copy of a repository and test any changes you make. Because the local repo will be symlinked changes are shared in real-time, there is no need for intermediate committing and updating.
When you start a new project it is best to stick the best practices. Skeleton projects provide a good basis. I’ll describe how to get up and running fast.
This is a quick tip on how to get code coverage results when running PHPUnit on Laravel Homestead. This will enable Xdebug first and then run your tests.
In this post, I give an overview of my second day at Laracon EU 2017. I’ll describe the presentations I’ve seen and things that stood out for me.
This is a report of my first day at Laracon EU 2017. I’ll describe the talks I saw and what stood out for me.
Lately, I’ve been working on a project that has to read data from an MSSQL database. This is the setup that we used to connect to the database and solve any encoding issues.
Last week I published my first open source package. This is what I learned while working on it.
This post explains how you can create and configure a custom module for Codeception. This is the easiest way to extend on Codeception in a reusable way.
Codeception is normally configured using the codeception.yml file. We can also use a dotenv configuration file to store any sensitive data. This posts shows you how.
Any website is potentially vulnerable to different attacks. With proper security headers in place, you can minimize the risks for yourself and your visitors.
In this post, we’ll look at some Laravel service provider examples. Most common use cases are shown using service providers from real open-source Laravel packages.
It’s difficult to check if you need to update your dependencies. There are services that can help. This is a review of Gemnasium, VersionEye and Libraries.io, which I’ve tested for several weeks.
Updating dependencies can be tricky, especially if you let them build up over time. These are my tips to stay on top of any changes and make updating as painless as possible.
Writing clean and readable code is essential. Having a properly defined code style, and adhering to that, is tedious work. Let’s automate it as much as possible.
Fzaninotto/Faker is a package for generating all sorts of random data. This tip shows you how you can use it to generate unique data for usage in tests.
Laravel translations can depend on the number of subjects: one apple, two apples. This article will explain more complex pluralizations: no apples, one apple, two apples, tons of apples.
The relatively unknown @each
function in a very powerful way to loop over data in Laravel Blade templates. It is powerful and much more elegant than @foreach
.
Google Tag Manager enables you to track different events by defining variables, triggers, and tags. In this post, I explain how to track 404 errors using the DataLayer.
Not all features of ES2015 are widely supported. That is why it’s necessary to bundle modules yourself and compile it into ordinary JavaScript. This blog post describes how to accomplish this.
Until today, I kept an eye on any errors on this website by sending them to myself by email. Although this works, I thought it was time to look for a better way of handling exceptions. Enter Bugsnag, a service that lets you track errors and exceptions and view them in a dashboard. These are my first experiences working with Bugsnag.
I’ve developed a little Javascript plugin with which you can play Conway’s Game of Life. Actually, it’s not a real game. You can determine the initial state and from there it sort of just evolves. Visit the article to play it yourself.
In this article I want to show you the best practices of configuring your Laravel application.
Using an SSL certificate is quickly becoming a best practice, if it isn’t already. What do you need to know before choosing a certificate and what do you need to check after installing it?
Just like stylesheets and Javascript files, requesting a webfont can be postponed or done asynchronously. Doing so will make your pages render more quickly, especially on browsers with a slower internet connection.
Critical path CSS is the minimal amount of CSS that you need to render (part of) your website. By inlining this in the <head>
of your website you can defer loading the rest of the CSS. This increases page speed and gives users a better experience.
To improve the speed of your website you can lazyload Javascript, CSS and images. This means that you first load all essential elements of the page and only after that you start loading any extras. Lazyloading Javascript is simple and was the first thing I did.
It is usually a good idea to cache your CSS and JS files as long as possible. This way you save requests and your website will load faster. But how do you make sure your visitors will download your new files when you made changes to them? Cache busting solves exactly this problem.
Optimizing the speed of your websites is interesting from multiple viewpoints. First and foremost it’s good for your visitors: nobody likes waiting. That’s probably why Google has incorporated the speed of a website in its ranking algorithm. And to give developers an extra hand they have developed Google Pagespeed: a tool that shows you how you can improve the performance of your website.
Eens in de zoveel tijd loop ik tegen een probleem aan met Git. Gelukkig is dat niet zo vaak, maar dat zorgt er wel voor dat ik elke keer opnieuw op zoek moet naar de oplossing voor een probleem dat ik al eerder heb opgelost. Daarom deze lijst met oplossingen die ik kan hergebruiken.
Je kunt zelf events registreren bij Google Analytics. Dit stelt je in staat om bijvoorbeeld te meten op welke uitgaande links je bezoekers klikken. In dit artikel leg ik uit hoe dat werkt.
Ik werk nu ongeveer een jaar met Git en het is me hartstikke goed bevallen. Het geeft veel meer mogelijkheden om samen aan software te bouwen dan bijvoorbeeld SVN, wat ik daarvoor gebruikte. Maar die vrijheid vraagt ook weer om een bepaalde structuur. En dat is waar Gitflow het leven heel veel makkelijker maakt.
Ik ben aan het proberen mijn code helemaal automatisch te testen met PHPUnit. Daarbij heb ik wat handige dingen geleerd en die wil ik graag met jullie delen.
In Laravel is het makkelijker dan ooit om geautomatiseerde tests te schrijven. Zo wordt PHPUnit standaard meegeleverd en is de meeste configuratie alvast ingesteld. Toch zijn er nog een aantal dingen die je moet verbeteren voordat je echt makkelijk je tests kunt draaien.
Microdata is een manier om de inhoud van je pagina nog duidelijker te maken voor zoekmachines. Met semantische html kun je al aangeven wat de belangrijkste content van een pagina en welke content bij elkaar hoort. Met microdata kun je aangeven wat voor data je content beschrijft. Zo kun je dus aangeven dat een artikel een nieuwsbericht is, of een recept, of één van de duizenden andere mogelijkheden.
Vorige week schreef ik over het maken van een sitemap. Deze week wil ik het hebben over een andere aanpak waardoor zoekmachines je website beter kunnen indexeren, namelijk door gebruik te maken van semantische (beschrijvende) HTML. Met HTML5 tags zoals <article>
, <section>
en <main>
kun je heel goed aangeven wat de belangrijkste inhoud van een pagina is.
Een sitemap is een overzicht van alle bereikbare pagina’s van je website. Het is een hulpmiddel dat door zoekmachines wordt gebruikt om alle pagina’s te indexeren. Het bouwen van een sitemap is daarmee één van de eerste stappen die je kunt zetten om je website beter vindbaar te maken in Google en andere zoekmachines.
Op 9 juli is Laravel 5.1 uitgekomen, een belangrijke nieuwe release. Dit is de eerste Long Term Support (LTS) versie van Laravel, wat betekent dat er 3 jaar ondersteuning zal zijn in de vorm van beveiligingsupdates. Niet alleen dat, versie 5 biedt veel nieuwe functies ten opzichte van versie 4.2 waar deze blog nog op draaide. Tijd dus om te updaten, maar dat blijkt een flinke klus…
De afbeeldingen die je op deze blog ziet worden direct uit mijn eigen Dropbox-map gehaald. Superhandig want zo kan ik een bestand “uploaden” naar mijn webserver door het op mijn eigen computer naar een mapje te slepen.
Omdat ik tegenwoordig al mijn blogjes in Feedly lees wil ik graag voor alles een RSS feed hebben. Helaas heeft LuckyTV nog geen eigen RSS feed dus heb ik besloten die dan maar zelf in elkaar te knutselen. Dat gaat gelukkig heel makkelijk met Guzzle en de DomCrawler van Symfony.
Bij het runnen van een website hoort ook dat je wat statistieken verzamelt. Helaas worden de statistieken van Google Analytics de laatste tijd vervuild door spammers die hopen dat je naar hun website doorklikt. Om mijn statistieken weer overzichtelijk te maken heb ik uitgezocht hoe je de spam-bezoekers weg kunt filteren.
Vanaf nu is het mogelijk om je te abonneren op de RSS feed van deze blog. Makkelijk als je het gewend bent om je blogjes lezen met bijvoorbeeld Feedly. Klik rechtsboven op het RSS-icoon om de feed te openen of abonneer je op de url barryvanveen.nl/rss.
Voor deze nieuwe blog wilde ik een script maken dat in 1 keer de nieuwste versie van mijn code uploadt naar mijn webserver. Dit heb ik gedaan door een nieuw commando aan Artisan – de command-line interface van Laravel Framework – toe te voegen.
Als je met de command-line van Git werkt dan moet je vaak je wachtwoord invoeren. Dat is op zich wel zo veilig, maar niet heel makkelijk. Gelukkig is er een oplossing: het instellen van SSH keys.
Dit is mijn allereerste blogpost ooit. Ik wil dan ook beginnen met het beantwoorden van een paar vragen, zoals waarom ik begin aan een blog en waarover ik wil schrijven.