Postagens

Mostrando postagens de setembro, 2010

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

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

Dica rápida sobre cache

Para seu site não ficar "preso" nos caches dos browsers e proxies da vida você deve orienta-los a não armazenar cache. Há varias diretivas a serem colocadas no cabeçalho (head) que podem te ajudar com isso. Por exemplo: <META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE"> <!-- diz que não é para ter cache --> <META HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE"> <!-- faz a mesma coisa que o acima, mas é um comando mais antigo, como cada browser entende uma coisa --> <META HTTP-EQUIV="EXPIRES" CONTENT="0"> <!-- diz que a página expira agora, então se tiver cachê ele será reciclado. --> Para fazer isso do lado do "code behind", se estiver trabalhando com C#, pode usar as linhas de código: Response.CacheControl = "no-cache"; //adiciona o meta cachecontrol = no-cache Response.AddHeader("Pragma", "No-Cache"); //adiciona o meta pragma = no-ca

Linha vermelha do inferno: metro SP

Imagem
Descaso, Desrespeito, Desonestidade ... putaria. É nisso que se resume o transporte coletivo em São Paulo. Todos os dias, TODO O SANTO DIA, desperdiço e encurto um pouco minha vida passando pelo metrô. Situação extremamente insalubre, qualidade de vida ZERO. Não basta a superlotação e a má administração, falta de infra-estrutura, agora de tempos em tempos ocorre uma pane geral que para essa maldita cidade. O metrô para, os ônibus, trens e avenidas superlotam, e a cidade continua entupida até as 13:00. Não precisa ser um gênio pra saber que o metrô é mais do que vital para São Paulo, e menos do que precário. Vou contar o que aconteceu hoje: 7:50 chego à estação penha do metrô, aparentemente normal, até que o metrô para. O trem na plataforma não parte, e começam os avisos nos auto-falantes. 8:00 avisam que o metrô está com maior tempo de parada e velocidade reduzida por causa de usuário (singular) na via na estação sé 8:10 repetem o aviso e continuam repetindo-o sistematicam

Obtendo informações do Browser: javascript

Os scripts abaixo permitem obter as mais diversas informações do browser. Retirado de http://www.csgnetwork.com/directbrowsersnippets.html AppName <script language="JavaScript"><!-- document.write("AppName: " + navigator.appName); //--> </script> AppVersion <script language="JavaScript"><!-- document.write("AppVersion: " + navigator.appVersion); //--> </script> UserAgent <script language="JavaScript"><!-- document.write("UserAgent: " + navigator.userAgent); //--> </script> Platform <script language="JavaScript"><!-- if (navigator.platform) { document.write("Platform: " + navigator.platform); } //--> </script> JavaScriptVersion <script language="JavaScript"><!-- JavaScriptVersion = 10; //--> </script> <script language="JavaScript1.1&

Capturar IP do usuario no Browser: local e remoto

Saber qual o tipo de browser de nossos clientes/usuários e o seu comportamento é de grande valia. Você precisará disso quando: Prestar suporte ao usuário e ele não souber dizer informações técnicas sobre o browser Logar informações sobre browsers, capacidades e informações Logar informações de parceiros (referrers), domínios e logins Se você criar um site de conteudo restrito poderá detectar logins simultaneos em máquinas ou browsers diferentes Levantamentos estatísticos utilizando as informações logadas acima Imagine que o login é pessoal e intransferível (lógico neh?) mas que você criou um mecanismo que detecta logins simultâneos e derruba a seção do usuário. Se um usuário se logar de uma rede corporativa, lan-house ou coisa do gênero o IP do client vai ser sempre o mesmo: o IP do proxy ou gateway de acesso a internet. Como saber se foi um usuário diferente que logou com o mesmo login em outra máquina se os IP's são iguais? Pode ter sido o mesmo usuário que abriu dois brow

Quebras de linha no Delphi 2010

Imagem
Alguns tem me perguntado sobre quebra de linha no Delphi 2010, o que está dando de errado. Antes de falar sobre isso, precisamos saber como funciona a quebra de linha. No sistema ASCII (caracteres de um byte) a quebra de linha nos sistemas gnu linux / unix é feita somente com o caracter #10 (ou \n line feed  - LF para os íntimos). Já para sistemas windows a quebra é feita com #13#10 ou CR\LF. Há ainda mais um agravante: assim como no GNU linux e unix o #10 sozinho é considerado como quebra de linha, há também alguns sistemas onde o #13 sozinho é considerado como quebra de linha. Então, alguns editores, como o  notepad++  interpretam tanto o #10 isolado como o #13 isolado como quebras de linha, bem como a dupla #13#10, para atender a todas as demandas. O #13 ou \r é chamado de Carriage Return (CR) e o #10 ou \n é chamado de Line Feed (LF). Nas impressoras matriciais e maquinas de escrever elétricas antigas, para se pular uma linha e se escrever na linha de baixo, eram necessario

Abrindo e fechando uma página web com o Delphi

É possível executar um browser com WinExec ou ShellExecute para abrir uma página web, mas o que eu vou mostrar aqui é como usar um objeto OLE para criar uma instância de um IE, abrindo ele na página desejada e depois fechando. Isso pode ser aplicado, por exemplo, em totens ou lan houses onde o acesso ao browser e suas funções, ou até mesmo o acesso a páginas é restrito. Para isso vamos usar um vetor de 10 posições de variant, mas você pode usar uma lista ou pilha, fique a vontade para usar a imaginação. Esse vetor será responsável por controlar as instâncias do IE abertas e executar operações sobre elas. Você pode fechar na ordem que foi aberto, fechar pelo índice ou fechar todas varrendo o vetor, quando esgotar o tempo do usuário, por exemplo. Coloque em um formulário um edit (para digitação da url) e dois botões. O código ficará assim: unit abreFecha; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Comobj; ty

Primeiras impressões com Python

O Python é uma linguagem interpretada, dinâmica e multi-plataforma. Roda em qualquer máquina que contenha o seu runtime. É possível "compilar" um programa em python  de modo que ele se transforme numa espécie de bytecodes, de tamanho menor, interpretado mais rapidamente pelo runtime. Nesses aspectos ele é semelhante a linguagens como Java, PHP e Ruby. Você pode usar a GTK ou a API do windows para gerar programas desktop com o python, onde é possível ter janelas, botões etc. Mas o python é muito forte também ( e me arrisco a dizer : principalmente) na web. Web Servers como o Apache tem módulos que interpretam python, e ele pode ser assim usado como linguagem para páginas dinâmicas. Há frameworks que facilitam essa tarefa, como o Django , que contém uma série de classes para se criar sites dinâmicos e bem elaborados. Há inclusive redes sociais feitas com essa dupla. Vou começar aqui um pequeno tutorial de Python e falar das minhas primeiras impressões com a linguagem. Uma

Botão Add To Any

Imagem
Em matéria de integração com mídias sociais o botão Add To Any se destaca pela variedade de serviços e pelo aspecto. O botão é realmente bonito. Para usar no blogspot não há tantas opções de customização, e o código é um pouco diferente do código para colocar num site estático, pois tem aqueles comandos que pegam variáveis do próprio blogspot. Mas existe um mecanismo no site que adiciona o botão diretamente no seu blog, como um widget. Obter o Botão Para obter o widget clique no link widget ao lado do seu cms preferido. O código é este: <!-- AddToAny Share/Save BEGIN --> <br/><a class='a2a_dd' href='http://www.addtoany.com/share_save'><img alt='Share/Bookmark' border='0' src='http://static.addtoany.com/buttons/share_save_171_16.png' width='171' height='16'/></a><p class='a2a_linkname_escape' style='display:none'><data:post.title/></p><script type='te

Solidão

Imagem
Quando você se sentir triste...   Sem amigos..., E desejar a presença de alguém... Não perca tempo...    Faça uma baldeação na Sé! Mano ,  na Estação de metrô da SÉ não há solidão  que resista ...

Criando um cronômetro no Delphi

Imagem
Esse é um post básico, destinado a quem está iniciando a programação em Delphi ou Lazarus. Vamos criar um cronômetro. Um cronômetro deve marcar horas, minutos, segundos e milésimos de segundos. Deve ter um botão para iniciar, um para parar e outro para zerar. Crie a form preta com um label vermelho e três botões, e deixe-a como a figura acima. Coloque também um TTimer e deixe a propriedade interval em 1 milissegundo e a propriedade enabled como false, para ele começar desligado. O DFM/LFM ficará assim: object frmvisor: Tfrmvisor Left = 405 Top = 209 BorderIcons = [biSystemMenu, biMinimize] BorderStyle = bsDialog Caption = 'Cron'#244'metro' ClientHeight = 102 ClientWidth = 314 Color = clBlack Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = 'MS Sans Serif' Font.Style = [] OldCreateOrder = False SnapBuffer = 1 OnCreate = FormCreate PixelsPerInch = 96 TextHeight = 13 object lbTempo:

Tradutores Online

Imagem
O André Rubio fez um excelente post em seu blog sobre como  adicionar um plugin/gadget para tradução automática do seu site/blog. O André explicou sobre os botões Convey This e Translate This. Eu vou falar sobre o google translator e o WordLingo. Você pode blogar e testar em trechos de livros em domínio público para ter uma idéia da precisão da tradução. Porém já adianto: além das traduções serem bastante imprecisas as traduções acontecem "client-side" e não "server-side", ou seja, as traduções são feitas diretamente no seu navegador e não no servidor. Isso significa que  os robôs das ferramentas de busca (google, bing, yahoo etc) não  poderão achar sua página nas linguas traduzidas. Apenas na lingua em que você postar. Por isso, se quiser que seu blog atinja um público - alvo que fale inglês e espanhol você deve postar em inglês e espanhol, nem que seja em outro blog/cms e linque os dois depois. Google Translator Primeiro vamos falar do Google Translator

Atualize seu Navegador

Imagem
Amigos blogueiros, developers, escritores e interneteiros: o Firefox está na versão 3.6.9, com a versão 4 beta saindo do forno, e o Chrome está firme e forte na versão 6. Não existe motivo para você arriscar ser invadido ou roubado por causa de um navegador desatualizado. E para você blogueiro, Web Developer ou Web Master, está na  hora de fazer sites compliantes com os padrões internacionais do W3C e tentar forçar o usuário a abandonar os navegadores velhos. Para isso apresento-lhes a barra e selo da campanha "Atualize Seu Navegador". O código se divide entre um selinho e um script que gera uma barrinha de alerta, como mostrado a seguir: Barrinha <!-- barrinha de campanha atualize seu navegador --> <script type="text/javascript" src="http://updateyourbrowser.net/asn.js"> </script> <!-- fim barrinha --> Selinho <!-- banner de campanha atualize seu navegador --> <a href="http://updateyourbrowser.net/" t