<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>naf.tech</title>
	<atom:link href="http://iamnafets.com/tech/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://iamnafets.com/tech</link>
	<description>for the love of the game</description>
	<lastBuildDate>Fri, 18 Nov 2011 00:31:09 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>The Todo to Calendar Mismatch</title>
		<link>http://iamnafets.com/tech/?p=64&#038;utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=the-todo-calendar-mismatch</link>
		<comments>http://iamnafets.com/tech/?p=64#comments</comments>
		<pubDate>Sat, 17 Sep 2011 21:49:07 +0000</pubDate>
		<dc:creator>Stefan Mai</dc:creator>
				<category><![CDATA[productivity]]></category>

		<guid isPermaLink="false">http://iamnafets.com/tech/?p=64</guid>
		<description><![CDATA[At the end of any given period of time, all todo-lists resolve to calendars: this is what I did, this is what I didn't; this is what I put off, this is what I pushed through. In some sense a todo list becomes the source of all unprioritized events and the calendar becomes the destination [...]]]></description>
			<content:encoded><![CDATA[<p>At the end of any given period of time, all todo-lists resolve to calendars: this is what I did, this is what I didn't; this is what I put off, this is what I pushed through. In some sense a todo list becomes the source of all unprioritized events and the calendar becomes the destination for first class items in your life. Where a calendar says "this is what I will do", a todo list says "I'd like to get to these".</p>
<p>The orthogonality of the two systems causes a number of problems:</p>
<ul>
<li>My todo list can grow without bounds, regardless of whether or not I will finish tasks. This causes stress. For most people, the todo list grows in size slightly faster than the "burn down": I'll add stuff I'd like to do until I finally get the courage to just scrap ideas because hey, they really are never going to happen. Oftentimes the things I throw out should have been tossed at the start, but the time it took to force my hand left me expending emotional energy on something I would never accomplish.</li>
<li>"What do I do next?" is a common question, and one that is pretty easily solved with systems that designate "next actions" or have some sort of <a title="dependency hierarchy" href="http://iamnafets.com/tech/?p=55">dependency hierarchy</a>. This problem gets much more complicated when I can be working towards a number of different competing interests, with different priorities and different due dates.</li>
<li>It's easy to estimate that a task will take 2 hours, but <em>when will I get that time</em>. For most people the answer is "I'll get to it", which results in reneged promises or late nights. For the requesters (and maybe that is you), an accurate answer is almost always preferable than either of these results.</li>
</ul>
<p>So, back to resolution. At any given time, your todo list in the past resolved to what you did in the past and your todo list for the future is <em>already partially resolved</em>. This last point is critical for people with a lot of competing priorities, though perhaps less so for people without the mess. There might be a universe where every single moment is up in the air, but for most people the path forward is straight until it changes, and even the changes can be predicted based on historical trends (God help me if I plan to hold on to a solid block of an hour's time any given Monday).</p>
<p>The picture I'm trying to paint here is that your calendar for the next week is already mostly laid out, you just have next to no idea what it looks like. And if you're trying to juggle a personal life, friends, work, maybe a craft or hobby, staying healthy... it's exasperating. I'd prefer to not have to think about it.</p>
<p>Maybe a project can come of this?</p>
]]></content:encoded>
			<wfw:commentRss>http://iamnafets.com/tech/?feed=rss2&#038;p=64</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Task Management &#8211; Subtasks and Shortcuts</title>
		<link>http://iamnafets.com/tech/?p=55&#038;utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=task-management</link>
		<comments>http://iamnafets.com/tech/?p=55#comments</comments>
		<pubDate>Thu, 18 Aug 2011 04:56:14 +0000</pubDate>
		<dc:creator>Stefan Mai</dc:creator>
				<category><![CDATA[bash]]></category>
		<category><![CDATA[productivity]]></category>

		<guid isPermaLink="false">http://iamnafets.com/tech/?p=55</guid>
		<description><![CDATA[Everyone struggles with time management. We're inefficient beings: we're subject to long stretches of no productivity followed by whims of inspiration mixed with forgetfulness and all tied together by emotions that we struggle daily to control -- time tramples us all. In short, it's not easy being an adult. That said, there is tremendous value [...]]]></description>
			<content:encoded><![CDATA[<p>Everyone struggles with time management. We're inefficient beings: we're subject to long stretches of no productivity followed by whims of inspiration mixed with forgetfulness and all tied together by emotions that we struggle daily to control -- time tramples us all. In short, it's not easy being an adult. That said, there is tremendous value in taking some of the mental load off of your shoulders so you don't have to be <strong>thinking about it every waking moment</strong>. Everyone is very different. Some people have a cathartic reaction to penciling down everything they have to do and knocking it all out. Some people like to have Post-it notes all over their desks and walls to keep from forgetting. Other people like file cabinets and a regimented process for how they review what needs to be done, triage-ing it, and systematically procrastinating until the last minute.</p>
<p>So. I'm not here to prescribe a style, but merely explain how I manage what needs to get done and how I go about doing it. What I will say though is that if you're a developer, you <em>must</em> be able to customize and optimize your process. It's in your DNA. Find out what works and do all the extra steps necessary to make sure no time is <em>wasted</em> managing your time.</p>
<p>I use <a title="TaskWarrior" href="http://taskwarrior.org/projects/show/taskwarrior" target="_blank">TaskWarrior</a>. TaskWarrior (formerly known simply as task) is a command line task manager written in C++. While considerable development is taking place and is due, the application is truly simple and seeks to stay that way. From my perspective, this make it a great base for <strong>scripting</strong>. Why script your task manager? Well, let's say I work for a company with a strict policy about issue trackers, how do I integrate? Or what if my boss regularly sends me emails with things to do that I can't forget? What if I want a button on my desk that tracks my time? Shell scripts, baby.</p>
<p>So, for a quick overview (and bear in mind these commands might be aliases, another advantage to a CLI inteface) here's how I list out what I have to do at work:</p>
<p><a href="http://iamnafets.com/tech/wp-content/uploads/2011/08/List.jpg"><img class="alignnone size-full wp-image-56" title="List" src="http://iamnafets.com/tech/wp-content/uploads/2011/08/List.jpg" alt="" width="632" height="339" /></a></p>
<p>Easy, fast, and at a glance I know what I'm working on (green), what's due today, and anything else that might be pertinent. Adding a task is also <strong>really</strong> easy:</p>
<p><a href="http://iamnafets.com/tech/wp-content/uploads/2011/08/Add.jpg"><img class="alignnone size-full wp-image-57" title="Add" src="http://iamnafets.com/tech/wp-content/uploads/2011/08/Add.jpg" alt="" width="442" height="206" /></a></p>
<p>TaskWarrior also has two commands <em><span style="text-decoration: underline;">task start</span></em> and <em><span style="text-decoration: underline;">task stop</span> </em>that allow you to keep track of what you're working on at a given moment. This is really helpful when you are randomized by someone who stops by or you blank out and forget what you were really doing. A simple <em><span style="text-decoration: underline;">task active</span></em> shows you exactly what you're working on. But what I found is that I tend to work in trees, rather than a flat list. I might put on my list a really big task that could take a week, and as I worked it through I'd break it up into smaller and smaller bits and work through those pieces. Most of the time you have to plan out your course of action, even if it's trivial, to make sure you don't leave out pieces. TaskWarrior's dependencies <em>work</em> for this, but not elegantly. So I fixed it with a vim "outline" script.</p>
<p><a href="http://iamnafets.com/tech/wp-content/uploads/2011/08/Outline.jpg"><img class="alignnone size-full wp-image-58" title="Outline" src="http://iamnafets.com/tech/wp-content/uploads/2011/08/Outline.jpg" alt="" width="410" height="322" /></a></p>
<p>By typing <em><span style="text-decoration: underline;">two</span></em> (task work outline), up pops a quick outline of what I'm working on and the related tasks from top to bottom. Not only does this help to form a plan of attack (saving actually updates the individual tasks), but it gives perspective as to where the given piece of the puzzle fits. "Why am I working on the insertion functionality?" is easily answering by traversing the tree: "To get the approval process working for the promotion tab content..."</p>
<p>This breaking process was also solidified by the addition of commands to "break" tasks into subtasks (<em><span style="text-decoration: underline;">taskbreak</span></em>) and suggest what to work on (through <em><span style="text-decoration: underline;">taskdone</span></em> or <em><span style="text-decoration: underline;">td</span></em>) when those tasks are finished. Here's an example of starting on a task that's too big to reasonably manage, breaking it into parts, and having TaskWarrior tell me what to work on next.</p>
<p><a href="http://iamnafets.com/tech/wp-content/uploads/2011/08/Workflow.jpg"><img class="alignnone size-full wp-image-59" title="Workflow" src="http://iamnafets.com/tech/wp-content/uploads/2011/08/Workflow.jpg" alt="" width="706" height="517" /></a></p>
<p>Another feature that I found useful is a plugin called <em><span style="text-decoration: underline;">tasknote</span></em>. <a href="http://taskwarrior.org/projects/taskwarrior/wiki/Tasknote" target="_blank">Tasknote</a> opens up a new note file with your $EDITOR so that you can keep long-winded descriptions tucked away. I fire it up with <em><span style="text-decoration: underline;">tn</span></em>, mark my notes, and save it. I've integrated this with a Vim plugin called <a href="http://peterodding.com/code/vim/notes/" target="_blank">notes.vim</a>, which allows me to link tasks from meeting minutes and other notes I have tucked away.</p>
<p>Next, I found that I got a <strong>lot</strong> of requests via email. It became tedious copying and pasting these into TaskWarrior, so I set up Postfix to dump tasks sent to a specific address into TaskWarrior, with the notes section having the body of the email. From here, I can triage all the emails that require work from me and make sure that they get finished on time.</p>
<p>I realize everyone has their own system, but this works for me!</p>
]]></content:encoded>
			<wfw:commentRss>http://iamnafets.com/tech/?feed=rss2&#038;p=55</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
		<item>
		<title>Clear Facebook Newsfeed/Wall Using Javascript</title>
		<link>http://iamnafets.com/tech/?p=35&#038;utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=clear-facebook-newsfeed-using-javascript</link>
		<comments>http://iamnafets.com/tech/?p=35#comments</comments>
		<pubDate>Thu, 22 Apr 2010 08:21:37 +0000</pubDate>
		<dc:creator>iamnafets</dc:creator>
				<category><![CDATA[facebook]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://iamnafets.com/tech/?p=35</guid>
		<description><![CDATA[It's been brought to my attention that this is also referred to as the wall, thus (and for search engine purposes), this post details how to clear facebook wall using javascript. My roommate asked me if there was an easier way to clear the facebook news feed. When you have several years of "now friends [...]]]></description>
			<content:encoded><![CDATA[<p>It's been brought to my attention that this is also referred to as the wall, thus (and for search engine purposes), this post details how to clear facebook wall using javascript.</p>
<p>My roommate asked me if there was an easier way to clear the facebook news feed. When you have several years of "now friends with" and "commented", this process becomes rather tedious especially given the delete confirmation. Here is a bookmarklet that you can type in the URL bar that will do the process for you (albeit a little slowly).</p>
<p><span id="more-35"></span></p>
<p><strong>WARNING: This code was written and tested on 4/22/10. Facebook could change their site layout at any time. I offer no guarantees as to the utility or non-destructiveness of this script. It worked when I tested it but there is a small possibility things could go wrong. Use at your own risk.</strong></p>
<p>To use, copy the first line (without the "//", so that it reads "javascript:...") into your address bar and hit enter. Then wait for the magic to stop.</p>
<p>I realize there are some nasty pieces in here (e.g. the code spins to wait on the AJAX requests). This is a "hack" and I have no intention of making it seem otherwise.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="660" height="405" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/yrpmoMO25j8&amp;hl=en_US&amp;fs=1&amp;rel=0&amp;border=1" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="660" height="405" src="http://www.youtube.com/v/yrpmoMO25j8&amp;hl=en_US&amp;fs=1&amp;rel=0&amp;border=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p><script src="http://gist.github.com/374962.js"></script></p>
<p>Credit <a href="http://daringfireball.net/2007/03/javascript_bookmarklet_builder">Daring Fireball</a> for the bookmarklet conversion script.</p>
]]></content:encoded>
			<wfw:commentRss>http://iamnafets.com/tech/?feed=rss2&#038;p=35</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>boost::lambda</title>
		<link>http://iamnafets.com/tech/?p=18&#038;utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=boostlambda</link>
		<comments>http://iamnafets.com/tech/?p=18#comments</comments>
		<pubDate>Mon, 19 Oct 2009 07:13:17 +0000</pubDate>
		<dc:creator>iamnafets</dc:creator>
				<category><![CDATA[c++]]></category>
		<category><![CDATA[Boost]]></category>
		<category><![CDATA[foreach]]></category>
		<category><![CDATA[Functional]]></category>
		<category><![CDATA[Lambda]]></category>

		<guid isPermaLink="false">http://iamnafets.com/tech/?p=18</guid>
		<description><![CDATA[Computer programmers are designed to see patterns everywhere; we discover the systems that underly processes and phenomena for the advantage of our software. Usually, the same watchful eye that looks for patterns in shipping routes also looks for routine in his/her own work. The evolution of languages is a direct consequence of those observations. As [...]]]></description>
			<content:encoded><![CDATA[<p>Computer programmers are designed to see patterns everywhere; we discover the systems that underly processes and phenomena for the advantage of our software. Usually, the same watchful eye that looks for patterns in shipping routes also looks for routine in his/her own work. The evolution of languages is a direct consequence of those observations. As it became clear that programs were oriented around data structures with associated functions, OOP was born. C++ is evolving. Slowly. By committee. But the fellows at the <a href="http://www.boost.org/">Boost project</a> are making artful use of template meta programming, operator overloading, and general trickery to bring the advances of modern, dynamic languages into the statically checked world of C++. Cheers.</p>
<p><span id="more-18"></span></p>
<p>So, you just got started with C.<br />
<script src="http://gist.github.com/213020.js"></script></p>
<p>C++ STL introduces vectors.<br />
<script src="http://gist.github.com/213022.js"></script></p>
<p>...and iterators.<br />
<script src="http://gist.github.com/213023.js"></script></p>
<p>...and some hideous ways to do simple things.<br />
<script src="http://gist.github.com/213027.js"></script></p>
<p>Boost makes it easy.<br />
<script src="http://gist.github.com/213028.js"></script></p>
<p>And powerful.<br />
<script src="http://gist.github.com/213029.js"></script></p>
]]></content:encoded>
			<wfw:commentRss>http://iamnafets.com/tech/?feed=rss2&#038;p=18</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google Calendar Retrieve Events for Additional Calendars</title>
		<link>http://iamnafets.com/tech/?p=14&#038;utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=google-calendar-retrieve-events-for-additional-calendars</link>
		<comments>http://iamnafets.com/tech/?p=14#comments</comments>
		<pubDate>Thu, 08 Oct 2009 17:07:37 +0000</pubDate>
		<dc:creator>iamnafets</dc:creator>
				<category><![CDATA[python]]></category>
		<category><![CDATA[additional calendars]]></category>
		<category><![CDATA[gdata]]></category>
		<category><![CDATA[google calendar]]></category>

		<guid isPermaLink="false">http://iamnafets.com/tech/?p=14</guid>
		<description><![CDATA[I've been experimenting with an idea that mergers Remember the Milk (RTM) and Google Calendar. Problem is, their APIs are a bit less documented than I originally expected. No matter, the internet to the rescue! Google calendar provides some pretty neat examples for how to login and retrieve all the events on your default calendar, [...]]]></description>
			<content:encoded><![CDATA[<p>I've been experimenting with an idea that mergers Remember the Milk (RTM) and Google Calendar. Problem is, their APIs are a bit less documented than I originally expected. No matter, the internet to the rescue!</p>
<p><span id="more-14"></span></p>
<p>Google calendar provides some pretty neat examples for how to login and retrieve all the events on your default calendar, but neglects to mention additional private calendars under your account. The distinction, which isn't documented, is that when you create additional calendars <a href="http://markmail.org/message/t37i7p5i36krl2dc#query:google%20calendar%20%22incorrect%20private%20url%22+page:1+mid:2jxiepfamtzmuosp+state:results">they are not actually assigned your username</a> but instead get a unique username so they can migrate between user accounts. Secondly, while you can authenticate yourself for private events on your own calendar, you can't authenticate against this new username. This has two implications:</p>
<p>1) Username/password authentication won't work (we'll use magic cookie).<br />
2) The private event feed requires a unique key.</p>
<p>Thus <a href="http://code.google.com/apis/calendar/data/1.0/developers_guide_python.html#RetrievingDateRange">what was formerly</a>:<br />
<script src="http://gist.github.com/213034.js"></script><br />
Becomes:<br />
<script src="http://gist.github.com/213037.js"></script><br />
As far as I can tell, the private key can only be accessed from within the "Calendar Properties" inside of Google Calendar. Additionally, if you copy and paste the result, you will end up with an HTML-escaped @ (%40). Be sure to replace this with an @, otherwise you'll get an invalid user ID.</p>
<p>Hopefully this helps! Comment with any questions and I'll try to answer them.</p>
]]></content:encoded>
			<wfw:commentRss>http://iamnafets.com/tech/?feed=rss2&#038;p=14</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

