• strict warning: Non-static method view::load() should not be called statically in /home/bwoc/brickswithoutclay.com/sites/all/modules/views/views.module on line 823.
  • strict warning: Declaration of views_plugin_display::options_validate() should be compatible with views_plugin::options_validate(&$form, &$form_state) in /home/bwoc/brickswithoutclay.com/sites/all/modules/views/plugins/views_plugin_display.inc on line 1684.
  • strict warning: Declaration of views_plugin_display::options_submit() should be compatible with views_plugin::options_submit(&$form, &$form_state) in /home/bwoc/brickswithoutclay.com/sites/all/modules/views/plugins/views_plugin_display.inc on line 1684.
  • strict warning: Declaration of views_handler_argument::init() should be compatible with views_handler::init(&$view, $options) in /home/bwoc/brickswithoutclay.com/sites/all/modules/views/handlers/views_handler_argument.inc on line 699.
  • strict warning: Declaration of views_handler_filter::options_validate() should be compatible with views_handler::options_validate($form, &$form_state) in /home/bwoc/brickswithoutclay.com/sites/all/modules/views/handlers/views_handler_filter.inc on line 584.
  • strict warning: Declaration of views_handler_filter::options_submit() should be compatible with views_handler::options_submit($form, &$form_state) in /home/bwoc/brickswithoutclay.com/sites/all/modules/views/handlers/views_handler_filter.inc on line 584.
  • strict warning: Non-static method view::load() should not be called statically in /home/bwoc/brickswithoutclay.com/sites/all/modules/views/views.module on line 823.
  • : preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/bwoc/brickswithoutclay.com/includes/unicode.inc on line 345.
  • : preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/bwoc/brickswithoutclay.com/includes/unicode.inc on line 345.
  • : preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/bwoc/brickswithoutclay.com/includes/unicode.inc on line 345.
  • : preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/bwoc/brickswithoutclay.com/includes/unicode.inc on line 345.
  • : preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/bwoc/brickswithoutclay.com/includes/unicode.inc on line 345.

Bricks Without Wordpress

I've finally moved this site over to Drupal. I've been working with Drupal for the past 2.5 years, and don't know a thing about hacking WordPress, so moving the site over to the tool that I know ensures that I can really own this thing and play around with it. Hopefully ReCaptcha and Mollom will mean the end of comment spam.

Getting the raw images in Pages documents

When working with Pages (and Word), it's hard to get the specifics of embedded images. If you want to know whether an image is a PNG or GIF or what, the interface doesn't make it easy, as pointed out on Betalogue. I couldn't register to leave a comment (*cough*OpenID*cough*) so I'm writing this here post to say: right-click on the Pages file containing the images you want to get at, and click on "Show Package Contents". All the images are available there as files for your perusal and eventual management. It's quite handy. Now if only they'd fix the damn file format.

The State of Repeated-Word Domain Names

I was looking at domain names using Instant Domain Search, and I tried some domains consisting of words (or noises) that are commonly repeated over and over. Or rather, if you hear a repeated word or noise, chances are good that the word or noise is one of these words. My findings are presented below. Each item in the list is a word followed by the smallest number of repetitions of that word that is still available as a domain name (.com). I call this number the word's Available Domain Echo Number (AEDN). For instance, "me" has an AEDN of 8, meaning that the shortest available domain name consisting of repeated "me"s is "memememememememe.com". Interestingly, the URLs consisting of 9 and 10 "me"s are taken. Here is the list:
  • Me: 8
  • Now: 4
  • Shit: 5
  • Fuck: 7
  • Ha: 15
  • No: 9
  • Yes: 6
  • More: 6
  • Oh: 5
  • Badger: 6
  • Spam: 5
  • Echo: 4
As a control group, here are some words that are not commonly repeated, and their associated AEDNs:
  • With: 4
  • Spoon: 3
  • Grim: 2
  • Cheek: 3
This proves conclusively that the items in the first list have longer AEDNs than the items in the second list, as of this writing.

Pages '08 Documents are Incompatible with Pages '08

My grad program puts a lot of emphasis on groupwork. Our group projects usually involve emailing Word docs around. It's kind of annoying, since I use Pages, but I've gotten used to it. This past semester, though, I was in a group where everyone had Pages, and I was glad not to have to export everything to Word. Unfortunately, it's basically impossible to use Pages documents for collaborative editing of any sort. That's because Pages documents aren't files, they're bundles. Bundles are a special type of directory that OS X knows to treat as a file. Unfortunately, as my group discovered, you can't email a directory! If you use Mac Mail, your Pages bundle will get automatically zipped, but those zipfiles get flagged as viruses by the UToronto mail server, and I wouldn't be surprised if that held true for other servers as well. Can't upload them to an FTP server, either. They're just completely unsendable, and when you try, you get no explanation telling you whhy. Apple's only suggestion is to zip the bundle before you send it. Mysteriously, people seem content with this solution even though, as bad solutions go, converting to Word is marginally easier. This design decision is Microsoftian in its dumbness. Applications in OS X are bundles, which is fine because applications are not meant to be passed around casually. But documents -- especially work documents, as in "iWork" -- are meant to be opened by multiple people. OpenOffice documents are .tgz files, which have all the advantages of bundles with none of the drawbacks. Is that so hard? I can't think of any reason why this would be difficult from an implementation perspective. The problem is compounded by the fact that Pages doesn't let me edit Word files directly. I have to import the Word file (as an untitled document), make my changes, and export it again. This turned our groupwork into a farcical dance of file conversion. I would write an assignment in Pages and export it to a .doc file so that I could email it to my group, who then had to import it into Pages to make changes, and export it again in order to email it back to me. It's a damn shame, because apart from this problem, Pages '08 is a masterpiece. It's the best application Apple makes, as judged by its simplicity and ease of use relative to the complexity of the task it's designed to perform. I think this bundle issue will keep it from getting the adoption it should. Microsoft gets tons of traction from network effects -- if more people are using Word, you've got more incentive to use Word as well. But even if everyone in the world switched to Pages tomorrow, we'd still be tossing Word docs around.

The Rising Caffeinated Tide That Lifts All Boats

I was miserably unemployed for awhile after college, and took a drudge job at Starbucks to break the monotony. It turned out to be a really fulfilling experience, so I've got a soft spot for them. And now, Taylor Clark at Slate puts some data behind some arguments I've been using for years to defend my corporate BFF:
Soon after declining Starbucks's buyout offer, Hyman received the expected news that the company was opening up next to one of his stores. But instead of panicking, he decided to call his friend Jim Stewart, founder of the Seattle's Best Coffee chain, to find out what really happens when a Starbucks opens nearby. "You're going to love it," Stewart reported. "They'll do all of your marketing for you, and your sales will soar." The prediction came true: Each new Starbucks store created a local buzz, drawing new converts to the latte-drinking fold. When the lines at Starbucks grew beyond the point of reason, these converts started venturing out—and, Look! There was another coffeehouse right next-door! Hyman's new neighbor boosted his sales so much that he decided to turn the tactic around and start targeting Starbucks. "We bought a Chinese restaurant right next to one of their stores and converted it, and by God, it was doing $1 million a year right away," he said.
The article also mentions that, unlike Wal-Mart, they don't compete on price, so they actually have to make people like their products, which is a depressingly rare corporate strategy. But I also think Starbucks was responsible for introducing the whole concept of "good coffee" to the American conscience, thereby expanding the market for indie cafes. Many people think Starbucks coffee is swill, but I bet the only reason it occurs to them to make that judgment is because Starbucks spent the last fifteen years saturating them with the idea that coffee is something they should be picky about. That's the sort of meme you can only propagate if you're a very big company, and indie cafes should be somewhat glad that Starbucks spent the billions of dollars needed to spread that message for them. I always wondered if my San Francisco location gave me a false impression of a robust, diverse cafe economy in America. I mean, if there's going to be a Starbucks backlash anywhere, it's gonna be here. But it sounds like small cafes are doing well anywhere that there's demand for them. I certainly don't think Starbucks is perfect (I hang out in indies usually), and I sympathize with anyone who hates the coffee or the cloying ads, but overall it's a good thing they're in business. (via Daring Fireball)


I was reminded tonight of something Jesse brought to my attention awhile ago: Newt Gingrich reviews lots of books on Amazon. They're mostly generic thrillers, mysteries and military novels. The sort of books where characters have strong-chinned names like "Clint Magnum". A yen for potboilers doesn't necessarily reflect badly on someone, even a powerful someone, but lines like this are kinda creepy:
"For those who think the world does not possess weapons of mass murder with terrorists poised and ready to use them, this work of fiction is a good introduction to the dark side of the twenty-first century."
He acknowledges that it's fiction, but then says we should construct our non-fiction worldview around it. Unfortunately for him, I constructed my worldview around Douglas Adams books long ago. For those who think that mice are merely rodents, Adams' works of fiction are a good introduction to their hyperdimensional intelligence and power. Be nice to mice, and obey their orders.

No iPhone

No, I'm not buying an iPhone. Apple won't let any third-party applications onto the device. In other words, it's not hackable, and I'm not gonna drop $600 on a computer I can't mess around with. Apple's current line on third-party applications is, "if you want the iPhone to do something that it doesn't do, build a website that does it." I want to play Ogg Vorbis files, run an NES emulator, SSH into my web server, record lectures, act as a remote control for my PowerBook via bluetooth, and make VoIP calls. None of that can be implemented as a website (at least, not without flash). I don't care if the applications that do those things aren't as shiny as native iPhone apps -- I need to be able to decide for myself whether installing a program is worth it or not. Apple didn't design the thing for people with my priorities, and that's fine, because that's what Nokia is for. I got a Nokia E70 a few days ago (the iPhone is driving down prices of other smartphones on the secondhand market), and since then I've been a gleeful little nerd.

BarCamp Toronto Tech Week: May 26th

BarCamp Toronto Tech Week is happening right now. Yeah, I'm not the earliest out of the gate with the news, but I'm here, and you should too. There's still time to think of a session. Last year's BarCamp San Francisco was a bit of a transformative experience for me. I had a great time, schmoozed with great people, and became more confident about some ideas I had tossed around in my head for a long time. One of them has since borne fruit, and I'll be talking about in an hour or two. My work on Quaintance has slowed to the occasional coding binge on plane trips, and I find that getting discussing my projects in a group spurs me to work on it more frequently. It never occurred to me that I'd help to organize a BarCamp a year after my first one, but I did, and I'm astonished at the number of people who showed up and how smoothly it seems to be going. We (Will Pate, Bryce Johnson, Ryan Coleman, Mark Kuznicki and myself) threw this together in like three weeks, but in BarCamp terms, that's plenty of time to do what needs to get done, apparently.

Technorati Tags: , , ,

DrupalCamp notes: CRM API

Before it falls through the cracks, I'm posting my slides from the CRM API session I led at DrupalCampToronto: pdf ppt keynote. The session was an introduction to the CRM API that some of the folks at Trellon have been working on. It's basically an interface layer that allows module writers to add CRM functionality to their work without having to know the ins and outs of the various CRMs that are compatible with Drupal. For instance, a web contact form module may want to insert mailing events into a CRM, so that it can keep track of who's used the form. There shouldn't need to be a separate version of the module for SalesForce and one for CiviCRM. That's what the API is for. My demo served mainly to tell folks that this was happening, and to get feedback. There isn't much to show at this juncture, because we've just started and we're looking for community involvement. Here are some other resources:

Technorati Tags: , , , ,

DrupalCamp notes: Drupal Debugging Swap Meet

DrupalCampToronto finished up Saturday night, and if I'm not mistaken, it was a whopping success. It certainly went well in terms of raw numbers: 150+ registrations and 22 sessions (plus who-knows-how-many random chat sessions in unused rooms). And judging by the straw polls I took at my sessions, there was a lot of learning going on. I need to record notes on the two sessions I led, and lessons learned for next time, because there will be a next time. Also, hopefully, notes from the sessions that I attended, though there weren't many because I put in a bunch of time at the registration desk. First up is the Debugging Techniques Swap Meet (slides: pdf ppt keynote). I wanted a session on debugging because there are precious few resources for debugging Drupal problems. Part of this is due to the structure of the Drupal documentation, but it's also due to the many layers of technology involved in Drupal projects. I'm much more familiar with debugging techniques for HTML, CSS and Javascript than for the server side of things. Since I'm not a debugging guru, and it was a BarCamp, I decided to frame the session as a discussion rather than a listen-to-me-talk session.