sexta-feira, 27 de junho de 2014

Desenvolva uma aplicação com Big Data.

Olá pessoal, retomando o assunto Big data, então já foi falado de modo mais explicativo o uso, mas não de como desenvolver aplicações usando Big Data, verificando o site da IBM que naturalmente é líder quando falamos em grandes servidores, existe um breve tutorial para que nós caros mortais possamos desenvolver aplicações voltadas a esses assuntos, lembrando que Big Data não é restrito somente a dados e informações
mas chega ao foco de multimídia como o You tube, redes multimídia é um assunto um pouco longo, talvez
pincele um poco sobre esse tema antecipando a disciplina de Redes II, porem o foco não é redes e sim Big Data, então segue o link que contem um tutorial que nos ajuda a criar aplicações de Big data usando o eclipse. http://www.ibm.com/developerworks/br/data/library/techarticle/dm-1209bigdatabiginsights/
Fonte: http://www.ibm.com/us/en/

quarta-feira, 25 de junho de 2014

Lista Encadeada.

Como prometido vamos falar sobre lista encadeada, a principio vamos adotar o pascal, falando um pouco
sobre lista simplesmente encadeada, pense que um array é uma estrutura de dados que é tipada e possui o tamanho limitado ao que definimos no corpo do programa é já era, mas e se for necessário um vetor maior no tempo de execução e claro se for necessário poupar memoria ?, daí entra nossa lista simplesmente encadeada, essa se trata de uma estrutura de dados similar a um vetor a diferença se dá no conceito de alocação dinâmica de cada registro, tornado um vetor de tamanho indeterminado ou seja se desejo um elemento o minha lista terá um elemento mas se necessário n elementos a lista terá n elementos o quanto a memoria poder suportar.

Lista Encadeada

Definição: Uma lista encadeada é uma coleção de registros em que cada registro tem um campo que indica a localização do registro seguinte na lista.
Assim, a ordenação é fornecida explicitamente por esse campo. Esquematicamente podemos representar uma lista ligada da seguinte forma:

Onde o registro que representa cada componente da lista possui um campo que aponta para o próximo registro numa certa seqüência de ordenação.
Cabeça: Primeiro registro (elemento) da lista.
Cauda: Último elemento da lista. Para indicar que não ha elementos após a cauda, atribui-se nil ao apontador para o próximo, já que não existe um próximo.
A principal vantagem das listas encadeadas sobre as listas seqüenciais é que as primeiras podem aumentar e reduzir de tamanho dinamicamente, podendo assim ser usadas em diversas situações sem comprometer o uso de memória.
A principal desvantagem das listas encadeadas é a necessidade de armazenamento adicional para guardar os apontadores.
Para ver uma implementação de uma lista Encadeada, abra a unit LstEnc e para um programa que demonstra como usá-la, veja DLstEnc.

Inserção na lista encadeada

Inicialmente a cabeça da lista aponta para nil, indicando que a mesma está vazia (1). Após a inserção do um Item 1 na lista, a cabeça aponta para ele, e o apontador para o próximo Item contido no Item 1 aponta para nil, já que após ele não há outros itens (2). Caso um outro elemento (Item 2) seja inserido, ele passa a ser a cabeça da lista e seu apontador para o próximo elemento da lista aponta para a antiga cabeça da lista (Item 1), como pode ser verificado em (3).


Remoção na lista encadeada

Quando o item a ser removido encontra-se na cabeça da lista, executamos os seguintes passos:
1) Navegamos na lista até encontrar o item a ser removido e guardamos o apontador para o próximo item (segundo) da lista.
2) Fazemos com que o apontador para a cabeça passe a apontar para o item seguinte à cabeça da lista, através do apontador obtido no passo 1.
3) Já que a cabeça já foi ajustada, executamos o dispose no item que localizava-se na cabeça da lista, liberando a memória referente ao Item removido da lista.
4) A lista passa a ter um elemento a menos e a variável dinâmica que continha o elemento apontado pela cabeça da lista foi desalocado da memória.

Quando o item a ser removido não se encontra na cabeça da lista, é necessário atualizar o apontador do item anterior. Sendo assim, usamos um apontador (PAtual) para procurar o Item a ser removido e outro (PAnterior) para guardar o Item anterior na lista encadeada. Desta forma, ao encontrar o Item (1), temos um apontador para o item anterior a ele (PAnterior) e para o próprio item (PAtual), como mostra (2). De posse destes apontadores, podemos ajustar o apontador para o próximo do item apontador por PAnterior para o endereço apontado pelo campo próximo do item apontado por PAtual. Em seguida, usamos o dispose para desalocar a variável dinâmica que guarda o item removido (3). Ao final, temos uma lista encadeada com um item a menos e com todos os apontadores ajustados.


 Fonte:http://albertocn.sytes.net/2010-2/ed1/aulas/listas_lineares.htm

sábado, 21 de junho de 2014

Privacidade em tempo de Big Data.

Não é uma novidade mas, todos devem saber que o Facebook é a maior rede social do planeta, porem como o face ganha tanto dinheiro? isso é feito por meio do uso de Big Data, ou seja usam os perfis do site para comercializar quem esta mais propicio a comprar um HD 1Tb, então é uma grande parceria de https://www.ibm.com/developerworks/community/blogs/ctaurion/entry/privacidade_em_tempos_de_big_data?lang=en, agradeço a tenção, é uma leitura bacana vale a pena.
marketing, mas não só isso, analisar um grande volume da dados não é somente vantajoso ao mercado de vendas e  sim a segurança nacional, um ponto muito importante, o que diria nosso queridos espiões dos  USA, basta ser um terrorista em potencial que sua conta é simplesmente observadas por olhos anônimos, então onde fica a sua a minha a nossa privacidade ?, segue uma reportagem bacana sobre isso no link :

fonte: https://www.ibm.com/developerworks/community/blogs/ctaurion/entry/privacidade_em_tempos_de_big_data?lang=en

quarta-feira, 18 de junho de 2014

Alocação dinâmica de memoria.

No inicio da graduação quando falamos de memoria pensamos em algo sem limites e que no qual nosso professor faz o comentário não se preocupa com a memoria agora, mas quando passamos a viver uma vida
cheia de códigos confusos e naturalmente grande volume de acesso a informações ou podemos traduzir em big data, pensamos que servidores possuem memoria limitada e nem sempre programamos do modo mais adequado, então voltamos a tão prometida estrutura de dados que vai determinar a eficiência do sistema, então para evitar a criação de um novo SIGAA prestemos atenção no modo com o qual programamos e se realmente aquela é a melhor solução, agora vou passar uma breve noção de alocação dinâmica de memoria em pascal, essa é uma noção importante pois quando fazemos a + b em PI as coisa são muito simples, mas e quando fazemos n somas em sistema paralelo onde se faz necessário o armazenamento de informações? será usar um array uma solução ou problema?

Alocação e Desalocação de Variáveis Dinâmicas

Há uma função chamada new que dado um apontador cria uma variável dinâmica do tipo do apontador e faz com que o apontador tipado passado aponte para a variável criada.
new (<apontador-tipado>)
Para liberar a memória alocada pela função new, usa-se o procedimento dispose.
dispose (<apontador-tipado>)
Exemplo 5: Usando new e dispose para trabalhar com variáveis dinâmicas.type
   TItem = record
      Nome : String[20];
      Preco : real
   end;
var
   PItem, PAnterior : ^TItem;
begin
   New(PItem);
   PItem^.Nome := 'Livro de ED1';
   PItem^.Preco := 30.0;
   PAnterior := PItem;

   New(PItem);
   PItem^.Nome := 'Outro livro';
   PItem^.Preco := 10.0;

   writeln(PAnterior^.Nome);
   writeln(PAnterior^.Preco);

   writeln(PItem^.Nome);
   writeln(PItem^.Preco);

   Dispose(PAnterior);
   Dispose(PItem);

   PItem := nil;
   PAnterior := nil
end.



Exemplo 6: Usando variáveis dinâmicas para ler e guardar na memória uma lista de itens.type
   PItem = ^TItem;
   TItem = record
      Nome : string[20];
      Preco : real;
      Proximo : PItem
   end;
var
   Head : PItem;
   PNew : PItem;
   Resp : char;
begin
   Head := nil;

   repeat
      New(PNew);
      writeln('Digite o nome e o preco do Item:');
      readln(PNew^.Nome, PNew^.Preco);
      PNew^.Proximo := Head;
      Head := PNew;
      write('Outro Item (S/N)?');
      readln(Resp);
   until UpCase(Resp) = 'N';
end.
 Bom pessoal isso é pouco quanto ao conhecimento que cada um pode buscar, quem sabe não ensino listas,filas e pilhas nas próximas postagens abraço.
fontes :http://albertocn.sytes.net/2010-2/ed1/aulas/apontadores.htm
http://vidadeprogramador.com.br/2014/01/23/pouca-memoria/

quarta-feira, 11 de junho de 2014

Big Data e Biometria.


Podemos pensar que a sociedade sem um governo tende ao caos, um dos  grandes problema das nossas organizações não organizadas é a segurança, na idade média bastava uma pequena abertura em uma grande porta de madeira para reconhecer que o visitante não era um invasor, mas a idade media passou e as
populações cresceram, o reconhecimento de padrões é classificado como o que nos distingue dos nossos amigos primatas, então o grande volume de faces ao adentras nos castelos modernos(shoppings, estádios, arenas e etc..)  não mais poderão ser reconhecidos pelos olhos humanos, pois possuímos essa capacidade porem somos limitados em armazenar tantos dados, então finalmente entro no assunto Big Data, hoje existe uma grande tendencia para que as cidades modernas tenham seu próprio " Big brother", porem existem milhões de pessoas adentrando cada ambiente, uma das soluções criadas pela humanidade é o reconhecimento biométrico, podendo ele ser feito de diversos modos, detre eles o reconhecimento de face que já é amplamente usado em câmeras digitais,o CPF e RG possuem a capacidade de demonstrar que o documento é verdadeiro, porem não pode demonstrar se realmente é você de verdade, será esse o fim das senhas?
Segue uma matéria bacana sobre biometria e Big Data.

Biometria facial é arma para combater fraudes no varejo brasileiro

O cpf existe, o nome confere, o documento é real, mas a foto não é "a cara do dono". Só em 2012, empresas brasileiras sofreram 2,14 milhões de fraudes por roubo de identidade. O Certiface quer acabar com o problema

A cena é mais comum do que você imagina. Dona Rosângela, uma senhora simpática, está no setor de crediário da loja para parcelar suas compras de eletrodomésticos. Seu CPF e nome conferem na base de dados da Receita Federal e seu score de crédito está perfeito.

Só tem um problema: Dona Rosângela comprou em outra loja, com a mesma carinha simpática, mas ela se chamava Berenice. Seu nome e cpf também estavam em ordem na Receita Federal e conferiam com o documento apresentado. Dona Berenice nunca pagou o crediário. E DonaRosângela também não vai pagar o novo crediário.
Onde está o erro? Acertou quem disse que era a foto. "O problema não é o CPF, mas o rosto de quem o está portando", explica Plauto Diniz, diretor daNeti, empresa paulista especializada em soluçoes de biometria facial de missão crítica para área financeira.
"Os criminosos hoje já produzem documentos com papéis originais e usam CPFs, RGs e nomes verdadeiros sem problema de negativação de crédito. Mas substituem a foto do dono pela foto do fraudador", diz o executivo.
Um dos produtos da Neti é o Certiface, sistema de biometria facial para detecção de fraudes em tempo real e usando recursos de cloud computing. O Certiface está ativo em 180 lojas de uma rede de varejo brasileira há dois anos, mapeia cerca de 20 mil rostos por mês, tem um banco de dados na nuvem com mais de 300 mil rostos e já digitalizou mais de 800 mil documentos, segundo Diniz
O segredo do Certiface é usar uma webcam comum na hora de fazer a aprovação do crédito. A atendente pede ao cliente os documentos e tira uma foto para acompanhar o cadastro, enviando a informação em tempo real para o banco de dados na nuvem.
A foto, nome e número de CPF associados a ela são comparados com a base de dados do Certiface. Se houver outra foto com um percentual alto de semelhança associada a um número diferente de CPF, ou se o mesmo número de CPF estiver associado a um rosto completamente diferente, um alerta é enviado imediatamente por SMS para o gerente da área de crédito e na tela a atendente vê as duas fotos para decidir o que fazer.
Usualmente, explica Diniz, a atendente pede ao cliente que apresente um outro documento ou comprovação de identidade. "Se ele realmente for o dono da identidade, certamente vai ter como comprovar. O fraudador, diante do pedido, disfarça, diz que esqueceu ou que vai ao banheiro e nunca mais volta", garante.
Diniz explica que o sistema utiliza os padrões biométricos mundiais (normas ANSI/INCITS M1 e comitês técnicos ISO/IEC SC 37) para leitura, gravação e validação de dados das fotos. "Ao tirar a foto, o sistema orienta a atendente a posicionar a webcam de acordo com os padrões", diz o executivo.
A Neti, que foi criada em Bebedouro, interior de São Paulo, está em ritmo de startup e recentemente transferiu sua sede para Sorocaba (SP) após receber um aporte de investimentos para ampliar suas soluções de biometria.
Diniz explica que a empresa escolheu se concentrar na biometria facial porque mesmo a impressão digital não é um identificador presente em 100% da população. "Entre 5% a 10% das pessoas no mundo não tem impressão digital, muitas vezes porque sua atividade profissional utiliza produtos que são abrasivos e gastam a pele dos dedos", diz.
Em 2012, segundo a Serasa Experian, o Brasil teve um total de 2,14 milhões de fraudes. Para as empresas, o principal problema não é apenas o prejuízo do crediário não pago. "Para cada real perdido na fraude as empresas gastam mais 1,7 real com custas legais e processuais", explica Diniz. O Certiface reduz a quantidade de processos, protege o verdadeiro dono dos documentos que teve sua identidade roubada e diminui as fraudes.
A Neti é parceira de negócios da Samsung e está lançando agora a versão mobile do Certiface, portada para Android e também para iOS. Como tudo funciona na nuvem e os smartphones têm câmeras poderosas, a aposta da empresa é oferecer o produto para outras aplicações de segurança ou para quiosques em shoppings, por exemplo.
Ah, para sua informação, a história da Dona Rosângela é verdadeira, mas na vida real ela não tinha apenas dois CPFs associados ao seu rosto, mas sim quatro diferentes sets de documentos mapeados pelo Certiface. E não conseguiu fazer a compra!
Em breve o sonho de Matrix será mais realidade do que possamos imaginar em anos cujo só nosso imaginação poderia compor tal realidade.
Fonte :http://computerworld.com.br/tecnologia/2014/02/05/biometria-facial-e-arma-para-combater-fraudes-no-varejo-brasileiro/ 

sexta-feira, 6 de junho de 2014

Recursividade





Recursão é um método de programação no qual uma função pode chamar a si mesma. O termo é usado de maneira mais geral para descrever o processo de repetição de um objeto de um jeito similar ao que já fora mostrado. Muitos problemas em computação tem a propriedade de que cada instância sua contém uma instância menor do mesmo problema.
A chamada à função proveniente de um meio externo a ela é denominada chamada externa e cada uma das chamadas internas a si mesma é denominada chamada recursiva.
Um método comum de simplificação é dividir o problema em subproblemas do mesmo tipo. Como técnica de programação, este método é conhecido como dividir e conquistar e é a chave para a construção de muitos algoritmos importantes, bem como uma parte fundamental da programação dinâmica.
A recursão na programação é bem exemplificada quando uma função é definida em termos de si mesma. Um exemplo da aplicação da recursão são os parsers (analisadores gramaticais) para linguagens de programação. Uma grande vantagem da recursão é que um conjunto infinito de sentenças possíveis, designs ou outros dados podem ser definidos, analisados ou produzidos por um programa de computador finito.
Relações de recorrência são equações que definem uma ou mais seqüências recursivamente. Alguns tipos específicos de relações de recorrência podem ser “resolvidos” para que se obtenha uma definição não-recursiva.
Um exemplo clássico de recursão é a definição do cálculo do fatorial de um número, dada aqui no algoritmo a seguir:

1:  ALGORITMO: Fatorial(n)   
2:  ENTRADA: inteiro n  
3:  SAÍDA: fatorial de n  
4:  REQUISITOS: n >= 0  
5:  SE n <= 1  
6:    RETORNE 1  
7:  SENÃO  
8:    RETORNE n * Fatorial(n-1)  

A função chama a si mesma recursivamente em uma versão menor da entrada (n - 1) e multiplica o resultado da chamada por n, até que alcance o caso base, de modo análogo à definição matemática de fatorial.
Como pode-se notar pela primeira condição, todo processo recursivo necessita de uma condição de parada para evitar um loop infinito. Neste caso, quando a função fatorial atinge o valor menor ou igual a 1 ele passa a retornar o valor de volta para a função.
No entanto, a recursão não é sempre a melhor opção. Como pode-se ver na questão acima, um laço comum resolve o problema iterativamente. Desta forma, quando o problema é pequeno tente resolvê-lo diretamente e utilizar a recursão apenas quando o problema for grande, consumindo tempo demais em um laço.

quinta-feira, 29 de maio de 2014

Estrutura Condicional "se"


Olá, nessa postagem venho falar um pouco sobre estruturas condicionais, mais especificamente a estrutura condicional "se".

Mas o que são estruturas condicionais ?

Estruturas condicionais são instruções para testar se uma condição é verdadeira ou falsa, podendo assim decidir se executa ou não um comando ou pilha de comandos.
A estrutura condicional mais básica é a estrutura "se" (no inglês, "if"), ela é encontrada em todas as linguagens (com sintaxes diferentes) e consiste em executar instruções caso uma condição se realize.
A estrutura "se" tem duas formas: simples e composta.

A forma simples apenas testa se a condição é satisfeita e executa uma ou mais instruções se a condição for verdadeira, e se for falsa a estrutura é finalizada sem executar as instruções.
Em pseudocódigo, é representado por "se" e em C é representado por "if".


A sintaxe dessa estrutura é a seguinte:


Em pseudocódigo:   

                                 se (condição) então
                                 (lista de instruções)
                                 fim
Em C:

                                if (condição) {
                                (lista de instruções);
                                 }







Existe ainda a forma composta da estrutura "se", que além de testar a condição e executar as instruções no caso das condições serem verdadeiras, executa outra pilha de instruções no caso das condições serem falsas.
Em pseudocódigo é denotado por "se"..."senão", e em C: "if"..."else".



A sintaxe dessa estrutura é a seguinte:

Em pseudocódigo:
                se (condição) então
               (lista de instruções A)
                senão
               (lista de instruções B)
                 fim
Em C:
                 if (condição) {
                 (lista de instruções A);
                  }
                  else {
                  (lista de instruções B);
                   }

Se a condição for verdadeira apenas o comando A será executado, se for falsa, apenas o comando B.


As estruturas condicionais são de extrema importância na vida de um programador, pois são elas que irão decidir se serão tomadas certas ações.
Ex.: Se login e senha estiverem corretos, então é liberado o acesso, se não, é emitida uma mensagem de erro.

Espero que tenha entendido, qualquer dúvida ou sugestão deixe nos comentários.


                    Linguagem C - Estruturas Condicionais