Assina meu Feed ai!
Google
 


17 outubro 2006

Dica de PHP+LDAP - Can't contact LDAP server

Mais um caso que deu dor de cabeça mas resolvi, veja o código que utilizei para faz um busca no ldap usando php:if (!$con = ldap_connect("localhost", $ldap['cfgl_porta'])){
return false;
}
// Até aqui tudo bem

ldap_set_option($con, LDAP_OPT_PROTOCOL_VERSION, 3);
// Ok aqui tb

ldap_bind($con, $ldap['cfgl_rootdn'], $ldap['cfgl_senha']);
/*
Nesse bendito aqui que deu o erro
Can't contact LDAP server
*/
Esse é aquele tipo de coisa que parece inexplicável, o mesmo código funciona perfeitamente em varias situações, mas quando tentei colocar numa function não funcionou. A dica veio quando achei esse link. Foi só colocar um "ldap://localhost" no lugar de "localhost" na hora de conectar que funcionou. Dessa forma:
ldap_connect("ldap://localhost", $ldap['cfgl_porta'])

Mais uma pra coleção

14 outubro 2006

Tratamento de erros no C# - Exception - Parte 1

Propriedades das Exceptions

Vamos considerar exemplo do artigo anterior sobre . Onde tínhamos suposto um form com dois campos (txtBase e txtAltura) e um botão que calcula a área de um triangulo e cujo código era:
try{ // Tenta executar esse bloco de código
int Base = Int32.Parse(txtBase.Text);
int Altura = Int32.Parse(txtAltura.Text);
int Area = Base * Altura / 2;
MessageBox.Show("Área = " + Area);
}
catch{ // Em caso de erro, executa esse bloco no lugar da mensagem padrão do .NET
MessageBox.Show("Por favor informe corretamente a base e a altura");
}
finally{ // Esse sempre será executado
txtBase.Clear();
txtAltura.Clear();
}

O Bloco catch é executado caso seja disparada uma exceção (Exception), mas cada exceção tem um tipo e propriedades. Entre as propriedades podemos citar a mensagem padrão (Message) da exceção e o trecho do código (Source) que a gerou por exemplo. Para termos acesso a essas informações, precisamos declarar uma variável do tipo Exception na chamada do comando catch dessa forma: catch(Exception erro). Vejamos como isso fica no nosso exemplo:


try{ // Tenta executar esse bloco de código
int Base = Int32.Parse(txtBase.Text);
int Altura = Int32.Parse(txtAltura.Text);
int Area = Base * Altura / 2;
MessageBox.Show("Área = " + Area);
}
catch(Exception erro){ // Declara a variável "erro" que contem as propriedades do erro
MessageBox.Show("Por favor informe corretamente a base e a altura");
MessageBox.Show(erro.Message); // Mostra a mensagem padrão da exceção
MessageBox.Show(erro.Source); // Mostra o trecho do código que gerou a exceção
}
finally{ // Esse sempre será executado
txtBase.Clear();
txtAltura.Clear();
}

No exemplo acima, coloquei mais duas MessageBox's que mostram as propriedades Message e Source do objeto erro (a exception), que contem respectivamente a mensagem de erro padrão da exception e o trecho do código que a gerou. Esse tratamento é genérico, ou seja, independente do tipo da exceção. O mais correto é tratar separadamente os tipos de exceções prováveis de um bloco.

Tipos de Exceções(Exceptions)

Há vários tipos de exceptions de acordo com a forma com que elas são geradas, por exemplo: se em algum momento for feito uma divisão por zero, será gerado uma exceção do tipo DivideByZeroException; se em algum momento for informado a um método um argumento fora do que foi especificado será gerado uma exceção do tipo FormatException, como no nosso exemplo acima caso cliquem no botão sem digitar nada nos campos ou digitem letras.

Segue alguns tipos de exceções:
DivideByZeroException: ocorre quando há uma divisão por zero;
FormatException: Argumento de tipo diferente do especificado no método;
OutOfMemoryException: Alocação de memória, através de new, falha;
NullReferenceException: uma referência nula (null) é utilizada indevidamente;
IndexOutOfRangeException: o índice do é menor do que zero ou fora do limite.

Vejamos como fica o nosso código exemplo tratando um possível FormatException:
try{ // Tenta executar esse bloco de código
int Base = Int32.Parse(txtBase.Text);
int Altura = Int32.Parse(txtAltura.Text);
int Area = Base * Altura / 2;
MessageBox.Show("Área = " + Area);
}
catch(FormatException){ // Não é preciso por um variável
MessageBox.Show("Por favor informe corretamente a base e a altura");
}
catch(Exception erro){ // Declara a variável "erro" que contem as propriedades do erro
MessageBox.Show(erro.Message); // Mostra a mensagem padrão da exceção
MessageBox.Show(erro.Source); // Mostra o trecho do código que gerou a exceção
}
finally{ // Esse sempre será executado
txtBase.Clear();
txtAltura.Clear();
}
No próximo artigo vou abordar como disparar uma exception, como criar sua própria exception e como criar uma mensagem padrão para nova exception! Não deixem de comentar, até lá!

Fontes de consulta:
Desenvolvendo com C# - Fabio Galuppo, Vanclei Matheus, Wallace Santos - Ed. Bookman
site: http://msdn2.microsoft.com/en-us/library/system.aspx

13 outubro 2006

Slackware 11 - Versão mais moderninha!

A atenção dos fãs do Slack está voltada ao lançamento da versão 11 que chegou com algumas novidades. Agora além de vir com o kernel 2.4.33.3 e o 2.6.17.13 o sistema está mais compativel com o 2.6.

O Gnome está cada vez mais distante dos pacotes oficiais do Slack 11. Desta vez até o Abiword foi removido da lista de pacotes por ter se tornado uma aplicação Gnome pura. Vamos aguardar o pessoal do projeto , que está na versão 2.14.3 compativel com slack 10.2, terminar os trabalhos com a versão unstable 2.16.0 que está sendo preparada já com o slack 11. Quem quiser dar uma conferida o link é o seguinte http://gsb.freerock.org/download/.

Outras novidades incluem o KDE 3.5.4 com amarok, XFCE 4.2.3.2, Firefox e Thunderbird 1.5.0.7 e o SeaMonkey no lugar do Mozilla.

Para download, alem das tradicionais imagens iso dos 6 cds, agora também está disponivel uma .

11 outubro 2006

Tratamento de erros no C# - Try, Catch e Finally

Introdução

Qualquer um que já foi um simples usuário de software já se deparou com uma mensagem de erro na sua frente, alguns softwares tem mensagens que só ajudam o desenvolvedor, alguns só o usuário e outros tem mensagens que não ajudão em nada! O tratamento de erros consiste em interceptar esses erros a fim de que o programa não aborte inesperadamente e informe ao usuário o que está errado. Meu objetivo é dar uma base de como tratar esses erros no C# e vou tentar usar uma linguagem simples para quem não é muito habituado com programação.

Usando Try, Catch e Finally

No .NET esses erros são chamados exceções (ou exceptions) e são tratados com as instruções try, catch e finally. Para tratar as exceções definimos um bloco do código que o .NET irá "tentar" (try) executar, se algo der errado ele vai executar o que estiver num bloco especifico(catch) que contem o que fazer numa situação dessas. Nesse bloco normalmente agente dispara alguma mensagem do tipo "O comando não pode ser executado", que alias é um exemplo de mensagem que não ajuda em muita coisa mas serve por enquanto. Também é possível criar um bloco que será executado dando erro ou não (finally).

Resumindo:
try - Define o bloco que contem a execução normal do código;
catch - Define o bloco com o código que será executado caso ocorra alguma exceção no bloco try. Digamos que esse é o tratamento dos erros em si.
finally (opcional) - Define o bloco que será executado independente de haver exceções ou não!

Na prática

Abaixo tem o código de um botão de um form qualquer que tem por objetivo calcular a área de um triangulo, para isso digamos que o form tem dois textbox um chamado txtBase e outro chamado txtAltura para recolher essas informações.

int Base = Int32.Parse(txtBase.Text);
int Altura = Int32.Parse(txtAltura.Text);
int Area = Base * Altura / 2;
MessageBox.Show("Área = " + Area);
O código acima funciona perfeitamente mas não prevê erros. Se por acaso clicarmos no botão com o campo vazio ou letras no lugar de números o programa vai exibir uma mensagem padrão do .NET indicando que ocorreu uma exceção e interrompe o método do botão.

Agora veja o código com tratamento de erro simples. Nesse caso, se ocorrer algo errado ele exibe a mensagem "Por favor informe corretamente a base e a altura" no lugar da mensagem de erro padrão do .NET.
try{ // Tenta executar esse bloco de código
int Base = Int32.Parse(txtBase.Text);
int Altura = Int32.Parse(txtAltura.Text);
int Area = Base * Altura / 2;
MessageBox.Show("Área = " + Area);
}
catch{ // Em caso de erro, executa esse bloco no lugar da mensagem padrão do .NET
MessageBox.Show("Por favor informe corretamente a base e a altura");
}

Exemplo de finally
Vamos imaginar que a gente queira limpar o conteúdo dos textbox mesmo se der erro, basta adicionar um bloco finally com o código correspondente, assim:try{ // Tenta executar esse bloco de código
int Base = Int32.Parse(txtBase.Text);
int Altura = Int32.Parse(txtAltura.Text);
int Area = Base * Altura / 2;
MessageBox.Show("Área = " + Area);
}
catch{ // Em caso de erro, executa esse bloco no lugar da mensagem padrão do .NET
MessageBox.Show("Por favor informe corretamente a base e a altura");
}
finally{ // Esse sempre será executado
txtBase.Clear();
txtAltura.Clear();
}

É isso por enquanto, deixem sua opiniões! ;)

Fonte de consulta: Desenvolvendo com C# - Fabio Galuppo, Vanclei Matheus, Wallace Santos - Ed. Bookman

10 outubro 2006

História do MS-DOS

Beleza pessoal!

Estou testando um novo serviço de compatilhamento de aprensentações que o meu amigo André me indicou . Desse modo aproveito para disponibilizar minha apresentação do Trabalho sobre MS-DOS. Se bem que a parte mais legal foi a parte pratica mas depois incremento ela com umas screens!!

História do MS-DOS





Creative Commons License
Este trabalho está licenciado sobre uma licença
Creative Commons Attribution-NonCommercial-ShareAlike 2.5.