sábado, 22 de dezembro de 2012

Pequena pausa

Vem as férias e a atividade online cai um bom bocado. Mas sempre acontece algo semelhante assim:


Boas festas à todos!

Conversão de grau decimal e sexagesimal

A posição de um ponto na superfície terrestre pode ser expressa pelas coordenadas geográficas. A latitude, que vai de zero à 90 graus, e a longitude, que vai de zero à 180 graus, possui basicamente duas notações, o grau em notação decimal ou o grau em notação sexagesimal.

A notação decimal é a forma numérica na qual estamos mais acostumados, o grau pode ser expresso por um número não inteiro. Um exemplo, no caso uma latitude, é -23,62463499 graus, um simples número decimal. O sinal negativo indica a latitude Sul, se fosse longitude indicaria o Oeste.

A notação sexagesimal é dada, em uma forma bem precisa, em grau, minuto e segundo. Com os minutos e segundos indo de zero à 60. Esta última unidade de medida, em segundo, pode receber um número não inteiro, e da mesma forma o minuto, caso se omita a unidade de segundo. A latitude e longitude para a notação sexagesimal é comumente indicada pelas letras de Norte-Sul-Leste-Oeste, ao invés do sinal negativo ou positivo. Um exemplo de latitude é 23° 37' 28,686" S.

É possível converter os números dentre as notações de grau decimal e sexagesimal. A notação decimal é facilmente obtida a partir da notação sexagesimal com o uso da seguinte fórmula:

grau + minuto/60 + segundo/3600

Exemplo:

Notação sexagesimal dada: 23° 37' 28,686" S

23 + 37/60 + 28,686/3600 = -23,624635°

(Para a latitude Sul e a longitude Oeste o resultado deve receber o sinal negativo.)


Inversamente, o grau em notação sexagesimal é obtido a partir da notação decimal com os seguintes cálculos:

1) O grau é obtido com o valor absoluto da notação decimal, somente a parte inteira.

2) O minuto é obtido com o valor absoluto da parte fracionária da notação decimal multiplicado por 60, pegando somente a parte inteira deste resultado.

3) O segundo é obtido com o valor absoluto da parte fracionária da notação decimal multiplicado por 60, e multiplicando a parte fracionária deste resultado por 60.

Exemplo:

Notação decimal dada: -23,62463499°

1) 23°

2) 0,62463499 x 60 = 37,4780994  portanto 37'

3) a) 0,62463499 x 60 = 37,4780994
   b) 0,4780994 x 60 = 28,685964"

Portanto 23° 37' 28,686" S

(Se o valor da notação decimal é negativo então a latitude será Sul ou a longitude será Oeste.)

Sugestão de leitura. Saiba como calcular a distância entre coordenadas geográficas lendo o artigo em: http://dan-scientia.blogspot.com.br/2009/05/distancia-entre-coordenadas-geograficas.html

Atributos de arquivo e diretório no Linux

Os sistemas de arquivos da família Second Extended, disponíveis para o sistema operacional Linux, suportam alguns atributos para os arquivos e diretórios. Estes atributos possibilitam um controle no acesso. Por exemplo, alguns controles de:

- não atualizar a hora de acesso
- somente gravação incremental
- imutável
- remoção segura

Dois comandos são usados para listar ou alterar os atributos, respectivamente 'lsattr' e 'chattr'. Alguns atributos só podem ser alterados pelo superusuário. O atributo imutável é um deles. Estes comandos são similares ao comando 'attrib' dos sistemas DOS e Windows.

O comando 'lsattr' lista os atributos do arquivo em um sistema de arquivos Second Extended. Sua sinopse é:

lsattr [opção]... [arquivo]...

As principais opções são:

-R  lista recursivamente os diretórios e seus conteúdos
-a  lista todos os arquivos, incluindo arquivos que começam com '.'
-d  lista os diretórios como arquivos, ao invés de listar seus conteúdos


Exemplo de linha de comando:

# lsattr -R /home/usuario

O comando 'chattr' altera os atributos do arquivo em um sistema de arquivos Second Extended. Sua sinopse é:

chattr [opção]... +-=[acdeijstuADST] arquivo...

A principal opção é:

-R  altera recursivamente os diretórios e seus conteúdos

O operador '+' adiciona o atributo especificado aos atributos existentes no arquivo. O operador '-' remove o atributo e o operador '=' torna o atributo especificado sendo o único no arquivo.

As letras 'acdisuADS' especificam os novos atributos para os arquivos e diretórios:

a - somente gravação incremental
c - compactados
d - sem backup pelo dump
i - imutável
s - remoção segura
u - não removível (recuperável)
A - não atualiza a hora de acesso
D - atualização sincronizada em diretórios
S - atualização sincronizada (não tem efeito em diretórios)


O exemplo a seguir adiciona o atributo imutável, que protege o arquivo contra escrita e remoção:

# chattr +i arquivo

Este último atributo já foi demonstrado em um outro artigo neste blog, em uma dica de proteção de arquivos, veja em: http://dan-scientia.blogspot.com.br/2009/07/protegendo-arquivos-importantes-no.html

Problema de Lógica: Quem é no parentesco?

Se:

Filho é igual a A
Pai é igual a B
Mãe é igual a C
Avô é igual a D
Tio é igual a E

Pergunta-se:

Quem é o A do B da C do A?





RESPOSTA





A pergunta é: Quem é o filho do pai da mãe do filho?
A resposta é o tio. O pai da mãe é o avô do filho, o filho do avô é o tio do filho da mãe.

Edições especiais Fronteiras da Física

"Explore a complexidade da mecânica quântica, o fascínio das altas energias, os mistérios da cosmologia, as fronteiras da astrofísica e as novas e surpreendentes descobertas da ciência planetária com a série em cinco volumes Fronteiras da Física...", é com este estrondoso anúncio que a revista Scientific American Brasil lançou mais uma coleção de edições especiais com assuntos relacionados à física.

O primeiro número trouxe como matéria principal o artigo "Os primeiros microssegundos do Universo", que relata os experimentos em acelerador de partículas para o entendimento do Big Bang. O segundo número vem em destaque com o artigo "Quando campos colidem", que exprime a história da cosmologia de partículas no estudo das origens do Universo. O terceiro número vem em destaque com o artigo "A misteriosa origem das explosões solares" e diversos artigos sobre as estrelas. O quarto número tem como destaque o artigo "O Universo está perdendo energia?", tratando da energia escura, matéria escura e buracos negros. Por fim, o quinto número vem em destaque com o artigo "Existe mesmo uma energia escura? e outros artigos que relatam as teorias alternativas para a composição do Universo.



Os números desta coleção foram lançados a cada duas semanas e o último número veio às bancas nesta última semana. A Scientific American é uma excelente revista de divulgação científica e seus artigos são de ótima qualidade. Não é uma revista dedicada à física mas a toda ciência, entretanto sempre lança edições com temas de física e, mais especificamente, de cosmologia.

domingo, 9 de dezembro de 2012

Falha de EOL em verificação de hash

Quem utiliza o sistema Linux no dia a dia e costuma verificar a integridade de arquivos através de comparações com hash, seja MD5, SHA etc. em suas respectivas ferramentas para linha de comando, provavelmente já presenciou falhas em determinadas verificações.

Os sistemas operacionais não adotam a mesma convenção para os caracteres que marcam o fim-de-linha (EOL) em arquivos de texto puro. Principalmente entre os sistemas DOS/Windows e Unix/Linux.  Como o arquivo de hash é um arquivo no formato texto, está sujeito a esta diferença em sua estrutura, caso ele tenha sido criado em um sistema ou no outro.

Ao ler um arquivo de hash, criado em um sistema Windows, ou seja, com o fim-de-linha adotado no sistema Windows, em uma ferramenta de linha de comando no Linux, haverá falha na busca do arquivo principal, o qual se pretende verificar a integridade. Algo como apresentado no exemplo a seguir:

$ sha1sum -c FreeOTFE_5_21.sha1

: Arquivo ou diretório não encontrado
: FALHOU na abertura ou na leitura
sha1sum: WARNING: 1 listed file could not be read



A solução, no sistema Linux, é converter o arquivo de hash para o formato do Unix. O comando 'dos2unix' serve para isso:

$ dos2unix FreeOTFE_5_21.sha1

dos2unix: converting file FreeOTFE_5_21.sha1 to Unix format ...



Feito isso, a verificação da integridade provavelmente não terá mais esta falha na busca do arquivo principal:

$ sha1sum -c FreeOTFE_5_21.sha1

FreeOTFE_5_21.exe: SUCESSO



Claro que o erro da integridade ainda poderá ocorrer, visto que neste caso é o arquivo principal que estará corrompido. Importante salientar que esta não é a única falha que pode ocorrer na interpretação do arquivo de hash. Algumas ferramentas de geração de hash produzem arquivos de hash com informações adicionais incluídas junto com a sequência hash, ou também em posições invertidas entre a sequência e o caminho pro arquivo principal. Tudo isso pode gerar falha na busca do arquivo. Casos assim deverão ser tratados particularmente.

Leia mais sobre EOL em http://dan-scientia.blogspot.com.br/2009/07/historia-do-fim-de-linha.html

sexta-feira, 7 de dezembro de 2012

Consoles virtuais no Linux

Um console virtual, ou terminal virtual, é uma combinação conceitual de um dispositivo de entrada (teclado) e um dispositivo de saída (monitor) para interface usuário-computador. É uma funcionalidade de alguns sistemas operacionais como Unix, BSD e Linux, onde o usuário pode trocar de terminal, abrindo outra interface, estando no mesmo terminal físico.

No Linux, por padrão, os seis primeiros consoles virtuais são para terminais em modo texto e do sétimo console virtual em diante são para terminais em modo gráfico. Quando o usuário inicia o sistema Linux, em modo texto ou modo gráfico, e se loga, ele está conectado ao primeiro console virtual disponível. Mas os outros consoles também estão prontos para serem usados.

Para conectar-se a um outro console, mantenha pressionada a tecla Alt à esquerda enquanto pressiona uma das teclas de função, de F1 à F6. A cada tecla de função, uma nova tela com um prompt de conexão é apresentado. É possível manter-se conectado a vários consoles e ir trocando entre eles.

Para alternar entre os consoles virtuais, no ambiente modo texto usa-se a mesma combinação de teclas Alt + Fn. No ambiente gráfico do X Window usa-se a combinação Ctrl + Alt + Fn. De uma outra forma, a combinação Alt + Seta pra Esquerda alterna para o console virtual anterior e a combinação Alt + Seta pra Direita alterna para o próximo console virtual.

Os consoles ativos são especificados pelo arquivo de configuração '/etc/sysconfig/init'. O comando 'tty' retorna o nome do terminal em que está conectado.

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%

quarta-feira, 31 de outubro de 2012

Redes Neurais Artificiais

As redes neurais artificiais (RNA) são, como seu nome indica, redes computacionais que simulam, a grosso modo, a rede de células nervosas (neurônios) de um sistema nervoso central biológico, seja humano ou animal. Esta simulação é basicamente uma simulação célula por célula, isto é, neurônio por neurônio (GRAUPE, 2007).

O primeiro interesse em redes neurais emergiu após a introdução simplificada de neurônios por McCulloch e Pitts em 1943. Estes neurônios foram apresentados como modelos de neurônios biológicos e como componentes conceituais para circuitos que podiam realizar tarefas computacionais (KROSE & SMAGT, 1996).

As redes neurais artificiais (RNA) podem ser caracterizadas como um modelo computacional, com propriedades particulares incluindo a habilidade de se adaptar e aprender, organizar dados agrupando-os e operações baseadas em processamento paralelo (KROSE & SMAGT, 1996).


Fundamentos Matemáticos

Muitos esforços foram feitos no intuito de se modelar os neurônios biológicos, entretanto, o que se conseguiu até hoje foi uma aproximação elementar. A fórmula abaixo representa um neurônio artificial (ZURADA, 1992; VIEIRA & ROISENBERG, 2004):

neti = Σ uj wij

Neste modelo proposto, o neurônio artificial possui entradas uj que recebem as saídas de outros neurônios. Estas entradas são ponderadas pelos pesos wij, que são inspirados na força da conexão sináptica, da conexão sináptica do neurônio i para o neurônio j. Assim tem-se o chamado net do neurônio, que é o somatório de todas as entradas multiplicadas pelos seus respectivos pesos (VIEIRA & ROISENBERG, 2004).


Modelos de Aprendizagem

Uma rede neural artificial tem dois elementos básicos: a arquitetura e o algoritmo de aprendizagem. Esta divisão surge porque a rede necessita ser treinada. O conhecimento sobre o problema está armazenado dentro dos exemplos disponíveis na rede (RAUBER, 1997).

A composição da rede é feita pelos neurônios. O tipo de processamento de um único neurônio é a combinação linear das entradas com os pesos seguida pela passagem da combinação linear por uma função de ativação. A natureza do problema a ser resolvido define restrições em relação aos tipos de redes e algoritmos de aprendizagem possíveis (RAUBER, 1997).

Uma principal distinção em relação ao paradigma de aprendizagem são a aprendizagem supervisionada e aprendizagem não-supervisionada. Na aprendizagem supervisionada cada exemplo de treino está acompanhado por um valor que é o valor desejado. Quando não se sabe os atributos estatísticos relevantes das correlações entre os exemplos de treinos, sendo esta a tarefa de aprendizagem, temos a aprendizagem não-supervisionada (RAUBER, 1997).


Tipos de Redes Neurais Artificiais

Um sistema dinâmico complexo é uma rede de sistemas interconectados. Este sistema complexo pode ser representado por um grafo direcionado, ou dígrafo, onde os vértices representam os componentes, e seguem os conceitos da Teoria dos Grafos. Uma rede neural artificial (RNA) é um sistema dinâmico complexo representado por um grafo em que cada vértice é um neurônio artificial (BARRETO, 2002).

Os tipos de redes neurais artificiais são definidas através de escolhas dos conjuntos e funções envolvidas na definição de redes neurais como sistemas dinâmicos. Tendo assim uma rede neural contínua no tempo, discreta no tempo e invariante no tempo (BARRETO, 2002).

Uma rede neural contínua no tempo é uma rede neural definida em um subconjunto contínuo do eixo do tempo T = R. Uma rede neural discreta no tempo é uma rede neural definida em um subconjunto discreto do eixo do tempo T = Z. E uma rede neural invariante no tempo é uma rede neural em que a função de transição depende de um único elemento de T e a função de saída é independente de T (BARRETO, 2002).

Sobre a forma de como os neurônios se interligam, as redes neurais artificiais podem ser diretas ou recorrentes, onde a principal diferença é que nas redes diretas os neurônios não recebem retroalimentação em suas entradas, ou seja, o grafo não tem ciclos, e nas redes recorrentes existe pelo menos um ciclo de retroalimentação, onde algum neurônio fornece o seu sinal de saída para a entrada de outro neurônio (VIEIRA & ROISENBERG, 2004; ROJAS, 1996).


Redes Auto-organizáveis

A Teoria de Ressonância Adaptativa (ART) foi originada para o propósito de desenvolver redes neurais artificiais onde as maneiras de performance, especialidade de reconhecimento de padrão ou tarefas de classificação, fossem próximas de uma rede neural biológica. Desta forma, as redes ART não precisam de aprendizados mas de funções não-supervisionadas em redes auto-organizáveis (GRAUPE, 2007).

As redes ART consistem em duas camadas, sendo a camada de comparação e a camada de reconhecimento, as quais são interconectadas. A camada de reconhecimento serve como uma camada de classificação (GRAUPE, 2007).

As redes treinadas sem um aprendizado usualmente aprendem pela comparação de critérios explícitos. Estas redes podem produzir uma saída onde diz o quão familiar é com o padrão presente. Estes tipos de redes podem adaptar-se durante o processo denominado auto-organização (ZURADA, 1992).


Redes Construtivas

Uma rede construtiva é composta de métodos que começam com uma arquitetura mínima de rede e adicionam neurônios até que uma solução adequada seja encontrada. A determinação da arquitetura de rede inicial nestes métodos é imediata (CASTRO et al., 1999).

Os algoritmos construtivos resultam em um menor esforço computacional. Redes com dimensões reduzidas efetuam os passos forward e backward, necessários no processo de treinamento, com menor esforço computacional e podem ser descritas utilizando um conjunto menor de parâmetros. O papel de cada neurônio torna-se mais evidente (CASTRO et al., 1999).


Algoritmos de Redes Neurais

Um importante aspecto em redes neurais é a definição das conexões entre os elementos e a definição dos pesos associados a estas conexões. A informação armazenada e a computação realizada por uma determinada rede neural são definidas mais pela topologia de conexões e pelos pesos atribuídos que propriamente pelos elementos individualmente (HERNANDEZ, 2005).

Estas conexões entre os neurônios artificiais de uma rede são normalmente programáveis, onde existe algum mecanismo de aprendizado, através do qual a rede incorpora experiência a partir de exemplos que lhe são apresentados. Isto é interessante para a solução de problemas cuja especificação não é suficientemente estruturada, o que dificulta a sua representação em uma forma algorítmica (HERNANDEZ, 2005).

Diversos métodos de aprendizado foram desenvolvidos, sendo que os algoritmos de aprendizado supervisionado possuem o mais fácil entendimento. Neste tipo de aprendizado, as informações são apresentadas à rede sob a forma de padrões de entrada e dos resultados correspondentes desejados, conhecidos previamente. O algoritmo verifica as saídas geradas, para os padrões de entrada dos exemplos de treinamento, e as compara com as saídas desejadas, orientando assim o ajuste nas conexões sinápticas de forma a minimizar a diferença entre saída desejada e saída oferecida pela rede (HERNANDEZ, 2005).

O ajuste sináptico procura corrigir os pesos de modo que se produza a saída desejada diante da respectiva entrada, representando assim o aprendizado, em cada neurônio, do fato apresentado. Desta forma, pode-se dizer que ao final do processo de aprendizado, o conhecimento dos neurônios da rede neural reside nos pesos sinápticos (HERNANDEZ, 2005).


Aplicações de Redes Neurais

Atualmente as aplicações das redes neurais artificiais estão invadindo todos os domínios, desde as primeiras que realizavam reconhecimento de padrões até distribuição de energia elétrica, mercado de capitais, aplicações navais e sistemas especialistas (BARRETO, 2002).

O reconhecimento de padrões é uma das primeiras aplicações de redes neurais. O reconhecimento de padrões tenta imitar as capacidades cognitivas dos seres vivos, incluindo reconhecimento de rosto, cheiro, caligrafia, caracteres etc. Isto pode ser atribuído a um sistema bastante desenvolvido de reconhecimento de padrões (ZURADA, 1992; BARRETO, 2002).

Uma aplicação de redes neurais artificiais à séries temporais bastante útil é a previsão de mercado de capitais. Uma rede é treinada com valores de uma série temporal que ocorreram em um determinado intervalo de tempo e com saída como sendo um valor futuro da série (BARRETO, 2002).

As redes neurais podem ser aplicadas na solução de problemas de controle robótico, com funções especializadas em movimentos robóticos. Estes modelos de redes neurais são desenvolvidas para solucionar problemas da cinemática de robôs, na geometria dos movimentos dos manipuladores dos membros robóticos (ZURADA, 1992).

Na medicina, um sistema de redes neurais artificiais pode resolver o problema da ventilação mecanicamente assistida. A ventilação mecânica requer a avaliação da capacidade do paciente de continuar respirando sem auxílio. Retirar o auxílio prematuramente pode levar ao sofrimento do paciente, enquanto deixar tempo a mais representa gasto desnecessário do recurso. A observação por um médico pode ser menos confiável que um sistema de redes neurais (VIEIRA & ROISENBERG, 2004).


Solução de Problemas

A inteligência artificial serve para resolver problemas, imitando de uma certa forma a inteligência dos seres vivos. Um problema é o objeto matemático, consistindo de dois conjuntos não vazios, os dados e os resultados possíveis e de uma relação binária que caracteriza uma solução satisfatória (BARRETO, 2002).

Determinados problemas podem ter sua solução da forma de uma função, onde implementando esta função tem-se a solução do problema. Este fato leva à programação funcional e é a base da abordagem conexionista (BARRETO, 2002).

Um computador pode ser considerado como uma máquina de resolver problemas. Em um neurocomputador tem-se a rede de neurônios com entradas e saídas, um meio de fixar os pesos das conexões usando um algoritmo de aprendizagem e usar a rede já educada para resolver o problema com os dados a serem usados na entrada da rede (BARRETO, 2002). Um neurocomputador é um sistema computacional com uma arquitetura de hardware e software adequada para a execução de algoritmos presentes na base lógica das redes neurais (GALUSHKIN, 2007).


Pré-Processamento de Dados

Uma rede neural pode ser usada para mapear os dados crus de entrada diretamente para os valores finais requeridos, entretanto isto pode gerar resultados infelizes. Em muitas aplicações é necessário primeiro transformar os dados em algo novo antes de treinar a rede neural. Esta otimização dos dados é denominada pré-processamento e determina a performance do sistema final (BISHOP, 1995).

Pré-processamentos complexos podem envolver na redução da dimensão dos dados de entrada. Esta redução pode proporcionar uma melhoria na performance já que a informação tende a diminuir. É uma das mais importantes formas de pré-processamento (BISHOP, 1995).


Pós-Processamento de Dados

Similarmente, a saída da rede neural é frequentemente pós-processada para obtenção dos valores de saída requeridos. Da mesma forma, o pós-processamento consiste em transformações simples nos dados (BISHOP, 1995).

Em aplicações que envolvem aprendizado, cada novo dado necessita ser pré-processado antes de ser passado à rede neural. Se o pós-processamento está sendo utilizado, então os dados alvos precisam ser transformados usando o inverso do pós-processamento para gerar os valores de saída corretos. Quando os dados são processados por uma rede treinada, é necessário primeiro passá-los pelo estágio de pré-processamento, seguido pela rede e finalmente pela transformação pós-processada (BISHOP, 1995).


Conclusão

O campo de aplicação das RNAs é amplamente vasto e suas aplicações vem acontecendo há muito tempo. As redes neurais artificiais são um assunto bem antigo e, ao mesmo tempo, bastante novo. Há décadas elas são estudadas e até hoje elas são um desafio para a humanidade. Diversos profissionais estão sendo atraídos pelas aplicações das RNAs.

As redes neurais artificiais possuem uma grande vantagem como algoritmos de resolução de problemas pois possuem a capacidade de adaptar-se e aprender para buscar a melhor solução. Elas também podem imitar a capacidade cognitiva do ser humano, desempenhando um papel importante no reconhecimento de dados.

Pode-se concluir que um sistema de inteligência artificial deve incorporar uma rede neural artificial para que se aproxime do intelecto humano. A robótica faz e fará grande uso das RNAs. O futuro da tecnologia e da computação com certeza está relacionado ao sucesso das redes neurais artificiais.

REFERÊNCIAS

BARRETO, J.M. Introdução às Redes Neurais Artificiais, Laboratório de Conexionismo e Ciências Cognitivas, Universidade Federal de Santa Catarina, 2002.

BISHOP, C.M. Neural Networks for Pattern Recognition, Clarendon Press, Oxford, 1995.

CASTRO, L.N.; IYODA, E.M.; PINHEIRO, E.; ZUBEN, F.V. Redes Neurais Construtivas: Uma Abordagem Comparativa, IV Congresso Brasileiro de Redes Neurais, 1999.

GALUSHKIN, A.I Neural Networks Theory, Springer, 2007.

GRAUPE, D. Principles of Artificial Neural Networks, Advanced Series on Circuits and Systems – Vol. 6, World Scientific Publishing, 2nd Edition, 2007.

HERNANDEZ, E.D.M. Inteligência Computacional e Redes Neurais em Engenharia Elétrica, Departamento de Engenharia de Sistemas Eletrônicos, Universidade de São Paulo, 2005.

KROSE, B.; SMAGT, P. An introduction to Neural Networks, University of Amsterdam, 8th Edition, 1996.

RAUBER, T.W. Redes Neurais Artificiais, Encontro Regional de Informática, Sociedade Brasileira de Computação, 1997.

ROJAS, R. Neural Networks A Systematic Introduction, Springer, 1996.

VIEIRA, R.C.; ROISENBERG, M. Redes neurais artificiais: Um breve tutorial, Laboratório de Conexionismo e Ciências Cognitivas, Universidade Federal de Santa Catarina, 2004.

ZURADA, J.M. Introduction to Artificial Neural Systems, West Publishing Company, 1992.

terça-feira, 30 de outubro de 2012

Problema de Lógica: O Conselho de Sábios

Uma vez, em uma época, existiu um famoso sábio chamado Hasen Said. O povo o chamava de "o sábio dos sábios". Um dia, enquanto viajava pelo mundo, o sábio chegou à corte de um sultão, onde foi recebido com grande honra. O sultão o tratou com comida, apresentou-se e, em um dia, disse-lhe:

"Eu governo meu país com a ajuda do Conselho de Sábios, onde eu reúno os doze homens mais sábios do meu país. Contudo, poderia colocá-los em um teste, para que eles possam permanecer somente se forem dignos da honra que dou à eles?"

Hasen Said pensou um pouco e então disse:

"Tudo bem, reúna-os."

Quando todos os sábios estavam reunidos, Hasen disse-lhes:

"Oh, homens sábios, seu rei, o sultão, os reuniu para nos mostrar toda a sua sabedoria. Os servos colocaram uma caixa na frente de cada um de vocês. Todas estas caixas são idênticas. Aqui, na minha bolsa, eu tenho doze pedras preciosas. Algumas delas são esmeraldas, as outras são rubis. Eu convido cada um de vocês para saírem da sala, um por vez, enquanto eu coloco uma destas pedras na sua respectiva caixa, assim todos podem ver as pedras dos outros, mas não saberá qual a sua própria pedra."

E Hasen convidou o primeiro dos sábios para sair da sala. Ele colocou um rubi em sua caixa. Depois que o primeiro retornou, o segundo saiu e Hasen colocou uma esmeralda em sua caixa. Para o terceiro, ele colocou uma esmeralda. E assim por diante até o último. Quando o último sábio retornou, Hasen disse-lhes:

"Todos vocês viram as pedras dos outros, mas não sabem a sua própria pedra. Se você é sábio de fato e se você confia em sua mente e em seus olhos, nada o impede de você realizar o meu desejo. Todos que possuem esmeraldas, venham até aqui e coloquem a sua caixa aos pés do sultão."

Infelizmente, ninguém veio. O sultão ficou então furioso e ordenou que todos os seus sábios fossem banidos da corte, mas Hasen o deteve:

"Não aja precipitadamente, senhor. Eu também teria feito a mesma coisa."

Dez minutos depois, Hasen disse-lhes novamente:

"Todos que possuem esmeraldas, venham até aqui e coloquem a sua caixa aos pés do sultão!"

O mesmo silêncio, ninguém veio. Hasen repetiu o mesmo convite a cada dez minutos, e depois de uma hora, alguns dos sábios se levantaram e vieram para o sultão, que abriu suas caixas. Todas elas continham esmeraldas! Ele pediu para ver as caixas dos outros, onde todas tinham rubis. Temos que dizer que durante toda esta hora, os sábios não disseram nada, eles somente pensaram.

"Oh, senhor!", Hasen disse ao sultão, "Você pode se orgulhar do seu Conselho de Sábios. Eles são homens realmente sábios!" E dizendo-lhes adeus, deixou-os.

A história termina aqui, mas nós convidamos você a continuar, mostrando quantas esmeraldas Hasen havia colocado nas caixas dos sábios e como eles descobriram a pedra que possuíam...





RESPOSTA





A solução deste problema segue o conceito do conhecimento comum, que é a base da teoria dos jogos. Neste conceito, todos escolhem a melhor reação ao mesmo tempo, reproduzindo o equilíbrio de Nash.

São doze pedras, entre esmeraldas (e) e rubis (r), portanto e + r = 12. O convite foi repetido a cada dez minutos, durante uma hora, até que os que possuíam esmeraldas se dirigissem ao sultão. Desta forma, dentre os sessenta minutos o convite foi dito sete vezes, uma no início e seis após cada dez minutos.

Vamos avançar até o ponto de equilíbrio. Primeiramente vamos supor que exista somente uma esmeralda, sendo e = 1 e r = 11, mas eles não sabem disso. Neste caso, se houvesse apenas uma esmeralda, o sábio que estivesse com ela olharia para os outros e, vendo somente rubis, deduziria que a esmeralda estaria consigo. No primeiro convite ele já se levantaria para levar a caixa ao sultão.

Em um segundo raciocínio, vamos supor que existam duas esmeraldas e dez rubis, sendo e = 2 e r = 10, mas eles não sabem disso. Neste caso, cada um dos sábios com esmeraldas veria com os outros sábios a outra esmeralda e os dez rubis. No segundo convite, cada um dos dois sábios com esmeralda saberia que a esmeralda do outro não era a única e, vendo os demais com rubis, deduziria que a outra esmeralda estaria consigo. No segundo convite os dois se levantariam para levar a caixa ao sultão.

Este raciocínio é semelhante para e = 3 e r = 9, ocorrendo a dedução após o terceiro convite, para e = 4 e r = 8..., e = 5 e r = 7..., até e = 6 e r = 6, onde ocorre a dedução após o sexto convite. Percebe-se então a relação entre o número de convites e o número de esmeraldas.

Supondo que existam sete esmeraldas e cinco rubis, sendo e = 7 e r = 5, mas eles não sabem disso. Neste caso, cada um dos sábios com esmeraldas veria com os outros sábios outras seis esmeraldas e os cinco rubis. No sétimo convite, cada um dos sábios com esmeralda saberia que existem mais de seis esmeraldas e, vendo as seis esmeraldas e os cinco rubis, deduziria que a sétima esmeralda estaria consigo. No sétimo convite os sete sábios com esmeraldas se levantariam para levar a caixa ao sultão. E foi o que aconteceu.

A resposta do problema é que Hasen colocou sete esmeraldas e cinco rubis nas caixas.

Leia mais sobre conhecimento comum em http://dan-scientia.blogspot.com.br/2010/08/o-conhecimento-comum-e-o-equilibrio-de.html e um outro problema bastante interessante em http://dan-scientia.blogspot.com.br/2009/08/problema-de-logica-cor-dos-olhos.html

segunda-feira, 29 de outubro de 2012

Internacionalização e localização em softwares de computador

Em um mundo globalizado, é grande a possibilidade de um software, desenvolvido em um país, ser executado em diferentes partes do mundo. Com a Internet esta disseminação torna-se mais fácil. Contudo, cada povo de um país terá a sua língua, a sua cultura e interpretará as informações de forma diferente. Um software, para conseguir a aceitação global, deve permitir se adaptar às diferentes línguas e culturas das mais variadas regiões.

A necessidade desta adaptação, além do que é mais perceptível que é a tradução do idioma, está também em diversos aspectos que podem diferenciar um povo do outro. As diferenças podem estar em relação a direção da escrita, a ordenação alfabética, a representação dos números, o formato da moeda, dos números e das datas, a combinação das cores e formas gráficas, as unidades de medida e inclusive à legislação vigente no país.

Na computação existem dois processos, ou passos, de adaptação do software para as diferentes linguagens e diferenças regionais, são os processos de Internacionalização e Localização. Estes processos devem ser aplicados durante o desenvolvimento do software, deixando-o pronto para futuras adaptações que forem necessárias.

A Internacionalização, termo abreviado para i18n, é o primeiro passo na adaptação do software. Trata-se da preparação do software para que o mesmo esteja completamente neutro e possa adaptar-se às diferentes linguagens e regiões sem a necessidade de alterações em sua engenharia.

A Localização, termo abreviado para l10n, é o segundo passo na adaptação do software. Trata-se da preparação do software à uma linguagem e região específica, pela adição de componentes de localização, tornando-o adequado para onde for utilizado.

As abreviações dos termos internacionalização e localização são originadas dos respectivos termos na língua inglesa, as palavras internationalization e localization são abreviadas para apenas a primeira e a última letra, com o número das letras suprimidas ao meio da abreviatura.

A internacionalização é um procedimento com uma exigência maior do conhecimento de engenharia de software, em contrapartida, o processo de localização requer um maior conhecimento no aspecto social, cultural e linguístico da região onde será destinado o software. O processo de localização é geralmente desenvolvido por um profissional em tradução.

quarta-feira, 24 de outubro de 2012

Breadcrumb no auxílio à navegação web

O breadcrumb, termo em inglês para migalha de pão, é um recurso auxiliar que exibe o caminho percorrido pelo usuário, dentre as páginas visitadas do site, durante a navegação. É um recurso extra para auxiliar o menu principal, atuando de forma secundária, e assim melhorar a localização do usuário dentro do site. No breadcrumb cada termo é um link para a respectiva página da estrutura hierárquica do site.

O breadcrumb é melhor aplicado quando o site possui páginas organizadas hierarquicamente. Onde as páginas formam níveis ou categorias ou ramos na organização do conteúdo, em uma estrutura estática de árvore. Entretanto, é possível ser aplicado dinamicamente para montar todo o caminho percorrido pelo usuário, independentemente se as páginas pertencem a uma mesma hierarquia, mas esta forma exige muito cuidado.

A aparência mais comum de um breadcrumb é na forma textual, com os termos separados por símbolos que se assemelham à setas, por exemplo o símbolo », numa disposição horizontal. É muito semelhante a caminhos de diretórios em gerenciadores de arquivos.

Um exemplo de breadcrumb:

Início » Livros » Nacionais » Astronomia » Manual do Astrônomo Amador

Assim como qualquer interface humano-computador, o breadcrumb necessita de um estudo de usabilidade para melhor atender a navegação do site e principalmente não confundir e atrapalhar o usuário. Além do seu posicionamento na página, deve-se preocupar principalmente com a estrutura dos níveis. O breadcrumb é muito comum em sites de comércio eletrônico, onde os produtos são separados por categorias e subcategorias.

domingo, 14 de outubro de 2012

Teoria dos conjuntos em junções SQL

A SQL (Structured Query Language) é uma linguagem de programação especialmente designada para gerenciamento de dados em um sistema de banco de dados relacional. Surgida nos anos 70, a SQL foi originalmente baseada na álgebra relacional, uma forma de cálculo sobre conjuntos e relações. Na SQL, algumas das operações de junções entre tabelas podem ser facilmente demonstradas com a teoria dos conjuntos. Os diagramas de Venn simbolizam graficamente as propriedades relativas aos conjuntos e sua teoria.


INNER JOIN

A junção interna é a mais simples e mais comum. Esta consulta retorna somente o conjunto de registros que possuem coincidência entre as tabelas:

SELECT *
FROM TabelaA A
INNER JOIN TabelaB B
ON A.id = B.id




LEFT OUTER JOIN

Esta junção externa à esquerda inclui todos os registros da tabela da esquerda e inclui os registros da tabela da direita apenas quando registros coincidentes são encontrados:

SELECT *
FROM TabelaA A
LEFT OUTER JOIN TabelaB B
ON A.id = B.id




LEFT OUTER JOIN exclusiva

Esta consulta retorna todos os registros da tabela da esquerda que não possuem coincidentes na tabela da direita. É realizado o mesmo LEFT OUTER JOIN, excluindo os registros coincidentes na tabela da direita com a cláusula WHERE:

SELECT *
FROM TabelaA A
LEFT OUTER JOIN TabelaB B
ON A.id = B.id
WHERE B.id IS NULL




RIGHT OUTER JOIN

Esta junção externa à direita inclui todos os registros da tabela da direita e inclui os registros da tabela da esquerda apenas quando registros coincidentes são encontrados:

SELECT *
FROM TabelaA A
RIGHT OUTER JOIN TabelaB B
ON A.id = B.id




RIGHT OUTER JOIN exclusiva

Esta consulta retorna todos os registros da tabela da direita que não possuem coincidentes na tabela da esquerda. É realizado o mesmo RIGHT OUTER JOIN, excluindo os registros coincidentes na tabela da esquerda com a cláusula WHERE:

SELECT *
FROM TabelaA A
RIGHT OUTER JOIN TabelaB B
ON A.id = B.id
WHERE A.id IS NULL




FULL OUTER JOIN

Esta junção externa total produz o conjunto de todos os registros de todas as tabelas, mesmo os registros que não possuem coincidência entre as tabelas:

SELECT *
FROM TabelaA A
FULL OUTER JOIN TabelaB B
ON A.id = B.id




FULL OUTER JOIN exclusiva

Esta junção externa total produz o conjunto de todos os registros únicos das tabelas, excluindo os registros que possuem coincidência entre as tabelas. É realizado o mesmo FULL OUTER JOIN, excluindo os registros que possuem coincidência com a cláusula WHERE:

SELECT *
FROM TabelaA A
FULL OUTER JOIN TabelaB B
ON A.id = B.id
WHERE A.id IS NULL OR B.id IS NULL




Observações:

Nas consultas onde são retornados registros sem coincidência, estes registros recebem o valor NULL.

A junção cruzada (CROSS JOIN), que gera um produto cartesiano das tabelas, não pode ser simbolizada graficamente no diagrama de Venn, pois retorna mais registros que os existentes nos conjuntos originais.

A linguagem SQL possui, além das junções, outros operadores de conjunto da álgebra relacional, entre eles os operadores UNION, INTERSECT e EXCEPT.

sexta-feira, 21 de setembro de 2012

Problema de Lógica: O número ab7

Um número inteiro positivo de três algarismos termina em 7. Se este último algarismo for colocado antes dos outros dois, o novo número formado excede em 21 unidades o dobro do número inicial. Qual é o número inicial?





RESPOSTA





Adotando ab7 como sendo o número inicial, segundo o enunciado temos:

7ab - 2 x ab7 = 21

Decompondo os números em centena, dezena e unidade, tornam-se:

700 + 10a + b - 2(100a + 10b + 7) = 21
700 + 10a + b - 200a - 20b - 14 = 21
700 - 14 + 10a - 200a + b - 20b = 21
686 - 190a - 19b = 21
190a + 19b = 686 - 21
190a + 19b = 665 (divide tudo por 19)
10a + b = 35

Se a está na casa da dezena e b está na casa da unidade, então ab = 35, sendo a = 3 e b = 5. Assim, o número inicial é 357.

735 - 2 x 357 = 21

quinta-feira, 20 de setembro de 2012

Manual de Navegação Astronômica da Marinha

A navegação marítima já nos seus primórdios sempre foi guiada pela navegação astronômica, para cálculo do posicionamento em uma navegação oceânica. A navegação é a ciência e a arte de conduzir uma embarcação de um ponto a outro na superfície da terra. A navegação astronômica é um método em que o navegante determina sua posição através da observação dos astros.

A Base de Hidrografia da Marinha em Niterói (BHMN), atuando como uma Organização Militar Prestadora de Serviços Especiais (OMPS-E), executa além de outros, o serviço de distribuição de documentos cartográficos e de auxílio à navegação, gerenciando o material técnico da área de competência da Diretoria de Hidrografia e Navegação (DHN).

No site da BHMN existe um manual de navegação distribuído em três volumes que está disponível para download no formato PDF. O manual "Navegação: A Ciência e a Arte - Volumes I, II e III", de autoria do Comandante Altineu Pires Miguens, possui um extenso conteúdo de excelente qualidade, e o Volume II intitulado "Navegação Astronômica e Derrotas", trata brilhantemente de todas as particularidades da navegação astronômica.

No volume II, os capítulos nos ensinam sobre a Terra e seus movimentos, a esfera celeste, sistemas de coordenadas, medida do tempo, instrumentos náuticos e muito mais. Está muito bem editado, escrito e ilustrado.

Os três volumes do manual de navegação encontram-se disponíveis pelo endereço http://www.mar.mil.br/dhn/bhmn/publica_manualnav.html. Vale a pena o download. Observação, cada capítulo está em um arquivo PDF separado.

"Navigare necesse est, vivere non est necesse" (Gnaeus Pompeius Magnus 106-48 a.C.)

quarta-feira, 19 de setembro de 2012

Mapa do céu noturno no celular

Tão interessante quanto o Street View do Google Maps, que possibilita a visão no nível da rua, são os aplicativos que mostram o mapa do céu noturno, numa visão sincronizada com a posição e direção do aparelho celular.

Graças aos sensores existentes nos smartphones, que incluem o receptor GPS, acelerômetro, bússola e giroscópio, é possível um simples aplicativo de exibição do mapa celeste movimentar automaticamente o mapa de acordo com a movimentação do aparelho. É como se a câmera fotográfica, que fica atrás do aparelho, estivesse olhando para o céu e reproduzindo a imagem na tela, da direção que ela aponta. Como se fosse, pois a posição e direção vem dos sensores e a imagem vem de um mapa pré-armazenado de toda esfera celeste. Os aplicativos gratuitos mais populares para sistema Android são o SkyMaps+ e o SkEye. Para o sistema iOS, do iPhone, existe o Sky Map.

O SkyMaps+ é baseado no código do Google Sky Map. Existem outros que também utilizam o código do Google, que é aberto. Ele exibe as estrelas, constelações, satélites, planetas etc., com legenda de nomes dos principais astros. Com seu mecanismo de busca é possível pesquisar um objeto e no resultado da busca aparece uma seta na tela apontando para a direção do objeto. Basta mudar a direção do aparelho, seguindo a seta, até visualizá-lo. O visual é interessante, os planetas, o sol e a lua são exibidos em imagens realistas no meio dos pontos estelares. Possui modo de visão noturno, em tons de vermelho.




O SkEye tem uma aparência no estilo de um software de astronomia, com um equilíbrio de cores e contraste adequados para uma visualização em ambiente escuro. Entretanto o mapa pode ser visto colorido, não somente em tons de vermelho. Exibe informações de altitude, azimute, ascensão reta, declinação e ângulo horário, além das legendas que identificam os astros. É possível movimentar o mapa com o auxílio dos sensores ou manualmente com toques na tela. Possui um mecanismo de busca em um catálogo de estrelas, planetas, constelações e no catálogo Messier, e da mesma forma no resultado da busca aparece uma seta-guia na tela apontando para a direção do objeto. Este aplicativo pode ser usado como guia para telescópio, quando fixado no tubo óptico.




O Sky Map, do iPhone, é bem parecido com o Google Sky Map, pela barra lateral do menu percebe-se bem isso. E em funcionalidades também é semelhante. Da mesma forma, é possível movimentar o mapa com o auxílio dos sensores ou manualmente com toques na tela. Seu mecanismo de busca exibe no resultado a seta-guia apontando para a direção do objeto. As exibições dos planetas, do sol e da lua são em imagens realistas no meio dos pontos estelares.


quinta-feira, 13 de setembro de 2012

A espetacular literatura de Brian Greene

Brian Greene é um físico teórico norte-americano, nascido em Nova York em 1963. Possui graduação em física pela Universidade Harvard e doutorado em teoria das cordas pela Universidade Oxford. Foi professor na Universidade Cornell, entre 1990 e 1996, e desde 1996 é professor na Universidade Columbia, onde é co-diretor do Instituto de Cordas, Cosmologia e Astrofísica de Partículas (ISCAP).

Brian Greene também é autor de espetaculares obras de literatura geral sobre cosmologia. Seus três livros de divulgação científica, direcionados ao público comum, são realmente muito bons. Brian Greene possui um trabalho importante na popularização da física teórica. Além de seus livros, já apareceu em diversos programas de televisão para todo tipo de público.

Seu primeiro livro, intitulado "O Universo Elegante", trata do interior mais profundo da matéria, a teoria das supercordas e a estrutura e o funcionamento do universo. O segundo livro, intitulado "O Tecido do Cosmo", descreve os últimos desenvolvimentos da cosmologia na teoria das supercordas e os componentes básicos do universo e sua relação com o espaço e o tempo. E seu mais recente livro, intitulado "A Realidade Oculta", expõe o desenvolvimento da física do multiverso, com as diferentes teorias sobre os universos paralelos a partir dos fundamentos da relatividade e da mecânica quântica.



O Universo Elegante: Supercordas, dimensões ocultas e a busca da teoria definitiva
Editora Companhia das Letras - 2001 - 480 páginas.



O Tecido do Cosmo: O espaço, o tempo e a textura da realidade
Editora Companhia das Letras - 2005 - 656 páginas.



A Realidade Oculta: Universos paralelos e as leis profundas do cosmo
Editora Companhia das Letras - 2012 - 456 páginas.


Saiba mais sobre Brian Greene em:

http://www.columbia.edu/cu/physics/fac-bios/Greene/faculty.html
http://www.briangreene.org/

quarta-feira, 5 de setembro de 2012

Aplicativos interessantes para celular Android com GPS

Hoje em dia, praticamente todos os aparelhos celulares possuem receptor GPS. Há tempos que o celular deixou de ser apenas um telefone móvel, tornando-se então um smartphone, e adicionando o recurso de GPS sua utilidade ampliou-se ainda mais.

Os aparelhos celulares costumam ter o GPS Assistido (A-GPS). Trata-se de um sistema que, além do sistema comum de GPS, recebe dados das antenas de telefonia celular para ajudar na localização dos satélites de GPS. Isto acelera a inicialização e cálculo das coordenadas da posição atual, conhecido como Tempo para Primeira Posição (TTFF). O A-GPS também auxilia quando o sinal GPS está fraco, em áreas cobertas por edifícios por exemplo.

Nos celulares com sistema Android existem diversos aplicativos para navegação por GPS, disponíveis na Google Play (https://play.google.com/store). Existem aplicativos para navegação veicular, navegação off-road, trilhas, atividades esportivas, localização de pessoas e outros mais. Alguns destes aplicativos interessantes estão descritos neste artigo. Vale a pena ter instalado no Android do seu aparelho celular, estes aplicativos:

GPS Status
https://play.google.com/store/apps/details?id=com.eclipsim.gpsstatus2

Exibe os dados brutos do receptor GPS e demais sensores. Exibe a posição, precisão, velocidade e aceleração. Inclui bússola, nível e é possível marcar a posição e compartilhar.



GPS Essentials
https://play.google.com/store/apps/details?id=com.mictale.gpsessentials

É o canivete suíço da navegação por GPS. Contém diversas ferramentas de GPS incluindo um painel de instrumentos com informações de altitude, declinação, latitude, longitude etc., possui bússola, grava a trilha percorrida, gerencia rotas, exibe o mapa, posição dos satélites, exporta pontos, rotas e trilhas para os formatos KML ou GPX.



Google Maps e Street View in Google Maps
https://play.google.com/store/apps/details?id=com.google.android.apps.maps
https://play.google.com/store/apps/details?id=com.google.android.street

A tradicional ferramenta do Google para mapas urbanos, com a incrível visão no nível da rua, associada a bússola do celular.



Os Meus Percursos
https://play.google.com/store/apps/details?id=com.google.android.maps.mytracks

Mais uma ferramenta do Google. Permite gravar e compartilhar o percurso pela cidade ou estrada, registrando a velocidade, distância e altitude. No final gera um link para visualizar o percurso no Google Maps e exportar para KML etc.



Waze
https://play.google.com/store/apps/details?id=com.waze

É um aplicativo comunitário de trânsito e navegação. Informa as condições de trânsito em tempo real, geradas pela comunidade, e compartilha sua localização. Apenas dirigindo com o Waze aberto, a pessoa contribui com informações de trânsito em tempo real para outros Wazers próximos, baseando-se na velocidade de deslocamento na via.



Outdoor Navigation
https://play.google.com/store/apps/details?id=com.gpstuner.outdoornavigation

Indicado para aventuras selvagens, este aplicativo é uma ferramenta para ciclismo, caminhada, esqui, passeios de barco e outras atividades. Suporta os mapas do Google Maps e muitos outros mapas online, registra o trajeto, cria fotografias de pontos de interesse, compartilha trilhas e POIs e mais.



runtastic
https://play.google.com/store/apps/details?id=com.runtastic.android

Aplicativo para acompanhamento de corrida, ciclismo e outras atividades esportivas. Mapeia a atividade e acompanha o progresso da distância, tempo, velocidade, ritmo etc. Exibe gráficos e estatísticas.



Glympse
https://play.google.com/store/apps/details?id=com.glympse.android.glympse

Este aplicativo compartilha sua localização em tempo real via SMS, e-mail, Facebook ou Twitter, por um tempo que pode ser determinado e ou exibe um mapa com a posição da outra pessoa que está compartilhando a localização. Simples e muito eficiente.



Todos estes aplicativos são gratuitos, fornecendo os recursos básicos e nos satisfazendo tranquilamente, entretanto alguns possuem versões pagas, que obviamente trazem mais funcionalidades. Vale a pena usar estes aplicativos, nos auxiliam muito nas nossas andanças por aí. Um celular com GPS passa a ser uma ferramenta indispensável na vida das pessoas, une comunicação e navegação.