Não é muito difícil de perceber que estou um pouco afastado do blog nas ultimas semanas. O motivo é sempre o mesmo: falta de tempo. Pra dizer a verdade acho essa uma desculpa esfarrapada, mas como a maioria dos seres humanos, gosto de utilizá-la.
Para retomar os artigos de códigos rápidos e úteis - nem sempre tão úteis - utilizando Ruby (os Snapshots) vou mostrar como fazer um “cronometro” de código. Calma, vou explicar melhor.
Antes de iniciar quero lembrar a existência do modulo Benchmark, que é o mais indicado a ser utilizado neste caso. Levamos em conta então que esse post servirá apenas para estudo.
Muitas vezes quero saber quanto tempo um determinado trecho de código leva para ser executado, assim posso fazer otimizações bem focadas em determinadas linhas.
Ruby é uma linguagem que torna simples a manipulação de blocos de código, por isso criaremos um método que receberá um determinado código que alem de executar essas instruções passadas dirá quanto tempo levou para fazer isso. Seu funcionamento é bem simples, mostrando apenas o tempo real que o código levou para ser executado, não é 100% preciso, mas em linhas gerais é bem eficiente. Segue o método:
Primeiro ele verifica se foi passado o bloco de código que vai ser “analisado”. Em seguida o tempo inicial é armazenado, o código é executado (yield) e por fim diminui-se o tempo inicial do tempo no momento em que o código termina de ser executado. É impresso na tela a identificação do teste (para os casos de haver mais de um) junto com o tempo que o código levou para ser executado, em segundos.
Para testar o método usei o sleep, que faz uma interrupção no código durante um determinado tempo, no caso 318 milissegundos. Ao rodar esse teste é possível notar que nunca dá 318 milissegundos no bechmark. Isso porque os métodos sleep e o bechmark não são exatos.
É possível fazer diversas melhorias nesse método, o que é um bom exercício para estudar a linguagem. Qualquer sugestão é bem vinda.
Um tempo atrás estava brincando com Sinatra, mostrando para um outro desenvolvedor como era simples fazer uma aplicação pequena (muito pequena) com esse framework. Estava usando Windows. Então lembrei de um script que converte aplicações feitas em Ruby para um aquivo executável (o clássico exe). Utilizei esse conversor com uma aplicação feita com Sinatra, e funcionou!
Sinceramente não sei a utilização prática disto, mas serve como arte.
Neste post não vou escrever nenhum tutorial sobre Sinatra, nem mesmo vou abordar suas funcionalidades. Para mais informações sobre esse framework acesse o seu repositório no Github.
Primeiro instale a gem do Sinatra. Feito isso, vamos construir o script com a aplicação web. Vale lembrar que é bem simples e serve apenas para o exemplo. Crie um aquivo com o nome webapp.rb e adicione o seguinte conteúdo:
Ao rodar esse script (ruby webapp.rb) o Sinatra vai disponibilizar a aplicação na porta 4567, a porta padrão deste framework. Acesse com o navegador os seguintes endereços: [http://localhost:4567/], [http://localhost:4567/usuarios] e [http://localhost:4567/usuarios/Seu+nome+aqui].
Se funcionou, verá respostas, com html bem simples, respectivamente: “Olá”, “Usuários” e “Olá, Seu nome aqui”. Mude o nome em “Seu+nome+aqui” para ver um resultado diferente.
Agora vamos transformar essa aplicação em um executável. Baixe o rubyscript2exe, esse é o script que fará a conversão. Segue aqui o link para download direto, já que o site é meio confuso. Baixe o arquivo para o mesmo diretório do webapp.rb.
Converter é mais simples que criar a aplicação web. Basta, via linha de comando (os usuários do Windows geralmente têm medo desta parte), executar o comando:
ruby rubyscript2exe.rb webapp.rb
Uma dica: Execute esse comando com a aplicação webapp rodando (ruby webapp.rb). O conversor executa o script enquanto converte a aplicação, e como é um servidor de aplicação, não tem fim. Com o script rodando, vai dar um erro na hora de converter, mas ignore isso, tudo ficará bem.
Está pronto. Se tudo deu certo, foi criado um arquivo chamado webapp.exe. Execute-o e acesse os mesmos endereços pelo navegador, aí está sua aplicação. É possível utilizar recursos de banco, imagens, estilos ou seja lá o que vai usar de recursos no script, já que o conversor busca as dependências (outros scripts Ruby) para “compilar”.
Se alguém encontrar uma utilidade para isso, me fale!
Hoje quero passar uma dica rápida, porem útil. É sobre um post na Smashing Magazine, que fala em princípios para construir um CSS limpo (7 Principles Of Clean And Optimized CSS Code), ótima leitura. Mas quero me focar especialmente em uma parte do post, a primeira: Use Shorthand.
Eu sempre peno nesse item, nunca sei qual dos atributos do CSS, quando colocados na mesma linha (padding: 5px 6px 20px 3px), se referencia a qual das propriedades (top, right, bottom e left). O atributo font também é complicado para usar com as propriedades na mesma linha.
Usar essa técnica nos trás dois benefícios bem simples: um CSS mais curto e mais rápido. Sim, pode parecer um beneficio irrelevante, mas tratando-se de mais de mil linhas de CSS isso se torna um diferencial tanto em tempo quanto em tamanho do arquivo. Lembre-se, seu usuário fará download deste arquivo, e você - ou seu cliente - pagara a conta da banda excedida no fim do mês.
Criei uma referencia rápida com as imagens que estão no post original e estou colocando aqui para quem quiser utilizar também. Bom uso!