Cem mil visitas!!!

27 06 2017

Mesmo depois de praticamente 4 anos de inatividade (as últimas postagens frequentes foram em 2013) hoje fui surpreendido com um comentário por aqui. Quando fui olhar as estatísticas de acesso descobri que o ano de 2016 teve o maior número de acessos desde o ínicio do blog, em 2009 e que no acumulado ele bateu 100 mil visitas. Em tempos de bilhões de visualizações no youtube em um único vídeo pode não parecer muito, mas fico feliz de tanta gente ter chegado até aqui. Espero que eu tenha sido útil para ao menos metade dos visitantes e vou tentar voltar a postar.





Citando artigos rapidamente com a ajuda do Google Scholar

22 06 2015

Todo mundo que já escreveu um texto acadêmico já se enrolou com as referências bibliográficas. São tantos padrões diferentes e tantas formas de publicação que as vezes a construção da seção de referências bibliográfica demora mais do que o desejado.

Mas existe uma maneira de facilitar essa tarefa, pelo menos para quando for necessário citar artigos e livros que estão localizáveis via Google Scholar (ou Google Acadêmico, em bom português).

Uma vez que você entre no site e busca por um artigo ou um livro, aparecerá, logo abaixo do link do site onde esse arquivo está disponível , algumas opções, dentre elas, citar (vide figura abaixo)

1Uma vez que se clique nesse link, aparece uma pequena janelinha, com diversos padrões de citação, bastando utilizar agora o ctrl+C , ctrl+V.

2Para aqueles que utilizam editores científicos, baseados na linguagem Latex, é possível ainda obter os dados da publicação em formatos específicos, como BibTex.

Embora seja um recurso bastante evidente em termos visuais, esse recurso é desconhecido de várias pessoas, embora extremamente útil.





A história inverificável da Internet

10 10 2014

Qualquer estatística acerca do volume de dados encontrado na Internet trará números gigantescos. São centenas de milhões de sites, blogs, fóruns, repositórios disponível para qualquer um que possa ter acesso a rede. Só o Facebook já conseguiria preencher grandes bibliotecas com seus inúmeros posts, vídeos, fotografias e enquetes. Além disso, há um mundo escondido na chamada deep web (muito citado, mas pouco conhecido) , segredos corporativos, governamentais ou apenas impressos, como sempre foi até algumas décadas atrás.

Tantos dados são úteis para diversos fins : observar preferências de consumidores, escolher o próximo destino para a viagem das férias, monitorar engarrafamentos nos grandes centros…entre outros. Termos como data mining ou big data emergiram justamente da necessidade lidar e principalmente obter algo proveitoso dessa abundância de informação e da observação de que boas agulhas podem ser encontradas nesse palheiro.

Mas existe uma questão que não pode ser ignorada quando estamos lidando com qualquer informação : A informação molda nossa percepção do universo e influencia no nosso processo de decisão. Nesse caso, a informação nem precisa vir de uma fonte digital. Nosso cérebro está sempre recebendo, processando e interpretando informações sobre as mais diversas situações pela qual passamos, desde a visão de uma pessoa se cortando ao manusear uma faca até a sensação de inchaço e queimação que acomete alguns após o consumo de alguns alimentos.

É devido a esse poder de influência nas nossas decisões que a informação muitas vezes adquire um viés de periculosidade. Assim como um composto químico que pode curar ou matar de acordo com a dosagem a qual se expôs, a exposição a determinados dados e a tradução destes em informações digeríveis, pode fazer de uma pessoa tanto um sábio quanto um burro.

A ocasião da escrita deste texto é bastante propícia para essa discussão : as eleições presidenciais para os próximos quatro anos. Depois das Jornadas de Junho, denominação dada as ondas de protestos ocorridas em Junho e Julho de 2013, chegamos a um pleito onde o que mais se diz é que “ninguém que está ai presta”. O sentimento de insatisfação atingiu níveis que não eram vistos pelo menos desde o movimento dos Caras Pintadas durante o governo Collor, e no momento em que existe uma grande insatisfação surgem várias pessoas sugerindo soluções. Alguns dos piores governantes que o mundo já viu subiram ao poder se aproveitando, bem, da insatisfação popular, como por exemplo Adolf Hitler. É nesse momento então que ligamos as pontas do nosso nó.

Uma eleição, em termos simples, é uma tomada de decisão coletiva, pela atribuição de poderes a um grupo de pessoas. Essa coletividade da tomada de decisão é gerada individualmente por milhões de pessoas obedecendo algumas regras previamente estabelecidas. A tomada de decisão, como já dito acima, é influenciado pelas informações disponíveis para cada um e neste ponto chegamos ao viés de periculosidade.

Em uma eleição de grande porte como as eleições gerais brasileiras, espera-se que tenhamos mais de um candidato disputando cada cargo. Sendo assim, espera-se que haja um vencedor e um perdedor e que todos os que estão na disputa queiram vencer. Entretanto, para vencer é preciso convencer as pessoas de que ele é o melhor e isso é feito através de propostas, marketing e principalmente, informações.

Esse ano, uma corrida presidencial que caminhava pra ser fria e com poucos acontecimentos acabou sendo chacoalhada pela morte do ex-governador de Pernambuco Eduardo Campos e consequente ascensão da vice , Marina Silva, a cabeça da chapa. Logo após, ocorreu uma série de viradas nas pesquisas de intenção de voto e a ida surpreendente do candidato Aécio Neves para o segundo turno.

Neste meio tempo, como qualquer brasileiro que tenha uma conta no Facebook ou Twitter deve ter percebido, a quantidade de postagens relacionadas aos candidatos ou seus partidos cresceu absurdamente. A começar com as circunstâncias que envolveram a morte de Eduardo Campos, envolvendo condições climáticas, coincidências, denúncias de corrupção e até mesmo suspeitas de sabotagem ou atos terroristas. Logo depois, começou o processo de endeusamento do candidato falecido e da sua substituta. Por fim, no pouco tempo que restou da campanha de primeiro turno, iniciou-se um processo de desconstrução da imagem divina construída anteriormente sobre Marina Silva.

A chegada de Aécio Neves ao segundo turno, no último domingo, levou esse movimento a níveis praticamente insuportáveis. Denúncias, acusações, estatísticas e comparações vindo tanto do lado do PSDB quanto do PT inundaram a timeline de todos em tornou a navegação no site de uma experiência interessante a algo cansativo e nauseante.

Essa batalha virtual é só uma forma aguda do que já acontece todos os dias com o homem do século XXI. Diante de uma avalanche de informações, das quais nem sempre podemos extrair os metadados como origem, autor, data de criação, entre outros, temos que humildemente enfrentar um Golias sem saber onde ele exatamente se encontra, ou melhor, precisamos tomar nossas decisões sem saber exatamente o que é verdade.

Contextualizando para essas eleições, há uma série de “fatos” que o cidadão comum não pode, pelo menos com certeza, classificar como falsos ou verdadeiros, como por exemplo, o suposto vício em cocaína do senador Aécio Neves, a culpa do mesmo no tão divulgado caso de desvio de verbas da saúde enquanto era governador de Minas Gerais, a fortuna de bilhões de dólares do Lula, a culpa e responsabilidade da presidente Dilma Rousseff nos casos de corrupção envolvendo a Petrobras, entre outros. E são essas informações, junto com as convicções de cada um, que irão definir o vencedor do dia 26 e consequentemente o futuro dos brasileiros.

A disseminação de informações, verdadeiras e principalmente falsas, sobre os candidatos e partidos , tornou-se algo tão evidente e inegável, que originou até um termo novo ,MAV , sigla de militantes de ambientes virtuais, que é em geral atribuído a pessoas que defendem ferozmente o atual governo na Internet.

O pior em tudo isso é que esse fenômeno de confusão gerada pelo excesso de informações não se restringe apenas ao caso das eleições. As correntes de e-mail sobre pessoas doentes na África, ovos jogados em para-brisas, pesquisas científicas não recomendando vacinações, teorias da conspiração diversas, por exemplo, são exemplos de coisas que sempre são citadas em alguma roda de amigos e que de certa maneira se perpetuam.

Neste momento, temos que definir se acreditamos ou não em algo, mas sem saber os metadados já citados anteriormente. Temos que nos acostumar com uma história difícil de ser verificada e constantemente reescrita por qualquer um, como acontece por exemplo na Wikipedia e como foi prevista com toques apocalípticos por George Orwell em 1984. E na grande maioria das vezes, as pessoas optam por acreditar, antes de verificar, e repassar aquilo que ela acaba de começar a acreditar, em um processo que pode levar , a como se diz no ditado, fazer mentiras muitas vezes contadas se tornarem verdades.

Infelizmente, não consigo ver em um futuro próximo uma solução para esse problema. Uma eventual hierarquização do registro dos fatos e da criação de novas informações , que gerasse qualquer centralização, seria logo criticada e/ou contestada. Resta-nos a princípio, torcer para qualquer que sejam as mentiras e verdades divulgadas nos próximos dias, o povo saiba tomar a melhor decisão e nos conduzir a um futuro se não melhor, menos ruim.





Quarenta mil visitas

6 08 2013

Apenas um dia após ter completado um ano da vigésima milésima visualização, esse humilde blog chega a 40 mil views. Muitos blogs de informática chegam a esse número em uma semana ou mesmo em um dia, mas é uma marca que não imaginava que chegaria quando comecei.

Será que em um ano chegamos em 100 mil??

Tentarei.





Sessão nostalgia – Parte 7 – Nokia 1100

17 07 2013
Simples, resistente, bonito e barato.

Simples, resistente, bonito e barato

Em 2003, sem muita pretensão ou grandes anúncios, surge o Nokia 1100, que viria a se tornar o celular mais popular do mundo e um sucesso de venda maior do que outros aparelhos como o PlayStation 2 e o iPod.

Ele, junto com suas versões atualizadas, alcançaram a marca de 1 bilhão de unidades vendidas. Virou motivo de piada por ser considerado inquebrável, viralizou o jogo Snake, que era tão simples e viciante quanto o próprio aparelho e  esteve no centro de um esquema de fraudes bancárias.

Em um mundo de smartphone, muitos talvez não entendam como um celular tão simples chegou tão longe.





Transformando superfícies em controles remotos com Kinect e Projetores

3 07 2013

Perdeu seu controle remoto denovo? Não se preocupe – crie outro no braço de seu sofá com um toque de sua mão. Enquanto você está fazendo isso, por que não transformar a mesinha de centro em um controle de luz, onde você pode diminuir ou aumentar a intensidade da iluminação sem se levantar? O sistema que faz isso acontecer chama-se WorldKit, foi criado por Robert Xiao and Chris Harrison na Universidade Carnegie Mellon, em Pittsburgh, Pennsylvania e tem previsão de chegar ao mercado em cinco anos.

O WorldKit combina câmeras, projetores e computadores para habilitar superfícies como paredes, mesas e portas a abrigar controles interativos para gadgets, incluindo TVs, câmeras de vídeo e iluminação ambiente.

O sistema usa o sensor de profundidade do Kinect para detectar o pressionamento das superfícies . Quando você move sua mão, é possível dizer em voz alta para o sistema qual tipo de controle você quer que sua superfície se transforme.

Reportagem original disponível no site da NewScientist

http://www.newscientist.com/article/mg21829146.200-kinect-plus-projector-makes-anything-a-remote-control.html#.UcxJgsokwsp





Nova tecnologia em telas dobráveis usa formas criativas de interação com o usuário

26 06 2013

Telas flexíveis já não são mais uma grande novidade para quem acompanha os avanços da informática mais de perto, mas ainda assim, elas são sempre surpreendentes.

Uma tecnologia chamada Paper Tab foi apresentada na Conferência de Interação Homem-Computador ocorrida em abril em Paris. Ela inclui três telas flexíveis que funcionam através de e-ink, similar a que é utilizada no Kindle, da Amazon. Essas telas, entretanto não são touch screen,mas aceitam sua dobra como uma forma de entrada de dados ou controles. Por exemplo, para responder um e-mail, o usuário precisa dobrar o canto superior esquerdo da tela. Ele necessitaria a partir daí de um teclado que funcionasse via Bluetooth para escrever a mensagem.

Por enquanto, as três telas precisam estar conectadas juntas via cabos para poder transferir informação, além de exigir certa preocupação com a posição relativa de uma tela em relação as outras. O sistema é um emaranhado de fios, mas os seus criadores esperam reduzir esse volume com o avanço do desenvolvimento.

Em uma demonstração, o time de pesquisa mostrou como uma das telas pode ser utilizada como uma caixa de entrada de e-mails. Quando a segunda tela foi batida na lista de mensagens, esta segunda tela carregou a mensagem em modo full screen. Então, uma terceira tela que mostrava a foto de um bebê foi batida na segunda tela, o que fez com que a imagem do bebê fosse anexada a mensagem de e-mail. Após isso, dobrou-se o canto superior esquerdo da segunda tela para enviar a mensagem.

Em outra demonstração, as telas funcionavam como conjuntos de mapas, que mudavam o que estavam exibindo de açodo com o posicionamento relativo entre as telas.

No link abaixo você encontra a reportagem original sobre o Paper Tab e um vídeo mostrando seu funcionamento.

http://www.techhive.com/article/2036820/flexible-networked-eink-displays-mimic-physical-documents.html





O único artigo científico de Bill Gates

17 06 2013

Existe uma lenda recorrente entre todas profissionais e estudantes de computação de que o sucesso de Bill Gates é algo não merecido, do ponto de vista técnico, pois o mesmo não seria um bom programador e nem possui nenhum diploma universitário. A história é tão repetida que já cheguei a ouvir de um professor meu, durante uma aula, a seguinte frase:

“Vocês nunca vão ganhar dinheiro sem saber programar, a não ser que você seja o Bill Gates.”

Claramente, a frase foi dita em tom de brincadeira, pois em verdade, poucos devem conhecer realmente o domínio que Gates tem do assunto e muitos sabem que alguma coisa de programação ele sabe e que essa “alguma coisa” deve ser mais que a média.

Um dos indícios a favor do bilionário são as supostas 10 mil horas de experiência em programação que alegavam que ele tinha na época em que abriu a Microsoft . Naquela época (quase 40 anos atrás), era estranho ver o ainda rapaz Bill em meio a pessoas mais velhas, que eram seus funcionários.

Primeiros funcionários da Microsoft em foto tirada em 1978

Outro ponto, muitas vezes ignorado, é a passagem de Gates pela Universidade de Harvard, onde cursava matemática e direito e onde escreveu o seu único artigo científico em conjunto com Christos Papadimitriou, um famosos cientista da computação grego, conhecido por seus livros na área de projeto e análise de algoritmos.

O artigo, entitulado “Bounds for sorting by prefix reversal” (Limitante para ordenação por reversão de prefixo) e disponível neste link ,tratava da prova de limites de complexidades do método de ordenação chamado Pancake sorting (Ordenação de panquecas), em que apenas partes da sequência que estivessem no topo (daí a analogia com uma pilha de panquecas) poderiam ser trocadas de posição, por uma inversão de ordem dessas (por exemplo, a sequência {4,7,8, 9 ,5 ,3,2} poderia ser mudada pra {9, 8, 7 ,4 , 5, 3, 2} mas não pra {4, 8, 7, 9, 5, 3, 2} em um único movimento).

O resultado obtido por Gates na época era tão bom que ficou por muito tempo com sendo o melhor conhecido. Entretanto, devido ao rumo que ele deu a sua carreira, hoje é um texto quase desconhecido do grande público.





Desenvolvimento para Kinect – Utilização da biblioteca

23 05 2013

Para demonstrar como o uso do Kinect para interação com um aplicativo pode ser facilitado com o uso da biblioteca descrita anteriormente, usaremos um código para controlar uma aplicação de exibição de fotos.

Neste programa, após escolhido o diretório onde as imagens se localizam, é exibida a primeira imagem em ordem alfabética de nome. Na janela onde a estará sendo exibida a imagem, haverá dois botões, um para passar para a próxima imagem e outro para voltar a imagem anterior. Será permitido ainda nesse programa aplicar zoom em uma imagem ou girá-la em qualquer direção, como também avançar ou voltar na galeria apenas por deslizar a mão para a esquerda ou direita, respectivamente.

Abaixo, temos o código necessário para criar a nossa aplicação.

struct Botao{

       public Texture2D textura;
       public Rectangle retangulo;

      public bool estaDentro(int x, int y){

            return (x > retangulo.Left && x < retangulo.Right  && y >
                    retangulo.Top && y < retangulo.Bottom);
}

      public Botao(Texture2D text, Rectangle ret){

            textura = text;
            retangulo = ret;
      }
}


class Exemplo: Tela{

      Botao avancar;
      Botao voltar;
      int qualFoto;
      List<Texture2D> fotos;

     Rectangle areaFoto;
     CursorKinectDuplo cursor;

     Exemplo(Game1 slider) : base(slider) {

             avancar = new Botao(slider.Content.Load<Texture2D>("avancar"),new Rectangle(100, 100,50, 50));
             voltar = new Botao(slider.Content.Load<Texture2D>("voltar"), new Rectangle(200, 100, 50, 50));
             cursor = new CursorKinectDuplo(slider);
             fotos = carregaFotosDiretorio();

             qualFoto = 0;
             areaFoto = new Rectangle();

}

       public override void Update(GameTime gameTime){

              cursor.Update(gameTime);
              if (cursor.DelizaLeft && qualFoto < fotos.Count)
                   qualFoto++;
              else if (cursor.DelizaRight && qualFoto > 0)
                    qualFoto--;
              
              if ((avancar.estaDentro((int)cursor.DirX, (int)cursor.DirY) &&
                  cursor.BotaoDireito == CursorKinectDuplo.estadoPressao.PRESSIONADO)
                  ||
                (avancar.estaDentro((int)cursor.EsqX, (int)cursor.EsqY) && cursor.BotaoEsquerdo  
                 == CursorKinectDuplo.estadoPressao.PRESSIONADO)){

             if (qualFoto < fotos.Count)
                 qualFoto++;

            }else if ((voltar.estaDentro((int)cursor.DirX, (int)cursor.DirY) &&
                cursor.BotaoDireito == CursorKinectDuplo.estadoPressao.PRESSIONADO)
                ||
               (voltar.estaDentro((int)cursor.EsqX, (int)cursor.EsqY) &&
                cursor.BotaoEsquerdo == CursorKinectDuplo.estadoPressao.PRESSIONADO)){

             if(qualFoto > 0 )
                 qualFoto--;

            }

          if(cursor.ZoomIn)  
             aumentaZoom();
         else if(cursor.ZoomOut)     
             diminuiZoom();

         base.Update(gameTime);
}

         public override void Draw(GameTime gameTime){

               spriteBatch.Draw(avancar.textura, avancar.retangulo, Color.White);
               spriteBatch.Draw(voltar.textura, voltar.retangulo, Color.White);
               spriteBatch.Draw(fotos[qualFoto], areaFoto, Color.White);

               cursor.Draw(gameTime);

               base.Draw(gameTime);

          }

Nas primeiras linhas do nosso código, definimos um struct chamado Botao, que irá facilitar o manuseio desse tipo de objeto em uma aplicação feita em XNA. Neste struct, temos a textura (imagem) que representará o botão, sua posição e uma função para verificar se certo ponto está dentro do botão.

Em seguida, começamos a traçar nossa classe Exemplo, para exibir a interface do nosso programa. Note que essa classe deriva da classe Tela, mas isso não interfere no resultado que iremos demonstrar.

Iniciamos declarando os botões avancar e voltar, que serão responsáveis pela navegação na galeria. Em sequência, temos uma variável inteira qualFoto que serve para indicar a foto que está sendo atualmente exibida. A lista fotos e o Rectangle área fotos são apenas auxiliares no nosso contexto, sendo que a primeira conterá as fotos da nossa galeria e o segundo a área e posição de visualização.

Então, fazemos a declaração da variável cursor da classe KinectCursorDuplo. Ela será a responsável por nossa interação com o programa.

No construtor da classe, fazemos a inicialização das variáveis. A única inicialização relevante porém é a da variável cursor, que recebe uma variável da classe Slider no seu construtor. Essa classe é na verdade a classe onde está o loop principal do jogo XNA e pode ter qualquer nome, bastando para isso uma refatoração.

Partimos então para a função Update, que é onde as ações são realmente executadas, e a variável cursor vai ter seu poder destacado. A primeira coisa que é necessária se fazer é chamar a função Update  da variável cursor para atualizar os valores dentro desta. Feito isso, podemos usá-la.

A primeira coisa testada é se houve algum deslizamento horizontal, ou para esquerda, ou para direita. Para isso, basta chamar as propriedades DeslizaLeft e DeslizaRight das classes, que são variáveis booleanas, como mostrado anteriormente.

A seguir, temos uma ação com um grau de dificuldade maior, que é a verificação do clique. Primeiro obtemos a localização do cursor na tela, através das propriedades DirX, DirY, EsqX e EsqY. Passamos esses valores, de maneira separada para o caso da coordenada da mão direita e da mão esquerda para a função estaDentro do botão que desejamos verificar. Caso o cursor “esteja dentro” do botão, ou seja, o cursor está sobre o botão, resta saber se ele está o pressionado. Para isso usamos o valor da propriedade BotaoDireito ou BotaoEsquerdo e verificamos se é igual ao valor PRESSIONADO. Desta forma, usando treze linhas de código e sem nenhuma menção direta ao Kinect ou seu SDK, moldamos uma verificação de clique em dois botões da tela, realizado por qualquer uma das duas mãos.

Por fim, voltamos a simplicidade de verificação do movimento de zoom, realizado apenas com o valor de duas propriedades, ZoomIn e ZoomOut, que também são booleanas.

Como pode ser visto neste pequeno exemplo, a utilização do Kinect pode se tornar extremamente simples em muitos aspectos utilizando esta biblioteca.

 





O futuro segundo a Microsoft

1 05 2013

Mais um da série de de vídeos que a Microsoft já fez tentando mostrar como vai ser o futuro dos desktops.