Many who meet me through the agile community are surprised by this, but, in fact, the nature of my planning fits well with agile: it is small scale, and can be repeated endlessly as new information emerges.
As such, I am always looking for tools to help me achieve this or communicate this. And because the things I do are generally small scale and "cheap", the tools I am looking for are generally not high priced enterprise things.
One such tool is a calendar. As I always like to say when planning projects, "you can always get your money back; but once the time is gone, it's gone". In my experience, most people don't have a good grasp of time in general, and, in particular, that only one thing fits in a given spot.
The origins of this tool go back to a "Filofax replacement" project I was building on NeWS (if you're under 50, Google is your friend here) back in the late 80s. Not much came of that, but the PostScript header file is the basis of the subsequent calendar programs I've written over the past 30 years. The plan here is to replace all of those with one that doesn't use that PostScript header file because it is 100% web based (HTML and CSS with the appropriate print media definitions).
The key to this tool is threefold:
- Most projects I have worked on do not run on a nice, comfortable "exactly one calendar month" basis for which a standard calendar is a good fit;
- Most people I know work on a Monday-Friday schedule, and then enjoy a weekend, whereas most calendars I can buy seem to think the week runs from Sunday to Saturday;
- The month breaks on standard calendars are extremely distracting and often make people count the same week twice.
Oh, and over the past 30 years I have acquired a few new requirements that would be good to include:
- The option to display the calendar in different "styles", in particular, how and where the month/year names are displayed, colours and shading for dates, weeks and months, and so on;
- Sometimes I do want "long range plans": not plans as such, but if I have certain fixed engagements over the next few months, I'd like to have a calendar that has those on it so that I can see what chunks of work I might be able to commit to in that span. Experience has taught me that 13 weeks (i.e. a quarter of a year) on a calendar works, but that 26 (half a year) does not. So I'd like to be able to have multiple pages with (approximately) the same number of weeks on each.
- There are a lot of calendars out there in ICS form that I'd like to include so that I can have them show up in order to avoid conflicts and to know when holidays are; and I'd like to be able to configure how they show up.
The basics
I believe in keeping things simple. So what I basically want is a single page that has a control area and a feedback area. The control area allows you to select a start date (which will be in the first row of the calendar) and an end date (which should be later than the start date, in which case it will be in the end row; otherwise you will just get a one-week calendar with the start date) and which day of the week is going to appear in the left-hand column.The feedback area shows you approximately how the calendar will display, but without laying it out "on paper", or applying any fancy styling.
And then the "print" button does all the hard work through the application of a print media stylesheet.
Let's get started. We won't get everything we want done today, but let's at least get that outline in place.
The code for this can be found tagged PLANNING_CALENDAR_OUTLINE in the directory calendar. We're just getting started here, so nothing really works as such, but hopefully it's a useful guide to you as to where we're going with this - I know it is to me.
<html>At the moment, this website is 100% static, so you can just open index.html in your browser, and everything will just work fine. This is going to be true for a while, until we start opening ICS calendars using AJAX. Then we'll need to have it running on/in a server. So that I'm prepared, I just run this command in the web directory:
<head>
<title>Planning Calendar</title>
<link rel="stylesheet" href="css/controls.css">
<link rel="stylesheet" href="css/feedback.css">
</head>
<body>
<div id="controls">
<label for="start-date">Start date:</label>
<input type="date" id="start-date">
<label for="end-date">End date:</label>
<input type="date" id="end-date">
<label for="first-day">First Day:</label>
<select id="first-day">
<option value="0">Monday</option>
<option value="1">Tuesday</option>
<option value="2">Wednesday</option>
<option value="3">Thursday</option>
<option value="4">Friday</option>
<option value="5">Saturday</option>
<option value="6">Sunday</option>
</select>
</div>
<div id="feedback">
<div class="body-week">
<div class="body-day">
<div class="body-day-date">17</div>
</div>
<div class="body-day">
<div class="body-day-date">18</div>
</div>
<div class="body-day">
<div class="body-day-date">19</div>
</div>
<div class="body-day">
<div class="body-day-date">20</div>
</div>
<div class="body-day">
<div class="body-day-date">21</div>
</div>
<div class="body-day">
<div class="body-day-date">22</div>
</div>
<div class="body-day">
<div class="body-day-date">23</div>
</div>
</div>
</div>
</body>
</html>
python -m SimpleHTTPServer 8080And then visit localhost:8080 in my browser. I know there are 2,000 ways of doing this, so feel free to use your own. I have just got into this habit, and it keeps working for me.
No comments:
Post a Comment