<?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>Nito</title>
	<atom:link href="http://blog.pirelenito.org/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.pirelenito.org</link>
	<description>Thoughts dump yard</description>
	<lastBuildDate>Thu, 11 Feb 2010 00:45:53 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Developers, working to create abstracions</title>
		<link>http://blog.pirelenito.org/2010/02/developers-working-to-create-abstracions/</link>
		<comments>http://blog.pirelenito.org/2010/02/developers-working-to-create-abstracions/#comments</comments>
		<pubDate>Thu, 11 Feb 2010 00:39:04 +0000</pubDate>
		<dc:creator>nito</dc:creator>
				<category><![CDATA[Software Development Culture]]></category>
		<category><![CDATA[abstraction]]></category>
		<category><![CDATA[developer]]></category>
		<category><![CDATA[responsability]]></category>
		<category><![CDATA[software craftsmanship]]></category>

		<guid isPermaLink="false">http://blog.pirelenito.org/?p=80</guid>
		<description><![CDATA[Everyday software development is composed mostly of non scientific related problems, meaning less time working on complex new algorithms, and more doing simple, action-reaction development, like UI, database queries, reports and so on. Meaning that the bulk of our everyday tasks should involve more effort on how to organize and write the code than how [...]]]></description>
			<content:encoded><![CDATA[<p>Everyday software development is composed mostly of non scientific related problems, meaning less time working on complex new algorithms, and more doing simple, action-reaction development, like UI, database queries, reports and so on. Meaning that the <strong>bulk of our everyday tasks</strong> should involve more effort on how to <strong>organize</strong> and write the code than how to solve a particular problem, thinking more on <strong>abstractions and code interactions</strong> ratter than the algorithms themselves.</p>
<p>It is like that lazy developer that delivers a simple functionality, like an UI interaction, but through a highly coupled and dispersed solution, with code being written in places it shouldn&#8217;t be. Sure it could be said that the value was delivered, but a big amount of legacy code was created in the process, and that is because the developer is focusing on the easy part of the task, the algorithm, ratter than a proper abstraction to define it.</p>
<p>It is easy to make something work, but making it maintainable, that is another story. We should, as developers, <strong>excel at creating abstractions. This is our real job.</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.pirelenito.org/2010/02/developers-working-to-create-abstracions/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Scrum Management: The Brain Dashboard</title>
		<link>http://blog.pirelenito.org/2009/12/scrum-management-the-brain-dashboard/</link>
		<comments>http://blog.pirelenito.org/2009/12/scrum-management-the-brain-dashboard/#comments</comments>
		<pubDate>Thu, 17 Dec 2009 11:26:36 +0000</pubDate>
		<dc:creator>nito</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[brain]]></category>
		<category><![CDATA[dashboard]]></category>
		<category><![CDATA[management]]></category>
		<category><![CDATA[scrum]]></category>
		<category><![CDATA[story]]></category>
		<category><![CDATA[tool]]></category>

		<guid isPermaLink="false">http://blog.pirelenito.org/?p=30</guid>
		<description><![CDATA[This post is a follow up to the original at the OnCast blog, regarding our dashboard creation, but before digging into the specifics, I would like to a summarize few goals we had in mind when we (as a team) come up with the current solution we use at our daily scrum lives.
First some background: we [...]]]></description>
			<content:encoded><![CDATA[<p>This post is a follow up to the original at the <a href="http://www.oncast.com.br/blog/?p=600" target="_blank">OnCast blog</a>, regarding our dashboard creation, but before digging into the specifics, I would like to a summarize few goals we had in mind when we (as a team) come up with the current solution we use at our daily scrum lives.</p>
<p>First some background: we are a medium size team, composed of six developers working usually in pairs and doing sprints of 2 to 3 weeks on a project that is already in production, most of our stories are about improving the existing code base while adding some new functionality, and our sprints are usually composed of 20 to 30 stories, demanding quite some space on our dashboard.</p>
<p>A recurrent issue was some small bugs popping up during our client demo, giving them a bad impression about the quality of our code while bringing the team moral down.</p>
<p>Based on these we established some few goals to out new dashboard design:</p>
<ul>
<li>More flexibility: writing your name and status on a story/task is not a good idea, since whose working on it can change over time;</li>
<li>Focus on people: enforce the team members importance on the project;</li>
<li>A dashboard that would breathe quality: more testing and validation;</li>
<li>Sense of accomplishment: it should be pretty visible to see when tasks/stories are completed;</li>
<li>Pleasant to the eye, after all we will be using it everyday.</li>
<li>Support a good amount of stories/tasks to be done and completed;</li>
<li>Impose a limit to our WIP (work in progress);</li>
</ul>
<p>The result is the following design, that <a href="http://www.oncast.com.br/blog/?p=600" target="_blank">according to Eduardo Moreira</a>, resembles the way a brains operates, concentrating the most important things on the core of the dashboard:</p>
<p style="text-align: center;"><a href="http://blog.pirelenito.org/wp-content/uploads/2009/12/brain.jpg"><img class="size-full wp-image-41 aligncenter" title="The Brain Dashboard" src="http://blog.pirelenito.org/wp-content/uploads/2009/12/brain.jpg" alt="The Brain Dashboard" width="336" height="252" /></a></p>
<p><span id="more-30"></span></p>
<p>On the top we have all the stories in a flow that goes from:</p>
<table border="0">
<tbody>
<tr>
<td><img title="To Do" src="http://blog.pirelenito.org/wp-content/uploads/2009/12/story01.jpg" alt="To Do" /></td>
<td><strong>To Do</strong>: At the beginning of the iteration it has the usual 20 to 30 stories ordered by the Product Owner priority. All the impediments are marked with a red flag, and work should not be started until it is unflagged.</td>
</tr>
<tr>
<td><img title="WIP" src="http://blog.pirelenito.org/wp-content/uploads/2009/12/story02.jpg" alt="WIP" /></td>
<td><strong>Work In Progress</strong>: When a team member starts working on a story it should be moved here. This step contains a much smaller space than the To Do and Completed ones, enforcing the team to work on the fewest stories at the same time, preventing too much unfinished work from happening.</td>
</tr>
<tr>
<td><img title="To Validate" src="http://blog.pirelenito.org/wp-content/uploads/2009/12/story03.jpg" alt="To Validate" /></td>
<td><strong>Done and Waiting Validation</strong>: After finishing all the tasks on a story it is moved here, where it waits to be validated by another team member whose do not worked on it. After validation, it then must be marked with a Success or Failure tag, the latter requiring a bug task to be created and placed on the Unexpected space (more on that latter).</td>
</tr>
<tr>
<td><img title="Completed" src="http://blog.pirelenito.org/wp-content/uploads/2009/12/story04.jpg" alt="Validated" /></td>
<td><strong>Completed</strong>: With the same space as the To Do, here is where all the completed stories lie, giving the team a good sense of accomplishment.</td>
</tr>
</tbody>
</table>
<p>On the middle we have pictures of all the team members and their name tags to be stick on whatever they are working on (tasks, validation,&#8230;):</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-61" title="Pictures" src="http://blog.pirelenito.org/wp-content/uploads/2009/12/pics.jpg" alt="Pictures" width="100" height="88" /></p>
<p>Lastly there is the bottom, with all the tasks split from the stories on our Spring Planing II:</p>
<table border="0">
<tbody>
<tr>
<td><img title="To Do" src="http://blog.pirelenito.org/wp-content/uploads/2009/12/task01.jpg" alt="To Do" /></td>
<td><strong>To Do</strong>: Not much different from above but divided into two spaces, a tiny one, to hold all the unexpected tasks (such as bugs) which wore produced during this sprint, and a bigger one, containing all the regular open tasks with the same red flags when suited.</td>
</tr>
<tr>
<td><img title="WIP" src="http://blog.pirelenito.org/wp-content/uploads/2009/12/task02.jpg" alt="WIP" /></td>
<td><strong>Work In Progress</strong>: Same rules as the stories, except that here the team member working on a task must mark it with his tag.</td>
</tr>
<tr>
<td><img title="Done" src="http://blog.pirelenito.org/wp-content/uploads/2009/12/task03.jpg" alt="Done" /></td>
<td><strong>Done</strong>: When a task is completed, it should be placed here. This step was created, to give the visible difference between work in progress and completed.</td>
</tr>
<tr>
<td><img title="Reported" src="http://blog.pirelenito.org/wp-content/uploads/2009/12/task04.jpg" alt="Reported" /></td>
<td><strong>Reported</strong>: Composed of all the completed tasks reported on the daily meetings.</td>
</tr>
</tbody>
</table>
<p>These should cover most of it, but if you have any doubt or tip to help us improve our dashboard don&#8217;t hesitate on dropping a comment.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.pirelenito.org/2009/12/scrum-management-the-brain-dashboard/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Java movie playback: JOGL + Fobs4JMF</title>
		<link>http://blog.pirelenito.org/2008/08/java-movie-playback-jogl-fobs4jmf/</link>
		<comments>http://blog.pirelenito.org/2008/08/java-movie-playback-jogl-fobs4jmf/#comments</comments>
		<pubDate>Wed, 20 Aug 2008 23:37:45 +0000</pubDate>
		<dc:creator>nito</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[fast]]></category>
		<category><![CDATA[Fobs4JMF]]></category>
		<category><![CDATA[how to]]></category>
		<category><![CDATA[JMF]]></category>
		<category><![CDATA[JOGL]]></category>
		<category><![CDATA[OpenGL]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[RGB]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[VideoRenderer]]></category>

		<guid isPermaLink="false">http://blog.pirelenito.org/?p=12</guid>
		<description><![CDATA[Recently I had to integrate video playback on my job&#8217;s Java OpenGL engine, which uses JOGL.
Java has a support to media playback through it&#8217;s Java Media Framework, which unfortunately, on it&#8217;s current version (2.1.1e) does not support many formats for video playback.
So I quickly looked for alternatives, including IBM Toolkit for mpeg4, that hadn&#8217;t a [...]]]></description>
			<content:encoded><![CDATA[<p>Recently I had to integrate <strong>video playback</strong> on my job&#8217;s <strong>Java OpenGL</strong> engine, which uses <a href="https://jogl.dev.java.net/" target="_blank">JOGL</a>.</p>
<p>Java has a support to media playback through it&#8217;s <a href="http://java.sun.com/javase/technologies/desktop/media/jmf/" target="_blank">Java Media Framework</a>, which unfortunately, on it&#8217;s current version (2.1.1e) does not support many <a href="http://java.sun.com/javase/technologies/desktop/media/jmf/2.1.1/formats.html" target="_blank">formats for video playback</a>.</p>
<p>So I quickly looked for <strong>alternatives</strong>, including <a href="http://www.alphaworks.ibm.com/tech/tk4mpeg4" target="_blank">IBM Toolkit for mpeg4</a>, that <strong>hadn&#8217;t a sufficient production performance</strong> I was looking for, and didn&#8217;t offer an easy option for frame grabbing or plugin extensions as JMF does.</p>
<p>Next was <a href="http://fobs.sourceforge.net/" target="_blank">Fobs4JMF</a>, which is <strong>JMF + ffmpeg</strong>. This solution was much more interesting, since it offers a <strong>wide variety of codecs</strong> (ogg, mp3, m4a, divx, xvid, h264, mov, etc) and is based on the solid ffmpeg solution to decode audio and video.</p>
<p>My implementation, uses the <strong>plug-in</strong> capabilities of JMF to extend a <strong>custom renderer</strong> that does a pixel type conversion and rendering to a texture:</p>
<div style="text-align: center;"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="344" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="src" value="http://www.youtube.com/v/-zh6yDyasSo&amp;hl=en&amp;fs=1" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/-zh6yDyasSo&amp;hl=en&amp;fs=1" allowfullscreen="true"></embed></object></div>
<p><span id="more-12"></span></p>
<p>This custom renderer works with <strong>RGB textures</strong>, a type I seemed to make work on my two test machines:</p>
<ul>
<li>MacBook with a Integ GMA x3100 &#8211; Leopard;</li>
<li>PC with a Radeon x600 &#8211; Debian.</li>
</ul>
<p>You might wanna <strong>try different<em> pixel types</em></strong> to increase the performance for different target machines.</p>
<p>First, lets describe <strong>how the Renderer works:</strong></p>
<p>It got to be an <strong>implementation</strong> of a <em>javax.media.renderer.VideoRenderer</em> since it will be installed as a <strong>plugin on JMF</strong>.</p>
<p>For the different methods we need to implement, there are a few we need to take proper care of:</p>
<ul>
<li><strong>process</strong>: this is the method JMF calls passing the movie current frame buffer. Here we treat this buffer and leave it in a way we can latter render in OpenGL;</li>
<li><strong>getSupportedInputFormats</strong>: we return RGBFormat, our target texture format;</li>
<li><strong>setInputFormat</strong>: here we simply tell JMF that the format it chooses is the one we want. Since RGB was the only one we returned as supported there is not much to do here as well.</li>
<li><strong>getName</strong>: returns the renderer neat name!</li>
</ul>
<p>Next we need a <strong>way</strong> to <strong>access</strong> this <strong>render</strong> from the outside of the <em>JMF world</em>, we need the texture so that we can do <strong>GL calls</strong> with it (teapot). For this purpose our class must also be a <em>javax.media.Control</em>. Then we can easily get it through an <em>getControl</em> call as:</p>
<blockquote><p>player.getControl(&#8220;javax.media.renderer.VideoRenderer&#8221;);</p></blockquote>
<p>So we implement:</p>
<ul>
<li><strong>getControl</strong>: returns it&#8217;s instance;</li>
<li><strong>getControls</strong>: returns an array containing only it&#8217;s instance as a valid control.</li>
</ul>
<p>The renderer <strong>implementation</strong> is <em>org.pirelenito.multimedia.jmf.plugin.RGBGLTextureRenderer</em> that you can check on the <strong>source code </strong>attachment bellow.</p>
<p>And also, to make further development easy, there is an IGLTextureRenderer interface with the public methods called by the Canvas:</p>
<ul>
<li><strong>render</strong>: that plots the buffer on the texture surface;</li>
<li><strong>getTexture</strong>: to retrieve the texture instance.</li>
</ul>
<p>Last but not least important, you need to <strong>register the render</strong> on JMF using the <strong>JMFRegistry</strong> application. The easiest way to do start it is <strong>through Eclipse</strong>, since we will need our custom render on the <strong>class path</strong>:</p>
<ul>
<li> Create a new run configuration;</li>
<li>Set the main class as: JMFRegistry;</li>
<li>Start and go to the Plugins tab then Renderer;</li>
<li>Add the org.pirelenito.multimedia.jmf.plugin.RGBGLTextureRenderer;</li>
<li>Move it to the top of the list;</li>
<li>Push Commit and you are good to go!</li>
</ul>
<p>To test it out there is also a helper class to instantiate the movie player, and the Main class which is an OpenGL canvas, to render the teapot with the texture on its surface.</p>
<p>I am not very experienced with OpenGL, so there might be <strong>more effitient ways</strong> to do this using, for instance <strong>PBO</strong> (Pixel Buffer Object), if you have any question or suggestions on how to improve this, don&#8217;t hesitate on drooping a comment!</p>
<p><del datetime="2008-08-21T14:37:12+00:00">Here is the Eclipse project. You will need to download a few dependencies, check the Readme for more information.</del></p>
<p><strong>Update:</strong> I wasn&#8217;t properly initializing the Texture. and since I want to add support for more pixel formats, it is easy for you to checkout the updated Eclipse project at: <a href="http://labs.pirelenito.org/experiments/svn/java/MovieGL/" target="_blank">http://labs.pirelenito.org/experiments/svn/java/MovieGL/</a><del datetime="2008-08-21T20:34:00+00:00"> latter this afternoon</del> now.</p>
<p><span style="text-decoration: line-through;"><strong>Update 2:</strong> Added the <a href="http://labs.pirelenito.org/experiments/svn/java/MovieGL/" target="_blank">repository link</a> on the image above.</span></p>
<p><strong>Update 3:</strong> I&#8217;ve migrated my server to a new location, and the Subversion wasn&#8217;t up until today. Sorry.</p>
<p>Cheers! <img src='http://blog.pirelenito.org/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.pirelenito.org/2008/08/java-movie-playback-jogl-fobs4jmf/feed/</wfw:commentRss>
		<slash:comments>26</slash:comments>
		</item>
	</channel>
</rss>
