Walter Higgins

Tinkering with Software & the Web

Otherwise-interesting People

2012/02/21 13:06

My FourSquare Rant caused a bit of a stir. There was the predictable 'Just use Filters' push back (which itself is a tacit admission that 4sq cross-posting is polluting the stream), but one interesting response which I can't tackle using Twitter was this one by Stewart Curry.

Stewart Curry

@walter thing about 'get off my porch' is that you've chosen to live near a load of loudmouths who are free to tweet what they want
Twitter / @irishstu

Twitter is great but debating the finer points of twitter etiquette requires out-of-band communication which is why I'm responding here. The implication is that I've no right to complain about 4sq tweeting friends because I've explicitly subscribed to them and therefore must take the bad with the good. Also implied (correct me if I'm wrong Stewart) is that if I don't like my friend's behaviour I should just unfollow. The problem with that is these 4sq tweeters are - aside from their 4sq tweeting - really interesting people. I'm already very selective about who I follow, which is why it pains me so much that some of these people have such bad habits ;-). Unfollowing them would be like no longer inviting friends around just because their aim in the bathroom is off. Is it verboten to gently cajole your friends' online behaviour? Is there no room for gentle criticism? To say "Hey FourSquare Jocks, stop spraying your 4sq mayorship spoor all over my twitter bathroom!" seems perfectly fine to me.

It's a curious line of thinking that says we must accept a person for all they are - XBox Live achievements, GetGlue TV watching habits, and 4sq jockeying included - or not at all. I'd like Stewart to elaborate on in his blog. Personally, I'm not yet ready to give up on my friends while they can still be redeemed ;-)

Update: Stewart responds...

Walter says that people who post their Foursquare checkins are like people who come to your house and piss on the seat. I'd disagree. It's like people who you've invited to your house telling you they were in Chapter One (Foursquare) and then watched Burn Notice (GetGlue) and how they love that Black Keys song (This is my Jam). If you're not interested, would you say "Hey stop telling me this shit, I don't care!"?. Seems rude.
-- The tweetings will continue until morale improves | Irishstu.com Blog

We'll have to agree to disagree but teasing this out in anything other than long-form blog posts would have been frustrating. Much as I love twitter, it's not the best forum for teasing out the subtleties of twitter etiquette. There's something to be said for both points of view.

Categories

Twitter, Etiquette

A Javascript When Function

2012/02/20 20:45

function when(conditionFunc, execFunc, interval){
    if (conditionFunc()){
        execFunc();
    }else{
        setTimeout(function(){ when(conditionFunc, execFunc, interval);}, interval);
    }
}

You have some code which should only execute when a condition is true. E.g. You have code which relies on a javascript library but can't be sure the library has loaded yet and don't want the code to execute until it has. This is common if you have a bookmarklet which injects more than one <script> tag or you have code which should only execute when an image or other asynchronously loaded element is present. The when construct lets you sleep periodicially until the condition is true, then execute the code. I needed this construct a couple of years ago when I was working on SnapScribe - an online photo book. When I was working on the Markdown pull-quote bookmarklet I found that sometimes the bookmarklet wouldn't work because the javascript library it uses hadn't yet loaded. I knew I'd written something to solve that exact problem and some digging around the Pixenate codebase later, I found it. You might find it useful too. This is similar to the following construct in Java but Javascript doesn't have a Thread.sleep() method...

while (!condition){
   Thread.sleep(interval);
}
execFunc()

Use when like this...

function libIsReady(){ return typeof(LIBRARY_NAME) != "undefined" ;};
function useLib(){ // code which uses LIBRARY_NAME methods };
// checks if library has been loaded and if so calls function which uses the library
when (libIsReady, useLib, 2);

... One thing to be careful of; the conditionFunc parameter should be a function not a conditional expression. when will accept both but if conditionFunc is an expression it will only be evaluated once so put your conditional expression inside a function and pass that instead.

Categories

Javascript

A Markdown Pull-Quote Bookmarklet

2012/02/20 18:06

Markdown Pull-Quote

  1. Drag the above link to your browser's toolbar to create the bookmarklet.
  2. Now when you're on a page you want to pull a quote from, select the text you want to quote, then click the bookmarklet.
  3. A Textarea will be appended to the bottom of the page you're looking at and the selected text will be shown in markdown format with a markdown style link.
  4. Press CTRL+C to copy the selected text to the clipboard and paste the text into your favorite Markdown text editor.

This hasn't been thoroughly tested yet but works on Chrome and Firefox.

Categories

Markdown, Blogging, Javascript

Tweeting 'In Absentia'

2012/02/19 08:26

There was a story went around the Net a couple of years ago. It goes like this...

Barbra Streisand was relaxing at home listening to the radio, when the show she was listening to breaks for Ads. She notices the sudden increase in volume during the ad break (which is common to Radio and TV - the volume is boosted during ad breaks) and rather than reach for the remote to lower the volume like a poor pleb like me would do, she calls the radio station to complain and insist they lower the volume on their ad breaks. I don't know if Barbra Streisand was successful in her plea to get the station to keep its broadcasting at an even volume (I doubt it) or even if this story is true. What I do remember is the collective rolling of eyes when the story broke a couple of years ago. The commentary went something along the lines of "Yup, That's something a pampered Diva like Streisand would do all right".

What no one seemed to mention was that Barbra Streisand had a point.

I bring this up because yesterday I had one of my regulars rants about FourSquare cross-posts on Twitter, and got the usual response of "Use Filters!". FourSquare check-ins, mayorships, mayorship oustings, and badge award tweets are Really Fucking Annoying (tm). Seriously, no one cares (except you and the mayor you just ousted) if you just ousted so-and-so as the Mayor of generic-coffee-shop. No one. In fact we Twitter folk would prefer if you FourSquare users kept that to yourselves. Why can't FourSquare users just - you know - keep it to themselves? Why does FourSquare continue to encourage cross-posting? Doesn't FourSquare already have a way to let connected FourSquare users know when they've checked in etc? The argument for cross-posting to twitter goes "It facilitates augmented serendipity by letting twitter users who might not be on 4sq know when their friends are nearby" but the counter-argument is this: if I'm interested I'll already be signed up to 4sq and will already have been notified so stop polluting my twitter stream.

Cross-posting and Auto-posting

Cross-posting is when you do some low-effort activity in Social Network A and it shows up in Social Network B. Auto-posting is when you create something (an audioboo recording, a video clip, a blog post - anything which requires creative effort) and share it on a Social Network. The difference is the effort required to create the content. So, Auto-posting is good but Cross-posting is bad.

'In Absentia'

I honestly think FourSquare users are completely fucking oblivious to just how annoying their 4sq tweets are, otherwise they wouldn't do it. And that's the crux of the problem, FourSquare users are oblivious because they are tweeting 'In Absentia', they are not really present on twitter when they cross-post from FourSquare. It's a fire-and-forget cross-post with little thought, information or personality put into it. Cross-posting from FourSquare is bad, for the same reason cross-posting across all social networks is bad - it betrays a fundamental lack of respect for the people you're connected to. Is the once in a blue moon serendipitous meet-up with a fellow FourSquare Jock worth the ongoing low-level ill will you've sown among your Twitter friends? Of course not. FourSquare users will still insist that it is. Look, I'm happy that you've accepted Location-aware Augmented Serendipity and Loyalty Discounts into your hearts, I really am, but FourSquare users are like Jehovah's Witnesses, I'm happy for you but please get off my porch.

Categories

FourSquare, Twitter, Barbra Streisand

The Herd

2012/02/18 09:19

Daring Fireball Linked List: Apple Sold More iOS Devices in 2011 Than All the Macs It Sold in 28 Years

Wow. I did not know that.

parislemon • Apple sold more iOS devices in 2011 than all the Macs sold in 28 years

Yes. John Gruber just blogged that.

More iOS Devices Sold in 2011 Than All Macs ... Ever - 512 Pixels

OK - This is boring.

You would think these guys don't read each others blogs.

Categories

Apple, Bloggers, Echo Chamber

Brent Simmons: A plea for baked weblogs

2012/02/15 16:40

Brent Simmons on what his ideal blogging system would be like...

Dynamic authoring, static publishing: in this scenario, everything lives on the server. You have the advantage of being able to publish from anywhere you can get to a web browser. But then the server generates static pages when you make a change. It's much like the first scenario, except that it's accessible from everywhere.
-- inessential.com: A plea for baked weblogs

Brent's post is interesting. He's looking for a weblog system that allows publishing (from a weblog admin console - so no FTP required) to static pages. That's exactly what my home-grown, hand-rolled, home-baked weblog system does ;-) Brent isn't a fan of storing blog posts in a database. Neither am I. It's just too bad my system doesn't meet Brent's other requirements for an ideal blogging system...

My system is written in Perl. The makefile for incrementally building the weblog is a meager 300 lines of perl code that uses TinyMake and TinyTemplate. Both of these libraries are also home grown so are probably too weird for use by anyone other than I. If the following snippet of code weirds you out then my un-named home-grown blogging system isn't for you...

file  "clean"        => [],                \&clean;
group "markdown"     => \%txt2markdown,    \&build_markdown;
group "html_pages"   => \%markdown2page,   \&build_page;
group "categories"   => \%hcat,            \&build_archive;
file  "index.html"   => ["templates/index.html",   @recent_posts],   \&build_index;
file  "archive.html" => ["templates/archive.html", "index.data", @archived_posts], \&build_archive;
file  "atom.xml"     => ["templates/atom.xml",     @recent_posts],   \&build_atom;
file  "all"          => [qw(categories index.data markdown index.html archive.html html_pages atom.xml)];

map { make $_ } @targets ;

The other point is ease-of-install. Well once you have Apache configured to support perl/CGI my system is easy to install. It's just files on a disk, no database required. I've also decided to pretend that mod_rewrite doesn't exist. I used a lot of mod_rewrite magic on my old xanadb blog (it was a learning experience) but decided not to rely on it for this iteration of the blog. The fewer external dependencies, the better. The admin console is protected using HTTP authentication. I've probably said too much.

Now to the sticky issue of ease-of-use. I'm not going to claim my admin console is easy to use. It's functional. I can create new blog posts, edit existing blog posts or delete them entirely. There are no advanced features like Previews, Drafts, and scheduled posts. This is a blogging system for me and I never used any of those features in Wordpress or Posterous. In my experience, 'Draft' blog posts tend to stay in 'Draft' indefinitely. Where I will make a claim to ease of use is in the use of a custom Markdown editor and supplemental markdown bookmarklet I use extensively when creating blog posts. You can see a stripped down markdown editor here and the bookmarklet is here. If you love your WYSIWYG TinyMCE editor provided by Wordpress and have never pulled your hair out using it, then you will look at Markdown and wonder what all the fuss is about. If on the other hand you have come to the realisation that all online WYSIWYG html editors are fundamentally, premature-baldingly broken, then look no further than Markdown. It will heal you (but won't bring your hair back - that's gone for good). I would be really interested in trying out the markdown editor on my daughter - she uses Wordpress.com. I bet, after the initial WYSIWYG withdrawal symptoms, she would quickly adapt to using Markdown as a better-than-html web authoring markup. As far as I know Brent is a already a fan of Markdown so if you're reading this Brent, leave a comment and I'll send you the code. That goes for anyone else brave enough to want to try out a new untested blogging tool.

Categories

Blogging

How to make a Complete Hash of Privacy

2012/02/13 11:08

The fallout from Path continues...

At Mr. Morin's last job at Facebook, his boss Mark Zuckerberg apologized publicly more than 10 times for privacy breaches.

It seems the management philosophy of "ask for forgiveness, not permission" is becoming the "industry best practice." And based on the response to Mr. Morin, tech executives are even lauded for it.
-- Anger for Path Social Network After Privacy Breach - NYTimes.com

Meanwhile here's Dare Obasanjo of Microsoft on how they store emails (the right way)...

Instead of returning email addresses of a user's contacts from our APIs, we provide email hashes instead. That way applications don't need to store or match against actual email addresses of our users but can still get all the value of providing a user with the a way to find their Hotmail or Messenger contacts who also use that service.

We also provide code samples that show how to work with these hashes and I remember being in discussions with folks on the team as to whether developers would ever want to do this since storing and comparing email addresses is less code than working with hashes. Our conclusion was that it would be just a matter of time before this would be an industry best practice and it was best if we were ahead of the curve. It will be interesting to see if our industry learns from this experience or whether it will take external pressure.
-- Dare Obasanjo aka Carnage4Life - Address Book Privacy and Hashing

Hashing is Fast. Negligibly Fast. I'm not entirely sure what the 'extra code' Dare refers to would be and whether it would really warrant much discussion, but this is absolutely the right way to go. Hashes have applications other than security. I uses hashes in Pixenate to optimize image editing operations. My point is this: Hashing isn't rocket science, it can be used by regular developers (like me). It offers a fast way to uniquely identify any piece of information using a 128-bit identifier which can't be reversed so there is no way to decipher the email address from its hash.

I can't help wondering if Dave Morin (formerly of Facebook's API/Developer program) knew hashing would be the better approach but disingenuously decided to store the actual email addresses anyway.

This is a (md5) hash of my email address: 81c5822a75fe1e4737683f998a29076f

It would have been all Path needed to uniquely identify me so that were I ever to actually sign up to their service, it could suggest the friends who had me in their address book. Dave I'm sure is a smart developer who was well aware of hashes (MD5 etc) but still decided not to use them; To store the emails themselves rather than their anonymized hashes. Why was that?

Related

Hashing for privacy in social apps - Matt Gemmell

Categories

Security, Privacy, Path

Remembering eWorld - Apple's Online Walled Garden

2012/02/11 16:21

I don't hate Walled Gardens. I have fond memories of Apple's eWorld online service from the mid 90s. It competed (or at least tried to compete) against AOL and it was a battle it was never going to win so Apple shut it down in 1996. Despite the relatively small membership (by today's standards), it was the first place where I connected with complete strangers online and talked about common interests. And even though I only used it for less than a year, its welcome screen (an internet-as-town-square UI metaphor) is etched in my mind. That first emblematic internet welcome screen has, to this day, left a screen-burnt ghost image that I see everywhere I look online. So when in 2012 John Battelle ponders What Commons do we wish for?, this is the picture I see in my head...

eWorld Home_1

... It might look quaint by today's standards but in 1995, this was my on-ramp to the Internet and it was the most exciting piece of software on the Macintosh. I loved eWorld, the Town Square metaphor, the cute little people that looked like daubs of paint. In 1996 I began working at Apple Computer in Quality Assurance testing Apple's connectivity software and hardware. One of my favorite aspects of this job was putting eWorld through its paces ;-) It turns out I'm not alone in fondly remembering eWorld. There's an (incomplete) Flash simulation of the eWorld interface here.

In 1995, The Internet really did come on Floppy Disks

Back in 1995, The Internet really did come on Floppy Disks :-).

Apple was also hard at work developing a Browser in 1996 - CyberDog. It was a dog. It was meant to be a showcase for OpenDoc - Apple's rival to Microsoft's OLE (Object Linking & Embedding). Cyberdog was slow and crashy and nowhere near as good as it needed to be to compete with Netscape which was going gangbusters at the time. Anyway, I doubt if as many people remember Cyberdog and if they do, I doubt they are fond memories. It's funny to think how much has changed.

Categories

Apple, Nostalgia, The Internet, The 90s

Own Your Own Mothership

2012/02/10 15:38

This is part 3 of a 3 part series on blogging & social networks. Part One: Bridging The Archipelago. Part Two: Postcards From The Islands MotherShip

Companies that have planted their presence too deeply into the soils of Facebook are going to realize they need to control their own destiny, and move their focus and their core presence back into the independent waters of the open Internet.

If you are a brand, publisher, or independent voice, don't put your taproot into the soils of Facebook. Plant it in the independent web.

Now, that doesn't mean "don't use Facebook," not at all. I think Facebook is an extraordinarily important part of the Internet ecosystem, and having a robust presence there is a critical part of any brand (or company's) strategy.

But Facebook is a for profit, advertising and data-driven company. If you seat mission critical portions of your business inside its walls, you are driving value to Facebook - and you are presuming the trade, in terms of traffic and virality, will come out on balance favoring you. I wouldn't count on that.
-- Put Your Taproot Into the Independent Web

Sound advice.

It got me thinking. The advice is just as applicable to individuals too, but harder to follow because most Facebook and Twitter denizens don't have the resources or know-how available to a company, to establish their own presence outside the walled gardens.

For those of us who do have that luxury, we have a duty to make it easier for people to own their own Mothership. To make owning and managing your own content and identity as easy as possible.

I'm not going back to the open web. Why? The juice isn't there.
Robert Scoble

The Juice

Why should ordinary Facebook & Twitter denizens care about owning their own content, identity and friends list? Because they are Chattel unwittingly being sold, every day by each other to companies and brands vying for their attention. That slightly icky feeling you get each time a Facebook app or survey/prize-draw asks for your profile (and friends) information just so you can be in with a chance to win something? That's the insidious all-pervading attention-grab. The 'Juice' that Robert Scoble refers to is the fluid communication and interaction he sees on Google+ and Facebook, compared to his blog. The reality is you and your friends are the juice that's powering Facebook/Google+.

Morpheus: What is the Matrix? Control. The Matrix is a computer-generated dream world built to keep us under control in order to change a human being into this.
[holds up a Duracell battery]
Neo: No, I don't believe it. It's not possible.
Morpheus: I didn't say it would be easy, Neo. I just said it would be the truth.
-- The Matrix

OK. That analogy might be a little OTT but you get my meaning :-)

Owning your own mothership means owning your own content, identity and list of friends. Facebook, Twitter, Google+ - These are all 'Motherships' - your online interactions (Status updates, Comments, Likes, Retweets, G+ Shares) are all beamed back to the respective Motherships all the better to advertise to you. In the 2000s, your 'Mothership' was your blog. In the future it will have to be more than that. OpenID (Identity management) is a step in the right direction but it's too bloody difficult even for programmers, never mind regular people. There are a couple of noble-but-nerdy efforts underway but it's going to take time and not everyone wants to be saved.

What can we Noble Nerds do?

Asking your Facebook-bound Aunt to go cold-turkey on Facebook isn't going to work. It takes small steps to ween regular people off of Facebook/G+. Wait, that's not really what I meant either. Like John Batelle, I don't believe in turning your back completely on the big 3 (Facebook/Twitter/G+), but there are better ways to use these services. I think your blog should be your first port of call if you've something to say that takes more than 140 characters. I think you can use Facebook without selling out your friends (Now that would be a good talk - "How to use Facebook without Selling out your Friends"). So here's a short list of things we can do to help our Facebook or G+ bound friends...

  1. Help them setup a blog. (Hosted on their own or your server is preferable)
  2. Run an OpenID identity server for them on your server.

It's a short list right now because the whole friends-list management thing? - That's difficult to do in a distributed way that makes sense to humans. The other thorny problem is 'Comments'. Right now my comments are managed by the Disqus Mothership and ideally I'd like if this too could be distributed so that everyone owns their own comments. It's another thing we haven't figured out yet. Owning your own content is a start, we need to get to work figuring out what the new citizen-owned Motherships will look like and how they will communicate with the millions of other Motherships.

Categories

Blogging, Facebook, The Matrix

Blogroll

2012/02/09 15:35

Keeping it old skool.

Following on from my angst-ridden musings on the lack of connectedness in Blogging, it's only right that I compile a blogroll. All of these blogs are wonderful in their own unique way...

Irish Blogs

Gaming Blogs

Heavy Hitters

Miscellaneous

This list is by no means complete. I plan to come back and revisit this many times.

Categories

Blogging