Want to work in our garage with us? We have devised a little test of your top-notch PHP skills which we ask everyone to take before interview.
Please follow the instructions below and send us your code once you’ve finished.
Our developer test
Working at 3ev
Stuck in some dull business park close to the M25 feeling that there’s more to life than this?
Well there is. Make the move to the south coast – work in a cool place (a converted garage to be true) with some real people for a variety set of impressive clients.
Snowboarding 2012
This year the trip’s to LAAX in Switzerland – famed for having the longest half pipe in Europe and host to the fabled “Brits” it is shaping up to be a year to beat all others. We’re off from the 24th Feb for 4 days – with this season’s snow looking better than ever, just can’t wait to get out there. Unlike last year we wont have to put up with Austrian Sauna policies – we’re staying at the uber cool Signina hotel. Lets just hope they’re fully stocked with the Jaegermeister.
Also – our crazy European friends from the TYPO3 community will be there – looking forward to sharing a few beers with some vikings and demonstrating our professionalism on and off the piste! #T3board12
TYPO3 and the filesystem
My post on TYPO3 in the cloud prompted an interesting tweet:
@danfrost so how do you propagate files without nfs??
I had mentioned that this was one of the stickier points, in my previous post and whether that’s what prompted this I don’t know but it is always an issue with CMS and blogging software. Every app saves stuff to the file system because… well, the file system is there just waiting to have images, PDFs and mp3s put on it.
TYPO3 in the cloud
We’ve been running TYPO3 on the cloud since AWS released their API and we’ve recently become Amazon Web Services Partners. Back then there was less support and training so we had the happy time of working out how to do this from scratch. And we did it.
If you want to know how to do this properly, talk to us about hosting TYPO3.
New brand and website for Leading Edge Design
3ev were given the task of not only designing and building Leading Edge Design‘s new website but also help develop their branding. The brief was to create a brand that was modern yet still familiar to existing clients. The colours and icon were an evolution of the existing logo whilst a new typographical style was introduced. Overall the form of the logo is now easier to work with.
How we built Singup.org
Below is a visualisation of the nerdy, day-to-day activity we’ve had over the past couple of months on the singup.org Git repository.
What the font!
The majority of designers are pretty good at recognising fonts but, like the rest of us, they do have limits and can’t remember every typeface created by every foundry since the Gutenberg press. Thankfully WhatTheFont! by MyFonts can help with any typographical recognition; just upload an image with the font that you’re trying to identify and WhatTheFont! finds the best match. Think of it as Shazam of typography.
Zend_Feed and changing the date
Just a quick note that will hopefully save someone a bit of time in the future…
When using Zend_Feed to create your RSS, don’t use:
pubDate => date('r', $item->timestamp)
This doesn’t work as you’d expect. You’ll only ever get the current time. If you want to change the date and time use:
latestDate => $item->timestamp
Zend_Feed expects a plain timestamp, not a RFC-822 format date (Fri, 09 Jul 2010 22:20:00 GMT). Why it takes the key as latestDate but outputs pubDate is beyond me…
Cache Reminder
Things not appearing as they should when you know you’ve made changes to a website? Usually this is down to caching and some browsers (I’m looking at you Internet Explorer) are particularly stubborn when it comes to clearing the cache. To help, I made this little poster to remind myself how to correctly rectify this annoying problem.
Our new business cards
As 3ev works with predominantly digital mediums it’s always a treat to do some work for print. It was exciting for me not only to design the cards but also to do some research into materials and finishes. The cards were foil blocked with matte white on GF Smith 540gsm Black Colourplan board. We’re all very pleased with the results and can’t thank Four Corners Print enough for doing such a good job.
Lumps of Metal
I’ve just finished another article for Linux Magazine on good server design for the cloud.
Cloud computing is amazing, everyone is talking about it and it will take over the world. One day it will actually be possible to use the cloud to convert your DNA into a Microsoft Tag. Maybe.
Unwire your instance
When deploying on the cloud, you have to make sure you are not tied to your machine because at any point it might not be there anymore.
One solution to this would be to bundle an AMI (Amazon machine image), but then this ties you to the region your AMI is in (Us / Eu) and also to the architecture it’s been built for, so if you were gonna take that route, for high flexibility you’d have to bundle the following AMIs: 32bit US, 32bit EU, 64bit US, 64bit EU
And even that doesn’t solve everything, because when a new distribution of your operating system comes out, you’d have to rebundle.
Also you have to take into consideration the ever-changing demands of clients and security patches applied to various software you’re using. These will all trigger a rebundle if you were gonna stay up to date.
It seems AMIs defeat the dynamic nature of the cloud.
We’ve been doing 100% of our hosting on EC2 for the past 2 years, and we’ve learned the best way to go is to run on vanilla instances that get customised on startup.
Running on vanilla instances has quite a few benefits over running from a bundled image: high availability (you’re not tied to a specific region), high flexibility (you can run either 32bit machines or 64bit, at any time) and the software you’re running is always up to date, just to name a few.
This does come at a cost though, it will take longer for your instances to start, as everything will have to be installed before they’re ready to use. On average, we’ve seen times between 5 and 10 minutes until an instance is ready, that includes startup time, software installation and software configuration.
When it comes to software configuration, if you’re using Amazon’s elastic block store (or persistent storage) to hold your applications, you could store your configuration there as well. This way when you start an instance and attach the EBS volume to it, all you have to do is symlink the configuration into place.
We used this way of configuring for quite a while, and our directory structure looked something like (relative to the EBS path):
.config/ apache2.conf php.ini eaccelerator.ini
We would then simply symlink `.config/apache2.conf` into `/etc/apache2/conf.d/`, but this meant that whenever we added new configuration files, we would have to change our startup script to symlink the new configuration.
We soon realised that even though this is an “ok” solution, it wasn’t really flexible.
As we’re currently in the process of moving part of our hosting onto Scalr, we also built “tool to be named here”, which handles software installation and configuration as well as application installation and configuration for us.
This time around, we’ve done configuration similar to how Debian packages get installed, map the file system root into a directory, then copy everything underneath into place.
An example configuration structure might look like this:
config/
etc/php5/
apache2/conf.d/eaccelerator.ini
conf.d/suhosin.ini
Once the instance is started and everything is installed, our setup tool then looks into the “config” directory (which is bundled with the setup tool as a Debian package, so our instances are always running the latest version), and then it copies everything into place.
Since the everything under the “config” directory has the same structure as “/”, we don’t need to worry about paths, everything goes where it should (we check this assumption before we package though).
Here’s the part of the setup tool that puts configuration into place:
for config in `find $ROLE_PATH/$type/config -type f`; do
TARGET_CONFIG=${config/#$ROLE_PATH/$type/config/}
mkdir -p ${TARGET_CONFIG/`basename $TARGET_CONFIG`/}
echo "Installing configuration: $TARGET_CONFIG"
$config > $TARGET_CONFIG
if [[ $? -ne 0 ]]; then
echo "$config failed"
exit 2
fi
done
“$ROLE_PATH/$type/config” would actually look something like: “/usr/local/3ev/server/roles/web/config”, we’ll talk more in depth about how this all works in a future blog post.
You will notice on line 6 that we actually call the configuration file as a script and its output goes into where the config file should be, instead of just copying it over.
That’s because the config file looks like this (eaccelerator.ini):
#!/bin/bash
cat <<-config
zend_extension="`php -i | grep extension_dir | awk '{ print $3 }'`/eaccelerator.so"
eaccelerator.shm_size="16"
eaccelerator.cache_dir="/tmp/eaccelerator"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="0"
eaccelerator.shm_prune_period="0"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"
config
Commuting in Brighton
Brighton is a fantastic place to live and as the weather gets warmer you see more people commuting to work on all sorts of transportation devices (bicycles being the most popular). The 3ev studio is in an ideal location; a short walk to the beach and a little bit longer walk to the centre of town. This means that my favoured mode of transport (skateboard) is perfect for the daily commute, I go down a couple of hills then I’m on the seafront and within 15 minutes I’m at the studio.
For anyone that’s interested my daily ride is a Cosmic board with ACE trucks (great turning and lighter than Independent), Powell Peralta All-Terrain 56mm Wheels (nice and soft) and NMB bearings.
If you were a typeface, which one would you be?
Grafik magazine is one of my favourite monthly reads and I can not endorse it enough. This months Viewpoint asked the question “if you were a typeface, which one would you be?”, my favourite was from Erik Brandt of Typografika;
How could anyone want to be a typeface? I’d sooner be a prostitute. To be sold. Copyrighted, then stretched, stolen, abused, perhaps caressed by the occasional master. This is no way to live, but if pushed, I’d be Bodoni, a curvy Renaissance temptress.
Brilliant!
WCAG 2.0 Contrast tools
One of the challenges of modern web design is ensuring that the colours used are WCAG 2.0 contrast compliant. Although there are sites that automatically check a URL for WCAG 2.0 contrast compliance they’re not really that useful for the design process. Here are a couple of useful tools that we use on our projects.








