The smell of roasting rubber from the metro is a mere tickle compared to the hammering of fresh bread, seafood and cheese. Looking up to the grey sky, you don’t feel so bad as you would on a similar day across the Channel.
You’re in Paris.
What can be whittled from this majestic stick of French gold that hasn’t been said before? The streets are wide, the food is delicious and the people are French. Walking the streets, you feel as if you were in one colossal museum - there are monuments, ancient buildings, lively artist corners and French people everywhere. Like England, the hangover of lost colonial power is apparent in France, but it’s done with so much style; you can forgive them their pride and lose yourself in a empirical reverie of wine and fragrant butter sauces.
Far from being snobbish and rude, the people are warm and only happy to help you if you give their language a go. Every day I witnessed a tourist bark orders in English to a stunned service worker. In a bakery one afternoon I saw a man demand a badine in English and, with his arms stretched out, indicate the width of the loaf he had in mind. The teenager behind the counter, probably with a good level of English, was either too offended or too amused to react. The man looked and, probably to her, sounded like a zombie with a brand new Nikon strapped to his drooling head. Just before things hit melting point, a woman standing in line translated, the zombie got his bread and retreated. Imagine if a French person did that in Australia: they would be immediately sent to a detention facility and deported the following decade.
So determined to play by the rules, I stammered out what remained of my French language skills and surprisingly, I got by relatively well. Some were flattered that I’d taken the time as an anglophone to even open a French grammar book, which is a bit of a polite exaggeration but it was a nice compliment nonetheless. The folk selling trinkets beneath the Eiffel Tower and those trying to scam money weren’t so appreciative when I told them to fuck off.
In the areas where tourists tend to congregate you are guaranteed to be approached by someone asking you for money, directly or indirectly, at least once every 15 minutes. I learnt to ignore pleas of “Do you speak English?”, but there was one trick I’d never seen before - someone would pretend to pick up something from the ground in front of you, a ring or a coin, and then present it to you as if you’d dropped it. Insisting that you take the trinket, they congratulate you and then proceed to ask you for money to compensate them for having brought such good fortune upon your package holiday.
Va te faire!
Tags: paris, Travel
Posted in Travel | No Comments »
Now that the sun has come out and my employer’s training budget is large, I’ve decided to revist Flash and get my Actionscript skills up to scratch.
The last time I used Flash, as a naïve gen Xer looking to embrace the web, it was in version 2. Which sucked. But it was fun to fool around with things which, back then, were thought of as impossible to do with JavaScript and CSS alone such as smooth animation, timelines and pretty colours.
These days you can manipulate sound, images and video to such an extent that it’s made Flash the most ubiquitous piece of web software out there.
Not to mention that Flash skills are becoming more and more sought after from a Frontender.
So my quest starts with a very simple image gallery written nearly entirely in Actionscript (2.0 because we only have Flash 8 available to us at the moment) that reads the contents of an xml file.
The next step will be to write a class that builds thumbnails on the fly to an interactive thumbnail scroller for better browsing. At the moment you can only navigate left and right by hovering over the image itself.
It’s basic, but it’s a start for me back into the cool world of rich media.
Check out the simple image gallery.
Tags: actionscript, flash, gallery
Posted in Development rants | No Comments »
Well, here’s a little tip for you if you didn’t know already. Some people say that there are a couple of ways of declaring functions in JavaScript and you can go to town doing one or the other (depending on your tastes) because they do precisely the same thing.
Well they do and they don’t.
Tell me why this will work:
<html>
<head>
<script type="text/javascript">
noodles();
function noodles() {
alert("Do you like noodles?");
}
</script>
</head>
</html>
And not this:
<html>
<head>
<script type="text/javascript">
noodles();
var noodles = function() {
alert("Do you like noodles?");
}
</script>
</head>
</html>
The second example will return our favourite word: undefined.
Maybe obvious to you, but not to me when I first got on the bandwagon. You see the browser will look at all function declarations (that is, the function in the first example) first and think, “Hey, these might be useful!” and then proceed to store them in a little hidey hole for use later. Then it will go on and do everything else. So when the browser encounters a call to a function it already knows what to do.
In the second example, we’re just assigning a function to a variable, which is great, but the browser has to know about it before we execute. In other words the execution must come after the variable declaration. It’s like trying to do this:
alert(noodles);
var noodles = "I love noodles!";
It’s just something to keep in mind.
Posted in Development rants | 1 Comment »
Here’s an exercise we were taught in writing school to help free our minds from the conciseness and blandness used by politically-correct trogologytes with nothing better to do than to force us all to use non-figurative, monosyllabic grunts expressly devised to be comprehensible to a sock puppet.
What you do is think of someone you know well and write ten metaphorical sentences about them. It starts by thinking:
“If my friend were a vehicle, what type of vehicle would he/she be?”
The answer might be something like:
“She is a wheat harvester on its back wheels.”
The idea is taken from a poet, whose named I cannot remember, who used this device to describe English poet laureate, Ted Hughes.
For example, here’s one I made up about a person I know:
His shoulders are two oversized furcoats, draped over a telegraph pole.
His voice, a shotgun ringing through a bowling alley on a Saturday night.
His eyes blink over an early evening at the equator.
He uses his nose like a vacuum cleaner sucks up marbles.
As you can see, you can create a fairly vivid image of a person through the association of ideas. My example is rubbish, but give it a go, it’s not only simple but fun - like throwing a hair dryer in the fish tank.
Posted in General musings | No Comments »
Spewing out Youtube videos on to your page has just become easier. Now you can load, control and search Youtube videos using nothing but JavaScript and a bit of patience. I know, I know. Your excitement is palpable through my DSL exchange.
So what can you do? You can embed two players onto your page:
- The chrome player - with all of Youtube’s standard controls
- The chromeless player - you guessed it, with no controls
For some, probably sane reason (although I’m yet to ascertain why), when using the chrome interface you cannot load new videos into the same player using the loadVideoById function, which is available to the chromeless player. Therefore if you would like to employ this highly useful method and be able to control playback, you have to build your own controls. Fortunately, the API methods make it rather easy.
Having nothing to do one rainy day, I decided to give it a go. My motivation was related to the fact that we go to a lot of parties but neither I nor my lazy friends are bothered to bring music and whine incessantly if we have to change a CD. Given the wealth of music videos on Youtube these days I thought that I could make a rudimentary jukebox so that you can play and cue music at will, even when plastered on tins of lager.
Naturally, it will play whatever video you feed it, but I don’t really want to watch some inane mashup of the Star Wars movies dubbed to a Linkin Park sountrack or other shit. One application that I thought might be rather splendid would be to create a playlist to join all the parts of a movie or TV episode. I am grateful to all the folk who take the time to splice and upload these treats but, by no fault of theirs, it’s a chore to click to the next part every nine minutes and twenty four seconds.
Here’s my first attempt. Of course I will excuse myself with the following:
- it’s alpha
- code review to come
- design change inevitable (maybe in the shape of a jukebox, that would be original)
- predictably, I couldn’t give a wet sock if it worked in IE6
- ideas for the future: saveable playlists, editable playlist order using sortable behaviour, auto-download of next video for smoother playback, fullscreen (or bigger at least), save /cache searches, tally favourites, plug into last.fm for recommendations, get artist data from musicbrainz, blah blah
At the very least, it’s great for listening to music at work.
Posted in Development rants | No Comments »
Ahh, Amsterdam - the watery princess of the North looking up into the oceans. Exuding chaos and beauty through its sinewy canals. Home to a thousand bicycles and iron hooks from which you can dangle furniture from your storage lofts. Magnet for people of all persuasions - particularly young continentals looking to get stoned.
The novelty of Amsterdam takes a few visits to wear down because you’re hardly on the plane on the way back from wherever you came from and you’re planning your next weekend to the city. This of course is due to your still altered state of consciousness whereby you hold the unwavering belief that you could subsist on joints, hot chips and cake for the rest of your terrestrial existence. Reality often kicks in when you are asked to communicate with someone born of the prevailing system and all you can manage is a string of warbling nonsense surrounded by pauses long enough in which to pour a pint of Guinness.
However Amsterdam is more than this: you will notice, if you are a male, or care to frequent the male toilets, that they paint tiny flies on the urinals. The idea is that you will instinctively aim at the fly when you piss and not on the floor, nor presumably on the person standing next to you. This can only mean that people in the Netherlands either take great delight in urinating on insects or on the floor, but not both at the same time.
You can also see the world’s largest collection of working bikes near the Central Station, crammed into a split-level parking lot on the canal. It is a marvel to witness how this modern city functions without reliance on the car, unlike so many other western metropolises. The prevalence of the bike has led to some astonishingly innovative two-wheeled contraptions such as the bike/trailer combination; the “bike for the whole family” bike, with a seat for mum and dad and two kids; and the reclining bike, which is the only personal displacement vehicle in which you can rest, smoke a doobie and exercise at the same time. The unicycle is notably absent.
Posted in Travel | No Comments »
Would you love to be able to waltz in to a place, piss all over the floor, without anybody saying or doing anything to you? Even if they wanted to punish you, they would have to follow a process that you yourself defined. Haw haw!
Anonymous, self-executing functions can allow you to do this. They’re kind of like diplomatic immunity for your browser and can be very powerful.
(function(){/*
Oooh it's so cozy in here. I have access to all
global variables but I can do what
I like and no-one will know!
Now I'm going to do some private things.
*/
var privateVar = "I'm so lonely in here";
var privateFunction = function(s){ alert(s) };
/*
Okay, maybe I want to share something with the
outside world but let's namespace it just in case:
*/
return namespace = {
publicFunction : function(q){
return function(a) {
privateFunction(q + privateVar + a)
}
}
};
})();
We can’t access any of the private variables or functions from outside our anonymous function, thus avoiding collisions and overwriting, but we can return public functions that do! namespace.publicFunction is able to see, use and modify our private variables, but only in the way in which we want it.
It’s even possible to throw a bit of curry in there to spice it up. Calling namespace.publicFunction and passing it an argument (in this case a question) returns another anonymous function that expects an argument (an answer) and will then use our private variables to construct a little dialogue.
We would call it like this:
namespace.publicFunction("How are you?\n")("\nThat's too bad");
The example is basic and doesn’t make much practical sense but it demonstrates the way scope works in JavaScript and it can be a simple but handy tool to have in your arsenal.
Posted in Development rants | No Comments »