Eduardo Spaki

August 2008 - Posts

Pare de comer barriga, evite a repetição de código!!!

Enquanto o Steve Ballmer grita "Developers, developers, developers...", os engenheiros repetem "Reutilização, reutilização, reutilização..."!
Porém hoje o ritmo de desenvolvimento e a complexidade de desenvolvimento de um software é alucinante!!! E como programadores são humanos e humanos erram na mesma medida da sua inteligência (isso se deve ao tamanho do seu conhecimento), será mesmo que temos que controlar o código na mão?

Uma vêz me disseram que o computador tem que trabalhar para nós e não o inverso. Partindo deste princípio, achei no codeplex o Clone Detective: uma ferramenta que detecta as repetições de códigos em um projeto.

ScreenshotSmall.png

Visite o site oficial e veja um video demonstrando o plugin:
http://www.codeplex.com/CloneDetectiveVS

fonte: http://blogs.2pc.com.br/ramonduraes/archive/2008/08/22/voc-est-escrevendo-muito-c-digo-repetido.aspx

Validação no ASP

Pessoal, vou dar uma rápida passada em cada controle de validação do ASP.NET, apenas para compreendermos em qual situação é necessário usa-los, e quais usar... right?

Bem, com um formulário em mão e seus campos definidos, devemos localizar os controles na paleta Validation da ToolBox:

image

Logo de cara vou explicar o último, o ValidationSummary. Arrastando-o para seu formulário, não é preciso configurar nada, ele simplesmente exibirá um resumão, digo, sumário, dos erros de validações encontrados pelos outros componentes. Para uma maior customização você pode definir o grupo de validação dele pela propriedade ValidationGroup. Vejamos sua definição no formulário:

<asp:ValidationSummary ID="ValidationSummary1" runat="server" />

O RequiredFieldValidator, define que um campo é obrigatório. Ao arrastarmos para frente do controle a ser validado, de preferência, podemos definir as seguintes propriedades:

<asp:RequiredFieldValidator
    ID="RequiredFieldValidator1"
    runat="server"
    ControlToValidate="TxtCampoObrigatorio"
    ErrorMessage="Campo obrigatório!"
    ToolTip="Este campo é obrigatório. Informe com algum valor!"
    SetFocusOnError="True"
    Text="*"
/>

A Propriedade ControlToValidate identifica o controle a ser validado.
A ErrorMessage é o texto que aparecerá no ValidationSummary.
ToolTip define o texto que aparecerá ao posicionarmos o mouse sobre o erro.
SetFocusOnError é um boleano que define se o campo receberá ou não foco ao ocorrer erro na validação.
Text é o texto que aparecerá no próprio controle de validação, caso o erro ocorra.

O RangeValidator é muito usado para validar intervalo de valores, por exemplo, a nota de um aluno que só pode ser entre 0 e 100! Vejamos sua definição e propriedades:

<asp:RangeValidator
    ID="RangeValidator1"
    runat="server"
    ControlToValidate="TxtAlcance"
    ErrorMessage="Intervalo de valor inválido!"
    MaximumValue="100" MinimumValue="0"
    ToolTip="Intervalo de valor inválido. Informe um valor entre 0 e 100!"
    SetFocusOnError="True"
    Type="Integer"
    Text="*"
/>

Notamos o MaximumValue (Valor Máximo) e o MínimumValue (Valor Mínimo) configurado na mesma linha, assim fechamos o escopo de valores. Notamos também o Type como Integer, assim sendo, o campo só aceitará valores inteiros nesta faixa.

O RegularExpressionValidator é exclusivamente desenhado para expressões regulares. Nele definimos principalmente a propriedade ValidationExpression com a expressão regular desejada, veja na figura alguns "Templates" que acompanha o VS.

image
image

O CompareValidator é usado para comparar valores em dois controles, com aquelas confirmações de senha ou e-mail, ou entre tipos, como por exemplo quando há a necessidade de que o campo de texto receba uma data válida. Para comparar dois controles, além da propriedade ControlToValidate, devemos configurar o outro controle na propriedade ControlToCompare. Para validar se o tipo do dado do campo está nos conformes devemos configurar duas propriedades: A Operator (operação da validação) para DataTypeCheck (Checagem de Tipo de Dado) e a Type com o tipo desejado. Veja o exemplo para a validação de uma data:

<asp:CompareValidator
    ID="CompareValidator1"
    runat="server"
    ControlToValidate="TxtComparacao"
    ErrorMessage="Data inválida!"
    Operator="DataTypeCheck"
    ToolTip="Data inválida! Informe uma data válida!"
    Type="Date"
    SetFocusOnError="True"
    Text="*"
/>

Por último o CustomValidator funciona com alguma rotina específica de validação. Esta rotina pode ser escrita em JavaScript por exemplo, vejamos o exemplo de validação de um número inteiro com BLOCKED SCRIPT

<asp:CustomValidator
    ID="CustomValidator1" runat="server"
    ControlToValidate="TxtCustomizado"
    ErrorMessage="Valor inválido!"
    ToolTip="Valor inválido. Informe um número inteiro!"
    ClientValidationFunction="ValidarNumeroInteiro"
    SetFocusOnError="True"
    Text="*"
/>

Definimos a rotina JavaScript na propriedade ClientValidationFunction. Esta função tem que estar vinculada de alguma forma ao formulário. Veja como eu escrevi a função:

<head runat="server">
    <title>
        Título da Página
    </title>
    <script>
        function ValidarNumeroInteiro(src, args)
        {
            args.IsValid = !isNaN(parseInt(args.Value, 10));
        }
    </script>
</head>

Note a assinatura da função... seus parametros. Isso é padrão, pois no CustomValidator não podemos definir a assinatura deste método de validação. Estes parametros são gerados pelo ASP.NET. O scr é o objeto originador da validação. Já o args, são os argumentos da validação, com a propriedade Value, que contém o valor do campo que está sendo validado, e a propriedade boleana IsValue, que define se o campo é válido ou não.

Lembrando que este tipo de validação foi só um exemplo que me veio a cabeça no momento, mas a validação de um número inteiro poderia ter sido feita facilmente com o CompareValidator... lembram?

Note que validamos um formulário sem nenhuma operação no codebehind do mesmo. Muito interessante, porém cuidado, a validação é feita no navegador do cliente atravéz de scripts (geralmente JavaScript) do controle de validação. Logo, para qualquer problema no navegador ou se o usuário desabilitar a execução de scripts, sua aplicação tem de ser sucetível no lado do servidor também!!! Então é altamente recomendável fazer validações e re-verificações no code behind também!

Código final do exemplo:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="EstudoASP._Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>
        Título da Página
    </title>
    <script>
        function ValidarNumeroInteiro(src, args)
        {
            args.IsValid = !isNaN(parseInt(args.Value, 10));
        }
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Label ID="Label6" runat="server" Text="Validações com ASP.NET"
            Font-Names="Arial" Font-Size="Large" Font-Bold="True" ForeColor="#0066CC"></asp:Label>
        <br />
        <asp:Label ID="Label7" runat="server" Text="Este arquivo é um exemplo de validação no navegador do cliente. Não há interação com o servidor, todas as validações estão rodando sobre JavaScript no navegador! Preste atenção nas configurações do HTML e nos padrões dos nomes dos campos de Texto e Botões."
            Font-Names="Arial" Font-Size="X-Small" Font-Bold="False"
            ForeColor="#0066CC"></asp:Label>
        <br />
        <br />
        <asp:Label ID="Label1" runat="server" Text="RequiredFieldValidator"
            Font-Names="Arial" Font-Size="Small"></asp:Label>
        <br />
        <asp:TextBox ID="TxtCampoObrigatorio" runat="server"></asp:TextBox>
        <asp:RequiredFieldValidator
            ID="RequiredFieldValidator1"
            runat="server"
            ControlToValidate="TxtCampoObrigatorio"
            ErrorMessage="Campo obrigatório!"
            ToolTip="Este campo é obrigatório. Informe com algum valor!"
            SetFocusOnError="True"
            Text="*"/>
        <br />
        <br />
        <asp:Label ID="Label2" runat="server" Text="RangeValidator" Font-Names="Arial"
            Font-Size="Small"></asp:Label>
        <br />
        <asp:TextBox ID="TxtAlcance" runat="server"></asp:TextBox>
        <asp:RangeValidator
            ID="RangeValidator1"
            runat="server"
            ControlToValidate="TxtAlcance"
            ErrorMessage="Intervalo de valor inválido!"
            MaximumValue="100" MinimumValue="0"
            ToolTip="Intervalo de valor inválido. Informe um valor entre 0 e 100!"
            SetFocusOnError="True"
            Type="Integer"
            Text="*"
        />
        <br />
        <br />
        <asp:Label ID="Label3" runat="server" Text="RegularExpressionValidator"
            Font-Names="Arial" Font-Size="Small"></asp:Label>
        <br />
        <asp:TextBox ID="TxtExpressaoRegular" runat="server"></asp:TextBox>
        <asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server"
            ControlToValidate="TxtExpressaoRegular" ErrorMessage="e-mail inválido!"
            ToolTip="Este e-mail está inválido. Informe um e-mail correto!"
            ValidationExpression="\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"
            SetFocusOnError="True">*</asp:RegularExpressionValidator>
        <br />
        <br />
        <asp:Label ID="Label4" runat="server" Text="CompareValidator"
            Font-Names="Arial" Font-Size="Small"></asp:Label>
        <br />
        <asp:TextBox ID="TxtComparacao" runat="server"></asp:TextBox>
        <asp:CompareValidator
            ID="CompareValidator1"
            runat="server"
            ControlToValidate="TxtComparacao"
            ErrorMessage="Data inválida!"
            Operator="DataTypeCheck"
            ToolTip="Data inválida! Informe uma data válida!"
            Type="Date"
            SetFocusOnError="True"
            Text="*"
        />
        <br />
        <br />
        <asp:Label ID="Label5" runat="server" Text="CustomValidator" Font-Names="Arial"
            Font-Size="Small"></asp:Label>
        <br />
        <asp:TextBox ID="TxtCustomizado" runat="server"></asp:TextBox>
        <asp:CustomValidator
            ID="CustomValidator1" runat="server"
            ControlToValidate="TxtCustomizado"
            ErrorMessage="Valor inválido!"
            ToolTip="Valor inválido. Informe um número inteiro!"
            ClientValidationFunction="ValidarNumeroInteiro"
            SetFocusOnError="True"
            Text="*"
        />
        <br />
        <br />
        <asp:ValidationSummary ID="ValidationSummary1" runat="server" />
        <br />
        <asp:Button ID="BntValidar" runat="server" Text="Validar" />
        <br />
        <br />
        <asp:HyperLink ID="LnkMainsInfo" runat="server"
            NavigateUrl="http://www.macoratti.net/aspnctl2.htm" Target="_blank">Mais
        Info.</asp:HyperLink>
    </div>
    </form>
</body>
</html>

Resultado no browser:

image 

Lembrando: Validação é assunto de certificação!!!

Gostaram!?

Abraços :)

Microsoft e seu poder de fogo

Eu, enquanto profissional, sempre tive muita curiosidade em saber os bastidores de gigantes multi-nacionais como Microsoft, Google, Apple etc.
Quem nunca sonhou em saber como que o Windows ou o Office é feito?
Quem nunca sonhou em saber a infraestrutura por traz do Msn ou do mecanismo de busca do Google?
Porém estes dados são segredos industriais e estratégicos, logo não são revelados a reles mortais como eu, menos ainda para a concorrência.

... Más a sempre um sub-mundo, onde, além de rolar especulações, rolam também informações comprovadas. Neste sub-mundo encontramos alguns seres (cada um classifique-o como quiser), e um destes seres capturou alguns slides que foram apresentados rápidamente em uma palestra do Estrategista Ambiental Chefe da Microsoft, estes slides, que pelo jeito não poderiam estar ali, continham detalehs sobre os servidores da empresa:

  • São 15 datacenters espalhados em lugares como Porto Rico e Irlanda. No total 17,406 racks, acomodando 148.357 servidores.
  • O maior consumidor de recursos (75%) é o Live Search, seguido de longe pelo Hotmail.
  • O consumo é de 72.500KW ou 0,059 Deloreans.
  • A média de crescimento é de 10.000 servidores/ mês.

Depois disto eu só tenho uma declaração para fazer: MANOOOOOOOOOOOO!!! :O

fonte: http://meiobit.pop.com.br/hardware/conhecaa-o-real-poderio-da-microsoft-jovem-skywalker

Posted: Aug 15 2008, 05:26 PM por spoky | com no comments
Abaixo de: ,
SQL Server 2008 Pronto!!!

 

A Microsoft informou nesta quarta-feira que finalizou o desenvolvimento do novo SQL Server 2008. A versão final do SQL Server 2008 estará disponível em diversas edições, incluindo o SQL Server 2008 Express e o SQL Server 2008 Enterprise.

Outras edições incluem a Standard, Workgroup, Web, Developer e a Compact, que pode ser executada em PCs e dispositivos baseados em Windows Mobile. O SQL Server 2008 estará disponível para assinantes da MSDN e TechNet Plus em 7 de Agosto.

O SQL Server 2008 Express estará disponível para
download gratuito em http://www.microsoft.com/sqlserver no final deste mês.

A Microsoft disponibilizou para download o SQL Server 2008 Compact, que inclui documentos e informações completas sobre o SQL Server 2008.
O download está aqui.

Press Release

fonte: Baboo

 

só repliquei a notícia, estou meio sem tempo, mas esta notícia é de suma importancia para os desenvolvedores antenados!