Twitter pelo celular

Post rápido:

Quando estava na Railsconf, acabei comprando um BlackBerry Pearl pré-pago, e o Kenji me disse: Legal, agora vc pode usar aquele número que os americanos usam para postar no Twitter.

A questão é que eu posto esporadicamente via sms desde quando criei minha conta no Twitter! Se você for cliente da TIM, basta cadastrar o seu número de celular na sua conta do Twitter, e mandar um sms para  +447624801423 com o tweet, e pronto!

P.S.: Já vi clientes da Vivo e da Claro tentando usar, mas sem sucesso. Se alguém nessas condições conseguir, sinta-se à vontade para comentar.

Como não fazer um site

Quem me conhece sabe que eu gosto da comida do Habib’s. Quem o freqüenta, sabe que nada além da comida presta. Eu sabia, mas ao fazer um pedido pelo site deles hoje, achei um novo parâmetro para lixo.

Em primeiro lugar, eu sou de um tempo onde as coisas eram entregues à domicílio. Esse negócio de globalização só tá servindo pro pessoal aprender o inglês antes do português. E ainda por cima mal.

Entrei no site e até aí tudo bem. Design feio, mas até aí tudo bem. Como não faço a menor idéia da senha, resolvi clicar em “esqueci a minha senha”.

Cabeças cortadas? Serviço do Jason? Não, serviço dos designers altamente qualificados da Voxline Contact Center!

O e-mail foi enviado, eu entro na minha conta, e vejo: No lugar de resetar a senha, eles me mandaram a minha senha antiga. A SENHA ANTIGA. Sabem o que isso significa? Que se alguém invadir o sistema deles (o que deve ser ridiculamente fácil) eles podem pegar a senha de todo mundo! Só pra constar: Sites que não usam criptografia de mão-única pra guardar dados sensíveis não são confiáveis.

Ok, senha digitada, sou obrigado a passar por duas telas e escolher um item radio button. Nos dois casos, eu só tinha um item disponível, e ainda tinha que escolhê-lo.

Ok, quando entro no site para fazer o pedido, ele me mostra imagens não carregadas, e buracos no design, como o que aparece em baixo do menu de itens azuis, mesmo o browser indicando “Done” no status de carregamento da página.

Na tela de pedidos, você tem uma tabela html, da mais simples e porca, mostrando o nome dos produtos, o preço e um link para adicionar ao carrinho. E fotos dos produtos, nada! Eu tenho que adivinhar como é o pastel, a fogazza, e tudo mais, tenho que já ter comido para saber como são! A não ser que eu me contente com as esfihas, ou o kibe, que é o que aparece na única imagem na tela.

Vou montando o meu pedido, e me perco no meio do caminho, não lembrando se tinha colocado as esfihas de queijo, ou frango. Vou ver no carrinho, pra poder colocar as outas, mas não posso, porque o carrinho só mostra o valor total!

Preciso clicar, ver o que tem, e voltar pra tela original! E além do mais ele adicionou 3 Kibe frito! Colocar um if pluralizando as coisas é tão difícil assim? E isso é bug! Não é feature nova, pra ser cobrada pelos olhos da cara!

Vou fazer o checkout, e me deparo com outro caso de descaso:

Além do botões estarem desalinhados, eu digito o valor “16,76″ e ele computa 16 reais. Mas porquê você digitou vírgula, e não ponto, como o site pede? Simples, porque eu sou brasileiro, e no Brasil o separador da parte inteira da decimal em valores monetários é a vírgula. Incapacidade pura e total, tratar isso no javascript é coisa de criança.

E, na última tela, onde mostra o número do pedido, recebo mais uma aberração de layout na cara! Funciona no IE 6 para Windows XP, né? Pronto! Isso representa 90% dos usuários não é mesmo?

Ok, o pedido está feito, mas da próxima vez vou pedir pelo telefone. Ter que usar um sistema tosco, mal-feito e lixo desse é revoltante.

Pronto, falei.

Listen to the Masters - Ouçam os Mestres

“Watching nonprogrammers trying to run software companies is like watching someone who doesn’t know how to surf trying to surf. Even if he has great advisers standing on the shore telling him what to do, he still falls off the board again and again.”
-Joel Spolsky (link)

Em português:

“Ver não-programadores tentar comandar empresas de software é como ver alguém que não sabe surfar tentando. Mesmo que ele tenha grandes conselheiros de pé na praia dizendo a ele o que fazer, ele ainda assim vai cair da prancha de novo e de novo.”

Off-Topic: Sobre o hino e a bandeira do Brasil

Bandeira do BrasilInterrompemos a nossa programação para a publicação de um aviso de utilidade pública:

Quarta-feira fiz algo que não fazia há anos: Assisti a um jogo do Brasil. E o que me surpreende até hoje, mesmo sabendo que sempre acontece (e que provavelmente sempre acontecerá) é o fato da galera no estádio aplaudir o hino nacional. Já discuti bastante com “os mais velhos”, dizendo que não se deve aplaudir o hino, o que até me rendeu fama de não-patriota!

Então vamos lá, o link para o site do planalto é esse, mas o resumo está aqui:

Art . 24. A execução do Hino Nacional obedecerá às seguintes prescrições:

§ 4º Nas cerimônias em que se tenha de executar um Hino Nacional Estrangeiro, este deve, por cortesia, preceder o Hino Nacional Brasileiro.

Art . 30. Nas cerimônias de hasteamento ou arriamento, nas ocasiões em que a Bandeira se apresentar em marcha ou cortejo, assim como durante a execução do Hino Nacional, todos devem tomar atitude de respeito, de pé e em silêncio, o civis do sexo masculino com a cabeça descoberta e os militares em continência, segundo os regulamentos das respectivas corporações.

Parágrafo único. É vedada qualquer outra forma de saudação.

A página fala ainda mais um monte de coisa que eu acho que podem ser violadas, pelo fato de ser um jogo, todo mundo estar animado e tudo mais. Mas o que eu quero frisar está aí, em negrito. Não custa nada se levantar, tirar o boné|chapéu|toca, e não aplaudir. E não é feio nem “pagação de pau” executar o hino do outro país antes. Feio é perder o jogo.

Obrigado à todos pela atenção, e agora voltamos com a nossa programação normal.

Permalinks no Wordpress e mod_rewrite

Ontem à noite (na verdade quase hoje de manhã) eu terminei de subir os posts e comentários do blog. Daí quando eu tentei ativar os permalinks do WordPress eu tive uma surpresa: Comecei a tomar 404s na cara toda vez que clicava em qualquer permalink.

Eu não podia ficar sem eles, já que eram utilizados desde a encarnação Mephisto. Assim as URLs ficam parecidas e menos links por aí quebrariam. Daí, depois de pesquisar um pouquinho no google vi que o .htaccess precisava de algumas regras e o WordPress não conseguia escrever nele. Ok, touch mais chmod no .htaccess no diretório raiz do blog e… nada!

Com mais buscas, vi que todo mundo fala que o mod_rewrite deve estar habilitado, mas que ninguém fala como! Olhando no site do apache, vi que ele vem instalado por default.

Mais um pouco de fuçadas e, do nada, lembrei que assim como os sites os mods também se dividem entre available e enabled. Um simples ls em /etc/apache2/mods-enabled/ mostrou que o rewrite.load não estava lá. a2enmod rewrite, sudo /etc/init.d/apache2 reload e voilá!

Moral da história: VPS é legal, você tem uma máquina pra usar do jeito que bem entender, mas qualquer coisa que fuja do padrão é por tua conta.

Rise from your grave!

Na terça eu tentei entrar no blog, mas ele saiu do ar. Tentei de tudo, mas voltei pro trabalho na quarta, e o tempo ficou curto pra mim. Após tentar de tudo um pouco, fiz backup da base que o Mephisto usava e formatei o meu vps. Acabei de configurar o Apache e instalei o Wordpress.

Ainda vou subir os posts antigos, e daí ver algum tema bonito pro blog.

Desculpem o inconveniente, se tiver alguém lendo isso aqui fora o Wilerson.

The Brainfuck Quest

One of my study resources for learning new languages is SPOJ. Actually, I’ve used it only to learn Ruby so far, but I’ll use it for any one to come (Python?, LISP?).

Although SPOJ international has a much bigger user base and challenge level, I’m giving more attention to SPOJ Brazil, and BRAIN, one of its problems, is giving me much more headache then it should do.

I decided to give it another try, but the code was big enough for me to try to fix it. But this time I will make it different by adding unit tests.

The old testing process

The testing process consisted of running the tests given in the problem site. But my code pass them and still fails in the tests given when the code is submitted.

The new testing process

I put some unit tests (thanks for embedding unit tests, Matz) to test individual commands of my interpreter, and I found the first problem with it. The # command was printing the first ten bytes of the input, instead of the first ten bytes of the vector. The tests given in the problem site didn’t cover this case.

Then I added tests for the four basic math operations. The divide test is quite good, since the loop nesting stack is something that goes seven levels up in the stack!

My code just blowed up when I tried to run it. After some search, I found nothing. After a lot of more searching, I found a little bug: When the interpreter read the ] command, it wasn’t appending the following code in the right order. The other tests didn’t find this error because the loops were quite simple, with just one nested loop.

Then again I tried to upload it, but it failed once more. Now, I let it there for a couple of days, and then, I found another problems with the whole nesting system. Now I have to say that what saved my life was a piece of paper and a pen. I drawn the whole nesting process, making arrows for variables names and arrays, and it all became clear to me. After a little brainstorming (and more drawing), I re-wrote it all and all my tests passed!

I was already screaming bad words when I realized it had to pass SPOJs tests too, and then it all came to ruins when I got a TLE in my face. The problem has a 1 second time limit. The problem became performance.

Profiling

I really, really thought about re-writing everything in C and upload it just to prove my algorithm works. I decided to give Ruby’s profiler a try, by running the code with the -r profile option.

The results

At the beginning I thought the Range#each method was the cause of my problems, but it isn’t because all relevant code runs inside one of them. I thought about whining about the language too, but for sure, the problem is with my algorithm.

Now I have a apparently functional brainfuck interpreter who does not run fast enough for SPOJs tests. The source is here. I don’t want to give up on it. My plans were to post it when it passes, but I just can’t see any solution in the near future, and I don’t want to abandon the blog either.

I’ll make more posts anytime this issue evolves. Or not.

@Railsconf \’08: Phusion Passenger

Between other things, the Phusion folks just announced Passenger now has rack and Django support. And Ruby Enterprise Edition is just announced too.

By the way, some of the licensees (me included) were asked to go up on the stage and received applauses. Awesome.

As soon as Kenji stops making fun of me and hand me the picture, I’ll upload it here.

@Railsconf \’08: Design for Developers

The story so far:

  • You have to know the color wheel theory. Search the web.
  • Choose a color scheme between monochromatic (variations of the same color), analogous (neighbor colors on the wheel)  and complimentary (opposite colors on the wheel).
  • When choosing fonts, pick a line height, and make all images as height as x lines. Yeah, they must have height divisible by the line-height.
  • Use vector graphics to make the logos. They must scale. It’s not just the web site header, it can be in a T-Shirt, in a pin or even in a billboard and outdoors someday!
  • Brian Hogan likes Adobe Illustrator. A lot.

Rolling with Rails 2.1 - The Translation

Just translated Fabio Akita’s Rolling with Rails 2.1 - The First Full Tutorial - Part 1 to Portuguese.

The original is here. I will update the post with the link for the translation as soon as he launches it in his blog.

UPDATE:  Here is the translation in his blog.