quarta-feira, outubro 15, 2008

Cloud Computing - Programando nas Nuvens

cloud

Em muitos diagramas da informática, principalmente na área de redes de computadores, é comum retratar o ambiente diverso da internet como a figura de uma nuvem (cloud, em inglês) e não por acaso. Tal qual uma nuvem real, a internet apresenta uma estrutura maleável com centro indefinido e contornos em constante mutação. Logo, Cloud Computing passou a ser conhecido como o ato de se utilizar a internet como se a mesma fosse uma extensão de seu computador.

É uma tendência que vêm ganhando força ultimamente, principalmente com os investimentos realizados por gigantes como o Google, Yahoo!, Microsoft, IBM entre outras e objetiva de forma simples centralizar tarefas relativas a processamento de dados em um unico lugar. Na prática, o computador passaria a ser um pouco mais que uma porta de acesso à nuvem e os serviços oferecidos por ela, sem a necessidade de instalar pouco ou nenhum dado adicional, o que para uma empresa significaria uma boa economia em investimentos em hardware, backups e atualizações de softwares.

Entretanto, a tecnologia não é tão recente como aparenta ser, afinal ela é a base que sustenta grandes empresas como o Google, atual ícone da Cloud Computing, e que tornou o mesmo tão popular, seja por meio de seu famoso motor de busca (que vasculha a cada consulta 40 bilhões de páginas, selecionando as informações pertinentes e devolvendo-as ao usuário como links) ou atuais aplicativos on-line Gmail, Google Calendar, Google Docs, etc. Mas não só ela, o que impressiona na programação nas nuvens é a diversidade de soluções disponíveis, indo desde simples sistemas de armazenamento de dados, edição de fotos, editores de texto até mesmo sistemas operacionais! Pelo menos é o que prometeu no ínicio do mês Steve Ballmer, CEO da Microsoft. O S.O, provisoriamente chamado de Windows Cloud seria um projeto separado do Windows 7 e voltado para desenvolvedores de aplicativos WEB, já disponível antes do fim do ano segundo pronunciamento de Ballmer.

Mas, e como a Cloud Computing garante a segurança dos dados de seus usuários? Bom, isso é uma questão que ainda levanta polêmica entre os pesquisadores do assunto, embora a opinião geral seja que os riscos são mínimos para a área corporativa. Para eles, é mais vantajoso para pequenas e médias empresas manterem seus dados na nuvem do que armazena-los no HD de seus servidores. A explicação é que as empresas que oferecem serviços web geralmente possuem uma equipe especializada destinada a proteger os dados armazenados, sistemas robustos e atualizados de combate a vírus e invasões e backups frequentes, coisa que muitas empresas desse porte não tem condições de realizar por conta de baixos investimentos na área ou falta de pessoal capacitado.

Flexibilidade do Cloud Computing

Isso sem contar que a flexibilidade da internet, facilita o acesso aos dados tanto por computadores e notebooks até por celulares, PDAS e outros dispositivos digitais. O resultado de toda essa revolução seria por exemplo o fim de suítes de softwares, como o pacote Office da Microsoft, em virtude de serviços web gratuítos ou assinados períodicamente. Enfim, aparentemente vivemos mais um momento de mudança de conceitos com relação ao computador e a influência da web em nossas vidas. Ou talvez não? Mais uma vez na informática, a força dessa corrente só o tempo dirá.

Por Janio N. Lima

sábado, outubro 11, 2008

Live Search usando AJAX, PHP e MYSQL

Um recurso muito legal e útil usado em páginas da web 2.0, é o chamado “live search”. O live search consiste em uma caixa de pesquisa cujos resultados são exibidos em tempo real sem precisar recarregar toda a página. O exemplo é bem simples e pode ser visto em http://solleon.hostdegraca.com/cafecombits/livesearch/, onde basta digitarmos três letras e o resultado da pesquisa já é exibido logo a baixo.

Vamos agora demonstrar passo a passo como fazer uma busca do tipo “live search” para suas aplicações online.

Passo I – Fazendo um banco de dados para o exemplo

Para o exemplo vamos criar um banco de dados em MYSQL bem simples, contendo somente uma tabela, como monstrado a seguir:

bd

O script de criação do BD é:


SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

--
-- Banco de Dados: `exemplo`
--

-- --------------------------------------------------------

--
-- Estrutura da tabela `Frases`
--

CREATE TABLE IF NOT EXISTS `Frases` (
`CodFrase` int(11) NOT NULL auto_increment,
`frase` varchar(255) NOT NULL,
`autor` varchar(50) NOT NULL default 'Desconhecido',
PRIMARY KEY (`CodFrase`),
KEY `frase` (`frase`,`autor`),
FULLTEXT KEY `frase_2` (`frase`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='Frases interessantes' AUTO_INCREMENT=49 ;



Se preferir baixar este script, clique aqui.



Para excecutar o script de criação, podemos abrir o prompt de comando e simplesmente digitar:



shell> mysql < arquivo_texto



Também podemos abrir o client mysql e digirtar:



mysql> source filename



O client fará tudo de forma automatizada e teremos nosso banco de dados criado.



Cadastre algumas frases no banco de dados para poder vizualisar o exemplo mais tarde.





Passo II – Criação da página HTML para pesquisa e exibição dos dados



Nossa página em HTML será bem simples, terá apenas uma caixa de busca no topo, onde o usuário irá digitar uma palavra, e as frases que a contiverem serão exibidas logo abaixo.



Seu código HTML deve conter um form e uma div que daremos o nome de “resultado” para exibição dos resultados da consulta. O form deve ter um controle input, onde o evento onhotkey deve chamar uma função que fará a consulta.



Código HTML da página “index.html” do exemplo




<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


<html xmlns="http://www.w3.org/1999/xhtml">


<head>


<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />


<title>Exemplo de Live Search</title>


<style type="text/css">


<!--


body {


font-family: Arial, Helvetica, sans-serif; font-size: 0.7em;


color:#000;


margin:0;


padding:0;


}



#page {

width:720px;


height:100%;


margin-left:auto;


margin-right:auto;


margin-top:0;


padding:0;


}



#content {

width:85%;


margin-left:auto;


margin-right:auto;


padding:0;


padding-top:30px;


padding-left:5px;


padding-right:5px;


text-align:justify;
}



#resultado

{


background: #F5F5F5;


padding:15px;


border:#999 3px dashed;


}


.titulo {


font-size: 1.5em;


font-weight: bold;


text-align:center;


}



.subtitulo {

font-size: 1.3em;


font-weight: bold;


text-align:center;


}



label, input {
display: block;
}
fieldset {
border: dashed 3px #999;


background:#F5F5F5;


padding:15px;


}



-->

</style>


<script src="ajax.js" language="javascript" type="text/javascript"></script>


</head>



<body>

<div id="page">


<div id="content">


<span class="titulo">


Exemplo de Live Search usando AJAX, MYSQL E PHP


<br /><br />
</span>


<!-- este é o form de pesquisa, repare que não tem action e nem um controle submit-->


<form name="busca">
<fieldset>


<legend>Buscar frases</legend>


<!-- esta eh a caisa de pesquisa, repare no onkeyup chamando a funcao Buscar que fara a pesquisa-->


<input type="text" size="89" maxlength="255" name="texto" onkeyup="Buscar();" />
</fieldset>


</form>
<br />
<br />
<!-- essa div conterá o resultado da busca-->


<div id="resultado"><span class='subtitulo'>Digite uma palavra com mais de 2 (duas) letras. Por exemplo, <i>vida</i></span></div>


</div>


</body>


</html>



Este código HTML pode ser baixando na íntegra clicando aqui.



Salve o arquivo como “index.html” no seu servidor WEB.



Passo III – Criando o javascript da página “index.html”



O javascript da página, conterá funções que interpretam e tratam a entrada do usuário, que criam o xml request e lê o xml com o resultado da busca gerado dinamicamente e, por fim, formataram o resultado para o html adicionando a página.



Por razões óbvias, chamaremos esse arquivo de javascript de “ajax.js”, segue o código fonte do mesmo:



// JavaScript Document

var http_request = false;



//funcao que realiza a busca

function Buscar()


{


//pegando o valor do controle no form na pagina


var text = document.busca.texto.value;
//se o comprimento do texto for maior que dois


if (text.length >2)


{


//definindo pagina que fara a consulta e retornará o xml


var url = "buscar.php";


url += "?q="+text;


//gerando uma imagem do tipo carregando para que o usuario saiba que esta sendo feita uma busca no banco de dados


document.getElementById("resultado").innerHTML = "<div align='center' class='subtitulo'><img src='ajax-loader.gif' alt='Carregando...' /><br /><br />Carregando...</div>";


//chamando funcao que verifica se a busca pode ser feita


AtualizaResultado(url);


}


else


{


document.getElementById("resultado").innerHTML = "<span class='subtitulo'>Digite uma palavra com mais de 2 (duas) letras. Por exemplo, <i>vida</i></span>";


}


}


//coracao do ajax, cria o objeto xmlhttprequest e tenta lelo


function AtualizaResultado(url)


{



http_request = false;

if (window.XMLHttpRequest) { // Mozilla, Safari,...


http_request = new XMLHttpRequest();


if (http_request.overrideMimeType) {


http_request.overrideMimeType('text/xml');


}


} else if (window.ActiveXObject) { // IE


try {


http_request = new ActiveXObject("Msxml2.XMLHTTP");


} catch (e) {


try {


http_request = new ActiveXObject("Microsoft.XMLHTTP");


} catch (e) {}


}


}



if (!http_request) {

alert('Não foi possível criar uma instância XMLHTTP');


return false;


}


http_request.onreadystatechange = mudancaDeEstado; // essa funcao eh chamada quando o xml eh carregado


http_request.open('GET', url, true);


http_request.send(null);


}



//funcao que controi o resultado da busca

function mudancaDeEstado()


{


var retorno = "";


//definindo o xml


var xmldoc = http_request.responseXML;


//navegando para a tag item


var lst = xmldoc.getElementsByTagName('item');


var total = 0;


//criando a tabela para exibicao dos dados


retorno = "<table width='100%' border='0' cellpadding='2' cellspacing='2'>";


//percorrendo todos os itens


for (var i=0;i<lst.length;i++)


{


var frase = "";


var autor = "";


total = total +1;


var objNode = lst[i];


if (objNode.nodeType == 1)


{


for (var j=0;j<objNode.childNodes.length;j++)


{


var objNI = objNode.childNodes[j];


if (objNI.nodeType == 1)


{


switch (objNI.nodeName)


{


case "frase":


frase = objNI.firstChild.nodeValue;


break;


case "autor":


autor = objNI.firstChild.nodeValue;


break;


}


}


}


}


//criando row na tabela que conterá a frase e o autor


retorno += "<tr><td><i>&quot;"+frase+"&quot;</i> <strong>"+autor+"</strong></td></tr>";


}
if (total > 0)


{


retorno += "<tr><td><strong>"+total+" frase(s) listada(s)</strong></td></tr></table>";
}


else // no caso de não ter encontrado nenuma frase


{


retorno = "<span class='subtitulo'>Nenhuma frase encontrada com esta palavra</span>"


}


//escrevendo o resultado no documento


document.getElementById("resultado").innerHTML = retorno;


}



Para baixar o arquivo já pronto, clique aqui.



Você deve salvar este arquivo como “ajax.js” no mesmo diretório onde salvou o “index.html”, no seu servidor WEB.



Passo IV – Criando a página PHP que realizará a consulta no BD



Agora iremos confeccionar a página PHP que fará a consulta no banco de dados e formatará o resultado em um arquivo xml para ser usado pelo javascript. O nome do arquivo do exemplo será “search.php”.



Código fonte, lembre-se de alterar os dados da conexão ao banco de dados:



<?php

//capturando variaveis


$buscar = $_GET["q"];


//abrindo conexao com o bancode dados


$link = mysql_connect("hostmysqlqualquer", "usuario", "senha");


if (!$link)


{
echo 'Não foi possível selecionar o banco de dados';


die('Não foi possível conectar: ' . mysql_error());


}


if (!mysql_select_db('exemplo', $link))


{


echo 'Não foi possível selecionar o banco de dados';


exit;


}


//criando a consulta


$sql = "SELECT * FROM Frases";


if (isset($buscar) && $buscar != '')


{


$sql .= " WHERE frase LIKE '%".$buscar."%'";


$sql .= " ORDER BY frase";


}


//executando a consulta
$result = mysql_query($sql, $link);
if (!$result)


{


echo "Erro do banco de dados, não foi possível consultar o banco de dados\n";


echo 'Erro MySQL: ' . mysql_error();


exit;


}


//montando o xml de saida


echo '<?xml version="1.0" encoding="iso-8859-1"?>'."\n";


echo "<frases>\n";
while ($row = mysql_fetch_assoc($result))


{


echo "\t<item>\n";


echo "\t\t".'<frase>'.$row['frase'].'</frase>'."\n";


echo "\t\t".'<autor>'.$row['autor'].'</autor>'."\n";


echo "\t</item>\n";



}

mysql_close($link);
echo '</frases>';


?>



Se preferir baixá-lo, clique aqui.



Salve no mesmo diretório onde estão os outros arquivos, com o nome de “search.php”, no seu servidor WEB, coloque também a figura que será exibida quando a consulta estiver sendo executada no mesmo diretório, para baixá-la clique aqui.



Pronto! Agora é só acessar “index.html” do seu browser e testar se o exemplo está funcionando bem no seu servidor WEB. Não se esqueça de inserir alguns registros no banco de dados para poder testar a pesquisa! Valeu e até a próxima pessoal!



Por Solleon Menezes

terça-feira, outubro 07, 2008

Plataforma Windows - XP, Vista e Windows 7

Não é novidade para ninguem que o Windows Vista, o sistema operacional criado pela Microsoft para suceder o Windows XP em computadores desktop, não agradou boa parte dos usuários Windows. O sistema inovou trazendo interfaces ricas visualmente, com presença de recursos 3D, Transparências, luzes e sombras que unidos transmitiam uma cara de modernidade e elegância para o S.O e isso sem falar dos incrementos técnicos como uma melhor organização dos diretórios do sistema e uma otimização do sistema de buscas. Muito embora, a tão aclamada melhoria na segurança do sistema pareceu irrelevante por ser tão eficiente quanto a do windows XP com service packs e um bom software anti-vírus instalado, além de muito mais incômoda. Outro fator que influenciou de forma incisiva para uma lenta popularização do S.O, sem dúvida alguma foi a configuração mínima necessária para instalação, muito mais elevada que a de seus concorrentes. Afinal, todo o esforço gráfico envolvido no projeto tinha seu custo.

O resultado é que muitos usuários continuaram a utilizar o velho XP em suas estações. A Microsoft entretanto, vem tentando a todo custo tudo para forçar uma adaptação entre seus clientes com estratégias como a suposta descontinuação do produto que deveria ocorrer em julho último ou a redução crescente do suporte técnico ao produto em favor do Vista. O problema é que o mercado mundial de Computadores de baixo custo (que não possuem software suficiente para rodar o Vista) é uma fatia bastante considerável para se deixar nas mãos dos concorrentes, logo o XP ainda representa oportunidades para a microsoft.

A solução parece vir com o novo projeto de sistema operacional da gigante Microsoft, atualmente conhecido como Windows 7. O novo sistema já fora lançado em versão alfa, intitulada Milestone 3, e liberado para alguns testadores e originalmente teria data de lançamento marcada para 2010. Muito embora, comenta-se que o S.O já estaria pronto no fim do primeiro sementre de 2009. O que não seria de se estranhar, tendo em vista o indice de rejeição associado ao uso do Windows vista.

Pelas imagens já divulgadas em sites como o da Info Online ou do UX Evangelist percebe-se uma certa familiaridade dos gráficos do Windows 7 com o seu predessessor, muito embora, os envolvidos no projeto acreditem que o mesmo não exigirá tantos recursos quanto. Entre as imagens divulgadas, vale comentar a respeito da mudança do WordPad e do Paint que utilizando-se de recursos como as barras de ferramentas dinâmicas tornaram-se semelhantes à interface do pacote Office 2007, a calculadora que agora opera com o modo programador e economista e o pacote Windows Live que agora vêm integrado ao S.O. Confira as imagens:

paint7

wordpad7

calculator

segunda-feira, outubro 06, 2008

Speed Dial no Firefox

O recurso "Speed Dial" nativo do navegador Opera, agora está presente também no Firefox como add-on.

O complemento permite que nós configuremos várias páginas para ser acessadas rapidamente. Para usá-lo basta adicionar uma nova aba ao navegador, onde serão gerados previews das páginas pré-selecionadas, como na imagem a seguir.


Ao se clicar em um preview, somos direcionados ao website orginal. O add-on facilita muito o acesso aos nossos sites prediletos.

Instalar o complemento no Firefox é muito simples, basta clicar no link https://addons.mozilla.org/pt-BR/firefox/addon/4810 e aproveite o seu dia!

Quer aprender qual idioma? italki.com

Está com vontade de aprender inglês? Italiano? Chinês? Alemão? Japonês? Ou talvez até mesmo português? ;) Aprender um idioma é o objetivo do site de relacionametos Italki.

A proposta do site é oferecer ao usuário um aprendizado de uma língua a partir da conversação e troca de experiências com outros usuários. O visual é bem leve, clean e bonito. O site é super funcional, turbinado com ajax.

Logo ao acessar o seu profile, o site pergunta o que você está disponível para fazer no momento, como o status do msn, como ensinar alguém, conversar, aprender, está querendo tirar uma dúvida, etc.

O profile do usuário, além das informações usuais de qualquer site de relacionamentos, traz um perfil linguístico do usuário, onde selecionamos as línguas que estamos aprendendo, o tempo disponível para o aprendizado e as línguas que sabemos.

O site traz ótimos recursos como a possibilidade de colocar arquivos no profile, para que seus "alunos" possam pegar, a produção de material didático para que qualquer um possa acessar o que é chamado de "Contribuitions".

As comunidades, chamadas de grupos, são voltadas para o aprendizado e aperfeiçoamento das línguas desejadas. Temos comunidades sobre gramática, conversação no msn, conversação no skype, tradução do próprio site, etc.

Achar material didático também é fácil, o site possui uma guia no profile chamada de "Recursos", onde você pode achar sites, podcasts, videos, software, livros, etc.

Acesse http://www.italki.com e aproveite um ótimo serviço online da web 2.0... Ah! E aproveite para aprender!

terça-feira, setembro 30, 2008

A I Guerra dos Browsers By Discovery Channel

Recomendo a leitura do post antes de assitir ao documentário http://cafecombits.blogspot.com/2008/09/guerra-dos-browsers.html

quinta-feira, setembro 25, 2008

Publicando RSS com ASP.NET RSS Toolkit - Parte 2

Olá, Caros leitores.

No último artigo, aprendemos os princípios básicos que norteiam o padrão RSS, tão popular entre sites e blogs atuais, um pouco do histórico da tecnologia e estrutura interna de um feed RSS. Logo, estamos mais que prontos para iniciara contrução de nosso próprio Feed, publicá-lo e consumi-lo usando o Visual Studio 2008.

Para este artigo, estamos utilizando o componente open source ASP.NET RSS Toolkit disponível no repositório para .NET Framework conhecido como Codeplex e disponível neste endereço. Ele permite tanto facilitar a criação de RSS em seu website, quanto ferramentas para exposição de conteúdo de feeds, agilizando assim o processo de desenvolvimento, bem como torna fácil a transformação em RSS de conteúdos de diversos tipos e origens, sem necessariamente se criar uma base de dados para tal fim.


1. Instalação

Primeiramente, faça o download do RSS Toolkit e descompacte o conteúdo do arquivo em uma pasta. Dentro dela deve estar um arquivo RssToolkit.dll, é dele que iremos precisar.Crie um novo projeto web (Web Site ou Web Application, embora este último seja o mais recomendado devido a sua característica de compilar os arquivos de código em uma dll) e copie o RssToolkit.dll para dentro da pasta bin de seu site. Referencie o objeto a partir do VS 2008, o que pode ser feito com um simples clique no botão refresh do solution Explorer, caso seu projeto seja do tipo Web Site, ou clicando com o botão direito do mouse em References, selecionando a opção addReference e selecionando a dll através da aba Browse, caso o projeto utilizado seja do tipo Web application. Pronto, a nossa biblioteca de RSS, já fora instalada.








2. Implementação do Feed

Agora, adicione um nova página aspx, através do menu Project>Add New Item e selecione um item do tipo Web Form, e coloque o nome de “rss.aspx”. Com a página aberta na tela pressione F7 para ver o Code Behind do documento e adicione as linhas abaixo:

using RssToolkit.Rss;


using System.Xml;


using System.Collections.Generic;



namespace rss


{


public partial class rss : System.Web.UI.Page


{


protected void Page_Load(object sender, EventArgs e)


{


//inicializando o RSS


RssDocument RSSdoc = new RssDocument();


RssChannel canal = new RssChannel();


canal.PubDate = System.DateTime.Now.ToString();


canal.Description = "Posts sobre desenvolvimento de software e banco de dados";


canal.Title = "Canal de Desenvolvimento Café com Bits";


canal.Link = "rss.aspx";


RSSdoc.Channel = canal;


RSSdoc.Version = "2.0";



RSSdoc.Channel.Items = new List<RssItem>();



//preenchendo items


DataSet ds = new DataSet();


ds.ReadXml(Server.MapPath("datateste.xml"));


for (int i = 0; i < ds.Tables[0].Rows.Count; i++)


{


RssItem item = new RssItem();


item.Title = ds.Tables[0].Rows[i]["titulo"].ToString();


item.Description = ds.Tables[0].Rows[i]["resumo"].ToString();


item.Link = ds.Tables[0].Rows[i]["url"].ToString();


RSSdoc.Channel.Items.Add(item);


}



//criando stream


string outPutRSS = RSSdoc.ToXml(DocumentType.Rss);


XmlDocument doc = new XmlDocument();


doc.LoadXml(outPutRSS);


Response.ContentType = "text/xml";


doc.Save(Response.OutputStream);


Response.End();


}


}


}



Agora verificando um pouco o código, percebe-se que mesmo as classes utilizadas não fogem muito da estrutura hierárquica que aprendemos constituir o RSS. A classe RssDocument representa o elemento container do código RSS, ou a tag <RSS></RSS> numa comparação com um feed RSS comum, possuindo ainda as mesmas propriedades constituintes Channel e Version.

A classe RssChannel, da mesma forma, encapsula a estrutura interna da tag <Channel></Channel> e suas propriedades PubDate, Title, Description e Link e a coleção de notícias atualizáveis, representado pelo atributo Items.

Items utiliza a coleção de lista generics List<>, disponível através da inclusão da biblioteca System.Collections.Generics para ordenar objetos do tipo RssItem, que por sua vez armazenam as informações relativas a cada noticia publicada.

Agora analisemos mais um pouco as linhas de código listadas abaixo:

DataSet ds = new DataSet();


ds.ReadXml(Server.MapPath("datateste.xml"));


for (int i = 0; i < ds.Tables[0].Rows.Count; i++)


{


RssItem item = new RssItem();


item.Title = ds.Tables[0].Rows[i]["titulo"].ToString();


item.Description = ds.Tables[0].Rows[i]["resumo"].ToString();


item.Link = ds.Tables[0].Rows[i]["url"].ToString();


RSSdoc.Channel.Items.Add(item);


}




Temos um elemento DataSet, sendo preenchido com dados oriundos de uma fonte de dados qualquer (no nosso caso, um arquivo XML) e que percorrendo as linhas das tabelas constituintes do DataSet possibilitamos a inclusão de cada novo item na nossa lista.

A grande vantagem desse tipo de abordagem é que tornamos o processo de criação de feeds bastante geral e amplamente adaptável para qualquer tipo de tabela que necessitarmos, desde que tais dados possam satisfazer as propriedades do RSSItem e sem restrição com relação a fonte de dados utilizada para tanto, desde um simples arquivo XML até uma fonte de dados ODBC, um arquivo em Access ou baseada no cliente nativo do SQL Server ou de outros BDs.

Dando prosseguimento a nossa análise, percebemos outra vantagem da classe RssDocument. A classe gera toda a estrutura interna que acabamos de montar na linguagem XML e aplicando ainda o tipo de formatação específica para o formato de RSS a ser utilizado pelo desenvolvedor (a saber, RSS, ATOM, RDF, OPML e Unknow que representa um modelo que pode ser personalizado). Armazenamos então o retorno do métdo ToXml() na string outputRSS.



string outPutRSS = RSSdoc.ToXml(DocumentType.Rss);



Esse conteúdo será por fim carregado pela classe XmlDocument da biblioteca System.Xml e liberado para o usuário como Stream.

Para ver o resultado, sete a página como rss.aspx como inicial, clicando sobre o ícone que a representa no Solution Explorer e selecionando a opção “Set as Start Page” e pressione F5. O seu navegador deve exibir uma página contendo a estrutura do XML formado semelhante à mostrada abaixo.



3. Publicando o Feed


Com o nosso feed pronto, iremos fazer uma página agora para consumi-lo. Para este exemplo, vamos utilizar da página Default.aspx gerada automática mente quando criamos nosso projeto.

Siga até a Toolbar, clique com o botão direito do mouse em qualquer área disponível abaixo das barras de ferramentas comuns ao VS 2008 e selecione Add Tab e ponha o nome de “RSS Toolkit”, em seguida clique novamente com o botão direito em qualquer área em branco disponível para aba que acabou de criar e selecione a opção Choose Items, siga até a pasta Bin onde colocamos o RssToolkit.dll e selecione-o, clicando ok em seguida. Repare que a Toolbar fora preenchida com dois novos componentes, o RssHyperlink e o RssDataSource. Selecione o primeiro e arraste até uma área desejada na página Default.aspx.

O RssHyperLink estende o componente nativo HyperLink do .NET e possui um recurso importante que é o fato de que cada componente desse tipo colocado na página, além da função básica que lhe é destinada, ou seja, servir de meio de locomoção entre páginas, cria em tempo de execução tags HTML no seguinte formato:



<link rel="alternate" type="application/rss+xml" title="Teste" href="rss.aspx" /></head>


<a id="RssHyperLink1" href="rss.aspx">Teste</a>




Permitindo a inclusão de muitos novos feeds a uma página, com poucas linhas de código, bem como também permite a escolha de um canal específico quando o repositório for multicanal ou permite informar usuário quando o RSS exigir autenticação. Além disso, desde que o RssHyperlink herda várias funcionalidades do componente HyperLink é possível decorá-lo da mesma forma que sua classe pai, seja através de CSS, imagens ou outros detalhes.

Agora, sete a página Default.aspx como inicial, “Set as Start Page” no Solution Explorer, e pressione F5. Repare que na barra de endereços já pode ser encontrado o símbolo universal do RSS com a opção de inscrição assim que se clica com o botão esquerdo do mouse sobre ele, sendo o usuário dessa forma, direcionado para uma página semelhante a abaixo.




Bom, por hoje é só. No próximo artigo dessa série mostrarei que variadas opções de consumo de rss podem ser feitas, oferecendo inúmeras possibilidades de personalização de interface e consumo de feeds rss de terceiros. Até lá!!


Gostou? Faça o download do código fonte

Por Janio N. Lima

Publicando RSS com PHP e MYSQL

Se você ainda não sabe o que é RSS, dê uma lida no post RSS e asp.net parte I , que você encontrará os conceitos introdutórios sobre o tema. 


1. Introdução


Para que qualquer site possa servir RSS, é necessário que ele forneça ao programa leitor, um arquivo XML, contendo os dados, pois RSS, como já sabemos, é nada mais que um arquivo XML que segue uma padronização da estrutura específica. Podemos fornecer esse XML de duas formas, ou através de um arquivo estático XML propriamente dito salvo em nosso servidor, ou por meio de uma página PHP que pode gerar esse XML dinamicamente para nós. No nosso caso vamos gerar por meio de uma página PHP.



Antes de partirmos para a feitura da página, precisamos antes guardar as informações que publicaremos no RSS em algum lugar. Na informática, lugar de armazenar informações é em banco de dados. No nosso caso usaremos o banco open-source MySQL, disponível para download em http://www.mysql.com.


2. Criando o banco de dados


A estrutura do arquivo RSS é bem definida. Temos as seguintes entidades Channel e Item, que possuem a seguinte estrutura e se relacionam da seguinte forma:



O script para criação dessa estrutura é este:


SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';

CREATE SCHEMA IF NOT EXISTS `RSS` ;
USE `RSS`;

-- -----------------------------------------------------
-- Table `RSS`.`Channel`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `RSS`.`Channel` (
  `idChannel` INT NOT NULL AUTO_INCREMENT ,
  `title` VARCHAR(255) NULL DEFAULT NULL ,
  `link` VARCHAR(255) NULL DEFAULT NULL ,
  `description` TEXT NULL DEFAULT NULL ,
  PRIMARY KEY (`idChannel`) )
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `RSS`.`Item`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `RSS`.`Item` (
  `idItem` INT NOT NULL AUTO_INCREMENT ,
  `title` VARCHAR(255) NULL DEFAULT NULL ,
  `link` VARCHAR(255) NULL DEFAULT NULL ,
  `description` TEXT NULL DEFAULT NULL ,
  `idChannel` INT NULL DEFAULT NULL ,
  PRIMARY KEY (`idItem`) ,
  CONSTRAINT `fk_Item_Channel`
    FOREIGN KEY (`idChannel` )
    REFERENCES `RSS`.`Channel` (`idChannel` )
    ON DELETE RESTRICT
    ON UPDATE CASCADE)
ENGINE = InnoDB;

CREATE INDEX fk_Item_Channel ON `RSS`.`Item` (`idChannel` ASC) ;



SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;

Você também pode baixá-lo na integra aqui.


Para excecutar o script de criação, podemos abrir o prompt de comando e simplesmente digitarmos:


shell> mysql < arquivo_texto


Também podemos abrir o client mysql e digirtarmos:


mysql> source filename


O client fará tudo de forma automatizada e teremos nosso banco de dados criado.


3. Criando a página PHP para geração do RSS


A página PHP gerará primeiro uma string contendo todo o XML, depois enviará para o leitor de RSS o resultado. Segue abaixo o código fonte da página PHP:
<?php
//criando cabeçalho do arquivo
$xml = '<?xml version="1.0" encoding="iso-8859-1"?>'."\n";
$xml .= '<rss version="2.0">'."\n";

//setando dados da conexao e do banco voce deve substituir pelos seus dados de conexão
$host = "mysql.test.com";
$user = "usuario";
$pass = "senha";
$db = "RSS";

//fazendo a conexão com o banco de dados que contem os dados RSS
mysql_connect($host, $user, $pass);
mysql_select_db($db);

//pegando dados do channel no banco
$sql = "SELECT idChannel, title, description, link FROM Channel ORDER BY idChannel DESC";
$reschan = mysql_query($sql);

//enquanto ainda houver dados do channelm executar codigo dentro do while
while ($rowchan = mysql_fetch_assoc($reschan))
{
    //abrindo tag do Channel
    // obs: \n = nova linha   
    $xml .= '<channel>'."\n";
   
    //formatando os dados nas tags rss do Channel   
    $xml .= '<title>'.htmlspecialchars($rowchan['title']).'</title>'."\n";
    $xml .= '<description>'.htmlspecialchars($rowchan['description']).'</description>'."\n";
    $xml .= '<link>'.htmlspecialchars($rowchan['link']).'</link>'."\n";
   
    //pegando dados dos Itens do Channel no banco de dados
    $sql = "SELECT title, link, description FROM Item WHERE idChannel = ".$rowchan['idChannel']." ORDER BY idItem DESC";
    $result = mysql_query($sql);
   
    //enquanto ainda houver itens no banco, executar codigo dentro do while
    while ($row = mysql_fetch_assoc($result))
    {
        //formatando dados do item nas tags RSS
        $xml .= '<item>'."\n";
        $xml .= '<title>'.htmlspecialchars($row['title']).'</title>'."\n";
        $xml .= '<description>'.htmlspecialchars($row['description']).'</description>'."\n";
        $xml .= '<link>'.htmlspecialchars($row['link']).'</link>'."\n";
        $xml .= '</item>'."\n";
    }
   
    //fechando tag do channel
    $xml .= '</channel>'."\n"; 
}

//fechando a tag rss
$xml .= '</rss>';

//retornando todo o xml pro leitor de rss do usuário
echo $xml;
?>
O código fonte acima pode ser baixado aqui. Salve a página PHP em seu servidor PHP e pronto! Bastará colocar o endereço da página no seu leitor de RSS e você verá que funciona!


4. Testando


Para testar o código da página PHP, fizemos um exemplo que você pode ver aqui. Se tudo der certo ao vizualizar no  Firefox você verá uma página semelhante a essa:




Por Solleon Menezes

Publicando RSS com o ASP.NET RSS Toolkit – parte 1

Mas, o que é RSS?

Se você costuma ler blogs freqüentemente como o Café com Bits ou outros mais, já deve ter notado que um símbolo laranja aparece na barra de navegação de seu browser ou mesmo um ícone (geralmente também laranja) com a sigla RSS. Mas, o que significa essa sigla e oque ela representa para o desenvolvimento para a web?

Para explicar mais a fundo sobre tema, vamos detalhar mais nosso exemplo. Então suponha que você costuma visitar muitos blogs e quer se manter informado das mudanças que ocorrem em cada um deles. Dependendo do número de blogs e sites que costume acessar, essa tarefa pode se tornar bastante dispendiosa, sem falar que muitos deles possam não ter conteúdo novo para oferecer naquele momento. Não seria interessante que assim que você abrisse o seu navegador de internet, pudesse visualizar quais de seus sites costumeiramente acessados possuem atualizações ou não? Pois isso é exatamente o que o RSS faz!

Definição

A sigla RSS possui vários significados como RDF Site Summary, Rich Site Summary ou mais costumeiramente de Really Simple Syndication e foi criado no início de 1999 pela Netscape que abandonou o projeto por considerá-lo não viável. Entretanto uma pequena empresa chamada UserLand decidiu dar continuidade a ele e aplicá-lo a sua ferramenta de blogs, o que para tanto necessitou de uma revisão no código do Netscape de forma a simplificá-lo. Em pouco tempo o RSS 0.91 foi lançado e as inovações continuaram a seguir, atualizando e dinamizando o padrão até chegar a sua versão atual, 2.0.

O padrão RSS é baseado em XML e permite que desenvolvedores e gestores de conteúdo divulguem noticias e novidades de seus sites para seus visitantes. Isso é feito geralmente pelo armazenamento do titulo, link e resumo de uma noticia em um arquivo de extensão .xml, .rss ou .rdf, conhecido como Feed. Assim, aqueles interessados em acessar o conteúdo podem incluir o link do feed em algum programa leitor de RSS (agregador) que captura o conteúdo dos arquivos, indexando-os e exibindo em sua interface gráfica.

Estrutura

A estrutura de um Feed RSS, é algo semelhante ao mostrado abaixo:





<?xml version="1.0"?>


<rss version="2.0">


<channel>


<title>Examplo de Canal</title>


<link>http://exemplo.com/</link>


<description>Exemplo de Canal RSS</description>


<item>


<title>Noticia1</title>


<link>http://exemplo.com/not1</link>


<description>Noticia teste 1</description>


</item>


<item>


<title>Noticia2</title>


<link>http://exemplo.com/not2</link>


</item>


</channel>


</rss>



Primeiramente, a tag é fundamental porque delimita a área do documento RSS e expecifica sua versão, no nosso caso, a versão 2.0. Dentro dela encontramos o atributo channel que indica o canal do feed RSS e guarda atributos importantes como link, que armazena o endereço url do site, title que provê seu título, description que descreve um pouco a respeito do site, ou alguma outra informação secundária como o slogan publicitário. Além de language e webmaster, tags que apesar de pouco usadas oferecem informações adicionais a respeito do idioma utilizado e o responsável (ou o e-mail do mesmo) pelo Feed.

Entretanto, a tag mais importante dessa estrutura, sem dúvida é a . Dentro dessa área encontra-se a notícia propriamente dita, logo, se existem duas notícias a serem divulgadas, haverá duas tag item no documento, sendo portanto a particular que mais vezes aparecerá dentro da estrutura do RSS Feed.

Entre os atributos internos da tag item, encontram-se a tag title, representando o título da noticia, a tag pubDate, representando sua data de publicação, a tag description, que oferece um resumo (ou em alguns casos, o texto completo) (ou em alguns casos, o texto completo) da noticia , a tag link que aponta para o endereço url, a tag autor e a tag category que permite ao desenvolvedor informar a classificação daquela informação.

Entretanto o padrão RSS ainda é um XML em sua essência e tal qual esse, é possível escrever o código acima em qualquer editor de texto (como o bloco de notas) de forma manual e salvando como um arquivo de extensão .xml ou .rss ou utilizar-se de programas geradores de RSS que pode se encontrar aos montes pela internet.

Símbolo do RSS

Saber se determinado site era servido por RSS até bem pouco tempo atrás significava torcer para bater o olho em um ícone laranja com a sigla do padrão apertada em seu interior. Até que em sua versão 1.5, o navegador Mozilla Firefox passou a adotar um símbolo diferente para representar o padrão RSS e alertar quais páginas contêm essa tecnologia.

O que aconteceu foi que o símbolo (um quadrado laranja onde se vê algo como ondas sendo transmitidas) acabou se tornando tão popular entre os internautas que acabou se tornando o símbolo universal do RSS.

logo universal do RSS

Bom, hoje ficamos com uma pequena noção a respeito do RSS e de sua importância para o desenvolvimento voltado para a web. No próximo artigo, veremos como criar nosso próprio feed RSS, publicá-lo e consumi-lo perfeitamente usando o Asp.Net RSS Toolkit, integrado ao Visual Studio 2008. Até lá!!

A Guerra dos Browsers

Há pouco mais de 10 anos existia um browser chamado Netscape que que vivia um "eterno" conflito com seu arquirival Internet Explorer. A cada novo recurso que um lançava o outro não ficava atrás e na próxima versão copiava as inovações do outro. A guerra ia sendo travada com vantagens para um, mas o golpe mortal foi dado pela Microsoft quando integrou o Internet Explorer ao Windows. O Netscape morreu e pouca gente ainda lembra que o mesmo existiu. 

Hoje, ainda há uma guerra. Mas a situação é bem diferente. Se de um lado temos o IE com uma enorme vantagem sobre seus competidores, do outro temos vários browsers, cada um tendo uma pequena fatia do mercado, porém com uma filosofia de negócio bem diferente. Enquanto o IE é um software de código fechado integrante de um "pacote" de aplicativos que vem pré-escolhidos com o sistema operacional Windows, os demais browsers são, na sua maioria, softwares livres instalados espontaneamente pelos usuários. A liderança folgada do IE vem caindo mês a mês, em grande parte pela falta de inovação do browser, que não consegue acompanhar o rítmo alucinante dos competidores. O IE também apresenta várias falhas de segurança, além de ocupar mais memória e renderizar as páginas mais lentamente. 

Dos rivais do IE se destaca o Firefox, mantido pela Mozilla. O Firefox tem como maior fonte de renda as pesquisas feitas na barra de pesquisas pelo Google. Sua interface é altamente personalizável pela enorme quantidade de add-ons e temas disponíveis, o que faz o browser se adaptar perfeitamente as opções e gostos dos seus fiéis usuários. Outra vantagem do Firefox é que o mesmo é portável para várias plataformas, dentre elas o Linux. 

Também temos o Safari e o Opera. O Safari saiu do seu nicho principal, os MAC users, e passou a se difundir pelos usuários do Windows por sua rapidez e leveza. Já o Opera é outro software livre inovador e atende a um nicho bem específico do mercado. É conhecido por renderizar páginas rapidamente e por ter algumas boas inovações, como o "Speed Dial", onde podemos visualizar previews e acessar nossas páginas prediletas rapidamente, e a "Lixeira", onde podemos acessar em um click as abas fechadas recentemente. 

Se a guerra estava esquentando, agora então ferveu com a entrada da gigante da internet na arena: o Google. A empresa vinha trabalhado secretamente em um novo browser chamado de Google Chrome. Ao contrário da Microsoft o Google aderiu ao software livre e usou trechos de código do Firefox e Safari para criar seu navegador. O mesmo traz vários recursos técnicos inovadores e principalmente com um desempenho de arrasar! De todos os browsers citados é o que renderiza mais rapidamente as páginas. Seu motor de javascript, sugestivamente chamado de V8, foi completamente reformulado para atender a demanda da WEB 2.0 e o resultado foi arrasador. Quanto ao gerenciamento de memória, o browser consome mais quando inicializa, mas a cada nova aba aberta pouca memória adicional é utilizada fazendo com que seja o mais econômico dentre os rivais quando está com 3 abas abertas por exemplo. 

A Google declarou que não desejava bater em nenhum browser, mas sim esquentar um mercado morno e direcioná-lo para atender as necessidades de suas aplicações online, como o Gmail, Google Maps, etc. O Chrome foi recebido bem pela comunidade online por ter nascido com um tom colaborativista e inovador, o que, aliás, é a cara do Google. 

O futuro dessa guerra ainda não está definido e talvez nunca esteja. O melhor disso tudo, é que quem sai ganhando é o consumindor, que tem diante de sí tantas opções de boa qualidade e que evoluem rapidamente. Se cuida IE, o fantasma do Netscape está ressurgindo entre seus vários rivais!

Sucesso do programa Pc-Conectado faz governo aumentar incentivos

2006 foi um ótimo ano para o mercado brasileiro de computadores. Acumulando vendas que chegam à marca dos nove milhões de unidades, segundo dados do Assessor Especial da Presidência da República José Luís Maio de Aquino, muitos especialistas já acreditam que estamos presenciando o boom do setor no país. Para se ter uma idéia do tamanho de tal crescimento, a consultoria IDC Brasil, especializada em TI, em sua projeção de vendas para o último trimestre de 2006 apontou para um crescimento de quase 30% em relação a ano anterior, ou equivalente ao total obtido em 2003.

Entre os fatores apontados para esse crescimento acelerado estão a disponibilidade de crédito aos consumidores (com financiamento de até 24 meses), a valorização do real em relação ao dólar e a venda de produtos do Programa Cidadão Conectado-Computador para Todos ou PC Conectado do Governo Federal, que foram responsáveis por cerca de um milhão dos 9 citados pelo Assessor. Esse programa, criado em outubro de 2005 tinha por objetivo oferecer isenção das alíquotas de PIS/Cofins para desktops e notebooks com valores até R$ 2,5 mil de modo a viabilizar sua aquisição pela população de baixa renda e já em seu ano de abertura acumulou vendas de 40 mil unidades.

O sucesso do programa incentivou o governo a inseri-lo entre as medidas de desoneração de impostos previstas pelo novo mandato Petista, o qual investirá R$ 600 milhões em ações que visem aumentar seu campo de atuação, como aumento dos incentivos fiscais, universalização da internet e investimento no mercado de portáteis.

Aumentando o valor do produto (tanto desktops quanto notebooks) financiado para um limite de R$ 4 mil, o governo pretende estender os benefícios do programa para atender às micro e pequenas empresas, bem como demais usuários que desejem adquirir máquinas mais potentes. Enquanto que pretende negociar junto às operadoras de telefonia um barateamento do acesso à internet através de uma assinatura mensal no valor de R$ 7,50 mais impostos que daria direito a 15 horas de conexão mensais, além das tarifas reduzidas para fins de semana, feriados e madrugada, buscando com isso ampliar o acesso da população à internet e a uma universalização da banda larga.

Já para os computadores móveis, o governo pretende adotar políticas mais ousadas, confiante que 2007 será o ano dos laptops, através linhas de financiamento especiais e redução de impostos que propiciem a aquisição desses produtos por um valor menor que R$ 2 mil. A idéia é atingir a educação através da fabricação de um produto destinado aos professores, posto a característica de mobilidade e baterias independentes dos portáteis, facilitando seu uso tanto em casa quanto na sala de aula.

Com esse programa, ainda, o governo tenciona reduzir a participação do chamado mercado cinza, o mercado da informalidade, que ano passado possuía uma fatia de mercado estimada em 68% e que este ano diminuiu para algo em torno de 50%. A expectativa é que a redução dos preços dos produtos reduza ainda mais a informalidade e que o mercado oficial ultrapasse o cinza em um prazo relativamente curto.

Parece ser um mercado tão promissor que até gigantes na área da informática como a Intel e a Microsoft tentam convencer o governo de que querem colaborar com o projeto, que tem como maior beneficiado o consumidor brasileiro.

Por Janio N. Lima

Fontes: Portal Info Online - http://www.infoexame.com.br
Portal TI Inside - http://www.tiinside.com.br
Portal Computador para Todos http://www.computadorparatodos.gov.br

Até onde vai a liberdade na internet?

Primeiro veio a crise do Orkut, quando o Ministério Público Federal entrou com uma ação contra a filial da Google Inc em solo brasileiro, Google Brasil, devido a crimes cometidos por usuários cadastrados no serviço tais como apologia à pedofilia, ao suicídio, nazismo e formação de gangues só para citar alguns. Agora, a recente decisão judicial que restringiu o acesso dos brasileiros ao site de vídeos You Tube reabre a discussão a respeito de até onde uma medida pode ser considerada controle de conteúdo ou ato de censura.

Ambos os sites, de propriedade da gigante americana Google, tem como principal característica permitir a troca de experiências e idéias entre seus usuários por uma “freeway” (via livre). Mas como evitar que a prática da livre expressão passe de uma saudável interação social para algo nocivo a sociedade?

No caso do site de relacionamentos, que está presente em diversos países do mundo mas que encontrou casa em termos de números de participantes no Brasil, a grande popularidade do serviço tornam ineficientes as tentativas de controle do conteúdo. Para se ter uma idéia da proporção do problema, basta verificar que para cada comunidade ou perfil de usuário deletado, um novo perfil ou comunidade surge para ocupar o espaço quase que imediatamente.

Quanto a polêmica entre Daniella Cicarelli e o You Tube, site de vídeos pela internet mais famoso do mundo, a decisão judicial que bloqueou o acesso a nível nacional decorreu do fato da empresa alegar que a impossibilidade de restringir a vinculação de um único vídeo entre os milhares diariamente divulgados, o que levou a justiça a bloquear o acesso diretamente no IP de origem para se fazer cumprir suas determinações. E dessa forma, os brasileiros perderam o direito de navegar pela páginas de um dos sites com maior diversidade da internet que é conhecido tanto por gerar polêmica como a recente divulgação da execução do ex-ditador Saddam Hussein, ou a repercussão causada pelos vídeos da ocupação americana no Iraque, feitas pelos próprios soldados. Isso sem falar nos milhões de vídeos caseiros publicados por internautas de todos os cantos do mundo.

Mas tentar restringir conteúdo da web é como tapar o sol com uma peneira. Além das dificuldades já citadas para a adoção das medidas, é fato conhecido que quando um terminado serviço é desabilitado na internet, seus usuários tendem a migrar para um novo serviço de cunho semelhante, quando não acontece dos mesmos tomarem suas própras medidas para burlar obstáculos como aconteceu com o You Tube apenas algumas horas após os provedores restringirem o acesso a página.

O que nos resta saber é até quando os velhos métodos determinados pela legislação brasileira poderão conviver com o ambiente dinâmico desse novo território sem transformá-lo em um regime ditatorial para seus usuários.

Por Janio N. Lima

A Oitava Maravilha da Telefonia Móvel


Você poderia muito bem dizer que é mais das centenas de clones do iPod, mas a apesar da aparência de tocador de vídeos, estamos diante do revolucionário e aguardado iPhone, telefone celular + iPod da Apple. 

Esta belezinha foi anunciada esta semana pelo presidente da Apple, Steve Jobs, que, com o anúncio, fez subir as ações da empresa e cair os papéis das concorrentes do mercado de telefonia móvel. O que podemos dizer é que o produto é completamente empolgante e revolucionário. A primeira coisa que se nota é a ausência de um teclado. Mas não se assuste, o teclado é na realidade um amplo monitor sensível ao toque. O monitor é um capítulo a parte, uma tela LCD de 3.5 polegadas usando uma nova tecnologia que permite identificar mais de um toque ao mesmo tempo. Com isso temos funções do tipo, zoom em imagens, rotação, etc. feitas usando dois dedos.

O iPhone possui sensores de movimento especiais que identificam a posição do aparelho ajustando o conteúdo a tela e criando novas possibilidades de interface com isso. Também há sensores de proximidade que permitem identificar quando o aparelho está próximo ao ouvido desligando o monitor automaticamente de modo a economizar energia. Outro sensor presente é o de luminosidade que ajusta as configurações do visor automaticamente de acordo com a luz ambiente poupando bateria.

O celular possui uma câmera de 2 megapixels integrada que permite fotos nítidas e equiparáveis a uma câmera digital comum.

Com poucos mais de 11 centímetros de comprimento e 1 centímetro de largura, o telefone toca músicas no formato MP3, mostra vídeos, acessa a WEB, envia e recebe emails, roda aplicativos... São tantas funções e recursos que podemos dizer que o iPhone é também um smartphone (põe smart nisso!). Reforçando a frase anterior a 'máquina' roda o sistema operacional Mac OS X.

No quesito conectividade, o celular não perde em nada para os principais notebooks no mercado, integrando as tecnologias Bluetooth e WiFi. O disco rígido existe em duas versões 4GB e 8GB. A durabilidade da bateria é estimada em 4 a 8 horas de conversação, vídeos e navegando na web a 15 a 18 horas escutando músicas.

Como não poderia deixar de ser o mesmo acessa a loja online iTunes e é capaz de baixar e gravar músicas e vídeos de lá.

Toda essa sopa tecnológica não sai por menos de 455 dólares nos Estados Unidos, já aqui podemos esperar qualquer coisa mais salgadinha. Quem quiser ver e saber mais acesse o site: http://www.apple.com/iphone e divirta-se!