Séries

— Eu gostava das séries de Fourier.
— Em que canal passava?

Anúncios

A irritante Brasil Telecom

Todo mundo sabe que cancelar um serviço por telefone é um saco. Ainda mais se for a Brasil Telecom. Mas realmente eles se superam no quesito irritar o consumidor até não poder mais.

Segunda-feira eu liguei pra eles pra cancelar o meu Turbo 600 que eu estava achando muito caro pra essa velocidade. Liguei pra lá e entrei na opção de cancelamento. Isso às 19h15min. Fiquei ouvindo musiquinha intercalada com “em breve você será atendido” até as 19h55min. Isso dá 40 minutos esperando sem ser atendido! Que raiva. Se eu tivesse ligado pra assinar algum serviço, aposto que seria mais rápido. Ou pra ouvidoria da Brasil Telecom, segundo fiquei sabendo, o atendimento lá provavelmente seria melhor.

Eu já esperava que me ofereceriam milhares de promoções pra que eu continuasse com o serviço. Mas eu não queria continuar, já estava de saco cheio de ser cliente de uma empresa que atende tão mal os clientes e cobra caro. Tentei recusar educadamente todas as ofertas. Algumas eram boas e outras eram ridículas (diminuiriam o preço mas também a velocidade), mas eu nem prestei muita atenção.

Quando então parecia que o cancelamento ia se efetivar, a mulher que estava me atendendo me transferiu pra outro atendente, que repetiu toda a oferta de promoções. A essa altura eu já estava no MSN falando mal da Brasil Telecom e fiz questão de mencionar ao cara a propaganda ruim que eu estava fazendo. E quando diziam que o serviço do concorrente não era tão bom assim, eu respondia: “Tá uma maravilha aqui, muito melhor do que o serviço de vocês” :-D

Então, agora parecia que o segundo atendente ia realmente cancelar a conta… Mas ele resolveu insistir mais uma vez e eu não me agüentei. Eu já estava havia 50 minutos no telefone e ele ia oferecer mais uma “promoçãozinha”! Gritei com o cara:

— PUTA QUE PARIU, CANCELA ISSO DE UMA VEZ, TCHÊ!!

Silêncio.

Silêncio.

— Aguarde um momento que eu vou transferir a ligação.

Bom, talvez agora eu esteja indo direto pro cancelamento, eu pensei. Que nada. A mulher resolveu oferecer mais promoções. Dessa vez não fiquei sendo simpático por muito tempo…

— CANCELA LOGO ESSA BOSTA OU EU VOU CHAMAR O PROCON (( chamar o Procon sempre funciona :-P )). Eu nunca tive que gritar com um atendente de vocês, mas dessa vez vocês tiraram toda a minha paciência. Eu estou há quase uma hora aqui e vocês não cancelaram ainda!

— O cancelamento será efetivado em 24 horas e na próxima conta virá o valor apenas dos dias usados no mês.

Isso que eu já tinha ouvido essa frase do atendente anterior, mas parece que o outro tinha entrado em loop e resolvido oferecer mais promoções. Dessa vez, parece que foi verdade e a saga terminou. Total de aproximadamente 1h no telefone. Quem me conhece talvez não consiga me imaginar gritando com o atendente, mas às vezes isso é necessário… :-( E parece que funcionou. :-)

E pra não dizer que não falei de coisas boas, a Logitech tem um ótimo atendimento ao cliente. Um mause que começou a dar problema dentro da garantia (garantia de 5 anos, deu problema no 3.º ano — um clique era interpretado como dois) foi trocado facilmente, a comunicação foi toda por e-mail e a entrega foi super rápida, mesmo sendo perto da época de natal/ano-novo. E a troca de um mause novo mas problemático (andava sozinho) da Microsoft chegou quarta! Demorou um pouco mais que a Logitech, mas chegou! :-)

Linguagens funcionais

Eu ouvia falar com certa freqüência das tais linguagens funcionais e tinha decidido que eu devia aprender uma delas pra ver se era tudo isso mesmo.

Eu já tinha lido algumas coisas sobre Lisp e Scheme, mas não conseguia captar a essência da coisa. Me parecia simplesmente uma linguagem com notação prefixada e muitos, mas muitos parênteses mesmo! E também gostavam de usar recursão!

Um tempo depois, acabei entrando em contato com a linguagem Lua e aprendi muita coisa com ela (muita coisa mesmo!). Por exemplo, aprendi o que é “tratar funções como valores de primeira classe”, pois é possível criar funções com simples atribuições: my_func = function()…end. Com isso também é possível redefinir funções, passá-las como parâmetros e retornar funções. Esse último caso é interessante porque eu já tinha visto em Scheme, mas não tinha entendido muito bem por causa da sintaxe. Em Scheme não existe a palavra-chave return (ela é implícita no final de funções) e uma função anônima é definida com a esquisita palavra lambda. Em Lua é muito mais simples: return function()…end. Assim eu finalmente entendi o funcionamento dos closures: funções retornadas pra fora do seu escopo (léxico) e que continuam podendo acessar as mesmas variáveis de antes, mesmo depois do retorno da função que criou tais variáveis (portanto, elas precisam ser movidas pra fora da pilha, mas isso é um detalhe de implementação). E com tail-recursion aprendi que um comando return f() pode ser pensado como um simples goto f() porque não é necessário manter o stack frame da função que faz o return.

Alguns mistérios resolvidos sobre linguagens funcionais por causa da linguagem Lua! Já deve ter acontecido com você de aprender alguma coisa numa linguagem e então passar a entender melhor outra linguagem que você achava que já conhecia, né? Mas eu ainda queria aprender mais um pouco. Tentei ver de novo Lisp e Scheme, mas fora algumas poucas coisas, eu já não estava mais interessado nelas. Então resolvi procurar outras linguagens e dei uma olhada em Haskell. Aprendi conceitos legais, que nunca tinha visto antes, como currying, mas não cheguei a usar a linguagem: me assustei com toda essa “pureza funcional” (se bem que era exatamente isso que eu estava procurando no começo), separando a parte funcional da parte de entrada e saída (fazer debugging com prints deve ser meio incômodo, se não impossível). Deixei pra lá e fui aprender Python. Mas fiquei com outra linguagem na cabeça: OCaml, por ser funcional mas com recursos imperativos e segundo vários saites ela compila pra código nativo bastante eficiente! Quando encontrei um programa interessante em OCaml, resolvi dar uma estudada melhor pra aprender a criar extensões… (continua num próximo post, provavelmente).