Célula IT EXTREME

Tecnologia levada ao extremo!
O objetivo da célula é ser inovadora, dinâmica e eficiente nas suas criações.
Mudar a forma como as pessoas se relacionam com a tecnologia, criar novas formas de interação com objetos tecnológicos, são metas do IT Extreme TEAM!

 Já saiu por ai a algum tempo que vão acontecer algumas mudanças pequenas no visual do Windows 7 pro vista. Foi então que começou a se falar na "SuperBar". De inicio ela parecia muito com a barra iniciar do Vista, pequenas mudanças quase imperceptiveis para leigos. Mas, por esses dias foram apresentadas algumas mudanças drasticas na "SuperBar", que deram um visual muito mais elegante.

Quem quiser acompanhar uma descrição mais detalhada das mudanças com fotos, basta acessar: http://joaoseixas.blogspot.com

 

Posted by Joao Bosco | with no comments

 Vamos ao cenario que acontece com frequencia nas atividades de desenvolvedores de back office.

Um arquivo texto ou excel, repleto de informações que precisam ser persistidas no banco, de forma consistente e com uma boa performance.
Isso é muito comun e existem inumeras soluções. Desde soluções diretas no SQL Server por exemplo, a soluções "menos sofisticadas" como ler e inserir linha a linha do arquivo no banco.
Em outra oportunidade irei falar também do Bulk Insert do SQL Server, que tem o uso muito simples, mas tem algumas limitações.
Mas agora, vou falar rapidamente de uma forma "elegante" e muito simples que quebrou um galho muito bom pra mim.
O SqlBulkCopy, que é uma classe que está no namespace System.Data.SqlClient.
Com está classe, basta que você passe um DataTable, faça o mapeamento, indicando qual coluna do DataTable equivale a qual coluna no banco de dados e pronto. Depois disso é só correr pro abraço. Originalmente foi projetado para atuar no SQL Server, não sei se essa classe é capaz de trabalhar com outros bancos.
Um exemplo bem simples segue abaixo:

public void InserirFuncionarios(DataTable tabela)
{
   try
   {
      //Atribuindo a string de conexao ao objeto SqlConnection
      SqlConnection con = new SqlConnection(StringConexao);
      //Criando o objeto de BulkCopy, passando a conexao
      SqlBulkCopy bc = new SqlBulkCopy(con);

      //Definindo a tabela destino no banco de dados
      bc.DestinationTableName = "Funcionario";


     //Criando o Mapeamento de colunas do DataTable para o banco
     SqlBulkCopyColumnMappingCollection cols = bc.ColumnMappings;
   

    //Percorrendo as colunas da tabela e associando as colunas da tabela do banco
   //Isso só é possivel porque as colunas da tabela tem o mesmo nome das colunas do banco
   //Assim a DestinationComlumn deve receber o nome da coluna do banco
   //E a sourceColumn deve receber o nome da coluna da tabela
   foreach (DataColumn coluna in tabela.Columns)
   {
       SqlBulkCopyColumnMapping c = new SqlBulkCopyColumnMapping();
       c.DestinationColumn = coluna.ColumnName;
       c.SourceColumn = coluna.ColumnName;
       cols.Add(c);
   }

   //Abrindo a conexão, Escrevendo no banco e fechando a conexão
   con.Open();
   bc.WriteToServer(tabela);
   con.Close();
  }
  catch (Exception e) {
    throw new Exception(e.Message);
  }
}

Espero que ajude alguem esse trecho de codigo simples que explica como fazer inserção em bloco no SQL Server utilizando a classe SqlBulkCopy em C#
Se alguem tiver uma forma melhor de fazer com essa classe, fique a vontade de deixar um comentario.

http://joaoseixas.blogspot.com

 

Posted by Joao Bosco | with no comments

O Microsoft Exchange 2003 Server permite a troca de mensagens de e-mail criptografadas entre servidores que estão usando o protocolo Transport Layer Security (TLS). Sem a criptografia, nomes de usuário e senhas podem ser facilmente interceptados em uma LAN executando um sniffer (software utilizado por hackers para filtrar pacotes que saem da rede).

Vou dividir o post em duas partes. Primeiro vou conceituar e falar um pouco sobre TLS e depois mostrar um exemplo prático de como implementar este protocolo no Exchange Server 2003. A outra parte ficará para uma próxima oportunidade, nela mostrarei técnicas de Troubleshooting.           Para implementar esta solução o Exchange Server requer um servidor de certificados com X.509 para utilizar TLS. Um certificado de servidor X.509 é uma forma digital de identificação que normalmente é emitida por uma autoridade de certificação (Verisign, por exemplo) e contém informações de identificação, um período de validade, uma chave pública, um número de série e a assinatura digital do emitente.

Mas antes disso, falarei de alguns princípios básicos.

2. Qual é Transport Layer Security protocolo? 3. Como funciona o protocolo TLS 4. Como configurar criptografia TLS sobre Microsoft Exchange Server 2003

O que é o protocolo Transport Layer Security?

TLS é um sucessor do protocolo Secure Sockets Layer (SSL). TLS fornece comunicações seguras na Internet para coisas tais como e-mail, fax, dados e outras transferências. Há ligeiras diferenças entre SSL 3.0 e TLS 1.0, mas o protocolo permanece sensivelmente o mesma. É bom ter em mente que TLS reside na camada de aplicação do OSI. Isso vai lhe poupar uma série de frustrações durante a depuração e solução de problemas relacionados com problemas criptografia TLS.

O TLS Handshake Protocol permite que o servidor e o cliente se autentiquem mutuamente antes de negociar o as chaves criptográficas. A autenticação mútua dos servidores públicos são essenciais na implantação de clientes. Quando um servidor e cliente se comunicam, o protocolo TLS garante que nenhuma outra pessoa pode adulterar qualquer mensagem e falsificar a informação.

Como o protocolo TLS trabalha          

O TLS Handshake protocolo envolve as seguintes etapas:

• Trocar mensagens HELLO com valores aleatórios entre o servidor e o cliente, garantindo um acordo entre eles.
• Trocar os parâmetros criptográficos necessários para permitir que o cliente e o servidor entrem em acordo sobre qual é o parâmetro secreto.
• Trocar certificados e informações sobre a criptografia para permitir que o cliente e servidor se autentiquem.
• Fornecer parâmetros de segurança para o registro camada.
• Deixar que o cliente e servidor, a fim de verificar que os seus pares foram calculados (MD5 e SHA) com os mesmos parâmetros de segurança.          

TLS protocolo foi concebido com várias medidas de segurança. Ela números todos os registros e usa números de seqüência no Message Authentication Code (MAC). O protocolo TLS usa compilação de mensagem com uma chave e só com esta chave  pode verificar o MAC.

O sistema operacional Windows Server 2003 pode utilizar três protocolos de segurança relacionados em fornecer autenticação e comunicações seguras através da Internet:

 • Transport Layer Security Version 1.0 (TLS v1.0)

Como configurar uma TLS encryption sobre o Microsoft Exchange 2003 Server

Antes de qualquer coisa, você deve ter o servidor X.509 atestado emitido por uma autoridade de certificação como VeriSign. Elas podem ser válidas para um ou mais anos. O custo do certificado vai variar de vendedor para vendedor e o preço será determinado pelo nível de criptografia e a data de validade. Quanto mais forte é a criptografia do certificado e quanto maior for o tempo, mais caro é a licença. 

Antes de receber o certificado TLS \ SSL será necessário gerar uma solicitação de assinatura de certificado (CSR) para o servidor onde o certificado será instalado. Após gera um CSR, você precisará criar um par chave para o seu servidor (chave pública e chave privada). Se você perder o arquivo com sua chave pública ou privadas ou sua senha será necessário gerar uma nova, com isso seu certificado SSL deixara de se corresponder e você terá que solicitar um novo certificado SSL. Na maioria das vezes, a empresa que emite o certificado listas detalhes passo-a-passo sobre como criar RSE e como instalar o certificado em seu servidor.

Após receber o certificado entidade certificadora você deverá instalá-lo no servidor onde roda o IIS no Microsoft Exchange Server 2003. O certificado pode também ser usado para garantir uma sessão segura no Outlook Web. Depois de instalar com sucesso o certificado TLS \ SSL, você pode preceder com a configuração do TLS sobre o Exchange 2003 do servidor SMTP.

Instalação e configuração do protocolo TLS sobre o Microsoft Exchange Server 2003 é muito simples. Ela pode ser dividida em duas etapas. Primeiro você deve configurar seu servidor SMTP padrão e obrigá-lo a aceitar TLS. O segundo passo é configurar o adequado encaminhamento para o conector de cada domínio que você quer permitir criptografia TLS.

Vamos ao que interessa!          

Abra o System Manager e siga estas etapas:

1. Expandir o Administrative Groups e navegar até o servidor virtual SMTP, localizado na pasta Protocols.


01 

2. Clique com o botão direito em Default SMTP Virtual Server e vá para a aba Properties. 3. No campo "IP Adress:" você deve clicar na seta para baixo e mude a opção de "(All Assign") para um determinado endereço IP do seu servidor de correio eletrônico. 4. Marque a opção Enable logging e selecione NCSA Common Log File Format. 5. Na aba Access. Nela você será capaz de atribuir o certificado TLS \ SSL que você comprou da CA e configurar o protocolo TLS para o virtual SMPT.

03 

6. Clique em "Authentication" e selecione as seguintes caixas: • Anonymous access
• Basic Authentication (password os sent in clear text)  
• Requires TLS encryption
• Integrated Windows Authentication 
 
 

04

7. Clique no botão "Certificate" e siga as instruções do assistente para atribuiro certificado  TLS \ SSL para o padrão servidor virtual SMTP. 

O segundo passo é configurar adequado encaminhamento no grupo de conectores para cada domínio que requer criptografia TLS. Primeiro navegue até a pasta Routing Groups, ir para o Routing Group adequado. Depois de expandi-lo, você será levado para a pasta Connectors. Clique com o botão direito e em seguida selecione Novo > SMTP Connector:          

Você terá que digitar o nome do conector e selecionar a opção: "Forward all mail through this connector to the following smart hosts”. Você terá de especificar os endereços IP dos servidore do domínio remoto. Para vários servidores use parênteses separados por vírgula, por exemplo [192.168.0.1], [10.12.0.25]. Você também pode especificar o Local Bridgehead para os e-mails enviados, clicando no botão Add. Você será solicitado a selecionar os servidores virtuais SMTP adequados a ser associados a este conector.

Na aba Advanced, você vai clicar em Outbound Security. Permita acesso anônimo clicando em Anonymous Access.

Você também terá de definir o endereço para o espaço seguro do domínio clicando na guia Address Space e no botão Add. Depois selecionar o SMTP correspondente. O nome de domínio tem de corresponder ao endereço IP do seu servidor SMTP. 

Depois de configurar o seu protocolo para usar criptografia TLS você deve testá-lo. Configurar apenas não garante que tudo esteja funcionando. Você sempre deve certificar-se que as mensagens de e-mail são de fato criptografadas.

 

Visitem também: http://moacirmgf.spaces.live.com

Nunca tive necessidade de persistir dados em XML.
Porém recentemente tive faze-lo para agilizar uma tarefa no trabalho.
Já sabia que o .NET framework dava um suporte muito bom a manipulação de arquivos XML, então resolvi colocar a mão na massa!
Em 5 minutos já havia aprendido tudo que eu necessitava para a tarefa.
Isso é fruto de uma comunidade ativa e uma documentação completa.
Uma rapida busca pela internet e encontrei muito material, bem completo. Mas como eu precisava de pouca coisa, fui aprendendo no melhor estilo hands-on
A intenção desse post é fazer você também aprender em 5 minutos uma das formas de manipulação de arquivos XML.
Gravar dados em XML é uma tarefa bem fácil.
Primeiro crie um DataTable

Para ler o restante desse artigo, basta ir até a pagina do autor: http://joaoseixas.blogspot.com

Posted by Joao Bosco | with no comments

As vezes é necessario que suas Threads acessem o mesmo objetos e modifiquem valores nesses objetos.
Porém se você estiver trabalhando com um computador multi-processado, por vezes os resultados serão errados pois uma thread vai desfazer o que a outra já fez.

Vou explicar melhor essa historia.

Exemplo Classico:
Temos um contador numa classe X

int contador = 0;

Só existe uma instancia da classe X no seu programa, e toda vez que suas threads fizerem determinada atividade,elas devem incrementar em 1 esse contador.

Nada mais normal do que a classe X possuir um metodo

public void AtualizaContador(){
contador++;
}

Para esse simples exemplo não estamos levando em conta as boas praticas e questões de encapsulamento que são muito importantes também.

Agora num ambiente multi-processado, imagine 2 Threads no mesmo momento tentando fazer a atualização do contador.

Suponto que nesse ponto o contador tenha o valor 10
De maneira generica, para fazer a atualização, os passos dados pelo processador seriam:

- Salvar o valor 10 no registrador do processador
- Incrementar o valor contido no registrador em 1
- retornar o valor para memoria

Voltando ao exemplo...
Se duas Threads pegassem ao mesmo tempo o valor 10
as duas iriam incrementar o valor para 11
porem na hora de salvar em memoria, uma delas ira salvar primeiro o valor 11
por consequencia a outra deveria salvar o valor 12 mas isso não acontece,
ela salva o valor 11 novamente por cima do valor 11 que já estava lá

Causando uma inconsistencia nos dados da nossa aplicação.
Temos diversas formas de tratar isso, principalmente porque incrementação é uma operação thread safe,então temos classes e metodos para tratar especificamente dessa situação.

Mas vamos tratar aqui como se fosse uma situação generica.
Dessa forma usaremos o lock do C#
De maneira muito simples de usar, o lock irá bloquear os recursos do objeto até que a thread que está utilizando o trecho do codigo acabe de processa-lo

Teriamos então o seguinte codigo:

public void AtualizaContador(){

lock(this){
contador++;
}
}

o lock recebe como parametro o this que é uma palavra reservada do C# que referencia o objeto em questão.
No caso, como o metodo está dentro da classe X o this então, representa a classe X
É como se a propria classe estivesse se referenciando.

Espero ter conseguido passar um pouco da importancia do lock.
Existem outras formas de fazer isso, mas seria bom que entrassemos em outras discussões como dead lock e etc...
então trarei isso em um outro post.
Talvez vocês não enxerguem a importancia disso num exemplo simples como esse, mas em ambientes complexos isso toma proporções enormes.

Espero ter ajudado
Até a proxima.

Nesse post simples, vou mostrar como criar uma Thread em C#.
É importante se trabalhar com Threads para ter uma performance melhor na aplicação.

Por exemplo, se na sua aplicação windows form, você tem uma tarefa que consome muito tempo, e faz essa programação normalmente, o form irá travar enquanto sua aplicação processa essa tarefa.
Usando Threads você evita que isso aconteça, pois sua aplicação irá processar a tarefa "em paralelo" numa outra thread e seu form poderá ser utilizado normalmente.

Vamos ao codigo de uma aplicação console utilizando threads.


class Program
{
//Primeiro Criamos um metodo void que não recebe parametros
//Esse metodo fará o trabalho das Threads

static void Trabalho()
{
Console.WriteLine("Esse é o id da Thread: " + Thread.CurrentThread.ManagedThreadId);
Console.WriteLine("Esse é o nome da Thread: " + Thread.CurrentThread.Name);

//Como podem ver é um trabalho bem simples
//Apenas escrevemos o ID e o nome da Thread em execução
}


static void Main(string[] args)
{
//Aqui utilizamos uma delegate que recebe nosso metodo como parametro
//Note que esta delegate só pode receber como parametro
//um metodo void que não recebe argumentos

ThreadStart operacao = new ThreadStart(Trabalho);

//Agora já estamos prontos para criar nossa Thread
//A Thread deve receber como parametro a delagate que indica
//o que deve ser executado quando a Thread for iniciada

Thread minhaThread1 = new Thread(operacao);
//Nome da Thread
minhaThread1.Name = "Exemplo-1";
//Aqui Inicializamos a Thread, então ela executará o que
//foi especificado pela delegate operação
minhaThread1.Start();

//Aqui executamos o mesmo codigo novamente para
//iniciar uma segunda Thread e compararmos os IDs

Thread minhaThread2 = new Thread(operacao);
minhaThread2.Name = "Exemplo-2";
minhaThread2.Start();


Console.ReadLine();
}
}

Essa foi uma introdução simploria a Threads
Em breve postarei mais exemplos...

Posted by Joao Bosco | with no comments

Para mostrar como é facil operar com bibliotecas do windows, farei essa rapida demonstração de como bloquear estação de trabalho do windows.
Normalmente você tem que apertar ctrl + alt + del
depois disso escolher a opção bloquear computador.

Para brincar um pouco com a biblioteca user32.dll vamos fazer essa aplicação muito simples que ao ser ativada bloqueia a estação de trabalho exigindo que seja colocada a senha do usuario novamente para voltar as atividades.


static class Program
{
//Nessa simples linha estamos importando a dll user32 do windows
//que é uma das bibliotecas principais do windows
[DllImport("user32.dll", SetLastError = true)]

//A bliblioteca user32 tem um metodo que não recebe parametros
//chamado LockWorkStation que faz essa função de bloquear a estação de trabalho
//nessa linha declaramos o metodo LockWorkStation(),
//que está no user32.dll, como um metodo externo

public static extern int LockWorkStation();



 static void Main()
 {

  LockWorkStation();

 }

}

 

Podemos fazer chamadas a diversas bibliotecas do windows... como o kernel32.dll, user32.dll , gdi32.dll
Em  cada uma dessas dlls temos diversas funções que controlam desde aspectos de aparencia até sons emitidos pelo windows.
Agora é só pesquisar e fazer bom uso.

Simples, facil e rapido.

Como a vida deve ser...

Trabalhar com as bibliotecas do windows com C# e .NET é simples assim...

Posted by Joao Bosco | with no comments

As vezes nos assustamos com determinadas tarefas pois achamos que teremos que trabalhar com um nivel de abstração mais baixo para fazer coisas que lidam mais diretamente com o sistema de arquivos e com o hardware de maneira geral.

Nesse ponto o .NET framework da show de bola, pois tem abstrações necessarias para varias tarefas que poderiam ser um pouco mais trabalhosas.
Nesse QuickPost vou mostrar como listar os drives de seu computador com pouquissimas linhas de codigo em C#

//Lembrete: importar a biblioteca necessaria ---> using System.IO;
//A classe DriveInfo provê a abstração necessaria para lidar com os Drives do computador
//Nessa classe você encontrará metodos para pegar o espaço livre de cada drive do computador
//você pode ter informação tambem sobre o espaço total de de cada drive e etc...
//para pegar os drives do compuador basta a chamada ao metodo estatico GetDrives()
//da classe DriveInfo

DriveInfo[] drives = DriveInfo.GetDrives();

//laço foreach que é especifico para percorrer coleções de dados
foreach (DriveInfo d in drives) {
Console.WriteLine("Nome: " + d.Name); //pega o nome do drive
Console.WriteLine("Tipo: " + d.DriveType.ToString()); //pega o tipo do drive
Console.WriteLine("Raiz: " + d.RootDirectory.FullName); //pega o diretorio raiz do drive
Console.WriteLine("-----------------------------------------------------");
}
Console.ReadLine();

PS: A listagem para drives de DVD, aponta o tipo como CDROM
PS2: Obter o espaço livre de drives de DVD e CD geram uma exceção caso não haja nenhuma midia no drive.

Daqui pra frente postarei mais pequenas dicas como essa.
Espero que essa dica ajude alguem!!

Visite também: http://joaoseixas.blogspot.com

Até a proxima.

O recurso Auto-implemented properties, do C# 3.0, faz com que a declaração de propriedades torne-se mais simples, porque não é necessário todo aquele código adicional após o set e o get. Quando as propriedades são declaras o compilador cria, toda a estrutura que deverá ser acessada através das propriedades get e set apenas.

Veja o exemplo:
Class Pessoa
{
public int Idade{ get; set; }
public string Nome{ get; private set; } // read-only
public char Sexo { get; private set; } // read-only
}

No modo de implementação do C# 2.0, isto seria declarado assim:

class Pessoa
{
private string nome;
public string Nome
{
get { return nome; }
set { nome = value; }
}
private int idade;
public int Idade
{
get { return idade; }
set { idade = value; }
}
private char sexo;
public char Sexo
{
get { return idade; }
set { idade = value; }
}
}

Bem, eu ainda não usei este modo de implementação, mas o código torna-se visivelmente mais enxuto, basta nos acostumarmos a escrever menos.
Espero ter trazido algo de novo. Até a próxima.
Posted by Ivan Clay | with no comments
Filed under: , ,


Este artigo inicia uma série de artigos que terão o intuito de trazer de maneira descomplicada as possibilidades do novo conceito de construção de games criado pela Microsoft.   Neste primeiro contato, gostaria de tentar conceituar o XNA, e mostrar como preparar o ambiente para utilizá-lo da melhor maneira possível.

Afinal o que é o XNA Framework?

Podemos considerar XNA framework, de modo simplista, uma plataforma Microsoft especialmente desenvolvida para que desenvolvedores independentes pudessem construir jogos para PC e XBOX 360, surgindo o conceito de jogador-desenvolvedor, e utilizando as ferramentas do seu dia-a-dia, na sua definição real o XNA, consiste, não apenas da plataforma, mas também das ferramentas e comunidades idealizadas pela Microsoft.

  
Ambiente, o que é necessário?


Os requisitos básicos necessários para começar a criar seus próprios jogos utilizando XNA, são:

1.       Sistema operacional Windows XP SP2 ou Windows Vista.

2.       Visual C# 2005 Express (http://msdn2.microsoft.com/en-us/express/aa975050.aspx).

3.       Visual C# 2005 Express SP1

       (http://download.microsoft.com/download/7/7/3/7737290f-98e8-45bf-9075-85cc6ae34bf1/vs80sp1-kb926749-x86-intl.exe).

4.       XNA Game Studio Express (http://msdn2.microsoft.com/pt-br/xna/aa937795.aspx).

Com estas ferramentas gratuitas, você consegue criar jogos para PC e XBOX 360.

 

XNA Game Studio Express

Microsoft XNA Game Studio Express, é a ferramenta, que na versão atual, 1.0 Refresh Build 1.1.10405.0, integra-se ao Microsoft Visual C# 2005 Express Edition, montando assim a ferramenta para o desenvolvimento dos jogos para PC e XBOX 360, baseando neste framework.

Bem, espero que a proposta deste primeiro artigo tenha sido atingida.  Na verdade, pretendia aqui, tentar fazer com que os aficcionados por jogos digitais possam interessar-se, pela proposta de desenvolvimento simples e baixem as ferramentas e preparem o ambiente, e enquanto esperam pelo próximo artigo, ousem e tentem desenvolver mesmo apartir da documentação oficial XNA.

Posted by Ivan Clay | with no comments

Esse post foi publicado por Moacir Mato Grosso Filho, que é membro da célula IT Extreme, no seu blog pessoal.
Quem quiser conferir esse e outros posts de Moacir, o endereço é: http://moacirmgf.spaces.live.com/
 

Microsoft Software Inventory Analyzer

Controlar e inventariar as licenças de softwares instalados numa rede é um grande problema para os profissionais de TI.

 

Para isso a Microsoft possui uma ferramenta gratuita (que pouca gente conhece) chamada Microsoft Software Inventory Analyzer (MSIA), que te ajuda a analisar e examinar a quantidade de software instalados na sua organização.

 

O software varre toda sua rede ou seu computador local em busca de detalhes sobre os produtos MS, como por exemplo: tipo, quantidade de licenças disponíveis, quantidade de licenças instaladas etc. Relatórios e gráficos podem ser gerados para ajudar na administração de sistemas, licenciamento e inventário de softwares Microsoft da sua corporação. Os resultados do levantamento efetuado pelo MSIA são inteiramente confidenciais e não são enviados a Microsoft.

 

Os sistemas operacionais suportados por esta ferramenta são:

 

• Microsoft Windows ® 98

• Windows ® Millennium Edition

• Windows NT ® Workstation 4.0

• Windows NT ® Server 4.0

• Windows ® 2000 Server

• Windows ® 2000 Professional

• Windows ® 2000 Advanced Server                                   

• Windows ® XP Professional e Windows XP Home Edition

• Windows ® Server 2003 Standard Edition and Enterprise Edition

• Windows ® Vista (Starter, Home Basic, Home Premium, Business, Ultimate)

 

No site http://www.microsoft.com/resources/sam/msia.mspx você terá acesso ao download do MSIA, manuais e vídeos sobre a utilização do software. Infelizmente, todo o material esta em Inglês.

Dando continuidade ao post anterior, venho agora dar um exemplo pratico de de construção de gadget.

Um exemplo muito simples mas que serve para quem quer dar os primeiros passos.

Não estou seguindo boas praticas de programação em java script, mas tudo isso é para tornar o artigo mais didatico para quem não sabe nada.

 Vamos então começar...

 

Exemplo de gadget


Vamos agora ao nosso Hello World.

Começaremos pelo nosso arquivo de manifesto, o gadget.xml

Nesse arquivo ficam definições de autoria, nome, ícones, versão descrição e etc.


Segue um exemplo do arquivo:


<?xml version="1.0" encoding="utf-8" ?>

<gadget>

< name>Gadget IT Extreme</ name>

< namespace>IT Extreme</ namespace>

< version>1.0.0.0</ version>

<author name ="Joao Bosco">

< info url="http://joaoboscoseixas.spaces.live.com " text="Gadgets " />

< logo src="logo.jpg" mce_src="logo.jpg" />

</author >

< copyright>© 2007</ copyright >

< description>Gadget de exemplo para o IT Extreme</ description>

<icons>

< icon width="64" height="64" src="logo.jpg" mce_src="logo.jpg" />

</icons >

<hosts >

<host name ="sidebar">

< base type="HTML" apiVersion="1.0.0" src="gadget.html" mce_src="gadget.html" />

< permissions>full</ permissions>

< platform minPlatformVersion="0.3" />

</host >

</hosts >

</gadget >


Temos varias tags, todas agrupadas dentro da tag <gadget>. Temos tags para definição de nome do aplicativo, versão, autor, logo, ícone, descrição e etc.

A tag mais importante é a <base>. Nela é definida o arquivo que será executado, no caso desse XML, ele está apontando para gadget.html


Nesse exemplo vamos usar um HTML bem simples para fazer essa demonstração.


<html>

<head>

<title>Meu Primeiro Gadget</title>

<style>

body{

width: 130px;

height: 80px;

}

</style>

</head>

<body>

<span>Hello World!!!</span>

</body>

</html>


A parte de estilo poderia estar normalmente num arquivo .CSS, mas nesse caso para simplificar mais ainda, estou colocando no HTML para facilitar a vida de quem não conhece. Dessa mesma forma num arquivo .css você poderia fazer qualquer formatação, fonte, cor etc., exatamente como numa aplicação web normal.

Se você leu a primeira parte do artigo, então já sabe como publicar o seu gadget, em qual pasta ele deve ficar ou a forma de publicar ele como um arquivo zip.

Publique e veja o resultado.


Agora vamos colocar algum código com Java Script no gadget para tratar os eventos de dock e undock. Esses eventos são responsáveis pelas ações que acontecerão ao anexar ou desanexar o gadget da barra lateral.


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

<head>

<title>Meu Primeiro Gadget</title>


<style type="text/css">

body{

width:130;

height:130;

}

</style>

<script type="text/javascript">

function main()

{


System.Gadget.onUndock = verificarEstado;

System.Gadget.onDock = verificarEstado;

verificarEstado();

}

 


function verificarEstado()

{

if(!System.Gadget.docked){

setUndockedSize();

}

else{

setDockedSize();

}


}

 


function setUndockedSize(){

document.body.style.width = "280px";

document.body.style.height = "180px";

conteudoGadget.innerHTML = '<h1>DESANEXADO</h1>';

}

 


function setDockedSize(){

document.body.style.width = "130px";

document.body.style.height = "130px";

conteudoGadget.innerHTML = 'Anexado a barra lateral ';

}


</script>


</head>

<body onload="main()">

Texto do gadget:

<span id="conteudoGadget" ></span>

</body>

</html>



Pelo código você pode notar que a depender do conteúdo retornado pelo método System.Gadget.docked, que retorna um boolean, você poderá saber se o gadget está anexado a barra lateral ou não, com isso ele vai ser redimensionado para um determinado tamanho e o texto exibido se modificará.

Como eu sei que existe um método System.Gadget.docked ?

Na verdade eu tenho super poderes, e me comunico com maquinas, então foi fácil, eu simplesmente perguntei para API do Windows Sidebar, qual era o método que me retornava se a aplicação estava anexada ou não a barra lateral.

Mas caso você não tenha os mesmos super-poderes que eu, você pode encontrar todas essas informações e muito mais na pagina oficial da documentação no MSDN.

http://msdn2.microsoft.com/en-us/library/aa965850.aspx


Nessa pagina você encontrará vários métodos muito úteis para construção dos seus gadgets, com exemplos que ensinam a aplicar os métodos.

Existem métodos que verificam as medidas de processador e memória, das interfaces wireless e etc.

Esse é o material de referencia. Tudo está lá, desde a referencia do arquivo de manifesto XML até os métodos que podem ser usados.


Esse é um exemplo BEEEMM básico. Você pode e deve aprender como se faz telas de configurações e flyouts para melhorar o seu gadget.

Flyouts são as expansões que provêem uma visualização diferenciada quando você passa o mouse sobre o gadget. Por exemplo, num gadget que exibe noticias você pode ter a noticia passando de forma rotativa como se fosse um letreiro e ao passar o mouse sobre a noticia, seria aberto um flyout com um resumo da noticia.

Já no arquivo de configuração você pode fazer modificação do visual do gadget por exemplo.

Enfim, as possibilidades são infinitas, basta deixar sua criatividade agir.

Você pode pegar por exemplo dados de alguma pagina web para exibir no seu gadget na sua área de trabalho. Você pode ter um software que grava sua agenda de contatos em um arquivo XML e o seu gadget vai ler esse arquivo XML e mostrar a você os seus contatos.

Possibilidades infinitas, então… Mãos a obra!
Espero que tenham gostado.

Até os proximos posts

Abraços,

João Bosco.

Gadgets também são chamados de mini-aplicativos em português. Para quem não sabe são aqueles ícones que ficam em uma barra lateral transparente do Windows Vista. Os gadgets já são conhecidos de outras plataformas, no Linux por exemplo, acredito que o primeiro gerenciador de janelas a utilizar esse recurso foi o Window Maker, que trazia a possibilidade de se fazer “docks”. No Mac OS também já existe esse recurso há algum tempo.

Para quem pensa que a Microsoft somente agora resolveu “copiar” a idéia, está enganado. Desde Office 97 já vem sendo discutida a introdução desse conceito, mas somente agora ele se consolidou.

 

O que são gadgets?

Existem 3 tipos diferentes de gadgets

 

      • Gadgets do Vista
      • Gadgets do Live.com ou Windows Live Spaces
      • Gadgets SideShow

 

Nesse post iremos falar apenas dos gadgets para Windows Vista, que são aqueles que ficam na barra lateral, na área de trabalho.

Os gadgets para Windows Live Spaces, são gadgets para rodar na web, e os SideShow, são para dispositivos com vídeo secundário, como laptops, que tem um visor na tampa que exibem algumas informações, controles remotos, celulares etc.

 

Um gadget de barra lateral do Vista, pode ser definido de forma simplória como uma pagina HTML rodando em uma janela do Internet Explorer. A visualização na área de trabalho é provida por uma instancia do IE, sem borda e com tamanho pré definido.

O gadget pode estar acoplado ou desacoplado da barra lateral. Quando está acoplado a dimensão padrão recomendada pela Microsoft é 130 X 130px. Sendo que ao estar acoplado a largura máxima é 130px mas a altura pode variar.

Quando está desacoplado essas dimensões podem ser modificadas .

 

 

Por que usar gadgets?

        • Aplicações leves
        • Customização da Área de Trabalho
        • Aumento da produtividade
          • -Dados vindos de outras aplicações
          • -Informações atualizadas
          • -Simplicidade no acesso a informações

 

 

O que preciso para desenvolver um gadget?

Para desenvolver um bom gadget você precisa saber apenas HTML, CSS e Java Script. Por ser executado sempre pelo Internet Explorer, o desenvolvedor não precisa se preocupar com compatibilidade entre browsers ao desenvolver seu gadget. Também é possível a utilização de controles específicos do IE e controles ActiveX, que podem propiciar por exemplo o controle de recursos do Windows como, Windows Media Player, Microsoft Office e etc...

Você também pode escrever seu próprio controle ActiveX. Existe também os objetos da própria barra lateral, que você pode usar para fazer diversas manipulações que facilitam muito o desenvolvimento.

 

Para iniciar seu primeiro aplicativo você irá precisar apenas de um arquivo HTML e um arquivo de configuração XML que irá abrigar algumas informações e definições sobre o seu aplicativo.

 

Para publicar o seu gadget você pode fazê-lo de varias formas, vou falar apenas das formas mais rápidas e fáceis. Na pasta Program Files -> WindowsSidebar -> Gadgets ficam os gadgets globais, que servem para todos os usuários do sistema operacional. Temos também os gadgets locais que servem apenas para o usuário especifico, C:\Users\JOAOBOSCO\appdata\local\microsoft\windows sidebar\gadgets

No local onde tem JOAOBOSCO, você irá substituir pelo seu usuário.

Para criar um gadget basta dentro dessas pastas cria uma pasta com uma “extensão”  .gadget

Por exemplo, crie uma pasta com o nome, “Demonstração.gadget”, dentro dela coloque seus arquivos e você já terá seu gadget publicado, bastando apenas ir a barra lateral do Windows e clicar no botão de adicionar novo gadget, na lista exibida já irá aparecer seu novo gadget.

 

Outra maneira simples é criar todo seu mini-aplicativo numa pasta, zipar a pasta e depois renomear o arquivo zipado, tirando a extensão .zip e colocando a extensão .gadget.

Fazendo isso o Windows reconhece automaticamente a extensão do arquivo e você precisa apenas dar 2 cliques no arquivo para que ele seja executado e adicionado a barra lateral.

 

Vou ficar por aqui para não me tornar muito extenso.
Vimos nesse post um pouco da teoria de gadgets, no proximo post faremos nosso primeiro gadget. Um simples "hello world", onde começaremos a ver alguns recursos que os gadgets podem nos oferecer.
Explicarei sobre o arquivo gadget.xml, falarei do java script e html.

Até breve

 

Abraços,

João Bosco.
 

 

O que é imagine cup?

Imagine Cup é a competição mundial, promovida pela Microsoft que visa incentivar estudantes de tecnologia a aplicarem sua imaginação, criatividade e espírito inovador, em soluções que irão fazer a diferença no mundo. Nos últimos anos a Imagine Cup cresceu e se tornou realmente uma competição global que procura soluções para desafios do mundo real.

 

Tema de 2008

O tema da competição em 2008 é o meio ambiente.

Nosso planeta está sofrendo mudanças de todas as ordens diariamente. Devemos nos apressar então em desenvolver soluções para que tenhamos um equilíbrio e um meio ambiente sustentável.

Diariamente geleiras glaciais derretem, florestas são derrubadas, novos desertos se formam. Tudo isso sinaliza que devemos ter pressa na mudança do nosso estilo de vida e concepção de mundo.

Este ano a Microsoft está chamando os jovens estudantes para participarem da competição, com o intuito de desenvolver soluções que ajudem a prover um meio ambiente sustentável.

O slogan da competição esse ano é: “Imagine um mundo onde a tecnologia permita um meio ambiente sustentável.”

Segundo a Microsoft, o resultado da união do poder da tecnologia e o potencial de pessoas jovens, é ilimitado. As idéias que surgirão desse casamento, poderão ajudar milhões de pessoas no futuro.

Tudo isso ainda gira em torno de uma premiação em dinheiro para os 3 melhores colocados em cada categoria.

 

Categorias

Este ano temos 9 categorias:

 

  • Design de Software

Nessa categoria o objetivo é desenvolver um software que tenha ligação com o tema, usando os requisitos mínimos que são: Implementar e consumir um web service, usar o Microsoft .NET Framework 2.0 ou superior e usar o Visual Studio para desenvolver o projeto.

Essa categoria é em equipe e pode ser composta de 4 pessoas e mais um mentor, que pode ser um professor da faculdade. A premiação para o primeiro colocado é de 15 mil dólares.

 

  • Desenvolvimento Embarcado

Times de 2 a 4 participantes com direito a um mentor, vão construir protótipos de dispositivos. Premiação é de 15, 10 e 5 mil dólares para o primeiro segundo e terceiro colocados.

 

  • Desenvolvimento de Games

O objetivo dessa categoria é desenvolver um game 2D ou 3D, utilizando a plataforma XNA, com linguagem de programação C#. Esses jogos devem ser executados tanto em pc quanto em Xbox 360. O premio para a equipe que ficar em primeiro é de 25 mil dólares.

 

  • Projeto Hoshimi

O projeto Hoshimi é basicamente um jogo onde você controla um exercito de nano-robôs que tem que percorrer o corpo humano para cura-lo. O premio para o campeão dessa categoria é 8 mil dólares.

 

  • IT Challenge

Nessa categoria você terá que prover uma infra-estrutura segura e robusta com base em um problema. Durante a competição é indicado o material que pode servir como base de conhecimento para resolver os problemas propostos. A premiação para o campeão é de 8 mil dólares.

 

  • Algoritmo

Nessa categoria você terá que desenvolver complexos algoritimos para resolver questões propostas. A primeira fase é baseada num pequeno robô que tem que percorrer a arena passando por certos pontos. O objetivo é programar esse robô para cumprir essa tarefa gastando o mínimo de bytes. A segunda fase é baseada na solução de problemas utilizando C# ou VB . NET. O premio para o vencedor é de 8 mil dólares.

 

  • Fotografia

O concurso de fotografia visa sensibilizar o publico ao tema proposto na competição. O objetivo é tirar uma serie de fotos de forma que elas contem uma historia que sensibilize as pessoas para a causa em questão. Essa categoria é disputada em dupla e tem premiação de 8 mil dólares para o vencedor.

 

  • Filme (curta metragem)

Tem o mesmo objetivo da categoria de fotografia, porem aqui será um filme com menos de 25MB de tamanho e menos de 500 palavras em inglês. Nessa categoria os times são formados por 4 membros.

 

  • Design de Interface

Criatividade, idéias inovadoras e usabilidade, esses são os pilares dessa categoria. Em duplas com direito a um mentor, sua equipe deve criar uma interface de interação inovadora com o usuário para um aplicação. A premiação para o campeão é de 8 mil dólares.

 

Essa é uma competição muito importante, que infelizmente ainda tem pouca tradição no Brasil e principalmente na Bahia, mas vamos tentar reverter esse quadro. Apesar do Brasil já ter ficado entre os 3 melhores por mais de um ano ainda são poucos os trabalhos submetidos levando em conta a quantidade de estudantes de tecnologia que temos no pais.

A competição é uma grande oportunidade de ganhar projeção, sem falar na chance de ganhar dinheiro realmente.

Para participar é só se registrar em: www.imaginecup.com 

Se você decidir competir, nós iremos nos encontrar....
 

 

Posted by Joao Bosco | with no comments

 

Para aqueles que não sabem, já teve inicio a competição mundial da Microsoft voltada para estudantes, a ImagineCup.
Venho tentando incentivar o maior numero possível de pessoas a se inscreverem nessa competição. Mas na minha opinião a inscrição apenas não basta, é preciso competir.

Para aqueles que se perguntam o que irão ganhar com isso, de cara já temos um grande beneficio. Os participantes tem direito a licenças de softwares como o Windows Server 2003, Windows Vista Business, Windows XP, Microsoft Project e por ai vai...
A inscrição é totalmente gratuita, e a premiação gira em torno de 8 mil dólares para os vencedores das categorias. Algumas categorias com prêmios ainda maiores. Mas o mais importante é o reconhecimento que isso tudo pode trazer a você. Só estar entre os melhores do Brasil, já irá abrir muitas portas.

Gostaria de ter mais tempo para me dedicar mais a essa competição em categorias que exigem um planejamento maior.
Por essa falta de tempo, estou competindo por enquanto, apenas nas categorias Algoritimos e Projeto Hoshimi.
No Projeto Hoshimi ainda estou experimentando e lendo para saber como "funciona". É basicamente um jogo onde você tem a sua disposição um exercito de nano-robôs e tem que combater doenças dentro do corpo humano. O bom disso tudo é que você programa os nano-robôs.

Já a competição de algoritmo, eu me arrependo de ter começado. Simplesmente não consigo parar.
Estou gastando todo meu tempo livre "jogando". E olhe que estamos apenas no "Warm-up", a competição mesmo começa dia 11 de outubro.
Como já disse anteriormente, gostaria de ter mais tempo para me dedicar a isso... atualmente todo meu tempo livre vai para isso, hora de almoço, intervalo entre aulas na faculdade, intervalo entre trabalho e faculdade e ate alguns minutos no trabalho estão sendo dedicados a isso, ainda bem que minha chefe não lê isso aqui.

O que tem de tão bom nessa modalidade de algoritmo??
A resposta é... SIMPLICIDADE!!!

O objetivo é controlar um robô e percorrer a arena apanhando os pontos brancos sem tocar nos pontos cinzas, pois os pontos cinzas zeram os pontos brancos que já foram apanhados.
Pra simplificar mais ainda, ou dificultar talvez, o robô só tem 3 comandos, FRENTE, ESQUERDA e DIREITA.
Qual a dificuldade disso tudo?? programar o robô com esses 3 comandos de forma que sua programação não exceda o numero de bytes maximo da questão.

Mesmo que não tenhamos o mesmo nível dos competidores que já participaram de outras edições do evento... Nos divertimos muito fazendo competições internas dentro da célula.

Até estudantes de engenharia já entraram na onda por aqui... Surgiu até o desejo de