I recently worked on a project with a strange character encoding issue.
The application in question was an old CMS system which had originally
been developed using a Latin–1 character set both for storing it’s data
and in regards to the pages being served by Apache. More recently it had
been updated to use UTF8 to eliminate lots of encoding problems which
were arising, especially as more non English speaking users started to
utilise the system.
There was however an odd issue occurring; the
database and it’s tables had been setup correctly to store everything as
UTF8; PHP and Apache had been configured to correctly serve UTF8 content
and the application itself had been updated to use PHP’s set of [mb_
string functions][]. However when I viewed the database using
Navicat it still looked like the data was being stored as Latin–1.
After a bit of digging I discovered that when the connection to the
database was being made, [mysql_set_charset()][] wasnt being called
which meant PHP was defaulting to Latin–1. I fixed this but in doing so,
Latin–1 characters were being displayed as UTF8, and everything ended up
looking like a mess. I set about writing a script to fix the data in
MySQL and came across this great snippet on stackoverflow:
UPDATE table SET col = CONVERT(CONVERT(CONVERT(col USING latin1) USING binary) using utf8);
I wrote a quick PHP script which iterated over the database ran this
query on any text, varchar or char columns and the problem was solved.
There are other ways to achieve the same effect which involve dumping
the database without any encoding information and then re-importing it,
specifying UTF8 but I prefer this approach. As a word of warning,
remember to backup any databases before running this. Also be aware if
you have a lot of data it could take some time.
Now and then it’s nice to step away from web development and work on a
project in meatspace. Last year I was lucky enough to help the super
talented Harrison Krix program the lights for his Guy Manuel Daft
Punk helmet. He was midway through the project and had the
electronics nailed down but programming the Arduino board wasn’t his
speciality so he got in contact with me after seeing my Guy Man
helmet in action. I updated my original code (which used a
Rainbowduino) to use Harrison’s Arduino setup, here it is in action:
Much better than my helmet for sure. I’ve had a few emails recently
asking for the source code for this. I’ve chatted with Harrison and he’s
happy to make it public so here it is:
DOWNLOAD(Note: requires
Arduino Potentiometer library which can be found here)[][]
It’s
released under an MIT license so feel free to do what you want with it
but make sure you include the license and original attribution if you do
decide to re-distribute it.
Unfortunately I don’t have the time to write
up a big tutorial on how to use it at the moment or exactly how it
works, however the code is fairly well commented so unless you’re a
complete newbie you should be able to understand what’s going on. I’ll
try to answer any questions if you leave them in the comments. I’d also
like to state I’m by no means an Arduino expert so there may be better
or faster ways of doing things in the code which I’m not aware of, but
it all works. The electronics are detailed over on [Harrison’s blog][]
if you’re not already familiar with them.
The algorithm Google uses to rank your site in its search engine results
pages is highly complex and the team who work on it are highly
secretive. There are very few who know exactly how it works. The
algorithm is often updated and refined which means keeping your site at
the top of search results is an ongoing task.
In a recent keynote speech
at PubCon, a Google engineer Matt Cutts, revealed that there are
roughly 200 different variables which are analysed by the algorithm when
it’s deciding where to rank your site. Over at Search Engine
Journal, Ann Smarty and her readers are attempting to put together a
definitive list of these variables. Of course nobody knows how accurate
this list is, however with the input of hundreds of SEO specialists with
years of experience it’s very likely that many of the these factors are
correct.
Today Brian Rakowski announced the launch of Google’s new browser,
Chrome. After teasing us yesterday with a great comic book strip
explaining what it is, how it works and the ideas behind it they finally
opened up downloads at around 8pm(GMT).
The Good
Its fast! Websites seems really snappy. Ive yet to run any
benchmarks yet but I can see it beating Firefox and Safari in all
areas
Lightweight. I was a bit unsure of having multiple processes running
all over my machine but they seem to managed well. RAM usage can
get a bit high with multiple tabs open but with just GMail open its
only using 17mb (vs FF3’s 112mb)
Standards compliant. It’s got WebKit under the hood so this was
expected really.
The bad
The installation procedure is awful. Why do I have to download a
500k setup file which then in turn downloads the installation file
and extracts it to a random location on my hard drive. Getting
installation right is very important as it’s often the first
interaction a user will be having with your application.
Im running Windows XP and the GUI is some kind of Vista hybrid (just
like Windows Live Messenger). Although its fairly minimal it does
annoy me.
They’ve adopted the IE7 style of doing away with the File, Edit,
Help menu and placing it all under one icon. At least give us the
option to change it back guys.
No “Add to dictionary” feature when you right click on a misspelled
word. Bit of an oversight really.
The good points really do outweigh the few bad points mentioned here. I
feel guilty dropping Firefox after championing it for so many years
but it has become bloated and unstable.
I’ll be looking forward to new updates and plugins over the coming
weeks.
I’m not normally a big fan of Flash games, they tend to either be poorly
implemented or lacking scope. This week however, I discovered the
brilliant physics based Flash game Fantastic Contraption.
The premise is simple; using a series of different rods and wheels you must
build a machine to move a ball into a target zone. You are free to build
your machine however you like and because of this the game is extremely
open ended.
By creating a standard account,
Fantastic Contraption lets you save your designs and share them with
friends as well as browse through other people attempts. After upgrading
to a full account (a one-time fee of $10), you are able to create your
own levels and share them with others.
Colin Northway and his team have turned a great idea into a well
executed puzzler which I highly reccommend.