<?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>Hotchkiss Consulting &#187; General</title>
	<atom:link href="http://hotchkissconsulting.net/category/general/feed/" rel="self" type="application/rss+xml" />
	<link>http://hotchkissconsulting.net</link>
	<description>Just another WordPress site</description>
	<lastBuildDate>Thu, 12 Apr 2012 21:30:42 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>Pomodoro-Friendly Junior-Size Planning Pages for 2012</title>
		<link>http://hotchkissconsulting.net/pomodoro-friendly-junior-size-planning-pages-for-2012/</link>
		<comments>http://hotchkissconsulting.net/pomodoro-friendly-junior-size-planning-pages-for-2012/#comments</comments>
		<pubDate>Wed, 28 Dec 2011 04:19:11 +0000</pubDate>
		<dc:creator>Sam Hotchkiss</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://hotchkissconsulting.net/?p=292</guid>
		<description><![CDATA[I&#8217;m a huge fan of the Pomodoro Technique, and worked up these planning pages for 2012&#8211; I do 45 minute Pomodoros, up to 8 a day, so I have spaces to check off up to 8 pomodoros&#8211; if you do shorter pomodoros, you can cross-check for twice as many (cross off one diagonal for one [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m a huge fan of the <a href="http://www.pomodorotechnique.com/">Pomodoro Technique</a>, and worked up these planning pages for 2012&#8211; I do 45 minute Pomodoros, up to 8 a day, so I have spaces to check off up to 8 pomodoros&#8211; if you do shorter pomodoros, you can cross-check for twice as many (cross off one diagonal for one pomodoro, a second, to make an X, for your second)</p>
<p>These are junior size, prepared on letter size&#8211; this is the correct size to print onto Junior sized paper in your printer, just leave the printer set up for Letter.</p>
<p>Without any further ado&#8230;</p>
<p><a href='http://hotchkissconsulting.net/wp-content/uploads/2011/12/2012PomodoroPlanningPages.pdf'>2012 Pomodoro Planning Pages (PDF)</a></p>
]]></content:encoded>
			<wfw:commentRss>http://hotchkissconsulting.net/pomodoro-friendly-junior-size-planning-pages-for-2012/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>I&#8217;m a dink.</title>
		<link>http://hotchkissconsulting.net/im-a-dink/</link>
		<comments>http://hotchkissconsulting.net/im-a-dink/#comments</comments>
		<pubDate>Wed, 13 Jul 2011 23:49:28 +0000</pubDate>
		<dc:creator>Sam Hotchkiss</dc:creator>
				<category><![CDATA[Consulting]]></category>
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://hotchkissconsulting.net/?p=283</guid>
		<description><![CDATA[So, Becky and I have been watching 80&#8242;s sitcoms on Netflix lately, and this word keeps coming up.  &#8220;Dink&#8221;. I guess I was too young when the 80&#8242;s ended to fully embrace and appreciate this word, but it fully describes how I feel about myself right now.  I have always hated it when web developers [...]]]></description>
			<content:encoded><![CDATA[<p>So, Becky and I have been watching 80&#8242;s sitcoms on Netflix lately, and this word keeps coming up.  &#8220;Dink&#8221;.</p>
<p>I guess I was too young when the 80&#8242;s ended to fully embrace and appreciate this word, but it fully describes how I feel about myself right now.  I have always hated it when web developers have crappy sites, or incomplete sites, and especially when they put up stupid cliches like &#8220;the cobbler&#8217;s children have no shoes&#8221;.</p>
<p>This site has been completely barren of content for the better part of the last 8 months, because toward the end of last year, I was migrating hosts and didn&#8217;t properly backup before hitting the fateful &#8220;terminate instance&#8221; button.  Lost 50+ blog posts which were generating hundreds of hits a day, lost all of my portfolio, about pages, everything.</p>
<p>I found an old backup which had 20 or so of my posts, and put those back.  I&#8217;ve restored the screen shots of my portfolio, but still need to write the descriptions for each of the projects featured.  I&#8217;ve redesigned the site and got that up.  I&#8217;m going to be working on re-writing some of my more popular blog posts which were lost, and posting some new stuff.</p>
<h3>Sorry for being a dink.</h3>
]]></content:encoded>
			<wfw:commentRss>http://hotchkissconsulting.net/im-a-dink/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ditch the Bacn, get the email you want.</title>
		<link>http://hotchkissconsulting.net/filter-out-bacn-gmail/</link>
		<comments>http://hotchkissconsulting.net/filter-out-bacn-gmail/#comments</comments>
		<pubDate>Wed, 27 May 2009 20:59:24 +0000</pubDate>
		<dc:creator>Sam Hotchkiss</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[How-To]]></category>

		<guid isPermaLink="false">http://hotchkissconsulting.net/?p=205</guid>
		<description><![CDATA[The term &#8216;Bacn&#8216; has been around for a couple of years to refer to, according to wikipedia: electronic messages which have been subscribed to and are therefore not unsolicited but are often unread by the recipient for a long period of time, if at all. Bacn has been described as &#8220;email you want but not [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://hotchkissconsulting.net/wp-content/uploads/2009/05/bacon1.jpg"><img class="alignleft size-medium wp-image-206" title="Mmmm, Bacn" src="http://hotchkissconsulting.net/wp-content/uploads/2009/05/bacon-242x300.jpg" alt="Mmmm, Bacn" width="242" height="300" /></a>The term &#8216;<a href="http://en.wikipedia.org/wiki/Bacon_(electronic)">Bacn</a>&#8216; has been around for a couple of years to refer to, according to wikipedia:</p>
<blockquote><p>electronic messages which have been subscribed to and are therefore not unsolicited but are often unread by the recipient for a long period of time, if at all. Bacn has been described as &#8220;<a class="mw-redirect" title="Email" href="http://en.wikipedia.org/wiki/Email">email</a> you want but not right now.&#8221;<sup id="cite_ref-0" class="reference"><a href="http://en.wikipedia.org/wiki/Bacon_%28electronic%29#cite_note-0"><span>[</span>1<span>]</span></a></sup><sup id="cite_ref-1" class="reference"><a href="http://en.wikipedia.org/wiki/Bacon_%28electronic%29#cite_note-1"><span>[</span>2<span>]</span></a></sup></p>
<p>Bacn differs from <a title="E-mail spam" href="http://en.wikipedia.org/wiki/E-mail_spam">spam</a> in that the emails are not unsolicited: the recipient has somehow signed up to receive it. Bacn is also not necessarily sent in bulk. Bacn derives its name from the idea that it is &#8220;better than spam, but not as good as a personal email&#8221;</p></blockquote>
<p>Bacn is, generally, non-urgent, not terribly exciting, but may still be information that you want and need.</p>
<p><em><strong>So we&#8217;ve got Spam, Bacn, and then email that actually matters&#8211; personal email from one person to another (you!).  I&#8217;ll call that chops.  So, how do you keep current on your chops without getting distracted by the spam and bacn?</strong></em></p>
<p>At Hotchkiss Consulting we use Google Apps to manage our email,  and it does a great job of removing the Spam.  But I can&#8217;t stand when I&#8217;m in the middle of a project and I get distracted by the constant inflow of Bacn, so I decided to get rid of it!  Since Google Apps is built on the Gmail core, these instructions should work for any gmail user.  Feel free to modify to fit your needs!<span id="more-205"></span></p>
<p><strong>a) Add a couple categories to keep stuff straight</strong></p>
<p style="padding-left: 30px;">I created two new categories, &#8220;Bacn&#8221; and &#8220;Chops&#8221;.  You can call these whatever you want.</p>
<p><strong>b) Create filters to get that unruly Bacn in its place</strong></p>
<p style="padding-left: 30px;">I was able to handle everything in 4 filters (add filters by clicking on &#8216;Settings&#8217; then the &#8216;Filters&#8217; tab):</p>
<h2 style="padding-left: 30px;">1) Identify and label the chops:</h2>
<p style="padding-left: 60px;"><strong>From</strong>: -{wordpress, support, no-reply, noreply, do-not-reply, help, null, owner, updates, sales, messages, jobs, notification, info, team, research, invitations, hello, webmaster, service, member, root, digest, email@, daemon, talktous, news, newsletter, anonredir, jagent, admin, cpanel, helpdesk, specials, postmaster, bounce, autocreate, linkedin.com, billing, auto}</p>
<p style="padding-left: 60px;"><em>This tells it that if the email contains any of the above strings, all of which are common in Bacn, that it is not chops</em> <em>(the -{ at the beginning indicates that it needs to EXCLUDE email with any of these strings in the from field)</em></p>
<p style="padding-left: 60px;"><strong>To</strong>: My email address</p>
<p style="padding-left: 60px;"><em>So&#8211; put in your email address here.  This will keep many mailing lists excluded.  Depending on your email setup, this may or may not work for you.</em></p>
<p style="padding-left: 60px;"><strong>Doesn&#8217;t have</strong>: &#8220;If you didn’t want to receive this email&#8221;, &#8220;If you prefer not to receive email&#8221;, &#8220;Validation Email&#8221;, &#8220;Dear Customer&#8221;, &#8220;You have received this email because&#8221;, &#8220;This email was sent to &#8220;, &#8220;fill out this short survey&#8221;, &#8220;You are receiving this email because&#8221;, &#8220;Unsubscribe at&#8221;, &#8220;To stop receiving these emails&#8221;, &#8220;to be removed from further&#8221;, &#8220;To unsubscribe or change&#8221;, &#8220;If you choose not to receive&#8221;, &#8220;simply unsubscribe&#8221;, &#8220;subscription via the link&#8221;, &#8220;If you would like to be removed from future&#8221;</p>
<p style="padding-left: 60px;"><em>These strings are common in Bacn, and uncommon in Chops.  By looking for them, we&#8217;re further reducing the Bacn in your Chops.</em></p>
<p style="padding-left: 30px;">Do a test search and check out all your chops.  Looking good, huh?  If you think so, click on &#8220;Next Step&#8221;, and tell it to apply the label &#8220;Chops&#8221; and check the box next to &#8220;Also apply filter to &#8230; conversations below.&#8221;</p>
<h2 style="padding-left: 30px;">2) Send the bacn packing:</h2>
<p style="padding-left: 30px;">These 3 filters will identify bacn, and you can do what you want with it.  I have my gmail mark it as Bacn and archive it.  This way it bypasses my email notification tool, but is still available for later review.</p>
<h3 style="padding-left: 60px;">Filter 1</h3>
<p style="padding-left: 60px;"><strong>From</strong>: {wordpress OR support OR no-reply OR noreply OR do-not-reply OR help OR null OR owner OR updates OR sales OR messages OR jobs OR notification OR info OR team OR research OR invitations OR hello OR webmaster OR service OR member OR root OR digest OR email@ OR daemon OR talktous OR news OR newsletter OR anonredir OR jagent OR admin OR cpanel OR helpdesk OR specials OR postmaster OR bounce OR autocreate OR linkedin.com OR billing OR auto}</p>
<h3 style="padding-left: 60px;">Filter 2</h3>
<p style="padding-left: 60px;"><strong>Has the Words</strong>: &#8220;If you didn’t want to receive this email&#8221; OR &#8220;If you prefer not to receive email&#8221; OR &#8220;Validation Email&#8221; OR &#8220;Dear Customer&#8221; OR &#8220;You have received this email because&#8221; OR &#8220;This email was sent to &#8221; OR &#8220;fill out this short survey&#8221; OR &#8220;You are receiving this email because&#8221; OR &#8220;Unsubscribe at&#8221; OR &#8220;To stop receiving these emails&#8221; OR &#8220;to be removed from further&#8221; OR &#8220;To unsubscribe or change&#8221; OR &#8220;If you choose not to receive&#8221; OR &#8220;simply unsubscribe&#8221; OR &#8220;subscription via the link&#8221; OR &#8220;If you would like to be removed from future&#8221;</p>
<h3 style="padding-left: 60px;">Filter 3</h3>
<p style="padding-left: 60px;">The last filter I use is to put my email in both the from and to field.  This picks up any messages that aren&#8217;t either from or to me.</p>
<h2>Did this work for you?  Do you have any other suggestions?  Let me know!  Together, we&#8217;ll beat the spam, we&#8217;ll beat the bacn, and we&#8217;ll be rolling in chops!</h2>
]]></content:encoded>
			<wfw:commentRss>http://hotchkissconsulting.net/filter-out-bacn-gmail/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>New eMail-based notes manager released for free!</title>
		<link>http://hotchkissconsulting.net/email-based-notes-manager/</link>
		<comments>http://hotchkissconsulting.net/email-based-notes-manager/#comments</comments>
		<pubDate>Thu, 23 Apr 2009 15:17:18 +0000</pubDate>
		<dc:creator>Sam Hotchkiss</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Services]]></category>

		<guid isPermaLink="false">http://hotchkissconsulting.net/?p=182</guid>
		<description><![CDATA[Hello everyone&#8230; sorry for the delay since my last update, Becky and I are both working on fighting off this killer cold that&#8217;s working its way through Colorado! Last night, I cooked up a new service to allow you to manage notes via email. It&#8217;s free, and is really aimed at mobile email users (and, [...]]]></description>
			<content:encoded><![CDATA[<p>Hello everyone&#8230; sorry for the delay since my last update, Becky and I are both working on fighting off this killer cold that&#8217;s working its way through Colorado!</p>
<p>Last night, I cooked up a new service to allow you to manage notes via email.  It&#8217;s free, and is really aimed at mobile email users (and, in particular, <a href="http://getpeek.com/">Peek</a> users).  It&#8217;s really easy to use, it doesn&#8217;t require signup, and I think it&#8217;s pretty cool.</p>
<p>To get started, all you have to do is pick a secret email box.  The harder to guess, the better, because if anyone guesses it, they can get into your notes!  This can be any sort of string you want, like &#8220;dahsgdjhab1234&#8243;.  Then, after this string, add &#8220;@hdev2.com&#8221;.  So your note email box would be dahsgdjhab1234@hdev2.com.  Don&#8217;t tell anyone what it is!  Not even me!  Just start sending notes to it.  When you send the first note, you&#8217;ll automatically get a message back with instructions on how to use the service.  Here&#8217;s what that message might say, if you&#8217;re curious:</p>
<blockquote><p>Hi!  Either you just signed up, or you want some help, right?  Well, you came to the right place!  First things first, you should probably write down your notes email address.  This is really important, as I can’t communicate with you without it!  Always send your requests to:</p>
<p>THE SUPER SECRET ADDRESS YOU CHOSE!</p>
<p>Now, if you want to store a note, just send it to that address.  It’s that easy!  I’ll put it into my database and keep it safe for you.  If you want to do stuff with your notes, just put one of the following basic commands at either the beginning or end of the subject line of your email, and I’ll act on it!</p>
<p>!a – All Notes.  If you use this, I will send you the title and body of all of your notes.  If you are a heavy user, this could be a big email!<br />
!l – List of Notes.  If you use this command, I will send you a list of the titles all of your notes (even the ones you deleted!)<br />
!h – HELP!!!  If you use this command, I’ll send you this email again</p>
<p>There are some advanced commands, too.  For these, you have to put the Note ID of the note you’re talking about as the first thing in the body of your email.  If you don’t know the Note ID, ask for the list of notes first, and that will have the IDs of all your notes!</p>
<p>!s – Single Note.  If you use this, I’ll just send you the note you ask for.<br />
!d – Delete Note.  If you use this, I’ll delete the note you tell me to.  (Actually, I won’t really delete it, cause I think you might want it back some day, but I will make it inactive so it doesn’t clutter up your workflow!)<br />
!r – Restore Note.  If you use this command, I’ll undelete your note.  (See, I knew you’d want it back!)</p></blockquote>
<p>And that&#8217;s that!</p>
<p>Questions, comments?  Post em below&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://hotchkissconsulting.net/email-based-notes-manager/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Remember the Milk Email Scripts</title>
		<link>http://hotchkissconsulting.net/remember-the-milk-email-scripts/</link>
		<comments>http://hotchkissconsulting.net/remember-the-milk-email-scripts/#comments</comments>
		<pubDate>Mon, 13 Apr 2009 00:00:45 +0000</pubDate>
		<dc:creator>Sam Hotchkiss</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[How-To]]></category>
		<category><![CDATA[Technologies]]></category>

		<guid isPermaLink="false">http://hotchkissconsulting.net/?p=177</guid>
		<description><![CDATA[I know I&#8217;ve been promising these for a while, but here are the three PHP scripts that make up my PHP -&#62; Email integration.  I&#8217;m still working on converting this to a full multi-user system.  You can see I already started with the conversion on the schedule dispatch email.  Full scripts after the jump! Schedule [...]]]></description>
			<content:encoded><![CDATA[<p>I know I&#8217;ve been promising these for a while, but here are the three PHP scripts that make up my PHP -&gt; Email integration.  I&#8217;m still working on converting this to a full multi-user system.  You can see I already started with the conversion on the schedule dispatch email.  Full scripts after the jump!</p>
<p><span id="more-177"></span></p>
<h2>Schedule Sending</h2>
<p><em>This script sends out an email to you with your full upcoming schedule.</em></p>
<p>[php]&lt;?php<br />
mysql_connect(&#8216;{SQL SERVER}&#8217;,&#8217;[SQL USER}','{SQL PASSWORD}');<br />
@mysql_select_db('rtm_memory') or die( &quot;Unable to select database&quot;);<br />
$sql = &quot;select * from users where active = 1;&quot;;<br />
$users = mysql_query($sql);<br />
while($user = mysql_fetch_array($users)) {</p>
<p>//what's the current hour?<br />
$curHour = date(G);<br />
$userID = $user['id'];<br />
$sql = &quot;select * from hours where userID = &#8216;$userID&#8217; and hour = &#8216;$curHour&#8217;;&quot;;<br />
$hours = mysql_query($sql);<br />
$hourc = mysql_num_rows($hours);<br />
if ($hourc == 0){<br />
exit;<br />
}</p>
<p>//First, get the list of incomplete tasks, this list is sorted in reverse chronoligical order by due date. (The higher an item&#8217;s value in the array, the sooner it needs to be done)<br />
//I opted to get the list in JSON format for easy manipulation. It&#8217;s what I&#8217;m comfortable with. It&#8217;s also available in REST.</p>
<p>//This API call is static, so we can just go ahead and calculate the sign<br />
$apiCallVars = &#8216;{SHARED SECRET}api_key{API KEY}auth_token&#8217;.$user['token'].&#8217;filterstatus:incompleteformatjsonfrob&#8217;.$user['frob'].&#8217;methodrtm.tasks.getList&#8217;;</p>
<p>$sig = md5($apiCallVars);</p>
<p>//And build the URI<br />
$url = &#8216;http://www.rememberthemilk.com/services/rest/?api_key={API KEY}&amp;auth_token=&#8217;.$user['token'].&#8217;&amp;filter=status:incomplete&amp;format=json&amp;frob=&#8217;.$user['frob'].&#8217;&amp;method=rtm.tasks.getList&amp;api_sig=&#8217;.$sig;<br />
//echo $url;<br />
//And retrieve and decode the response<br />
$response = file_get_contents($url);<br />
$tasks = json_decode($response);</p>
<p>//Make sure the string is good, if it&#8217;s not, keep trying until it is (up to 100 tries)!<br />
$rt = 0;<br />
while ($tasks-&gt;rsp-&gt;stat != &#8216;ok&#8217; &amp;&amp; $rt &lt; 100) {<br />
$response = file_get_contents($url);<br />
$tasks = json_decode($response);<br />
$rt++;<br />
}<br />
//var_dump($tasks);<br />
if ($tasks-&gt;rsp-&gt;stat != &#8216;ok&#8217;) {<br />
//Start building our email with a failure notice<br />
$body = &quot;Communications error with Remember The Milk. Sorry!<br />
&quot;;<br />
} else {<br />
//Start building our email with a Past Due header for the first tasks. I almost always have something past due, so I keep this there always<br />
$body = $body . &quot;Past Due:<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
&quot;;<br />
}</p>
<p>//I opted to break up my list into Past Due, Upcoming, and Future events, so I need to get the current time<br />
$now = time();</p>
<p>//And set the future time 1 week from now (604,800 seconds)<br />
$future = time() + 604800;</p>
<p>//Have we reached current events?<br />
$nt = 0;</p>
<p>//Have we reached future events? (we set nt and ft so that it doesn&#8217;t show the headers more than once)<br />
$ft = 0;</p>
<p>//How many tasks are there? Find out and subtract 1 because our counting starts at 0<br />
//Note: I indicate the use of list 1 because that&#8217;s the list that all of my tasks are in (my inbox), YMMV. If you build this<br />
//and get errors, try switching list[$listCount] to list['0'] thoughout the script</p>
<p>$tc = count($tasks-&gt;rsp-&gt;tasks-&gt;list-&gt;taskseries);</p>
<p>$tc&#8211;;</p>
<p>//Process each task<br />
while ($tc &gt; -1) {<br />
//Pull out the name and due date&#8230; that&#8217;s all I use on RTM&#8230; if you use more, then you can include them. Not a big problem.</p>
<p>$name = $tasks-&gt;rsp-&gt;tasks-&gt;list-&gt;taskseries[$tc]-&gt;name;<br />
$date = $tasks-&gt;rsp-&gt;tasks-&gt;list-&gt;taskseries[$tc]-&gt;task-&gt;due;</p>
<p>//Convert the due date/time to my timezone, MST (my server is in PST), and then put it into a friendly format<br />
$ts = strtotime($date) + 3600;<br />
$time = date(&#8216;D, M j g:ia&#8217;, $ts);</p>
<p>//Check to see if this is the first &quot;Upcoming&quot; or &quot;Future&quot; task, if so, put on the appropriate header<br />
if ($now &lt; $ts &amp;&amp; $nt == 0) {<br />
$nt = 1;<br />
$body = $body.&quot;<br />
Upcoming:<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
&quot;;<br />
}<br />
if ($future &lt; $ts &amp;&amp; $ft == 0) {<br />
$ft = 1;<br />
$body = $body.&quot;<br />
Future:<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
&quot;;<br />
}</p>
<p>//Build the string we&#8217;re going to add to the body. This is just the time string &#8211; the task name and a line break, for example<br />
//Thu, Mar 5 3:30pm &#8211; Meet the Qwest Installer<br />
$bodyl = $time.&quot; &#8211; &quot;.$name.&quot;<br />
&quot;;</p>
<p>//Pin this onto the body<br />
$body = $body.$bodyl;</p>
<p>//Reduce the count<br />
$tc&#8211;;<br />
}</p>
<p>//I now use the unix &quot;cal&quot; command to generate the next 4 months in plaintext calendar format to append to the end of the message<br />
ob_start();<br />
$cM = date(&#8216;m&#8217;);<br />
$com = &quot;cal &quot;.$cM.&quot; 2009&quot;;<br />
passthru($com, $cal1);<br />
$cM++;<br />
$com = &quot;cal &quot;.$cM.&quot; 2009&quot;;<br />
passthru($com, $cal2);<br />
$cM++;<br />
$com = &quot;cal &quot;.$cM.&quot; 2009&quot;;<br />
passthru($com, $cal3);<br />
$cM++;<br />
$com = &quot;cal &quot;.$cM.&quot; 2009&quot;;<br />
passthru($com, $cal4);<br />
$calData = ob_get_contents();<br />
ob_end_clean();</p>
<p>//Pin that calendar data on<br />
$body = $body.&quot;</p>
<p>&quot;.$calData;</p>
<p>//Lets also put a note at the bottom about the number of communications tries it took:<br />
$body = $body.&quot;</p>
<p>RTM reached after &quot;.$rt.&quot; retries.</p>
<p>This schedule sent to you courtesy of Hotchkiss Consulting (http://hotchkissconsulting.net/)&quot;;<br />
//Output the email body<br />
echo $body;</p>
<p>//Build and send the email<br />
$to = $user['email'];<br />
$subject = &#8216;My Schedule&#8217;;<br />
$message = $body;<br />
$headers = &#8216;From: rtm@hotchkissconsulting.net&#8217; . &quot;rn&quot; . &#8216;Reply-To: rtm@hotchkissconsulting.net&#8217; . &quot;rn&quot; . &#8216;X-Mailer: PHP/&#8217; . phpversion();<br />
mail($to, $subject, $message, $headers);<br />
} ?&gt;[/php]</p>
<h2>Notification Sending</h2>
<p><em>This script sends out a notification email to you with appointments coming up within the next 30 minutes.</em></p>
<p>[php]&lt;?php</p>
<p>//Lets get ourselves a timeline<br />
$key = md5(&#8216;{SHARED SECRET}api_key{API KEY}auth_token{AUTH TOKEN}formatjsonfrob{FROB}methodrtm.timelines.create&#8217;);<br />
$url = &#8216;http://www.rememberthemilk.com/services/rest/?api_key={API KEY}&amp;auth_token={AUTH TOKEN}&amp;format=json&amp;frob={FROB}&amp;method=rtm.timelines.create&amp;api_sig=&#8217;.$key;<br />
$response1 = file_get_contents($url);<br />
$tl = json_decode($response1);<br />
$timeline = $tl-&gt;rsp-&gt;timeline;</p>
<p>//And download the tasks list<br />
//This API call is static, so we can just go ahead and calculate the sign<br />
$sig = md5(&#8216;{SHARED SECRET}api_key{API KEY}auth_token{AUTH TOKEN}filterstatus:incompleteformatjsonfrob{FROB}methodrtm.tasks.getList&#8217;);</p>
<p>//And build the URI<br />
$url = &#8216;http://www.rememberthemilk.com/services/rest/?api_key={API KEY}&amp;auth_token={AUTH TOKEN}&amp;filter=status:incomplete&amp;format=json&amp;frob={FROB}&amp;method=rtm.tasks.getList&amp;api_sig=&#8217;.$sig;</p>
<p>//And retrieve and decode the response<br />
$response = file_get_contents($url);<br />
$tasks = json_decode($response);</p>
<p>//Make sure the string is good, if it&#8217;s not, keep trying until it is (up to 30 tries)!<br />
$rt = 0;<br />
while ($tasks-&gt;rsp-&gt;stat != &#8216;ok&#8217; &amp;&amp; $rt &lt; 30) {<br />
$response = file_get_contents($url);<br />
$tasks = json_decode($response);<br />
$rt++;<br />
}</p>
<p>//Get the current time so we know whether or not to send an alert<br />
$now = time();</p>
<p>//How many tasks are there?  Find out and subtract 1 because our counting starts at 0<br />
//Note: I indicate the use of list 1 because that&#8217;s the list that all of my tasks are in (my inbox), YMMV.  If you build this<br />
//and get errors, try switching list to list['0'] thoughout the script<br />
$tc = count($tasks-&gt;rsp-&gt;tasks-&gt;list-&gt;taskseries);<br />
$tc&#8211;;</p>
<p>//Set the email headers now so it doesn&#8217;t do it repeatedly through the while statement<br />
$headers = &#8216;From: {FROM ADDRESS}&#8217; . &quot;rn&quot; .<br />
 &#8216;Reply-To: {FROM ADDRESS}&#8217; . &quot;rn&quot; .<br />
 &#8216;X-Mailer: PHP/&#8217; . phpversion();<br />
$to = &#8216;sam@samandbecky.net&#8217;;</p>
<p>//Run this for every task<br />
while ($tc &gt; -1) {<br />
//Get the list ID<br />
$lid = $tasks-&gt;rsp-&gt;tasks-&gt;list-&gt;id;</p>
<p>//Get the task title<br />
$name = $tasks-&gt;rsp-&gt;tasks-&gt;list-&gt;taskseries[$tc]-&gt;name;</p>
<p>//get the task notes<br />
$notes = $tasks-&gt;rsp-&gt;tasks-&gt;list-&gt;taskseries[$tc]-&gt;notes;</p>
<p>//Get the due date<br />
$date = $tasks-&gt;rsp-&gt;tasks-&gt;list-&gt;taskseries[$tc]-&gt;task-&gt;due;</p>
<p>//Get the estimated time field which I use to see if I&#8217;ve sent a notification for this task yet<br />
$notified = $tasks-&gt;rsp-&gt;tasks-&gt;list-&gt;taskseries[$tc]-&gt;task-&gt;estimate;</p>
<p>//Get the task series ID<br />
$tsid = $tasks-&gt;rsp-&gt;tasks-&gt;list-&gt;taskseries[$tc]-&gt;id;</p>
<p>//Get the task ID<br />
$tid = $tasks-&gt;rsp-&gt;tasks-&gt;list-&gt;taskseries[$tc]-&gt;task-&gt;id;</p>
<p>//Convert both the task time and the current time into my time zone, MST from PST and make the due date pretty<br />
$ts = strtotime($date) + 3600;<br />
$now = time() + 3600;<br />
$time = date(&#8216;D, M j g:ia&#8217;, $ts);</p>
<p>//Calculate the difference, in seconds, between now and when the task is due<br />
$tt = $ts &#8211; $now;</p>
<p>//Build a notify string that indicates the day so that we are reminded more than once<br />
//for recurring tasks<br />
$notificationVal = date(&#8216;zy&#8217;) . &#8216;min&#8217;;</p>
<p>//Notify if the task is due in fewer than 30 minutes (1,800 seconds) and a notification hasn&#8217;t already been sent.<br />
//We also check to make sure that the task wasn&#8217;t due more than 2 hours ago.  This prevents an issue with repeating<br />
//tasks where they will notify over and over.<br />
if ($tt &lt; 1800 &amp;&amp; $tt &gt; -7200 &amp;&amp; $notified != $notificationVal) {</p>
<p>//The email subject will be the task name, then a dash, then the Task ID, Task Series ID, and List ID delimited by commas<br />
$subject = $name.&quot; &#8211; &quot;.$tid.&#8217;.&#8217;.$tsid.&#8217;.&#8217;.$lid;</p>
<p>//The email body contains the due time and the notes<br />
$message = &quot;Due: &quot;.$time.&quot;<br />
Notes: &quot;.$notes['0'];</p>
<p>//send the email<br />
mail($to, $subject, $message, $headers);</p>
<p>//Now we&#8217;re going to make it as notification sent by setting the estimated time to complete to our notification val</p>
<p>//first build the sig<br />
$toHash = &#8216;{SHARED SECRET}api_key{API KEY}auth_token{AUTH TOKEN}estimate&#8217;.$notificationVal.&#8217;formatjsonfrob{FROB}list_id{LIST ID}methodrtm.tasks.setEstimatetask_id&#8217;.$tid.&#8217;taskseries_id&#8217;.$tsid.&#8217;timeline&#8217;.$timeline;<br />
$sig = md5($toHash);</p>
<p>//then build our query URL<br />
$url =&#8217;http://www.rememberthemilk.com/services/rest/?api_key={API KEY}&amp;auth_token={AUTH TOKEN}&amp;estimate=&#8217;.$notificationVal.&#8217;&amp;format=json&amp;frob={FROB}&amp;list_id={LIST ID}&amp;method=rtm.tasks.setEstimate&amp;task_id=&#8217;.$tid.&#8217;&amp;taskseries_id=&#8217;.$tsid.&#8217;&amp;timeline=&#8217;.$timeline.&#8217;&amp;api_sig=&#8217;.$sig;</p>
<p>//then submit the query.  Voila!<br />
//And retrieve and decode the response<br />
$response3 = file_get_contents($url);<br />
$result = json_decode($response3);</p>
<p>//Make sure the string is good, if it&#8217;s not, keep trying until it is (up to 30 tries)!<br />
$rt = 0;<br />
while ($result-&gt;rsp-&gt;stat != &#8216;ok&#8217; &amp;&amp; $rt &lt; 100) {<br />
$response3 = file_get_contents($url);<br />
$result = json_decode($response3);<br />
$rt++;<br />
}<br />
}</p>
<p>//Move on to the next task<br />
$tc&#8211;;<br />
}</p>
<p>?&gt;</p>
<p>[/php]</p>
<h2>Notification Reply Processing</h2>
<p><em>This script processing replies that you send to the notification message, and submits any needed changes to RTM</em></p>
<p><em>[php]&lt;/em&gt;</p>
<p>&lt;em&gt;&lt;?php</p>
<p>//Lets get ourselves a timeline<br />
$key = md5(&#8216;{SHARED SECRET}api_key{API KEY}auth_token{AUTH TOKEN}formatjsonfrob{FROB}methodrtm.timelines.create&#8217;);<br />
$url = &#8216;http://www.rememberthemilk.com/services/rest/?api_key={API KEY}&amp;auth_token={AUTH TOKEN}&amp;format=json&amp;frob={FROB}&amp;method=rtm.timelines.create&amp;api_sig=&#8217;.$key;<br />
$response1 = file_get_contents($url);<br />
$tl = json_decode($response1);<br />
$timeline = $tl-&gt;rsp-&gt;timeline;</p>
<p>//Now we&#8217;re going to check our secret RTM email account that you&#8217;ve set up with gmail<br />
$connection = imap_open (&quot;{imap.gmail.com:993/imap/ssl}INBOX&quot;, &quot;{FROM ADDRESS}&quot;, &quot;{EMAIL PASSWORD}&quot;) or die(&quot;can&#8217;t connect: &quot; . imap_last_error());</p>
<p>//How many messages are there, if 0, it will just skip the while statement, close the connection, and be done.<br />
$num_mgs = imap_num_msg($connection);<br />
$c = 1;</p>
<p>while ($c &lt;= $num_mgs) {</p>
<p>//Get the email subject line<br />
$headers = imap_headerinfo($connection, $c);<br />
$subject = $headers-&gt;subject;</p>
<p>//Get the first character of the email body, this is your &quot;procCode&quot; which will tell the script what you want to do<br />
$body = imap_body($connection, $c);<br />
$procCode = strtolower(substr($body,0,1));</p>
<p>//Out of the subject line, extract the List ID, Task Series ID, and Task ID<br />
$lid = substr($subject, -7);<br />
$tsid = substr($subject, -16, -8);<br />
$tid = substr($subject, -25, -17);</p>
<p>//if the procCode is C, we&#8217;ll mark the task completed<br />
if ($procCode == &#8216;c&#8217;) {</p>
<p>// Tell RTM it&#8217;s finished</p>
<p>//Build our hash<br />
$toHash = &#8216;{SHARED SECRET}api_key{API KEY}auth_token{AUTH TOKEN}estimate1minformatjsonfrob{FROB}list_id&#8217;.$lid.&#8217;methodrtm.tasks.completetask_id&#8217;.$tid.&#8217;taskseries_id&#8217;.$tsid.&#8217;timeline&#8217;.$timeline;<br />
$sig = md5($toHash);</p>
<p>//Build our URL<br />
$url =&#8217;http://www.rememberthemilk.com/services/rest/?api_key={API KEY}&amp;auth_token={AUTH TOKEN}&amp;estimate=1min&amp;format=json&amp;frob={FROB}&amp;list_id={LIST ID}&amp;method=rtm.tasks.complete&amp;task_id=&#8217;.$tid.&#8217;&amp;taskseries_id=&#8217;.$tsid.&#8217;&amp;timeline=&#8217;.$timeline.&#8217;&amp;api_sig=&#8217;.$sig;</p>
<p>//Submit it and check the response<br />
$response3 = file_get_contents($url);<br />
$alterResp = json_decode($response3);</p>
<p>//If it worked, delete the email, if not, we&#8217;ll try again next time the script runs<br />
if ($alterResp-&gt;rsp-&gt;stat == &#8216;ok&#8217;) {<br />
//Move the message to the trash if it&#8217;s successful<br />
$move = &quot;[Gmail]/Trash&quot;;<br />
@imap_mail_move($connection, $c, $move);<br />
}<br />
}</p>
<p>//if the procCode is P, we&#8217;ll postpone the task<br />
if ($procCode == &#8216;p&#8217;) {</p>
<p>// Postpone it</p>
<p>//Build our hash<br />
$toHash = &#8216;{SHARED SECRET}api_key{API KEY}auth_token{AUTH TOKEN}estimate1minformatjsonfrob{FROB}list_id&#8217;.$lid.&#8217;methodrtm.tasks.postponetask_id&#8217;.$tid.&#8217;taskseries_id&#8217;.$tsid.&#8217;timeline&#8217;.$timeline;<br />
$sig = md5($toHash);</p>
<p>//Build our URL<br />
$url =&#8217;http://www.rememberthemilk.com/services/rest/?api_key={API KEY}&amp;auth_token={AUTH TOKEN}&amp;estimate=1min&amp;format=json&amp;frob={FROB}&amp;list_id={LIST ID}&amp;method=rtm.tasks.postpone&amp;task_id=&#8217;.$tid.&#8217;&amp;taskseries_id=&#8217;.$tsid.&#8217;&amp;timeline=&#8217;.$timeline.&#8217;&amp;api_sig=&#8217;.$sig;</p>
<p>//Submit it and check the response<br />
$response3 = file_get_contents($url);<br />
$alterResp = json_decode($response3);</p>
<p>//If it worked, delete the email, if not, we&#8217;ll try again next time the script runs<br />
if ($alterResp-&gt;rsp-&gt;stat == &#8216;ok&#8217;) {<br />
//Move the message to the trash if it&#8217;s successful<br />
$move = &quot;[Gmail]/Trash&quot;;<br />
@imap_mail_move($connection, $c, $move);<br />
}<br />
}</p>
<p>//if the procCode is S, we&#8217;ll resend the schedule<br />
if ($procCode == &#8216;s&#8217;) {</p>
<p>// Resend Schedule</p>
<p>include(&#8216;sendRTMsched.php&#8217;);<br />
$move = &quot;[Gmail]/Trash&quot;;<br />
@imap_mail_move($connection, $c, $move);</p>
<p>}</p>
<p>$c++;<br />
}<br />
imap_close($connection);<br />
?&gt;</p>
<p>[/php]</p>
<p></em></p>
<p><em>Post questions in the comments and I will be happy to help you out!</em></p>
<pre></pre>
]]></content:encoded>
			<wfw:commentRss>http://hotchkissconsulting.net/remember-the-milk-email-scripts/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Another successful site launch!</title>
		<link>http://hotchkissconsulting.net/developing-with-wordpress/</link>
		<comments>http://hotchkissconsulting.net/developing-with-wordpress/#comments</comments>
		<pubDate>Sun, 12 Apr 2009 16:39:52 +0000</pubDate>
		<dc:creator>Sam Hotchkiss</dc:creator>
				<category><![CDATA[Consulting]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Services]]></category>
		<category><![CDATA[Technologies]]></category>

		<guid isPermaLink="false">http://hotchkissconsulting.net/?p=170</guid>
		<description><![CDATA[This weekend, we launched Becky&#8217;s new photo blog, http://sureshotphoto.net/.  This was a quick launch, and Becky hasn&#8217;t started posting yet, but we got the gorgeous slideshow of her photos going, and man oh man, does it look good. The WordPress theme is from http://graphpaperpress.com/.  We are big, big fans of WordPress for a lot of [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://hotchkissconsulting.net/wp-content/uploads/2009/04/picture-21.png"><img class="alignright size-medium wp-image-169" title="SureShotPhoto.net" src="http://hotchkissconsulting.net/wp-content/uploads/2009/04/picture-2-300x175.png" alt="SureShotPhoto.net" width="300" height="175" /></a>This weekend, we launched Becky&#8217;s new photo blog, <a href="http://sureshotphoto.net/">http://sureshotphoto.net/</a>.  This was a quick launch, and Becky hasn&#8217;t started posting yet, but we got the gorgeous slideshow of her photos going, and man oh man, does it look good.</p>
<p>The WordPress theme is from http://graphpaperpress.com/.  We are big, big fans of WordPress for a lot of simple to moderately complex sites (like this one you&#8217;re on right now).  WordPress allows a lot of flexibility and customizability, and a well developed CMS backend.</p>
<h3>What are the upsides of developing with WordPress?</h3>
<ol>
<li><strong>Quick development</strong>.  With WordPress you&#8217;re building your site on top of a solid base that takes care of a lot of the basic stuff, which means less testing is necessary, and less new code is necessary.</li>
<li><strong>Less expensive</strong>.  This ties into number 1&#8211; as it takes less time for us to develop your site on top of WordPress, you pay less.</li>
<li><strong>Easily extensible</strong>.  Because WordPress has such a large user base, there are thousands of extensions available.</li>
</ol>
<p><span id="more-170"></span>In the end, developing most &#8220;simpler&#8221; sites in WordPress changes from inventing the wheel to refining it.  Our workflow generally consists of putting together the elements needed to create your site, then going through and modifying things to fit your business and your needs.  Because we have a strong understanding of XHTML, CSS, and PHP, we&#8217;re able to tweak existing elements to fit the needs of your company.</p>
<h3>So, What are the downsides of developing with WordPress?</h3>
<ol>
<li><strong>Limited customization</strong>.  With WordPress, you can only go so far, and if your site is going to have advanced features, WordPress isn&#8217;t going to be the right solution.  What do I mean by advanced features?  Well&#8230; do you want customers to be able to log in?  Interact with the site?  Buy from you online?  Do you want to be able to aggregate information from other sources?  Do you want to interface with other services via API?  If you answered yes to any of these, then WordPress probably isn&#8217;t the right solution for you.</li>
<li><strong>Security</strong>.  WordPress is <em>not</em> completely secure.  That said, it&#8217;s not like the computer geek at your local high school could easily break in, but if you had a dedicated hacker looking to get at your information, your site could be compromised.</li>
<li><strong>Client Overconfidence.</strong> Now this one is a little bit of a tricky area&#8230; but I&#8217;ve seen a few occasions where the WordPress admin interface is <em>so easy</em> to use that the client will try adding features on their own, which has, more often than not, resulted in the whole site breaking.  Similarly, clients will automatically assume that they&#8217;re supposed to install every WordPress update, when, oftentimes, this ends up removing any or all of the customizations we&#8217;ve made to the site.</li>
</ol>
<p>So, when is WordPress the right choice?  If you&#8217;re a small business looking for an attractive, simple website that you can update on your own, and you&#8217;ve got a moderate level of tech saavy, WordPress deserves a close look, and, at Hotchkiss Consulting, we&#8217;re happy to help you figure out the solution that&#8217;s best for your business.</p>
]]></content:encoded>
			<wfw:commentRss>http://hotchkissconsulting.net/developing-with-wordpress/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>What I work on</title>
		<link>http://hotchkissconsulting.net/what-i-work-on/</link>
		<comments>http://hotchkissconsulting.net/what-i-work-on/#comments</comments>
		<pubDate>Sat, 04 Apr 2009 05:24:36 +0000</pubDate>
		<dc:creator>Sam Hotchkiss</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Technologies]]></category>
		<category><![CDATA[coda]]></category>
		<category><![CDATA[computer]]></category>
		<category><![CDATA[dropbox]]></category>
		<category><![CDATA[macbook]]></category>
		<category><![CDATA[peek]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[textmate]]></category>
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://hotchkissconsulting.net/?p=143</guid>
		<description><![CDATA[I&#8217;m always interested in what setups other people use, so I thought I&#8217;d give you guys a peek at how I work&#8230; MacBook Air As a developer, I&#8217;m pretty demanding when it comes to my computers.  I type hard and fast, I run a ton of programs simultaneously, and I work from just about everywhere.  [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-medium wp-image-144" title="apple_-_apple_macbook_air_18ghz_ssd_39" src="http://hotchkissconsulting.net/wp-content/uploads/2009/04/apple_-_apple_macbook_air_18ghz_ssd_39-300x273.jpg" alt="apple_-_apple_macbook_air_18ghz_ssd_39" width="300" height="273" /></p>
<p>I&#8217;m always interested in what setups other people use, so I thought I&#8217;d give you guys a peek at how I work&#8230;</p>
<h3>MacBook Air</h3>
<p>As a developer, I&#8217;m pretty demanding when it comes to my computers.  I type hard and fast, I run a ton of programs simultaneously, and I work from just about everywhere.  Not just my desk or my couch or my bed, but from coffee shops, airports, the library, with clients, in cars, on trains&#8230;</p>
<p>For the last three years I&#8217;ve worked on a trusty 15&#8243; MacBook Pro which had been a great machine, although with its quirks.  It made a number of trips to the repair shop, but never left me in a pinch.  Finally, this winder, I decided it was time to upgrade, and picked up a <a href="http://apple.com/macbookair">MacBook Air</a>, with which I have been nothing but impressed.  I opted for the solid state drive, so there is no spinning drive, and this machine is sweet.  Fast, tiny, and light.  And I haven&#8217;t missed having an internal CD/DVD drive for a second!  The backlit keyboard is a major improvement over the MacBook Pro, and it&#8217;s great to type on, too.</p>
<p>The MacBook Air gets an A+ from me!<span id="more-143"></span></p>
<p><a href="http://hotchkissconsulting.net/wp-content/uploads/2009/04/peek-emailer1.jpg"><img class="alignright size-medium wp-image-147" title="peek-emailer" src="http://hotchkissconsulting.net/wp-content/uploads/2009/04/peek-emailer-300x259.jpg" alt="peek-emailer" width="300" height="259" /></a></p>
<h3>Peek</h3>
<p>I&#8217;ve been a long-time Blackberry user/addict, but when the <a href="http://getpeek.com/">Peek</a> came out I decided to take a look.  The peek does email and email only in a device smaller than any other smartphone at a very attractive price&#8211; just $20 a month.  At first, I wasn&#8217;t too impressed&#8211; the lag was huge (often times 30 minutes+), which is too long to wait to learn that a server is down or a client needs a change made immediately.   Frustrating!  But I&#8217;m now beta testing the new Peek software, Peek Pronto (due out in a couple weeks), and you can color me impressed.  Email now regularly shows up on my Peek BEFORE it shows up on my computer.  That&#8217;s good speed!  And it&#8217;s nice to be able to move around town without a cell phone, yet still be connected.</p>
<p>I look forward to seeing how the Peek continues to evolve over the coming months&#8211; it&#8217;s a young product with a very active and responsive team.</p>
<p><a href="http://hotchkissconsulting.net/wp-content/uploads/2009/04/coda_logo1.png"><img class="alignleft size-full wp-image-146" title="coda_logo" src="http://hotchkissconsulting.net/wp-content/uploads/2009/04/coda_logo1.png" alt="coda_logo" width="143" height="146" /></a></p>
<h3>Software</h3>
<p>Next comes software.  After a long struggle to figure out what my ideal setup was, I finally realized that the ultimate coding environment just doesn&#8217;t exist within a single App.  I use <a href="http://panic.com/coda">Coda</a>, from <a href="http://panic.com/">Panic Software</a> (a top-notch Mac development house), to do all of my project management.  Coda is awesome at letting me get at my files quickly, keeping track of which files need to be uploaded, handling those uploads, playing with CSS, and the built in SSH client is really handy.  The downside of Coda is the text editor, which, while good enough for quick edits, just doesn&#8217;t have the same polish of TextMate.</p>
<p><a href="http://hotchkissconsulting.net/wp-content/uploads/2009/04/textmate-logo1.png"><img class="alignright size-full wp-image-145" title="textmate-logo" src="http://hotchkissconsulting.net/wp-content/uploads/2009/04/textmate-logo1.png" alt="textmate-logo" width="148" height="142" /></a><a href="http://macromates.com/">TextMate</a> is an app I&#8217;d heard about for a long time, and just finally began to use, and my only regret is that I waited so long.  The code completion works perfectly, it&#8217;s quick, it&#8217;s beautiful, it&#8217;s&#8230; well, it&#8217;s just great.  I am a happier coder with TextMate, and that&#8217;s a beautiful thing.</p>
<p>My primary web browser is Firefox 3, because I love the plugins!  My favorite plugins are <a href="http://www.foxmarks.com/">FoxMarks</a>, <a href="http://chrispederick.com/work/web-developer/">Web Developer</a>, and <a href="http://www.colorzilla.com/firefox/">ColorZilla</a>.  For testing, I also use Safari on the Mac and IE, Firefox, Safari, and Chrome in Windows XP Pro (through <a href="http://www.vmware.com/products/fusion/">VMWare Fusion</a>).</p>
<p><a href="http://hotchkissconsulting.net/wp-content/uploads/2009/04/dropbox-logo1.png"><img class="alignleft size-full wp-image-149" title="dropbox-logo" src="http://hotchkissconsulting.net/wp-content/uploads/2009/04/dropbox-logo1.png" alt="dropbox-logo" width="128" height="128" /></a>And while all of these things are great, my absolute <strong>favorite</strong> new app/service of the past year (and maybe ever), is <a href="http://getdropbox.com/">Dropbox</a>.  Dropbox is pretty much magic.  I keep all of my working files in my Dropbox, and it auto<strong>magic</strong>ally sends them to a secure server off in the cloud, keeping them backed up and accessible from anywhere.  But that&#8217;s just the beginning.</p>
<p>Dropbox logs every revision of a file you save, so when I realize I screwed something up, I can go back to my 10-minutes-ago copy of a file in seconds, and, through Dropbox&#8217;s file sharing features, it&#8217;s easy for Becky and me to keep our current files accessible to both of us, and sharing files with clients is a snap.</p>
<p>So that&#8217;s my setup!  Of course, I also have MS Office, Adobe CS3, etc, etc, but those, to me, are secondary apps.  These are the programs that I spend 90% of my computing life in.</p>
<p>What software do you use?  Is there something you think I should try?  Let me know!  And stay tuned for an upcoming post where I let you know how we saved $50 a month on our cable bill!</p>
]]></content:encoded>
			<wfw:commentRss>http://hotchkissconsulting.net/what-i-work-on/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Building an eMail interface for Remember the Milk using PHP</title>
		<link>http://hotchkissconsulting.net/email-interface-remember-the-milk/</link>
		<comments>http://hotchkissconsulting.net/email-interface-remember-the-milk/#comments</comments>
		<pubDate>Fri, 06 Mar 2009 20:32:10 +0000</pubDate>
		<dc:creator>Sam Hotchkiss</dc:creator>
				<category><![CDATA[Consulting]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[How-To]]></category>
		<category><![CDATA[Technologies]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[peek]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[remember the milk]]></category>
		<category><![CDATA[rtm]]></category>

		<guid isPermaLink="false">http://www.hotchkissconsulting.net/?p=89</guid>
		<description><![CDATA[UPDATE: Scripts are available here: http://hotchkissconsulting.net/177/remember-the-milk-email-scripts/ So, in accordance with my plan to switch client communication from phone to email, I have decided that, instead of a Cell Phone, I will carry a Peek with me.  While it has been a rocky road so far, I trust that the people at Peek have some good [...]]]></description>
			<content:encoded><![CDATA[<p><strong>UPDATE: Scripts are available here: <a href="http://hotchkissconsulting.net/177/remember-the-milk-email-scripts/">http://hotchkissconsulting.net/177/remember-the-milk-email-scripts/</a></strong></p>
<p><img class="alignleft size-full wp-image-112" title="rtm" src="http://hotchkissconsulting.net/wp-content/uploads/2009/04/rtm1.jpg" alt="rtm" width="263" height="224" />So, in accordance with my plan to switch client communication from phone to email, I have decided that, instead of a Cell Phone, I will carry a <a href="http://getpeek.com/" target="_blank">Peek </a>with me.  While it has been a rocky road so far, I trust that the people at Peek have some good updates coming down the pipeline, so I&#8217;m going to stick it out for a couple months and see how I like it.</p>
<p>The thing about the Peek is that it&#8217;s eMail only.  And I really do mean only.  No calculator, no games, no web browser, and no calendar.  For me, that just won&#8217;t do&#8211; I am an avid fan of <a href="http://rememberthemilk.com/">Remember the Milk</a>.  I keep it in my OS X dashboard and on my desktop email screen (I use GFYD, Google For Your Domain).  Having my RTM to go is a must.</p>
<p>Currently, RTM offers a couple email-based options.  You can email in new tasks, you can receive a list of your tasks for the day every morning via email, and you can receive an email reminder before a task is due.  This is a good start, but there are some problems:</p>
<p>1) With the daily schedule emails, you can only see what&#8217;s going on that day, you can&#8217;t see your entire schedule.  This information is crucial for setting appointments.</p>
<p>2) Reminder emails don&#8217;t have the task name in the subject line, meaning you have to open the email to see what you&#8217;re supposed to do.</p>
<p>3) You can&#8217;t do anything with the tasks&#8211; no marking them completed or postponing, you have to do this from the computer.</p>
<p>So, I wrote my own email interface, and will go over it and include my source files so you, too, can build your own (if you&#8217;ve got some <a href="http://php.net/">PHP </a>know-how).  If there&#8217;s enough interest, I will build a standalone, hosted solution for everyone of every skill level.<span id="more-89"></span></p>
<p>Now, you&#8217;ll note that I didn&#8217;t mention any problems with the task submission, that&#8217;s because it works pretty well already&#8230; the only issue I ran into there is that the Peek gives an alert every time you try to submit a new task because your RTM task submission email address contains a &#8220;+&#8221; sign.  So I simply added an email address to one of my domains that forwards to my RTM address.  Problem solved.</p>
<p>Issues with my RTM email interface:</p>
<p>1) I use the time estimate field to store my flag as to whether or not a notification has been sent.  This isn&#8217;t a field that I, personally, use.</p>
<p>2) I have built this to use only one list, my inbox.  If you want to use more lists, go for it, this script should give you a good starting point.</p>
<p>3) Even with my source code, this is a pretty technical process to get this up and running on your server.  I&#8217;m providing this to help those of you who have a basic understanding of PHP and REST/JSON data structure save a little bit of time.  If there is sufficient interest, I will consider building a service to do this for you&#8211; if you are interested, please post a comment letting me know.</p>
<p>4) These instructions assume that you already have an <a href="http://www.rememberthemilk.com/services/api/keys.rtm">API Key and Shared Secret</a> and a frob and token with read/write access to your user account.  If there are a lot of questions about this, I can post a separate how-to.</p>
<p>You are welcome to use this information for personal projects and distribute it with proper accreditation.</p>
<p>This interface uses 3 scripts, I will go through each in a separate blog post:</p>
<p><strong>1) Schedule </strong></p>
<p>This script sends me my full schedule at 7am, noon, and 5pm (It is triggered by crontab).   Here&#8217;s what one of those emails might look like:</p>
<blockquote>
<pre>Past Due:
-------------------------
Wed, Mar 4 2:00pm - call leanne smith re: PSD files
Thu, Mar 5 6:00pm - Send Back Candles

Upcoming:
-------------------------
Fri, Mar 6 10:00am - Change netflix plan
Fri, Mar 6 10:00am - Pay Care Credit Bill
Fri, Mar 6 10:00am - Pay Sallie Mae
Fri, Mar 6 12:00pm - call kennebec re contract
Sat, Mar 7 10:00am - Haircut!
Sat, Mar 7 11:00am - Go see an unlikely weapon at noon
Wed, Mar 11 8:30am - Dog Grooming @ Happy Paws
Wed, Mar 11 4:00pm - Meet with B. Peterson @ 430
Thu, Mar 12 5:15pm - Take out the Trash

Future:
-------------------------
Wed, Mar 18 3:45pm - Meeting w/ J. Doe at 4:30
Fri, Mar 20 8:15am - Dentist Appt
Sat, Jun 6 1:00am - Call Barbara to set up meeting on the 10th

     March 2009
Su Mo Tu We Th Fr Sa
 1  2  3  4  5  6  7
 8  9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31

     April 2009
Su Mo Tu We Th Fr Sa
          1  2  3  4
 5  6  7  8  9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30

      May 2009
Su Mo Tu We Th Fr Sa
                1  2
 3  4  5  6  7  8  9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31

     June 2009
Su Mo Tu We Th Fr Sa
    1  2  3  4  5  6
 7  8  9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30</pre>
</blockquote>
<p>You can see, also, that at the emails I&#8217;ve tacked on the next 4 months worth of calendars so I can see what&#8217;s coming up!</p>
<p><strong>2) </strong><strong>Reminders</strong></p>
<p>To replace the reminder emails, I have a script that runs every 5 minutes to check to see if I have any tasks coming up within the next 30 minutes.  It then generates an email in which the subject is the name of my task followed by the Task ID, Task Series ID, and List ID (all of which are period delimitted).  This allows my next script to work its magic as well as putting my task info right there in the subject line so I can see what&#8217;s going on.</p>
<p><strong>3) Modifications</strong></p>
<p>This script checks a secret gmail account every 5 minutes, reads my messages and processes them based on the Process Code I send in.  The process code is the first letter in an email&#8211; if it&#8217;s &#8220;C&#8221; then this script tells RTM that the task is Completed.  If it&#8217;s &#8220;P&#8221;, the script tells RTM that the task is Postponed.  It figures out what the task is by parsing the numbers at the end of the subject line.</p>
<p>So&#8230; that&#8217;s what we&#8217;ve got!  Scripts are on their way and should be up today, please let me know what you think, and feel free to leave any questions in the comments field below.</p>
]]></content:encoded>
			<wfw:commentRss>http://hotchkissconsulting.net/email-interface-remember-the-milk/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Changes for 2009 Part 1, Communication</title>
		<link>http://hotchkissconsulting.net/changes-for-2009-1/</link>
		<comments>http://hotchkissconsulting.net/changes-for-2009-1/#comments</comments>
		<pubDate>Fri, 09 Jan 2009 19:50:27 +0000</pubDate>
		<dc:creator>Sam Hotchkiss</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.hotchkissconsulting.net/?p=70</guid>
		<description><![CDATA[Happy New Year, everybody! To bring in the new year, I am making a couple of operational changes to Hotchkiss Consulting which will go into effect on February 1. These should be beneficial to everyone in the coming year!  I will be posting these separately over the coming weeks. The first change is in communication. [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-medium wp-image-122" title="new-years-2009" src="http://hotchkissconsulting.net/wp-content/uploads/2009/01/new-years-2009-300x172.png" alt="new-years-2009" width="300" height="172" />Happy New Year, everybody!  To bring in the new year, I am making a couple of operational changes to Hotchkiss Consulting which will go into effect on February 1.  These should be beneficial to everyone in the coming year!  I will be posting these separately over the coming weeks.</p>
<h3>The first change is in communication.</h3>
<p>This is a biggie!  I know that it&#8217;s important to you to be in touch throughout the process.  You expect and value quick responses to your questions and concerns.  However, for me, interruptions kill my momentum when I&#8217;m working on your site.  What may be a 5 minute phone conversation can take a huge chunk of working time out, because, after that 5 minutes, it takes a while to get &#8220;back in the groove&#8221;, so to speak, of getting your site ready to launch.<span id="more-70"></span></p>
<p>So I&#8217;m turning off the phones.  Our office phones will go straight to voicemail.  The voicemail will go into our email, and we will call you back.  What does this mean?  It means that the best way to get a hold of us is via email.</p>
<p>However, in exchange for your understanding of this new policy, we&#8217;re going to promise you the following:</p>
<p>1) On business days, between 9am and 5pm MST, you will receive a response to your email within 2 hours.</p>
<p>2) Any emails sent in the evenings will receive a response by 10am MST the next morning.</p>
<p>3) Any emails sent over the weekend will receive a response within 24 hours or by 10am Monday morning, whichever comes first.</p>
<p>If you don&#8217;t receive a response within this time frame, you will receive a $20 credit on your next invoice.</p>
<p>How&#8217;s that for service?</p>
<p><script src="http://s.bit.ly/bitlypreview.js"></script></p>
<p><script src="http://s.bit.ly/bitlypreview.js"></script></p>
]]></content:encoded>
			<wfw:commentRss>http://hotchkissconsulting.net/changes-for-2009-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Happy New Year!!!</title>
		<link>http://hotchkissconsulting.net/happy-new-year/</link>
		<comments>http://hotchkissconsulting.net/happy-new-year/#comments</comments>
		<pubDate>Wed, 31 Dec 2008 22:23:57 +0000</pubDate>
		<dc:creator>Sam Hotchkiss</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.hotchkissconsulting.net/?p=67</guid>
		<description><![CDATA[It&#8217;s New Years Eve, and it has been a very, very long 2008.  The economy is in the drain.  We&#8217;re lodged under a solid three feet of snow here in Durango (unheard of this early in the year).  The internet is in a period of transition.  I think 2009 is going to be a year [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://hotchkissconsulting.net/wp-content/uploads/2009/01/new-years-2009-300x172.png" alt="new-years-2009" title="new-years-2009" width="300" height="172" class="alignright size-medium wp-image-122" />It&#8217;s New Years Eve, and it has been a very, very long 2008.  The economy is in the drain.  We&#8217;re lodged under a solid three feet of snow here in Durango (unheard of this early in the year).  The internet is in a period of transition.  I think 2009 is going to be a year of changes.  New technologies will become common place.</p>
<p>Things I&#8217;m looking forward to in 2009:</p>
<ul>
<li>First and foremost, <a href="http://samandbecky.net/" target="_blank">getting married</a>.  I&#8217;ll be tying the knot on June 26th, and making Becky Peterson my wife.</li>
<li>The year of the API.  More and more services will open up and allow interactions from outside sites.  This will result in a barrage of new sites providing more functionality than ever before.</li>
<li>The beginning of the end for basic desktop apps.  This will be the year that google apps and other similar services start to take off.  Are you ready to move your life to the cloud.  (Don&#8217;t forget, Hotchkiss Consulting is your source for help in saving your company thousands a year by moving to Google Apps)</li>
<li>A new president.  Although it will be difficult to get used to a president who speaks proper English, there are worse problems to have.  With this new president, I believe, we&#8217;ll see our economy turn around.</li>
</ul>
<p>I believe that this is a great time to be a technologist, an entreprenuer, and an American.  2009 will be a great year, of this I am sure.  Hopefully, 2009 will also be the year that I start really keeping up on my blog!</p>
<p>Happy new year, everyone!</p>
]]></content:encoded>
			<wfw:commentRss>http://hotchkissconsulting.net/happy-new-year/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

