pjf's Journalhttp://use.perl.org/images/topics/useperl.gifhttp://use.perl.org/~pjf/journal/
Facebook privacy - Instant personalisation and connectionshttp://use.perl.org/~pjf/journal/40325?from=rss
<p> <b>Facebook privacy - Instant personalisation and connections</b> <br>
Facebook has been announcing a number of changes recently, many of which will impact your privacy. While you may not have seen them hit your account yet, they will almost certainly do so soon.
</p><p>
<b>Connections</b> <br>
In the past, Facebook had a whole bunch of free-form fields for things like location and interests. You could put practically anything you wanted in these, and show them to your friends. For things like interests, there was some basic search features, but they weren't very advanced.
</p><p>
These free-form fields are now changing into "connections". Like existing fan pages, connections represent an actual relationship, rather than just text. Also, just like fan pages, they're <i>public</i>, so you can see all the people who like <a href="http://www.facebook.com/pages/Cooking/113970468613229">cooking</a>, or <a href="http://www.facebook.com/pages/Mushrooms/108398075857821">mushrooms</a>. The new connection pages include extra information including text from wikipedia, and an automatic search through both your friends and all public posts to look for content related to that subject. The same applies for your location (hometown and current), your employers, and education!
</p><p>
From an application developer's standpoint, this is a great change. The existing free-form fields were next to useless. From a privacy standpoint, this is an interesting change. It's great to be able to find friends who share your common interests, but because connections are <i>public</i>, you're not just revealing that information to your friends. You're revealing it to the whole wide world. For any user who just accepted the defaults the defaults, I now know the city where you live, who you work for, where you went to school, and what you enjoy doing, in addition to who your friends are, and what you look like.
</p><p>
Luckily, you don't have to convert your interests and locations to connections. However if you don't, those parts of your profile will simply cease to exist. Facebook would <i>really</i> like you to convert to connections, and you'll get a scary looking message about parts of your profile being removed if you don't. Of course, not all of your interests will map to new connections, and those that don't will be discarded in any case, so whatever you do you <i>will</i> be losing information, including potentially the dates of your employment and education. For me, that's not a big deal, but it might be for you. If you <i>do</i> want to continue listing your interests in a free-form and private fashion, I recommend you simply add them to your "about me/bio" section.
</p><p>
If you <i>do</i> convert your interests (and Facebook will ask you to do so sooner or later) then keep in mind that these (along with your existing fan pages) are <i>very</i> public. Your friends, family, employer, potential employer, applications, websites, enemies, and random people on the Internet will all be able to see them. If you don't want that, your only recourse is to remove those connections.
</p><p>
In theory, you can also edit your birthday, and change your age to under 18, which <a href="http://www.facebook.com/help/?faq=17134">limits what Facebook will publicly disclose about you</a>, although your connections are still very broadly published. Unfortunately, as I discovered the hard way, you can only transform from an adult into a minor <i>once</i>, so if you've edited your birthday in the past you may not be able to change it now. In fact, if you've already converted to the new connection system, then your birthday will no longer show up as something you <i>can</i> edit, so make sure it's set to a date you're happy with before going through the conversion.
</p><p>
<b>Instant Personalisation</b> <br>
Facebook is rolling out changes to allow websites to automatically access your "publicly available information", which includes name, profile picture, gender, friends, and "connections".
</p><p>
What's that, I hear you ask? Are these the same connections that I just added to my profile during the conversion process? They sure are! I bet you just <i>love</i> the idea that when you visit a website, they not only <i>automatically</i> know your name, your location, and your friends, but also a detailed list of your interests, activities, education, and employer!
</p><p>
Luckily, you can turn instant personalisation off. There's a new ticky box on the <a href="http://www.facebook.com/settings/?tab=privacy&amp;section=applications">applications and websites privacy page</a>. For some users, this is on by default, and for others it's off, and I'm not yet sure how that's determined. If it's not ticked now, and you later go through the connections conversion process, then I recommend you go back to double check it's still unchcked.
</p><p>
Having ensured that instant personalisation is disabled, I bet you're feeling pretty safe. However there's a great little clause if you read the <a href="http://www.facebook.com/help/?faq=17105">fine print</a>: <i>To prevent your friends from sharing any of your information with an instant personalization partner, block the application...</i>
</p><p>
That's right, your friends can share your information. This actually isn't anything new; applications your friends have installed <a href="http://pjf.id.au/blog/?position=599">can also view your information</a>, but you probably don't want them sharing your info with the instant personalisation sites either.
</p><p>
So, in addition to unticking a box, you probably want to visit the applications <a href="http://www.facebook.com/help/?faq=17105">listed in the FAQ entry</a> and block them, too.
</p><p>
While you're at it, I recommend you look at your <a href="http://www.facebook.com/editapps.php?v=allowed">list of authorised applications</a> as well, and remove any ones that you no longer need. It's <i>very</i> easy to authorise an app these days (in fact, commenting or liking this blog post will do so!), so you might be surprised to see what's there.
</p><p>
Finally, if you want to protect against accidental leakage of your profile information, consider <i>logging out of Facebook</i> before browsing other websites. Sure, this may be a pain in the arse, but Facebook can't share your information if you're not logged in.
</p><p>
<b>Conference Talk at OS Bridge</b> <br>
I'll be <a href="http://opensourcebridge.org/proposals/425">talking more about Facebook privacy</a>, along with some practical demonstration of tools, at the <a href="http://opensourcebridge.org/">Open Source Bridge</a> conference from the 1st-4th June 2010.
</p>pjf2010-04-23T06:31:18+00:00journalAda Lovelace Day (Part 2)http://use.perl.org/~pjf/journal/40267?from=rss
<p> <b>Ada Lovelace Day (Part 2)</b> <br>
Today is Ada Lovelace continuation day; a day for continuing blog posts reflecting on the awesome contributions of women to science and technology. Here is my continuation from my <a href="http://pjf.id.au/blog/?position=602">previous post</a> of my personal heroines.
</p><p>
<b> <a href="http://www.chesnok.com/">Selena Deckelmann</a> </b> (<a href="http://twitter.com/selenamarie">@selenamarie</a>)<br>
Wow. Selena. Where do I start? Selena does <i>everything</i>. She runs the <a href="http://opensourcebridge.org/">Open Source Bridge</a> conference, the <a href="http://pugs.postgresql.org/pdx">Portland Postgres User Group</a> (PDXPUG) with <a href="http://twitter.com/gorthx">@gorthx</a>, the Code'n'Splode tech group, and gives talks at <a href="http://www.igniteportland.com/">Ignite Portland</a> and numerous conferences worldwide. She has an amazing garden, keeps chickens about as well as I do, and boundless energy.
</p><p>
And I mean <i>boundless</i> energy. Selena seems to be awake before dawn, will party into the night, and seems to always have half a dozen projects on the go at once. Selena coming off a trans-pacific flight is only slightly less bouncy than normal. As if that wasn't enough, she's also an amazing host, and was kind enough to let Jacinta and myself crash at her place last year when we were visiting Portland.
</p><p>
Selena is also an amazing public speaker, a great storyteller, knows more about databases than anyone else I know, and went to Nigeria to help combat election fraud. She is well-versed in awesome.
</p><p>
Selena is responsible for convincing me that I <i>really</i> need a pull-up bar at home.
</p><p>
<b> <a href="http://martian.org/karen/">Karen Pauley</a> </b> (<a href="http://twitter.com/keiosu">@keiosu</a>)<br>
I first met Karen at a <a href="http://sydney.pm.org/">Sydney Perl Mongers</a> meeting a few years back. Karen is the Steering Committee Chair of the <a href="http://www.perlfoundation.org/">Perl Foundation</a>, and is quite frankly one of the most friendliest and interesting people I've ever met.
</p><p>
Karen is responsible for making sure things get done, and a lot of her work is behind the scenes. In fact, I think it would be correct to say that Karen is awesome at meta-work; she has the rather unenviable task of encouraging technically minded people to do productive things. Her talk at the <a href="http://www.osdc.com.au/">Open Source Developers Conference</a> on managing volunteers was brilliant.
</p><p>
I'm personally indebted to Karen for listening to all my crazy ideas, sending me the most amazing Christmas Cards from Japan, providing fashion advice, making me laugh (a lot!), being an awesome person to hang out with at conferences, and for standing in the hot Australian sun with a digital SLR. If you've seen <a href="http://www.flickr.com/photos/keiosu/sets/72157622897942910/">photos of me draped over a nice looking sports car</a>, then that's probably Karen's work.<nobr> <wbr></nobr>;)
</p><p>
I aspire to become anywhere near as good a conversationalist as Karen.
</p><p>
<b> <a href="http://twitter.com/mjmojo">Mary Jane "MJ" Kelly</a> </b> (<a href="http://twitter.com/mjmojo">@mjmojo</a>)<br>
I met Mary Jane completely by chance at OSCON last year. At the time, I thought that she was pretty darn awesome. What I didn't realise is that she's much more awesome than I first thought.
</p><p>
Mary Jane is full of ideas. <i>Cool</i> ideas. Ideas which involve industrial cutting lasers, 3D printers, quilts, robots, fractals, untraditional business cards, topography, steampunk, using tattoos for social hacking, and adventures!
</p><p>
Better still, MJ doesn't just have great ideas, she implements them too! I'm hugely looking forward to seeing her talk at this year's OSCON, which is all about hacker spaces and building awesome things.
</p><p>
Mary Jane is actively involved in computer security, particularly in the field of anti-fraud technologies in on-line gaming. MJ founded the <a href="http://girlsintech.net/category/seattle/">Girls In Tech Seattle chapter</a>, and organised the 2007 Northwest Security Symposium.
</p><p>
MJ has a wicked sense of humour that never fails to make me smile, shares my love of costumes and cool events, and is solely responsible for my knowledge of waffle-makers.
</p><p>
<b>Honourable mentions</b> <br>
There are a lot more women in technology who have been hugely influential in my life, either by changing the way that I think, or from teaching me amazing new things. In particular, I'd love to give a special mention to <a href="http://twitter.com/lhawthorn">Leslie Hawthorn</a>, <a href="http://twitter.com/sulagarcia">Sulamita Garcia</a>, <a href="http://twitter.com/emmajanedotnet">Emma Jane Hogbin</a>, <a href="http://twitter.com/allisonrandal">Allison Randal</a>, <a href="http://twitter.com/audreyt">Audrey Tang</a>, <a href="http://twitter.com/justjenine">Jenine Abarbanel</a>, <a href="http://twitter.com/akkakk">Akkana Peck</a>, <a href="http://identi.ca/pfctdayelise">Brianna Laugher</a>, <a href="http://twitter.com/br3nda">Brenda Wallace</a>, <a href="http://twitter.com/puzzlement">Mary Gardiner</a>, <a href="http://twitter.com/kattekrab">Donna Benjamin</a>, <a href="http://twitter.com/raena">Raena Jackson-Armitage</a>, <a href="http://twitter.com/piawaugh">Pia Waugh</a>, <a href="http://twitter.com/stokely">Sarah Stokely</a>, <a href="http://twitter.com/rickybuchanan">Ricky Buchanan</a>, <a href="http://twitter.com/lindsey">Lindsey Kuper</a>, and <a href="http://twitter.com/lizhenry">Liz Henry</a>.
</p><p>
I don't have an Ada Lovelace Day list on twitter, but I do have my <a href="http://twitter.com/pjf/techwomen">techwomen</a> list, which includes all of the above and more.
</p>pjf2010-03-25T14:36:27+00:00journalAda Lovelace Day (Part 1)http://use.perl.org/~pjf/journal/40264?from=rss
<p> <b>Ada Lovelace Day (Part 1)</b> <br>
Today is <a href="http://findingada.com/">Ada Lovelace day</a>; a day for
reflection on the awesome contributions of women to science and technology.
Today, I would like to pay tribute to some of my personal heroines, and as
you'll see, there's quite a few of them. I've tried to list them in roughly
chronological order.
</p><p>
<b> <a href="http://katherinephelps.com/">Dr Katherine Phelps</a> </b> <br>
In my early teens I had a Commodore 64 with a 1200/75 baud modem, which
I used to access local bulletin board systems (BBSes). This was the start of what
I would discover was a lifelong joy of communicating with people from
behind the safety of a monitor, or in the case of the C64, a
television.
</p><p>
Katherine, and her husband Andrew, ran one such local BBS called the
Rainbow Connection, and I met them both at a BBS meet-up. Katherine seems
to have a knack for encouraging younger people to excel, and taught me the basics
of HTML, and even had me editing web-pages for <a href="http://glasswings.com.au/">Glass Wings</a> and other websites.
In fact, it's due to Katherine that I got my first exposure to the Internet
and Internet programming.
</p><p>
Today, Katherine is still prominent in the fields of storytelling,
interactive fiction, game-writing, and comedy. Katherine is almost
wholly responsible for me getting into Japanese Animation, by
showing me an nth generation, unsubtitled, videotape of
<a href="http://en.wikipedia.org/wiki/My_Neighbour_Totoro">My
Neighbour Totoro</a>, with herself and Andrew providing a very
amusing translation as we watched.<nobr> <wbr></nobr>;)
</p><p>
<b> <a href="http://infotrope.net/">Kirrily 'Skud' Robert</a> </b> (<a href="http://twitter.com/Skud">@Skud</a>)<br>
I met Skud though Katherine, also while I was still at high school.
At the time I was living with my parents as a quiet, introverted
geek. All of my friends, and most of the technical people I knew,
were also quiet and introverted types.
</p><p>
Skud pretty much shattered all the stereotypes I had for what it
was to be technical. She was outgoing, opinionated, pushed boundries,
made things happen, was extremely good with people, had unconventional
social views, and was <i>way</i> cooler than me. She still is.
</p><p>
Skud has had a massive influence on my life. She started her own
business (Netizen) and wrote a set of course manuals on Perl. Some
years later, that same writing would form the basis of <a href="http://perltraining.com.au/">Perl Training
Australia</a>'s own <a href="http://perltraining.com.au/notes.html">course manuals</a>. Skud has been highly influential
in the Geek Feminism movement (which has both a <a href="http://geekfeminism.org/">blog</a> and <a href="http://geekfeminism.wikia.com/wiki/Geek_Feminism_Wiki">wiki</a>),
and gave a critical keynote entitled <a href="http://infotrope.net/blog/2009/07/25/standing-out-in-the-crowd-my-oscon-keynote/">standing out in the crowd</a> at OSCON 2009.
</p><p>
Often I feel that whenever I discover a new experience, it's actually something Skud has been doing for at least a decade. I still fondly remember Skud giving me advice on etiquette at a rather incredible FOSS party a few years back. In fact, <a href="http://geeketiquette.com/">etiquette</a> is another thing Skud is rather good at.<nobr> <wbr></nobr>;)
</p><p>
Skud continues to be one of my most favourite people in the world,
and I was delighted to have the chance to visit her in San Francisco
last year after OSCON. My personal motto, never refuse an adventure, was directly lifted from one of Skud's new year's resolutions.
</p><p>
<b> <a href="http://use.perl.org/~jarich/journal/">Jacinta
Richardson</a> </b> (<a href="http://twitter.com/jarichaust">@jarichaust</a>)<br>
Once I got to university, I started an anime club. One year, working
behind the desk, and with my hair in pigtails and balloons, a girl
approached and asked about the club. At the end of the conversation
she said "I might come back later", which when advertising an anime
club usually translates to: "I think you're a complete freak, and I hope
to never see you again in my life."
</p><p>
To cut a long story short, she came back, and she was studying
Software Engineering.<nobr> <wbr></nobr>;)
</p><p>
Jacinta was a receipient of a 2008 White Camel Award for outstanding
contributions to the Perl community. Along with running
<a href="http://perltraining.com.au/">Perl Training Australia</a>,
she's also one of the original organisers of the
<a href="http://www.osdc.com.au/">Open Source Developers'
Conference</a>, has helped with countless <a href="http://pm.org/">Perl Mongers</a> meetings, and is largely
responsible for our <a href="http://perltraining.com.au/tips/">Perl
Tips</a> newsletter.
</p><p>
Jacinta also does a lot of behind the scenes work which is not
easily seen. She has contacts in practically every user group in
Australia, so Jacinta is often involved when organisation of
Australian-wide events are needed. At conferences she's often
giving up her own time to coach nervous speakers (including me!).
In fact, Jacinta even had a hand in one of my most favourite
talks of all time, <a href="http://twitter.com/webchick">@webchick</a>'s
<a href="http://webchick.net/files/women-in-floss.pdf">Women in
FLOSS</a>.
</p><p>
<b> <a href="http://tradeskill.blogspot.com/">Emily Taylor</a> </b> (<a href="http://twitter.com/Domino_EQ2">@Domino_EQ2</a>)<br>
I met Emily shortly after a phone-call from Jacinta saying that I was going to have a late addition to my Perl class. Emily arrived at lunchtime, and started as a bright, attentive student; she quickly caught up with the rest of the class, showed genuine talent, and was working on advanced exercises in no time.
</p><p>
However what got me really excited was <i>why</i> Emily was learning Perl. By afternoon of the first day, I was calling back to the office to say that our new student was <i>awesome</i>, and she was going to apply for the position of head tradeskill developer for Everquest II (EQ2). However I think it two at least two weeks until I discovered she was in my guild!
</p><p>
Now, Emily is indeed the grand tradeskill developer for EQ2. She has an <a href="http://tradeskill.blogspot.com/">awesome blog on MMO tradeskilling</a> and MMOs in general. More importantly for Ada Lovelace day, she's also an active contributor to the <a href="http://gamersinreallife.wordpress.com/">Gamers In Real Life (GIRL)</a> blog.
</p><p>
Emily presently lives in San Diego, where she distracts me yearly with photographs from Comic-con, and disagrees with me about what breakfast spreads are appropriate on toast.
</p><p> <i>Stay tuned for tomorrow's continuation of this post.</i> </p>pjf2010-03-24T11:59:48+00:00journalKuala Lumpur, Day 0http://use.perl.org/~pjf/journal/40139?from=rss
<p> <b>Kuala Lumpur, Day 0</b> <br>
After seventeen hours of travel, I've finally checked into my hotel in Kuala Lumpur. I'm here with Jacinta, and we're teaching Perl to a client next week, but we've arrived early to do some sight-seeing... <i>and because we're insane</i>.
</p><p>
Actually, it only <i>feels</i> like we're insane, because we've only just got back from LCA2010. In reality, going to KL so quickly means that we actually have something one of us might care to label as "a holiday". There's no chance of tacking a holiday on the end: we need to get home in order to clear the mail, launder clothes, and squish an entire month's worth of social engagements into three days before KiwiFoo, and then me spending two weeks in Sydney.
</p><p>
That's right. Four weeks of travel, with only three days at home. Maybe I am insane after all.
</p><p>
Kuala Lumpur is just like I remember it. Hot, humid, friendly people, and cheap, delicious food. Almost everything can be ordered with peanuts, and fried anchovies.
</p><p>
Today I feel like telling stories, so I'm going to recount the happenings of my day. Now would be a good time to get a mug of hot chocolate, or maybe skip to someone else's blog entry. I don't mind.
</p><p>
The trip was not a difficult one, but not an uneventful one either. It started with being picked up by the least competent taxi driver in Melbourne. Or more correctly, <i>not</i> being picked up. The taxi was clearly visible in the street, about a block or two away, and spent most of its time doing U-turns and driving back-and-forth outside a small group of houses. I suspect they were using a GPS navigation system, and it didn't know our street numbers. Trying to flag the taxi down with a high-powered diving torch, the sort which is capable of stunning small fish from a mile away, didn't seem to help either.
</p><p>
The torch did attract the attention of a completely different taxi, who, sensing that we were now quite late for our flight check-in, decided to take the most leisurely approach to driving that I've ever seen. From our conversation, I discovered the driver never gets speeding tickets, but was once fined <i>four times</i> in one day because his car had insufficient velocity. Since our car speed to be travelling down the highway with all the speed of warm molasses, I could understand why.
</p><p>
The flight to KL was <i>lovely</i>. Through good planning, a lot of luck, and er, an aggressively unscheduled seat change, both Jacinta and myself were able to secure three seats each to ourselves. As someone who is used to sleeping on airplanes, this is the height of luxury. During the eight hour flight, I slept for seven, and without the need for sleeping tablets. I awoke feeling relaxed and refreshed.
</p><p>
Getting to the hotel wasn't hard, but inefficient. The plan was to catch a bus to KL Sentral, a train to Putrajaya, and then use the hotel's complimentary shuttle from there. It now appears that we could have caught a train directly from the airport to Putrajaya, saving considerable time and some money. Still, the trip to Sentral resulted in some spiffy weekly tickets which looked like they'd be useful in travel.
</p><p>
Calling the hotel from the train, I asked if we could get a pick-up from Putrajaya. They seemed uncertain, and after some to-and-fro, they admitted that the shuttle doesn't go to Putrajaya station, despite it being the nearest major public transport centre. They <i>do</i> however go to Kuala Lumpur proper (where we were just coming from), and a shopping centre or two.
</p><p>
As it happens, I now discover the hotel's bus seems to be the transportation equivalent of "scattered showers": not in your area, and not when you care. So rather than using the hotel bus, we were introduced to the public bus network.
</p><p>
Putrajaya's public bus network doesn't work the same way as other bus networks do. There's a big bus station, with lots and lots of bays and busses, but the goal of the drivers is to collect as few passengers as possible. This is primarily done by locking the bus, sneaking out, having a smoke for half an hour, and then dashing back into the bus and driving off as quickly as possible before anyone spots you. Other tricks include waving passengers away when they try to enter, or telling passengers you don't leave until <i>much</i> later, and then driving off as soon as they turn their backs. In fact, should a bus foolishly leave its doors open for more than a few moments, it is almost invariably becomes jam-packed with passengers. All the busses seem to go to the same places anyway, just in a different order, and catching <i>any</i> bus is better than being outside in the heat.
</p><p>
The hotel itself is super-fancy. The room comes with bath-robes, slippers, a fruit-bowl, a fancy room configuration and furniture. Heck, even the bath-tub has its own phone, just in case you decide you need another bottle of champagne. The hotel seems to be filled with government officials and businessmen; not surprising, given the location in the heart of KL's government and technology district. I've never really liked fancy hotels; when travelling I prefer a more organic experience, but I think I've finally become to understand them. The people who frequent these hotels, almost by necessity, need to have so much money that the prices actually seem reasonable. For example, I'm eating a meal right now that costs the equivalent of dinner for <i>six people</i> on the streets of KL. That's an expensive meal, but it's still on the cheap side compared to what I'd be paying for the same meal in Australia.
</p><p>
The only thing which doesn't change is my surprise over the minibar. You want <i>how</i> much for a can of cola?
</p>pjf2010-01-28T08:11:48+00:00journalWear Sunscreen (and other thoughts for the year ahead)http://use.perl.org/~pjf/journal/40070?from=rss
<p> <b>Wear Sunscreen (and other thoughts for the year ahead)</b> </p><blockquote><div><p> <i>
If I could offer you but one tip for the future, sunscreen would be it.
The long term benefits of sunscreen have been proved by scientists, whereas the rest of my advice has no basis more reliable than my own meandering experience.
I will dispense this advice now.
</i> </p><p>-- <a href="http://www.chicagotribune.com/news/columnists/chi-schmich-sunscreen-column,0,4054576.column">Mary Schmich</a> </p></div>
</blockquote><p>
I'm not one for New Years Resolutions. In fact, the last resolution I made wasn't even mine; I stole it shamelessly from Skud, and it was "Never Refuse an Adventure".
</p><p>
However, today I feel like dispensing advice, reflecting on the year that was, and making plans for the future. I'm going to share these with you, and I'm going to start with my outlook on life.
</p><p>
One lifetime is not enough.
</p><p>
I have too many things I want to do, want to learn, and want to be. Heck, even ten lifetimes would not be enough. Since I can't do everything, a lot of my thought goes into maximising the area under the curve; making sure that when I die, I've squeezed the most out of life that I possibly can. Our axes here are age (horizontal), and enjoyment (vertical).
</p><p>
To get the most under the curve, you need it to stretch as far to the right as possible. You need not only to live as long as you can, but to have both the brains and the body to make the most of being alive. Without brains and body, you're placing limits on the vertical height of your graph.
</p><p>
That, as much as you may not like it, means doing <i>exercise</i>, both mental and physical. A lot of the people I know are good at one, but suck at the other. My only advice here is to find exercises that you enjoy. Mentally that might mean a problem you want to solve. Physically that may mean combining exercise with transport (eg, cycling), or gaming (eg, StepMania), or social activities (sports or martial arts seem to work well here).
</p><p>
For most of my friends, it's physical and not mental exercise that is lacking. In this case, sites like <a href="http://sparkpeople.com/">SparkPeople</a> can be useful in tracking food and exercise, although they could do with an API. If you've got sufficient money, you may find investing in a personal trainer worthwhile.
</p><p>
I'm not going to talk about money, but instead I'm going to talk about <a href="http://en.wikipedia.org/wiki/Utility">utility</a>, in the economic sense of the word. Without going into lots of theory, utility is the <i>satisfaction</i> you derive from something, and it can vary across individuals. For example, I have friends for whom watching sport is a high-utility activity, even though it's not for me. Those same friends may consider giving a presentation in front of a large audience to have negative utility; whereas I'm positively thrilled at the prospect.
</p><p>
Utility is going to have a strong correlation with the vertical height of your life-graph. Hopefully everyone grasps (at least at an unconscious level), that the utility of something isn't fixed. A glass of water has a greater utility to someone dying of thirst in the desert, than it has to the average office-worker. The +3 sword you've just looted is worth a lot to adventurer without a magic weapon, but has very little utility to the adventurer who already owns a +4 blade (unless they're a ranger and can dual-wield).
</p><p>
A lot of our decisions come down to trading things of different utilities. If you purchase something, that's usually because you believe that your purchase has greater utility than the money you paid for it. The big mistake I see people making is they take <i>good</i> deals now, but do so at the expense of taking <i>great</i> deals later on.
</p><p>
One example of this is time. A person may spend their evening playing an MMO, and that's arguably a good use of time, because they enjoy it. However ten evenings of study may allow the same person to learn a new skill, and with that skill achieve some greater goal. If the satisfaction of that goal is worth <i>more</i> to them than ten evenings of online gaming, then they've taken a good deal, but potentially forfeited a better one.
</p><p>
That brings me to the concept of investment. In short, do it. I'm not just talking about investing money. I'm talking about investing in skills, health, friends, relationships, tools, mental discipline, cybernetics; anything where you forfeit utility in the short-term for a much greater gain of utility in the long-term. Be aware that not all investments are good ones, or what is a good investment for you may be a poor investment for someone else. But in order to really maximise the area under the curve, you're going to need to do some investing.
</p><p>
What naturally falls out of this is the concept of <i>goals</i>. Identify the things which hold a particularly high utility for you. You want lots of goals; they're what allow you to identify good investments, and high-utility events. For some people, myself included, there's even utility in the sense of achievement when accomplishing a goal. Goals can be very short term (like making a person smile by sending them an SMS), or very long term (continue to be mentally and physically fit at age 75).
</p><p>
Don't be afraid to add new goals, and don't be afraid to discard old ones. Life is a process of continuous change, and there's no shame if your priorities or circumstances don't remain static. However when evaluating your goals, try to be aware of <i>why</i> they're changing; that can often reveal insights into yourself you may not otherwise notice.
</p><p>
Your goals may involve taking risks, and that should not scare you. Many pay-offs more than justify the risks you need to take to get them. When making decisions, get into the habit of trying to analyse both the most likely and the most significant outcomes from those decisions. Try to associate both probability and utility with each of these; this should help you gauge the expected value (EV) of a decision. You should using this matrix to help you make the most beneficial choices; sometimes they won't be the obvious ones.
</p><p>
Thinking about the possible consequences of an action helps you plan better for the future, and usually helps you both better utilise good outcomes, and mitigate bad ones.
</p><p>
A lot of my goals focus on things that I know will be highly memorable experiences. I cherish my memories, and being able to look back and smile about the things that I've done has a high utility to me.
</p><p>
So, what are some of my goals that I'm willing to share with you? Well, that's a hard one. Well, let's start with some history.
</p><p>
Most of you know me as a geek. I do a lot of programming, especially in Perl. I poke around with privacy issues, I play RPGs, I dissect network traffic streams, and I do a lot of speaking at technical conferences. Stereotypical geeks are poor with people, and that included me. It <i>still</i> includes me in many situations. However I've discovered that more than anything else, I <i>love</i> people. For a while now, I've been studying how I can become a better people person.
</p><p>
For me, 2009 was a year about people. I made a conscious effort to meet new people, to attend more social events, and to form new friendships. This has really paid off, and some of the risks I've taken have definitely been worthwhile.
</p><p>
I want to get better with people. I want to better understand how they work, how they think, and most importantly, what makes them happy. I'm not just being altruistic here; making other people happy is a <i>very</i> good way to get things done, and one that usually beneficial to all parties involved. So one of my goals this year is to put more points into cognition, telepathy, empathy, and bard.
</p><p>
I've also discovered that while I'm excellent in broadcast (presentation) and multicast (storytelling) communication, I'm lacking in unicast (personal) skills. I find this ironic, because I used to be the reverse. I think my unicast issues relate to <i>what</i> I'm willing to discuss. I generally hold my cards a little too close to my chest at times; I fear my conversation topics can be a bit too formal as a result. I seem to be most popular in unicast when talking about my most recent topic of inspiration, but when that's computer-related I'm concerned my conversational partner will find it boring, and when it's people-related I fear they'll find it weird. This is an area where risk-taking is definitely needed; the advantages of finding someone who's genuinely fascinated by my thoughts outweighs the risks of scaring someone away with whom I'd otherwise hold a specious social relationship.
</p><p>
I have a couple of mental models that I use for other people, but I've discovered not everyone fits nicely into these models, although they're a relatively small subset of the whole population. The mental models I use for everyone else are woefully incomplete. To solve this, I suspect I'll need to do some dedicating reading, research, and experimentation.
</p><p>
I need more points in <i>arei'mnu</i>, a Vulcan word that roughly translates into "mastery of emotions". There are many times when my emotions are in opposition to my logical and well-reasoned thoughts. In fact, this is something of a conundrum for me, as I feel that emotions are core to the human experience, and removing emotion strips life of much of its meaning. Usually I embrace and revel in my emotions; I even find value in sadness and tragedy, as they often provide a focal point for reflection on good times and fond memories. Usually my arei'mnu is excellent, but there are a few tweaks that I need to make, most of which relate to specific circumstances and triggers.
</p><p>
Finally, in 2010 I want to experience new things. I jokingly refer to this as "gaining XP", but it's one of the things that I really believe in, and one of the things that too many people stop doing. After a while, XP is addictive. People, food, places, thoughts, ideas, activities; they all hold such amazing and unique possibilities. My real question, and the one that's driving me nuts right now, is how to prioritise them, along with the very real awareness that I'm not even aware of the tiniest fraction of the experiences which life has to offer. In this regard, <i>your</i> advice is very much appreciated.
</p>pjf2010-01-03T06:06:40+00:00journalTightening up your Facebook privacyhttp://use.perl.org/~pjf/journal/40011?from=rss
<p> <b>Tightening up your Facebook privacy</b> <br>
I've previously discussed the <a href="http://pjf.id.au/blog/?position=598">new Facebook privacy system</a>, what they mean to you, and some recommendations on keeping at least some privacy. If you haven't read this post, I suggest you do so now, as I won't be repeating those recommendations here.
</p><p>
Since my last update, I've had a lot of feedback, and done a bit of exploring, and discovered there are some <i>extra</i> privacy controls that are rather hard to find! One thing that had me perplexed was how to hide which groups I was a member of. Groups are juicy stuff, they tell me a lot about your beliefs, interests, and social ties. These are things you may not wish to be broadcasting to the world. Events are the same, but even more so, since they give me an idea of where you are actually <i>are</i>, and who you're physically interacting with. You probably want to have some control over who can see these.
</p><p>
Luckily, you <i>can</i>; the controls just aren't where you expect them to be. They're not in Privacy Settings at all, they're in <a href="http://www.facebook.com/editapps.php">Application Settings</a>. By selecting <i>Edit Settings</i> you can change the privacy on your groups, events, gifts, links, notes, and photos; although the photos setting only controls who can see your photos tab/box/link; individual albums have their own privacy controls.
</p><p>
When deciding on your privacy settings, it's worth keeping two things in mind:
</p><dl>
<dt> <b>Applications run with the permissions of the user that installed them.</b> </dt><dd>This means that if you allow your friends to see events, your friends <i>applications</i> can also see events. The previous privacy settings actually allowed friends to see events, but you could block their applications.</dd><dt> <b>A permission of <i>Everyone</i> generally means it's publicly accessible</b> </dt><dd>Facebook is making it pretty clear that Publicly Accessible Information (PAI) is available to everyone and everything, including unauthenticated users, applications, and third-party websites.</dd></dl><p>
It's also worth noting that even if you set your event and group privacy to <i>only me</i>, it's still possible to go directly to an event or group and see the list of members, and you <i>will</i> show up there. What tightening your event/group privacy stops is a person or application being able to see all of your groups and events in one hit. If I'm determined to find your groups and events, I'd start by grabbing your publicly accessible list of friends, walking through <i>their</i> events and groups, and checking each one to see if you're a member. Your potential employers and in-laws aren't likely to go to that sort of trouble.
</p><p>
It also looks like I'm not the only one who's been upset that Facebook has made one's list of friends completely public information. What's amusing is their response to it. Let's look at their <a href="http://blog.facebook.com/blog.php?post=197943902130">new privacy tools blog post</a>, which talks about how to hide your friends. It starts off being very positive:
</p><blockquote><div><p> <i>
When you uncheck the "Show my friends on my profile" option in the Friends box on your profile, your Friend List won't appear on your profile regardless of whether people are viewing it while logged into Facebook or logged out.
</i></p></div> </blockquote><p>
That's great, isn't it? We can finally hide our list of friends, just like we used to... Except...
</p><blockquote><div><p> <i>
This information is still publicly available, however, and can be accessed by applications.
</i></p></div> </blockquote><p>
In other words, you can hide your list of friends from casual observers, but it's still considered <i>publicly accessible information</i>, and hence presumably can be accessed by anyone who can write, install, or employ an application to find it, as well as by "Facebook enhanced" websites.
</p><p>
To the average user, the effects of this change is a great way of letting them <i>feel</i> like their friends are private, but without actually making them private.
</p><p>
I want to give a specials thanks to <a href="http://use.perl.org/~Mr.+Muskrat/journal/">Matthew Musgrove</a> (<a href="http://twitter.com/mrmuskrat">@mrmuskrat</a>) for assistance in finding the group and event privacy settings. Also, Risto H. Kurppa is in the process of putting together <a href="http://etherpad.com/hTkg3aKS26">simple instructions on how to protect one's privacy on Facebook</a>, and is seeking contributions.
</p><p>
If you wish to receive e-mail when I make further posts on Facebook privacy, then join my <a href="http://www.facebook.com/group.php?gid=145076327240">privacy study</a> or subscribe to the relevant <a href="http://groups.google.com/group/facebook-privacy/">google group</a>.
</p>pjf2009-12-12T00:14:09+00:00journalNew Facebook Privacy and Youhttp://use.perl.org/~pjf/journal/39998?from=rss
<p> <b>New Facebook Privacy and You</b> <br>
Facebook are in the process of changing how their privacy settings
work, and today, I was given the option to migrate my account over
to the new scheme. These were
<a href="http://blog.facebook.com/blog.php?post=190423927130">announced
on the facebook blog</a> about a week ago, and sounded quite promising.
Unfortunately, I actually feel creeped out by the new system.
</p><p>
I'm going to start with the good thing. Yes, that's right, there's
only a single <i>good</i> thing about the change that I've found.
When making status updates, one now has fine-grained control over who
sees them. I can have a status update that's only seen by my family,
or only seen by my friends who like to dress as pirates, or by
everyone except my friends in Sydney. This is something that a lot
of people have been asking for, and it's great to see it implemented.
</p><p>
Unfortunately, the rest sucks.
</p><p>
I've some some <a href="http://pjf.id.au/blog/?position=590">blogging</a> about Facebook
privacy in the past, as well as a <a href="http://pjf.id.au/blog/?position=591">conference presentation</a>
and <a href="http://soundcloud.com/pjf/full-frontal-nerdity-facebook-privacy">radio
interview</a>. In all cases, I've recommended using the (difficult
to find, but incredibly valuable) button marked <i>Do not share any
information about me via the Facebook API</i>. When ticked, that
would block <i>almost</i> all the information I could gain about a
user with my tools, which try to squeeze as much information from
the Facebook API as possible. Admittedly, there were some leakages,
but not many.
</p><p>
That setting is now gone. <i>All</i> the applications, installed by
<i>all</i> your friends, now have access to your "publicly available
information", and there's not a damn thing you can do about it.
</p><p>
Publicly available information includes Name, Profile Picture, Gender,
Current City, Networks, Friend List, and Pages. What's more
disturbing for me is that the new <i>Applications and websites</i>
settings don't provide a control for sharing of events. In fact,
some of the <a href="http://www.facebook.com/group.php?gid=145076327240">volunteers
for my privacy study</a> have gone from me not being able to see
<i>anything</i> about them, to me being able to see their past,
current, and future events! That disturbs me, not least because
<i>I</i> want to control who can see which events I've attended.
</p><p>
The other thing to dwell on here is <i>pages</i> are now publicly
accessible. Pages are things that you can <i>fan</i>, such as
companies, or bands, or even <a href="http://www.facebook.com/follow.paul">privacy researchers</a>,
and <a href="http://www.facebook.com/perltips">newsletters</a>. To be
honest, these were creepy to begin with, because the <i>owner</i>
of a page could access all sorts of bulk demographic data about their
fans, and even export it for processing with other tools. But
now, the list of pages you've fanned are <i>public</i>.
</p><p>
Public information in Facebook is available to <i>everyone</i>, even
users who haven't logged in, and third party applications and websites. That's bad. You may have
have fanned pages that relate to controversial beliefs or sexual
preferences. Your probably don't want a potential employer
to be able to see these, but now there's nothing you can do about
this either, except for un-fanning those pages.
<i>I recommend you do this now.</i>
</p><p>
What's also conspicuously missing are the ability to control is what
goes onto the <i>recent activity</i> section of your Wall. I'm
looking at one my volunteers now who previously never had their
<i>like events</i> posted to their wall, and it's now covered with
them. This gives me a wealth of information about who they're
interacting with, which in turn is very useful if I'm planning
to do any social engineering.
</p><p>
In fact, it even links to events and posts that my friends like, but <i>that I can't see</i>.
I can even extract Facebook IDs (fbids) of the target posts.
While this doesn't in itself let me access the information directly, I
can certainly tell when two of my friends are liking the same post.
Based upon what I know about my friends, I may be able to infer more
than that, or ask one friend what another friend has just "liked".
</p><p>
You <i>can</i> manually remove recent activity from your wall, but you
have to do it manually by finding the event you want deleted, and selecting
the 'Remove' option that appears when you hover to the right of it.
Joining groups also results in recent activity (without the option of
turning it off), and there's a chance that other events may appear
there as well.
</p><p>
In fact, talking of groups, I can't find any privacy
controls for <i>them</i> either. For some of my friends, they're
visible. For some of my friends (and apparently for myself), they're
not. At the very least this is confusing, and it may simply represent different friends being at different stages of the privacy migraation.
Group information gets leaked all over the place anyway (recent events, groups recently joined, <i>and</i> publicly visible group lists), so regardless how this is being controlled, I can probably find
out which groups you're a member of regardless.
</p><p>
What I find most disturbing of all is that <i>my</i> friends list has gone
from completely private to completely public. While I've found the
control that allows me to no longer display my friends on my profile,
since they're now "publicly available information", they're still
accessible by other means. I actually consider my list of friends
to be <i>very</i> private; and I'm not at all happy that's changed.
</p><p>
Oh, and for those who remember me talking about <a href="http://pjf.id.au/blog/?position=590">dark stalking</a> to infer the existence of other users who had otherwise completely hidden themselves from view? Well, it's not that big an issue anymore, since I can now directly navigate to their pages (from their UIDs that I'd found previously), and see their "publicly available information". Good work in protecting their privacy, Facebook, good work...
</p><p>
<b>Recommendations</b> <br>
So, you might be wondering what I recommend? Well, to begin with,
make sure that you're happy with your new "publicly accessible
information" <i>really</i> being public. If you don't want your
grandparent, work colleague, potential employer, stalker, dog, guild,
or whoever else seeing your Name, Profile Picture, Gender, Current
City, Networks, Friends, or Pages, then <i>change or remove them
now</i>. They're available to <i>everyone</i>, including
unauthenticated users, "facebook-enchanced applications and websites",
and via the API.
</p><p>
Go to your profile page. Scroll down until you see
<i>Recent Activity</i>. Anything you don't want to see there,
delete it now. Anytime you join a group, or like an event, or
fan a page, or change your relationship status, or sneeze,
go back to Recent Activity and check if you're happy with that
being broadcasted.
</p><p>
Go through all the new privacy settings, and think about
each one. Some of them may not have even been mentioned in the
migration tool. My date of birth had unexpectedly went from being
completely private to compeltely public.
</p><p>
Stay informed. If you want updates from me, then
<a href="http://www.facebook.com/group.php?gid=145076327240">join my
privacy study</a> or subscribe to the relevant
<a href="http://groups.google.com/group/facebook-privacy">google
group</a>. Make sure you <a href="http://www.facebook.com/fbsitegovernance">fan the Facebook Site
Governance page</a>, since that's where many updates are posted,
and is a hub for user feedback.
If you want another perspective on the changes, the
<a href="http://www.eff.org/">Electronic Frontier Foundation</a>
have also posted <a href="http://www.eff.org/deeplinks/2009/12/facebooks-new-privacy-changes-good-bad-and-ugly">their
analysis</a> of the changes.
</p><p>
Finally, be aware this is not the first time a major website has changed their privacy policy, and it certainly won't be the last. If you really want something to remain private, you might want to avoid putting it on-line in the first place.
</p>pjf2009-12-10T10:45:02+00:00journalPerl 5.11.1http://use.perl.org/~pjf/journal/39808?from=rss
<p> <b>Perl 5.11.1</b> <br>
I've been behind in my blogging; time seems to fly when one is having fun, and I've been having a pretty good time recently. Most of it's involved working with people and <a href="http://www.flickr.com/photos/pfenwick/sets/72157622533258381/">science</a>, rather than technology. After I finish my taxes (not yet overdue), this may change.
</p><p>
In the meantime, I can't go without mentioning that <a href="http://use.perl.org/article.pl?sid=09/10/21/1439243">Perl 5.11.1</a> has been released. This isn't a stable version of Perl, but it's a point release on the way toward 5.12.0. I'm quite excited about 5.12.0 for many reasons I'll go into later, but they all involving modernisation of the language.
</p><p>
Of note in 5.11.1 (and hence 5.12.0) is that deprecation warnings are turned on by default. This isn't scary; it means that if you've got old code that's going to break in the future, then Perl will start warning you about that well in advance.
</p><p>
Of other note is a minor point, and that's the ability to include version numbers in package declarations. One can now write <tt>package Foo::Bar 1.23</tt>, rather than having to do cumbersome things with the <tt>$VERSION</tt> package variable.
</p>pjf2009-10-27T12:49:08+00:00journalTeaching Perl in Sydneyhttp://use.perl.org/~pjf/journal/39765?from=rss
<p> <b>Teaching Perl in Sydney</b> <br>
I've just spent the week teaching Perl in Sydney. It was good. Actually, it was <i>really</i> good. My class were close in ability, asked intelligent questions, thought through problems, asked for assistance when needed, quizzed me about advanced topics during the breaks, and generally showed themselves to be awesome. It felt just like the good ol' days.
</p>pjf2009-10-18T01:20:24+00:00journalFun with QR Codes and Perlhttp://use.perl.org/~pjf/journal/39731?from=rss
<p> <b>Fun with QR Codes and Perl</b> <br>
Short blog today, but cool tech. I've been playing around with 2D barcodes recently, and have just pushed a <a href="http://perltraining.com.au/tips/">Perl Tip</a> on <a href="http://perltraining.com.au/tips/2009-10-08.html">generating QR Codes with Perl</a>. Given how incredibly easy this is, I'm tempted to generate huge numbers of these and go sticking them around town for my own nefarious purposes.<nobr> <wbr></nobr>;)
</p>pjf2009-10-08T05:13:02+00:00journalToday I broke a world record, and got on TVhttp://use.perl.org/~pjf/journal/39694?from=rss
<p> <b>Today I broke a world record, and got on TV</b> </p><p>
Achievements for today:
</p><ul>
<li> <a href="http://www.flickr.com/photos/pfenwick/sets/72157622353921269/">Dressed like a pirate</a> </li><li> <a href="http://www.facebook.com/video/video.php?v=1228529387387&amp;oid=113873036596">Danced like a robot</a> </li><li> <a href="http://www.abc.net.au/news/stories/2009/09/29/2699971.htm">Broke a world record</a> </li><li> <a href="http://www.robogals.org.au/">Supported Robogals</a> </li><li> <a href="http://ur1.ca/cm17">Got on national TV</a> </li></ul><p> <b>Perl for Android</b> </p><p>
I have an Android phone. I love it. After <a href="http://code.google.com/p/android-scripting/">scanning a barcode</a> it now runs Perl. Sure, the example Hello World program dies with an error, but there's <a href="http://code.google.com/p/android-scripting/issues/detail?id=97">already a patch to fix that</a>.
</p><p>
This is a massively exciting achievement for me, and is even better for it having all of ninety seconds. It's now tantalisingly easy to do some pretty amazing things from my phone. I don't think I'm going to be short for a project any time
soon.
</p>pjf2009-09-29T15:05:59+00:00journalTalk like a pirate day, What's new in Perl 5.10.1http://use.perl.org/~pjf/journal/39666?from=rss
<p> <b>Talk like a Pirate Day</b> <br>
This Saturday was <a href="http://en.wikipedia.org/wiki/International_Talk_Like_a_Pirate_Day">International Talk Like a Pirate Day</a>, as well as Software Freedom Day. This year I sided with the pirates, donned a particularly <a href="http://neilcreek.smugmug.com/Events/Pirate-March-090919/9681123_YmXyk#654143279_2Lz5x">swashbuckling outfit</a>, and joined about <a href="http://neilcreek.smugmug.com/Events/Pirate-March-090919/9681123_YmXyk#653933718_oYjYZ">150 other pirates</a> to march through Melbourne, fight off ninjas, and singing the only <a href="http://www.youtube.com/watch?v=ZLsJyfN0ICU">sea-shanty</a> known by every member of our scurvy crew.
</p><p>
Afterwards, there was the <a href="http://www.flickr.com/photos/bluebec/3935488869/">world's best pirate cake</a>, crafted by <a href="http://use.perl.org/~jarich/journal/">jarich</a>.
</p><p>
I have some pictures of <a href="http://www.flickr.com/photos/pfenwick/sets/72157622296922081/">the day</a> and <a href="http://www.flickr.com/photos/pfenwick/sets/72157622289316675/">the party</a>, including the <a href="http://www.flickr.com/photos/pfenwick/3936148538/in/set-72157622289316675/">Jolly Tux</a>. For those people on Facebook, there's a <a href="http://www.facebook.com/photo_search.php?oid=109179473894&amp;view=all">lot of photos on-line</a>.
</p><p> <b>What's new in Perl 5.10.1</b> <br>
For those who missed it, <a href="http://perltraining.com.au/">Perl Training Australa</a> has a new <a href="http://perltraining.com.au/tips/">Perl Tip</a> on <a href="http://perltraining.com.au/tips/2009-09-07.html">What's New in Perl 5.10.1</a>.
</p>pjf2009-09-23T03:10:46+00:00journalRocking out at MXUGhttp://use.perl.org/~pjf/journal/39635?from=rss
<p> <b>Rocking out at MXUG</b> <br>
For a while, Melbourne has been running <a href="http://groups.google.com.au/group/mxug">MXUG</a>, the <i>Melbourne X Users Group</i>, where X is a technology you're interested in. It has a nice format: 15 minute talks, timed, with five minutes for questions. Then beer, pizza, lightning talks, and a trip down to the pub.
</p><p>
Despite me apparently living in Melbourne, I've never attended a MXUG meeting, but I'd been hearing good reports about them. Apparently one can become a speaker just by adding themselves to the speakers list (which is editable by members), and so I aggressively volunteered to give my (still formative) <a href="http://pjf.id.au/blog/?position=591">talk on facebook privacy</a>.
</p><p>
The talk went really well. The audience was warm, interactive, and laughed at all my jokes, <i>even the really lame ones</i>. Since I judge my self-worth on the size and enthusiasm of my audience, I decided that I really liked MXUG. Normally, that would be enough for me to call the night a success.
</p><p>
However enough people asked me about how I used my wiimote as a presentation device, so I volunteered for one of the five minute lightning talks. I had no slides. I did no preparation. I spent all the time I'd normally be working on my talk eating pizza, drinking beer, and talking to MXUG members.
</p><p>
So I was <i>especially</i> happy when I showed off how to use <a href="http://www.resplect.com/xwii">Xwii</a> to enable a tilt mouse, and as a presentation device. I then showed off how I could use the wiimote to control my music player, and sung a few bars from "I've got a feeling" from Buffy on stage. <i>That</i> would normally be enough to count the night as doubly-awesome, but oh no! It gets better.
</p><p>
My last Xwii profile showed how I can hook into a Guitar Hero controller, "but I don't have one of those here, so I can't show you". Sure enough, someone <i>produces a guitar out of nowhere</i>. A few seconds to pair it with my machine, a few more seconds to start up <a href="http://fretsonfire.sourceforge.net/">Frets on Fire</a>, and <i>I am rocking out on stage in front of a cheering crowd of 50 people</i>.
</p><p>
I then got to sit back down in the audience, and read about my exploits on twitter.<nobr> <wbr></nobr>;)
</p><p>
That, ladies and gentlemen, was my thrice-awesome night at MXUG.
</p>pjf2009-09-16T12:47:33+00:00journalFacebook Privacy talk at BarCampMelbournehttp://use.perl.org/~pjf/journal/39625?from=rss
<p> <b>Facebook Privacy talk at BarCampMelbourne</b> <br>
This weekend at <a href="http://barcampmelbourne.org/">BarCampMelbourne</a> I gave a talk on Facebook privacy, and what information I was able to extract from the API using some reasonable simple Perl programs. Due to the incredibly fast efforts of Avi Miller, this talk is now available on-line. If you're reading this blog on <a href="http://pjf.id.au/blog/">my main blog</a>, then you can also watch it below:
</p><p>
You can also watch the talk <a href="http://blip.tv/file/2601655">on the BarCampMelbourne channel on blip.tv</a>.
</p><p>
As mentioned at the end of my talk, you can be kept up-to-date on my research by joining my <a href="http://www.facebook.com/group.php?gid=145076327240">facebook study privacy group</a>, or the <a href="http://groups.google.com/group/facebook-privacy">google group</a>, as well as <a href="http://pjf.id.au/blog">my blog</a>.
</p>pjf2009-09-15T00:47:06+00:00journalDark Stalking on Facebookhttp://use.perl.org/~pjf/journal/39608?from=rss
<p> <b>Dark Stalking on Facebook</b> <br>
For a while I've been using Facebook's API and <a href="http://wiki.developers.facebook.com/index.php/FQL">Facebook Query Language</a> (FQL) via Perl's <a href="http://search.cpan.org/perldoc?WWW::Facebook::API">WWW::Facebook::API</a> module to run fairly innocent queries on my friends. If I visit a town, I'd like a reminder of who lives there. If I want to go rock-climbing, it helps if I can easily search to see which of my friends share that hobby. This is good, innocent stuff, and makes me glad to be a developer.
</p><p>
Last week I decided to play with event searches. If a large number of my friends are attending an event, there's a good chance I'll find it interesting, and I'd like to know about it. FQL makes this sort of thing really easy; in fact, finding all your friends' events is on their <a href="http://wiki.developers.facebook.com/index.php/Sample_FQL_Queries">Sample FQL Queries</a> page.
</p><p>
Using the example provided by Facebook, I dropped the query into my sandbox, and looked at the results which came back. The results were disturbing. I didn't just get back future events my friends were attending. I got <i>everything</i> they had been invited to: past and present, attending or not.
</p><p>
I didn't sleep well that night. I didn't expect Facebook to share past event info. I didn't expect it to share info when people had <i>declined</i> those events. I haven't found any way of retrieving friends' past events using Facebook's website, but using FQL made it easy. Somehow, implicitly, I thought old events would fade away, only viewable to those who already knew about them. I didn't expect them to stick around for my code to harvest, potentially years into the future.
</p><p>
Finding my friends' old events crossed a moral boundary I honestly didn't expect to encounter. Without intending, I really felt like I was snooping. It didn't matter that these friends had agreed to share this information under the Facebook <a href="http://www.facebook.com/terms.php">terms and conditions</a>. <i>I</i> would personally feel uncomfortable with this much information being so readily available, and assume my friends would feel the same.
</p><p>
However my accidental crossing of moral boundaries wasn't the only thing that kept me awake last night. I was also kept awake by wondering just <i>how much</i> information could I tease out of the Facebook API. What could I discover? What if I were evil?
</p><p>
However I'm <i>not</i> evil, so I put my code on hold for a while and made a call for volunteers. I'd be restricting myself to just using the Facebook API, and without them installing any additional applications. I wouldn't share their data in any way, but I'd be able to inspect and use it, and would try to provide them with a copy when I was done. To be honest, I was surprised by the response; I now have almost two dozen people who have agreed to participate, covering a wide range of lifestyles and privacy settings.
</p><p>
The results have been very interesting. I expected to be able to obtain personal information, including things like events, photographs, and friends; it doesn't take much imagination with the <a href="http://wiki.developers.facebook.com/index.php/Category:FQL_Tables">FQL tables</a> to find those. What was most interesting are some of the more creative queries I was able to run.
</p><p>
Most recently, I've been able to obtain status feeds, even for users who have <i>very</i> tight privacy settings, although I had to tweak my own application's privileges to do so. I don't know how far into the past these go, but they also come with <i>likes</i> information, and <i>comments</i>. This gives me a wealth of information on the strength and types of relationships people have. A person who comments a lot on another user's posts probably finds that user interesting. If I descended into keyword and text analysis, I may even be able to determine <i>how</i> they find that user interesting.
</p><p>
But by far the most interesting part of all of this have been <i>dark users</i>. Like <a href="http://en.wikipedia.org/wiki/Dark_matter">dark matter</a>, these users are not directly observable, usually because they've completely disabled API access. In fact, some of these users are <i>completely</i> dark unless you're a friend. They don't show up in search results. They don't show up on friends' lists. You can't send them messages. If you try to navigate to their user page (assuming you know it exists), you get redirected back to your homepage. These users have their privacy settings turned up real high, and are <i>supposed</i> to be hard to find.
</p><p>
However like dark matter, dark users <i>are</i> observable due to their effects on the rest of the universe. If a dark user comments on a stream entry, I can see that comment. More importantly, I can <i>see their user-ID</i>, and I can generate a URL to a page that will contain their name. I can then watch for their activities elsewhere. Granted, I can't <i>directly</i> search for their activity, but I can observe their effects on my friends. For want of a better term, I've been calling this "dark stalking".
</p><p>
What makes this all rather chilling is that I'm doing all of this via the application API. If your <i>friend</i> has installed an application, then it can access quite a lot of information about you, <a href="http://www.facebook.com/privacy/?view=platform&amp;tab=other">unless you turn it off</a>. If your <i>friend</i> has granted the application the <tt>read_stream</tt> privilege, then it can read <i>your</i> status stream. Even if a <i>friend of a friend</i> has done this, and you comment on your friend's status entries, it's possible to infer your existence and retrieve those discussions through dark stalking.
</p><p>
While I've always considered people's own carelessness to be the biggest threats to their own privacy, in the social 2.0 world it seems we need to be increasingly worried about our friends, too!
</p><p>
I'm preparing a detailed paper with the results of my research (which is still ongoing), but I will be presenting my preliminary findings at <a href="http://barcampmelbourne.org/">BarCampMelbourne</a>, this weekend (11-12th September 2009), with a further update at the <a href="http://www.tucs.org.au/">University of Tasmania Computing Society (TUCS)</a> on the 2nd October. A conference talk will invariably follow.
</p><p>
If you want to keep track of my research, then you can <a href="http://www.facebook.com/group.php?gid=145076327240">join the facebook group</a>, or the <a href="http://groups.google.com/group/facebook-privacy">facebook privacy group</a>. I prefer comments and questions to directly to the <a href="http://groups.google.com/group/facebook-privacy">facebook privacy group</a>, or <a href="mailto:pjf@perltraining.com.au">to me directly</a>.
</p>pjf2009-09-10T13:15:38+00:00journalBarCampMelbourne and Social 2.0http://use.perl.org/~pjf/journal/39582?from=rss
<p> <b>BarCampMelbourne and Social 2.0</b> <br>
In a week's time I'll be attending <a href="http://barcampmelbourne.org/">BarCampMelbourne</a>. Registrations close on September 7th, so if you want to attend, now's the time to register.
</p><p>
Now, BarCamps are pretty cool, but I'm particularly excited about this one because I'm going to be doing a talk on something I've been playing with for a while, which is having an Augmented Social Life, or just Social 2.0.
</p><p>
In the last few years, social networks have flourished, and an unprecedented amount of private data is available on-line. I'll be demonstrating how to use modern social networks to improve your social life. That includes techniques on turning Facebook into beer.
</p><p>
However what I find most fascinating is from a privacy standpoint. Whenever I find a social network, I go looking for an API, and some APIs are more revealing than others. In particular, Facebook provides Facebook Query Language (FQL), which allows for some incredibly powerful queries. What makes it particularly scary is that with the default privacy settings, one can mine a huge amount of private information by having a <i>friend</i> who has installed an ethically bankrupt application.
</p><p>
I'll be giving some rather real-world examples of using and abusing facebook. Some are good, like reminding you which friends are in a city you're visiting, or which friends share a particular hobby. However many are more scary. I can demonstrate how to find people you've met at events, based purely on their first name. How to look into other people's past, and see what they were doing years ago. How to find out what applications your friends have installed.
</p><p>
Of course, I'll be doing all my examples in Perl, many using the excellent <a href="http://search.cpan.org/perldoc?WWW::Facebook::API">WWW::Facebook::API</a> module.
</p>pjf2009-09-05T12:33:48+00:00journalFinding conferenceshttp://use.perl.org/~pjf/journal/39557?from=rss
<p> <b>Finding conferences</b> <br>
The other week my arch-nemesis, <a href="http://use.perl.org/~Alias/journal/">Adam Kennedy</a>, asked <a href="http://use.perl.org/comments.pl?sid=43687&amp;cid=70260">how the hell do I find out about all these conferences</a>. This was a reference to <a href="http://www.manifest.org.au/">Manifest</a>, where I did some <a href="http://www.flickr.com/photos/pfenwick/sets/72157622100698168/">photography</a> and generally had an absolute blast.
</p><p>
I wish there was some central repository of events that was kept up-to-date, provided an API and iCal feed, and contained rich meta-data. There's none that I know of; in fact, the closest I've found is Facebook, where one can use <a href="http://search.cpan.org/perldoc?WWW::Facebook::API">the API</a> and <a href="http://wiki.developers.facebook.com/index.php/FQL">Facebook Query Language</a> to exttract information on people and events. I would give a talk on a few practical applications, but as it depends heavily on friends willing to disclose their interests and activities to facebook, my augmented social life currently only rocks only if I'm living in Portland or Edinburgh.
</p><p>
The way I normally find out about conferences is still through good old-fashioned word-of-mouth. The ones I would like to attend in the coming year that I'm presently aware of are:
</p><p>
<b> <i>Technical conferences</i> </b>
</p><dl>
<dt> <b> <a href="http://conferences.yapcasia.org/ya2009/">Yet Another Perl Conference Asia (YAPC::Asia)</a>, 10-11 September 2009, Tokyo, Japan</b> </dt><dd>The world's biggest Perl conference. I've never been, and I'm missing it this year due to an already full travel schedule. I'd <i>love</i> to attend next year.</dd><dt> <b> <a href="http://events.linuxfoundation.org/events/linuxcon">Linuxcon</a>, September 21-23rd 2009, Portland OR, USA</b></dt>
<dd>
I've never been to Linuxcon, but it's in Portland, and I love Portland. Enough said.
</dd><dt> <b> <a href="http://gracehopper.org/2009/">Grace Hopper Celebration of Women in Computing</a>, September 30th - October 3rd 2009, Tuscon AR, USA</b> </dt><dd>Most of my friends and associates have probably heard me soapbox about how we have appalling gender equality in IT, and especially in FOSS. The Grace Hopper conference provides an <a href="http://gracehopper.org/2009/conference/2009-ghc-full-conference-program/">extensive programme</a> on women in computing, and I'm incredibly sad I won't be there this year.<nobr> <wbr></nobr>;(</dd><dt> <a href="http://www.osdc.com.au/"> <b>Open Source Developers' Conference (OSDC)</b></a> - 25-27th November 2009, Brisbane, Australia </dt><dd>OSDC is a beautiful melting pot of developers from different languages, with healthy competition between speakers. It also features the world's best lightning talks. This year OSDC is in beautiful BrisVegas, making it the perfect place to spend a few days afterwards to relax.
</dd><dt> <b> <a href="http://www.usenix.org/events/lisa09/">Large Installation System Administration Conference (LISA)</a>, November 1-6th 2009, Baltimore, USA</b> </dt><dd>LISA has been on my list of conferences to attend for years now, as apparently it's <i>the</i> sysadmin conference to go to.</dd><dt> <b> <a href="http://www.lca2010.org.nz/">Linux.conf.au</a> - 18-23rd Jan 2010, Wellington, New Zealand</b> </dt><dd>LCA is, in my opinion, the world's hardest conference to speak at. They have a huge number of submissions each year to their call-for-papers. LCA2010 is happening in Wellington, New Zealand, which features the world's second-best coffee, most civilised Perl Mongers (sponsored beer at the meetings), and is choc full of awesome people.</dd><dt> <b> <a href="http://www.socallinuxexpo.org/">Social Linux Expo (SCALE)</a>, 19-21st February 2010, Los Angeles, USA </b> </dt><dd>I only learnt about SCALE toady. Last year's speaker list contains at least half a dozen people I'd cheerfully fly across the world to see, so this has shot very high on my desired conference list.</dd><dt> <b> <a href="http://sage-au.org.au/display/conf/Home">SAGE-AU</a>, The System Administrators Guild of Australia, August 2010</b> </dt><dd>
SAGE-AU was my first conference speaking experience, except that I never spoke. I was pulled in as a last-minute replacement speaker for <a href="http://en.wikipedia.org/wiki/Randal_Schwartz">Randal Schwartz</a>, who was having troubles making it to the conference, but eventually made it. Enchanted by the idea that I <i>could</i> speak at conferences, the next few SAGE-AU conferences became the start of my speaking career. SAGE-AU also has the best conference dinners ever, which makes me super-sad I missed the conference dinner at <a href="http://sage-au.org.au/display/conf/Conference+Dinner">DreamWorld</a> this year.
</dd><dt> <b> <a href="http://opensourcebridge.org/">Open Source Bridge</a>, June 2010, Portland OR, USA</b> </dt><dd>I missed Open Source Bridge this year, and I cried and cried, because it sounds like the best conference I've never been to. Not only is it in Portland, which I love, but it's organised by a team including <a href="http://www.chesnok.com/">Selena Decklemann</a>, whom I love, and has a <a href="http://opensourcebridge.org/events/2009/sessions">awesome list of speakers</a>. Nothing is going to stop me from attending in 2010.
</dd><dt> <b> <a href="http://yapc10.org/yn2009/">Yet Another Perl Conference, North America (YAPC::NA)</a>, June 22-24th 2010, Pittsburgh USA</b> </dt><dd>I've never made it to a YAPC::NA before, but I had such a blast at YAPC::EU that I'm now convinced that I have to go.</dd><dt> <b> <a href="http://en.wikipedia.org/wiki/O'Reilly_Open_Source_Convention">OSCON</a>, The O'Reilly Open Source Convention, July 2010, Portland OR (Hopefully), USA</b> </dt><dd>I've been to two OSCONs now, and both of them have events that represent some of the best experiences of my life. For those of you who have noted that OSCON is expensive, then consider submitting a talk proposal (speakers get in for free), or <i>tutorial proposal</i>. Tutorial presenters usually qualify for travel assistance, and for me this makes OSCON one of the most cost-effective conferences in the world.
</dd><dt> <b> <a href="http://www.yapceurope.org/">Yet Another Perl Conference Europe (YAPC::EU)</a>, August 2010, Pisa, Italy</b> </dt><dd>
YAPC::EU was my first YAPC this year, and I had an absolute blast. The thought of attending again just thrills me with excitement. Plus, if Italy makes coffee anywhere near as good as they make in <a href="http://en.wikipedia.org/wiki/Lygon_street">Lygon Street</a>, it will be worth it for the caffeine alone.</dd></dl><p>
<b> <i>Technical unconferences</i> </b> <br>
There are more technical unconferences than I could possibly poke a stick at, and I'd go batty trying to list them all. Instead, I only want to make a few special (and local) mentions here.
</p><dl>
<dt> <b> <a href="http://barcampmelbourne.org/">BarCampMelbourne</a> - 12-13th September 2009, Melbourne, Australia </b> </dt><dd>The last Melbourne BarCamp rates as one of the best unconferences I've ever attended, and I expect the next one will be even better! There are only limited spots, so now's the time to sign up.</dd><dt> <b> <a href="http://vic.au.stixcamp.org/">StixCamp</a>, Victoria, Australia</b> </dt><dd>Last year was the first ever StixCamp in Australia. Grab a bunch of geeks, get them to bring tents and camping equipment, and take them out to a beautiful winery in central Victoria. Mix in high-speed wireless Internet, some amazing food, and a wonderful atmosphere, and you have an experience not to be missed.</dd><dt> <b> <a href="http://baacamp.org/">BaaCamp</a> aka KiwiFoo, New Zealand</b> </dt><dd>An invite-only event; the running joke is this should be called <i>FontCamp</i> (Friends of <a href="http://en.wikipedia.org/wiki/Nathan_Torkington">Nat Torkington</a> Camp). BaaCamp sports an absolutely fascinating mix of people, superb catering, and late-night <a href="http://en.wikipedia.org/wiki/Mafia_(party_game)">Werewolf</a> games. Plus, it's in beautiful New Zealand. I've only been to a single BaaCamp, but would love to be back for a second.</dd></dl><p> <b> <i>Culture</i> </b> <br>
I have more enough than enough interests to keep me occupied, and many of these have associated expos, conventions, festivals, and the like. Again, there are more of these than I could possibly list, so highlights only are below.
</p><dl>
<dt> <b> <a href="http://www.paxsite.com/">Penny Arcade Expo (PAX)</a> - 4-6th September 2009, Seattle, USA</b> </dt><dd>PAX is a gaming festival, and I would dearly love to be there year, but unfortunately I'll be missing out.</dd><dt> <b> <a href="http://www.facebook.com/event.php?eid=109179473894">Melbourne Pirate Parade</a> - 21st September 2009, Melbourne, Australia</b> </dt><dd>Come dressed as a pirate, yer scurvy dogs, and let's plunder Melbourne together!</dd><dt> <b> <a href="http://www.manifest.org.au/">Manifest</a> the Melbourne Anime Festival - August 2010</b> </dt><dd>I love Manifest. It's a huge celebration of anime culture, with the cosplay competition being the highlight of the weekend. I've been lucky enough to have a camera at at both <a href="http://www.flickr.com/photos/pfenwick/sets/72157607549394472/">Manifest 2008</a> and <a href="http://www.flickr.com/photos/pfenwick/sets/72157622100698168/">Manifest 2009</a>. There's also a single-day Minifest that happens each year in April.</dd><dt> <b> <a href="http://www.comic-con.org/">San Diego Comic Con</a> 22-25th July 2010, San Diego, USA</b> </dt><dd>I've never been to SDCC. I keep hearing amazing stories every year. It had better not clash with OSCON.</dd></dl><p>If you'd like to see me at a conference that I haven't mentioned above, it's quite likely because I haven't heard about it! Drop me an <a href="mailto:pjf@cpan.org">e-mail</a> and let me know, especially if there's an open call for papers.</p>pjf2009-08-31T01:02:07+00:00journalPerl 5.10.1 releasedhttp://use.perl.org/~pjf/journal/39528?from=rss
<p> <b>Perl 5.10.1 released</b> <br>
I have a commitment to <a href="http://www.enlightenedperl.org/ironman.html">blog about Perl every week</a>, and this week I was really worried about what I'd write. I've just returned from five weeks of International travel, and my scant time back in Melbourne has been spent <a href="http://www.flickr.com/photos/pfenwick/sets/72157622100698168/">taking photos</a> at <a href="http://www.manifest.org.au/">Manifest</a>, rather than working on anything technical.
</p><p>
It's good that I haven't done anything newsworthy, because it would be completely over-ridden by the news that <b> <a href="http://www.nntp.perl.org/group/perl.perl5.porters/2009/08/msg150172.html">Perl 5.10.1 has been released</a> </b>. This release has a special place in my heart, as 5.10.1 includes <a href="http://search.cpan.org/perldoc?autodie">autodie</a> as a core module, and as most of you know, I'm very fond of autodie.
</p><p>
I'm in the process of writing a "What's New in Perl 5.10.1" summary, which will appear as a <a href="http://perltraining.com.au/tips/">Perl Tip</a> in the next couple of days. Subscribe by <a href="http://perltraining.com.au/cgi-bin/mailman/listinfo/perl-tips">e-mail</a>, <a href="http://perltraining.com.au/tips/index.atom">Atom</a>, or <a href="http://www.facebook.com/pages/Perl-Tips/109712847802">Facebook</a> if you want to see the tip as soon as it goes out.
</p>pjf2009-08-25T01:42:48+00:00journalUK and Ireland thank-youshttp://use.perl.org/~pjf/journal/39474?from=rss
<p> <b>UK and Ireland thank-yous</b> <br>
I've spent the last few days travelling around the UK and Ireland,
and it's just been lovely. By far one of the nicest things about
travelling is the hospitality and generosity of the Perl community,
and so I want to take a moment to say thank-you to a few special
people who made my travels so enjoyable.
</p><p>
Thank-you to Drew, Kimberley, and Samantha for giving up their home
in Dublin, driving around two crazy Australians, and picking us up
when we get completely lost. An extra special thanks to Kimberley
for some amazing cooking; it's not every day that we get to stay
with a professional chef!
</p><p>
Thank-you to Murray and Becky for giving us booze, conversation,
lodging, and wifi in their most amazing Edinburgh home. I really
wish I got to spend more time in Edinburgh; both the city and its
people are beautiful, and haggis is plentiful and tasty.
</p><p>
Thank-you to Andy Armstrong for driving us around the spectacular
English countryside, putting us up for the night (and sleeping
on the couch!), and then driving us on to Darlington. Given the
cost of trains in the UK, Andy saved us a small fortune. Particular
thanks goes to Andy for the trip to
<a href="http://en.wikipedia.org/wiki/Hadrian's_Wall">Hadrian's Wall</a>
and <a href="http://en.wikipedia.org/wiki/Vercovicium">Vercovicium</a>,
which was spectacular!
</p><p>
Thank-you to my Great Aunt Jennie, who isn't at all involved
in the Perl community, but gave us lunch, tea, great conversation,
and acted as a guide for many miles of walking and photography
around Darlington.
</p><p>
Thank-you to the charity shop five minutes walk from Great Aunt
Jennie's house, which had an almost complete <a href="http://en.wikipedia.org/wiki/Space_Hulk">Space Hulk</a> 1st Edition
set with expansion cards for only &#163;1.50.
</p><p>
Thank-you to Smylers, for putting us up in Leeds, and in particular
for putting up with me running off around the city with my pirate
friends.
</p><p>
Finally, thank-you to L&#233;on Brocard for organising a London.pm meeting, and
for Piers Cawley for the lift to the airport.
</p>pjf2009-08-16T16:44:08+00:00journalYAPC::EU 2009 microreporthttp://use.perl.org/~pjf/journal/39427?from=rss
<p> <b>YAPC::EU 2009 microreport</b> <br>
I'm still travelling, and so I don't have a reliable sources of connectivity, time, or caffeine. As such, this report is much briefer than I would like.
</p><p>
I made it to YAPC::EU 2009 and survived. As my first YAPC ever, it was great to be at a conference where I could assume that everyone knew Perl. It was also great to meet a number of the people who I'd been working with on-line for years, but never met in person.
</p><p>
It seems that lots of people use autodie. That's good, because it's hard to gauge feelings and reactions on-line, but it's easy when a small group grabs one after a talk and asks detailed questions about its internals. There seems to be a lot of demand for autodie to provide the ability for third-party code to see if it's enabled, and also a lot of demand (not least for me) for Perl to call a special method on exception objects if they're about to kill one's process, as opposed to be caught and handled.
</p><p>
The conference highlight for me were the people. They were very warm, very willing to participate, and heckled only about things I could easily answer. I suspect that means they were also being very nice, since they were a <i>very</i> knowledgeable audience. Privately, everyone was extremely accommodating. Apparently travelling from Australia makes one special, and I felt very special indeed from all the attention.
</p><p>
Looks like I'm out of time for this entry already. I've got yet another flight tomorrow, so I'll try to squeeze out some writing on the plane.
</p>pjf2009-08-09T08:53:40+00:00journalMalayasia, London, Lisbon, oh my!http://use.perl.org/~pjf/journal/39391?from=rss
<p> <b>Malaysia, London, Lisbon, oh my!</b> <br>
If I seem slow to respond, distracted, or exhausted, here's why...
</p><dl>
<dt>15-18th July</dt><dd>Portland, Oregon</dd><dt>19-24th July</dt><dd>San Jose, California (OSCON)</dd><dt>25-27th July</dt><dd>San Franscisco, California</dd><dt>28th July</dt><dd>On a plane above the Pacific (yes, the whole day!)</dd><dt>29-30th July</dt><dd>Home in Melbourne, Australia</dd><dt>31st July</dt><dd>Kuala Lumpur, Malayasia</dd><dt>1st August</dt><dd>London, England</dd><dt>2-5th August</dt><dd>Lisbon, Portugal (YAPC::EU)</dd><dt>6th August</dt><dd>Madrid, Spain</dd><dt>7-10th August</dt><dd>Dublin, Ireland</dd><dt>11th August</dt><dd>Edinburgh, Scotland</dd><dt>12-13th August</dt><dd>Darlington, England</dd><dt>14th August</dt><dd>Leeds and London, England</dd><dt>15-18th August</dt><dd>Kuala Lumpur, Malaysia</dd></dl><p>
Yes, that's a whole month of solid travel, averaging only about 2.3 days in any one place at a time. If you wish to track my trips (eg, to see if I happen to arrive in your part of the world), or if you're curious, you can do so via <a href="http://www.dopplr.com/traveller/pjf/public">dopplr</a>.
</p><p>
Right now I'm in Lisbon. I'm exhausted, and have talks to prepare for YAPC::EU. However I suspect a bath and a snooze is going to trump talk preparation for once.
</p>pjf2009-08-02T12:24:47+00:00journalOSCON 2010 adventureshttp://use.perl.org/~pjf/journal/39374?from=rss
<p> <b>OSCON 2009 adventures</b> <br>
I think that I've found a new term to describe myself. <i>Adventuretarian</i>. I live off adventure.
</p><p>
<b>OSCON</b> <br>
This was my second year at OSCON, and my first visit to San Jose. Unlike last year, where I was a self-described <a href="http://pjf.id.au/blog/toc.html?tag=oscon2008">OSCON rockstar</a>, this year I was happy to take a more relaxed approach. I wasn't giving as many talks, the talks I gave were all quite technical, and I didn't keynote. However, that doesn't mean I didn't have fun; far from it!
</p><p>
This OSCON I played around a bit with outfits. I'd picked up a pirate hat earlier in Portland, and used it in my tutorial when talking about <a href="http://perltraining.com.au/tips/2008-05-23.html">PAR, the Perl Archiver</a>. The hat ended up being one of my best fashion decisions ever, as it found its way into <a href="http://www.flickr.com/photos/juliancash/3758284452/">photo</a> <a href="http://www.flickr.com/photos/juliancash/3757488393/">shoots</a>, restaurants, and social events. In terms of getting noticed, or being popular with small children, or having random people say "Arrrr..." as they walk past, a pirate's hat is awesome.
</p><p>
My other outfit was my Star Trek uniform, used for my talk on <i>The Art of Klingon Programming</i>. It's not something I can ever imagining wearing for more than an hour or two at a time, as it's hot, and doesn't breathe. Of course, it's fantastic when you want to hang out with the cast of <a href="http://pjf.id.au/blog/?position=581">Trek in the Park</a>.
</p><p>
Talking of <i>The Art of Klingon Programming</i>, it looked like it came across smashingly well, but I had forgotten to remind the audience to <a href="http://en.oreilly.com/oscon2009/public/schedule/detail/8165">rate the talk</a> if they liked it. So if you were there, and you enjoyed the session, go rate it now.<nobr> <wbr></nobr>;)
</p><p>
I went to less parties than last year, and so met fewer people, but I was able to spend more time with people who I really enjoy as a result. One of the highlights was a beach trip down to Santa Cruz and around to Half Moon Bay, with some pretty spectacular beaches, cliffs, and even a light-house.
</p><p>
<b>San Francisco</b> <br>
After the conference was a trip to San Francisco, staying with <a href="http://www.juliancash.com/">Julian</a> (the most amazing photographer ever), and Jackie (the most amazing story-teller ever). Julian and Jackie's house was a hub of creativity and creative people. If I hadn't been so happily exhausted for OSCON I would have made more of it, but as it was I feel I was almost bordering on impolite by crashing and immersing myself in e-mail.
</p><p>
The next day involved a relocation to Skud's house, a home-cooked meal (my first since Schwern's excellent cooking in Portland), and discussions about San Francisco burrito etiquette, gender issues, booth babes, Australian history, pirates, musicals, and conferences. Skud, Schwern, Jacinta, myself, Valorie, and Andre, who I thought I had never met went out for lunch and ice-cream. Of course, in true small world fashion, Andre was Australian, and knew me from linux.conf.au. He's now working for Pixar, which sounds pretty sweet.
</p><p>
My last day in America involved Schwern, Jacinta, and myself going of a tour of the more touristy parts of San Francisco. Crabs and clam chowder seem to be a big deal in these parts, and I was given a "sample" of chocolate that I'm sure provided me with my daily intake of sugar in a single bite. Unfortunately we didn't have enough time for a big get-together of all the SF residents and visitors before I had to fly out. The flight home was good, with an unexpected exit row seat providing lots of legroom.
</p><p>
<b>Home</b> <br>
The only downer of the whole experience is that Jacinta had managed to wrangle me a cool (first generation) Google Android phone, which I discovered that I loved dearly, but which seemed to have fallen from my pocket inside the taxi home. Attempts to recover it were without success, and without having first recorded all the handset details I can't remote-brick the phone, so it's unlikely I'll ever see it again. Jacinta's now given me <i>her</i> android phone, and while I feel incredibly special and grateful, I'm paranoid about losing it, too!
</p><p>
Today I'm preparing my new laptop, which is about twice as awesome as my old one, comes with a three year worldwide warranty, and costs only a third of the price. Moore's Law + USA = Laptop win. I'm also paying bills, sending out invoices and faxes, paying super, catching up on tax, and generally doing all the things that keep a small business running.
</p><p>
Tonight I'm on a flight to Europe for YAPC::EU, which possibly represents the first conference ever where I have all my talks prepared and ready before the conference starts. I'll be back in Australia in a couple of weeks time, no doubt exhausted from my trip and looking forward to the next one.
</p>pjf2009-07-30T00:31:03+00:00journalAround the world with Perlhttp://use.perl.org/~pjf/journal/39361?from=rss
<p> <b>Around the world with Perl</b> <br>
I've just finished my trip to the USA, which included adventures in Portland and San Francisco/San Jose and surrounds. I had a blast at OSCON, and will post memoirs soon. Right now I'm about to board a plane, fly back to Melbourne, do a stack of paperwork, and then fly off to Europe for YAPC::EU.
</p><p>
A huge thanks to everyone who brought me goodies, showed me around, took me adventuring, let me crash on their couch, <a href="http://www.flickr.com/photos/juliancash/3758284452/in/set-72157621663915357/">took photographs</a>, brought me food, gave me hugs, listened to my talks, commented on my talks, cycled back from hiking, took me to ice-cream, or any of the above.
</p><p>
More blogging when I arrive back in Australia.<nobr> <wbr></nobr>;)
</p>pjf2009-07-28T05:16:41+00:00journalPortland Adventures IIhttp://use.perl.org/~pjf/journal/39315?from=rss
<p> <b>Portland Adventures II</b> <br>
Today is my last day in Portland, and wow, what an adventure it's been. Friday was spent writing slides, relaxing in tea-houses (green mango bubble-tea with wifi rocks!), and a trip to <a href="http://portland.beerandblog.com/">Beer and Blog</a> at the Green Dragon.
</p><p>
Beer and Blog I was particularly pleased with on many different levels. Ua had invited me to this fine establishment at last year's OSCON, and this represented me arriving, albeit a year late. I had a chance to socialise with cool new people, although I didn't realise just <a href="http://twitter.com/WHIFFIES">how</a> <a href="http://fastwonderblog.com/about/">cool</a> some of them are until I did my research.
</p><p>
What made Beer and Blog really special was that during one of my conversations there was a comment that, "there's another Australian here, he's only just moved over". That other Australian was <a href="http://twitter.com/McClure">Mike McClure</a>, with whom I went to University, but had not seen in about a decade!
</p><p>
Oh yes, Beer and Blog also had free beer. That also made it special.<nobr> <wbr></nobr>;)
</p><p>
That evening was I was given a tour of Portland by Schwern, Kate, Ua, and Nick. That included beer, dinner, a walk along the river, and a trip to <a href="http://en.wikipedia.org/wiki/Voodoo_Doughnut">Voodoo Doughnuts</a>. I'd been assured many times that my life would not be complete without having gone to Voodoo Doughnuts, and having been there, I can agree.
</p><p>
While I've been in Portland, <a href="http://chesnok.com/">Selena</a> has been a wonderful host, and I'd felt that I'd been a terrible guest. Selena is a morning person, and I routinely came home late, slept in, and disappeared at odd times for ice-cream or doughnuts. On Saturday morning, I was determined to buck this trend.
</p><p>
With thanks to Jacinta and Schwern who went on a secret ninja grocery mission, I got up extra-early and prepared breakfast. Coffee, juice, amazing toast, and an omelette made with thinly sliced super-fresh swiss brown mushrooms. The look on Selena's face and the huge thank-you hug made it all worthwhile.<nobr> <wbr></nobr>;)
</p><p>
The rest of Sunday was amazing. After a snooze I made it to <a href="http://pdxpipeline.wordpress.com/2009/07/09/portland-theater-star-trek-in-the-park-july-11-26/">Trek in the Park</a>. This is theatre at its absolute finest. Trek in the Park is brimming over with quality, humour, and superb acting. If you haven't seen it yet, then tonight and next weekend are your last chances to do so, and it won't cost you a cent.
</p><p>
I wore my starfleet uniform to Trek in the Park, which was a huge win. I had arrived a little late, but many members of the audience members must have assumed that I was part of the production, and as such I was able to get a rather nice seat. But the biggest win was the cast reaction; having a guy in uniform and an Australian accent seemed to be something special, which meant that I had no problems meeting the cast, learning about the production, and getting lots and lots of <a href="http://www.facebook.com/photo.php?pid=2091260&amp;l=08db68476b&amp;id=549169610">photographs</a>. One amusing fact about the whole thing is that in true cosplay fashion, all the uniforms were made by Kirk's mum.<nobr> <wbr></nobr>;)
</p><p>
In the evening was dinner with <a href="http://twitter.com/stacybird">Stacy</a>, one of my most favourite Portlandians. Stacy was <a href="http://pjf.id.au/blog/?position=559">my guide at OSCON 2008</a>, where she gave up much of her time to show me around town, explain the local customs and delicacies, educate me regarding local mushrooms, and stop me from cycling on the wrong side of the road. Stacy was out and about bicycle-hiking this week, but cut short her trip and cycled all the way back to Portland in record time for dinner, making me feel incredibly special.
</p><p>
Today ends my Portland adventures, as I head to San Jose for OSCON 2009, where I'm presenting <a href="http://en.oreilly.com/oscon2009/public/schedule/detail/8451">Doing Perl Right</a> and <a href="http://en.oreilly.com/oscon2009/public/schedule/detail/8165">The Art of Klingon Programming</a>.
</p>pjf2009-07-19T19:25:09+00:00journalPortland Adventureshttp://use.perl.org/~pjf/journal/39310?from=rss
<p> <i>Portland Adventures</i> <br>
Last year I went to <a href="http://pjf.id.au/blog/toc.html?tag=oscon2008">OSCON 2008</a> in Portland, Oregeon (PDX), and had a fantastic time. I made many great friends, and fell in love with the town and its people. I was looking forward to returning to PDX every year, but unfortunately this year OSCON moved to San Jose.
</p><p>
Not to be denied the Portland experience by mere conference shifts, I arranged to arrive in America a week early, and re-visit PDX the week before OSCON. I'm here right now with <a href="http://use.perl.org/~jarich/journal/">Jacinta</a>, and have had an incredibly social time with friends both old and new.
</p><p>
We've been staying with <a href="http://www.chesnok.com/">Selena</a> who has been nothing short of amazing. Accommodation, network access, food, transport, good coffee, and most of all fantastic company have made me feel extremely privileged. Selena knows <i>everyone</i>, and is incredibly popular, so we get invited to all the cool events too! I've met more people in the last two days than I can possibly count. Selena also has a beautiful house; and I'm currently sitting under a tree, next to a pond, with a fountain, fish, power, and wireless. I could happily make this my new office.
</p><p>
I've had a chance to catch up with <a href="http://www.katealaurel.com/">Kate</a> and <a href="http://schwern.org/">Schwern</a>, who caught me on the night I landed in PDX for gelato and conversation. Hanging with Kate and Schwern is like fractal socialising; I'll meet someone, discover we have common interests, they'll introduce me to someone else, and the process repeats. It was only at 2am when I was talking to Kate's house-mate's boyfriend about <a href="http://en.wikipedia.org/wiki/Magic_the_gathering">Magic: The Gathering</a> that my body reminded me that I hadn't slept in a real bed for more than 48 hours, and that passing out in the middle of a conversation would probably be considered impolite.
</p><p>
Yesterday I went to the Portland Pirate Shop with the intention of picking up a puffy white shirt, and was informed that I had just missed <a href="http://en.wikipedia.org/wiki/Plunderathon">Plunderathon</a>, and that all the puffy shirts are gone, so I was doubly sad. Next year I'll need to make sure to arrive in PDX much earlier, so I can participate in costumed piratical goodness.
</p><p>
Picking what to do in the evening was hard. Portland seems to be the place where on a Thursday night one needs to choose between a mountain-biking festival, PostgreSQL user-group, Perl hackathon, and <a href="http://www.igniteportland.com/">Ignite Portland</a>. It's a great place to be a geek.<nobr> <wbr></nobr>;)
</p><p>
In the evening I made it to Ignite, which I've decided that I <i>have</i> to speak at if I get the chance. The audience is relaxed, friendly, looking to be entertained, and all have beer. The talks were pretty good, too. I even met one person who recognised me from my work on the Perl 5.8.9 release notes.
</p><p>
Afterwards I made it to the tail end of the hackathon, drank <a href="http://justatheory.com/">David's</a> beer at a pub that had a huge number of board-games, and retired back to Selena's with Schwern and Jacinta, where we talked late into the night about all sorts of Perl community ideas, including a cute little plan involving community achievement badges that I like to think of as "Perl Scouts".<nobr> <wbr></nobr>;)
</p>pjf2009-07-17T23:07:00+00:00journalSaudi Arabian Adventures, Days 6-7http://use.perl.org/~pjf/journal/39299?from=rss
<p> <i>These are the last of my Arabian Adventure blogs, which means I'm now caught up with my blogging backlog in time for OSCON.</i> </p><p> <b>Saudi Arabian Adventures - Day 6</b> <br>
Today was my last day of teaching, and a challenging one. I had
more variation in students backgrounds and skills for this
class, which always makes teaching more interesting. Lots of
practical examples seemed popular, so they were the main fare
for the day. It's easy to show off Perl's strengths when working
with text.
</p><p>
During my week in Saudi Arabia I've discovered a few interesting
things. While Saudi Arabia as a country fares poorly with
women's rights, it's clear that Aramco as a company (or this campus,
at least) was very progressive.
</p><p>
Women aren't allowed to drive on public roads in Saudi Arabia.
As one of my colleagues put it, "we're hoping that will change
soon, but we've been hoping twenty years". However the Aramco
campus isn't public, and so there's no problem with women
driving inside. Likewise, Aramco recruits the brightest
girls from high school. They go through an English
language program, and are then sent overseas (usually America or
Europe), to earn their degree. They're required to work for
Aramco for an equal period to the time they spent studying overseas,
although it appears most continue working well beyond that. It
sounds like an almost identical scheme to what Australia has with
some defence force scholarships.
</p><p>
On my class I had three women out of twenty-four students overall,
which is on par for what we get for courses conducted
inside Australia. I fear the gender imbalance in IT is a worldwide
problem.
</p><p> <b>Saudi Ararbian Adventures - Day 7</b> <br>
My last day in Saudi Arabia didn't involve teaching, something
for which I was extremely grateful. My body clock had fully
adjusted to local time, so waking up at 5am was now feeling like
waking up at 5am. I slept in, slept some more, had brunch, and
walked down to the entertainment complex. It wasn't very busy,
and nobody seemed interested in checking passes, so I walked
straight in. Sure enough, there was a bowling alley, a cafe,
and a library.
</p><p>
I had a late flight back to Dubai, and Fuad had very generously
offered to show me about in the afternoon, Breaking the "never turn
down an adventure" rule, I actually called Fuad, and turned down an
adventure. I was utterly exhausted from the last week, and I seemed to
have an endless amount of e-mail and patches to catch up on.
</p><p>
The lack of adventure during the day was more than compensated by
the taxi ride that night. It appears that cars put on their hazard
lights to tell other road users that they're sticking to the speed
limit. In fact, the speed limit appears as if it's the minimum speed
at which people are willing to drive.
</p><p>
When we got to the airport, I sighed a huge sigh of relief, thanked
my driver, and grabbed my bags. There was an awesome looking mosque
opposite, and I went to grab my camera for a photograph. Then
I noticed that outside the airport were two guards, heavily armed,
and sitting <i>on a tank</i>, smoking. This would have made an
even better photograph, until I realised I'd be photographing
two heavily armed guards, <i>on a tank</i>, that was parked next to a
"no photographs" sign, in a country where I don't speak the language. Consequently, I decided to leave the camera in my bag.
</p><p>
The airport was like airports everywhere, although with less respect
for the "no smoking" signs. Most notably, one of the guards who was
screening baggage was smoking. Again, I thought this would make
a great photograph, and again I thought better of it. Despite the
fact that I was told that <i>everyone</i> in Arabia smokes, I actually
found it to be quite rare, despite the exceptions I've mentioned here.
</p><p>
Getting through passport control took only one hour, as opposed to
three hours getting into the country. I discovered that the airport
has a duty free section, but it was rather small, and didn't appear
very popular.
</p><p>
The flight back to Dubai was short and pleasant. One of the
cabin crew had recognised me from my flight from Melbourne, and we
had a nice chat. Another managed to find what I swear was the
best coffee I'd had all week. I suspect they have a secret espresso
machine hidden in business class, which was broken out purely for
my benefit.
</p><p>
Arriving in Dubai I remembered to pick up both my bags, changed my
Riyals to Dirhams, and looked at the time. It was about 2:30am in
Dubai, which made it around 8:30am in Australia. Through the wonders
of free wireless at Dubai airport, and VoIP, I called home for
satisfying price of about 2.5 cents/minute.
</p><p>
A short taxi ride later, I was in my hotel, with NetStumbler running
and me waving my laptop around on the balcony. I discovered a lack of
promising hotspots, and went to sleep.
</p><p>
<i>You read my adventures in Dubai starting <a href="http://pjf.id.au/blog/?position=573">here</a> </i>.
</p>pjf2009-07-15T22:02:13+00:00journalSaudi Arabian Adventures - Days 3-5http://use.perl.org/~pjf/journal/39251?from=rss
<p> <i>These events happened during my recent trip to Saudi Arabia.</i> </p><p> <b>Saudi Arabian Adventures - Days 3-4</b> <br>
On the third day of teaching my class swapped over to new students
at lunchtime. Included in this group was Abdulaziz, who I had
spoken to on the phone a few times, and who formally introduced
me to the class on the first day. Abdulaziz spoke English with
an American accent, and I was later to learn that he gone to
college in America.
</p><p>
Lunch on the second last day Abdulaziz took me to the golf course.
Saudi Aramco has a <i>huge</i> golf course, with beautifully kept
grass, and is in stark contrast to the surrounding desert. Here
they serve a variety of meals, cooked to order. Since it was the
middle of a business day, nobody was actually playing golf.
</p><p>
There have been a few things that I've noticed over here.
Business attire is very much <a href="http://en.wikipedia.org/wiki/Suit_(clothing)">traditional western</a>
or <a href="http://en.wikipedia.org/wiki/Thawb">traditional Arabic</a>,
with both being very common. Teenage girls can be often seen
wearing flowing black over-robes that were very Harry Potter-esque.
Lawns and garden beds are covered with a huge number of very fine mist
sprinklers, and they run <i>during the day</i>. These sorts of
sprinklers are practically outlawed in Australia, with most states
suffering from severe water shortages.
</p><p>
At the food hall, I learnt an important lesson. If I was asked if
I wanted something to "take away", then that actually meant the food
serving would feed a football team, and my answer to such questions
should always be in the affirmative. The first time I foolishly said no,
and found myself wondering what to do with the incredible amount of
food in front of me.
</p><p>
Having wireless access in my room is a real blessing. I don't
know where I'd get it otherwise.
</p><p> <b>Saudi Arabian Adventures - Day 5</b> <br>
Today was my second-last day of teaching, and Abdulaziz
informed me that I needed to make sure the class finished
early (3pm) as a meeting had been arranged between myself
and management.
</p><p>
To make my day more interesting, we had a trainer who wanted to
install software for her course next week. Her name was Tina,
and her opening line was "Hi, you're a software
developer, aren't you?" When I asked how she knew, she
claimed "It's the look. You're all trendy, with long hair."
That's the first time I've ever heard developers get called
<i>trendy</i>, so I can only assume that I mis-heard.
</p><p>
At 3pm we finished early so that I could meet with EDMD management.
For some reason, whenever anyone said "EDMD" I would hear "AD&amp;D",
my mind would fill with images of dungeon-crawling geologists in
flowing black robes fighting an onslaught of umber hulks.
</p><p>
The meeting with management was made more interesting because I
didn't have my Aramco ID, which meant Abdulaziz had to make
a couple of bluff checks at the security checkpoints to get
me through.
</p><p>
The meeting itself was very management-focused. What does Perl
do, who uses it, what's its future, and so on? I honestly don't
know how I fared with these questions, and in hindsight I fear
my answers may have been a little too much on the technical
side, but everyone seemed happy.
</p><p>
Afterwards I met Omar, who I had spoken to on the phone a number
of times before my trip, but who wasn't enrolled in the course.
Omar is a dual-classed geo/developer, and already knows Perl. It
also rapidly became apparent that he was very open-source friendly.
"We have a program that parses $horrible_file_format, and would
like to bundle it into a module and release it to the CPAN. Is
that something you can help with?"
</p><p>
That night, Fuad, Abdulaziz, Omar and Mohammed took me out to
a <i>traditional</i> Arabic restaurant. The trip getting there
was an adventure in itself. Saudi Arabia seemed to lack anything
resembling road rules, or if they existed, they were ignored
by most of the drivers on the road. Lane-changes happened at
random, and cars would speed down the road at breakneck velocity.
The primary form of communication between drivers was a brief flash of
high-beams, which meant "I am going 40km/hr faster than you,
and I'm not changing lanes. You should." This was in stark
contrast to driving inside the Aramco campus, where everyone
was slow, careful, and polite. Somehow, Omar drove
through all this without breaking a sweat or losing his cool.
</p><p>
In the car we talked about content management systems, web
technologies, AJAX, Catalyst, Jifty, PHP, package management
and deployment, virtual worlds, and a variety of other FOSS-oriented
technical subjects. This was good, as it distracted me from the
traffic around us.
</p><p>
At the restaurant I was treated to Arabic coffee, which apparently
is made from the unroasted beans, and is very good. It also
rapidly became apparent that this was a restaurant/museum, with
many historical photos and items on the upper floors. There was a
large water feature in the middle of the building, and a large
lantern feature. It was explained to me that these sorts of lanterns
were traditionally lit and placed outside houses at the start of
the month of <a href="http://en.wikipedia.org/wiki/Ramadan">Ramadan</a>.
</p><p>
After a tour of the historical section, we were given quite a
banquet of food, some items which I have had before (such as
the dips), and some which I had not. One of the most memorable (and
most tasty) dishes was a thick paste made of a variety of grains.
This was eaten with a thin broth, and stuck to one's teeth almost
immediately.
</p><p>
After dinner, and tea, and dates, and more talking,
we drove back to the camp, with discussions mostly focusing around
virtual worlds, 3D web interfaces, and tunnelling procedure calls from
Second Life to Perl.
</p><p>
Sleep was an immediate priority when I returned to my room, as it
had become quite late, and I was certain I'd need an extra cup of
coffee to get me up in the morning.
</p>pjf2009-07-08T05:33:49+00:00journalAutodie 2.00 releasedhttp://use.perl.org/~pjf/journal/39200?from=rss
<p> <b>Autodie 2.00 released</b> <br>
This weekend the long awaited <a href="http://search.cpan.org/perldoc?autodie">autodie 2.00</a> for
Perl was released to the CPAN, which was almost immediately replaced
by 2.02, which fixes some oopsed tests and which adds a couple more features to
give us a really sweet experience. This blog entry assumes you're
using 2.02.
</p><p>
Observant viewers will notice that the major version number has
changed. I've taken the great leap from 1.999 to 2.00. Clearly,
something is different, and you might be wondering what.
</p><p>
Well, autodie 2.0 now supports a <a href="http://search.cpan.org/perldoc?autodie::hints">hinting
interface</a> for user-defined subroutines. Put simply, if you have a
user-defined subroutine that does something funny to signify failure,
you can now tell autodie about that. Once it knows, it can Do The
Right Thing when checking your subroutine. You can even put the hints
into the same file as those subs, and if someone is using autodie
2.00, it will find the hints and use them.
</p><p>
This may not sound very exciting, but it is. It means that a lot of
really ugly error-checking code, both on the CPAN and the DarkPAN, can
go away. Lexically. Still not convinced this will change your life?
Let's look a little more closely; trust me, you'll like it.
</p><p>
Let's pretend you're working on a piece of legacy code. For some
reason, the people who wrote this code decided the best way to
signal errors is by returning the list <tt>(undef, "Error
message")</tt>. I don't know why, but I've seen this anti-pattern
emerge independently in <i>three</i> 100k+ line projects I've been
involved in.
</p><blockquote><div><p> <tt>sub some_sub {<br>&nbsp; &nbsp; if ( not batteries_full() ) {<br>&nbsp; &nbsp; &nbsp; &nbsp; return ( undef, "insufficient energy" );<br>&nbsp; &nbsp; }<br> <br>&nbsp; &nbsp; if ( not coin_inserted() ) {<br>&nbsp; &nbsp; &nbsp; &nbsp; return ( undef, "insufficient credit" );<br>&nbsp; &nbsp; }<br> <br>&nbsp; &nbsp; my @results = some_calculation();<br> <br>&nbsp; &nbsp; return @results;<br>}</tt></p></div> </blockquote><p>
If you want to check to see if <tt>some_sub()</tt> returns an error,
you need to capture its return values, look at the first one to see if
it's undefined, and if it's not, use the second one as your error.
At least, that's what you're <i>supposed</i> to do.
</p><p>
What actually happens is most developers decide that's way too hard,
and don't bother checking for errors. Then one day, the batteries on
your doomsday-asteroid-destroying-satellite go flat, nobody notices,
and through an ironic twist of fate you're left as the last known human
survivor, and there are zombie hordes and walking killer plants
outside.
</p><p>
So, how can <a href="http://search.cpan.org/perldoc?autodie">autodie</a> help us?
Well, before version 2.00, it couldn't. But now, with
<a href="http://search.cpan.org/perldoc?autodie::hints">autodie::hints</a>,
it can! We can give autodie hints about how the return values are
checked. They look like this:
</p><blockquote><div><p> <tt>use autodie::hints;<br> <br>autodie::hints-&gt;set_hints_for(<br>&nbsp; &nbsp; 'Some::Package::some_sub' =&gt; {<br>&nbsp; &nbsp; &nbsp; &nbsp; scalar =&gt; sub { 1 },<br>&nbsp; &nbsp; &nbsp; &nbsp; list&nbsp; &nbsp;=&gt; sub { @_ == 2 and not defined $_[0] },<br>&nbsp; &nbsp; },<br>);</tt></p></div> </blockquote><p>
Our hints here are simple subroutines. If they return true, our
subroutine has failed. If they return false, it's executed
successfully. Notice that our scalar hint always returns true.
That's because we consider any call of our subroutine in scalar
context to be a mistake. It's returning a list of values, and
you should be checking that list.
</p><p>
Once we've set our hints, we can then use autodie to automatically
check if we're successful:
</p><blockquote><div><p> <tt>use Some::Module qw(some_sub);<br> <br>sub target_asteroid {<br> <br>&nbsp; &nbsp; use autodie qw( ! some_sub );<br> <br>&nbsp; &nbsp; # autodie has lexical scope, so only calls to some_sub inside<br>&nbsp; &nbsp; # the target_asteroid subroutine are affected.<br> <br>&nbsp; &nbsp; my @results = some_sub();&nbsp; &nbsp; &nbsp;# Succeeds or dies<br>}<br> <br>sub target_ufo {<br>&nbsp; &nbsp; my @results = some_sub();<br> <br>&nbsp; &nbsp; # autodie is out of lexical scope, so we have to manually<br>&nbsp; &nbsp; # process @results here.<br>}</tt></p></div> </blockquote><p>
If you're wondering what that exclamation mark means, it means "insist
on hints", and is a new piece of syntax with autodie 2.00. If for any
reason autodie can't find the hints for <tt>some_sub</tt>, our code
won't compile. That's a very good thing, and avoids us having a false
sense of security if we use autodie on an unhinted sub.
</p><p>
However the error messages from autodie aren't really that useful.
They're going to be things like <tt>"Can't some_sub() at
space_defense.pl line 53"</tt>. There's a noticable lack of
explanation as to why <tt>some_sub()</tt> failed.
</p><p>
Luckily, since the way early versions of autodie, we've been able
to register message handlers. And with the new features in autodie
2.02, we can produce very rich messages. Let's see how!
</p><blockquote><div><p> <tt>use autodie::exception;<br> <br>autodie::exception-&gt;register(<br>&nbsp; &nbsp; 'Some::Module::some_sub' =&gt; sub {<br>&nbsp; &nbsp; &nbsp; &nbsp; my ($error) = @_;<br> <br>&nbsp; &nbsp; &nbsp; &nbsp; if ($error-&gt;context eq "scalar") {<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return "some_sub() can't be called in a scalar context";<br>&nbsp; &nbsp; &nbsp; &nbsp; }<br> <br>&nbsp; &nbsp; &nbsp; &nbsp; # $error-&gt;return gives a list of everything our failed sub<br>&nbsp; &nbsp; &nbsp; &nbsp; # returned.&nbsp; We know this particular sub puts the error<br>&nbsp; &nbsp; &nbsp; &nbsp; # message the second argument (index 1).<br> <br>&nbsp; &nbsp; &nbsp; &nbsp; my $error_msg = $error-&gt;return-&gt;[1];<br> <br>&nbsp; &nbsp; &nbsp; &nbsp; return "some_sub() failed: $error_msg";<br>&nbsp; &nbsp; }<br>);</tt></p></div> </blockquote><p>
Now, whenever <tt>some_sub()</tt> fails, it'll print a genuinely
useful message, like <tt>"some_sub() failed: Insufficient energy at
space_defense.pl line 53"</tt>. Yes, autodie automatically adds the
file and line number for you. Nice!
</p><p>
But wait, there's more! We don't want to see this sort of code
floating around in your programs. You may be dealing
with other people's modules that you can't modify, so we can't hide
all this configuration in there. So, we can <i>write our own
pragma</i> that contains all this info. Here's the full
code for a theoretical <tt>my::autodie</tt> pragma, and is the exact
same code used by the <tt>t/blog_hints.t</tt> file in autodie's
test suite.
</p><blockquote><div><p> <tt>package my::autodie;<br>use strict;<br>use warnings;<br> <br>use base qw(autodie);<br>use autodie::exception;<br>use autodie::hints;<br> <br>autodie::hints-&gt;set_hints_for(<br>&nbsp; &nbsp; 'Some::Module::some_sub' =&gt; {<br>&nbsp; &nbsp; &nbsp; &nbsp; scalar =&gt; sub { 1 },<br>&nbsp; &nbsp; &nbsp; &nbsp; list&nbsp; &nbsp;=&gt; sub { @_ == 2 and not defined $_[0] }<br>&nbsp; &nbsp; },<br>);<br> <br>autodie::exception-&gt;register(<br>&nbsp; &nbsp; 'Some::Module::some_sub' =&gt; sub {<br>&nbsp; &nbsp; &nbsp; &nbsp; my ($E) = @_;<br> <br>&nbsp; &nbsp; &nbsp; &nbsp; if ($E-&gt;context eq "scalar") {<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return "some_sub() can't be called in scalar context";<br>&nbsp; &nbsp; &nbsp; &nbsp; }<br> <br>&nbsp; &nbsp; &nbsp; &nbsp; my $error = $E-&gt;return-&gt;[1];<br> <br>&nbsp; &nbsp; &nbsp; &nbsp; return "some_sub() failed: $error";<br>&nbsp; &nbsp; }<br>);<br> <br>1;</tt></p></div> </blockquote><p>
It works exactly the same as regular autodie, except it also knows
how to handle <tt>some_sub()</tt>, and display good looking error
messages. Here's how we'd use it:
</p><blockquote><div><p> <tt>use Some::Module qw(some_sub);<br>use my::autodie qw( ! some_sub );<br> <br>my @results = some_sub();&nbsp; # Succeeds or dies with a useful error!</tt></p></div> </blockquote><p>
There's a lot more you can do with autodie, and if you want to learn
more, I'd suggest coming to my talk at <a href="http://en.oreilly.com/oscon2009/public/schedule/detail/8165">OSCON</a> or <a href="http://yapceurope2009.org/ye2009/talk/2063">YAPC::EU</a>, where I'll be covering all this and more, with a distinctive Star Trek twist.<nobr> <wbr></nobr>;)
</p>pjf2009-07-01T05:45:12+00:00journalSaudi Arabian Adventures - Days 1-2http://use.perl.org/~pjf/journal/39169?from=rss
<p>
<i>Note: Pictures of my trip to the <a href="http://www.flickr.com/photos/pfenwick/sets/72157620291456375">Middle East</a> are now available.</i> <br>
<i>The events in this entry happened on 12-13th June</i>
</p><p> <b>Saudi Arabian Adventures - Day 1</b> <br>
My first true day in <a href="http://en.wikipedia.org/wiki/Saudi_Arabia">Saudi Arabia</a> was one of rest. After 30+ hours
of travel, being able to sleep in a bed was truly lovely. I woke up
fairly late in the day, caught up on e-mail, and then decided to
go exploring. There was a food hall just around the corner from
the hotel, and while I gawked at the sign displaying opening times,
(I was concerned I had missed lunch), and worried about the wording that
said the hall was for <a href="http://en.wikipedia.org/wiki/Saudi_Aramco">Saudi Aramco</a> staff only, one of the staff members
waved me in with a smile.
</p><p>
What I discovered is that the food hall has both very good and
very affordable food. Cans of drink, bottles of water, and cups of
coffee were almost universally 1 <a href="http://en.wikipedia.org/wiki/Saudi_riyal">riyal</a> (about $0.30 AUD). Some basic
meals were available for about 4-5 riyals (under $2.00 AUD), with the
best value for money undoubtedly being the "budget meal", which
provided soup, vegetables, rice/potatoes, a generous main meal
serving, and a dessert, all for 11.5 riyals (about $4 AUD).
</p><p>
I got myself a salad (which were excellent), some soup, and some
coffee, and felt very thankful that I had changed myself some 300
riyals (about $100 AUD) while in Dubai, since I hadn't spotted
any way of doing money exchange at the <a href="http://en.wikipedia.org/wiki/King_Fahd_International_Airport">Dammam airport</a>.
</p><p>
The rest of my travels included a walk around the camp, the most
interesting part of which was a fenced area that seemed to include
a library and a bowling alley. Here also a large sign proclaimed
the facilities were for Aramco employees only, and passes will be
checked on entry. I was getting the feeling that having an employee
pass would be a good idea.
</p><p> <b>Saudi Arabian Adventures - Day 2</b> <br>
Today was my first day of teaching. Fuad, my contact at Aramco,
had arranged to meet me at 7am at the hotel, and I had noted from
my trip to the food hall yesterday that it opened for breakfast at
5am. Collectively, these were hints that Saudis were morning people.
I set my alarm for 5am, which in my jet-lagged state would feel like
waking up at noon in Australia.
</p><p>
Going to the food hall for breakfast once again had me feel like
I was in America; the most popular food that people ordered
were waffles! Of course, I didn't fly half-way around the world
just to have waffles for breakfast, so I ordered a generous bowl
of <a href="http://en.wikipedia.org/wiki/Ful_medames">ful medames</a>... and waffles.
</p><p>
Of the two breakfast foods, ful was the clear winner. It tasted good,
and unlike the waffles, it had actual nutritional content. I finished
breakfast with plenty of time to meet Fuad back at the hotel at
7am.
</p><p>
Fuad chuckled at my attempts at an Arabic greeting, and asked in
perfect English "where are you learning this stuff, a phrase book?".
I think that means my Arabic has some ways to go.<nobr> <wbr></nobr>;)
</p><p>
Fuad asked about my flight here, explained that the Aramco camp was
generally divided into zones, the general business hours
(7:30am-3:30pm), and helped me get set up with my lab. I was also
glad to hear he would be attending my first course.
</p><p>
At this point, I should explain a little about what I was teaching.
My class consisted primarily of people with job titles that started
with "Geo-", and who regularly had to deal with data that was in
formats different to what they would prefer. Unsurprisingly, they'd like to use
Perl to help solve these problems. That's an increasingly common
story with the courses I teach.
</p><p>
What made this interesting is that rather than having a good four
or five days (which is what I'd prefer), I was teaching two classes,
a dozen students in each, with only 2.5 days per class. To top that off,
I was in a different country, and I had no idea how comprehensible
my Australian accent would be. I'd put together a plan that covered
the basics (syntax, variables, and control structures) a tour of the
CPAN, and as much regexp content as I could squeeze in.
</p><p>
When we were doing introductions, it became clear that my class had a
good sense of my humour. My favourite introduction was from <a href="http://twitter.com/zagzoog">one
student</a> who said "my name is very hard to remember... it's Mohammed".
</p><p>
The first day of teaching went well, and from the bountiful,
well-thought out questions, it was clear that I was being understood.
</p>pjf2009-06-24T14:31:08+00:00journalDubai Adventures - Day 3http://use.perl.org/~pjf/journal/39160?from=rss
<p> <b>Dubai Adventures - Day 3</b> <br>
Today I decided to travel to <a href="http://en.wikipedia.org/wiki/Jumeirah">Jumeirah</a> beach and surrounds, a decision
I made purely based upon the number of tags and photographs in the
area for <i>Google Earth</i>. Since I'd be doing this during
the day, I decided to take a practical approach. I left the laptop
and most electronics back in the hotel, and packed lots of water
and sunscreen. I wore my most breathable cotton top, a
<i>linux.con f.au</i> hat, and what Jacinta calls my "pirate pants".
These pants are very loose, and very breezy, and very comfortable.
But as a result, I didn't look like a local, and I didn't look like
a typical tourist, either. I was, however, protected from the sun
and reasonably cool.
</p><p>
I caught a taxi to Jumeirah mosque, for just a little
over 10 AED (about $3.50). I didn't expect to find the mosque open
(and indeed, it wasn't), but I got some nice photographs. The main
reason I wanted to visit the mosque is that it was walking distance to
the beach, and (if you're me) Sheik Zayed Road. While two days ago I
had discovered that walking around the old souks resulted in someone
trying to sell me a fake rolex every few minutes, today I discovered
that walking around Jumeirah had a taxi beep at me every few minutes,
hoping that I would need a lift somewhere.
</p><p>
Jumeirah beach is very pretty, and very hot. There weren't many
people out, and a lifeguard watched lazily from a tower. The beach
came with lots of rules, one of which was "strictly no cameras",
so I had to be a little more discreet with my photographs. The
water looked extremely inviting, and I relished the idea of hopping
in for a swim. Unfortunately (and accidentally), I had left my
swimming gear back in the hotel, and my mask and snorkel back in
Australia.
</p><p>
At the beach I got some great photographs of the skyline of Sheik
Zayed Road, especially of the Burj Dubai, which distinctly reminds
me of the Combine Citadel in Half-Life 2. Having looked around
the beach, I decided to head off toward Sheik Zayed road, which
I was certainly would be filled with marvels.
</p><p>
The walk was a lot harder than my previous wanderings around Bur
Dubai, even though the distance was shorter. I was walking
through a residential distract, and as such there was a lot
less cover, and fewer amenitities. It was clear that Jumeirah
was home to the rich, with magnificent mansions and expensive
cars.
</p><p>
After about 1.5km of walking from the beach, I was finding that
the heat and exposure was making me a little uncomfortable, and
that while I had packed a lot of water, I'd probably need to
think about looking for more. Luckily, I had just chanced upon
a park. It was beautiful, green, lush, and immaculately maintained.
For some reason, the gate was shut, with a large padlock, and it
looked as if this gate had been shut for some time. Perplexed,
I went to a second gate, and it was also closed. I noticed a
person in the park, but he appeared to be a groundskeeper, who
was distracted by talking on his mobile phone. This had me even more
perplexed; why spend water, and money, and high-value property on
creating a park that nobody can get into? This wasn't marked as a
private park, and it even had a playground in the middle of it.
Maybe it closed during the middle of the day, and re-opened later on?
</p><p>
A climbing check, and two stealth checks later, I found myself
a section of soft grass and a shady tree under which to snooze.
I woke after about half an hour, a little surprised that the
groundskeeper hadn't woken me. Refreshed, I continued on my
way, and discovered much to my delight that Dubai has public
<i>refrigerated</i> drinking founains. With my water bottles
refilled, and my face and arms splashed with blissfully cold
water, I continued onwards.
</p><p>
The region I was walking through seemed to be filled with
houses that were universally big. However one house in particular
stood out. It was on the corner of two streets and was unfinished.
That in itself is nothing special; Dubai seems to be in a constant
state of construction, but it was clear this building had been
unfinished for quite some time. The shell was made, but that's
all which was there. Amusingly, a sign on the side said "For Sale
or Rent".
</p><p>
After walking past another park (also beautiful, closed, and
deserted), I eventually reached Sheik Zayed Road. This is the
home to many of the tallest buildings in Dubai, and is a spectacular
sight from the air, but amazingly dull on the ground. These
were hotels, and office blocks, and the odd food outlet here and
there. It was also completely impossible to cross on foot. It
<i>looked</i> like some footbridges were under construction, but
they were nowhere near finished, and they were so big I suspect
they were for yet another road link, and not meant for pedestrian
traffic at all.
</p><p>
I walked down the street, and got some decent photographs.
My plan was to walk across to the Dubai Mall, take a look around,
and then walk up the other side of Sheik Zayed Road to the Emerites
Towers. As it happened, try as I might, I couldn't find a way
to get across the street, which has twelve lanes, and cars travelling
at considerable speed.
</p><p>
Hot, disappointed, and tired, I decided to try and find someplace
cool, and preferably with restrooms. Being Dubai, there was a small
mall not too far away, and I made my way toward it. It had a
supermarket, and an electronics superstore, and in a rare moment
of impulse purchasing, I grabbed a copy of <i>EA Sports Active</i>
(which apparently sucks less than Wii Fit), after carefully checking
it for any signs that indicated that perhaps it would only work in
certain regions.
</p><p>
If I had my laptop with me, I would have pulled out my maps and
looked for interesting activities, but since it was not available,
and since I had gone all this way to discover that Sheik Zayed road
sucked, I hailed a taxi to get back to town. This was one of the
best parts of the day, since the driver was very talkative. He was
from Pakistan, to which he'd love to return, but apparently there are
no jobs there. He had worked previously in the Ukraine, and had
moved to Dubai eight months ago.
</p><p>
My driver commented that Dubai is an artificial city. It's got
artificial islands, artificial buildings, artificial snow, and
artificial parks. People are here because Dubai has done an amazing
job of marketing itself to the rich, but due to the global financial
crisis, the rich aren't rich anymore, and they're flying back overseas.
Tourism is down, jobs are more scarce, and so many of the not-so-rich
who have come here for work are also going back overseas. Apparently
all this was great reducing traffic congestion and getting me back to
my hotel, but it sucked for the city as a whole.
</p><p>
Back at the hotel I had a bite to eat, and wrote this blog. My plane
leaves at 9:35am, which means I want to be at the airport at 7:35am,
which means I want to be leaving the hotel at 7am, which means waking
before that. If I want to avoid too much jet-lag I should be going
to bed <i>now</i>, and waking super-early in the morning. Instead I'm here posting blog entries, and discovering that the the UAE censors flickr, so there won't be any photographs until I get home.
</p>pjf2009-06-21T17:45:48+00:00journal