<?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/"
	xmlns:series="http://unfoldingneurons.com/"
	>

<channel>
	<title>MettaProgramming &#187; workflow</title>
	<atom:link href="http://mettadore.com/tag/workflow/feed/" rel="self" type="application/rss+xml" />
	<link>http://mettadore.com</link>
	<description>Thoughts on Software and Technology</description>
	<lastBuildDate>Mon, 09 Apr 2012 19:11:59 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Creating a Robotic Secretary with Hazel, Automator, &amp; Ruby</title>
		<link>http://mettadore.com/analysis/creating-a-robotic-secretary-with-hazel-automator-ruby/</link>
		<comments>http://mettadore.com/analysis/creating-a-robotic-secretary-with-hazel-automator-ruby/#comments</comments>
		<pubDate>Mon, 18 Oct 2010 23:08:24 +0000</pubDate>
		<dc:creator>john</dc:creator>
				<category><![CDATA[Miscellany]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[automation]]></category>
		<category><![CDATA[Automator]]></category>
		<category><![CDATA[Hazel]]></category>
		<category><![CDATA[workflow]]></category>

		<guid isPermaLink="false">http://mettadore.com/?p=606</guid>
		<description><![CDATA[If you&#8217;re on a Mac, and have to do a task more than once, then you need to use Hazel and Automator, full stop. I&#8217;m a consultant, and that means I work on multiple projects, and have to bill those projects. Recently, I began working on a contract that required weekly billing, using an Excel [...]]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;re on a Mac, and have to do a task more than once, then you need to use Hazel and Automator, full stop.</p>
<p>I&#8217;m a consultant, and that means I work on multiple projects, and have to bill those projects. Recently, I began working on a contract that required weekly billing, using an Excel spreadsheet that can&#8217;t be modified, and a signature from a project manager in another city. Talk about tedious! My workflow for just filling out a weekly timesheet is this:</p>
<ol>
<li>Use Freshbooks daily to track time</li>
<li>On Friday, open Freshbooks and pull the hours on that project</li>
<li>Open Excel (in VMWare) to update the read-only Master Timesheet file by changing the date, and adding my hours into the day slots
<ol>
<li>I can&#8217;t use Open Office or anything on the Mac since the formatting changes when I save it as an Excel file- I&#8217;ve tried a bunch of ways to do this, but as I usually have VMWare open to work in Visual Studio for this project anyway, I just use MS Excel on Windows</li>
</ol>
</li>
<li>Save the timesheet under another name</li>
<li>Drag the timesheet into another folder in my Dropbox (so that I have a record)</li>
<li>Open my email client and create an email to my project manager that says little more than &#8220;Timesheet, Cheers, -J&#8221;</li>
<li>Drag the timesheet into the email (I Google Mail&#8217;s ability to drag a file to attach!) and hit send</li>
<li>When he sends it back, it&#8217;s an attachment as an image- save the image to my project folder locally</li>
<li>Print out the image</li>
<li>Sign it (in blue pen, mind you)</li>
<li>Scan the signed copy</li>
<li>Move the scanned copy file to my local computer</li>
<li>Open a web browser to connect to their email system, which I&#8217;m supposed to use, but which is proxied, so I can&#8217;t use my normal email client.</li>
<li>Create another email to the timesheet recipient</li>
<li>Attach the file using the dialog boxes (Drag is not possible) and send it</li>
<li>Grab the timesheet original off my scanner and put in an envelope to mail to New York.</li>
</ol>
<p>Now, if you think about doing all of that, it&#8217;s not like it takes half the day. Still, it takes enough time that a good bit of my morning is lost to it. There&#8217;s not only the time spent &#8220;actively doing everything&#8221; but the lost time where I could have been concentrating on something like our object model or database abstraction layer, but which I&#8217;m distracted by simultaneously dealing with the timesheet issue. Anyone working in a &#8220;mental sphere&#8221; such as programming knows that a few seconds of distraction with something will pull you out of the mindset for 20 minutes or more.</p>
<p>Plus, there&#8217;s the added issue of this just being boring. It&#8217;s something a robot should be doing- or at least a secretary. More importantly, it&#8217;s something that could happen automatically! We programmers tend to get annoyed when things &#8220;should happen automatically&#8221; and they don&#8217;t. It is, in fact, why many of us became programmers.</p>
<h3>Enter Hazel</h3>
<p>For a while, I&#8217;ve been simplifying things a wee bit using <a href="http://www.noodlesoft.com/hazel.php">Hazel</a>. For those who don&#8217;t know, Hazel is a Mac program that watches a folder and performs actions based on the folder contents. I first heard about it on the <a href="http://macpowerusers.com/2010/04/mpu-025-geeking-out-with-hazel/">Mac Power Users</a> podcast and bought the software pretty much immediately following the podcast.</p>
<div id="attachment_608" class="wp-caption alignright" style="width: 310px"><a href="http://mettadore.com/files/2010/10/Screen-shot-2010-10-18-at-2.33.46-PM.png"><img class="size-medium wp-image-608" src="http://mettadore.com/files/2010/10/Screen-shot-2010-10-18-at-2.33.46-PM-300x122.png" alt="" width="300" height="122" /></a><p class="wp-caption-text">Hazel rules screen</p></div>
<p>Hazel is one amazing piece of time-saving software. It has a super simple graphical dialog box to let you set things like which folder, what attributes (&#8220;if files are older than&#8221; and &#8220;if file is a:&#8221; (e.g. movie, soundfile, pdf, etc) and &#8220;if the name contains:&#8221;) and what actions (Open, move, delete, archive, change name, import into iTunes, etc.) to perform on files in that folder.</p>
<p>One of the ways that I use it is on my desktop. If there are any pictures or movies on my desktop that are older than 1 day, Hazel takes them off my desktop and puts them on my remote hard drive, in appropriate folders, and simultaneously imports them into iTunes (I don&#8217;t have iTunes copy files to the local drive, so they&#8217;re watched from the remote drive).</p>
<p>When dealing with my timesheet, I have Hazel set up so that anything that goes into the &#8220;Timesheets&#8221; folder and is an Excel file gets automatically moved to a subfolder called &#8220;archive&#8221; and gets renamed with the pattern &#8220;John_Metta_&lt;date added&gt;.xls.&#8221; That way, I have an easily recognizable location and file to drag into an email to my project manager.</p>
<p>Using Hazel to automatically move, delete and organize your files can save you a lot of time. It&#8217;s tiny little chunks of time, sure, but it&#8217;s time. In reality, it&#8217;s saving you more the headache of having to do the same thing over and over again. Hazel is powerful, check it out.</p>
<h3>Add A Little Ruby</h3>
<p>Because I love Ruby, I decided to automate the creation of the Excel spreadsheet a bit. The Windows version of Ruby has the win32ole module, which can open and handle spreadsheets really easily. So I created a small script that opened a read-only version of the master timesheet spreadsheet and changed the date and the hours/day based on the arguments.</p>
<p>Here&#8217;s the whole script:</p>
<pre>require 'win32ole'

xl = WIN32OLE.new('Excel.Application')
xls = xl.Workbooks.open("c:\timesheets\Timesheet")
sheet = xls.Worksheets(1)

sheet.Cells(4,11).Value = ARGV[0]

#Time cell index
t = 6
ARGV.each_with_index do |a, i|
  sheet.Cells(10,t+i).Value = a
end

xls.SaveAs("Z:\john\Dropbox\Consulting Stuff\Nova\timesheets\timesheet")
xls.Close
xl.Quit</pre>
<p>With this, the command:</p>
<pre> C:timesheets$ ruby timesheet.rb "10/16" 0 0 8 7 6 7 8</pre>
<p>will create the correct timesheet for the week beginning 10/16, with the correct dates all lined up for the hours, and will save that timesheet to my Dropbox/timesheets directory- afterwhich Hazel will do the rest.<sup><a href="http://mettadore.com/analysis/creating-a-robotic-secretary-with-hazel-automator-ruby/#footnote_0_606" id="identifier_0_606" class="footnote-link footnote-identifier-link" title="There&amp;#8217;s actually an API library for Freshbooks in Ruby that is written  and maintained by Ben Curren at Outright.com, so you could pull the  hours straight from the project in a Ruby script- I decided against this  step">1</a></sup></p>
<h3>More with Automator</h3>
<div id="attachment_611" class="wp-caption alignright" style="width: 310px"><a href="http://mettadore.com/files/2010/10/automator-icon.png"><img class="size-medium wp-image-611" src="http://mettadore.com/files/2010/10/automator-icon-300x300.png" alt="" width="300" height="300" /></a><p class="wp-caption-text">Automator: More &quot;secretary&quot; than I&#039;d thought!</p></div>
<p>Earlier this week, I was still frustrated at the workflow of timesheets, however, because I still had a bunch of steps. Hazel was good at moving files and renaming them, but I still had to email them, print them, etc. So I decided to get my programming game on… then I decided that I didn&#8217;t even <em>need</em> to. Like all Macs, my Mac has Automator- a program that will create &#8220;workflows&#8221; and &#8220;applications&#8221; which basically amount to my own personal robotic secretary. Hazel can run both applications and Automator workflows on files, so I decided to give it a try.</p>
<h4><strong>Mailing to my PM</strong></h4>
<p>The first thing I do when I have my timesheet is move it to the timesheets folder where it gets renamed and archived so that I can send it to my PM. It would only be a single step to mail the renamed file. So I opened my Automator script and used the &#8220;create mail message,&#8221; &#8220;add attachment to open messages,&#8221; and &#8220;send mail&#8221; actions to create a script. Now, whenever a folder goes into Timesheets, it gets moved, renamed, <em>and</em> automatically mailed to my PM in one step!<sup><a href="http://mettadore.com/analysis/creating-a-robotic-secretary-with-hazel-automator-ruby/#footnote_1_606" id="identifier_1_606" class="footnote-link footnote-identifier-link" title="In full disclosure, the Automator script actually uses &amp;#8220;Save to a variable&amp;#8221; &amp;#8220;create new mail message&amp;#8221; &amp;#8220;get from variable&amp;#8221; &amp;#8220;add attachments&amp;#8221; and &amp;#8220;send mail&amp;#8221;&amp;#8211; in that order. For some reason, the &amp;#8220;add attachments&amp;#8221; phase was throwing an error otherwise.">2</a></sup></p>
<h4><strong>Printing and Signing</strong></h4>
<p>When my PM signs and mails it back it&#8217;s an image. So, I created another automator script to take any images with the name pattern &#8220;John_Metta_*&#8221; and the extension JPG in my &#8220;Downloads&#8221; directory and automatically move them to the &#8220;timesheets/images&#8221; directory and send them to the printer. That means all I have to do is open the email and click &#8220;download&#8221; and I&#8217;ll soon have a printed timesheet awaiting my signature. Sounds pretty secretary-like to me.</p>
<h4><strong>Mailing the final</strong></h4>
<p>My Canon all-in-one will scan automatically save files to a specific directory, so I could just set up Hazel to monitor that directory. The problem with this is that ANYTHING I scan will get processed. Rather than that, I&#8217;ve decided to have Hazel monitor that directory for a specific file name. Thus, when I scan any document, I see a dialog box on my screen prompting me to add a name. I can add a name in the rare occasions I want to scan something else. If I just hit &lt;enter&gt;, I&#8217;ve set Hazel up with another Automator script: Take the file, rename it with the pattern &#8220;John_Metta_Timesheet_&lt;date addedd&gt;&#8221;, mail it to the company as an attachment, and then throw the local copy in the trash (because Google Apps mail will store it for me).</p>
<h3>A Robotic Secretary</h3>
<p>The function of a secretary is to take care of everything that doesn&#8217;t absolutely need your action. A secretary should take care of everything in a &#8220;Do everything and let me just sign the paper.&#8221; That&#8217;s almost what I have now.</p>
<p>With this workflow, I&#8217;ve gone from 16 tedious steps to</p>
<ol>
<li>Track time daily in Freshbooks</li>
<li>Friday morning, while working, run the ruby command with my hours<sup><a href="http://mettadore.com/analysis/creating-a-robotic-secretary-with-hazel-automator-ruby/#footnote_2_606" id="identifier_2_606" class="footnote-link footnote-identifier-link" title="This automatically does everything through emailing my timesheet to my PM">3</a></sup></li>
<li>Work until lunch/break, before stopping, check my email (have an email from my PM waiting)</li>
<li>Click &#8220;download&#8221;<sup><a href="http://mettadore.com/analysis/creating-a-robotic-secretary-with-hazel-automator-ruby/#footnote_3_606" id="identifier_3_606" class="footnote-link footnote-identifier-link" title="This automatically files and prints the timesheet, it&amp;#8217;s just awaiting my signature">4</a></sup></li>
<li>Sign, scan, then hit enter</li>
</ol>
<p>That&#8217;s it!<sup><a href="http://mettadore.com/analysis/creating-a-robotic-secretary-with-hazel-automator-ruby/#footnote_4_606" id="identifier_4_606" class="footnote-link footnote-identifier-link" title="Well, I still have to mail it to New York, but that final step is a lot less annoying when it&amp;#8217;s not preceded by so much tedium!">5</a></sup></p>
<h3>Coda</h3>
<p>I highly suggest looking into combining Hazel, Automator, and any other talents you may bring to creating robotic secretaries for your automated tasks. This is just an example of a way you can take a morning&#8217;s worth of frustration and productivity vacuum and turn it into a few steps. Best of all, it took me about as long as two of these frustrating mornings to set everything up&#8211; meaning that it pays itself off in about half a month, on a year-long contract.<sup><a href="http://mettadore.com/analysis/creating-a-robotic-secretary-with-hazel-automator-ruby/#footnote_5_606" id="identifier_5_606" class="footnote-link footnote-identifier-link" title="I&amp;#8217;m sure this&amp;#8217;ll only get easier as more companies have APIs available. As I mentioned, I could probably have an automated task in Windows start the Ruby&nbsp; script and use output from a Freshbooks API query to automate step 2 above, meaning that I&amp;#8217;d do nothing until I got an email from my PM. However, I wanted the additional steps of adding my hours manually- more as a double check than anything.">6</a></sup></p>
<ol class="footnotes"><li id="footnote_0_606" class="footnote">There&#8217;s actually an API library for Freshbooks in Ruby that is written  and maintained by Ben Curren at Outright.com, so you could pull the  hours straight from the project in a Ruby script- I decided against this  step</li><li id="footnote_1_606" class="footnote">In full disclosure, the Automator script actually uses &#8220;Save to a variable&#8221; &#8220;create new mail message&#8221; &#8220;get from variable&#8221; &#8220;add attachments&#8221; and &#8220;send mail&#8221;&#8211; in that order. For some reason, the &#8220;add attachments&#8221; phase was throwing an error otherwise.</li><li id="footnote_2_606" class="footnote">This automatically does everything through emailing my timesheet to my PM</li><li id="footnote_3_606" class="footnote">This automatically files and prints the timesheet, it&#8217;s just awaiting my signature</li><li id="footnote_4_606" class="footnote">Well, I still have to mail it to New York, but that final step is a lot less annoying when it&#8217;s not preceded by so much tedium!</li><li id="footnote_5_606" class="footnote">I&#8217;m sure this&#8217;ll only get easier as more companies have APIs available. As I mentioned, I could probably have an automated task in Windows start the Ruby  script and use output from a Freshbooks API query to automate step 2 above, meaning that I&#8217;d do nothing until I got an email from my PM. However, I wanted the additional steps of adding my hours manually- more as a double check than anything.</li></ol>]]></content:encoded>
			<wfw:commentRss>http://mettadore.com/analysis/creating-a-robotic-secretary-with-hazel-automator-ruby/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>4th, 4, and 5: Why I Don&#8217;t Start At The Front</title>
		<link>http://mettadore.com/analysis/4th-4-and-5-why-i-dont-start-at-the-front/</link>
		<comments>http://mettadore.com/analysis/4th-4-and-5-why-i-dont-start-at-the-front/#comments</comments>
		<pubDate>Sun, 28 Mar 2010 22:53:22 +0000</pubDate>
		<dc:creator>john</dc:creator>
				<category><![CDATA[Miscellany]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[workflow]]></category>

		<guid isPermaLink="false">http://mettadore.com/?p=395</guid>
		<description><![CDATA[This post is mostly a whiny diatribe on how I&#8217;m a stupid idiot. Mostly, when I code, I focus on logic: algorithms, object models and other back-end stuff. All the stuff that&#8217;s hard and doesn&#8217;t give any sort of gratification to the front-end developers or users because, well, it&#8217;s not on the front-end. The stuff [...]]]></description>
			<content:encoded><![CDATA[<p>This post is mostly a whiny diatribe on how I&#8217;m a stupid idiot.</p>
<p>Mostly, when I code, I focus on logic: algorithms, object models and other back-end stuff. All the stuff that&#8217;s hard and doesn&#8217;t give any sort of gratification to the front-end developers or users because, well, it&#8217;s not on the front-end. The stuff I like to code are the elegant binary-keyed dictionary structures that route water in multiple simultaneous directions in a hydrologic model. It&#8217;s the stuff no-one sees.</p>
<p>Consequently, because I hate the design side,<sup><a href="http://mettadore.com/analysis/4th-4-and-5-why-i-dont-start-at-the-front/#footnote_0_395" id="identifier_0_395" class="footnote-link footnote-identifier-link" title="I don&amp;#8217;t actually hate it. I just take 7 hours playing around with 2 px changes in CSS files and then finally give up">1</a></sup> my apps generally look extremely rough, almost unusable, but <em>damn</em> do they do some cool shit. If it&#8217;s something that needs a front-end, I either do that last, or get the back-end working and then ship it out.</p>
<p>Recently, I took on a project for a fellow who&#8217;d been working for months with a developer. I pretty much thought I was going to &#8220;parachute in&#8221; and take this developer&#8217;s code and bring it to launch. Well, it turned out that the previous developer didn&#8217;t actually write <em>any</em> code. None. Zip. Instead, what they did was create long &#8220;what we should do&#8221; lists and emails.</p>
<p>And, they got a design.</p>
<p>So, the &#8220;code&#8221; I was given was not code at all. Rather, it was a really nice design from a third-party designer. Thus, rather than build the back-end to the site, I had a design that I just had to plug into. I decided to break up that design into views and plug them into my new Rails app directory before I started build models.</p>
<p>This, as it turns out, was a very serious mistake.</p>
<p>Because it seems that I have a certain workflow, and that workflow is to develop an object model based on the logic that is needed, and that logic is based on the function that the application is to perform. That&#8217;s why I work so well on the backend without a design. The bare scaffolding allows me to think about the <em>object</em> and not the <em>layout</em>.</p>
<p>In this case, I made the mistake of applying this design before creating even my first model. That was bad. Very bad.</p>
<p>The thing is, designs have all kinds of embedded assumptions. Usually, when the design is based on the logic, the assumption is &#8220;it has to provide an interface for this logic.&#8221; However, when the design is created in absence of the logic, then the assumption is something more along the lines of &#8220;well, hell, I guess it might need one of these.&#8221;</p>
<p>I didn&#8217;t ever realize it until very recently, but I now know that what I was doing was some weird, disconnected hybrid of design reasoning. It was something between &#8220;This is the most robust-yet-simple object model that I can start with and build from&#8221; and &#8220;well, the design says it has an X button, so I guess I&#8217;d better build an X model.&#8221;</p>
<p>Yeah, I know it&#8217;s stupid. The thing was, it all happened so subtly that I didn&#8217;t even realize it! I guess that, in other projects, by time the design is applied, the object model is solidified. Thus, if there&#8217;s a button, you can be damn sure it needs to be hooked up. In this case, there are buttons that pretty much everyone sees and thinks &#8220;Yeah, I don&#8217;t know why that&#8217;s there.&#8221;</p>
<p>So, today I was trying to work around 7 polymorphic models and at the same time I was thinking &#8220;this would be easier if I didn&#8217;t have to scroll past all the glitzy site images to see this whenever I look at it.&#8221;</p>
<p>That was when it hit me. I don&#8217;t. And more than that, the 7 polymorphic models I have are really only there because there&#8217;s this navigation bar, immediately above the glitzy site images, that says they should be.</p>
<p>So, believe it or not, I did the crazy thing. New repository, new Rails scaffold. Start over.</p>
<p>So now, it&#8217;s 4th down in the 4th quarter, there&#8217;s like 5 minutes to play until this prototype is due, and I&#8217;m dropping back to punt with a new Rails app that doesn&#8217;t have a design applied.</p>
<p>And I&#8217;m hopeful, because it&#8217;s actually a fairly simple app, just with a complicated design. But as a simple app, I know it&#8217;ll be simple for me to whip out, now that I have a clean understanding of the object model, and no design cluttering my thoughts.</p>
<p>Damn, it&#8217;s late in the game to come to this play, but at least I know better now.</p>
<ol class="footnotes"><li id="footnote_0_395" class="footnote">I don&#8217;t actually hate it. I just take 7 hours playing around with 2 px changes in CSS files and then finally give up</li></ol>]]></content:encoded>
			<wfw:commentRss>http://mettadore.com/analysis/4th-4-and-5-why-i-dont-start-at-the-front/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Integration Dream: RubyMine, PivotalTracker, and Github</title>
		<link>http://mettadore.com/analysis/integration-dream-rubymine-pivotaltracker-and-github/</link>
		<comments>http://mettadore.com/analysis/integration-dream-rubymine-pivotaltracker-and-github/#comments</comments>
		<pubDate>Thu, 28 Jan 2010 21:25:08 +0000</pubDate>
		<dc:creator>john</dc:creator>
				<category><![CDATA[Miscellany]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Github]]></category>
		<category><![CDATA[PivotalTracker]]></category>
		<category><![CDATA[RubyMine]]></category>
		<category><![CDATA[workflow]]></category>

		<guid isPermaLink="false">http://mettadore.com/?p=132</guid>
		<description><![CDATA[I&#8217;ve been turned on to JetBrains&#8217; RubyMine quite a bit lately. Despite my affinity for more &#8220;old school&#8221; development environments like Emacs (which I used for many years in my former development life), I&#8217;ve really been enjoying working with RubyMine. In fact, I&#8217;m pretty sure it&#8217;s winning my most recent &#8220;Screw this IDE crap, I&#8217;m [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been turned on to <a href="http://www.jetbrains.com/ruby/index.html">JetBrains&#8217; RubyMine</a> quite a bit lately. Despite my affinity for more &#8220;old school&#8221; development environments like Emacs (which I used for many years in my former development life), I&#8217;ve really been enjoying working with RubyMine. In fact, I&#8217;m pretty sure it&#8217;s winning my most recent &#8220;Screw this IDE crap, I&#8217;m going back to a text editor!&#8221; self-battle.</p>
<p>Still, we could always improve, and there&#8217;s one particular improvement that would be a dream come true for me (and insure that, following my 30 day trial, I actually <em>purchase</em> the software rather than moving on to something else to try in my new found romance with Ruby). That feature is <em>true integration between <a href="http://www.jetbrains.com/ruby/index.html">RubyMine</a>, <a href="http://www.pivotaltracker.com">PivotalTracker</a> and <a href="http://github.com">Github</a></em>.<span id="more-132"></span></p>
<p>It&#8217;s actually something that I&#8217;m surprised doesn&#8217;t already exist, considering that, by all accounts, the PivotalTracker team actually <em>uses</em> RubyMine. Furthermore, PivotalTracker&#8217;s new API <a href="http://mettadore.com/abstractions/pivotal-tracker-gets-better-with-github-get-satisfaction-and-more/">has great integration with GitHub&#8217;s service hooks</a>. Telling me that surely this problem has been bumped into before.</p>
<p>In fact, it&#8217;s such an obvious need, and I&#8217;m so convinced that a solution has to exist, that I pretty much want someone to just point me to the plugin! <strong>A free pint at <a href="http://www.doublemountainbrewery.com/">Double Mountain Brewery</a> in Hood River for anyone who can point me to that plugin!</strong></p>
<p>My current workflow is disconnected because, while I can easily create a commit message that starts/finishes a PivotalTracker story, I still have to go to the PivotalTracker website to get the story number, which involves a lot of window switching and mouse clicking. And as anybody knows, the moment I switch the window, my mental context goes right out the window.</p>
<p>Hell, at that point, I may as well see who&#8217;s complain about the new Apple announcement on Twitter. In order to use RubyMine <em>and</em> PivotalTracker, I have to check on Twitter <em>a lot</em>.</p>
<h3>Current workflow</h3>
<ol>
<li>Working on feature A, but realize that there&#8217;s a need for fix B as a consequence. Want to add fix B as a story?
<ol>
<li>Go to PivotalTracker website, add story, then go back. Or stage story somehow, but something so that you <em>don&#8217;t forget</em>.</li>
</ol>
</li>
<li>Back to RubyMine to finish feature A development. Commit using PivotalTrack&#8217;s Github integration?
<ol>
<li>Back to PivotalTracker website to look up story, copy story ID to clipboard</li>
</ol>
</li>
<li>Back to RubyMine (or terminal) to add story ID to commit message. Want to start working on fix B?
<ol>
<li>Back to PivotalTracker website to start story for fix B</li>
</ol>
</li>
<li>Work on fix B, but realize that there&#8217;s a desire for feature C…
<ol>
<li>Back to PivotalTracker website…</li>
</ol>
</li>
<li>Lather, rinse, repeat…</li>
</ol>
<p>Realizing that this is a simplified workflow, but it illustrates the point of the contextual switching needed to use both of these tools. Because of this, I often end up just thinking of stuff and forgetting it and/or dumping a long list of stories at once that may or may not be relevant. Ideally, I&#8217;d be quickly and easily able to add stories to the icebox that can later be assessed for need and added to the project&#8217;s iteration quickly. Plus, I&#8217;d be able to quickly pull a story to start/finish it from within RubyMine.</p>
<h3>Desired Workflow</h3>
<ol>
<li>Working on feature A, but realize a need for fix B. Keyboard shortcut to add feature in (modal?) window and save with &lt;enter&gt; closing window and cursor is right where it was.</li>
<li>Finish feature A and keyboard shortcut to stage/commit with optional alternative keyboard shortcut to bring window of &#8220;active stories&#8221; that I can cursor down to and hit &lt;enter&gt; (add story to commit message) type commit message and hit &lt;enter&gt; (again, closing window and returning with cursor placed)</li>
<li>work on fix B…</li>
<li>M-I-C-K-E-Y without using my M-O-U-S-E</li>
</ol>
<h3>Want that beer?</h3>
<p>Someone tell me how to do this. Let me buy you that pint!</p>
<p>I know we&#8217;ve got to be able to do this, because, well, why the heck wouldn&#8217;t we?<sup><a href="http://mettadore.com/analysis/integration-dream-rubymine-pivotaltracker-and-github/#footnote_0_132" id="identifier_0_132" class="footnote-link footnote-identifier-link" title="The usual answer to this is &amp;#8220;because my lazy ass hasn&amp;#8217;t coded it up yet.&amp;#8221; To which I have no real response. &amp;lt;cough&amp;gt;&amp;lt;cough&amp;gt;it&amp;#8217;s commercial software&amp;lt;cough&amp;gt;">1</a></sup> What I want to know is <em>what is the PivotalTracker team itself using</em>?</p>
<p>What are you using? I&#8217;ve searched for a solution to no avail. Is there a better way to add stories and get the story id into a commit message? Or am I just being ridiculous?</p>
<p>Give me this, JetBrains, and I will buy RubyMine today.</p>
<ol class="footnotes"><li id="footnote_0_132" class="footnote">The usual answer to this is &#8220;because my lazy ass hasn&#8217;t coded it up yet.&#8221; To which I have no real response. &lt;cough&gt;&lt;cough&gt;it&#8217;s commercial software&lt;cough&gt;</li></ol>]]></content:encoded>
			<wfw:commentRss>http://mettadore.com/analysis/integration-dream-rubymine-pivotaltracker-and-github/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

