terça-feira, 31 de maio de 2011

A língua sabe de si

A língua está na boca dos gaúchos. Antes de discutirmos as dificuldades de viver sem estrangeirismos, havíamos sido atormentados pela polêmica dos livros escolares que ensinam que não é errado falar mal o português.

Nossa mídia nos confunde. Ora é ridículo traduzir estrangeirismos, ora é importante apontar o erro na língua alheia. Mas a confusão é mais antiga que essas duas discussões, alimentadas, sem dúvida, com o objetivo de vender mais escândalos.

Há décadas os jornais ignoram a ortografia. Os erros, há inúmeros deles todos os dias em todos os jornais (poucos jornalistas parecem saber que o verbo implicar é transitivo direto, por exemplo), mas o que realmente salta aos olhos são os nomes.

Segundo Marcos de Castro (no livro A Imprensa e o Caos na Ortografia), até o fim dos anos 1970, os jornais brasileiros respeitavam a língua portuguesa. Os nomes eram escritos como manda a regra. Ulisses e não Ulysses; Luís e não Luiz; Ademar e não Adhemar. Então, o general Golberi, afeito apenas a suas próprias regras, cismou que seu nome tinha que ser grafado conforme o equivocado progenitor o havia rabiscado: Golbery.

Desde então, a criatividade na grafia dos nomes próprios só tem aumentado. A cidade de Parati agora é Paraty e o Itamarati virou Itamaraty. Por sorte, o limite parece ser o teclado do escrivão; sem esse entrave, logo estaríamos sujeitos a símbolos, caracteres estrangeiros e logogramas asiáticos. Ai se descobrem o mapa de caracteres do Windows!

Há o seguinte parágrafo no polêmico livro "Por uma vida  melhor", do MEC:

'Os livro ilustrado mais interessante estão emprestado'. Você pode estar se perguntando: 'Mas eu posso falar ‘os livro?’.’ Claro que pode. Mas fique atento porque, dependendo da situação, você corre o risco de ser vítima de preconceito linguístico. Muita gente diz o que se deve e o que não se deve falar e escrever, tomando as regras estabelecidas para a norma culta como padrão de correção de todas as formas linguísticas. O falante, portanto, tem de ser capaz de usar a variante adequada da língua para cada ocasião

É prova inconteste da infiltração esquerdista no governo, porque, todos sabemos, não existe preconceito no Brasil. A imprensa, provado está, toma de braços abertos todas as formas de grafia. Com erros de concordância, não sei bem dizer o motivo, ela não tem tanta compreensão. Arrisco-me a conjecturar que a gravidade dos erros seja proporcional ao nivel sócio-econômico do errado. Eu devo ser comunista enrustido.

Antes mesmo dos jornais esquecerem essa história toda, um deputado comunista (a que ponto chegamos!) propõe que sejam traduzidos os estrangeirismos. A mídia regozijou-se. Um jornalista (provavelmente muito ocupado transcrevendo os textos da Reuters para procurar um dicionário) lançou uma lista de palavras únicas que, por sorte, seus leitores ajudaram a traduzir. O coitado não sabia como traduzir tsunami, mas logo apontaram para maremoto e vagalhão. Agora ele tem até escolha (parece que seu patrão não tinha muitas ao contratá-lo).

Então, vou propor umas adições ao livro do MEC. Sugiro o seguinte parágrafo:

Nos jornais, frequentemente encontramos erros como 'Ulysses Guimarães não estava presente no impeachment de Fernando Collor de Mello, porque havia morrido poucas semanas antes'. O correto seria 'Ulisses Guimarães não estava presente ao impedimento de Fernando Collor de Melo, porque havia morrido poucas semanas antes'. No entanto, não devemos mostrar preconceito contra trabalhadores que, tendo pouco tempo para preparar a edição do dia seguinte, não corrigem seus textos, mesmo com todas as facilidades oferecidas pelos computadores modernos.

Os erros do texto são meus e não da língua. Ela sabe de si e eu cuido de mim. Fernando Pessoa, que disso tudo entende muito mais que eu, mas que, tristeza nossa, está morto há muito tempo, escreveu e basta para terminar meu argumento:

Obedeça à gramática quem sabe pensar o que sente. Sirva-se dela quem sabe mandar nas suas expressões. Conta-se de Sigismundo, Rei de Roma, que tendo, num discurso público, cometido um erro de gramática, respondeu a quem dele lhe falou, "Sou Rei de Roma, e acima da gramática". E a história narra que ficou sendo conhecido nela como Sigismundo "super-grammaticam". Maravilhoso símbolo! Cada homem que sabe dizer o que diz é, em seu modo, Rei de Roma. O título não é mau, e a alma é ser-se.

sexta-feira, 20 de maio de 2011

Pérolas dos usuários IV

Os usuários são surpreendentemente criativos, não há dúvida. Com todos os anos de enfrentamento, eles ainda produzem feitos embasbacantes. A última, eu nunca esperaria acontecer.

Um usuário, quando deveria preencher o formulário e premir o botão "Enviar", imprimou-o vazio e o completou à mão. Creio que seja uma manifestação pós-moderna contra a intrusão das máquinhas nas relações interpessoais.

Por sorte, o CSS está aí para nos salvar. Com uma pequena adição à página, estão impedidos os usuários de imprimir o formulário.


@media print { body { display: none;} }

Fico em dúvida se não vou receber reclamações de que a impressão não está funcionando. Então, penso em adicionar algo como:


Calma! Nada deu errado. 
No entanto, o sistema detectou que tu não leste o manual.
Para podermos prosseguir, é necessário que leias as instruções cuidadosamente.

quarta-feira, 18 de maio de 2011

Power Sort em Java II

Tendo percebido (e logo relevado) que Power Sort é um caso especial do Counting Sort, decidi continuar investindo neste ramo da tecnologia ifless.

Começando pelo caso mais simples (ordenar apenas números inteiros sem repetições), encontrei uma solução muito simples com a classe BigInteger.

public static void psort(int[] in) {
    BigInteger TWO=new BigInteger("2");
    BigInteger pp=BigInteger.ZERO;
    for(int i=0; i<in.length; i++) {
     pp=pp.add(TWO.pow(in[i]));
    }    
    
    for(int i=0; i<in.length; i++) {
     in[i]=pp.getLowestSetBit();
     pp=pp.flipBit(in[i]);
    }
}
O código funciona em duas etapas. Na primeira, o número pp recebe cada elemento do array in como uma potência de 2. Ou seja, pp+=2in[i]. Na segunda parte, a posição do i-ésimo bit indica o valor da i-ésima casa do array já ordenado. Como não há um método para percorrer os bits 1, uso o método flipBit() para negar o primeiro e fazer do próximo o primeiro.

O código abaixo mostra um teste com um pequeno array de 200 posições.

import java.math.BigInteger;

public class PowerSort {

  public static void psort(int[] in) {
    BigInteger TWO=new BigInteger("2");
    BigInteger pp=BigInteger.ZERO;
    for(int i=0; i<in.length; i++) {
     pp=pp.add(TWO.pow(in[i]));
    }    
    
    System.out.println(pp);
    
    for(int i=0; i<in.length; i++) {
     in[i]=pp.getLowestSetBit();
     pp=pp.flipBit(in[i]);
    }
  }
  
  public static void main(String... args) {
    int[] test=new int[200];
    for(int i=0;i<200;i++) {
      test[i]=200-i;
    }    
    psort(test);
    for(int i : test) {
      System.out.printf("%d ", i);
    }
    System.out.println();
  }

}
O array começa com os valores 200 a 1 e os ordena para a ordem crescente. O valor final de pp é o respeitável e impronunciável

3213876088517980551083924184682325205044405987565585670602750
Quanto maiores os números, tanto maior ficará pp e, portanto, mais memória será usada para executar a ordenação. Se os valores forem conhecidos de antemão, será muito mais econômico usar um mapa de bits.

terça-feira, 17 de maio de 2011

As vantagens de contratar pais

Os pais, através de árduo treinamento, ganham habilidades que são preciosas. Os pais programadores e analistas de sistemas podem orgulhar-se de:

  • Trabalhar sob muita pressão e pouco sono;
  • Manter-se calmo mesmo frente à furia do chefe (ou à do cliente);
  • Seguir o processo sem pestanejar;
  • Manter-se otimista mesmo ante a impossibilidade de alento nos próximos dez anos;
  • Alegrar-se com as menores coisas (um soriso ou um café com leite num dia frio);
  • Não ter nem medo nem nojo de sujar as mãos (e a camisa e a calça).

segunda-feira, 2 de maio de 2011

Ficção contábil

Há muita reclamação sobre os impostos no Brasil, mas creio que o maior problema está na quantidade e complexidade deles. As alíquotas são o menor dos problemas.

Com relação aos encargos sociais, algumas pessoas aproveitam-se da complexidade dos cálculos para criar problemas que não existem. O número mais citado nessas discussões é o de 102%. Argumenta-se que sobre um salário incidem 102% de encargos sociais.

O cálculo envolve o seguinte (dados do DIEESE):
  • A - Obrigações sociais 35,80%
    • Previdência Social 20,0%
    • FGTS 8,0%
    • Salário-educação 2,5%
    • Acidentes do trabalho (média) 2,0%
    • Sesi 1,5%
    • Senai 1,0%
    • Sebrae 0,6%
    • Incra 0,2%
  • B - Tempo não trabalhado 38,23%
    • Repouso semanal 18,91%
    • Férias 9,45%
    • Feriados 4,36%
    • Abono de férias 3,64%
    • Aviso prévio 1,32%
    • Auxílio-enfermidade 0,55%
  • C - Tempo não-trabalhado 13,48%
    • 13º salário 10,91
    • Despesa de rescisão contratual 2,57%
  • D - Reflexos dos itens anteriores 14,55%
    • Incidência cumulativa do grupo A sobre o B 13,68%
    • Incidência do FGTS sobre o 13º salário 0,87%
O item mais caro é a contribuição de 20% à Previdência Social. Não há dúvida de que seja um encargo social, mas também é difícil argumentar por seu fim.

Os problemas começam mesmo com o décimo-terceiro salário, o repouso semanal e o adicional de férias. Em primeiro lugar, décimo-terceiro e adicional de férias são salário, porque vão para o bolso do empregado. No momento em que negociam o salário, tanto o empregador como o empregado sabem que esses valores compõem o salário anual. Não se pode alegar que o valor é cobrado injustamente pelo governo a posteriori, justamente porque o empregador pode negociar um valor mais baixo para compensá-lo (o menor salário que o empregador pode oferecer é o salário mínimo, ou R$7.248 anuais ou cerca de R$3,43 por cada hora efetivamente trabalhada).

No entanto, nos detalhes encontramos cálculos reveladores. Os contracheques costumam ter um número mágico de 220h de trabalho, mas não há mês com tantos dias de trabalho. Convencionou-se um mês comercial de 5 semanas (com 44h semanais, esse mês tem 220h). Alguns usam esse número como prova de que pagam-se mais horas do que são trabalhadas, mas a verdade é que ele é vantajoso para o empregador, porque significa que as horas extras são mais baratas. Se em um mês um trabalhador ganhou R$1.000 por 176h de trabalho, isso significa que ele ganhou R$5,68 por hora efetivamente trabalhada. Mas as horas extras são calculadas sobre 220h e, portanto, elas são remuneradas por R$4,54 a hora (com os devidos adicionais).

Ademais, não se pode alegar que o descanso remunerado seja um encargo, porque ele não é adicionado ao salário. Se o salário acordado é X, então X será o salário mensal e uma conta convencionará o quanto vale o fim-de-semana.

O décimo-terceiro é também uma criatura interessante. Um salário mensal de R$1.000 indica um salário semanal de R$250. Há 52 semana num ano e portanto, o salário anual deveria ser de 52 vezes R$250 ou R$13.000; sem o décimo-terceiro, ele seria de apenas R$12.000. Ou seja, o décimo-terceiro devolve ao empregado as horas que ele trabalhou a mais nos meses com mais de 22 dias úteis. Se descontássemos o mês de férias, teríamos novamente R$12.000 (48*R$250), mas então as férias não seriam remuneradas. Isto é, em um ano, o empregado trabalha 48 semanas (47 descontando os feriados) e recebe por 53,3 (um bônus de 13%), enquanto há quem queira fazer creer que sejam 11 meses trabalhados por 13,3 salários (um bônus de 21%).

Se trabalhasse 220h todo mês, um empregado acumularia 2420h nos 11 meses trabalhados do ano. Na verdade ele trabalha menos de 2112 (44h por 48 semanas). Então, as 220h ajudam a diminuir o valor da hora-extra em cerca de 14%.

Logo, os números acima só reforçam o fato de que itens importantes do salário não devem ser confundidos com encargos sociais. Outros itens não são tão claros, como FGTS e multa por rescisão e outros claramente são encargos, como as contribuições.

Finalmente, para tornar o processo mais claro, deveríamos fazer como os americanos, que negociam o salário anual, mas pagam/recebem semanalmente.