<?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>RedRails &#187; Artigos</title>
	<atom:link href="http://www.redrails.com.br/topicos/artigos/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.redrails.com.br</link>
	<description></description>
	<lastBuildDate>Fri, 03 Feb 2012 22:46:37 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
<image>
<link>http://www.redrails.com.br</link>
<url>http://www.redrails.com.br/wp-content/mbp-favicon/favicon.ico</url>
<title>RedRails</title>
</image>
		<item>
		<title>Android: Seja um Lider</title>
		<link>http://www.redrails.com.br/2012/01/android-seja-um-lider/</link>
		<comments>http://www.redrails.com.br/2012/01/android-seja-um-lider/#comments</comments>
		<pubDate>Sat, 14 Jan 2012 22:00:32 +0000</pubDate>
		<dc:creator>Luiz Carvalho</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Artigos]]></category>

		<guid isPermaLink="false">http://www.redrails.com.br/?p=1493</guid>
		<description><![CDATA[Android Market começa o ano de 2012 ultrapassando o numero de aplicações no Android Market emm relação ao App Store da Apple! Parabéns Android que continue sempre assim. Fonte: Distimo]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.redrails.com.br/wp-content/uploads/2012/01/seja_um_lider.png"><img class="aligncenter size-full wp-image-1494" title="Seja um LIder (be a leader)" src="http://www.redrails.com.br/wp-content/uploads/2012/01/seja_um_lider.png" alt="" width="554" height="388" /></a>Android Market começa o ano de 2012 ultrapassando o numero de aplicações no Android Market emm relação ao App Store da Apple!</p>
<p>Parabéns Android que continue sempre assim.</p>
<p>Fonte: <a href="http://www.distimo.com/blog/2012_01_google-android-market-tops-400000-applications/">Distimo</a></p>
<!-- boo-widget start -->
          <script type="text/javascript">
            bb_keywords = "Android";
            bb_bid  = "1611534";
            bb_lang = "pt-BR";
            bb_name = "custom";bb_limit = "7";bb_format = "bbc";
          </script>
          <script type="text/javascript" src="http://widgets.boo-box.com/javascripts/embed.js"></script>
          <!-- boo-widget end --><div class="plus-one-wrap"><g:plusone href="http://www.redrails.com.br/2012/01/android-seja-um-lider/"></g:plusone></div>]]></content:encoded>
			<wfw:commentRss>http://www.redrails.com.br/2012/01/android-seja-um-lider/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DESENVOLVIMENTO EM ANDROID: UMA VISÃO VOLTADA PARA APLICAÇÕES DE CONTROLE E MONITORAMENTO DE REDE &#8211; CONNEPI 2011</title>
		<link>http://www.redrails.com.br/2011/12/desenvolvimento-em-android-uma-visao-voltada-para-aplicacoes-de-controle-e-monitoramento-de-rede-connepi-2011/</link>
		<comments>http://www.redrails.com.br/2011/12/desenvolvimento-em-android-uma-visao-voltada-para-aplicacoes-de-controle-e-monitoramento-de-rede-connepi-2011/#comments</comments>
		<pubDate>Sun, 11 Dec 2011 20:50:39 +0000</pubDate>
		<dc:creator>Luiz Carvalho</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Artigos]]></category>
		<category><![CDATA[Academico]]></category>
		<category><![CDATA[Artigo]]></category>
		<category><![CDATA[Connepi]]></category>
		<category><![CDATA[TCC]]></category>

		<guid isPermaLink="false">http://www.redrails.com.br/?p=1464</guid>
		<description><![CDATA[Olá leitores hoje disponibilizo aqui a apresentação que farei dia 16 em Natal-RN no CONNEPI &#160; Este trabalho apresenta os aspectos gerais para o desenvolvimento de uma aplicação especifica como ferramenta de monitoramento e qualificação de rede baseada em analises de variáveis de QoS para sistema operacional Android, considerando aspectos relacionados à ferramenta e ambientes. [...]]]></description>
			<content:encoded><![CDATA[<p>Olá leitores hoje disponibilizo aqui a apresentação que farei dia 16 em Natal-RN no CONNEPI</p>
<p><a href="http://www.redrails.com.br/wp-content/uploads/2011/12/Slide1.png"><img class="aligncenter size-medium wp-image-1466" title="Apresentação Android CONNEPI" src="http://www.redrails.com.br/wp-content/uploads/2011/12/Slide1-300x225.png" alt="" width="300" height="225" /></a></p>
<p>&nbsp;</p>
<p>Este trabalho apresenta os aspectos gerais para o desenvolvimento de uma aplicação especifica como ferramenta de monitoramento e qualificação de rede baseada em analises de variáveis de QoS para sistema operacional <em>Android</em>, considerando aspectos relacionados à ferramenta e ambientes. O Artigo expõe ainda, algumas contribuições recentes, encontradas na literatura, que apresentam casos de sucesso no desenvolvimento de aplicações para essa plataforma e dados expressivos que justificam sua utilização. Por fim apresentamos a ferramenta concluída e resultados obtidos com seu desenvolvimento e melhorias a serem realizadas.</p>
<p>&nbsp;</p>
<p><strong><a class="downloadlink" href="http://www.redrails.com.br/wp-content/plugins/download-monitor/download.php?id=20" title=" download feito 28  vezes" >Desenvolvimento Android - Apresentação CONNEPI 2011 (28)</a></strong></p>
<p>Para baixar o aplicativo vá no Market: <a href="https://market.android.com/details?id=br.com.redrails.wa">https://market.android.com/details?id=br.com.redrails.wa</a></p>
<p>ou use o QRCODE <a href="http://www.redrails.com.br/wp-content/uploads/2011/12/qrcode_market.png"><img class="aligncenter size-full wp-image-1477" title="qrcode_market" src="http://www.redrails.com.br/wp-content/uploads/2011/12/qrcode_market.png" alt="" width="234" height="234" /></a></p>
<p>Qualquer dúvida me contacte</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<!-- boo-widget start -->
          <script type="text/javascript">
            bb_keywords = "Academico";
            bb_bid  = "1611534";
            bb_lang = "pt-BR";
            bb_name = "custom";bb_limit = "7";bb_format = "bbc";
          </script>
          <script type="text/javascript" src="http://widgets.boo-box.com/javascripts/embed.js"></script>
          <!-- boo-widget end --><div class="plus-one-wrap"><g:plusone href="http://www.redrails.com.br/2011/12/desenvolvimento-em-android-uma-visao-voltada-para-aplicacoes-de-controle-e-monitoramento-de-rede-connepi-2011/"></g:plusone></div>]]></content:encoded>
			<wfw:commentRss>http://www.redrails.com.br/2011/12/desenvolvimento-em-android-uma-visao-voltada-para-aplicacoes-de-controle-e-monitoramento-de-rede-connepi-2011/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Pegar Texto de botão dinamicamente pelo toque</title>
		<link>http://www.redrails.com.br/2011/11/pegar-texto-de-botao-dinamicamente-pelo-toque/</link>
		<comments>http://www.redrails.com.br/2011/11/pegar-texto-de-botao-dinamicamente-pelo-toque/#comments</comments>
		<pubDate>Mon, 07 Nov 2011 15:11:58 +0000</pubDate>
		<dc:creator>Luiz Carvalho</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Artigos]]></category>
		<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[Projetos]]></category>

		<guid isPermaLink="false">http://www.redrails.com.br/?p=1275</guid>
		<description><![CDATA[Código simples, mostrando como criar botões dinamicamente através de um array definido por arquivos XML nos resources do projeto Android.E pegando o evento de onClick e compartilhando da maneira que quiser, facebook, orkut, dropbox via sms, email etc&#8230; Agradecimentos ao pessoal da AndroidBrasil-Dev e da StackOverFlow pela ajuda.]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.redrails.com.br/wp-content/uploads/2011/11/touch.png"><img class="aligncenter size-full wp-image-1284" title="touch" src="http://www.redrails.com.br/wp-content/uploads/2011/11/touch.png" alt="" width="500" height="320" /></a></p>
<p>Código simples, mostrando como criar botões dinamicamente através de um array definido por arquivos XML nos resources do projeto Android.E pegando o evento de onClick e compartilhando da maneira que quiser, facebook, orkut, dropbox via sms, email etc&#8230;</p>
<p><span id="more-1275"></span></p>
<pre class="brush: java; title: ; notranslate">

public class DinamicButtonsActivity extends Activity implements OnClickListener {

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.home);

        Resources res = getResources();

        String[] button_texts = res.getStringArray(R.array.button_texts);

        LinearLayout layout = (LinearLayout) findViewById(R.id.ButtonsGroup);

        LinearLayout.LayoutParams p = new LinearLayout.LayoutParams(

                LinearLayout.LayoutParams.FILL_PARENT,

                LinearLayout.LayoutParams.WRAP_CONTENT

        );

        for (int i = 1; i &lt; button_texts.length; i++) {

            Button button = new Button(this);

            button.setText(button_texts[i]);

            button.setOnClickListener(this);

            layout.addView(button, p);

        }

    }

    @Override

	public void onClick(View v) {

		String text = (String) ((Button) v).getText();

		String text = (String) ((Button) v).getText();

		Intent i = new Intent(Intent.ACTION_SEND);

		i.setType(&quot;text/plain&quot;);

		i.putExtra(Intent.EXTRA_TEXT, text);

		startActivity(Intent.createChooser(i, &quot;Compartilhe&quot;));

	}

}
</pre>
<p>Agradecimentos ao pessoal da <a href="http://groups.google.com/group/androidbrasil-dev" target="_blank">AndroidBrasil-Dev</a> e da <a href="http://stackoverflow.com" target="_blank">StackOverFlow</a> pela ajuda.</p>
<!-- boo-widget start -->
          <script type="text/javascript">
            bb_keywords = "Android";
            bb_bid  = "1611534";
            bb_lang = "pt-BR";
            bb_name = "custom";bb_limit = "7";bb_format = "bbc";
          </script>
          <script type="text/javascript" src="http://widgets.boo-box.com/javascripts/embed.js"></script>
          <!-- boo-widget end --><div class="plus-one-wrap"><g:plusone href="http://www.redrails.com.br/2011/11/pegar-texto-de-botao-dinamicamente-pelo-toque/"></g:plusone></div>]]></content:encoded>
			<wfw:commentRss>http://www.redrails.com.br/2011/11/pegar-texto-de-botao-dinamicamente-pelo-toque/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Samsung Galaxy Note &#8211; Review</title>
		<link>http://www.redrails.com.br/2011/11/samsung-galaxy-note-review/</link>
		<comments>http://www.redrails.com.br/2011/11/samsung-galaxy-note-review/#comments</comments>
		<pubDate>Tue, 01 Nov 2011 12:54:13 +0000</pubDate>
		<dc:creator>Luiz Carvalho</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Artigos]]></category>
		<category><![CDATA[Ads]]></category>
		<category><![CDATA[Aparelho]]></category>

		<guid isPermaLink="false">http://www.redrails.com.br/?p=1270</guid>
		<description><![CDATA[Um novo tipo de smartphone, a cheio de surpresas  e inovação. É o melhor dispositivo da categoria, consolida principais benefícios de diversosdispositivos móveis, mantendo a portabilidade smartphone. Que lhe dá poderes para realizar sempre desejou para que você, sinta-se livre. O Smartphone verdadeiramente inteligente. Rede HSPA+ up to 21Mbps 850/900/1900/2100 4G LTE EDGE/GPRS 850/900/1800/1900※ Network differs by country Processador 1.4GHz Dual Core Processor Display 5.3” WXGA (1280 x [...]]]></description>
			<content:encoded><![CDATA[<div id="gt-res-wrap">
<div id="gt-res-content">
<div dir="ltr">Um novo tipo de smartphone, a cheio de surpresas  e inovação. É o melhor dispositivo da categoria, consolida principais benefícios de diversosdispositivos móveis, mantendo a portabilidade smartphone. Que lhe dá poderes para realizar sempre desejou para que você, sinta-se livre.</div>
<div dir="ltr">O Smartphone verdadeiramente inteligente.</div>
<p><script type="text/javascript" src="http://video.unrulymedia.com/wildfire_55967210.js"></script><br />
<span id="more-1270"></span></p>
<div id="gt-res-wrap">
<div id="gt-res-content">
<strong>Rede</strong><br />
HSPA+ up to 21Mbps 850/900/1900/2100<br />
4G LTE<br />
EDGE/GPRS 850/900/1800/1900※ Network differs by country<br />
<strong>Processador</strong><br />
1.4GHz Dual Core Processor<br />
<strong>Display</strong><br />
5.3” WXGA (1280 x 800, 285 PPI) screen*<br />
HD Super AMOLED</p>
<p><strong>Platforma</strong><br />
Android™ 2.3(Gingerbread)</p>
<p><strong>Câmera</strong><br />
Main(Rear) : 8 MP with LED Flash / Front : 2 MP<br />
Action Shot, Beauty, Panorama Shot, Smile Shot</p>
<p><strong>Vídeo<br />
</strong><br />
1080p Full HD video recording &amp; playback<br />
Recording: 1080p@24~30fps/ Playback: 1080p@30fps<br />
Codec: MPEG4/ H.263/ H.264/ DivX, Xvid, WMV, VC-1<br />
<strong>Áudio</strong><br />
Codec : MP3, AAC, AMR, WMA, WAV, FLAC, OGG<br />
Music Player with SoundAlive<br />
3.5mm Ear Jack, Stereo FM Radio with RDS</p>
<p><strong>Interação</strong><br />
Multi touch<br />
Full touch<br />
+ S Pen (Advanced smart pen)</p>
<p><strong>Connectividade</strong><br />
Bluetooth® technology v 3.0 + HS<br />
USB 2.0 HOST<br />
Wi-Fi 802.11 a/b/g/n, Wi-Fi Direct</p>
<p><strong>Sensor</strong><br />
Accelerometer, Digital compass, Proximity,<br />
Barometer,Light</p>
<p><strong>Memoria</strong><br />
16GB Internal memory<br />
+ microSD (up to 32GB)</p>
<p><strong>Tamanho</strong><br />
146.85 x 82.95 x 9.65 mm, 178g</p>
<p><strong>Batteria</strong><br />
Standard battery, Li-on 2,500 mAh</p>
<p><strong>Adicionais</strong><br />
Samsung Touchwiz/ Samsung Live Panel UX<br />
S Memo/ S Planner/ S Choice (Apps para GALAXY Note)</p>
<p><strong>Samsung Apps</strong><br />
Samsung kies 2.0/ Samsung kies air<br />
Social Hub, Readers Hub, Music Hub<br />
Google™ Mobile Services : Gmail™, Google Talk™,<br />
Google Search™, YouTube™, Android™ Market,<br />
Google Maps™ with Google Places™ and Google- Latitude™<br />
A-GPS, Glonass</p>
</div>
</div>
</div>
</div>
<!-- boo-widget start -->
          <script type="text/javascript">
            bb_keywords = "Ads";
            bb_bid  = "1611534";
            bb_lang = "pt-BR";
            bb_name = "custom";bb_limit = "7";bb_format = "bbc";
          </script>
          <script type="text/javascript" src="http://widgets.boo-box.com/javascripts/embed.js"></script>
          <!-- boo-widget end --><div class="plus-one-wrap"><g:plusone href="http://www.redrails.com.br/2011/11/samsung-galaxy-note-review/"></g:plusone></div>]]></content:encoded>
			<wfw:commentRss>http://www.redrails.com.br/2011/11/samsung-galaxy-note-review/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Qual melhor Samsung Galaxy 5 (I5500) ou Motorola Spice XT300 ?</title>
		<link>http://www.redrails.com.br/2011/10/que-aparelho-devo-compar-samsung-galaxy-5-ou-motorola-spice-xt300/</link>
		<comments>http://www.redrails.com.br/2011/10/que-aparelho-devo-compar-samsung-galaxy-5-ou-motorola-spice-xt300/#comments</comments>
		<pubDate>Tue, 25 Oct 2011 11:52:38 +0000</pubDate>
		<dc:creator>Luiz Carvalho</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Artigos]]></category>
		<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Noticias]]></category>
		<category><![CDATA[Galaxy 5]]></category>
		<category><![CDATA[Motorola Spice]]></category>
		<category><![CDATA[Review]]></category>

		<guid isPermaLink="false">http://www.redrails.com.br/?p=1247</guid>
		<description><![CDATA[Tive a oportunidade de possuir o Sansung Galaxy 5 e o Motorola Spice XT300 ao mesmo tempo e poder comparar os dois em vários aspectos. Desempenho: Em velocidade considerei o Galaxy 5 bem mais rápido que o Spice, tanto para ligar quanto para realizar tarefas de sistemas, quanto para executar aplicações e ainda na resposta [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.redrails.com.br/wp-content/uploads/2011/10/GALAXY_VS_SPICE.jpg"><img class="aligncenter size-full wp-image-1248" title="GALAXY_VS_SPICE" src="http://www.redrails.com.br/wp-content/uploads/2011/10/GALAXY_VS_SPICE.jpg" alt="" width="550" height="480" /></a></p>
<p>Tive a oportunidade de possuir o Sansung Galaxy 5 e o Motorola Spice XT300 ao mesmo tempo e poder comparar os dois em vários aspectos.</p>
<p><span id="more-1247"></span></p>
<p><strong>Desempenho:</strong><br />
Em velocidade considerei o Galaxy 5 bem mais rápido que o Spice, tanto para ligar quanto para realizar tarefas de sistemas, quanto para executar aplicações e ainda na resposta ao toque.</p>
<p><strong>Qualidade de Vídeo:</strong><br />
Qualidade visual da tela do Galaxy é bem superior a do Spice,  mas a qualidade de vídeo do spice não chega a ser ruim e ainda é um pouquinho mais larga.</p>
<p><strong>Usabilidade:</strong><br />
O teclado Qwerty do motorola Spice provê uma maior usabilidade, possui botões de controle tanto físico quanto lógico, e sua tela ainda é muilti touch. Enquanto o Galaxy não possui tela muti touch nem querty, e apenas botões de controle lógicos. Ponto para o Spice <img src='http://www.redrails.com.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><strong>Sistema Operacional:</strong><br />
O Galaxy na grande maioria dos casos vem com Android 2.1, assim como o Spice, mas no Galaxy pode-se fazer upgrade para a versão 2.2.</p>
<p><strong>Câmera:</strong><br />
Mesmo o Spice possuindo uma resolução maior  (3.1mp, contra 2 mp do Galaxy) na prática a mesma foto tirada em mesmas condições de luz mostram de o Galaxy consegue uma melhor aparência em suas cores.</p>
<p><strong>Preço</strong><br />
Varia muito de acordo com a loja o Galaxy 5 é encontrado de 380 até R$ 699,00 em média, enquanto o Spice está em uma faixa de R$ 407,00 a 699,00.</p>
<p>&nbsp;</p>
<div id="attachment_1250" class="wp-caption alignright" style="width: 277px"><a href="http://www.redrails.com.br/wp-content/uploads/2011/10/spice.jpg"><img class="size-medium wp-image-1250" title="spice" src="http://www.redrails.com.br/wp-content/uploads/2011/10/spice-300x225.jpg" alt="" width="267" height="200" /></a><p class="wp-caption-text">Foto tirada do motorola Spice</p></div>
<div id="attachment_1249" class="wp-caption alignleft" style="width: 277px"><a href="http://www.redrails.com.br/wp-content/uploads/2011/10/galaxy.jpg"><img class="size-medium wp-image-1249" title="galaxy" src="http://www.redrails.com.br/wp-content/uploads/2011/10/galaxy-300x225.jpg" alt="" width="267" height="200" /></a><p class="wp-caption-text">Foto tirada do galaxy 5</p></div>
<p><strong><br />
</strong></p>
<!-- boo-widget start -->
          <script type="text/javascript">
            bb_keywords = "Motorola Spice";
            bb_bid  = "1611534";
            bb_lang = "pt-BR";
            bb_name = "custom";bb_limit = "7";bb_format = "bbc";
          </script>
          <script type="text/javascript" src="http://widgets.boo-box.com/javascripts/embed.js"></script>
          <!-- boo-widget end --><div class="plus-one-wrap"><g:plusone href="http://www.redrails.com.br/2011/10/que-aparelho-devo-compar-samsung-galaxy-5-ou-motorola-spice-xt300/"></g:plusone></div>]]></content:encoded>
			<wfw:commentRss>http://www.redrails.com.br/2011/10/que-aparelho-devo-compar-samsung-galaxy-5-ou-motorola-spice-xt300/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Criação de população inicial para resolução do problema de partição de número com Algoritmo Genético codificado em Ruby</title>
		<link>http://www.redrails.com.br/2011/05/criacao-de-populacao-inicial-para-resolucao-do-problema-de-particao-de-numero-com-algoritmo-genetico-codificado-em-ruby/</link>
		<comments>http://www.redrails.com.br/2011/05/criacao-de-populacao-inicial-para-resolucao-do-problema-de-particao-de-numero-com-algoritmo-genetico-codificado-em-ruby/#comments</comments>
		<pubDate>Fri, 13 May 2011 14:55:58 +0000</pubDate>
		<dc:creator>Luiz Carvalho</dc:creator>
				<category><![CDATA[Artigos]]></category>
		<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[AG]]></category>
		<category><![CDATA[Algoritmos Genéticos]]></category>
		<category><![CDATA[Codificação]]></category>
		<category><![CDATA[Conversão Binária]]></category>
		<category><![CDATA[GA]]></category>
		<category><![CDATA[Partição NUmérica]]></category>
		<category><![CDATA[População Inicial]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://www.redrails.com.br/?p=1016</guid>
		<description><![CDATA[﻿﻿ O problema de partição de números consiste em: dado um conjunto de N números, o objetivo é subdividi-lo em dois subconjuntos (chamados de partições) de tal forma que, a diferença entre os valores das somas dos números dessas duas partições seja a menor possível. Por exemplo, considere o seguinte conjunto com quatro números (23, [...]]]></description>
			<content:encoded><![CDATA[<p>﻿﻿<a href="http://www.redrails.com.br/wp-content/uploads/2011/05/adn.jpg"><img class="aligncenter size-full wp-image-1019" title="adn" src="http://www.redrails.com.br/wp-content/uploads/2011/05/adn.jpg" alt="" width="300" height="215" /></a></p>
<p>O problema de partição de números consiste em: dado um conjunto de N números, o objetivo é subdividi-lo em dois subconjuntos (chamados de partições) de tal forma que, a diferença entre os valores das somas dos números dessas duas partições seja a menor possível. Por exemplo, considere o seguinte conjunto com quatro números (23, 20, 56, 48). As partições (20,56) e (23,48) consistem no particionamento ótimo para este conjunto e, seu valor é 5. Apesar da simplicidade do enunciado, este é um problema de otimização combinatória que pertence à classe NP-difícil. Observe que, para um conjunto com N números têm-se 2N possíveis maneiras de subdividi-lo em duas partições.</p>
<p>&nbsp;</p>
<p>Nosso problema consiste em dado uma seqüência [10,20,30,11,25,23,32,9,7,19,17,31,48,27,5,21,35,13,38,16,14,33,5] devemos criar um vetor de sinais (- ou +) para cada numero disposto, de modo a alcançarmos o menor valor (tendendo a 0) considerando o módulo do resultado das operações realizadas.</p>
<p>&nbsp;</p>
<p>EX: para o vetor [10,20,30,11] geramos um vetor [1,1,0,0] considerei para esse exemplo que um representa + e 0 representa -, sendo assim nosso vetor seria [+,+,-,-]. O que geraria +10+20-30-11, resultando no valor 11, considerando seu módulo.</p>
<p>&nbsp;</p>
<p>Entendido esse conceito vamos ao código.</p>
<p>&nbsp;</p>
<p>Criaremos uma classe chamada Individuo com dois atributos @code e @value que recebem respectivamente o código binário (que representa os sinais) e o valor da função objetivo (ou em nosso caso o resultado da sentença) daquele individuo em questão.</p>
<p>&nbsp;</p>
<p><span id="more-1016"></span></p>
<pre class="brush: ruby; title: ; notranslate">
class Individuo
   attr_reader :code,:value
 def initialize
   @code = ((0+rand(8_388_608)).to_s(base=2)).rjust(23,&quot;0&quot;)
   @value = to_value(@code)
 end

 def to_value(binary)
   a = [10,20,30,11,25,23,32,9,7,19,17,31,48,27,5,21,35,13,38,16,14,33,5]
   sign = {&quot;0&quot;=&gt;-1,&quot;1&quot;=&gt;1}
   value = index = 0
   binary.each_char do |c|
     value = value+a[index]*sign1
     index+=1
   end
   (value&lt;0 ? value*-1:value ) #MODULO
 end

end
</pre>
<p>E pronto, agora podemos gerar quantos indivíduos quisermos sem o menor esforço. Vou dar um exemplo de criação de 100 individuos.</p>
<pre class="brush: ruby; title: ; notranslate">
  população = 100.times.collect{Individuo.new}
</pre>
<p>Não é tão difícil quanto parece. Podemos implementar uma segunda classe mais bonitinha para realizarmos nossos experimento abaixo um exemplo de implementação da classe Raca (Raça) que vai nos dar uma interface facilitadora para gerar nossa população.</p>
<pre class="brush: ruby; title: ; notranslate">
require 'individuo'
class Raca

 attr_reader :populacao,:quantidade,:populacao_ordenada
 attr_accessor :valor_total

 def initialize(quantidade)
   @quantidade = quantidade
   @populacao = criar_populacao(@quantidade)
 end

#método que realiza a criação da população Inicial
 def criar_populacao(quantidade)
   quantidade.times.collect{Individuo.new}
 end

#apenas ordena o vetor do melhor idividuo para o pior
 def selecao_natural
   @populacao.collect { |ind| [ind.value,ind.code] }.sort
 end

#sobrescrevendo o to_s para uma visão melhor da população
 def to_s
   out =  &quot;Valor&quot;.ljust(10)+&quot;     Código Genético &quot;.ljust(25)+&quot;\n\n&quot;
   @populacao.each do |individuo|
     out &lt;&lt; &quot;#{individuo.value.to_s.ljust(10)} #{individuo.code.ljust(25)}\n&quot;
   end
   out
 end
end
#rodando código
anfibios = Raca.new(12)
puts anfibios
</pre>
<p>Esse código tem como resultado algo parecido com isso :</p>
<blockquote>
<pre>Valor          Código Genético   

1          11100010001111000001100 
73         00110110100011000001100 
29         10001011010011010011100 
237        01111011111110000111110 
5          11101000000110001101100 
99         01000010101001000011011 
173        01111110011110101001101 
35         11010011100010100010110 
109        10100010101000110001111 
23         10011001001101000110111 
135        01000111111101101011010 
119        10001100011001110010000</pre>
</blockquote>
<p>O Código está disponível aqui: <a class="downloadlink" href="http://www.redrails.com.br/wp-content/plugins/download-monitor/download.php?id=6" title="Versão1 download feito 51  vezes" >Exemplo do Algoritmo Genético (51)</a></p>
<!-- boo-widget start -->
          <script type="text/javascript">
            bb_keywords = "População Inicial";
            bb_bid  = "1611534";
            bb_lang = "pt-BR";
            bb_name = "custom";bb_limit = "7";bb_format = "bbc";
          </script>
          <script type="text/javascript" src="http://widgets.boo-box.com/javascripts/embed.js"></script>
          <!-- boo-widget end --><div class="plus-one-wrap"><g:plusone href="http://www.redrails.com.br/2011/05/criacao-de-populacao-inicial-para-resolucao-do-problema-de-particao-de-numero-com-algoritmo-genetico-codificado-em-ruby/"></g:plusone></div>]]></content:encoded>
			<wfw:commentRss>http://www.redrails.com.br/2011/05/criacao-de-populacao-inicial-para-resolucao-do-problema-de-particao-de-numero-com-algoritmo-genetico-codificado-em-ruby/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google Android como um ambiente de desenvolvimento de aplicações para Sistemas de Decodificação de DTV (TV Digital) [Parte 2]</title>
		<link>http://www.redrails.com.br/2011/04/google-android-como-um-ambiente-de-desenvolvimento-de-aplicacoes-para-sistemas-de-decodificacao-de-dtv-tv-digital-parte-2/</link>
		<comments>http://www.redrails.com.br/2011/04/google-android-como-um-ambiente-de-desenvolvimento-de-aplicacoes-para-sistemas-de-decodificacao-de-dtv-tv-digital-parte-2/#comments</comments>
		<pubDate>Wed, 20 Apr 2011 19:16:42 +0000</pubDate>
		<dc:creator>Luiz Carvalho</dc:creator>
				<category><![CDATA[Artigos]]></category>
		<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Redes]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[directFB]]></category>
		<category><![CDATA[DTV]]></category>
		<category><![CDATA[Kernel]]></category>
		<category><![CDATA[Portabilidade]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Soc]]></category>

		<guid isPermaLink="false">http://www.redrails.com.br/?p=1005</guid>
		<description><![CDATA[III System Overview Consideramos nesse artigo a presença de um dispositivo real de decodificação de DTV(Plataforma de desenvolvimento Micronas IDTV) no dispositivo Android, que é responsável pela integração entre o SoC (system on chip) e os dispositivos periféricos. O SoC contém um processador dedicado para Linux de 240Mhz MIPS 24Kc, múltiplos processadores dedicados para decodificação [...]]]></description>
			<content:encoded><![CDATA[<h2><img src="http://www.redrails.com.br/wp-content/uploads/2011/04/Android_TV.png" alt="" /></h2>
<h2>III System Overview</h2>
<p>Consideramos nesse artigo a presença de um dispositivo real de decodificação de DTV(Plataforma de desenvolvimento Micronas IDTV) no dispositivo Android, que é responsável pela integração entre o  SoC (system on chip) e os dispositivos periféricos. O SoC contém um processador dedicado para Linux de 240Mhz MIPS 24Kc, múltiplos processadores dedicados para decodificação de Áudio e Vídeo, unidade de processamento gráfico (GPU) , acelerador gráfico (GA), controlador USB e ainda Kernel Linux 2.6.21.7 com drivers competíveis (para todos os dispositivos no SoC), GNU gcc/glibc cross toolchain, biblioteca gráfica com suporte a DirectFB, etc.</p>
<h2>IV Portando o Android</h2>
<p>O processo necessário para portar o Android para uma plataforma big-endian (Arquitetura de ordenação numérica) pode ser dividida em três etapas. Primeiro a importância da utilização a Plataforma Micronas fornecido pelo Kernel do Linux versão 2.6.21.7 que é considerado velho comparando-se com os Kerneis atuais, mas que torna o processo de utilização pelos frameworks da plataforma de drivers do Kernel nessa versão mais fácil que em versões superiores e consequentemente os drivers do Kernel utilizados pelo Android precisam de um backport para o Kernel em questão. A segunda fase da portabilidade exige um processo de extensão do ambiente de desenvolvimento do Android para suportar a Plataforma big-endian MIPS; essas configurações de ambiente devem ser definidas no processo de compilação. A última fase da portabilidade da arquitetura de pilhas do Android consiste na integração de drivers de áudio e suporte ao DirectFB vídeo frame-buffer.</p>
<p><span id="more-1005"></span></p>
<ol>
<li> Backport para Kernel do Linux<br />
Alguns drivers precisaram ser adicionados na raiz do Kernel para dar suporte à plataforma Android, são eles:&nbsp;</p>
<ul>
<li>ASHMEM (Anonymous SHared MEMory, Memória compartilhada anônima) – É um gerenciador de memoria compartilhada similar ao POSIX SHM, mas com diferentes comportamentos; tem suporte à API baseada em arquivos simplificada.</li>
<li>Binder for Android (Android) – um CORBA semelhante ao IPC (inter process comunication, ou processo de comunicação interno).</li>
<li>Android event logger – Um drive responsável por receptar e catalogar as mensagens de depuração diretamente no Kernel.</li>
</ul>
<p>A raiz do Kernel 2.6.21.7 teve que ser modificada várias vezes para   conceder o suporte necessário à plataforma Android e todos os novos   drivers já mencionados anteriormente.</li>
<li>Modificação do Ambiente de Desenvolvimento AndroidO Android é facilmente portável em plataformas little-endian MIPS, mas devido as diferentes plataformas endianes (nosso caso a big-endian) inúmeras modificações na Arquitetura do Android são necessárias.
<ul>
<li> O primeiro tipo de modificação a ser realizada é em relação aos binários nativos da plataforma, principalmente em bibliotecas open sources e programas escritos em C/C++ (o suporte endianes é normalmente mantido nos sistemas internos de compilação (na maior parta das vezes no “autoconf”)). O Sistema de criação de makefiles do Android também deve ser alterado para dar suporte as variáveis que faltavam no big-endian e defines.</li>
<li> O Segundo tipo de alteração foi em relação ao código necessário para desenvolver ferramentas para um endian pouco utilizado. Bugs assim são raros e difíceis de encontrar, e geralmente resultam na falha ao compilar o Android e impossibilitam a plataforma de iniciar. Entre os programas que foram afetados estão o Android pre-linker Apriori, Soslim, gerenciador de recursos aapt (Android Asset Packaging Tools), etc.</li>
<li>O terceiro e último tipo de modificação inclui um impulsionamento   extra no aprendizado em codificações de bibliotecas e programas endians . Como exemplo temos a Dalvk Virtual Machine(que apoia, abertamente, as plataformas endians). O uso de ponteiros para atribuições de tipos de dados variáveis funciona corretamente para a arquitetura little-endian, mas impossibilita que o código seja portado para plataformas big-endian. A culpa disso está na estrutura JValue que em todo o código da VM, utiliza muitos valores como containers de tipos. Problemas da mesma espécie foram encontrados na biblioteca do logger. Algumas outras poucas modificações foram realizadas correção de problemas com cores, na ordenação endian , no Skia engine e na superfície deflectora (Surface Flinger).</li>
<li></li>
</ul>
</li>
<li> Suporte ao DirectFB no Android DirectFB (Direct Frame Buffer) framework é uma biblioteca baseada no GNU/Linux/UNIX com baixo consumo de memória que permite aceleração gráfica, manipulação de dispositivos de entrada, etc. sobre o frame-buffer do Linux. Por ser open source, vários produtores de SoC DTV o utilizam para implementar seus drivers para frame-buffer IPs.O Android suporta o driver para frame-buffer padrão do Linux como camada principal de desenho. Como os principais fornecedores de SoC DTV implementam a aceleração de hardware com drivers de vídeo do DirectFB, o suporte para essa tecnologia é implementado em várias níveis dentro da Arquitetura de Pilha do Android, dando suporte ao processo de desenho da interface (UI) e para aceleração de gráficos via hardware.
<ul>
<li> Alocação Gráfica do DirectFB foi implementada para suportar alocação da memória do frame-buffer de vídeo primário, bem como todos os outros tipos de camadas com escala de cores diferentes.</li>
<li>A biblioteca DirectFB copybit foi implementada para dar suporte a aceleração de hardware 2D blitter. Caso o driver fornecido do DirectFB suporte as operações 2D blittings (blit, stretch-blit, entre varias escalas de cores) a unidade central de processamento será poupada de processar as blit tasks.</li>
</ul>
<p>A única resistência em usar o DirectFB como frame-buffer da interface gráfica é por ele não suportar aceleração 3D. O constante emprenho no desenvolvimento da biblioteca DirectFB ao longo dos últimos dois anos (houve tentativas de implantar o OpenGL como mecanismo de aceleração 3D) indica que será possível a Aceleração de Hardware 3D, se a Aceleração de Hardware 3D IP estiver presente.</li>
</ol>
<p><code>Artigo: Google’s android as an application environment for DTV decoder system<br />
Kuzmanovic, N. Maruna, T. Savic, M. Miljkovic, G. Isailovic, D.<br />
Fac. of Tech. Sci., Univ. of Novi Sad, Novi Sad, Serbia </code></p>
<!-- boo-widget start -->
          <script type="text/javascript">
            bb_keywords = "Portabilidade";
            bb_bid  = "1611534";
            bb_lang = "pt-BR";
            bb_name = "custom";bb_limit = "7";bb_format = "bbc";
          </script>
          <script type="text/javascript" src="http://widgets.boo-box.com/javascripts/embed.js"></script>
          <!-- boo-widget end --><div class="plus-one-wrap"><g:plusone href="http://www.redrails.com.br/2011/04/google-android-como-um-ambiente-de-desenvolvimento-de-aplicacoes-para-sistemas-de-decodificacao-de-dtv-tv-digital-parte-2/"></g:plusone></div>]]></content:encoded>
			<wfw:commentRss>http://www.redrails.com.br/2011/04/google-android-como-um-ambiente-de-desenvolvimento-de-aplicacoes-para-sistemas-de-decodificacao-de-dtv-tv-digital-parte-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google Android como um ambiente de desenvolvimento de aplicações para Sistemas de Decodificação de DTV (TV Digital) [Parte 1]</title>
		<link>http://www.redrails.com.br/2011/04/google-android-como-um-ambiente-de-desenvolvimento-de-aplicacoes-para-sistemas-de-decodificacao-de-dtv-tv-digital/</link>
		<comments>http://www.redrails.com.br/2011/04/google-android-como-um-ambiente-de-desenvolvimento-de-aplicacoes-para-sistemas-de-decodificacao-de-dtv-tv-digital/#comments</comments>
		<pubDate>Mon, 18 Apr 2011 17:48:37 +0000</pubDate>
		<dc:creator>Luiz Carvalho</dc:creator>
				<category><![CDATA[Artigos]]></category>
		<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Redes]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[D]]></category>

		<guid isPermaLink="false">http://www.redrails.com.br/?p=997</guid>
		<description><![CDATA[Hoje em dia, DTV&#8217;s (TV Digitais) e set-top boxs[equipamento que se conecta a um televisor e a uma fonte externa de sinal] (ainda mais em dispositivos multimídia) são controlados por softwares proprietários (Aplicações e sistemas operacionais), geralmente escritos para apenas um tipo específico ou grupo de modelos semelhantes de dispositivos. A Reutilização de código entre [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_1001" class="wp-caption aligncenter" style="width: 562px"><a href="http://www.redrails.com.br/wp-content/uploads/2011/04/Android_TV.png"><img class="size-full wp-image-1001" title="Android_TV" src="http://www.redrails.com.br/wp-content/uploads/2011/04/Android_TV.png" alt="Android TV" width="552" height="569" /></a><p class="wp-caption-text">Google Android e TV Digital</p></div>
<p>Hoje em dia, DTV&#8217;s (TV Digitais) e set-top boxs[equipamento que se conecta a um televisor e a uma fonte externa de sinal] (ainda mais em dispositivos multimídia) são controlados por softwares proprietários (Aplicações e sistemas operacionais), geralmente escritos para apenas um tipo específico ou grupo de modelos semelhantes de dispositivos. A Reutilização de código entre diferentes modelos desses dispositivos é muito rara e o desenvolvimento acaba exigindo muito tempo e esforço no ciclo de desenvolvimento para cada plataforma.</p>
<p>A diferença entre os Hand-Helds e os dispositivos tecnológicos multimídia utilizados em casa está diminuindo gradativamente e seus respectivos hardwares (poder de processamento da CPU, RAM disponível, tamanho da memória flash e a presença de outros dispositivos como Redes, Wi-FI, Bluetooth, Aceleração de gráficos via Hardware, etc.) estão se tornando mais semelhantes. Ao longo do tempo o principal objetivo desses dispositivos não é alterado, embora características novas e mais avançadas sejam incorporadas constantemente(Gravação de Vídeo, Internet, TV, Internet e etc..)<br />
<span id="more-997"></span><br />
Android é o primeiro sistema operacional para dispositivos móveis totalmente aberto e livre, foi desenvolvido pela Open Handset Alliance (Grupo com mais de 30 empresas lideradas pela Google).  O Android está se tornando muito popular no mercado dos aplicativos móveis por duas razões principais. Primeiro que seu código conte é totalmente gratuito e não há taxas de royality para a Java VM, assim cada fabricante pode modifica-lo de acordo com suas necessidades. Segundo é que essa nova plataforma está em fase de expansão, valorizando muito desenvolvedores que atuam nessa área.</p>
<p>Este artigo apresenta uma abordagem sobre a utilização do Google Android como um ambiente para desenvolvimento de aplicações para dispositivos móveis embutidos, principalmente TV Digital e sistemas decodificador como set-top box. A utilização da portabilidade e a possibilidade de modificação do Android, por sua disponibilidade (por ser código aberto) e por utilizar camada de abstração de Hardware do Kernel do Linux fundamenta sua utilização no projeto. A Arquitetura e pilha utilizado pelo Android e o Kernel do Linux concedem aos desenvolvedores acesso aos recursos de multimídia e telefônicos, conectividade por rede, interface gráfica dentre outros.</p>
<h2>II Arquitetura do Android</h2>
<div id="attachment_999" class="wp-caption aligncenter" style="width: 476px"><a href="http://www.redrails.com.br/wp-content/uploads/2011/04/image001.png"><img class="size-full wp-image-999" title="image001" src="http://www.redrails.com.br/wp-content/uploads/2011/04/image001.png" alt="Android Stack Software " width="466" height="371" /></a><p class="wp-caption-text">Arquitetura em Pilhas do Android</p></div>
<p>O Android depende de serviços do sistema central do Kernel do Linux, como recursos de segurança, gerenciamento de memória, gerenciamento de processos, pilha de rede e sistema de drivers. O Kernel atua, também, como uma camada de abstração entre o hardware e todo o resto do sistema.</p>
<p>As Bibliotecas nativas do Android são escritas em C/C++ e utilizadas por vários componentes do sistema operacional. Os recursos são disponibilizados para os desenvolvedores através do Android Application Framework. Podemos destacar algumas das principais bibliotecas e recursos presentes na plataforma como: System C Library(Implementação da C system library(libc), derivada da BSD, e modificada para sistemas embutidos para dispositivos baseados em Linux), Bibliotecas de Mídias (baseada em PureVideo OpenCORE; bibliotecas de reprodução e gravação dos mais populares formatos de áudio e vídeo, assim como arquivos de imagens), bibliotecas do Webkit (Motor de navegação moderno e muito conhecido que alimenta o browser do Android), Bibliotecas do OpenGL ES 3D (utilizam aceleração de hardware 3D, e se disponível, uma otimizada implementação de software de “rasterização” 3D), FreeType(renderização de fontes tanto vetoriais quanto oriundas de bitmaps), SQLite (um poderoso e leve banco de dados relacional disponível para todas as aplicações), além de outros tantos recursos possíveis.</p>
<p>O Android run-time inclui um conjunto de bibliotecas que disponibiliza uma considerável parte dos recursos existentes na linguagem de programação Java. Cada instância de uma aplicação Android roda em processos separadamente, utilizando-se da Dalvik VM (Máquina Virtual baseada em registros, executa classes compiladas em Java, transformando-as em Executáveis Dalvik(.dex) formato otimizados para dispositivos embarcados, com baixo consumo de memória). A Dalvik VM usa o Kernel do Linux para funcionalidades subjacentes, tais como segmentação de memória em baixo nível.</p>
<p>Ao conceder pleno acesso à API, os desenvolvedores estão livres para aproveitar dos recursos do Framework Android, como: hardwares, informações sobre localização, serviços em segundo plano, definir alarmes, adicionar notificações e ainda reutilizar e substituir componentes existentes. Resumindo, o Android fornece uma plataforma de desenvolvimento aberta, oferecendo condições para que se possa desenvolver aplicações modernas e poderosas.</p>
<p>A camada de aplicação é posicionada no topo da pilha do sistema, essa camada acomoda a maioria das aplicações integradas (programa de SMS, cliente de e-mail, calendário, mapas, navegador web, telefone, etc.) bem como aplicações desenvolvidas por terceiros baixadas da internet ou instaladas via Cartão de Memoria (SDcard).</p>
<p>&nbsp;</p>
<blockquote><p>
Tradução do Artigo: <a href=" http://ieeexplore.ieee.org/Xplore/login.jsp?url=http%3A%2F%2Fieeexplore.ieee.org%2Fiel5%2F5510864%2F5522687%2F05522728.pdf%3Farnumber%3D5522728&amp;authDecision=-203">Google&#8217;s android as an application environment for DTV decoder system </a><br />
Kuzmanovic, N.  Maruna, T.  Savic, M.  Miljkovic, G.  Isailovic, D.<br />
Fac. of Tech. Sci., Univ. of Novi Sad, Novi Sad, Serbia  </p></blockquote>
<!-- boo-widget start -->
          <script type="text/javascript">
            bb_keywords = "D";
            bb_bid  = "1611534";
            bb_lang = "pt-BR";
            bb_name = "custom";bb_limit = "7";bb_format = "bbc";
          </script>
          <script type="text/javascript" src="http://widgets.boo-box.com/javascripts/embed.js"></script>
          <!-- boo-widget end --><div class="plus-one-wrap"><g:plusone href="http://www.redrails.com.br/2011/04/google-android-como-um-ambiente-de-desenvolvimento-de-aplicacoes-para-sistemas-de-decodificacao-de-dtv-tv-digital/"></g:plusone></div>]]></content:encoded>
			<wfw:commentRss>http://www.redrails.com.br/2011/04/google-android-como-um-ambiente-de-desenvolvimento-de-aplicacoes-para-sistemas-de-decodificacao-de-dtv-tv-digital/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Object-Relational Mapping(ORM) &#8211; Mapeamento de Objeto-Relacional</title>
		<link>http://www.redrails.com.br/2011/04/object-relational-mappingorm-mapeamento-de-objeto-relacional/</link>
		<comments>http://www.redrails.com.br/2011/04/object-relational-mappingorm-mapeamento-de-objeto-relacional/#comments</comments>
		<pubDate>Wed, 13 Apr 2011 15:00:35 +0000</pubDate>
		<dc:creator>Luiz Carvalho</dc:creator>
				<category><![CDATA[Artigos]]></category>
		<category><![CDATA[Banco de Dados]]></category>
		<category><![CDATA[Getna]]></category>
		<category><![CDATA[Mapeamento]]></category>
		<category><![CDATA[Monografia]]></category>
		<category><![CDATA[ORM]]></category>
		<category><![CDATA[Relacionamentos]]></category>

		<guid isPermaLink="false">http://www.redrails.com.br/?p=943</guid>
		<description><![CDATA[Mapeamento de Objeto-Relacional (ORM) é uma abordagem que permite a construção de sistemas utilizando o paradigma orientado a objetos com a persistência destes objetos em bancos de dados relacionais. Utilizando-se de técnicas e estratégias específicas, é possível mapear classes com seus atributos e associações para o modelo relacional (SILVA et al.; 2006). Segundo (AMBLER, 1999), [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.redrails.com.br/wp-content/uploads/2011/04/tabela001.png"><br />
</a>Mapeamento de Objeto-Relacional (ORM) é uma abordagem que permite a construção de sistemas utilizando o paradigma orientado a objetos com a persistência destes objetos em bancos de dados relacionais. Utilizando-se de técnicas e estratégias específicas, é possível mapear classes com seus atributos e associações para o modelo relacional (SILVA et al.; 2006).<br />
Segundo (AMBLER, 1999), “o mapeamento de classes pode ser feito mediante a paridade entre classe e tabela, ou seja, uma classe é mapeada para uma tabela”. Este mapeamento direto de classes para tabelas representa a forma mais simples de mapeamento, tornando mais fácil o entendimento e a manutenção de uma aplicação. A idéia deste mapeamento pode ser visualizada na Figura 1.</p>
<p><a href="/wp-content/uploads/2011/04/image005.png"><img title="image005" src="/wp-content/uploads/2011/04/image005.png" alt="" width="500" height="139" /></a></p>
<p>Figura 1: Mapeamento de Tabelas &#8211; Simples</p>
<p><span id="more-943"></span></p>
<p>Porém, nem sempre o mapeamento é tão simples assim. No caso de uma estrutura hierárquica, várias classes podem ser mapeadas para uma tabela, bem como uma classe pode ser mapeada para várias tabelas. Esse mapeamento mais complexo de classes e tabelas pode ser observado na Figura 2.</p>
<p><a href="/wp-content/uploads/2011/04/image006.png"><img title="image006" src="/wp-content/uploads/2011/04/image006.png" alt="" width="400" height="281" /></a></p>
<p>Figura 2: Mapeamento            de Tabelas &#8211; Complexo</p>
<p>As tabelas Classe1 e Classe2 possuem, respectivamente, relacionamento com as tabelas Tabela1 e Tabela3. Esse mapeamento seria de certa forma trivial, e poderia ser tratado como relacionamento simples. Um terceiro relacionamento feito pelas duas tabelas impossibilita esse tratamento, pois ambas possuem atributos na Tabela2. Dessa forma é necessário que haja uma especificação de quais atributos pertencem a cada classe na Tabela2.</p>
<p>Ao tratar do mapeamento de atributos de uma classe para colunas em tabelas de um banco de dados relacional, deve-se levar em conta que os atributos podem ser de tipos de dados primitivos como inteiros, pontos flutuantes, caracteres, booleanos e binários, bem como ser de tipos de dados complexos como tipos baseados criados pelo usuário. Os atributos podem ser ainda multivalorados, o que viola as regras de normalização do modelo relacional.</p>
<p>Além disso, podem existir atributos de controle ou utilizados em cálculos, que geralmente não necessitam serem mapeados (AMBLER, 1999). Desta forma, os atributos simples podem ser mapeados diretamente para colunas em uma tabela, já os atributos complexos e multivalorados podem necessitar de tabelas adicionais para seu armazenamento. Estes atributos complexos, geralmente, possuem características recursivas, ou seja, são classes que possuem outros atributos e, assim, sucessivamente.<br />
O mapeamento segue o seguinte conceito: as classes mapeiam cada uma das tabelas do banco de dados de modo que as linhas dessas tabelas se tornam objetos e as colunas referem-se aos atributos dessa classe. Esse conceito pode ser visualizado na Figura 3.</p>
<p><a href="/wp-content/uploads/2011/04/image007.png"><img title="image007" src="/wp-content/uploads/2011/04/image007.png" alt="" width="500" height="300" /></a></p>
<p>Figura 3: Mapeamento de Tabelas, Objetos e Atributos</p>
<p>Essa técnica possibilita mais do que códigos limpos, permite que persistências de objetos no banco de dados sejam feitas sem simples e transparente.</p>
<p>O ORM se comporta como uma camada que possui uma gama de métodos que cuidam dessa tarefa, tais como: create (cria um novo objeto da classe a partir dos dados da tabela), find (busca um determinado registro no banco e o torna um objeto da classe), delete (exclui registros do banco) e update (atualiza registros de uma tabela de acordo com as solicitações). Esses métodos variam de acordo com a linguagem utilizada.</p>
<p>Na Tabela 1, é possível observar um pouco das facilidades e de como a legibilidade do código fica melhor ao se utilizar o ORM ao invés de se injetar dentro de seu código o SQL puro, o que fere as boas práticas de programação, que sugere que códigos SQL estejam separados dos códigos de desenvolvimento (RODRIGES; COSTA; SILVEIR, 2001).</p>
<p><a href="/wp-content/uploads/2011/04/tabela001.png"><img title="tabela001" src="/wp-content/uploads/2011/04/tabela001.png" alt="" width="622" height="261" /></a></p>
<p>Essa camada, chamada de persistência, encontra-se entre a camada de negócio (onde estão as classes de domínio da aplicação, ou seja, classes que definem as regras de negócio) e o banco de dados. Esta camada permite que o impacto das modificações em uma delas seja atenuado em relação à outra. Isto diminui o grau de dependência do banco de dados e aumenta a facilidade de manutenção do código. Na Figura 4 pode-se analisar a disposição dessas camadas.</p>
<p><a href="/wp-content/uploads/2011/04/image007.png"><br />
</a></p>
<p><a href="../wp-content/uploads/2011/04/image008.png"><img title="image008" src="../wp-content/uploads/2011/04/image008.png" alt="" width="401" height="263" /></a></p>
<p>Figura 4: Camada de Persistência</p>
<p>Toda responsabilidade por persistir objetos fica a cargo da camada de persistência, liberando a aplicação destas tarefas, e assim aumentando a produtividade no desenvolvimento (YODER; JOHNSON; WILSON,1998). Na camada de persistência está a definição das estratégias de mapeamento do modelo orientado a objetos para o modelo relacional, apresentadas anteriormente.<br />
A camada de classes representa todo o conjunto de classes (controllers, views dentre outras) que podem utilizar métodos da camada de persistência. Assim, as transações com o banco de dados ficam transparentes.<br />
Artigo da série:<br />
<a href="http://www.redrails.com.br/2009/09/monografia-getna-gerador-ruby-on-rails-a-partir-de-banco-de-dados/"><img src="http://maxonrails.files.wordpress.com/2008/08/getna_logo_light.png" alt="GETNA" /></a><a href="http://www.redrails.com.br/2009/09/monografia-getna-gerador-ruby-on-rails-a-partir-de-banco-de-dados/"><img src="http://maxonrails.files.wordpress.com/2008/08/getna_logo_light_blackpng.png" alt="GETNA" /></a><a href="http://www.redrails.com.br/2009/09/monografia-getna-gerador-ruby-on-rails-a-partir-de-banco-de-dados/"><br />
</a></p>
<!-- boo-widget start -->
          <script type="text/javascript">
            bb_keywords = "Mapeamento";
            bb_bid  = "1611534";
            bb_lang = "pt-BR";
            bb_name = "custom";bb_limit = "7";bb_format = "bbc";
          </script>
          <script type="text/javascript" src="http://widgets.boo-box.com/javascripts/embed.js"></script>
          <!-- boo-widget end --><div class="plus-one-wrap"><g:plusone href="http://www.redrails.com.br/2011/04/object-relational-mappingorm-mapeamento-de-objeto-relacional/"></g:plusone></div>]]></content:encoded>
			<wfw:commentRss>http://www.redrails.com.br/2011/04/object-relational-mappingorm-mapeamento-de-objeto-relacional/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Geradores de Código</title>
		<link>http://www.redrails.com.br/2011/04/gerador-de-codigo/</link>
		<comments>http://www.redrails.com.br/2011/04/gerador-de-codigo/#comments</comments>
		<pubDate>Wed, 13 Apr 2011 14:31:27 +0000</pubDate>
		<dc:creator>Luiz Carvalho</dc:creator>
				<category><![CDATA[Artigos]]></category>
		<category><![CDATA[Artigo]]></category>
		<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Gerador de Código]]></category>
		<category><![CDATA[Getna]]></category>
		<category><![CDATA[Monografia]]></category>
		<category><![CDATA[Otimização]]></category>
		<category><![CDATA[programação]]></category>

		<guid isPermaLink="false">http://www.redrails.com.br/?p=934</guid>
		<description><![CDATA[Geradores de código são basicamente programas que geram outros programas. Os geradores podem ser definidos como ferramentas tanto para formatar códigos simples quanto para gerar aplicações complexas a partir de modelos abstratos (templates). São muito utilizados para agilizar o processo de desenvolvimento, pois aumentam a produtividade e diminuem o tempo gasto na codificação da aplicação [...]]]></description>
			<content:encoded><![CDATA[<p>Geradores de código são basicamente programas que geram outros programas. Os geradores podem ser definidos como ferramentas tanto para formatar códigos simples quanto para gerar aplicações complexas a partir de modelos abstratos (templates). São muito utilizados para agilizar o processo de desenvolvimento, pois aumentam a produtividade e diminuem o tempo gasto na codificação da aplicação e, conseqüentemente, o custo final (AMBLER, 2004; KLUG, 2007).</p>
<p>Segundo Herrington (2003), a geração de código é a técnica pela qual se constrói código utilizando programas. Os geradores de código podem trabalhar por meio de linhas de comando ou de interfaces gráficas, estas últimas são as formas mais interativas. Estes podem construir código em várias linguagens de programação, bem como efetuar a geração dos códigos de uma única vez ou em etapas. As entradas e saídas são definidas conforme a necessidade, sendo que o desenvolvedor especifica parâmetros de saída de forma manual. Portanto, é de extrema relevância que o programador saiba a priori o que se deseja obter como resultado.</p>
<p><span id="more-934"></span></p>
<p>De acordo com Herrington (2003), a utilização de geradores para desenvolvimento de softwares traz enormes vantagens aos códigos gerados, tais como:</p>
<ul>
<li> qualidade: a escrita de grande quantidade de código vai gradualmente diminuindo a qualidade final do software. Na geração automática, a qualidade do software está diretamente ligada à qualidade dos templates. Esse, por sua vez, não possui qualidade associada à quantidade de código a ser desenvolvida, visto que os templates possuem uma estrutura fixa que não é alterada pelo tamanho do projeto;</li>
<li>consistência: o código gerado tende a ser consistente, pois possui uma padronização de nomenclatura de classes, métodos, variáveis e localização (pastas e subpastas), o que torna o código de fácil entendimento e modificação;</li>
<li>único ponto de conhecimento: caso seja necessária uma alteração de alguma estrutura de entrada do projeto, necessita-se apenas saber o local onde essa modificação deve ser realizada. Após isso, o código gerado se propagará para todos os processos seguintes à alteração, gerando sempre um código compatível com as entradas;</li>
<li>maior tempo para o projeto: considerando-se o uso de uma biblioteca externa (API), podem acontecer alterações nessa fonte obrigando assim que modificações sejam feitas em todas as partes do código em que aquela modificação irá influenciar. Com a utilização do gerador, esse processo poderá ser feito apenas nos templates do gerador e uma nova geração efetuará as mudanças necessárias no código. Essa característica faz toda a diferença em cronogramas de projetos que utilizam ou não geradores (forma manual);</li>
<li>abstração: como, normalmente, os geradores utilizam os modelos abstratos de dados (templates) do código alvo, fica fácil migrar de uma plataforma/linguagem para outra, necessitando apenas uma revisão no escopo de abstração, ou seja, modificar os templates de acordo com as necessidades da plataforma/linguagem alvo;</li>
<li>agilidade: uma característica chave da geração de código é a maleabilidade do código de saída. No nível de negócio, o software será de mais fácil manutenção e implementação de novas funcionalidades. Mesmo considerando-se o tempo que se economiza no ato da geração, podemos afirmar que essa técnica dá um grande percentual de agilidade ao desenvolvedor.</li>
</ul>
<p>E ainda, segundo Herrington (2003), a construção de um gerador de código pode seguir as seguintes etapas de desenvolvimento:</p>
<ul>
<li> a definição de qual a saída se deseja obter;</li>
<li> a identificação de qual entrada será utilizada e como essa será analisada;</li>
<li> a definição de padrões na entrada, de como eles serão interpretados para obtenção e geração de uma saída formatada de acordo com as expectativas predefinidas; e</li>
<li> a geração da saída a partir das informações extraídas da entrada.</li>
</ul>
<p>Geradores de código são uma boa forma de agilizar o desenvolvimento e melhorar o nível de qualidade no início do projeto. Fatores, esses, que podem decidir o futuro de uma aplicação.</p>
<p>Artigo da série:<br />
<a href="http://www.redrails.com.br/2009/09/monografia-getna-gerador-ruby-on-rails-a-partir-de-banco-de-dados/"><img src="http://maxonrails.files.wordpress.com/2008/08/getna_logo_light.png" alt="GETNA" /></a><a href="http://www.redrails.com.br/2009/09/monografia-getna-gerador-ruby-on-rails-a-partir-de-banco-de-dados/"><img src="http://maxonrails.files.wordpress.com/2008/08/getna_logo_light_blackpng.png" alt="GETNA" /></a><a href="http://www.redrails.com.br/2009/09/monografia-getna-gerador-ruby-on-rails-a-partir-de-banco-de-dados/"><br />
</a></p>
<!-- boo-widget start -->
          <script type="text/javascript">
            bb_keywords = "Artigo";
            bb_bid  = "1611534";
            bb_lang = "pt-BR";
            bb_name = "custom";bb_limit = "7";bb_format = "bbc";
          </script>
          <script type="text/javascript" src="http://widgets.boo-box.com/javascripts/embed.js"></script>
          <!-- boo-widget end --><div class="plus-one-wrap"><g:plusone href="http://www.redrails.com.br/2011/04/gerador-de-codigo/"></g:plusone></div>]]></content:encoded>
			<wfw:commentRss>http://www.redrails.com.br/2011/04/gerador-de-codigo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

