Postagens

6 maneiras de fazer a mesma coisa, o que é considerado boas práticas?

As vezes tem tantas maneiras diferentes de fazer o mesmo código que nós ficamos na dúvida quanto a qual maneira usar. O que seria considerado "boa prática" pela comunidade e o que sua equipe entenderia melhor. Suponhamos que você esteja trabalhando dentro de um método de um Domain Service chamado UmDomainServiceChique(objetoDoDominio) que será chamado por uma API. Você tem uma regra de negócio chique para ser verificada que por enquanto chamarei de VerificaMinhaRegraChiqueComplexa(). Você chama UmDomainServiceChique(objetoDoDominio) e caso VerificaMinhaRegraChiqueComplexa() retorne true você vai querer que UmDomainServiceChique faça o que tem que fazer e a api retornar Ok 200, caso contrário você quer que a API responda um erro qualquer, tipo BadRequest, e retornar uma mensagem dizendo que VerificaMinhaRegraChiqueComplexa deu ruim. Eu vejo 6 maneiras de fazer isso, gostaria de saber a opinião de outrs devs sobre qual seria a maneira menos gambiarr...

Forward Declarations

Imagine que você está escrevendo uma biblioteca de funções estáticas em um arquivo .pas e precisa declarar o cabeçalho de uma função para que ela possa ser usada abaixo globalmente, mas você não quer colocar o cabeçalho na seção interface para que a função não seja publicada para todas as units, você quer manter ela em "segredo" na seção de implementation. Você pode dizer: "simples, basta declarar a função inteira acima e pronto." Mas e se essa função precisa usar outra que também será declarada dessa maneira e vice-versa? A solução é foward declaration. Tudo bem, não se usa muito hoje em dia, ainda mais em POO, mas segue abaixo um exemplo de como você pode declarar uma função adiando a sua real implementação "mais para baixo" mesmo na seção implementation: unit uSomaForward; interface function SomaPublica(x, y: Integer): Integer; implementation function SomaPrivada(x,y: Integer): Integer; forward; function SomaPublica(x, y: Integer): Integer; ...

Joque asteroids destruindo elementos de qualquer página web

Nem sei dizer ao certo como encontrei essa página  http://erkie.github.com/ , talvez em algum tweet perdido de alguém. Até saiu matéria sobre o assunto no UOL Tecnologia . Trata-se de um script que, incorporado à uma página qualquer ou adicionado na barra de favoritos do seu browser, cria uma pequena nave, estilo asteroids, para destruir os elementos da página. Dá para destruir tudo, até ficar só o body. Só não dá pra destruir imagens em background via CSS. Se você quiser colocar no seu blog basta colocar um link com esse código no evento onclick: javascript:var s = document.createElement('script');s.type='text/javascript';document.body.appendChild(s);s.src='http://erkie.github.com/asteroids.min.js';void(0); Exemplo O clássico jogo asteroids foi lançado pela ATARI em 1979 nos EUA e em 1981(?) no Brasil. O esquema de inércia parece ter sido inspirado no ainda mais mitológico SpaceWar para PDP-1 criado pelo cientista da computação Steve "Slug"...

Truques usando API do windows

Usando a API do windows podemos executar um programa externo, colocar a janela dele dentro da janela do nosso programa e capturar  texto de uma janela ou widget qualquer desse programa. Qualquer programa feito e usando a api do windows pode ser usado dessa forma. Nossa cobaia oficial será a calculadora do windows, mas onde você ver calculadora pode ler "qualquer programa nativo win32, como msn, bloco de notas etc". O exemplo foi feito em lazarus mas funciona perfeitamente em qualquer versão do Delphi. Tenha a unit Windows no seu uses. procedure TForm1.btCapturarClaculadoraClick(Sender: TObject); var //vamos dar apenas 5 tentativas pois pode ser que a "calculadora" não existe tentativas: integer; HandleCalc, HandleCaixaTexto: HWND; //handles da calculatora TamanhoVisor: integer; TextoVisor: string; begin //executamos a "calculadora" ou qualquer que seja o programa externo ShellExecute(Handle, nil, 'c:\windows\system32\ca...

Lentidão ao acessar máquinas da rede windows

Imagem
Se você enfrentar lentidão ao acessar a rede do windows, por exemplo uma demora fora do normal para listar as máquinas da rede, isso pode ser causado por uma tentativa do windows de mostrar as tarefas agendadas em cada máquina. Como essa função é muito lenta e a maioria das pessoas não usa isso podemos remover isso pelo registro do windows. Altere o registro por sua conta e risco, pois um passo em falso aqui pode ocasionar em mal funcionamento do sistema. Vá no Botão Iniciar --> Executar (ou pressione window + r ) Digite: REGEDIT e pressione OK. No vá abrindo as chaves até encontrar HKEY_LOCAL_MACHINE/Software/Microsoft/Windows/Current Version/Explorer/RemoteComputer/NameSpace Procure pela chave {D6277990-4C6A-11CF-8D87-00AA0060F5BF} e apague-a. Chave a ser apagada Apague apenas esta. Pronto, agora você pode visualizar os micros da rede e pastas compartilhadas mais rapidamente.

Gerador / Validador de CPF e CNPJ no lazarus

Diferentemente do RG um CPF (ou CNPJ) é um identificador único. Um CPF identifica uma pessoa única no Brasil. É uma boa prática associar contas de usuário com seu CPF. Seguro para o usuário, pois diminui o risco de alguém se passar por ele, e seguro para quem presta algum serviço, pois pode identificar um usuário infrator. Lógico que essa não deveria nem de longe ser a única medida de segurança e identificação de um usuário, mas já é um começo. Quando você coloca o CPF como campo obrigatório em um formulário de cadastro no seu sistema torna-se difícil testar esse formulário porque você precisa validar o CPF para ver se é correto, mas também precisa de CPF's válidos e únicos para usar nos seus testes. O que fazer? Pensando nisso coloquei esse gerador de CPF e CNPJ que você pode ver na barra lateral do blog, e fiz esse programinha em lazarus para gerar e/ou validar CPF's e CNPJ's. Você pode copiar esse algoritmo para validar documentos nos seus cadastros. Funcionament...

Cannot implicitly convert type 'string' to 'System.Net.Mail.MailAddress'

Se você recebeu a mensagem acima ao compilar uma aplicação C# saiba que a string "nome@dominio.com.br" não é um e-mail válido, ou pelo menos não podemos afirmar que seja. Ela não é do tipo MailAddress. O tipo MailAddress é um tipo de dado especial para se trabalhar com e-mails que deve ser inicializado por se transformar um string em um e-mail.  Se você tentou fazer: MailMessage m = new MailMessage(); m.From = "nome@dominio.com.br"; Faça: MailMessage m = new MailMessage(); m.From = new System.Net.Mail.MailAddress("nome@dominio.com.br"); //esta é um contrutor de classe que recebe uma string como parâmetro. Essa dica foi tirada do site  http://www.csharptalk.com/    nesse post . Em outra ocasião falaremos mais sobre o tipo  MailAddress. Espero que tenha sido de ajuda ;)

Integrando aplicações Delphi Win32 com páginas WEB

Nesse post mostrarei como integrar aplicações Delphi Win32 com páginas Web. O exemplo será bem simples. Vamos imaginar que temos na web um log de erros unificados para todos os nossos clientes, e todas as instâncias de nosso software que estão sendo executadas. Imaginaremos que cada vez que ocorrer uma exception e um relatório de erro for gerado nós enviaremos esse relatório para a página na web, para que sejam armazenados em um banco de dados e possa ser lido ou analisado depois. No nosso exemplo usaremos um campo memo para simular as mensagens de erro, assim podemos fazer várias mensagens diferentes. Não usaremos banco de dados no nosso exemplo para não adicionar uma complexidade desnecessária a esse tutorial. O que faremos é o seguinte: criaremos uma página php ou asp.net preparada para receber os dados de um formulário com um único campo: mLog. Não faremos uma página web para postar um formulário, faremos apenas a página que RECEBE o formulário. Ao receber uma mensagem de l...