quarta-feira, 17 de agosto de 2011

Data por extenso

Por vezes surge a necessidade de escrever uma data por extenso,  por exemplo na emissão de documentos como cheques, relatórios, etc.

A procedure abaixo, realiza esta tarefa de forma simples e rápida, permitindo inclusive retornar o dia da semana.


procedure TForm1.Button1Click(Sender: TObject);

var nrdia: Integer;
    diasemana: array[1..7] of String;
    meses: array[1..12] of String;
    dia, mes, ano: Word;
begin


   {Preenchendo o array diasemana com os dias da semana ...}
   diasemana[1]:= 'Domingo';
   diasemana[2]:= 'Segunda-feira';
   diasemana[3]:= 'Terça-feira';
   diasemana[4]:= 'Quarta-feira';
   diasemana[5]:= 'Quinta-feira';
   diasemana[6]:= 'Sexta-feira';
   diasemana[7]:= 'Sábado';


   {Preenchendo o array meses com dos meses do ano ... }
   meses[1]:= 'Janeiro';
   meses[2]:= 'Fevereiro';
   meses[3]:= 'Março';
   meses[4]:= 'Abril';
   meses[5]:= 'Maio';
   meses[6]:= 'Junho';
   meses[7]:= 'Julho';
   meses[8]:= 'Agosto';
   meses[9]:= 'Setembro';
   meses[10]:= 'Outubro';
   meses[11]:= 'Novembro';
   meses[12]:= 'Dezembro';


   {Decodificando a data }
   DecodeDate(DateTimePicker1.Date ,ano,mes,dia);
   nrdia:= DayOfWeek(DATE);


   {Exibindo a data por extenso em uma Edit }
   Edit1.Text:= diasemana[nrdia]+', '+INTTOSTR(dia)+' de '+meses[mes]+' de '+INTTOSTR(ano);
end;

Esta é um a dica super simples, mas bastante funcional:

Abraço e até o próximo post.

segunda-feira, 18 de julho de 2011

Importando arquivo CSV (Texto Delimitado)

A procedure abaixo listada permite ler qualquer arquivo de texto delimitado, quer seja por virgula, ponto e vírgula ou qualquer outro delimitador. Para tanto basta informar corretamente o delimitador na função aninhada MontaValor.
No exemplo abaixo as informações contidas no arquivo texto serão gravadas em dois ClientDataSet.

procedure TForm1.ImportarCSV;
var ArquivoCSV : TextFile;
    Contador, I : Integer;
    Linha : String;


  // Lê Linha e Monta os valores
  function MontaValor : String;
  var ValorMontado : String;
  begin
     ValorMontado := '';
     inc(I);
     While Linha[I] >= ' ' do
     begin
        If Linha[I]= ';' then  // vc pode usar qualquer delimitador ... eu estou usando o ";"
        break;
        ValorMontado := ValorMontado + Linha[I];
        inc(I);
     end;
     result := ValorMontado;
  end;


begin
   // Carregando o arquivo ...
   AssignFile(ArquivoCSV, 'c:\Nome_do_Arquivo');


   try
      Reset(ArquivoCSV);
      Readln(ArquivoCSV, Linha);
      Contador := 1;


      while not Eoln(ArquivoCSV) do
      begin
         if Contador = 1 then  // Primeira Linha do arquivo (Pedido);
         begin
            I := 0;
            cdsPedido.Append;
            cdsPedidoCodigoCliente.AsString  := MontaValor;
            cdsPedidoNomeDoCliente.AsString := MontaValor;
            cdsPedido.Post;
         end
         else
         begin
            // Demais Linhas (Itens do Pedido )
            I := 0;


            cdsItensDoPedido.Append;
            cdsItensDoPedidoCodigoProduto.AsString := MontaValor;
            cdsItensDoPedidoNomeDoProduto.AsString := AnsiUpperCase(MontaValor);
            cdsItensDoPedidoQuantidade.AsFloat     := StrToFloat(MontaValor);
            cdsItensDoPedidoPreco.AsCurrency       := StrToCurr(MontaValor);
            cdsItensDoPedido.Post;
         end;


         Readln(ArquivoCSV, Linha);
         Contador := Contador + 1;
      end;


   finally
      CloseFile(ArquivoCSV);
   end;


end;


Um grande abraço e até o próximo post.

quinta-feira, 24 de março de 2011

Guerra Eletrônica

acompanhando os noticiários sobre os conflitos na Libia, deparei-me com uma matéria que repoduzo parcialmente abaixo. O que me chamou a atenção foi  o uso de uma avião capaz de confundir as defesas inimigas, e mais ainda, a possibilidade de infectar computadores inimigos com virus. 

Só fico pensando no software embarcado neste avião (rs). 



Tudo isso me faz lembrar cenas de ficção cientifica onde campos de força, torpedos fotonicos, armas de raios laser, sabres de luz, e outras tractanas tecnológicas são comuns. 

Será que chegaremos a esse ponto???   leia o texto e tire suas próprias conclusões:





Os Estados Unidos utilizam na ação militar na Líbia a aeronave de "guerra eletrônica" EA-18G Growler, que tem a capacidade de embaralhar as comunicações do inimigo. Serve, por exemplo, para evitar que as defesas antiaéreas da Líbia localizem e derrubem os caças da coalizão composta por EUA, França, Reino Unido e outros países.

Segundo reportagem do site da revista "Aviation Week", especializada em aviação, a operação na Líbia "marca a estreia em combate do EA-18G", que foi recém-incorporado à frota da Marinha dos EUA, em substituição aos EA-6B, em serviço desde 1971.

O avião é uma das apostas dos EUA para evitar perdas de aeronaves em combate. Desde o início dos ataques na Líbia, no sábado (19), apenas um avião da coalizão caiu. Foi um caça F-15, na madrugada desta terça (22) - segundo o governo americano, por problemas mecânicos.

Um porta-voz do Pentágono disse, em entrevista no domingo (20), que os EA-18G foram usados no fim de semana para apoiar um ataque de 15 aviões da coalizão contra forças de Kadhafi que estavam a cerca de 15 km de Benghazi, a principal cidade rebelde. Segundo o porta-voz, esse ataque parou a marcha das tropas de Kadhafi em direção a Benghazi.

A função da aeronave é realizar interferência eletrônica de dispositivos e sistemas eletrônicos – ou "enganar" os radares inimigos. Ela consegue também atrapalhar ataques antiaéreos inimigos. Segundo reportagem da revista Wired, uma futura geração do EA-18G será capaz de introduzir vírus em redes de computador dos países atacados.

Apesar de não conhecer as características específicas do EA-18G Growler, o professor de telecomunicações da Poli-USP Luiz Baccalá explica como funcionam as assim chamadas “contramedidas eletrônicas”. Ele afirma que se trata de uma tecnologia de “processamento de sinais”.

“Qualquer radar de defesa manda pulsos, que batem em um alvo qualquer e, a partir disso, é possível deduzir algumas informações sobre esse alvo, como distância e velocidade”, explica. Uma interferência pode fazer com que as informações sejam entendidas de maneira diferente. “Acaba havendo uma indução do inimigo de entender aquele sinal como se estivesse em uma velocidade diferente, por exemplo”, completa.




Fonte: g1.com


terça-feira, 8 de fevereiro de 2011

Banco de dados com NHibernate






Quando se fala em orientação a objetos e desenvolvimento multi-camadas uma das coisas que mais "pegam" é a camada de persistência, quanto pensamos em desenvolver algo que seja portável para diversos bancos de dados diferentes (Ex. Firebird, MS-SQL, Oracle, Etc). 

Existem diversas alternativas para solucionar esse problema, deste você mesmo construir suas classes de persistência, ou utilizar um dos diversos frame-works existentes. 

Um desses frameworks que tem sido usado largamente pela plataforma Java e também .NET é o Hibernate, que na versão .NET torna-se NHibernate.

Então vamos lá aprender um pouco mais sobre o assunto: 


NHibernate é uma das soluções de Mapeamento objeto-relacional (ORM) para a plataforma de desenvolvimento Microsoft .NET, um framework que fornece o mapeamento do modelo relacional para a orientação a objeto.

O NHibernate é livre e de código aberto e é a versão portada do Java para o Microsoft .NET do Hibernate.
Ele lida com plano de persistência para objetos e de um subjacentes de dados relacionais. Dando uma descrição XML de suas entidades e relacionamentos, NHibernate gera automaticamente códigos SQL para carregar e guardar os objectos. Opcionalmente, você pode descrever o seu mapeamento de metadados com atributos em seu código fonte.

Suporta persistência transparente, o seu objeto classes não têm de seguir um modelo de programação restritiva. Classes persistentes não precisam implementar nenhuma interface ou herdar de uma classe especial base. Isto torna possível desenvolver a lógica empresarial utilizando o plano de objetos .NET (CLR) e Orientação a Objetos.

Originalmente sendo uma parte do Hibernate 2.1, o NHibernate API é muito semelhante ao do Hibernate. Todo o conhecimento e documentação existente é, portanto, diretamente aplicável ao NHibernate. 

Neste link você encontra uma lista do Dialetos SQL Suportados Pelo Hibernate:


Fontes :

quarta-feira, 5 de janeiro de 2011

Um Falso Amigo



Você tem um "amigo" que conheceu quando não sabia programar. Ele fazia você se sentir mais maduro e parecia ajudá-lo a ser aceito pelos programadores. Quando você ficava estressado, sempre podia encontrar certa medida de "alívio" com ele. De fato, você passou a depender dele em muitas situações.

Mas, com o tempo, você descobriu o lado sombrio desse amigo. Ele exige sua companhia o tempo todo e, por causa dele, você não é bem vindo em alguns lugares. E, embora ele talvez tenha feito você se sentir mais maduro, isso se deu à custa de sua falta de experiência. Para completar, ele rouba parte do seu salário.

Ultimamente, você tentou várias vezes acabar com essa amizade, mas ele não deixou. De certa forma, você se tornou escravo dele. Você gostaria de nunca tê-lo conhecido. 

Esse amigo se chama Gambiarra.

Fluxograma para testar a Gambiarra.


Definição de Gambiarra

No sentido de improviso ou improvisação, gambiarra é o próprio ato de constituir uma solução improvisada. 


A Questão Etimológica

Segundo o dicionário Aurélio, gambiarra quer dizer “Lâmpada instalada na extremidade dum comprido cabo elétrico para poder ser utilizada numa área relativamente grande”. Entretanto, no mundo da programação de computadores, gambiarra quer dizer algo feito de improviso que quase sempre dá errado! 

Segundo o dicionário Hoauiss (2001), o termo gambiarra tem etimologia de origem "contraditória e duvidosa". Nos principais dicionários brasileiros, a primeira acepção para o termo gambiarra é "uma ramificação ou extensão de luzes". Apesar do evidente e difundido uso informal do termo no Brasil, visto como uma forma de "improvisação", nenhum destes dicionários inclui qualquer acepção que se refira precisamente a este significado.


Gambiarra em Outros Segmentos


O termo é utilizado em diversas áreas profissionais como informática, programação, eletrônica, engenharia civil, cinema, teatro, artes plásticas, arquitetura, design, geralmente se referindo a soluções improvisadas, adaptações, ajustes, muitas vezes como uma solução que não se utiliza de métodos, plano ou projeto. A gambiarra é muitas vezes entendida de forma pejorativa como algo em condições precárias, provisório, transitório, mal-acabado ou rústico.

Apesar de todas as situações que tendem a forçar o uso de uma gambiarra para a solução rápida de um problema, é preciso que nos esforcemos  ao máximo para não utilizar este expediente. Estude, pesquise e utilize as ferramentas certas ... com certeza as soluções encontradas sem gambiarras permanecem.