<?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>Marcio Marinho</title>
	<atom:link href="http://www.marciomarinho.com/blog/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://www.marciomarinho.com/blog</link>
	<description>Software and IT Blog</description>
	<lastBuildDate>Tue, 02 Mar 2010 12:59:55 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>My presentation about JBoss Clustering at RIOJUG 02/25/2010</title>
		<link>http://www.marciomarinho.com/blog/?p=109</link>
		<comments>http://www.marciomarinho.com/blog/?p=109#comments</comments>
		<pubDate>Tue, 02 Mar 2010 12:59:55 +0000</pubDate>
		<dc:creator>Marcio Marinho</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.marciomarinho.com/blog/?p=109</guid>
		<description><![CDATA[Last Thursday I did a presentation about JBoss Clustering at RioJug, and it was a very nice, energized and pleasant night. The room was full and people there were eager to participate and asked me a lot of interesting questions about the topic and beyond.
I&#8217;d like to thank again RioJug&#8217;s leaders for the time spent [...]]]></description>
			<content:encoded><![CDATA[<p>Last Thursday I did a presentation about JBoss Clustering at RioJug, and it was a very nice, energized and pleasant night. The room was full and people there were eager to participate and asked me a lot of interesting questions about the topic and beyond.</p>
<p>I&#8217;d like to thank again RioJug&#8217;s leaders for the time spent and all attendance that did not care about the heavy rain that felt just before the session.</p>
<p>If you weren&#8217;t there, you can see the presentation at SlideShare : http://www.slideshare.net/marciomarinho/jboss-clustering</p>
<p>Sorry, but as I presented it here in Brazil, it is written in my mother tongue portuguese.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.marciomarinho.com/blog/?feed=rss2&amp;p=109</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Injecting new skills into the team</title>
		<link>http://www.marciomarinho.com/blog/?p=107</link>
		<comments>http://www.marciomarinho.com/blog/?p=107#comments</comments>
		<pubDate>Thu, 04 Feb 2010 15:56:22 +0000</pubDate>
		<dc:creator>Marcio Marinho</dc:creator>
				<category><![CDATA[agile]]></category>
		<category><![CDATA[coaching]]></category>
		<category><![CDATA[learning]]></category>
		<category><![CDATA[management]]></category>
		<category><![CDATA[mentoring]]></category>

		<guid isPermaLink="false">http://www.marciomarinho.com/blog/?p=107</guid>
		<description><![CDATA[Last week I passed through a very nice experience, so, I couldn&#8217;t hold my self about the desire to share it.
Out team needed to build something really new and a bit though, also we have a very mixed skill sets in the team, furthermore we had to bring awareness to everybody about what should be [...]]]></description>
			<content:encoded><![CDATA[<p>Last week I passed through a very nice experience, so, I couldn&#8217;t hold my self about the desire to share it.</p>
<p>Out team needed to build something really new and a bit though, also we have a very mixed skill sets in the team, furthermore we had to bring awareness to everybody about what should be done and how, but we had no easy way of doing this. The solution couldn&#8217;t be better, we defined two sessions of what I called &#8220;team design/programming&#8221;, where we locked ourselves into a room, using a notebook and a 50&#8243; TV, this way everyone could see what was happening. We started presenting the goal of that session, what we would look for, what to build, the platform we&#8217;re aiming and so on.</p>
<p>After that we started coding and all of us could code a bit, fix, re-factor, bring new ideas, ask questions, discuss and help. That was really an amazing experience, in despite of the fact that sometimes someone wanted to dominate the notebook ( that includes myself <img src='http://www.marciomarinho.com/blog/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  ). The bottom line of these sessions was a well defined platform, everybody having the knowledge about what we did, why, how, the ability to provide support to other teams, and now we have these new skills into the team. That was really astonishing.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.marciomarinho.com/blog/?feed=rss2&amp;p=107</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Bringing new people into the team</title>
		<link>http://www.marciomarinho.com/blog/?p=105</link>
		<comments>http://www.marciomarinho.com/blog/?p=105#comments</comments>
		<pubDate>Wed, 27 Jan 2010 11:27:27 +0000</pubDate>
		<dc:creator>Marcio Marinho</dc:creator>
				<category><![CDATA[agile]]></category>
		<category><![CDATA[coaching]]></category>
		<category><![CDATA[learning]]></category>
		<category><![CDATA[management]]></category>
		<category><![CDATA[mentoring]]></category>

		<guid isPermaLink="false">http://www.marciomarinho.com/blog/?p=105</guid>
		<description><![CDATA[Change is always something stressing at some level, because there is uncertainty, energy must be spent to adapt, react, change minds, learn new skills and so on. I&#8217;ve passed through the experience of move from companies and also moving from different teams inside the same company, and I learned something very useful about it.
It&#8217;s a [...]]]></description>
			<content:encoded><![CDATA[<p>Change is always something stressing at some level, because there is uncertainty, energy must be spent to adapt, react, change minds, learn new skills and so on. I&#8217;ve passed through the experience of move from companies and also moving from different teams inside the same company, and I learned something very useful about it.</p>
<p>It&#8217;s a very simple rule of making the newcomer comfortable with the new environment, making things clear and easy to him/her, give them time to breath and perceive the environment. Also, the team should be supportive to this new person, because the adaptation will be at the speed of light in comparison of any other kind of environment.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.marciomarinho.com/blog/?feed=rss2&amp;p=105</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Happy new year !</title>
		<link>http://www.marciomarinho.com/blog/?p=102</link>
		<comments>http://www.marciomarinho.com/blog/?p=102#comments</comments>
		<pubDate>Thu, 31 Dec 2009 21:44:38 +0000</pubDate>
		<dc:creator>Marcio Marinho</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.marciomarinho.com/blog/?p=102</guid>
		<description><![CDATA[I wish all of you my friends a very happy new year. May all your plans become true !!!!!
In 2010 I will be very activelly posting nice things to share and discuss with all of you  
Sincerely,
Marcio Alves Marinho
]]></description>
			<content:encoded><![CDATA[<p>I wish all of you my friends a very happy new year. May all your plans become true !!!!!</p>
<p>In 2010 I will be very activelly posting nice things to share and discuss with all of you <img src='http://www.marciomarinho.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Sincerely,</p>
<p>Marcio Alves Marinho</p>
]]></content:encoded>
			<wfw:commentRss>http://www.marciomarinho.com/blog/?feed=rss2&amp;p=102</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Domain Driven Design, The Repository pattern</title>
		<link>http://www.marciomarinho.com/blog/?p=57</link>
		<comments>http://www.marciomarinho.com/blog/?p=57#comments</comments>
		<pubDate>Tue, 23 Jun 2009 03:31:52 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[architecture]]></category>
		<category><![CDATA[domain.driven.design]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[persistence]]></category>
		<category><![CDATA[programming language]]></category>

		<guid isPermaLink="false">http://www.marciomarinho.com/blog/?p=57</guid>
		<description><![CDATA[I&#8217;ve seen so many times a heated discussion about Repositories in Domain Driven Design, there is a kind of misunderstanding and/or confusion about what really a Repository is.
People usually disagree about the role of the Repository, if it should be a kind of  &#8220;Data Access Layer&#8221;, such as a DAO or if it must be [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve seen so many times a heated discussion about Repositories in <a href="http://en.wikipedia.org/wiki/Domain-driven_design">Domain Driven Design</a>, there is a kind of misunderstanding and/or confusion about what really a Repository is.</p>
<p>People usually disagree about the role of the Repository, if it should be a kind of  &#8220;Data Access Layer&#8221;, such as a DAO or if it must be something that is injected in the domain class, then it will talk to the DAO in the beneath layer.</p>
<p>I&#8217;ve always wondered why people had these fights, but now I can see why ! The thing is, as far as I read in the book (Chapter 10 : Supple Design),  the examples of Reposotory has been shown almost exactly as a DAO implementation. I even downloaded the source code examples from the <a href="http://domaindrivendesign.org/" target="_blank">Domain Driven Design Community</a>, and the example IS a DAO implementation, as I&#8217;m showing below :</p>
<h3>
<pre><code>package se.citerus.dddsample.domain.model.cargo;

import java.util.List;

public interface CargoRepository {

  /**
   * Finds a cargo using given id.
   *
   * @param trackingId Id
   * @return Cargo if found, else {@code null}
   */
  Cargo find(TrackingId trackingId);

  /**
   * Finds all cargo.
   *
   * @return All cargo.
   */
  List findAll();

  /**
   * Saves given cargo.
   *
   * @param cargo cargo to save
   */
  void store(Cargo cargo);

  /**
   * @return A unique, generated tracking Id.
   */
  TrackingId nextTrackingId();

}</code></pre>
</h3>
<p><strong>and the implementation</strong></p>
<h3>
<pre><code>package se.citerus.dddsample.infrastructure.persistence.hibernate;

import org.springframework.stereotype.Repository;
import se.citerus.dddsample.domain.model.cargo.Cargo;
import se.citerus.dddsample.domain.model.cargo.CargoRepository;
import se.citerus.dddsample.domain.model.cargo.TrackingId;

import java.util.List;
import java.util.UUID;

/**
 * Hibernate implementation of CargoRepository.
 */
@Repository
public class CargoRepositoryHibernate extends HibernateRepository implements CargoRepository {

  public Cargo find(TrackingId tid) {
    return (Cargo) getSession().
      createQuery("from Cargo where trackingId = :tid").
      setParameter("tid", tid).
      uniqueResult();
  }

  public void store(Cargo cargo) {
    getSession().saveOrUpdate(cargo);
    // Delete-orphan does not seem to work correctly when the parent is a component
    getSession().createSQLQuery("delete from Leg where cargo_id = null").executeUpdate();
  }

  public TrackingId nextTrackingId() {
    // TODO use an actual DB sequence here, UUID is for in-mem
    final String random = UUID.randomUUID().toString().toUpperCase();
    return new TrackingId(
      random.substring(0, random.indexOf("-"))
    );
  }

  public List findAll() {
    return getSession().createQuery("from Cargo").list();
  }

}</code></pre>
</h3>
<p><strong>This Repository is used by a class called BookingServiceImpl :</strong></p>
<h3>
<pre><code>package se.citerus.dddsample.application.impl;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.transaction.annotation.Transactional;
import se.citerus.dddsample.application.BookingService;
import se.citerus.dddsample.domain.model.cargo.*;
import se.citerus.dddsample.domain.model.location.Location;
import se.citerus.dddsample.domain.model.location.LocationRepository;
import se.citerus.dddsample.domain.model.location.UnLocode;
import se.citerus.dddsample.domain.service.RoutingService;

import java.util.Collections;
import java.util.Date;
import java.util.List;

public final class BookingServiceImpl implements BookingService {

  private final CargoRepository cargoRepository;
  private final LocationRepository locationRepository;
  private final RoutingService routingService;
  private final Log logger = LogFactory.getLog(getClass());

  public BookingServiceImpl(final CargoRepository cargoRepository,
                            final LocationRepository locationRepository,
                            final RoutingService routingService) {
    this.cargoRepository = cargoRepository;
    this.locationRepository = locationRepository;
    this.routingService = routingService;
  }

  @Override
  @Transactional
  public TrackingId bookNewCargo(final UnLocode originUnLocode,
                                 final UnLocode destinationUnLocode,
                                 final Date arrivalDeadline) {
    // TODO modeling this as a cargo factory might be suitable
    final TrackingId trackingId = cargoRepository.nextTrackingId();
    final Location origin = locationRepository.find(originUnLocode);
    final Location destination = locationRepository.find(destinationUnLocode);
    final RouteSpecification routeSpecification = new RouteSpecification(origin, destination, arrivalDeadline);

    final Cargo cargo = new Cargo(trackingId, routeSpecification);

    cargoRepository.store(cargo);
    logger.info("Booked new cargo with tracking id " + cargo.trackingId().idString());

    return cargo.trackingId();
  }

  @Override
  @Transactional
  public List requestPossibleRoutesForCargo(final TrackingId trackingId) {
    final Cargo cargo = cargoRepository.find(trackingId);

    if (cargo == null) {
      return Collections.emptyList();
    }

    return routingService.fetchRoutesForSpecification(cargo.routeSpecification());
  }

  @Override
  @Transactional
  public void assignCargoToRoute(final Itinerary itinerary, final TrackingId trackingId) {
    final Cargo cargo = cargoRepository.find(trackingId);
    if (cargo == null) {
      throw new IllegalArgumentException("Can't assign itinerary to non-existing cargo " + trackingId);
    }

    cargo.assignToRoute(itinerary);
    cargoRepository.store(cargo);

    logger.info("Assigned cargo " + trackingId + " to new route");
  }

  @Override
  @Transactional
  public void changeDestination(final TrackingId trackingId, final UnLocode unLocode) {
    final Cargo cargo = cargoRepository.find(trackingId);
    final Location newDestination = locationRepository.find(unLocode);

    final RouteSpecification routeSpecification = new RouteSpecification(
      cargo.origin(), newDestination, cargo.routeSpecification().arrivalDeadline()
    );
    cargo.specifyNewRoute(routeSpecification);

    cargoRepository.store(cargo);
    logger.info("Changed destination for cargo " + trackingId + " to " + routeSpecification.destination());
  }

}</code></pre>
</h3>
<p>Well, I cannot deny that I did not dig so deep into the code ( and I did not finish the book ) yet,<br />
but what I can state for sure is that this architecture really looks like this sequence :</p>
<p><img class="aligncenter size-full wp-image-85" title="Repository Sequence Diagram" src="http://www.marciomarinho.com/blog/wp-content/uploads/2009/06/RepositorySequence1.jpg" alt="Repository Sequence Diagram" width="784" height="369" /><br />
Also, the layering :</p>
<p><img class="aligncenter size-full wp-image-86" title="Layering Repository Diagram" src="http://www.marciomarinho.com/blog/wp-content/uploads/2009/06/PackageRepository.jpg" alt="Layering Repository Diagram" width="418" height="587" /><br />
Ok, I know I am over simplifying things here, but my intention is only to communicate my point of view about<br />
the topic. I&#8217;m not saying that what is inside this code is wrong at all, I am just skeptical about how &#8220;new&#8221; or<br />
effective this thing is, because I&#8217;ve been developing large scale software systems using the same approach, but with a<br />
different name &#8220;DAO&#8221;, and so far I could not see anything different from this. I might let you guys twist my arms in the end of the book,<br />
but so far I&#8217;m pretty sure the Repository and a DAO pattern are the same thing.</p>
<p>Any idea, suggestions, thoughts and counter-argument are very welcome ! <img src='http://www.marciomarinho.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.marciomarinho.com/blog/?feed=rss2&amp;p=57</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Building a ubiquitous language &#8211; 1</title>
		<link>http://www.marciomarinho.com/blog/?p=50</link>
		<comments>http://www.marciomarinho.com/blog/?p=50#comments</comments>
		<pubDate>Fri, 12 Jun 2009 20:26:44 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[architecture]]></category>
		<category><![CDATA[domain.driven.design]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://www.marciomarinho.com/blog/?p=50</guid>
		<description><![CDATA[The ubiquitous language is one of the crucial parts of Domain Driven Design, because it&#8217;s the basis of all communication among all the team. It&#8217;s hard to point out how it&#8217;s important to a project, because maybe everyone inside a project have a particular &#8220;view&#8221; about the same project, I mean a business analyst would [...]]]></description>
			<content:encoded><![CDATA[<p>The ubiquitous language is one of the crucial parts of Domain Driven Design, because it&#8217;s the basis of all communication among all the team. It&#8217;s hard to point out how it&#8217;s important to a project, because maybe everyone inside a project have a particular &#8220;view&#8221; about the same project, I mean a business analyst would be closer to the user who is giving the requirements, and afterwords these same requirements will be translated to a bunch of documents and diagrams that will ultimately reach the developers, who will deliver the most waited product, the production code!</p>
<p>As I stated before, the communication is the heart of everything in software development, so, how can we achieve of deliver the software that the customer wants if we can&#8217;t completely understand the user language, jargons and way of work ? we simply CAN&#8217;T.</p>
<p>I remember a project where I worked, first providing bug fixes, and later working to re-write it, where we had a <a title="Glossary" href="http://en.wikipedia.org/wiki/Glossary" target="_blank">glossary</a> about all the terms the software had, of course, they were all related to the users terms. This application was a governamental app, that handled some kind of documents and users workflow. So, the users usually talk to us using their language, about how the documents should be &#8220;routed&#8221; between two departments, how it should be handled, who was responsible for &#8220;stamp&#8221;, &#8220;endorse&#8221;, &#8220;forward&#8221; or &#8220;deny&#8221; something related to the documents they were receiving. The <a title="Glossary" href="http://en.wikipedia.org/wiki/Glossary" target="_blank">glossary</a> was a nice tool to capture those things we did not know, because we&#8217;re all IT guys, not business owners.</p>
<p>The bad thing was that this was the only place where we had some insight about what the user think or need, and what are their jargons and way to work. Our domain model did not express those things at all, so it was hard to get some clue about what that software was in the first place, because the code did not express the domain model, and worse, the domain model did not express the business case. We only started to have some clue after few meeting with the users, then we started to say &#8220;Eureka&#8221; this thing is that piece of code !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.marciomarinho.com/blog/?feed=rss2&amp;p=50</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Domain Driven Design</title>
		<link>http://www.marciomarinho.com/blog/?p=44</link>
		<comments>http://www.marciomarinho.com/blog/?p=44#comments</comments>
		<pubDate>Thu, 11 Jun 2009 19:50:31 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[architecture]]></category>
		<category><![CDATA[domain.driven.design]]></category>

		<guid isPermaLink="false">http://www.marciomarinho.com/blog/?p=44</guid>
		<description><![CDATA[After a long time, I&#8217;m rushing to finish the Eric Evans best seller book Domain Driven Design, and I found very interesting the ideas inside it. I&#8217;ve been fan of object-oriented, software architecture and OOAD since the first time I learned OO, a long time ago.
The idea behind Domain Driven Design is very simple :  [...]]]></description>
			<content:encoded><![CDATA[<p>After a long time, I&#8217;m rushing to finish the Eric Evans best seller book Domain Driven Design, and I found very interesting the ideas inside it. I&#8217;ve been fan of object-oriented, software architecture and OOAD since the first time I learned OO, a long time ago.</p>
<p>The idea behind Domain Driven Design is very simple :  Put the model to work through a set of techniques that will make the development easier, things more clear, and shield the domain model against things that doesn&#8217;t belong to there. As a known issue, the domain model is the most critical issue behind enterprise software development, because it&#8217;s the heart of every software written by a human. Every single funcionality comes from it, and the domain is the basis of all external interfaces and services, because is the Domain Model responsibility&#8217;s to deal with the business issues.</p>
<p>Seems to be clear and easy to understand ? the answer is yes and no !</p>
<p>Software is about humans writing software ( good or bad ones ), and a software is just a tool to achieve a business goal, such as &#8220;place an order&#8221; to buy a book. The company&#8217;s goal is to sell the book, but it will need a good software that supports their business needs. Coming back to the part of putting the model to work, where a model is an abstraction of the reality, I mean, a way to visualize and communicate the ideas behind that particular software that we&#8217;re writing.</p>
<p>I&#8217;ve seen so many times a model that has little to say about the software that is running or it completely does not say anything anymore about working program, because someone draw it in the past, but they did not evolve it, in order to keep track of their communication. It&#8217;s very frustrating to start work on a software like this, because it looks like there is a documentation or concepts that will guide us to understand the problems the software is supposed to deal with, but in the end what exists is a poor picture about some fact in the past. So, domain driven design tackles this issue, putting the model to work, bringing life to these pictures, in order to communicate what exacly the software is, keeping track of changes, creating a unique vocabulary between technical and non-technical people ( the <a title="Ubiquitous Language" href="http://www.domaindrivendesign.org/node/132" target="_blank">Ubiquitous Language</a> ), that is a technique to put everybody on the same page, speaking the same language.</p>
<p>Talking about Ubiquitous Language, I answered a post at linkedin few days ago, because there was a person who asked which &#8220;Jargons&#8221; he should use to present a software architecture, and I just answered him, use a language that the his audience can understand better, preferrably use or build a  <a title="Ubiquitous Language" href="http://www.domaindrivendesign.org/node/132" target="_blank">Ubiquitous Languag</a>, because you can&#8217;t have a concept that the user doesn&#8217;t understand, because it will lead you to an infinite talk about what is what, there will be lots of misconceptions and you&#8217;ll fail to deliver a good software&#8230; and I hope he listened to me.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.marciomarinho.com/blog/?feed=rss2&amp;p=44</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Making your code more testable</title>
		<link>http://www.marciomarinho.com/blog/?p=43</link>
		<comments>http://www.marciomarinho.com/blog/?p=43#comments</comments>
		<pubDate>Fri, 01 May 2009 13:57:36 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.marciomarinho.com/blog/?p=43</guid>
		<description><![CDATA[Testability is one of the most beautiful, desireable and must have feature that a code must be compliant. Nowadays there is no space for untested and low quality code, that means many problems at production environments, long hours debugging code, and late delivery.
As usual, this is again a farly big subject that I will try [...]]]></description>
			<content:encoded><![CDATA[<p>Testability is one of the most beautiful, desireable and must have feature that a code must be compliant. Nowadays there is no space for untested and low quality code, that means many problems at production environments, long hours debugging code, and late delivery.</p>
<p>As usual, this is again a farly big subject that I will try to resume in few tips to improve code&#8217;s testability as follow :</p>
<p>First of all, start designing and writing a test for your code before you write your business code, just follow <a title="TDD" href="http://en.wikipedia.org/wiki/Test-driven_development" target="_blank">test driven development</a> approach.</p>
<p>Never write long methods, because it will probably lead to low quality code and cluttered design, as a result it will make your test very difficult. If there is a need for such a big calculation, temporary variables or things like this, then just split the big method into smaller methods and delegate your calls.</p>
<p>Add the right responsibility to the right object, another smell that will make your tests hard is when one object knows too much about the other object&#8217;s internals.</p>
<p>Try to write cleaner and less code, because less you write, less errors you&#8217;ll produce/find, and faster will be your program.</p>
<p>Singletons are usually evil for tests, because they usually cache some data that may hurt you.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.marciomarinho.com/blog/?feed=rss2&amp;p=43</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Letting people work</title>
		<link>http://www.marciomarinho.com/blog/?p=42</link>
		<comments>http://www.marciomarinho.com/blog/?p=42#comments</comments>
		<pubDate>Wed, 25 Mar 2009 13:09:09 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[management]]></category>

		<guid isPermaLink="false">http://www.marciomarinho.com/blog/?p=42</guid>
		<description><![CDATA[One and while I catch myself thinking about why the organizations don&#8217;t let people work. Indeed, this is a controversial thought, because every single worker is hired to WORK! But in practice this is not what happens in the reality.
I&#8217;ve seen many many times, very talented people being blocked by some &#8220;rule&#8221; or someone that [...]]]></description>
			<content:encoded><![CDATA[<p>One and while I catch myself thinking about why the organizations don&#8217;t let people work. Indeed, this is a controversial thought, because every single worker is hired to WORK! But in practice this is not what happens in the reality.</p>
<p>I&#8217;ve seen many many times, very talented people being blocked by some &#8220;rule&#8221; or someone that think the person is not able or &#8220;was not hired&#8221; to contribute on that way. I really like to think on a contrary way of this line, because my coaching personality like to see people evolving, become personally and technically better, it&#8217;s a pleasure to me <img src='http://www.marciomarinho.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>So, this must be a mantra for managers and leaders, if your team can run 100 km/h don&#8217;t make them run at 5 km/h, because it&#8217;s very frustrating, we should let people be the best they can be, trust them, encourage them, coach and support them.</p>
<p>The bottom line here is to treat people as people, not as robots, because people can see, hear, smell, feel, have emotions, and so one. Sometimes you have only to listen to your team, and that will be enough. Don&#8217;t centralize, don&#8217;t block creativity, don&#8217;t be afraid of trying something new, don&#8217;t wrongly control, just follow, coach, support and be part of everything.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.marciomarinho.com/blog/?feed=rss2&amp;p=42</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>A long time ago&#8230;</title>
		<link>http://www.marciomarinho.com/blog/?p=37</link>
		<comments>http://www.marciomarinho.com/blog/?p=37#comments</comments>
		<pubDate>Fri, 06 Mar 2009 13:23:32 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[SOA]]></category>
		<category><![CDATA[architecture]]></category>
		<category><![CDATA[learning]]></category>
		<category><![CDATA[messaging]]></category>

		<guid isPermaLink="false">http://www.marciomarinho.com/blog/?p=37</guid>
		<description><![CDATA[Hi All,
Wow, it has been a long time since my last post. Unfortunately I&#8217;ve been doing so many things at once, and I couldn&#8217;t even write a single line. But now I have a free time to do this.
So, I promise I will be posting interesting things here again. One thing among the other 10000 [...]]]></description>
			<content:encoded><![CDATA[<p>Hi All,</p>
<p>Wow, it has been a long time since my last post. Unfortunately I&#8217;ve been doing so many things at once, and I couldn&#8217;t even write a single line. But now I have a free time to do this.</p>
<p>So, I promise I will be posting interesting things here again. One thing among the other 10000 is my preparation for the IBM SOA Certification, and I&#8217;d like to bring here some discussions about it. I found very interesting things in my studies <img src='http://www.marciomarinho.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Another thing I will be posting is about EAI tools, such as IBM MQ, TIBCO, ServiceMix and so on.</p>
<p>So, stay tuned !</p>
<p>See ya.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.marciomarinho.com/blog/?feed=rss2&amp;p=37</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
