<?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; Technologies</title>
	<atom:link href="http://hotchkissconsulting.net/category/tech/feed/" rel="self" type="application/rss+xml" />
	<link>http://hotchkissconsulting.net</link>
	<description>Just another WordPress site</description>
	<lastBuildDate>Mon, 02 Jan 2012 18:15:09 +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>Accessing content for non-active languages with qTranslate</title>
		<link>http://hotchkissconsulting.net/2010/01/accessing-content-for-non-active-languages-with-qtranslate/</link>
		<comments>http://hotchkissconsulting.net/2010/01/accessing-content-for-non-active-languages-with-qtranslate/#comments</comments>
		<pubDate>Thu, 14 Jan 2010 21:17:15 +0000</pubDate>
		<dc:creator>Sam Hotchkiss</dc:creator>
				<category><![CDATA[How-To]]></category>
		<category><![CDATA[Technologies]]></category>

		<guid isPermaLink="false">http://hotchkissconsulting.net/?p=271</guid>
		<description><![CDATA[I&#8217;ve recently been working on a new site for a large Jewish philanthropic organization, developing a (very) custom WordPress theme for their site&#8211; when it came to coming up with a way to handle bilingual English/Hebrew content, we tried a few WordPress plugins before settling on Qian Qin&#8217;s qTranslate, which has been wonderful&#8211; great user [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve recently been working on a new site for a large Jewish philanthropic organization, developing a (very) custom WordPress theme for their site&#8211; when it came to coming up with a way to handle bilingual English/Hebrew content, we tried a few WordPress plugins before settling on Qian Qin&#8217;s <a href="http://www.qianqin.de/qtranslate/">qTranslate</a>, which has been wonderful&#8211; great user interface, easy for the client to grasp, easy to work with.  The one problem I encountered way that there is no easy way to reach across languages for content, which was necessary for one section of the site where English content needed to appear alongside Hebrew content.  Without any further ado, here&#8217;s the snippet of code I came up with to get at both languages&#8211; you are left with $p_title and $p_body which are both arrays, and you need to make sure to substitute your language in for Hebrew, and your language 2 letter code in for iw on line 3:</p>
<pre>$enddelim = '&lt;!--:--&gt;';
 $englishdelim = '&lt;!--:en--&gt;';
 $hebrewdelim = '&lt;!--:iw--&gt;';

 $getpost = get_posts('post_type=page&amp;include='.$post-&gt;ID);
 foreach($getpost as $p2) :
 setup_postdata($p2);
 $both_titles = 'blah'.$p2-&gt;post_title;
 $both_bodies = 'blah'.$p2-&gt;post_content;
 endforeach;

 if(strpos($both_titles, $englishdelim)) :
 $pt1 = explode($englishdelim, $both_titles);
 $pt2 = explode($enddelim, $pt1[1]);
 $p_title['english'] = $pt2[0];
 endif;

 if(strpos($both_titles, $hebrewdelim)) :
 $pt1 = explode($hebrewdelim, $both_titles);
 $pt2 = explode($enddelim, $pt1[1]);
 $p_title['hebrew'] = $pt2[0];
 endif;

 if(strpos($both_bodies, $englishdelim)) :
 $pt1 = explode($englishdelim, $both_bodies);
 $pt2 = explode($enddelim, $pt1[1]);
 $p_body['english'] = $pt2[0];
 endif;

 if(strpos($both_bodies, $hebrewdelim)) :
 $pt1 = explode($hebrewdelim, $both_bodies);
 $pt2 = explode($enddelim, $pt1[1]);
 $p_body['hebrew'] = $pt2[0];
 endif;</pre>
]]></content:encoded>
			<wfw:commentRss>http://hotchkissconsulting.net/2010/01/accessing-content-for-non-active-languages-with-qtranslate/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Remember the Milk Email Scripts</title>
		<link>http://hotchkissconsulting.net/2009/04/remember-the-milk-email-scripts/</link>
		<comments>http://hotchkissconsulting.net/2009/04/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/2009/04/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/2009/04/developing-with-wordpress/</link>
		<comments>http://hotchkissconsulting.net/2009/04/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/2009/04/developing-with-wordpress/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RTM PHP Class and Peek Projects</title>
		<link>http://hotchkissconsulting.net/2009/04/rtm-php-class-peek-projects/</link>
		<comments>http://hotchkissconsulting.net/2009/04/rtm-php-class-peek-projects/#comments</comments>
		<pubDate>Wed, 08 Apr 2009 04:25:33 +0000</pubDate>
		<dc:creator>Sam Hotchkiss</dc:creator>
				<category><![CDATA[Technologies]]></category>

		<guid isPermaLink="false">http://hotchkissconsulting.net/?p=162</guid>
		<description><![CDATA[Well, I&#8217;ve been making good progress on the PHP Class for RTM, and I hope to have it available within the week (if all goes according to plan).  I&#8217;m also thinking about making a &#8220;notes&#8221; style email app (primarily for use with the peek)&#8230;. This would be really straightforward&#8230; you email in notes, it logs [...]]]></description>
			<content:encoded><![CDATA[<p>Well, I&#8217;ve been making good progress on the PHP Class for RTM, and I hope to have it available within the week (if all goes according to plan).  I&#8217;m also thinking about making a &#8220;notes&#8221; style email app (primarily for use with the peek)&#8230;. This would be really straightforward&#8230; you email in notes, it logs them, and you can recall them (and maybe search?).  With push email on to the peek, this could be pretty cool, but I&#8217;d need to figure out a fast trigger mechanism.  My current RTM script uses a regular cronjob to do everything, but for something where you&#8217;re actually interacting via email, we need to be faster.  I&#8217;m thinking I&#8217;ll need to use procmail, which will be new for me, but I&#8217;m up for a challenge.</p>
<p>I&#8217;m taking this weekend &#8220;off&#8221; which means I&#8217;m going to sit in my PJ&#8217;s and geek out all weekend.  Maybe this project will get some attention.</p>
<p>Are there any email-based apps you&#8217;d like to see?  Let me know!  And don&#8217;t forget to <a href="http://twitter.com/hconsulting">follow us on Twitter!</a></p>
]]></content:encoded>
			<wfw:commentRss>http://hotchkissconsulting.net/2009/04/rtm-php-class-peek-projects/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>What I work on</title>
		<link>http://hotchkissconsulting.net/2009/04/what-i-work-on/</link>
		<comments>http://hotchkissconsulting.net/2009/04/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/2009/04/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/2009/03/email-interface-remember-the-milk/</link>
		<comments>http://hotchkissconsulting.net/2009/03/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/2009/03/email-interface-remember-the-milk/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Why I am a big fan of Yahoo Pipes</title>
		<link>http://hotchkissconsulting.net/2008/12/yahoo-pipes/</link>
		<comments>http://hotchkissconsulting.net/2008/12/yahoo-pipes/#comments</comments>
		<pubDate>Wed, 17 Dec 2008 21:08:03 +0000</pubDate>
		<dc:creator>Sam Hotchkiss</dc:creator>
				<category><![CDATA[Technologies]]></category>

		<guid isPermaLink="false">http://www.dec08.hotchkissconsulting.net/?p=49</guid>
		<description><![CDATA[AKA &#8211; why do it the hard way when you can do it the easy way? So, I know it&#8217;s been around for a fairly long time, but I&#8217;m a busy guy, so I&#8217;m just getting around to it.  But, in under 20 minutes with pipes,  I was able to throw together a &#8220;pipe&#8221; that [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://hotchkissconsulting.net/wp-content/uploads/2008/12/yahoo-pipes-edit-by-robin-good-4651-300x214.jpg" alt="yahoo-pipes-edit-by-robin-good-4651" title="yahoo-pipes-edit-by-robin-good-4651" width="300" height="214" class="alignleft size-medium wp-image-115" /><br />
AKA &#8211; why do it the hard way when you can do it the easy way?</p>
<p>So, I know <a href="http://en.wikipedia.org/wiki/Yahoo!_Pipes">it&#8217;s been around for a fairly long time</a>, but I&#8217;m a busy guy, so I&#8217;m just getting around to it.  But, in under 20 minutes with pipes,  I was able to throw together a &#8220;pipe&#8221; that will sort through the USGS&#8217;s mountain of data and tell me what the current flow of the Animas river through Durango, Colorado is.</p>
<p>There&#8217;s just no way to sort through data by hand this quickly.  Pipes makes it easy to aggregate information.  Now that&#8217;s web 3.0 for you.</p>
<p>By the way, here&#8217;s the PHP code I used to fetch the flow.  Feel free to throw this code into your own site to show the current flow. Go go yahoo pipes!</p>
<p><code>$response = file_get_contents('http://pipes.yahoo.com/pipes/pipe.run?_id=augM3IDI3RGi4U7B1L3fcQ&amp;_render=php');<br />
$phpobj = unserialize($response);<br />
$cfs = $phpobj['value']['items']['0']['description'];</code></p>
]]></content:encoded>
			<wfw:commentRss>http://hotchkissconsulting.net/2008/12/yahoo-pipes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

