I have been following the Webauthn standards and browser support since the early days of FIDO compatible keys. I strongly believe that hardware keys are our best path forward to provide phishing resistant, easy to operate authentication, that doesn’t compromise on privacy.
Modern PHP development generally means using a suite of tools to perform code formatting and static analysis. For a long time, I have been using composer to install theses developement tools. While using composer works great, when you’re working on multiple projects it results in duplicate copies of frequently used tools.
A few weeks back I came across a site that can generate all of your GitHub activity into a single chart. Looking at mine, I noticed that I have been fairly consistent in my activity over the past 15 years.
Each year I try to learn a new language, framework or technology. This practice encourages me to continuously learn new skills and be a newbie again. This year, I’ve spent the past few months working on a mobile client for Docket . While the mobile web UI works well enough, I wanted to see if the UX could be smoother with a native application.
During my workshop at Cakefest 2022 I covered the new content-type negotiation features shipped in CakePHP 4.4. I wanted to share that information here so it is more easily found in the future.
CakePHP 4.4.0RC1 was released recently and I wanted to go over the new error subsystem that is being added for 4.4. I haven’t ever really loved the interface that CakePHP provided for error and exception handling.
In 2021, I designed and built a custom split keyboard . I quite enjoy that keyboard, and it has been my daily driver for the past eight months. After completing the hand wired board, I wanted to learn more about electronics, and keyboards. The natural next step to me was to learn how to take my custom layout to the next level of completion.
CakePHP 4.3 was recently released, and it contains a greatly improved way to build CASE
expressions. CASE
expressions are great when you want to do conditional aggregation or add computed fields to results. Lets say you wanted to create SQL that mapped integer values to string names, you could use SQL that looks like:
In part 2 I covered the electrial design, and component selections I made for my keyboard project. In this post we’ll dive into the finishing, and assembly process.
In part 1 I covered the physical/mechanical design of my keyboard project. In this post we’ll dive into the electrical design and touch on firmware development.
Like many others, I’ve been exploring new hobbies and learning new skills as the pandemic continues to keep many of us at home. Lately, I’ve been exploring building custom mechanical keyboards.
I’ve recently switched to Elementary OS after many years of MacOS. Elementary by and large has been fantastic, and I like the low-configuration approach to OS design. The default alt-tab handler is my biggest gripe. It uses a combination of animated zoom, and brightness changes that I find visually tiring. I hoped that others had shared my pain and built an alternate solution.
For the past 15 years I’ve been a Mac user. Like many, I loved the best in class hardware, great desktop shell, and the ability to use BSD/*nix tools without having to run virtual machines. When my 2012 Macbook pro was no longer aging gracefully, I started evaluating my options for a new machine. MacOS was no longer as appealing as it once was.
CakePHP ships with PHP based templates, and while this works for many people we’ve also recently re-launched the Twig plugin. For that past several years Wyrihaximus has maintained the excellent TwigView plugin. The CakePHP core team has joined forces with Wyrihaximus and taken over completing the 4.
I’ve long kept notes and ideas written down in a variety of text files across my computer. While this ‘worked’ I always found it a bit lacking, but was not willing to commit to a cloud based notes application as I prefer the simplicity and portability of plain text files.
Upgrading major libraries that your application depends on can be a tedious and time consuming process. Dealing with deprecations and backwards incompatible changes can consume a significant amount of time and energy. In the past we’ve relied on manually updating code or using find and replace. But in last few years new techniques have emerged that make routine upgrades easier to do.
A few weeks ago I ran into a tricky to solve issue in CakePHP. It involved an iterator that needs be grown during iteration, and nested loops over that same iterator. While infrequent, there are scenarios where you would want to grow an iterator as it is being iterated. My situation is the plugin registry for CakePHP. Plugins support a bootstrap
hook method that is used to initialize a plugin.
In the next major release of CakePHP we’re going to be removing the AuthComponent
. This component and its helpers have been part of CakePHP since the 1.2 days, but their time has come to an end. Over the years, AuthComponent
has become a complex and difficult to extend piece of CakePHP. In its wake, we’re promoting two new plugins.
Integration testing with external webservices, has historically been an uncomforable process in PHP for me. It frequently involves complicated mocking that was fragile and hard to maintain. I’ve long wished for a PHP library that was as simple to use as HTTPretty is in Python.
In my daily work, I end up having to ssh
into a variety of hosts. Keeping track of which terminal is on which host can become challenging when I have 3 or 4 terminals all at a mysql
prompt, or tailing log files. A co-worker of mine came up with a pretty clever solution that I wanted to share. The clever solution involves some bash, and Applescript (as we’re working off of OSX).