<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Jeroen Derks - Blog about PHP/Laravel and other topics — Atom feed</title>
  <id>https://www.phpfreelance.co.uk/blog/feed.xml</id>
  <link rel="self" type="application/atom+xml" href="https://www.phpfreelance.co.uk/blog/feed.xml"/>
  <link rel="alternate" type="text/html" href="https://www.phpfreelance.co.uk/blog.html"/>
  <updated>2026-06-05T00:00:00Z</updated>
  <author>
    <name>Jeroen Derks</name>
  </author>
  <entry>
    <title>Email link phishing: why your email app should always show the URL</title>
    <id>https://www.phpfreelance.co.uk/blog/email-link-phishing-your-app-should-always-show-the-url.html</id>
    <link rel="alternate" type="text/html" href="https://www.phpfreelance.co.uk/blog/email-link-phishing-your-app-should-always-show-the-url.html"/>
    <published>2026-06-05T00:00:00Z</published>
    <updated>2026-06-05T00:00:00Z</updated>
    <summary>Authentication standards prevent spoofing but not link-based phishing. A proposal to always display URLs in email links, with analysis of alternatives and trade-offs.</summary>
  </entry>
  <entry>
    <title>How I use AI agents to build software</title>
    <id>https://www.phpfreelance.co.uk/blog/how-i-use-ai-agents-to-build-software.html</id>
    <link rel="alternate" type="text/html" href="https://www.phpfreelance.co.uk/blog/how-i-use-ai-agents-to-build-software.html"/>
    <published>2026-03-01T00:00:00Z</published>
    <updated>2026-03-01T00:00:00Z</updated>
    <summary>How I use AI agents like Claude Code and Codex in a structured plan-review-iterate workflow to build software across multiple technology stacks.</summary>
  </entry>
  <entry>
    <title>How to protect copies of your ID</title>
    <id>https://www.phpfreelance.co.uk/blog/how-to-protect-copies-of-your-id.html</id>
    <link rel="alternate" type="text/html" href="https://www.phpfreelance.co.uk/blog/how-to-protect-copies-of-your-id.html"/>
    <published>2026-02-12T00:00:00Z</published>
    <updated>2026-02-12T00:00:00Z</updated>
    <summary>How to protect copies of your ID card or passport. Tips for masking, encrypting and digitally signing ID copies.</summary>
  </entry>
  <entry>
    <title>Backup strategies that actually work</title>
    <id>https://www.phpfreelance.co.uk/blog/backup-strategies-that-actually-work.html</id>
    <link rel="alternate" type="text/html" href="https://www.phpfreelance.co.uk/blog/backup-strategies-that-actually-work.html"/>
    <published>2024-12-01T00:00:00Z</published>
    <updated>2024-12-01T00:00:00Z</updated>
    <summary>A practical guide to backup strategies: the 3-2-1 rule, encryption, offsite storage, and the best backup tools for Mac, Windows, and Linux.</summary>
  </entry>
  <entry>
    <title>Laravel Blade Lint</title>
    <id>https://www.phpfreelance.co.uk/blog/laravel-blade-lint.html</id>
    <link rel="alternate" type="text/html" href="https://www.phpfreelance.co.uk/blog/laravel-blade-lint.html"/>
    <published>2024-12-01T00:00:00Z</published>
    <updated>2024-12-01T00:00:00Z</updated>
    <summary>Laravel Blade Lint - A syntax validation tool for Laravel Blade templates. Catch template errors before they reach production.</summary>
  </entry>
  <entry>
    <title>PHP: Determine the full URL of the current page</title>
    <id>https://www.phpfreelance.co.uk/blog/php-get-current-url.html</id>
    <link rel="alternate" type="text/html" href="https://www.phpfreelance.co.uk/blog/php-get-current-url.html"/>
    <published>2017-10-16T00:00:00Z</published>
    <updated>2017-12-22T00:00:00Z</updated>
    <summary>How can you best determine the full URL of the current page/script in PHP?</summary>
  </entry>
  <entry>
    <title>What's my IP address? - Now easy to remember curl command line++</title>
    <id>https://www.phpfreelance.co.uk/blog/whats-my-ip-address-command-line-api-javascript-php-shell-soap-xml-dns-geoip.html</id>
    <link rel="alternate" type="text/html" href="https://www.phpfreelance.co.uk/blog/whats-my-ip-address-command-line-api-javascript-php-shell-soap-xml-dns-geoip.html"/>
    <published>2017-10-03T00:00:00Z</published>
    <updated>2017-10-03T00:00:00Z</updated>
    <summary>What's my IP address | What's your IP address - Now easy to remember using curl command line (with extras)</summary>
  </entry>
  <entry>
    <title>Automatically upgrade all PHPMailer installs on your server</title>
    <id>https://www.phpfreelance.co.uk/blog/2016/12/29/automatically-upgrade-all-phpmailer-installs-on-your-server.html</id>
    <link rel="alternate" type="text/html" href="https://www.phpfreelance.co.uk/blog/2016/12/29/automatically-upgrade-all-phpmailer-installs-on-your-server.html"/>
    <published>2016-12-29T00:00:00Z</published>
    <updated>2016-12-29T00:00:00Z</updated>
    <summary>A simple shell script (upgrade-phpmailer.sh) to find and update all PHPMailer installations on your server in response to CVE-2016-10033 and CVE-2016-10045.</summary>
  </entry>
  <entry>
    <title>How to add customer authentication to your Magento API</title>
    <id>https://www.phpfreelance.co.uk/blog/2012/05/22/how-to-add-customer-authentication-to-your-magento-api.html</id>
    <link rel="alternate" type="text/html" href="https://www.phpfreelance.co.uk/blog/2012/05/22/how-to-add-customer-authentication-to-your-magento-api.html"/>
    <published>2012-05-22T00:00:00Z</published>
    <updated>2012-05-22T00:00:00Z</updated>
    <summary>Add customer authentication to a custom Magento API call by reusing the storefront login() function and validating the supplied customer credentials before serving any data.</summary>
  </entry>
  <entry>
    <title>Programmatically creating a coupon (including the rule) with conditions in Magento</title>
    <id>https://www.phpfreelance.co.uk/blog/2012/05/22/programmatically-creating-a-coupon-including-the-rule-with-conditions-in-magento.html</id>
    <link rel="alternate" type="text/html" href="https://www.phpfreelance.co.uk/blog/2012/05/22/programmatically-creating-a-coupon-including-the-rule-with-conditions-in-magento.html"/>
    <published>2012-05-22T00:00:00Z</published>
    <updated>2012-05-22T00:00:00Z</updated>
    <summary>Create a Magento coupon (and the underlying shopping-cart rule with product conditions) entirely from PHP code, including a worked example for a single-product discount.</summary>
  </entry>
  <entry>
    <title>Questions to ask when interviewing a candidate Magento developer</title>
    <id>https://www.phpfreelance.co.uk/blog/2012/05/06/questions-to-ask-when-interviewing-a-candidate-magento-developer.html</id>
    <link rel="alternate" type="text/html" href="https://www.phpfreelance.co.uk/blog/2012/05/06/questions-to-ask-when-interviewing-a-candidate-magento-developer.html"/>
    <published>2012-05-06T00:00:00Z</published>
    <updated>2012-05-06T00:00:00Z</updated>
    <summary>A practical list of questions to ask when interviewing a candidate Magento developer, covering general PHP, Magento architecture, theming, modules and database knowledge.</summary>
  </entry>
  <entry>
    <title>Useful Magento extensions for developers, novice users and others</title>
    <id>https://www.phpfreelance.co.uk/blog/2012/02/20/useful-magento-extensions-for-developers-novice-users-and-others.html</id>
    <link rel="alternate" type="text/html" href="https://www.phpfreelance.co.uk/blog/2012/02/20/useful-magento-extensions-for-developers-novice-users-and-others.html"/>
    <published>2012-02-20T00:00:00Z</published>
    <updated>2012-02-20T00:00:00Z</updated>
    <summary>A curated list of Magento Connect extensions that have proved genuinely useful in everyday development, store administration and shop owner workflows.</summary>
  </entry>
  <entry>
    <title>Products have disappeared after import into Magento? A possible solution!</title>
    <id>https://www.phpfreelance.co.uk/blog/2011/12/16/products-have-disappeared-after-import-a-possible-solution.html</id>
    <link rel="alternate" type="text/html" href="https://www.phpfreelance.co.uk/blog/2011/12/16/products-have-disappeared-after-import-a-possible-solution.html"/>
    <published>2011-12-16T00:00:00Z</published>
    <updated>2011-12-16T00:00:00Z</updated>
    <summary>Products imported into Magento appear in the database but no longer show up in the admin or on the storefront — here is a possible cause and how to recover the visibility quickly.</summary>
  </entry>
  <entry>
    <title>Fixing a corrupted Thunderbird popstate.dat file</title>
    <id>https://www.phpfreelance.co.uk/blog/2011/10/11/fix-corrupted-thunderbird-popstate.html</id>
    <link rel="alternate" type="text/html" href="https://www.phpfreelance.co.uk/blog/2011/10/11/fix-corrupted-thunderbird-popstate.html"/>
    <published>2011-10-11T00:00:00Z</published>
    <updated>2011-10-11T00:00:00Z</updated>
    <summary>How to repair, regenerate or work around a corrupted, empty or missing Thunderbird popstate.dat file after a crash, with a small Perl helper to rebuild it from the POP3 server state.</summary>
  </entry>
  <entry>
    <title>How to display your extension version in Magento admin configuration</title>
    <id>https://www.phpfreelance.co.uk/blog/2011/07/20/how-to-display-your-extension-version-in-magento-admin.html</id>
    <link rel="alternate" type="text/html" href="https://www.phpfreelance.co.uk/blog/2011/07/20/how-to-display-your-extension-version-in-magento-admin.html"/>
    <published>2011-07-20T00:00:00Z</published>
    <updated>2011-07-20T00:00:00Z</updated>
    <summary>Display your Magento extension version directly in the admin configuration section using a helper, an admin block, and a small system.xml change — no more round trips to Magento Connect Manager.</summary>
  </entry>
  <entry>
    <title>New Magento extension for automatically attaching images to emails</title>
    <id>https://www.phpfreelance.co.uk/blog/2011/07/05/new-magento-extension-for-automatically-attaching-images-to-emails.html</id>
    <link rel="alternate" type="text/html" href="https://www.phpfreelance.co.uk/blog/2011/07/05/new-magento-extension-for-automatically-attaching-images-to-emails.html"/>
    <published>2011-07-05T00:00:00Z</published>
    <updated>2011-07-05T00:00:00Z</updated>
    <summary>EmailImages: a Magento extension that automatically downloads, caches and attaches images referenced in HTML email bodies so they display reliably for recipients.</summary>
  </entry>
  <entry>
    <title>Enable cache for Ecomdev_PHPUnit</title>
    <id>https://www.phpfreelance.co.uk/blog/2011/07/04/enable-cache-for-ecomdev_phpunit.html</id>
    <link rel="alternate" type="text/html" href="https://www.phpfreelance.co.uk/blog/2011/07/04/enable-cache-for-ecomdev_phpunit.html"/>
    <published>2011-07-04T00:00:00Z</published>
    <updated>2011-07-04T00:00:00Z</updated>
    <summary>Enable cache for Ecomdev_PHPUnit when writing PHPUnit unit tests for Magento extensions, with mock cache models and replacement of canUse() for selective cache use.</summary>
  </entry>
</feed>
