Posts in the Tech Category

Mailing List Community Care

Published 21 years, 2 months past

Clay Shirky recently published a missive titled “Group as User: Flaming and the Design of Social Software” that I almost dropped into the Distractions list, but then realized I wanted to write about in a little more detail.  Clay talks about mailing lists as one of the oldest forms of social software, and how they tend to become clogged with flame wars.  He makes the case that since flame wars are inevitable in a group setting, there should be mechanisms that help prevent and control the fires.  For the most part, I agree with him that some mechanisms would be a good idea.  I do not, however, accept that flaming is inevitable.

I can draw on personal experience to make this claim.  I’ve been responsible for a mailing list (css-discuss) for almost three years now.  In that time, the list grew so large that it started to overload its home, and had to migrate to a more capable host.  As of this writing, the membership list stands at 5,128 subscribed accounts.  That’s not a typo.  Bear in mind that any account that is disabled due to excessive bounces gets automatically removed after a couple of weeks, so the amount of deadwood is pretty low.

So, yeah, I know what it’s like to be a part of a very large mailing list community.  Over the lifetime of the list, we’ve had very, very few flame wars.  (Most of them have centered around font sizing, unsurprisingly enough.)  And what we call a flame war would hardly even raise an eyebrow in most online fora.  By the standards of the css-d community, any thread that contains more than two agitated posts is considered a flame war.  Posts where list members actually insult each other are rare as moon cheese.  Condescension is a little more common, but not by much.

We aren’t running magic software to make this happen; the list is running on Mailman 2.1b5.  What’s made the difference is me.

Warning!  Ego alert!  Ego alert!

Actually, not at all.  From the very first, I’ve worked hard to make sure list members understand the nature of the community.  It is not a democracy, and it isn’t an anarchy.  It’s a benevolent dictatorship.  This is no secret: I’ve said so on the list at least a couple of times.  I try not to wield the Brickbat Of Administrative Correction unless necessary, and when I do, I do so in as neutral and even-handed a manner as possible.  In the end, though, I make it very clear that within the confines of that community, my word is effectively law.  I decide what’s on topic, and what isn’t, and gently make my decisions known.  End of story.  When I call for a thread to end, it ends.  Or else.  If list members ask for changes to the list’s nature, as happens from time to time, I listen to their reasoning and then make a decision.  That’s it.

Maybe that all sounds like a guy on a massive power trip, but honestly, I’d much prefer that I didn’t have to make those calls.  I’d prefer to have a community where the members keep themselves in line.  That’s actually possible so long as the community is very small, and everyone both listens and is heard.  In a large community, it’s effectively impossible.  Even if 99% of the list membership is adult, the 1% can ruin things for everyone else.  On css-d, a 1% flame rate would mean 50 members were out of line.  In absolute terms, that’s unacceptable.  Thus I actively watch and chaperone the list.  I also wrote some material enumerating the policies, how to avoid being offended, and the right way to answer questions.  People really like that material.  I’ve been asked permission to re-use that material several times.

I also participate in the community as best I can, setting an example for how questions should be answered and list members should act.  Of late, I’ve been too swamped to offer more than token participation on the list, which is why I just yesterday selected four list members to be moderators.  They’ll be helping with administrivia, but more importantly, will be helping to keep things on-topic and civil, although I honestly don’t expect them to have to work very hard at that last part.  Heck, I’ve been an absentee dictator for a couple of months now, and things have stayed mostly on-topic and very civil.  Basically, having put the effort into rolling this massive boulder in a certain direction, it kept going that way even when I stopped actively pushing for a while.  Just recently, things have started to deteriorate a bit.  That was a major impetus to get off my keister and pick some moderators.

So I guess my point is that there’s more to a community than its members.  The founder’s influence is strong, and if the community has someone (or several someones) actively in charge who can make my-way-or-the-highway decisions but still be reasonable about them, it can be kept very nearly flame-free.

Still, some of the ideas Clay discusses would be very useful, even in an already-civil environment like css-d.  He proposes, for example, adapting features of the Slashdot karma/moderation system to mailing lists.  In the css-d context, such a system would probably function more like the eBay “Rate This Seller” feature; for us, it would be a “Rate This Member” mechanism that could communally identify those who are helpful, knowledgeable, and so on.  Similarly, a “Rate This Thread” could be used to identify topics of interest as well as topics that nobody wants to hear about.  (Like font sizing.)  I believe that by getting distributed, evolving community input of that kind, the list would be strengthened and enriched.

It would be interesting to add such features, but in the current environment, I don’t see a way to do so—and, let’s face it, I’m not the world’s most proficient programmer.  Right now it’s mostly something to keep in mind for the future.  Especially if you happen to be working on mailing list software.


S5 1.1a2

Published 21 years, 2 months past

I’ve posted an update to the testbed file that incorporates the new font-scaling routines from Michaël, and also a slightly corrected version of the internal-link slide routines contributed by Henryk Plötz back in the 1.0b2 days.  These routines all seem to work fine, except the internal-link routines don’t seem to work at all in Safari.  I tried several times to fix it, but I can’t figure out the problem.  So fixing that is now on the to do list.

Speaking of which, here’s the current to-do list for S5 1.1, categorized by their importance.  Any of these are, of course, subject to modification, deletion, and so forth.

  1. A way to trigger simple in-slide changes by hitting “next”.  For example, having a list of bullet points appear one at a time as the space bar (or other “next” action) is hit, and then moving on to the next slide.
  2. The ability to cleanly list multiple authors in the metadata.  I’ll get back to this in just a minute.
  3. Better, possibly more dynamic, theme selection.  I don’t know how yet, nor am I sure how it might impact the outline/slide show view toggling.
  4. A way to choose whether to show/hide all of the navigation controls, or just the menu.  Ordinarily, I’d say “do it in the CSS!” and you can in fact do that right now… as long as you don’t care that the behavior won’t be quite right in Internet Explorer.  The problem is that I’m not quite sure how to manage this in a fully cross-browser fashion, short of scanning the CSS files for certain rules, and firing JS based on that.  Which, frankly, sounds kind of ooky.  Adding that information via a meta tag doesn’t seem like the right answer, but maybe I’m wrong.
  5. A way to indicate the target resolution in the CSS, so that the scripts can use that for scaling purposes (thus making the scaling more intelligent).  I’m not really sure this is needed, and I’m open to being convinced one way or the other.

If there’s anything missing, let me know.  Also feel free to comment on what you think of the above plans.

Now for the metadata situation.  As I understand things, having read RFC 2068, you can have multiple HTTP headers that share a name so long as they’re interpreted as a comma-separated list of values associated with that name.  (Apologies if I’m mangling terminology, but HTTP headers aren’t really my thing.)  So given the following:

<meta name="author" content="Eric Meyer" />
<meta name="affiliation" content="Complex Spiral Consulting" />
<meta name="author" content="Joe Public" />
<meta name="affiliation" content="ConHugeCo Corp." />

…this is an equivalent construction:

<meta name="author" content="Eric Meyer, Joe Public" />
<meta name="affiliation" content="Complex Spiral Consulting, ConHugeCo Corp." />

I find this to be a long way from ideal.  In addition, since commas are the default value separator, if I understand the situation correctly,  I can’t really do something like this:

<meta name="authors" content="Eric Meyer, Complex Spiral Consulting; Joe Public, ConHugeCo Corp." />

…because that ends up as equivalent to:

<meta name="authors" content="Eric Meyer" />
<meta name="authors" content="Complex Spiral Consulting; Joe Public />
<meta name="authors" content="ConHugeCo Corp." />

That’s even further from ideal.  So here’s my current thinking for a way to represent multiple authors and affiliations:

<meta
 name="authors"
 content="Eric Meyer - Complex Spiral Consulting, Joe Public - ConHugeCo Corp." />

Anyone have a better idea than what I’ve proposed?  I’d love to hear it.  As part of said proposal, please keep in mind possible expansion of the information carried in the meta element.  For example, titles might be added, which in my current thinking would go like this:

<meta
 name="authors"
 content="Eric Meyer - Principal Consultant - Complex Spiral Consulting, 
          Joe Public - VP of IF - ConHugeCo Corp." />

It isn’t pretty, but it conforms to my understanding of meta value syntax.  As I say, I’d be very happy to be shown a better way of forming the meta values.


S5 1.1a1

Published 21 years, 2 months past

I’m working on S5 1.1, and want to keep people involved in moving it forward.  So I’ve put up a testbed slide show file, which is simply a copy of the introductory presentation file that points to a new UI directory.  The current state of things, which I’ll call 1.1a01, adds two new features:

  1. An author can indicate whether or not the file should default to slide show or outline view.  The default is slide show.  If you want it to default to outline view, you add:

    <meta name="slideshow" content="no" />
    

    The other possible content value is, obviously, “yes”.  This should be useful to professors who want to present notes in class as a slide show, and then post the same file to the class Web site in outline view.  The toggle key and button will both still flip between outline and slide show views, so you aren’t trapped in one or the other.  You just get to choose how the file will load up.

  2. When in slide show view, the font size automatically scales based on the window size.  This means that if you’re expecting 1024×768 and get 800×600, the slides won’t become impossibly long.  Note, however, that this scales text—not images.  I’m not up to that yet, given that I have to think about how to (or even if I want to) handle them.  I’m using an onresize event handler to scale the fonts if you change the window size, as well as firing the scaling function when the slides are first loaded.  In outline view, the scaling is suppressed.

    In adding this, however, I’ve come up against the same problem that prevented font scaling from appearing in S5 1.0: Gecko-based browsers mangle the layout when the font scales.  To see what I mean, toggle the slide view off and then back on.  Text separation, and the widths of inline elements, will not be recalculated when the slide view is restored.  The same kind of thing happens if you change the window size.  Once you’ve settled on a new size or toggled back to slide view, just hit Reload and all is well.  So it seems to be a case of not consistently redrawing element boxes when font sizes change; force them to be redrawn with a reload, and things are drawn as they should be.

    I can’t figure out how to fix this short of firing a reload event in the fontScale() routine, which I’d really rather avoid.  I suppose I could suppress scaling for Gecko browsers on resize (and fire a reload after toggling back to slide view) but I’d like to find a more elegant way to fix the problem.  For that matter, if anyone wants to make my scaling logic more elegant, go for it.  The frustration of cross-browser incompatibilities in manipulating styles came to the fore when I wrote that routine.

There are several ideas and suggestions from the 1.0 release that have yet to be implemented: be patient!  We’re on 1.1a01, remember, and S5, for all its promise, remains a “free time” project.  (My editors will no doubt be dismayed to hear that I think I even have free time.)  If I get time, I’ll write up a concrete to-do list so you can see what’s planned.  For now, if you’d like to help, please just focus on the problems I mentioned, or new problems caused by these features that I didn’t find.  Speaking of which, if any of you IE/Mac wizards can figure out what I’ve done that breaks S5 in that browser, I’d very much appreciate it.


Uncollapsing Margins

Published 21 years, 2 months past

At long last, I’ve published a new article at Complex Spiral: “Uncollapsing Margins“.  In it, I explore how margin collapsing can lead to weird behaviors, why these behaviors arise, and ways to work around it when you want a different result.  If you’ve ever tried to figure out why a heading’s top margin seems to disappear when it’s the first thing in a div, this article will be of interest.

Oh, and if you were having trouble reaching meyerweb in the last 24 hours, we done got Slashdotted.  They posted an article about S5, and the ensuing geek stampede crushed my bandwidth like it was an overripe grape.  An overripe grape run over by a steamroller.  Once the article fell off the Slashdot home page, things got back to normal.


More Tools

Published 21 years, 2 months past

For those who are interested, I’ve added some new stuff to the Tools page, in addition to reordering it just a little.  The first addition is a URL decoder/encoder, something I’ve needed from time to time when trying to unravel encoded-JavaScript bookmarklets.  I’m sure every other developer in the world has created his own version of this tool at some point; well, here’s mine.  The second new toolbox entry is for users of NetNewsWire 2: a small collection of themes.  There are three as of this posting, each with a very, very different aim—one artistic, one historical, and one technological.

Hopefully I’ll have more to add to the S5 portion of the toolbox in the near future.

  • More Tools was published on .
  • It was assigned to the Tools category.
  • There have been no replies.

S5 Validity

Published 21 years, 2 months past

Over the past few days, I’ve gotten a few complaints about S5 breaking in one browser or another—IE6 and Safari got the most mentions, but there were others.  As an example, there was a report that the slide show would just stop working after a certain number of slides.  In every case I’ve seen so far, these problems have been caused by invalid XHTML.

The most common validation problem I expect people to run into is with the structuring of lists.  For example, suppose you want two levels of lists on a slide.  You do it like this:

<ul>
<li>point one</li>
<li>point two
   <ul>
   <li>subpoint one</li>
   <li>subpoint two</li>
   </ul>
</li>
<li>point three</li>
<li>point four</li>
</ul>

Notice how the nested list is inside the li element?  That’s correct.  You should never put nested lists between list items on the ‘outer’ list, even though a lot of people have made that a habit.  The only element that can be a child of a ul (or an ol) element is an li.  That’s it.  Anything that needs to be ‘nested’ goes inside one of the list items.

Alternatively, you can put structures after the list, if that’s what you want.  As an example:

<ul>
<li>point one</li>
<li>point two</li>
<li>point three</li>
</ul>
<pre>
...code sample...
</pre>

Nothing wrong with that, as long as you keep the side content inside the <div class="slide">...</div> element.  Or you could put your pre inside the last list item.  It’s really up to you.

Remember that S5 stands for “simple standards-based slide show system”.  That’s not just marketing: the CSS and scripts pretty much depend on valid markup structures.  If the markup is invalid, it will very likely lead to confusion and unexpected results.  In other words, violate the standards and they’ll violate your slide show.  There’s a certain poetic symmetry in that, I think.

(And yes, I do know that as of posting, this entry doesn’t validate.  Believe me, the irony is not at all lost on me.  This happened because I haven’t gotten around to fixing WordPress so it strips HTML before inserting the entry title into the title element.  I ranted about the problem a while back… and it will eventually get fixed.  Possibly when I upgrade to the next version of WP.)


Dead Letters

Published 21 years, 3 months past

Mail here at meyerweb.com is, for the moment, dead.  I threw up a notice on meyerweb’s home page and was going to leave it at that, but it occurred to me I could get more data from people if I posted and let them comment.  So if you’ve gotten a bounce back from my e-mail address, or if you send me (or Kat) a test message and get a bounce, could you post the error text and relevant headers in a comment here?  It will help diagnose the problem.

Oh, and check to see if someone else has posted the same error before you post.  We don’t need a hundred copies of the same error.  If you have a different error than those already posted, though, then by all means share.  Other information, perhaps such as that divined by you command-line wizards and server administrator types, would be most welcome as well.

Thanks… and I hope this will be fixed in short order.

Update: it’s fixed.  Let the spam flow once more!


S5 Primer Online

Published 21 years, 3 months past

For those who aren’t sure how to tackle creating an S5 presentation, I’ve put a basic primer online.  In addition to explaining the basics of an S5 presentation, it links to a ZIP archive of a “blank” presentation, so you can use that as the basis for any presentations you create.

I’m planning to write in the near future a short guide on how to switch themes.  It isn’t quite as simple as it first sounds, mostly because of the possibility that an author would create a theme package containing only the files that need to be replaced, instead of everything that usually goes in the ui/ directory.

Like it says at the end of the primer, let me know if anything’s missing or unclear.


Browse the Archive

Earlier Entries

Later Entries