sábado, 2 de março de 2013

Pausa em shell script

A execução de um script no interpretador de comandos do Linux (este artigo adotando o Bash) pode ser pausada por meio de dois artifícios. Um é o comando interno "read" e o outro é o comando "sleep". O "read" pode ser utilizado para esperar o pressionamento de uma tecla e o "sleep" para que espere por determinado tempo.

A seguinte linha, em determinado ponto do script, faz uma pausa na execução, neste ponto, e deixa o script esperando o pressionamento da tecla Enter:

read -p "Pressione [Enter] para continuar ou CTRL+C para sair..."

Como CTRL+C interrompe a execução do script, pode-se aproveitar para informar esta possibilidade.

Se desejar uma pausa controlada por tempo, a seguinte linha em determinado ponto do script faz uma pausa na execução por, no caso, 5 segundos:

sleep 5

O padrão para o "sleep" é em segundos mas pode-se adicionar o sufixo m para minutos, h para horas ou d para dias.

Os dígitos verificadores do CPF/CNPJ

O CPF (Cadastro de Pessoa Física) e o CNPJ (Cadastro Nacional da Pessoa Jurídica) são cadastros para identificar uma pessoa perante a Receita Federal do Brasil. O CPF possui um número com 9 dígitos, denominado raiz, e o CNPJ possui um número com 12 dígitos, raiz mais sufixo. Estes números, são complementados por dígitos verificadores (DV), totalizando 11 dígitos no CPF e 14 dígitos no CNPJ. Estes dígitos verificadores servem para conferir a integridade e autenticidade do número, evitando erros de digitação, números falsos etc. O número do CPF tem o formato xxx.xxx.xxx-vv e o número do CNPJ tem o formato xx.xxx.xxx/xxxx-vv, os dígitos verificadores são os dois últimos, nos dois cadastros.

Cada dígito verificador é calculado separadamente e o primeiro entra no cálculo do segundo. O algoritmo do cálculo é denominado Módulo 11, cada dígito verificador é gerado pelo resto da divisão por 11, e o que é dividido é o somatório dos dígitos do número e seus respectivos pesos.

Os dígitos dos números do CPF e CNPJ recebem pesos antes de serem somados. Para o CPF o peso é crescente em uma unidade de 2 em diante, até a quantidade de dígitos. Para o CNPJ o peso também é crescente em uma unidade de 2 em diante mas até 9, retornando a 2 e repetindo a sequência até a quantidade de dígitos. Esta quantidade de dígitos é ampliada no cálculo do segundo DV pois o primeiro DV entra como parte do número raiz do CPF e CNPJ.

CPF:
Pesos do 1º DV: 2, 3, 4, 5, 6, 7, 8, 9, 10      (para os 9 dígitos do número)
Pesos do 2º DV: 2, 3, 4, 5, 6, 7, 8, 9, 10, 11  (para os 9 dígitos do número mais o 1º DV)

CNPJ:
Pesos do 1º DV: 2, 3, 4, 5, 6, 7, 8, 9, 2, 3, 4, 5     (para os 12 dígitos do número)
Pesos do 2º DV: 2, 3, 4, 5, 6, 7, 8, 9, 2, 3, 4, 5, 6  (para os 12 dígitos do número mais o 1º DV)

Os dígitos dos números recebem os pesos na ordem do menos significativo ao mais significativo, isto é, da direita para a esquerda. Então a sequência dos pesos fica invertida. Cada dígito é multiplicado ao seu respectivo peso. Os produtos são somados e então divididos por 11.

Cada dígito verificador é gerado a partir do resto desta divisão por 11. Se o resto for 0 ou 1 o dígito verificador será 0, se o resto for maior que 1 o dígito verificador será a subtração de 11 pelo resto. Esta regra é a mesma tanto no CPF como no CNPJ, o que mudam são somente os pesos.

Os exemplos a seguir mostram os cálculos dos dígitos verificadores de um número CPF e de um número CNPJ. Perceba que o primeiro peso da sequência vai para o dígito mais à direita. No cálculo do 1º DV este dígito mais à direita (menos significativo) é a unidade do número raiz no caso do CPF e a unidade do sufixo no caso do CNPJ. Já no cálculo do 2º DV o primeiro peso vai para o 1º DV, que entrou no número à direita:


CPF nº 147.258.369

(1x10)+(4x9)+(7x8)+(2x7)+(5x6)+(8x5)+(3x4)+(6x3)+(9x2)
   10 +  36 +  56 +  14 +  30 +  40 +  12 +  18 +  18  =  234

O resto da divisão de 234 por 11 é 3, portanto o 1º DV é 11-3, que é igual a 8. O CPF fica, por enquanto:

CPF nº 147.258.369-8

(1x11)+(4x10)+(7x9)+(2x8)+(5x7)+(8x6)+(3x5)+(6x4)+(9x3)+(8x2)
  11  +  40  +  63 +  16 +  35 +  48 +  15 +  24 +  27 +  16  =  295

O resto da divisão de 295 por 11 é 9, portanto o 2º DV é 11-9, que é igual a 2. O CPF completo é 147.258.369-82.


CNPJ nº 14.725.836/0001

(1x5)+(4x4)+(7x3)+(2x2)+(5x9)+(8x8)+(3x7)+(6x6)+(0x5)+(0x4)+(0x3)+(1x2)
  5  +  16 +  21 +  4  +  45 +  64 +  21 +  36 +  0  +  0  +  0  +  2  =  214

O resto da divisão de 214 por 11 é 5, portanto o 1º DV é 11-5, que é igual a 6. O CNPJ fica, por enquanto:

CNPJ nº 14.725.836/0001-6

(1x6)+(4x5)+(7x4)+(2x3)+(5x2)+(8x9)+(3x8)+(6x7)+(0x6)+(0x5)+(0x4)+(1x3)+(6x2)
  6  +  20 +  28 +  6  +  10 +  72 +  24 +  42 +  0  +  0  +  0  +  3  +  12 =  223

O resto da divisão de 223 por 11 é 3, portanto o 2º DV é 11-3, que é igual a 8. O CNPJ completo é 14.725.836/0001-68.


Estes cálculos são frequentemente utilizados em sistemas computacionais para testar a veracidade dos números. Impede erros de digitação e detecta números falsos caso alguém queira inventar um número mentalmente. Obviamente, é possível inventar fazendo todos os cálculos para os dígitos verificadores, no entanto, as pessoas normais precisam de pelo menos um lápis e um papel para isso.

Observações: Nos números de CNPJ emitidos antes de 1993 (nesta época ainda era chamado CGC), o 8º dígito (o menos significativo) é um DV módulo 10 dos sete dígitos anteriores. A partir de 1993 o CNPJ não foi mais gerado assim. Os números de CPF e CNPJ usados nos exemplos deste artigo foram inventados por mim, pela posição das teclas em meu teclado. Se estes números estão sendo utilizados por alguém, esta pessoa é sortuda, possui uma sequência de teclas.

domingo, 24 de fevereiro de 2013

Servidor de desktop remoto no Linux

O Remote Desktop Protocol (RDP) é um protocolo de rede desenvolvido pela Microsoft para acessar o ambiente de desktop de um outro computador. No sistema Windows é feito pelo Serviço de Área de Trabalho Remota (Remote Desktop Services, RDS). Um computador executando o cliente RDS acessa pela rede o desktop do computador com o servidor RDS, os controles do teclado e mouse são transmitidos ao computador cliente e a imagem do desktop é exibida em uma janela no computador cliente. Nos computadores pessoais modernos, o ambiente de desktop é a interface gráfica do sistema operacional.

No Linux, a implementação de código aberto do servidor para o RDP é o xrdp (www.xrdp.org). As principais distros fornecem o pacote de instalação em seus repositórios. Um comando como "yum install xrdp" ou "apt-get install xrdp" resolve a instalação. O xrdp é baseado no FreeRDP (www.freerdp.com), uma implementação gratuita do RDP.

O arquivo de configuração do xrdp é o "/etc/xrdp/xrdp.ini". Seu conteúdo geralmente não precisa ser alterado, mas se for preciso é bem simples, como apresentado abaixo:

[globals]
bitmap_cache=yes
bitmap_compression=yes
port=3389
crypt_level=high
channel_code=1

[xrdp1]
name=sesman-Xvnc
lib=libvnc.so
username=ask
password=ask
ip=127.0.0.1
port=-1


A alteração que pode ser necessária é quanto a preferência do gerenciador de janelas. Para isso, edite o arquivo "/etc/xrdp/startwm.sh" e altere a linha SESSIONS, colocando em ordem de preferência o seu gerenciador de janelas:

SESSIONS="startkde gnome-session blackbox fluxbox startxfce4 xterm"

Outra necessidade é a definição do mapa de teclado. Ela é feita pelo arquivo "/etc/xrdp/km-xxxx.ini. O LCID para o português brasileiro é o número hexadecimal 0416. Então, verifique se existe o arquivo "/etc/xrdp/km-0416.ini". Se não existir, é preciso gerá-lo com a ferramenta xrdp-genkeymap, na linha de comando:

# xrdp-genkeymap /etc/xrdp/km-0416.ini

Observações: O xrdp-genkeymap se baseia no mapa configurado no servidor do X. Não importa o número que é dado para o arquivo km-xxxx.ini, o conteúdo gerado é proveniente das configurações do X. O meu xrdp curiosamente carrega e usa o mapa do arquivo km-0409.ini (en-us), mesmo com o X configurado para ABNT2 pt-br e inclusive existindo o arquivo km-0416.ini, então eu gerei o mapa sobrescrevendo este arquivo da língua inglesa (0409). A documentação do xrdp é muito pouca para esclarecer este quesito de mapa de teclado.

Provavelmente tudo está pronto para funcionar. Existem outros arquivos para configuração, scripts etc. mas só edita-se caso queira uma personalização maior, desta forma, é só iniciar o serviço do servidor xrdp para tornar ativo:

# service xrdp start

A máquina com o servidor do RDP está pronta para receber conexões de clientes de RDP. No Linux existe o cliente "rdesktop", na linha de comando. O artigo "Serviço de Área de Trabalho Remota do Windows" (http://dan-scientia.blogspot.com.br/2010/04/servico-de-area-de-trabalho-remota-do.html) mostra o serviço no sistema Windows e a linha de comando do rdesktop para tal conexão. Este serviço de RDP é bastante útil para manutenção de sistema pela rede.

quinta-feira, 7 de fevereiro de 2013

Problema de Lógica: Metade e Dobro

Qual é a metade do dobro do dobro da metade de um número?





RESPOSTA





Vamos adotar um número para facilitar o esclarecimento, no exemplo abaixo o número 6. Assim, do fim da frase para o início:

A metade de 6 é 3.
O dobro da metade de 6 é 6.
O dobro do dobro da metade de 6 é 12.
A metade do dobro do dobro da metade de 6 é 6.

Portanto, a metade do dobro do dobro da metade de um número é o próprio número.

quarta-feira, 30 de janeiro de 2013

Localizar um Android com o AndroidLost

Este artigo complementa o meu outro artigo "Como localizar um Android perdido" (http://dan-scientia.blogspot.com.br/2013/01/como-localizar-um-android-perdido.html) onde apresentei três aplicativos que localizam um smartphone perdido.

Encontrei um aplicativo que me impressionou pela simplicidade e por ter muitas funcionalidades. O AndroidLost (http://www.androidlost.com/), disponível gratuitamente na Google Play (https://play.google.com/store/apps/details?id=com.androidlost), é uma ferramenta provavelmente melhor do que as três apresentadas no artigo anterior, pois possui mais funcionalidades gratuitas. Mas muito mais funcionalidades.

Começando pelos comandos por SMS, o AndroidLost possui muitos comandos para serem executados caso o aparelho esteja sem conexão com a Internet, ele recebe o comando por SMS e também devolve a informação por SMS. Em seguida, possui uma interface web com também muitos comandos e recebimento das informações do aparelho. Se não for o bastante, algumas respostas podem vir por e-mail, para seu e-mail pessoal.

Os comandos, além dos de praxe que são receber a coordenada geográfica, mapa com a localização, bloqueio do aparelho, limpeza dos dados, disparo de alarme etc., é possível recuperar as mensagens SMS para o e-mail, enviar SMS do seu aparelho digitando-a na interface web, exibir mensagem popup na tela do aparelho, tirar foto com a câmera e enviar o arquivo para o seu e-mail, e até pronunciar uma frase pelo sintetizador de voz do aparelho (text-to-speech), redigida na interface web.

Após a instalação do aplicativo pela Google Play, a configuração do AndroidLost é extremamente simples. De início, basta executar o aplicativo que a configuração e a conexão com os servidores da Google se completam e pronto, já está configurado e ativo. Depois, faça o login na interface web do AndroidLost, usando a sua conta do Google, e autorize o aplicativo a usar a sua conta Google. O AndroidLost usa a sua conta do Google para autenticação e controle do aparelho. A única ação manual no processo de configuração, importante, é o ajuste no sistema Android para dar permissão de administrador ao aplicativo AndroidLost. Na execução do aplicativo, em sua tela inicial, é exibido um botão com a legenda "Request Administrator rights". Clique nele e a interface do sistema, para configuração da permissão, é aberta, basta aceitar. A permissão de administrador é requerida para o AndroidLost conseguir executar ações mais intrusivas no aparelho, como bloqueio, limpeza etc.

Vale a pena ter o AndroidLost no aparelho, é simples, é bastante funcional e é bem leve no consumo dos recursos do aparelho. Outro ponto positivo é o tempo no retorno dos comandos, pela interface web é quase instantâneo. Estou usando, em conjunto com os outros aplicativos de recuperação.

terça-feira, 29 de janeiro de 2013

Wolfram Alpha

Em filmes de ficção científica já vimos muitas cenas onde um personagem faz uma pergunta a um computador super poderoso, que detém todo o conhecimento. Nos filmes mais antigos isto era nada mais que ficção, mas hoje em dia, este tipo de consulta está se tornando realidade.

Desde 2009, existe uma ferramenta computacional desenvolvida pela Wolfram Research, a mesma que desenvolve o Mathematica, chamada Wolfram Alpha. O Wolfram Alpha é um motor de busca, um serviço online, que responde a consultas e é capaz de retornar resultados de cálculos matemáticos e informações a respeito do item pesquisado. O Wolfram Alpha é baseado na plataforma computacional Mathematica, pela sua linguagem simbólica generalizada e seus algoritmos que proporcionam as bases computacionais de qualquer área, e baseado nos algoritmos de "A New Kind of Science" (NKS), um novo ramo que estuda o universo computacional. A base de dados oferecida pelo Wolfram Alpha cobre uma imensa gama de áreas do conhecimento, pra não dizer todas, ou quase.

O Wolfram Alpha funciona em diversas plataformas, mas o acesso mais fácil para o usuário comum é pelo website (http://www.wolframalpha.com/) ou pelo aplicativo para dispositivos móveis, incluindo smartphones com Android (https://play.google.com/store/apps/details?id=com.wolfram.android.alpha). Em sua interface web somos recebidos com a frase "Entre com o que você deseja calcular ou saber a respeito:" e um campo para digitar o que quiser, assim, bem simples.


A página de exemplos (http://www.wolframalpha.com/examples/) ilustra bem todo o potencial da ferramenta, é impressionante, vale a pena ver cada exemplo para conhecer a imensa capacidade. Não é uma simples pesquisa na web, são computações dinâmicas baseadas em uma vasta coleção de dados, algoritmos e métodos. Entre com um cálculo matemático, a ferramenta retorna com a resposta, o gráfico, o passo a passo da solução etc. Entre com o nome de um objeto, a ferramenta retorna suas características, suas especificações etc. É uma enciclopédia que não para de crescer. Experimente as seguintes expressões na pesquisa: "where am i?" e "what is the weather here?", preferencialmente a partir de um smartphone, os resultados são bem legais. E seu uso vai além, por exemplo, a Siri, assistente da Apple, utiliza o motor de busca do Wolfram Alpha para responder determinadas requisições dos usuários.


O Wolfram Alpha quer tornar todo o conhecimento sistemático, computável de forma imediata e acessível para todos. Hoje em dia isto é possível, pois os computadores já são poderosos o suficiente e temos a Internet para propagar a informação quase que instantaneamente. O único obstáculo é uma estrutura de algoritmos capazes de computar tudo, mas parece que este entrave já está sendo superado. Haverá um tempo onde reassistiremos Star Trek e vamos achar normal, nada futurista.

quinta-feira, 17 de janeiro de 2013

Monitorando as pastas compartilhadas no Windows

Em um sistema Windows é muito simples compartilhar pastas para que outros usuários tenham acesso pela rede, na janela de propriedades de cada pasta existe uma guia para configurar o compartilhamento. Quando se compartilha uma pasta, os usuários de outros computadores podem conectar-se a esta pasta através da rede e podem abrir, salvar e excluir arquivos, como também criar, modificar e excluir subpastas, dependendo do nível de permissão concedido a eles.

Uma informação interessante, para quem compartilha pastas na rede, é saber se no momento existe alguém acessando as pastas. Há diversas formas de saber isso, desde a mais crua usando o comando "netstat" no prompt para exibir estatísticas de protocolo e conexões de rede, como também usando ferramentas gráficas do próprio Windows e ferramentas desenvolvidas por terceiros.

O Windows possibilita na janela do "Gerenciamento do computador" (clicando com botão direito em Meu Computador), indo pelos níveis da árvore de console no caminho Ferramentas do sistema/Pastas compartilhadas, visualizar os compartilhamentos, as sessões e os arquivos abertos. Esta é uma ferramenta nativa do Windows.

Outra ferramenta é o ShareWatch (http://www.stevemiller.net/sharewatch/), desenvolvido por terceiro. O ShareWatch permite ver quem está conectado, quais arquivos estão sendo acessados e ainda fechar o arquivo, desconectar o usuário remoto ou remover o compartilhamento. O ShareWatch é capaz de monitorar compartilhamentos do computador local e de servidores remotos, desde que se tenha a permissão, exibindo os usuários e os computadores que estão conectados em cada compartilhamento. É bem interessante, pode ser executado como uma aplicação na bandeja do sistema.