<?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>Coding4Food</title>
	<atom:link href="http://coding4food.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://coding4food.com</link>
	<description>software development and IT stuff</description>
	<lastBuildDate>Sat, 20 Feb 2010 04:55:05 +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>CruiseControl com SVN &#8211; Parte 01</title>
		<link>http://coding4food.com/2010/02/20/cruisecontrol-com-svn-parte-01/</link>
		<comments>http://coding4food.com/2010/02/20/cruisecontrol-com-svn-parte-01/#comments</comments>
		<pubDate>Sat, 20 Feb 2010 04:54:36 +0000</pubDate>
		<dc:creator>Eduardo Kruger</dc:creator>
				<category><![CDATA[metodologia]]></category>
		<category><![CDATA[programação]]></category>
		<category><![CDATA[integração contínua]]></category>

		<guid isPermaLink="false">http://coding4food.com/?p=350</guid>
		<description><![CDATA[Esse ano estamos tentando fazer algumas mundanças na Informant. Percebemos que usar quadros magnéticos, pregar post-it&#8217;s por toda empresa e fazer reuniões diárias não estavam nos fazendo mais &#8220;ágeis&#8221;, e na prática&#8230; pouca coisa era aplicada. Agora estamos buscando realmente implementar algo ágil nos nossos projetos. Estamos dandos os primeiros passos, mas muita coisa boa [...]]]></description>
			<content:encoded><![CDATA[<p>Esse ano estamos tentando fazer algumas mundanças na <a title="Informant" href="http://www.informant.com.br" target="_blank">Informant.</a> Percebemos que usar quadros magnéticos, pregar post-it&#8217;s por toda empresa e fazer reuniões diárias não estavam nos fazendo mais &#8220;ágeis&#8221;, e na prática&#8230; pouca coisa era aplicada. Agora estamos buscando realmente <a title="Agile Manifest" href="http://agilemanifesto.org/" target="_blank">implementar algo ágil</a> nos nossos projetos. Estamos dandos os primeiros passos, mas <a href="http://c2.com/cgi/wiki?ExtremeProgrammingRoadmap" target="_self">muita coisa </a><span class="aligncenter">boa está sendo planejada para este ano.</span></p>
<p><span class="aligncenter"> </span></p>
<p><span class="aligncenter">Uma das coisas que precisamos melhorar é a forma como trabalhamos com nosso repositório de fontes. Estamos modificando nossos procedimentos e nosso trabalho diário para manter nosso respositório mais confiável: <a href="http://c2.com/cgi/wiki?ContinuousIntegration" target="_blank">A</a> <a href="http://www.martinfowler.com/articles/continuousIntegration.html" target="_blank">Integração</a> <a href="http://improveit.com.br/xp/praticas/integracao" target="_blank">Contínua</a> é uma prática essencial do <a href="http://en.wikipedia.org/wiki/Extreme_Programming" target="_blank">XP</a>, que não se resume apenas a utilização de uma ferramenta, mas a automatização de build&#8217;s e deploy&#8217;s pode economizar muito tempo de desenvolvimento. Deixando o programador disponível para realizar o seu trabalho mais importante: programar.</span></p>
<p>Estamos começando a utilizar o <a title="CruiseControl Home" href="http://cruisecontrol.sourceforge.net/" target="_blank">CruiseControl, </a><span class="aligncenter">ferramenta que ainda não conhecia de perto. Apesar de já ter trabalhado com algumas ferramentas do gênero (ex.: <a title="Bamboo Home" href="http://www.atlassian.com/software/bamboo/" target="_blank">Bamboo</a>), o CC me impressionou bastante com relação a flexibilidade de configuração e implementação de planos de build. Para quem está perdendo muito tempo com liberação de versões, builds, deploys de aplicativos, e está pensando em utilizar o CC, vou repassar aqui os meus passos iniciais de configuração da ferramenta em ambiente Windows: </span></p>
<ol>
<li>Faça o <a href="http://cruisecontrol.sourceforge.net/download.html" target="_blank">download</a> da última release do CC, que atualmente é a 2.8.3 e descompacte vvocê achar melhor, por exemplo em <em>C:\java\cruisecontrol-bin-2.8.3</em></li>
<p><span> </span></p>
<li>O ideal é criar um diretório de trabalho configuração de seus projetos. (ex.: <em>C:\java\work\cruise</em>). Achei mais fácil iniciar o CC desta mesma workspace, por isso também copiei os arquivos <em>cruisecontrol.bat</em>, <em>config.xml</em> e <em>dashboard-config.xml</em> para o diretório <em>/cruise</em>. Bastando apenas fazer alguns acertos no <em>cruisecontrol.bat</em>, apontando o launcher do CC para o caminho correto (<em>C:/java/cruisecontrol-bin-2.8.3/lib/cruisecontrol-launcher.jar</em>).<em> </em>Nesse momento, você já poderá iniciar o CC. Apontando o seu navegador para <a href="http://localhost:8080/dashboard/tab/dashboard" target="_blank">http://localhost:8080/dashboard/tab/dashboard</a> já será possível acessar a ferramenta. Se tudo der certo, você deverá ver o Dashboard Server, que por enquanto, não terá nenhum projeto disponível.<em>Você deverá ter a variável JAVA_HOME também já configurada no seu Path.</em></li>
<p><span> </span></p>
<li>Agora precisamos configurar um projeto. No CC, todos os projetos são configurados a partir do arquivo <em>config.xml</em>. Quando trabalhamos com múltiplos projetos, é interessante manter a configuração de cada um deles em arquivos separados, para isso podemos alterar o <em>config.xml</em> para que fique da seguinte forma:
<pre class="brush: xml;">
&lt;!-- config.xml --&gt;
&lt;!DOCTYPE cruisecontrol [
   &lt;!ENTITY build-informantUtils SYSTEM &quot;projects/informantUtils-config.xml&quot;&gt;
   &lt;!ENTITY build-informantEJB SYSTEM &quot;projects/informantEJB-config.xml&quot;&gt;
]&gt;
&lt;cruisecontrol&gt;
    &lt;property file=&quot;config.properties&quot;/&gt;
    &lt;plugin name=&quot;svn&quot; classname=&quot;net.sourceforge.cruisecontrol.sourcecontrols.SVN&quot;/&gt;
    &lt;plugin name=&quot;svnbootstrapper&quot; classname=&quot;net.sourceforge.cruisecontrol.bootstrappers.SVNBootstrapper&quot;/&gt;
    &lt;system&gt;
       &lt;configuration&gt;
           &lt;threads count=&quot;2&quot;/&gt;
       &lt;/configuration&gt;
    &lt;/system&gt;
    &amp;build-informantLibs;
    &amp;build-informantEJB;
&lt;/cruisecontrol&gt;
</pre>
</li>
<li>O meu objetivo inicial com a utilização do CC, era fazer o <em>build</em> <em> </em>automático das aplicações no nosso ambiente de testes sempre que alterações fosse efetivadas (commit), garantindo que nosso repositório esteja sempre compilando, e que a qualquer momento, tivéssemos uma versão disponível para liberação. Para isso, utilizamos o elemento <em>&lt;modificationset&gt;</em>, que determina como o CC procura por alterações no repositório e quando vai executar o <em>build</em> do projeto.
<pre class="brush: xml;">
&lt;!-- informantEJB-config.xml --&gt;
&lt;plugin name=&quot;svn&quot; classname=&quot;net.sourceforge.cruisecontrol.sourcecontrols.SVN&quot;/&gt;;
&lt;plugin name=&quot;svnbootstrapper&quot; classname=&quot;net.sourceforge.cruisecontrol.bootstrappers.SVNBootstrapper&quot;/&gt;
    &lt;modificationset quietperiod=&quot;10&quot;&gt;
        &lt;svn localWorkingCopy=&quot;checkout/agil/${project.name}&quot;
             repositoryLocation=&quot;${svn.repository}/${svn.trunk}/InformantEJB&quot;
             username=&quot;${svn.user}&quot;
             password=&quot;${svn.passwd}&quot;&gt;
        &lt;/svn&gt;
    &lt;/modificationset&gt;
</pre>
<p>Assim monitoramos alterações do projeto no <em><a href="http://subversion.apache.org/packages.html" target="_blank">SVN</a></em> e quando o CC deverá fazer o build do projeto. Veja que é preciso indicar o respositório local do projeto (<em>localWorkingCopy</em>), para onde os fontes do projetos serão copiados e compilados no momento do build. Por isso é necessário criar um diretório de checkout local para os projetos no seu diretório de trabalho (ex.: <em>/work/cruise/checkout</em>)<br />
<em>Para tudo dar certo, ainda iremos precisar incluir os plugins do svn, conforme acima. Também será necessária instalar e garantir que o <a href="http://subversion.apache.org/packages.html" target="_blank">SVN</a> esteja no seu Path. </em></p>
<p><span> </span></li>
<li>Então utlizamos o elemento <em>&lt;schedule&gt;</em> com <em>interval=&#8221;300&#8243;</em>, para fazer com que o CC verifique o respositório do <em>SVN</em> a cada 5 minutos por novas modificações.  Além disso utilizamos o atributo <em>time=&#8221;2300&#8243;</em>, forçando com que um build seja executado diariamente as 23:00 horas. Nestes casos, o CC irá executar o script de build do projeto:  <em>build-file=&#8221;checkout\agil\build-${project.name.xml}&#8221;</em>
<pre class="brush: xml;">
&lt;!-- informantEJB-config.xml --&gt;
&lt;schedule  interval=&quot;500&quot; showProgress=&quot;true&quot;&gt;
     &lt;ant  antscript=&quot;${ant.home}\bin\ant.bat&quot;
           buildfile=&quot;checkout\agil\build-${project.name}.xml&quot;
           target=&quot;build-informantEJB&quot;
           uselogger=&quot;true&quot;
           usedebug=&quot;true&quot;
           time=&quot;2300&quot;/&gt;
&lt;/schedule&gt;
</pre>
<p><em> </em><em>Será necessário ter o <a href="http://ant.apache.org/" target="_blank">ant</a> instalado. O próprio CC  já vem com a versão 1.7.0 do ant, disponível no diretório de instalação do CC (C:/java/cruisecontrol-bin-2.8.3/apache-ant-1.7.0). </em></p>
<p><span> </span></li>
<li>Precisamos agora definir o diretório de logs do projeto. Crie um diretório de logs no seu diretório de trabalho (ex.: <em>C:/java/work/cruise/logs</em>). Isso é importante, porque o CC controla todo o histórico de builds e status (<em>buildstatus</em>) dos projetos em execução, através deste diretório de logs. Dentro do diretório de logs serão criados outros vários subdiretórios, um para cada projeto.<br />
E acrescente a configuração de log ao projeto:
<pre class="brush: xml;">
&lt;!-- informantEJB-config.xml --&gt;
&lt;log dir=&quot;logs/${project.name}&quot;/&gt;
</pre>
</li>
<li>Após cada build do projeto, geralmente um artefato é gerado. Um arquivo war, ear ou zip por exemplo. Neste caso, um arquivo .jar. Por isso é preciso definir uma diretório onde todos esses artefatos serão armazenados após um build realizado com sucesso. Crie um diretório para os artefatos gerados no seu diretório de trabalho (ex.: <em>C:/java/work/cruise/artifacts</em>).  Dentro do diretório de artefatos serão criados outros vários subdiretórios, um para cada projeto.<br />
Para dizer ao CC, onde e quais artefatos serão publicados, utilizamos o elemento &lt;artifactpublisher&gt;:
<pre class="brush: xml;">
&lt;!-- informantEJB-config.xml --&gt;
&lt;publishers&gt;
    &lt;artifactspublisher dir=&quot;checkout/agil/${project.name}/output&quot; dest=&quot;artifacts/${project.name}&quot;/&gt;
&lt;/publishers&gt;
</pre>
</li>
<li>Com o arquivo de configuração do projeto concluído (<em>projects/informantEJB-config.xml</em>), precisamos apenas do script de build do projeto, que será chamado pelo CC. No meu caso, ficou mais ou menos assim:
<pre class="brush: xml;">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;
&lt;project basedir=&quot;.&quot; default=&quot;build-informantEJB&quot; name=&quot;informantEJB&quot;&gt;
    &lt;echo message=&quot;Project:informantEJB: Executando...&quot;/&gt;

    &lt;property file=&quot;build.properties&quot;/&gt;
    &lt;property name=&quot;svnant.latest.url&quot; value=&quot;${agil.svn.repository}/${agil.svn.trunk}/informantEJB&quot;/&gt;
    &lt;property name=&quot;local.repository&quot; value=&quot;informantEJB&quot;/&gt;

    &lt;path id=&quot;informant.libs&quot;&gt;
        &lt;fileset dir=&quot;libs/jars&quot;&gt;
  	   &lt;include name=&quot;**/*.jar&quot;/&gt;
	&lt;/fileset&gt;
    &lt;/path&gt;

    &lt;path id=&quot;jboss-runtime.libs&quot;&gt;
	&lt;fileset dir=&quot;../../dependencies/jboss-runtime/client&quot;&gt;
    	    &lt;include name=&quot;**/*.jar&quot;/&gt;
	&lt;/fileset&gt;
	&lt;fileset dir=&quot;../../dependencies/jboss-runtime/lib&quot;&gt;
 	    &lt;include name=&quot;**/*.jar&quot;/&gt;
	&lt;/fileset&gt;
    &lt;/path&gt;

    &lt;path id=&quot;ejb.libs&quot;&gt;
        &lt;path refid=&quot;informant.libs&quot;/&gt;
        &lt;path refid=&quot;jboss-runtime.libs&quot;/&gt;
    &lt;/path&gt;

    &lt;taskdef  resource=&quot;svntask.properties&quot;/&gt;
    &lt;target name=&quot;checkout&quot;&gt;
	&lt;echo message=&quot;${ant.project.name}: Fazendo checkout do respositorio ${svnant.latest.url}...&quot;/&gt;
	&lt;svn username=&quot;${agil.svn.user}&quot; password=&quot;${agil.svn.passwd}&quot;&gt;
  	    &lt;checkout url=&quot;${svnant.latest.url}&quot; revision=&quot;HEAD&quot; destPath=&quot;${local.repository}&quot; /&gt;
	&lt;/svn&gt;
    &lt;/target&gt;

    &lt;target name=&quot;mkdir&quot;&gt;
        &lt;mkdir dir=&quot;informantEJB/build/classes&quot;/&gt;
		&lt;mkdir dir=&quot;informantEJB/output&quot;/&gt;
        &lt;copy includeemptydirs=&quot;false&quot; todir=&quot;informantEJB/build/classes&quot;&gt;
            &lt;fileset dir=&quot;informantEJB/ejbModule&quot;&gt;
                &lt;exclude name=&quot;**/*.launch&quot;/&gt;
                &lt;exclude name=&quot;**/*.java&quot;/&gt;
            &lt;/fileset&gt;
        &lt;/copy&gt;
    &lt;/target&gt;

    &lt;target depends=&quot;checkout,mkdir&quot; name=&quot;compile&quot;&gt;
        &lt;echo message=&quot;${ant.project.name}: ${ant.file}&quot;/&gt;
        &lt;javac debug=&quot;true&quot;
	       debuglevel=&quot;${debug.level}&quot;
	       destdir=&quot;informantEJB/build/classes&quot;
	       source=&quot;${compile.source}&quot;
	       target=&quot;${compile.target}&quot;
	       classpathref=&quot;ejb.libs&quot;&gt;
            &lt;src path=&quot;informantEJB/ejbModule&quot;/&gt;
        &lt;/javac&gt;
    &lt;/target&gt;

    &lt;target depends=&quot;compile&quot; name=&quot;build-informantEJB&quot;&gt;
	&lt;echo message=&quot;${ant.project.name}: Gerando informantEJB.jar...&quot;/&gt;
	&lt;jar 	destfile=&quot;informantEJB/output/informantEJB.jar&quot;
		basedir=&quot;informantEJB/build/classes&quot;
		includes=&quot;**/*.class,**/*.xml&quot;&gt;
		&lt;manifest&gt;
      		    &lt;attribute name=&quot;Created-By&quot; value=&quot;Agil ERP&quot;/&gt;
		    &lt;attribute name=&quot;Manifest-Version&quot; value=&quot;1.0&quot;/&gt;
		    &lt;attribute name=&quot;Implementation-Vendor&quot; value=&quot;Informant&quot;/&gt;
		    &lt;attribute name=&quot;Implementation-Title&quot; value=&quot;Informant&quot;/&gt;
		    &lt;attribute name=&quot;Implementation-Version&quot; value=&quot;1.0&quot;/&gt;
		&lt;/manifest&gt;
	&lt;/jar&gt;
    &lt;/target&gt;
&lt;/project&gt;
</pre>
<p>O plano de build do projeto agora está OK: configuramos o <em>informantEJB-config.xml</em> para que execute o script de build (<em>build-informantEJB.xml</em>) quando alguma alteração for realizada no repositório. Além disso o CC irá executar também um build diário, as 23:00 horas.</li>
<li>Tudo certo agora?! NÃO.<br />
Mesmo que você faça um build manual do projeto através do CC ( <a href="http://localhost:8080/dashboard/tab/dashboard" target="_blank">http://localhost:8080/dashboard/tab/dashboard</a>), o status do projeto continuará inativo. Isso acontece porque criamos um diretório de trabalho em <em>C:/java/work/cruise</em>, onde serão armazenados os logs e artefatos do projeto. Mas o CC ainda não sabe disso.Crie um arquivo <strong>override.properties</strong> em <em>C:/java/cruisecontrol-bin-2.8.3/reporting/jsp</em> dessa forma:
<pre class="brush: xml;">
# This should be the full path to your CruiseControl log directory.
# If you are in multi-project mode, there will be multiple sub-directories
# inside this log directory, one for each project.
user.log.dir=C:/java/work/cruise/logs

# This should be the path to your current build status file, # expressed relative to the project's log directory.
user.build.status.file=C:/java/work/cruise/logs/buildstatus.txt

# This should be the absolute path to the directory where # additional build artifacts are stored.
cruise.build.artifacts.dir=C:/java/work/cruise/artifacts
</pre>
</li>
</ol>
<p>Essa é uma configuração bem básica. Mas já dá pra ter uma idéia do que pode ser feito. O CC foi implementado para ser extensível e flexível o suficiente para que você possa customizar quase tudo. Além disso, existem <a href="http://cruisecontrol.sourceforge.net/main/configxml.html" target="_blank">vários plugins</a> e <a href="http://confluence.public.thoughtworks.org/display/CC/3rdPartyCCStuff" target="_blank">outros add-ons</a> que podem ser utilizados pafa aumentar ainda mais as possibilidades de uso do framework.</p>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 1596px; width: 1px; height: 1px;">&lt;!DOCTYPE cruisecontrol [<br />
&lt;!ENTITY build-informant SYSTEM "projects/informant-config.xml"&gt;<br />
&lt;!ENTITY build-informantLibs SYSTEM "projects/informantLibs-config.xml"&gt;<br />
&lt;!ENTITY build-informantUtils SYSTEM "projects/informantUtils-config.xml"&gt;<br />
&lt;!ENTITY build-displayTags SYSTEM "projects/struts2-displatTag-config.xml"&gt;<br />
&lt;!ENTITY build-informantWeb SYSTEM "projects/informantWeb-config.xml"&gt;<br />
&lt;!ENTITY build-informantEJB SYSTEM "projects/informantEJB-config.xml"&gt;<br />
&lt;!ENTITY build-informantEAR SYSTEM "projects/informantEAR-config.xml"&gt;<br />
&lt;!ENTITY deploy-informantEAR SYSTEM "projects/informantEAR-deploy-config.xml"&gt;<br />
]&gt;<br />
&lt;cruisecontrol&gt;&lt;property file=&#8221;config.properties&#8221;/&gt;<br />
&lt;plugin name=&#8221;svn&#8221; classname=&#8221;net.sourceforge.cruisecontrol.sourcecontrols.SVN&#8221;/&gt;<br />
&lt;plugin name=&#8221;svnbootstrapper&#8221; classname=&#8221;net.sourceforge.cruisecontrol.bootstrappers.SVNBootstrapper&#8221;/&gt;<br />
&lt;system&gt;<br />
&lt;configuration&gt;<br />
&lt;threads count=&#8221;2&#8243;/&gt;<br />
&lt;/configuration&gt;<br />
&lt;/system&gt;<br />
&amp;build-informantLibs;<br />
&amp;build-informantUtils;<br />
&amp;build-displayTags;<br />
&amp;build-informantWeb;<br />
&amp;build-informantEJB;<br />
&amp;build-informantEAR;<br />
&amp;build-informant;<br />
&amp;deploy-informantEAR;<br />
&lt;/cruisecontrol&gt;</div>
]]></content:encoded>
			<wfw:commentRss>http://coding4food.com/2010/02/20/cruisecontrol-com-svn-parte-01/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>IT sucateada ?!</title>
		<link>http://coding4food.com/2009/07/20/it-sucateada/</link>
		<comments>http://coding4food.com/2009/07/20/it-sucateada/#comments</comments>
		<pubDate>Mon, 20 Jul 2009 03:08:54 +0000</pubDate>
		<dc:creator>Eduardo Kruger</dc:creator>
				<category><![CDATA[diversos]]></category>

		<guid isPermaLink="false">http://coding4food.com/?p=289</guid>
		<description><![CDATA[Tá bom, tá bom. Estava tudo muito parádo por aqui. Parado não, a melhor definição é coma. Isso, o coding4food estava em coma. Mas era um coma induzido. Estive um tempo envolvido com alguns projetos muito importantes (jogando video-game, vendo TV, lendo alguns livros, engordando, &#8230; ).
Mas hoje o coding4food saiu do coma graças a [...]]]></description>
			<content:encoded><![CDATA[<p>Tá bom, tá bom. Estava tudo muito parádo por aqui. Parado não, a melhor definição é coma. Isso, o <a href="http://coding4food.com" target="_blank">coding4food</a> estava em coma. Mas era um coma induzido. Estive um tempo envolvido com alguns projetos muito importantes (jogando video-game, vendo TV, lendo alguns livros, engordando, &#8230; ).</p>
<p>Mas hoje o <a href="http://conding4food.com" target="_blank">coding4food</a> saiu do coma graças a um e-mail que perambulou entre os departamentos da empresa onde trabalho. O texto falava sobre a regulamentação da área de TI. E mais uma vez, o famigerado <a href="http://www.camara.gov.br/sileg/Prop_Detalhe.asp?id=325794" target="_blank">projeto de lei <span style="font-size: x-small; font-family: verdana,arial,helvetica,sans-serif;">7109/06</span></a> era alvo de novas discussões. O projeto já é antigo, porém vem a tona de tempos em tempos, como um <em>span-highlander</em> que insiste em renascer entre fóruns e afins.</p>
<p>O Sr. Bonifácio Andrada já foi responsável por <a href="http://www.guj.com.br/posts/list/41349.java" target="_blank">longas threads</a> no <a href="http://www.guj.com.br" target="_blank">guj</a> e as opniões sobre o assunto são as mais diversas: a <a href="http://www.sbc.org.br/index.php?language=1&amp;subject=376">SBC sempre foi contra</a>, porém o <a href="http://www.senado.gov.br/sf/atividade/Comissoes/consComPerm.asp?com=1363" target="_blank">CCT aprovou</a> o projeto em março de 2008. Tem <a href="http://www.kumpera.net/blog/index.php/2008/04/16/vamos-todos-impedir-a-regulamentacao-da-profissao-de-analista-de-sistema/" target="_blank">gente</a> que não pode nem ouvir no <a href="http://blog.fragmental.com.br/2008/03/21/ainda-bem-que-estou-aqui/" target="_blank">assunto</a>, outros acham que um sindicato pode significar um aumento de salário rápido e fácil, quase que milagroso, como sugerido pelo e-mail abaixo:</p>
<blockquote>
<p class="MsoNormal"><em><span class="apple-style-span"><span style="font-size: x-small; font-family: Arial; color: black;"><span style="font-size: 10pt; font-family: Arial; color: black;">Pessoal, até que enfim, ao que tudo parece agora sai a lei que regulamenta nossa profissão. Isso significa um sindicato próprio (não esses fantasmas que cobram de nós sem nem sabermos ao menos quem são), piso salarial, garantias e deveres definidos, etc.</span></span></span></em></p>
<p class="MsoNormal" style="text-align: left;"><em><span style="font-size: x-small; font-family: Arial; color: black;"><span style="font-size: 12pt;"> </span><span style="font-size: 10pt; font-family: Arial; color: black;">O link para a notificação de entrada na pauta de Senado é, acompanhem o andamento do projeto através do cadastro no site:<br />
<a rel="nofollow" href="http://www.senado.gov.br/sf/atividade/Materia/Detalhes.asp?p_cod_mate=82918" target="_blank"><span style="color: #3333cc;"><span style="color: #3333cc;">http://www.senado.gov.br/sf/ atividade/Materia/Detalhes. asp?p_cod_mate=82918</span></span></a></span></span></em></p>
</blockquote>
<p class="MsoNormal">
<p>Por favor, perdi alguma coisa ou tem gente achando que vai ganhar um aumento de salário com a simples criação de um conselho ou sindicato ? Provavelmente o Sr. Bonifácio Andrada conhece do mercado de TI o mesmo que o Sr. Expedíto Júnior: ABSOLUTAMENTE NÁDA.</p>
<p>Sério. Por vezes procurei argumentos ou justificativas que me fizessem acreditar que este projeto de lei não fosse mais uma &#8220;politicagem&#8221; sem pé nem cabeça. Não acredito mais em <a href="http://coding4food.com/2008/10/28/analistas-de-sistemas-quem-ainda-acredita-neles/" target="_blank">analistas de sistemas</a>, porque iria acreditar <a href="http://www.senado.gov.br/sf/ atividade/Materia/Detalhes. asp?p_cod_mate=82918" target="_blank">nisso </a>?! Então vamos lá, como nem a <a href="http://www.acm.org/" target="_blank">ACM</a>, nem a <a href="http://www.sbc.org.br/" target="_blank">SBC</a> encontrou motivos para impor alguma regulamentação em nossa área, vamos deixar que os profissionais lá de Brasília o façam.</p>
<p>O que posso dizer sobre isso é apenas repetir o <a href="http://www.akitaonrails.com/2008/4/19/off-topic-vamos-todos-impedir-a-regulamenta-o-da-profiss-o-de-analista-de-sistema" target="_blank">Akita</a>:</p>
<blockquote><p><em>Será que um músico diplomado é melhor que um Villa Lobos? Será que um pintor diplomado é melhor do que uma Tarsila do Amaral? Será que um escritor formado será melhor do que Machado de Assis? Será que o Washington Olivetto é um grande publicitário porque é formado? Ah, não, ele nunca concluiu o curso de publicidade da <span class="caps">FAAP</span>.</em></p></blockquote>
<blockquote><p><strong><em>Grandes programadores não são formados. Grandes programadores <strong>se</strong> formam.</em></strong></p></blockquote>
<p>Não entendo porque algumas pessoas tem uma necessidade de proteção de algum órgão, sindicato ou conselho para se sentirem mais seguras. Pra mim, a <strong>competência é o que prevalece e não o diploma</strong>. Não sou contra o curso superior. Ir a faculdade foi umas das melhores escolhas que já fiz na minha vida. Mas conheço ótimos profissionais hoje, que não foram alunos tão brilhantes assim. Isso porque os bons profissionais não param apenas com o canudo. Estão sempre estudando, se aperfeiçoando, lendo, indo um pouco mais além. Para estes profissionais, o mercado sempre terá espaço. Tenho a impressão de quem é a favor da regulamentação, precisa de uma &#8220;garantia legal&#8221; para manter o seu emprego. Se este for o caso, acho que o funcionarismo público, seria o mais indicado.</p>
<p>Como daqui pra frente apenas os <a href="http://coding4food.com/2008/10/28/analistas-de-sistemas-quem-ainda-acredita-neles/" target="_self">analistas de sistema</a><a href="http://coding4food.com/2008/10/28/analistas-de-sistemas-quem-ainda-acredita-neles/" target="_blank">s</a> poderão desenvolver software, vamos excluir todos os engenheiros, matemáticos, físicos, administradores, filósofos que estão fazendo programas de computador por esse país a fóra. Afinal, eles não tem competência para fazer isso.<br />
Sendo assim, alguém que é a favor dessa lei poderia me dizer se também está disposto a apenas comprar software desenvolvido por analistas de sistemas &#8220;licenciados&#8221; ? (&#8230; porque aposto que seu computador está infestado de &#8220;programinhas&#8221; desenvolvidos por adolescentes.)<br />
Aliás, excluir engenheiros da área de TI seria no mínimo, cômico. As ciências da computação por anos vem tentando (sem muito sucesso, diga-se de passagem) aplicar técnicas de engenharia no desenvolvimento de software. Na verdade, a maioria das metodologias utilizadas hoje estão com um pé na engenheria. Mas isso não importa, vamos mandar todo esse pessoal para faculdade, porque eles não conhecem náda de computação.</p>
<p>Como iríamos tratar os projetos open-source? Com certeza não poderíamos mais utilizar muitos desses softwares, porque esses projetos são desenvolvidos por profissionais de todo o mundo, de todas as idades, todas as áreas e formações. Não, não poderíamos utilizar um software desse. Quem iria nos garantir que foi desenvolvido apenas por analistas de sistemas formados ? Com certeza, não poderíamos correr esse risco.</p>
<p><em>&#8220;Mas tem muita gente sem formação, roubando a vaga de profissional com curso superior!!!&#8221;</em></p>
<p>Essa é a maior das falácias. Seria hilário se não fosse triste. Se o profissional não for competente, não são seus diplomas ou certificados que irão lhe salvar. A <strong>competencia é o que prevalece</strong>. Ninguém rouba vága de ninguém. Apenas alguns profissioanis são mais competentes no que fazem, do que os outros, simples assim.</p>
<p>Alguém já conheceu algum engenheiro que se sentisse mais seguro pelo <a href="www.creasp.org.br" target="_blank">CREA</a> ?!<br />
Alguém já viu a <a href="www.oab.org.br" target="_blank">OA</a><a href="www.oab.org.br" target="_blank">B</a>, <a href="www.creasp.org.br" target="_blank">CREA</a>, <a href="www.crasp.com.br" target="_blank">CRA</a> ou algum outro conselho convocar uma greve ? Fico me perguntando por que não ?<br />
O <a href="www.mec.gov.br" target="_blank">MEC</a> já existe a muito tempo&#8230; mas impediu a abertura indiscriminada de <em>pseudo-faculdades</em> e o comércio de diplomas pela internet ? Porque que será ?</p>
<p><img src="/wp-content/themes/blueprint/images/sucata_it.jpg" alt="IT sucateada" /></p>
<p>A reserva de mercado, como proposto por esse projeto, é andar para trás, e a <a href="http://www.cse.unsw.edu.au/~se4921/PDF/CACM/p91-white.pdf" target="_blank">ACM já vem falando nisso</a> a muito tempo:</p>
<blockquote><p><em>ACM is opposed to the licensing of software engineers at this time<br />
because ACM believes it is premature and would not be effective at<br />
addressing the problems of software quality and reliability.<br />
ACM is, however, committed to solving the software quality problem<br />
by promoting research and development, by developing a core body of<br />
knowledge for software engineering, and by identifying standards of<br />
practice.</em></p></blockquote>
<blockquote>
<p style="text-align: left;"><em><strong>Is ACM against licensing software engineers? </strong><br />
Yes. For legal reasons, the only way to be a licensed software<br />
engineer is to become a PE. As described in the Safety-Critical<br />
report (see www.acm.org/serving/ se_policy/safety_critical.pdf), several<br />
topics on which all prospective PEs are tested, such as fluid mechanics<br />
and thermodynamics, are beyond the scope of software engineering.<br />
Mastering these topics could detract from the study of more relevant<br />
areas.<br />
In addition, a software engineering license would be interpreted as an<br />
authoritative statement that the licensed engineer is capable of producing<br />
software systems of consistent reliability, dependability, and<br />
usability. The ACM Council concluded that our state of knowledge and<br />
practice is too immature to give such assurances.</em></p>
<p><em><strong>Is ACM against software engineering being viewed as a profession?<br />
</strong>No. ACM believes it is important to foster the emergence of a true IT profession,<br />
not just software engineering. A field does not need licensing to be a<br />
profession.</em></p></blockquote>
<p style="text-align: left;">A área de TI já não sofre o suficiente com escassez de profissionais no mercado ?!<br />
A <a href="http://www.planalto.gov.br/ccivil/Decreto-Lei/Del5452.htm" target="_blank">CLT</a> já não impõe burocracia e carga tributária suficientes sobre empregadores e empregados nesse país ?!<br />
O mercado de TI no Brasil já não tem problemas o suficiente ?!<br />
Afinal, quem serão os verdadeiros beneficiados com esta regulamentação ?</p>
]]></content:encoded>
			<wfw:commentRss>http://coding4food.com/2009/07/20/it-sucateada/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Analistas de Sistemas. Quem ainda acredita neles ?</title>
		<link>http://coding4food.com/2008/10/28/analistas-de-sistemas-quem-ainda-acredita-neles/</link>
		<comments>http://coding4food.com/2008/10/28/analistas-de-sistemas-quem-ainda-acredita-neles/#comments</comments>
		<pubDate>Tue, 28 Oct 2008 15:37:26 +0000</pubDate>
		<dc:creator>Eduardo Kruger</dc:creator>
				<category><![CDATA[metodologia]]></category>
		<category><![CDATA[analistas]]></category>
		<category><![CDATA[programação]]></category>

		<guid isPermaLink="false">http://coding4food.com/?p=241</guid>
		<description><![CDATA[Alguns dias atrás, me vi numa discussão com alguns colegas, sobre funções, atividades e cargos dentro de uma empresa. Apensar desse assunto ainda ser bem confuso em TI, a maioria soube descrever suas atividades diárias como programadores. Porém, essa descrição não foi obtida tão facilmente quando nos perguntamos: Afinal de contas, o que um &#8220;Analista [...]]]></description>
			<content:encoded><![CDATA[<p>Alguns dias atrás, me vi numa discussão com alguns colegas, sobre funções, atividades e cargos dentro de uma empresa. Apensar desse assunto ainda ser bem confuso em TI, a maioria soube descrever suas atividades diárias como programadores. Porém, essa descrição não foi obtida tão facilmente quando nos perguntamos: Afinal de contas, o que um &#8220;Analista de Sistemas&#8221; faz ?</p>
<p>Alguns me falaram que o analista de sistemas é um profissional com mais experiência, com perfil investigativo, que deve fazer a análise dos requisitos e modelar uma solução. Outros disseram que analista de sistema não devem &#8220;perder&#8221;  tempo com detalhes sobre linguagem ou tecnologia, porque &#8220;análise&#8221; de sistemas deve ser feita em alto nível, a.k.a UML. Escutei também alguns comentários clássicos: analista de sistemas necessariamente não precisa saber programar, precisa apenas conhecer UML e algum editor de texto. <em>( &#8220;analistas de sitemas não precisam saber programar&#8230;&#8221;. Com certeza essa merece estar nas próximas <a href="http://coding4food.com/2008/09/28/as-falacias-da-programacao/" target="_blank">falácias da programação</a>, parte ll &#8230; hehe )</em></p>
<p>Sobre esse assunto, tenho que dizer que concordo com <a href="http://www.yepthatsme.com/" target="_blank">Barry Hawkins</a>: a <a href="http://coding4food.com/2008/08/03/fabricas-de-software/" target="_blank">super divisão de trabalho</a><a href="http://coding4food.com/2008/08/03/fabricas-de-software/" target="_blank"> no desenvolvimento de software, </a>foi umas das piores experiências da indústria de software nos últimos anos.</p>
<blockquote><p><strong>One of the most widespread tragedies in the practice of software development has been the tendency of corporate culture to over-compartmentalize the activities of software development. </strong>In the upper echelon of the artificial hierarchy of task separation sits the software architect. Sequestered away from the disturbing din of real life within the company, these persons are liberated from the mundane, in order that they may orchestrate plans that set in motion the work of many, unfettered by such things as domain knowledge and implementation constraints.<br />
Know this; the only people who belong in white towers are the captured princesses of fairy tales, and even then it was not of their volition. <strong>Partitioning the activity of design away from implementation destroys the call-and-response cycle between design and implementation.</strong> The relevance of your work is directly related to how engaged you are in the domain.<br />
- <a href="http://www.yepthatsme.com/" target="_blank">Barry Hawkins</a>.</p></blockquote>
<p>Estou convencido, que a separação das atividades de design e programação deveria ser qualificada como um anti-pattern do desenvolvimento de software. O <a href="http://en.wikipedia.org/wiki/Waterfall_model" target="_blank">waterfall</a> já vem mostrando por anos, que essa abordagem é um erro.</p>
<p>Porque é necessário criar um cargo especial para atividades, que deveriam ser de responsabilidade do programador ?! Análise, design, programação e arquitetura são atividades e não cargos. Nós, como programadores, precisamos vestir &#8220;chapéus&#8221; diferentes dentro de um projeto.</p>
<p>Quando questionamos requisitos, buscamos informações de nossos usuários, organizamos e priorizamos tarefas, estamos vestindo nosso chapéu de analista e gerente de projetos. Quando estamos codificando, nos preocupando com manutenabilidade, performance e com a correta aplicação de patterns, estamos vestindo nosso chapéu de programador e projetista. Ao escolhermos por um framework, por uma API, estamos com certeza tomando decisões de arquitetura.<br />
Não quero dizer aqui, que todo programador dever ser um  <a href="http://en.wikipedia.org/wiki/MacGyver" target="_blank">Macgyver</a> em TI. Mas tenho certeza, que se você é programador, é bem provável que você precise colocar à prova diariamente suas habilidades como programador, analista, arquiteto ou gerente.</p>
<p>A maioria dos programadores <a href="http://blog.fragmental.com.br/2008/01/15/quando-eu-crescer-quero-ser-analista-de-sistemas/" target="_blank">passam anos querendo se tornar analista de sistemas</a>, e quando conseguem, descobrem que como programadores, já desempenhavam atividades de análise a muito tempo. Além do mais, achar que um monte de diagramas UML podem modelar um sistema inteiro sem programar uma linha de código, não é algo muito inteligente. Analistas, arquitetos, projetistas, seja lá como for o nome que deram para ele, mas esse cara precisa saber programar - <em> <a href="http://97-things.near-time.net/wiki/show/if-you-design-it-you-should-be-able-to-code-it" target="_blank">If you design it, you should be able to code it </a>- <a href="http://comitservices.com/wp/" target="_blank">Mike Brown</a>:</em></p>
<blockquote><p>When designing the architecture for your project, you need to have a feel for what amount of effort is necessary to implement the various elements of your design. <strong>The easiest way to have the knowledge of the effort that a specific design element will take is to have developed it before.</strong></p>
<p>Don’t use a pattern in your design that you haven’t personally implemented before. Don’t rely on a framework that you haven’t coded against before. Don’t use a server that you haven’t configured before. If your architecture depends on design elements that you haven’t personally used, there are a number of negative side effects. <a href="http://comitservices.com/wp/" target="_blank">Mike Brown</a></p></blockquote>
<p>Muitas empresas de TI estão procurando &#8220;achatar&#8221; hierarquias, procurando manter profissionais mais qualificados, com conhecimentos multidisciplinares e que possam atuar em diversos papéis diferentes. Que possam programar, tomar decisões de arquitetura ou conversar com usuários se for necessário. Por mais que muita gente ainda pense o contrário: <strong>Profissionais competentes e equipes motivadas são fundamentais em qualquer empresa.</strong></p>
<p><strong></strong>E mesmo que os &#8220;Analistas de Sistemas&#8221; ainda existam para enfeitar alguns crachás corporativos ou anúncios de RH, eu já deixei de acreditar neles já faz algum tempo &#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://coding4food.com/2008/10/28/analistas-de-sistemas-quem-ainda-acredita-neles/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
