<?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>TecnoSapiens &#187; Programação</title>
	<atom:link href="http://www.tecnosapiens.com.br/category/programacao/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.tecnosapiens.com.br</link>
	<description>De pedras lascadas a mentes afiadas</description>
	<lastBuildDate>Thu, 08 Sep 2011 17:00:46 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2</generator>
		<item>
		<title>Rapidinha: CSS ou Tabelas HTML</title>
		<link>http://www.tecnosapiens.com.br/2010/03/rapidinha-css-ou-tabelas-html/</link>
		<comments>http://www.tecnosapiens.com.br/2010/03/rapidinha-css-ou-tabelas-html/#comments</comments>
		<pubDate>Tue, 23 Mar 2010 02:06:32 +0000</pubDate>
		<dc:creator>Weslley</dc:creator>
				<category><![CDATA[Informática]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Software livre]]></category>
		<category><![CDATA[Tecnologia de ponta]]></category>
		<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[programação web]]></category>
		<category><![CDATA[tabela html]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[web design]]></category>

		<guid isPermaLink="false">http://www.tecnosapiens.com.br/?p=2203</guid>
		<description><![CDATA[O CSS (Cascading style sheets) fornece ao programador todo o controle do posicionamento de elementos em um documento HTML. Desde que o CSS tornou-se a uma tecnologia promissora, surgiu a pergunta: qual é melhor, o design usando CSS ou tabelas HTML ? Há alguns anos, o suporte à scripts CSS evoluia lentamente, enquanto as tabelas [...]]]></description>
			<content:encoded><![CDATA[<img style='float: left; margin-right: 10px; border: none;' src='http://www.gravatar.com/avatar.php?gravatar_id=4b903347bb118f717470fb592a2bdf0d&amp;default=http://www.tecnosapiens.com.br/images/defgravatar.gif' alt='No Gravatar' width=60 height=60/><p>O CSS (<em>Cascading style sheets</em>) fornece ao programador todo o controle do posicionamento de elementos em um documento HTML. Desde que o CSS tornou-se a uma tecnologia promissora, surgiu a pergunta: qual é melhor, o <em>design</em> usando CSS ou tabelas HTML ?</p>
<p><span id="more-2203"></span></p>
<ul>
<li>Há alguns anos, o suporte à scripts CSS evoluia lentamente,      enquanto as tabelas HTML eram plenamente suportadas por todos os      navegadores existentes. Hoje em dia, essa diferença diminuiu      significativamente;</li>
<li>As tabelas HTML são mais flexíveis quando a janela      do navegador é redimensionada, reescalando e quebrando seus elementos,      enquanto o CSS é mais preciso quanto ao posicionamento, porém bastante      inflexível;</li>
<li>As tabelas HTML são mais simples de serem      manuseadas do que as regras CSS;</li>
<li>O CSS evolui a cada dia, surgindo novas      funcionalidades com tal evolução;</li>
<li>Como dito anteriormente, o CSS é mais preciso do      que as tabelas HTML, permitindo que a sua página seja visualizada      exatamente da forma que o <em>web designer</em> desejar;</li>
<li>O uso de CSS pode deixar o código bem mais      organizado do que diversas tabelas aninhadas, facilitando a edição e      leitura do código.</li>
</ul>
<p>Assim, pesando os prós e contras de cada uma das técnicas, deve-se escolher qual delas é mais útil e adequada ao modo de trabalho do programador.</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.tecnosapiens.com.br%2F2010%2F03%2Frapidinha-css-ou-tabelas-html%2F&amp;title=Rapidinha%3A%20CSS%20ou%20Tabelas%20HTML" id="wpa2a_2"><img src="http://www.tecnosapiens.com.br/home/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.tecnosapiens.com.br/2010/03/rapidinha-css-ou-tabelas-html/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>O que significa a expressão &#8220;notação em complemento de dois&#8221;?</title>
		<link>http://www.tecnosapiens.com.br/2009/08/o-que-significa-a-expressao-notacao-em-complemento-de-dois/</link>
		<comments>http://www.tecnosapiens.com.br/2009/08/o-que-significa-a-expressao-notacao-em-complemento-de-dois/#comments</comments>
		<pubDate>Wed, 26 Aug 2009 18:03:44 +0000</pubDate>
		<dc:creator>Rodrigo</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Informática]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[computação]]></category>
		<category><![CDATA[computador]]></category>
		<category><![CDATA[tecnologia]]></category>

		<guid isPermaLink="false">http://www.tecnosapiens.com.br/?p=1708</guid>
		<description><![CDATA[Bem, para começo de conversa, é bom lembrar que, no mundo computacional, as informações são representadas por combinações de zeros e uns. Cada um dos dígitos (zeros ou uns) utilizados nesta representação é conhecido por bit. Hoje em dia os nossos computadores são (em sua maioria) de 32 bits ou 64 bits. Esse número indica [...]]]></description>
			<content:encoded><![CDATA[<img style='float: left; margin-right: 10px; border: none;' src='http://www.gravatar.com/avatar.php?gravatar_id=f4a74c4c68f512fce536ebedcfb9cf52&amp;default=http://www.tecnosapiens.com.br/images/defgravatar.gif' alt='No Gravatar' width=60 height=60/><p>Bem, para começo de conversa, é bom lembrar que, no mundo computacional, as informações são representadas por combinações de zeros e uns. Cada um dos dígitos (zeros ou uns) utilizados nesta representação é conhecido por <a title="O que é um bit?" href="http://pt.wikipedia.org/wiki/Bit" target="_blank">bit</a>.</p>
<p>Hoje em dia os nossos computadores são (em sua maioria) de 32 bits ou 64 bits. Esse número indica que uma determinada informação é representada, computacionalmente, por um grupo de 32 ou de 64 bits. Por exemplo, em 32 bits o número inteiro 1 é representado por: 00000000000000000000000000000001.</p>
<p>Mas, como se representa um número inteiro negativo?</p>
<p><span id="more-1708"></span></p>
<p>A solução mais adotada para solucionar este problema é, justamente, utilizar a notação em complemento de dois. Nesta notação, para saber se um número é positivo, ou negativo, basta observar o primeiro bit de cada conjunto/sequência. Se a sequência inicia-se com um 0 (zero) o número representado é positivo (não-negativo), caso contrário (a sequência inicia-se com o número 1) tem-se a representação de um número negativo.</p>
<div id="attachment_1712" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.tecnosapiens.com.br/home/wp-content/uploads/2009/08/bytes-7032251.jpg"><img class="size-medium wp-image-1712" title="12 bits" src="http://www.tecnosapiens.com.br/home/wp-content/uploads/2009/08/bytes-7032251-300x300.jpg" alt="12 bits" width="300" height="300" /></a><p class="wp-caption-text">12 bits</p></div>
<p>Para uma notação em complemento de dois, num sistema de <span style="font-weight: bold;">n</span> bits, os números que podem ser representados estão no seguinte intervalo: -2<sup>(n-1)</sup> a 2<sup>(n-1)</sup> -1.<br />
Para saber como certo número (x) será representado (em binário) em um sistema (de n bits) em complemento de dois, aqui vai uma regra prática:</p>
<ol>
<li>Se x &gt;= 0, a representação é direta. Por exemplo, o binário que corresponde ao número cinco, em um sistema de oito bits é <span style="font-weight: bold;">00000101</span>.</li>
<li>Se x &lt; 0, primeiro deve-se calcular o valor da seguinte expressão: 2<sup>n</sup> + x. Em seguida, determina-se a representação do valor da expressão. Por exemplo, para o número -3:
<ol>
<li>Valor da expressão: 2<sup>8</sup> &#8211; 3 = 253</li>
<li>Representação em binário: 11111101</li>
</ol>
</li>
</ol>
<p>Uma outra regra prática para determinar a representação de um negativo (inteiro, em complemento de dois) é:</p>
<ol>
<li>Encontrar a representação de (-x)</li>
<li>Inverter bit a bit</li>
<li>Somar 1</li>
</ol>
<p>Em síntese, esta expressão indica uma forma de representação de inteiros (positivos e negativos) que também é conhecida como complemento para dois. A expressão em inglês é <strong><em>signed two&#8217;s complement integer</em></strong>.</p>
<p>Bem, é isso&#8230; canseirinha essa parada&#8230; não é mesmo?</p>
<p>Se você quiser saber como é feita a representação de números reais, siga este <a title="Saiba mais sobre representação numérica dos números reais." href="http://www.inf.ufsc.br/~luciana.rech/index_arquivos/PadraoIEEE754(Aula_1208).pdf" target="_blank">link</a> ou <a title="Mais informações (em Inglês)" href="http://en.wikipedia.org/wiki/IEEE_754-2008" target="_blank">este</a>.</p>
<p>Abraços.</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.tecnosapiens.com.br%2F2009%2F08%2Fo-que-significa-a-expressao-notacao-em-complemento-de-dois%2F&amp;title=O%20que%20significa%20a%20express%C3%A3o%20%26%238220%3Bnota%C3%A7%C3%A3o%20em%20complemento%20de%20dois%26%238221%3B%3F" id="wpa2a_4"><img src="http://www.tecnosapiens.com.br/home/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.tecnosapiens.com.br/2009/08/o-que-significa-a-expressao-notacao-em-complemento-de-dois/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Computação Heterogênea</title>
		<link>http://www.tecnosapiens.com.br/2009/07/computacao-heterogenea/</link>
		<comments>http://www.tecnosapiens.com.br/2009/07/computacao-heterogenea/#comments</comments>
		<pubDate>Fri, 31 Jul 2009 19:30:20 +0000</pubDate>
		<dc:creator>Weslley</dc:creator>
				<category><![CDATA[Ciência]]></category>
		<category><![CDATA[CUDA]]></category>
		<category><![CDATA[Geral]]></category>
		<category><![CDATA[Informática]]></category>
		<category><![CDATA[Novidades]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Software livre]]></category>
		<category><![CDATA[Tecnologia de ponta]]></category>
		<category><![CDATA[Tecnologias do amanhã]]></category>
		<category><![CDATA[cell]]></category>
		<category><![CDATA[computação heterogênea]]></category>
		<category><![CDATA[hpc]]></category>

		<guid isPermaLink="false">http://www.tecnosapiens.com.br/?p=1679</guid>
		<description><![CDATA[Antes de qualquer outra palavra, gostaria de postar aqui um pedido de desculpas aos leitores, devido a diminuição considerável de novas postagens. Entretanto, os membros do time TS estão coincidentemente passando por períodos de mudanças e muito trabalho. Tentaremos, à medida do possível, voltar ao ritmo normal.  Bom, agora, com a cara de um cachorro [...]]]></description>
			<content:encoded><![CDATA[<img style='float: left; margin-right: 10px; border: none;' src='http://www.gravatar.com/avatar.php?gravatar_id=4b903347bb118f717470fb592a2bdf0d&amp;default=http://www.tecnosapiens.com.br/images/defgravatar.gif' alt='No Gravatar' width=60 height=60/><p>Antes de qualquer outra palavra, gostaria de postar aqui um pedido de desculpas aos leitores, devido a diminuição considerável de novas postagens. Entretanto, os membros do time TS estão coincidentemente passando por períodos de mudanças e muito trabalho. Tentaremos, à medida do possível, voltar ao ritmo normal.  Bom, agora, com a cara de um cachorro que quebrou o vaso da dona, eu volto a falar-lhes sobre as novas &#8220;aventuras&#8221; da computação de alto desempenho, COMPUTAÇÃO HETEROGÊNEA!</p>
<p>A computação de alto desempenho contemporânea vem tomando rumos não imaginados há alguns anos atrás. Enquanto os computadores mais rápidos do mundo alternavam entre arquiteturas complexas e um número grande de processadores comuns, novas máquinas bastante potentes vem juntando diversas arquiteturas e componentes para ganhar desempenho com baixo custo.</p>
<p><span id="more-1679"></span></p>
<p>O <a href="http://www.top500.org/system/9707" target="_blank">RoadRunner</a>, o supercomputador mais rápido atualmente, é composto por processadores PowerXCell 8i 3.2 Ghz, os quais integram os velhos conhecidos PowerPC com alguns processadores auxiliares dentro de um mesmo núcleo, e por processadores Opteron DC 1.8 GHz. Os processadores AMD são responsáveis pelo controle dos dados, e os Cell fazem a parte pesada dos cálculos, resultando assim em cerca de 1,1 PFlops de desempenho.</p>
<p>Já o <a href="http://www.top500.org/system/9883" target="_blank">TSUBAME</a> apresenta algo ainda mais inovador: mesclar processadores &#8220;comuns&#8221; AMD Opteron 2.4/2.6 GHz, Intel Xeon E5440 2.833 GHz com arquiteturas mais complexas, como o <a href="http://forum.pcvsconsole.com/viewthread.php?tid=12946" target="_blank">ClearSpeed CSX600</a>, processadores dedicados a operações matemáticas, além do uso de placas de vídeo nVidia GT200, auxiliando nos cálculos massivos com o CUDA.</p>
<p>Com a tecnologia de integração, fica mais fácil a integração de sistemas já existente para obter mais performance. Assim, se esta vertente da HPC (<em>High Performance Computing</em>) firmar-se como tendência mundial, veremos um número muito grande de sistemas contendo diversas tecnologias antes usadas separadamente, o que parece ser bom, pois o custo de tecnologias <em>Off-the-shelf</em> são menores que os produtos de ponta. Assim, teremos máquinas potentes em computadores pessoais, e não somente em grandes pólos.</p>
<p>See ya!</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.tecnosapiens.com.br%2F2009%2F07%2Fcomputacao-heterogenea%2F&amp;title=Computa%C3%A7%C3%A3o%20Heterog%C3%AAnea" id="wpa2a_6"><img src="http://www.tecnosapiens.com.br/home/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.tecnosapiens.com.br/2009/07/computacao-heterogenea/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rapidinha: Compilando um programa C++ com CUDA</title>
		<link>http://www.tecnosapiens.com.br/2009/05/rapidinha-compilando-um-programa-c-com-cuda/</link>
		<comments>http://www.tecnosapiens.com.br/2009/05/rapidinha-compilando-um-programa-c-com-cuda/#comments</comments>
		<pubDate>Wed, 27 May 2009 01:44:46 +0000</pubDate>
		<dc:creator>Weslley</dc:creator>
				<category><![CDATA[Arquivo TecnoSapiens]]></category>
		<category><![CDATA[CUDA]]></category>
		<category><![CDATA[Geral]]></category>
		<category><![CDATA[Informática]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Software livre]]></category>
		<category><![CDATA[Tecnologia de ponta]]></category>
		<category><![CDATA[Tecnologias do amanhã]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[Compilação]]></category>
		<category><![CDATA[GPU]]></category>

		<guid isPermaLink="false">http://www.tecnosapiens.com.br/?p=1637</guid>
		<description><![CDATA[Em meus primeiros passos no aprendizado de programação em CUDA, tive um problema muito básico, mas que foi difícil encontrar a solução do mesmo: como compilar um programa escrito em C++ for CUDA ??? Vejamos um exemplo de código, o arquivo teste.cu //********************************************************************************************** cudaArray* cu_array; texture&#60;float, 2&#62; tex; // Allocate array cudaMallocArray(&#38;cu_array, cudaCreateChannelDesc&#60;float&#62;(), width, height); [...]]]></description>
			<content:encoded><![CDATA[<img style='float: left; margin-right: 10px; border: none;' src='http://www.gravatar.com/avatar.php?gravatar_id=4b903347bb118f717470fb592a2bdf0d&amp;default=http://www.tecnosapiens.com.br/images/defgravatar.gif' alt='No Gravatar' width=60 height=60/><p>Em meus primeiros passos no aprendizado de programação em <a href="http://en.wikipedia.org/wiki/CUDA" target="_blank">CUDA</a>, tive um problema muito básico, mas que foi difícil encontrar a solução do mesmo: como compilar um programa escrito em <em><a href="http://pt.wikipedia.org/wiki/C%2B%2B" target="_blank"><em>C++</em></a></em> for CUDA ???</p>
<p><span id="more-1637"></span>Vejamos um exemplo de código, o arquivo <strong>teste.cu</strong></p>
<p>//**********************************************************************************************</p>
<p>cudaArray* cu_array;<br />
texture&lt;float, 2&gt; tex;</p>
<p>// Allocate array<br />
cudaMallocArray(&amp;cu_array, cudaCreateChannelDesc&lt;float&gt;(), width, height);</p>
<p>// Copy image data to array<br />
cudaMemcpy(cu_array, image, width*height, cudaMemcpyHostToDevice);</p>
<p>// Bind the array to the texture<br />
cudaBindTexture(tex, cu_array);</p>
<p>// Run kernel<br />
dim3 blockDim(16, 16, 1);<br />
dim3 gridDim(width / blockDim.x, height / blockDim.y, 1);<br />
kernel&lt;&lt;&lt; gridDim, blockDim, 0 &gt;&gt;&gt;(d_odata, width, height);<br />
cudaUnbindTexture(tex);</p>
<p>__global__ void kernel(float* odata, int height, int width)<br />
{<br />
unsigned int x = blockIdx.x*blockDim.x + threadIdx.x;<br />
unsigned int y = blockIdx.y*blockDim.y + threadIdx.y;<br />
float c = texfetch(tex, x, y);<br />
odata[y*width+x] = c;<br />
}<br />
//**********************************************************************************************</p>
<p>Para compilar este programa, primeiramente é necessário ter o compilador <em>nvcc</em> instalado, por meio das bibliotecas fornecidas pela <a href="http://www.nvidia.com/cuda" target="_blank">NVidia</a>.</p>
<p>Temos então a seguinte sequência de comandos:</p>
<p><strong>nvcc -cuda teste.cu</strong></p>
<p>Este comando irá gerar um código <a href="http://pt.wikipedia.org/wiki/C%2B%2B" target="_blank"><em>C++</em></a> a partir do arquivo <strong>teste.cu</strong>, guardando-o no arquivo <strong>teste.cu.cpp</strong>. Após isso, faz-se:</p>
<p><strong>nvcc teste.cu.cpp -o teste.exe</strong></p>
<p>E assim, teremos o executável tão desejado!</p>
<p>Espero que ajude!</p>
<p><em>See ya!</em></p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.tecnosapiens.com.br%2F2009%2F05%2Frapidinha-compilando-um-programa-c-com-cuda%2F&amp;title=Rapidinha%3A%20Compilando%20um%20programa%20C%2B%2B%20com%20CUDA" id="wpa2a_8"><img src="http://www.tecnosapiens.com.br/home/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.tecnosapiens.com.br/2009/05/rapidinha-compilando-um-programa-c-com-cuda/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

