<?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>Blog do Xorna</title>
	<atom:link href="http://www.blogdoxorna.com.br/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.blogdoxorna.com.br</link>
	<description>Informação sem discrição</description>
	<lastBuildDate>Wed, 05 May 2010 03:44:03 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Atualização Motorola Milestone &#8220;OTA&#8221; 2.0.1 para 2.1 VIVO</title>
		<link>http://www.blogdoxorna.com.br/atualizacao-motorola-milestone-ota-2-0-1-para-2-1-vivo/</link>
		<comments>http://www.blogdoxorna.com.br/atualizacao-motorola-milestone-ota-2-0-1-para-2-1-vivo/#comments</comments>
		<pubDate>Wed, 05 May 2010 03:24:04 +0000</pubDate>
		<dc:creator>xorna</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[milestone]]></category>
		<category><![CDATA[motorola]]></category>
		<category><![CDATA[over the air]]></category>
		<category><![CDATA[vivo]]></category>

		<guid isPermaLink="false">http://www.blogdoxorna.com.br/?p=176</guid>
		<description><![CDATA[O post não está tão atrasado quanto a atualização do sistema, mas sim, foi liberada a atualização do Android do Motorola Milestone brasileiro para a versão 2.1 do Android. Com essa atualização vieram 2 pontos a tona: Primeiro, a promessa de um grande sistema que com certeza irá coabitar no ecossistema mobile com o iPhone [...]]]></description>
			<content:encoded><![CDATA[<p>O post não está tão atrasado quanto a atualização do sistema, mas sim, foi liberada a atualização do Android do Motorola Milestone brasileiro para a versão 2.1 do Android. Com essa atualização vieram 2 pontos a tona: Primeiro, a promessa de um grande sistema que com certeza irá coabitar no ecossistema mobile com o iPhone OS; Segundo, se você atualizou o seu Milestone com a versão Retail 2.0.1, o problema é tão seu que a VIVO não quer saber nem de deixar as outras pessoas te ajudarem. Vejam bem, eu comprei meu Motorola Milestone há pouco mais de um mês, com a versão 2.0 do Android, o sistema era bom, mas o consumo de bateria era absurdo, e tinha um que outro bugzinho chato. No blogdoandroid tem um post que explica <a title="Como atualizar seu Milestone Brasileiro sem esperar a Motorola" href="http://www.blogdoandroid.com/2010/03/como-atualizar-seu-milestone-brasileiro-sem-esperar-a-motorola/" onclick="javascript:TrackClick('http%3A%2F%2Fwww.blogdoandroid.com%2F2010%2F03%2Fcomo-atualizar-seu-milestone-brasileiro-sem-esperar-a-motorola%2F','Como+atualizar+seu+Milestone+Brasileiro+sem+esperar+a+Motorola')" target="_blank">como fazer o upgrade para o Android 2.0.1</a>, como eu não sou bobo de esperar por nossas amadas operadoras de telefonia, que são recordistas em reclamações no PROCON e morrer com o Android 2.0 no meu celular, eu fiz o tal do upgrade. Perfeito, fantástico, muito melhor do que a versão anterior, e ainda de quebra consegui instalar o Google Earth no aparelho de boa. Eis a queixa quanto o descaso da operadora com os usuários que fizeram o mesmo que eu: Fulano vai no blog da vivo e reclama: &#8220;Eu fiz a atualização do 2.0.1 e agora o OTA (Over the Air) e o aplicativo desktop acusam que não há atualização, podem me ajudar? bla bla bla&#8221;, e a dona claudia, responsável por responder os posts no blog da vivo (educadíssima, por sinal&#8230; não, não é sarcasmo, educada ela é), simplesmente responde que o &#8220;infeliz&#8221; em questão perdeu o direito a qualquer atualização. Até aí, tudo bem, eles não são obrigados a dar suporte por um update que eles ignoraram, mas o mais legal é o seguinte: Eu, xorna, sabendo que eu não tinha nenhum direito a atualização, consegui atualizar, e foi tão simples quanto atualizar antes, sem ajuda da dona claudia ou de ninguém mais. Basta fazer o mesmo processo descrito no post relatado anteriormente do blogdoandroid, só que ao invés de você baixar a versão 2.0.1, você baixa a versão 2.0 oficial da VIVO. Pronto, depois que você rebootar o seu celular, vai lá na atualização OTA e manda buscar, ele vai atualizar de boa, e eu, na melhor das intenções não querendo ver pobres almas sofrendo pelo &#8220;erro&#8221; de não querer esperar a VIVO liberar o 2.1 e atualizar o 2.0.1 para se livrar de incômodos, gentilmente respondi alguns comentários e posts tanto no blogdoandroid tanto quanto no blog da vivo informando o meu caso e dando meu relato para essas almas deixadas no limbo pela VIVO. No blogdoandroid meus comentários foram tão bem aceitos que o moderador do blog ME AGRADECEU pelo relato, sinal de que eu estava contribuindo com as pessoas que tem menos ímpeto para buscar soluções alternativas para seus problemas tecnológicos, já no blog da vivo foi totalmente o contrário, meus comentários foram apagados juntamente com uma boa parcela dos usuários 2.0.1 que estavam se queixando.</p>
<p>Agora, em um novo parágrafo, deixa eu ver se entendi: Vocês não dão suporte, mas o sistema é falho, você pode fazer o &#8220;rollback&#8221; e reinstalar o original, então por que ao menos não deixam os usuários serem ajudados por outras pessoas? Por que ao invés de eu estar escrevendo meu relato sobre a atualização OTA que eu achei fascinante e as funcionalidades &#8220;fodas&#8221; do aparelho, sem contar na prestatividade (até ontem) que eu via no blog da vivo, para escrever um artigo pra me queixar da VIVO, visto que se eu me queixar em comentário no blog não será aprovado pelo jeito. E postar aqui uma solução simples para um problema simples por que no canal oficial de comunicação da VIVO você não consegue atingir estes usuários por que você é bloqueado pelo desejo de manter essa idéia fechada de suporte. VIVO e claudia, vocês vendem um celular Android, OpenSource, baseado em linux, que eu posso baixar em qualquer repositório por ai, então, pra finalizar: <strong>&#8220;VIVO, open your mind&#8221;.</strong></p>
<p><strong>PS &#8211; </strong>Vale lembrar que nem todos &#8220;2.0.1 users&#8221; que eu conheço tiveram problemas na atualização.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.blogdoxorna.com.br/atualizacao-motorola-milestone-ota-2-0-1-para-2-1-vivo/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Comparações Case Sensitive em consultas Mysql</title>
		<link>http://www.blogdoxorna.com.br/comparacoes-case-sensitive-em-consultas-mysql/</link>
		<comments>http://www.blogdoxorna.com.br/comparacoes-case-sensitive-em-consultas-mysql/#comments</comments>
		<pubDate>Wed, 21 Oct 2009 02:08:55 +0000</pubDate>
		<dc:creator>xorna</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[case sensitive]]></category>
		<category><![CDATA[consulta]]></category>
		<category><![CDATA[query]]></category>

		<guid isPermaLink="false">http://www.blogdoxorna.com.br/?p=167</guid>
		<description><![CDATA[Buenas pessoal, tempão sem postar nada, a vida anda corrida demais, esse artigo está para ser escrito faz um tempão, e como ele é curto eu resolvi postar de uma vez ele. Nele vou lhes apresentar uma solução para realizarmos consultas case sensitive no Mysql.
Para começar, caso você utilize um campo de texto no Mysql [...]]]></description>
			<content:encoded><![CDATA[<p>Buenas pessoal, tempão sem postar nada, a vida anda corrida demais, esse artigo está para ser escrito faz um tempão, e como ele é curto eu resolvi postar de uma vez ele. Nele vou lhes apresentar uma solução para realizarmos consultas case sensitive no Mysql.</p>
<p>Para começar, caso você utilize um campo de texto no Mysql como VARCHAR, TEXT, etc, na hora de fazer uma consulta ele não considerará se seu texto comparado está exatamente igual ao texto da comparação quando falamos em Maiúsculas/Minúsculas. Então para resolver isso, devemos fazer um casting na comparação utilizando o operador <a title="Binary Operator - Mysql 5.0 Reference" href="http://dev.mysql.com/doc/refman/5.0/en/cast-functions.html#operator_binary" onclick="javascript:TrackClick('http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.0%2Fen%2Fcast-functions.html%23operator_binary','Binary+Operator+-+Mysql+5.0+Reference')" target="_blank">BINARY</a> do Mysql. De longe essa é a alternativa mais simples que eu encontrei, existem outras, que envolvem mudar o COLLATE durante a consulta, mas não me pareceu elegante nem muito promissor.</p>
<p>A função do operador BINARY é muito simples, ele transforma todo o texto passado pra ele em código binário, logo &#8220;x&#8221; em binário é totalmente diferente de &#8220;X&#8221;. Abaixo alguns exemplos:</p>
<pre>    SELECT "x" = "X";
    retorna 1
    SELECT binary "x" = "X"
    retorna 0</pre>
<p>É claro que além dessa comparação simples ele é aceito na comparação LIKE:</p>
<pre>    SELECT binary "xorna" LIKE "%X%"
    retorna 0
    SELECT binary "Xorna" LIKE "%X%"
    retorna 1</pre>
<p>É simples, funciona, eu diria que isso é um <strong>workaround elegante</strong> (se é que existe isso).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.blogdoxorna.com.br/comparacoes-case-sensitive-em-consultas-mysql/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Mini manual VIM (Vi IMproved)</title>
		<link>http://www.blogdoxorna.com.br/mini-manual-vim-vi-improved/</link>
		<comments>http://www.blogdoxorna.com.br/mini-manual-vim-vi-improved/#comments</comments>
		<pubDate>Sun, 05 Jul 2009 23:02:49 +0000</pubDate>
		<dc:creator>xorna</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Software Livre]]></category>
		<category><![CDATA[programação]]></category>
		<category><![CDATA[vim]]></category>

		<guid isPermaLink="false">http://www.blogdoxorna.com.br/?p=152</guid>
		<description><![CDATA[Buena moçada, vou deixar esfriando o artigo sobre testes unitários, e vou refatorar um artigo de um ano atrás. O artigo é sobre o VIM (Vi IMproved), este editor (fantástico diga-se de passagem) que tenho usado pouco nos últimos tempos, agora é a minha nova escolha para desenvolvimento, dado que cansei de usar IDEs pesadas [...]]]></description>
			<content:encoded><![CDATA[<p>Buena moçada, vou deixar esfriando o artigo sobre testes unitários, e vou refatorar um artigo de um ano atrás. O artigo é sobre o VIM (Vi IMproved), este editor (fantástico diga-se de passagem) que tenho usado pouco nos últimos tempos, agora é a minha nova escolha para desenvolvimento, dado que cansei de usar IDEs pesadas e que pouca ajuda têm me dado. Usei meu antigo artigo como base de estudo dos principais comandos, e agora monto um pequeno manual para eu mesmo usar e quem quiser também.</p>
<p>O VIM é um editor de texto que foi baseado no &#8220;vi&#8221;, e é disponibilizado para uma grande quantidade de plataformas (Linux, *BSD, Windows, BeOS, AmigaOS, MacOS, etc). No linux e mac os x normalmente ele vem instalado na distribuição, caso não esteja instalado e você deseja instalar, basta baixar a última versão dele em http://www.vim.org.</p>
<p>O VIM utiliza buffers, ou seja, representações do texto em memória, quando um arquivo é aberto, ele é carregado em memória, e todas as alterações feitas nele afetam apenas o buffer (arquivo em memória) e não no arquivo original, até que o mesmo seja salvo. Caso você abra o VIM  sem especificar um arquivo, ele cria um buffer vazio em memória sem nome definido.</p>
<p>O VIM é um software simples, mas metódico, exigindo perícia e um pequeno tempo para o usuário gostar dele, quando o usuário gosta, é paixão eterna. Se o mesmo não consegue se adaptar, ele dificilmente abre novamento o editor.</p>
<p><strong>O VIM possui vários modos de funcionamento, abaixo vou listá-los:</strong></p>
<ul>
<li>INSERT: o modo &#8220;insert&#8221; é utilizado para inserir e modificar o conteúdo do arquivo, neste modo, tudo que é feito é gravado somente em memória;</li>
<li>VISUAL: o modo &#8220;visual&#8221; é utilizado para selecionar textos e fazer operações sobre esta seleção, como copiar, recortar, colar, excluir, navegar entre o início e o fim de uma linha;</li>
<li>Linha de comando: neste modo é possível executar diversos comandos do VIM ou até mesmo da shell, com os comandos do VIM podemos fazer muitas coisas, como gravar buffers, abrir arquivos, navegar entre arquivos abertos, procurar por trechos de texto e fazer substituição de textos com expressões regulares, e também executar tarefas em repetição de forma automatizada; </li>
<li>Nenhum modo: é como o VIM abre, a partir dele é possível navegar pelo arquivo aberto com os cursores Home/End, PageUp/PageDown ou até mesmo utilizar comandos do VIM.</li>
</ul>
<p><strong>Comandos do VIM</strong></p>
<p>Vamos começar pelo final, como fechar um arquivo</p>
<pre>
	# Se você estiver em modo INSERT, tecle ESC para sair deste modo;
	# Digite ":" para entrar em modo Linha de Comando;
	# Digite "q" (quit) e tecle ENTER para executar o comando;
	# nota: se o arquivo estiver protegido contra gravação e você fez alguma modificação,
       após digitar "q", digite "!" ficando "q!" e depois tecle ENTER para executar.
</pre>
<p>Bom, assim melhor né, agora você já sabe fechar o VIM <img src='http://www.blogdoxorna.com.br/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> . Agora por segundo porém não menos importante, vamos aprender a inserir os textos no nosso arquivo:</p>
<pre>
	# Para entrar em modo INSERT, digite "i" ou "a" (também funciona, herança do "vi");
	# Digite a vontade;
	# Tecle ESC para sair do modo INSERT;
</pre>
<p>Edição de texto (Recortar/Copiar/Colar)</p>
<pre>
	# Se você estiver em modo INSERT, tecle ESC para sair deste modo;
	# Digite "v" para entrar em modo VISUAL;
	# Faça a seleção do texto utilizando os cursores;
	# Digite "d" (delete) para recortar o texto (movê-lo para a memória);
	# Ou digite "y" (yank) para copiar o texto (copiá-lo para a memória);
	# Escolha o lugar onde quer copiá-lo;
	# Digite "p" para inserir o texto a partir da posição do cursor;
	# Digite "P" para inserir o texto antes da posição do cursor.
</pre>
<p>A partir daqui estamos no modo Linha de Comando, ou seja, tecle ESC se você estiver em modo INPUT ou VISUAL:</p>
<p>Trabalhando com os arquivos/buffers</p>
<pre>
	# :e "arquivo" - Abre um arquivo, criando um novo buffer e abrindo ele em uma nova "tela";
	# :buffers - Lista todos os arquivos abertos;
	# :b "arquivo" - Salta para outro arquivo aberto, use TAB para autocompletar os nomes dos arquivos abertos;
	# :bn - Salta para o próximo arquivo aberto;
	# :bp - Salta para o arquivo anterior aberto;
	# :w - Grava o buffer atual com o nome do arquivo aberto;
	# :wq - Grava o buffer atual com seu nome, e fecha o VIM;
	# :wqa - Grava todos os buffers em seus determinados arquivos e fecha o VIM.
</pre>
<p>Navegando dentro do arquivo aberto (estes comandos se equivalem aos do cursor de seu teclado, a diferença é que eles não funcionam em qualquer modo, somente em Linha de Comando):</p>
<pre>
	# "h" - Esquerda
	# "l" - Direita
	# "k" - Cima
	# "j" - Baixo
</pre>
<p>Navegar entre as linhas:</p>
<pre>
	# "gg" - Move o cursor para a primeira linha do arquivo;
	# :0 - Move o cursor para a primeira linha do arquivo;
	# "G" - Move o cursor para a última linha do arquivo;
	# :$ - Move o cursor para a última linha do arquivo;
	# "*" - Salta para a próxima ocorrência da palavra sob o cursor;
	# '' - Volta para a linha anterior ao ultimo salto;
	# "ma" - Cria um marcador de linha chamado "a";
	# "`a" - Move o cursor para a marca "a";
	# "'a" - Move o cursor para a linha que contém a marca "a";
	# " - Move o cursor para o caracter anterior ao último salto.
</pre>
<p>Navegação na linha:</p>
<pre>
	# 0 - Move o cursor para o inicio da linha;
	# $ - Move o cursor para o final da linha.
</pre>
<p>Apagando texto:</p>
<pre>
	# "dd" - Apaga a linha atual;
	# "d" "CIMA" - Apaga a linha atual e anterior;
	# "d" "BAIXO" - Apaga a linha atual e seguindo;
	# "d" "ESQUERDA" - Apaga o caracter a esquerda;
	# "d" "DIREITA" - Apaga o caracter a direita;
	# "x" - Apaga o caracter a direita;
	# "d0" - Apaga até o principio da linha;
	# "d$" - Apaga até o final da linha;
	# "dw" - Apaga a palavra seguinte;
	# "db" - Apaga a palavra anterior;
	# "d'a" - Apaga até a linha com o marcador "a";
	# "d`a" - Apaga até o caracter com o marcador "a".
</pre>
<p>Multiplicadores:</p>
<p>Muitos comandos podem ser precedidos de um multiplicador, ou seja, podem ser executados &#8220;n&#8221; vezes, esse número de repetições deve ser inserido antes do comando desejado e só é apresentado na tela (canto inferior direito) se ativarmos a opção &#8220;showcmd&#8221; (:set showcmd). Abaixo vou citar alguns exemplos:</p>
<pre>
	# 20 "BAIXO" - Move o cursor 20 linhas para baixo;
	# 4 dd - Apaga as 4 linhas seguintes, incluindo a atual;
	# 4 d "DIREITA" - Apaga os 6 próximos caracteres a direita.
</pre>
<p>Busca de expressões dentro do texto:</p>
<pre>
	# "/expressão" - Procurar para frente;
	# "?expressão" - Procurar para trás;
	# "ENTER" - Ir para a primeira ocorrência;
	# "n" - Ir para próxima ocorrência;
	# "N" - Ir para o ocorrência anterior.
</pre>
<p>Expressões Regulares:</p>
<pre>
	# "." - Representa qualquer caracter simples exceto mudança de linha;
	# " " - Representa o caracte que se segue;
	# "*" - Representa 0 ou mais ocorrências do caracter precedente;
	# "[]" - Representa um dos caracteres incluidos;
	# "^" - Indica que o caracter seguinte deve estar no inicio da linha;
	# "$" - Representa caracteres no final da linha;
	# "[^]" - Representa qualquer coisa exceto o que vem depois do "^";
	# "[-]" - Representa um intervalo de caracteres.
</pre>
<p>Alguns exemplos de expressões regulares:</p>
<pre>
	# "c.pe" - Representa cope, cape, caper, ...;
	# "c.pe " - Representa c.pe, c.per, ...;
	# "sto*p" - Representa stp, stop, stoop, ...;
	# "car.*n" - Representa carton, cartoon, carmen, ...;
	# "xyz.*" - Representa xyz até o final da linha;
	# "^The" - Representa qualquer coisa que comece com The;
	# "atime$" - Representa qualquer coisa terminado com atime;
	# "^Only$" - Representa qualquer linha que contenha somente Only;
	# "b[aou]rn" - Representa barn, born e burn;
        # "Ver[D-F]" - Representa VerD, VerE e VerF;
        # "Ver[^1-9]" - Representa Ver seguido de um não digito;
      	# "the[ir][re]" - Representa their, theie, therr e there;
	# "[A-Za-z][A-Za-z]*" - Representa qualquer palavra;
</pre>
<p>Substituição de Textos:</p>
<pre>
	# :%s/substituir isto/por isto/g
</pre>
<p>Quando utilizarmos  o caracter &#8220;%&#8221; antes de &#8220;s&#8221; estamos dizendo que a substituição deve ser feita em todas as ocorrências da palavra buscada, podemos especificar um intervalo também:</p>
<pre>
	# :linha1,linha3s/substituir isto/por isto/g
</pre>
<p>Do modo que fizemos agora, ele vai substituir somente as ocorrências entre a linha 1 e linha 3. Se utilizarmos &#8220;/gc&#8221; ao invés de &#8220;/g&#8221;, é necessário a confirmação antes da substituição de cada ocorrência. Enfim, as expressões utilizadas são delimitadas pelo caractere &#8220;/&#8221;, ou seja, o que vier entre a primeira e a segunda &#8220;/&#8221; representa a expressão a procurar e ser substituida, o que vier entre a segunda e terceira representa a expressão que vai substituir a primeira. Se a segunda expressão ficar vazia, as ocorrências da primeira serão eliminadas. Exemplos:</p>
<pre>
	# :1,$s/the/The/g - Substitui the por The desde a primeira linha até a última;
	# :%s/the/The/g - Substitui the por The desde a primeira linha até a última;
	# :%s/the/The/gc - Substitui the por The em todo o documento pedindo confirmação;
	# :.,5s/^.*//g - Apaga todas as linhas entre a atual e a 5ª linha;
	# :'a,.s/^..//g - Apaga os dois primeiros caracteres das linhas entre a marca "a" e a atual;
	# :%s/$/ < -/g - Acrescenta "<-" ao final de cada linha do documento;
</pre>
<p>O caracter "&#038;" pode ser usado para representar a expressão buscada quando utilizado na segunda expressão, de modo a incluir a mesma na substituição, exemplo:
</pre>
<pre>
	# :%s/help/&#038;ing/g - Substitui help por helping
	# :%s/ */&#038;&#038;/g - Duplica o numero de espaços entre as palavras
	# :%s/and/&#038;/g - Para inserir o próprio caracter "&#038;" usamos "&#038;"
</pre>
<p>Registros</p>
<p>Podem ser utilizados para automatizar tarefas repetitivas, como inserir ou editar tags html, para utilizá-los você deve sair do modo INSERT, pressione &#8220;q&#8221;, depois o caracter que será o nome do registro no qual você queira guardar a ação, por exemplo &#8220;a&#8221;. Depois disso vai aparecer &#8220;recording&#8221; na parte inferior do terminal, de agora em diante, tudo que que for feito será gravado no registro &#8220;a&#8221;, para acabar de gravar é só sair do modo INSERT e pressionar &#8220;q&#8221; novamente, a palavra &#8220;recording&#8221; deve desaparecer. Para executar o registro basta pressionar &#8220;@&#8221; e após isso o caracter correspondente ao registro, no nosso exemplo &#8220;a&#8221;.</p>
<pre>
	# "q" - Inicia e finaliza a gravação de um registro;
	# "@" - Executa um determinado registro.
</pre>
<p>Além de gravar sequências de comando, quando você copia ou recorta textos no VIM, está jogando este conteúdo para o registro, desta forma você pode especificar qual registro quer usar em cada caso. Para isso basta você indicar qual registro usar. Referindo-se a ele utilizando o caracter &#8220;, desta forma, para se referir ao registro &#8220;a&#8221;, utilize &#8216;&#8221;a&#8217;. Exemplos:</p>
<pre>
	# "ay - Copia o texto selecionado para o registro "a";
	# "ad - Remove o texto selecionado e o coloca no registro "a";
	# "ap - Cola o conteúdo do registro "a" para depois do cursor.
</pre>
<p>Janelas:</p>
<pre>
	# :sp - Cria uma nova janela com o mesmo arquivo aberto;
	# :sp arquivo - Abre uma nova janela com o arquivo especificado;
	# :q - Fecha a janela atual, não fecha se for a unica janela com o arquivo aberto e o mesmo não estiver gravado;
	# :q! - Fecha a janela atual de qualquer forma (Forçado);
	# :qa - Fecha todas as janelas e sai, pedindo confirmação;
	# CTRL "ww" - Pula para a janela seguinte.
</pre>
<p>Bom, por enquanto é isso, em breve estarei postando um artigo sobre a configuração do VIM, coisa que estou explorando agora e não tenho muito a adicionar, qualquer coisa visitem a documentação do VIM online em  http://vimdoc.sourceforge.net/.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.blogdoxorna.com.br/mini-manual-vim-vi-improved/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Manipulação de diretórios simples e fácil de usar com a classe X_Dir</title>
		<link>http://www.blogdoxorna.com.br/manipulacao-de-diretorios-simples-e-facil-de-usar-com-a-classe-x_dir/</link>
		<comments>http://www.blogdoxorna.com.br/manipulacao-de-diretorios-simples-e-facil-de-usar-com-a-classe-x_dir/#comments</comments>
		<pubDate>Mon, 15 Jun 2009 00:56:54 +0000</pubDate>
		<dc:creator>xorna</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[classe]]></category>
		<category><![CDATA[desenvolvimento php]]></category>
		<category><![CDATA[exemplos]]></category>
		<category><![CDATA[manipulação de diretórios]]></category>
		<category><![CDATA[Software Livre]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://www.blogdoxorna.com.br/?p=141</guid>
		<description><![CDATA[Buenas pessoal, como muitos programadores eu cansei de ficar me esquentando cada vez que precisava manipular algum diretório, então após algumas lidas, alguns testes, montei uma classe que trabalha bem, claro que ela trabalha bem em sistema Unix Like, não perdi meu tempo e nem tenho como portar no windows, então abaixo segue a classe:
&#60;?php
/**
 [...]]]></description>
			<content:encoded><![CDATA[<p>Buenas pessoal, como muitos programadores eu cansei de ficar me esquentando cada vez que precisava manipular algum diretório, então após algumas lidas, alguns testes, montei uma classe que trabalha bem, claro que ela trabalha bem em sistema Unix Like, não perdi meu tempo e nem tenho como portar no windows, então abaixo segue a classe:</p>
<pre>&lt;?php
/**
 * Classe para manipulação de diretórios
 * Exclusivo para uso em sistemas Unix Like
 * Sem vontade para portar para plataforma MS
 * @author André Gustavo Espeiorin
 * @version 1.0
 * @package X
 */
class X_Dir
{
	/**
	 * Metodo Responsavel pela criação de diretórios
	 * @param $location - onde a pasta deve ser criada
	 * @param $name - nome da mesma, evite o uso de caracteres especiais e espaços em branco
	 * @param $chmod - permissão para o acesso a nova pasta
	 * @param $recursive - criar recursivamente?
	 * @return &lt;string&gt; caminho da pasta criada
	 */
	public static function create($location, $name, $chmod=0777, $recursive=true)
	{
		$path = $location . $name;
		/**
		 * Supressão de erro não aconselhada, porém caso a pasta exista
		 * o PHP lançará um aviso, coisa que nao queremos caso haja
		 * redirecionamento após a criação da mesma
		 */
		if( @mkdir( $path, $chmod, $recursive ) ){
			chmod( $path, $chmod );
			return $path . '/';
		} else{
			if( is_writable($path) &amp;&amp; is_readable($path) ){
				return $path;
			}else{
				echo 'erro';
			}
		}
	}

	/**
	 * Método criado para apagar um arquivo unicamente, e não um diretório
	 * Pode apagar arquivos e links simbólicos
	 * @param $fileName - Nome do arquivo
	 * @return &lt;boolean&gt;
	 */
	public static function removeFile($fileName)
	{
		if ( is_file($fileName) || is_link($fileName) ) {
        	return unlink($fileName);
    	}else{
    		return false;
    	}
	}

	/**
	 * Método responável por remover um diretório, é capaz de remover
	 * um diretório completo, incluindo subdiretórios e arquivos por meio
	 * da recursividade.
	 * @param $dirname - nome do diretório como seu caminho completo no Sistema de Arquvios
	 * @return &lt;boolean&gt;
	 */
	public static function remove($dirname)
	{
		// Checa se existe o diretório
    	if ( !file_exists($dirname) ) {
        	return false;
    	}

    	/**
    	 * Caso encontrar um arquivo em meio a recursividade, ele o removerá
    	 * tratando ele como um arquivo e não diretório
    	 */
    	if (is_file($dirname) || is_link($dirname)) {
        	return self::removeFile($dirname);
    	}

    	/**
    	 * Abre o diretório chamado como um objeto dir
    	 * Faz a iteração no mesmo, lendo seu interior
    	 * e chamando recursivamente o mesmo até eliminar
    	 * todo o conteúdo do diretório
    	 * @var &lt;object&gt; diretório
    	 */
    	$dir = dir($dirname);
   		while (false !== $entry = $dir-&gt;read()) {
        	// Pula os ponteiros
        	if ($entry == '.' || $entry == '..') {
          	  continue;
        	}
        	// Chama novamente a função
    	    self::remove( $dirname . DIRECTORY_SEPARATOR . $entry );
    	}
    	// Fechamos nosso objeto dir
   		$dir-&gt;close();
   		// Finalmente remove nosso diretório
    	return rmdir($dirname);
	}

	/**
	 * Este método é utilizado na necessidade de renomear um diretório
	 * Utiliza recursividade para sub-diretórios e funcionou muito
	 * bem em todos os testes
	 * @param $path - Caminho até a localização do diretório a ser renomeado
	 * @param $oldDir - Nome do diretório a ser renomeado
	 * @param $newDir - Novo Nome para o diretório
	 * @return &lt;boolean&gt;
	 */
	public static function rename($path, $oldDir, $newDir)
	{
		// Checa se o diretório existe
    	if (!file_exists($path . $oldDir)) {
        	return false;
    	}   	

    	// Cria o novo diretório
    	$new = self::create($path, $newDir);

    	/**
    	 * Abre o velho diretório e itera ele, transferindo todos os arquivos para o novo
    	 * Os subdiretórios são transferidos do mesmo modo, por meio de recursividade
    	 * @var &lt;object&gt; dir
    	 */
    	$dir = dir($path . $oldDir);
   		while (false !== $entry = $dir-&gt;read()) {
        	// Pula os Ponteiros
        	if ($entry == '.' || $entry == '..') {
          	  continue;
        	}
        	// Se o conteudo for um diretório, recursividade!
        	if( is_dir($new . $entry) ){
        		self::rename($path . $oldDir, $entry, $path . $new . $entry );
        	}
        	// Aqui é feita a transferencia de arquivos
        	rename( $path . $oldDir . '/' . $entry, $new . $entry );
    	}
    	// Fecha o objeto
   		$dir-&gt;close();
   		// Remove o diretório antigo
   		self::remove( $path . $oldDir );
   		return true;
	}
}</pre>
<p>Aqui vai um pequenino exemplo de como isso pode facilitar sua vida:</p>
<pre># vamos criar um diretório
echo X_Dir::create('/var/www/arigos/', 'aaa');
# agora outro dele
echo X_Dir::create('/var/www/arigos/aaa/', 'qwe1');
# antes do próximo passo, crie vários arquivos dentro das pastas... algo como:
$ touch aaa/teste.wtf
$ touch aaa/teste.sql
$ touch aaa/teste.php
$ touch aaa/qwe1/teste.php
$ touch aaa/qwe1/teste.asd
$ touch aaa/qwe1/teste.123
# agora renomeamos a pasta pai
echo X_Dir::rename('/var/www/arigos/', 'aaa', 'bbb');
# removemos um unico arquivo
echo X_Dir::removeFile('/var/www/arigos/bbb/qwe1/teste.123');
# e apagamos por completo tudo!
echo X_Dir::remove('/var/www/arigos/bbb/');</pre>
<p>Muito simples, os &#8220;echos&#8221; que estão aí são somente para ver o que ta retornando, pois agora sua obrigação é testar se ta criando, renomenando e apagando&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.blogdoxorna.com.br/manipulacao-de-diretorios-simples-e-facil-de-usar-com-a-classe-x_dir/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Classe para buscar dados de GeoLocalização</title>
		<link>http://www.blogdoxorna.com.br/classe-para-buscar-dados-de-geolocalizacao/</link>
		<comments>http://www.blogdoxorna.com.br/classe-para-buscar-dados-de-geolocalizacao/#comments</comments>
		<pubDate>Thu, 28 May 2009 01:15:56 +0000</pubDate>
		<dc:creator>xorna</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Software Livre]]></category>
		<category><![CDATA[geolocation]]></category>
		<category><![CDATA[classe]]></category>
		<category><![CDATA[free api]]></category>
		<category><![CDATA[geo localização]]></category>
		<category><![CDATA[simples]]></category>
		<category><![CDATA[web services]]></category>

		<guid isPermaLink="false">http://www.blogdoxorna.com.br/?p=135</guid>
		<description><![CDATA[Buenas pessoal, depois de um tempo meio sem tempo pra postar, mudança nas prioridades e tudo mais, o Doctrine acabou ficando para um pouco depois, mas para cortar o silêncio que aqui se instaurou, vou aproveitar e postar uma classe na qual montei agora, muito simples, usa a API de um webservice gratuito de busca [...]]]></description>
			<content:encoded><![CDATA[<p>Buenas pessoal, depois de um tempo meio sem tempo pra postar, mudança nas prioridades e tudo mais, o Doctrine acabou ficando para um pouco depois, mas para cortar o silêncio que aqui se instaurou, vou aproveitar e postar uma classe na qual montei agora, muito simples, usa a API de um webservice gratuito de busca de dados de Geolocalização, bem simples mas pra mim ficou eficiente e rápido, espero que gostem.</p>
<pre>&lt;?php
/**
 * Classe para busca de dados de geolocalização
 * utiliza um webservice gratuito do iplocationtools.com
 * utilizando o formato json como padrão, por ser mais leve e ágil para tratar
 * @author André Gustavo Espeiorin &lt;andregustavodocaqui@gmail.com&gt;
 * @version 1.0
 * @package X
 *
 */
class X_Location
{
	/**
	 * Formato Padrão
	 * @var &lt;string&gt;
	 * @access private
	 */
	private $_format = 'json';

	/**
	 * Endereço inicial para a pesquisa
	 * @var &lt;string&gt;
	 * @access private
	 */
	private $_queryUrl = 'http://iplocationtools.com/ip_query.php?ip=';

	/**
	 * Objecto de consulta do CURLs
	 * @var &lt;object&gt;
         * @access private
	 */
	private $_ch;

	/**
	 * Dados tratados
	 * @var &lt;array&gt;
	 * @access private
	 */
	private $_data;

	/**
	 * Construtor da Classe, recebe o parrametro &lt;string&gt; format
	 * Caso o paramêtro não seja passado, usa o padrão do sistema
	 * @return &lt;void&gt;
	 */
	public function __construct()
	{
		$this-&gt;_ch = curl_init();
	}

	/**
	 * Método que faz a consulta e tratamento dos dados, recebe o ip
	 * a ser consultado como parâmetro
	 * @param $ip
	 * @return &lt;boolean&gt;
	 */
	public function getData($ip)
	{
		if( isset($ip) &amp;&amp; !empty($ip) ){
			curl_setopt($this-&gt;_ch, CURLOPT_URL, $this-&gt;_queryUrl . $ip . '&amp;output=' . $this-&gt;_format);
			curl_setopt($this-&gt;_ch, CURLOPT_RETURNTRANSFER, 1);
			curl_setopt($this-&gt;_ch, CURLOPT_TIMEOUT, 15);

			$request = curl_exec($this-&gt;_ch);
			if( isset($request) &amp;&amp; !empty($request) ){
				$this-&gt;_data = json_decode($request, true);
				return true;
			} else{
				return false;
			}
		} else{
			return false;
		}
	}

	/**
	 * Método utilizado para pegar os dados de _data, caso o keyName seja ignorado, retorna o array inteiro
	 * Aqui eu listo as chaves que podem ser buscadas:
	 * -Ip
	 * -Status
	 * -CountryCode
	 * -CountryName
	 * -RegionCode
	 * -RegionName
	 * -City
	 * -ZipPostalCode
	 * -Latitude
	 * -Longitude
	 * @param $paramName
	 * @return &lt;array&gt; | &lt;string&gt;
	 */
	public function get($keyName='')
	{
		if( isset($keyName) &amp;&amp; !empty($keyName) ){
			return $this-&gt;_data[$keyName];
		}else{
			return $this-&gt;_data;
		}
	}

}</pre>
<p>Show, se a classe parece simples, imagine seu uso, abaixo pequeno exemplo:</p>
<pre>$gl = new X_Location();
$gl-&gt;getData('seuIp');
echo $gl-&gt;get('City');
// ou
var_dump($gl-&gt;get());</pre>
<p>Bom, espero que seja útil a todos, agradeço sua visita!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.blogdoxorna.com.br/classe-para-buscar-dados-de-geolocalizacao/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Doctrine ORM, Parte II</title>
		<link>http://www.blogdoxorna.com.br/doctrine-orm-parte-ii/</link>
		<comments>http://www.blogdoxorna.com.br/doctrine-orm-parte-ii/#comments</comments>
		<pubDate>Wed, 29 Apr 2009 04:02:07 +0000</pubDate>
		<dc:creator>xorna</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Padrões]]></category>
		<category><![CDATA[Software Livre]]></category>
		<category><![CDATA[banco de dados]]></category>
		<category><![CDATA[conexão]]></category>
		<category><![CDATA[Configuração]]></category>
		<category><![CDATA[Doctrine ORM]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://www.blogdoxorna.com.br/?p=123</guid>
		<description><![CDATA[Bom, como prometido, o segundo capitulo da Saga &#8220;Doctrine ORM&#8221; vou abordar questões simples como o download da ferramenta, &#8220;instalação&#8221;, e configuração da mesma, deixando a primeira aplicação para o terceiro post, devido sua extensão.
Para baixa o Doctrine ORM é muito simples, basta acessar a página de download oficial, e selecionar a versão desejada, eu [...]]]></description>
			<content:encoded><![CDATA[<p>Bom, como prometido, o segundo capitulo da Saga &#8220;Doctrine ORM&#8221; vou abordar questões simples como o download da ferramenta, &#8220;instalação&#8221;, e configuração da mesma, deixando a primeira aplicação para o terceiro post, devido sua extensão.</p>
<p>Para baixa o Doctrine ORM é muito simples, basta acessar a <a title="Dotrine ORM official download site" href="http://www.doctrine-project.org/download" onclick="javascript:TrackClick('http%3A%2F%2Fwww.doctrine-project.org%2Fdownload','Dotrine+ORM+official+download+site')" target="_blank">página de download oficial</a>, e selecionar a versão desejada, eu aconselho a baixar a última versão stable (atualmente 1.1.0). Após o download, descompacte o arquivo, para o uso em produção você vai precisar somente da pasta lib e de seu conteúdo é claro, tomando como exemplo o ubuntu, vamos criar uma aplicação chamada doctrineTest em /var/www (com as devidas permissões de escrita na pasta):</p>
<pre>$ cd /var/www
$ mkdir doctrineTest
# vá até a pasta Dotrine-1.x.x
$ cp -R lib /var/www/doctrineTest
# aproveita e cria o index.php
$ touch index.php
# vamos criar uma classe para autoload
$ cd /var/www/lib
$ mkdir Util
$ touch Autoload.class.php</pre>
<p>Justo, agora já temos o inicio de nossa aplicação salva no diretório de site do apache, vamos começar a configuração e a entender tudo isso. Abra seu editor preferido (eclipse no meu caso), abra o arquivo lib/util/autoload.class.php, vamos fazer um pequeno truque para nos livrarmos dos includes.</p>
<pre>class Util_Autoload
{
    public function autoload($class)
    {
        $path = str_replace('_', '/', $class) . '.php';
        require_once($path);
        return true;
    }
}</pre>
<p>Feito isso, vamos ao nosso index.php, primeiro vamos configurar nosso autoload <img src='http://www.blogdoxorna.com.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<pre>/* Adicionando a pasta libs ao include_path do php */
$include_path  = get_include_path();
$include_path .= PATH_SEPARATOR . dirname(__FILE__) . '/lib';
set_include_path($include_path);
unset($include_path);

/* registrando nossa classe autoload */
require_once(dirname(__FILE__) . '/lib/Util/Autoload.class.php');
spl_autoload_register(array('Util_Autoload', 'autoload'));</pre>
<p>Legal, a essa altura qualquer classe que quisermos carregar dentro de libs estará disponível, agora vamos abrir nossa primeira conexão com o banco de dados (no exemplo MySQL):</p>
<pre>$dsn = 'mysql://username:password@127.0.0.1/doctrineTest';
$manager = Doctrine_Manager::getInstance();
$conn = $manager-&gt;connection($dsn, 'master');
</pre>
<p>Bom, agora já conseguimos conectar a aplicação com o banco de dados, para finalizarmos este capitulo vamos fazer um pequeno teste de conexão, certifique-se que o usuário no qual você está conectando tenha permissões de CREATE no banco de dados. Vamos criar uma tabela e depois inserir dados nela:</p>
<pre>
$conn-&gt;export-&gt;createTable('teste', array('nome' =&gt; array('type' =&gt; 'string')));
$conn-&gt;execute('INSERT INTO teste (nome) VALUES (?)', array('blogdoxorna'));</pre>
<p>Legal, tabela criada, uma linha inserida, agora vamos ler pra ver se é verdade que tá gravando (claro, comentando a linha do create pra não dar pau!) <img src='http://www.blogdoxorna.com.br/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<pre>$st = $conn-&gt;prepare('SELECT * FROM teste');
$st-&gt;execute();
$resultset = $st-&gt;fetchAll();
var_dump($resultset);</pre>
<p>O que deve aparecer aí no browser é mais ou menos isso:</p>
<pre>
array
  0 =>
    array
      'nome' => string 'blogdoxorna' (length=11)
      0 => string 'blogdoxorna' (length=11)
</pre>
<p>Bom, encerro aqui o meu post, e lembrando que se eu sair vivo do #NOB #TwitteirosDeJoinville no Biergarten, eu posto a terceira parte ainda hoje 29/04 a noite <img src='http://www.blogdoxorna.com.br/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.blogdoxorna.com.br/doctrine-orm-parte-ii/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Doctrine ORM, Parte I</title>
		<link>http://www.blogdoxorna.com.br/doctrine-orm-parte-i/</link>
		<comments>http://www.blogdoxorna.com.br/doctrine-orm-parte-i/#comments</comments>
		<pubDate>Tue, 28 Apr 2009 02:53:23 +0000</pubDate>
		<dc:creator>xorna</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Padrões]]></category>
		<category><![CDATA[Software Livre]]></category>
		<category><![CDATA[Active Record]]></category>
		<category><![CDATA[desenvolvimento php]]></category>
		<category><![CDATA[Doctrine Query Language]]></category>
		<category><![CDATA[Dotrine ORM]]></category>
		<category><![CDATA[DQL]]></category>
		<category><![CDATA[Mapeamento Objeto Relacional]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://www.blogdoxorna.com.br/?p=120</guid>
		<description><![CDATA[Eram meados de Outubro/2008 quando eu, que na época trabalhava em Brasília, no ministério da educação recebi um email com um convite interessante, participar do CONAPHP (Congresso Nacional de PHP), evento que seria realizado dentro do CONISL (Congresso Internacional de Software Livre), após ver a grade de palestras me interessei muito, pois lá estariam bons [...]]]></description>
			<content:encoded><![CDATA[<p>Eram meados de Outubro/2008 quando eu, que na época trabalhava em Brasília, no ministério da educação recebi um email com um convite interessante, participar do <a title="Congresso Nacional de PHP" href="http://www.conaphp.prophp.com.br/" onclick="javascript:TrackClick('http%3A%2F%2Fwww.conaphp.prophp.com.br%2F','Congresso+Nacional+de+PHP')" target="_blank">CONAPHP (Congresso Nacional de PHP)</a>, evento que seria realizado dentro do <a title="Link para artigo CONISLI na Wikipedia" href="http://pt.wikipedia.org/wiki/Conisli" onclick="javascript:TrackClick('http%3A%2F%2Fpt.wikipedia.org%2Fwiki%2FConisli','Link+para+artigo+CONISLI+na+Wikipedia')" target="_blank">CONISL (Congresso Internacional de Software Livre)</a>, após ver a grade de palestras me interessei muito, pois lá estariam bons palestrantes como o <a href="http://www.fgsl.eti.br/" onclick="javascript:TrackClick('http%3A%2F%2Fwww.fgsl.eti.br%2F','')" target="_blank">Flávio Gomes (zend framework)</a>, <a href="http://blog.bisna.com/" onclick="javascript:TrackClick('http%3A%2F%2Fblog.bisna.com%2F','')" target="_blank">Guilherme Blanco (Doctrine ORM)</a>, <a href="http://www.eltonminetto.net/" onclick="javascript:TrackClick('http%3A%2F%2Fwww.eltonminetto.net%2F','')" target="_blank">Elton Minetto (Desenvolvimento Web Escalável)</a> entre outros. Essas três palestras me interessavam muito pois estavam totalmente de acordo com meus interesses e necessidades. Bom após a palestra do Guilherme Blanco sobre Doctrine, eu fiquei maravilhado com essa ferramenta, tanto que após a palestra dei um jeito de pegar o contato dele para poder tirar dúvidas e realmente começar a utilizar isso em meu trabalho. Voltei para Brasília, terminei a implantação do Zend Framework em minha equipe, fiz o acoplamento do Doctrine ORM dentro da estrutura do Zend Framework, e por uma sucessão de eventos vim para Joinville integrar a equipe da Drimio sob o &#8220;comando&#8221; de Elton Minetto. Mas tudo isso foi só para explicar como cheguei ao Doctrine ORM. A partir de agora sim, estarei fazendo uma breve introdução (na melhor das intenções) ao assunto.</p>
<p><strong>O que é Dotrine ORM?</strong></p>
<p>O <a title="Dotrine ORM official website" href="http://www.doctrine-project.org/" onclick="javascript:TrackClick('http%3A%2F%2Fwww.doctrine-project.org%2F','Dotrine+ORM+official+website')" target="_blank">Doctrine ORM</a>, como seu próprio nome diz, é uma ferramenta de <a title="Artigo para ORM na wikipedia" href="http://pt.wikipedia.org/wiki/Orm" onclick="javascript:TrackClick('http%3A%2F%2Fpt.wikipedia.org%2Fwiki%2FOrm','Artigo+para+ORM+na+wikipedia')" target="_blank">ORM (Object-relational mapping)</a> ou no bom e velho pt-br: Mapeamento Objeto-Relacional. Foi concebida sob a licensa <a href="http://en.wikipedia.org/wiki/GNU_Lesser_General_Public_License" onclick="javascript:TrackClick('http%3A%2F%2Fen.wikipedia.org%2Fwiki%2FGNU_Lesser_General_Public_License','')" target="_blank">GNU Lesser General Public License</a>. Suas principais influências foram o <a href="http://www.hibernate.org/" onclick="javascript:TrackClick('http%3A%2F%2Fwww.hibernate.org%2F','')" target="_blank">Hibernate(Java)</a> e o <a href="http://ar.rubyonrails.org/" onclick="javascript:TrackClick('http%3A%2F%2Far.rubyonrails.org%2F','')" target="_blank">ActiveRecord(Rails)</a>. Atualmente se encontra na versão 1.1.0 (estável) e é compatível com <a href="http://www.php.net/releases/5_2_3.php" onclick="javascript:TrackClick('http%3A%2F%2Fwww.php.net%2Freleases%2F5_2_3.php','')" target="_blank">PHP 5.2.3+</a> pois o mesmo utiliza a biblioteca <a href="http://br.php.net/pdo" onclick="javascript:TrackClick('http%3A%2F%2Fbr.php.net%2Fpdo','')" target="_blank">PDO</a>.</p>
<p><strong>Mas o que exatamente esse tal de Doctrine ORM faz?</strong></p>
<p>Sua função simplificando, é reduzir a <a href="http://pt.wikipedia.org/wiki/Imped%C3%A2ncia" onclick="javascript:TrackClick('http%3A%2F%2Fpt.wikipedia.org%2Fwiki%2FImped%25C3%25A2ncia','')" target="_blank">impedância</a> do uso de Banco de Dados Relacionais e Sistemas Orientados a Objetos. Ele utiliza o Design Pattern <a href="http://pt.wikipedia.org/wiki/Active_record" onclick="javascript:TrackClick('http%3A%2F%2Fpt.wikipedia.org%2Fwiki%2FActive_record','')" target="_blank">Active Record</a> para fazer abstração entre as tabelas do banco de dados e as suas respectivas classes, ou seja, para cada tabela no banco teremos uma classe correspondente. Sendo possível delegar a responsabilidade da criação das classes para o doctrine, mas isso é um outro assunto.</p>
<p><strong>Legal, e tem mais? &#8211; Muito Mais&#8230;</strong></p>
<p>Inspirado no <a href="http://www.hibernate.org/hib_docs/v3/reference/en/html/queryhql.html" onclick="javascript:TrackClick('http%3A%2F%2Fwww.hibernate.org%2Fhib_docs%2Fv3%2Freference%2Fen%2Fhtml%2Fqueryhql.html','')" target="_blank">HQL (Hibernate) </a>foi criado o<a href="http://www.doctrine-project.org/documentation/manual/1_0/ja/dql-doctrine-query-language" onclick="javascript:TrackClick('http%3A%2F%2Fwww.doctrine-project.org%2Fdocumentation%2Fmanual%2F1_0%2Fja%2Fdql-doctrine-query-language','')" target="_blank"> DQL (Doctrine Query Language)</a> que eu acho muito bom, facilita muito na hora de criarmos consultas enxutas ou que tenham relacionamentos a serem pesquisados. Além disso há também a possibilidade de executar consultas com SQL nativo, mas é desencorajado, visto que uma parte do seu problema antes de usá-lo são justamente consultas com SQL nativos.</p>
<p><strong>Fale-me mais Xorna, e é fácil para se achar? aprender mais? &#8211; É claro!!</strong></p>
<p>Ele possuí uma boa documentação, com bastantes artigos, e uma comunidade de usuários que tende a crescer visto sua facilidade de acoplamento com frameworks populares. No próximo post daremos o ponta pé inicial em nossos estudos, mostrarei a instalação, estrutura de diretórios e começaremos nosso primeiro exemplo.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.blogdoxorna.com.br/doctrine-orm-parte-i/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>A teoria da tosa de porcos</title>
		<link>http://www.blogdoxorna.com.br/a-teoria-da-tosa-de-porcos/</link>
		<comments>http://www.blogdoxorna.com.br/a-teoria-da-tosa-de-porcos/#comments</comments>
		<pubDate>Mon, 27 Apr 2009 18:20:44 +0000</pubDate>
		<dc:creator>xorna</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Literatura]]></category>
		<category><![CDATA[teorias sem sentido]]></category>
		<category><![CDATA[tosa de porco]]></category>
		<category><![CDATA[verdades]]></category>

		<guid isPermaLink="false">http://www.blogdoxorna.com.br/?p=117</guid>
		<description><![CDATA[Antes de mais nada gostaria de esclarecer que o título desse post é meramente uma metáfora. Ela se refere a certas situações no dia-a-dia onde uma ou mais pessoas afim de resolverem um problema criam mais problemas, ao invés de manter a simplicidade na solução do problema.
Vamos aos fatos:
Há um problema que deve ser resolvido, [...]]]></description>
			<content:encoded><![CDATA[<p>Antes de mais nada gostaria de esclarecer que o título desse post é meramente uma metáfora. Ela se refere a certas situações no dia-a-dia onde uma ou mais pessoas afim de resolverem um problema criam mais problemas, ao invés de manter a simplicidade na solução do problema.</p>
<p><strong>Vamos aos fatos:</strong></p>
<p>Há um problema que deve ser resolvido, na maior parte das vezes simples, há também interessados em resolver este problema, e na maioria das vezes há alguém querendo complicar tudo, talvez achando que quanto mais complicada a solução maiores serão seus méritos, mas o que na verdade faz é gerar mais problemas.</p>
<p><strong>Por que Tosa de Porco ?</strong></p>
<p>Bom, essa expressão é um &#8220;ditado&#8221; lá do bom e velho Rio Grande do Sul, que diz que algo está como &#8220;tosa de porco: pouco pêlo e muito grito&#8221;, ou seja, se fala demais, é perdido muito tempo em algo que está óbvio, prática comum entre pessos de ego inflado ou que necessitam diariamente de doses de reconhecimento por parte de colegas de trabalho e seus &#8220;chefes&#8221;. Não que isso chegue a ser defeito em uma pessoa, pois todos nós somos humanos, mas por favor, precisa fazer reunião pra decidir até a quantidade de pó a ser colocado no café da equipe? (rsrs)</p>
<p><strong>A solução</strong></p>
<p>Sem tosar nenhum porquinho, vamos rapidamente a solução. Você tem um problema, precisa partir do ponto A até o ponto B, a boa e velha matemática nos ensina que a menor distância entre dois pontos é uma reta, pronto, sem rodeios ou voltas parta em linha reta a solução do problema, sem criar mais variáveis dentro do mesmo problema. Como já dizia a <a title="Página na Wikipedia sobre a Navalha de Occam" href="http://pt.wikipedia.org/wiki/Navalha_de_Occam" onclick="javascript:TrackClick('http%3A%2F%2Fpt.wikipedia.org%2Fwiki%2FNavalha_de_Occam','P%C3%A1gina+na+Wikipedia+sobre+a+Navalha+de+Occam')" target="_blank">Navalha de Occam</a>:</p>
<ul>
<li><em>pluralitas non est ponenda sine neccesitate</em> (pluralidades não devem ser postas sem necessidade) *</li>
<li><em>entia non sunt multiplicanda praeter necessitatem</em> (as entidades não devem ser multiplicadas além do necessário). Esta frase foi cunhada em 1639, por <span class="new">John Ponce de Cork</span>. *</li>
</ul>
<p>O blogdoxorna.com.br não tosou nenhum porquinho sequer ao postar esse artigo.</p>
<p><em>* Fonte: <a href="http://pt.wikipedia.org/wiki" onclick="javascript:TrackClick('http%3A%2F%2Fpt.wikipedia.org%2Fwiki','')" target="_blank">Wikipedia</a></em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.blogdoxorna.com.br/a-teoria-da-tosa-de-porcos/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Aniversário com Parabéns, Lasanha, Doce e Blog Migrado!</title>
		<link>http://www.blogdoxorna.com.br/aniversario-com-parabens-lasanha-doce-e-blog-migrado/</link>
		<comments>http://www.blogdoxorna.com.br/aniversario-com-parabens-lasanha-doce-e-blog-migrado/#comments</comments>
		<pubDate>Sat, 25 Apr 2009 18:01:54 +0000</pubDate>
		<dc:creator>xorna</dc:creator>
				<category><![CDATA[Joinville]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[aniversário do xorna]]></category>
		<category><![CDATA[novo blogdoxorna]]></category>

		<guid isPermaLink="false">http://www.blogdoxorna.com.br/?p=115</guid>
		<description><![CDATA[Eba, hoje, dia do meu 24º aniversário, tudo muito legal, apesar da chuva em joinville, blog quase 100% migrado da dreamhost para kinghost, analytics migrado, tudo muito legal, muito bonito, agora até com barra de redes sociais, botões para recomendar o conteúdo, espero melhorar o layout aos poucos e que gostem do novo visual!
]]></description>
			<content:encoded><![CDATA[<p>Eba, hoje, dia do meu 24º aniversário, tudo muito legal, apesar da chuva em joinville, blog quase 100% migrado da dreamhost para kinghost, analytics migrado, tudo muito legal, muito bonito, agora até com barra de redes sociais, botões para recomendar o conteúdo, espero melhorar o layout aos poucos e que gostem do novo visual!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.blogdoxorna.com.br/aniversario-com-parabens-lasanha-doce-e-blog-migrado/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Novo servidor, novo wordpress e novo layout em construção</title>
		<link>http://www.blogdoxorna.com.br/novo-servidor-novo-wordpress-e-novo-layout-em-construcao/</link>
		<comments>http://www.blogdoxorna.com.br/novo-servidor-novo-wordpress-e-novo-layout-em-construcao/#comments</comments>
		<pubDate>Fri, 24 Apr 2009 19:02:17 +0000</pubDate>
		<dc:creator>xorna</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[blogdoxorna]]></category>
		<category><![CDATA[contrução]]></category>

		<guid isPermaLink="false">http://www.blogdoxorna.com.br/?p=106</guid>
		<description><![CDATA[Buenas pessoal, o blogdoxorna.com agora é blogdoxorna.com.br também, estou em um novo servidor agora, mais rapido e mais caro hahaha. Como podem reparar o layout ta meio destruido ainda, isso porque decidi rodar ele mesmo sem terminar, assim já vou pegando alguns feedbacks, estou deixando assim por que como não to postando nada de novo [...]]]></description>
			<content:encoded><![CDATA[<p>Buenas pessoal, o blogdoxorna.com agora é blogdoxorna.com.br também, estou em um novo servidor agora, mais rapido e mais caro hahaha. Como podem reparar o layout ta meio destruido ainda, isso porque decidi rodar ele mesmo sem terminar, assim já vou pegando alguns feedbacks, estou deixando assim por que como não to postando nada de novo ele já vai sendo indexado pelo google. Valeu.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.blogdoxorna.com.br/novo-servidor-novo-wordpress-e-novo-layout-em-construcao/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Trabalho Duro no Blogdoxorna</title>
		<link>http://www.blogdoxorna.com.br/trabalho-duro-no-blogdoxorna/</link>
		<comments>http://www.blogdoxorna.com.br/trabalho-duro-no-blogdoxorna/#comments</comments>
		<pubDate>Tue, 07 Apr 2009 17:52:01 +0000</pubDate>
		<dc:creator>xorna</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.blogdoxorna.com/trabalho-duro-no-blogdoxorna/</guid>
		<description><![CDATA[Tempos sem postar, mas tudo isso tem motivo: faculdade, drimio em fase beta, freelancers malditos, trabalhando no novo layout do blog que deve sair em breve, dúvidas se mantenho o wordpress, agora que fiquei craque em criar templates (blog.drimio.com), mas isso tudo deve aliviar em breve, e assim posso voltar a postar, o bom é [...]]]></description>
			<content:encoded><![CDATA[<p>Tempos sem postar, mas tudo isso tem motivo: faculdade, drimio em fase beta, freelancers malditos, trabalhando no novo layout do blog que deve sair em breve, dúvidas se mantenho o wordpress, agora que fiquei craque em criar templates (<a href="http://blog.drimio.com" onclick="javascript:TrackClick('http%3A%2F%2Fblog.drimio.com','')">blog.drimio.com</a>), mas isso tudo deve aliviar em breve, e assim posso voltar a postar, o bom é que já tenho uma série de assuntos a serem abordados aqui, e são muito legais, dentre eles listo que lembro agora:</p>
<ul>
<li>Zend Framework</li>
<li>Doctrine ORM</li>
<li>Integração de Zend Framework e Doctrine ORM</li>
<li>Zend_Db X Doctrine (Análises e Benchmarks)</li>
<li>Bancos de Dados (PostgreSQL e MySQL)</li>
<li>Linux é claro!</li>
<li>Desenvolvimento Web Orientado aos Principais Dispositivos Móveis do Mercado (Nokia, Blackberry e iPhone)</li>
<li>Indicações e comentários sobre aplicativos iPhone</li>
<li>A vida na cidade da chuva</li>
</ul>
<p>Enfim, um monte de coisas legais nas quais ando envolvido e submerso!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.blogdoxorna.com.br/trabalho-duro-no-blogdoxorna/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Quer trabalhar na Drimio?</title>
		<link>http://www.blogdoxorna.com.br/quer-trabalhar-na-drimio/</link>
		<comments>http://www.blogdoxorna.com.br/quer-trabalhar-na-drimio/#comments</comments>
		<pubDate>Sat, 28 Mar 2009 17:38:00 +0000</pubDate>
		<dc:creator>xorna</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.blogdoxorna.com/quer-trabalhar-na-drimio/</guid>
		<description><![CDATA[Temos uma vaga para trabalhar na Drimio, em Joinville. Então, se você tem interesse em trabalhar em um projeto divertido, cheio de desafios, em uma cidade legal e você se encaixa no perfil abaixo entre em contato comigo.
Mande seu currículo para elton.minetto@drimio.com
Aí conversamos em pvt sobre salário, benefícios, sobre os projetos, etc,etc.
Programador de interfaces
Habilidades necessárias:
- [...]]]></description>
			<content:encoded><![CDATA[<p>Temos uma vaga para trabalhar na <a href="http://www.drimio.com" onclick="javascript:TrackClick('http%3A%2F%2Fwww.drimio.com','')" target="_blank">Drimio</a>, em Joinville. Então, se você tem interesse em trabalhar em um projeto divertido, cheio de desafios, em uma cidade legal e você se encaixa no perfil abaixo entre em contato comigo.<br />
Mande seu currículo para elton.minetto@drimio.com<br />
Aí conversamos em pvt sobre salário, benefícios, sobre os projetos, etc,etc.</p>
<p>Programador de interfaces</p>
<p>Habilidades necessárias:<br />
- Conhecimentos avançados em HTML, CSS, JavaScript, Web standards, Flash<br />
- Conhecimentos intermediários em ferramentas gráficas tais como CorelDraw, Photoshop e similares<br />
- Conhecimentos em PHP<br />
- Conhecimentos em AJAX, JSON, jQuery<br />
- Inglês (leitura de documentos técnicos )</p>
<p>Opcionais:<br />
- Conhecimentos em Subversion<br />
- Conhecimentos em tecnologias de mobilidade<br />
- Conhecimentos em acessibilidade e usabilidade.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.blogdoxorna.com.br/quer-trabalhar-na-drimio/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Quer ganhar um iPod de 2GB?</title>
		<link>http://www.blogdoxorna.com.br/quer-ganhar-um-ipod-de-2gb/</link>
		<comments>http://www.blogdoxorna.com.br/quer-ganhar-um-ipod-de-2gb/#comments</comments>
		<pubDate>Fri, 20 Mar 2009 20:11:54 +0000</pubDate>
		<dc:creator>xorna</dc:creator>
				<category><![CDATA[Joinville]]></category>
		<category><![CDATA[drimio]]></category>

		<guid isPermaLink="false">http://www.blogdoxorna.com/quer-ganhar-um-ipod-de-2gb/</guid>
		<description><![CDATA[Queremos que você deixe a sua marca na Drimio. Use a sua criatividade e concorra a um iPod Shuffle de 2GB.

Para participar é simples, faça uma FOTO SUA COM A SUA MARCA PREFERIDA e publique no álbum da Drimio. Seja criativo! Clique aqui e participe.
Você ainda pode aumentar as suas chances. Convide seus amigos para [...]]]></description>
			<content:encoded><![CDATA[<p>Queremos que você deixe a sua marca na Drimio. Use a sua criatividade e concorra a um <strong>iPod Shuffle </strong><strong>de 2GB</strong>.</p>
<p align="center"><a href="http://www.drimio.com/vocenadrimio/" onclick="javascript:TrackClick('http%3A%2F%2Fwww.drimio.com%2Fvocenadrimio%2F','')" target="_blank"><img src="http://www.blogdoxorna.com/wp-content/uploads/2009/03/flyer_400.jpg" alt="Você e sua marca na drimio" /></a></p>
<p>Para participar é simples, faça uma <strong>FOTO SUA COM A SUA MARCA PREFERIDA</strong> e publique no álbum da Drimio. Seja criativo! <a href="http://www.drimio.com/vocenadrimio" onclick="javascript:TrackClick('http%3A%2F%2Fwww.drimio.com%2Fvocenadrimio','')" target="_blank">Clique aqui </a>e participe.<br />
Você ainda pode aumentar as suas chances. Convide seus amigos para partipar. Quanto mais amigos, mais chances você tem.</p>
<p>Eu não perderia essa!!!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.blogdoxorna.com.br/quer-ganhar-um-ipod-de-2gb/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Crie o favicon para seu site&#8230; incluindo iPhone também!</title>
		<link>http://www.blogdoxorna.com.br/crie-o-favicon-para-seu-site-incluindo-iphone-tambem/</link>
		<comments>http://www.blogdoxorna.com.br/crie-o-favicon-para-seu-site-incluindo-iphone-tambem/#comments</comments>
		<pubDate>Wed, 18 Mar 2009 13:03:36 +0000</pubDate>
		<dc:creator>xorna</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://www.blogdoxorna.com/crie-o-favicon-para-seu-site-incluindo-iphone-tambem/</guid>
		<description><![CDATA[Buenas, post rapinho, já que não disponho de tanto tempo assim, estou aqui só para falar de duas coisas rápidas, a primeira é a promoção Você na drimio, onde você pode ganhar um iPod Shuffle de 2GB, particularmente eu queria participar, mas me baniram hahaha. Enfim basta ir até o endereço http://www.drimio.com/vocenadrimio/. Mas agora vamos [...]]]></description>
			<content:encoded><![CDATA[<p>Buenas, post rapinho, já que não disponho de tanto tempo assim, estou aqui só para falar de duas coisas rápidas, a primeira é a promoção <a href="http://www.drimio.com/vocenadrimio/" onclick="javascript:TrackClick('http%3A%2F%2Fwww.drimio.com%2Fvocenadrimio%2F','')" onclick="javascript:TrackClick('http%3A%2F%2Fwww.drimio.com%2Fvocenadrimio%2F','')" target="_blank">Você na drimio</a>, onde você pode ganhar um iPod Shuffle de 2GB, particularmente eu queria participar, mas me baniram hahaha. Enfim basta ir até o endereço <a href="http://www.drimio.com/vocenadrimio/" onclick="javascript:TrackClick('http%3A%2F%2Fwww.drimio.com%2Fvocenadrimio%2F','')" onclick="javascript:TrackClick('http%3A%2F%2Fwww.drimio.com%2Fvocenadrimio%2F','')" target="_blank">http://www.drimio.com/vocenadrimio/</a>. Mas agora vamos ao post, hoje decidi escrever sobre um assunto rápido e que parte dele é abordado as pampas aqui na internet. Mas a segunda parte não, criar um favicon é moleza, todo mundo já sabe, mas nem todo mundo já criou seu favicon para iPhone, certo?</p>
<p><strong>Criando o favicon para o seu pc:</strong></p>
<p>Basta você pegar a imagem em questão, com no minimo 16&#215;16px (pode ser 32&#215;32px, já que o IE faz o redimensionamento em tempo de execução), exporte o mesmo para a extensão ICO, pode ser usado o photoshop, ou <a href="http://www.irfanview.com/" onclick="javascript:TrackClick('http%3A%2F%2Fwww.irfanview.com%2F','')">Irfanview</a>, ou seu programa de  criação de ícones favorito. Faça upload para seu servidor (de preferência na raiz) e depois disso adicione as seguintes tags dentro do &lt;head&gt; de seu html:</p>
<pre>
     &lt;link rel="shortcut icon" href="http://seudominio.com/favicon.ico"&gt;     &lt;<span class="start-tag">link</span><span class="attribute-name"> rel</span>=<span class="attribute-value">"icon" </span><span class="attribute-name">href</span>=<span class="attribute-value">"</span>http://seudominio.com/favicon.ico<span class="attribute-value">"</span>&gt;</pre>
<p>Feito isso, seu favicon já estará funcionando legal nos navegadores desktop compatíveis. Mas agora vem a parte divertida da história, colocarmos nosso favicon pra funcionar no iphone. Basta criar uma imagem preferencialmente PNG com nosso icone mas com tamanho de 57&#215;57px, fazer upload da mesma e adicionar a seguinte tag dentro de nossa head:</p>
<pre>
    &lt;link rel="apple-touch-icon" href="meuicone.png"&gt;</pre>
<p>Depois disso é só você testar e confirmar o resultado.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.blogdoxorna.com.br/crie-o-favicon-para-seu-site-incluindo-iphone-tambem/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Desventuras em Joinville</title>
		<link>http://www.blogdoxorna.com.br/desventuras-em-joinville/</link>
		<comments>http://www.blogdoxorna.com.br/desventuras-em-joinville/#comments</comments>
		<pubDate>Wed, 18 Feb 2009 18:43:33 +0000</pubDate>
		<dc:creator>xorna</dc:creator>
				<category><![CDATA[Aula]]></category>
		<category><![CDATA[Joinville]]></category>

		<guid isPermaLink="false">http://www.blogdoxorna.com/desventuras-em-joinville/</guid>
		<description><![CDATA[Xorna no Trabalho
Bom, pelo título do post dá pra saber por que estou desde o dia 04 de Dezembro de 2008 sem postar aqui no blog, por que foi exatamente a semana que começamos a produção aqui em nosso projeto, e aí começou a loucura. Mas não pensem que o Xorna ficou parado por esse [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Xorna no Trabalho</strong></p>
<p>Bom, pelo título do post dá pra saber por que estou desde o dia 04 de Dezembro de 2008 sem postar aqui no blog, por que foi exatamente a semana que começamos a produção aqui em nosso projeto, e aí começou a loucura. Mas não pensem que o Xorna ficou parado por esse tempo&#8230; Devido a problemas de RH (rs), tive que assumir o posto de programador de interface (nome macho para designer), e desde então tenho me envolvido somente com XHTML, CSS e Flash, temas que não me inspiram a escrever como PHP, Linux e coisas relacionadas, por isso o hiato de tanto tempo, somando isso a necessidade do blog receber um novo layout, estou pensando sériamente em aproveitar minha repulsa ao carnaval e fazer de vez a tão esperada versão 2.0 do blog do xorna. E assim também já voltar a escrever, no minimo um ou mais posts por semana, pois conteúdo não falta, falta é tempo.</p>
<p><strong>Xorna na Faculdade </strong></p>
<p>Por que o Xorna também é cultura, me matriculei no Curso de Engenharia de Computação aqui em joinville para ver se um dia termino a faculdade que comecei há anos. Mas está legal, apesar de que em muitos momentos me sinto um vovô de 23 anos no meio da aula, e também fico indiguinado com a bagunça (coisa que uma vez era super natural, mas quem sabe assim quando eu tiver aproximadamente 28 anos serei engenheiro (o orgulho do pai rs).</p>
<p><strong>Xorna em casa</strong></p>
<p>Em casa as coisas evoluiram, morando enfim sozinho sem ninguém pra me atazanar a vida,  meu computador recebeu algumas adições, uma XFX Geforce 9600GSO, uma fonte 600w, um gabinete mais legal, e mais um monitor de 19&#8243; (agora são 2 <img src='http://www.blogdoxorna.com.br/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> ). O maior problema é que com o advento da faculdade, a casa só tem me servido para ir dormir, bom, mas por hora vou dormir todos os dias em casa, rs.</p>
<p><strong>Em breve</strong></p>
<p>Bom, não gosto de prometer nada para quem lê meu blog, nem para mim mesmo, mas espero que em breve estarei estreiando o novo layout do blog, muito mais legal <img src='http://www.blogdoxorna.com.br/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> , e também algumas séries de posts ZERO KM.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.blogdoxorna.com.br/desventuras-em-joinville/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
