Immutable Objects in PHP
When I first learned to program, I made many objects that were mutable. I made lots of getters and lots of setters. I could create objects using a constructor and mutate and morph the heck out of that object in all kinds of ways. Unfortunately, this led to many problems. My code was harder to test, it was harder to reason about, and my classes became chock full of checks to ensure that it was in a consistent state anytime anything changed. Of course, my classes had to be backed by unit tests and this often resulted in a combinatorial explosion. This how I look when I try to imagine all of the possibilities and how to test them.
A Simple Set of Time Utilities for PHP
A Simple Tag-Based Caching Package for PHP
Normally, cache entries are invalidated using one of two methods:
1. The cache entry is explicitly removed via a call to a `remove()` method of some sort.
2. The cache entry is removed due to time-based expiration.
3. The cache entry is removed due to being ejected to make room for newer entries.
KissTest, a Simple, Fast, and Beautiful Unit Test Framework for PHP
PHPUnit is a great testing framework. However, over time I began to find myself wishing it had certain features. So I created KissTest. It is a Keep-It-Simple-Straightforward (KISS), very fast, and absolutely gorgeous xUnit style unit test library.
As you can see in the screenshot, the display of the results is right in the browser. Everyone loves the command line and I am no different. However, there is something to be said for seeing the results laid out beautifully like this. Also, the PHP CLI binary is technically different from the one that is used to serve web pages. Generally, I try to keep the execution environment for the development environment and the production environment as close as possible. In fact, my development environment is identical to the production environment except it is running in VirtualBox. KissTest facilitates this. Sweet!
PHP Scalar Wrappers and Numbers Package
I am a huge fan of type hinting in PHP. When using great tools like PHPStorm it gets even better because of the amazing auto-complete and refactoring capabilities the IDE provides. Unfortunately, PHP doesn’t provide type hinting for scalar values. The SPL provides a set of classes for scalars, but they are not very popular. So, the package PHP Scalars (https://github.com/joefallon/PhpScalars) was born.
Easy PHP Debugging with PopUp PHP Debugger
If you have doing PHP development for any length of time, then you have ran across the need to perform PHP debugging without the use of a full-blown debugger. In many cases, print_r works fine. However, echoing debugging text to the page will often break the layout. A method was needed that would output text while also not breaking the layout.
To satisfy this constraint PhpPopupDebug was written. Actually, parts of this code was found elsewhere a very long time ago. The original source is no longer known. As it was used, changes to the code were made to make it easier to use and more robust. When a variable is dumped to the output, a JavaScript window is opened in the background with the dumped data. Therefore, no text is visible on the page.
Quick and Dirty PHP Test Driven Development
A long time ago, a unit testing framework for PHP was needed. At the time, there were many preexisting and comprehensive unit testing frameworks. However, a framework was needed that had the ability to run the tests from a browser. Additionally, a framework was required that would easy to integrate into a project while not increasing the footprint too much.
To satisfy these constraints, a PHP unit testing framework called QnDPhpUnitTest was written (UPDATE: This has been superseded by KissTest). Interestingly, the framework and the project that the framework was originally written for were created simultaneously. When an assert was needed, the assert method was written and then the assert was performed. One of the key benefits of this framework is the ability to include a single class and then start writing tests. Also, the framework is so simple that learning how to use it should take no more than a 5-10 minutes.
Building the Perfect Ubuntu 10.04 LAMP Server
This post will detail the series of steps that are required to set-up and configure a LAMP server using Ubuntu 10.04 LTS. The server will have all of the normal features that everyone has come to expect.
Specifically, it will have the following features:
- Locales will be set properly.
- MySQL will be secured.
- MySQL Query Caching will be configured.
- Iptables will be configured (optional).
- Alternative PHP Cache (APC) will be installed and configured.
- Web directory permissions will be set.
- Virtual hosts will be created.