GTD https://yyhh.org/notebook/gtd en 3 Time-Saving Tools for Busy Professionals https://yyhh.org/blog/2011/07/3-time-saving-tools-busy-professionals <span>3 Time-Saving Tools for Busy Professionals </span> <span><a title="View user profile." href="/user/yunyao" lang="" about="/user/yunyao" typeof="schema:Person" property="schema:name" datatype="">yunyao</a></span> <span>Sat, 07/16/2011 - 09:06</span> <div class="field field--name-field-notebook field--type-entity-reference field--label-hidden field__items"> <div class="field__item"><div about="/notebook/gtd" id="taxonomy-term-31" class="taxonomy-term vocabulary-notebook"> <a href="/notebook/gtd"> <div class="field field--name-name field--type-string field--label-hidden field__item">GTD</div> </a> <div class="content"> </div> </div> </div> </div> <div class="field field--name-field-opinion field--type-entity-reference field--label-hidden field__items"> <div class="field__item"><div about="/opinion/society" id="taxonomy-term-19" class="taxonomy-term vocabulary-opinion"> <a href="/opinion/society"> <div class="field field--name-name field--type-string field--label-hidden field__item">Society</div> </a> <div class="content"> </div> </div> </div> </div> <div class="field field--name-body field--type-text-with-summary field--label-hidden field__item"><div class="tex2jax_process"><p>As a busy professional, I am consistently looking for ways to save time. Below are 3 time-saving tools that I have found most useful.</p> <p>1. <a href="http://www.chorebuster.net/">Chore Buster</a></p> <p>With two busy professionals in the same household, dividing chores around the house can be tricky. Dividing chores in a fixed way is one solution. But one can quickly get bored of doing the same thing everyday.</p> <p>With this neat free online tool, we get automatic daily chore assignment based on a pre-defined list of house chores and preference of chores for each person. It is really fun to check off the items at the end of the day. Besides ensure fairness of the chore assignment, the tool also serves as a reminder for chores that only happens once in a while.</p> <p>2. <a href="https://www.mint.com/">Mint</a></p> <p>As the CFO of the family, I do need to keep track of our financial situation. However, I don't really have much time to do so. Mint has been a great help in this regards.</p> <p>3. <a href="http://www.farmfreshtoyou.com">Farm Fresh to You</a></p> <p>Both Huahai and I enjoy cooking. However, weekly grocery shopping can be time-consuming. <span class="st">This service basically gets organic produce delivery directly to my home from a <em class="st"></em>local organic farmers. It costs $31.5 a box for a week of organic vegetable and fruit. </span></p> <p><span class="st">We now only do grocery shopping every other weeks, saving both time and fuel. One thing that I like about the service is that I can exclude items so that I won't get anything that I don't like. </span></p> <p><span class="st">If you decide to try this service out, don't forget to mention promotion code </span><span class="st">2798 and </span><span class="st">our customer number </span>236470 to get 20% off your first box.</p> </div></div> <ul class="links inline"><li class="comment-add"><a href="/blog/2011/07/3-time-saving-tools-busy-professionals#comment-form" title="Share your thoughts and opinions." hreflang="und">Add new comment</a></li></ul><section> <a id="comment-5"></a> <article data-comment-user-id="0" class="js-comment comment"> <mark class="hidden" data-comment-timestamp="1312269230"></mark> <footer class="attribution"> <article typeof="schema:Person" about="/user/0"> <div class="field field--name-user-picture field--type-image field--label-hidden field__item"> <img src="/sites/default/files/styles/thumbnail/public/default_images/default-user-image.png?itok=hWWOuuKw" width="100" height="100" alt="Profile picture for user Johnebyne" title="Anonymous user" typeof="foaf:Image" /> </div> </article> <div class="comment-submitted"> <p class="commenter-name"> <span lang="" typeof="schema:Person" property="schema:name" datatype="">Anonymous</span> </p> <p class="comment-time"> Tue, 08/02/2011 - 08:13 </p> </div> </footer> <div class="comment-text"> <div class="comment-arrow"></div> <h3><a href="/comment/5#comment-5" class="permalink" rel="bookmark" hreflang="en">Very userful</a></h3> <div class="content"> <div class="field field--name-comment-body field--type-text-long field--label-hidden field__item"><div class="tex2jax_process"><p>These are nice pointers. Thanks for sharing.</p> </div></div> <drupal-render-placeholder callback="comment.lazy_builders:renderLinks" arguments="0=5&amp;1=default&amp;2=en&amp;3=" token="snLK4uT1j2VtGw-KzkfvzjF68wCrC45QPo-Mz5zLNL4"></drupal-render-placeholder> </div> </div> </article> <a id="comment-17"></a> <article data-comment-user-id="2" class="js-comment comment"> <mark class="hidden" data-comment-timestamp="1312499416"></mark> <footer class="attribution"> <article typeof="schema:Person" about="/user/yunyao"> <div class="field field--name-user-picture field--type-image field--label-hidden field__item"> <img src="/sites/default/files/styles/thumbnail/public/pictures/2017-11/yunyao_0.jpg?itok=G32xMAqO" width="100" height="100" alt="Profile picture for user yunyao" typeof="foaf:Image" /> </div> </article> <div class="comment-submitted"> <p class="commenter-name"> <a title="View user profile." href="/user/yunyao" lang="" about="/user/yunyao" typeof="schema:Person" property="schema:name" datatype="">yunyao</a> </p> <p class="comment-time"> Fri, 08/05/2011 - 00:10 </p> </div> </footer> <div class="comment-text"> <div class="comment-arrow"></div> <h3><a href="/comment/17#comment-17" class="permalink" rel="bookmark" hreflang="en">Glad it is helpful.</a></h3> <div class="content"> <div class="field field--name-comment-body field--type-text-long field--label-hidden field__item"><div class="tex2jax_process"><p>Thank you for dropping by.</p> </div></div> <drupal-render-placeholder callback="comment.lazy_builders:renderLinks" arguments="0=17&amp;1=default&amp;2=en&amp;3=" token="5isjmYk2KTZEcK1HtfaH0Ku5AQT2eBHTBu8nta57bes"></drupal-render-placeholder> </div> </div> </article> <h2>Add new comment</h2> <drupal-render-placeholder callback="comment.lazy_builders:renderForm" arguments="0=node&amp;1=133&amp;2=comment_node_blog&amp;3=comment_node_blog" token="tJYPo9XQ32KDUPva02UQzpraSmbrpyiPwXx_QINCOQk"></drupal-render-placeholder> </section> <strong class="node_view"></strong> Sat, 16 Jul 2011 08:06:13 +0000 yunyao 133 at https://yyhh.org txt2tags: a Lightweight Document Authoring Format https://yyhh.org/blog/2008/01/txt2tags-lightweight-document-authoring-format <span>txt2tags: a Lightweight Document Authoring Format</span> <span><a title="View user profile." href="/user/huahai" lang="" about="/user/huahai" typeof="schema:Person" property="schema:name" datatype="">Huahai</a></span> <span>Fri, 01/04/2008 - 00:07</span> <div class="field field--name-field-notebook field--type-entity-reference field--label-hidden field__items"> <div class="field__item"><div about="/notebook/software" id="taxonomy-term-24" class="taxonomy-term vocabulary-notebook"> <a href="/notebook/software"> <div class="field field--name-name field--type-string field--label-hidden field__item">Software</div> </a> <div class="content"> </div> </div> </div> <div class="field__item"><div about="/notebook/gtd" id="taxonomy-term-31" class="taxonomy-term vocabulary-notebook"> <a href="/notebook/gtd"> <div class="field field--name-name field--type-string field--label-hidden field__item">GTD</div> </a> <div class="content"> </div> </div> </div> </div> <div class="field field--name-body field--type-text-with-summary field--label-hidden field__item"><div class="tex2jax_process"><p><img src="http://txt2tags.sourceforge.net/img/t2tgems.png" alt="txt2tags" /></p> <p>Fresh ideas often pop up when one is not working, e.g. while in shower or in bed. When that happens, one needs to jot them down fast. Of course, a piece of paper and a pen is still the best solution in term of speed. However, if a computer is conveniently available, typing in text has the advantage of saving text re-entry time, being easily re-organizable and expandable into something more substantial, such as an article. For these advantages to materialize, a good document format is needed for quick document creation and text entry. MS Word may work for many people if MS Office is the only environment they work in. For others, especially those who value portability, a platform agnostic solution would be better. Another point against a WYSIWYG editor like Word is that it mixes presentation with content, which is generally bad. When I use Word, I habitually try to adjust the font, the layout, etc, which basically interrupt text input. </p> <p>Speaking of portability, plain text is without question the king. So, when we need extra features, such as structure, list, table, links and so on, we add them on top of plain text. The question now becomes how much to add? Many formats trade power over simplicity. For example, LaTeX is great, many people I know write papers with LaTeX, myself included. However, LaTeX is too complex for quick text entry. Wiki is great for documentation, but there are just too many different kinds of wiki tags for me to remember. Here, I think <a href="http://txt2tags.sourceforge.net">txt2tags</a> strikes the right balance between power and simplicity. </p> <p> txt2tags has a minimalist markup language. All the marks are non-word symbols (so they won't confuse spell checkers) that are fairly intuitive. For example, =this is top level section title=, ==this is second level==, +this top level title is numbered+, **this text is bold**, //this text is italic//, - this is a list item, + this is a numbered list item. Many of these marks are what people are already using in informal text such as email messages. There really ain't much to learn here. Compared with <a href="http://en.wikipedia.org/wiki/Lightweight_markup_language">other lightweight markup language</a>, I think txt2tags has the most natural syntax. </p> <p>txt2tags format additionally supports tables, links, images, comments, quotations, and horizontal lines. However, cross-references and footnotes are not supported. As an initial authoring format, I think this feature set is sufficient. If more complex structures such as complicated tables, formulas, and cross-references are needed, they can be inserted at the final document production stage. At the authoring stage, there is generally no need to worry about them. If it is necessary to include them, e.g. important formula, txt2tags allows them to be inserted as already tagged code.</p> <p>A single python script takes txt2tags files (*.t2t) and converts them into different formatted documents, including LaTeX, HTML, Unix manual page, PageMaker, plain text (yes, you sometimes need them), among others. This blog is written in txt2tags and then converted to HTML. In fact, <a href="http://txt2tags.sourceforge.net/writing-book.html">books</a> can be written in text2tags, because it supports multiple file includes, so each chapter can live in its own file. txt2tags can also automatically generate table of content.</p> <p>As vim user, we expect niceties such as syntax highlighting and vim key-mappings for txt2tags. These can all be found on txt2tags Web site. Or if one uses Debian, these are included in the txt2tags Debian package already. For people like to have GUI, there's a Tcl/Tk GUI interface for txt2tags. And a Web interface is available too.</p> <p>For quickly jotting down ideas, I have tried mind-mapping tools (freemind, kdissert), outliners (TVO, vimoutliners), and note-takers (basket, knotes). They work to some degree but are all very limited in term of content expandability and portability. I just wish I had found txt2tags earlier.</p> <p> txt2tags also makes a good addition to my text based GTD solution. I will be using it as my main information collection format. Because txt2tags' list format is very compatible with <a href="http://yyhh.org/blog/2007/12/simple-gtd-list-solution-desktop-web-and-possibly-mobile">taskpaper</a>'s list -- both use "-" to indicate list item, and use indention to indicate nesting level -- I can simply yank a list from a t2t file, and put it in my taskpaper project list. Nice.</p> </div></div> <section> <h2>Add new comment</h2> <drupal-render-placeholder callback="comment.lazy_builders:renderForm" arguments="0=node&amp;1=73&amp;2=comment_node_blog&amp;3=comment_node_blog" token="SUwDcBBVaeUhMGEX98RFsUFII20bFu7pirSwdIWo3-U"></drupal-render-placeholder> </section> <strong class="node_view"></strong> Fri, 04 Jan 2008 00:07:32 +0000 Huahai 73 at https://yyhh.org Reference to Individual Email Message in Plain Text File https://yyhh.org/blog/2007/12/reference-individual-email-message-plain-text-file <span>Reference to Individual Email Message in Plain Text File</span> <span><a title="View user profile." href="/user/huahai" lang="" about="/user/huahai" typeof="schema:Person" property="schema:name" datatype="">Huahai</a></span> <span>Thu, 12/13/2007 - 22:40</span> <div class="field field--name-field-notebook field--type-entity-reference field--label-hidden field__items"> <div class="field__item"><div about="/notebook/vim" id="taxonomy-term-17" class="taxonomy-term vocabulary-notebook"> <a href="/notebook/vim"> <div class="field field--name-name field--type-string field--label-hidden field__item">Vim</div> </a> <div class="content"> </div> </div> </div> <div class="field__item"><div about="/notebook/linux" id="taxonomy-term-16" class="taxonomy-term vocabulary-notebook"> <a href="/notebook/linux"> <div class="field field--name-name field--type-string field--label-hidden field__item">Linux</div> </a> <div class="content"> </div> </div> </div> <div class="field__item"><div about="/notebook/gtd" id="taxonomy-term-31" class="taxonomy-term vocabulary-notebook"> <a href="/notebook/gtd"> <div class="field field--name-name field--type-string field--label-hidden field__item">GTD</div> </a> <div class="content"> </div> </div> </div> </div> <div class="field field--name-body field--type-text-with-summary field--label-hidden field__item"><div class="tex2jax_process"><p>A lot of people implement <a href="http://saw.themurdaughs.com/gtd-with-gmail-whitepaper">GTD methodology entirely with Gmail</a>. I don't feel comfortable doing that because gmail is not that secure. And I think depending on a network service is a bad idea for a GTD system. So I still download all my emails to my local computers. As <a href="http://yyhh.org/blog/2007/12/simple-gtd-list-solution-desktop-web-and-possibly-mobile">my plain text based GTD implementation</a> was taking shape, I realized that I needed to refer to individual email messages in my local mail folders, both in the "Projects/Next-Action" list and as reference materials. For example, in my list, there would be an item "think about Johon's request", and it should include a link to the email message containing John's request. Ideally, invoking this link should open up this email message in <em>kmail</em>, my email reader. Also, I would like the creation of such a link in my list to be semi-automatic. </p> <p>The first problem is to find the unique id for the email message. Although there's an Message-ID field in standard email format, kmail does not make it easy to use that field. It turns out that just using the unique filename of email messages is sufficient. Kmail by default uses <em>maildir</em> format to store emails, and maildir stores each message as an individual file with a unique name. This situation makes linking to email messages as easy as linking to files. Now the question is, how do I know what filename an individual email message is saved as?</p> <p>The answer is I don't know, kmail does not reveal that information. At least I don't know the filename when the email is first saved in my email folder. But, the good news is, I don't need to know the filename when the email is in my inbox. Because, as GTD methodology decrees, stuff in inbox should not be permanent, but is to be moved into either projects/next-action list or reference collection. Now, when I process my inbox, and move a message into my GTD email folder, I can figure out what name it is saved in. No, I am not suggesting using kmail's "save-as" method. That's still too much work, because I then have to open a file browser, choose a filename for the email to save as, and manually put a link to that file in my list. Besides, kmail can only "save-as" mbox format, and it sucks.</p> <p>What I now end up with is a neat solution. Basically, all I need to do, is to drag a message into my local GTD mail folder in kmail. And a link to the saved message will be automatically inserted into my plain-text project/next-action list or my reference file, depending on a dialog selection. This screen shot shows an email being dragged into GTD folder in kmail: <img src="http://i274.photobucket.com/albums/jj251/huahaiy/kmail-drag-gtd.png" /></p> <p>A dialog then shows up:<img src="http://i274.photobucket.com/albums/jj251/huahaiy/kmail-drag-gtd-dialog.png" />. </p> <p>After making a selection, a reference to the email message is inserted in vim, which looks like this:<br /></p><div class="codeblock">&lt;mail:~/Mail/GTD/cur/1197479411.14855.WSF8K:2,S&gt;</div> <p>This implementation depends on <a href="http://inotify-tools.sourceforge.net/">inotify-tools</a>, which utilizes newer Linux kernel's <em>inotify</em> capability. It watches GTD mail folder. When an email message is moved into this folder, a script records its filename, and inserts a link to the email in my project/next-action list. This solution also depends on <em>vim</em> with server mode support, so other program can send commands to it. I always start my projects/next-action editing session in server mode, with special server names, such as "active_projects":<br /></p><div class="codeblock">gvim --servername "active_projects" projects.taskpaper</div> <p> Finally, a vim plug-in <a href="http://www.vim.org/scripts/script.php?script_id=293">utl.vim</a> is needed to invoke any URL in plain text.</p> <p>All these components are glued together with a simple shell script <em>~/bin/email2gtd.sh</em>:<br /></p><div class="codeblock"> <font face="monospace"><br /><font color="#a0b0c0"><i>#!/bin/bash</i></font><br /><font color="#a0b0c0"><i># waiting for email message being dropped in GTD mail folder, then insert</i></font><br /><font color="#a0b0c0"><i># a reference to the email in one of the available vim server buffers,</i></font><br /><font color="#a0b0c0"><i># depending on user selection in dialog prompt</i></font><br /><font color="#a0b0c0"><i>#</i></font><br /><font color="#a0b0c0"><i># author: Huahai Yang, 12/13/2007 11:22:36 AM (PST)  </i></font><br /><font color="#a0b0c0"><i>#</i></font><br /><font color="#007020"><b>while</b></font> <font color="#5b3674"><i>email</i></font>=<font color="#1060a0">$(</font><font color="#70a0d0"><i>inotifywait -e moved_to ~/Mail/GTD/cur --format </i></font><font color="#408010">"</font><font color="#4070a0">%f</font><font color="#408010">"</font><font color="#1060a0">)</font><font color="#408010">;</font> <font color="#4c8f2f"><b>do</b></font> <p>  <font color="#a0b0c0"><i># the list of available vim servers</i></font><br />   <font color="#5b3674"><i>servers</i></font>=<font color="#408010">(</font> <font color="#1060a0">$(</font><font color="#70a0d0"><i>vim --serverlist</i></font><font color="#1060a0">)</font> <font color="#408010">)</font></p> <p>  <font color="#a0b0c0"><i># the number of available vim servers</i></font><br />   <font color="#5b3674"><i>num</i></font>=<font color="#1060a0">${#</font><font color="#1060a0">servers</font><font color="#1060a0">[</font>@<font color="#1060a0">]</font><font color="#1060a0">}</font></p> <p>  <font color="#4c8f2f"><b>if</b></font> <font color="#70a0d0"><i>[[</i></font> <font color="#1060a0">$num</font> <font color="#4c8f2f"><b>-eq</b></font> <font color="#40a070">0</font> <font color="#70a0d0"><i>]]</i></font><font color="#408010">;</font> <font color="#4c8f2f"><b>then</b></font><br />     kdialog --msgbox <font color="#408010">"</font><font color="#4070a0">There is no vim server running.</font><font color="#408010">"</font><br />   <font color="#4c8f2f"><b>else</b></font><br />     <font color="#a0b0c0"><i># construct dialog choices</i></font><br />     <font color="#5b3674"><i>choices</i></font>=<font color="#408010">""</font><br />     <font color="#007020"><b>for</b></font> id <font color="#007020"><b>in</b></font> <font color="#1060a0">$(</font><font color="#70a0d0"><i>seq </i></font><font color="#40a070">0</font><font color="#70a0d0"><i> </i></font><font color="#1060a0">$((</font><font color="#1060a0">$num</font><font color="#70a0d0"><i> - </i></font><font color="#40a070">1</font><font color="#1060a0">))</font><font color="#1060a0">)</font><font color="#408010">;</font> <font color="#4c8f2f"><b>do</b></font><br />       <font color="#5b3674"><i>choices</i></font>=<font color="#1060a0">${</font><font color="#1060a0">choices</font><font color="#1060a0">}</font><font color="#408010">"</font><font color="#4070a0"> </font><font color="#408010">"</font><font color="#1060a0">${</font><font color="#1060a0">servers</font><font color="#1060a0">[</font><font color="#1060a0">$id</font><font color="#1060a0">]</font><font color="#1060a0">}</font><font color="#408010">"</font><font color="#4070a0"> </font><font color="#408010">"</font><font color="#1060a0">${</font><font color="#1060a0">servers</font><font color="#1060a0">[</font><font color="#1060a0">$id</font><font color="#1060a0">]</font><font color="#1060a0">}</font><font color="#408010">"</font><font color="#4070a0"> off</font><font color="#408010">"</font><br />     <font color="#4c8f2f"><b>done</b></font></p> <p>    <font color="#5b3674"><i>server</i></font>=<font color="#1060a0">$(</font><font color="#70a0d0"><i>kdialog --title </i></font><font color="#408010">"</font><font color="#4070a0">Insert email reference</font><font color="#408010">"</font><font color="#70a0d0"><i> \</i></font><br /><font color="#70a0d0"><i>        --radiolist </i></font><font color="#408010">"</font><font color="#4070a0">Please select which vim server to insert into:</font><font color="#408010">"</font><font color="#70a0d0"><i> \</i></font><br /><font color="#70a0d0"><i>        </i></font><font color="#1060a0">$choices</font><font color="#1060a0">)</font></p> <p>    <font color="#a0b0c0"><i># insert the email reference to the end of the current line</i></font><br />     vim --servername <font color="#408010">"</font><font color="#1060a0">$server</font><font color="#408010">"</font> \<br />         --remote-send <font color="#408010">"</font><font color="#4070a0">&lt;ESC&gt;A&lt;mail:~/Mail/GTD/cur/</font><font color="#408010">"</font><font color="#1060a0">${</font><font color="#1060a0">email</font><font color="#1060a0">}</font><font color="#408010">"</font><font color="#4070a0">&gt;&lt;ESC&gt;</font><font color="#408010">"</font><br />   <font color="#4c8f2f"><b>fi</b></font><br /><font color="#4c8f2f"><b>done</b></font><br /></p></font> </div> <p>This script should run in the background. I personally run it from <em>~/.kde/Autostart</em> so it is automatically loaded when I log in. It watches the <em>~/Mail/GTD</em> folder I created in kmail, and insert a reference to an email to available vim server when the email is moved to the folder. </p> <p>Finally, I set up utl.vim plug-in so that it knows how to invoke a reference to email message. After installing utl.vim, I added the following function in my <em>.vimrc</em>, so that utl.vim can handle my "mail:" style URL:</p> <div class="codeblock"> <font face="monospace"><br /><font color="#a0b0c0"><i>" lauch kmail to handle reference to email message</i></font><br /><font color="#007020"><b>fu</b></font>! Utl_AddressScheme_mail<font color="#408010">(</font>auri<font color="#408010">)</font><br />   <font color="#007020"><b>exe</b></font> <font color="#4070a0">"!kmail --view "</font> <font color="#408010">.</font> UtlUri_unescape<font color="#408010">(</font> UtlUri_opaque<font color="#408010">(</font>a:auri<font color="#408010">)</font> <font color="#408010">)</font><br />   <font color="#007020"><b>return</b></font> <font color="#4070a0">''</font><br /><font color="#007020"><b>endfu</b></font><br /></font> </div> <p>Now when cursor is on an email link, hit <em>\gu</em> will open up the message in kmail.<a href="http://i274.photobucket.com/albums/jj251/huahaiy/gtd-email-reference.png"><img src="http://i274.photobucket.com/albums/jj251/huahaiy/gtd-email-reference.png" width="720" /></a></p> </div></div> <section> <h2>Add new comment</h2> <drupal-render-placeholder callback="comment.lazy_builders:renderForm" arguments="0=node&amp;1=69&amp;2=comment_node_blog&amp;3=comment_node_blog" token="lJT5kKeln39os46v1KdycSqBSDznPWWSvHnhJphOBS8"></drupal-render-placeholder> </section> <strong class="node_view"></strong> Thu, 13 Dec 2007 22:40:50 +0000 Huahai 69 at https://yyhh.org A Simple GTD List Solution: Desktop, Web and Possibly Mobile https://yyhh.org/blog/2007/12/simple-gtd-list-solution-desktop-web-and-possibly-mobile <span>A Simple GTD List Solution: Desktop, Web and Possibly Mobile</span> <span><a title="View user profile." href="/user/huahai" lang="" about="/user/huahai" typeof="schema:Person" property="schema:name" datatype="">Huahai</a></span> <span>Mon, 12/10/2007 - 04:25</span> <div class="field field--name-field-notebook field--type-entity-reference field--label-hidden field__items"> <div class="field__item"><div about="/notebook/software" id="taxonomy-term-24" class="taxonomy-term vocabulary-notebook"> <a href="/notebook/software"> <div class="field field--name-name field--type-string field--label-hidden field__item">Software</div> </a> <div class="content"> </div> </div> </div> <div class="field__item"><div about="/notebook/gtd" id="taxonomy-term-31" class="taxonomy-term vocabulary-notebook"> <a href="/notebook/gtd"> <div class="field field--name-name field--type-string field--label-hidden field__item">GTD</div> </a> <div class="content"> </div> </div> </div> </div> <div class="field field--name-body field--type-text-with-summary field--label-hidden field__item"><div class="tex2jax_process"><p>I have been searching for a lightweight list solution since I started trying out the <a href="http://en.wikipedia.org/wiki/Getting_Things_Done">Getting Things Done (GTD)</a> approach a few days ago. Unlike calendar events, list items (projects and actions) do not associate with a particular time and date, therefore, using a calender for them is not appropriate. According to <a href="http://www.davidco.com/">David Allen</a>, for lists, we should "just go for simplicity, speed, and fun". Here I operationalize that into these properties: </p> <ul><li>Simple, but can still do these:</li> <ul><li>Handle lists for "project", "next-action", "waiting-for" and "maybe"*</li> <li>Be able to tag an item with "context", and organize items by context </li> <li>Support sub-list</li> </ul><li>Quick and easy input, review, and operate, whenever, wherever</li> <ul><li>Platform and location independent: home, office, road, online, offline</li> <li>Synchronized and consistent</li> <li>Preserve persistence and ownership (lists live else where won't do)</li> <li>Easily searchable</li> <li>Integrated with work environment (e.g. maintain reference to support materials)</li> </ul><li>Good-looking, functional, familiar and consistent interface</li> </ul><p>This set of desiderata is of course incomplete, just what I can think of right now. All these can actually be comfortably handled by paper based solutions for most people I think. However, for people whose primary work environment is digital, the second major item is not very amicable for a paper based solution, because getting things transferred between digital and paper world is a lot of hassle. If the input and output of one's work are all in the digital environment, it becomes necessary to avoid the paper world, and to find an all digital solution to get things done. At this point, I think I found a simple solution, <a href="http://hogbaysoftware.com/products/taskpaper">TaskPaper</a>.</p> <p><em>TaskPaper</em> is a Mac based list software. I do not own a Mac, so why is it my solution? Well, TaskPaper uses a very simple and intuitive syntax representing lists in plain text. That is to say, they stick to the basics, and try to take what's good about paper-based solution, and bring that to digital world. Since plain text is the most platform independent format, portability is not a problem any more. Easy and quick input is taken care of with a good text editor. Searchability, persistence, and synchronization is easy to achieve with textual data. So there you have it, a solution that meets all the desiderata. </p> <p>Wait, how about its support for GTD? Here, TaskPaper's syntax is specifically tailored to GTD. Nothing more. Let's see an example:<br /></p><div class="codeblock"> <font face="monospace"><br /><span><b><u>Example Project:</u></b></span><br /><font color="#bebebe">- Start example project file @computer @done</font><br /><font color="#5b3674"><i>- </i></font>Brainstorm project with colleagues <font color="#5b3674"><i>@work</i></font><br /><font color="#5b3674"><i>- </i></font>Email Joan about project <font color="#5b3674"><i>@email</i></font><br /><span><b><u>Next Project:</u></b></span><br /><font color="#5b3674"><i>- </i></font>Draft ideas for next project <font color="#5b3674"><i>@anywhere</i></font><br /><font color="#5b3674"><i>- </i></font>Email Bob to arrange meeting <font color="#5b3674"><i>@email</i></font><br /></font> </div> <p>This list contains two projects. Project names end with ":". Tasks in a project start with "-". Context tags start with "@". "@done" is a special tag indicating completion of a task. That's it. All the syntax for TaskPaper! I don't think it can be made simpler, and everyone should be able to pick it up in no time. In addition, the possibility of customizing the format to suit one's own needs seems to be very high. For example, <a href="http://en.wikipedia.org/wiki/Personal_wiki">wiki words</a> can be naturally included in the list to handle reference to project support materials. </p> <p>For vim user, there's a <a href="http://www.vim.org/scripts/script.php?script_id=2027">taskpaper.vim</a> plugin that makes it a little easier to edit and review TaskPaper lists. The current released version of taskpaper.vim doesn't seem to correctly handle indented tasks due to a quotation peculiarity of vim regular expression. I have sent a small patch below to the author of taskpaper.vim (update12/10/2007 10:49:08 PM (EST): it will be included in the next release, I am told). </p> <div class="codeblock"> <font face="monospace"><br /><font color="#e5a00d"><i>--- taskpaper.vim 2007-09-25 07:33:28.000000000 -0400</i></font><br /><font color="#e5a00d"><i>+++ taskpaper.vim.new 2007-12-09 08:20:06.000000000 -0500</i></font><br /><font color="#007020"><b>@@ -36,7 +36,7 @@</b></font><br />  <br />  " toggle @done context tag on a task<br />  function! ToggleDone()<br /><font color="#70a0d0"><i>-    if (getline(".") =~ "^\s*- ")</i></font><br /><font color="#5b3674"><i>+    if (getline(".") =~ '^\s*- ')</i></font><br />          let isdone = strridx(getline("."),"@done")<br />          if (isdone != -1)<br />              substitute/ @done//<br /><font color="#007020"><b>@@ -45,7 +45,10 @@</b></font><br />              substitute/$/ @done/<br />              echo "done!"<br />          endif<br /><font color="#5b3674"><i>+    else </i></font><br /><font color="#5b3674"><i>+        echo "not a task."</i></font><br />      endif<br /><font color="#5b3674"><i>+</i></font><br />  endfunction<br />  <br />  map &lt;buffer&gt; &lt;LocalLeader&gt;td :call ToggleDone()&lt;cr&gt;<br /></font> </div> <p>There is also a <a href="http://code.google.com/p/taskpaper-web/">taskpaper.web</a> that you can drop in your own php-supported Web site. This is useful when you do not have access to your desktop but have access to your own Web site. Of course, then you have to set up file synchronization between the Web copy of your lists and your desktop or mobile copies. For the former, you can run a <em>cron</em> job to regularly <em>rsync</em> these files. For the later, I am not sure since I no longer use a PDA or smart phone (it's funny that I was among the first generation of Palm users, but I no longer use any of these when they become so popular nowadays. I just carry my laptop around).</p> <p>Anyway, I just started experimenting with this methods for GTD lists. I will have more to say when I got more experience using it. </p> <p> *For the meaning of some of the GTD terms, it's best to read <a href="http://www.amazon.com/Getting-Things-Done-Stress-Free-Productivity/dp/0142000280">the book</a>.</p> </div></div> <section> <h2>Add new comment</h2> <drupal-render-placeholder callback="comment.lazy_builders:renderForm" arguments="0=node&amp;1=68&amp;2=comment_node_blog&amp;3=comment_node_blog" token="VspJyH0AAWIzAeRMeCd5NrA1LMoPPUJ2QuL4wQAP04o"></drupal-render-placeholder> </section> <strong class="node_view"></strong> Mon, 10 Dec 2007 04:25:48 +0000 Huahai 68 at https://yyhh.org