Making a podcast – some notes and observations

For the past 3-and-a-bit months, I’ve been making a podcast with my friend Leila.

It’s called Shift Run Stop and thanks to iTunes featuring it on their Podcasts page, it’s recently started getting rather a lot more attention and listeners than we’d ever have hoped.

Shift Run Stop hits the bigtime

A few people have asked me how the recording and editing works, so I thought I’d share what little I know about this stuff and how I do it. We co-host and co-produce, and while Leila is the video editor and publicist, I’m the sound editor and chief tech monkey. I think we make a good team, and it’s certainly a lot of fun.

Recording / Capturing / Studio

We both have Zoom H2 mp3 recorders (I copied Leila) and we use one or both of them to record the audio (generally as a 256kpps MP3, which we copy across to my laptop after we finish recording). Meanwhile, Leila uses her Flip camera or iPhone to capture video tasters, which she edits later in iMovie. She’s good.

Here you can see the Zoom H2, Leila’s Flip and The Internet’s Dave Green all in action together.

Leila and Dave

The Zoom H2 is very good for the price, and I’d recommend it to anyone looking for a decent sound recorder on a budget. For a slightly higher end option, I definitely like the look of the Edirol R-09HR.

Mixing / Cutting / Editing

I use Reaper to edit and mix the recordings. Reaper is amazing, has a hassle-free 30 day evaluation period and after that costs a very reasonable $60 for a personal/education/small-business discounted license or $225 for the regular license.

Some of the filters I use: compressor (to even out the loud peaks), reverb (though not very much or very often) and low-pass (as a hiss filter). Here’s what an episode looks like while I’m working on it.

The editing process

Most of the podcasts you’ll find on iTunes are really quiet. I’m learning to trust what Reaper tells me about the volume level, and keeping it as high as possible so it doesn’t quite clip.

One recent complaint was that the stereo separation is sometimes too great; you hear one person in one ear and one in the other. It’s (obviously) because we sometimes record at opposite sides of the stereo microphone, i.e. at the extremes of it’s recording field. More overlap would be better. I’m going to experiment with the chanmix2 filter in Reaper to narrow the separation a bit. Longer term, to do everything properly, I’m actually quite tempted by the Alesis MultiMix 4 USB Four-Channel USB Mixer for creating a bit more of a studio setup with multiple microphones.

People have suggested that we could tighten it up a bit by removing the ‘um’s, ‘ah’s and other pauses. That’s probably true, and I do increasingly take out a bunch of the worst offenses. On the other hand, my feeling is that I wouldn’t want to go too far; leaving a bit of who we are is a good thing, and totally stripping the conversation of its natural rhythms would be bad. Sometimes I think the odd ‘umm’ can be a useful break; a sort of pressure valve to stop your brain exploding from over concentrated conversation. There are extremes here, with totally unedited two-hour long raw rambling conversations at one end (with the bad bits left in too), and an ultra tight US commercial radio programme at the other (with every hestitation and every moment of silence removed to make way for more ads).

If you’ve ever listend to Radiolab, and you should, then you’ve heard a well produced podcast (perhaps sometimes slightly over-produced for my taste), but one where the imperfections lend it an enormous charm.

In editing, I’m generally just trimming out the more glaring diversions, conversational cul-de-sacs and dull bits, cutting some of the bigger pauses and generally tidying it up a bit. In a 45 minute recording session it’s usually not hard to spot the 20 minutes of really really good stuff. We generally don’t re-order anything, or (of course) make it sound like someone said something they didn’t. I do happily switch between conversations though, and even drop listeners into things with very little introduction.

Back in November, Leila described Shift Run Stop as “an ambient soundscape sort of production, an undulation of chatter and noise, ideas, games and food…”, which I quite like. In the earliest episodes it was probably a bit too confusing, and we’re getting better at signposting what’s going on. That said, one thing I’m still really proud of is the bit in episode 4 where we drop into a couple of conversations without any sort of introduction. One right at the start (which ends up being a lead into hearing a Commodore 64 programme at in the podcast [02:30], which nobody yet seems to have loaded and run) and again at [10:03] where Dave, Tom and Leila are talking about a film and it’ll probably take you until about 11:15 to work out which one. Introducing that with ‘And now, we share our theories about a film…’ just wouldn’t have worked. You might argue that it’s confusing and stupid and annoying and wrong, and that’s just fine. Someone recently described it as ‘overhearing someone else’s conversation’ and gradually working out for yourself what’s going on. I prefer to think of it like that. It works if the conversation is interesting enough.

Publishing / Syndicating / Hosting

I use Libsyn to host the MP3s and Video files in the podcast, an instance of a WordPress to serve the shiftrunstop.co.uk blog and finally Feedburner to take an Atom feed from the blog and turn it into a podcast, while also tracking subscribers, making it work nicely in iTunes, etc.

Our setup works beautifully and was relatively painless, not to mention fairly cheap, to set up. Robert Brook was kind enough to give me some advice about Libsyn (by recording the answer to my questions in his own podcast, so you can hear it too if you want to). The only real cost is Libsyn, where I’m currently paying $24 per month for 525MB per month of upload, which is enough for 4 half-hour-ish audio episodes and 4 5-minute-ish video tasters. They have cheaper packages too. Libsyn don’t cap download bandwidth, so although Amazon S3 might have been even cheaper in the early days, Libsyn is a nice predictable cost rather than a variable one. To do it totally for free, we could just use the Internet Archive to host the audio files. Sadly, to be brutally honest, their upload is still so disappointingly flakey that I didn’t want to trust it.

Enormous Caveat: I’m probably doing everything really badly wrong. I’m documenting it here partly to share what I’ve learned by trial and error, but mostly so that people who know more about it can correct me.

‘Enemy of Chaos’ walkthrough

Enemy of Chaos mapped (vertical)

Spoiler alert: when viewed large, this is a complete map and walkthrough of the wonderfully geeky ‘choose your own adventure‘ meets ‘Fighting Fantasy‘ style interactive book/game, Enemy of Chaos by Leila Johnston.

You might have read her previous book, How to Worry Friends and Inconvenience People. More recently, Leila’s reading from Enemy of Chaos was one of the forty very interesting things that happened at Interesting 2009. If you were foolish enough to miss that, I hope you’ve at least read Cory Doctorow’s review of the book on Boing Boing.

Earlier this week, Leila was kind enough to give me a copy. I loved it, and within a day I’d decided I absolutely needed to see what a map of every possible path through the book would look like.

I made this using the `dot` renderer from GraphViz, which does all the hard work of drawing the graph and laying it out. The source file only took about 20 minutes to create. I quickly flicked through the book from beginning to end, documenting all the ‘now turn to page x’ choices like so:

digraph g {
  node [ shape = plaintext, fontname = Tahoma ]
  1 -> 166
  1 -> 37
  23 -> 201
  24 -> 48
  24 -> 178
  31 -> 110
  31 -> 191
  // ... (etc)
}

Viewed as a graph, it also acts a walkthrough, revealing the dead ends and the various paths to the final page. It also highlights a few interesting things about the structure:

  • A six page loop between pages 201 and 23.
  • A glitch which means page 227 can’t ever be reached except by flicking randomly to it; it’s a reverse dead-end.
  • There are quite a few ways to reach the end, but a lot more ways not to. It’s very hard to win, and gets increasingly hard towards the end.

Below is the same map, laid out horizontally. As Leila points out, it “looks like a big Romulan ship”, which is quite appropriate for what must be one of the geekiest books of the year.

Enemy of Chaos - mapped

P5 Glove – Rock Paper Scissors and other fun

The P5 Glove is a consumer wired glove (tactile but not haptic). I bought one boxed as-new on eBay a while ago for not very much, and I’m glad I did as they now seem to be increasingly hard (and expensive) to get hold of.

P5 Glove

P5 Glove    P5 Glove (Rock!)

It contains five analog bend sensors, 3 buttons plus in theory x, y and z coordinates and yaw, pitch and roll (it emits IR which is picked up by a big USB IR tower so it knows where your hand is in space).

Here’s the P5 Glove intro movie…

I say in theory because while the p5osc Mac drivers handle the bend sensors very well the x/y/z output is jittery and yaw/pitch/roll sadly non-existent.

I’ve been experimenting with bridging the outputs for the buttons, fingers and thumb into MIDI custom controls so that I mess around with them in ControllerMate. Here’s a demo of a simple setup which detects whether each digit is straight or bent, and uses that to determine whether your hand is describing a rock, paper or scissors shape. For now, it just displays ‘Rock’, ‘Paper’ or ‘Scissors’ in large type on the screen but it would be pretty straightforward to turn this into a simple game.

P5 Glove – MIDI Rock Paper Scissors from rooreynolds on Vimeo.

Here’s the ControllerMate patch I made to do it (click through for the annotated version on Flickr).

ControllerMate VR Glove MIDI Rock-Paper-Scissors

Lots more fun to be had here with virtual pianos and guitar strings too; arpeggiating the MIDI guitar, for example.

EZi Entertainment Zone

Simon Lumb recently spotted an amazing(ly bad) looking games console in a motorway service station which, shall we say, borrows heavily from the design of of the Wii.

I couldn’t resist trying it for myself, and picked one up on eBay for a little bit less than £20 including delivery. Quite a bit less than the RRP you’ll see quoted in some places online. A games console, complete with 87 games, for £20. Bargain. Right? Well, almost.

EZi Entertainment Zone  EZi Entertainment Zone  EZi Entertainment Zone unboxing  EZi Entertainment Zone  EZi Entertainment Zone - 18 sports games  EZi Entertainment Zone - 69 arcade games

EZi Entertainment Zone

EZi Entertainment Zone - pingpong  EZi Entertainment Zone - Fish Story  EZi Entertainment Zone - Freestyle  EZi Entertainment Zone - Deformable  EZi Entertainment Zone - Javelin Throw  EZi Entertainment Zone - Santa Claus

Observations:

  • The graphics are sub-SNES quality and many of the games are barely playable. The knock-off design is laughable and the bargain basement price reveals itself at every opportunity.
  • The two stick controllers each include four red flashing lights at the bottom, a-la the blue lights on the Wiimote, but these ones don’t do anything except flash irritatingly and constantly.
  • The stick controllers do include a very crude motion control. Certainly nothing like the Wiimote of course, but simply a basic (and flaky) movement detection, presumably through something like a mercury tilt switch. It just about works for the Tennis and Pingpong games but it it painful in the extreme for any of the others, especially baseball and golf where it’s practically unusable. You can turn ‘sport’ mode off to disable the motion control and use the buttons instead (or just use the other game controller which you only get one of but is a much better bet for most of the games).

I have not tried all 87 games yet, but here are some highlights

Tennis

Bowling

Little Indian

While many of the other games I’ve tried so far have been predictably awful, other have turned out to be quite playable in a retro generation-before-last sort of way. Especially with the volume muted. The quality of the (18) games on the sports cartridge, while still quite mixed, is markedly higher than the (69) games on the arcade cartridge.

Some of the names are amazing. How can you not love a console that ships with titles including Cross Strert, Assart, Aimless, Polk, Grot Kid, Knocking, Ramming, Fish Journey and Girl.

I’ll try to continue to capture and review more of the games in detail. Rather than do it here, I’ve started an owners wiki where I’ve begun to document the EZi’s various games and hardware. It already includes the photos and videos used above, plus Pingpong, Boxing and others, and I’m sure it will grow as I (and others?) add more. I do hope anyone else who is brave/mad/foolish enough to buy an EZi Entertainment Zone will join me there.

MIDIguitar patch

Remember the Rock Band / Guitar Hero MIDI guitar thing I made? I have not fiddled with it much since I presented at Playful 08.

However, since a few people have asked me for it, here’s the current version of the ControllerMate patch which contains two versions; one for Rock Band (Harmonix) Xbox guitars and one for Guitar Hero (Red Octane X-Plorer Controller) Xbox guitars.

You’ll need ControllerMate to use it of course, but more importantly you’ll need the MIDI-enabled version (which means you’ll need a registered copy) but honestly, once I’d tried ControllerMate I knew the MIDI addition was well worth the $15.

Enjoy, and do let me know if you make any interesting modifications.

Things that might help you get started:

Laptop Stickers

Laptop stickers

I’ve been collecting photos of laptop stickers for ages.

Here’s what my ever-changing MacBook Air looks like at the moment (click the image for the Flickr version, complete with notes).

I’m always on the lookout for more. If you want me to display your sticker, and don’t mind posting it to me, let me know so I can give you a mailing address. I mean, if I’m prepared to walk into meetings with ‘sit on myspace’ emblazoned across the front of my lid, I should be able to cope with anything, right?

Browsing my browsing

I mentioned last week that I’d installed MeeTimer and was using it to track my browsing history. Now I’ve built up a weeks worth of data, it’s time to do something fun with it.

If I want to eliminate, or at least manage, distractions, it will be useful to know not just which sites I spend the most accumulated time visiting (MeeTimer already does a pretty good of showing me this), but also which sites I visit most frequently. Because MeeTimer stores all of its lovely date in an SQLite database it’s easy to get to it and create pretty graphs like this one…

Top 30 visited sites for week of 30th March

Even better, lots of scripting languages have support for SQLite (I’m using Xampp as a convenient stack containing Apache PHP 5 and SQLite 3). After hacking around for a couple of hours, my nasty little PHP script was serving up this sort of thing:

Experiment: Browser DNA

(Larger version)

MeeTimer lets you group URLs into different groups, so here those groups are displayed using different coloured rows. Yellow represents site’s I’ve grouped as ‘work’ (mainly work’s webmail address), so it’s easy to see that when I was working on my laptop at home on Friday, i.e. 2 days ago, I was accessing work webmail pretty constantly. I have a desktop at work, so on most days I don’t need to use webmail to check my email except for on the train on the way in and out, but for some reason I had it open for ages on Monday morning (i.e 6 days ago). Perhaps I was away from desk?

I’m also experimenting with alternative ways of displaying the history, including showing the favicons for certain sites.

Experiment: a brief history of favicons

(Larger version)

Here I’m just showing the visits to about a dozen sites I seem to visit (very) regularly, e.g. Twitter, Gmail, Flickr, Google, Technorati, Feedburner, Google Reader, Delicious, etc. You can see that I habitually check Gmail about once per hour, and visit Twitter even more regularly than that.

The code for the DNA one is a bit specific to my groups, so I want to generalise that to work for all groups before I share it, but I’ve put the code on GitHub for the favicon one. It’ll probably only work in Firefox 2 or better. Canvas should work in Safari, but I’ve probably used Mozilla specific stuff for the text. This was a very quick hack, and there’s plenty of scope for enhancements, so let me know if you make any improvements.

MeeTimer and myware and SQLite

I’m interested in the idea of self-interested self-surveillance. Long before we had PMOG (the Passively Multiplayer Online Game, now called The Nethernet) to make a game of it, Seth Goldstein was calling the idea ‘myware’ and building the (short-lived) AttentionTrust site. As Fred Wilson said at the time, “If someone is going to spy on you, it’s probably best if its you.”

With that in mind, I installed MeeTimer over the weekend. It’s a Firefox plugin which…

records where you spend your time online. It does it in a rather useful way, by allowing you to group websites into activities … so you can make sense of where your time is going. Finally, it accumulates time spent on a site over the course of a day…

I’ve been using it for 3 days and it’s giving some interesting food for thought.

MeeTimer

You can even optionally set up ‘tab warnings’ on specific groups (sites you’ve labeled ‘Procrastination’, say) which will pop up with a nice overlay telling you exactly how much time you’ve wasted in this site, and others in the same category (though allows you to click through and ignore the warning just this once or for the current browsing session if you still want to). I’m already finding this feature useful on the handful sites whose feed I’m subscribed to but for some reason still find myself visiting out of habit. (For me, it’s Waxy links and Boing Boing. I love them, but I’d rather be reminded to enjoy them as part of my feed reading routine rather than browsing out of habit. I bet you have your own which make you ask is this really what you want to be doing right now?). A little reminder is really useful for habit-breaking here.

Mostly MeeTimer is just quietly keeping track of a bunch of per-site accumulators, cleverly based on whether Firefox has focus and which is the currently active tab. The results are already interesting. I realised that I was spending a bit less time on Twitter and Flickr, and a bit more time on work webmail, than I thought.

This is all very well, but I want more. Specifically, I wanted to get at the data. Not just the accumulated weekly/daily/monthly (etc) totals and averages, but the number of visits to each site per day. The raw visits. In as much detail as possible. I want CSV exports, or an API, or something. If I’m spending a daily average of 21 minutes on Twitter, how many visits comprise that time? MeeTimer simply doesn’t tell me.

Or does it?

Digging around my Firefox profile, I find a very interesting file at /Library/Application Support/Firefox/Profiles/{profile-id}/meetimer.sqlite. Ooh, I bet I know what that is. So I open up SQLite and start poking.

Sorry. It’s about to get a bit dull from here on in. Unless you get excited about the idea of being able to manipulate this data you’ll probably want to scroll down to the end. Honestly, I won’t mind.

They’ve gone? Right. Let’s get hacking.

$ sqlite
SQLite version 3.6.12
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> .restore meetimer.sqlite
sqlite> .tables
deterrent_stats  groups           log            
deterrentlinks   groups_urls      url_maps       
deterrents       ignored_urls     urls

Excellent. We’ve got tables with sensible names and everything. Let’s see what log looks like.

sqlite> .headers on
sqlite> select * from log limit 3;
url_id|startdate|duration|day|week
4|1238324612508|3|200987|200913
5|1238324617244|44|200987|200913
6|1238324647668|17|200987|200913
sqlite> select * from urls limit 3;
id|url
1|mail.google.com
2|www.google.com
3|www.google.co.uk

Lovely. Easy enough then. The groups and groups_urls tables do what you’d expect too. For now, let’s make url_id more meaningful by doing a join with the url table.

sqlite> select
  url_id, duration, day, week, url
from log
left join urls on log.url_id=urls.id
limit 5;
url_id|duration|day|week|url
4|3|200987|200913|google.co.uk
8|40|200987|200913|meetimer.productivefirefox.com
4|16|200987|200913|google.co.uk
11|10|200987|200913|technorati.com
12|14|200987|200913|google.com/reader/

What if we wanted to show the number of visits, the total duration, and the maximum length of duration for visits to Twitter…

sqlite> select
  count(url_id), sum(duration), max(duration), url
from log
left join urls on log.url_id=urls.id
where url = 'twitter.com';
count(url_id)|sum(duration)|max(duration)|url
34|2712|455|twitter.com

Excellent. I wonder what the top seven URLs when ordered by the number of visits?

sqlite> select
  url_id, count(url_id), sum(duration), max(duration), day, week, url
from log
left join urls on log.url_id=urls.id
group by url
order by count(url_id) desc
limit 7;
url_id|count(url_id)|sum(duration)|max(duration)|day|week|url
9|34|2712|455|200989|200914|twitter.com
10|30|1075|249|200989|200914|search.twitter.com
1|22|2505|928|200989|200914|mail.google.com
4|20|206|57|200989|200914|google.co.uk
17|18|476|114|200989|200914|flickr.com
21|10|2480|2125|200989|200914|bbc.co.uk
39|8|13152|10212|200989|200914|webmail.bbc.co.uk

Twitter, with 34 visits. Sheesh. And for comparison, the top 7 sites by total duration of visit?

sqlite> select
  url_id, count(url_id), sum(duration), max(duration), day, week, url
from log
left join urls on log.url_id=urls.id
group by url
order by sum(duration) desc
limit 5;
url_id|count(url_id)|sum(duration)|max(duration)|day|week|url
39|8|13152|10212|200989|200914|webmail.bbc.co.uk
9|34|2712|455|200989|200914|twitter.com
1|22|2505|928|200989|200914|mail.google.com
21|10|2480|2125|200989|200914|bbc.co.uk
12|6|1355|633|200989|200914|google.com/reader/

13152 seconds (3.6 hours) on my work webmail between Sunday morning and Wednesday aftenoon. And all done in 8 visits. Yuck.

Ok. Let’s start thinking about daily summaries. Grouping by day, and then by URL (since I’m not very good at SQL, and don’t know how to limit it to 5 per day, I’ll just manually snip out all but the top 5 for each day for now)…

sqlite> select
  url_id, count(url_id), sum(duration), max(duration), day, url from log
left join urls on log.url_id=urls.id
group by day, url
order by day, sum(duration) desc;
url_id|count(url_id)|sum(duration)|max(duration)|day|url
1|2|306|228|200987|mail.google.com
9|6|296|217|200987|twitter.com
12|2|225|211|200987|google.com/reader/
28|1|128|128|200987|hunch.com
21|1|66|66|200987|bbc.co.uk
[...]
39|3|10222|10212|200988|webmail.bbc.co.uk
21|3|2155|2125|200988|bbc.co.uk
9|18|1494|235|200988|twitter.com
1|12|1003|185|200988|mail.google.com
10|14|777|249|200988|search.twitter.com
[...]
39|5|2930|2667|200989|webmail.bbc.co.uk
1|8|1196|928|200989|mail.google.com
9|10|922|455|200989|twitter.com
12|1|394|394|200989|google.com/reader/
21|6|259|151|200989|bbc.co.uk
[...]

And returning to the original question of just how many visits do I make to Twitter

sqlite> select
  count(url_id) as visits,
  round(sum(duration) / 60.0, 2) as total,
  round(max(duration) / 60.0, 2) as longest
from log
left join urls on log.url_id=urls.id
where url = 'twitter.com'
group by day
order by day;
visits|total|longest
6|4.93|3.62
18|24.9|3.92
10|15.37|7.58

So it seems that on Sunday I made 6 visits for a total of about 5 minutes and a single longest session of 3 and a half minutes. On Monday it was 18 visits for a total of 25 minutes including one session of nearly 4 minutes, while today, 10 visits so far (including one of over 7 minutes) have already added up to over 15 minutes.

.mode csv

in SQLite is handy too, because it changes that list format to look like

visits,total,longest
6,4.93,3.62
18,24.9,3.92
10,15.37,7.58

so it’s trivial to open it in a spreadsheet.

Making graphs from MeeTimer

Even better will be something cunning and programmatic. Maybe in PHP or Ruby or something. Even this exploratory manual approach is fun though. It will obviously be better once I’ve built up a bit more history but now I know that MeeTimer is storing my data in a way that I can access it, I’m even more excited about it. Thanks, MeeTimer. You rock.

More Microprinting

I’ve been experimenting a bit more with the thermal receipt printer I bought recently. Inspired by Tom’s daily digests I’ve been trying some of my own.

Microprinter testing - font A Microprinter testing - font B

You only get 48 characters per line using the default font. The alternative font (font B) is much denser, with 64 characters per line. The second printout is only about an inch longer than the first one, yet has twelve additional lines of content.

The barcode at the bottom is a sort of physical permalink using a Code 39 barcode. I’m thinking that each daily digest could also exist in a (private) blog, and a barcode (complete with text date stamp) could be a handy way in. If you’re using this code, or something like it, you could do this…

setBarcodeTextPosition(barcodePrintBelow);
setBarcodeHeight(45);
setBarcodeWidth(barcodeMedium);
printBarcode("/2009/02/22/", barcodeModeCODE39);

I used EvoBarcode Scanner to test reading it back in.

Barcode scanning

More ideas for a daily digest:

Tonight I hooked it up to Twitter. Every minute to checks to see what my contacts are saying and prints whatever is new since it last checked (usually 2 or 3 updates).

30 minutes of my friends’ twitter updates equated to five feet of paper. I don’t think I’ll be running this all the time but it does feel reassuring to have it whirring away in the background.

Another use of the Microprinter: printing books. I took the text of Cory Doctorow’s Down and Out in the Magic Kingdom (mainly because I can). It has over 47,000 thousand words, and if you print it at 64 characters per line on standard 80mm thermal paper it’s about 60 feet long.

Printing a book Printing a book

Printing time: about 40 minutes (pausing briefly after every paragraph to let the printer catch up). Rolling it back up again took nearly as long.

At Nick‘s very cunning suggestion there are perforations at every chapter (as well as every sub-chapter, which the ASCII text denotes using a ‘#’ character on its own). Together this divides the book into 59 perforated segments which are about 30cm long on average. Rather than needing a bookmark I’ll just tear off the sections as I finish them.

It’s a portable, recyclable, tear-and-shareable book.

Microprinter

Inspired by Tom Taylor’s microprinter project, I’ve bought a Citizen CBM-231 thermal reciept printer of my own. I picked it up for just £20 on eBay, including shipping. It’s great.

Tom uses his to print the weather, his diary, where his friends are (according to Dopplr) and more. As soon as I saw it, I wanted one of my own to hack with. Reciepts, printed on cheap and recyclable thermal paper, are perfect for directions, schedules, TODO lists and other impermanent bits and pieces you might want to carry while you’re offline. I also like the idea of it politely telling me what I’m up to as part of my morning waking-up ritual. I have a feeling that the soft sound printing and the ‘clunk’ of the auto-cutting blade will be a nice start to the day.

Citizen CBM-231 Citizen CBM-231 Arduino Hacked cable MAX3221 Barcodes!

(More photos)

A few hours of soldering and programming later, and I’m quite a happy hacker. I’ve put an Arduino sketch on github which shows how to easily print text and barcodes to the printer from an Arduino. It’s just a sketch at the moment, but I’ll turn it into a reusable library soon.  With a few utility methods and constants, a “hello world” with two barcodes ends up looking as simple as this…

println("Hello, World!");
feed();
setBarcodeTextPosition(barcodePrintBelow);
setBarcodeHeight(200);
setBarcodeWidth(barcodeWide);
printBarcode("123456789012");
feed();
setBarcodeHeight(50);
setBarcodeWidth(barcodeNarrow);
printBarcode("123456789012");
feed();
cut();

I think it can print bitmaps too. With a bit of work it should be able to print sparklines and QR Codes.

I know Tom has inspired a lot of people, and there are quite a few of these Citizen CBM-231 printers being repurposed at the moment. If you’re interested in building your own microprinter, you’ll hopefully find the wiki at microprinter.pbwiki.com useful.

Update: more microprinting fun including a book and sparklines.

Powered by WordPress with GimpStyle Theme design by Horacio Bella.
The postings on this site are my own and don't necessarily represent my employer's positions, strategies or opinions.