quinta-feira, 17 de outubro de 2013

Não é TRI

Uso o transporte público de Porto Alegre todos os dias, principalmente as lotações. Por isso, fiquei entusiasmado com a implantação do cartão de transporte integrado (TRI).

Durou pouco minha empolgação. Assim que descobri como funciona, percebi que o cartão foi concebido para beneficiar unicamente as empresas de transporte. Calculo que o objetivo inicial tenha sido o de eliminar as fraudes com as fichas.

Em primeiro lugar, é preciso cadastrar-se e são exigidos CPF, RG e comprovante de residência. É uma invasão de privacidade difícil de aceitar para quem quer apenas pagar pelo serviço de locomoção. Além disso, é preciso esperar 10 dias. Não, o visitante que estiver alguns dias em Porto Alegre não pode comprar um cartão. Em outros lugares, como Londres e Paris, pode-se comprar um cartão de transporte em qualquer esquina.

Como se as exigências burocráticas não fossem suficientes, os aspectos financeiros do sistema são um insulto ao consumidor. O portador abastece seu cartão com dinheiro, não com passagens. Mesmo pagando antecipadamente, se as passagens forem reajustadas, o paisano terá subtraído o novo valor a cada deslocamento. Além disso, não há qualquer desconto! Comprar cem passagens não confere nenhuma vantagem sobre comprar dez.

Em resumo, o cartão TRI é um esquema de prevenção de fraudes e de antecipação de receita. As necessidades dos clientes não entraram na equação. Passo por várias bancas de revistas pelo centro e torço pelo dia em que eu vou poder entrar numa para comprar um cartão de transporte para uma semana, um mês ou um dia.

terça-feira, 15 de outubro de 2013

Comandos distribuídos

Imediatamente depois de escrever o pequeno script do artigo anterior para procurar discos cheios nos servidores, percebi que poderia escrever algo um pouco mais genérico.

O código abaixo aceita como parâmetros uma lista de servidores e um comando a ser executado nesses servidores.

my $servers={
  srv01 => {user=>'user1', pass=>'pass1'},
  srv02 => {user=>'user2', pass=>'pass2'},
  srv03 => {user=>'user3', pass=>'pass3'}
};

my $cmd=pop(@ARGV);
print "$cmd:\n";
for my $server (@ARGV) {
  my $pass=$servers->{$server}->{pass};
  my $user=$servers->{$server}->{user};
  print "$server\n";
  my $data=`plink -pw $pass $user\@$server $cmd`;
  print "$data\n";
}

Por exemplo, para executar um "uname -a" em srv01 e srv02, eu poderia chamar o script assim (o nome do arquivo com o script é exec.pl):

exec.pl srv01 srv02 "uname -a"

Minha vontade era a de oferecer oções de linha de comando para referenciar grupos de servidores por nome, mas ainda não venci a preguiça.

sexta-feira, 11 de outubro de 2013

df distribuído

Tenho me deparado muito com discos cheios em diversas máquinas. Então, resolvi encontrar uma maneira de identificá-los mais rapidamente. Juntanto Perl e Plink (a versão de linha de comando do Putty), cheguei a uma solução bem simples.


my $servers={
  srv01 => {user=>user1, pass=>pass1},
  srv02 => {user=>user2, pass=>pass2}
};

foreach $server (keys %$servers) {
  my $pass=$servers->{$server}->{pass};
  my $user=$servers->{$server}->{user};
  print "$server\n";
  my $data=`plink -pw $pass $user\@$server df -h -l`;
  my @lines=split(chr(10), $data);
  for my $line (splice(@lines,1)) {
    my @cols=split(/\s+/, $line);
    (my $pct=$cols[4])=~s/\D//g;
    print "\t$cols[0] -> $cols[4] ($cols[5] has $cols[3] free)\n" if $pct>90;
  }
}


Através do plink, executo um "df -h -l" em cada máquina. Depois, basta processar o resultado, que será parecido com isto:


srv01
  /dev/sda1 -> 95% (/ has 500MB free)
srv02
  /dev/sdc1 -> 98% (/home has 25MB free)


Só são mostrados os discos com mais de 90% de uso.

terça-feira, 1 de outubro de 2013

Aumento de impostos já!

Uma peculiaridade dos impostos no Brasil é que os impostos sobre mercadorias são calculados por dentro. Isso significa que o valor efetivamente pago não é exatamente o indicado pela alíquota. Uma alíquota de 12%, por exemplo, corresponderia a uma alíquota de 13,63% se o imposto fosse cobrado por fora.

Se o consumidor for à Argentina e comprar uma mercadoria de valor 100, pagará adicionais 21 a título de IVA. A alíquota é de 21%. Se um consumidor brasileiro comprar uma mercadoria com ICMS de 17%, pagará, em realidade, quase 20,5%. Porque o ICMS é calculado por dentro, o preço final tem que ser inflado para que os 17% englobem também o valor agregado por ele mesmo. Isto é, os 17% têm que representar 17% do valor total pago e não apenas 17% adicionais sobre o custo da mercadoria.

Para calcular o quanto a alíquota realmente representa sobre o custo da mercadoria, é preciso multiplicá-la por 1/(1-a), sendo a o valor da alíquota.

Essa conta tem a particularidade de que, quanto maior a alíquota, mais ela foge do valor aparente. Uma alíquota de 30% representa mais de 42% sobre o valor da mercadoria. Uma alíquota de 50% representaria dobrar o valor do produto, o que equivaleria a uma alíquota de 100% por fora.

Esse cálculo fica interessante depois dos 100%. Os números ficam negativos!

Então, proponho que, uma vez que nossos legisladores não demonstram o devido interesse em simplificar os impostos ou diminuir as alíquotas, façamos campanha por aumento de impostos. Como deputados não costumam ser muito bons em contas, podem achar positivo que o ICMS seja aumentado para 500%. Talvez não gostem de descobrir que isso significará que terão que devolver 125% do preço dos produtos (os consumidores ganharão o produto e mais uns pilas).

A solução pode ser, dada a pouca tendência para a simplicidade dos nossos legisladores, aumentar o imposto de renda acima dos 100%. Então, pagaríamos mais do que ganhamos, mas ganharíamos por comprar as necessidades diárias. Não seria muito mais absurdo do que a situação atual.