<?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"
	>

<channel>
	<title>Kiril Mitov’s blog about Eclipse</title>
	<atom:link href="http://dev.eclipse.org/blogs/kmitov/feed/" rel="self" type="application/rss+xml" />
	<link>http://dev.eclipse.org/blogs/kmitov</link>
	<description>An Eclipse Committer and Project Blogs weblog</description>
	<pubDate>Mon, 10 Aug 2009 08:12:55 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.5</generator>
	<language>en</language>
			<item>
		<title>Ping pong</title>
		<link>http://dev.eclipse.org/blogs/kmitov/2009/08/10/ping-pong/</link>
		<comments>http://dev.eclipse.org/blogs/kmitov/2009/08/10/ping-pong/#comments</comments>
		<pubDate>Mon, 10 Aug 2009 08:08:51 +0000</pubDate>
		<dc:creator>kiril</dc:creator>
		
		<category><![CDATA[JPicus]]></category>

		<category><![CDATA[failed delete]]></category>

		<category><![CDATA[open handle]]></category>

		<category><![CDATA[ping pong]]></category>

		<guid isPermaLink="false">http://dev.eclipse.org/blogs/kmitov/?p=77</guid>
		<description><![CDATA[How do you &#8220;ping pong&#8221; in software development?
1. You have a bug.
2. The bug is hardly reproducible, but when reproduced it appears to be very serious.
3. There are a number of teams involved in the functionality where the bug is found.
As a result what actually happens in most of the cases is &#8220;ping pong&#8221;. This [...]]]></description>
			<content:encoded><![CDATA[<h2>How do you &#8220;ping pong&#8221; in software development?</h2>
<p>1. You have a bug.</p>
<p>2. The bug is hardly reproducible, but when reproduced it appears to be very serious.</p>
<p>3. There are a number of teams involved in the functionality where the bug is found.</p>
<p>As a result what actually happens in most of the cases is &#8220;ping pong&#8221;. This bug is constantly moved from one owner to another and vice versa. Nobody really wants to spend a decent amount of resource to investigate and resolve this issue. And even if someone do, the problem might require the right person for the job which is actually difficult to achieve. And this can continue for years. From one version to another where surrounding code is constantly changing and evolving which makes it even harder to investigate. And if you have an extensible environment as Eclipse, where one user can have a completely different set of plug-ins from another, the task is nearly impossible.</p>
<h2>Last week I came to such a problem.</h2>
<p>1. A file in the workspace could not be deleted.</p>
<p>2. The bug was first reported 2 years ago and a number of times after that, but it could never be reproduced.</p>
<p>3. More then 5 teams have code that is &#8220;processing&#8221; this file.  Teams were constantly changing and evolving for the last 2 years so even the knowhow is not concentrated.</p>
<p>If a file can not be deleted there must be a handle open for this file. It took us about 2 minutes to download <a href="https://wiki.sdn.sap.com/wiki/display/Java/JPicus">JPicus</a> from the update site and create a snapshot of open handles and failed delete operations in the installation where the problem was reproduced.</p>
<p>There was a failed delete operation for a file and JPicus shows 5 handles for this file one of which is &#8220;still open&#8221;.</p>
<p>Selecting the handle you can see the stack trace of opening the handle in Thread View.</p>
<h2><a href="http://dev.eclipse.org/blogs/kmitov/files/2009/08/jarlocker.png"><img class="aligncenter size-medium wp-image-78" src="http://dev.eclipse.org/blogs/kmitov/files/2009/08/jarlocker-300x214.png" alt="" width="300" height="214" /></a></h2>
<p>Having the stack trace and delegating to the right team an hour later the bug is investigated and a solution is pending.</p>
]]></content:encoded>
			<wfw:commentRss>http://dev.eclipse.org/blogs/kmitov/2009/08/10/ping-pong/feed/</wfw:commentRss>
		</item>
		<item>
		<title>+8 Google Alerts for &#8220;eclipse&#8221; a day after Galileo</title>
		<link>http://dev.eclipse.org/blogs/kmitov/2009/06/25/8-google-alerts-for-eclipse-a-day-after-galileo/</link>
		<comments>http://dev.eclipse.org/blogs/kmitov/2009/06/25/8-google-alerts-for-eclipse-a-day-after-galileo/#comments</comments>
		<pubDate>Thu, 25 Jun 2009 21:11:29 +0000</pubDate>
		<dc:creator>kiril</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[eclipse]]></category>

		<category><![CDATA[galileo]]></category>

		<category><![CDATA[release]]></category>

		<guid isPermaLink="false">http://dev.eclipse.org/blogs/kmitov/?p=72</guid>
		<description><![CDATA[I still fill funny about google alerts.
As mentioned here:
Monday - I have created a google alert for &#8220;eclipse&#8221;
Tuesday evening - 9 Alerts for &#8220;eclipse&#8221;
Wednesday evening - 34 Alerts for &#8220;eclipse&#8221;
Thursday evening - 42 Alerts for &#8220;eclipse&#8221;. And it seems dev.eclipse.org is kind of slow. Probably people are busy downloading Galileo instead of blogging  
BTW: [...]]]></description>
			<content:encoded><![CDATA[<p>I still fill funny about google alerts.</p>
<p>As mentioned <a href="http://dev.eclipse.org/blogs/kmitov/2009/06/24/34-new-google-alers-for-eclipse-a-few-hours-after-galileo/">here</a>:</p>
<p>Monday - I have created a google alert for &#8220;eclipse&#8221;</p>
<p>Tuesday evening - 9 Alerts for &#8220;eclipse&#8221;</p>
<p>Wednesday evening - 34 Alerts for &#8220;eclipse&#8221;</p>
<p>Thursday evening - 42 Alerts for &#8220;eclipse&#8221;. And it seems dev.eclipse.org is kind of slow. Probably people are busy downloading Galileo instead of blogging <img src='http://dev.eclipse.org/blogs/kmitov/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>BTW: Did you know that the Sun and the moon are also having a simultaneous release this <a href="http://eclipse.gsfc.nasa.gov/SEmono/TSE2009/TSE2009.html">summer</a>? Release candidate is on July 7 with with a lunar eclipse on. We can expect the simultaneous release on July 22 with a solar eclipse. There should also be a Service Release 1 - lunar eclipse on August 7. Hope you can witness it since from Bulgaria it will be difficult&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://dev.eclipse.org/blogs/kmitov/2009/06/25/8-google-alerts-for-eclipse-a-day-after-galileo/feed/</wfw:commentRss>
		</item>
		<item>
		<title>34 new Google alerts for &#8220;eclipse&#8221; a few hours after Galileo</title>
		<link>http://dev.eclipse.org/blogs/kmitov/2009/06/24/34-new-google-alers-for-eclipse-a-few-hours-after-galileo/</link>
		<comments>http://dev.eclipse.org/blogs/kmitov/2009/06/24/34-new-google-alers-for-eclipse-a-few-hours-after-galileo/#comments</comments>
		<pubDate>Wed, 24 Jun 2009 19:26:11 +0000</pubDate>
		<dc:creator>kiril</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[alerts]]></category>

		<category><![CDATA[eclipse]]></category>

		<category><![CDATA[galileo]]></category>

		<category><![CDATA[google]]></category>

		<guid isPermaLink="false">http://dev.eclipse.org/blogs/kmitov/?p=66</guid>
		<description><![CDATA[In Monday I have created a new Google Alert for &#8220;eclipse&#8221;.
In Thuesday evening I have received about 9 results from Google.
Today - just a few hours after Galileo my google mail is filled with 34 sumarazide alerts about eclipse.

Of course it is difficult to even sort them in a decent time. But I am sure [...]]]></description>
			<content:encoded><![CDATA[<p>In Monday I have created a new Google Alert for &#8220;eclipse&#8221;.</p>
<p>In Thuesday evening I have received about 9 results from Google.</p>
<p>Today - just a few hours after Galileo my google mail is filled with 34 sumarazide alerts about eclipse.</p>
<p><a href="http://dev.eclipse.org/blogs/kmitov/files/2009/06/googleeclipsealerts.png"><img class="aligncenter size-medium wp-image-67" src="http://dev.eclipse.org/blogs/kmitov/files/2009/06/googleeclipsealerts-300x176.png" alt="" width="300" height="176" /></a></p>
<p>Of course it is difficult to even sort them in a decent time. But I am sure all of them are connected with Eclipse Galileo&#8230;</p>
<p>It is interesting to see how will this trend evolve till the end of the week.</p>
]]></content:encoded>
			<wfw:commentRss>http://dev.eclipse.org/blogs/kmitov/2009/06/24/34-new-google-alers-for-eclipse-a-few-hours-after-galileo/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Unit testing a wizard</title>
		<link>http://dev.eclipse.org/blogs/kmitov/2009/06/16/unit-testing-a-wizard/</link>
		<comments>http://dev.eclipse.org/blogs/kmitov/2009/06/16/unit-testing-a-wizard/#comments</comments>
		<pubDate>Tue, 16 Jun 2009 18:50:24 +0000</pubDate>
		<dc:creator>kiril</dc:creator>
		
		<category><![CDATA[JPicus]]></category>

		<category><![CDATA[tdd]]></category>

		<category><![CDATA[test]]></category>

		<category><![CDATA[test driven]]></category>

		<category><![CDATA[wizard]]></category>

		<guid isPermaLink="false">http://dev.eclipse.org/blogs/kmitov/?p=39</guid>
		<description><![CDATA[I will again use JPicus and its only wizard (for now) to share my experience with testing wizards.
Wizads have always been a subject of low code coverage and no unit testing. Many examples could be given were the whole test suite of a project is green, but when a user starts using the product there [...]]]></description>
			<content:encoded><![CDATA[<p>I will again use <a href="http://dev.eclipse.org/blogs/kmitov/2009/06/12/jpicus-the-tool-for-java-io-analysis/">JPicus</a> and its only wizard (for now) to share my experience with testing wizards.</p>
<p>Wizads have always been a subject of low code coverage and no unit testing. Many examples could be given were the whole test suite of a project is green, but when a user starts using the product there are an enormous number of errors. And generally the user starts with the wizards&#8230;</p>
<p>As everything in JPicus the NewConnectionWizard is 100% covered with test.</p>
<p>This are coverage results from unit testing the wizard package:</p>
<p><a href="http://dev.eclipse.org/blogs/kmitov/files/2009/06/unittestwizardpackage.png"><img class="size-medium wp-image-40 alignnone" src="http://dev.eclipse.org/blogs/kmitov/files/2009/06/unittestwizardpackage-300x69.png" alt="" width="300" height="69" /></a></p>
<p>This are coverage results from integration testing* the wizard package:</p>
<p><a href="http://dev.eclipse.org/blogs/kmitov/files/2009/06/integrationtestwizardpackage.png"><img class="aligncenter size-medium wp-image-41" src="http://dev.eclipse.org/blogs/kmitov/files/2009/06/integrationtestwizardpackage-300x69.png" alt="" width="300" height="69" /></a></p>
<p>Combined the result is 100% <img src='http://dev.eclipse.org/blogs/kmitov/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>*With &#8220;integration test&#8221; I mean a JUnit test that includes creating of more then 3 (inclusive) productive code objects. A test that verifies the correct integration between objects, but only the tiny little places of integration. Integration tests are something written and executed by the developer.</p>
<h2><strong>First - the provided functionality:</strong></h2>
<p>The NewConnectionWizard allows a user to create a new connection to a JPicus agent. There is only one page where a host and port are entered. If the port is not valid the page should show an error message. If there is no such host an error dialog should be shown when pressing Finish. When the user presses Finish a new connection should be created and shown in the <a href="http://dev.eclipse.org/blogs/kmitov/2009/06/14/the-entry-point-to-jpicus-a-well-tested-view/">AgentConnectionsView.</a></p>
<p><a href="http://dev.eclipse.org/blogs/kmitov/files/2009/06/screenshot-create-a-connection.png"><img class="aligncenter size-medium wp-image-53" src="http://dev.eclipse.org/blogs/kmitov/files/2009/06/screenshot-create-a-connection-300x241.png" alt="" width="300" height="241" /></a></p>
<h2 style="text-align: left"><strong>Second - from an eclipse developer point of view</strong><strong> we hav</strong><strong>e:</strong></h2>
<p style="text-align: left">Instances of IWizard and IWizardPage. The wizard page contains a Composite with two Labels and two Text fields. A ModifyListener is responsible for handling modification of the host and port text fields.</p>
<h2 style="text-align: left"><strong>Third - the Tests:</strong></h2>
<p style="text-align: left">The first thing about wizard pages is that there should be no business logic in the wizard page. Create a &#8220;controller&#8221; and put all this logic in it. In this case the HostAndPortPageController. Create an interface for this controller and inject it in the wizard page. I recommend passing the controller as an argument to the constructor of the page. And there is no default constructor. The page can not leave without its controller. Do not leave the page to create the controller by itself. Invert the dependency (<a title="DIP" href="http://c2.com/cgi/wiki?DependencyInversionPrinciple" target="_blank">DIP)</a>.</p>
<p style="text-align: left;padding-left: 30px"><em> public HostAndPortWizardPage(IHostAndPortPageController controller) {<br />
super(CONNECTION_PROPERTIES);<br />
setDescription(Messages.HostAndPortWizardPage_specifyHostAndPort);<br />
setTitle(CONNECTION_PROPERTIES);<br />
setImageDescriptor(JPicusUI.getImageDescriptorForPath(&#8221;icons/pecker64.png&#8221;));<br />
this.controller = controller;<br />
}</em></p>
<p style="text-align: left"><em><br />
</em>Creating a controller for every page might seem tedious at first. But it will pay off. And if you are have a dependency to <a href="http://www.eclipse.org/webtools/">Web Tools Platform</a> then using the Data Model Wizards framework is more then appropriate.</p>
<p style="text-align: left">Since there is no business logic in the wizard what should be tested?</p>
<h4 style="text-align: left">Is there a SWT control of the page and is this control actually a child of the passed shell? (Here createControl() creates a new HostAndPortWizardPage, calls page.createControl(shell) and returns the page).</h4>
<p style="text-align: left;padding-left: 30px"><em>@Test<br />
public void testGetControl() {<br />
IWizardPage page = createControl();<br />
assertEquals(1, shell.getChildren().length);<br />
assertSame(shell.getChildren()[0], page.getControl());<br />
}</em></p>
<h4 style="text-align: left">Are the correct children of the control created?</h4>
<p style="text-align: left;padding-left: 30px">@Test<br />
public void testControlChildren() {<br />
Composite composite = getControl();<br />
assertEquals(4, composite.getChildren().length);<br />
assertEquals(Label.class, getHostLabel(composite).getClass());<br />
assertEquals(Text.class, getHostText(composite).getClass());<br />
assertEquals(Label.class, composite.getChildren()[2].getClass());<br />
assertEquals(Text.class, getPortText(composite).getClass());<br />
}</p>
<h4 style="text-align: left">Is the layout of the wizard correct? (Do not test whether the layout is working. It is a SWT layout so it is working. Test only that the correct layout with the correct properties is set to the composite).</h4>
<p style="text-align: left;padding-left: 30px">@Test<br />
public void testControlLayout() {<br />
Composite composite = getControl();<br />
GridLayout layout = (GridLayout) composite.getLayout();<br />
assertEquals(2, layout.numColumns);<br />
assertFalse(layout.makeColumnsEqualWidth);<br />
}</p>
<h4 style="text-align: left">Are the correct checks made when modifying a text field?</h4>
<p style="padding-left: 30px">@Test<br />
public void testModifyPortNotANumber() {<br />
expect(controller.checkPort(&#8221;not a number&#8221;)).andReturn(&#8221;error message&#8221;);<br />
// test<br />
IWizardPage page = createControl();<br />
Text port = getPortText((Composite) shell.getChildren()[0]);<br />
port.setText(&#8221;not a number&#8221;);<br />
assertEquals(21500, ((HostAndPortWizardPage) page).getPort());<br />
assertEquals(&#8221;error message&#8221;, page.getErrorMessage());<br />
}</p>
<p>The left of the wizard page implementation is mostly interacting with the controller. Since the controller is represented by an interface it allows for a good abstraction of the details. Having a good mock library (in my case<a href="http://www.easymock.org"> easymock</a>) testing the wizard page and reaching 100% coverage, with meaningful tests*, is straightforward.</p>
<p>*With meaningful tests I refer to the rule to write tests that will break when a productive code is change. Writing tests for the purpose of only reaching a good code coverage is useless and dangerous.</p>
<p>I have heard comments that this wizard page is very simple and that`s way it could be unit tested, but if a wizard page is too complicated to be unit tested isn`t it too complicated for the user to use?</p>
<p>As a result - wizard pages can be tested. In Eclipse it has always been this way…</p>
<p>How are your wizard pages tested?</p>
]]></content:encoded>
			<wfw:commentRss>http://dev.eclipse.org/blogs/kmitov/2009/06/16/unit-testing-a-wizard/feed/</wfw:commentRss>
		</item>
		<item>
		<title>The &#8220;entry point&#8221; to JPicus. A well tested view.</title>
		<link>http://dev.eclipse.org/blogs/kmitov/2009/06/14/the-entry-point-to-jpicus-a-well-tested-view/</link>
		<comments>http://dev.eclipse.org/blogs/kmitov/2009/06/14/the-entry-point-to-jpicus-a-well-tested-view/#comments</comments>
		<pubDate>Sun, 14 Jun 2009 16:42:04 +0000</pubDate>
		<dc:creator>kiril</dc:creator>
		
		<category><![CDATA[JPicus]]></category>

		<category><![CDATA[mock]]></category>

		<category><![CDATA[tdd]]></category>

		<category><![CDATA[test]]></category>

		<category><![CDATA[test driven]]></category>

		<category><![CDATA[view]]></category>

		<guid isPermaLink="false">http://dev.eclipse.org/blogs/kmitov/?p=12</guid>
		<description><![CDATA[From an end user point of view the &#8220;entry point&#8221; to JPicus is the AgentConnectionsView.
Similar to every view in JPicus, the AgentConnections view is 100% covered with unit tests. This view specifically has 95.9% (71 lines) covered with unit test and 12.1 % (9 lines) covered with an integration test.

First - the provided functionality:
The AgentConnections [...]]]></description>
			<content:encoded><![CDATA[<p>From an end user point of view the &#8220;entry point&#8221; to <a href="http://dev.eclipse.org/blogs/kmitov/2009/06/12/jpicus-the-tool-for-java-io-analysis/" target="_blank">JPicus</a> is the AgentConnectionsView.</p>
<p>Similar to every view in JPicus, the AgentConnections view is 100% covered with unit tests. This view specifically has 95.9% (71 lines) covered with unit test and 12.1 % (9 lines) covered with an integration test.</p>
<p><a href="http://dev.eclipse.org/blogs/kmitov/files/2009/06/agentconnectionsview.png"><img class="aligncenter size-full wp-image-14" src="http://dev.eclipse.org/blogs/kmitov/files/2009/06/agentconnectionsview.png" alt="" width="500" height="37" /></a></p>
<p><strong>First - the provided functionality:</strong></p>
<p>The AgentConnections view allows the user to create a new connection to a JPicus agent. It can maintain more then one connection. For every connection the user can create a number of Snapshots (using the Take Snapshot action). Double click on the snapshot opens another view. There is also a context menu on every snapshot. Selecting the snapshot will give you the snapshot properties in the properties view.</p>
<p style="text-align: left"><a href="http://dev.eclipse.org/blogs/kmitov/files/2009/06/snapshotproperties.png"><img class="size-medium wp-image-21 aligncenter" src="http://dev.eclipse.org/blogs/kmitov/files/2009/06/snapshotproperties-300x152.png" alt="" width="300" height="152" /></a></p>
<p style="text-align: left"><strong>Second - from an eclipse developer point of view</strong><strong> we hav</strong><strong>e:</strong></p>
<p>TreeViewer, two actions in the view tool bar, context menu, double click listener (and action for the listener) and finally a selection provider.</p>
<p><strong>Third - the Tests:</strong></p>
<p>Unit testing the content and label provider is pretty straightforward and very domain specific. Testing the actions also - there are the IAction and IActionDelegate interfaces that allow for pretty well decoupling. But how do you test the view?</p>
<p>As every object the AgentConnections view has</p>
<ul>
<li>an input - the connections and snapshots to be shown (IConnectionsHolder)</li>
<li>an output - the output is actually the viewer</li>
<li>a helper - IActionFactory that helps decoupling the creation of actions from their use</li>
<li>an error handler - in this case org.eclipse.core.runtime.ILog</li>
</ul>
<p>In order to unit test the view you must inject the input,helper,error handler (preferably in the constructor). Do not leave the view to create this things by it self. Invert the dependency (<a title="DIP" href="http://c2.com/cgi/wiki?DependencyInversionPrinciple" target="_blank">DIP)</a>.</p>
<p><em>public AgentConnectionsView(IConnectionsHolder connections, IActionFactory actionFactory, ILog log) {<br />
this.connections = connections;<br />
this.log = log;<br />
this.actionFactory = actionFactory;<br />
}</em></p>
<p>Of course since this is a view it is registered in the plugin.xml. And it must have a default constructor. This could be implemented in a similar way and tested with an integration test:</p>
<p><em>public AgentConnectionsView() {<br />
this(JPicusUI.getDefault().getConnectionsHolder(), new ActionFactory(),  JPicusUI.getDefault().getLog());<br />
}</em></p>
<p>Since every ViewPart is an WorkbenchPart it delegates its getAdapter(Class) method to Platform.getAdapterManager().getAdapter(this, adapter). This is the other method where you can not get away from the integration test.</p>
<p>All the other methods of a view can (and should) be unit tested. Having a good mock library (in my case <a href="http://www.easymock.org" target="_blank">easymock</a>) you can easily mock IConnectionHolders, IActionFactory, ILog, IViewSite, IWorkbench etc. Since the IViewSite contains IActionBars, IToolBarManager, IMenuManager it is also straightforward to test that the correct actions are added to the tool bar.</p>
<p>The most challenging methods from AgentConnectionsView are createPartControl() and setFocus().</p>
<p><strong>createPartControl(Composite)</strong></p>
<p>Call this method in the following way in you tests.</p>
<p>Display.getDefault();<br />
Shell shell = new Shell(Display.getDefault());<br />
view.init(site);<br />
view.createPartControl(shell);</p>
<p>And verify that the shell actually has some children (it this case a Tree). Although this involves creating a shell it won`t block your thread.</p>
<p><strong>setFocus()</strong></p>
<p>Given the following implementation of setFocus()</p>
<p>public void setFocus() {<br />
viewer.getControl().setFocus();<br />
}</p>
<p>implementing a unit test is more challenging. Fortunately there is a Control.addFocusListener(FocusListener)  method. Using the FocusListener the test could be</p>
<p>public boolean verifySetViewFocus(IViewPart view)  {<br />
final boolean focus[] = new boolean[1];<br />
focus[0] = false;<br />
getViewer().getControl().addFocusListener(new FocusAdapter() {<br />
public void focusGained(FocusEvent e) {<br />
focus[0] = true;<br />
}<br />
});<br />
view.setFocus();<br />
// on Linux the focus listener is notified after the test completes. So<br />
// start a new runnable that will wait for a little.<br />
ModalContext.run(new IRunnableWithProgress() {<br />
@Override<br />
public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {<br />
Thread.sleep(1);<br />
}<br />
}, true, new NullProgressMonitor(), Display.getDefault());<br />
assertTrue(focus[0]);<br />
}</p>
<p>As a result - the user interface can be tested. In Eclipse it has always been this way&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://dev.eclipse.org/blogs/kmitov/2009/06/14/the-entry-point-to-jpicus-a-well-tested-view/feed/</wfw:commentRss>
		</item>
		<item>
		<title>JPicus - the tool for Java I/O analysis</title>
		<link>http://dev.eclipse.org/blogs/kmitov/2009/06/12/jpicus-the-tool-for-java-io-analysis/</link>
		<comments>http://dev.eclipse.org/blogs/kmitov/2009/06/12/jpicus-the-tool-for-java-io-analysis/#comments</comments>
		<pubDate>Fri, 12 Jun 2009 19:44:59 +0000</pubDate>
		<dc:creator>kiril</dc:creator>
		
		<category><![CDATA[JPicus]]></category>

		<category><![CDATA[analysis]]></category>

		<category><![CDATA[debugger]]></category>

		<category><![CDATA[handles]]></category>

		<category><![CDATA[i/o]]></category>

		<category><![CDATA[java]]></category>

		<category><![CDATA[leaking]]></category>

		<category><![CDATA[profiler]]></category>

		<guid isPermaLink="false">http://dev.eclipse.org/blogs/kmitov/?p=3</guid>
		<description><![CDATA[&#8220;If I want to read something nice, I sit and write it myself!&#8221;
Mark Twain
I heard this quote just a few weeks ago. Do not know whether it is really Mark Twain that said it, but it is an interesting quote.
This is one of the &#8220;jokes&#8221; a friend of mine used in his presentation at JavaOne [...]]]></description>
			<content:encoded><![CDATA[<p>&#8220;If I want to read something nice, I sit and write it myself!&#8221;<br />
Mark Twain</p>
<p>I heard this quote just a few weeks ago. Do not know whether it is really Mark Twain that said it, but it is an interesting quote.</p>
<p>This is one of the &#8220;jokes&#8221; a friend of mine used in his presentation at JavaOne 2009. More specifically Technical Session <a href="http://developers.sun.com/learning/javaoneonline/j1sessn.jsp?sessn=TS-4588&amp;yr=2009&amp;track=javase">TS-4588</a> which is all about analysing your I/O.</p>
<p>Have you ever wondered</p>
<ul>
<li>How much I/O does my program use?</li>
<li>How much time is spent in I/O?</li>
<li>Hot spots. What can be improved?</li>
<li>Which handles are currently open?</li>
<li>Where was a handle opened and closed?</li>
<li>Why did a delete operation fail?</li>
<li>Where and when was this file deleted?</li>
<li>Was there some interference from external processes?</li>
</ul>
<p>Well Pavel (my friend I have mentioned) has definitely wondered. A few months ago he came to me with a question whether I could assist him in implementing such a tool. A tool that will give us all these answers.<br />
Generally my part was to implement the integration with Eclipse. A few views, a wizard, some actions, a nice perspective. And - this is the result</p>
<p><a href="http://dev.eclipse.org/blogs/kmitov/files/2009/06/screenshot-jpicus-eclipse-sdk.png"><img class="aligncenter size-medium wp-image-4" src="http://dev.eclipse.org/blogs/kmitov/files/2009/06/screenshot-jpicus-eclipse-sdk-300x175.png" alt="" width="300" height="175" /></a></p>
<p>If you think such a tool could assist you visit <a href="https://wiki.sdn.sap.com/wiki/display/Java/JPicus">JPicus home page</a>.<br />
It is still only free. But we are working on making it open <img src='http://dev.eclipse.org/blogs/kmitov/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>And there is more on JPicus coming in the near future.</p>
]]></content:encoded>
			<wfw:commentRss>http://dev.eclipse.org/blogs/kmitov/2009/06/12/jpicus-the-tool-for-java-io-analysis/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
