Ivan Paulovich Migração do Blog 15. janeiro 2010 18:21 .NET

Como já haviamos comentado aqui no Blog estamos em processo de mudança para a plataforma aberta BlogEngine.NET. Até o momento nós migramos apenas o conteúdo do Blog e de alguns usuários. Ainda estamos fazendo alguns testes com a ferramenta, mas em pouco tempo tudo estará no lugar.

Adianto também que infelizmente não poderemos usar o Windows Azure para hospedagem do nosso site pois a Microsoft lançou uma nota nos informando que farão o lançamento do Azure inicialmente para alguns países e o Brasil não é um deles. Uma pena!

Vamos então as informações que interessam:

- Endereço do antigo sistema: blog.100loop.com.br

- Restante dos usuários serão migrados em breve.

- Ainda estamos avaliando qual ferramenta usaremos para a nossa Wiki.

Bom dia galera! É muito bom estar de volta à ativa aqui no blog, afinal este mês inteiros ficamos acertando detalhes da migração do sistema e ainda não conseguimos finalizar todo os itens necessários. Mas para o primeiro post do ano, gostaria de compartilhar com vocês uma experiência que tive esta semana. Na segunda feira dia 11 de janeiro, comecei a ministrar um curso de ASP.net para os desenvolvedores aqui da empresa. Para muitos que participam do curso, esta é uma oportunidade única, visto que ainda trabalham com ASP "full time". Por&eacu te;m já pensando numa forte estratégia de crescimento, a webAula está capacitando toda equipe para desenvolver nesta poderosa tecnologia.

Estou muito contente com o resultado das duas primeiras aulas, são duas turmas de 10 pessoas... nosso cronograma está caminhando bem, e num bom ritmo. Tenho certeza de que todos terão um excelente aproveitamento. Para aqueles que desejam adiantar um pouco os estudos, recomendo acessar o link "MSDN Experience" e seguir o programa de estudos direcionado ao Desenvolvimento Web (último da lista). 

Basicamente, para ter acesso ao conteúdo dos cursos você terá de cadastrar seu "Microsoft Passport" neste site... então você irá logar com uma conta de lá. Ok? Sucesso para todos nós e em breve vou postar aqui os Slides que estou utilizando em nossos encontros e em alguns casos os "fontes" de nossos hands-on.

Grande abraço à todos.

Ivan Paulovich Aviso aos navegantes 30. dezembro 2009 10:00 Design

Estamos planejando uma grande mudança no blog para esse feriado de reveillon. Provavelmente as senhas de acesso terão que ser resetadas, e nesse caso cada blogueiro ativo irá receber novos dados de acesso ao painel administrativo. Se você tem alguma dúvida fale comigo ou com o André que nós podemos te explicar em detalhes.

Ivan Paulovich Como motivar um programador 30. dezembro 2009 00:42 Carreira

 motivation

Li hoje um post interessante no blog Coding Horror. No texto Jeff Atwood ironiza uma maneira de motivar uma equipe de programadores. Basta simplesmente comentar que uma outra pessoa está melhorando um código escrito anteriormente por ele.

Eu acho essa observação do Jeff bastante coerente. Eu mesmo, fico bastante entusiasmado em saber que outros bons programadores identificaram problemas em meu código e se dedicaram a melhorar ou corrigir os problemas.

E o resultado final é um crescente interesse em superar as críticas desses “auditores externos”. Fica a dica pra você que é lider de equipe:

Um grande motivador pra equipe de desenvolvimento é aproximar bons programadores dos códigos de outros bons programadores.

Ivan Paulovich Convert To Web Application 26. dezembro 2009 20:27 .NET

Vamos a uma dica rápida sobre a IDE do Visual Studio. Com toda certeza você já se deparou com erros de compilação em Web Applications e a mensagem de erro era semelhante a essa:

The name '{0}' does not exist in the current context.

O erro está ocorrendo pois não foi gerada a declaração do objeto no arquivo sua_pagina.aspx.designer.cs. O erro geralmente ocorre ao marcar uma tag HTML com runat="server" e em seguida referenciar esse objeto no code behind.

A solução imediata é criar a chamada no arquivo .aspx.designer.cs e em seguida recompilar o projeto. Mas essa solução fica tediante se por algum motivo você tem uma dezena de erros como esse. Então vamos a solução ideal.

  1. Delete os arquivos .aspx.designer.cs dassociados  as páginas que apresentam esse erro.
  2. Clique com o botão direito na raiz do projeto e seguida no botão Convert To Web Application.

image

Serão gerados todos os arquivos .designer.cs faltantes no projeto. Agora você tem mais um motivo pra você gostar tanto da IDE do Visual Studio!

Agora vai uma dica rápida para o pessoal de Redmond: coloquem esse botão para aparecer ao clicar no arquivo aspx e não na pasta.

Publiquei hoje um novo projeto no Codeplex. O projeto consiste numa conversão do BlogEngine.NET para a plataforma Windows Azure. Hospedei o projeto no endereço http://blogengineforazure.codeplex.com/ e tão logo tenhamos um aplicativo que atenda nossas necessidades iremos migrar o 100loop.com para esse novo sistema.

Então fiquem atentos ao que rolar por aqui, pois em breve iremos ter muitas mudanças na nossa ferramenta. E deixo também o convite para os atuais colaboradores para a entrada de novos colaboradores.

Quem desejar participar do projeto pode me mandar um e-mail ou me adicionar no MSN ivanpaulovich@hotmail.com.

Boas festas!

Ivan Paulovich Fazendo o Natal mais feliz 22. dezembro 2009 00:29 Carreira

Esse mês encarei o desafio de tornar o Natal de famílias carentes um pouco mais feliz. Eu fui motivado por uma iniciativa da Getsêmani em arrecadar mantimentos, brinquedos e vestuário para famílias carentes do bairro Rosaneves em Ribeirão das Neves. A princípio eu iria apadrinhar apenas uma cartinha de uma família, mas não parou por aí. A minha cunhada (Camila) ficou sabendo dessa ação social que eu iria participar e resolveu ajudar.

Ela correu bastante (quer dizer.. ônibus pra cima e pra baixo), e conseguiu encher um porta-malas de brinquedos para meninos e meninas. Vejam só:

Presentes_5F00_5F318854

Esse porta-malas de brinquedos eu levei pra Getsêmani. Onde eu ajudei a separar os brinquedos que iam chegando de acordo com o gênero e idade. Eu iria apenas entregar os presentes e ir pra minha casa descansar, mas quando vi que o trabalho era muito resolvi ficar. E valeu a pena.

Eu já havia combinado de participar da distribuição dos brindes no sábado. Eu havia prometido apadrinhar uma cartinha, nela a menina pedia uma mochila rosa e uma sandália. Vejamos o que eu consegui:

PresentesDayane_5F00_0E195B9B

Pra minha alegria, pude contribuir com mais algumas coisas. E durante o dia a Getsêmani organizou uma tenda de circo com brincadeiras para as crianças (graças a Deus fez Sol), abaixo alguns filmes do que rolou durante a tarde.

Cama elástica


[View:http://www.youtube.com/watch?v=oq40lIHXIEk:425:344]

Distribuição dos brinquedos

[View:http://www.youtube.com/watch?v=C4tf6L7eUvI:425:344]

Jesus Freak Parte I

[View:http://www.youtube.com/watch?v=wkwQoEYShFg:425:344]

Como eu não sou um cara engraçado (preferi deixar o trabalho com as crianças com as meninas), fui com mais alguns amigos entregar os presentes para as famílias. O bairro pessoal, não tem essa infra-estrutura que tanto estamos acostumados e tivemos que carregar (com alegria!) pra cima e pra baixo tudo que havíamos arrecadado.

E não parou por aí. A minha mãe trabalha numa escola em Betim, e ela havia me mostrado uma cartinha com uma história muito triste e nela um pedido: ganhar um computador. Eu já fiquei meio desanimado, porque achei meio complicado conseguir um presente assim. Mas meus amigos não pensaram como eu. E pra minha surpresa quando cheguei hoje no trabalho. Olha o presentão que eles tinham montado:

091221_082511

Não é atoa que eu considero que trabalho com os melhores de Belo Horizonte, sou fã desses caras! Um agradecimento enorme ao Ricardo, Luciano, Wescley, André, Renato e Rafael. Vocês são demais!

E você, quem sabe você não encara mais um desafio nesse fim de ano? Ainda há tempo e há muito o que fazer.

Atualização 22-Dez

E os presentes continuam chegando. Estes agora estão indo pra Betim.

091221_180636

091221_170943

 

E pra quem estava lá e quer pegar as fotos comigo. Acessem esse link:

http://picasaweb.google.com/ivanpaulovich/RosanevesParaJesus

Atualização 22-Dez – mais doações

E as doações continuam chegando:

091222_125552

Como eu havia dito ainda há tempo de ajudar. Obrigado Darlesson por participar.

Atualização 23-Dez – roupas para doações

A turminha aqui realmente está animada, olha só:

091223_113955

Chegou mais um kit de roupas para doações. Obrigado Luciano por ajudar.

E a mensagem que deixamos é que sempre é tempo de ajudar, não somente no Natal. O desafio fica em pensarmos no próximo todos os dias de nossa vida.

Atualização 24-Dez - Mais doações.

091224_120532

André Paulovich I SabaNerd 21. dezembro 2009 23:36 .NET Carreira

Boa tarde pessoal!

Este sábado nós tivemos o nosso primeiro SabaNerd! Nosso primeiro encontro contou com a participação de quatro "nerds". Nos encontramos bem cedo (para um sábado) às 9:30 da manhã lá na minha casa. Fizemos um rápido café da manhã regado a coca-cola e pão de queijo...

foto_5F00_sabanerd

Logo depois do café da manhã, desfizemos a mesa... e na sequência começamos a escovar bit. Afinal, nosso objetivo era conhecer um pouco mais de .net em um mini-curso ultra-rápido e não podíamos perder tempo. Começamos analisando o processo de desenvolvimento de software em três camadas... o que foi muito legal para dar uma boa fundamentada nos conceitos. Então partimos para o desenvolvimento no Visual Studio 2008. Foi interessante ver como não é necessário muita expêriencia com a tecnologia para que um profissional bem "embasado" de conceitos de Orientação a Objetos consiga rapidamente se familiarizar com a plataforma .net. O Wescley por exemplo é um profissional de Flex, e o tempo todo fazíamos analogias com a tecnologia que ele dominava... o mesmo valia para o Darlesson e para o Humberto.

Depois de algumas horas, já estávamos terminando nosso primeiro período de estudo... vimos como boas práticas para montar uma base de dados, criar diagramas de ER... depois conectamos nosso banco através do Server Explorer, criamos nossa solução no Visual Studio, montamos nossos projetos de Class Library, montamos nosso projeto web... e então fizemos um overview da sintaxe do C#. Então baixamos o projeto do Paulovich.Data e começamos a ver um pouco sobre os frameworks de persistência que encapsulam o ADO.net e facilitam o desenvolvimento. Chegamos a montar um pequeno cadastro antes de sair para almoçar... porque ninguém é de ferro.

Na hora do almoço... churrasquinho e mais coca-cola! Com todo mundo satisfeito, fizemos mais alguns minutos de intervalo antes de voltar para frente dos computadores... Não é necessário falar que nos divertimos muito neste sábado de estudo. Todos fomos beneficiados de alguma forma, e espero que no futuro a gente repita a dose.

Um grande abraço a todos.

Wescley Relacionando ActionScript com MXML 21. dezembro 2009 01:03 Flex

Quando comecei a desenvolver em Flex, tive algumas dificuldades para entender por que alguns atributos em MXML não são atributos em ActionScript. O Post de agora, vem explicar um pouco esta diferenciação que a Adobe fez, e mostra algumas facilidades que o MXML traz, ao permitir que eventos e Estilos sejam definidos como atributos no MXML.

MXML == ActionScript

ActionScript é a principal linguagem para o Flash Player. Logicamente você pode criar toda sua aplicação usando apenas uma ou várias classes em ActionScript. Mas devido aos vários benefícios, podemos usar o MXML para deixar a construção bem mais fácil e intuitiva.  O MXML já é uma linguagem que vem facilitar a utilização do ActionScript, mas o resultado final de um MXML é um Action Script.

A tradução de uma linguagem MXML em ActionScript pode ser vista, com uma configuração no Flex. Para isto vá em, Project -> Properties. No canto direito da nova tela. Vá a Flex Compiler.

mxmlToAs

Em Additional Compiler Arguments, digite o argumento -keep, separado por espaço do argumento anterior.

Quando o projeto for compilado será gerado na pasta raiz do projeto, uma nova pasta com o nome genereted, que conterá todos os ActionScript gerado, pelo MXML, esta pasta é atualizada toda vez que você compila o projeto.

Voltando agora no relacionamento do ActionScript com MXML.

Tags de MXML são Classes em ActionScript

As tags de MXML tornam se classes. Por exemplo criando um Button in MXML, devemos escrever a seguinte linha de código.

<!-- Botão em MXML -->
<mx:Button id="okButton" />

depois de compilado este código será equivalente a

// Botão em ActionScript 3.0
import mx.controls.Button;
public function init():void{
var okButton:Button = new Button();
addChild(okButton);
}

Atributos são propriedades

Quando você adiciona atributos a tag, basicamente você esta mudando propriedade daquela instancia do componente. Por exemplo quando mudamos a Label do Botão em MXML teríamos.

<!-- MXML -->
<mx:Button id="okButton" label="Ok" />

que seria equivalente há

// em ActionScript
import mx.controls.Button;

var okButton:Button = new Button();
okButton.label = "Ok";
addChild(okButton);

Atributos são Estilos

Uma grande confusão é feita, quando temos que mudar estilos em Action Script. Estilo são propriedades especiais do Flex, e são usadas para controlar a aparência do componente. Enquanto um estilo é considerado propriedade no MXML em ActionScript as coisas ficam um pouco diferente, neste temos que trabalhar de maneira diferente usando os metodos gstStyle() e Setstyle(). Por exemplo para arredondarmos o canto dos botões devemos usar a propriedade  cornerRadius.

Em MXML temos

<!-- MXML -->
<mx:Button id="okButton" cornerRadius="14"/>

Seguindo a Lógica do tópico, acima iríamos fazer "okButton.cornerRadius=14", mas você perceberá um erro do compilador, uma vez que ele não var achar a propriedade cornerRadius. Ao invés disso devemos usar o método SetStyle. Este método tem dois parâmetros o primeiro o estilo da propriedade, e o segundo o valor que queremos definir

// ActionScript
import mx.controls.Button;
var okButton:Button = new Button(); okButton.setStyle("cornerRadius", 14); addChild(okButton);

Atributos são EventListeners.

EventListeners, é a solução encontrado pelo desenvolvedor para dizer quando acontece alguma interação com ele, como um click de mouse. EM MXML já temos pronto o atributo para ouvir este evento. Isto não acontece com em Action Script onde temos que chamar o método addEventListener para ai sim definir qual evento usar, e conseqüentemente qual método iremos chamar

<!-- MXML -->
<mx:Button id="okButton" click="doSomething"/>

fazendo  em ActionScript, teríamos, "okButton.click = doSomething()". Mas novamente teríamos um Erro. Em ActionScript devemos Usar o addEventListener, assim ficaria.

// ActionScript
import mx.controls.Button;
var okButton:Button = new Button(); okButton.addEventListener(MouseEvent.CLICK, doSomething); addChild(okButton);
Wescley MVC e FLEX 19. dezembro 2009 10:05 Flex

Adicionando alguns desafios no desenvolvimento em Flex e consequentemente adotando boas pratícas de programação, fui enconrajado aplicar o padrão de projeto MVC no meu atual desafio. Trata-se de um sistema em Flex onde iremos fazer consultas e alterações no Banco de Dados.

O MVC é um excelente padrão de projeto para se aplicar durante o desenvolvimento de aplicações Flex, ele divide as responsabilidade do projeto, facilitando assim seu reuso de codígo, e manutenção.

Uma boa analógia a se fazer com o padrão MVC é o funcionamento de uma empresa bem administrada. A empresa possuí varias equipes que se interegem entre si, sem que estas, interfira no funcionamento da outra.

Uma contratação de um desenvolvedor por exemplo, é um trabalho conjunto da equipe de RH com a equipe de Desenvolvimento. A equipe de RH jamais deve interferir no trabalho da equipe de desenvolvimento e sim obter informações desta equipe sobre o perfil do futuro desenvolvedor. Por sua vez a equipe de desenvolvimento não deve interferir no processo de seleção do usuário. Somente validar se o profissional definido pela equipe de RH é realmente o profissional desejado. 

O padrão MVC trabalha da mesma Forma. Ele separa as classes em três "Equipes" distintas. A parte mais importante para se entender deste projeto é a sua divisão e a comunicação entre estas "equipes". A seguir detalhe da divisão, neste momento irei definir "equipes", como classes. 

  • Model ->  Armazena dados e toda a logída da aplicação para ser consumida na interface. 

  • View ->   Toda interface do usuário vai estar aqui.

  • Controler ->  Responsável pelas alterações que o usuário var fazer na View e consequentemente alterar os dados da Model

Pegando uma check Box como exemplo teríamos. 

 

  • Model ->  Esta deverá armazenar o estado da Caixa, se esta marcada ou desmarcada. Informações que normamelte estão gravadas em algum lugar.
  • View ->   Trata do layout da aplicação, neste caso usando o componente CheckBox do Flex, temos somente a caixinha em branco no estado desmarcado, ou caixinha colorida no estado marcado 
  • Controler -> Esta define quais são as atitudes que a camada View terá quando o usuário clicar ou cometer qualquer tipo de ação neste botão. O resultado desta interação será armazenada na Model; 

 

Vale salientar que a camada View, não se trata apenas da visualização dos dados, mas sim de qualquer interação com o usuário, como por exemplo audio ou vibração de um controle.

Comunicação entre as Classes

Depois de entender a segregação das classes, devemos entender como funciona a comunicação entre as mesmas. 

  • A camada MODEL deve enviar notificações de estado para controlar as modificações da camada VIEW.
  • A camada VIEW  por sua vez, deve registrar na CONTROLLER  o recebimento das interações do usuário, solicitando dados da MODEL.
  • A camada CONTROLLER deve atualizar a MODEL e consequentemente atualizar a VIEW, com o resultado esperado pelo usuário.  

Para facilitar a comunicação, cada objeto em MVC deve armazenar referencias dos outros objetos junto com suas interações. Especialmente a instancia Model precisa referenciar a View, para que a mesma seja rendenrizada. 

Responsabilidade de cada Classe

Model

Como ja dito anteriormente sua principal função é armazenar os dados e fornece a aplicação metodos especificos para trabalhar com estes dados e validalar serviços. Citando o exemplo de uma aplicação de um Relogio analogico, a Model irá cuidar de disparar o metódo que irá  ter o Tick (segundos) do relógio.

View

Tudo que se relaciona com o usuário deve estar na VIEW, a view é um ouvinte das açoes do usuário e das alterações que ocorre na Model, no exemplo do relógio acima, cada alteração do metodo Tick na Model, teremos uma alteração no ponteiro do relogio que esta na VIEW.  É importante salientar, que qualquer mudança feita na view pelo usuário, esta deve ser alterado na Controler para ai sim, alterar algo na Model, a View nunca fará alteração diretamente na Model, o contrário já pode acontecer.  

Controller

Esta camada ouve notificações de alterações da dados na Model pela View. A controler pode tambem fazer decisões logicas sobre a entrada destes dados, antes de enviar informações para a Model. 

De maneira bem resumida e simplificada este é o padrão MVC, atualmente estou desenvolvendo a aplicação e estou desenvolvido toda a classa View. É interessante pensar que algumas coisas que eu fazia no MXML devem ser feitas agora na classe Controler. Assim que for encarando novos desáfio na utilização deste framework vou relatando. Em um novo Post.