Dec 08

Palestra sobre Mercado e Tecnologias

Pessoal,

No último dia 30/11/2010 estive no Colégio Estadual Vicente Rijo em Londrina, para uma palestra sobre o mercado regional de tecnologia e as tecnologias utilizadas. Nesta oprtunidade falei sobre a plataforma Microsoft e como ela está posicionada em relação a outras ferramentas.

Gostaria de ressaltar que fique impressional com a qualidade das instalações e do ensino técnico mistrado por uma escola pública, realmente um exemplo a ser seguido. Gostaria de agradecer ao Pedro da Incubadora Intuel da Universidade Estadual de Londrina pelo convite.

Vejam as fotos:

foto1
Diretor fazendo a abertura.

foto2
Muitos alunos de todas as idades.

foto3
Palestra sobre Mercado e Tecnologias

foto4
Palestra sobre Incubadoras.

Abraços,
Carlos dos Santos.

Nov 17

Prova Team Foundation Server

Pessoal, há duas semanas eu fiz a prova do Team Foundation Server Administrator (70-512). A prova relata bem a realidade de um administrador de TFS, com perguntas bem objetivas sobre o dia a dia de uma empresa e situações que realmente acontecem.

Para os que quiserem fazer esta prova, vai a dica do blog do Daniel Oliveira, que separou vários link com materiais muito interessantes sobre esta prova.

E para dar uma animada em quem ainda está indecido, seja a cópia do certificado da prova:

CertificadoTFS

Abraços e boa sorte aos que forem fazer a prova.

Carlos.

Oct 15

Uma história interessante

Pessoal,

Gostaria de compartilhar com vocês uma história muito interessante que ocorreu comigo ontem. Como MVP, temos acesso a diversas ferramentas, mesmo antes de serem lançadas para o público em geral, com o intuito de ajudarmos no processo de testes e refinamento das funcionalidades. Recentemente eu comecei a testar o novo Visual Studio Power Tools (versão ainda beta privado) e percebi que o Visual Studio ficou mais lento para carregar soluções.

Como temos acesso a listas de discussão com o time do produto, eu postei uma mensagem relatando o problema e rapidamente uma pessoa do time do Visual Studio entrou em contato comigo para pedir mais detallhes do problema. Após eu relatar o cenário onde estava ocorrendo a lentidão, esta pessoa me pediu para baixar e executar uma ferramenta de coleta de informações (dump) e enviar para eles analisarem.

Agora aconteceu algo muito interessante. Ao baixar a ferramenta, a mesma não estava funcionando corretamente, ficava em loop ao iniciar o trace. Novamente eu reportei o problema e uma outra pessoa, agora que é o responsável pela ferramenta de diagnóstico entrou em contato comigo, primeiro por email me passando algumas instruções, que também não deram certo. Por fim ele sugeriu fazermos uma conferência por LiveMeeting (mesma ferramenta usada para webcasts), mas o link que ele me enviou não funcionou. Como MVP, temos acesso ao livemeeting e eu passei para ele um acesso que eu já tinha criado.

Pois bem, ele se conectou e começamos a analisar a ferramenta, e depois de uns 20 minutos analisando o problema, descobrimos que havia um erro em uma linha de comando de um arquivo BAT da ferramenta, uma simples falta de espaço. Corrigimos e a ferramenta finamente funcionou.

O interessante disto tudo: acertamos um problema em um local totalmente diferente do problema inicial, que era com o Visual Studio. Agora eu executei a ferramenta e enviei o dump para eles analisarem e corrigirem o problema.

Isto só mostra o quando a Microsoft está preocupada com a qualidade dos seus produtos e quanto os MVPs são importantes neste processo!

Um abraço e até a próxima.

Carlos dos Santos.

Oct 03

Publicando uma aplicação web no IIS 7

Olá pessoal, neste artigo vou mostrar como é simples publicar uma aplicação web no IIS 7 (Internet Information Server), que está presente no Windows Vista, Windows 7 e Windows Server 2008 e 2008 R2.

Publicar uma aplicação na sua rede local ou computador pessoal é um pouco diferente do que publicar em um webhost, que traz ferramentas específicas que ajudam e facilitam o trabalho, visto que dificilmente você terá acesso direto ao IIS do hosting.

Mas no ambiente da sua rede local, será necessário acessar o IIS para publicar sua aplicação web, seja ela Asp.Net, Webservices ou WCF, e é neste caso que este artigo pode lhe ajudar.

Não vou abordar a criação da aplicação propriamente dita, pois existe uma infinidade de artigos na web mostrando técnicas e frameworks que podem lhe ajudar neste processo, aqui vamos abordar simplesmente a publicação e atualização da aplicação.

Então vamos criar uma aplicação bem simples em Asp.Net só para demonstrar a publicação, para isto vá em New Project e escolha Asp.Net e dê o nome de WebTeste:

image

Veja que estamos criando uma aplicação com o Framework 2.0. Estou fazendo isto para demonstrar logo abaixo como podemos publicar uma aplicação com o Framework 4.0, que apresenta algumas diferenças.

Criada a aplicação, vamos apenas escrever um texto qualquer, lembrando que o objetivo é mostrar a publicação apenas:

image

Se você executar esta aplicação, pressionando F5, terá algo como a tela abaixo:

image

O Visual Studio possui um micro servidor web, que serve para ajudar no desenvolvimento de aplicações web, ou seja, com este pequeno servidor, você consegue executar sua aplicação sem precisar instalar o IIS, e para cada aplicação que você executa, ele cria um endereço virtual, como o da imagem acima:

http://localhost:45566/Default.aspx

Isto é bem interessante, pois você pode usar este endereço inclusive dentro da sua rede, ou seja, de um outro computador, se você digitar o nome ou IP deste micro, é possível acessar esta aplicação web, mas lembre-se, somente para o desenvolvimento, pois o Visual Studio compila a aplicação e publica através deste servidor de desenvolvimento.

Mas agora vamos publicar a aplicação corretamente, usando o IIS. Para isto vá no menu Build/Publish do Visual Studio e você verá uma tela igual a este no Visual Studio 2010:

image    image

ou igual a esta no Visual Studio 2008:

image

No Visual Studio 2010, nós temos mais opções na publicação, que você poderá explorar posteriomente. Eu vou escolher publicar em um diretório a nossa aplicação, mas você pode publicar direto no IIS ou por FTP, de acordo com a sua necessidade. Para publicar em um diretório, em Target Location coloque o nome do diretório e depois clique em Publish:

image

Feito isto, o Visual Studio irá compilar e copiar os arquivos necessários para a aplicação web funcionar no diretório especificado, veja:

image

Agora precisamos publicar no IIS, e para isto vamos abrir o Gerenciador do IIS, lembrando que se você não tem o IIS precisará instalá-lo. Abra o gerenciador do IIS clicando Iniciar/Painel de Controle/Ferramentas Administrativas/Gerenciador do Internet Information Services (caso você não veja as Ferramentas Administrativas, use a busca do Painel de Controle) e após isto você vera a tela abaixo:

image

Agora para publicar a aplicação, clique com o botão direito do mouse no site padrão (Default WebSite) e depois em Add Application:

image

Você verá a tela abaixo:

image

Neste tela o Alias é o nome do site, que será usado para acessá-lo pelo navegador e o Physical Path é o diretório onde publicamos a aplicação pelo Visual Studio ou o diretório do seu servidor onde está a aplicação publicada. Clicando em OK, você já poderá acessar a sua aplicação pelo browser:

image

Está pronto, sua aplicação está publicada no IIS 7, mas lembre-se que no eu comentei no início do artigo que para publicar uma aplicação em .Net 4.0 era um pouco diferente e vou mostrar isto agora.

Quando desenvolvemos uma aplicação, ela está ligada a versão do Framework em que foi escrita, e isto acontece também com o Servidor Web (IIS). Nele as aplicações executam sob um Pool de Aplicações, onde você informa qual a versão do framework será executada. Isto possibilita que executemos em um mesmo servidor web aplicações escritas em várias versões do framework. Mas como gerenciar estes Pools  de Aplicação ? Bom isto é bem simples, veja: clicando em Application Pools no gerenciador do IIS você tem esta tela:

image

Ela mostra todos os pools que temos atualmente e você pode notar que temos .Net 2.0 e .Net 4.0, mas não temos o 3.5, pois ele faz parte do 2.0. Vamos então criar e publicar uma aplicação com .Net 4.0, para isto basta primeiramente criarmos a aplicação em  .Net 4.0, então vamos em New Project/Web:

image

Só um detalhe importante é que quando clicamos uma aplicação no Visual Studio 2010 para .Net 4.0, ela já tem um esqueleto pronto, então se você quiser, troque somente o texto da tela inicial, de maneira que fique como a tela abaixo:

image

Depois publique da mesma maneira que foi demonstrado acima. Só para demonstrarmos um erro bem comum, publique a aplicação da mesma maneira que a anterior, e veja que ao executá-la obterá o seguinte erro:

image

Este erro acontece porquê o DefaultAppPool está apontando para o .Net 2.0 e sua aplicação agora é feita em 4.0, vamos então ver a maneira correta de criar a aplicação no IIS. Na verdade os passos são os mesmos com uma pequena diferença, temos que escolher um outro Pool para nossa aplicação, clicando no botão Select da tela de criação de aplicação:

image

Clicando no botão Select, você verá a tela abaixo:

image

Onde escolheremos ASP.NET v4.0, e está pronto, agora você pode acessar sua aplicação sem problemas:

image

Se você já tiver criado a aplicação no IIS e quiser trocar o Pool, basta clicar em Advanced Settings e trocar o Pool. Você pode também criar seu próprio Pool no IIS, clicando com o botão direito em Application Pools/Add Application Pool.

Para finalizar, quando você atualizar a sua aplicação, basta publicar novamente que o IIS irá executar a nova versão.

Se você quer configurar a segurança da sua aplicação, veja estes outros posts:
http://technet.microsoft.com/pt-br/library/cc731278(WS.10).aspx
http://technet.microsoft.com/pt-br/library/cc730708(WS.10).aspx

É isto aí pessoal, espero que seja útil para vocês!

Abraços,
Carlos dos Santos.

Sep 19

Verificar se um programa já está em execução

Pessoal, neste post sobre C# básico, vou mostrar como identificar se um programa já está em execução. Vamos aproveitar também ver como listar todos os programas que estão em execução no computador.

Para começar, crie um projeto em C# do tipo Console Application e logo em seguida vamos modificar o program.cs conforme abaixo:

   1: static void Main(string[] args)

   2:         {

   3:             string Processo = Process.GetCurrentProcess().ProcessName;

   4:             if(Process.GetProcessesByName(Processo).Length > 1)

   5:             {

   6:                 Console.WriteLine("Programa em execução");

   7:                 return;

   8:             }


Veja que é bem simples, basicamente estamos verificando se o nosso processo (que é o programa), está na lista de processos em execução, e se estiver, mostramos uma mensagem e finalizamos o programa.

Podemos também transformar este código em uma função reutilizável, veja:

   1: static void Main(string[] args)

   2:         {

   3:             if(VerificaProgramaEmExecucao())

   4:             {

   5:                 Console.WriteLine("Programa em execução");

   6:                 return;

   7:             }

   8:             Console.WriteLine("Programa executando");

   9:             Console.ReadKey();

  10:         }

  11:  

  12:         public static bool VerificaProgramaEmExecucao()

  13:         {

  14:             return Process.GetProcessesByName(Process.GetCurrentProcess().ProcessName).Length > 1;

  15:         }


Assim você simplesmente chama o método VerificaProgramaEmExecucao() e se ele retornar TRUE, o programa está ativo.

Para finalizar, vamos mostrar a lista de processos em execução:

   1: Console.WriteLine("Processos em execução");

   2: Console.WriteLine("---------------------");

   3: foreach(var proc in Process.GetProcesses())

   4: {

   5:     Console.WriteLine("{0} - {1}",proc.ProcessName,proc.Id);

   6: }


No código acima, mostramos o nome do processo e o seu ID, mas se você observar a classe Proccess, verá que existem diversas propriedades e métodos que podem ser usados.

É isto aí pessoal, abraços e até a próxima.

Carlos dos Santos.

Sep 12

Passando parâmetros para uma aplicação .Net

Pessoal, seguindo com os posts sobre C# básico, vou mostrar como passar parâmetros para uma aplicação em .Net usando C# em um Windows Forms.

Primeiramente crie uma aplicação Windows Forms:

image

Eu estou usando o Visual Studio 2010 e o Framework 4, mas você pode usar qualquer versão do Visual Studio para executar este exemplo.

Após criar a aplicação vamos ao arquivo Program.cs, onde vamos colocar a variável que irá receber os parâmetros:

   1: [STAThread]

   2: static void Main(string[] parametros)

   3: {

   4:     Application.EnableVisualStyles();

   5:     Application.SetCompatibleTextRenderingDefault(false);

   6:     Application.Run(new frmPrincipal());

   7: }


Neste exemplo eu criei uma variável chamada parametros que irá receber os argumentos da linha de comando. Se você precisa usar o parâmetro somente para acionar alguma parte do seu programa, pode fazer assim:

   1: static void Main(string[] parametros)

   2: {

   3:     if(parametros.Length > 0)

   4:     {

   5:         if(parametros[0].ToUpper() == "/CONFIG")

   6:         {

   7:             frmConfig config = new frmConfig();

   8:             config.ShowDialog();

   9:             Application.Exit();

  10:             return;

  11:         }

  12:     }


Primeiro você testa se recebeu algum parâmetro e depois faz a verificação. Eu fiz a conversão para Upper() fica mais simples a verificação. Agora você pode estar se perguntando, como vou fazer debug da aplicação e passar o parâmetro ? Isto você pode configurar na janela de propriedades do projeto em Project/Properties/Debug:

image 

Se você precisar testar mais de um parâmetro ao mesmo tempo, basta colocá-los separados por espaços, do mesmo modo que faria no prompt de comandos. Agora para finalizar, vou mostrar como passar o parâmetro para o form principal da aplicação. Para isto teremos que modificar o construtor do form, veja:

   1: public partial class frmPrincipal : Form

   2:     {

   3:         public frmPrincipal(string[] parametros)

   4:         {

   5:             InitializeComponent();

   6:         }

   7:     }


Na verdade acrescentamos o parâmetro no construtor do form, mas se você precisar passar qualquer outra informação, basta modificar o construtor. Agora vamos voltar no program.cs e passar o parâmetro:

   1: Application.Run(new frmPrincipal(parametros));


É isto aí pessoal, um abraço e até a próxima.

Carlos dos Santos

Sep 06

Ferramentas para Relatórios

Para quem está desenvolvendo aplicações comerciais em .Net, uma dúvida muito comum é como criar os relatórios da aplicação. Se você usa o Microsoft SQL Server, poderá usar o Reporting Services (), que é um excelente ferramenta para relatórios.

Mas se você usa outros bancos de dados, ou está criando uma aplicação multi-banco, talvez o Reporting Services não seja uma boa opção, mas não se preocupe pois existem várias alternativas e excelentes ferramentas para relatórios, vejamos algumas delas que considero muito boas:

1. PrintDocument: componente do Visual Studio onde você precisará desenhar o relatório manualmente, não é a maneira mais eficaz para um relatório, mas pode ser útil em alguns casos. Conheça mais em:

2. SQL Reporting Services: faz parte do Microsoft SQL Server e é uma ferramenta gratuita, mesmo nas versões Express. É simples de utilizar e possui grande variedade de templates. Os relatórios ficam armazenados dentro do SQL Server. Conheça mais em: http://msdn.microsoft.com/pt-br/library/ms159106.aspx

3. DevExpress XTraReports: é uma ferramenta realmente excelente, apesar de ser paga, não é muito cara e depois de instalar o componente você terá um novo template para um item de projeto do tipo XTraReport, onde você cria relatórios realmente fantásticos. Você tem total controle sobre todas as partes do relatório e pode escrever o código em C# ou VB.Net dentro do Visual Studio. Os relatórios são compilados junto com a aplicação e você precisa somente distribuir as DLLs do componente. Um ponto que não gosto muito é que não tem um Designer muito amigável para o usuário final, caso você queira permitir que seus usuários modifiquem os relatórios. Ele também expota os relatórios para um dezena de formatos, como PDF, JPG, Word, Excel, HTML, etc. Conheça mais em: http://www.devexpress.com/products/net/reporting/
A DevExpress é muito conhecida também pela sua suite de componentes, que vale a pena você conhecer.

image

4. StimulReport: é uma ferramente excelente e muito simples de utilizar, trabalha por padrão com Ribons no Designer o que facilita muito a vida do desenvolvedor, permite controlar totalmente o relatório, assim como o XTraReports, mas ao contrário deste, o relatório não é compilado junto com a aplicação, ficando em um arquivo separado. Neste caso ou você mantém o arquivo separado ou cria um mecanismo para armazená-lo no banco de dados. A grande vantagem desta ferramenta é a facilidade de se modificar um relatório em tempo de execução, simplesmente clicando em um botão EDIT. Ele permite também que os formulários para os filtros do relatório, por exemplo, sejam feitos juntamente com o relatório, o que facilita muito a nossa vida. Você precisará também enviar junto com a aplicação as DLLs do componente. AO Stimul tem também uma interface toda em WPF, o que lhe confere um visual bem mais moderno. Ele também expota os relatórios para um dezena de formatos, como PDF, JPG, Word, Excel, HTML, etc. Conheça mais em: http://www.stimulsoft.com/

image

É claro que existem vários outros componentes para relatórios, mas estes são os que eu considero muito produtivos. É isto aí, acho que deu para ter uma idéia de que caminho tomar no desenvolvimento de relatórios para aplicações.

[]s,
Carlos dos Santos.

Aug 02

Windows Forms – atualizando o formulário de dentro de uma Thread

É relativamente comum termos uma aplicação que precise usar uma ou mais threads para realizar algum processo demorado onde o usuário não precise ficar esperando, mas às vezes é necessário também que esta thread faça algum tipo de interação com a tela, talvez atualizando alguma informação, barra de progresso, enfim, mostrar ao usuário que algo está acontecendo.

Uma tarefa relativamente simples, mas que pode causar um certo transtorno justamente por ser uma thread. Veja a aplicação abaixo em Windows Forms:

image

É uma tela bem simples, com um botão e uma barra de progresso. Agora vamos imaginar que este form tenha o código abaixo, que cria uma thread que atualiza a progressBar1:

   1: public partial class Form1 : Form

   2: {

   3:     private bool threadAtiva = false;

   4:  

   5:     public Form1()

   6:     {

   7:         InitializeComponent();

   8:     }

   9:  

  10:     private void btnIniciar_Click(object sender, EventArgs e)

  11:     {

  12:         

  13:         Thread processo = new Thread(new ThreadStart(ExecutaThread));

  14:         processo.Start();

  15:  

  16:         progressBar1.Maximum = 100;

  17:         progressBar1.Value = 0;

  18:  

  19:         threadAtiva = true;

  20:     }

  21:  

  22:     void ExecutaThread()

  23:     {

  24:         while (threadAtiva)

  25:         {

  26:             if (progressBar1.Value > 99)

  27:             {

  28:                 threadAtiva = false;

  29:                 return;

  30:             }

  31:             progressBar1.Value++;

  32:             progressBar1.Refresh();

  33:         }

  34:     }

  35: }


O código acima está correto, mas ao executar e clicar no botão iniciar, aparece o seguinte erro:

image

O erro acontece porquê a janela da aplicacação (UI) está executando em uma thread e agora nós temos outra thread executando o nosso processo e tentando atualizar a tela. Então como resolver isto ?

Simplesmente usando um Invoker:

   1: void ExecutaThread()

   2:        {

   3:            while (threadAtiva)

   4:            {

   5:                if (progressBar1.Value > 99)

   6:                {

   7:                    threadAtiva = false;

   8:                    return;

   9:                }

  10:                this.Invoke(new MethodInvoker(delegate()

  11:                {

  12:                    progressBar1.Value++;

  13:                    progressBar1.Refresh();

  14:                }));

  15:            }

  16:        }

Agora estamos atualizando a tela ou seja, o progressBar1 usando um Invoker que está sendo executando sob a thread principal, ou seja, o formulário. Neste exemplo eu usei o MethodInvoker() com um método anônimo, mas você poderia ter criado um método e chamado sem problemas e com isto você pode ter várias thread rodando e atualizando a interface do usuário.

É isto aí pessoal, espero que dica seja útil para vocês.

Um abraço e até a próxima.

Carlos dos Santos.

Jun 13

Palestra na Faccar de Rolândia/PR sobre Visual Studio 2010

Eu estive na Faculdade Paranaense – FACCAR, de Rolância/PR na última sexta-feira (11/06), para ministrar uma palestra sobre Visual Studio 2010 e as novidades da plataforma.

Neste evento, tive a oportunidade de mostrar recursos como programação dinâmina, paralelelismo, Entity Framework 4, WPF e Silverlight.

Gostaria de agradecer ao convite do Prof.Zanete e espero voltar mais vezes para mostrar os avanços tecnológicos da plataforma .Net

Vejam as fotos:

DSC04926 DSC04927 DSC04928 DSC04929

[]s,
Carlos dos Santos.