Microsoft e Linux juntam-se pelo software
A Microsoft e a Linux Foundation decidiram juntar esforços para ajudar a mudar as novas directrizes de licenciamento de software.

O objectivo desta parceria é que o American Law Institute mude as recomendações que vai propor no campo das decisões jurÃdicas de software , noticia a imprensa internacional.
As duas empresas pedem que a aprovação destas directrizes seja adiada, para darem sugestões e uma definição mais clara de responsabilidades nas garantias dadas ao software com defeito. A Linux Foundation, pelo seu director Jim Zemlin, considera que «os princÃpios especificados pela ALI interferem com o processo natural das licenças de código aberto ou comerciais e criam garantias implÃcitas que podem resultar numa quantidade tremenda de processos desnecessários».
Horacio Gutierrez, da Microsoft, considera que as duas empresas estão «unidas pelo software». Exame Informática
Fonte: PeopleWare
Está despedido – foi o Google que disse!
O Google criou uma ferramenta que permite identificar quem vai deixar a empresa. Trata-se de um algoritmo destinado a tentar identificar quais são os profissionais que poderão deixar o motor de busca na Internet.

O Google decidiu avançar com esta criação depois de ter perdido recentemente vários dos seus quadros superiores.
De acordo com uma notÃcia do «Wall Street Journal», a empresa recorreu a uma fórmula matemática que se encontra em teste para travar a fuga de cérebros que estava a ameaçar a capacidade competitiva da empresa a longo prazo.
Esta ferramenta avalia as promoções concedidas aos funcionários e a evolução dos seus salários para tentar perceber quais dos seus 20 mil empregados têm maior probabilidade de abandonar a empresa. Agência Financeira
Fonte: PeopleWare
300 DVDs num só disco?
Um disco de «cinco dimensões», com capacidade de armazenamento 10 mil vezes superior aos actuais DVDs, pode chegar ao mercado em dez anos, revelaram ontem investigadores da Swinburne University of Technology na Austrália

Investigadores australianos desenvolveram um novo método de gravação de dados em camadas de vidro que permite armazenar 1.6 Terabytes, o que equivale a registar 300 DVDs num único disco.
De acordo com uma reportagem da BBC sobre um artigo publicado na revista Nature, trata-se de uma gravação óptica em cinco dimensões (5-D), com recurso a partÃculas de ouro, em escala nanométrica, que pode vir a ser comercializado dentro de dez anos.
O grupo de investigadores afirma ter adicionado três dimensões às duas já existentes nos CDs e DVDs correntes graças à manipulação de propriedades particulares dos «nanotubos» de ouro.
Além de ser possÃvel produzir em larga escala, o custo do material usado no novo método de gravação atinge valores muito reduzidos. SOL
Métricas para o uso de bibliotecas de terceiros
O desenvolvimento de software nos dias de hoje, como muitas outras áreas, está cada vez mais padronizado. Com isso se tem menor número de códigos escritos e maior número de bibliotecas de terceiros. Quando digo biblioteca, me refiro a códigos em geral (frameworks, libs, classes).
Esse fato é visto por uns como ponto positivo, mas por outros como negativo.
Mas o caso é não podemos ter essa visão única para o caso geral de todos os códigos adicionais de terceiro, pois existem várias situações que podem mudar o cenário.
Antes de tomar uma iniciativa de importar uma lib devemos avaliar idéias de outras pessoas em relação à ela. Para isso basta entrar em alguns fóruns ou fazer uma busca rápida na Internet. Nesses sites podem-se encontrar muitos prós e contras para a lib e, baseado nelas, é possÃvel descartá-la. Lembrando que à s vezes o que é considerável contra por alguém, pode ser uma coisa simples para outra pessoa. Portanto vale uma leitura mais crÃtica, analisando a viabilidade no projeto e na situação em que está. Outra coisa que vale destacar é o nÃvel de seriedade do site em que se encontraram as opniões, pois é o mesmo que ler uma notÃcia em um site especializado, ou um blog crÃtico que te direciona para outras visões da mesma notÃcia, ou em um blog que distorce as informações focando ideologias próprias.
Nessa pesquisa é bom ver como é a licença para uso nos projetos comerciais, se o projeto é ativo com muitas atualizações de versões ou se as atualizações de versão são apenas para correção de bug, se ela é livre para modificação, etc.
Passando a etapa de pesquisas, passamos para a parte prática, onde deve-se fazer uma comparação de desempenho de funcionalidades com e sem ela, além de ver se a lib te proporciona a escalabilidade necessária para o que seu sistema precisa.
Ainda temos que ver quais as limitações práticas que ela terá e o quanto é custoso para contorná-la com a forma convencional ou utilizando outra lib. Por último, temos que ver qual é a curva de aprendizado para usá-la e pensar que no projeto podem ter muitas pessoas trabalhando com o mesmo código (mesmo que seja um projeto pessoal, sempre temos que pensar dessa forma para garantir um bom código). Então, pensar na manutenção do código futuramente.
Essa é mais uma daquelas análises que variam de projeto para projeto e o nÃvel que essa estatÃstica precisa alcançar varia da mesma maneira. Mas com uma boa análise diminui-se a probabilidade de um erro, consequentemente melhorando diretamente na produtividade do desenvolvimento.
Fonte: Imasters
Acesso básico a dados com LINQ to SQL
O desenvolvimento de aplicações para acesso a banco de dados usando a plataforma .NET não sofreu grandes alterações desde o seu lançamento. Geralmente você começa definindo o seu banco de dados, tabelas, relacionamentos, em seguida parte para a definição das classes de forma a procurar representar o domÃnio do seu negócio e finalmente usa os mesmos conceitos abstratos básicos de programação: definindo objetos Connection, objetos Command, objetos datareader, objetos dataset etc.
Muitos desenvolvedores já têm sua biblioteca de funções prontas ou usam recursos de terceiros ou mesmo da Microsoft, como os Data Application Blocks.
Ficamos tão acostumados como uma forma de escrever código que, muitas vezes, não percebemos que temos novos recursos à disposição, que irão garantir um melhor desempenho e manutenção. Afinal, se está funcionando, é o que importa, pensamos…
A partir da versão 3.0, e consolidada na versão 3.5 da plataforma .NET, temos um leque de novas funcionalidades que nos dão um ganho muito grande de produtividade. Uma delas, o foco deste artigo, é o LINQo SQ tL.
Neste artigo eu vou mostrar como usar os novos recursos do LINQ to SQL para efetuar o mapeamento para tabelas de um banco de dados SQL Server e, em seguida, usar os recursos da linguagem LINQ de forma ter um código enxuto e eficiente. Bem diferente da forma como estávamos acostumados a fazer.
Vou criar uma aplicação web, mas poderia ser uma aplicação windows forms, e usando a linguagem VB .NET, vou efetuar o mapeamento OR/M para uma tabela Alunos do banco de dados Teste.mdf criado no SQL Server 2005 Express Edition, sem usar o assistente e o descritor objeto Relacional disponÃvel, dessa forma podemos entender um pouco melhor como as coisas funcionam.
Como não é objetivo deste artigo, eu não vou mostrar como criar o banco de dados e a tabela no Visual Web Developer 2008 Express, mas essa é uma tarefa bem simples. Se você tiver dúvidas, consulte as referências para maiores detalhes.
Abaixo temos o banco de dados Teste.mdf e a tabela Alunos definida com os campos: id, nome e email, onde o campo id é uma chave primária do tipo identity;
Logo depois temos a tabela exibindo alguns dados que eu incluà para usar no projeto deste artigo.


O banco de dados será copiado na pasta App_Data.
Em seguida defina o arquivo web.config a string de conexão usada para acessar o banco de dados Teste.mdf:
<connectionStrings>
 <add name="connectionStringAlunos"
connectionString="Data
Source=.\SQLEXPRESS;AttachDbFilename='C:\Documents and
Settings\macoratti\_
  Meus documentos\Visual Studio 2008\Projects\linq_Entities\linq_Entities\App_Data\Teste.mdf';_
  Integrated Security=True;User Instance=True" providerName="System.Data.SqlClient"/>
</connectionStrings>
Observe que temos o nome connectionStringAlunos a string de conexão usada.
Nota: Na sua máquina local a string de conexão pode ser diferente, atente para este detalhe.
No exemplo deste artigo eu vou usar o Visual Web Developer 2008 Express Edition, que já dá suporte ao LINQ to SQL e permite efetuar o mapeamento objeto relacional.
Abra o VWD 2008 e crie um novo web site a partir do menu File-> New web site com o nome de acessoLINQ usando a linguagem VB .NET;
A seguir a partir no menu Web Site -> Add New Item, selecione o template Class e informe o nome LINQ.vb e clique em Add; (o arquivo será copiado na pasta App_Code).
Antes de iniciar, clique com o botão direito do mouse sobre o nome do projeto e selecione Add Reference e, a partir da janela Add Reference, inclua a referência a System.Data.Linq;

Agora vamos criar a classe que vai efetuar o mapeamento OR/M com a tabela Alunos do nosso banco de dados. Veja o código a seguir:
Imports System
Imports System.Data.Linq.Mapping
<Table(name:="Alunos")> _
Public Class aluno
  Private _id As Integer
  Private _nome As String
  Private _email As String
 <Column(IsPrimaryKey:=True, IsDbGenerated:=True)> _
  Public Property Id() As Integer
    Get
      Return _id
    End Get
    Set(ByVal value As Integer)
      _id = value
    End Set
  End Property
  <Column(CanBeNull:=True)> _
  Public Property Nome() As String
    Get
      Return _nome
    End Get
    Set(ByVal value As String)
      _nome = value
    End Set
  End Property
  <Column(CanBeNull:=True)> _
  Public Property Email() As String
    Get
      Return _email
    End Get
    Set(ByVal value As String)
      _email = value
    End Set
  End Property
End Class
Definimos a classe aluno mapeada para a tabela Alunos e definimos três propriedades:
- Id()
- Nome()
- Email()
Cada uma delas sendo mapeada para a coluna correspondente da tabela Alunos;
Com isso já teremos o acesso via entidade criada no mapeamento.
A classe aluno representa a tabela Alunos do banco de dados.
Vamos agora criar a interface na página Default.aspx. Inclua a partir da ToolBox os seguintes componentes nesta página:
- TextBox – ID=txtNome
- Button – ID=btnProcurar
- GridView – ID=gdvAlunos
Defina o seguinte leiaute na página:

Agora vamos definir o código associado ao evento Click do botão Procurar:
 Protected Sub btnProcurar_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnProcurar.Click
 Dim conexao As String = ConfigurationManager.ConnectionStrings("connectionStringAlunos").ConnectionString.ToString
 Dim db As New DataContext(conexao)
 Dim tAlunos As Table(Of aluno)
    tAlunos = db.GetTable(Of aluno)()
    gdvAlunos.DataSource = tAlunos.Where(Function(a) a.Nome.Contains(txtNome.Text))
    gdvAlunos.DataBind()
 End Sub
1. Obtemos a string de conexão a partir do arquivo web.config:
 Dim conexao As String = ConfigurationManager.ConnectionStrings("connectionStringAlunos").ConnectionString.ToString
2. Criamos uma instância da classe DataContext usando a conexão obtida;
Dim db As New DataContext(conexao)
3. Definimos um objeto tAlunos do tipo Table(Of )
  Â
Dim tAlunos As Table(Of aluno)
4. Obtemos a tabela ALunos a partir do contexto criado através do método GetTable<> que referencia o nome da classe aluno e não nome da tabela;
tAlunos = db.GetTable(Of aluno)()
5. Usamos uma expressão lambda onde selecionamos os nomes contidos na tabela a partir da expressão informada no TextBox txtNome;
tAlunos.Where(Function(a) a.Nome.Contains(txtNome.Text))
Executando o projeto, se nada for informado na caixa de texto, todos os dados da tabela serão exibidos:

Informando um critério qualquer teremos:

Observe que não nos preocupamos em definir objetos connection, commands, datareaders ou datasets apenas instanciamos um contexto a partir do qual tivemos acesso, a partir da classe mapeada para a tabela, aos dados usando uma consulta LINQ.
O código ficou mais enxuto e tivemos menos trabalho. E isso sem usar o assistente; com ele o trabalho de gerar a classe não seria necessário. Devemos portanto conhecer os novos recursos para saber avaliar quando usá-los para obtermos um produto final mais refinado.
Aguarde novos artigos sobre o assunto…
Pegue o projeto completo aqui:Â acessoLINQ.zip
Referências:
- Veja os artigos da seção: LINQ
- Usando o SQL Server Management Studio
- Criando um Banco de dados no SQL Server
- VB 2008 – Cadastro de Alunos
- ASP .NET – Usando LINQ – Expressões Lambda
- ASP .NET – Usando LINQ para manutenção de dados
- VB .NET – Protótipo para sistema de vendas em LINQ
Fonte: Imasters
Manipulação de dados BLOB com PHP e MySQL
Sem dúvida alguma, uma das perguntas mais frequentes em relação ao MySQL é: “como posso armazenar arquivos em uma base de dados?”. A resposta é: tens que usar o tipo de dados BLOB. Estes BLOBs (Binary Large Objects) podem armazenar praticamente qualquer tipo de dados, incluindo documentos do MS Word, imagens gif/jpeg, arquivos PDF, mp3, etc.
Neste artigo vamos ver como criar um repositório de arquivos binários usando PHP e MySQL para poder armazenar diferentes tipos de arquivos. Veremos como armazenar cada um dos arquivos em uma base de dados, para posteriormente recuperá-los.
Para testar os exemplos deste artigo, é necessário ter acesso a um servidor com suporte a PHP, além de contar com um servidor MySQL. Assumindo que você conte com os privilégios apropriados para criar a base dados, e que o MySQL está rodando no mesmo servidor que o PHP, vamos iniciar o desenvolvimento.
Criando a base de dados
Nosso repositório de documentos usará uma base dados que contenha unicamente uma tabela para armazenar todos os documentos. O banco de dados será chamado de “repositorio“, e a tabela de “arquivos“.
Código SQL para criar a tabela
CREATE TABLE arquivos(
id int not null auto_increment primary key,
nome varchar(50),
titulo varchar(50),
conteudo mediumblob,
tipo varchar(50));
Agora temos uma base chamada repositorio, que contém uma tabela chamada arquivos.
Veja abaixo informações sobre cada campo da tabela arquivos:
- id - um número inteiro que nos proporcionará um identificador único para cada arquivo que iremos armazenar. Este será incrementado automaticamente cada vez que for inserido um novo registro.
- nome - o nome original do arquivo, por exemplo, fot.gif, curriculum.doc, etc.
- titulo - uma breve descrição de cada arquivo que será gravada na tabela, por exemplo “Carta para minha noiva”, ou “A foto do meu irmão”. Este tÃtulo será usado posteriormente na visualização dos arquivos do repositório em uma página web.
- conteudo – um campo do tipo binário (blob) para guardar o conteúdo de cada arquivo. Na nossa tabela usamos um tipo mediumblob, o qual pode armazenar arquivos de até 16Mb.
- ipo – como veremos mais adiante, cada arquivo (seja um .doc, .gif, .pdf, etc) tem um tipo único. Quando se envia um
arquivo para o servidor web através de uma página web, o navegar envia ao servidor a informação acerca do tipo de arquivo, o tipo de conteúdo do arquivo, etc. Os tipos de conteúdo são simples cadeias. O tipo de conteúdo para um arquivo MS WORD é “application/msword”, o tipo de conteúdo para uma imagem é “image/gif”, etc.
Agregando arquivos à base de dados
Agora que temos a base de dados do nosso repositório e sabemos a finalidade de cada campo, vamos criar uma simples página web que permita selecionar um arquivo desde o navegador para posteriormente enviá-lo para um script em PHP que ficará encarregado de armazená-lo em nossa base de dados.A página web será nomeada escolher_arquivo.html e o script em PHP será chamado de guardar_arquivo.php.
A página web pode conter todo o código HTML que se deseje, mas é necessário que se inclua o seguinte formulário para que se tenha a opção de escolher um arquivo e enviá-lo ao servidor.
<!-- ...código anterior -->
<form enctype="multipart/form-data" action="guardar_arquivo.php" method="post">
Descrição <input type="text" name="titulo" size="30">
Arquivo <input type="file" name="arquivo">
<input type="submit" value="Enviar arquivo">
</form>
<!-- ...código posterior -->
Do código que escrevemos temos que frisar o seguinte:
- o formulário necessita de um atributo enctype com um valor multipart/form-data
- o método de envio tem que ser POST
- tem que ser usado pelo menos um campo do tipo FILE
Estes são os três requerimentos básicos que a página HTML deve cumprir para que seja possÃvel enviar o arquivo para o servidor.
Antes de escrever o código do script guarda_arquivo.php, vamos comentar algo acerca da forma como serão recebidos os dados do arquivo em questão.
Desde a versão 4.1 do PHP é recomendada a utilização da variável $_FILES para a leitura dos dados do arquivo que está sendo enviado ao servidor. Abaixo estão listadas os Ãndices e parâmetros recebidos pela variável. Note que o nome dos Ãndices depende de como é nomeado o campo do tipo FILE no formulário.
$_FILES['arquivo']['name']
Nome original do arquivo
$_FILES['arquivo']['type']
O tipo MIME do arquivo, … image/gif, application/pdf, application/msword,.. etc
$_FILES['arquivo']['size']
O tamanho do arquivo em bytes
$_FILES['arquivo']['tmp_name']
O local do arquivo temporário que se cria quando o arquivo é enviado ao servidor. É nesta variável que são lidos todos os dados do arquivo em si. Se estes dados não são copiados ou movidos para outro lugar, ou em nosso caso, armazenados em uma base de dados, podem ser perdidos, já que o PHP elimina esses arquivos depois de um determinado tempo.
Por exemplo, estes são os possÃveis valores para um arquivo j-odbc.zip que foi enviado ao servidor:
$_FILES["arquivo"][name] => j-jdbc.zip
$_FILES["arquivo"][type] => application/zip
$_FILES["arquivo"][tmp_name] => /tmp/phpvXQpqP
$_FILES["arquivo"][size] => 337945
Vale ressaltar que devem ser revistos e, se necessário modificar as seguintes variáveis no arquivo de configuração do PHP para que você possa fazer o upload dos arquivos para o servidor, e pode ser gerida por um script PHP.
- file_uploads – diz ao PHP se pode ou não ser feito o envio de arquivos para o servidor. Essa variável deve ter o valor “On”.
- upload_max_filesize – diz ao PHP qual o tamanho máximo do arquivo que pode ser enviado ao servidor. Pode ser utilizado o sufixo “M” para indicar o valor em Megabytes, por exemplo, com um valor 2M se aceita um arquivo máximo de 2 Megabytes.
- upload_tmp_dir – é o diretório para onde será copiado temporariamente o conteúdo do arquivo quando for enviado ao
servidor.
Agora é o momento de mostrar o código PHP que vai armazenar o arquivo em nossa base de dados.
/* guardar_arquivo.php */
require("dbconnect.inc.php");
 $arquiivo = $_FILES["arquivo"]["tmp_name"];
 $tamanho = $_FILES["arquivo"]["size"];
 $tipo   = $_FILES["arquivo"]["type"];
 $nome  = $_FILES["arquivo"]["name"];
 $titulo  = $_POST["titulo"];
 if ( $arquivo != "none" )
 {
 $fp = fopen($arquivo, "rb");
 $conteudo = fread($fp, $tamanho);
 $conteudo = addslashes($conteudo);
 fclose($fp);
 $qry = "INSERT INTO arquivos VALUES
 (0,'$nome','$titulo','$conteudo','$tipo')";
 mysql_query($qry);
 if(mysql_affected_rows($conn) > 0)
 print "O arquivo foi gravado na base de dados.";
 else
 print "Não foi possÃvel gravar o arquivo na base de dados.";
 }
 else
 print "Não foi possÃvel carregar o arquivo para o servidor.";
O arquivo dbconnetc.inc.php contém unicamente as instruções para conexão ao MySQL e selecionar a base de dados que será utilizada.
/* dbconnect.inc.php */
$conn = mysql_connect("localhost","usuário","senha");
 mysql_select_db("repositorio");
Listando os arquivos da base de dados
Já que gravamos alguns arquivos no nosso repositório, agora podemos listar as informações deles, para posteriomente fazermos o download.
/* listar_arquivos.php */
require("dbconnect.inc.php");
$qry = "SELECT id, nome, titulo, tipo FROM arquivos";
$res = mysql_query($qry);
while($fila = mysql_fetch_array($res))
{
print "$fila[titulo]
<br>
$fila[nome] ($fila[tipo])
<br>
<a href='baixar_arquivo.php?id=$fila[id]'>Fazer Download</a>
<br>
<br>";
}
Fazendo o download dos arquivos da base de dados
Como se pode observar no código anterior, foi colocado um link para cada arquivo, chamado baixar_arquivo.php. A funcionalidade deste script será ler os dados dos arquivos que estão gravados na base de dados e enviá-los ao navegador.
Dependendo do tipo de arquivo da qual se trate, o navegador poderá mostrá-lo por ele mesmo o conteúdo do arquivo.
/* Script baixar_arquivo.php */
require("dbconnect.inc.php");
 $qry = "SELECT tipo, conteudo FROM arquivos WHERE id=$id";
 $res = mysql_query($qry);
 $tipo = mysql_result($res, 0, "tipo");
 $conteudo = mysql_result($res, 0, "conteudo");
 header("Content-type: $tipo");
 print $conteudo;
Comentário Finais
Como se pode observar, o código PHP dos scripts é bem simples, e não tem nenhum grau de dificuldade. O código foi desenvolvido com o propósito mais simples possÃvel, para que possa ser melhorado e utilizado em aplicações mais robustas.
Fonte: Imasters
Google Charts API
O Google Charts API é uma ferramenta muito útil e interessante para quem desenvolve aplicações web e quer gerar gráficos de uma forma dinâmica. Esta API caracteriza-se pela facilidade de utilização e implementação, não sendo necessária a instalação de qualquer software ou frameworks. Para a sua utilização, basta o URL da API no qual serão referenciados os dados e caracterÃsticas necessários para gerar o gráfico pretendido. Para começar inserimos o seguinte URL no browser:
http://chart.apis.google.com/chart?cht=p3&chd=t:60,40,30&chs=260×110&chl=Ligeiros|Motas|Pesados
Podemos ver no exemplo que foi gerado um gráfico tipo “queijo” com a percentagem de Mulheres e Homens.
Como resposta ao URL e parâmetros nele inseridos, a API gerou uma imagem PNG. Podem ser gerados outros tipos de gráficos, com diversas cores e outros atributos, é isso que iremos ver a seguir.
Formato do URL
Os parâmetros estão separados por “&”. Podem ser especificados quantos parâmetros se desejarem e pretenderem.
http://chart.apis.google.com/chart? ? Localização da Chart API
cht=p3 ? Tipo de gráfico
chd=t: 60,40,30 ? Valores do gráfico
chs=260x110 ? Dimensões do gráfico (em pixels)
chl= Ligeiros|Motas|Pesados ? Referências do gráfico (r

Claro que a utilização deste API não se resume à aplicação em URLs. Uma vez que é gerada uma imagem, é essa mesma imagem que será utilizada no layout de uma aplicação ou site. Para isso deveremos inserir a URL pretendida numa tag de imagem, como se fosse um arquivo *.jpg, *.gif ou *.png.
Seguindo o exemplo anterior, deveremos colocar a URL da seguinte forma:
<img src="http://chart.apis.google.com/chart?
chs=260x110
&chd=t: 60,40,30
&cht=p3
&chl= Ligeiros|Motas|Pesados "
alt="Sample chart" />
Em alguns casos (repare no exemplo) será necessária a utilização da referência & no lugar de “&” quando inserido na tag <img>.
Utilização de valores de bases de dados
Para aplicar um pouco mais de dinamismo aos gráficos e mais precisamente aos dados que ele representa, o Google Charts pode ser utilizado com valores de uma tabela de base de dados.
Suponhamos que tem uma tabela com entradas no site:
SELECT count(*) FROM entradas WHERE entradas.mes=\\'3\\'
Então os valores ficariam na forma:
&chd=t: <?php echo $row_rsVAL1[\\'count(*)\\']; ?>,
<?php
echo $row_rsVAL2[\\'count(*)\\']; ?>, <?php echo $row_rsVAL3[\\'count(*)\\'];
?>
Fonte: Imasters
ASP .NET – Filtrando e exibindo dados XML com LINQ
O LINQ to XML é um provedor de dados LINQ que é implementado no namespace System.Xml.LINQ a partir da versão 3.5 da plataforma .NET. Ele fornece um modelo de programação que permite ler, construir e escrever dados XML.
Você pode usar LINQ To XML para realizar consultas LINQ sobre dados no formato XML que podem ser retornados do arquivo de sistemas, de uma URL HTTP remota, de um web service ou partir de qualquer XML em memória existente.
O objetivo será acessar uma fonte de dados XML exibindo o seu conteúdo em uma página ASP .NET e filtrar informações com base em um critério usando LINQ to XML.
Abaixo temos a tela de apresentação inicial da aplicação e ao lado o filtro aplicado usando como critério a cidade selecionada no controle dropdownlist.


Eu vou usar o Visual Web Developer 2008 Express Edition (VWD 2008) no exemplo deste artigo.
Vamos abrir o VWD 2008 e no menu File selecionar New Web Site selecionando o template ASP .NET Web Site, a linguagem C# , informar o nome LINQ_xml e clicar no botão OK;
Com o web site criado, vamos definir uma fonte de dados XML no projeto. Primeiro, devemos criar a pasta App_Data clicando com o botão direito do mouse sobre o nome do projeto e selecionando add ASP .NET Folder -> App_Data;
A seguir, clique com o botão direito sobre a pasta App_Data e selecione Add New Item;
A seguir, selecione o template XML File, informe o nome Clientes.xml e clique no botão Add;

A seguir, no editor XML que será aberto, defina a estrutura do arquivo XML conforme abaixo:
<?xml version="1.0" encoding="utf-8" ?>
<Clientes>
 <Cliente>
  <Nome>Macoratti</Nome>
  <Cidade>Brasilia</Cidade>
  <Idade>37</Idade>
 </Cliente>
 <Cliente>
  <Nome>Jessica</Nome>
  <Cidade>Santos</Cidade>
  <Idade>19</Idade>
 </Cliente>
 <Cliente>
  <Nome>Jefferson</Nome>
  <Cidade>Marilia</Cidade>
  <Idade>17</Idade>
 </Cliente>
 <Cliente>
  <Nome>Janice</Nome>
  <Cidade>Campinas</Cidade>
  <Idade>13</Idade>
 </Cliente>
</Clientes>
Agora, vamos criar a interface com o usuário usando o formulário Default.aspx.
Selecione a página Default.aspx e, no modo de Design a partir do menu Table -> Insert Table, inclua uma tabela com quatro linhas e duas colunas e inclua os seguintes componentes :
- Button : ID =butGetXML
- Button : ID = butFiltraXML
- DropDownList : ID = ddlCidade
- Literal : ID = litXMLDados
O leiaute do formulário web pode ser visto abaixo:

Vamos definir o código no arquivo Default.aspx.cs (code-behind).
A primeira coisa a fazer é declarar os namespaces para acessar os recursos do XML e do LINQ:
using System.Xml.Linq;
using System.Xml;
No evento Load da página vamos verificar se ocorre um postback e chamar a rotina carregaDLL para preencher o controle dropdownlist;
protected void Page_Load(object sender, EventArgs e)
  {
    if (!IsPostBack)
      carregaDLL();
  }
O código da rotina carregaDLL() é dado a seguir. Estamos instanciando um XmlDocument e usando o seu método Load para carregar o arquivo XML;
protected void carregaDLL()
  {
    XmlDocument doc = new XmlDocument();
    doc.Load(Server.MapPath("App_Data/Clientes.xml"));
    XmlNodeList nodeList = doc.SelectNodes("Clientes/Cliente");
    foreach (XmlNode node in nodeList)
      ddlCidade.Items.Add(new ListItem(node.SelectSingleNode("Cidade").InnerText));
  }
Agora no evento Click do botão Filtrar XML temos o seguinte código:
 protected void butFiltraXML_Click(object sender, EventArgs e)
  {
  XDocument xmlDoc = XDocument.Load(Server.MapPath("App_Data/Clientes.xml"));
 var clientes = from cliente in xmlDoc.Descendants("Cliente")
               where cliente.Element("Cidade").Value == ddlCidade.SelectedItem.ToString()
               select new
               {
                Nome = cliente.Element("Nome").Value,
                Cidade = cliente.Element("Cidade").Value,
                Idade = cliente.Element("Idade").Value,
               };
    litXMLDados.Text = "";
foreach (var cliente in clientes)
    {
      litXMLDados.Text = litXMLDados.Text + "Nome  : " + cliente.Nome + "<br />";
      litXMLDados.Text = litXMLDados.Text + "Cidade: " + cliente.Cidade + "<br />";
      litXMLDados.Text = litXMLDados.Text + "Idade : " + cliente.Idade + "<br /><br />";
    }
    if (litXMLDados.Text == "")
      litXMLDados.Text = "Nada encontrado.";
  }
Neste código, estamos usando uma consulta LINQ para filtrar as informações do arquivo Clientes.xml. Observe que estamos usando o item selecionado do controle DropDownList para filtrar as informações por cidade selecionada.
A seguir temos o código do evento Click do botão – Exibir XML – que obtém as informações do arquivo xml e as exibe;
protected void butGetXML_Click(object sender, EventArgs e)
  {
 XDocument xmlDoc = XDocument.Load(Server.MapPath("App_Data/Clientes.xml"));
  var clientes = from cliente in xmlDoc.Descendants("Cliente")
               select new
               {
                  Nome =  cliente.Element("Nome").Value,
                  Cidade = cliente.Element("Cidade").Value,
                  Idade = cliente.Element("Idade").Value,
               };
    litXMLDados.Text = "";
 foreach (var cliente in clientes)
    {
      litXMLDados.Text = litXMLDados.Text + "Nome  : " + cliente.Nome + "<br />";
      litXMLDados.Text = litXMLDados.Text + "Cidade: " + cliente.Cidade + "<br />";
      litXMLDados.Text = litXMLDados.Text + "Idade : " + cliente.Idade + "<br /><br />";
    }
    if (litXMLDados.Text == "")
      litXMLDados.Text = "Nada encontrado.";
  }
Aqui, novamente, usamos uma consulta LINQ para selecionar informações do arquivo Clientes.xml.
Note que o código é bem simples, principalmente usando os recursos do LINQ to XML.
Pegue o projeto completo aqui:Â LINQ_xml.zip
Fonte: Imasters
Dell deve lançar netbook com Android
A Dell vai lançar netbooks com o sistema operacional do Google. A informação veio por um comunicado para a imprensa que vazou antes da hora.
De acordo com um documento da BSquare, empresa que presta serviços para a Dell, que foi espalhado pela internet, a fabricante americana está pronta para lançar netbooks com Android OS.
O porta-voz da Dell, Andrew Bowins, afirmou que as informações são errôneas, mas não negou ou confirmou a existência desses planos.
A escolha do Android no lugar de um sistema Windows deve-se ao fato de a plataforma do Google ser gratuita e poder rodar em processadores com arquitetura ARM, vendidos por várias produtoras e bem mais baratos que os chips da Intel.
Fonte: Imasters
Google Earth no meu site
O que o Google diz sobre isto?
O plug-in do Google Earth e a API JavaScript permitem incorporar o Google Earth, um verdadeiro globo digital em 3D, nas suas páginas da web. Usando a API, você pode desenhar marcadores e linhas, dispor imagens sobre a área, adicionar modelos em 3D ou carregar arquivos KML, permitindo criar aplicativos sofisticados para mapas em 3D. Se você tem um site de API do Google Maps, pode ativar 3D em sua página com uma única linha de código.
Ótimo, podemos utilizar a API do Google Maps! Vamos ver então um exemplo simples da API do Google Earth e vamos também utilizar o nosso exemplo do artigo anterior (Colocando minha empresa no mapa), onde utilizamos a API do Google Maps, para incluir um novo Servidor de Mapas que será o Google Earth.
Bom, aconselho você ler o artigo anterior antes de seguir, pois necessitamos obter uma chave de segurança da API do Google para utilizá-la neste exemplo. Segue o link (Obtendo uma Chave de API).
Vamos ao Hello, Earth!
Obtendo o Pluggin para rodar o Google Earth no seu browser
Não adianta você ter instalado o Google Earth na sua máquina. Você precisa de um plugin especÃfico para rodar esta API no seu browser.
Para instalar, acesso o link http://code.google.com/apis/earth/ e clique no mapa para baixar o plugin.

Instale o plugin na sua máquina e pronto. Você já pode rodar o Google Earth no seu browser.
Vamos ao código:
<html>
 <meta http-equiv="content-type" content="text/html; charset=utf-8" />
 <head>
  <title>Hello Google Earth!</title>
    <!-- Adicionando a API (!!Não esqueça de alterar a sua chave!!)-->
  <script src="http://www.google.com/jsapi?key=SUA_CHAVE_AQUI"></script>
  <script>
    google.load("earth", "1");
    var ge = null;
    // Função Inincial -> Chamada no OnLoad
    function init() {
     // Instancia o Objeto dentro da DIV map3d,
     // caso sucesso, chama a função initCallback, senão, failureCallback
     google.earth.createInstance("map3d", initCallback, failureCallback);
    }
    function initCallback(object) {
     ge = object; //Adiciona o Objeto na variável global ge
     //Dá visibilidade ao Google Earth dentro do navegador.
     ge.getWindow().setVisibility(true);
    }
    function failureCallback(object) { }
  </script>
 </head>
 <body onload='init()' id='body'>
  <center>
   <div id='map3d_container'
      style='border: 1px solid silver; height: 600px; width: 800px;'>
    <div id='map3d' style='height: 100%;'></div>
   </div>
  </center>
 </body>
</html>
Resultado

Pronto, temos apenas um Hello World acima, uma visão do globo geral.
Para visualizar um exemplo de como adicionar controles de navegação, escala, grid, mapa de referência, etc, acesse este link: http://earth-api-samples.googlecode.com/svn/trunk/demos/options/index.html.
É muito simples ampliar as ferramentas do seu mapa.
Integrando o Google Earth API no Google Maps API
Ok, vamos pegar o nosso exemplo do artigo anterior e integrar com o a API Google Earth.
Lembram do código?

Resultado

Alterando o código

- Alteramos as linhas 8,9,10: trocamos a API do Google Maps pela API do Google Earth
- Linha 14: Adicionado o Load da API do Google Maps
- Linha 23: Adicionado o Layer do Google Earth
- Linha 27: Adicionado os controles de layers
Como ficou

Não se esqueça, acesse o site dos desenvolvedores, http://code.google.com/intl/pt-BR/apis/earth/, e visualize os exemplos e as referências das APIs do Google Maps e Google Earth. Apenas com os exemplos disponibilizados pelo Google você aumenta a qualidade do seu site sem muito esforço.
Fonte: Imasters
