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
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
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.
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.
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

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
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...
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...
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.
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.
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/
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:
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.
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.
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.
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.
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.
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.
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.
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....
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