quinta-feira, 30 de junho de 2011

Validação de idade mínima

Um dia desses no trabalho, um amigo me chamou para ver um código ASP que ele encontrou fazendo manutenção. O códgio fazia uma validação de idade mínima do usuário e foi quando eu me deparei com isso:

ano = CInt(Mid(Request.Form("txtDataNascimento"), 7, 4))
 If ano > 1994 Then
  Response.Write "<script language='javascript'>"
  Response.Write "window.open('pop_politica_privacidade.asp', 'politica_privacidade', 'top=50,left=550,width=500,height=550');"
  Response.Write "</script>"
 Else
 .
 .
 .

Depois de ver esse código, tentei tirar minha própria conclusão sobre o indivíduo que o fez. De cara, pensei em 3 possibilidades:
  • O cara fez o código pensando que o mundo fosse acabar naquele ano.
  • Por algum motivo ele esqueceu que o tempo passa.
  • Ele se confundiu com as regras de negócio e achou que a cada ano que passa, o site aceitaria usuários mais velhos.

terça-feira, 15 de fevereiro de 2011

Hello World

    #include < stdlib.h >

    void main () {
        system("echo Hello world!");
    }

domingo, 13 de fevereiro de 2011

Switch-case consistente

Sem um framework web, o desenvolvimento de código baseado em AJAX pode ser um pouco complicado. Principalmente por causa da forma de como a resposta deve ser lida: você deve "ouvir" um "onreadystatechange" e fazer alguma coisa quando o "readyState" é 4.

É claro, a maioria das pessoas lidam com isso usando um simples "readyState == 4". Mas alguns programadores... bem... eles fazem isso:
    onreadystatechange = function(){

        switch(httpReq.readyState){
            case 0: if(httpReq.readyState == 0){
                break;
            }
            case 1: if(httpReq.readyState == 1){
                break;
            }
            case 2: if(httpReq.readyState == 2){
                break;
            }
            case 3: if(httpReq.readyState == 3){
                break;
            }
            case 4: if(httpReq.readyState == 4){
                if(httpReq.status == 200){
                    var val = httpReq.responseText;

                    alert(httpReq.responseText)
                    dataInsert(val);
                    break;
                }
                else{
                    alert("Error "+httpReq.status);
                    break;
                }
            }
        }
    };
Acho que desta forma, garante-se que o switch está funcionando!

Bitwise Operator

Será que o cara que escreveu este código esqueceu que existem operadores Bitwise???
    public bool IsFileReadOnly(int attributes)
    {
        bool retVal = false;

        if (attributes > 63)
        {
            attributes = attributes - 63;
        }

        if (attributes > 32)
        {
            attributes = attributes - 32;
        } 

        if (attributes > 16)
        {
            attributes = attributes - 16;
        }

        if (attributes > 8)
        {
            attributes = attributes - 8;
        }

        if (attributes > 4)
        {
             attributes = attributes - 4;
        }

        if (attributes > 2)
        {
            attributes = attributes - 2;
        }
  
        if (attributes  == 1)
        {
            retVal = true;
        }

        return retVal;
    }

Row Count

A falta que faz um leve conhecimento de SQL:
    static int GetTableRowCount(string tableName) {
        int count = 0;
        SqlCommand cmd = new SqlCommand();
        cmd.Connection = getConn();
        cmd.CommandText = "SELECT * FROM [" + tableName + "]";
        SqlDataReader dr = cmd.ExecuteReader();
        while (dr.Read()) { 
            count += 1; 
        }
        return count;
    }

Fatorial

O que importa é passar no teste!
    def testFactorial
        assert_equal(120, factorial(5))
    end

    def factorial(input)
        case input
            when 5 : 5 * 4 * 3 * 2 * 1
            when 3 : 3 * 2 * 1
            when 0 : 1
            else raise "input cannot be negative"
        end
    end