<?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>TroolStudio</title>
	<atom:link href="http://www.troolstudio.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.troolstudio.com</link>
	<description>Just some things I do</description>
	<lastBuildDate>Thu, 08 Sep 2011 14:52:08 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Hungry Vortex Released</title>
		<link>http://www.troolstudio.com/2011/09/08/hungry-vortex-released/</link>
		<comments>http://www.troolstudio.com/2011/09/08/hungry-vortex-released/#comments</comments>
		<pubDate>Thu, 08 Sep 2011 14:52:08 +0000</pubDate>
		<dc:creator>Max</dc:creator>
				<category><![CDATA[demo]]></category>
		<category><![CDATA[games]]></category>
		<category><![CDATA[iphone]]></category>

		<guid isPermaLink="false">http://www.troolstudio.com/?p=336</guid>
		<description><![CDATA[Just got a note from Apple that Hungry Vortex has been approved at the app store. This is really a follow up to Vortex Pool, but with better everything. The game play has been tweeked, there are now multiple modes and power-ups. We&#8217;ve also added achievements, game center integration, way better graphics, and LOOT (so [...]]]></description>
			<content:encoded><![CDATA[<p>Just got a note from Apple that Hungry Vortex has been approved at the app store. This is really a follow up to Vortex Pool, but with better everything. The game play has been tweeked, there are now multiple modes and power-ups. We&#8217;ve also added achievements, game center integration, way better graphics, and LOOT (so you can customize the game&#8217;s look). Check it out in the <a title="Hungry Vortex" href="http://itunes.apple.com/us/app/hungry-vortex/id460465822?mt=8" target="_blank">App Store</a> or look at our <a title="TroolStudio – Hungry Vortex" href="http://www.troolstudio.com/apps/hungry/" target="_blank">page</a> for the game. As always let us know what you think in the comments and feel free to rate it if you get the chance.</p>
<p><a href="http://www.troolstudio.com/2011/09/08/hungry-vortex-released/"><em>Click here to view the embedded video.</em></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.troolstudio.com/2011/09/08/hungry-vortex-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DiceEQ iOS4 Problems</title>
		<link>http://www.troolstudio.com/2010/07/06/diceeq-ios4-problems/</link>
		<comments>http://www.troolstudio.com/2010/07/06/diceeq-ios4-problems/#comments</comments>
		<pubDate>Tue, 06 Jul 2010 04:13:49 +0000</pubDate>
		<dc:creator>Max</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[diceeq]]></category>
		<category><![CDATA[iOS4 problems]]></category>
		<category><![CDATA[update]]></category>

		<guid isPermaLink="false">http://www.troolstudio.com/?p=324</guid>
		<description><![CDATA[UPDATE: Added a new version that seems to fix some of the issues. Unfortunately, there still appears to be a problem with iPhone4. DiceEQ on iPhone4 does not save all of the stats on exit. I only have an iPhone 3G so will try to find someone who will let me borrow their iPhone4 to [...]]]></description>
			<content:encoded><![CDATA[<p><strong>UPDATE</strong>: Added a new version that seems to fix some of the issues. Unfortunately, there still appears to be a problem with iPhone4. DiceEQ on iPhone4 does not save all of the stats on exit. I only have an iPhone 3G so will try to find someone who will let me borrow their iPhone4 to fix this new bug.</p>
<p>First thanks to all who told me about DiceEQ issues with iOS4. It&#8217;s cool to see people actually using it. Since I have a 3G iPhone I didn&#8217;t immediately update to iOS4 and so wasn&#8217;t aware that anything was wrong. However, now that I am, the problem has been fixed and the updated version is out to Apple for approval. I&#8217;m hoping it&#8217;ll be out in the next few days. I&#8217;ll update you all when it is.</p>
<p>VortexPool appears to be working fine with iOS4.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.troolstudio.com/2010/07/06/diceeq-ios4-problems/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Graphsy Update: Shelves and Bug Fixes</title>
		<link>http://www.troolstudio.com/2009/02/12/graphsy-update-shelves-and-bug-fixes/</link>
		<comments>http://www.troolstudio.com/2009/02/12/graphsy-update-shelves-and-bug-fixes/#comments</comments>
		<pubDate>Thu, 12 Feb 2009 13:31:57 +0000</pubDate>
		<dc:creator>Max</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.blog.graphsy.com/?p=281</guid>
		<description><![CDATA[It&#8217;s been a while, but here is a new update for Graphsy.&#160; The biggest change is the new shelves system for storing and using common objects. I have also changed the default behavior to have the shelf panel visible when Graphsy loads.&#160; Every user gets two shelves by default, Basic Shapes and Basic Shapes with [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s been a while, but here is a new update for Graphsy.&nbsp; The biggest change is the new shelves system for storing and using common objects. I have also changed the default behavior to have the shelf panel visible when Graphsy loads.&nbsp; Every user gets two shelves by default, Basic Shapes and Basic Shapes with Anchors, but can create any number of shelves.&nbsp; Adding and removing objects is done by dragging them into and out of the shelf and individual shelves can be stored. Here is a brief video tutorial on how to use shelves.</p>
<p><a href="http://www.troolstudio.com/2009/02/12/graphsy-update-shelves-and-bug-fixes/"><em>Click here to view the embedded video.</em></a></p>
<p>In addition to shelves, several other things have also changed.&nbsp; First you&#8217;ll notice that the logo at the top has gotten much smaller and the drawing area has gotten much bigger.&nbsp; I have also taken the time to fix many bugs (most of them dealing with Internet Explorer) and improve performance accross all browsers, so hopefully you&#8217;ll find using Graphsy more pleasent.</p>
<p>As for the future, the next big updates will involve grouping objects together, creating tables. exporting graphs as PDFs, and sharing shelves among users. Let me know if you have any other ideas. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.troolstudio.com/2009/02/12/graphsy-update-shelves-and-bug-fixes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Short Graphsy Update</title>
		<link>http://www.troolstudio.com/2009/01/26/short-graphsy-update/</link>
		<comments>http://www.troolstudio.com/2009/01/26/short-graphsy-update/#comments</comments>
		<pubDate>Mon, 26 Jan 2009 06:20:47 +0000</pubDate>
		<dc:creator>Max</dc:creator>
				<category><![CDATA[graphsy]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[update]]></category>
		<category><![CDATA[version]]></category>

		<guid isPermaLink="false">http://www.blog.graphsy.com/?p=279</guid>
		<description><![CDATA[Haven&#8217;t posted anything lately so I wanted to catch everyone up on my progress. For the past few weeks I have been implementing a kind of shelf system to store custom shapes. That is more or less done. What&#8217;s holding up the update right now are some small bugs, UI enhancements, and performance upgrades. One [...]]]></description>
			<content:encoded><![CDATA[<p>Haven&#8217;t posted anything lately so I wanted to catch everyone up on my progress.  For the past few weeks I have been implementing a kind of shelf system to store custom shapes.  That is more or less done.  What&#8217;s holding up the update right now are some small bugs, UI enhancements, and performance upgrades.</p>
<p>One of the things I want when the shelves system is done, is to release many different object that could be used in several different chart drawing projects.  However when creating them I ran into a few bugs and performance issues.  These are being sorted out right now.</p>
<p>In addition to those, I also began to clean up the UI elements. Some of the buttons did not look correct and consistent, so I am changing those as I go.  I also shrunk the Graphsy logo to give more drawing room to the user.</p>
<p>I&#8217;m hoping to get all of the features done in about a week, so if everything goes right you should see a new and improved Graphsy version after that.</p>
<p>After this upcoming release, I will spend some time updating the videos, front page, blog, and the help system of Graphsy. In the mean time feel free to <a href="http://www.graphsy.com/request">request new features or report bugs</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.troolstudio.com/2009/01/26/short-graphsy-update/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Does everyone need to learn how to write code?</title>
		<link>http://www.troolstudio.com/2009/01/09/does-everyone-need-to-learn-how-to-write-code/</link>
		<comments>http://www.troolstudio.com/2009/01/09/does-everyone-need-to-learn-how-to-write-code/#comments</comments>
		<pubDate>Fri, 09 Jan 2009 06:10:21 +0000</pubDate>
		<dc:creator>Max</dc:creator>
				<category><![CDATA[opinion]]></category>
		<category><![CDATA[personal]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Google Map]]></category>
		<category><![CDATA[Languages]]></category>
		<category><![CDATA[Mashup]]></category>
		<category><![CDATA[microsoft]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[software engineering]]></category>

		<guid isPermaLink="false">http://www.blog.graphsy.com/?p=224</guid>
		<description><![CDATA[I have been debating this with myself for quite some time now. On one hand, it seems that writing code, or at least understanding enough about code to edit it, is quickly becoming a skill most people will find helpful to have.  Something like knowing how to put together IKEA furniture, not completely necessary to [...]]]></description>
			<content:encoded><![CDATA[<p>I have been debating this with myself for quite some time now. On one hand, it seems that writing code, or at least understanding enough about code to edit it, is quickly becoming a skill most people will find helpful to have.  Something like knowing how to put together IKEA furniture, not completely necessary to do, but helpful if you know how. On the other hand, however, developers are doing a good job creating tools that abstract the code via some visualization. At the end of the day, these tools still produce code, but the user never has to see it.</p>
<p><span id="more-224"></span></p>
<p>I feel like the trend to create better, more domain specific, tools will win out over the trend of teaching non-technical people software engineering and development practices.  I&#8217;ve met plenty of people who consider programming almost magic, they don&#8217;t understand it and do not really want to.  Even if there is a simpler solution to their problem, if it forces them to write a little bit of code, they will take the hard way out.</p>
<p>Having said that, these people still want to customize their working environment, they still want to optimize their process and create custom software experiences.  A really good example of a domain of software that enables users to do just that is <a class="zem_slink" title="Content management system" rel="wikipedia" href="http://en.wikipedia.org/wiki/Content_management_system">CMS</a> or Blogging tools.  They enable users to customize their process as well as the look of their site and content.  They are largely <a class="zem_slink" title="WYSIWYG" rel="wikipedia" href="http://en.wikipedia.org/wiki/WYSIWYG">WYSIWYG</a> and do not require one to ever look at the code if he doesn&#8217;t want to.  And, at the end, all of the user&#8217;s work is turned into code.</p>
<p>Creating software that makes it easy and fast to publish content to the web is arguably what has lead to the rise of Blogs.  We can now enjoy content from people who do not know, understand, or care about the technical side of things. And now, in addition to publishing software, there are more general tools being created.  These tools are designed to allow regular users to create their own applications with the same ease as publishing on the web. They are designed to create Mashups.</p>
<p>A <a class="zem_slink" title="Mashup (web application hybrid)" rel="wikipedia" href="http://en.wikipedia.org/wiki/Mashup_%28web_application_hybrid%29">mashup</a> is an application that combines the features of several other applications into a single tool.  A great site to track mashups is <a href="http://www.programmableweb.com/mashups">ProgrammableWeb</a>. Check it out to get a better idea of what mashups are all about.</p>
<p>The advantage of creating mashups is that the developer does not really need to create any specific feature of an application.  For instance, lots of mashups use <a href="http://maps.google.com/">Google </a><a rel="homepage" href="http://maps.google.com/">Maps</a> to present mapping information.  This lets developers to concentrate on their core competency and not try to recreate already existing services.  On top of that, by using something as popular as Google Maps, developers are able to leverage a well known interface and thus, make their own application feel more familiar to the user.</p>
<p>As we have been discussing so far, non-technical users want more freedom and control over their experiences with applications.  This is where mashups come in.  Because creating a mashup involves reusing features that one is familiar with, their creation seems like a natural fit for application users.  To that end, several mashup creation tool-kits have appeared.  Most notably <a href="http://pipes.yahoo.com/pipes/">Pipes</a> from Yahoo, <a href="http://www.popfly.com/">Popfly</a> from Microsoft, and <a href="http://mashmaker.intel.com/web/">MashMaker</a> from Intel. The first two are really just abstractions of the programming paradigm using graphical elements.  The third does something very different.</p>
<p>Instead of trying to simulate programming via block and arrows, MashMaker works as a plug-in into Firefox or IE.  It lets users annotate their data as they are browsing the web.  The annotated data can then be used as input into other services and the produced result can be insert back into the original page.  For example, one can specify which part of a <a href="http://www.craigslist.org/about/sites">CraigsList</a> listing is the address and have MashMaker render a CraigsList page annotating all of the listings with a small map from <a class="zem_slink" title="Google Maps" rel="homepage" href="http://maps.google.com">GoogleMaps</a>. You can find more information, including a demo video, as well as the plug-in itself, on the MashMaker site.</p>
<p>By restricting the domain and simplifying the problem, developers can create powerful tools that enable non-technical users to create custom applications and experiences.  In the case of blogging and mashup creation tools less is truly more.  This is more broadly knows as domain specific languages, but that&#8217;s a topic for another post at a later time.</p>
<h6 class="zemanta-related-title" style="font-size: 1em;">Related articles by Zemanta</h6>
<ul class="zemanta-article-ul">
<li class="zemanta-article-ul-li"><a href="http://mashable.com/2009/01/08/google-maps-mashups-tools/">Google Maps: 100+ Best Tools and Mashups</a></li>
<li class="zemanta-article-ul-li"><a href="http://www.readwriteweb.com/archives/see_what_where_when_with_this_flickr_mashup.php">See &#8220;What, Where, When&#8221; with this Flickr Mashup</a></li>
</ul>
<div class="zemanta-pixie" style="margin-top: 10px; height: 15px;"><a class="zemanta-pixie-a" title="Zemified by Zemanta" href="http://reblog.zemanta.com/zemified/75550625-9d65-4885-8546-f77e2a6358dc/"><img class="zemanta-pixie-img" style="border: medium none; float: right;" src="http://img.zemanta.com/reblog_b.png?x-id=75550625-9d65-4885-8546-f77e2a6358dc" alt="Reblog this post [with Zemanta]" /></a></div>
]]></content:encoded>
			<wfw:commentRss>http://www.troolstudio.com/2009/01/09/does-everyone-need-to-learn-how-to-write-code/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Graphsy Update: Custom Shapes</title>
		<link>http://www.troolstudio.com/2008/12/28/graphsy-update-custom-shapes/</link>
		<comments>http://www.troolstudio.com/2008/12/28/graphsy-update-custom-shapes/#comments</comments>
		<pubDate>Mon, 29 Dec 2008 00:40:49 +0000</pubDate>
		<dc:creator>Max</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.blog.graphsy.com/?p=250</guid>
		<description><![CDATA[I&#8217;ve just added the ability to create custom shapes to Graphsy. This update ads a new button to the tool bar, right next to the object creation button. As with all of the previous drawing tools, users can choose to draw a single shape or several. Hitting the button once enters single shape mode and [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-252" style="border: 5px none;" title="Sample Shape" src="http://localhost:8888/wordpress/wp-content/uploads/2008/12/star.jpg" alt="Sample Shape" width="184" height="175" />I&#8217;ve just added the ability to create custom shapes to <a href="http://www.graphsy.com">Graphsy</a>.  This update ads a new button to the tool bar, right next to the object creation button.  As with all of the previous drawing tools, users can choose to draw a single shape or several.  Hitting the button once enters single shape mode and hitting it again will place Graphsy into infinite drawing mode, until the button is hit a third time.</p>
<p><img class="size-full wp-image-251 alignright" style="margin-left: 5px;" title="Custom Creation Button" src="http://localhost:8888/wordpress/wp-content/uploads/2008/12/toolbar.jpg" alt="The button that begin the custom object creation process." width="152" height="40" /></p>
<p>When actually drawing shapes, you begin by clicking once on an empty spot, to select where the shape will start.  Then click again to draw the first edge of the shape.  Then, each additional click adds another edge. To finish drawing the shape, you have to click on the starting node.</p>
<p><img class="size-medium wp-image-254 alignright" style="margin-left: 5px;" title="shape_cmenu" src="http://localhost:8888/wordpress/wp-content/uploads/2008/12/shape_cmenu.jpg" alt="shape_cmenu" width="184" height="175" />The custom shapes have the same context menu as the regular shapes with one additional button.  In the lower left corner of the context menu there is a button to edit the shape.  By clicking on that button, or pressing &#8216;z&#8217;, you can edit the shape by moving, deleting, and creating new nodes.  All of those are accessible from the appropriate context menu.  A selected node can be moved or deleted it via its context menu.  Selecting an edge enables one to split it at the point of selection, again via the context menu.</p>
<p>The shape objects can be used in the same way as the regular shapes.  One can change their width and height, animate them, or change their color properties. Everything that can be done with regular shapes can be done with these &#8220;custom&#8221; shapes.</p>
<p>Next on the agenda is to create a way to group objects together and save them into libraries that could be shared with other users.  I&#8217;m still trying to figure out a good name for the library, right now I&#8217;m thinking shelf, but if you have any suggestions please post them in the comments or email me. I hope you guys like the new feature, as always let me know what you think.</p>
<p>To finish up here is a demo of the shapes:</p>
<div class="graphsy_embed">
<div style="border: 0px; width:400px; height:400px;" id="graphsy_65978"></div>
</div>
<p><script type="text/javascript" src="http://www.graphsy.com/javascripts/embed.js"> </script><script type="text/javascript">
Graphsy_InitEmbeded("graphsy_65978", "400", "400", "http://www.graphsy.com/studio/mini_browse?width=400&#038;height=400&#038;pid=234&#038;lines=true&#038;shapes=true&#038;tools=true&#038;info=true");
</script></p>
]]></content:encoded>
			<wfw:commentRss>http://www.troolstudio.com/2008/12/28/graphsy-update-custom-shapes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Graphsy Gets Animated</title>
		<link>http://www.troolstudio.com/2008/12/17/graphsy-gets-animated/</link>
		<comments>http://www.troolstudio.com/2008/12/17/graphsy-gets-animated/#comments</comments>
		<pubDate>Thu, 18 Dec 2008 04:50:27 +0000</pubDate>
		<dc:creator>Max</dc:creator>
				<category><![CDATA[demo]]></category>
		<category><![CDATA[graph drawing]]></category>
		<category><![CDATA[graphsy]]></category>
		<category><![CDATA[Animation]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://www.blog.graphsy.com/?p=241</guid>
		<description><![CDATA[This has been a long time coming.&#160; I&#8217;ve just added animation capabilities to Graphsy.&#160; They are simple to start with, a Fade In, Fade Out, and Move animation.&#160; But that should be powerful enough to create something interesting.&#160; The best way to explain all of the new functionality is really just to show you.&#160; So [...]]]></description>
			<content:encoded><![CDATA[<p>This has been a long time coming.&nbsp; I&#8217;ve just added animation capabilities to <a href="http://www.graphsy.com">Graphsy</a>.&nbsp; They are simple to start with, a Fade In, Fade Out, and Move animation.&nbsp; But that should be powerful enough to create something interesting.&nbsp; The best way to explain all of the new functionality is really just to show you.&nbsp; So here is a short video demoing some of the animation capabilities.&nbsp; As everything else, animations can also be embedded, if there are animations, animation controls will appear on an embedded item.&nbsp; I hope you guys try this out and let me know what you think, either here or email me at max@graphsy.com.</p>
<p><object width="400" height="302"><param name="allowfullscreen" value="true"><param name="allowscriptaccess" value="always"><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=2560567&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=white&amp;fullscreen=1"><embed src="http://vimeo.com/moogaloop.swf?clip_id=2560567&amp;server=vimeo.com&amp;show_title=0&amp;show_byline=0&amp;show_portrait=0&amp;color=white&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="302"></embed></object></p>
<p>Here is also a simple example of an embedded <a href="http://www.graphsy.com">Graphsy</a> animation. Hit <strong>play</strong>, followed by <strong>next</strong>:</p>
<div class="graphsy_embed">
<div style="border: 0px; width:400px; height:400px;" id="graphsy_84323"></div>
</div>
<p><script type="text/javascript" src="http://www.graphsy.com/javascripts/embed.js"> </script><script type="text/javascript">
Graphsy_InitEmbeded("graphsy_84323", "400", "400", "http://www.graphsy.com/studio/mini_browse?width=400&#038;height=400&#038;pid=224&#038;lines=true&#038;shapes=true&#038;tools=true&#038;info=true");
</script></p>
<div style="margin-top: 10px; height: 15px;" class="zemanta-pixie"><a class="zemanta-pixie-a" href="http://reblog.zemanta.com/zemified/f3dccac0-c8c7-4449-8272-46f289eb5ed5/" title="Zemified by Zemanta"><img style="border: medium none ; float: right;" class="zemanta-pixie-img" src="http://img.zemanta.com/reblog_e.png?x-id=f3dccac0-c8c7-4449-8272-46f289eb5ed5" alt="Reblog this post [with Zemanta]"></a></div>
]]></content:encoded>
			<wfw:commentRss>http://www.troolstudio.com/2008/12/17/graphsy-gets-animated/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>What&#039;s up with Graphsy</title>
		<link>http://www.troolstudio.com/2008/11/07/whats-up-with-graphsy/</link>
		<comments>http://www.troolstudio.com/2008/11/07/whats-up-with-graphsy/#comments</comments>
		<pubDate>Sat, 08 Nov 2008 00:02:14 +0000</pubDate>
		<dc:creator>Max</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.blog.graphsy.com/?p=238</guid>
		<description><![CDATA[Just wanted to drop a line about a new features I&#8217;ve been working on.  It&#8217;s not on the list of requested features, but I think it&#8217;s pretty cool none-the-less.  I wanted to create controls that would allow for simple animations of graphs.  Something where nodes can be rearranged to demonstrate a point. The impetus for [...]]]></description>
			<content:encoded><![CDATA[<p>Just wanted to drop a line about a new features I&#8217;ve been working on.  It&#8217;s not on the list of requested features, but I think it&#8217;s pretty cool none-the-less.  I wanted to create controls that would allow for simple animations of graphs.  Something where nodes can be rearranged to demonstrate a point.</p>
<p>The impetus for this feature came from wanting to write a post clustering and how it relates to software engineering.  I wanted to use Graphsy for illustrations, and then thought about using animations to demonstrate clustering.  Clustering and animations are a very natural fit, but <a href="http://www.graphsy.com">Graphsy</a> did not have that available.  So I figured I would create it.</p>
<p>As I started implementing the features I realized that it is going to be a bit more work than I originally thought.  A few things in the low levels needs to be changed to make room for it.  And, as I was creating it, the interface I wanted to use for it changed as well.  The feature has morphed from something really simple to something a bit more powerful, but hopefully still as simple to use.  I&#8217;m about half way there right now.  I&#8217;ve crossed most of the major hurdles already and can create some very basic animations.  What&#8217;s left is cleaning up the UI, adding build in and build out animations, and creating a player available in the embedded version of the graphs.</p>
<p>I hope to finish this in the next two to three weeks.  With a post about the features will also come a post about clustering to demonstrate the usefulness of <a href="http://www.graphsy.com">Graphsy</a>.  I hope people don&#8217;t mind me going off the path, but I really want to get <a href="http://www.graphsy.com">Graphsy</a> to a point where I use it as my main graph creation/editing tool.  It&#8217;s not there yet, hence the alpha and not beta, but hopefully it&#8217;ll get there in the next few months.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.troolstudio.com/2008/11/07/whats-up-with-graphsy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Testing the Tests via Mutation</title>
		<link>http://www.troolstudio.com/2008/10/29/testing-the-tests-via-mutation/</link>
		<comments>http://www.troolstudio.com/2008/10/29/testing-the-tests-via-mutation/#comments</comments>
		<pubDate>Wed, 29 Oct 2008 22:10:41 +0000</pubDate>
		<dc:creator>Max</dc:creator>
				<category><![CDATA[fun]]></category>
		<category><![CDATA[software engineering]]></category>
		<category><![CDATA[testing]]></category>
		<category><![CDATA[Code coverage]]></category>
		<category><![CDATA[mutation testing]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Source code]]></category>
		<category><![CDATA[Test]]></category>
		<category><![CDATA[Test case]]></category>
		<category><![CDATA[Test suite]]></category>
		<category><![CDATA[Test-driven development]]></category>
		<category><![CDATA[Unit Tests]]></category>

		<guid isPermaLink="false">http://www.blog.graphsy.com/?p=217</guid>
		<description><![CDATA[To set the ground for this post I first need to reiterate a message that has been heard from many other sources.  Code coverage can only tell you how bad your test suite is, not how good it is.  Meaning that if you have bad coverage you know something is wrong, but a high coverage [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.daylife.com/image/094SfSe5umfoN"><img class="alignleft" style="margin-right: 5px; margin-top: 5px;" title="HELMAND PROVINCE, AFGHANISTAN - JULY 21: A KBR..." src="http://cache.daylife.com/imageserve/094SfSe5umfoN/150x100.jpg" alt="HELMAND PROVINCE, AFGHANISTAN - JULY 21: A KBR..." width="161" height="106" /></a></p>
<p>To set the ground for this post I first need to reiterate a message that has been heard <a href="http://thediscoblog.com/2007/04/21/short-circuiting-code-coverage/">from</a> <a href="http://www.infoq.com/news/2007/05/100_test_coverage">many</a> <a href="http://schlitt.info/applications/blog/index.php?/archives/539-Why-code-coverage-matters.html">other</a> <a href="http://beust.com/weblog/archives/000444.html">sources</a>.  Code coverage can only tell you how bad your test suite is, not how good it is.  Meaning that if you have bad coverage you know something is wrong, but a high coverage number tells you virtually nothing.  This message seems obvious for many developers out there, but it&#8217;s not heard by a surprisingly large section of them.</p>
<p>I have been a teaching assistant for several undergraduate and graduate testing classes.  Every year when I grade their unit testing projects I always get several of them (about a quarter) that hand in tests with &#8220;good&#8221; coverage, but not a single assert statement to check the results of their tests.  This is even after I get up in front of the class and rant about the exact problem from previous years. Needless to say those students tend to do poorly.</p>
<p>So, if test coverage is not a good metric, how can developers measure the quality of their test suites?  I&#8217;m going to talk about one approach in this post, mutation testing.</p>
<p><span id="more-217"></span></p>
<h2>What is Mutation Testing?</h2>
<p>When testing code, developers want to confirm that the application does what it is supposed to do by trying a whole bunch of different cases where the end result is know.  Mutation testing applies a similar idea to testing the test suite by intentionally inserting bugs into the application&#8217;s source code.  If the test suite can&#8217;t find these bugs, then we know something is wrong.  We can further study the effectiveness of individual test cases by observing the number of mutations each test case can find.  If there are test cases that detect no mutations, then they need to be examined to find out exactly what functionality they are trying to test.</p>
<p>Now at this point I do need to say something that should be obvious.  Like most forms of testing, mutation can only show you the presence of problems, not guarantee their absence.  If mutations are found, it does not necessarily mean that the test suite is finding all bugs.  The goal of mutation testing is to give developers more confidence in their test suite, and, as we talk about the kinds of mutations automated tools do, you&#8217;ll see where the limitations of this form of testing are.</p>
<h2>What Kinds of Mutations are There?</h2>
<p><a href="http://www.flickr.com/photos/97977170@N00/2937192274"></a></p>
<p><a href="http://www.flickr.com/photos/97977170@N00/2937192274"><img class="alignleft" style="margin-right: 5px; margin-top: 5px;" title="Mutant" src="http://farm4.static.flickr.com/3070/2937192274_7171daf4d7_m.jpg" alt="" width="136" height="143" /></a>The mutations performed by automated tools are usually fairly straightforward.  They are not large logic changes, but instead small replacements of logical and arithmetic operators.  For instance, mutated code may replace the <strong>&#8216;+&#8217; </strong>character by a <strong>&#8216;-&#8217;</strong> character and vise versa.  It may change logical <strong>AND</strong> operators such as <strong>&amp;&amp;</strong> to logical <strong>OR</strong> operators such as<strong> ||</strong>.  Mutation will also change comparisons such as <strong>==</strong> to <strong>&lt;</strong> or <strong>&gt;</strong> as well as swap increments like <strong>++</strong> for decrements such as <strong>&#8211;</strong>.  In some cases, mutation may also change constant values, change return codes, or even reorder case statements.</p>
<p>Developers need to be aware that some mutations may not really change the semantic meaning of the source code.  For instance, if a loop is incrementing an index value (<strong>i++</strong>) until a check (<strong>i == 5</strong>) is made, swapping the <strong>==</strong> comparator for <strong>&gt;=</strong> will create an equivalent mutant. Meaning that in this particular case <strong>i == 5</strong> will trigger at the same time as <strong>i &gt;= 5</strong>.  Performing this mutation should not trigger a failure of any of the unit tests.  Some mutation tools will attempt to reduce the number of equivalent mutants, but their success rates will vary with every case.</p>
<h2>What Code Should be Mutated?</h2>
<p>One of the biggest reasons mutation has not been as popular as some think it should be is because it leads to a large number of mutant applications.  So, if the time to compile the application or the time to execute the test suite is long, developers have to be careful about how their applications are to be mutated.</p>
<p>A simple way to organize mutation testing is to first figure out how many mutants you have the time to test.  The formula for that is simple: int NumMutants = MutationTime/(CompileTime+TestingTime).  If we only introduce one mutation per version, mutation testing may not get you very far.  It is clear that for any non-trivial application we will have to do better.</p>
<p>It is not clear, however, just how many mutations should be introduced in a version.  Simply changing every operator that can be changed won&#8217;t do much good as a single mutation may always be caught as a bug, well before other mutations are even touched.  We need to do something smarter.</p>
<p>What we really want, is to introduce as many independent mutations as we can and run only those test cases that may be effected by those mutations.  This is exactly the information we get from coverage.  To target a test case we can study what code is covered by that test case and then introduce mutations, one at a time, only in that code.  Then, by separating the test cases into sets such that each test case in the set covers a different portion of the code, we can introduce mutations in the different regions.</p>
<p>For an example consider the following piece of code:</p>
<pre><strong>//SET UP
if(a == TRUE){
  //DO SOMETHING
}else{
  //DO SOMETHING ELSE
}</strong></pre>
<p>If in this case we have two test cases that both execute <strong>SET UP</strong> and then test case 1 executes <strong>DO SOMETHING</strong>, while test case 2 executes <strong>DO SOMETHING ELSE</strong>, we can introduce mutations in <strong>DO SOMETHING</strong> as well as <strong>DO SOMETHING ELSE</strong>, while keeping the rest of the code the same.  This way we test two different test cases.  If we mutate <strong>SET UP</strong>, both cases should fail and therefore detect that bug, introducing mutations in <strong>DO SOMETHING</strong> and <strong>DO SOMETHING ELSE</strong> in addition to mutating <strong>SET UP</strong>, will get us nowhere since the bug in<strong> SET UP</strong> will be caught first.</p>
<p>Thus, we have to be smart about where mutations are introduced.  Some mutation tools still take the simple approach of only mutating the code in one place and then executing the entire test suite.  When applying this technique, you may be able to reduce the amount of time spent by only running tests that cover the mutated code.  In addition if your setup allows for incremental compiling, or is a scripted system, your build time may be short as well.</p>
<h2>What Tools are Out There?</h2>
<p>Mutation testing is heavily dependent on the existence of tools.  Therefore I want to end this by pointing to a few of the ones out there:</p>
<ul>
<li><a href="http://jumble.sourceforge.net/index.html">Jumble for Java</a></li>
<li><a href="http://jester.sourceforge.net/">Jester for Java and Pester for Python</a></li>
<li><a href="http://glu.ttono.us/articles/2006/12/19/tormenting-your-tests-with-heckle">Heckle for Ruby</a></li>
<li><a href="http://nester.sourceforge.net/">Nester fo C#</a></li>
<li><a href="http://in2test.lsi.uniovi.es/sqlmutation/">SQLMutation for SQL</a></li>
</ul>
<p>If you know of other free tools please post them in the comments and I will add them to the list. Two other great resources to check out are <a href="http://www.mutationtest.net/twiki/bin/view/Resources/WebHome">Mutation Testing Online</a> and the <a href="http://en.wikipedia.org/wiki/Mutation_testing">Wikipedia entry for Mutation Testing</a></p>
<div class="zemanta-pixie" style="margin-top: 10px; height: 15px;"><a class="zemanta-pixie-a" title="Zemified by Zemanta" href="http://reblog.zemanta.com/zemified/b77c88d1-b723-4476-98eb-a500121b88d6/"><img class="zemanta-pixie-img" style="border: medium none; float: right;" src="http://img.zemanta.com/reblog_e.png?x-id=b77c88d1-b723-4476-98eb-a500121b88d6" alt="Reblog this post [with Zemanta]" /></a></div>
]]></content:encoded>
			<wfw:commentRss>http://www.troolstudio.com/2008/10/29/testing-the-tests-via-mutation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Graphsy Update: Save Your Colors</title>
		<link>http://www.troolstudio.com/2008/10/22/graphsy-update-save-your-colors/</link>
		<comments>http://www.troolstudio.com/2008/10/22/graphsy-update-save-your-colors/#comments</comments>
		<pubDate>Wed, 22 Oct 2008 05:23:03 +0000</pubDate>
		<dc:creator>Max</dc:creator>
				<category><![CDATA[graph drawing]]></category>
		<category><![CDATA[graphsy]]></category>
		<category><![CDATA[Color]]></category>
		<category><![CDATA[color picker]]></category>
		<category><![CDATA[Color tool]]></category>
		<category><![CDATA[features]]></category>
		<category><![CDATA[Graphics]]></category>
		<category><![CDATA[Screenshot]]></category>
		<category><![CDATA[update]]></category>

		<guid isPermaLink="false">http://www.blog.graphsy.com/?p=211</guid>
		<description><![CDATA[This new update brings with it a way to store colors in palettes.  The color picker has changed to include enough space for 23 colors.  Once a color is selected the user has to simply drag it from the display into 1 of the 23 slots available.  These color choices will stay with the user [...]]]></description>
			<content:encoded><![CDATA[<p>This new update brings with it a way to store colors in palettes.  The color picker has changed to include enough space for 23 colors.  Once a color is selected the user has to simply drag it from the display into 1 of the 23 slots available.  These color choices will stay with the user across all of the projects and will be remembered when relaunching <a href="http://www.graphsy.com">Graphsy</a>.</p>
<p>The next feature I am working on is custom shapes.  I want to let users create custom shapes, combine them together into libraries, and share those libraries with others.  There is lots of work that needs to go into this, but I hope to have the basic creation tools available shortly.  Check out a list of features that were requested by other users, vote for your favorites, and add new ones at <a href="http://www.graphsy.com/request">www.graphsy.com/request</a>.</p>
<p>Since all of these updates, the tutorial videos are really getting out of date.  I&#8217;m going to spend some time this week updating them.  Hopefully I can get the object creation feature out in 2-3 weeks, unless work gets in the way again.</p>
<p>Anyway, here is a screenshot of the new feature.</p>
<div class="wp-caption aligncenter" style="width: 356px"><img title="New Color Picker" src="http://blog.graphsy.com/images/color_pick.jpg" alt="New Color Picker" width="346" height="234" /><p class="wp-caption-text">New Color Picker</p></div>
<div class="zemanta-pixie" style="margin-top: 10px; height: 15px;"><a class="zemanta-pixie-a" title="Zemified by Zemanta" href="http://reblog.zemanta.com/zemified/9108f9c7-3182-4d21-8041-afc577b3750a/"><img class="zemanta-pixie-img" style="border: medium none; float: right;" src="http://img.zemanta.com/reblog_e.png?x-id=9108f9c7-3182-4d21-8041-afc577b3750a" alt="Reblog this post [with Zemanta]" /></a></div>
]]></content:encoded>
			<wfw:commentRss>http://www.troolstudio.com/2008/10/22/graphsy-update-save-your-colors/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

