Walter Higgins
Tinkering with Software & the Web
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.
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
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
2012/02/20 18:06
Markdown Pull-Quote
- Drag the above link to your browser's toolbar to create the bookmarklet.
- 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.
- 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.
- 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
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
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...
- "it would probably have to be done in PHP, since PHP remains the commonly-installed scripting system on shared webservers"
- "It should be as easy-to-install and easy-to-use as WordPress - easier, actually, would be better."
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
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
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...

... 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.

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
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

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...
- Help them setup a blog. (Hosted on their own or your server is preferable)
- 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
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