<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Vítor Avelino [Garbage Collector]</title>
  <id>http://vitoravelino.net/blog/</id>
  <updated>2009-06-14</updated>
  <author>
    <name>Vítor Avelino</name>
  </author>
  <entry>
    <title>GMate: levando o gedit a um outro nível</title>
    <link rel="alternate" href="http://vitoravelino.net/blog/blog/2010/05/15/gmate-levando-o-gedit-a-um-outro-nivel/"/>
    <id>http://vitoravelino.net/blog/blog/2010/05/15/gmate-levando-o-gedit-a-um-outro-nivel/</id>
    <published>2010-05-15</published>
    <updated>2010-05-15</updated>
    <author>
      <name>Vítor Avelino</name>
    </author>
    <summary type="html">&lt;p&gt;Quem já viu o TextMate sabe o quanto ele é simples e prático para desenvolver em algumas linguagens devido os bundles e snippets que ele suporta. Bem, o gedit também dá suporte a estes a partir de plugins desenvolvidos por terceiros.&lt;/p&gt;

&lt;p&gt;O GMate é uma tentativa de deixar o gedit parecido com o TextMate focando no desenvolvimento Ruby/Rails, pelo menos até o momento. Mas após instalá-lo, você poderá incrementar o suporte a outras linguagens também&amp;hellip;&lt;/p&gt;
</summary>
    <content type="html">&lt;p&gt;Quem já viu o TextMate sabe o quanto ele é simples e prático para desenvolver em algumas linguagens devido os bundles e snippets que ele suporta. Bem, o gedit também dá suporte a estes a partir de plugins desenvolvidos por terceiros.&lt;/p&gt;

&lt;p&gt;O GMate é uma tentativa de deixar o gedit parecido com o TextMate focando no desenvolvimento Ruby/Rails, pelo menos até o momento. Mas após instalá-lo, você poderá incrementar o suporte a outras linguagens também.&lt;/p&gt;

&lt;p&gt;Há duas formas de instalar esse pacote: via apt-get; ou, via linha de comando. Irei demonstrar as duas formas, porém prefiro via linha de comando porque tenho em mãos um código mais atualizado do que o presente no PPA do Ubuntu On Rails.&lt;/p&gt;

&lt;p&gt;Vamos lá!&lt;/p&gt;

&lt;h3&gt;Via apt-get:&lt;/h3&gt;

&lt;pre&gt;
    &lt;code&gt;
$ sudo add-apt-repository ppa:ubuntu-on-rails/ppa
$ sudo apt-get update
$ sudo apt-get install gedit-gmate
    &lt;/code&gt;
&lt;/pre&gt;


&lt;p&gt;Pacote instalado. Porém não é ativado nenhum plugin ou tema após instalação. Para isso, copiei um trecho do &lt;em&gt;install.sh&lt;/em&gt; que se encontra no github do próprio GMate e fiz um arquivo separado que ativará tudo. Baixe-o &lt;a href="http://dev.vitoravelino.net/setup-gmate.sh"&gt;aqui&lt;/a&gt; e siga os comandos abaixo:&lt;/p&gt;

&lt;pre&gt;
    &lt;code&gt;
$ chmod +x setup-gmate.sh
$ sh setup-gmate.sh
    &lt;/code&gt;
&lt;/pre&gt;


&lt;p&gt;Agora sim temos um gedit pronto para produção.&lt;/p&gt;

&lt;h3&gt;Via linha de comando:&lt;/h3&gt;

&lt;p&gt;Será necessário ter o git instalado para poder baixar o projeto direto do github. Quem não tem o mesmo instalado deverá baixar o pacote git-core como veremos abaixo:&lt;/p&gt;

&lt;pre&gt;
    &lt;code&gt;
$ sudo apt-get install git-core
    &lt;/code&gt;
&lt;/pre&gt;


&lt;p&gt;Podemos agora baixar o projeto que está hospedado no github:&lt;/p&gt;

&lt;pre&gt;
    &lt;code&gt;
$ git clone git://github.com/gmate/gmate.git
    &lt;/code&gt;
&lt;/pre&gt;


&lt;p&gt;É hora do passo final que é instalar o tão bendito pacote:&lt;/p&gt;

&lt;pre&gt;
    &lt;code&gt;
$ cd gmate
$ sh install.sh
$ Do you want to activate default plugin and configuration set? [y,N]: y
    &lt;/code&gt;
&lt;/pre&gt;


&lt;p&gt;Pra quem não curte tema com fundo escuro (como eu), recomendo o TextMate (mac classic) que possui cores bem agradáveis.&lt;/p&gt;

&lt;h3&gt;Solução para problema com detecção de sintaxe:&lt;/h3&gt;

&lt;p&gt;Caso você tenha problemas na detecção da extensão dos arquivos para reconhecimento de sintaxe, vá até o arquivo /etc/mime.types e adicione as seguintes linhas:&lt;/p&gt;

&lt;pre&gt;
    &lt;code&gt;
text/x-ruby-source                        rhtml html.erb erb
text/x-eruby                              rjs
text/x-yaml                               yml yaml
    &lt;/code&gt;
&lt;/pre&gt;


&lt;p&gt;&lt;strong&gt;[update 04/06/2010 às 08:28]&lt;/strong&gt; Ainda existem outros plugins interessantes, que até podem substituir algum desses que são instalado com o gmate, de forma geral que podem ser encontrados no pacote &lt;em&gt;gedit-plugins&lt;/em&gt;. Para instalá-lo basta digitar no terminal &lt;em&gt;sudo apt-get install gedit-plugins&lt;/em&gt;. &lt;strong&gt;[/update]&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Este post foi baseado no próprio guia que existe no github do projeto: &lt;a href="http://github.com/gmate/gmate" target="_blank"&gt;http://github.com/gmate/gmate&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Espero ter ajudado. Qualquer dúvida ou contribuição será bem vinda. :D&lt;/p&gt;

&lt;p&gt;[]&amp;rsquo;s&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Instalando e configurando PostgreSQL 8.4 + pgAdmin III no Ubuntu 10.04</title>
    <link rel="alternate" href="http://vitoravelino.net/blog/blog/2010/05/14/instalando-e-configurando-postgresql-8-4-pgadmin-iii-no-ubuntu-10-04/"/>
    <id>http://vitoravelino.net/blog/blog/2010/05/14/instalando-e-configurando-postgresql-8-4-pgadmin-iii-no-ubuntu-10-04/</id>
    <published>2010-05-14</published>
    <updated>2010-05-14</updated>
    <author>
      <name>Vítor Avelino</name>
    </author>
    <summary type="html">&lt;p&gt;Mais um guia aqui no blog. Este foi devido a necessidade da instalação do PostgreSQL e pgAdmin para o projeto da disciplina de SIG (Sistema de Informação Geográfica) que trabalhará juntamente com o PostGIS para o armazenamento e consulta de informações espaciais. Em um próximo post irei explicar como instalar a extensão do PostGIS para o PostgreSQL&amp;hellip;&lt;/p&gt;
</summary>
    <content type="html">&lt;p&gt;Mais um guia aqui no blog. Este foi devido a necessidade da instalação do PostgreSQL e pgAdmin para o projeto da disciplina de SIG (Sistema de Informação Geográfica) que trabalhará juntamente com o PostGIS para o armazenamento e consulta de informações espaciais. Em um próximo post irei explicar como instalar a extensão do PostGIS para o PostgreSQL.&lt;/p&gt;

&lt;p&gt;Vamos lá!&lt;/p&gt;

&lt;h3&gt;Primeiro passo:&lt;/h3&gt;

&lt;pre&gt;
    &lt;code&gt;
$ sudo apt-get install postgresql-8.4 pgadmin3
    &lt;/code&gt;
&lt;/pre&gt;


&lt;p&gt;Instalação do PostgreSQL 8.4 + pgAdmin III.&lt;/p&gt;

&lt;h3&gt;Segundo passo:&lt;/h3&gt;

&lt;pre&gt;
    &lt;code&gt;
$ sudo -u postgres psql template1
- template1=# ALTER USER postgres with encrypted password 'sua_senha';
- template1=# \q
    &lt;/code&gt;
&lt;/pre&gt;


&lt;p&gt;Defina uma senha para a conexão com o banco de dados. Ela será importante para acessar o banco via pgAdmin como veremos mais adiante.&lt;/p&gt;

&lt;h3&gt;Terceiro passo (opcional):&lt;/h3&gt;

&lt;p&gt;Caso você tenha a necessidade de acessar o banco de uma outra máquina a não ser o localhost, abra o arquivo &lt;em&gt;/etc/postgresql/8.4/main/postgresql.conf&lt;/em&gt; e modifique a linha&lt;/p&gt;

&lt;pre&gt;
    &lt;code&gt;
#listen_addresses = 'localhost'
    &lt;/code&gt;
&lt;/pre&gt;


&lt;p&gt;por&lt;/p&gt;

&lt;pre&gt;
    &lt;code&gt;
listen_addresses = '*'
    &lt;/code&gt;
&lt;/pre&gt;


&lt;p&gt;ou&lt;/p&gt;

&lt;pre&gt;
    &lt;code&gt;
listen_addresses = 'ip'
    &lt;/code&gt;
&lt;/pre&gt;


&lt;p&gt;Neste momento já temos o PostgreSQL e pgAdmin instalados corretamente e funcionando. Até agora nada de utilização do pgAdmin, veremos como conectar-se ao PostgreSQL instalado nos passos seguintes.&lt;/p&gt;

&lt;h3&gt;Quarto passo:&lt;/h3&gt;

&lt;p&gt;Abra o pgAdmin e você terá uma tela como a seguinte:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://vitoravelino.net/blog/wp-content/uploads/2010/05/pgAdmin.png" class="fancybox" title="pgAdmin - Tela inicial"&gt;&lt;img src="http://vitoravelino.net/blog/wp-content/uploads/2010/05/pgAdmin-300x232.png" alt="pgAdmin - Tela inicial" width="300" height="232" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Adicione uma nova conexão e preencha os dados &lt;em&gt;Name&lt;/em&gt;,&lt;em&gt; Host&lt;/em&gt;, e&lt;em&gt; Password &lt;/em&gt;(o mesmo setado no passo dois deste guia) corretamente como a imagem abaixo:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://vitoravelino.net/blog/wp-content/uploads/2010/05/new_connection.png" class="fancybox" title="pgAdmin - Nova conexão"&gt;&lt;img src="http://vitoravelino.net/blog/wp-content/uploads/2010/05/new_connection-214x300.png" alt="pgAdmin - Nova conexão" width="214" height="300" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Após criado, teremos a seguinte tela:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://vitoravelino.net/blog/wp-content/uploads/2010/05/pgAdmin2.png" class="fancybox" title="pgAdmin - Pós-criação de conexão"&gt;&lt;img src="http://vitoravelino.net/blog/wp-content/uploads/2010/05/pgAdmin2-300x232.png" alt="pgAdmin - Pós-criação de conexão" width="300" height="232" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Pronto! Agora você está apto a por a mão na massa e criar suas tabelas.&lt;/p&gt;

&lt;p&gt;Espero ter ajudado novamente. Qualquer dúvida ou contribuição será bem vinda. :D&lt;/p&gt;

&lt;p&gt;[]&amp;rsquo;s&lt;/p&gt;

&lt;p&gt;Referência: &lt;a href="https://help.ubuntu.com/community/PostgreSQL"&gt;https://help.ubuntu.com/community/PostgreSQL&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Instalando e configurando PostGIS no PostgreSQL via Ubuntu 10.04</title>
    <link rel="alternate" href="http://vitoravelino.net/blog/blog/2010/05/14/instalando-e-configurando-postgis-no-postgresql-via-ubuntu-10-04/"/>
    <id>http://vitoravelino.net/blog/blog/2010/05/14/instalando-e-configurando-postgis-no-postgresql-via-ubuntu-10-04/</id>
    <published>2010-05-14</published>
    <updated>2010-05-14</updated>
    <author>
      <name>Vítor Avelino</name>
    </author>
    <summary type="html">&lt;p&gt;Neste post veremos como adicionar a extensão para manipulação de dados espaciais que o PostgreSQL oferece, o PostGIS. Bem, após &lt;a href="http://vitoravelino.net/blog/2010/05/14/instalando-e-configurando-postgresql-8-4-pgadmin-iii-no-ubuntu-10-04/"&gt;instalar e configurar o PostgreSQL 8.4 + pgAdmin III&lt;/a&gt;, instalamos o PostGIS pelo comando abaixo:&lt;/p&gt;
</summary>
    <content type="html">&lt;p&gt;Neste post veremos como adicionar a extensão para manipulação de dados espaciais que o PostgreSQL oferece, o PostGIS. Bem, após &lt;a href="http://vitoravelino.net/blog/2010/05/14/instalando-e-configurando-postgresql-8-4-pgadmin-iii-no-ubuntu-10-04/"&gt;instalar e configurar o PostgreSQL 8.4 + pgAdmin III&lt;/a&gt;, instalamos o PostGIS pelo comando abaixo:&lt;/p&gt;

&lt;pre&gt;
    &lt;code&gt;
$ sudo apt-get install postgresql-8.4-postgis
    &lt;/code&gt;
&lt;/pre&gt;


&lt;p&gt;Bem, na teoria já temos o PostGIS instalado. Nos próximos passos, iremos verificar na prática se a API dele realmente está integrada com o PostgreSQL e criaremos um exemplo simples. Isso pode ser feito via linha de comando, como veremos a seguir, ou via pgAdmin mesmo.&lt;/p&gt;

&lt;h3&gt;Primeiro passo&lt;/h3&gt;

&lt;pre&gt;
    &lt;code&gt;
$ sudo su postgres
$ createdb postgistemplate
$ createlang plpgsql postgistemplate
$ psql -d postgistemplate -f /usr/share/postgresql/8.4/contrib/postgis.sql
$ psql -d postgistemplate -f /usr/share/postgresql/8.4/contrib/spatial_ref_sys.sql
$ createdb -T postgistemplate exemplo_gis
    &lt;/code&gt;
&lt;/pre&gt;


&lt;p&gt;Cria-se um &lt;em&gt;template&lt;/em&gt; para a associação das futuras &lt;em&gt;databases &lt;/em&gt;com as funções espaciais do PostGIS, e, em seguida, cria-se um &lt;em&gt;database&lt;/em&gt; que já possui a API espacial.&lt;/p&gt;

&lt;h3&gt;Segundo passo&lt;/h3&gt;

&lt;pre&gt;
    &lt;code&gt;
$ psql exemplo_gis
exemplo_gis=# SELECT postgis_full_version();
    &lt;/code&gt;
&lt;/pre&gt;


&lt;p&gt;Verifica-se a existência do postgis em relação ao database.&lt;/p&gt;

&lt;h3&gt;Terceiro passo (opcional)&lt;/h3&gt;

&lt;pre&gt;
    &lt;code&gt;
exemplo_gis=# CREATE TABLE cidades (id serial NOT NULL, nome character varying );
    &lt;/code&gt;
&lt;/pre&gt;


&lt;p&gt;Criamos uma tabela para armazenar cidades. Sim, mas onde fica a coluna que guardará os dados espaciais? Necessitamos adicioná-la por fora via comando SQL. No nosso caso, iremos adicionar uma geometria de POINT.&lt;/p&gt;

&lt;pre&gt;
    &lt;code&gt;
exemplo_gis=#  SELECT AddGeometryColumn('cidades', 'geometria', 29100, 'POINT', 2);
    &lt;/code&gt;
&lt;/pre&gt;


&lt;p&gt;Pra quem não entendeu a ordem dos argumentos, eles significam:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; &lt;strong&gt;&amp;lsquo;cidades&amp;rsquo;:&lt;/strong&gt; nome da tabela;&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;&amp;lsquo;geometria&amp;rsquo;:&lt;/strong&gt; nome da coluna que será adicionada a tabela;&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;29100:&lt;/strong&gt; srid referente ao SAD69 (padrão utilizado pelo IBGE até o momento);&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;&amp;lsquo;POINT&amp;rsquo;:&lt;/strong&gt; tipo da geometria que será armazenada;&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;2:&lt;/strong&gt; dimensões da geometria.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Podemos inserir, então, alguns dados:&lt;/p&gt;

&lt;pre&gt;
    &lt;code&gt;
exemplo_gis=# INSERT INTO cidades (nome, geometria)  VALUES('João Pessoa', GeomFromText('POINT(5 5)', 29100));
exemplo_gis=# INSERT INTO cidades (nome, geometria)  VALUES('Campina Grande', GeomFromText('POINT(10 10)', 29100));
    &lt;/code&gt;
&lt;/pre&gt;


&lt;p&gt;Para ver a API funcionando, podemos fazer uma consulta simples verificando a distância entre os dois pontos:&lt;/p&gt;

&lt;pre&gt;
    &lt;code&gt;
exemplo_gis=# SELECT distance(a.geometria, b.geometria) FROM cidades WHERE a.nome = 'João Pessoa' AND b.nome = 'Campina Grande';
    &lt;/code&gt;
&lt;/pre&gt;


&lt;p&gt;Bem, isso foi apenas um exemplo do que se pode fazer com uma &lt;strong&gt;solução livre&lt;/strong&gt; de um banco de dados com suporte a armazenamento e consultas espaciais. Quem estiver mais interessado em PostGIS, consulte o &lt;a href="http://postgis.refractions.net/documentation/manual-1.4/" target="_blank"&gt;manual&lt;/a&gt; do mesmo que é muito bom.&lt;/p&gt;

&lt;p&gt;Espero ter ajudado. Qualquer dúvida ou contribuição será bem vinda. :D&lt;/p&gt;

&lt;p&gt;[]&amp;rsquo;s&lt;/p&gt;

&lt;p&gt;Referência: &lt;a href="http://www.paolocorti.net/2008/01/30/installing-postgis-on-ubuntu/" target="_blank"&gt;http://www.paolocorti.net/2008/01/30/installing-postgis-on-ubuntu/&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Instalando e configurando ambiente Ruby on Rails no Ubuntu 10.04</title>
    <link rel="alternate" href="http://vitoravelino.net/blog/blog/2010/05/09/instalando-e-configurando-ambiente-rubyonrails-no-ubuntu/"/>
    <id>http://vitoravelino.net/blog/blog/2010/05/09/instalando-e-configurando-ambiente-rubyonrails-no-ubuntu/</id>
    <published>2010-05-09</published>
    <updated>2010-05-09</updated>
    <author>
      <name>Vítor Avelino</name>
    </author>
    <summary type="html">&lt;p&gt;Semana passada, mais uma vez, tive a curiosidade e &lt;strong&gt;coragem&lt;/strong&gt; de preparar o ambiente de desenvolvimento Rails no Ubuntu (no meu caso, o 10.04). Após muita pesquisa, acatei o melhor de cada dica e decidi preparar e compartilhar os passos que tomei para ter um ambiente redondo&amp;hellip;&lt;/p&gt;
</summary>
    <content type="html">&lt;p&gt;Semana passada, mais uma vez, tive a curiosidade e &lt;strong&gt;coragem&lt;/strong&gt; de preparar o ambiente de desenvolvimento Rails no Ubuntu (no meu caso, o 10.04). Após muita pesquisa, acatei o melhor de cada dica e decidi preparar e compartilhar os passos que tomei para ter um ambiente redondo.&lt;/p&gt;

&lt;p&gt;Teremos ao final um ambiente com Ruby 1.9.1 + Rails 2.3.8 + RubyGems 1.3.7 + SQLite3/MySQL/PostgreSQL instalados e pronto para desenvolvimento. Vamos lá então!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;[update 20/05/10 às 10:31]&lt;/strong&gt; Até ontem, eu pensei que a instalação do RubyGems instalado via source juntamente com o Ruby instalado via apt-get estava correto. De fato, está. Porém, após muita dor de cabeça percebi que ao instalar o Ruby via apt-get ele não reconhece os PATHS de ambiente utilizados pelo RubyGems. O problema é que diante do Rails, o ambiente parecia estar funcionando corretamente.&lt;/p&gt;

&lt;p&gt;Como percebi? Simples, fui instalar a gem do &lt;a href="http://sinatrarb.com/" target="_blank"&gt;Sinatra&lt;/a&gt; e ela simplesmente não era encontrada. Achei estranho e fui mais além, foi aí que instalei uma lib (libsinatra-ruby1.9.1) e tudo funcionou. Ou seja, quem estava fazendo o papel do RubyGems eram essas libs e não a própria.&lt;/p&gt;

&lt;p&gt;Era tão visível isso, mas acabei me dando conta somente agora. Por exemplo, pra usar o sqlite3 precisava instalar além do mesmo, duas libs (libsqlite3-dev libsqlite3-ruby1.9.1), mas em um ambiente redondo isso não seria necessário. Por que? Porque na verdade quem está fazendo o papel da gem não é de fato ela, mas sim essas duas libs que foram instaladas.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;DICA:&lt;/strong&gt; Jamais misture uma app instalada via gerenciador de pacotes com algum plugin/feature que é instalado via &lt;em&gt;source&lt;/em&gt;. A probabilidade de acontecer alguma merda é alta, a não ser que você esteja sabendo bem onde esteja pisando; o que não foi meu caso.&lt;/p&gt;

&lt;p&gt;Peço desculpas aos que acreditaram fielmente que isso daqui estava, de fato, 100% correto. Iremos instalar os pré-requisitos via apt-get e o Ruby + RubyGems via source. Sem mais dores de cabeça! ;) &lt;strong&gt;[/update]&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;Primeiro passo&lt;/h3&gt;

&lt;pre&gt;
    &lt;code&gt;
$ sudo apt-get install build-essential libssl-dev libreadline5-dev zlib1g-dev
    &lt;/code&gt;
&lt;/pre&gt;


&lt;p&gt;Instalação dos pré-requisitos para o funcionamento correto do Ruby após instalado.&lt;/p&gt;

&lt;h3&gt;Segundo passo&lt;/h3&gt;

&lt;pre&gt;
    &lt;code&gt;
$ cd ~
$ wget ftp://ftp.ruby-lang.org//pub/ruby/ruby-1.9-stable.tar.gz
$ tar -zxvf ruby-1.9-stable.tar.gz
$ cd  ruby-1.9.X-pYYY
$ ./configure
$ make
$ sudo make install
    &lt;/code&gt;
&lt;/pre&gt;


&lt;p&gt;Instalação do Ruby 1.9.X diretamente do código fonte que será instalado em /usr/local/bin/ruby.&lt;/p&gt;

&lt;h3&gt;Terceiro passo&lt;/h3&gt;

&lt;pre&gt;
    &lt;code&gt;
$ cd ~
$ wget http://rubyforge.org/frs/download.php/70696/rubygems-1.3.7.tgz
$ tar -zxvf rubygems-1.3.7.tgz
$ cd rubygems-1.3.7
$ sudo ruby setup.rb
    &lt;/code&gt;
&lt;/pre&gt;


&lt;p&gt;Instalação do RubyGems que já ficará configurado de acordo com o Ruby instalado anteriomente.&lt;/p&gt;

&lt;h3&gt;Quarto passo&lt;/h3&gt;

&lt;pre&gt;
    &lt;code&gt;
$ sudo gem install rails
    &lt;/code&gt;
&lt;/pre&gt;


&lt;p&gt;Instalação da versão estável atual do Rails, a 2.3.8.&lt;/p&gt;

&lt;h3&gt;Quinto passo&lt;/h3&gt;

&lt;p&gt;Neste quarto passo darei três opções para escolha de qual BD utilizar, porém só testei até o momento com SQLite3.&lt;/p&gt;

&lt;h4&gt;SQLite3 (default na instalação do Rails)&lt;/h4&gt;

&lt;pre&gt;
    &lt;code&gt;
$ sudo apt-get install sqlite3 libsqlite3-dev
$ sudo gem install sqlite3-ruby
    &lt;/code&gt;
&lt;/pre&gt;


&lt;p&gt;Instalação do SQLite3, as libs necessária para compilação e funcionamento da gem e sua respectiva gem.&lt;/p&gt;

&lt;h4&gt;MySQL&lt;/h4&gt;

&lt;pre&gt;
    &lt;code&gt;
$ sudo apt-get install mysql-server-5.1 mysql-client-5.1 libmysqlclient-dev
$ sudo gem install mysql
    &lt;/code&gt;
&lt;/pre&gt;


&lt;p&gt;Instalação do servidor e cliente do MySQL 5.1, as libs necessária para compilação e funcionamento da gem e sua respectiva gem.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Obs:&lt;/strong&gt; Rails assume que o arquivo socket MySQL será encontrado em /tmp/mysqld.sock. No Ubuntu, este não é o caso. Certifique-se de mudar database.yml para refletir o local real do arquivo de socket:&lt;/p&gt;

&lt;pre&gt;
    &lt;code&gt;
socket: '/var/run/mysqld/mysqld.sock'
    &lt;/code&gt;
&lt;/pre&gt;


&lt;h4&gt;PostgreSQL&lt;/h4&gt;

&lt;pre&gt;
    &lt;code&gt;
$ sudo apt-get install postgresql-8.4 postgresql-server-dev-8.4
$ sudo gem install pg
    &lt;/code&gt;
&lt;/pre&gt;


&lt;p&gt;Instalação do PostgreSQL 8.4, as libs necessária para compilação e funcionamento da gem e sua respectiva gem.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;[update]&lt;/strong&gt; Para quem tiver interesse em algo mais detalhado do PostgreSQL 8.4 + pgAdmin III, clique &lt;a href="http://vitoravelino.net/blog/2010/05/14/instalando-e-configurando-postgresql-8-4-pgadmin-iii-no-ubuntu-10-04/"&gt;aqui&lt;/a&gt;. &lt;strong&gt;[/update]&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;Sexto passo (e último, ufa!)&lt;/h3&gt;

&lt;p&gt;Enfim, agora é hora de criar o projeto e meter a mão na massa.&lt;/p&gt;

&lt;h4&gt;SQLite3 (default)&lt;/h4&gt;

&lt;pre&gt;
    &lt;code&gt;
$ rails app_rails
    &lt;/code&gt;
&lt;/pre&gt;


&lt;h4&gt;MySQL&lt;/h4&gt;

&lt;pre&gt;
    &lt;code&gt;
$ rails app_rails -d mysql
    &lt;/code&gt;
&lt;/pre&gt;


&lt;h4&gt;PostgreSQL&lt;/h4&gt;

&lt;pre&gt;
    &lt;code&gt;
$ rails app_rails -d postgres
    &lt;/code&gt;
&lt;/pre&gt;


&lt;p&gt;Espero ter ajudado. Qualquer dúvida ou contribuição será bem vinda. :D&lt;/p&gt;

&lt;p&gt;[]&amp;rsquo;s&lt;/p&gt;

&lt;p&gt;Referência: &lt;a href="http://wiki.rubyonrails.org/getting-started/installation/linux"&gt;http://wiki.rubyonrails.org/getting-started/installation/linux&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Encriptar dados para o banco de dados com PHP</title>
    <link rel="alternate" href="http://vitoravelino.net/blog/blog/2010/01/26/encriptar-dados-para-o-banco-de-dados-com-php/"/>
    <id>http://vitoravelino.net/blog/blog/2010/01/26/encriptar-dados-para-o-banco-de-dados-com-php/</id>
    <published>2010-01-26</published>
    <updated>2010-01-26</updated>
    <author>
      <name>Vítor Avelino</name>
    </author>
    <summary type="html">&lt;p&gt;Quando se trata de aplicações escaláveis todo cuidado é pouco. A forma de armazenar os dados dos usuários no banco de dados é algo básico e de extrema importância, já que ninguém quer responsabilizar-se pela roubo dos mesmos.&lt;/p&gt;

&lt;p&gt;Com o passar dos anos, as pessoas especializaram-se ainda mais em quebrar dados criptografados. Isto é, já se tem histórico da quebra de md5 e sha1, o que trás uma preocupação para os desenvolvedores. Eu mesmo costumava usar esses dois tipos de criptografias nas minhas aplicações, porém já não as uso mais&amp;hellip;&lt;/p&gt;
</summary>
    <content type="html">&lt;p&gt;Quando se trata de aplicações escaláveis todo cuidado é pouco. A forma de armazenar os dados dos usuários no banco de dados é algo básico e de extrema importância, já que ninguém quer responsabilizar-se pela roubo dos mesmos.&lt;/p&gt;

&lt;p&gt;Com o passar dos anos, as pessoas especializaram-se ainda mais em quebrar dados criptografados. Isto é, já se tem histórico da quebra de md5 e sha1, o que trás uma preocupação para os desenvolvedores. Eu mesmo costumava usar esses dois tipos de criptografias nas minhas aplicações, porém já não as uso mais.&lt;/p&gt;

&lt;p&gt;Uma outra forma bem mais segura de encriptar dados é o uso do módulo&lt;strong&gt; mcrypt&lt;/strong&gt;. Com base nisso e após algumas pesquisas, decidi criar uma simples classe utilitária que seria responsável por gerar qualquer dado criptografado que seja passado como argumento.&lt;/p&gt;

&lt;h3&gt;Classe PasswordEncrypter&lt;/h3&gt;

&lt;pre&gt;
    &lt;code class="prettyprint"&gt;
class PasswordEncrypter {
     /* key to encrypt/decrypt */
     const KEY = &amp;quot;something&amp;quot;;

     public static function generate($data) {
         $td = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CFB, '');
         $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
         $ks = mcrypt_enc_get_key_size($td);
         mcrypt_generic_init($td, self::KEY, $iv);
         $encrypted = mcrypt_generic($td, $data);

         mcrypt_generic_deinit($td);
         mcrypt_module_close($td);

         return $encrypted;
     }
}
    &lt;/code&gt;
&lt;/pre&gt;


&lt;p&gt;Só é possível desencriptar caso alguém saiba a chave de encriptação. Fiz somente a ida; prefiro encriptar o dado de entrada do usuário e comparar com o que vem do banco de dados. A volta é super simples, basta utilizar o mdecrypt. Para maiores informações, &lt;a href="http://www.php.net/manual/en/function.mcrypt-module-open.php" target="_blank"&gt;http://www.php.net/manual/en/function.mcrypt-module-open.php&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Espero que ajude-os. Estou aberto a sugestões já que não sou muito técnico no tema. Fiquem à vontade! ;)&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Salvem o MySQL!</title>
    <link rel="alternate" href="http://vitoravelino.net/blog/blog/2010/01/19/salvem-o-mysql/"/>
    <id>http://vitoravelino.net/blog/blog/2010/01/19/salvem-o-mysql/</id>
    <published>2010-01-19</published>
    <updated>2010-01-19</updated>
    <author>
      <name>Vítor Avelino</name>
    </author>
    <summary type="html">&lt;p&gt;É isso mesmo! Nunca tive dúvida de que uma hora ou outra isso iria acontecer. A Oracle não é flor que se cheire; nunca fui com a cara dela. Talvez seja porque sou um adepto ao &lt;a href="http://www.google.com/url?sa=t&amp;amp;source=web&amp;amp;ct=res&amp;amp;cd=1&amp;amp;ved=0CAoQFjAA&amp;amp;url=http%3A%2F%2Fpt.wikipedia.org%2Fwiki%2FSoftware_livre&amp;amp;rct=j&amp;amp;q=software+livre&amp;amp;ei=MdJVS7z3OpLe8QbkytGmBA&amp;amp;usg=AFQjCNFAlOIDxRIJ7L1oVDMnIDRyqo4Kkg" target="_blank"&gt;software livre&lt;/a&gt; e não suporto a arrogância de certas empresas em relação a seus concorrentes que são livres&amp;hellip;&lt;/p&gt;
</summary>
    <content type="html">&lt;p&gt;É isso mesmo! Nunca tive dúvida de que uma hora ou outra isso iria acontecer. A Oracle não é flor que se cheire; nunca fui com a cara dela. Talvez seja porque sou um adepto ao &lt;a href="http://www.google.com/url?sa=t&amp;amp;source=web&amp;amp;ct=res&amp;amp;cd=1&amp;amp;ved=0CAoQFjAA&amp;amp;url=http%3A%2F%2Fpt.wikipedia.org%2Fwiki%2FSoftware_livre&amp;amp;rct=j&amp;amp;q=software+livre&amp;amp;ei=MdJVS7z3OpLe8QbkytGmBA&amp;amp;usg=AFQjCNFAlOIDxRIJ7L1oVDMnIDRyqo4Kkg" target="_blank"&gt;software livre&lt;/a&gt; e não suporto a arrogância de certas empresas em relação a seus concorrentes que são livres.&lt;/p&gt;

&lt;p&gt;Bem, faça como eu, assine a petição para tentar salvar o MySQL. Todos sabemos o quão importante ele é pra comunidade do software livre e afins. Já fiz a minha parte, conto com a sua também! &lt;strong&gt;Divulgue!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Faça já sua parte: &lt;a href="http://helpmysql.org/pt/" target="_blank"&gt;http://helpmysql.org/pt/&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Temporização de wallpaper no GNOME</title>
    <link rel="alternate" href="http://vitoravelino.net/blog/blog/2010/01/03/temporizacao-de-wallpaper-no-gnome/"/>
    <id>http://vitoravelino.net/blog/blog/2010/01/03/temporizacao-de-wallpaper-no-gnome/</id>
    <published>2010-01-03</published>
    <updated>2010-01-03</updated>
    <author>
      <name>Vítor Avelino</name>
    </author>
    <summary type="html">&lt;p&gt;Quem é usuário do Windows 7 sabe do que esse post tratará. Na nova versão do sistema operacional da Microsoft eles criaram um sistema de múltiplos papéis de parede. A cada 30 minutos (configuração padrão, creio) troca-se o papel de parede automaticamente. Creio que essa tenha sido a única novidade que achei interessante em todo o produto. Enfim, não criei este post para falar desse SO nojento&amp;hellip;&lt;/p&gt;
</summary>
    <content type="html">&lt;p&gt;Quem é usuário do Windows 7 sabe do que esse post tratará. Na nova versão do sistema operacional da Microsoft eles criaram um sistema de múltiplos papéis de parede. A cada 30 minutos (configuração padrão, creio) troca-se o papel de parede automaticamente. Creio que essa tenha sido a única novidade que achei interessante em todo o produto. Enfim, não criei este post para falar desse SO nojento.&lt;/p&gt;

&lt;p&gt;Como usuário, já estava enjoando do mesmo papel de parede e não tinha paciência de ir no painel de configuração para trocar por um novo de tempos em tempos. Foi aí que surgiu a idéia de temporizar a mudança dos papéis de parede.&lt;/p&gt;

&lt;p&gt;De cara já veio a idéia de fazer um bash script para tal. Após algumas pesquisas, percebi que bastava uma simples linha de comando para trocar o papel de parede no GNOME, ambiente gráfico padrão do Ubuntu. Após algumas versões locais, surgiu o &lt;strong&gt;timing wallpaper&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;timing wallpaper&lt;/strong&gt; é um bash script que temporiza a troca do papel de parede do GNOME. Não importa a distribuição que você esteja usando, desde que o ambiente gráfico seja GNOME, funcionará perfeitamente. Fácil de instalar, configurar e utilizar. Lembrando que, é um software livre lançado sob a licença GPLv3. Instalando e/ou utilizar este software significa que você concordou com os termos da GPLv3.&lt;/p&gt;

&lt;p&gt;Ainda estou apanhando para lidar com a plataforma Launchpad, mas creio ter conseguido disponibilizar o básico do software nela. Caso venham a utilizar o script, recomendo que leiam o README e sigam a instruções que tudo dará certo.&lt;/p&gt;

&lt;p&gt;Para download, reportar bugs e afins, visite a página do projeto: &lt;a title="timing wallpaper project" href="https://launchpad.net/timing-wallpaper" target="_blank"&gt;https://launchpad.net/timing-wallpaper&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Dica: cuidado ao utilizar 'this' dentro de uma função anônima</title>
    <link rel="alternate" href="http://vitoravelino.net/blog/blog/2009/09/02/dica-cuidado-ao-utilizar-this-dentro-de-uma-funcao-anonima/"/>
    <id>http://vitoravelino.net/blog/blog/2009/09/02/dica-cuidado-ao-utilizar-this-dentro-de-uma-funcao-anonima/</id>
    <published>2009-09-02</published>
    <updated>2009-09-02</updated>
    <author>
      <name>Vítor Avelino</name>
    </author>
    <summary type="html">&lt;p&gt;Vamos direto ao ponto. O que acontece é que muitas vezes utiliza-se a palavra-chave &lt;em&gt;this &lt;/em&gt;para referenciar a classe/objeto como um todo e quando este mesmo &lt;em&gt;this &lt;/em&gt;é utilizado dentro de uma função anônima/closure de uma classe ele acaba referindo-se ao objeto Global e não a classe que possui aquela função&amp;hellip;&lt;/p&gt;
</summary>
    <content type="html">&lt;p&gt;Vamos direto ao ponto. O que acontece é que muitas vezes utiliza-se a palavra-chave &lt;em&gt;this &lt;/em&gt;para referenciar a classe/objeto como um todo e quando este mesmo &lt;em&gt;this &lt;/em&gt;é utilizado dentro de uma função anônima/closure de uma classe ele acaba referindo-se ao objeto Global e não a classe que possui aquela função.&lt;/p&gt;

&lt;p&gt;Segue um exemplo mostrando a quem o &lt;em&gt;this &lt;/em&gt;vai referir-se dependendo do escopo em que foi chamado:&lt;/p&gt;

&lt;pre&gt;
    &lt;code class="prettyprint"&gt;
package {
     public class Example
     {
         public function Example() {
            var f:Funcion = function():void { // função anônima
                trace(this);
            }
            f();
            trace(this);
         }
    }
}
    &lt;/code&gt;
&lt;/pre&gt;


&lt;p&gt;As saída serão:&lt;/p&gt;

&lt;pre&gt;
    &lt;code class="prettyprint"&gt;
[object global]
[object Example]
    &lt;/code&gt;
&lt;/pre&gt;


&lt;p&gt;A solução que encontrei para isso é guardar a referência da classe/objeto em algum lugar no escopo da classe.&lt;/p&gt;

&lt;p&gt;Segue um exemplo de como seria:&lt;/p&gt;

&lt;pre&gt;
    &lt;code class="prettyprint"&gt;
package {
     public class Example
     {
         var myThis:Example = this as Example;

         public function Example() {
            var f:Funcion = function():void { // função anônima
                trace(this);
            }
            f();
            trace(myThis);
            trace(this);
         }
    }
}
    &lt;/code&gt;
&lt;/pre&gt;


&lt;p&gt;A saída será:&lt;/p&gt;

&lt;pre&gt;
    &lt;code class="prettyprint"&gt;
[object global]
[object ClassExample]
[object ClassExample]
    &lt;/code&gt;
&lt;/pre&gt;


&lt;p&gt;Até a próxima! ;)&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Texto padrão/default para TextInput no Flex</title>
    <link rel="alternate" href="http://vitoravelino.net/blog/blog/2009/08/18/texto-padrao-default-para-textinput-no-flex/"/>
    <id>http://vitoravelino.net/blog/blog/2009/08/18/texto-padrao-default-para-textinput-no-flex/</id>
    <published>2009-08-18</published>
    <updated>2009-08-18</updated>
    <author>
      <name>Vítor Avelino</name>
    </author>
    <summary type="html">&lt;p&gt;Mais uma necessidade de uma das aplicações que desenvolvo e que gostaria de compartilhar. É um simples &lt;em&gt;textinput&lt;/em&gt; que caso não tenha nenhum valor inserido nele, será determinado um valor padrão/default para que tipo de informação deve ser inserida ali. Isso muito acontece em sistemas que possuem um campo de busca onde não há um label ou botão inferindo que aquele campo será utilizado para uma busca&amp;hellip;&lt;/p&gt;
</summary>
    <content type="html">&lt;p&gt;Mais uma necessidade de uma das aplicações que desenvolvo e que gostaria de compartilhar. É um simples &lt;em&gt;textinput&lt;/em&gt; que caso não tenha nenhum valor inserido nele, será determinado um valor padrão/default para que tipo de informação deve ser inserida ali. Isso muito acontece em sistemas que possuem um campo de busca onde não há um label ou botão inferindo que aquele campo será utilizado para uma busca.&lt;/p&gt;

&lt;p&gt;Bem, foi isso que fiz. Segue abaixo o código:&lt;/p&gt;

&lt;pre&gt;
    &lt;code class="prettyprint"&gt;
package net.vitoravelino {
    // imports...
    public class TextDefaultInput extends TextInput
    {
        private var _defaultText:String = &amp;quot;&amp;quot;; // caso não seja setado nada pelo desenvolvedor

        public function TextDefaultInput() {
            super();
            this.addEventListener(FlexEvent.CREATION_COMPLETE, function(evt:FlexEvent):void {
                setDefaultText();
            });
        }

        public function get defaultText():String {
            return this._defaultText;
        }

        public function set defaultText(s:String):void {
            this._defaultText = s;
        }

        override protected function focusInHandler(event:FocusEvent):void {
            super.focusInHandler(event);
            this.setStyle(&amp;quot;color&amp;quot;, 0x0B333C);
            if (this.text == DEFAULT_TEXT) {
                this.text = &amp;quot;&amp;quot;;
            }
        }

        override protected function focusOutHandler(event:FocusEvent):void {
            super.focusOutHandler(event);
            setDefaultText();
        }

        private function setDefaultText():void {
            if (this.text == &amp;quot;&amp;quot;) {
                this.text = DEFAULT_TEXT;
                this.setStyle(&amp;quot;color&amp;quot;, 0xCCCCCC);
            }
        }
    }
}
    &lt;/code&gt;
&lt;/pre&gt;


&lt;p&gt;Extendemos o componente TextInput e sobrescrevemos os métodos &lt;em&gt;focusInHandler&lt;/em&gt; e &lt;em&gt;focusOutHandler&lt;/em&gt;. O componente TextInput possui um &lt;em&gt;listener&lt;/em&gt; para os eventos de &lt;em&gt;focusIn&lt;/em&gt; e &lt;em&gt;focusOut&lt;/em&gt;. Quando &lt;em&gt;focusIn&lt;/em&gt; acontece, o componente estará pronto para ser utilizado de fato, ou seja, o usuário pode digitar qualquer texto. O &lt;em&gt;focusOut&lt;/em&gt; acontece quando o foco principal já não é mais o campo e sim outro componente. Aproveitando-se desses dois eventos é que colocamos um texto padrão/default indicando que o usuário pode  inserir um texto  para uma determinada operação. Também nos aproveitamos do &lt;em&gt;creationComplete&lt;/em&gt; para assim que o componente estiver pronto para ser utilizado, já estará setado o texto padrão/defaul.&lt;/p&gt;

&lt;p&gt;Confira a &lt;a href="http://dev.vitoravelino.net/flex/2/TextDefaultInput.html" target="_blank"&gt;demo&lt;/a&gt; e &lt;a href="http://dev.vitoravelino.net/flex/2/srcview/index.html" target="_blank"&gt;source&lt;/a&gt;.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>HTML 5: primeiras impressões</title>
    <link rel="alternate" href="http://vitoravelino.net/blog/blog/2009/08/08/html-5-primeiras-impressoes/"/>
    <id>http://vitoravelino.net/blog/blog/2009/08/08/html-5-primeiras-impressoes/</id>
    <published>2009-08-08</published>
    <updated>2009-08-08</updated>
    <author>
      <name>Vítor Avelino</name>
    </author>
    <summary type="html">&lt;p&gt;Há algum tempo já se vem discutindo o futuro da web em relação ao HTML5. Não se sabe ainda quando ficará pronto, mas já há muita coisa pronta e que dá para ser utilizada &lt;strong&gt;hoje&lt;/strong&gt;. Quando lí comentários a respeito, achei que o  HTML5 seria uma piada. Porém, pelo que ví hoje, quebrei e feio a cara. Mudanças consideráveis e maduras em relação ao velho HTML4 aconteceram; e eu gostei. ;)&lt;/p&gt;
</summary>
    <content type="html">&lt;p&gt;Há algum tempo já se vem discutindo o futuro da web em relação ao HTML5. Não se sabe ainda quando ficará pronto, mas já há muita coisa pronta e que dá para ser utilizada &lt;strong&gt;hoje&lt;/strong&gt;. Quando lí comentários a respeito, achei que o  HTML5 seria uma piada. Porém, pelo que ví hoje, quebrei e feio a cara. Mudanças consideráveis e maduras em relação ao velho HTML4 aconteceram; e eu gostei. ;)&lt;/p&gt;

&lt;p&gt;Quando entrei pro mundo web, comecei com HTML e mal. Vim realmente aprender sobre sintaxe e semântica com o surgimento do XHTML e do conceito &lt;em&gt;tableless&lt;/em&gt;. O que muito me alegrou no HTML5 foi poder escolher que sintaxe utilizar na hora de codificar: XHTML; e/ou HTML5. Ficou bem mais confortável para o desenvolvedor, já imaginou ter que continuar a fechar a tag &lt;em&gt;input&lt;/em&gt; como no HTML4?&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;Mas, o que de fato o HTML5 vem trazendo de interessante?&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Foram criadas novas tags que dão uma maior semântica a estrutura da página. Algumas delas são o &lt;a href="http://dev.w3.org/html5/spec/Overview.html#the-section-element" target="_blank"&gt;&amp;lt;section&amp;gt;&lt;/a&gt;, &lt;a href="http://dev.w3.org/html5/spec/Overview.html#the-header-element" target="_blank"&gt;&amp;lt;header&amp;gt;&lt;/a&gt; de uma section, &lt;a href="http://dev.w3.org/html5/spec/Overview.html#the-footer-element" target="_blank"&gt;&amp;lt;footer&amp;gt;&lt;/a&gt;, &lt;a href="http://dev.w3.org/html5/spec/Overview.html#the-nav-element" target="_blank"&gt;&amp;lt;nav&amp;gt;&lt;/a&gt;, &lt;a href="http://dev.w3.org/html5/spec/Overview.html#the-article-element" target="_blank"&gt;&amp;lt;article&amp;gt;&lt;/a&gt; e, &lt;a href="http://dev.w3.org/html5/spec/Overview.html#the-aside-element"&gt;&amp;lt;aside&amp;gt;&lt;/a&gt;. Os nomes delas já são auto-explicativos e vão substituir aquele monte de &lt;em&gt;div&amp;rsquo;s&lt;/em&gt; que utilizávamos para &amp;ldquo;fatiar&amp;rdquo; o layout como um todo da página. Em uma das referências há a construção de um layout completamente em HTML5 que não utilizou uma tag &amp;lt;div&amp;gt; sequer. Talvez tenha tornado-se um pouco mais trabalhoso/complexo a construção de estruturas sintaticamente e semânticamente corretas que o de costume, porém o retorno é bem maior dado  o nível de enriquecimento nesta versão.&lt;/p&gt;

&lt;p&gt;Outras tags interessantes que vieram no HTML5 são as &lt;a href="http://dev.w3.org/html5/spec/Overview.html#video" target="_blank"&gt;&amp;lt;video&amp;gt;&lt;/a&gt; e &lt;a href="http://dev.w3.org/html5/spec/Overview.html#audio" target="_blank"&gt;&amp;lt;audio&amp;gt;&lt;/a&gt;. Não é mais necessário &amp;ldquo;embedar&amp;rdquo; elementos de vídeo, por exemplo.&lt;/p&gt;

&lt;p&gt;Bem, mas onde fica o XHTML2 nessa história toda? Oo que mais se discute sobre ele são as especificações que não tem muito a ver com as versões antigas, XHTML1.X. Uma histórinha curta que explica um pouco da real situação do HTML5 e XHTML2 pode ser encontrada &lt;a href="http://www.smashingmagazine.com/2009/07/29/misunderstanding-markup-xhtml-2-comic-strip/" target="_blank"&gt;nessa tirinha&lt;/a&gt;. Não acredito que o XHTML2 venha causar algum impacto ao HTML5, como aconteceu com o XHTML1.X em relação ao HTML4.&lt;/p&gt;

&lt;p&gt;O pessoal está tão animado que acabam chamando o HTML5 de (X)HTML5, devido a aceitação da sintaxe XHTML. Um lema que está pegando é:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;Morte ao XHTML2, vida longa ao (X)HTML5!&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Tem bastante material bacana sobre HTML5. Não vou aprofundar-me mais no assunto porque essas são apenas as primeiras impressões que tive ao dar uma pequena pesquisada na web.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Referências&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; &lt;a href="http://www.smashingmagazine.com/2009/07/16/html5-and-the-future-of-the-web/" target="_blank"&gt;http://www.smashingmagazine.com/2009/07/16/html5-and-the-future-of-the-web/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt; &lt;a href="http://www.smashingmagazine.com/2009/08/04/designing-a-html-5-layout-from-scratch/" target="_blank"&gt;http://www.smashingmagazine.com/2009/08/04/designing-a-html-5-layout-from-scratch/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt; &lt;a href="http://html5doctor.com/" target="_blank"&gt;http://html5doctor.com/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</content>
  </entry>
</feed>

