domingo, 25 de novembro de 2012

Problema de Lógica: Caminho da estação

Um marido costuma chegar à sua estação precisamente às dezessete horas. Sua mulher costuma ir ao encontro do trem para levar o marido de automóvel. Um dia, o marido chega meia hora antes e resolve ir andando pelo caminho que ela costuma seguir. Encontram-se no caminho e os dois voltam para casa, chegando dez minutos mais cedo que de costume. Supondo que a mulher viaje com velocidade constante e saia de casa no tempo exato para encontrar o trem das dezessete horas, por quanto tempo o marido andou antes de ser encontrado por sua mulher?





RESPOSTA





A mulher e o marido chegaram em casa dez minutos mais cedo, assim nesse tempo ela economizou cinco minutos na ida e cinco minutos na volta, no caminho que seria de casa até a estação. Ou seja, quando ela encontrou o marido faltavam cinco minutos para as dezessete horas. Como o marido chegou na estação trinta minutos antes, então conclui-se que andou por vinte e cinco minutos.

Anular o efeito do MathJax

No meu artigo intitulado "Tipografia matemática para páginas web" (http://dan-scientia.blogspot.com.br/2011/07/tipografia-matematica-para-paginas-web.html) apresentei o MathJax, uma biblioteca em JavaScript que trata e exibe expressões matemáticas em LaTeX ou MathML em navegadores web.

O LaTeX utiliza um conjunto de comandos em sequências de caracteres, iniciados com o caractere barra invertida "\", que são usados para produzir os símbolos matemáticos, letras gregas e executar tarefas. São as sequências de controle. E não somente a barra invertida mas os caracteres { } $ ^ _ % ~ # & também são usados com propósitos especiais dentro do LaTeX. Por exemplo, \sum_{k=1}^n é uma sequência de controle.

Se a página web estiver com o MathJax integrado no código, todo o conteúdo será tratado para apresentação. Desta forma, corre-se o risco de uma informação, que esteja usando algum caractere especial do LaTeX mas que não é um comando do LaTeX, ser exibida erroneamente na página.

Uma forma de contornar isso é demarcando o conteúdo que não deve ser tratado pelo MathJax com alguma das etiquetas que estão configuradas para isso no MathJax. Nos arquivos de configuração do MathJax existe uma linha de opção, esta linha existe em cada seção de configuração de um pré-processador, tex2jax, asciimath2jax etc. A linha é:

skipTags: ["script","noscript","style","textarea","pre","code"],

Isto quer dizer que tudo que estiver entre as etiquetas <script></script>, <noscript></noscript>, <style></style>, <textarea></textarea>, <pre></pre> e <code></code> não será entendido e processado como um comando em LaTeX ou MathML. O bloco estará protegido.

A configuração "default" do MathJax contém a linha de opção "skipTags" exatamente como apresentada acima. Quem utiliza o MathJax pelo web service proveniente do cdn.mathjax.org está preso na configuração imposta. Se desejar alterar a configuração padrão, será preciso carregar a configuração de um outro local, de uma cópia alterada do arquivo de configuração, ou usar a configuração "in-line", que coloca as opções de configuração na própria página web.

Para mais informações consulte a documentação do MathJax em http://docs.mathjax.org/en/latest/

Script para gerar thumbnails

Frequentemente crio cópias de segurança dos meus arquivos pessoais, gravando-as em mídias DVD. Realizo há anos este procedimento e o acervo de mídias já está na casa da centena.

O maior problema quando se tem uma quantidade enorme de dados é não ter um mecanismo de busca que facilite a recuperação de determinada informação. Quando a informação é um texto, fica mais fácil efetuar a busca, bastando uma pesquisa por palavra chave. Para fazer isso, existem diversos softwares. As ferramentas de busca em texto retornam a localização exata, não necessitando de uma busca com os próprios olhos.

Agora, em imagens, um mecanismo de busca torna-se bem mais complexo. Os programas de reconhecimento em imagens são específicos, buscando apenas padrões dentro de um certo contexto. Por exemplo, programas de reconhecimento facial não irão reconhecer uma paisagem ou uma casa. Além do mais, não existem softwares com estes recursos disponíveis para os usuários, o sistema operacional não traz isso, nem o Photoshop e o Corel Draw fazem isso. Para procurar uma imagem entre outras, a única forma é a busca com os próprios olhos. Abrem-se as imagens uma a uma para ver se é a que procura ou não.

O procedimento mais ágil de buscar imagens é exibi-las na forma de thumbnails. Os thumbnails são versões de tamanho reduzido das imagens, usados para ajudar no reconhecimento e organização. O mecanismo de busca do Google, na pesquisa de imagens, retorna uma página com os thumbnails. Os sistemas operacionais, por seus gerenciadores de arquivos, são capazes de exibir as miniaturas das imagens contidas em uma pasta. A ação de enxergar as imagens torna-se muito mais rápida.

Existem diversos softwares que podem gerar miniaturas de imagens, seja pra somente exibir em tela ou pra salvar os arquivos de tamanho reduzido. Eu particularmente utilizo um script pra ser executado no interpretador de comandos do Linux. Este script (seu código fonte está ao final deste artigo) faz uma varredura por todos os diretórios e subdiretórios, buscando arquivos com as principais extensões de arquivos de imagem. Depois gera as miniaturas e grava em outro local, além de gerar uma página em HTML com uma tabela para exibição dos thumbnails. Voltando ao início deste artigo, este script é para ser aplicado em mídias de backup, em meus CDs e DVDs. Mas nada impede de ser adaptado para outros locais de armazenamento.

Assim mantenho, em meu computador, uma pasta com todos os thumbnails das imagens que tenho em mídias óticas. Quando preciso localizar alguma, vasculho pelas miniaturas e descubro em qual CD/DVD está.

Eis o código fonte do script. Sugestões são sempre bem-vindas. Segue o conteúdo do arquivo "gerathumb.sh":


#!/bin/bash
#

CONT=1
COL=5
PER=$((100/COL))

[ $# -eq 0 ] && {
  echo "Gera thumbnails das imagens de um CD ou DVD."
  echo "Uso: gerathumb ### caminho"
  echo
  echo "   ###          numero do CD."
  echo "   caminho      local de montagem do CD."
  echo
  echo "Exemplo: gerathumb 034 /media/30082006/"
  exit 1
}

  if [ ! -e disco$1 ] && ln -s $2 disco$1 ; then
    if [ ! -f disco$1.html ] && [ > disco$1.html ] ]; then
      if mkdir disco-$1; then

        DISPOSITIVO=`mount | grep ${2%%?} | awk '{print $1}'`
        CDLABEL=`dd if=$DISPOSITIVO ibs=1 skip=32808 count=32 2>/dev/null`

        echo -e "<html>\n<head>\n<title>Imagens em disco$1</title>\n</head>\n<body>" > disco$1.html
        echo -e "<h2>Imagens em disco$1</h2>\n<p>\n<h4>Label do CD/DVD: ${CDLABEL%%  *}</h4>\n<hr>" >> disco$1.html
        echo "<table border=0 align=center width=100% cellspacing=2 cellpadding=2>" >> disco$1.html

        while read IMAGEM
        do

          NOME=`echo "${IMAGEM}" | sed 's/.*\///g'`
          NOMEURL=`echo "${NOME}" | sed 's/ /%20/g'`
          LOCAL=`echo "${IMAGEM}" | sed 's/^.\{2\}//; s/\//\/ /g; s/_/ /g; s/-/ /g'`

          if [ $CONT -eq 1 ]; then
            echo "<tr>" >> disco$1.html
          fi

          echo "<td align=center valign=top width=$PER%><img src=disco-$1/${NOMEURL}.jpg><br clear=all><font size=2 face=Arial>${LOCAL}</font></td>" >> disco$1.html

          if [ $CONT -eq $COL ]; then
            echo "</tr>" >> disco$1.html
            CONT=1
          else
            CONT=$((CONT+1))
          fi

          convert -thumbnail 180x180 -compress JPEG -quality 50 -delete 1--1 "$IMAGEM" disco-$1/"$NOME".jpg

        done < <(find ./disco$1/ -regextype posix-egrep -iregex '.*\.(jpg|jpeg|gif|png|tif|tiff|bmp|svg)' -type f -print)

        if [ $CONT -ne 1 ]; then
          for ((  i = $CONT;  i <= $COL;  i++  ))
          do
            echo "<td>&nbsp;</td>" >> disco$1.html
          done
          echo "</tr>" >> disco$1.html
        fi

        echo -e "</table>\n<hr>\n</body>\n</html>" >> disco$1.html
        rm -f disco$1
        echo -e "\nFeito!\n"

      else
        echo $?
        echo "Falha na criacao do diretorio."
        rm -f disco$1 disco$1.html
        exit
      fi
    else
      echo "Falha na criacao do arquivo HTML."
      rm -f disco$1
      exit
    fi
  else
    echo $?
    echo "Falha na criacao da ligacao."
    exit
  fi

terça-feira, 20 de novembro de 2012

Revista do Linux, em 50 edições

Há 13 anos, em Novembro de 1999, foi lançada a primeira revista da comunidade Linux brasileira. A Revista do Linux foi editada pela Conectiva Informática, empresa que desenvolveu a primeira distribuição do sistema operacional Linux fora dos Estados Unidos e Europa.

A Revista do Linux veio com a proposta de promover o uso do Linux e suprir a falta de literatura de apoio ao Linux em português. Possuía seções específicas para cada público, com artigos técnicos de alto nível, análise de aplicativos, notícias, curiosidades, entrevistas e tutoriais. Como estímulo a experimentação dos produtos, a revista vinha acompanhada de um CD como brinde, por edição, com aplicativos desenvolvidos para Linux ou até distribuições Linux completas.


Capa das edições 1 a 10

A periodicidade foi inicialmente bimestral, a edição número 1 foi lançada em Novembro/Dezembro de 1999, em tiragem de 30 mil exemplares e distribuída em todo território nacional. Entretanto, já na quarta edição, em Abril de 2000, a periodicidade tornou-se mensal, graças ao rápido sucesso obtido entre os leitores.


Capa das edições 11 a 20

Na edição número 20, de Agosto de 2001, a revista ganhou um novo logo de capa, além de mais informação e fácil leitura. Foram realizados estudos e investimentos na área editorial, modernizando o aspecto gráfico da Revista do Linux. A Revista do Linux sempre buscou o aprimoramento do seu conteúdo.


Capa das edições 21 a 30

A Revista do Linux entrevistou personalidades importantes do mundo Linux, incluindo Alan Cox, Eric Raymond, Patrick Volkerding, Linus Torvalds, Marcelo Tosatti (mantenedor do Kernel 2.4), Sandro Nunes Henrique (presidente da Conectiva) e Arnaldo Carvalho de Melo (um dos principais desenvolvedores do Kernel 2.6). No CD do mês trouxe distribuições de peso como Slackware, SUSE, Debian e, obviamente, muitas edições do Conectiva Linux. Os usuários do Conectiva Linux frequentemente eram presenteados com CDs do Conectiva Linux em edições especiais com pacotes atualizados.


Capa das edições 31 a 40

Em Julho de 2002, a edição número 31 trouxe uma triste notícia para os leitores gaúchos. A Revista do Linux deixaria de ser vendida nas bancas do Rio Grande do Sul, devido ao CD encartado como brinde e a legislação tributária do Estado. Esta mesma notícia retornou em Maio de 2003, na edição 41. Foi a vez do Distrito Federal inviabilizar a circulação da Revista do Linux, a revista então deixou de circular nas bancas do DF, também devido ao CD encartado como brinde e a legislação tributária.


Capa das edições 41 a 50

A Revista do Linux encerrou suas atividades em Março de 2004, sendo a edição número 50, de Fevereiro de 2004, a última edição que circulou nas bancas. Os motivos do fim da revista foram a queda da receita vinda das propagandas e também a queda nas vendas nas bancas. Uma pena, pois a Revista do Linux estava contribuindo bastante com informação especializada.

O conteúdo das 44 primeiras edições da Revista do Linux podem ser acessados pelo endereço http://augustocampos.net/revista-do-linux/. As artes gráficas das capas das 19 primeiras edições podem ser vistas neste endereço http://stulzer.net/blog/2008/04/11/as-capas-originais-das-primeiras-edicoes-da-revista-do-linux/.

Eu, usuário avançado e entusiasta de Linux desde 1998, tive uma pequena dica publicada na Revista do Linux, na edição número 19 de Julho de 2001, na página 65. Na época, eu mantinha um site com dicas sobre Linux e uma delas foi aproveitada na edição da revista. Ainda está aqui: http://augustocampos.net/revista-do-linux/019/dicas.html

No mesmo ano de seu fim, em Agosto de 2004, foi lançada a primeira edição da Linux Magazine brasileira, uma revista de origem europeia a qual existe até hoje.

domingo, 18 de novembro de 2012

A Escala do Universo

Existem muitas ilustrações que nos mostram as diferenças de tamanho entre alguns objetos. Aqui mesmo neste blog existe uma postagem comparando o tamanho dos astros (veja em: http://dan-scientia.blogspot.com.br/2009/07/comparando-o-tamanho-dos-astros.html) e outra com o quanto grande é o Sol (veja em: http://dan-scientia.blogspot.com.br/2009/07/o-quanto-grande-e-o-sol.html). Mas encontrei uma ilustração que é muito interessante.

No website HTwins.net, de propriedade dos irmãos gêmeos Cary Huang e Michael Huang, existe uma animação flash interativa desenvolvida por eles mesmos que permite realizar um zoom entre o menor objeto existente, isso em níveis quânticos, ao maior objeto existente, o nosso próprio Universo. A cada nível de zoom são mostrados alguns objetos que estão dentro da respectiva escala.

Intitulada "The Scale of the Universe 2", a animação pode ser acessada pelo endereço http://htwins.net/scale2/, com o texto em inglês. Há também uma versão multi-lingual pelo endereço http://htwins.net/scale2/lang.html, onde existe tradução para a língua portuguesa.

A animação é interativa, podemos alterar o nível de zoom clicando na barra de rolagem horizontal, na parte inferior. O nível inicia com a visão do corpo humano e alguns objetos da nossa escala. Deslizando o botão para a esquerda a visão se aproxima dos objetos menores e para a direita a visão se afasta, permitindo enxergar os objetos maiores.

É impressionante como em nosso Universo existem objetos tão distantes em escala. Como existem objetos tão minúsculos e como nosso Universo é vasto. Foi uma ótima ideia desenvolver esta animação.

segunda-feira, 12 de novembro de 2012

As versões do Android

Neste mês de Novembro o Android completou 5 anos de existência, o qual teve início com o lançamento da versão beta em 5 de Novembro de 2007. Inicialmente era desenvolvido pela empresa Android Inc, mas até então não tinha sido revelado ao mundo. Em 2005 o Google comprou a Android Inc, em 2007 foi fundada a Open Handset Alliance, uma aliança de importantes empresas, incluindo Google, Motorola, HTC, Asus, LG, Samsung, Sony etc. que anunciaram uma plataforma livre para dispositivos móveis e assim iniciou-se oficialmente o desenvolvimento do Android.

As versões e os lançamentos do Android tem crescido vertiginosamente desde a primeira versão comercial, o Android 1.0, lançada em Setembro de 2008. Trazendo melhorias nas funcionalidades para o usuário e novas tecnologias para a plataforma. A partir da versão 1.5, o Android vem recebendo codinomes, com nomes de sobremesa e estes codinomes vem se alterando em ordem alfabética.

A plataforma Android proporciona um framework de interface de programação de aplicativos que as aplicações usam para interagir com a camada inferior do sistema Android. Cada nova versão da plataforma Android costuma incluir atualizações para a API. As APIs são especificadas por um identificador de número inteiro denominado "nível da API". Cada nova versão do Android suporta exatamente um nível da API, entretanto as API são desenvolvidas para serem compatíveis com as versões anteriores. O primeiro lançamento da plataforma Android forneceu o nível 1 da API e as versões seguintes foram incrementando o nível.

O sistema operacional Android conta com o núcleo Linux para centralizar os serviços do sistema, na segurança, no gerenciamento de memória e processos, na rede e nos drivers. O kernel atua como uma camada abstrata entre o hardware e a pilha de software. De certa forma, as versões do kernel utilizadas no Android acompanham a evolução do Linux.

A seguir os principais lançamentos da plataforma Android, com informações da data de lançamento, codinome, versão do kernel e nível da API:

Android Beta

Data de Lançamento: 5 de Novembro de 2007
Codinome: Não possui
Versão do Kernel: 2.6
Nível da API: Não possui


Android 1.0

Data de Lançamento: 23 de Setembro de 2008
Codinome: Não possui
Versão do Kernel: 2.6
Nível da API: 1


Android 1.1

Data de Lançamento: 9 de Fevereiro de 2009
Codinome: Petit Four (não oficial)
Versão do Kernel: 2.6.27
Nível da API: 2


Android 1.5 Cupcake

Data de Lançamento: 30 de Abril de 2009
Codinome: Cupcake
Versão do Kernel: 2.6.27
Nível da API: 3


Android 1.6 Donut

Data de Lançamento: 15 de Setembro de 2009
Codinome: Donut
Versão do Kernel: 2.6.29
Nível da API: 4


Android 2.0-2.1.x Eclair

Data de Lançamento: 26 de Outubro de 2009
Codinome: Eclair
Versão do Kernel: 2.6.29
Nível da API: 5 (2.0), 6 (2.0.1), 7 (2.1.x)


Android 2.2.x Froyo

Data de Lançamento: 20 de Maio de 2010
Codinome: Froyo
Versão do Kernel: 2.6.32
Nível da API: 8


Android 2.3.x Gingerbread

Data de Lançamento: 6 de Dezembro de 2010
Codinome: Gingerbread
Versão do Kernel: 2.6.35
Nível da API: 9 (2.3-2.3.2), 10 (2.3.3-2.3.4)


Android 3.x Honeycomb

Data de Lançamento: 22 de Fevereiro de 2011
Codinome: Honeycomb
Versão do Kernel: 2.6.36
Nível da API: 11 (3.0.x), 12 (3.1.x), 13 (3.2)


Android 4.0.x Ice Cream Sandwich

Data de Lançamento: 19 de Outubro de 2011
Codinome: Ice Cream Sandwich
Versão do Kernel: 3.0.1
Nível da API: 14 (4.0-4.0.2), 15 (4.0.3-4.0.4)


Android 4.1-4.2 Jelly Bean

Data de Lançamento: 27 de Junho de 2012
Codinome: Jelly Bean
Versão do Kernel: 3.0.31
Nível da API: 16 (4.1-4.1.1)


Atualmente, quase todas as versões da plataforma Android ainda estão em uso, pois alguns dispositivos antigos ainda estão em funcionamento. Abaixo uma distribuição de uso dentre as versões, atualizada em Novembro de 2012. A versão 2.3 é bastante utilizada, e isto faz com que os desenvolvedores de aplicativos mantenham a compatibilidade para esta plataforma, para assim atingir o maior número de dispositivos:

Versão           Codinome              Distribuição

4.1              Jelly Bean             2.7%
4.0.3 - 4.0.4    Ice Cream Sandwich    25.8%
3.2              Honeycomb              1.4%
3.1              Honeycomb              0.4%
2.3.3 - 2.3.7    Gingerbread           53.9%
2.3 - 2.3.2      Gingerbread            0.3%
2.2              Froyo                 12.0%
2.1              Eclair                 3.1%
1.6              Donut                  0.3%
1.5              Cupcake                0.1%