A dark theme for both the Visual Studio Code (vscode) and Zed editors based on the Paraíso theme from TextMate by Jann T. Sott and Chris Kempson.
https://www.simonholywell.com/post/paraiso-dark-vscode-and-zed-theme/
Adding delta to your workflow will give you a nice interactive diff so make command line git so much better!
Using git add -p to interactively stage specific parts of a file allowing for more precise control over commits in git. It provides a walkthrough on how to split hunks for granular commit control...
Learn how to dynamically load different base images to build application images and for testing using Docker. Utilize build-time variables in a Dockerfile to specify the Node.js version/tag and e...
https://www.simonholywell.com/post/dynamic-docker-image-loading/
Learn to wield nix-shell’s power for precise project dependency management, ensuring hassle-free development environments. Discover techniques for pinning specific Node.js versions, simplifying...
https://www.simonholywell.com/post/pinning-nix-shell-package-versions-for-reproducibility/
Highlights from the YOW! 2023 conference in Brisbane. This blog post covers engaging talks on topics ranging from creating a programming language for children to real-world applications of WebAss...
In a departure from common international practices, Australia allows both residents and travellers duty-free purchases under the Tourist Refund Scheme. Buy the goods, get an invoice and you can c...
https://www.simonholywell.com/post/duty-free-with-trs-for-australians/
Explore the advantages of cross-compiling in Docker whilst working through a specific case involving a Node.js project using pkg, aiming for a Linux ARM64 architecture in the Docker build.
https://www.simonholywell.com/post/docker-cross-compilation/
I made some circuit diagrams for the various versions of the Starving Student Millet Hybrid amplifier, which is a tube/valve headphone amplifier you can build yourself relatively easily for fun.
https://www.simonholywell.com/post/diy-hybrid-valve-amplifier/
Here are some of the window management shortcuts that I have discovered and found very useful having moved to working on a Windows 10 machine.
The release of Jest 26 brought a new timer faking interface, which now supports Date mocks. I couldn’t readily find any documentation for this feature so, here is how I used in a project recent...
Old versions of WSL can lead to issues with file system permissions with Node. Upgrading the version of WSL can solve this issue for you.
Rope working fids make it easier to splice ropes, but they can be expensive to buy for a small DIY project. Here are some ideas of how to make your own fids and the required dimensions of each fi...
https://www.simonholywell.com/post/making-rope-working-fids/
To make the construction and maintenance of more advanced types easier it can be helpful to write some tests that ensure their correct function. This sounds a little easier than it turns out to b...
https://www.simonholywell.com/post/testing-typescript-types/
As TypeScript applications get more complex so do the types required to describe it. There are a number of built-in types that can be used for this purpose or combined to create more specialised ...
https://www.simonholywell.com/post/advanced-typescript-types/
I have recently found myself needing a type for class constructors that is at once generic and tight enough to ensure a genuine constructor. This is useful in situations where you must handle a v...
https://www.simonholywell.com/post/typescript-constructor-type/
This will be a quick introduction to the lambda calculus syntax, alpha (α) equivalence and beta (β) reduction. What does a lambda look like? I am going to use the identity function as an exampl...
https://www.simonholywell.com/post/the-lambda-calculus-for-developers/
Automated search and replace can be very handy although there are occasions where a human needs to get involved on some of the decisions. If the search term isn’t unique or appears as part of o...
https://www.simonholywell.com/post/2017/09/search-and-replace-with-confirmation-in-bash/
In the last article we learnt how to create modified copies of an immutable in PHP. This one is going to tackle an issue I have hitherto skirted around and avoided. Objects in immutable data stru...
https://www.simonholywell.com/post/2017/04/php-and-immutability-part-three/
In the last article we learnt how to create an immutable data structure in PHP. There were a few issues to work through, but we got there in the end. Now onto making the immutable class more usef...
https://www.simonholywell.com/post/2017/04/php-and-immutability-part-two/
Being a weakly typed dynamic language, PHP has not really had the concept of immutability built into it. We’ve seen the venerable define() and CONSTANTS of course, but they’re limited. Whilst...
https://www.simonholywell.com/post/2017/03/php-and-immutability/
When you have a series of applications all running the same database structure it can be annoying to roll out schema updates across all the databases. If you’ve got migrations then great - scri...
https://www.simonholywell.com/post/2017/03/mysql-alter-column-in-all-databases/
It is important to ensure that Google does not index sites whilst they are still on a staging environment, but you cannot lock it down completely - how would your clients proof it? So I run a sim...
https://www.simonholywell.com/post/2017/01/email-when-file-changes/
Many people have read, reviewed and even implemented the SQL style guide that I wrote. This is great, but there have also been a number of commonly held misconceptions or incorrect readings of th...
https://www.simonholywell.com/post/2016/12/sql-style-guide-misconceptions/
A very short and simple trick for creating new stdClass objects without having to set every property individually. This is akin to JavaScript’s object notation, but not quite as elegant. Creati...
https://www.simonholywell.com/post/2016/11/quick-way-to-create-php-stdclass/
It is with great pleasure that I announce the second edition of the Functional Programming in PHP book that I have been working on. There is twice the content of the first edition of the book as ...
https://www.simonholywell.com/post/2016/10/functional-programming-in-php-second-edition/
As a follow on to my short post about namespaces and functions from a year ago I thought it would be worth covering importing a specific function and aliasing functions via namespace operators to...
https://www.simonholywell.com/post/2016/10/importing-and-aliasing-php-functions/
Pgmodeler is a handy tool for designing databases with an ERD style interface specifically aimed at the PostgreSQL community. It can come in a couple of different ways, but I am going to covering...
https://www.simonholywell.com/post/2016/10/install-pgmodeler-ubuntu/
I’ve finally found some time to look at my old remote control car again - I was so happy when I bought it as a kid nearly twenty years ago. I’ve still got the original nickel cadmium battery ...
https://www.simonholywell.com/post/2016/09/tamiya-manta-ray/
Way back in 2007 I arrived in London, England ready to start a new chapter of my life working in the big city. I’d left a good job at a web agency in Melbourne - one of the world’s most livab...
I use both Vagrant and Ansible to run and provision development virtual machines for testing work locally. This provides an easy to build environment as close to production as possible that all d...
https://www.simonholywell.com/post/2016/02/intelligent-vagrant-and-ansible-files/
Scrapes can be useful to take static backups of websites or to catalogue a site before a rebuild. If you do online courses then it can also be useful to have as much of the course material as pos...
https://www.simonholywell.com/post/2015/09/scrape-site-with-wget-and-httrack/
Not wanting to repeat myself I have written a small bash script to handle the parallel processing of the post images for this site. This involves resizing, cropping and then compressing the image...
https://www.simonholywell.com/post/2015/08/image-resize-crop-bash-imagemagick/
With the release of PHP 5.3 namespaces became a reality in PHP and they’ve made so much possible including better autoloading. The majority of the time you’ll be used to seeing them at the to...
https://www.simonholywell.com/post/2015/08/namespace-php-functions/
When you’re working in a team you need ways to easily share and denote good style and taste. This is true of your primary programming language with PEP8 for Python and PSRs 1 & 2 for PHP being ...
I wrote about localising dates (and other data) in a recent blog post, but unfortunately there were some shortcomings where time zones were concerned. As I alluded to in that post there is a way ...
https://www.simonholywell.com/post/2015/07/international-php-dates-with-intl/
Localising sites can be a chore, but PHP has the venerable setlocale() to use system locales. These are like templates or profiles that describe how various types of data should be displayed. Sho...
https://www.simonholywell.com/post/2015/07/php-date-setlocale-localisation/
Once in a while you come across situations where someone wants to know what a server can do or how many requests it can handle under a realistic load scenario. It could simply be that you want to...
https://www.simonholywell.com/post/2015/06/parallel-benchmark-many-urls-with-apachebench/
A little known feature of PHP’s static keyword is that it allows for memoization or function caching. This is a process whereby a functions heavy lifting can be cached so that subsequent calls ...
https://www.simonholywell.com/post/2015/05/2015-05-18-memoization-or-function-cache/
It is possible to treat a class instance as a function in PHP. Quite often this is referred to as a functor even though it should really be known as a function object. This is because functions a...
https://www.simonholywell.com/post/2015/04/php-function-objects/
After working hard on the guide to Functional Programming in PHP I am pleased to announce that it has been published by php! The book is offcially now available and you can purchase your very own...
https://www.simonholywell.com/post/2014/08/functional-programming-in-php-the-book/
I was recently invited to join Edd and Michael to appear on the Three Devs and a Maybe podcast to discuss function programming. The recording of our chat is now available so head on over and have...
https://www.simonholywell.com/post/2014/07/2014-07-24-three-devs-and-a-maybe-podcast/
Since its inception the slow running speed of PHP has been widely publicised and over the years there have been a number of improvements. The first Zend Engine arrived with PHP4 and delivered var...
https://www.simonholywell.com/post/2014/02/2014-02-28-hhvm-zephir-php-benchmark/
I was recently invited to speak about functional programming in PHP for both BrightonPHP and PHP Hampshire. The details of which are in a previous blog post. If you attended either talk and you�...
https://www.simonholywell.com/post/2014/02/functional-php-talks/
I have been invited to speak at both the upcoming meetings of BrightonPHP and PHP Hampshire about functional programming. This is off the back of the site I created for my (soon to be released) b...
https://www.simonholywell.com/post/2014/01/speaking-at-brightonphp-and-php-hampshire/
In PHP you can easily add a duration to a DateTime instance in a number of ways. I will review the most common methods for completing the task starting with those available on the DateTime object...
https://www.simonholywell.com/post/2014/01/add-a-duration-or-interval-to-a-date/
As you may know I am currently the maintainer of both Idiorm and Paris; well recently I merged in what looked to be an innocuous pull request from a contributor. Unfortunately this merge had unin...
https://www.simonholywell.com/post/2013/12/reverse-github-pull-request/
Wrangling dates and times can be a somewhat arduous task for all programmers. One very common requirement is to convert a time from one time zone to another. In PHP this is greatly simplified wit...
https://www.simonholywell.com/post/2013/12/convert-utc-to-local-time/
Sometimes it is helpful to entirely change chunks of markup when a certain CSS media query is triggered. This could because a certain layout will not work on smaller screen sizes or because it re...
https://www.simonholywell.com/post/2013/11/conditionally-loaded-responsive-content/
After a lot of work and many contributions from valued community members Idiorm and Paris versions 1.4.0 have been released into the wild. You can download them now from their respective reposito...
https://www.simonholywell.com/post/2013/09/idiorm-and-paris-1-4-0-released/
The security of session handling in PHP can easily be enhanced through the use of a few configuration settings and the addition of an SSL certificate. Whilst this topic has been covered numerous ...
https://www.simonholywell.com/post/2013/05/improve-php-session-cookie-security/
There are a number of things you can do to make a server more secure whilst protecting your hosted entities and their users. Here are just three of the many things I do on every new server I comm...
https://www.simonholywell.com/post/2013/04/three-things-i-set-on-new-servers/
If you want to install and run the latest version of Scala and/or Netbeans then you cannot simply install it from your distributions repositories or pre-built packages. It may sound easy enough t...
https://www.simonholywell.com/post/2013/03/install-netbeans-scala-ubuntu/
In part one of the tutorial you built a bot with Node.js that could connect to the Google Talk network and announce its presence to other users with a status message. The bot was also configured ...
https://www.simonholywell.com/post/2013/03/create-a-node-js-google-talk-bot-pt2/
Whilst Node.js is primarily aimed at creating non-blocking servers it can also be used to host simple web pages such as homepages and blogs. We are going to be using a simple web framework for No...
https://www.simonholywell.com/post/2013/02/node-js-for-hosting-websites/
With Node.js yet to reach a major release you may be wondering if it is mature enough for production environments and live projects. Whilst it is also true, in the past, that the Node.js creators...
https://www.simonholywell.com/post/2013/02/node-js-in-the-real-world/
Jabber was originally invented by Jeremie Miller in 1998 who was sick of using many different closed protocol instant messenger clients. To begin fixing this situation he created jabberd as an op...
The PHP project as a whole has been migrating to use git as its SCM of choice. This includes the core code and some PECL extensions such as BitSet and the sources for the PHP.net web properties l...
https://www.simonholywell.com/post/2013/02/php-ssdeep-in-git/
JavaScript started life as a project named Mocha created by Brendan Eich at Netscape in 1995. By the time Netscape Navigator 2.0 was due for release the language had changed names twice becoming ...
https://www.simonholywell.com/post/2013/02/node-js-eco-system/
Programming a chat bot was once the domain of the hardcore hacker tapping packets as they passed over the wire from proprietary client applications to closed source servers, but not any more! Wit...
https://www.simonholywell.com/post/2013/02/create-a-node-js-google-talk-bot-pt1/
Tags are quite a simple aspect of git, but there are a few things that a lot of people don’t know about. These shortcuts will make it quick for you to tag and manage those tags in your git repo...
Idiorm is a PHP ORM that eschews complexity and deliberately remains lightweight with support for PHP5.2+. It consists of one file and primarily one class that can easily be configured in a few l...
https://www.simonholywell.com/post/2013/01/idiorm-and-paris-the-minimalist-orm/
In some of my code I use a PHP library called React/Curry and to save typing it uses a unicode ellipsis (…) for a method name. Yes, that is right unicode method names can be legal in PHP!
https://www.simonholywell.com/post/2013/01/unicode-shortcut-in-netbeans/
Navigator is a PHP library for easily performing geographic calculations and distance unit conversions on Earth or any other spheroid. Currently it supports distance calculations between two coor...
https://www.simonholywell.com/post/2013/01/navigator-geographic-calculations-library-for-php/
Canonical pages are an important aspect of maintaining a website and ensure that search engine rankings are not affected by any duplicated content. In *NIX based systems file names with varying c...
https://www.simonholywell.com/post/2012/11/force-lowercase-urls-rewrite-php/
Installing curses: sudo apt-get install libncurses5-dev fish is now installed on your system. To run fish, type ‘fish’ in your terminal. To use fish as your login shell: add the line ‘/usr/...
I love vim and its very handy shortcuts, but I also like to be in a GUI IDE for most of my development. Thankfully there is an answer; add vims keybindings to the NetBeans environment with jVi. O...
https://www.simonholywell.com/post/2012/03/netbeans-jvi-vim-bindings/
I have written a two part article for this months .net magazine detailing how easy it is to write a Google Talk bot with the evented power of Node.js. “Programming a chat bot was once the doma...
https://www.simonholywell.com/post/2012/02/create-a-google-talk-bot-with-nodejs/
When installing a UDF recently I got an annoying error message, which didn’t seem to want to go away. Deleting the function before attempting to remove it did not work so I used the following s...
https://www.simonholywell.com/post/2012/01/mysql-udf-install-error-function-already-exists/
When I began using Cloudno.de recently to have a go at Node.js and CouchDB I stored my username and password in plain text in a configuration file. If you are also looking to get CouchDB going w...
https://www.simonholywell.com/post/2011/10/nodester-environment-variables-for-sensitive-data/
PHP extension writing: PHP Extensions Made Eldrich Since writing my 15 Excellent Resources for PHP Extension Development post in September last year Kristina Chodorow of 10gen (MongoDB) has writt...
https://www.simonholywell.com/post/2011/10/php-extensions-made-elrich/
The world has lost an excellent and exciting rider in Marco Simoncelli. He was a true character. RIP #58. You can leave a tribute on the MotoGP website.
https://www.simonholywell.com/post/2011/10/marco-simoncelli/
Node.js and CouchDB feel like they were made for each other right from the very first time I used them. With the cradle node package the integration becomes even easier. Whilst both Node.js and...
https://www.simonholywell.com/post/2011/10/getting-started-node-js-couch-db/
Recently (well in a loose sense anyway) I had the need to build a document bank in PHP for a client at Mosaic. It was a fairly involved application with various public and private APIs for integr...
https://www.simonholywell.com/post/2011/07/how-php-ssdeep-was-made/
I have ended up with a very old piece of hardware and of course the first thing I did was wipe the Windows 2000 installation and stick a few versions of Linux on it. Unfortunately it only came wi...
https://www.simonholywell.com/post/2011/06/linux-on-dell-inspiron-2500/
I remember watching trains from this bridge when I first arrived in Edinburgh from Australia. It was cold then too! nationalgeographicdaily: Children Watching Train, Edninburgh Photograph by Vish...
https://www.simonholywell.com/post/2011/06/i-remember-watching-trains-from-this-bridge-when-i/
Ah, so eloquent! jeffreyshek: Only in Scotland. Photo taken by a friend of mine.
necora-markus: Released a new version of the Agavi framework support plugin for the shiny new NetBeans 7.0. Still depends on implementation versions of the PHP-plugin, so if something doesn’t w...
https://www.simonholywell.com/post/2011/05/netbeans-7-agavi-support/
Whilst the wedding is a great event for the participants, I am not interested in the slightest. However William was seen last night out on his motorbike in less than adequate gear (squidding) and...
https://www.simonholywell.com/post/2011/04/prince-william-a-squid/
Why won’t ssh-agent save my unencrypted key for later use? I recently was annoyed by always having to enter my private keys passphrase every time I wanted to do a git push to or pull from a pub...
https://www.simonholywell.com/post/2011/04/ssh-agent-not-storing-unencrypted-key/
hotvvheels: Cool is a Color
https://www.simonholywell.com/post/2011/03/hotvvheels-cool-is-a-color/
Installing Gearman is pretty easy as there are packages for it in Ubuntu: sudo apt-get install gearman libgearman-dev The development headers (libgearman-dev) are only required if you need to com...
https://www.simonholywell.com/post/2011/02/gearman-php-mod-gearman-status/
There are many things to consider as you wrap your bike up for winter such as ensuring your fuel does not go stale, but the electrical system needs attention too. One of the most common failures ...
https://www.simonholywell.com/post/2011/01/winter-motorcycle-electrics/
This is by no means an exhaustive list of steps for long term motorcycle (or car for that matter) storage, but a few tips I have picked up along the way. When a motorcycle is put into storage it ...
https://www.simonholywell.com/post/2011/01/winter-motorcycle-tyres/
PHP Hangs When Fed 2.2250738585072011e-308 A pretty horrible bug when you assign the number 2.2250738585072011e-308 to a variable PHP will hang on Linux or Windows 32bit builds of PHP. This does ...
https://www.simonholywell.com/post/2011/01/php-number-error/
This is by no means an exhaustive list of steps for long term motorcycle (or car for that matter) storage, but a few tips I have picked up along the way. The most commonly known issue with bikes ...
https://www.simonholywell.com/post/2011/01/winter-motorcycle-fuel/
FullOctane: Bike and Car Blog I have setup a site to post all my automotive related discoveries. Currently I have two posts up there about fuel degradation and storage. Putting motorcycles into...
https://www.simonholywell.com/post/2011/01/fulloctane-introduction/
When stored correctly, high quality gasolene should continue to be stable forever (well almost!). There are few factors that contribute to the degradation of petrol with the two primary concerns ...
https://www.simonholywell.com/post/2010/12/why-does-fuel-go-stale/
wombert: xkcd: Convincing
https://www.simonholywell.com/post/2010/12/wombert-xkcd-convincing/
Quite often when you are working with legacy code you will come across a mess of globals. Every single method will make use of the same global instance of the database class for example. So where...
https://www.simonholywell.com/post/2010/12/logging-global-php-objects-lazy-loading-proxy/
I needed to add a new port forward to a router, but I did not have access to the web interface through a graphical browser. Attempts to get in using Lynx stalled as it seems the router will not s...
https://www.simonholywell.com/post/2010/11/setup-a-new-portforward-on-vigor-over-telnet/
Introduction When working in a team it is very useful to have a central web server with multiple environments and a configuration as close to the live server as possible. This can be a bit of a n...
https://www.simonholywell.com/post/2010/11/team-development-server/
Redis: under the hood (internals) I was curious to learn more about Redis’s internals, so I’ve been familiarizing myself with the source, largely by reading and jumping around in Emacs. After...
https://www.simonholywell.com/post/2010/10/redis-under-the-hood/
Installing via the pecl command can be a pain on Redhat. First off all you will need to install the php-devel package: yum install php-devel Then you will need ensure that the PEAR/PECL installer...
https://www.simonholywell.com/post/2010/10/pecl-install-issues-on-redhat/
Forcing NetBeans to Use Unix (LF) Line Endings NetBeans usually uses the operating systems default line ending when creating a new file (it establishes this by what the JVM tells it). So for exam...
https://www.simonholywell.com/post/2010/10/force-netbeans-line-endings/
Whilst developing a PHP extension recently I spent quite a bit of time researching exactly how to create an extension, the best practices and the DocBook format of the PHP manual for documenting ...
https://www.simonholywell.com/post/2010/09/15-excellent-resources-for-php-extension-development/
The PHP ssdeep Extension is Now in PECL This means you can now install it easily by simply running: sudo pecl install ssdeep There is also proper documentation in the PHP manual which can be foun...
https://www.simonholywell.com/post/2010/09/php-ssdeep-in-pecl/
Per-tag RSS feeds for Tumblr from notes.husk.org I didn’t think that Tumblr offered per-tag RSS feeds, but after spending some time trying to hack the JSON output from the Tumblr API into my ag...
https://www.simonholywell.com/post/2010/09/per-tag-rss-feeds-for-tumblr/
php_ssdeep Fuzzy Hashing PHP Extension **Updated 16/9:**php_ssdeep is now in PECL so I have updated this post to reflect that. On a recent project I needed a fast way to compare documents for lik...
https://www.simonholywell.com/post/2010/08/php-ssdeep-fuzzy-hashing-php-extension/
wombert: Expendables Body Count - originally from termlifeinsurance.org/expendables-body-count
https://www.simonholywell.com/post/2010/08/wombert-expendables-body-count/
A project I am working on at the moment requires time delayed job queues and having found nothing yet that can manage it properly so I decided to wrap up `at` into a PHP class. This gives you sim...
https://www.simonholywell.com/post/2010/08/php-wrapper-for-linux-at-command/
Batch remove extensions in Ubuntu Sometimes you will want to batch remove extensions from a load of files: for i in $(ls *.png); do mv $i ${i%.png}; done If you want to remove extensions from fil...
https://www.simonholywell.com/post/2010/08/linux-batch-remove-extension/
If you just cannot get atd to start running check the permissions on your /var/spool/cron/atjobs and /var/spool/cron/atspool directories. The should be `chmod 770` and then `chmod +t`. Also they ...
https://www.simonholywell.com/post/2010/08/ubuntu-atd-not-running/
Getting gearman to install on Ubuntu Getting the gearman PHP PECL package to build on Ubuntu is problematic with many unaccounted for dependency issues. I only made a couple changes when followin...
https://www.simonholywell.com/post/2010/08/get-gearman-to-install-on-ubuntu/
My name is Simon Holywell and I am a Zend Certified PHP Developer with experience working for Web agencies, marketing companies and corporate IT in Australia and the United Kingdom. When I am not developing I can be found riding my motorbike, skateboarding or snowboarding.
https://www.simonholywell.com/post/2010/08/john-resig-tech4africa2010/
wombert: The World’s Best Countries
https://www.simonholywell.com/post/2010/08/wombert-the-worlds-best-countries/
A nice modern take on the original Stratos by Pininfarina set to be sent into production. Thankfully they preserved original rear end lights and lip spoiler. Not so sure about the headlights. hot...
https://www.simonholywell.com/post/2010/08/new-lancia-stratos-by-pininfarina/
Firefox with Radio Inputs and it’s Annoying Autocomplete I recently had problem with Firefox’s autocomplete when using a jQuery star rating plugin. The linked article explains the problem mor...
https://www.simonholywell.com/post/2010/08/firefox-radio-buttons/
This is a simple regular expression I wrote to convert the first letter of an article into a drop cap. It will surround the first letter with a span tag containing the class drop-cap. You can the...
https://www.simonholywell.com/post/2010/08/drop-cap-php-regex/
Updated: Back up Tumblr Blog and/or Disqus Comments A simple and somewhat dirty script for backing up Tumblr and/or Disqus via its API to an SQLite DB. It now handles backing up Disqus comments t...
https://www.simonholywell.com/post/2010/08/updated-tumblr-backup-php-now-disqus/
Backing up Tumblr blogs with PHP and SQLite I have knocked together a very simple and somewhat dirty PHP CLI script to download copies of an entire Tumblr blog through their API. I have imaginati...
https://www.simonholywell.com/post/2010/08/tumblr-backup-php/
My name is Simon Holywell and I am a Zend Certified PHP Developer with experience working for Web agencies, marketing companies and corporate IT in Australia and the United Kingdom. When I am not developing I can be found riding my motorbike, skateboarding or snowboarding.
https://www.simonholywell.com/post/2010/07/julian-assange-at-tedglobal-2010/
http://www.youtube.com/watch?v=0xwc54G2Ur8
https://www.simonholywell.com/post/2010/06/adenauer-forst-70s-crash-compilation/
How to make something impossible for someone to use without a manual. Have dials that rotate clockwise and anti-clockwise Put the final unit (1kWh) before all the other units just to confuse the ...
https://www.simonholywell.com/post/2010/06/electricity-meter/
My name is Simon Holywell and I am a Zend Certified PHP Developer with experience working for Web agencies, marketing companies and corporate IT in Australia and the United Kingdom. When I am not developing I can be found riding my motorbike, skateboarding or snowboarding.
https://www.simonholywell.com/post/2010/06/sainte-beaume-hill-norma-m20-climb/
spiriteddrive: Stratos / Delta (jameslipman)
https://www.simonholywell.com/post/2010/05/spiriteddrive-stratos-delta-jameslipman/
Pirelli Diablo Rosso Corsa Taking wank factor to a whole new level you can customise your new Diablo Rosso Corsa tyres with special stickers bought through the Pirelli website.
https://www.simonholywell.com/post/2010/05/pirelli-diablo-rosso-corsa/
My review of the HealTech GIpro w/ATRE motorcycle gear position indicator on webBikeWorld I recently wrote a review of the GIpro and it has now been published by webBikeWorld. Follow the link and...
https://www.simonholywell.com/post/2010/05/healtech-gi-pro-gear-indicator/
Seven stories up. Whoops.
https://www.simonholywell.com/post/2010/04/driver-misses-wall-death-parking/
When creating a dialogue with jQuery that contains a Datepicker text input the Datepicker calendar will appear below the dialogue due to the dialogue’s z-index being higher. The easiest u...
https://www.simonholywell.com/post/2010/04/jquery-ui-datepicker-in-dialogue/
Agavi: Agavi on the Azure Platform The next release of Agavi will have initial support for running applications on the Microsoft Windows Azure platform, as well as a database adapter for the new ...
https://www.simonholywell.com/post/2010/04/agavi-on-the-auzre-platform/
Plesk allows you to control settings for each domains virtual host container (subdomains are also configured in the same way). To override the default configuration you will need to make the new ...
https://www.simonholywell.com/post/2010/03/plesk-custom-config-files/
The Little Manual of API Design This manual gathers together the key insights into API design that were discovered through many years of software development on the Qt application development fra...
https://www.simonholywell.com/post/2010/02/the-little-manual-of-api-design/
You may have noticed that the Oracle logo has begun to appear across all the Sun websites, which is a visible indication that the Oracle buy out of Sun is now complete. In the spring of last year...
https://www.simonholywell.com/post/2010/02/sun-oracle-deal-closed/
During a reasonably long and fitting homage to Lancia (Fulvia, Montecarlo, 037 and Delta) on Top Gear last night “The Stig” was given a Hawk HF3000 (that is the Alfa V6 based one) replica to ...
https://www.simonholywell.com/post/2009/11/lancia-stratos-replica-fast-lap-on-top-gear-uk/
Attaching the population filter without using form IDs (suitable where the current form is on the same page as the URL in forms action parameter) getContext()->getRequest(...
https://www.simonholywell.com/post/2009/11/agavi-form-population-filter/
To get Netbeans to listen for browser initiated debug sessions please consider the following steps: Go to Project Properties > Run Configuration > Advanced > Debug URL and choose the Do not open ...
https://www.simonholywell.com/post/2009/11/netbeans-and-xdebug/
Bitextender backed Agavi is a very secure and helpful open source (LGPL) MVC framework with the core development being headed by David Zülke (Wombert) and Felix Gilcher (certainly in the IRC ch...
https://www.simonholywell.com/post/2009/11/agavi-php-framework-resources/
I worked on a project while ago that required the use of iFrames to create “AJAX” file uploads. It took me a little while but I finally worked out how to get the contents of an iFrame using j...
https://www.simonholywell.com/post/2009/10/jquery-and-iframes/
Opera has released a new version of their free mobile browser Mini for beta testing. Head on over to mini.opera.com to download it or if you are reading this from your mobile the direct link to t...
https://www.simonholywell.com/post/2009/10/opera-mini-5-beta/
JQuery is a fantastic tool but sometimes its functionality can be obscure or doing it one way might not work in a certain browser (MSIE6 anybody!). I have often found myself trying to remember th...
https://www.simonholywell.com/post/2009/08/jquery-using-and-manipulating-select-lists/
Most of our development is done on Vista desktops (although I also run Ubuntu of course) and we wanted a web interface for easy browsing of code so I needed to use a pervasive and well supported�...
https://www.simonholywell.com/post/2009/08/moving-to-git-and-setting-up-indefero-as-a-web-frontend/
I use most of these commands every day to simplify my terminal interactions with an Ubuntu development box. This is more of a personal reference but thought I would share incase you find it usefu...
https://www.simonholywell.com/post/2009/05/handy-linux-commands/
This is not a post about setting up Samba shares. If that is what you are looking for then I can recommend the following book; Using Samba: A File & Print Server for Linux, Unix & Mac OS X. Somet...
https://www.simonholywell.com/post/2009/04/samba-file-share-over-ssh-tunnel/
Memcached and APC are two tools that you can install on your server and gain almost instant gratification! APC basically caches executions that you send to a PHP process so that the next time yo...
https://www.simonholywell.com/post/2009/04/memcached-and-apc-two-simple-techniques-to-speed-up-your/
Installing APC on Debian or Ubuntu is as simple as: **user@server:/directory/$** sudo apt-get install php-apc Now let us reboot the Apache process to enable our new cache: **user@server:/director...
https://www.simonholywell.com/post/2009/04/installing-apc-and-memcached-for-php-sessions-on-ubuntu/
I have previously written about Haiku (formerly OpenBeOs) on my blog and I am pleased to say that I revisited this project last night and had a play with the latest nightly builds. It has moved ...
https://www.simonholywell.com/post/2009/04/haiku-os-progress/
As you may be aware I have recently been playing with the excellent Agavi framework and it introduced me to the interesting phing tool. Phing can be used to automate tasks with build files that ...
https://www.simonholywell.com/post/2009/03/using-phing-for-good-unfuddle-add-repository-and-svn-imp/
Installing APC on Redhat is as simple as: # yum install php-pecl-apc APC should now be ready to run on your server. Try running the following command to verify it is setup; you should get someth...
https://www.simonholywell.com/post/2009/03/installing-apc-and-memcached-for-php-sessions-on-redhat/
As you have found this page I am sure you have accidentally hit the control+s short cut whilst inside a PuTTY shell and following that no keystrokes appear to affect the session. Basically hittin...
https://www.simonholywell.com/post/2009/03/putty-and-control-s-or-ctrl-s/
The latest beta 2 release includes web workers, which are essentially threads allowing you to farm off Javascript heavy lifting to background processes so that the interface can continue to load ...
https://www.simonholywell.com/post/2009/03/firefox-3-1-has-web-workers-threading-and-geolocation/
So far I have tried out Ubuntu, eeeBuntu, EasyPeasy Linux and CrunchBang Linux (all of which are Debian based) on the Asus Eee PC. Ubuntu was a bit of an annoyance to get setup and it was troubl...
https://www.simonholywell.com/post/2009/03/crunchbang-linux-on-the-eee-pc/
A bit slow off the mark with this one but Agavi 1RC1 has been released and it is of course looking very nice. The 1.0 feature set is complete and potential bug fixes are the only things standing ...
https://www.simonholywell.com/post/2009/02/agavi-release-candidate-1/
Often Linux just does it better! Often I find myself developing a Windows machine without access to a Linux development server, but I still need to access to some of the Linux binaries and featu...
https://www.simonholywell.com/post/2009/02/a-good-windows-development-environment-and-ubuntu-virtua/
I really like the way the Apache modules and virtualhosts are seperated out on Debian into folders containing those, which are available and those which are enabled. There is one small problem wi...
https://www.simonholywell.com/post/2009/01/enabling-sites-and-modules-in-apache-on-ubuntu-or-debian/
Certificates are a useful way of restricting access to your SSH server because a user must have three things to log onto the server: Username Password Certificate Normally they would only need to...
https://www.simonholywell.com/post/2009/01/securing-ssh-with-key-based-authentication/
In the PHP development arena the LAMP (Linux, Apache, MySQL and PHP) stack is very common, but once in a while a client will come through the door with a Microsoft background. So what do you do i...
https://www.simonholywell.com/post/2009/01/linux-to-windows-server-migrating-and-securing-your-cron/
To install the new XAMPP ensure you firstly uninstall and remove your current XAMPP folder. Upgrades are not supported with this version due to the differences one of which is the removal of PHP4...
https://www.simonholywell.com/post/2009/01/agavi-1-0-beta-on-xampp-1-7-0/
It is clear from all usage reports that Twitter is definitely used by more people than the other services, but I am still not sure whether any of them are truly must have or useful. Rejaw and Jai...
https://www.simonholywell.com/post/2008/12/twitter-jaiku-rejaw-and-tumblr/
I never thought I would see one of these little one seater cars running around largely due to their obscene price tag (£27k+), but the other day in Auckland I did. This was a photo I quickly sna...
https://www.simonholywell.com/post/2008/12/carver-carver-one/
I am now in a permanent role at Mosaic in Brighton and I am not looking for employment opportunities. Just a short note to give you more detail on my return to the United Kingdom in December 2008...
https://www.simonholywell.com/post/2008/12/my-arrival-back-in-the-uk/
Recently I have been a fly-on-the-wall in an interesting discussion on the Auckland PHP User Group regarding the process of costing freelance work. So I thought I would toss my hat in the ring an...
https://www.simonholywell.com/post/2008/12/freelancers-costing-your-work/
It is difficult to use both the TinyMCE WYSIWYG and post formatted code. TinyMCE will attempt to cleanup your HTML and it will therefore remove any tags it does not recognise so your XML code wil...
https://www.simonholywell.com/post/2008/11/displaying-syntax-highlighted-code-in-wordpress/
I spotted this wonderful Italian rally car whilst I was on our Honeymoon and visiting Amsterdam. I am a big fan of the Lancia rally cars including the Fulvia pictured here, Stratos, 037, Delta S4...
https://www.simonholywell.com/post/2008/09/lancia-fulvia-hf/
I have been travelling around Europe for the last month or so and I have been completely out of reach. . It contains references to newline characters etc (n), which have been destroyed by the Wo...
Marion and I were wed with a lovely ceremony on the 26th of July at the Brighton Pavilion in Brighton, England. We are now travelling around western Europe and enjoying every moment of it even if...
Wordpress I have now moved my website over to WordPress; it is more widely supported than TextPattern and it has a regular release schedule.
https://www.simonholywell.com/post/2008/06/switched-to-wordpress/
UPDATED: I have written a new, more indepth, article on this subject here: Every now and then you end up having to de...
https://www.simonholywell.com/post/2008/06/windows-cron-jobs-using-schtasks-or-at/
Here are some hints for those of you that use a XAMPP install for testing your developments on your local machine. I am using a Windows machine running XP Pro and this is how I setup my VirtualHo...
https://www.simonholywell.com/post/2008/06/xampp-virtualhosts/
Having recently heard of the Agavi project from a web framework showdown at a PHP conference in the UK I have decided to trial it. My setup is a WinXP computer with a default install of the lates...
https://www.simonholywell.com/post/2008/05/installing-agavi-on-xampp-windows/
A few common PHP mistakes: Using require_once when a simple require would achieve the same result. Using require uses less system resources and therefore executes more quickly. You should enginee...
https://www.simonholywell.com/post/2008/05/php-common-mistakes/
Suzuki Bandit in the snow When I went away on holiday the other year I left my Bandit standing for about 3 weeks and it must of had a bad batch of fuel in the tank. The bad fuel turned into jelly...
https://www.simonholywell.com/post/2008/05/suzuki-bandit-carburettor-clean/
Vauxhall Astra For those you who possess an Astra from 1990-1998 the following hints might prove useful along with the more long winded description provided by the Vauxhall Astra (1991-98) Servic...
https://www.simonholywell.com/post/2008/05/vauxhall-astra-front-brakes/
I have recently been using the web from my mobile quite a bit. My email is hosted by Google for my domain name so I use their freely available mobile java app (with the blue icon) to view my mail...
Say you have a development environment setup using SQL Server 2005 Express Edition and your customer has a SQL Server 2000 database accessible only via ODBC and you can only run a DB import via a...
https://www.simonholywell.com/post/2008/04/sql-server-2005-dump-to-sql-statements/
Say you have a development environment setup using SQL Server 2005 Express Edition and your customer has a SQL Server 2000 database accessible only via ODBC and you can only run a DB import via a...
If you haven’t been riding through winter like me then take care getting back out there and wear good gear. Check all the essentials: Oil Water (if applicable) Tyre pressures and wear Chain ten...
https://www.simonholywell.com/post/2008/03/getting-back-on-the-bike/
Recently I produced a website for hosting on a Linux box running with PHP5 and MySQL5. Well it now needs to move over to a Windows 2003 server with MS SQL as the DB and IIS as opposed to Apache. ...
https://www.simonholywell.com/post/2008/03/mysql-to-ms-sql-sql-server/
I recently asked my girlfriend for her hand in marriage; she said yes! We are both very excited and have begun to make arrangements. No date has been set yet but we aim to walk down the aisle bef...
I have been a little slow to update my website of late due to a change of jobs and having recently moved house. I am now working for WickedWeb (and have been since July), which is a web agency in...
Here is a small script that I put together to grab the XML list from the ISO website and convert it into an SQL statement. The idea is that the script can be used to just obtain a list for web pr...
https://www.simonholywell.com/post/2007/08/iso-3166-country-list/
Just a few tips for fellow bikers who might be considering a move to the UK from Victoria. If you only have your L’s pass you test before you come so you can transfer your licence over. When yo...
https://www.simonholywell.com/post/2007/07/biking-to-the-uk/
Yeah I know I am not that quick off the mark posting this up, but I have been admiring it for days. The new Street Triple is running a slightly retuned version of the Daytona’s 675cc triple cyl...
https://www.simonholywell.com/post/2007/07/triumph-street-triple/
I am now based in London and I am working for a company called underwired* based near Farringdon train station. A few observations: The trains are slow, late, expensive and overcrowded Carrying a...
warning This library is now deprecated in favour of my new Navigator library. Please use it instead - its much better, tested and makes use of newer PHP features! Recently I have been involved wi...
https://www.simonholywell.com/post/2006/12/geographic-calculations-in-php/
I did not realise it but it has been almost 6 months since the last update to this website. So I guess I have been busier than I thought of late! Anyway I created a new design for the site and ad...
https://www.simonholywell.com/post/2006/12/wow-almost-six-months/
I recently had a server go offline, taking with it the DNS for my main email domain. I had long suspected this would be a major potential problem in the setup. When the server went down the DNS s...
https://www.simonholywell.com/post/2006/12/secondary-dns-for-free/
This goes straight onto the list of todos (http://www.ramonesmuseum.com/) just as soon as I get those tickets to Berlin! Awesome idea and congratulations to Florian for realising his dream! I onl...
I have been looking through my hosts logs of late and I have noticed an ever increasing amount of referrer spam. Now whilst this is of no real concern to me as I do not use referrer logs or displ...
https://www.simonholywell.com/post/2006/06/server-log-spamming/
Information below can be used to make remotes for Canon EOS SLR cameras. I built a time delay remote that allows me to take time-delay/interval photographs. Canon wired remote (DIY): http://www.c...
I have updated the sites backend code. Thought I would change the looks at the same time. So a nice simple new layout. Enjoy.
How does this tripe get 75% at rottentomatoes.com It was obvious from the very beginning that this was going to be a very ordinary movie. The references to the actions of Guy Fawkes were over sty...
These videos are fantastic: Average Homeboy Fight scene from Undefeatable Garbage Day
They lied to us then. They continue to lie to us now. They did not even bother to plan. They will continue to lie to us in the future. I need say no more.
A site that I have up called Alfa Romeo Sprint QV has recently been the target of malicious spammers and/or their robots. The messages mainly consisted of porn and poker sites. Now the script use...
https://www.simonholywell.com/post/2006/03/form-spam-not-ham/
I have been asked numerous times in the past how I create this effect in some forum signatures so now I am releasing the code so you can see. It could equally be used as a background image in CSS...
https://www.simonholywell.com/post/2006/03/flickering-images/
Pictures of Walls is a great site with some very interesting photos of walls (with graffiti).
https://www.simonholywell.com/post/2006/03/pictures-of-walls/
Well I would like to say it went smoothly, but… At least its all transferred over and backed up now. This new server should be faster as well as more reliable than the old one. I even managed t...
https://www.simonholywell.com/post/2006/03/server-migration/
I must preface this with a statement: I do not profess to be an expert on the English language. I am, in fact, quite sure you will find errors in this piece and the many others that I have and wi...
I have been setting up a mail server of which smtp is an integral part. I could access it through my old net connection at home and I can through work but I am currently staying somewhere with Op...
https://www.simonholywell.com/post/2005/12/optus-cable-port-25-smtp/
During a recent project I ended up using ADODB and found it very effective. Especially the wrapper it places around PHPs sessions, it stores them in the DB instead of in the temp directory, which...
As some of you will know I have finished uni and now work as php developer for Go4 Multimedia and as such I am currently between houses and I do not have regular access to the net where I am stay...
A very nice article: Keeping SSH access secure I use the following in /etc/ssh/sshd_config: AllowUsers username PermitRootLogin no Which kills root login access to the server meaning you will nee...
A great little addition to all Apache server installations. Install it via: apt-get install libapache2-mod-security Then create a symbolic link so that the mod is enabled: ln -s /etc/apache2/mods...
Some hints and tips for producing secure PHP code. Some tips are gems others are less so. http://securephp.damonkohler.com/
https://www.simonholywell.com/post/2005/10/an-interesting-php-site/
For a project I am working on at the moment we are using the CamTech Merchant Gateway. A handy note to all is that it will not function on anything but Java 1.4.x. Java 5 does not work.
https://www.simonholywell.com/post/2005/10/developing-with-camtech/
When headphones are mentioned I immediately start thinking about Grado, Beyer and AKG. Most people only make it as far as Sennheiser, which in my opinion is a shame. Sure they do make fantastic e...
A very interesting site created by a Macintosh team member, Andy Hertzfeld, with amusing stories about the hardware, software and people who created the first Macintosh computer. http://www.folkl...
https://www.simonholywell.com/post/2005/09/apple-macintosh-history/
http://workaround.org/articles/ispmail-sarge VPSs are nice but how do you host multiple domain email addresses? Well the above tutorial a fantastic guide on Debian Sarge. An item worthy of note i...
https://www.simonholywell.com/post/2005/08/virtual-mail-servers/
To begin with I am using Apache2 so this will not apply to Apache1.3. Apache2 uses an interesting technique for setting up Virtual Hosts, they are no longer stored in the huge httpd.conf file. Th...
https://www.simonholywell.com/post/2005/08/serving-virtual-hosts/
A very interesting article written by Richard B. Langley of the University of New Brunswick about GMT and UTC and how they dictate world time. Well worth a read if you have always wondered. GMT U...
Perfect Debian Setup is a very handy little article. One item of note however is that Debian Sarge doesn’t support PHP5 even in the unstable packages so you will need to use the following techn...
https://www.simonholywell.com/post/2005/08/setting-up-a-debian-sarge-server/
I have reverted back to Ritlabs The Bat email client having previously used Thunderbird. When I left The Bat its HTML support was very limited and this has now been rectified in this release. Giv...
The power supply unit in my Shuttle PC has died, which is really annoying as I need to be getting on with assignments. Ok so I can browse the web and check my email with the Linux box but the ass...
https://www.simonholywell.com/post/2005/07/pop-goes-the-psu/
There have been two recent cases of U.S. Military negligence when operating the Adobe Acrobat suite for creation of PDF files. One such incident ocurred in a report released from Iraq about an It...
https://www.simonholywell.com/post/2005/07/us-military-cannot-operate-adobe-acrobat/
The Optimus keyboard is a new idea many have been waiting for; a keyboard with a layout that changes depending upon its use. For example it can display the usual QWERTY keyboard in Word but just ...
https://www.simonholywell.com/post/2005/07/lebedev-optimus-keyboard/
Due to the reluctance of many hosts on the internet to update their server software I have decided that I will use my spare computer at home as a small server for testing my PHP5 scripts and so o...
https://www.simonholywell.com/post/2005/05/setting-up-a-world-visible-host-with-a-netcomm-nb1300-ad/
Toby is a wee rabbit who is going to be eaten unless his site creator is paid $50k USD in the next month. Fantastic little web legend if you ask me, please go and check SaveToby.com out for yours...
Strange name for the latest incarnation of a linux distribution, but then Ubuntu is a very different beast. First of all the best thing about Ubuntu is that initially you only need to download on...
https://www.simonholywell.com/post/2005/04/the-hoary-hedgehog/
If you don’t already know about this site then you have not been on the web in the last five years. It has become the biggest place to discuss Windows related news and problems. It now has a ve...
Quite simply the best player I have come across. It is lightweight and starts up exceptionally quickly and maintains a minimal footprint. It sounds great and the interface is nice and simple. Ski...
AMIP is a program that gets the currently playing song title from your music player and broadcasts it to your email client and MSN messenger among others. I now use it for my email signatures and...
https://www.simonholywell.com/post/2005/04/amip-song-title-server/
I have been using Konfabulator on my Windows machine for a little while and I am very impressed with it. I also tried out ObjectDesk but I didn’t feel it was as good. Konfabulator just works an...
Ever since I first saw Phill Eather’s Lancia Stratos at the Targa Tasmania race event when I was a kid I have wanted a one. They have classic styling that has not dated at all, well not much fo...
Most people use it as their instant messaging program of choice and it is the most fully featured and frequently updated one out there at the moment, at least of all the main stream programs out ...
Being reminded of my first encounter with the BeOS operating system by a housemate the other I thought I would take a look to see whatever happend to this great little multimedia OS. Whilst doing...
https://www.simonholywell.com/post/2005/04/haiku-osopenbeos-an-open-source-beos-clone/
Semester: 2 Group Work: No Mark: 94 A PHP forum with an Oracle backend. ass2_mms2802.zip
https://www.simonholywell.com/post/2004/10/mms2802-assignment-2/
Semester: 2 Group Work: No Mark: 80 A Flash image gallery that gets image data from a MySQL database. This web gallery was produced for the Universities web page. The interface colours and moveme...
https://www.simonholywell.com/post/2004/10/mms2402-dynamic-flash-web-gallery/
Semester: 2 Group Work: No Mark: 93 A Perl script for a simple forum providing threaded and unthreaded viewing styles of discussions from an Oracle database. ass1_mms2802.zip
https://www.simonholywell.com/post/2004/09/mms2802-assignment-1/
Semester: 1 Group Work: Yes Mark: 85 ColdFusion is used to connect to an Oracle database. ERD, DDS, schema and script files all included. This a sample traffic offence agency script. ass3_mms2801...
https://www.simonholywell.com/post/2004/06/mms2801-assignment-3/
Semester: 1 Group Work: No Mark: 89 A complete ERD, DSD, schema and Oracle insert files are inlcuded for a sample Auto-Rentals company. ar.zip
https://www.simonholywell.com/post/2004/05/mms2801-assignment-1-and-2/
Semester: 2 Group Work: No Mark: 84 Demonstrates recursion and the use of a TreeMap. GUI menus and custom gridlayout also used. It also uses binary output to write and open the values the user en...
https://www.simonholywell.com/post/2003/10/mms1803-assignment-2-and-3/
Semester: 2 Group Work: No Mark: 81 A Java memory test game. It functions much like a card matching game. ass1_2.zip
https://www.simonholywell.com/post/2003/09/mms1803-assignment-1/
Semester: 2 Group Work: Yes Mark: 85 This is an html css php mysql website that is aimed at demonstrating the ability to make an ecommerce site. Organics demo site - NO LONGER ONLINE :(
https://www.simonholywell.com/post/2003/09/mms1408-database-driven-site/
Semester: 2 Group Work: No Mark: 89 A pretty nice assignment task if you ask me and I coded it all myself in PHP MySQL. It also has entries added frequently. Blog demo site - NO LONGER ONLINE :(
Semester: 1 Group Work: No Mark: 79 A Flash website demonstrating mixing sounds and my current Flash skills. DJ FIGJAM demo site - NO LONGER ONLINE :(
https://www.simonholywell.com/post/2003/06/mms1402-djfigjam/
Semester: 1 Group Work: No Mark: 82 This is a Java assignment completed for OOP1. ass3.zip
https://www.simonholywell.com/post/2003/06/mms1802-assignment-3/
Semester: 1 Group Work: No Mark: 76 A Java Applet that reads and writes to a flatfile database. ass2.zip
https://www.simonholywell.com/post/2003/05/mms1802-assignment-2/
Semester: 1 Group Work: No Mark: 80 A number guessing game. Written as a Java applet. ass1.zip
https://www.simonholywell.com/post/2003/04/mms1802-assignment-1/