Pesquisar no Programero

terça-feira, 29 de abril de 2008

Geoprocessamento

Vários equipamentos e serviços são foco de diversas reportagens (seja na mídia escrita ou mesmo na internet) levando como tema equipamentos com GPS, disponível em vários modelos de celular ou encontrados em aparelhos bem acessíveis e serviços como o googlemaps, quem nunca foi lá e digitou o endereço da própria casa pra ver se ele achava direitinho? Bom todos os elementos citados anteriormente até pouco tempo estavam disponíveis para poucos e hoje qualquer um com internet pode, por exemplo, digitar um endereço ou mesmo colocar coordenadas de latitude e longitude para encontrar um determinado ponto. Ótimo, mas que vantagem Maria leva com tudo isso, você deve estar se perguntado, bom a menos que você queira rastrear alguém, a titulo de investigação, realmente para uma pessoa normal talvez não tenha utilidade, mas se pensarmos um pouco, podemos vislumbrar, muitas aplicações para essa tecnologia, poderíamos verificar exatamente o trajeto que o motorista de certo veiculo esta fazendo, poderíamos, com base em um painel traçar novas rotas de acordo com a situação, por exemplo desviar um veiculo de uma rota com transito intenso, ou uma rota interditada por qualquer motivo que seja. Bom, muitos de vocês já imaginaram ou estão imaginando neste exato momento outras aplicações para essas tecnologias em diversos ramos de negocio, é por isso que o termo geoprocessamento anda tão em alta ultimamente.

Algumas definições sobre Geoprocessamento
1 - O geoprocessamento é o processamento informatizado de dados georreferenciados. Utiliza programas de computador que permitem o uso de informações cartografia|cartográficas (mapas, cartas topográficas e plantas) e informações a que se possa associar coordenadas desses mapas, cartas ou plantas. Pode ser utilizado para diversas aplicações.
Outra definição seria:
É um conjunto de conceitos, métodos e técnicas erigido em torno do processamento eletrônico de dados que opera sobre registros de ocorrência georreferenciados, analisando suas características e relações geotopológicas para produzir informação ambiental.
2 - Geoprocessamento é um conjunto de tecnologias direcionadas para a coleta e o tratamento das informações espaciais. Ele disponibiliza ferramentas, recursos e dados para que analistas possam determinar a evolução temporal e espacial de um determinado fenômeno geográfico e sua inter-relação com outros. Sendo uma tecnologia interdisciplinar, qualquer especialista pode se valer dele em benefício de seu trabalho ou pesquisa.
3 - Geoprocessamento compreende as atividades de aquisição, tratamento e análise de dados sobre a Terra. Isto envolve desde um conjunto de tecnologias para a coleta de imagens da superfície do planeta, conhecido como Sensoriamento Remoto, até o processamento e análise desses dados, em forma de mapas digitais, usando-se os Sistemas de Informação Geográficos, um ambiente computacional orientado à análise e interpretação de diversos fatos e fenômenos relacionados à Terra. De caráter transdisciplinar, esse poderoso conjunto instrumental se aplica a diversos campos profissionais, tornando-se imprescindível para projetos que lidam com questões voltadas à organização, planejamento e gestão do espaço geográfico ou que envolvam análises espaciais em seus estudos.
Outros termos importantes e muito utilizados nesse contexto:
Rota feita com ajuda do google maps
Nokia 6110 com GPS Integrado

PSP com acessório GPS

Bom para inicio de conversa até que não está tão mal, já conhecemos alguns termos, acessórios e aplicações, no próximo post mostraremos componentes para a ferramente delphi capazes de carregar mapas georeferenciados, as aplicações ficam por conta da imaginação do desenvolvedor, abraços e até a próxima...

Fonte
GIS Brasil

gis.com

MundoGeo

Xineses e Ciganos Stuff




sexta-feira, 25 de abril de 2008

Fiscalização acirrada !

O governo britânico vem se esforçando para criar medidas de fiscalização quanto à entrada no país, seja pelo medo da entrada de terroristas ou mesmo apenas para controlar a imigração ilegal, devido a isso diversos métodos tecnológicos vem sendo utilizados como as ferramentas biométricas. Um exemplo é o sistema de reconhecimento de íris (Íris Recognition Immigrating (IRIS)), que avalia o padrão da íris e o compara com a informação no passaporte.
No segundo semestre desse ano entrará em funcionamento um novo sistema nos aeroportos, o reconhecimento de face ou scan facial, os passageiros que possuírem os novos passaportes com chips que contem informações biométricas do portador já irão se utilizar desse sistema.
Existem muitas críticas a respeito da adoção dos métodos biométricos, já que antes mesmo do lançamento dos passaportes com dados biométricos especialistas afirmavam que havia falhas em 10% dos casos, uma margem muito grande parar qualquer sistema aceitável, o fato é que técnicas isoladas talvez não resultem como o esperado e sim uma mescla das soluções conhecidas se aproxime de algo realmente satisfatório.




Acima temos a imagem de uma maquina de reconhecimento de íris, seguida de uma íris sendo escaneada e por ultimo uma maquina de reconhecimento facial, para os interessados em se aprofundar mais nas técnicas e métodos de biometria eu recomendo o site howstuffworks que apresenta vários métodos alem dos já mencionados aqui.

terça-feira, 22 de abril de 2008

Funções de Data e Hora (Delphi)

É muito comum nos depararmos no dia a dia com a necessidade de manipular datas e horas, seja para um calculo de permanência, dias de atraso enfim, é praticamente escapar de alguma situação que necessite desse tipo de controle.
Assim como a necessidade e se utilizar algum recurso para manipular as datas e horas de alguma maneira e freqüente, as duvidas de como o faze-lo também é, basta um breve olhar em qualquer fórum especializado e lá está, alguma duvida relacionada, por isso decidi falar um pouco sobre uma unit muito poderosa chamada DateUtils para a manipulação de data e hora, com um grande numero de métodos e classes que facilitam a vida de qualquer um.


Alguns exemplos:
  • CompareDate(constA, B: TDateTime): TValueRelationship;
Compara apenas a data de dois valores (do tipo TDateTime) retornando:
LessThanValue O primeiro valor é menor que o segundo
EqualsValue Os valores são iguais
GreaterThanValue O primeiro valor é maior que o segundo
  • CompareDateTime(const A, B: TDateTime): TValueRelationship;
O mesmo que o item anterior levando em consideração o horário também.
  • CompareTime(const A, B: TDateTime): TValueRelationship;
O mesmo que o item anterior levando em consideração apenas o horário.
  • IncDay(const AValue: TDateTime; const ANumberOfDays: Integer = 1): TDateTime;
Incrementa uma data de acordo com a quantidade de dias especificada.
  • IsPM(const AValue: TDateTime): Boolean;
Indica se a porção hora da data ocorre após o meio-dia.
  • DaySpan(const ANow, AThen: TDateTime): Double;
Retorna o numero de dias entre duas datas levando em consideração também as horas
  • DaysBetween(const ANow, AThen: TDateTime): Integer;
Retorna o número de dias entre duas datas sem levar em consideração as horas.
  • DateOf(const AValue: TDateTime): TDateTime;
Converte data e hora para apenas data.
  • DayOfTheMonth(const AValue: TDateTime): Word
Retorna o dia do mês (1 a 31) de uma data.
  • DayOfTheYear(const AValue: TDateTime): Word;
Retorna o numero de dias entre uma data e o dia 31 de dezembro do ano anterior
  • DayOfTheWeek(const AValue: TDateTime): Word;
Retorna o dia da semana de uma data, onde 1 representa segunda e 7 domingo
  • HourOf(const AValue: TDateTime): Word;
Retorna a quantidade de horas de uma data, variando de 0 a 23.
  • TimeOf(const AValue: TDateTime): TDateTime;
Retorna a porção de tempo de uma data.
  • WithinPastDays(const ANow, AThen: TDateTime; const ADays: Integer): Boolean;
Indica quando duas datas possuem o mesmo numero de dias.
  • WithinPastYears(const ANow, AThen: TDateTime; const AYears: Integer): Boolean;
Indica quando duas datas possuem o mesmo numero de anos.
  • YearsBetween(const ANow, AThen: TDateTime): Integer;
Retorna o numero aproximado de anos entre duas datas.

Bom caso haja alguma dúvida quanto a utilização das funções é só postar, abraços e até a próxima...

segunda-feira, 21 de abril de 2008

E você ? Ficando rico Também ?

Em uma renomada revista sobre tecnologia uma das matérias em especial me chamou atenção, seu conteúdo diz respeito a pessoas que deixaram seus trabalhos de carteira assinada (e, diga-se de passagem, muito bem remunerados), para se dedicarem seus blogs. Sim, eu não escrevi errado e você não está vendo coisas, já é de conhecimento de várias pessoas os inúmeros serviços de publicidade que se encontra por ai, quem nunca visitou o site ou mesmo um blog de um amigo e se deparou com uma propaganda ou algo do gênero, sim amigos, o dinheiro gerado com essa publicidade tornou possível essa reviravolta na vida de certos indivíduos que estão ganhando até mais do que antes.

Bom, como nem tudo na vida é um mar de rosas uma decisão tão drástica assim vem sustentada por uma base de estudo e testes quanto à sustentabilidade do negócio, já que uma pessoa normal não largaria um emprego de R$ 9000,00 por mês para publicar num blog e correr o risco de ter que pedir dinheiro emprestado para o sogro para pagar a luz. Pois bem para os senhores que agora estão a ler esse post muito cuidado, nada de afobação esse tipo de decisão leva alguns anos.

Pra encerrar gostaria de deixar aqui alguns números:

Visitantes únicos/mês Renda Mensal
234 mil--------R$ 9000
30 mil----------R$ 6000
1,7 milhões---R$ 21000

Programação Orientada a Objetos (POO)

O termo Programação Orientada a Objetos foi criado por Alan Kay, autor da linguagem de programação Smalltalk. Mas mesmo antes da criação do Smalltalk, algumas das idéias da POO já eram aplicadas, sendo que a primeira linguagem a realmente utilizar estas idéias foi a linguagem Simula 67, criada por Ole Johan Dahl e Kristen Nygaard em 1967. Note que este paradigma de programação já é bastante antigo, mas só agora vem sendo aceito realmente nas grandes empresas de desenvolvimento de Software. Alguns exemplos de linguagens modernas utilizadas por grandes empresas em todo o mundo que adotaram essas idéias: Java, C#, C++, Object Pascal (Delphi), Ruby, Python, Lisp [2].
A Programação Orientada a Objetos é um paradigma computacional que organiza o desenvolvimento de um software em coleções de objetos, incorporando comportamento e estrutura próprios. Enquanto no desenvolvimento convencional estruturado temos um fluxo linear, onde uma função ou programa principal invoca funções auxiliares para executar as tarefas necessárias, na programação POO existe um conjunto de classes (pré-definidas ou não) que possuem atributos e métodos e que são instanciadas em objetos durante a execução do programa.
Um programa desenvolvido com uma linguagem POO manipula estruturas de dados através dos objetos da mesma forma que um programa em linguagem tradicional utiliza variáveis [1].
Segue abaixo os conceitos fundamentais sobre POO, retirados da Wikipédia [3]:

Conceitos fundamentais
· Classe representa um conjunto de objetos com características afins. Uma classe define o comportamento dos objetos, através de métodos, e quais estados ele é capaz de manter, através de atributos. Exemplo de classe: Os seres humanos.
· Objeto é uma instância de uma classe. Um objeto é capaz de armazenar estado através de seus atributos e reagir a mensagens enviadas a ele, assim como se relacionar e enviar mensagens a outros objetos. Exemplo de objetos da classe Humanos: João, José, Maria.
· Atributos são características de um objeto. Basicamente a estrutura de dados que vai representar a classe. Exemplos: Funcionário: nome, endereço, telefone, CPF, ....; Carro: nome, marca, ano, cor, ...; Livro: autor, editora, ano. Por sua vez, os atributos possuem valores. Por exemplo, o atributo cor pode conter o valor azul.
· Métodos definem as habilidades dos objetos. Bidu é uma instância da classe Cachorro, portanto tem habilidade para latir, implementada através do método deUmLatido(). Um método em uma classe é apenas uma definição. A ação só ocorre quando o método é invocado através do objeto, no caso Bidu. Dentro do programa, a utilização de um método deve afetar apenas um objeto em particular; Todos os cachorros podem latir, mas você quer que apenas Bidu dê o latido. Normalmente, uma classe possui diversos métodos, que no caso da classe Cachorro poderiam ser sente(), coma() e morda().
· Mensagem é uma chamada a um objeto para invocar um de seus métodos, ativando um comportamento descrito por sua classe. Também pode ser direcionada diretamente a uma classe (através de uma invocação a um método estático).
· Sobrecarga é a utilização do mesmo nome para símbolos ou métodos com operações ou funcionalidades distintas. Geralmente diferenciam-se os métodos pela sua assinatura.
· Herança (ou generalização) é o mecanismo pelo qual uma classe (sub-classe) pode estender outra classe (super-classe), aproveitando seus comportamentos (métodos) e estados possíveis (atributos). Há Herança múltipla quando uma sub-classe possui mais de uma super-classe. Essa relação é normalmente chamada de relação "é um". Um exemplo de herança: Mamífero é super-classe de Humano. Ou seja, um Humano é um mamífero.
· Associação é o mecanismo pelo qual um objeto utiliza os recursos de outro. Pode tratar-se de uma associação simples "usa um" ou de um acoplamento "parte de". Por exemplo: Um humano usa um telefone. A tecla "1" é parte de um telefone.
· Encapsulamento consiste na separação de aspectos internos e externos de um objeto. Este mecanismo é utilizado amplamente para impedir o acesso direto ao estado de um objeto (seus atributos), disponibilizando externamente apenas os métodos que alteram estes estados. Exemplo: você não precisa conhecer os detalhes dos circuitos de um telefone para utilizá-lo. A carcaça do telefone encapsula esses detalhes, provendo a você uma interface mais amigável (os botões, o monofone e os sinais de tom).
· Abstração é a habilidade de concentrar nos aspectos essenciais de um contexto qualquer, ignorando características menos importantes ou acidentais. Em modelagem orientada a objetos, uma classe é uma abstração de entidades existentes no domínio do sistema de software.
· Polimorfismo é o princípio pelo qual duas ou mais classes derivadas de uma mesma superclasse podem invocar métodos que têm a mesma assinatura (lista de parâmetros e retorno) mas comportamentos distintos, especializados para cada classe derivada, usando para tanto uma referência a um objeto do tipo da superclasse. A decisão sobre qual o método que deve ser selecionado, de acordo com o tipo da classe derivada, é tomada em tempo de execução, através do mecanismo de ligação tardia. No caso de polimorfismo, é necessário que os métodos tenham exatamente a mesma identificação, sendo utilizado o mecanismo de redefinição de métodos. Esse mecanismo de redefinição não deve ser confundido com o mecanismo de sobrecarga de métodos.
· Interface é um contrato entre a classe e o mundo externo. Quando uma classe implementa uma interface, ela está comprometida a fornecer o comportamento publicado pela interface.
· Pacotes são referências para organização lógica de classes e interfaces.

Um pouco sobre esse abrangente assunto foi tratado aqui, para finalizar gostaria de recomendar um exemplo prático em Java, "cadastro de animais" encontrado em Terramel [4], bem simples e didático, estarei disponibilizando um arquivo "zipado" com alguns dos materiais utilizados nesse artigo.

Fonte:

[1] DCA-FEEC-UNICAMP
[2] Guia do Hardware
[3] Wikipedia
[4] Terramel

Videos sobre Delphi

Seguem alguns videos do youtube que podem ser uteis:
Conhecendo o Delphi

Criando a primeira aplicação


Aprender a criar menus em Delphi


Criando uma barra de status no Delphi


Ligando um formulario Delphi com banco de dados


Criando uma aplicação de cadastro


Calculadora em Delphi


Ruby

Olá amigos, apesar de nunca ter trabalhado com esta linguagem decidi escrever um artigo sobre ela, meu grande amigo Morpheu sugeriu o assunto, então vamos lá.
Todos aqueles que um dia se aventuraram em buscas por uma linguagem de programação voltada para internet com certeza se deparou com amantes de Ruby, eu mesmo em visitas a fóruns li varias vezes sobre indicações exaltando suas qualidades, sendo assim veremos a seguir um pouco sobre ela.

  • Iniciando...

Em 1994 a primeira versão alpha do Ruby foi lançada, desenvolvida por apenas uma pessoa, o japonês Yukihiro Matsumoto (Matz), recebeu grande colaboração de comunidades da linguagem que contribuiram com fixes e patches.
David Heinemeier Hansson adotou o Ruby como uma de suas linguagens preferidas e escreveu um dos mais completos livros sobre a linguagem, o Programming Ruby, surgia então uma das primeiras fontes sobre a linguagem em inglês o que proporcionou sua expansão no ocidente.


  • O Ruby


Inicialmente, Matz estudou outras linguagens buscando encontrar uma sintaxe ideal. Recordando a sua busca, disse, “Eu queria uma linguagem interpretada que fosse mais poderosa que o Perl e mais orientada aos objetos do que o Python" [3].
O Ruby é muito flexível, permitindo que seus usuários alterem partes essenciais, como por exemplo a alteração de operadores aritméticos da própria linguagem, como mudar o sinal de "+" para "soma".
Nele tudo é um objeto, não existem tipos primitivos, mas sim todos tipos são classes, assim como todas variáveis são objetos. Por exemplo, um conjunto de caracteres é uma instância da classe String, um inteiro é da Fixnum e uma matriz é Array.
Outro ponto importante a respeito dessa linguagem é o fato dela ser livre de custos, pode-se utilizar, copiar, modificar e distribuir.
  • Características [1]

Para manter a praticidade, a linguagem possui algumas características interessantes:

  • A sintaxe é enxuta, quase não havendo necessidade de colchetes e outros caracteres.
  • Todas as variáveis são objetos, onde até os "tipos primitivos" (tais como inteiro, real, entre outros) são classes.
  • Estão disponíveis diversos métodos de geração de código em tempo real, como os "attribute accessors".
  • Através do Ruby Gems, é possível instalar e atualizar bibliotecas com uma linha de comando, de maneira similar ao APT do Debian Linux.
  • Code blocks (blocos de código), ajudam o programador a passar um trecho de instruções para um método. A idéia é semelhante aos "callbacks" do Java, mas de uma forma extremamente simples e bem implementada.
  • Mixins, uma forma de emular a herança múltipla, sem cair nos seus problemas.
  • Tipagem dinâmica, mas forte. Isso significa que todas as variáveis devem ter um tipo (fazer parte de uma classe), mas a classe pode ser alterada dinamicamente.

Ruby está disponível para diversas plataformas, como Windows, .NET, Linux, Solaris e Mac OS X, além de também ser executável em cima da máquina virtual do Java (através do JRuby).



  • Finalizando


Documentação, bibliotecas, tutoriais e muitos outros itens podem ser encontrados no site Ruby A Programmer's Best Friend.
Estamos disponibilizando para download um tutorial rápido, retirado do site mencionado anteriormente,chamado Ruby em Vinte Minutos além do próprio Ruby (versão 1.8.4.0).

Fonte:

[1] Wikipedia
[2] Ruby on br
[3] Ruby A Programmer's Best Friend

Fazendo e Utilizando Pacotes (Delphi)


  • Introdução
Pacotes são utilizados para modularização e distribuição de objetos. São mais fáceis de ser implementados, já que utilizam a codificação padrão da linguagem Delphi, logo são DLLs nativas.
Oferecem como vantagem redução do tamanho do executável, distribuição do código, facilidade de manutenção, dentre outras.



  • Exemplo

  • Primeiro vamos criar o projeto que será utilizado pelo pacote:

    Crie uma nova aplicação, adicionando um label (Nome), um edit e um botão (Confirmar), salve a aplicação com o nome de "Unit_Tpkt.pas" e "Prj_Tpkt.dpr" (o nome do Form continua como padrão), feito isso compile e feche a aplicação.
    * (Note que nosso programa não possui uma finalidade, estamos apenas
    demonstrando a criação de um pacote)


      • Agora vamos criar o pacote com base no programa criado anteriormente:
        Navegue até "File -> New -> Other -> e na aba New escolha Package, na janela que se abriu clique no botão "add", navegue até a pasta onde foi salvo o programa que criamos e selecione "Unit_Tpkt.pas", salve o pacote com o nome de "Package_Tpkt.dpk", clique em compilar, se ocorrer algum erro confirme, após a compilação procure um arquivo chamado "Package_Tpkt.dcp"
        (\arquivos de programas\borland\delphi6\bin ou \arquivos de
        programas\borland\delphi7\Projects\Bpl) e coloque na pasta onde estão os arquivos fontes do pacote.

        • Utilizando o pacote:
        Crie um nova aplicação e insira um botão no formulário, feito isso, navegue até Project -> Options, na janela que se abrir escolha a aba Packages, em runtime packages clique no botão "add" e selecione o arquivo "Package_Tpkt.dcp", feito isso adicione o seguinte código:-abaixo de implementation escreva:
        uses Unit_Tpkt;-no evento onclick do botão coloque o seguinte código:
        Form1:= Tform1.create(application);
        try
        Form1.showmodal;
        finally
        freeandnil(Form1);
        end;
        * (Perceba que no código acima estamos chamando o "Form1", logo, o formulário do programa
        atual deve possuir outro nome)
        • Finalizando
        No exemplo acima utilizamos pacotes de forma estática, e podemos ter uma idéia da utilidade em se implementar pacotes, tornando nossas aplicações mais limpas e uniformes.
        Um exemplo sobre pacotes pode ser baixado aqui.

        Funções de Data e Hora (MySQL)

        Na documentação do MySQL pode ser encontrado um bom material sobre essas funções, colocarei a seguir algumas das que eu considero mais importantes:

        • Time_To_Sec(Tempo)
        Converte o argumento tempo em segundos
        Ex.:
        SELECT TIME_TO_SEC(NOW())
        --
        51349

        • NOW(), SYSDATE()

        Retornam data e hora atual
        eX.:
        SELECT NOW(), SYSDATE()
        --
        2007-12-17 17:29:21
        2007-12-17 17:29:21


        • STR_TO_DATE(string, formato)

        Converte a string em determinado formato e retorna um valor DATETIME
        Ex.:
        SELECT STR_TO_DATE('03.10.2007 09.20', '%d.%m.%Y %H.%i.:%s');
        --
        2007-10-03 09:20:00


        Aplicação MDI no Java

        Aplicações MDI (Multiple Dcument Interface ou Interface de Múltiplos documentos) são aquelas onde temos uma janela principal (ou pai) que gerencia várias outras (filhas), tornando possível trabalhar com mais de um documento de uma única vez, como exemplo temos editores de textos, planilhas, programas de correio eletrônico, enfim, muitas aplicações do nosso cotidiano se utilizam dessa tecnologia.
        A seguir temos um exemplo, retirado do livro Java Como Programar (Deitel), que mostra o uso de duas classes do Swing (JDesktopPane e JInternalFrame) que fornecem suporte ao MDI.

        // pacotes de núcleo do java
        import java.awt.*;
        import java.awt.event.*;

        // pacotes de extensão do java
        import javax.swing.*;

        /**
        *
        * @author du
        */

        public class Main extends JFrame{
        private JDesktopPane theDesktop;

        //configura a GUI
        public Main()
        {
        super("Usando o JDesktopPane !!! VIVA !!!");

        //cria uma barra de menus, um menu e itens de menu
        JMenuBar bar = new JMenuBar();
        JMenu addMenu = new JMenu("Adicionar");
        JMenuItem newFrame = new JMenuItem("Frame Interno");

        addMenu.add( newFrame );
        bar.add( addMenu );

        setJMenuBar( bar );

        //configura a área de trabalho
        theDesktop = new JDesktopPane();
        getContentPane().add( theDesktop );

        //configura ouvinte para o item de menu newFrame
        newFrame.addActionListener(

        //classe interna anonima para tratar eventos de item de menu
        new ActionListener(){
        //exibe nova janela interna
        public void actionPerformed( ActionEvent event ){
        //cria frame interna
        JInternalFrame frame = new JInternalFrame(
        "Frame Interno", true, true, true, true);

        //anexa painel ao painel de conteudo da frame interna
        Container container = frame.getContentPane();
        MyJPanel panel = new MyJPanel();
        container.add( panel, BorderLayout.CENTER);

        //configura o tamanho da frame interna com o tamenho de seu conteudo

        frame.pack();

        //anexa a frame interna a area de trabalho e a exibe
        theDesktop.add( frame );
        frame.setVisible( true );

        }

        }//fim da classe interna anonima
        );// fim da chamada para addActionListener

        setSize( 600, 440 );
        setVisible( true );
        }// fim do contrutor


        public static void main(String args[]) {

        Main application = new Main();

        application.setDefaultCloseOperation(
        JFrame.EXIT_ON_CLOSE);
        }

        }// fim da classe DesktopTest