<?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>Shaun Abram &#187; tools</title>
	<atom:link href="http://www.shaunabram.com/tag/tools/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.shaunabram.com</link>
	<description>Java and Technology weblog</description>
	<lastBuildDate>Tue, 27 Jul 2010 23:14:10 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>OSCON Day2: Scala</title>
		<link>http://www.shaunabram.com/oscon-day2-scala/</link>
		<comments>http://www.shaunabram.com/oscon-day2-scala/#comments</comments>
		<pubDate>Fri, 23 Jul 2010 04:11:30 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Events]]></category>
		<category><![CDATA[akka]]></category>
		<category><![CDATA[sbt]]></category>
		<category><![CDATA[scala]]></category>
		<category><![CDATA[specs]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://www.shaunabram.com/?p=868</guid>
		<description><![CDATA[I attended the Scala Summit on day 2 at OSCON. As well as the Scala introduction classes, there were interesting talks on Akka, Simple Build Tool and Specs&#8230;. Akka I attended a lecture by Jonas Boner on the Akka library. Jonas believes that it is simply too hard to write correct concurrent, scalable applications and [...]]]></description>
			<content:encoded><![CDATA[<p>I attended the <a href="http://www.oscon.com/oscon2010/public/schedule/detail/15318">Scala Summit</a> on day 2 at <a href="http://www.oscon.com/oscon2010">OSCON</a>.</p>
<p>As well as the Scala introduction classes, there were interesting talks on Akka, Simple Build Tool and Specs&#8230;.</p>
<p><span id="more-868"></span></p>
<h2>Akka</h2>
<p>I attended a lecture by<a href="http://www.oscon.com/oscon2010/public/schedule/speaker/89251"> Jonas Boner</a> on the <a href="http://akkasource.org">Akka</a> library. Jonas believes that it is simply too hard to write correct concurrent, scalable applications and that the threads and locks approach to concurrency taken in Java is far from the ideal approach. So, he created the Akka project to provide a better solution.</p>
<p>Akka is an opensource library ,with a Scala and Java API, whose MO is &#8220;Simpler Scalability, Fault-Tolerance, Concurrency &#038; Remoting&#8221;. It achieves this through the use of the <a href="http://en.wikipedia.org/wiki/Actor_model">Actor Model</a>. As well as actors, Akka provides Fault tolerance (inspired by the approach used in Erland) using a Let It Crash approach. Akka also makes use of <a href="http://en.wikipedia.org/wiki/Software_transactional_memory">Software Transactional Memory</a>.</p>
<p>It seems like a well written project with a lot of good ideas. I would like to learn more about it (and perhaps hear of it being used in some enterprise apps) before I would attempt to use it in anger, but definitely one to keep an eye on&#8230;</p>
<h2>Simple Build Tool</h2>
<p>The second interesting talk was by <a href="http://www.oscon.com/oscon2010/public/schedule/speaker/93492">Mark Harrah</a> on SBT (<a href="http://code.google.com/p/simple-build-tool">Simple Build Tool</a>).</p>
<p>SBT is for building projects. It is all about Scala: written in Scala; builds scala; defined in Scala.<br />
It uses <a href="http://ant.apache.org/ivy/">Ivy</a> for dependency management, can be run in interactive mode or via triggered execution (~) to run when the source code changes.<br />
The tool seemed neat and effective when he demoed it and this was reinforced by the other Scala presenters giving it a very big thumbs up. If I ever get a chance to start developing Scala in anger, this will be the first tool I would look at&#8230;</p>
<h2>Specs</h2>
<p>The final talk of interest was on <a href="http://www.oscon.com/oscon2010/public/schedule/detail/15321">Specs</a>, by <a href="http://www.oscon.com/oscon2010/public/schedule/speaker/89569">Eric Torreborre</a>.</p>
<p>Specs is a is a Behaviour-Driven-Design framework which provides a simple and typed language to create specifications. It seemed to be a way to create specifications as tests (with integration with JUnit and JMock) in a way that is understandable by both business and technical folks alike, in a DSL like manner. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.shaunabram.com/oscon-day2-scala/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OSCON Day1: The Productive Programmer</title>
		<link>http://www.shaunabram.com/oscon-day1-productive-programmer1/</link>
		<comments>http://www.shaunabram.com/oscon-day1-productive-programmer1/#comments</comments>
		<pubDate>Fri, 23 Jul 2010 03:09:13 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Events]]></category>
		<category><![CDATA[nealford]]></category>
		<category><![CDATA[oscon]]></category>
		<category><![CDATA[productivity]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://www.shaunabram.com/?p=898</guid>
		<description><![CDATA[I spent the afternoon of day 1 at OSCON listen to Neal Ford give his &#8220;The Productive Programmer&#8221; talk and I have to say I loved it. I have heard Neal talk before and he is an excellent speaker: clear, funny, interesting and knowledgeable. The talk was in 2 parts: Mechanics and Practice. Below are [...]]]></description>
			<content:encoded><![CDATA[<p>I spent the afternoon of day 1 at <a href="http://www.oscon.com/oscon2010">OSCON</a> listen to <a href="http://nealford.com/">Neal Ford</a> give his &#8220;<a href="http://www.oscon.com/oscon2010/public/schedule/detail/13834">The Productive Programmer</a>&#8221; talk and I have to say I loved it. I have heard Neal talk before and he is an excellent speaker: clear, funny, interesting and knowledgeable. </p>
<p>The talk was in 2 parts: Mechanics and Practice.<br />
Below are my notes from the first part of the talk (see here for <a href="http://www.shaunabram.com/oscon-day1-productive-programmer1/">part2</a>), but you can also get the original slides form <a href="http://nealford.com/downloads/conferences/Productive_Programmer_Tutorial(Neal_Ford).pdf">here</a>. The talk is based on his book of the same name, <a href="http://www.amazon.com/Productive-Programmer-Theory-Practice-OReilly/dp/0596519788">The Productive Programmer</a>. Which is similar in theme but not to be confused with the &#8220;<a href="http://www.pragprog.com/the-pragmatic-programmer">The Pragmatic Programmer</a>&#8221; book.</p>
<p><span id="more-898"></span></p>
<h2>Part1: Mechanics</h2>
<p>1. Acceleration<br />
2. Focus<br />
4. Canonicality (applying the DRY principle)<br />
3. Automation</p>
<h3>1. Acceleration</h3>
<p>The basic premise of &#8216;acceleration&#8217; is that typing is faster than navigation and that tools, especially for repetitive tasks, are your friend.</p>
<h4>Operating System accelerators</h4>
<p>For o/s accelerators, he pointed out several useful tools:</p>
<ul>
<li>Windows: explorer address bar (alt-d shifts focus to the address bar)</li>
<li>Apple: In Finder, use apple-shift-g to go to Folder; There are also a bunch of other shortcuts like apple-shift-h = go to home directory</li>
<li>Firefox: Use the numberfox plugin &#8211; I looked in to this. I think it is <a href="https://addons.mozilla.org/en-US/firefox/addon/6420/">this </a>plugin, but unfortunately, it is only available for Firefox 1.5-2.0 <img src='http://www.shaunabram.com/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' /> </li>
<li>He also suggested using smart help on Mac Leopard, but I&#8217;m not sure what this refers to&#8230;</li>
</ul>
<h4>Clipboards</h4>
<p>Neal pointed out that having only 1 clipboard with 1 entry is very limiting and suggested these tools to help:</p>
<ul>
<li>Windows: <a href="http://www.snapfiles.com/get/clcl.html">clcl</a> (infinite/100 clipboard history)</li>
<li>Mac: <a href="http://www.thornsoft.com/affiliate/iclip/index.htm">iClip</a> ($)</li>
<li>Mac: <a href="http://jumpcut.sourceforge.net/">Jumpcut</a></li>
</ul>
<h4>Directory Switching</h4>
<p>&#8216;There and back&#8217; for directory switching</p>
<ul>
<li>pushd &#8211; pushes a directory on the stack</li>
<li>popd &#8211; pops it back off</li>
</ul>
<p>(Note that these tools are also available on Windows)</p>
<h4>Command Prompts</h4>
<p>Graphical explorers better for some things, but the command line is better for others. The following are some tools to easy command prompt use:</p>
<ul>
<li>Windows: <a href="http://www.petri.co.il/add_command_prompt_here_shortcut_to_windows_explorer.htm">&#8216;Command prompt here&#8217; power toy</a></li>
<li>Windows: <a href="http://www.codeproject.com/KB/cs/commandbar.aspx">Command prompt explorer bar</a> &#8211; This looks very cool!</li>
<li>Cygwin: <a href="http://unitstep.net/blog/2009/05/16/open-cygwin-bash-shell-here/">bash here</a></li>
<li>Mac: <a href="http://www.cocoatech.com/">Path finder</a> ($)</li>
</ul>
<h4>Prefer Keyboard to Mouse</h4>
<p>When coding, always prefer keyboard to mouse</p>
<h5>Learning shortcuts</h5>
<ul>
<li>Make yourself use the shortcut, even if you&#8217;ve found it via the menu!</li>
<li>Have someone else pester you about it &#8211; e.g. pair programmer</li>
<li>There is an app called KeyCaster than displays what keys were pressed</li>
<li>Key promoter plug in for IntelliJ</li>
<li>mousefeed for eclipse</li>
<li>Try turning off menu options! Forces you to use keyboard shortcuts</li>
<li>Use flash cards &#038; cheat sheets</li>
</ul>
<h5>Java IDE Examples</h5>
<p>All of our hierarchies are too deep, including in the file system &#038; in code.<br />
He suggested the following tools for IntelliJ: </p>
<ul>
<li>goto class (like &#8216;Open resource&#8217; in Eclipse?)</li>
<li>Can also open based on capital letter patterns</li>
<li>goto symbol (opens a class based on a symbol (e.g. var name) in it</li>
<li>introduce variable (does left hand declaration for you)</li>
<li>introduce variable redux</li>
<li>escalating selection</li>
</ul>
<h5>Templates</h5>
<p>All major IDE’s and coding text editors support templates in some form.</p>
<ul>
<li>Use templates, for example in <a href="http://www.jetbrains.com/idea/features/code_assistance.html#Live_Templates">IntelliJ</a> or <a href="http://eclipse.dzone.com/news/effective-eclipse-custom-templ">Eclipse</a> for things like parameter substitution, default values, repeating values</li>
<li>
Learn the language of your templating engine e.g. <a href="http://www.jetbrains.com/idea/features/freemarker_velocity.html">Velocity</a> in IntelliJ</li>
<li>Every time you type something for the 3rd time, templatize it!</li>
</ul>
<h5>Key macro tools</h5>
<p>Key macro tools are like templates, but at the operating system level. Use them to avoid typing the same commands over and over again.<br />
Windows: <a href="http://www.autohotkey.com/">AutoHot key</a><br />
Mac: <a href="http://www.smileonmymac.com/TextExpander/">TextTxpander</a> ($)</p>
<h3>Focus</h3>
<p>Try to avoid distractions by doing simple things like:</p>
<ul>
<li>Get a comfortable chair</li>
<li>Use dual monitors (google dual monitors and productivity to see proof!)
</li>
<li>Have monitors sitting immediately in front of you</li>
<li>Use a good keyboard &#038; mouse</li>
<li>Don&#8217;t get carpal tunnel! (http://en.wikipedia.org/wiki/Carpal_tunnel_syndrome)</li>
<li>Try moving mouse to your &#8216;bad&#8217; side, or use on left AND right side (Using the mouse on your &#8216;bad&#8217; will force you to use keyboard more and will also make you ambidextrous!)</li>
<li>Motivate yourself to learn keyboard shortcuts</li>
<li>Have admin privileges for the O/S (If you are not given permission, start a spreadsheet of all the time you waste because you can&#8217;t do what you need to due to lack of admin rights; Show your boss how much time it is wasting)</li>
</ul>
<p>In general, offices are terrible environments (too many distractions) &#8211; War rooms work better.</p>
<h4>Locus of attention</h4>
<p>Anything that happens outside your locus of attention breaks ﬂow.<br />
Flow is when you have total concentration and time disappears (&#8216;in the zone&#8217;).<br />
It is hard to get in to and easy to break (like sleep in that respect).</p>
<p>To avoid breaking flow/concentration, try:</p>
<ul>
<li><a href="http://en.wikipedia.org/wiki/Tweak_UI">Tweak UI</a> &#8211; A tool that allows you to easily manipulate your Windows environment. For example, you can turn of balloon tips for ever.</li>
<li>Screen dimmers &#8211; Allow you to automatically set you background to dark after a set time
<ul>
<li>Windows: <a href="http://www.techiequest.com/jedi-concentrate-fate-inactive-windows-application-in-black/">Jedi Concentrate</a></li>
<li>Mac: <a href="http://www.lachoseinteractive.net/en/products/doodim/">Doodim</a></li>
</ul>
<li>Internet blockers
<ul>
<li>Mac: <a href="getconcentrating.com">Concentrate</a>  &#8211; Have to reboot machine to unblock. Can configure to only block certain sites.</li>
<li>Windows: <a href="http://www.techiequest.com/jedi-concentrate-fate-inactive-windows-application-in-black/">Jedi Concentrate</a></li>
</ul>
</ul>
<p>The higher the level of concentration, the denser the ideas, so to maintain concentration:</p>
<ul>
<li>Turn of notications</li>
<li>Don&#8217;t keep email open &#8211; email is best done in batches (e.g. deal with at 9, noon and 3)</li>
<li>Put on headphones</li>
<li>Create office &#8220;quiet time&#8221;</li>
</ul>
<h4>Focus techniques</h4>
<h5>Search beats navigation</h5>
<p>Search is (increasingly) better than navigation, so try to replace file hierarchy navigation with search</p>
<ul>
<li>Desktop search. e.g. <a href="http://www.google.com/quicksearchbox/">Google Desktop search</a>(aka quick search box)</li>
<li><a href="http://desktop.google.com/plugins/i/indexitall.html">Larry&#8217;s &#8220;any text file&#8221; indexer</a></li>
</ul>
<h5>Rooted Views</h5>
<p>A <a href="http://nuggets.hammond-turner.org.uk/2008/12/top-tip-rooted-views.html">rooted view</a> is a specialized explorer view with a base folder that is &#8216;rooted&#8217; at the folder you specify.<br />
(on Mac, this is simply the directory shortcuts on the left hand side)</p>
<h5>Use virtual desktops</h5>
<ul>
<li><a href="http://www.microsoft.com/windowsxp/downloads/powertoys/xppowertoys.mspx">virtual desktop manager</a> power toy</li>
<li><a href="http://virtuawin.sourceforge.net/">VirtualWin</a> (better?)</li>
<li><a href="http://www.apple.com/macosx/what-is-macosx/apps-and-utilities.html#spaces">Spaces</a> (built into leopard) </li>
</ul>
<h3>Canonicality</h3>
<p><a href="http://en.wikipedia.org/wiki/Don%27t_repeat_yourself">DRY</a> &#8211; Don&#8217;t repeat yourself</p>
<h4>ORM</h4>
<p>A database schema can be made up of DDL + xml + pojo<br />
Choose 1 and generate the others from that<br />
e.g. generate xml &#038; Pojos classes from schema<br />
(If you need to add to a class&#8217;s logic, make the generated code Abstract, and the class that extends it is where the extra, custom code gets added)<br />
Or, generate the schema &#038; POJOs from Hibernate mapping files</p>
<h4>DRY Documentation</h4>
<p>e.g. generating wiki pages from subversion check in details (see SVN2Wiki)<br />
DRY Diagrams &#8211; Generate based on code<br />
DRY Schemas &#8211; Schemaspy</p>
<h3>Automation</h3>
<p>In general, don&#8217;t do by hand what you can automate!</p>
<ul>
<li>You should have a one command build (if, on a brand new machine, you can&#8217;t issue one command to get build, and another single command to build, then you have a flawed build process)</li>
<li>Continuous Integration (good for building, metrics reporting)</li>
<li>Version Control (Essential!) &#8211; Do not comment out code! Remove and use VCS.</li>
</ul>
<h4>Subverting other tools</h4>
<p>Selenium (open source tool for UAT)<br />
Includes a side project called selenium IDE<br />
Side use: Allows you to automate debugging wizard style web apps! (you need to test one page, but you need to navigate through 10 pages to get to it &#8211; use Selenium)<br />
Record your interaction the FIRST time you walk through the page<br />
Cuts debugging time!<br />
Selenium defines an interaction API for web apps<br />
Have your Q/A dept record bug discoveries</p>
<p>You almost never do anything just once</p>
<ul>
<li>Work like a craftsman, not a laborer</li>
<li>Build shims &#038; jigs</li>
<li>Building a tool takes longer, but you are building assets</li>
<li>Develop <a href="http://www.urbandictionary.com/define.php?term=bash-fu">Bash-fu</a></li>
</ul>
<h4>Why Automate?</h4>
<ul>
<li>Time sent automating can take multiple times longer but can be used multiple+ times. And can accidentally can become a major part of project!</li>
<li>Allows throw-aways to grow into assets</li>
<li>Allows unit testing, refactoring, support</li>
<li>Solving problems by hand makes you dumber!</li>
<ul>
<li>Steals concentration</li>
<li>Squanders focus</li>
</ul>
</ul>
<h4>Justifying automating</h4>
<ul>
<li>Timebox! &#8211; Set a reasonable amount of time to POC</li>
<li>Evaluate @ end of timebox</li>
<li>
Abandon if it is not working out</li>
</ul>
<h4>Analyze the ROI</h4>
<ul>
<li>How long does it take to do X times?</li>
<li>What are the consequences of doing it wrong?</li>
<li>Automation is about time saving and risk mitigation</li>
</ul>
<p>Last and by no means least &#8211; Don&#8217;t shave yaks!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.shaunabram.com/oscon-day1-productive-programmer1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mylyn</title>
		<link>http://www.shaunabram.com/mylyn/</link>
		<comments>http://www.shaunabram.com/mylyn/#comments</comments>
		<pubDate>Thu, 11 Dec 2008 07:04:37 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[OpenSource]]></category>
		<category><![CDATA[Products]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[efficiency]]></category>
		<category><![CDATA[mylyn]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://www.shaunabram.com/?p=35</guid>
		<description><![CDATA[I&#8217;ve started using Mylyn. It is a &#8220;task-focused interface for Eclipse that reduces information overload and makes multi-tasking easy&#8221;. Its objective is to improve productivity by reducing searching, scrolling, and navigation. What does that mean? Basically, it allows you to access your bug tracker from inside Eclipse and then for each task/bug you are working [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve started using <a href="http://www.eclipse.org/mylyn/">Mylyn</a>. It is a &#8220;task-focused interface for <a href="http://www.eclipse.org/">Eclipse</a> that reduces information overload and makes multi-tasking easy&#8221;. Its objective is to improve productivity by reducing searching, scrolling, and navigation.</p>
<p>What does that mean? Basically, it allows you to access your bug tracker from inside Eclipse and then for each task/bug you are working on, it remembers what files you have been using most. The result is that when you switch back to a task you were working on before, the important and most relevant files you were using will be reopened and so at any given time, the files you need are close to hand.</p>
<p>The &#8216;tasks&#8217;, in my case, are defects/enhancements assigned to me in <a href="http://trac.edgewall.org/">Trac</a> (or specifically <a href="http://www.devjavu.com/">DevJaVu</a>), but it has integration with Bugzilla, JIRA and others.</p>
<p>It&#8217;s not exactly ground breaking or revolutionary, but it is definitely useful (although the integration/synchronisation with Trac does seem to be a bit flaky, but maybe that is an issue with DevJaVu).<br />
Next up, I would like to start making more use of the change set support.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.shaunabram.com/mylyn/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>NetBeans IDE</title>
		<link>http://www.shaunabram.com/netbeans-ide/</link>
		<comments>http://www.shaunabram.com/netbeans-ide/#comments</comments>
		<pubDate>Tue, 29 Jul 2008 00:27:29 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[OpenSource]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[ide]]></category>
		<category><![CDATA[netbeans]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://www.shaunabram.com/?p=16</guid>
		<description><![CDATA[I have been playing around with the latest NetBeans IDE (v6.1) recently, mostly as part of some JEE and  Glassfish research I&#8217;ve been doing. I am a long time Eclipse user (even back to its predecessor, VisualAge for Java), but I have been pleasantly surprised by NetBeans. It&#8217;s UI is definitely a litlle clunkier than [...]]]></description>
			<content:encoded><![CDATA[<p>I have been playing around with the latest <a href="http://www.netbeans.org/">NetBeans</a> IDE (v6.1) recently, mostly as part of some JEE and  <a href="https://glassfish.dev.java.net/">Glassfish</a> research I&#8217;ve been doing. I am a long time <a href="http://www.eclipse.org/">Eclipse</a> user (even back to its predecessor, VisualAge for Java), but I have been pleasantly surprised by NetBeans. It&#8217;s UI is definitely a litlle clunkier than Eclipse, but it is fairly intuitive and easy to use and it also seems to useful GUI builder tool that I would like to experiment with more.</p>
<p>See some reviews <a href="http://www.netbeans.org/about/press/reviews.html">here</a> and <a href="http://www.bearfruit.org/blog/2008/04/01/netbeans-6-1-spanks-eclipse-and-challenges-visual-studio">here</a>.</p>
<p>Overall, interesting and I&#8217;d like to use it some more, but I still have no plans to stop using Eclipse as my main IDE.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.shaunabram.com/netbeans-ide/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
