<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>H3RALD - Tag 'redbook' (RSS Feed)</title>
    <language>en-us</language>
    <lastBuildDate>Sun, 16 Dec 2007 07:07:00 -0000</lastBuildDate>
    <ttl>40</ttl>
    <link>http://www.h3rald.com</link>
    <description/>
    <item>
      <title>Announcement: RedBook v0.5.0 released</title>
      <description>&lt;p&gt;This new beta release of RedBook introduces quite a few changes when it comes to configuration and setup. Here&amp;#8217;s some highlights&amp;#8230;h3. Regexp changes&lt;/p&gt;
&lt;p&gt;It is now necessary to enter &amp;#8220;proper&amp;#8221; regular expressions for &lt;code&gt;:select&lt;/code&gt;. Proper means between slashes, like the following:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;/Work Day/&lt;/li&gt;
	&lt;li&gt;/mail/i&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I changed this in order to support case-insensitive searches using the &lt;code&gt;i&lt;/code&gt; switch. This makes queries much more powerful.&lt;/p&gt;
&lt;h3&gt;Variables&lt;/h3&gt;
&lt;p&gt;A new, interesting feature I decided to introduce in this release is &lt;em&gt;variables&lt;/em&gt;. For now you define them inside your rbconfig.yml file, like this:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;:var_monday_morning: &amp;quot;monday at 8 am&amp;quot;

:var_friday_evening: &amp;quot;friday at 8 pm&amp;quot;

:var_week_report: &amp;quot;:select :duration :from :%monday_morning :to :%friday_evening&amp;quot; 
&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;In this way, every time you type in :%week_report in RedBook, it will expand to: &lt;code&gt;:select :duration :from monday at 8 am :to friday at 8 pm&lt;/code&gt;. By the way, completion is supported, so you&amp;#8217;ll only have to type in something like &lt;code&gt;:%we&lt;/code&gt; and hit &lt;tab&gt;.&lt;/p&gt;
&lt;p&gt;It is possible to define variables as &lt;code&gt;:var_&amp;lt;something&amp;gt;&lt;/code&gt; in the rbconfig.yml file and then used them inside RedBook as &lt;code&gt;:%&amp;lt;something&amp;gt;&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;New Operations&lt;/h3&gt;
&lt;p&gt;Five new operations have been added:&lt;/p&gt;
&lt;h4&gt;:blank&lt;/h4&gt;
&lt;p&gt;This will blank your current log after asking you if you really want to do so.&lt;/p&gt;
&lt;h4&gt;:restore&lt;/h4&gt;
&lt;p&gt;This operation will overwrite your current log with the last saved backup. Like with the &lt;code&gt;:blank&lt;/code&gt; operation, you&amp;#8217;re asked if you really want to proceed or not.&lt;/p&gt;
&lt;h4&gt;:archive&lt;/h4&gt;
&lt;p&gt;By typing &lt;code&gt;:archive&lt;/code&gt;, the current log file will be archived to your &lt;code&gt;:archives_folder:&lt;/code&gt; directory specified in the rbconfig.yml file (similarly, it is now possible to specify a :backups_folder: for your logs&amp;#8217; backup files).&lt;/p&gt;
&lt;h4&gt;:dataset&lt;/h4&gt;
&lt;p&gt;A simple operation to display the messages inthe current dataset.&lt;/p&gt;
&lt;h4&gt;:dump&lt;/h4&gt;
&lt;p&gt;This operation will dump the output of the last &lt;code&gt;:select&lt;/code&gt; operation to a text file. Useful for saving the average, total time and duration of a set of activities.&lt;/p&gt;
&lt;h3&gt;Portable edition&lt;/h3&gt;
&lt;p&gt;Some Windows users will definitely love this. I finally found an easy way to run RedBook confined within the current directory, by using a simple &lt;code&gt;start.bat&lt;/code&gt; batch file to set the &lt;span&gt;&lt;span class="caps"&gt;INPUTRC&lt;/span&gt;&lt;/span&gt; and &lt;span&gt;&lt;span class="caps"&gt;HOME&lt;/span&gt;&lt;/span&gt; variables temporarily to the path to the .inputrc file and the directory of RedBook executable. This makes RedBook 100% portable and suitable to be used on &lt;span class="caps"&gt;USB&lt;/span&gt; sticks &amp;amp;similar.&lt;/p&gt;
&lt;p style="text-align:center;"&gt;&lt;strong&gt;&lt;a href="http://redbook.googlecode.com/files/RedBook-0.5_Win32-portable.zip"&gt;Get RedBook Portable&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;New Development Page&lt;/h3&gt;
&lt;p&gt;I decided to move the primary RedBook repository from &lt;a href="http://www.assembla.org"&gt;Assembla&lt;/a&gt; to Google Code. Why? Well, nothing wrong with Assembla per se, I still think it&amp;#8217;s an excellent free service to host your public &lt;em&gt;and private&lt;/em&gt; projects, but Google Code is faster and offers only the features I need:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Public &lt;span class="caps"&gt;SVN&lt;/span&gt; repository access&lt;/li&gt;
	&lt;li&gt;Simple-to-use issue tracker&lt;/li&gt;
	&lt;li&gt;Very nicely developed downloads section, with download counts, and &amp;#8220;normal&amp;#8221; filenames.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So here&amp;#8217;s the new RedBook Development Home:&lt;/p&gt;
&lt;p style="text-align:center;"&gt;&lt;strong&gt;&lt;a href="http://code.google.com/p/redbook/"&gt;http://code.google.com/p/redbook/&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Additionally I also setup a &lt;a href="http://groups.google.com/group/redbook-support/"&gt;RedBook Support Google Group&lt;/a&gt;, so if you have any question concerning the program, you know where to go!&lt;/p&gt;</description>
      <pubDate>Sun, 16 Dec 2007 07:07:00 -0000</pubDate>
      <guid>http://www.h3rald.com/articles/redbook-050-released/</guid>
      <link>http://www.h3rald.com/articles/redbook-050-released/</link>
      <author>h3rald@h3rald.com</author>
      <comments>http://www.h3rald.com/articles/redbook-050-released/#comments</comments>
      <category>opensource</category>
      <category>productivity</category>
      <category>redbook</category>
      <category>ruby</category>
    </item>
    <item>
      <title>Announcement: RedBook v0.4.0 released</title>
      <description>&lt;p&gt;I&amp;#8217;m pleased to announce a new release of the RedBook daily logging and time tracking script. This release introduces two new operations, four stats-related directives and a brand new Windows Installer able to setup RedBook in a blink, with (almost) no configuration at all.&lt;/p&gt;
&lt;p&gt;Let&amp;#8217;s have a closer look&amp;#8230;h2. New Operations&lt;/p&gt;
&lt;p&gt;Suppose that you just logged a message and you noticed one of these two things happened:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;You didn&amp;#8217;t really wanted to log it&lt;/li&gt;
	&lt;li&gt;You made a silly typo in the message or in the tags&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;What can you do about it? Up to RedBook 0.3, the only solution was to open the &lt;span class="caps"&gt;YAML&lt;/span&gt; file and correct the mistake manually. From now on there&amp;#8217;s also another simpler way to operate in such situations: using the :update and :delete operations!&lt;/p&gt;
&lt;h3&gt;:update&lt;/h3&gt;
&lt;p&gt;This operation can be used to update the message and or the tags of a previously-logged activity. The usage is simple: load a dataset first, and then execute an &lt;code&gt;:update&lt;/code&gt; command like:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;:update 4 :message My updated message :with new_tag1 new_tag2&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This will update the 4th message of the dataset modifying its message and tags. Of course you can update either of the two things or both; the timestamp of the activity will not be changed.&lt;/p&gt;
&lt;h3&gt;:delete&lt;/h3&gt;
&lt;p&gt;The delete operation can be used to completely delete a message from the log. Just load a dataset using a &lt;code&gt;:select&lt;/code&gt; operation and then execute a &lt;code&gt;:delete&lt;/code&gt; command, e.g.:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;code&gt;:delete 1&lt;/code&gt; &lt;em&gt;(will delete the first activity)&lt;/em&gt;&lt;/li&gt;
	&lt;li&gt;&lt;code&gt;:delete 4 2 7 9&lt;/code&gt; &lt;em&gt;(will delete activity #2, #4, #7 and #9)&lt;/em&gt;&lt;/li&gt;
	&lt;li&gt;&lt;code&gt;:delete&lt;/code&gt; &lt;em&gt;(will delete the entire dataset)&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A confirmation message will appear before deleting the message(s).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span class="caps"&gt;IMPORTANT&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;em&gt;Due to the architecture of the application, whenever an &lt;code&gt;:update&lt;/code&gt; or &lt;code&gt;:delete&lt;/code&gt; occurs the log file will be reloaded in memory and completely overwritten. This doesn&amp;#8217;t cause problems, although for big log files (10,000+ activities) this may take a few seconds.&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;Statistics&lt;/h2&gt;
&lt;p&gt;Another important new feature introduced by this release is &lt;em&gt;time tracking&lt;/em&gt;. It was actually already there, kind of: the &lt;code&gt;:calc&lt;/code&gt; operation was already able to calculate the time elapsed between two activities&amp;#8230; however, this is not really practical.&lt;/p&gt;
&lt;p&gt;Since last release, it is possible to log the completion of an activity using the &lt;code&gt;:finish&lt;/code&gt; command. This will basically re-log the same activity prepending &lt;em&gt;[&lt;span class="caps"&gt;COMPLETED&lt;/span&gt;]&lt;/em&gt; to its message.&lt;br /&gt;
If you started using the &lt;code&gt;:finish&lt;/code&gt; command to complete your activities, RedBook can now calculate the following stats for you:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Count the number of messages in a dataset&lt;/li&gt;
	&lt;li&gt;Calculate the average time spent for the completed activities in a dataset&lt;/li&gt;
	&lt;li&gt;Calculate the total time spent for the completed activities in a dataset&lt;/li&gt;
	&lt;li&gt;Calculate the duration of each completed activity in a dataset&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Each of these calculations is performed by adding special directive to a &lt;code&gt;:select&lt;/code&gt; command, as explained in the following sections.&lt;/p&gt;
&lt;h3&gt;:count&lt;/h3&gt;
&lt;p&gt;This directive can be added to a &lt;code&gt;:select&lt;/code&gt; command to return just the number of message of the loaded dataset. &lt;br /&gt;
In other words, executing the following:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;:select :count :with mail !work&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&amp;#8230;will return the number of activities tagged with &lt;em&gt;mail&lt;/em&gt; but not with &lt;em&gt;personal&lt;/em&gt;, without listing all the activities.&lt;/p&gt;
&lt;h3&gt;:avg&lt;/h3&gt;
&lt;p&gt;The &lt;code&gt;:avg&lt;/code&gt; directive can be used to calculate the average time spent on activities matching certain criteria, for example:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;:select Status Meeting :avg :with meeting&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&amp;#8230;will return the average time spent on activities whose messages matches &lt;em&gt;/Status Meeting/&lt;/em&gt; and are tagged with &lt;em&gt;meeting&lt;/em&gt;.&lt;/p&gt;
&lt;h3&gt;:total&lt;/h3&gt;
&lt;p&gt;Similarly, &lt;code&gt;:total&lt;/code&gt; can be used to return the total time spent on activities matching certain criteria, e.g.:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;:select :total :with mail work&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&amp;#8230;will return the total time spent on activities tagged with &lt;em&gt;mail&lt;/em&gt; and &lt;em&gt;work&lt;/em&gt;.&lt;/p&gt;
&lt;h3&gt;:duration&lt;/h3&gt;
&lt;p&gt;Lastly, &lt;code&gt;:duration&lt;/code&gt; will print each completed task along with its duration. The syntax is similar to the others:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;:select :duration :with break&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This will print each completed activity tagged with &lt;em&gt;break&lt;/em&gt; along with its duration.&lt;/p&gt;
&lt;h3&gt;:nodiff and _concurrent&lt;/h3&gt;
&lt;p&gt;The logic behind the above-mentioned directives may seem trivial to implement, but it is not. The fun part was telling RedBook to subtract the duration of each sub-activity contained in another activity&amp;#8230; a feature I considered necessary for time tracking purpose. However, if you start your work day with a &lt;em&gt;Working Day&lt;/em&gt; activity and you complete that activity using the &lt;code&gt;:finish&lt;/code&gt; command, when calculating the duration of the working day RedBook will subtract the duration of &lt;em&gt;all the completed sub-activities&lt;/em&gt; from the duration of &lt;em&gt;Working Day&lt;/em&gt;. This is not OK, so I added the directive &lt;code&gt;:nodiff&lt;/code&gt; which can be used to prevent RedBook from calculating the difference between the parent activity&amp;#8217;s duration and the duration of each of its child activity.&lt;/p&gt;
&lt;p&gt;What if you&amp;#8217;re doing two things at once? use the special &lt;code&gt;_concurrent&lt;/code&gt; tag, and that activity will be considered symultaneous to its parent activity for time tracking purposes.&lt;/p&gt;
&lt;h2&gt;Activity Status Filters&lt;/h2&gt;
&lt;p&gt;RedBook is now fully aware of the &amp;#8220;status&amp;#8221; of each activity, so it is possible to display only activities in a certain status using the following directives:&lt;/p&gt;
&lt;h3&gt;:plain&lt;/h3&gt;
&lt;p&gt;Executing &lt;code&gt;:select :plain :from today&lt;/code&gt; will return all the activities logged today, omitting their completions (if any), i.e. any activity beginning with &lt;em&gt;[&lt;span class="caps"&gt;COMPLETED&lt;/span&gt;]&lt;/em&gt;.&lt;/p&gt;
&lt;h3&gt;:pending&lt;/h3&gt;
&lt;p&gt;Executing &lt;code&gt;:select :pending :from today&lt;/code&gt; will return all the activities logged today which have not been completed yet. Again, this was not too trivial to implement, but it seems to work (it also smart enough to detect if the same activity has been relogged etc. etc.).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span class="caps"&gt;WARNING&lt;/span&gt;:&lt;/strong&gt; &lt;br /&gt;
&lt;em&gt;Using this directive with a large dataset may cause RedBook to take some time before delivering the result, due to the amount of iterations to perform. Use with care.&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;:completed&lt;/h3&gt;
&lt;p&gt;Executing &lt;code&gt;:select :completed :from today&lt;/code&gt; will return all the activities logged today which have been completed.&lt;/p&gt;
&lt;h2&gt;Windows Installer&lt;/h2&gt;
&lt;p&gt;I decided to spend some time (half an hour) and create a proper setup file for Windows using InnoSetup. The setup will take care of almost everything for you, so you have no excuse not to try RedBook because it&amp;#8217;s not user-friendly to install!&lt;/p&gt;
&lt;p&gt;Check out the &lt;a href="http://redbook.h3rald.com"&gt;manual&lt;/a&gt; for more details.&lt;/p&gt;
&lt;h2&gt;RubyForge Project&lt;/h2&gt;
&lt;p&gt;Finally, I registered a new &lt;a href="http://rubyforge.org/projects/redbook/"&gt;RubyForge Project&lt;/a&gt; for RedBook, which include a public &lt;span class="caps"&gt;SVN&lt;/span&gt; repository updated every week (Assembla doesn&amp;#8217;t allow anonymous checkouts, unfortunately).&lt;br /&gt;
This project will also host the official RedBook Gem, scheduled for the 1.0 release.&lt;/p&gt;
&lt;p style="text-align:center;"&gt;&lt;strong&gt;&lt;a href="http://www.assembla.com/spaces/files/redbook"&gt;&lt;span class="caps"&gt;DOWNLOAD&lt;/span&gt;&lt;/a&gt; | &lt;a href="http://redbook.h3rald.com/"&gt;&lt;span class="caps"&gt;MANUAL&lt;/span&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
      <pubDate>Wed, 28 Nov 2007 07:34:00 -0000</pubDate>
      <guid>http://www.h3rald.com/articles/redbook-040-released/</guid>
      <link>http://www.h3rald.com/articles/redbook-040-released/</link>
      <author>h3rald@h3rald.com</author>
      <comments>http://www.h3rald.com/articles/redbook-040-released/#comments</comments>
      <category>opensource</category>
      <category>productivity</category>
      <category>redbook</category>
      <category>ruby</category>
    </item>
    <item>
      <title>Announcement: RedBook v0.3.0 released</title>
      <description>&lt;p&gt;It&amp;#8217;s time for a new beta release of RedBook. This was actually going to be a fairly modest release in terms of features, but I actually ended up implementing a lot more than expected, even things which were planned for the first production release 1.0. So, let&amp;#8217;s see what&amp;#8217;s new&lt;/p&gt;
&lt;h3&gt;New operation names &lt;em&gt;(which break compatibility with previous versions)&lt;/em&gt;&lt;/h3&gt;
&lt;p&gt;I had a look at the names I choose for the operations and I noticed that they were either not intuitive enough or too verbose. So I decided to change a fair few of them (thus breaking compatibility with previous versions, but after all that&amp;#8217;s what beta releases are for, right?):&lt;/p&gt;
&lt;table&gt;
	&lt;tr&gt;
		&lt;th&gt;&lt;span class="caps"&gt;OLD&lt;/span&gt; &lt;/th&gt;
		&lt;th&gt;&lt;span class="caps"&gt;NEW&lt;/span&gt; &lt;/th&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt; :complete &lt;/td&gt;
		&lt;td&gt; :finish &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt; :load &lt;/td&gt;
		&lt;td&gt; :select &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt; :load_config &lt;/td&gt;
		&lt;td&gt; :config &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt; :load_log &lt;/td&gt;
		&lt;td&gt; :refresh &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt; :timecalc &lt;/td&gt;
		&lt;td&gt; :calc &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt; :stop &lt;/td&gt;
		&lt;td&gt; :quit &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;
&lt;h3&gt;New Manual/Home Page&lt;/h3&gt;
&lt;p&gt;A while ago I discovered &lt;a href="http://www.tiddlywiki.com/"&gt;TiddlyWiki&lt;/a&gt;, but as a matter of fact I never used it for anything practical. From last week though, I started using it a work for taking notes and create short memos, and then I thought of using it to replace RedBook&amp;#8217;s standard &lt;span class="caps"&gt;README&lt;/span&gt; file (which was made in a hurry and was kinda cryptical). Now a brand new &amp;#8220;manual.html&amp;#8221; ships with RedBook &amp;#8212; 308 KB (30 of actual docs and 278 of Javascript/&lt;span class="caps"&gt;HTML&lt;/span&gt;/&lt;span class="caps"&gt;CSS&lt;/span&gt; magic) with everything you need to know about it. Additionally, an online version is available at the following address:&lt;/p&gt;
&lt;p style="text-align:center;"&gt;&lt;strong&gt;&lt;a href="http://redbook.h3rald.com"&gt;redbook.h3rald.com&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;Removed Win32::Console Library&lt;/h3&gt;
&lt;p&gt;OK this is not good news for people (like me) who use RedBook on Windows, but I promise you&amp;#8217;ll forgive me when you read about the other new features below. I discovered by chance that the Win32::Console library (which was used to get colors working on Windows) seems not to handle international characters properly and also seems to be conflicting in some way with the Readline library I decided to include (see below). I don&amp;#8217;t know whether this is a problem of the actual library or just of the gem used to pack it.&lt;/p&gt;
&lt;h3&gt;rbconfig.yml&lt;/h3&gt;
&lt;p&gt;The &lt;code&gt;config.yml&lt;/code&gt; file has been renamed to &lt;code&gt;rbconfig.yml&lt;/code&gt;. Additionally, if you place a file with this name in your $&lt;span class="caps"&gt;HOME&lt;/span&gt; directory it will override the one in your RedBook folder (This was done in preparation for the RedBook RubyGem).&lt;/p&gt;
&lt;h3&gt;New operations&lt;/h3&gt;
&lt;p&gt;The following new operations are available:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://redbook.h3rald.com/#%3Arelog"&gt;:relog&lt;/a&gt; &amp;#8212; Re-logs a previously-logged message (keeping the same tags and updating the timestamp)&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://redbook.h3rald.com/#%3Aclear"&gt;:clear&lt;/a&gt; &amp;#8212; Clears the screen.&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://redbook.h3rald.com/#%3Aruby"&gt;:ruby&lt;/a&gt; &amp;#8212; Evaluates arbitrary Ruby code outputting the result (use with care&amp;#8230;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Auto-completion&lt;/h3&gt;
&lt;p&gt;Some Mac users originally complained that the backspace key wasn&amp;#8217;t working in RedBook (and it didn&amp;#8217;t in Linux either). Fortunately the solution to this was easy enough: include the &lt;span class="caps"&gt;GNU&lt;/span&gt; &lt;a href="http://tiswww.case.edu/php/chet/readline/rltop.html"&gt;Readline&lt;/a&gt; library. &lt;br /&gt;
Readline is now being used in RedBook to:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Provide basic (Emacs-style) bindings&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Auto-completion&lt;/strong&gt; for keywords &lt;em&gt;and tags&lt;/em&gt;&lt;/li&gt;
	&lt;li&gt;Allow the user to automatically customize key bindings via an &lt;a href="http://redbook.h3rald.com/#.inputrc"&gt;.inputrc&lt;/a&gt; file placed in their $&lt;span class="caps"&gt;HOME&lt;/span&gt; directory (on Windows you&amp;#8217;ll have to define a &lt;span&gt;&lt;span class="caps"&gt;HOME&lt;/span&gt;&lt;/span&gt; environment variable pointing to a directory of your choice). An example .inputrc file is distributed with RedBook with some specific key bindings.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Support for international characters&lt;/h3&gt;
&lt;p&gt;Finally, I decided to implement another feature which was originally planned for the 1.0 release: international characters support. This is possible using the Iconv Ruby extension (requires &lt;a href="http://www.gnu.org/software/libiconv/"&gt;&lt;span class="caps"&gt;GNU&lt;/span&gt; libiconv&lt;/a&gt;) which can convert strings between different character sets. The character sets needs to be configured via the &lt;a href="http://redbook.h3rald.com/#rbconfig.yml"&gt;rbconfig.yml&lt;/a&gt; file.&lt;/p&gt;
&lt;p&gt;For more information, check out the &lt;a href="http://redbook.h3rald.com/#ChangeLog"&gt;ChangeLog&lt;/a&gt;&lt;/p&gt;
&lt;p style="text-align:center;"&gt;&lt;strong&gt;&lt;a href="http://www.assembla.com/spaces/files/bWE7NkzCqr3k25abIlDkbG"&gt;Download RedBook&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
      <pubDate>Thu, 25 Oct 2007 05:18:00 -0000</pubDate>
      <guid>http://www.h3rald.com/articles/redbook-030-released/</guid>
      <link>http://www.h3rald.com/articles/redbook-030-released/</link>
      <author>h3rald@h3rald.com</author>
      <comments>http://www.h3rald.com/articles/redbook-030-released/#comments</comments>
      <category>redbook</category>
      <category>ruby</category>
      <category>productivity</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Announcement: RedBook v0.2.0 released</title>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&amp;#8220;Release Early, Release Often&amp;#8221;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&amp;#8212; Eric S. Raymond, &lt;a href="http://www.catb.org/~esr/writings/cathedral-bazaar/cathedral-bazaar/ar01s04.html"&gt;The Cathedral and the Bazaar&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;In other words, time for another (early) release of &lt;a href="http://www.assembla.com/space/redbook"&gt;RedBook&lt;/a&gt;. There are quite a few new features which are worth examining, in particular:&lt;/p&gt;
&lt;h3&gt;Regexp search for messages&lt;/h3&gt;
&lt;p&gt;This was actually already available before, just if you inputted a search string which was not a regexp, you&amp;#8217;d get an unhandled exception (more or less). This exception is now handled propertly so you get a pretty message instead, if an error occurs when parsing the search string.&lt;/p&gt;
&lt;h3&gt;Log Backup&lt;/h3&gt;
&lt;p&gt;A new &lt;strong&gt;&amp;#58;backup&lt;/strong&gt; keyword is available to quickly backup your log file. Here&amp;#8217;s what it does:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Loads all messages silently&lt;/li&gt;
	&lt;li&gt;Writes them to a file in the same directory as the original log file named &amp;lt;log-alias&amp;gt;.bkp.yml.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Handy, especially if there was a similar keyword to restore the last backup, which is planned for &lt;a href="http://www.assembla.com/spaces/milestones/index/bWE7NkzCqr3k25abIlDkbG?spaces_tool_id=ceS8UazCqr3k25abIlDkbG"&gt;later on&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Support for multiple log files&lt;/h3&gt;
&lt;p&gt;This is perhaps the most important feature introduced by this release. It is now possible to configure more than one log file by adding any number of &lt;strong&gt;&amp;#58;data_&amp;lt;alias&amp;gt;&amp;#58;&lt;/strong&gt; settings inside your config.yml file, where alias is the name of your log file. So, for example, if your config.yml file contains the following:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;#58;data_test&amp;#58; &amp;#8220;testlog.yml&amp;#8221;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;You can load the &amp;#8220;test&amp;#8221; log by typing&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;#58;use test&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;(&amp;#58;use is a shorthand for &amp;#58;load_log). Similarly, another new keyword &lt;strong&gt;&amp;#58;dest&lt;/strong&gt; has been introduced to be able to log a message to a different log file without loading it into memory, like this:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;#58;log This message will be saved to testlog.yml &amp;#58;dest test&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Finally, a &lt;strong&gt;&amp;#58;refresh&lt;/strong&gt; keyword has been introduced as an alias to reloading the current log.&lt;/p&gt;
&lt;h3&gt;(Almost) automatic log of completed activities&lt;/h3&gt;
&lt;p&gt;Right when I was coding the &lt;strong&gt;&amp;#58;timecalc&lt;/strong&gt; operation, I thought it would be nice to be able to log the start and end of a task without having to type it twice. Now this is possible using the &lt;strong&gt;&amp;#58;complete&lt;/strong&gt; keyword:&lt;/p&gt;
&lt;p&gt;&amp;#58;log Testing feature X in product Y&lt;/p&gt;
&lt;p&gt;&amp;#58;complete&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;#58;complete&lt;/strong&gt; will re-log the last message prepended with [&lt;span class="caps"&gt;COMPLETED&lt;/span&gt;]:&lt;/p&gt;
4 Mon Oct 08 2007 &amp;#8211; 10:47:45 AM Testing feature X in product Y
5 Mon Oct 08 2007 &amp;#8211; 10:54:31 AM [&lt;span class="caps"&gt;COMPLETED&lt;/span&gt;] Testing feature X in product Y
&lt;p&gt;What if I start another task before completing the first one? No problem, it is sufficient to load the last activities using a &lt;strong&gt;&amp;#58;load&lt;/strong&gt; command and then issuing &lt;strong&gt;&amp;#58;complete &amp;lt;number&amp;gt;&lt;/strong&gt; where &amp;lt;number&amp;gt; is the index of the loaded activity. &lt;br /&gt;
This nifty little feature will become more and more important when (starting from release 0.4) I&amp;#8217;ll implement more time tracking functions, and it will be possible to track completed tasks in a specific timeframe and/or marked with a specific tag.&lt;/p&gt;
&lt;h3&gt;Easy integration with launchers like Launchy and QuickSilver&lt;/h3&gt;
&lt;p&gt;To conclude, as someone pointed out that it would be cool to use RedBook from launchers like Launchy or Quicksilver, I made another standalone script (redbooklet.rb or redbooklet.exe) which is just able to parse a log command and write a message to the specified log file.&lt;br /&gt;
To use it with Launchy, for example, all you have to do is the following:&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;Create a shortcut to redbooklet.exe (or to a way to execute the corresponding ruby script) named &amp;#8220;log&amp;#8221;.&lt;/li&gt;
	&lt;li&gt;Copy the &amp;#8220;log&amp;#8221; shortcut anywhere in your start menu&lt;/li&gt;
	&lt;li&gt;Bring up launchy (ALT+SPACE) and type in &amp;#8220;log&amp;#8221;&lt;/li&gt;
	&lt;li&gt;Hit tab&lt;/li&gt;
	&lt;li&gt;Type in your log message, optionally with the any &amp;#58;tags or &amp;#58;dest keywords.&lt;/li&gt;
	&lt;li&gt;The message will be logged to your default log file or to the log you specified using the &amp;#58;dest keyword. If an error occurs, it will appear in a command line window for 15 seconds before the program is closed.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;That&amp;#8217;s all folks! As usual, if you have any comment or suggestion feel free to reply to this post or email me. For a list of the planned features and releases, check out the &lt;a href="http://www.assembla.com/spaces/milestones/index/bWE7NkzCqr3k25abIlDkbG?spaces_tool_id=ceS8UazCqr3k25abIlDkbG"&gt;Milestones&lt;/a&gt; page.&lt;/p&gt;
&lt;p style="text-align:center;"&gt;&lt;strong&gt;&lt;a href="http://www.assembla.com/spaces/files/bWE7NkzCqr3k25abIlDkbG"&gt;&lt;span class="caps"&gt;DOWNLOAD&lt;/span&gt; &lt;span class="caps"&gt;HERE&lt;/span&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
      <pubDate>Mon, 08 Oct 2007 03:05:00 -0000</pubDate>
      <guid>http://www.h3rald.com/articles/redbook-020-released/</guid>
      <link>http://www.h3rald.com/articles/redbook-020-released/</link>
      <author>h3rald@h3rald.com</author>
      <comments>http://www.h3rald.com/articles/redbook-020-released/#comments</comments>
      <category>redbook</category>
      <category>ruby</category>
      <category>productivity</category>
      <category>opensource</category>
    </item>
    <item>
      <title>RedBook - A simple Ruby program for your daily logging needs</title>
      <description>&lt;p&gt;Logging your daily activities is important. If you don&amp;#8217;t believe me you&amp;#8217;d better check at least these three posts on LifeHacker, which feature different scripts and applications:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://lifehacker.com/software/top/geek-to-live--quick+log-your-work-day-189772.php"&gt;QuickLogger&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://lifehacker.com/software/windows/log-your-workday-from-the-system-tray-with-life-logger-285602.php"&gt;Life Logger&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://lifehacker.com/software/featured-windows-download/log-your-workday-with-quicklogger-2-302932.php"&gt;QuickLogger 2&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I had a look at each one of them, and I believe they are quite useful, although I didn&amp;#8217;t really find what I was looking for. Why? Well, for example:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;I don&amp;#8217;t believe a &lt;span class="caps"&gt;GUI&lt;/span&gt; is necessary &amp;#8212; you&amp;#8217;d better off with just a shortcut key or command to run from Launchy or QuickSilver, that&amp;#8217;s much faster.&lt;/li&gt;
	&lt;li&gt;They just log timestamped messages on a file, there&amp;#8217;s no real way to search through them and display them except by using a test editor&lt;/li&gt;
	&lt;li&gt;They are Windows only &amp;#8212; not that it matters for me, but others may not be happy about it.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That&amp;#8217;s why I thought I&amp;#8217;d roll out my own: meet &lt;a href="http://www.assembla.com/space/redbook"&gt;RedBook&lt;/a&gt;.&lt;br /&gt;
Let me say it&amp;#8217;s nothing fancy: I&amp;#8217;m not a full-time programmer but I do like playing with Ruby during my lunch breaks at work, so that&amp;#8217;s why RedBook is just a humble, tiny Ruby script. This automatically makes it cross-platform: you can install Ruby very easily on Linux &amp;amp; alikes, Mac OS X and Windows. Furthermore, if you are on Windows and for some weird reason you don&amp;#8217;t want to install Ruby, you can just try out the packed &lt;span class="caps"&gt;EXE&lt;/span&gt; file (made with RubyScript2Exe) &amp;#8212; it&amp;#8217;s about 2MB, but you won&amp;#8217;t need anything else.&lt;/p&gt;
&lt;h3&gt;How It Works&lt;/h3&gt;
&lt;p&gt;The program uses two &lt;span class="caps"&gt;YAML&lt;/span&gt; files, one for configuration, which must reside in the same directory as redbook.rb (or redboo.exe) and one for the log itself, which you can place anywhere, provided that you edit the configuration file accordingly. For information on how to install RedBook and how to configure it, you can check the manual.html (powered by &lt;a href="http://www.tiddlywiki.com"&gt;TiddlyWiki&lt;/a&gt;) file provided with the program or &lt;a href="http://redbook.h3rald.com"&gt;browse it online&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;When started, RedBook will load both the configuration file (config.yml) and &lt;em&gt;the whole log file&lt;/em&gt; into memory &amp;#8212; it&amp;#8217;s not a big deal, considering that they are only text files after all. I did a test with a log of quite a few MBs, and it was fine.&lt;/p&gt;
&lt;p&gt;You can then start input commands right away, following a few sample rules. RedBook has a (very) rudimentary parser which is able to detect keywords, i.e. alphabetic strings prepended with a colon. RedBook commands look like this:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;strong&gt;&amp;#58;log&lt;/strong&gt; This message will be logger &lt;strong&gt;&amp;#58;tags&lt;/strong&gt; tag1 tag2&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;&amp;#58;select&lt;/strong&gt; &lt;strong&gt;&amp;#58;last&lt;/strong&gt; 15 &lt;strong&gt;&amp;#58;since&lt;/strong&gt; January&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;&amp;#58;save&lt;/strong&gt; /home/h3rald/backup.yml&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If everything goes OK, RedBook will reply with some sort of response, an acknowledgement, a list of messages, etc.&lt;/p&gt;
&lt;p&gt;Simple.&lt;/p&gt;
&lt;p&gt;Here&amp;#8217;s basically what the program can do:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Log any message to the main log file. Messages can be tagged with one or more tags and will be automatically timestamped.&lt;/li&gt;
	&lt;li&gt;Load/display a list of logged messages on the screen. It is possible to filter messages by specifying a time span, a string to search in the message text, or a list of tags.&lt;/li&gt;
	&lt;li&gt;Dump loaded messages to a &lt;span class="caps"&gt;TXT&lt;/span&gt;, &lt;span class="caps"&gt;CSV&lt;/span&gt; or &lt;span class="caps"&gt;YAML&lt;/span&gt; file (you can even backup your log saving it to another &lt;span class="caps"&gt;YAML&lt;/span&gt; file in this way).&lt;/li&gt;
	&lt;li&gt;Calculate the time elapsed between two or more tasks. Time will be displayed in years, months, weeks, days, hours, minutes and/or seconds as necessary.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;How? Here&amp;#8217;s a short tutorial&amp;#8230;&lt;/p&gt;
&lt;h3&gt;A Quick RedBook Tutorial&lt;/h3&gt;
&lt;p&gt;Let&amp;#8217;s assume you are able to run RedBook on your system by now (if you can&amp;#8217;t find some of the gems which are required for it, you can download them packed in a &lt;span class="caps"&gt;ZIP&lt;/span&gt; file from &lt;a href="http://www.assembla.com/spaces/files/redbook"&gt;here&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Here&amp;#8217;s what happens when you start the program:&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: 'Bitstream Vera Sans Mono', Monaco, 'Courier New'; font-size: 10px"&gt;&lt;br /&gt;
&lt;del&gt;-&lt;/del&gt;&lt;br /&gt;
RedBook v0.1 &amp;#8211; Copyright &amp;#169; 2007, Fabio Cevasco&lt;br /&gt;
&lt;del&gt;-&lt;/del&gt;&lt;br /&gt;
   &lt;span style="color:blue"&gt;&amp;gt;&amp;gt;&lt;/span&gt; Loading config file&amp;#8230;&lt;br /&gt;
   &lt;span style="color:green"&gt;&amp;gt;&amp;gt;&lt;/span&gt; Config file loaded.&lt;br /&gt;
   &lt;span style="color:blue"&gt;&amp;gt;&amp;gt;&lt;/span&gt; Loading log file&amp;#8230;&lt;br /&gt;
   &lt;span style="color:green"&gt;&amp;gt;&amp;gt;&lt;/span&gt; Log file loaded.&lt;br /&gt;
   &lt;span style="color:blue"&gt;&amp;gt;&amp;gt;&lt;/span&gt; Ready.&lt;br /&gt;
&lt;span style="color:red"&gt;Red&lt;/span&gt;Book &amp;gt;&amp;gt;&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Good. Let&amp;#8217;s start logging something then. Just use the &lt;strong&gt;&amp;#58;log&lt;/strong&gt; keyword, followed by a message, and then you can also add the &lt;strong&gt;&amp;#58;tags&lt;/strong&gt; keyword followed by space-separated tags, like this:&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: 'Bitstream Vera Sans Mono', Monaco, 'Courier New'; font-size: 10px"&gt;&lt;br /&gt;
&lt;span style="color:red"&gt;Red&lt;/span&gt;Book &amp;gt;&amp;gt; &amp;#58;log My first message &amp;#58;tags test&lt;br /&gt;
   &lt;span style="color:green"&gt;&amp;gt;&amp;gt;&lt;/span&gt; Logged.&lt;br /&gt;
&lt;span style="color:red"&gt;Red&lt;/span&gt;Book &amp;gt;&amp;gt; &amp;#58;log This is another message&lt;br /&gt;
   &lt;span style="color:green"&gt;&amp;gt;&amp;gt;&lt;/span&gt; Logged.&lt;br /&gt;
&lt;span style="color:red"&gt;Red&lt;/span&gt;Book &amp;gt;&amp;gt; &amp;#58;log This is another message &amp;#58;tags test another_test&lt;br /&gt;
   &lt;span style="color:green"&gt;&amp;gt;&amp;gt;&lt;/span&gt; Logged.&lt;br /&gt;
&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Try waiting a few seconds between each message. These three messages will be appended to the log file. You could open it in an editor, but it&amp;#8217;s normally easier to display them directly inside RedBook, like this:&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: 'Bitstream Vera Sans Mono', Monaco, 'Courier New'; font-size: 10px"&gt;&lt;br /&gt;
&lt;span style="color:red"&gt;Red&lt;/span&gt;Book &amp;gt;&amp;gt; &amp;#58;select&lt;br /&gt;
 &lt;span style="color:yellow"&gt;1&lt;/span&gt; &lt;span style="color:blue"&gt;Sat Sep 29 2007 &amp;#8211; 09:09:32 PM&lt;/span&gt; My first message &lt;span style="color:cyan"&gt;[&lt;/span&gt;&lt;span style="color:yellow"&gt;test&lt;/span&gt;&lt;span style="color:cyan"&gt;]&lt;/span&gt;&lt;br /&gt;
 &lt;span style="color:yellow"&gt;2&lt;/span&gt; &lt;span style="color:blue"&gt;Sat Sep 29 2007 &amp;#8211; 09:10:51 PM&lt;/span&gt; This is another message&lt;br /&gt;
 &lt;span style="color:yellow"&gt;3&lt;/span&gt; &lt;span style="color:blue"&gt;Sat Sep 29 2007 &amp;#8211; 09:11:45 PM&lt;/span&gt; This is another message &lt;span style="color:cyan"&gt;[&lt;/span&gt;&lt;span style="color:yellow"&gt;test&lt;/span&gt;&lt;span style="color:cyan"&gt;]&lt;/span&gt;&lt;span style="color:cyan"&gt;[&lt;/span&gt;&lt;span style="color:yellow"&gt;another_test&lt;/span&gt;&lt;span style="color:cyan"&gt;]&lt;/span&gt;&lt;br /&gt;
   &lt;span style="color:green"&gt;&amp;gt;&amp;gt;&lt;/span&gt; 3 messages loaded.&lt;br /&gt;
&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Easy. What if you have hundreds of messages? Well, the &amp;#58;select operation can take an optional search string, or you can tell RedBook to load only those messages tagged with one or more specific tags, like this:&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: 'Bitstream Vera Sans Mono', Monaco, 'Courier New'; font-size: 10px"&gt;&lt;br /&gt;
&lt;span style="color:red"&gt;Red&lt;/span&gt;Book &amp;gt;&amp;gt; &amp;#58;select &amp;#58;tags test&lt;br /&gt;
 &lt;span style="color:yellow"&gt;1&lt;/span&gt; &lt;span style="color:blue"&gt;Sat Sep 29 2007 &amp;#8211; 09:09:32 PM&lt;/span&gt; My first message &lt;span style="color:cyan"&gt;[&lt;/span&gt;&lt;span style="color:yellow"&gt;test&lt;/span&gt;&lt;span style="color:cyan"&gt;]&lt;/span&gt;&lt;br /&gt;
  &lt;span style="color:yellow"&gt;3&lt;/span&gt; &lt;span style="color:blue"&gt;Sat Sep 29 2007 &amp;#8211; 09:11:45 PM&lt;/span&gt; This is another message &lt;span style="color:cyan"&gt;[&lt;/span&gt;&lt;span style="color:yellow"&gt;test&lt;/span&gt;&lt;span style="color:cyan"&gt;]&lt;/span&gt;&lt;span style="color:cyan"&gt;[&lt;/span&gt;&lt;span style="color:yellow"&gt;another_test&lt;/span&gt;&lt;span style="color:cyan"&gt;]&lt;/span&gt;&lt;br /&gt;
    &lt;span style="color:green"&gt;&amp;gt;&amp;gt;&lt;/span&gt; 2 messages loaded.&lt;br /&gt;
&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Or you can use the &amp;#58;from and/or &amp;#58;to keywords to specify a certain time frame, like this:&lt;/p&gt;
&lt;p&gt;&amp;#58;select &amp;#58;tags test &lt;strong&gt;&amp;#58;from ten minutes ago&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;#58;select &lt;strong&gt;&amp;#58;from last week &amp;#58;to 2 days ago&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;RedBook includes a very nice &amp;#8220;natural language date/time parser&amp;#8221;, &lt;a href="http://chronic.rubyforge.org/"&gt;Chronic&lt;/a&gt; which is able to convert sentences like the following into Ruby Time objects:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;6 in the morning&lt;/li&gt;
	&lt;li&gt;friday 1pm&lt;/li&gt;
	&lt;li&gt;sat 7 in the evening&lt;/li&gt;
	&lt;li&gt;today&lt;/li&gt;
	&lt;li&gt;yesterday at 4:00&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It&amp;#8217;s not perfect (and it&amp;#8217;s in pre-alpha as well), but it does the job, for what I can see, and it makes it very easy and fast to specify timeframes.&lt;/p&gt;
&lt;p&gt;After executing a &amp;#58;select command, two other operations can be performed on the loaded messages: &lt;strong&gt;&amp;#58;calc&lt;/strong&gt; and &lt;strong&gt;&amp;#58;save&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&amp;#58;calc calculates the exact amount of time elapsed between two or more tasks. Do you remember the numbers on the far left of each message? Think them as temporary IDs for the actual messages, and you can use them to select specific tasks when executing the &amp;#58;calc operation:&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: 'Bitstream Vera Sans Mono', Monaco, 'Courier New'; font-size: 10px"&gt;&lt;br /&gt;
&lt;span style="color:red"&gt;Red&lt;/span&gt;Book &amp;gt;&amp;gt; &amp;#58;calc 1 3&lt;br /&gt;
 &lt;span style="color:yellow"&gt;1&lt;/span&gt; &lt;span style="color:blue"&gt;Sat Sep 29 2007 &amp;#8211; 09:09:32 PM&lt;/span&gt; My first message &lt;span style="color:cyan"&gt;[&lt;/span&gt;&lt;span style="color:yellow"&gt;test&lt;/span&gt;&lt;span style="color:cyan"&gt;]&lt;/span&gt;&lt;br /&gt;
      &lt;del&gt;-&lt;/del&gt; 2 minutes and 13 seconds.&lt;br /&gt;
       &lt;span style="color:yellow"&gt;3&lt;/span&gt; &lt;span style="color:blue"&gt;Sat Sep 29 2007 &amp;#8211; 09:11:45 PM&lt;/span&gt; This is another message &lt;span style="color:cyan"&gt;[&lt;/span&gt;&lt;span style="color:yellow"&gt;test&lt;/span&gt;&lt;span style="color:cyan"&gt;]&lt;/span&gt;&lt;span style="color:cyan"&gt;[&lt;/span&gt;&lt;span style="color:yellow"&gt;another_test&lt;/span&gt;&lt;span style="color:cyan"&gt;]&lt;/span&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Similarly, if no IDs are specified, &amp;#58;calc calculates the time difference between each message and the previous:&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: 'Bitstream Vera Sans Mono', Monaco, 'Courier New'; font-size: 10px"&gt;&lt;br /&gt;
&lt;span style="color:red"&gt;Red&lt;/span&gt;Book &amp;gt;&amp;gt; &amp;#58;calc&lt;br /&gt;
 &lt;span style="color:yellow"&gt;1&lt;/span&gt; &lt;span style="color:blue"&gt;Sat Sep 29 2007 &amp;#8211; 09:09:32 PM&lt;/span&gt; My first message &lt;span style="color:cyan"&gt;[&lt;/span&gt;&lt;span style="color:yellow"&gt;test&lt;/span&gt;&lt;span style="color:cyan"&gt;]&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;
      &lt;del&gt;-&lt;/del&gt; 1 minute and 19 seconds.&lt;br /&gt;      &lt;br /&gt;
 &lt;span style="color:yellow"&gt;2&lt;/span&gt; &lt;span style="color:blue"&gt;Sat Sep 29 2007 &amp;#8211; 09:10:51 PM&lt;/span&gt; This is another message&lt;br /&gt; &lt;br /&gt;
      &lt;del&gt;-&lt;/del&gt; 54 seconds.&lt;br /&gt;      &lt;br /&gt;
 &lt;span style="color:yellow"&gt;3&lt;/span&gt; &lt;span style="color:blue"&gt;Sat Sep 29 2007 &amp;#8211; 09:11:45 PM&lt;/span&gt; This is another message &lt;span style="color:cyan"&gt;[&lt;/span&gt;&lt;span style="color:yellow"&gt;test&lt;/span&gt;&lt;span style="color:cyan"&gt;]&lt;/span&gt;&lt;span style="color:cyan"&gt;[&lt;/span&gt;&lt;span style="color:yellow"&gt;another_test&lt;/span&gt;&lt;span style="color:cyan"&gt;]&lt;/span&gt;&lt;br /&gt;
 &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Finally, you can save loaded messages to a &lt;span class="caps"&gt;TXT&lt;/span&gt;, &lt;span class="caps"&gt;YAML&lt;/span&gt; or &lt;span class="caps"&gt;CSV&lt;/span&gt; file, as follows:&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: 'Bitstream Vera Sans Mono', Monaco, 'Courier New'; font-size: 10px"&gt;&lt;br /&gt;
&lt;span style="color:red"&gt;Red&lt;/span&gt;Book &amp;gt;&amp;gt; &amp;#58;save log.txt&lt;br /&gt;
   &lt;span style="color:blue"&gt;&amp;gt;&amp;gt;&lt;/span&gt; Saving&amp;#8230;&lt;br /&gt;
   &lt;span style="color:green"&gt;&amp;gt;&amp;gt;&lt;/span&gt; Saved dataset to &amp;#8220;log.txt&amp;#8221;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
h&lt;br /&gt;
If you want to backup your log, you can load all messages and then save them to a &lt;span class="caps"&gt;YAML&lt;/span&gt; file. Maybe in this case you want to append the &lt;strong&gt;&amp;#58;silent&lt;/strong&gt; keyword to the &amp;#58;select command, so that messages won&amp;#8217;t be displayed on the screen.&lt;/p&gt;
&lt;h3&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;RedBook is just a simple program: it suits my needs for now, but of course there&amp;#8217;s roo for improvement. If you have some useful suggestions, or you want to contribute in some way, feel free to contact me!&lt;/p&gt;
&lt;p style="text-align:center;"&gt;&lt;a href="http://redbook.h3rald.com"&gt;Home Page&lt;/a&gt; | &lt;a href="http://code.google.com/p/redbook/"&gt;Development&lt;/a&gt; | &lt;a href="http://code.google.com/p/redbook/downloads/list"&gt;Download&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Sat, 29 Sep 2007 12:05:00 -0000</pubDate>
      <guid>http://www.h3rald.com/articles/redbook/</guid>
      <link>http://www.h3rald.com/articles/redbook/</link>
      <author>h3rald@h3rald.com</author>
      <comments>http://www.h3rald.com/articles/redbook/#comments</comments>
      <category>ruby</category>
      <category>productivity</category>
      <category>software</category>
      <category>tools</category>
      <category>redbook</category>
    </item>
    <item>
      <title>Introducing RedBook (and the new Code section)</title>
      <description>&lt;p&gt;I&amp;#8217;m somehow pleased to announce the opening of a new section on this site. Nothing too big actually, it&amp;#8217;s just a &lt;a href="/code/"&gt;page&lt;/a&gt; with a few (one for now) brief descriptions of open source programs and scripts I made and I&amp;#8217;d like to share with my readers.&lt;/p&gt;
&lt;p&gt;Don&amp;#8217;t expect fancy stuff: (luckily) I don&amp;#8217;t code for a living, I code for pleasure and I code small things. Lately I&amp;#8217;ve been trying to write a small Ruby program able to log my daily activities and also display them in a pleasant enough way, so I started using my lunch breaks at work more constructively and I came up with &lt;a href="/code/"&gt;RedBook&lt;/a&gt; an interactive command-line program written in Ruby.&lt;/p&gt;
&lt;p&gt;Main features:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Log timestamped and &lt;em&gt;tagged&lt;/em&gt; messages to a single &lt;span class="caps"&gt;YAML&lt;/span&gt; file&lt;/li&gt;
	&lt;li&gt;Load and display messages containing a certain string, or certain tags or within a time frame.&lt;/li&gt;
	&lt;li&gt;Calculate the time elapsed between two or more tasks.&lt;/li&gt;
	&lt;li&gt;Export loaded messages to &lt;span class="caps"&gt;YAML&lt;/span&gt;, &lt;span class="caps"&gt;TXT&lt;/span&gt; or &lt;span class="caps"&gt;CSV&lt;/span&gt; format.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All done via command line via simple commands:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;#58;log&lt;/strong&gt; This is a test message &lt;strong&gt;&amp;#58;tags&lt;/strong&gt; test&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;#58;load&lt;/strong&gt; &lt;strong&gt;&amp;#58;last&lt;/strong&gt; 30 &lt;strong&gt;&amp;#58;from&lt;/strong&gt; last week&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;#58;timecalc&lt;/strong&gt; 2 5&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;#58;save&lt;/strong&gt; test.txt&lt;/p&gt;
&lt;p&gt;Thanks to the wonderful &lt;a href="http://chronic.rubyforge.org/"&gt;Chronic&lt;/a&gt; library, you can specify your time frames using natural language expressions like &amp;#8220;8 in the morning&amp;#8221;, &amp;#8220;this tuesday&amp;#8221;, &amp;#8220;last month&amp;#8221; and so on&amp;#8230;&lt;/p&gt;
&lt;p&gt;Here&amp;#8217;s a screenshot showing RedBook in action:&lt;/p&gt;
&lt;p&gt;&lt;img src="/files/redbook.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;RedBook is of course free, open source software licensed under the terms of the &lt;span class="caps"&gt;BSD&lt;/span&gt; license. It can be installed on any machine able to run Ruby and there&amp;#8217;s also an &lt;span class="caps"&gt;EXE&lt;/span&gt; version for the lazy windows folks who don&amp;#8217;t want to install Ruby, packed with &lt;a href="http://www.erikveenstra.nl/rubyscript2exe/index.html"&gt;RubyScript2Exe&lt;/a&gt;. A more in-depth article explaining how RedBook works &lt;del&gt;will hopefully be completed soon&lt;/del&gt; is available &lt;a href="http://www.h3rald.com/articles/redbook"&gt;:here&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Sat, 29 Sep 2007 00:12:00 -0000</pubDate>
      <guid>http://www.h3rald.com/articles/introducing-redbook/</guid>
      <link>http://www.h3rald.com/articles/introducing-redbook/</link>
      <author>h3rald@h3rald.com</author>
      <comments>http://www.h3rald.com/articles/introducing-redbook/#comments</comments>
      <category>ruby</category>
      <category>productivity</category>
      <category>software</category>
      <category>tools</category>
      <category>redbook</category>
    </item>
  </channel>
</rss>
