<?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>Pyxis blog</title>
	<atom:link href="http://pyxis-tech.com/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://pyxis-tech.com/blog</link>
	<description>agilité, coaching, formation, développement logiciel</description>
	<lastBuildDate>Fri, 17 May 2013 14:10:02 +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>Speed up your batch processing, go parallel</title>
		<link>http://pyxis-tech.com/blog/en/2013/05/16/english-speed-up-your-batch-processing%e2%80%95go-parallel/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=english-speed-up-your-batch-processing%25e2%2580%2595go-parallel</link>
		<comments>http://pyxis-tech.com/blog/en/2013/05/16/english-speed-up-your-batch-processing%e2%80%95go-parallel/#comments</comments>
		<pubDate>Thu, 16 May 2013 13:56:04 +0000</pubDate>
		<dc:creator>erik lebel</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[BigData]]></category>

		<guid isPermaLink="false">http://pyxis-tech.com/blog/?p=9243</guid>
		<description><![CDATA[Many companies do overnight, weekly, or even monthly batch processing to produce reports, update inventory catalogs, synchronize systems and consolidate information. Often, as data grows, the number of desired outputs grows, and the time to execute these batch jobs grows too. Consequently tremendous efforts go into optimizing and squeezing out minimal gains in order to [...]]]></description>
			<content:encoded><![CDATA[<p>Many companies do overnight, weekly, or even monthly batch processing to produce reports, update inventory catalogs, synchronize systems and consolidate information.</p>
<p>Often, as data grows, the number of desired outputs grows, and the time to execute these batch jobs grows too. Consequently tremendous efforts go into optimizing and squeezing out minimal gains in order to ensure the jobs complete by the time they are needed.</p>
<p><span id="more-9243"></span>Enter <a href="http://hadoop.apache.org/">Hadoop</a>. Hadoop is an open source implementation of Google’s <a href="http://en.wikipedia.org/wiki/MapReduce">MapReduce</a> and <a href="http://en.wikipedia.org/wiki/Google_File_System">Google File System</a> papers. It provides a distributed data store with very interesting parallel processing capabilities.</p>
<p>The parallel process is what you get when you setup a Hadoop cluster and write some MapReduce operations to do data analysis. The execution of your MapReduce operation gets triggered on all nodes of the cluster, and the results of the processing get consolidated into a common result set.</p>
<p>While the MapReduce implementation may not be ideal for generating the reports themselves, it can certainly help with the costly data crunching required to get to the end product.</p>
<p>I could mention other processing tools, but in the BigData landscape, Hadoop is enjoying a great deal of popularity, has an active community, has been around long enough to be mature and stable and has some interesting high-level tools for writing MapReduce operations.</p>
<p>I won&#8217;t assume that this is the solution to all your problems, but given that you could easily scale up a Hadoop cluster in cost effective increments, this can be an interesting alternative to buying traditional server horsepower.</p>
<p>If you’re wondering how you could improve your batch processing, then maybe it&#8217;s time you looked into Hadoop.</p>
]]></content:encoded>
			<wfw:commentRss>http://pyxis-tech.com/blog/en/2013/05/16/english-speed-up-your-batch-processing%e2%80%95go-parallel/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Failure isn&#8217;t an option, it&#8217;s a certainty</title>
		<link>http://pyxis-tech.com/blog/en/2013/05/07/english-failure-isnt-an-option-its-a-certainty/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=english-failure-isnt-an-option-its-a-certainty</link>
		<comments>http://pyxis-tech.com/blog/en/2013/05/07/english-failure-isnt-an-option-its-a-certainty/#comments</comments>
		<pubDate>Tue, 07 May 2013 14:45:21 +0000</pubDate>
		<dc:creator>erik lebel</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[architecture]]></category>

		<guid isPermaLink="false">http://pyxis-tech.com/blog/?p=9228</guid>
		<description><![CDATA[As systems get large, failure becomes less binary. It becomes more probable that your system has a failure, but conversely less of your system is failing at any given point in time. As per Randy Shoup&#8217;s classic (or personal favorite) presentation on eBay&#8217;s architecture and lessons learned, at any point in time at eBay there are systems down―the [...]]]></description>
			<content:encoded><![CDATA[<p>As systems get large, failure becomes less binary. I<span>t becomes more probable that your system has a failure, but conversely less of your system is failing at any given point in time.</span></p>
<p>As per Randy Shoup&#8217;s classic (or personal favorite) presentation <a href="http://www.infoq.com/presentations/Best-Practices-eBay">on eBay&#8217;s architecture and lessons learned</a>, at any point in time at eBay there are systems down―the trick is to make a system that continues to run smoothly. As a consequence of this, their developers must actively design with failure in mind.</p>
<p><span id="more-9228"></span>I have three thoughts on designing for failure:</p>
<ul>
<li>Asynchronous<em></em> messaging is great for scaling up, but it is not cool to have important messages streaming into an untreated queue. To avoid this, it is important to have a degree of redundancy; enough systems to ensure that messages don&#8217;t appear to drop off into a void.</li>
</ul>
<ul>
<li>A resilient design will help you smoothly roll over bumps in the road, but quick diagnosis and correction are still very important. As the number of moving parts increases, it can get harder to know what is broken. A good monitoring strategy should also be part of a resilient design. Design to make early detection possible. You don&#8217;t want your system to be a nightmare to troubleshoot, and traditional logging is probably not enough anymore―SNMP, UDP heartbeats, log consolidation and dashboards are not uncommon in these contexts.</li>
</ul>
<ul>
<li>Having designed for failure, you may sleep well at night, but unless you are testing that the system continues to run as expected through a failure, you may be in for a rude awakening. Like backups, fault tolerance should be tested. I&#8217;ve heard of organizations that have test environments in which at least one node is down at any given moment. In theory, this should be transparent to the end user. Netflix is known to do <a href="http://highscalability.com/blog/2010/12/28/netflix-continually-test-by-failing-servers-with-chaos-monke.html">fault testing</a> and has <a href="http://www.forbes.com/sites/reuvencohen/2012/07/30/netflix-releases-free-infrastructure-failure-testing-software-chaos-monkey-to-public/">made their chaos monkey testing software public</a>.</li>
</ul>
<p>Are you ready for a failure? If not, then maybe it&#8217;s time to start preparing. It&#8217;s coming.</p>
<p>Happy failing!</p>
]]></content:encoded>
			<wfw:commentRss>http://pyxis-tech.com/blog/en/2013/05/07/english-failure-isnt-an-option-its-a-certainty/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Designing for scale without over-engineering</title>
		<link>http://pyxis-tech.com/blog/en/2013/04/22/english-designing-for-scale-without-over-engineering/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=english-designing-for-scale-without-over-engineering</link>
		<comments>http://pyxis-tech.com/blog/en/2013/04/22/english-designing-for-scale-without-over-engineering/#comments</comments>
		<pubDate>Mon, 22 Apr 2013 14:12:26 +0000</pubDate>
		<dc:creator>erik lebel</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[architecture]]></category>

		<guid isPermaLink="false">http://pyxis-tech.com/blog/?p=9193</guid>
		<description><![CDATA[While starting to read &#8220;Scalability Rules: 50 Principles for Scaling Web Sites&#8221;, I was pleasantly surprised to immediately read rule number 2: design scale into the solution. This rule proposes that, if scaling up is a concern, then design for 20 times capacity, implement for 3 times capacity and deploy for 1.5 times capacity. While [...]]]></description>
			<content:encoded><![CDATA[<p>While starting to read &#8220;Scalability Rules: 50 Principles for Scaling Web Sites&#8221;, I was pleasantly surprised to immediately read rule number 2: design scale into the solution.</p>
<p>This rule proposes that, if scaling up is a concern, then design for 20 times capacity, implement for 3 times capacity and deploy for 1.5 times capacity.</p>
<p>While I can&#8217;t vouch for their numbers, nor am I going to re-explain all their thinking, I&#8217;d like to share how this aligns itself with architecture and design on Agile projects.</p>
<p><span id="more-9193"></span>Firstly, the dilemma of the Agile architect is often how to design for possible scale up without investing a great deal of effort and code on it up front. Such an early investment in scaling code can cause software projects to deliver little or no value early on, and can result in great waste if the project never reaches a stage of success that requires such scalability.</p>
<p>The idea behind this design-implement-deploy progression is as follows. If there is a legitimate concern for scaling up at some point, then there is value in identifying obvious and avoidable performance bottlenecks and designing so that they can be isolated, avoided, or worked around. This means determining if synchronous processing, data locking, near-consistency or other factors will make it difficult to scale up and design to account for those issues with significant impacts. This does not mean plan optimizations in potential hotspots, but plan for frictionless performance where it can make a worthwhile difference.</p>
<p>Next, implement. But only enough to make the design work and validate the design. This means that, if you&#8217;ve identified that allowing for stale entail consistency will be the leverage for a scale up, then treat data as potentially stale when implementing. If a pub/sub architecture will be key to scaling up, then implement a simple pub/sub or use a lower end ESB; you can plug in a more robust or high-performance version later if needed. In short, make it work for the desired design, but don&#8217;t optimize it for the 20 times capacity. If you need to scale up, you will have created the entry points to introduce the necessary improvements to your system.</p>
<p>Finally, deploy for 1.5 time capacity. 1.5 is not a great deal more than your expected capacity, but it should buy you time to tune and adjust for greater scale should you find you really need it.</p>
<p>So basically KISS still applies, but be a little more critical of YAGNI. Your scalable design will still have cost more than the simplest possible design, but your implementation should not cost much more initially. Your deployment will pretty much compare to the one you need.</p>
<p>Stay tuned for scalable design tricks!</p>
]]></content:encoded>
			<wfw:commentRss>http://pyxis-tech.com/blog/en/2013/04/22/english-designing-for-scale-without-over-engineering/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Urban Turtle finalist at the OCTAS 2013</title>
		<link>http://pyxis-tech.com/blog/en/2013/04/15/urban-turtle-finaliste-aux-octas-2013/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=urban-turtle-finaliste-aux-octas-2013</link>
		<comments>http://pyxis-tech.com/blog/en/2013/04/15/urban-turtle-finaliste-aux-octas-2013/#comments</comments>
		<pubDate>Mon, 15 Apr 2013 16:15:30 +0000</pubDate>
		<dc:creator>patil tatoulian</dc:creator>
				<category><![CDATA[Agile]]></category>

		<guid isPermaLink="false">http://pyxis-tech.com/blog/?p=9169</guid>
		<description><![CDATA[On April 10th, Pyxis /studio assisted to the unveiling of the finalists at the OCTAS 2013, a contest organized by Réseau ACTION TI. Dominic Danis, Product Owner of Urban Turtle, and Martin Landreville, Pyxis /studio’s vice-president of solutions and products, happily accepted Urban Turtle’s nomination in the “Commercial Success” category. The world of Agility, more [...]]]></description>
			<content:encoded><![CDATA[<p id="docs-internal-guid-08ba483a-3c5f-7732-5031-087b5d08cd42" dir="ltr">On April 10th, Pyxis /studio assisted to the unveiling of the finalists at the<a href="http://www.actionti.com/accueil/octas/octas2013"> OCTAS 2013</a>, a contest organized by<a href="http://www.actionti.com/_accueil"> Réseau ACTION TI</a>.<a href="http://pyxis-tech.com/fr/notre-equipe/dominic-danis"> Dominic Danis</a>, Product Owner of<a href="http://urbanturtle.com/"> Urban Turtle</a>, and<a href="http://pyxis-tech.com/fr/notre-equipe/martin-landreville"> Martin Landreville</a>, Pyxis /studio’s vice-president of solutions and products, happily accepted Urban Turtle’s nomination in the “Commercial Success” category.</p>
<p dir="ltr">
<p dir="ltr"><span id="more-9169"></span></p>
<p dir="ltr"><a href="http://pyxis-tech.com/blog/wp-content/uploads/2013/04/logoOCTAS2013finaliste3.jpg"><img class="alignleft size-medium wp-image-9188" title="logoOCTAS2013finaliste" src="http://pyxis-tech.com/blog/wp-content/uploads/2013/04/logoOCTAS2013finaliste3-135x300.jpg" alt="" width="83" height="184" /></a>The world of Agility, more specifically the Scrum framework, is in high demand by organizations looking to improve their software development practices. Urban Turtle is a set of Agile modules for Microsoft’s Team Foundation Server platform. More specifically, it seamlessly integrates with Team Web Access (the platform’s web portal). In fact, Urban Turtle offers teams around the world a set of Agile tools that facilitate the planning, execution, and follow-up of their projects.</p>
<p dir="ltr">Our application of Agile methods allows us to deliver value every month. Here is our objective for 2013: 12 versions in 12 months.</p>
<p dir="ltr">“Since the very first version in 2008, we are working to make software development simpler. After 5 years and 3 versions, we are very proud of all that we have accomplished. I would like to thank the Urban Turtle team members and all Pyxissians who contribute to the commercial success of our product,” says Dominic Danis, Product Owner.</p>
<p dir="ltr">“We make considerable efforts to provide value to end users and to improve our product. Urban Turtle is in line with the /studio’s mission, and I am very proud of the work accomplished by the team,” indicates Martin Landreville, vice-president of solutions and product at Pyxis /studio.</p>
<p>The team is looking forward to May 25th to find out the winner in the “Commercial Success” category. We wish the entire Urban Turtle team good luck!</p>
]]></content:encoded>
			<wfw:commentRss>http://pyxis-tech.com/blog/en/2013/04/15/urban-turtle-finaliste-aux-octas-2013/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Assertions in production code</title>
		<link>http://pyxis-tech.com/blog/en/2013/03/25/assertions-in-production-code/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=assertions-in-production-code</link>
		<comments>http://pyxis-tech.com/blog/en/2013/03/25/assertions-in-production-code/#comments</comments>
		<pubDate>Mon, 25 Mar 2013 12:13:38 +0000</pubDate>
		<dc:creator>erik lebel</dc:creator>
				<category><![CDATA[Développement logiciel]]></category>

		<guid isPermaLink="false">http://pyxis-tech.com/blog/?p=9048</guid>
		<description><![CDATA[The assertion is an old paradigm that has been around since before the advent of object-oriented languages. An assertion is a statement that asserts that some condition is true, and causes an execution failure if the condition is not respected. It&#8217;s that simple. Failure can be translated into an exception, a runtime error, or even [...]]]></description>
			<content:encoded><![CDATA[<p>The assertion is an old paradigm that has been around since before the advent of object-oriented languages. An assertion is a statement that asserts that some condition is true, and causes an execution failure if the condition is not respected. It&#8217;s that simple.</p>
<p>Failure can be translated into an exception, a runtime error, or even a runtime failure resulting in unstoppable application termination.</p>
<p><span id="more-9048"></span>Traditionally, assertions are not compiled into production code. Instead, it&#8217;s being used as debug/test time safeguards. In such cases, the goal is to detect erroneous behaviour or non-compliant use of methods during application validation, and then remove such internal checks in order to reduce the drag on application performance and avoid any unsavoury failures in production use of the application.</p>
<p>One common place in which assertions are used is in unit test frameworks. All the unit testing frameworks provide a way of validating for the expected condition or result following a test. Once again, these are rarely moved into production, and the assertions are written outside the production code. Note that the intent of the test and the assertion differ somewhat, but the mechanics of the assertion are the same.</p>
<p>Times have changed, but popular views of assertions remain somewhat antiquated.</p>
<p>Even though we like to think of assertions as debug and test-time checks, the reality is that the assertion-model is alive and well in the core runtimes and classes of the Java and .NET platforms.</p>
<p>Take a look at the API documentation for any of the system classes. Most methods will throw an exception if one of the arguments passed to them is null or invalid in some way. Usually such exceptions identify which argument is at fault. This can save a lot of time troubleshooting—you don&#8217;t need to look inside a method to find where the problem is, it fails early instead of fails eventually.</p>
<p>Implementing such preventive APIs is pretty straightforward, starting each method with a block of argument validation. Typically these are written as a series of &#8220;if/throw&#8221; statements. These can take up a lot of vertical and horizontal space in the code that often obscure their intent.</p>
<p>This brings us back to the conciseness of the assertion. Rather than writing a verbose validation block or handling basic assertion failures, I prefer to write assertion-style helpers that throw standard exceptions on failure.</p>
<p>Thus, this allows this:</p>
<pre>public void SomeVerboseOperation(string sin, PostalAddress address)
{
    if (address == null)
        throw new ArgumentNullException("address");
    if (string.IsNullOrEmpty(sin))
        throw new ArgumentNullException("sin");
    // do stuff
}</pre>
<p>To become this:</p>
<pre>public void SomeOperation(string sin, PostalAddress address)
{
    Validate.ArgumentIsNotNull(address, "address");
    Validate.ArgumentIsNotEmpty(sin, "sin");
    // do stuff
}</pre>
<p>I expect this to throw an argument null exception that points to the argument named &#8220;postalCode&#8221;. Fairly self-explanatory.</p>
<p>Other possible forms that work well include &#8220;IsNotEmpty&#8221; for strings and &#8220;IsPositive&#8221; for integers. Other possibilities include regular expression checks and many more.</p>
<p>I can&#8217;t take the credit for this approach. I borrowed it from the DDD sample application that Eric Evans published some years back (<a href="dddsample.sourceforge.net">dddsample.sourceforge.net</a>).</p>
<p>As an aside, I would point out that some languages support notions of method pre-conditions, effectively providing a formal mechanism for building this concept into the program. Some tools exist to inject this kind of behavior into C# and Java, but I find that these take away from the clarity of the code.</p>
<p>Does anybody have any other tricks to clean up argument validation checks?</p>
]]></content:encoded>
			<wfw:commentRss>http://pyxis-tech.com/blog/en/2013/03/25/assertions-in-production-code/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>I take the journey and aim for excellence</title>
		<link>http://pyxis-tech.com/blog/en/2013/03/19/english-i-take-the-journey-and-aim-for-excellence/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=english-i-take-the-journey-and-aim-for-excellence</link>
		<comments>http://pyxis-tech.com/blog/en/2013/03/19/english-i-take-the-journey-and-aim-for-excellence/#comments</comments>
		<pubDate>Tue, 19 Mar 2013 12:50:55 +0000</pubDate>
		<dc:creator>mbertrand</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Organizational Culture]]></category>
		<category><![CDATA[Innovation]]></category>

		<guid isPermaLink="false">http://pyxis-tech.com/blog/?p=9094</guid>
		<description><![CDATA[In February, I travelled the world to join the Pyxis team. Coming from an all year round warm country, it was an interesting experience to land here in the middle of winter and try to explain to my body what was going on. Walking to work on my first week, I got to feel way [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://pyxis-tech.com/blog/wp-content/uploads/2013/03/978614532.jpg"><img class="alignleft size-thumbnail wp-image-9106" src="http://pyxis-tech.com/blog/wp-content/uploads/2013/03/978614532-150x150.jpg" alt="" width="150" height="150" /></a>In February, I travelled the world to join the Pyxis team. Coming from an all year round warm country, it was an interesting experience to land here in the middle of winter and try to explain to my body what was going on. Walking to work on my first week, I got to feel way too cold temperatures boosted by an awesome phenomenon called wind chill. However, once I got to the office I was warmly welcomed and got to meet more of the Pyxis team which led me to forget what was going on outside.</p>
<p><span id="more-9094"></span>Now, funny enough, after a few weeks of &#8220;frost training&#8221;, I tend to enjoy the snowy strolls. I am also very proud to be part of this great organization. And this is why&#8230;</p>
<p><strong>A vision</strong></p>
<p>The team is led by <span style="text-decoration: underline;"><a title="Francois Beauregard" href="http://pyxis-tech.com/en/our-team/francois-beauregard" target="_blank">François Beauregard</a></span> whose vision is to enable businesses to create software intelligently and efficiently whilst ensuring a great experience for their teams and clients. There is a huge human component to it where highly satisfied teams and clients is the norm. He guides Pyxis to lead the Agile transition movement by pushing the boundaries of excellence and by creating a unique offer on the market.</p>
<p><strong>A unique offer</strong></p>
<p>Pyxis&#8217; offer aims to help organizations transition to Agile by looking at it in a different way than the rest of the market. It benefits from huge amount of know-how and experiences accumulated over the last twelve years. It is also supported by highly skilled cross-functional teams; all sharing the same vision.</p>
<p>At Pyxis, we live what we offer, and within the organization, core teams are working intrinsically together to achieve our goals. We are an Agile development team (<span style="text-decoration: underline;"><a title="Pyxis Studio" href="http://pyxis-tech.com/en/our-offer/software-development" target="_blank">/Studio</a></span>) and we create great solutions with our partners. As developers, we understand the tools and techniques, and we constantly look for ways to improve in order to be more efficient. It is our laboratory.</p>
<p>We are also trainers (<span style="text-decoration: underline;"><a href="http://pyxis-tech.com/en/our-offer/agile-training">/Campus</a></span>) and we are eager to share our knowledge around. It is essential that our partners receive the best training possible so that they have the skills to support their organizations.</p>
<p>To support our clients further in their Agile transition, we are specialized coaches (<span style="text-decoration: underline;"><a title="Pyxis Conseil" href="http://pyxis-tech.com/en/our-offer/agile-coaching" target="_blank">/Consulting</a></span>) who can help on organizational, team, and technical levels.</p>
<p>The combination of these core components creates a powerful driving force and a strong platform on which companies can build their Agile environments.</p>
<p>Our team members&#8217; skills are continually strengthened by the interactions of the teams and the fact that they can rotate between them. This is what makes the Pyxis offer unique; the depth of our skills and the cohesion between our teams ensure that we can respond to our partner&#8217;s needs in the most meaningful way; we have &#8220;Savoir-Faire&#8221; and &#8220;Savoir-Être&#8221;.</p>
<p>Whilst we are focused to achieve our goals, we do not want to lose our values which are based on balance, quality of life, and unexpected results. It is essential that we keep them in check if we want to stay at the leading edge of our craft.</p>
<p><strong>My contribution</strong></p>
<p>By joining the <span style="text-decoration: underline;"><a title="Pyxis Conseil" href="http://pyxis-tech.com/en/notre-offre/coaching-agile" target="_blank">/Consulting</a></span> team, I aim to help Pyxis make a difference, reach its goals, and serve our partners the best way possible. I am very excited to be part of the journey and I have no doubt I will learn and grow as we put ourselves in innovative positions. This part aligns very well with my personal goals and will be a key component of my growth as a coach.</p>
<p><em>C&#8217;est trippant!</em></p>
]]></content:encoded>
			<wfw:commentRss>http://pyxis-tech.com/blog/en/2013/03/19/english-i-take-the-journey-and-aim-for-excellence/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Validating XML content when testing</title>
		<link>http://pyxis-tech.com/blog/en/2013/03/07/english-validating-xml-content-when-testing/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=english-validating-xml-content-when-testing</link>
		<comments>http://pyxis-tech.com/blog/en/2013/03/07/english-validating-xml-content-when-testing/#comments</comments>
		<pubDate>Thu, 07 Mar 2013 02:10:54 +0000</pubDate>
		<dc:creator>erik lebel</dc:creator>
				<category><![CDATA[Développement logiciel]]></category>

		<guid isPermaLink="false">http://pyxis-tech.com/blog/?p=9045</guid>
		<description><![CDATA[Working with large systems that don&#8217;t have automated validation frameworks is a pain. So much so that many developers label them legacy even on their maiden voyage. The reality is that there exist many such systems in production today, and many more going into production hourly. Because of this, its not uncommon to find oneself [...]]]></description>
			<content:encoded><![CDATA[<p>Working with large systems that don&#8217;t have automated validation frameworks is a pain. So much so that many developers label them legacy even on their maiden voyage. The reality is that there exist many such systems in production today, and many more going into production hourly.</p>
<p>Because of this, its not uncommon to find oneself dropped into such projects. We grumble and groan and hope to get off them as quickly as possible. Well buck up, greenfields projects are a rarity so here is where we practice our trade.</p>
<p><span id="more-9045"></span>The first hurdle to cleaning up (or even just modifying) a big system is having to worry about non-regression. Now there are no magic bullets here, the only way to add tests to the behemoth is to roll up your sleeves and dive in. Well, sort of. It&#8217;s useful to find a seam through which to inspect the system. One such seam is the gigabytes of XML that many systems produce for message exchanges. These XML messages are useful for non-regression testing—they are structure, are either input or output from the system and it is possible to validate them. For more on the subject of testing with legacy systems and seams, refer to Michael Feather&#8217;s treatise “Working Effectively with Legacy Code”.</p>
<p>Even though it&#8217;s been around for a while, XML validation is often limited to schema and DTDs. I&#8217;ve also seen XML validation done by scanning the XML for some expected sub-strings or the brute force comparison of the resulting XML against the expected XML. These options each have their merits, but all fall short in some way. The main irritant is not having all the differences highlighted upon assertion failure. I find that I need a better XML comparison/assertion. To that end I went looking for tools that can be easily used within JUnit tests.</p>
<p>This library has been around long enough to have stagnated, but it continues to save my hide on projects. I&#8217;m talking about XMLUnit (XMLUnit.sourceforge.net)</p>
<p>With the following helper method in place, I forge ahead with integration tests on my side.</p>
<pre>import org.custommonkey.xmlunit.DetailedDiff;
import org.custommonkey.xmlunit.Diff;
import org.custommonkey.xmlunit.XMLUnit;
public class AssertXml {
    public static void areSimilar(String expected, String result) {
        XMLUnit.setIgnoreWhitespace(true);
        XMLUnit.setNormalizeWhitespace(true);
        DetailedDiff diff;
        try {
            diff = new DetailedDiff(new Diff(expected, result));
        } catch (Exception e) {
            throw new RuntimeException(e);
        }

        if (!diff.similar()) {
            StringBuffer differenceDescription = new StringBuffer();

            differenceDescription.append(diff.getAllDifferences().size()).append(" differences");
            differenceDescription.append(diff.toString());

            differenceDescription.append("expected =&gt; \n").append(expected);
            differenceDescription.append("result =&gt; \n").append(result);

            org.junit.Assert.fail(differenceDescription.toString());
        }

    }
}</pre>
<p>This is useful when refactoring legacy systems that produce XML. It allows me to capture XML output from a system, validate it manually, and use the captured XML as the expected output to a given test. I test the execution output against my expected output to make sure that I haven&#8217;t changed any behaviour in the system while refactoring.</p>
<pre>@Test
public void testSimila() {
    AssertXml.areSimilar("", "");
}</pre>
<p>For best results, capture a variety of outputs and allow for a greater non-regression. Often this has problems with temporal data (as simple as current system date and time). This give a first target for refactoring—breaking this out. Some are easier to break than others, the simplest are the static contexts like the current system time (see my older post on this <a href="http://pyxis-tech.com/blog/en/2009/09/03/abstracting-out-static-contexts/%29." rel="nofollow">http://pyxis-tech.com/blog/en/2009/09/03/abstracting-out-static-contexts/).</a></p>
<p>Because testing a large XML typically involves varied data processed by varied rules, this is not a viable long-term solution for integration testing, the tests are fragile and not adequately targeted. It does give me a safety net to start breaking apart the tight core of code and splitting out smaller, unit tested portions while ensuring the whole essentially behaves the same.</p>
<p>This strategy can still be used with small, target bits of generated XML as part of a longer term test strategy, but the code needs to adapted to generate isolated fragments of the XML.</p>
<p>Xmlunit comes in a Java and .NET flavor (though I&#8217;ve not used the .NET version) and ranks as one of my favourite  old, dead, but very useful libraries.</p>
]]></content:encoded>
			<wfw:commentRss>http://pyxis-tech.com/blog/en/2013/03/07/english-validating-xml-content-when-testing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Urban Turtle Evolves Into an Application Platform for Microsoft Team Foundation Server</title>
		<link>http://pyxis-tech.com/blog/en/2013/03/01/english-urban-turtle-evolves-into-an-application-platform-for-microsoft-team-foundation-server/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=english-urban-turtle-evolves-into-an-application-platform-for-microsoft-team-foundation-server</link>
		<comments>http://pyxis-tech.com/blog/en/2013/03/01/english-urban-turtle-evolves-into-an-application-platform-for-microsoft-team-foundation-server/#comments</comments>
		<pubDate>Fri, 01 Mar 2013 20:18:24 +0000</pubDate>
		<dc:creator>patil tatoulian</dc:creator>
				<category><![CDATA[Agile]]></category>

		<guid isPermaLink="false">http://pyxis-tech.com/blog/?p=9033</guid>
		<description><![CDATA[LAVAL, QC, CANADA—March 1, 2013—Pyxis Studio, the company behind Urban Turtle, the leading Agile planning tool for Microsoft Team Foundation Server (TFS), announced today that it has transformed Urban Turtle into an “application platform” to better match dynamic and growing client needs. Moving forward and exclusively for TFS 2012, Urban Turtle will be a gateway [...]]]></description>
			<content:encoded><![CDATA[<p><strong>LAVAL, QC, CANADA—March 1, 2013—</strong>Pyxis Studio, the company behind Urban Turtle, the leading Agile planning tool for Microsoft Team Foundation Server (TFS), announced today that it has transformed Urban Turtle into an “application platform” to better match dynamic and growing client needs. Moving forward and exclusively for TFS 2012, Urban Turtle will be a gateway for managers and developers alike to purchase software solutions on demand—all within TFS 2012.</p>
<p>At the core of the new Urban Turtle platform is the ability for companies, development teams, or individuals to purchase applications based on their goals and objectives. For instance, managers seeking to track project progress can purchase Urban Turtle’s newest add-on, a <a href="http://urbanturtle.com/tfs-agile-dashboard">dashboard for TFS</a>, without leaving the application. The dashboard offers configurable widgets, including an innovative <a href="http://urbanturtle.com/blog/2013/02/27/monitoring-a-projects-progress-while-following-its-scope-with-the-sunset-graph/">Sunset Graph</a> that project managers will love.</p>
<p>“The new Urban Turtle platform allows clients to extend TFS with incredible ease. Once initial software is installed, users pick and choose the applications they need and customize them, if need be,” says Dominic Danis, Product Director. The result allows users to avoid costly and time-consuming software acquisition and installation delays. Clients can now get the software they need to be successful—when they need it (24/7).</p>
<p>To support this new direction, and building on Urban Turtle’s hugely popular planning and task boards, the team has already introduced several new applications, including an <a href="http://urbanturtle.com/estimation-board/">estimation board</a> to improve and speed up the estimation process and Fast Track, a highly <a href="http://urbanturtle.com/fast-track/">configurable board</a> that allows teams to manage interruptions (e.g. support tickets) and simultaneously maintain sprint commitments.</p>
<p>“This is just the beginning. Our team is committed to developing SMART innovations for our growing client community,” Dominic continued. Moving forward, Urban Turtle will regularly introduce new and valuable applications. More than ever, the team is dedicated to delivering awesome software to help Agile teams around the world be more successful.</p>
<p><strong>About Urban Turtle </strong></p>
<p>Urban Turtle helps over 700 companies in 21 countries build better software faster. Widely known as the leading Agile development tool for Microsoft Team Foundation Server, Urban Turtle has evolved into an application platform for TFS. The new platform, Urban Turtle 2012, is the most powerful, tightly-integrated, and comprehensive software offering that empowers companies to optimize software development—and have fun doing it. Applications in the software platform include backlog management, a task board, a dashboard, an estimation board, a daily stand-up timer, and much more. For the love of Agile software and to learn more about Urban Turtle TFS add-ons, find us at <a href="http://urbanturtle.com">urbanturtle.com</a>.</p>
<p><strong>About Pyxis Studio</strong></p>
<p>The Studio is the software development division of <a href="http://pyxis-tech.com">Pyxis Technologies inc</a>. We develop sustainable applications, maintain existing ones, and assist development teams by providing Agile products as well as technical guidance and professional services on how to implement state-of-the-art development techniques. Our Studio lives for unique and personalized software designs and inspiring projects that we can carry out with or for our clients. We welcome our clients into our teams where we not only develop software but create unique experiences that bring software development to a higher level.</p>
<p>For additional information: Dominic Danis, 1.855.875.2072 ext. 1, ddanis@urbanturtle.com</p>
<p style="text-align: center;"># # #</p>
<p>The trademarks and trade names mentioned herein may be the trademarks of their respective owners and are hereby acknowledged.</p>
]]></content:encoded>
			<wfw:commentRss>http://pyxis-tech.com/blog/en/2013/03/01/english-urban-turtle-evolves-into-an-application-platform-for-microsoft-team-foundation-server/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Analyze this! A Scrum Master&#8217;s evolution assessment</title>
		<link>http://pyxis-tech.com/blog/en/2013/02/25/english-analyze-this-a-scrum-masters-evolution-assessment/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=english-analyze-this-a-scrum-masters-evolution-assessment</link>
		<comments>http://pyxis-tech.com/blog/en/2013/02/25/english-analyze-this-a-scrum-masters-evolution-assessment/#comments</comments>
		<pubDate>Mon, 25 Feb 2013 17:03:25 +0000</pubDate>
		<dc:creator>marc-andré langlais</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[Team]]></category>
		<category><![CDATA[Team Building]]></category>

		<guid isPermaLink="false">http://pyxis-tech.com/blog/?p=8998</guid>
		<description><![CDATA[Are your Scrum Masters evolving in the practice of their Agile activities? Are they stagnant or worse, regressing!? To answer these questions, a colleague and I came up with the following activity that provides an observable starting point. The objective is to obtain an individual and collective assessment of the Scrum Masters comfort and interest [...]]]></description>
			<content:encoded><![CDATA[<div>
<div>
<div>
<p>Are your Scrum Masters evolving in the practice of their Agile activities? Are they stagnant or worse, regressing!? To answer these questions, a colleague and I came up with the following activity that provides an observable starting point.</p>
<p><span id="more-8998"></span><br />
The objective is to obtain an individual and collective assessment of the Scrum Masters comfort and interest levels regarding different Scrum activities†. Since the manner in which activities are practiced and used may vary between teams and organizations, it is important that the group of Scrum Masters share a common definition of each activity. You will need to prepare in advance for this activity to make sure you complete the steps below before getting your Scrum Masters together. The first step in establishing a common definition of the activities is to select the ones you want to asses and write them down on separate pieces of cardboard (big enough so anyone can read from a distance). Make sure the selected activities are practiced by all participating Scrum Masters. You will then need to find and print pictures that have corresponding attributes for each activity. For example, the following picture depicts U.N. soldiers looking at a document or map. Some observations that may come from looking at this picture are: “Standing up”, “Meeting”, “Soldiers saying what they are going to do next”, “Brief meeting”. The associated activity in the picture below would likely correspond to the daily scrum meeting, considering the above observations and attributes as well.</p>
<p><a href="http://pyxis-tech.com/blog/wp-content/uploads/2013/02/DailyScrum1.png"><img class="size-medium wp-image-9001 aligncenter" src="http://pyxis-tech.com/blog/wp-content/uploads/2013/02/DailyScrum1-300x226.png" alt="" width="300" height="226" /></a></p>
<p>The selection of the pictures is somewhat critical to the success of the activity. It may be a good idea to run them through with a colleague or two to see if they observe and assign similar attributes to what you were looking for.<br />
Once you&#8217;re ready to host the exercise, have the group sit around a table with a pad of sticky notes and pen available for each participant. The activity titles should be placed in a pile face down at the center of the table. Then, pin the pictures to the wall in any order you choose making sure all participants can clearly see the pictures. Next, using the sticky notes, ask the Scrum Masters to write down any attributes or observations they come up with for each image(s) and stick them below the corresponding picture. Expect to get many different observations, but for the most part they will correspond to the attributes you should expect. The wall should look somewhat like the following:</p>
<p><a href="http://pyxis-tech.com/blog/wp-content/uploads/2013/02/ScrumActivities1.png"><img class="size-large wp-image-9003 aligncenter" src="http://pyxis-tech.com/blog/wp-content/uploads/2013/02/ScrumActivities1-940x243.png" alt="" width="585" height="151" /></a>Then, when every participant has finished their associations, review the attributes and observations of every picture with the group. At each review, have the group vote, by show of hands, for any outstanding attribute or observation for each picture. The next step is to have a Scrum Master pick an activity cardboard from the pile and read it out loud. Have the group help associate the activity with a specific picture all the while considering the outstanding attributes and observations. Take the time to debrief at every activity-picture association and let the participants share on their experiences with each activity. At this point, the stage is set for each Scrum Master to self-assess a score (%) for both their comfort and interest levels for each activity.</p>
</div>
</div>
</div>
<div>
<p>The initial scores will provide a basis, or starting point, so you can then run through the self-assessment part of the exercise as often as needed to determine if your Scrum Masters are evolving or regressing.</p>
<hr />
<p>† Some of the Scrum activities used in this example are: demonstration, retrospective, planning session, tasking session, and daily scrum.</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://pyxis-tech.com/blog/en/2013/02/25/english-analyze-this-a-scrum-masters-evolution-assessment/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Passive to Active—Significant Intervention of an Agile Coach</title>
		<link>http://pyxis-tech.com/blog/en/2013/02/18/english-passive-to-active%e2%80%94significant-intervention-of-an-agile-coach/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=english-passive-to-active%25e2%2580%2594significant-intervention-of-an-agile-coach</link>
		<comments>http://pyxis-tech.com/blog/en/2013/02/18/english-passive-to-active%e2%80%94significant-intervention-of-an-agile-coach/#comments</comments>
		<pubDate>Mon, 18 Feb 2013 18:33:33 +0000</pubDate>
		<dc:creator>marc-andré langlais</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[Team]]></category>

		<guid isPermaLink="false">http://pyxis-tech.com/blog/?p=8969</guid>
		<description><![CDATA[I&#8217;m an Agile coach with 5 teams to assist and not much hair left on my noggin, mainly due to scratching it too often, which in turn is due to too much thinking. I&#8217;m stuck once again trying to figure out what item, from many, to tackle from my “Scrum Teams Notes &#38; Observations” list. [...]]]></description>
			<content:encoded><![CDATA[<div>
<p>I&#8217;m an Agile coach with 5 teams to assist and not much hair left on my noggin, mainly due to scratching it too often, which in turn is due to too much thinking. I&#8217;m stuck once again trying to figure out what item, from many, to tackle from my “Scrum Teams Notes &amp; Observations” list. My first thought: How do I prevent hair loss? What I really mean to say is: How do I order my list?</p>
<p><span id="more-8969"></span>What I had to work with was a set of “comfort and interest” self-assessment scores from a previous activity (Analyze This).</p>
<p>So I decided to try something different. I produced, with the self-assessment scores, a plot chart with numbers representing a Scrum activity and colours representing each Scrum Master. Low and behold, what I discovered were visual groupings in the chart that identified people that considered themselves as experts (blue), within the average (yellow), and below average (green, red, and black). I also noticed groupings of activities that were not of interest (5&#8242;s), interesting but not understood (7&#8242;s), interesting and understood (1&#8242;s).</p>
<p><a href="http://pyxis-tech.com/blog/wp-content/uploads/2013/02/billard_passive_active_greens_7.png"><img class="alignleft" src="http://pyxis-tech.com/blog/wp-content/uploads/2013/02/billard_passive_active_greens_7-300x287.png" alt="" width="300" height="287" /></a></p>
<p>I decided to work with the activities or individuals which or who had a low comfort level but which or who also had sufficient interest levels (greens and 7&#8242;s). My decision was based on the theory that working on interested individuals and activities needing assistance might positively influence the individuals&#8217; future assessments.<br />
Going through this exercise provided multiple benefits; no more hair loss, an ordered list, and more money in my wallet—ROGAINE<sup>®</sup> costs a fortune here <img src='http://pyxis-tech.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://pyxis-tech.com/blog/en/2013/02/18/english-passive-to-active%e2%80%94significant-intervention-of-an-agile-coach/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
