<?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>Keep Learning &#187; Developer 101</title>
	<atom:link href="http://blog.lucashungaro.com/category/developer-101/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.lucashungaro.com</link>
	<description>Conhecimento nunca é o bastante</description>
	<lastBuildDate>Sat, 03 Sep 2011 19:36:57 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Developer 101: miscelânea</title>
		<link>http://blog.lucashungaro.com/2008/05/10/developer-101-miscelanea/</link>
		<comments>http://blog.lucashungaro.com/2008/05/10/developer-101-miscelanea/#comments</comments>
		<pubDate>Sat, 10 May 2008 05:09:03 +0000</pubDate>
		<dc:creator>Lucas Húngaro</dc:creator>
				<category><![CDATA[Developer 101]]></category>

		<guid isPermaLink="false">http://www.makemesimple.com/blog/2008/05/10/developer-101-miscelanea/</guid>
		<description><![CDATA[Depois de um bom tempo, mais um artigo da série &#8220;Developer 101&#8243;. Dessa vez decidi falar sobre vários assuntos de uma forma sucinta com o objetivo de instigar a curiosidade do leitor. Então vamos lá, aí vão mais alguns conceitos que acho importantes na formação de um desenvolvedor: POSIX Portable Operating System Interface, POSIX, é [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.makemesimple.com/blog/2008/02/12/developer-101-codificacao-de-caracteres/" target="_blank">Depois de um bom tempo</a>, mais um artigo da série &#8220;Developer 101&#8243;. Dessa vez decidi falar sobre vários assuntos de uma forma sucinta com o objetivo de instigar a curiosidade do leitor. <img src='http://blog.lucashungaro.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Então vamos lá, aí vão mais alguns conceitos que acho importantes na formação de um desenvolvedor:</p>
<p><strong>POSIX</strong><br />
Portable Operating System Interface, POSIX, é o nome dado a um conjunto de padrões especificados pela IEEE que define a API e interfaces de shell e de utilitários para software compatível com o sistema operacional Unix (mas o padrão pode se aplicar a qualquer sistema operacional). O objetivo era estabelecer uma interface padrão entre todos os sistemas operacionais que adotassem o conjunto POSIX e os softwares rodados sobre eles, de forma a torná-los portáveis. O nome POSIX foi uma criação de <a href="http://en.wikipedia.org/wiki/Richard_Stallman" target="_blank">Richard Stallman</a>.</p>
<p>Entre os sistemas operacionais mais conhecidos, são totalmente compatíveis com o conjunto POSIX: AIX, HP-UX, Mac OS X e Solaris. Entre os não-oficialmente certificados, mas compatíveis em grande parte estão FreeBSD e a maioria das distribuições Linux. É possível conseguir algum nível de compatibilidade no Windows através de pacotes como o Microsoft Windows Services for Unix.</p>
<p><a href="http://en.wikipedia.org/wiki/POSIX" target="_blank">Leia mais aqui</a>.</p>
<p><strong>BSD</strong><br />
Berkeley Software Distribution, BSD, é um sistema operacional derivado de Unix desenvolvido na Universidade da Califórnia, em Berkeley, de 1977 a 1995. Foi um branch do Unix e muito de seu código acabou sendo aproveitado pelo mesmo.</p>
<p>Serviu como base para muitos projetos em desenvolvimento até hoje, como <a href="http://en.wikipedia.org/wiki/FreeBSD">FreeBSD</a>, <a href="http://en.wikipedia.org/wiki/OpenBSD" target="_blank">OpenBSD</a> e para o core do <a href="http://en.wikipedia.org/wiki/Mac_OS_X" target="_blank">Mac OS X</a> (conhecido como <a href="http://en.wikipedia.org/wiki/Darwin_%28operating_system%29" target="_blank">Darwin</a>, que é um sistema operacional por si só, contendo partes do FreeBSD, do <a href="http://en.wikipedia.org/wiki/Mach_%28kernel%29" target="_blank">Mach</a> e de código desenvolvido pela Apple &#8211; <a href="http://en.wikipedia.org/wiki/XNU" target="_blank">XNU</a>), sistemas considerados <a href="http://en.wikipedia.org/wiki/Unix-like" target="_blank">Unix-like</a>.</p>
<p><a href="http://en.wikipedia.org/wiki/BSD" target="_blank">Leia mais aqui</a>.</p>
<p><strong>Bash</strong><br />
Bourne-again shell, Bash, é um shell Unix escrito para o <a href="http://en.wikipedia.org/wiki/GNU_Project" target="_blank">projeto GNU</a>. É o padrão na maioria das distribuições GNU/Linux e também no Mac OS X e pode ser utilizado na maioria dos sistemas Unix-like. Foi portado para o Windows pelo projeto <a href="http://en.wikipedia.org/wiki/Cygwin" target="_blank">Cygwin</a>.</p>
<p><a href="http://en.wikipedia.org/wiki/Bourne-again_shell" target="_blank">Leia mais aqui</a>.</p>
<p>Reforçando: se você encontrar algo incorreto ou incompleto, por favor, comente.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lucashungaro.com/2008/05/10/developer-101-miscelanea/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Developer 101: Codificação de caracteres</title>
		<link>http://blog.lucashungaro.com/2008/02/12/developer-101-codificacao-de-caracteres/</link>
		<comments>http://blog.lucashungaro.com/2008/02/12/developer-101-codificacao-de-caracteres/#comments</comments>
		<pubDate>Tue, 12 Feb 2008 16:44:06 +0000</pubDate>
		<dc:creator>Lucas Húngaro</dc:creator>
				<category><![CDATA[Artigos]]></category>
		<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Developer 101]]></category>

		<guid isPermaLink="false">http://www.makemesimple.com/blog/2008/02/12/developer-101-codificacao-de-caracteres/</guid>
		<description><![CDATA[De tempos em tempos gosto de fazer uma &#8220;revisão geral&#8221; sobre conceitos que considero fundamentais para todo desenvolvedor de software. É natural que algumas coisas que estudamos acabem caindo no &#8220;limbo da memória&#8221; pela falta de uso, mas é sempre bom dar uma atualizada nesses conceitos, pois nunca se sabe quando eles serão necessário. Resolvi, [...]]]></description>
			<content:encoded><![CDATA[<p>De tempos em tempos gosto de fazer uma &#8220;revisão geral&#8221; sobre conceitos que considero fundamentais para todo desenvolvedor de software. É natural que algumas coisas que estudamos acabem caindo no &#8220;limbo da memória&#8221; pela falta de uso, mas é sempre bom dar uma atualizada nesses conceitos, pois nunca se sabe quando eles serão necessário.</p>
<p>Resolvi, então, iniciar a série &#8220;Developer 101&#8243; onde, à medida que faço minhas revisões, vou publicar um pouco sobre o assunto e listar links para mais recursos.</p>
<p>No primeiro artigo da série, falarei um pouco sobre algo fundamental e, geralmente, negligenciado por escolas e profissionais: a codificação de caracteres. Não é algo muito fácil de entender e muito dessa dificuldade deve-se às confusões e ambigüidades criadas pelas próprias empresas e entidades de padronização.</p>
<p><span id="more-93"></span></p>
<p>Em resumo, a codificação de caracteres define como caracteres (grafemas e símbolos utilizados em alfabetos e outros símbolos específicos) são representados internamente para armazenamento, processamento ou transmissão.</p>
<p>Para entender a codificação de caracteres, precisamos de três definições básicas:</p>
<p><strong>1. Repertório de caracteres (character repertoire ou character set)</strong></p>
<p>Um repertório de caracteres é um conjunto de caracteres distintos. Um repertório não tem qualquer ligação com dados computacionais.</p>
<p>Exemplo: o alfabeto grego, o conjunto de caracteres que uma criança chinesa aprenderá na terceira série, etc.</p>
<p><strong>2. Conjunto codificado de caracteres (coded character set)</strong></p>
<p>Um mapeamento um a um entre um caractere de um repertório e um código único. Esse código possui diversas nomenclaturas, como code point, code position ou code value, mas todos se referem à mesma coisa.</p>
<p>Exemplo de conjuntos: Braile, Unicode, I Ching.</p>
<p>Exemplo de mapeamento: o code point U+0041 representa a letra A no conjunto Unicode.</p>
<p><strong>3. Codificação de caracteres (character encoding)</strong></p>
<p>Um método (algoritmo) para apresentar caracteres em formato digital, mapeando códigos de caracteres para bytes. Existem diversos tipos de codificações. Algumas fixam o número de bytes de cada caractere, outros permitem caracteres multibytes variáveis.</p>
<p>Exemplos: ASCII (um byte por caractere), UTF-8 (multibyte variável).</p>
<p><strong>A ambigüidade</strong></p>
<p>O nome <em><strong>character set</strong></em> (conjunto de caracteres) é usado para se referir a repertórios, conjuntos codificados ou codificações. <em><strong>Charset</strong></em> também é bastante utilizado para se referir à codificação. Esse tipo de confusão torna o assunto bastante complexo, por isso é necessário entender bem os conceitos descritos mais acima.</p>
<p><strong>Juntando as partes</strong></p>
<p>Suponha que queremos representar todos os caracteres do <a href="http://pt.wikipedia.org/wiki/Alfabeto_latino" target="_blank">alfabeto latino</a> mais todos os símbolos especiais e <a href="http://pt.wikipedia.org/wiki/Diacr%C3%ADtico">diacríticos</a> utilizados na língua portuguesa. Esse é o nosso <em><strong>repertório de caracteres</strong></em>.</p>
<p>Para isso, criamos uma grande tabela com todos esses caracteres e, a cada um, atribuímos um código único. Temos agora um <em><strong>conjunto codificado de caracteres</strong></em>.</p>
<p>Em seguida vamos buscar uma forma eficiente de representar esses caracteres em um meio digital. O que vamos representar, na verdade, é o código de cada caractere.</p>
<p>Supondo que temos 1000 códigos, estabelecemos que cada código poderá ocupar até dois bytes de espaço, o que nos habilita a representar até 65536 códigos (2 bytes é igual a 16 bits, 2^16 é igual a 65536). Tomamos essa decisão pois com 1 byte conseguiríamos representar até 256 códigos. Além disso, é sempre uma medida de bom senso deixar &#8220;espaços livres&#8221; para caracteres especiais (para representar uma quebra de linha, por exemplo) e possíveis necessidades de compatibilidade. Temos, então, nossa própria <em><strong>codificação</strong></em>.</p>
<p>É importante notar que <strong>a idéia de caractere é diferente de sua representação</strong>. Por exemplo, o conceito da letra &#8220;A&#8221; é diferente do fonema em português ou da sequência de bytes no UTF-8.</p>
<p>Além disso, cada representação utiliza uma codificação diferente: no exemplo anterior, sons e bytes, respectivamente. Ou seja, <strong>uma codificação é uma maneira de representar um conceito</strong>.</p>
<p>É por esses motivos que a codificação de caracteres é tão importante: experimente salvar um arquivo em uma codificação (UTF-8, por exemplo) e tentar ler o mesmo arquivo utilizando outra codificação (ASCII, por exemplo). Grande parte, senão todo o conteúdo, será perdido.</p>
<p><strong>Exemplos</strong></p>
<p>Veja, na tabela abaixo, como fica a codificação (representação em bytes) dos caracteres A, א e 好 do conjunto codificado Unicode, nas codificações UTF-8, UTF-16 e UTF-32:</p>
<table id="bytes" border="1" cellpadding="1">
<tr>
<th></th>
<th class="bytes">A</th>
<th class="bytes">א</th>
<th class="bytes">好</th>
</tr>
<tr>
<th>Code point</th>
<td>U+0041</td>
<td>U+05D0</td>
<td>U+597D</td>
</tr>
<tr>
<th>UTF-8</th>
<td>41</td>
<td>D7 90</td>
<td>E5 A5 BD</td>
</tr>
<tr>
<th>UTF-16</th>
<td>00 41</td>
<td>05 D0</td>
<td>59 7D</td>
</tr>
<tr>
<th>UTF-32</th>
<td>00 00 00 41</td>
<td>00 00 05 D0</td>
<td>00 00 59 7D</td>
</tr>
</table>
<p><br/></p>
<p><strong>Recomendações para desenvolvimento</strong></p>
<p>Desde o início do projeto, utilize sempre o conjunto Unicode e, de preferência, a codificação (encoding) UTF-8.</p>
<p>Isso abrange o conjunto codificado e a codificação utilizados para salvar cada arquivo com texto (código-fonte, xml, arquivos para internacionalização etc), cabeçalhos HTTP e meta tags content-type em aplicações web, servidores web, armazenamento em banco de dados e conexões com o mesmo.</p>
<p><strong>Lembre-se</strong>: isso não é uma verdade universal. Utilizar Unicode e UTF-8 cobre a maioria dos casos, mas não todos.</p>
<p><strong>Finalizando</strong></p>
<p>Desde o início, preste atenção na codificação que você está utilizando ao desenvolver software, pois isso pode poupar muito tempo, evitando sérios problemas.</p>
<p>De forma alguma esse artigo é algo completo, é apenas o que consegui rever com algumas horas de leitura, exposto de forma simples. Aprofunde-se e, se encontrar algum erro ou inconsistência no que escrevi, por favor, me avise. <img src='http://blog.lucashungaro.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><strong>Veja também</strong></p>
<ul>
<li><a href="http://www.joelonsoftware.com/articles/Unicode.html" target="_blank">The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)</a></li>
<li><a href="http://www.sitepoint.com/blogs/2006/03/15/do-you-know-your-character-encodings/" target="_blank">Do you know your character encodings?</a></li>
<li><a href="http://www.w3.org/International/tutorials/tutorial-char-enc/" target="_blank">Tutorial: Character sets &amp; encodings in XHTML, HTML and CSS (W3C)</a></li>
<li><a href="http://betterexplained.com/articles/unicode/" target="_blank">Unicode and You</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.lucashungaro.com/2008/02/12/developer-101-codificacao-de-caracteres/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

