#guide
2026
- Making GIMP feel less like punishment
GIMP has always had an interface problem. I’m not blaming the GIMP team (they’ve built something powerful on a shoestring). They’ve been clear they’re not interested in copying Photoshop wholesale; their FAQ argues that designing around actual user research beats imitating someone else’s interface decisions. Fair enough in principle, but coming from years as a Photoshop user, that design still feels hostile to me. I’m just one user story out of many they’ve had to design for, but it still expects me to learn its own way of doing things rather than offering a config closer to what I’m used to out of the box.
- Running a Tailscale exit node in a local VM
I run Tailscale on my laptops, phone and NAS, and wanted to add an exit node so I could route traffic through my own connection when I’m out and about. The obvious place to put it was the NAS, since it’s already always on, but the NAS also holds everything I’d least like exposed if something went wrong. Making it double up as an exit node, with every device’s outbound traffic flowing through it, didn’t sit right. What I wanted instead was a disposable, isolated VM living on the same machine doing that job, leaving the NAS untouched.
- Merge Commits Are Just Noise
Run git log --graph on most team projects and you’ll see the problem. Parallel lines everywhere, merge commits that just say “Merge branch ‘feature/x’ into develop”. None of it useful. It’s noise. I’ve been using a rebase-based workflow for years to avoid this. The history stays linear and the diffs stay readable. This post covers both the argument and the specific branch structure I use for team feature work.
- Pulling Google Takeout straight to a NAS
I’ve been having a bit of a think about data I’ve left entirely in someone else’s hands. Specifically Google Photos, which has photos going back to 2011 and no local copy anywhere. I’m not going anywhere dramatic with it, but having a backup I actually control felt overdue.
- Reducing commit log noise caused by a GitHub Action
I have a “now playing” widget on my /now page that shows the last track scrobbled to Last.fm. It’s powered by a GitHub Actions workflow that polls the Last.fm API every hour and commits the result to the repo. It worked fine, but quietly polluted my commit history.
- Building a Home NAS from Mostly Spare Parts
I’ve had a SNUNMU GK3 mini-PC kicking about since early-2023, barely used. An impulse buy that ended up on a shelf, alongside a drawer full of old drives from various machines and NAS attempts that never quite came together. Picking up a 5-bay USB enclosure finally gave me a reason to use all of it. It’s not polished and it’s not redundant, but it’s simple, flexible, and entirely under my control.
- Downgrading the OnePlus 7 Pro for LineageOS
I’ve had a OnePlus 7 Pro sitting in a drawer for a couple of years. I used it from 2019, found it too big, got a Pixel 5, and now I’m on the Pixel 7a. The usual thing, fiddling with an old gadget that’s been kicking about doing nothing. It’s a nice phone with nice features. Shame it’s stuck on such an old version of Android. Time to get LineageOS on there.
- Installing Android on the Nintendo Switch
A banned Switch sitting on a shelf is prime hardware for Android. Turns out the Tegra X1 that powered Breath of the Wild runs a full Android OS surprisingly well.
- Moving to GitHub Actions (and adding .txt posts)
This year I moved the blog from GitHub Pages’ built-in Jekyll to a GitHub Actions workflow, then added .txt URL support for posts. Inspired by Terence Eden’s blog post about text-only websites.
2025
- Exploring OTA firmware updates on the Mangmi Air X
After reviewing the Mangmi Air X, I got curious about how the firmware updates worked. Mangmi have been pushing updates fairly regularly, which is great to see on a budget device. Officially they release full update packages via Google Drive links, but those have a tendency to disappear over time. I wanted to access the OTA update packages directly and back them up to archive.org alongside the original firmware.
- Replacing the macOS audio switcher with SwiftBar
The built-in audio output menu in macOS has always felt a bit limited. The icons aren’t very helpful, the device names can’t be customised, and if you’ve got a few different outputs, it becomes tricky to quickly tell what’s what.
2023
- The Movies I Watched in 2022
Through 2022 I kept track of most the movies I watched. In this post I’ll talk about how I took that data and, combined with the OMDb API, used the data with Jekyll.
2022
- Using a Raspberry Pi to Host a local Visual Studio Code Server
I tend to work on this blog from multiple machines in my home. These include a desktop PC running Windows, a MacBook Pro running macOS, and a Chromebook with the Linux environment enabled. Across all of these machines I primarily use Visual Studio Code.
- A Bit of a Bodge To Make MASSIVE Emoji
I’ve been fiddling with an instance of Known over on social.omgmog.net. As part of my fiddling I’ve been trying out some of the plugins for Known. I came across the “Render Emoji Unicode” plugin but it was using an old library, and referencing an old version of Twemoji, so I updated it to use the latest Twemoji library.
- Installing Chrome OS on a Late 2009 MacBook
I’ve got an old 2009 MacBook 6,1 (A1342) kicking about in my office that I’ve been playing with on and off lately.
- Adding support for Webmentions
I’ve added Webmention support to the posts on this blog. Webmentions are a method for websites to know that they’ve been linked to (or mentioned) from elsewhere on the web.
2021
- Adding an internal speaker to the Pocket CHIP
The Pocket CHIP doesn’t come with internal speakers. It has the GPIO pins for audio, but nothing is hooked up. On the CHIP itself there is a 3.5mm audio jack for connecting headphones, and you can pair a Bluetooth speaker. On the old NTC blog there was a post back in 2016 about adding an internal speaker using a fairly inexpensive PAM8403 amplifier and a speaker. You can find a mirror of the old post from the NTC blog on archive.org
- Adding Global Volume Control to the Pocket CHIP
I’ve been gradually adding internal speakers to each of my Pocket CHIPs lately and found it cumbersome to have to either open alsamixer or use the volume control page in the Pocket CHIP launcher to control volume.
- The Raspberry Pi Pico and the Pimoroni Pico RGB Keypad
In January the Raspberry Pi Pico was announced. The Pico is a RP2040 microcontroller featuring a dual-core Arm Cortex-M0+ processor with 264KB internal RAM and support for up to 16MB of off-chip Flash. It’s comparable to certain Arduino or ESP32 boards and at less than £4 per board it’s a well-priced alternative.
- CHIP Stuff
This page is a changing document. I’ll probably add more notes to it in the future. These are just some notes that I’ve put together in the past about flashing and upgrading the CHIP (and Pocket CHIP) computer.
- Using ORCA with FluidSynth on the Pocket CHIP
This post is about using the ORCA livecoding playground on the Pocket CHIP From the ORCA wiki: Orca is a two-dimensional esoteric programming language in which every letter of the alphabet is an operator, where lowercase letters operate on bang, uppercase letters operate each frame. This livecoding language is designed to procedurally generate MIDI, UDP or OSC messages.
2019
- Installing Ubuntu on MacBookPro 8,2
This MacbookPro8,2 has been through a lot. I did some small upgrades back in 2012, then in 2014 it experienced some issues with the dedicated GPU that many Macbook’s of this model experienced. For a while I managed to keep it running my forcefully disabling the dedicated GPU with some EFI trickery, and running some form of Linux for a while (I think I kept it going with Elementary OS). In 2016 (or there abouts) I took the drastic measure of baking the mainboard in the oven to fix the dedicated GPU issue (by reflowing/reballing the solder), reinstalled macOS and then (besides a short stint as my wife’s computer) the MacBookPro8,2 ended up back on a shelf. until today! out of boredom I’ve decided to revisit this old beast. Installing Ubuntu on my old early-2011 MacBookPro8,2 Install rEFInd - https://www.rodsbooks.com/refind/ Create a Ubuntu USB (I used Rufus on my Windows PC, with the Ubuntu 18.04.2 iso) Boot the iso (hold alt key to get the rEFInd menu, select the USB) And this is where the first headache is. To make Ubuntu play nicely, you need to edit the boot commands so that certain chipset features are poked and enabled. At the Ubuntu boot menu, select the option you want (e.g. Live installer) and press e, which will bring you to the editor. First disable the AMD graphics card by adding the following lines after set gfxpayload=keep outb 0x728 1 outb 0x710 2 outb 0x740 2 outb 0x750 0 Next add the following after quiet splash on the boot command: i915.lvds_channel_mode=2 i915.modeset=1 i915.lvds_use_ssc=0 Then press F10 to boot, and you should successfully boot to the Ubuntu installer. From here you can install Ubuntu. You can delete the macOS partitions if you like, just make sure you keep the ~200mb EFI partition, and create your Ubuntu partitions after that. You’ll need to do this again for your first boot after you’ve got Ubuntu installed, and then you can edit your Grub file permenantly using grub-customizer or something.
- Pico-8 on the Raspberry Pi with Game HAT
I’ve been playing with Pico-8 a lot lately. I’ve got a small Pico-8 project site to launch soon, but in the mean time I’m more occupied with getting Pico-8 running on things.
2018
- Some Notes About Android Virtual Devices
Running AVD emulator from the Windows command line/Powershell/mingw32 This assumes you’ve got Android Studio installed. First you need to have the tools path in your $PATH variable, to do this edit Path in Windows’ Environment variables to include for example: C:\Users\Max\AppData\Local\Android\Sdk\tools Then you can use emulator.exe from anywhere. The Android Studio docs fail to mention this. $ emulator -no-boot-anim -accel auto -writable-system -no-snapshot -gpu host -avd K10_API_22 Installing Google Play Services I’ve been messing around with older device profiles, and trying to run things in Chrome on Android 5.0 (API level 21). You’ll need to sideload the Google Play services system APKs (from a gapps package for your target system, e.g. for Android 5.0, but you might find that the /system partition is full. No problem, you can sideload to /sdcard and symlink: $ adb remount # Fails... $ adb push .\GmsCore.apk /system/priv-app $ adb: error: failed to copy '.\GmsCore.apk' to '/system/priv-app/GmsCore.apk': No space left on device # Works... $ adb push .\GmsCore.apk /sdcard/system/priv-app $ adb push .\GoogleLoginService.apk /sdcard/system/priv-app $ adb push .\GoogleServicesFramework.apk /sdcard/system/priv-app $ adb push .\Phonesky.apk /sdcard/system/priv-app # Symlink them $ adb shell ln -s /sdcard/system/priv-app/GmsCore.apk /system/priv-app/GmsCore.apk $ adb shell ln -s /sdcard/system/priv-app/GoogleLoginService.apk /system/priv-app/GoogleLoginService.apk $ adb shell ln -s /sdcard/system/priv-app/GoogleServicesFramework.apk /system/priv-app/GoogleServicesFramework.apk $ adb shell ln -s /sdcard/system/priv-app/Phonesky.apk /system/priv-app/Phonesky.apk $ adb shell stop $ adb shell start Messing around with /etc/hosts It’s trivial to edit the /etc/hosts on your AVD, but it only works if you have blank new line at the end of the hosts file. $ adb pull /etc/hosts hosts $ nano hosts # make your changes to the hosts file locally... $ adb push hosts /etc/hosts
2017
- VPN Connection Indication on Windows
As of tomorrow I’m going to be switching to working remotely. Same job, just from the comfort of my home office (and without 2-3 hours of commute daily!). With this change I figure I’ll have about 8-10 hours of extra time per week to work on things.
- Enabling Google Daydream Support on OnePlus 3T
I enabled Google Daydream support on my OnePlus 3T today and I’m pretty impressed.
2016
- Upgrading to El Capitan with an old installer
I upgrade my Macbook to El Capitan as soon as I could, and have had very few issues with the release. On my iMac at work though, I’ve been putting off the upgrade since last October – due to time constraints and not wanting to mess anything in my dev environment up. Today I tried to install El Capitan using the Install OS X El Capitan.app installer.
- Getting to know @for, @each and @while in Sass
I use Sass every day, both professionally and in my side projects. One thing that never seems to stick in my mind though is the correct way to use @for, @each or @while. I’m writing this up here for some cathartic release, and hopefully to be of use to somebody else.
2015
- Downgrading Nexus 5 from Android 6.0 to Android 5.1.1
I jumped on Android 6.0 Marshmallow as soon as the developer images were available to flash, and to be honest as far as “major releases” go, it was pretty underwhelming. A lot of the new features aren’t things I need, and I’ve found myself running in to a bug with device orientation in Chrome (only!) not working.
- UX in Virtual Reality
I’ve been trying to find resources on the subject of User Experience and User Interface design in Virtual Reality a lot lately, as I’m thinking about Google Cardboard, and preparing demos for a talk about using JavaScript to build Google Cardboard experiences.
- Getting Notified when a process is using 100% CPU on Mac OS X
Lately I’ve noticed node.js occasionally spawning a process that’s using 100% CPU. When this happens, the battery on my MacBook quickly drains.
- Launching Sketch Toolbox from inside Sketch
I’ve been making use of Sketch a lot lately. One of the coolest features of Sketch is it’s plugin support. I’m using a tool called Sketch Toolbox to manage plugins in Sketch – this functions a lot like Package Control for Sublime Text, but it’s a stand-alone application.
- Extract the first image from a post in Jekyll
I decided that I want to show an image next to posts in my “article list” type pages in Jekyll. It would be tedious to go through each post and add a piece of Yaml frontmatter to indicate a “post image” (even though I had this at one point in the past!), so how could I automate this?
- Creating an icon font
I’ve recently been doing a lot of working designing an icon font that works well at small sizes for my day job. Here’s an overview of the process I’m using to go from a doodle on paper, to a functional icon font that can be used in most web browsers.
- Maintaining updates for a bunch of WordPress sites with Google Spreadsheets
Here’s a useful trick I’ve come up with, to maintain a list of WordPress installations and easily see if they’re up to date.
- Creating 'Material Design' shadows in Photoshop
Somebody over on Designer News asked how to re-create the various z-height shadow effects from Google’s Material Design in Photoshop.
2014
- So you want to organise a hack day?
These are based on my experience of organising SusHack in 2013 and 2014. For more information about SusHack, check out https://sushack.github.io
- Better link underlines with Sass
There has been some talk lately about how iOS 8 has started to handle typography descenders when text is underlined. They’ve done away with the usual overlapping line intersect in favour of a more aesthetically pleasing line crop.
- Some approaches for creating diagonal section separators for your website
In their simplest form, web pages are made of stacked rectangles. Every block-level element takes up as much vertical space as the content requires, and fills as much horizontal space as is available. Additionally, block-level elements can have their width/height specified. When you have absolutely positioned, or floated elements this changes a bit but the rule pretty much sticks.
- Making suspend on lid-close work with Arch Linux on the HP Chromebook 11
The more time that I spend using Arch Linux on my HP Chromebook 11, the more things I find to tweak and tinker with. The latest thing I’ve addressed is making suspend work when the lid is closed. After speaking to my resident Arch guru about it, he pointed me to a blog post that he wrote on the subject, before actually showing me how to make it work.
- Using the Zed editor with Arch Linux ARM on your Chromebook
I’ve been using Arch Linux on my HP Chromebook 11 for a little while now. One of the problems I’ve had with the setup has been that Sublime Text is not available for the ARM architecture.
- Compressing PDF files from your Mac or Linux terminal with Ghostscript
I arrived at this solution recently when looking to compress a massive print-quality PDF for the web. If you search for “compressing pdf files on mac” you’ll get lots of bad results. There are lots of paid applications out there that claim to be able to do this, but they’re (obviously) not free.
- Using "jekyll-redirect-from" with GitHub Pages
Last week GitHub finally added support for some useful plugins to their implementation of Jekyll used for GitHub Pages. The most notable of these is the support for the jekyll-redirect-from plugin.
- Jekyll for dummies
2014 has been heralded as “the year of flat-file websites”. This blog in fact uses Jekyll to generate the very blog post you are reading. I’ve been using Jekyll in some form since early 2012, and for me it works perfectly as a means to publish content.
- Installing Arch Linux ARM on the HP Chromebook 11
I concluded in my previous post about the HP Chromebook 11 that it’s a good device for casually browsing the internet, but it’s no replacement for a regular laptop or desktop for getting stuff done. Since that post I’ve not used the Chromebook very much, so with a vacant weekend I’ve decided to blow the dust off of the Chromebook and try to squeeze some more functionality out of it.
- Getting started with using Sass in your existing website
Sass is a CSS-compatible preprocessor for CSS. It allows you to reduce the amount of duplication and complexity in your CSS by using variables, mixins (functions), nesting, and other cool things that should have existed in the CSS spec from the beginning.
2013
- Migrating from Outlook .pst to mbox and then uploading to an IMAP mail server
Microsoft Outlook uses a stupid/proprietary format to store mail locally. This is the burden I had to deal with recently while attempting to rescue mail from a friends dying computer.
- Adventures in IMAP: Migrating lots of mail to Atmail
Besides my day job as a front-end developer at 2degrees, I run my own web design company with my partner, called Marmalade & Jam. When launching Marmalade & Jam, I decided to go with 123-reg as I needed a quick way to get everything up and running, and at the time they seemed like a good deal.
- Making Postgres work nicely on OS X Mountain Lion
Postgres on OS X has been a pain in the ass for as long as I have had to use it. To start with, the version that comes with OS X is old, so I’ve always had to replace it with a better version.
- Adding support for <!-- more --> tag to Jekyll without plugins
Here’s a quick tip for an approach I’ve started using to split post content at a given point for displaying in an archive page, without using a plugin.
- Awesome Bash arrays
Just some examples of how to do things with Bash arrays, and their analogous examples in Javascript.
- Converting SVG to PNG online and in your terminal
This post is mostly for my own benefit on the rare occasion that I have to convert SVG files to PNG. I always spend a large amount of time looking for an online SVG to PNG converter or a terminal one-liner to do this.
- Removing the Blackberry Desktop Software for Mac without having to re-download a 70mb installer from Blackberry
If you happen to have installed the Blackberry Desktop Software and you want to remove it and it’s annoying persistant daemons, you might have discovered that this can only be done by downloading the 70mb installer dmg, and running the uninstaller.
- Fluid video embeds for your responsive website
Recently I came across an interesting problem, fluidly scaling iframe/embed code on a responsive design. The problem surfaced because I was using a fluid width and a fixed height for my video embed, and so at some screen sizes the video would look fine, and at others it would have some black banding at the edges.
- Factory resetting a Nokia N900 from Mac OS X Mountain Lion
I had a Nokia N900 when they first came out, this was unfortunately shortly before Android had matured to a usable state, and so I didn’t use my Nokia N900 for long.
2012
- The woes of trailing commas in IE
If you leave a trailing comma in your JavaScript code, you’re a terrible person. It’s right up there with omitting semicolons as far as I’m concerned.
- Ubuntu (native) on the Nexus 7
Last week, a Ubuntu native installer for the Nexus 7 was released, along with instructions on how to install Ubuntu on the Nexus 7. The plan is that the Nexus 7 will be the ‘core’ device that Canonical will build their tablet version of Ubuntu around. Right now, it’s quite experimental – the interface sees no tweaks for the tablet interface, beyond having an onscreen keyboard available.
- A simple 'stacked paper sheets' effect with CSS3
This is just a short post about an unobtrusive CSS3 effect that I”ve used on some projects lately. Using the ::before and ::after CSS pseudo elements and some CSS3 styles you can make a simple HTML element look like a stack of paper sheets.
- Installing MySQL on OS X Mountain Lion
I was having some issues getting MySQL installed on OS X 10.8 Mountain Lion, and then I came across a useful article describing how to do it.
- Making HTML5 input placeholder text behave in Safari
Making assumptions during web development is never a good idea – especially if your assumptions are about the way a new feature will behave across modern browsers. This is an issue because of two things:
- Getting to grips with git log
git is a powerful tool. After using it for the past couple of years I’m still finding new/powerful things that can be done with it.
- Saving your CSS changes in the Google Chrome inspector
In the process of rapid prototyping and trying out new CSS styles I often find myself making changes to styles within the inspector in Google Chrome. This works quite well, but I’ve always had a process like the following:
- Dealing with crappy memory management in OS X
Using a lot of memory-intensive programs throughout the day, such as Virtualbox virtual machines, Photoshop and numerous browsers each with a couple of handfuls of tabs, you come to realise how bad the memory management in Mac OS X is.
- Using jQuery to create a custom thumbnail for an embedded video
Recently Jenny asked me for a way to embed a YouTube video with a custom thumbnail that would play the video when clicked.
- A possible solution to 'bad interpreter: operation not permitted' error on Mac OS X Lion
Out of the blue I started having an issue in my Terminal.app on Lion where downloaded scripts/applications wouldn’t run. I first noticed this when trying to setup the Android SDK.
- Video integration with Jekyll
Adding some functionality to Jekyll to allow integration of YouTube videos is a pretty easy task. First we need a couple of things: A nice video hosted on YouTube The embed code for the video A Jekyll theme that supports video embedding
- Upgrading my Macbook Pro
I’ve had my Macbook Pro for about a year now. It’s the Early-2011 15” bells and whistles model. The specs (the bits we care about, if you can’t be bothered to click the link) are as follows: CPU: 2.2ghz Core i7 RAM: 4gb (2x2gb) DDR3 HDD: 750gb
- Updates to my 'install all firefox' bash script for Mac OS X
I wrote briefly about my install-all-firefox shell script back in December last year. Since then the script has received a complete rewrite, and some new features.
- Adding more post metadata to Jekyll with YAML
NB: This flurry of content might be shortlived, but for now I’m excited to be posting again so shush! Jekyll, as it turns out, is a really nice blogging platform static site generator. One of the nice things about it is the flexibility. In my current Jekyll set up I’ve added metadata to the YAML for posts, so that I can optionally define a post cover (or image, if you’d prefer) and a width for the cover.
- On migrating from Tumblr to Jekyll Bootstrap
I’ve been toying with the idea of moving away from Tumblr for a long time now, having had my own share of problems with Tumblr downtime.
- Synchronising your Sublime Text 2 preferences with Dropbox
I use Sublime Text 2 both at work and at home, and it’s hard to manually keep my settings/packages in sync.
2011
- prev/next to left/right arrow key bind userscript
This is a userscript for Google Chrome (it might work with Firefox/Greasemonkey but I haven’t tested). It binds the left/right keys to click on prev/next links.
- Grooveshark view-modes userscript for Fluidapp/Chrome/GreaseMonkey
I’ve created a userscript to give the Grooveshark website some view modes. This is specifically for use with Fluid, but I imagine it would work okay with Chrome/etc too. More information about the userscript/setup after the break!
2010
- A simple solution for a jQuery animation loop memory leak
I’m probably stating something very obvious to everybody, but this is something that caused me a couple of hours of confusion. When creating a new slightly-fancier page to be displayed on omgmog.net I had a problem in that after a certain amount of time the browser would become unresponsive (or in Google Chrome the page would die - but I love how Google Chrome handles this). The problem I soon realised was in my animation loop. I’ve got a couple of lines of jQuery that move some elements on the page around randomly, to give a floating effect. The original code was as follows: $("h1 span").not("#h1p3").everyTime(0,function(){ $(this).animate({'margin-left':rand_no(),'margin-top':rand_no()}); }); It turns out the problem with this code is that the animation was looping before it had completed, so the browser presumably is stacking up all of these $().animate(); functions, which in turn caused the browser to become unresponsive. To remedy this, I specified a time for the $().animation(); function, and set the $().everyTime(); timeout to slightly longer than this: $("h1 span").not("#h1p3").everyTime(500,function(){ $(this).animate({'margin-left':rand_no(),'margin-top':rand_no()},490); }); With these small changes in place, it seems my problem is solved! I don’t have any “lessons learned” speech to close the post with, it’s just something that I found interesting :)
- Using Greasemonkey scripts with Google Chrome
This isn’t new news, but it’s something I’ve found quite useful. You can use userscripts created for Firefox/Greasemonkey in Google Chrome. Many of the scripts that you can find over on userscripts.org can be used effortlessly by Google Chrome, and once installed can be disabled/uninstalled from the Extensions tab.
- Upgrading Mac OS X Snow Leopard on the Dell Inspiron 1525 to 10.6.4
In this part of the guide, I’ll be covering upgrading to 10.6.4. You can read the first part of this guide here - Installing Mac OS X Snow Leopard on the Dell Inspiron 1525
- Installing Mac OS X Snow Leopard on the Dell Inspiron 1525
This is an update to my previous guide. I’ve since changed platform for my site — and even changed computers — but there is enough interest in this guide to warrant a re-write, so here we go. I’m going to be walking you through installing Mac OS X Snow Leopard 10.6.4 on your Dell Inspiron 1525. The configuration of your Inspiron 1525 might differ from mine, but generally most of the hardware will be the same.
- Using jQuery to supply and clear default input values
This is a repost of a solution I provided over at the smashing magazine forums. I’m posting it here as it’s a pretty useful solution in itself. The original question is as follows: I’m building a new website and on this one page I need to use a huge form, instead of using labels I want to enter the “label” text in the value attribute and then use JS to clear the field on mouseclick. The problem is that every field needs to be filled out. I don’t want users hitting the submit button with some of the standard values still in place (easy to miss certain stuff) because this will mess things up. I can ofcourse check for empty fields but to do this I need to somehow check if all the fields have been changed on form submit. So I whipped up a quick implementation of how I would do it using jQuery.
2009
- Installing OS X Snow Leopard on the Dell Inspiron 1525
I’ve had a Dell Inspiron 1525 for about 18 months now. It’s not my main computer, so I’m often messing with it. Some time last year I made the jump to running OS X Leopard on the Dell, with some work and guides put in by the folks over at the InsanelyMac forums and a guide by Espresso Report/Daily Blogged. I had Leopard running on my Dell perfectly, and all of the hardware that I cared to work worked. Earlier this month I decided that I wanted to subject my Dell to being a test bench for Windows 7, so I decided to run that on the Dell for a while before running it on my main computer. Now that I have no need for Windows 7 on my Dell I’ve decided to return to OS X, but this time with the newly released Snow Leopard.
- Creating the moanlog search form with CSS
Styling form elements with CSS is never a fun task. Cross browser differences in how form elements are rendered, coupled with changes in font size and browser capabilities, makes predicting how a form will look, after you’ve applied a style to it, a hard job. When working on the design for moanlog (and the Wordpress theme for moanblog) the search bar was one of the areas that took the most deliberation. Unable to recover the image :( The search form as it looks in its finished style maintains the unified style of the soft salmon colours in the moanlog design.
2006
- Foobar2000 Tutorial
Well, i’ve started putting together a tutorial for setting up foobar2000. I’ve seen plenty around, and there are plenty of cryptic foobar wiki’s, but none of them made it simple enough. so without the crap, here it is it’s still being written, but what’s down is good
2004
- For your convenience
re-installing windows xp is, to be blunt, a pain in the ass. on microsoft’s own back, there are so many flaws in the software that updating it with patches takes more time than I’m willing to allow myself to devote to..