Rubric

not logged in (root) | by date | tagcloud | help | login

rjbs's tags

-- - ?? + ++
4   80s  
4   _to_read  
1   abe.pm  
7   addex  
1   ads  
22   advice  
1   airlines  
9   amazon  
1   amber  
1   america  
1   animals  
1   aol  
41   apple  
7   applescript  
2   architecture  
4   art  
1   assembler  
5   astronomy  
2   baby  
4   backup  
1   baking  
1   banjo  
2   barcode  
1   bash  
1   battletech  
5   beer  
1   bethlehem  
5   bible  
4   bicycle  
6   blog  
1   bonjour  
4   book  
6   bookmarks  
44   books  
8   booze  
1   boston  
1   brainfuck  
1   bread  
1   breadmachine  
1   bryar  
1   bugzilla  
1   bus  
1   c  
1   calculator  
1   calendar  
1   car  
4   cartoons  
1   cdbi  
1   cellphone  
5   chart  
1   chemistry  
14   chess  
1   china  
1   chinese  
20   christianity  
1   christmas  
6   cocoa  
16   code  
14   color  
6   comics  
7   compsci  
1   computers  
1   conference  
2   convention  
1   cooking  
13   cpan  
1   cricket  
2   criticism  
3   crossword  
4   crypto  
3   css  
10   culture  
1   cvs  
1   cygwin  
1   dashboard  
8   database  
2   dbi  
1   debian  
2   debug  
8   delicious  
3   design  
2   dictionary  
1   diy  
5   dnd  
2   dns  
4   dreamcast  
10   dreams  
1   drm  
1   dvorak  
2   economics  
6   editor  
2   emacs  
43   email  
4   english  
3   ergo  
9   esperanto  
2   etiquette  
1   evolution  
1   exchange  
2   exercises  
1   extreme  
3   family  
1   fax  
2   ff  
2   fiction  
5   firefox  
1   flags  
10   flash  
2   fletch  
1   flickr  
1   fluxx  
1   foaf  
1   folk  
7   fonts  
16   food  
2   forth  
2   forum  
1   free  
2   freesoftware  
2   friends  
1   frink  
1   fud  
3   functional  
2   furniture  
3   game  
3   gameboy  
18   gamecube  
172   games  
50   gamesite  
1   geography  
2   geometry  
1   german  
8   git  
1   glasses  
1   gloria  
1   gmail  
15   go  
2   golf  
3   goof  
6   google  
9   gov  
1   groups  
11   guineapigs  
2   gun  
3   gwb  
7   haiku  
2   halo  
37   hardware  
8   haskell  
1   health  
1   high-st  
1   hiring  
13   history  
4   hiveminder  
1   home  
13   house  
14   howto  
7   html  
1   http  
32   humor  
1   icehouse  
2   icon  
6   icons  
1   idea  
3   illusion  
16   image  
1   infocom  
2   inform  
5   int-fiction  
1   io  
3   iphoto  
6   ipod  
2   irc  
7   itunes  
1   jargon  
2   java  
20   javascript  
4   jonstewart  
1   jott  
854   journal  
1   jquery  
12   keyboard  
5   keynote  
1   kinesis  
1   knave  
3   kwiki  
10   language  
2   lasertag  
2   latex  
2   latin  
6   law  
2   lego  
2   library  
11   linux  
10   lisp  
1   list  
2   literature  
7   logic  
1   logo  
2   lovecraft  
1   lua  
112   macosx  
1   magazine  
1   make  
2   management  
4   maps  
6   mario  
5   martha  
9   math  
3   mecha  
1   media  
2   memory  
2   metroid  
2   mh  
1   microscopy  
1   microsoft  
1   mk  
4   money  
2   motivation  
1   mouse  
18   movies  
3   mozilla  
1   mp3  
4   msie  
19   music  
9   mutt  
2   mysql  
1   mythology  
1   nethack  
22   network  
9   networking  
8   news  
2   ocaml  
1   omniweb  
2   online  
1   ook  
1   openid  
1   oracle  
5   oscon  
1   outliner  
7   paranoia  
2   parsing  
6   pedagogy  
3   pennsylvania  
182   perl  
2   perlmonks  
7   pets  
2   philosophy  
22   phone  
1   photos  
4   php  
1   physics  
1   piercing  
1   piet  
1   pike  
5   platformer  
3   poetry  
11   politics  
1   porn  
1   postfix  
2   postgres  
2   ppw2007  
1   pr0n  
5   presentation  
1   printer  
15   productivity  
2   profiling  
272   programming  
5   prolog  
7   ps2  
2   psx  
1   psych  
1   pvoice  
9   python  
1   qmail  
1   quality  
1   querylet  
2   quiz  
2   rant  
3   rants  
2   recipe  
54   reference  
1   regex  
12   religion  
7   repair  
1   replication  
3   rest  
18   retail  
10   review  
1   rhetoric  
1   rifts  
1   robot  
1   rpc  
38   rpg  
5   rss  
3   rtf  
1   rubik  
18   rubric  
14   ruby  
1   russia  
2   safari  
1   satire  
1   scala  
2   scheme  
8   science  
1   sco  
1   screen  
2   search  
9   security  
2   sega  
3   service  
4   sh  
5   shaving  
1   sheetmusic  
1   slack  
1   slony  
2   smalltalk  
1   smoking  
1   social  
12   socialnetworking  
168   software  
2   sonic  
2   space  
5   spam  
1   speech  
2   sports  
1   sql  
2   sqlite  
1   startrek  
3   starwars  
2   steelbat  
1   strategy  
52   stupid  
9   subversion  
1   superhero  
3   svk  
1   switcher  
3   syntax  
1   tarot  
1   taxes  
13   testing  
1   tex  
1   thanksgiving  
1   theatre  
1   thunderbird  
5   tiddlywiki  
5   time  
5   tivo  
6   todo  
1   tolkien  
39   tool  
1   toys  
8   travel  
1   trek  
21   tutorial  
14   tv  
3   typing  
1   uk  
3   unicode  
8   unix  
1   vcs  
2   vi  
6   video  
85   videogame  
2   videogames  
14   vim  
1   virtual  
1   virtue  
2   visualization  
2   vnc  
1   vocabulary  
1   voip  
1   voting  
6   war  
1   weapons  
1   weather  
51   web  
1   webgames  
1   weight  
1   wii  
17   wiki  
1   wikipedia  
11   win32  
2   wireless  
1   wodehouse  
1   wordplay  
19   work  
3   writing  
18   wtf  
14   xbox  
1   xcode  
1   xen  
8   xml  
1   xp  
1   xslt  
2   xul  
2   yaml  
10   yapc  
4   zelda  
1   zen  
2   zombie  
5   zsh  

rjbs's entries with a body

RSS available for this query
collapse entry bodies

first impressions of dnd 4; part 4

created 2008-07-01 00:09
tagged with: @markup:md dnd games journal rpg

I skimmed both the DM's Guide and the Monster Manual today. I've been really busy and I don't think I'm going to give either one a really good read, although I read one or two chapters of the DMG in full.

With regard to both books, I think they're great improvements over the previous editions. The DM's Guide is very much like the 3E "Dungeon Master's Guide II," which really blew me away when I first saw it. It's sort of like the Pragmatic Programmer for Dungeon Masters. It's all practical advice for how to help ensure that everyone has a good time. It struck me as so much better than the 3E DMG that I went back and compared them. The 3E DMG has much of the same content, but it also seems to have far more crap like tables, references, and rules for things that will rarely come up. I don't mind having rules for designing new classes, races, and magic. I just think that's quite secondary to common things like, "how do I understand what my players really want?"

The simplification of powers and levels really shines in the DMG and MM. Traps are just things that have powers. Monsters' abilites are expressed in terms of powers. The challenge of a given trap or monster is rated in XP, and there are simple ways to calculate the challenge of an encounter, and to tweak it. These were present in previous editions, but 4E really seems to get it down to a science. I'm sure it could be further refined, but they've gotten it to a really good point already, now.

I'm getting pretty excited about the prospect of running a 4E game.

I'm also starting to resent DND Insider, the new online services, before they've even launched. They all require Win32. Also, if they would launch a JSON (or XML!) web service providing references on rules, it would be pretty cool (and possibly easy) to write a character reference system that could tell you, "Oh, if you're checking Bluff, here are all of the characters possible modifiers."

Anyway, I'm digressing.

My final summary of the DND 4E core rules is this: they're great. I'm very happy with them, despite some minor quibbles and one or two major irritations. (Seriously, where is Lawful evil?)

first impressions of dnd 4; part 3: combat musings

created 2008-06-29 13:40
last modified 2008-07-01 00:01
tagged with: @markup:md dnd games journal rpg

Disclaimer: no, I haven't reread Chapter 9 yet. I just remembered a few things I had wanted to mention.

Fourth edition seems a bit more combat-oriented than 3E did. Now, this might just be my reading of things, but a few things contribute. The one that I like the least is "roles." Every class fills one of four roles in combat: controller (damage a lot of enemies at once; wizards), defender (front-line combat; fighters), leaders (provide bonuses and healing; cleric), striker (massive damage to single targets; rogue). This, I think, really helps to propagate the "but our party needs a cleric!" mentality. The rules even say, "if you don't have a cleric [role: leader] ... a warlord [role: leader] serves just as well." The DM's guide warns, near the beginning, that if you have fewer than four PCs, you will not have one of each role. So, the party is being built around combat. Sure, it says that it's okay if you're missing one of the roles, because the other characters can compensate.

I suppose the idea here is that by creating an assumption that a party is made up of one member of each role (and possibly an extra defender or striker, as those are the roles suggested for doubling up if possible) then writers of adventure modules can make assumptions about what kind of powers the party will have. I'm not sure if that's really useful for an module author, though. If you present a task or challenge, there should be more than one way to do it.

I also think that some classes have been made really weird by being crammed into this setup. Mostly, I'm thinking of the rogue class. Rogue now seems to mean ninja, rather than footpad or burglar. In fact, nearly all of a rogue's thiefly abilites are now summed up in a single skill (and remember that skills are just a binary has or has-not) called Thievery. His powers still include improved abilities to sneak and open locks, but those powers appear outnumbered (I have not counted) by powers that cause "vicious wounds" or "fierce attacks" or "glittering blades." I don't mind if there exists a class with "martial" powers that fulfills the "striker" role, but to me that is Assassin. I suppose that it's up to the players and DM to decide whether any given rogue is an assassin or a thief or, really, a ninja.

I'm not really upset or surprised to feel like D&D is drifting more toward optimization for combat. It's long been a fairly combatocentric game. I feel like its combat has gotten more complicated since 1E, though, while everything else has gotten simpler. I need to find a copy of the 1E core books and review the rules (if they exist) for flanking, cover, grappling, rushing, charging, crawling, and the like. I feel like they were one really simple, or didn't exist. I suppose having no rules for grappling is actually more complicated than having a rule, but as a DM, I feel like I'm expected to know all these moves, and if the player knows how a double-crawl works and I don't, I will look like a slacker.

Oh well. I'm hoping to greatly increase the amount of combat in my next RPG, so I guess I'll brush up on the rules and see how it goes.

first impressions of dnd 4; part 2: rules and non-rules

created 2008-06-28 22:30
last modified 2008-07-01 00:01
tagged with: @markup:md dnd games journal rpg

It's been ages since I played AD&D 1E, so these memories may be a little confused. As I recall, there was no unified skill system. You had such and such percent chance to be able to climb a rope or jump a certain distance, but they were all just table after table of lookup. Every class had its own table for all manner of common things. When I played AD&D, my friends and I had memorized all kinds of tables, or at least the page on which to look. (I seem to recall that an important lookup table is on p. 91 of the 2E PHB.)

Second edition simplified a lot of things by creating proficiencies and the THAC0 system and a few other simplifications. Third edition streamlined things even more, reducing almost everything to a d20 roll. I had sort of expected 4E to go the distance and give us something like the True20 system, in which you only need a d20. Instead, it's just another few steps along the path that we were taking. There are fewer distinct game concepts representing the same things, which means that the game is easier to learn and adjudicate. I'm definitely in favor of that.

The big simplification is the creation of "powers." The powers system (which strikes me as totally ripped off (in a good way) from Mutants & Masterminds) is used to define, well, powers. Any random effect that your character can cause to occur is a power. In 3E, this was represented in part by feats. Feats could be used to perform special attacks, and for this reason fighters got lots of feats. In 4E, feats are still here, but they're much less important. For the most part, they're something like "merits" from the World of Darkness games. They give you bonuses to stuff under some circumstances or because of certain properties of your character. They don't ever grant you new abilities, unless they do so by granting you a Power.

Powers can be used either "at will" or "once per encounter" or "once per day." They all have a power source, a range, an effect, and so on. If you understand how powers work, in general, you will do pretty well at understanding any special ability that any creature possesses at any time. Spells are no longer their own thing with their own rules. They're powers. Special fighter attacks are powers. A cleric's prayers are powers.

Beyond simplifying things for adjudication, this has some significant effects on how the game will play out. For example, Magic Missile (a spell used to attack the darkness) is now an at-will ability, meaning that if you are a wizard who knows this spell (read: has this power) you can cast Magic Missile every turn until combat is over. Your wizard will never run out of spells and have to throw darts or hide behind the half-orc -- I mean behind the dracosaurusman. This doesn't eliminate spellbooks: your wizard still has one, and it has more spells in it than he can use in a day. So, for example, if your wizard can have a single once-per-day power, your spell book may include two. You pick which one you are going to have prepared, each day.

This means that you can run out of some spells, and you still have the ability (and dire need) to plan your daily spell inventory carefully. I think it's quite an elegant solution, because it also seems to work well for fighter powers (special attacks) and magic items and monsters.

This also means that there's no reason for fighters to get more feats (or powers) per level than wizards. A power is a power. In fact, all characters progress the same way as they gain XP. Level 5 characters will all have the same number of feats, powers, skills, and so on -- or they'll at least have gained the same number by virtue of simple class progression.

Of course, this wouldn't work very well in 3E, because of the distinction between class level and character level. In 3E, you could be a second level fighter and sixth level bard, meaning you're an eighth level character. In 4E, multiclassing is greatly stripped down. You are always a character of one class. You may "dabble" in one and only one other class, meaning you are able to chose from some of its features as you progress. If you're used to 3E, It might take a little while to get your head around 4E multiclassing, but it's extremely easy to understand once you do. It's certainly much simpler than the first two editions. (Hey, who remembers dual-classing your human?)

There's a really nice little gem built into character progression. Each level, you're allowed to say, "When I decided I wanted to know 'Summon Monkey,' I was on drugs. It's not useful at all. I would like to retrain myself to forget that and learn 'Summon Lemur.' That seems much better." This means that you can be a little less anxious about making sure you pick the "right" skills over time.

There are some other changes toward that end. Skills have been extremely simplified. Rather than rating skills from 1 to 20 (or 1 to Inf, I suppose) you either have a skill or you don't. Some skills are only available to some classes. I'm undecided about this change, so far. On one hand, I'm glad I'll never watch a player waffle over putting that one extra point into Bluff versus Diplomacy. On the other hand, eventually the bonus from having a skill becomes less significant.

A basic skill check is something like:

d20 + ability modifier + ( .5 * character_level ) + (5 if trained)

For a 24th level fighter with a high dexterity, this might mean a base skill check bonus of 15 for an untrained Thievery check. Sure, the extra +5 would be nice, but why on earth can some brute do so well at picking a lock? The description of the Thievery skill says that "the DM may decide that this skill may not even be attempted if not trained," but that strikes me as a cop out. Either there are "trained only" skills, as in 3E, or there aren't. Don't just sort of hint that it might be a good house rule!

Speaking of things you can learn, once again languages suck. That's okay. It's not usually a big deal, and I've never seen an RPG in which language learning seemed in any way realistic. What bugs me in 4E, though, is that there is no way to "learn to speak Elven." Learning a new language requires picking up a feat that allows you to read, speak, understand, and write three new languages. The problem, of course, is that a feat for one language would be a lousy buy, given what other feats can do. A language isn't a power to acquire, and you can't gain more pips in skills easily to make it a function of skill acquisition. Oh well. I think that as usual, PCs will learn new languages by begging the DM for them.

I only skimmed most of chapter nine, which covered combat. It had all the usual rules for things that I never bother with. I'd love to be able to easily learn and remember all the rules for flanking, cover, grappling, and so on. It would be great to take advantage of all the playtesting that has been done to help combat work well. It's just too much stuff!

I'll probably read the chapter again, more closely, but so far it looked a lot like previous editions. It did use top-down pictures of grids with miniatures to good effect, though, for explaining things like flanking.

Tomorrow, I may start to read the new DMG in earnest. Maybe in a week or so I'll have some thoughts on that.

first impressions of dnd 4; part 1: cosmology

created 2008-06-28 21:42
last modified 2008-07-01 00:01
tagged with: @markup:md dnd games journal rpg

This post may be extremely dorky. I don't even know how dorky I am, half the time, so ... you have been warned.

When the fourth edition of Dungeons and Dragons was announced last year, I was dubious. They didn't say much at all about how it would change, and it seemed awfully soon on the heels of 3.5. All they did talk about was how they'd be adding all kinds of online services, which I was pretty sure I wouldn't want to use, and wouldn't be able to use even if I wanted to (as a non-Windows user).

As the release of 4E got closer, though, I started to follow some rumors on dnd4.com and things seemed like maybe they'd be pretty interesting. I saw that I could pre-order all three core rulebooks for about $55 from Amazon, which seemed like an excellent deal, so I did so. When they arrived, I was in the middle of preparing to go to Chicago and do a bunch of talks at yet another Perl conference, so I didn't have a lot of time to read the rules. Today, though, I managed to finish a first pass through the new Player's Handbook. I skimmed the new combat rules and the power definitions, but I tried to give everything else a decent read.

In a nutshell, I think the rules have been substantially improved in a number of ways. I think the changes to some of the game concepts and setting are awful.

I'll talk about those first, since they might be slightly more interesting than the rules changes.

I don't mind that the default setting is no longer Greyhawk. I think it's sort of a weird move, but I don't mind. I never use the default setting anyway. I think it's a shame to get rid of half-orcs, and it's bizarre to add tieflings and loldragons as core races, but that's okay. It's just a setting.

The problem comes up because of the change to alignments and planes. Traditionally, there have been nine alignments, forming a grid:

 Lawful Good   | Lawful Neutral  | Lawful Evil
---------------+-----------------+--------------
 Neutral Good  | True Neutral    | Neutral Evil
---------------+-----------------+--------------
 Chaotic Good  | Chaotic Neutral | Chaotic Evil

Lawful evil beings adhere to the rules, but their goal is personal gain. This in contrast to neutral evil beings, who only follow the rules as long as they're convenient, and chaotic evil beings, who are pretty likely to break the rules just because they can. Chaotic good creatures dislike any sort of rules, but follow their sense of what is good and right. ("I can't define justice, but I know it when I see it!")

By third edition, alignment was mostly a role-playing aid rather than a gameplay mechanic. (In first edition, it was sort of bizarre and concrete; if you were neutral good, you could speak the language shared by all neutral good creatures. What??) Despite that, it had a lot of important ramifications. For example, two of the Really Evil classes of beings were devils and demons. Devils were lawful evil and demons were chaotic evil, and they really hated each other a lot. They were engaged in an eternal war, the Blood War, which raged across the Lower (Outer) Planes.

The outer planes were a group of realities, each of which was strongly influenced by a position on the Big Grid of Alignments. There was Hell and the Abyss, where the Blood War was fought in part. There was also Elysium, Limbo, Arcadia, and Mechanus (the plane of pure law).

These planes were arranged in an orbit around the inner planes, which included the elemental planes, the positive and negative energy planes, and the prime material plane. The prime material plane is where the game probably takes place and -- and this is important -- it's the whole multiverse. That is, every published D&D campaign basically takes place inside this cosmology. Sure, some realities (Athas, Ravenloft) are mostly cut off from the other planes, but they're still there. D&D asserts that it is metaphysically possible to travel from Greyhawk to Faerûn to Krynn, and all these worlds share one cosmology based on the two orthogonal axes of good-evil and law-chaos. Actually, Eberron does not share the planes, but it does share the cosmological order. Explaining it as somehow connected to the "stock" cosmology would not be extremely difficult.

So, even as things like Planescape and Spelljammer came and went, the cosmology changed a good bit, but the above held true pretty well through first, second, and third edition.

In fourth edition, though, alignment has been changed drastically. (I would suggested that it has been changed for the worse.) There are now five alignments, organized more or less on a continuum:

Lawful Good - Good - Unaligned - Evil - Chaotic Evil

Why? Well... I have no damn idea. I think that the missing alignments have been used to pretty good effect in explaining many creatures throughout the history of D&D, so why would they be eliminated?

Of course, without the three-by-three grid of alignments, the stock cosmology no longer makes sense. There's a new one.

In the new cosmology, there is the world, which is something like the prime material plane. It has a beautiful, enchanged reflection called the Feywild. (White Wolf dorks out there: this is the middle umbra.) There is also a dark, twisted reflection, the afterlife, the Shadowfell. (That is, the low umbra.) "Above" these worlds is the Astral Sea, where a lot of the gods live. Various realms float in the astral sea, many of which (the Hells, Celestia, and so on) were once outer planes. Not all the outer planes are here, though. Some are "below" the worlds, in the Elemental Chaos. This is basically like the elemental planes, all mixed together and more evil as you go further down. At the bottom is the Abyss. While most of the Elemental Chaos is chaotic neutral -- sorry, "simply untamed" -- the Abyss is "actively malevolent."

The 4E DMG has an illustration of this cosmology (p. 161) that looks something like this:

            The Astral Sea
                  |
Shadowfell -  The World  - Feywild
                  |
         The Elemental Chaos

Evil is definitely down, except that Hell is up. The Shadowfell isn't "wholly evil" but everything in it has a "dark and sinister side." The Feywild seems like it's probably good-ish, but it only gets five lines, so I'm not sure. There are some vague intimations about other realms beyond these, but they seem more to be about unknowable distant weirdness than anything else.

Why does this matter? Well, it means that not only is the new setting different than the old, but it is cosmologically incompatible. If you are used to playing in Greyhawk (the default setting since AD&D was born) then you are going to have to re-learn alignment and the cosmology. Worse, if you end up playing in a pre-existing setting, the "default" rules in the core books will not apply to your setting. The benefit of a coherent, shared cosmology across most of the D&D settings has been lost. I'm interested to see what the Forgotten Realms book is going to say about that. Will it retcon all of the Faerûn into this new cosmology? Will it say that in Forgotten Realms games, there are nine alignments? Ugh!

This might end up being justified, if and only if the new core setting really leverages the change in cosmology to produce a better game experience for the average player. Will it do so? I'm dubious, but I guess we'll see.

I know this, though: when I start up my new D&D campaign, the mind flayers are still going to be lawful evil.

where hiveminder fails me

created 2008-06-25 22:10
last modified 2008-06-25 22:10

So, several months later, I'm still mostly using Hiveminder, though not as fastidiously as I once was. I still like it, and I have no plans to abandon it for some other next big thing, but there are places where it lets me down and where I wish I could Just Send Patches or something. I mean, who knows if I would, but it's easy to convince myself that I would be all over fixing it up if I could.

There are lots of places to send feedback to the BPS staff about Hiveminder. Unfortunately, you can't see the feedback you've already sent in. That's one of the things I don't like, and it may make writing this post a bit harder than it would otherwise be.

I think Hiveminder might make a tolerable simple bug tracking system, if there were a way to mark a group's tasks as publicly visible. There isn't. I don't have a bug tracker of choice. I've never found one I really liked.

Hiveminder might make a tolerable project planner for simple projects, if its dependencies were more elegant. I'm not sure exactly why I don't like them, but they just feel really bolted on, sort of like the "x is blocking y" plugin for Trac (which has been an object of my ire lately). See, there are no real "projects" in Hiveminder, just tasks. If you want a project, you can use tags or a group, or you can set up dependencies. "Do X, then do Y." This is useful information, but there's no way to see the schedule at a glance.

I've been playing with LiquidPlanner a little, lately. It's a browser-based project planning system, and so far it looks pretty good. It's a little slow and awkward, which is fine for dealing with fairly hefty project plans (deploy large new subsystem at work) but would be awful for simple things at home (paint third floor). Its real killer feature is that it's multi-user, so one person can run the project and others can update their workload as they go.

So, if I want to deal with one-off work orders (bugs), I have to use RT or Trac or Bugzilla or something. For my personal to-do list, I'll use Hiveminder. For large-scale projects, LiquidPlanner, maybe. Ugh! I know, I know: do one thing and do it well, but...

Oh, another tool I'm "forced" to use is post-it notes. Well, actually, I also wrote my own AIM bot. See, I want to keep track of daily items I want to get done. "At 13:00, go meet Adam for lunch" or "clean the guinea pig cage before bed." I can't do this with Hiveminder because its tasks are all per-day and you can't set sub-day resolution due dates. If I could, the IM bot could have an "agenda" command showing me what I have to do in the next 24 hours, in the right order. It could send me an IM telling me, "It's time to pick up your take-out order."

I'd use iCal.app, but creating new items in iCal is a pain. I'd talk a bit about how awfully the tab key is interpreted by iCal, but... well, try it yourself sometime.

So, I do use iCal for my calendar. I put my triweekly RPG on there, the monthly ABE.pm meetings, travel plans, and so on. I use iCal because it's got a fantastic view for this information, and can pull in lots of other calendars (like Gloria's!), but it's kind of obnoxious to add events to it. Of course, Hiveminder offers an iCal (webcal) view of my tasks. Unfortunately, it's wonky.

Tasks show up as both events (on the calendar) and "todo" items (in the to do list). The todo items don't have due dates or priorities, they're just a big list of things. The events show up on their due date, so if it was due a few weeks ago, I won't see it. Also, that sub-day resolution thing can be a problem. "Go to airport" would be more useful if I knew what time I needed to leave or get there.

Since the feed is read-only (webcal, instead of caldav), I can't actually click the "I am done!" box on my todo items. I have to double-click the item, click the URL, possibly log back into the rarely-used-by-me web interface, and then click "done" and "save" (I think). This is pretty forgiveable. Nobody seems to offer a caldav server, including Google Calendar. I really hope that Mobile Me does caldav with shared calendars.

I don't know how repeating tasks interact with dependencies. It could be pretty great, though. I could tell the system that every three weeks I have a gaming session, and that by three days before I need to have prepared notes. One of those would be an event (it gets done by virtue of the date passing) and one would be a todo (it gets done by virtue of me writing down stuff in my notepad).

There are reports, but none of them strike me as very useful. I can't see how many items I have over time (am I clearing out my list, holding steady, or building a backlog?). I also can't see that report for certain groups or tags, either, obviously. There's a report that claims to be about that question, but it's just number created or closed each day, which isn't anywhere near as useful. Actually, the reports that are provided strike me as really weird. Why would I want to know at what time of day I usually mark tasks complete, or on what day of the week? It's sort of interesting, I guess, but not actually useful to see how I'm doing.

The more I deal with ticket trackers, project planners, personal calendars, and to do list managers, the more I think that these things really need to converge. I'm pretty open to different ways this might happen. Maybe they'll just all be able to share data nicely. Hiveminder is inching that way with its iCal feed. Maybe there will be one or two pieces of software that will solve all the problems well enough. I hope Microsoft does something in that space. I'd like to see something like a combined Exchange, Project, and SharePoint monster.

So, anyway, I still like Hiveminder. I'm going to stick around and keep telling it to remind me to do stuff. (Doing that over Jott is great.) I just hope that sometime soon it will be something I can use to replace other software, so I can stop adding more items to my "where do I look to see what I'm doing today" list.

please erect no barriers to entry for bug reports

created 2008-06-24 11:49
tagged with: journal stupid

Yesterday, we found a serious bug in the IMAP library used by RoundCube. To report the bug, we had to click through a pile of links and sign up for an account. When we tried to send a report to the mailing list, it was rejected (500 error) because you may not post in the first few minutes of being a list member.

Today I tried to watch the QuickTime screencast video for Today. It was unbearably quiet. I tried to report this to the software vendor, but after I finally found the right link to click and entered my problem, and after I clicked a emoticon representing "how this made me feel" and then typed a description of what I *meant* by that emoticon, and after I clicked the submit button, I was prompted to sign up for an account.

I need an account to tell you why I can't view the video for the software I haven't decided to use yet?

Right, we're done here.

regarding reputation

created 2008-06-22 12:36
tagged with: journal perl yapc

Last week, I was at YAPC::NA in Chicago. It was a good YAPC, and I'll probably write a little more about it later, if I can think of anything worth relating. One thing came up, though, that I really wanted to mention.

One of the best reasons to go to a conference is the "hallway track." That is, it's to see and interact with other programmers who you often only deal with via bug trackers, mailing lists, and maybe IRC. Establishing a rapport with other members of the programming community, be it "the Perl community" or "the open source community" or just "the confraternity of programmers," is really important in keeping one's options open. People go to conferences, in part, to make and maintain a good professional reputation.

It's also a good reason to publish free software. Even if I had no particular feelings about the right or wrong of free software, I would publish free software. When I make my software available for free, people can use it to save themselves time and money. I can help establish a name for myself as someone who has written code good enough for many people to use and rely on. Someday, when I go looking for a new job, I can say, "many other pieces of software rely on my work" and I can provide evidence.

My professional reputation is what allows me to get a job that I like so that I can avoid misery while still managing to feed my family and pay my mortgage.

This is a fact that people need to keep in mind when speaking in public. Denigrating someone's professional reputation is a declaration that you want that person to be unable to find a job. You are attacking his means to earn a living and support his family. It is not cute, and it is probably not a good way to solve any real problem.

If you are a contributing member of a project, and it has a project leader who is damaging the project, talk to him. If he fails to respond, communicate with the other project contributors. Try to understand what is going on and why.

Do not, ever, get up in front of a random audience and provide a list of names of people who are damaging the projects that they work on. Doing this is an attack on the ongoing career of the people to whom those names belong. If you are telling the truth, you are still probably doing more harm than good. If you are wrong, you're not going to be able to re-assemble that random audience to issue a correction.

I'm glad to say that I was not the target of any such attack, that I know of. If I had been, I think I would've had to think long and hard about whether open source programming is really a good venue for reputation building. After all, I could just stick to blogging.

iphone 2 for rjbs?

created 2008-06-12 10:55
tagged with: hardware journal phone

I was sure that when iPhone 2 came out I'd get one. The new price makes it pretty attractive, too. Then again, one of the reasons I was so eager to get one was that I was stuck with that piece of crap Samsung. Now I have my RAZR back, which is a nice phone. Then again, just yesterday my five year old iPod finally gave up the ghost, so I have no portable music player.

Augh!

I guess what I need to do is figure out how much more I'll be paying a month if I move both Gloria and myself to AT&T, possibly both with iPhones.

we got a new car

created 2008-06-11 22:25
last modified 2008-06-11 22:25
tagged with: @markup:md car journal

After mumbling about doing so for ages, I finally bit the bullet and replaced our aging and ailing car. Our old 1997 Geo Prizm has been traded in for a 2006 Scion xB. We drove down to Harleysville to Fuzzy Dice with Steve R., our consultant and official Middle Aged Friend. We did nearly no haggling because the asking price was very close to KBB's suggested retail and we just wanted to get the darn car and get home.

It took quite a while to get all the paperwork through, but I'm happy with how the financing went, and the car is, of course, a lot nicer than our poor old Geo was. I accidentally left our old MP3 CDs in the Geo. Oh well. I'll ask the dealer to send them up when he finds us a owner's manul.

old navy pass / fail

created 2008-06-08 20:50
tagged with: journal retail

So, I finally own a pair of shorts, again. I owned about four, I think. I've put on a fair bit of weight (ugh) since I stopped going to the gym, and some of my shorts no longer fit. One pair lost a button, but was mostly wearable with a belt, and the other pair split up the back while I was doing yardwork. For weeks, I've been wearing trousers for everything. I nearly ruined a pair while wearing them to haul and lay down sod. Ugh!

Today, we made a trip to Old Navy and I got two pair of really comfortable cargo pants for about $20 total. Nice! They had quite a few colors, but I had to settle for two pair in the same color to get my size. The color, no kidding, is called "buffalo herd." I was a little miffed to be unable to get khaki or black, but Gloria reminded me that Old Navy has a pretty decent online store.

I went online, enabled Flash for the site, and ordered a pair in "black" and "fisherman's khaki." Checkout was alright, although 1Password had some trouble filling in the flash form for my address. When I got to "pick a password," I let 1Password pick something random, only afterwards to be told that I had to limit myself to numbers and letters. Ugh.

The really annoying part was that when I tried to change the form, I clicked in the password input area and hit backspace... which was sent to my browser, which went back to a previous page, canceling my checkout process. Ugh!

Oh well. Filling in a form twice is a small price to pay for being able to wear something other than long pants. (I am not counting the price to my conscience at buying clothes probably manufactured in a sweat shop. I try not to think about that.)

new distribution: data-section

created 2008-06-07 20:18
last modified 2008-06-07 21:28

I've, uh, been writing a lot of new general-purpose modules this week. This happens sometimes when I suddenly find myself writing a new program and I want to reuse mostly generic tricks that I wrote into an old program. I split a lot of things out of Rubric, eventually, and now I'm splitting things off of this and that. I broke Config::INI::MVP::Reader out of App::Addex::Config, Mixin::Linewise out of Config::INI, and this next module out of Software::License -- although it's something I've done in other ways, before.

Basically, it lets you retrieve hunks of data from your package's DATA section, if you just delimit it properly. So, assuming a normal configuration, you can say something like:

  package Letter::Rejection;
  use Data::Section -setup;

  sub reject {
    my ($self, $who) = @_;
    my $template = $self->data_section('rejection');

    my $letter = $$template;
    $letter =~ s/RECIPIENT/$who/g;
  }

  sub accept {
    my ($self, $who) = @_;
    my $template = $self->data_section('acceptance');

    my $letter = $$template;
    $letter =~ s/RECIPIENT/$who/g;
  }

  __DATA__
  ___[ rejection ]___
  Dear, RECIPIENT:

  Sorry, no thanks.

  Sincerely,
  Rik

  ___[ acceptance ]___
  Dear, RECIPIENT:

  Fine, we'll print it.

  Sincerely,
  Rik

This is sort of like Inline::Files, but that works with source filters, and contains the warning:

  It is possible that this module may overwrite the source code in files that
  use it. To protect yourself against this possibility, you are strongly
  advised to use the -backup option described in "Safety first".

Ugh.

The other useful feature is that these data section data are inherited. If you request the section foo from your class, and it doesn't have that section in its DATA section, but one of the classes between it and the one that used Data::Section does, you'll get that.

This behavior can be switched off.

new distribution: pod-eventual

created 2008-06-07 12:08

I've been wanting to do some mucking around with POD. I started a little down this route a few weeks ago with Pod::Coverage::TrustPod, and what I found was that it was really a pain in the butt to easily say, "this file contains POD. Give me the content of hunks between =begin foo and =end foo. I'm sure it's possible, and that if you understand Pod::Simple you can do it fairly quickly, but I just got too confused and side-tracked trying to figure it out. I really just wanted to get a hunk of data by saying something like:

my @hunks = Pod::Imaginary->parse('file.pm')->for_formatter('foo');

Later, this sort of thing started to bite me again, because Pod::Simple seems much more geared to... well, to getting things right. I mean, it doesn't want you to make up directives all over the place, it understands the relationship between over and item, and it cares about what's inside of text paragraphs (like C<> and all that).

After talking about it with Dieter for a while and growing more grumpy, I realized that this was just like the INI parsing situation. POD is just a line oriented data format. I could just write a little state machine to collect POD events and do whatever I wanted.

So, Wednesday after ABE.pm, I wrote Pod::Eventual. It reads POD and collects lines into events, which look something like these:

my @events = (
  { type => 'command', command => 'head1', content => "NAME\n" },
  { type => 'text',    content => "Pod::Eventual - read POD as events\n" },
);

Sure, it doesn't realize that most people would consider that text paragraph to be "part of" the header. That's fine! It means it also doesn't need to be special cased the other way to handle this:

=for HTML
<hr />

...and now some text!

In that case, the paragraph is definitely not part of the for construct.

Pod::Simple works something like this, under the hood, but it's much more complicated. Pod::Eventual ignores the structure of the document beyond paragraphs, and it doesn't look at the content of the text paragraphs. It also might just get some cases wrong. (Failing tests welcome!)

Still, it makes it very easy to write quick (but accurate) POD handling code.

My hunk-finder from above could probably be:

my @hunks = grep {
  $_->{content} =~ /^foo$/m
  and ($_->{command} =~ 'begin' .. $_->{command} =~ 'end')
} Pod::Eventual->read_file('file.pm');

...or something very like it.

new distribution: mixin-linewise

created 2008-06-07 11:52

I was almost led astray into the den of releasing a module with a name ending in ::Tiny, but then I saved myself.

I found myself implementing these three methods, again:

sub read_handle { ... }

sub read_file   { ... }

sub read_string { ... }

So, the second two translate the input into something the first can understand and business continues as normal. How often have I written this, or something like it? I'm not sure, but pretty often, anyway.

I wrote a very simple hunk of reusable code, stolen from Config-INI (which in turn stole from Config-Tiny), to let you get those two methods built for you. It uses Sub::Exporter, which means you can say what you want the methods to be called (mostly) and what method you want them to call when they've gotten a handle.

Of course, using Sub::Exporter also means pulling in a few more prerequisites, but that doesn't bother me. Once I'm writing non-trivial code, I'm very likely using Sub::Exporter anyway.

Mixin::Linewise is on the CPAN, and has both Reader and Writer modules.

new distribution: config-ini-mvp-reader

created 2008-06-07 11:23
last modified 2008-06-07 11:23

Some time ago, I wrote about Addex's config, which used a slight variation on INI files and really hit the spot for what I needed. It was possible because of the way Config::INI::Reader acts like a state machine, turning each line into a simple event that can be handled however you want. By default, of course, it mostly collects data and adds it to a structure.

With App::Addex::Config, each data section relates to a package, and that package may provide a method that says which named properties get multiple values and show up in the provided data as an arrayref.

In work on a new project, I found that I wanted this behavior again, and I finally refactored it into its own module, Config::INI::MVP::Reader.

I had a few more needs for the refactored version, so the output of the reader is now a bit odd, but very easy to handle, and you can have multiple sections for one plugin. The only downside, which really bothers me not at all, is that you can't "re-open" a section that you've started and then left.

Here's a sample of what you can do with MVP:

; given this .ini file as input:
name = Paprika Beans
edible = no

[Kitchen]
layout = standard

[Ingredient / paprika]
amount = 2 tsp

[Ingredient / water]
amount = 1 cup
step = pour

[Ingredient / beans]
amount = 1 cup
step = soak
step = boil
step = cool
step = mash
step = fry

You get this:

[
  { '=name' => '_', name => 'Paprika Beans', edible => 'no' },
  { '=name' => 'Kitchen', '=package' => 'Kitchen' },
  { '=name' => 'paprika', '=package' => 'Ingredient', amount => '2 tsp' },
  { '=name' => 'water',   '=package' => 'Ingredient', amount => '1 cup',
    step => [ qw(pour) ] },
  { '=name' => 'beans',   '=package' => 'Ingredient', amount => '1 cup',
    step => [ qw(soak boil cool mash fry) ] },
]

I consume this output by popping off the first element and using it to configure the application, and then instantiating plugins from each of the rest of the entries and adding them to the application.

I suspect that in the future, the stuff I'm working on will may need more sophisticated configuration, but it will be easy to allow other configuration formats. For now, this one is really nice and simple.

remaining gripes with keynote

created 2008-05-26 08:42
last modified 2008-05-26 08:42

Oh, Keynote. So simple, so pretty, so annoying.

First, this has to be a bug, right? If I right-click on a slide in the sidebar showing all slides, then pick "skip this slide" it marks the currently displayed slide for skipping, not the slide I right-clicked. Huh?

Secondly, I still don't have a nice solution for syntax highlighting or slide re-use or any kind of "similar but slightly changed" slide markup to let me not have to fix a comma on every version of a code sample that changes across twenty slides.

Finally, why why why must it store the slides compressed? They're stored in an XML format, so it would be pretty easy to do a diff of two revisions in my git repository -- if only they were stored uncompressed. It could be a per-slideshow preference. OmniOutliner lets me do this!

Sigh. I really don't want to use any of the text editor based slide presentation packages I've seen.

my yapc schedule

created 2008-05-25 21:25
last modified 2008-05-25 21:25
tagged with: @markup:md journal perl yapc

Andy Lester posted