goncin@wordpress.com:~$ _

Linux, programação e toda sorte de nerdices

Arquivos Mensais: outubro 2010

Gerador da letra da musiquinha do elefante em PHP

Divirtam-se! 😛

<?php

echo "1 elefante incomoda muita gente\n";

for($i = 2; $i <= PHP_INT_MAX; ++$i) {

	echo "$i elefantes ";

	for($j = 0; $j < $i; ++$j)
		echo 'incomodam ';

	echo "muito mais\n";

	++$i;

	echo "$i elefantes incomodam muita gente\n";

}
Anúncios

Instalando aplicativos KDE no Ubuntu (sem instalar o KDE inteiro como dependência!)

Salve, galera!

O assunto de hoje é polêmico. Trata-se da velha questão da rivalidade entre GNOME e KDE, e a escolha por um ou por outro, frequentemente, é matéria de foro íntimo 😛 . Não raro, as pessoas gostam de um e não suportam o outro…

O que tenho a dizer é que, com o Ubuntu, é possível ter o melhor dos dois mundos. Minha constatação é reafirmada por duas notícias recentes: a de que o Ubuntu 11.04 (“Natty Narwhal”) utilizará a interface Unity como padrão (fugindo, portanto, do GNOME Shell, que será a interface padrão do GNOME a partir da versão 3.0) e um post do Matt Zimmermann, CTO da Canonical, acerca da utilização do Qt (biblioteca sobre a qual o KDE se baseia) para o desenvolvimento de aplicações para o Ubuntu.

O GNOME e o KDE incorporam aplicativos quase sempre equivalentes entre si – quase sempre. A título de exemplo, o digiKam, do KDE, gerencia tanto fotos quanto vídeos – o suporte a esses últimos falta tanto ao F-Spot quanto ao Shotwell, do GNOME. Falando por mim, reputo o Kate, o editor de textos avançado do KDE, melhor do que o gedit, do GNOME. Já soube de gente que prefere o Okular ao Evince. A lista seria infinita…

A principal reclamação de quem já experimentou usar um programa do KDE no Ubuntu é o problema das dependências – é comum que, ao instalar um simples programa do KDE, o Synaptic (ou o aptitude, ou o apt-get, ou a Central de Programas do Ubuntu, …) tente incluir praticamente todo o KDE no conjunto da instalação. Uns míseros 150~200MB… 😛

A boa notícia: é possível contornar esse empecilho. No aptitude, ao instalar um pacote do KDE, basta incluir a diretiva --without-recommends para que o gerenciador  ignore os pacotes recomendados. É claro que, ainda assim, serão baixadas as bibliotecas (principalmente do Qt) necessárias ao perfeito funcionamento do aplicativo, o que pode inchar o tamanho do download ainda um pouco. Todavia, essas bibliotecas só serão baixadas e instaladas uma única vez. Os downloads subsequentes de outros aplicativos KDE terão tamanhos módicos.

Em suma: se quisermos instalar o digiKam:

sudo aptitude install digikam --without-recommends

Ou o Kate:

sudo aptitude install kate --without-recommends

E por aí vai.

Tenho utilizado esse método já há algum tempo, com sucesso. Contudo, isso não é garantia de que funcione em 100% dos casos. Experimente, tente, e conte sua experiência nos comentários. 🙂

O novo Registro de Identidade Civil (RIC), e as implicações para quem é desenvolvedor

Salve, pessoal!

Após um loooongo hiato, volto a blogar. E a inspiração deste post surgiu a partir de um tweet do glorioso @miguelmolina78.

Como deve ser do conhecimento de todos, o Governo Federal tomou a iniciativa de criar o Registro de Identidade Civil (RIC), instituído pela Lei nº 9.454, de 7 de abril de 1997, e regulamentado pelo Decreto nº 7.166, de 5 de maio de 2010. O lapso de mais de três anos entre a lei e o decreto é algo relativamente normal, pois, enquanto a primeira apenas estatuiu que o RIC existisse, o segundo é que especifica como seu funcionamento no mundo real, a partir de estudos técnicos. Sua emissão já começou. Ainda assim, muitas questões ainda estão por ser respondidas.

O principal objetivo do RIC é acabar, paulatinamente, com a confusão gerada pela emissão das Carteira de Identidade (RG) pelos Estados e pelo Distrito Federal. O atual sistema permite que, em tese, uma pessoa possa ter até 27 (!!) RGs com números distintos, cada qual emitido por uma Unidade da Federação diferente. E, como se sabe, cada uma dessas UFs é plenamente autônoma para adotar o sistema de numeração que quiser nos RGs que emite, tornando ingrata, para nós desenvolvedores, a tarefa de validá-los. Quantos de nós não usam o velho e bom CPF (que deveria ser utilizado apenas por instituições financeiras) para identificar unicamente uma pessoa num cadastro, exatamente por falta de padronização dos RGs?

Pois bem, se o RIC cumprir seu propósito, a vida dos #SouDev será bastante facilitada. Todavia, como já disse, alguns pontos ainda estão pendentes. Do nosso ponto de vista, o mais importante talvez seja o cálculo do dígito verificador (DV) do número do RIC.

RIC de exemplo (divulgação)

RIC de exemplo (divulgação)

A partir das imagens de divulgação disponibilizadas pelo Governo Federal (ainda não tive o privilégio de “ver com a mão” um RIC de verdade), o que se pode inferir é que o número RIC é composto por 10 (dez) dígitos numéricos, seguidos por um hífen e pelo DV. Se o cálculo do DV seguir o padrão Módulo 11, calculá-lo e validá-lo não deve ser diferente do que já fazemos em relação aos números de CPF e RG.

<?php
function ricCalcularDigito($numRic) {

  // Retira o hífen do número RIC, caso haja
  $numRic = str_replace('-', '', $numRic);

  if(strlen($numRic) < 10 || strlen($numRic) > 11)
    throw new Exception ('[ricCalcularDigito] O número RIC deve conter 10 dígitos (sem o DV) ou 11 dígitos (com o DV), ignorado o hífen');

  // Sequência de multiplicação
  $seqMult = array (8, 9, 2, 3, 4, 5, 6, 7, 8, 9);

  $soma = 0;

  for($i = 0; $i < 10; ++$i) {

    $caracterPos = substr($numRic, $i, 1);

    if(! is_numeric($caracterPos))
      throw new Exception("[ricCalcularDigito] Encontrado caracter não-numérico na posição $i");

    // Multiplica-se o carater da posição pelonúmero correspondente da sequência de
    // multiplicação, somando-se o resultado aos anteriores
    $soma += ((int) $caracterPos) * $seqMult[$i];

  }

  // O dígitoé, normalmente, o resto da soma dividido por 11...
  $dv = $soma % 11;

  // ... ou 0 (zero), se o resto for igual a 10.
  return $dv == 10 ? 0 : $dv;

}

function ricVerificarDigito($numRic) {

  // Retira o hífen do número RIC, caso haja
  $numRic = str_replace('-', '', $numRic);

  if(strlen($numRic) != 11)
    throw new Exception ('[ricVerificarDigito] O número RIC deve conter 11 dígitos (com o DV), ignorado o hífen');

  $dv = strlen($numRic, 10, 1);

  if(! is_numeric($dv))
    throw new Exception('[ricVerificarDigito] Encontrado caracter não-numérico na posição 11 (DV)');

  return ((int) $dv) == ricCalcularDigito($numRic);

}

Nada obstante, segundo o código acima, o dígito para o número RIC de exemplo é “0” (zero), e não “2”, como sugere a imagem de divulgação. Fica a pergunta: a imagem contém um número com dígito também fictício, ou o cálculo do DV utiliza outro método? Já que nem o Grande Oráculo sabe, o jeito é aguardar os próximos capítulos.

%d blogueiros gostam disto: