sungo says...
More QR Goodness

Update to previous entry: since then, I’ve discovered that zebra crossing also has an online qr generator. It’ll generate a qr code for most any type of content using a magic form.

To pair up with the bookmarklets I showed yesterday, here is a bookmarklet to generate a qrcode for the current url: qrencode. The bookmarklet has the image dimensions hardcoded in the url. If you want a bigger image, you can adjust it in the javascript or edit the url you get for the image.

(Yes, I’ve tested the bookmarklets together. You can generate a qr with this bookmarklet, hit yesterday’s bookmarklet and get the data back.)

QR Codes

Casey West, the devil that he is, turned me on to QR Code recently. I’ve seen these things popping up in ads and android-centric blogs in the last few months. At its core, qr code (and quickcode and a few other similar data types) are 21st century barcodes. They carry a lot more data in a redundant fashion. Their first niche was commercial package tracking and then Japanese culture found them, popularizing them by throwing qrcodes on everything. They’re a very standard form of advertising, apparently.

The codes hold text. Standard payloads these days include vcards, urls, and small text blobs. (There’s even a blog where the posts are qrcodes.)

If you’re reading this on my site, off to the right you’ll notice two codes. They’re the same data encoded two ways. The top is quickcode and the bottom is qrcode. They contain a small vcard. The qrcode version is for standard apps while the quickcode one is much more easily read by my old crappy iphone’s camera.

Want to be trendy? Here are the tools I’m using. As always, except where noted below, Google is your friend if you want to find alternate offerings.

  • Kaywa has a great tool on their site for generating qrcodes.
  • For my iPhone, I use Quickmark. It costs $1, at time of writing, and is quite worth it, in my opinion. Not only does it read several types of barcodes but it can generate quickcodes or qrcodes for text, urls, or address book entries in your phone. Quickmark generated the codes used on my site. It works well on my old edge-only iphone
  • For my Sony Ericsson, I use BeeTagg. It proxies urls through their site so they can occasionally insert ads.
  • I’m not using it (yet?) currently but a great qrcode-for-an-url generator seems to be the Mobile Barcoder plugin for firefox

There remains one HUGE gap. It’s awesome to be able to read and use qrcodes from my mobile device. That’s the japanese-driven market for them. qrcodes are starting to become pretty popular on the web too and I simply refuse to point my damn phone at my screen whenever I see a code. Sadly, there are not too many options that I’ve found. This is where Google is major fail. Usually a fountain of awesome, it has very few offerings.

So, using the Zebra Crossing projects’s online decoder, I whipped up a pair of bookmarklets. View the qrcode image and hit the bookmarklet. BAM! you can haz data. There’s one big caveat here. zxing, at time of writing, only supports qrcodes.

  • qrcode decode - This provides full decode output with lots of info.
  • qrcode decode - This provides just the content of the qrcode

So there you go. I’m still a n00b in these regards but so far so good. If I see you at a conference or something in the near future, expect me to be throwing urls or whatever at you via qrcodes on my phone.

irc.perl.org - State Of The Network

It’s time for the first ever State Of The Network report for irc.perl.org. We’re entering a new era in the evolution of the network and it’s time we started communicating a bit better with our users.

Until recently, we, as operations staff, kept quiet and did our thing. Servers came; servers went; we kept to ourselves. Recently, we had a bit of a wake-up call. Thanks to an incident, which I’ll get into here momentarily, we came to realize how important it is that we stop running a closed shop, that we open the network backend to the users and communities.

irc.perl.org is run on donated hardware by volunteers working in their spare time. About half the network, right now, is paid for by individual members of the operations team specifically for use by this network. The other half is sponsored by wonderful companies for our use.

At the end of January 2010, irc.perl.org came under direct attack. The perpetrators went through our DNS rotor one machine at a time, using a very simple UDP DDOS to basically blow the servers off the internet. Over the course of the following week, we suffered at least six separate attacks. One of our nodes was terminated by its hosting provider and the others stayed online out of the extreme patience and good will of their particular providers. We came very close to the complete termination of irc.perl.org services. Good will only goes so far.

In addition, several prominent members of the perl community were directly attacked. It seems the attackers used the user’s whois data to provide a target.

As mysteriously as the attacks started, they stopped after about a week.

Since the initial attacks, we’ve instituted several network wide security precautions, including a completely new network architecture and topology. In addition to these internal matters, we are rolling out SSL connectivity to all nodes. While the servers already communicate over encrypted links, this allows the user to connect via SSL as well. We created the @perl_irc twitter account to provide status updates and announcements for the network. We are investigating ways to automatically cloak users’ hostmasks. We’re even looking into how services might be implemented and if they’d provide useful services for our users. (I’m definitely looking for feedback on that point. Would you find a basic nickserv/chanserv setup useful? Leave comments below or email sungo@sungo.us)

As we move into the rest of 2010, I’m extremely happy with the state of the network and the progress we’ve made. I’m not happy that some segment of the community finds it funny to nearly shutdown the network. It, however, forced us to make really important changes and decisions so it’s not all bad, I suppose.

At the time of writing, irc.perl.org is comprised of 5 public nodes, 1100 users, 350 channels, and dozens of official perl projects. It is run and caretaken by a dozen hearty volunteers and sponsored by three organizations.

We thank you for flying irc.perl.org. This is your captain speaking; we hope you enjoy the flight and choose to fly with us again in the future.

plasma buddha

plasma buddha

Snuggies

Snuggies

Home office

Home office

Archiving Etherpad

In case you missed it, Google acquired a company called Appjet on Friday. Their main product is Etherpad, a multi-user collaborative notepad. Their initial press release announced the immediate suspension of new activity on the site, with all content to disappear at the end of March. Since Friday, bowing to massive community pressure, Google/Appjet have announced the eventual opensourcing of the Etherpad codebase. They promise to keep the service live until then. (Notice that we’ve gone from a concrete timeline to an extremely vague, well-intentioned, promise.)

I know of Etherpad because we use it pretty heavily at work. It’s a multi-user version-controlled notepad. Revisions can be saved. Newer pads save every keystroke for posterity. They save which author wrote which characters when. There’s a chat pane where authors can discuss the work. Looking at currently available public pads, you can watch bored 4chaners slander each other, parents help their children craft stories, and people leave little notes in the hopes that someone will stumble on them later.

It appears that I’ve caught Jason Scott’s need to archive this kind of history before it slips into non-existence. Friday night, I started writing code to pull out as much data as possible. This is going to be both much easier and massively more difficult than I initially expected.

There are three major facets of this archival venture. First, grabbing the initial view. The initial page view (the current revision, the authors, the last 20ish lines of chat) are all stored in a javascript structure in the page. Easy enough. Second, grabbing the revision history. This is available by branching out of the initial data into other pages. Easy enough. Third, grabbing all the pads. Now, this is where things get tricky. Etherpads are initially assigned a random id. This id is (currently) a 10 character string containing a-z, A-Z, 0-9. base 52 across 10 characters. Some quick math yields an ungodly number of combinations. This is where I need help.

My first pass is up on gitorious. Basic usage looks like:

scan_and_archive.pl --output some/directory/ 

The script drops a status file, which defaults to ‘ep_ids.txt’. This file contains every scanned id and whether it was a valid id. The script also grabs the javascript structure and drops it in the specified dir (defaults to ‘archive’) by id. If interrupted, the script will pick up at the last id it tried. There are a few options, none of which have made it into any useful help output. This sucker is rough. However, it’s a start at grabbing the data. Over the next few days, I’ll be adding code to take those js files and extract their revision history for archival as well as general cleanups.

Here’s the thing. We’re looking at a massive id space. If you want to help, I need to you start at a spot other than the very beginning. Here’s the syntax. It’s a two step process.

scan_and_archive.pl --output some/directory --start aaaa 
# Almost immediately, hit Ctrl-C to interrupt
scan_and_archive.pl --output some/directory

The first command starts things off and sets up the history file. The second command keeps things going without starting over at ‘aaaa’ whenever it’s run again. As far as the id is concerned, they’re characters. Pick a random string and let it run.

If you decide to help, email me at sungo@sungo.us, find me on as sungo on #archiveteam on irc.efnet.org, reply on twitter (@sungo), whatever you want. Patches are very welcome to the codebase.

Edit: While it has more perl module requirements, please ponder using scan_and_archive_full.pl. It retrieves all revisions for pads as well.

Rest In Peace, pal.

Rest In Peace, pal.

2012

The movie… If the end of the world is going to be that boring, I’m going to kill myself now and avoid the torture. The first 30-45 minutes of the movie are what I expected: disaster porn. An absolutely ridiculous rollercoaster where tidbits of plot served only as a vehicle to carry me into the next scene of shit blowing up.

And then…. it became serious business. Here’s the story. (SPOILERS) Science guy figures out we’re all gonna die (“The neutrinos have mutated.” I swear to fucking god that’s a line from the movie). Govt guys decide that to save humanity we have to build a bunch of big boats and only put the rich people on them. Packages start at 1 billion euros. To get this shit done on time, the labor is contracted out to the Chinese. So we’re saving rich people using forced labor and deplorable human rights policies. Anyway, through a chance run in with a crazy guy in the woods (Woody Harrelson playing himself), John Cusak’s cute little suburban family finds out about all this crap and takes off across the globe to try and save themselves.

Except… there is no adventure. There’s a lot of sitting on planes, sitting in trucks and talking. The science guys talk about how they were wrong and we’re all gonna die sooner. The cute suburbanites talk about their failed marriage and their adorable little kids. The “heroes” talk about how we shouldn’t just save the rich people. Except … that’s all well and good but really, can I get on the boat before we try and save everyone else? Saving people is great as long as my ass has a seat already.

Near the end, there is a great act of charity where one of our “heroes” convinces the captain of his big boat to save a bunch of folks. Except! This act of charity involves saving hundreds of rich people whose boat didn’t work. Well, and a handful of Chinese laborers. But mostly rich people.


So… the synopsis: Act I (45 minutes): Explosions, death, fire, LA sinks into the ocean, Vegas blows up. Rio is sucked into the earth. Act II (3.5 weeks): Walking. Walking. We’re all gonna be ok. Walking. Still not king. Walking. Act III (20 minutes): Operation “Save The Rich People” is mostly successful. Epilogue: Turns out parts of Africa are still habitable. Let’s land all the rich people there.


To be honest, this movie reminded me a lot of Deep Impact. I went to the theatre to see the world blow up and this horrible experiment we call humanity wiped off this rock for good. Instead, I got two hours of badly scripted underacted interpersonal bullshit between characters that I wanted to watch die in a pyroclastic flow. “Can the world end now, mommy? Oh fuck. They’re talking again.”