ImThumb Beta

An advanced HTTP image generation script, based on ImageMagick. TimThumb-compatible API.

I originally wrote this because I was attempting to optimise the quality of TimThumb generated images, and realised that the lower quality images actually had larger filesizes than the higher quality ones. I ended up digging in a bit and came to the conclusion that some of GD's internals, as well as the way TimThumb uses it, were responsible. Rather than attempt to patch a very old and neglected library and fight against GD, I decided to reimplement the same functionality on top of ImageMagick.

  • Drop-in replacement, uses the same configuration files as TimThumb does.
  • Self-contained class files and structured image handling API for direct integration with other applications and scripts.


JCAnim Alpha

A jQuery & CSS3 Animation engine

Originally created to drive a parallax effect, the real gem in JCAnim turned out to be the extensible animation engine underpinning it - creating unbelievably fluid animations by using CSS3 transitions to smooth out JavaScript interpolation of animation in the browser. The library basically creates smoother browser animations by allowing you to decrease the JavaScript sampling rate, offloading animation processing to the GPU and freeing up CPU resources to decrease animation stutter. Inbetween animations generally run at whatever native framerate your monitor supports and appear extremely smooth, obviously however this depends on browser support.

This kind of implementation is particularly suited to regularly sampled animation or keyframed animation. The parallax animation implemented by jcparallax.Viewport and jcparallax.Layer updates the mouse position constantly in response to input events, and then runs animations on those coordinates at regular intervals to achieve the effect.


FormIO Beta

A powerful and extensible form building & validation library

When it was originally written in 2010, FormIO's pretty basic requirement was to abstract and simplify the process of creating simple webforms for use on public websites. Since then considerable additions and advancements have been made and happily the library's architecture has allowed all this to happen without any breaking changes to the backend or frontend APIs.

Including builtin client and serverside validation for just about any kind of normal data, as well as mechanisms for linking fields, repeating inputs and grouping sets of related data into complex objects; in the several production deployments it has had since its first development there has never been a requirement it could not meet easily.

In terms of extensibility, the OO form field API allows creation of entirely custom form fields with their own layout, frontend behaviours and frontend/backend validation. You can find a class hierarchy of the builtin implementations on the project github page, as well as source code to the embedded example which serves as a guide on using the framework and implementing these features. (more)

PHP Feature Check Final

Dependency management for easily deploying PHP applications

Managing dependencies in your PHP projects can be a real nightmare. The language depends on so many underlying system libraries and kernel features that in reality, PHP is almost more Linux and Apache than it is its own language. If you've ever worked in an environment where you need to deploy websites to multiple clients on various assorted hosting, you know how painful this
can be.

Enter PHPFeatureCheck - a utility which can run on almost any platform (really, any configuration of PHP so long as it's not running in safe mode) that allows you to create non-intrusive feature detection files as *.INI's which you can then run a script against to check that your application will work. (more)

jSchema.Binding Beta

Data-driven events and validation for your javascript applications

JSchema.Binding is a lightweight framework for managing complex, data-driven UIs. It allows for binding UI callbacks to data Models (or classes) and Records (or instances), and for manipulating those records' data. It also provides JSON schema validation over record data using JSV internally to check changes in real time. In a nutshell, it basically serves to keep your UI fresh, synchronised, valid and responsive. Everything else is up to you.

If you already use JSON schema with your application, think of JSchema.Binding as adding state to your validation.
For simple data manipulation tasks or applications without the need for clientside data validation, Binding is a more than adequate event engine and data handling layer all on its own - just pass false insted of a schema when creating new Models.


pWebFramework Beta

A low-level and extremely lightweight web application framework for rapid development

pWebFramework is a small group of classes for handling common low-level web application tasks. This general-purpose platform provides a compact and robust baseline to start implementing projects of your own.

pWebFramework's main design goals are loose coupling and a light code footprint. Classes provide low-level but syntax-light interfaces to common areas of function, and can all be subclassed with additional functionality of your own. (more)

pDebug Beta

A lightweight, powerful and robust debugging platform for PHP5

pDebug is one of those curiosities that you never bother polishing, I guess. It's called pDebug because I couldn't just call it Debug and I never bothered thinking of another name. It doesn't have JSON implemented because simply flicking it to text output mode made debugging JSON responses trivial anyway. It doesn't implement reflection because at the time reflection was horribly expensive and it doesn't really require it anyway. It's that kind of project.

But hey, it still does a hell of a lot and is kindof a pretty cool thing. I actually still use it, because it works on basically anything that can show a webpage and certainly anything that can print text. It works with any remotely modern installation of PHP because I made it originally on PHP 5.0.0. In fact I still have it in my php.ini's auto_prepend_file. The interface is snappy enough and gets mucked up by other page CSS (more)