Craptacular email authoring meets luddites

This is bad news for any­one craft­ing email cam­paigns, but hon­estly, if I read one more com­ment where peo­ple plain­tively insist that email is only ever meant to be sent as reg­u­lar text, I just might scream. Go back to break­ing tex­tile machines and accept­ing union-defined min­i­mum wages, seri­ously. I find it so hard to believe that any of these peo­ple are able to hold down seri­ous jobs as sysad­mins when they are so com­pletely obliv­i­ous to the requirements/desires of the peo­ple they’re employed to pro­vide these ser­vices to.

Yes, rich (HTML/RTF/whatever this new crap Out­look 2007 is pulling is) email can be hor­ri­bly messy. Yes, it is a require­ment. Yes, if you think text-only is the way to go, you need to pull your head out of the sand. Wel­come to the twenty-first century.

The clos­est I’ve come to some­one who thought like that was a chap who was adamantly against the idea of con­tent man­age­ment sys­tems. I jest not, but in my mind that’s less seri­ous an offense than sug­gest­ing that all con­tent on the web should con­sist solely of text and links, “because that’s the way it was designed”. That is, in essence, what these sysad­mins (and some other open-source big­ots — we should all use Mutt and Pine — who prob­a­bly haven’t much expe­ri­ence with the cre­ation or deliv­ery of such things) are arguing.

# by Josh Street on January 24th, 2007 Tags: , ,
| No Comments »

Notables and quirky distinctions

Shaun Inman has redesigned. It’s not visu­ally as rad­i­cal (or gim­micky) as the last two, but con­cep­tu­ally, tech­ni­cally, and cre­atively it is far more stunning.

“The four stripes down the left-hand side of each page of this site pro­vide ambi­ent tem­po­ral con­text to the item cur­rently dis­played — as does the bright­ness of the back­ground color and over­all con­trast of the page you are viewing.”

A few months back I’m so sure I would have dis­missed that as a fine load of waf­fle indeed. “Ambi­ent tem­po­ral con­text”? Puh-leeaassee. But it does actu­ally make sense. Almost in an Edward Tufte kind of way. It’s excit­ing and dynamic and auto­mated and what­ever else (pre­sum­ably because of his brain being abnor­mally advanced and adept at ninja JavaScript­ing + less obvi­ous back­end things, etc.), but it actu­ally does so to an end.

The visual rep­re­sen­ta­tions are use­ful. One will dis­cover chronol­ogy very rapidly, or per­haps sim­ply under­stand with greater pre­ci­sion, the tem­po­ral nature of con­tent fea­tured. It feels on first glance wanky as the way that the word “sym­po­sium” is bandied around in academic-parlance when speak­ing of what nor­mal peo­ple would term a con­fer­ence, but it’s really not.

I think there’s some­thing about geek cul­ture that lets us be a lit­tle eclec­tic. A lit­tle ironic (social­ist imagery for self gain?). There’s a dif­fer­ence, of course, between straight “geek cul­ture” and IT cul­ture — IT cul­ture is peo­ple stuck in a cubi­cle writ­ing code. Geek cul­ture, as I define it (because I iden­tify with it), is more about ridicu­lous man­i­festos and spec­u­la­tion about the next wave and pur­su­ing possibly-never-eventuating ideas. Like Parakey, for exam­ple, which scares me (would scare me) if it ever got anywhere.

Yes, even the young and hip in our midst are afraid of change. Not that that would be me. I’ll take my free designer’s drinks where I can but at the end of the day (that is, in about an hour’s time) I’m still an ill-defined gen­er­al­ist. Which is a self-effacing way of say­ing strategist/integrator. Which is a pre­ten­tious way of say­ing broad knowl­edge of dubi­ous depth.

Labels aside, it’s inter­est­ing to observe one thing that demar­cates (in the view of a char­ac­ter I met today known as RLS) con­tent man­age­ment sys­tems from blog plat­forms. I was stunned to hear a fairly seri­ous web devel­oper (even if we dis­agree on MVC and behaviour/content/presentation con­cepts) dis­miss con­tent man­age­ment sys­tems as “the worst thing that ever hap­pened to the web”. A few hor­ror sto­ries about migra­tion later (and a few “Josh, you really haven’t been around long enough to know” looks, no doubt) and it all started to make sense. The prob­lem wasn’t migra­tion or data (yes, even data) or closed/open source or any of the usual com­plaints, but users. And the flex­i­bil­ity that users demand and that con­tent man­age­ment sys­tems have never will­ingly provided.

This is the sec­ond para­graph of the sec­ond big idea of this blog post: I have no way to dis­tin­guish and define this para­graph as belong­ing to the sec­ond big idea. I would love to be able to have been able to put the open­ing two words of the last para­graph (“Labels side”) in small cap­i­tals to demon­strate the start of a new sec­tion. I can’t. My soft­ware doesn’t let me do that — or, if it does, it does so in a way that isn’t scal­able and seman­ti­cally sound. Or, if it does let me do so in a way that is scal­able and seman­ti­cally vir­tu­ous (both in an inter­nal data struc­ture (rela­tional DBs and so forth) and seman­tic markup (HTML, XML, XHTML) con­text) then it’s nigh on impos­si­ble to use and makes so much work it’s infi­nitely faster for me to write a Dreamweaver tem­plate, lock it, and cre­ate new pages man­u­ally based around this. Case in point, ezpub­lish. Full points for exten­si­bil­ity and flex­i­bil­ity, abstracted data struc­tures, etcetera, but a big fat fail for mak­ing this prac­ti­cally use­ful. Hav­ing to reload the web­page or change views in order to put a photo into a doc­u­ment is not accept­able — media library is great, but not if it takes me away from my con­tent for a moment.

The point is, tools get in the way often in ways com­pletely for­eign to hack-it-and-manage-it-yourself Frontpage-esque ways of think­ing. Accord­ing to RLS, this is par­tic­u­larly offen­sive in light of its sim­i­lar­i­ties to bad man­age­ment practice.

You don’t stand over your employ­ees wield­ing a club in order to make them do things your way. You pro­vide them with facil­i­ties to let them get the job done as best they can, and tools to enable them to inno­vate and improve your busi­ness processes, rather than play­ing the auto­crat and cre­at­ing automa­tons who don’t inno­vate and don’t think, either. As we can all imag­ine, non-thinking users are quite dan­ger­ous if you’ve got a hole any­where for them to fall in to. (Unless you’re work­ing in school IT, in which case think­ing users are the infi­nitely greater risk!)

There­fore, con­tent man­age­ment sys­tems are con­stric­tive and evil. I went from a posi­tion of want­ing to exclaim “what are you on, that’s com­pletely insane, step away from that data­base!” to being con­vinced when he told me we were think­ing along the same lines. So what’s my song that sounds so similar?

In a few points, some­thing like this:

  • Struc­tured data is good.
  • Inter­op­er­abil­ity is essen­tial and good.
  • Users are dumb.
  • Users are smart enough to want good tools they can use, even if they don’t always have the lan­guage to describe what they want.
  • Good tools let you struc­ture data with­out think­ing about it.
  • Good tools take advan­tage of struc­tur­ing data as a part of users exist­ing work­flow and busi­ness processes, and don’t increase admin­is­tra­tive burdens.
  • Good tools let you manip­u­late data and recy­cle it and re-envisage it in pow­er­ful, clear, and excit­ing contexts.

One of these things is not like the other one…

But most of it is. RLS empha­sised the impor­tance of flex­i­bil­ity. I do that, too. Only my flex­i­bil­ity is based around bend­ing (or bet­ter, design­ing) the tool to make it accom­mo­date user require­ments prop­erly, rather than dis­miss­ing the tool and return­ing to abstract seman­tics and poorly defined data struc­tures (i.e. none except by HTML markup). Of course, I’m biased, and am pos­si­bly mis­rep­re­sent­ing his thought.

In fact, there were sev­eral impor­tant qual­i­fi­ca­tions to what he had said. This the­ory applies only to large bod­ies of text (in this case, record­ings of semi-legal pro­ceed­ings), not to other con­tent types. For exam­ple, CRM tools are accept­able. Photo man­age­ment, pre­sum­ably, would also be accept­able. That all makes sense. Most curi­ous was the idea that blog­ging util­i­ties were accept­able, whilst con­tent man­age­ment sys­tems were not.

Yes.

The the­ory is sim­ple enough: blogs are some­thing you give users and say “here, have this, work with it and manip­u­late it as you will”, whilst con­tent man­age­ment sys­tems are some­thing foisted upon users by middle-upper-management. Unfor­tu­nately, to me, this seems more like what I imag­ine an anti-uni-IT-service cam­paign run by Social­ist Alliance would sound like. That is, not an objec­tion to the tools them­selves, but merely the bureau­cracy behind these.

It’s not quite that sim­ple, though.

Blog users do have a rep­u­ta­tion for tak­ing things in unusual direc­tions. Think about cat­e­gories. We kicked off with those and then grew out of them. So all of a sud­den we had tags, instead. Then tag clouds. Then folk­sonomies. Sure, some of these things are gim­micks that are going to die off, but the point is there’s scope for inno­va­tion that tra­di­tional con­tent man­age­ment sys­tems wouldn’t nec­es­sar­ily take kindly to. (Good ones would, but that’s besides the point, because I have a sneak­ing sus­pi­cion RLS hasn’t encoun­tered any well-written, exten­si­ble, con­tent man­age­ment sys­tem). So blogs are quite dif­fer­ent in that regard, and very much descrip­tivist with their con­tent — that is, they take it and let it grow as it will, some­what organ­i­cally, and gen­er­ally kick back and let users take their course. No pre­scrip­tivism here.

So there we go. Josh rolls elit­ist design/usability con­cepts, geek cul­ture, labels, inter­gen­er­a­tional con­flict, a dis­cus­sion of con­tent man­age­ment ver­sus blogs, and lin­guis­tics all into one blog post. Now what cat­e­gory do I stick this in?

Nvu revisited

Screenshot: Nvu working on a table

I tried Nvu ages back when it was still fairly new (but a while after the fork from Com­poser) and was pretty unin­spired by the whole expe­ri­ence. Just recently I’ve been giv­ing it a whirl for more com­pli­cated seman­tic markup (i.e. tables) and it’s per­formed admirably! You’ll note in the screen­shot the HTML tag view gives you a pretty pre­cise look at what’s going on. I man­aged things with reg­u­lar tab­bing between HTML tag and Source views (the Source syn­tax high­light­ing still isn’t real­time, which is a bit disappointing) — this is really help­ful in reduc­ing the time it takes to churn out good qual­ity tables. You can also cre­ate unse­man­tic tables and what­ever else with this, but it fixes things fairly read­ily and has “header” styles inbuilt for TH things, etc. The only thing it really doesn’t seem to want to do even man­u­ally is add thead ele­ments, but if you edit them in your­self it won’t try and get rid of them.

Really good (free) tool for cer­tain types of main­te­nance stuff. If it had a half-decent tem­plat­ing sys­tem (ala Dreamweaver Tem­plates, which have got to be pretty sim­ple to imple­ment on top of an exist­ing code base doing all the hard WYSIWYG work, etc.) I’d be seri­ously con­sid­er­ing mak­ing more sta­tic page tem­plates and hand­ing admin­is­tra­tion over in a client-side sense using this pro­gram. Great stuff, and if you haven’t looked at it for a while/ever, worth considering.

Edit: Maybe it does have a half-decent tem­plat­ing sys­tem! I just saw the very promi­nent Insert → Tem­plates → Insert Editable Area option. Doh, now I have to seri­ously think about such things. And, upon more seri­ous reflec­tion, the advan­tages afforded by web-based con­tent man­age­ment sys­tems are gen­er­ally too great to ignore. The only case it could be jus­ti­fied is where there’s no bud­get (or, in the case of vol­un­teer work, no time), in which case chances are the web­site isn’t too likely to have dynamic require­ments, anyway.

New Matthias website (July 2006)

Screenshot: New St Matthias website

Launched very very qui­etly about a week ago. It’s hardly content-ready but that should hope­fully come over the next week or two. We’re keep­ing busy and hope­fully there’ll be blog thin­gies going even­tu­ally. It’s cur­rently built around Word­Press, which is a choice I made a few months ago [and now… you fin­ish this sen­tence]. The con­tent was tak­ing ages to get per­fect so our staff team decided it’d be best just to launch it and replace the old thing. So now we’ve got an incom­plete new web­site! ;-) But it’s get­ting some­where, praise God for the gifts of tech­nol­ogy for communicating!

The upcom­ing events thing doesn’t have any­thing yet (and should), and will be incred­i­bly inter­est­ing. I think the cal­en­dar sys­tem is prob­a­bly still too counter-intuitive (it’s a Word­Press plu­gin designed to link to blog entries) so I prob­a­bly need to look at other options for that. There’s also a dis­tinct lack of media library aspects that could mean more work when graph­ics or other doc­u­ments need upload­ing, but we can address that in good time. By address, I mean change to a real con­tent man­age­ment sys­tem. Sigh, no-one but myself to blame, really.

Speak­ing of church web­sites, I found one in the Syd­ney Angli­can dio­cese that I actu­ally like! Shock, hor­ror! It belongs to St Peters Church Cooks River (located in St Peters the sub­urb, that is). I’d prob­a­bly make the nav­i­ga­tion square on the cor­ners and if I were to use anti-aliased text make it some­thing leg­i­ble, or just plain HTML nav, but other than that I quite like the feel of the site. The less I say about markup the bet­ter, I think. It’s all done with Dreamweaver tem­plates, which is an awe­some option I’d be tempted to embrace but for the cost which we really can’t afford for the flex­i­bil­ity it doesn’t give com­pared to a multi-user CMS. One other new web­site of note is Moore College’s recent update. Seman­ti­cally beau­ti­ful, solid design, okay CSS imple­men­ta­tion (it… really doesn’t work too well at higher res­o­lu­tions in Opera at least, I can’t be both­ered open­ing another browser right now)

Any­way. Ours is good for the minute. It’s get­ting bet­ter, promise. And we’ll have half-decent cre­atives for it some­time in the hopefully-not-too-distant future once the one or two graphic design­ers in our midst are politely roped into cre­at­ing such things :) I’d love to see more blog con­tent, pub­li­ca­tion of more mate­r­ial we pro­duce inter­nally (most recently is the sheet on “How to choose a good church”, but there are plenty of oth­ers), a high-quality kid’s/youth min­istry sec­tion (not just for youth — Dave Blowes is try­ing hard there with the JAM web­site — but for shar­ing what we’re doing with par­ents and childrens/youth pro­grammes at other churches), greater mul­ti­me­dia stuff (mostly for those who aren’t reg­u­lars at Matthias and want to see what we’re doing, but also for archival pur­poses), elec­tronic giv­ing to make that eas­ier, and online part­ner data­base that would effec­tively be a search­able church direc­tory (secured, obviously).

I’m just pray­ing we don’t slide down the slip­pery path into tech­nol­ogy depen­dence along the way, because it scares me so much. I’m not afraid of us turn­ing into a church that embraces tech­nol­ogy and uses it effec­tively and exten­sively: I’m afraid we’re going to wake up one day and will be play­ing a video that’s all about a pas­sage from scrip­ture instead of actu­ally read­ing the bible itself in a meet­ing. I’m not afraid of the power of media under God: I’m afraid we’ll see the power of media and slowly God could slip from the pic­ture as we think we can evoke a response using it with­out turn­ing to His word.

This is the sin­gle most dif­fi­cult thing for me about being involved with tech­nol­ogy imple­men­ta­tion in an Evan­gel­i­cal church in Syd­ney. We’re new to this stuff. The dif­fi­cult thing is that it hasn’t been done before (except in Pentacostal/‘charismatic’/AoG cir­cles, which are slightly dif­fer­ent — I won’t com­ment fur­ther for fear of say­ing any­thing divi­sive here), and even where it has been it’s not been done holis­ti­cally. Approach­ing media is approach­ing the world’s way of com­mu­ni­cat­ing, which is so decep­tive and shal­low and often ill-informed. The chal­lenges that face us are rel­a­tively new, though their essence is not. We must hold onto what we believe whilst try­ing to com­mu­ni­cate those beliefs as clearly and effec­tively as pos­si­ble — but our com­mu­ni­ca­tion is noth­ing with­out the growth pro­vided by God.

What then is Apol­los? What is Paul? Ser­vants through whom you believed, as the Lord assigned to each. I planted, Apol­los watered, but God gave the growth. So nei­ther he who plants nor he who waters is any­thing, but only God who gives the growth. He who plants and he who waters are one, and each will receive his wages accord­ing to his labor. For we are God’s fel­low work­ers. You are God’s field, God’s building.

1 Corinthi­ans 3:5 – 9

Plant­ing and water­ing can take the form of a DVD or a web­site or a ser­mon in MP3 for­mat as read­ily as it could a book or an evan­ge­lis­tic ser­mon: none of these things are any­thing with­out the growth pro­vided by God.

Broken rake

Great. So I try and do things all properly-like, using migrate scripts to make the data­base and stuff, and it goes and dies on me.

josh@whisper:~/public_html/XX/db/migrate$ rake migrate
(in /home/josh/public_html/XX)
rake aborted!
You have an error in your SQL syntax.  Check the manual that corresponds
to your MySQL server version for the right syntax to use near
'desc varchar(255)) ENGINE=InnoDB' at line 1:
CREATE TABLE courses (id int(11) DEFAULT NULL auto_increment
PRIMARY KEY, name varchar(255), desc varchar(255)) ENGINE=InnoDB
./Rakefile:200

Nyaaaah. I think it’s coz I’m using the only ver­sion of Ruby that the Rails team don’t recommend:

We rec­om­mend Ruby 1.8.4 for use with Rails. Ruby 1.8.2 is fine too, but ver­sion 1.8.3 is not.

Hah. Yeah, I’m using 1.8.3. It’s Ubuntu’s fault! That’s just what hap­pened to be sit­ting in stu­pid apt repos­i­to­ries. So now I need to add back­ports to an otherwise-clean com­puter. *shud­ders* Well, I guess the alter­na­tive is com­pil­ing and try­ing to stay on top of all that… *Josh is seen hur­riedly run­ning to add back­ports sources*

Well, maybe not tonight. *wan­ders off to post on τρανσλιτερατιον before sleeping*

# by Josh Street on March 14th, 2006 Tags: , ,
| No Comments »

Trapping return for form field focus

Today I had to cook up a sim­ple form with two input fields, so that two bar­codes could be scanned into their respec­tive fields and then sub­mit­ted (the point being to link two IDs in a data­base that have been encoded in sep­a­rate bar­codes). There was one twist.

The bar­code reader auto­mat­i­cally appends a return char­ac­ter to the end of the string it’s read… which would, in any nor­mal cir­cum­stance, sub­mit the form. Obvi­ously prob­lem­atic unless we split the form over sev­eral pages, which is just yuck.

If the bar­code reader hadn’t returned char­ac­ter 13 (return/enter/whatever you’ll call it) at the end of the string, it’d be triv­ial to pick up a “maxlength=x then go to next field” script off the side of the road… they’re every­where. Not so much the case with this exact prob­lem, though, so I thought I’d share…

[source:str javascript]function catchEnter(e){
var char­ac­ter­Code
if(e && e.which){
e = e
char­ac­ter­Code = e.which
} else {
e = event
char­ac­ter­Code = e.keyCode
}
if(characterCode == 13){
document.getElementById(‘cardid’).focus();
return false
} else{
return true
}
}[/script]

Note we’re not using DOM meth­ods here… there isn’t any equiv­a­lent to which or keyCode that I’m aware of (I looked enough). keycode is the impor­tant one… which is used by the likes of Netscape 4.x and other nas­ties… I don’t really want to know about it, but I stole the key trap code from some­where (lost the site) and didn’t really have a rea­son to inten­tion­ally break the behav­iour for those browsers!

So we use one of those (prob­a­bly key­code) to set char­ac­ter­Code, which is a numeric value that cor­re­sponds to Uni­code dec­i­mal val­ues. 13 is car­riage return. Then it needs to be com­pared to event (the char­ac­ter that trig­gered the onkey­press event), here used as e for con­ve­nience… and if this is true, then focus will go to the next field (in this case cardid) and the char­ac­ter will return false to pre­vent the form from submitting.

Screenshot of the demo page

I’ve got a sta­tic demo here (don’t mind the mes­sage at the top, it was an HTML mockup)… try enter­ing some­thing into the first field and press­ing return. Then press return again, and the form will submit.

Obvi­ously this Javascript only works for a two-field case… but you could dynam­i­cally set the ele­ment for focus to fol­low to by pars­ing that through to the func­tion onkeypress event. The only other thing I can think of is to getEle­ments­By­Tag­Name every input field in the form and use the array to dynam­i­cally set the “next” field… but that would have been waaaay overkill for what I had to do.

This behav­iour isn’t just use­ful for bar­code scan­ners, by the way. Desk­top appli­ca­tions often exhibit this kind of behav­iour, and it also goes some way to ensur­ing all fields are filled with­out doing for­mal val­i­da­tion (either JavaScript on submit, or server-side).

# by Josh Street on February 21st, 2006 Tags: , ,
| 8 Comments »

wget as rsync/server migration tool

It works sur­pris­ingly well. I moved a site off a crappy server (so crappy, in fact, that core dumps were wind­ing up in my public_html direc­tory! Lame-o.) that wouldn’t let me have SSH access this evening to one that did, and tried for a while to get my head around *nix ftp’s recur­sive get… then gave up, because whatever’s doc­u­mented out there obvi­ously wasn’t work­ing for me.

Then I remem­bered wget (which I use all the time for grab­bing big files, because I can just back­ground the process and not think about it til I won­der “Hey, where’d this several-GB file on my desk­top come from?”) had FTP capa­bil­i­ties and could spi­der web­sites. Recur­sive get shouldn’t be a problem!

And it wasn’t.

Just use wget -r ftp://login:password@example.org/public_html/ (or sim­i­lar) and the server you’re on will hap­pily leech from an older one! Good stuff.

# by Josh Street on February 7th, 2006 Tags: , , ,
| No Comments »