17 Feb

Recentemente, ao criar utilizar o rspec para fazer BDD num projeto em Ruby on Rails, encontrei um problema que não aparentava ter uma solução elegante. Eu tinha um hash @valid_attributes com valores válidos para o meu modelo e gostaria de modificar apenas um deles para fazer um teste que quebrasse minha aplicação. A primeira solução possível foi:
it "should verify if name is not empty" do @valid_attributes[:name] = nil Account.new(@valid_attributes).should_not be_valid end
Mas uma coisa me incomodou muito neste teste. Eu mudei a semântica da minha variável. Ela passou a conter um atributo inválido, mas continuava com o mesmo nome. Esta é uma péssima prática de programação, já que reutilizamos uma variável para outra coisa, perdendo o significado do nome. Portanto, apesar de parece inútil, o segundo passo foi:
it "should verify if name is not empty" do invalid_attributes = @valid_attributes invalid_attributes[:name] = nil Account.new(invalid_attributes).should_not be_valid end
Mas agora o teste estava muito longo e parecia besteira o que estava sendo feito. Procurei na API do Ruby para tentar achar alguma solução elegante e com um pouco de trabalho cheguei a seguinte solução:
it "should verify if name is not empty" do
Account.new(change_attribute(:name)).should_not be_valid
end
def change_attribute(attribute, value = nil)
{attribute => value}.merge(@valid_attributes) {|k, o, n| o}
end
O método merge de um hash permite a fusão de um segundo hash ao primeiro, adicionando novos pares de chave - valor e substituindo os valores das chaves já existentes, mas se passarmos um bloco (como no exemplo acima) podemos escolher qual valor iremos utilizar para chaves repetidas. Indo um pouco além do usual, minha idéia foi substituir um par já existente - o que poderia ser feito para quantos pares fossem desejados. Espero que essa dica possa ser útil, já que o merge é um método muito interessante.
Posts Relacionados:
Acompanhe-nos por
RSS, por Email ou via Twitter.
Veja como ter um desconto no Dreamhost: um excelente servidor web.
22 Sep
Após passar pelas outras partes desse tutorial, chegamos ao ponto em que gostaríamos de criar links externos ou internos para nossa aplicação e referências bibliográficas.
Começamos essa parte pelos links externos, seguimos com links internos e a criação de índice remissivo e terminamos pelas referências bibliográficas, muito comuns e, de fato, estritamente necessárias em trabalhos acadêmicos.
Para utilizar links externos da mesma forma que usamo-nas em HTML, podemos usar o pacote de referências do LaTeX e a tag simples href - bastante similar a HTML, certo?
\usepackage{hyperref}
% …
\href{url}{texto}
Alternativamente, quando queremos manter o próprio link na página e apenas fazê-lo ser “clicável”, podemos ainda lançar mão da tag url, que fica no pacote de mesmo nome:
\usepackage{url}
% …
\url{http://vidageek.net}
Dentro de documentos do tipo article, book ou report (os três tipos de documento padrão apresentados nessa série), não é preciso declarar pacote algum para usar links internos.
Marcamos uma referência que será chamada mais tarde colocando uma marcação nela, uma etiqueta:
\label{nomeDaEtiqueta}
E, no lugar onde precisamos referenciá-las, podemos fazê-lo de duas formas: indicando a página que contém a label ou sua seção.
%…
\ref{nomeDaEtiqueta}
% referencia para a section da label nomeDaEtiqueta
\pageref{nomeDaEtiqueta}
% referencia para a página em que a label aparece
Repare que, para que essas referências funcionem, é preciso rodar pdflatex Duas vezes. Isso porque na primeira vez, o parser do pdflatex passa apenas registrando as Labels e onde colocar as referências, mas na segunda é que é capaz de saber o número da seção e da página, quando aplicável.
Para criar o índice remissivo, basta colocarmos marcadores do tipo glossary pelo nosso texto e instalar um programinha que se chama “makeindex”. No linux, ele vem junto com o pacote tetex-extra e, no Mac e suponho que no Windows também, vem junto com o TexLive - se você segue nosso tutorial de início, já deve tê-lo instalado.
Assim, vamos direto ao ponto de como usá-lo:
\glossary{ancora no índice remissivo}
% Marcação da linha para o índice remissivo
Após terminar seu texto, você vai precisar rodar em sequência:
pdflatex arquivo.tex
makeindex arquivo.idx
pdflatex arquivo.tex
Novamente explicando o porquê: na primeira vez que usamos o pdflatex, ele agrupa as palavras do glossário (índice remissivo) no arquivo *.idx com as devidas referências. Então, usamos o makeindex para transformar esse *.idx em um adendo LaTeX pro arquivo original e, na segunda passagem do pdflatex, ele finalmente junta as duas informações.
Então, agora, você já sabe colocar links internos, externos e até mesmo gerar seu índice remissívo/glossário de acordo com as necessidades do seu texto. Espero que essa sessão do Guia Latex tenha ajudado e a próxima que virá tratará da parte matemática do LaTeX, parte bastante elegante e apreciada pelos usuários acadêmicos de Latex.
Posts Relacionados:
Acompanhe-nos por
RSS, por Email ou via Twitter.
Veja como ter um desconto no Dreamhost: um excelente servidor web.
8 Sep

Qual Geek que já passou pela faculdade não sofreu com integrais? Poucos, acredito, e eu não fui um dos sortudos. Pena que descobri isso depois de dois anos de cálculo na faculdade, teria sido muito útil.
O Wolfram Mathematica Online Integrator é uma calculadora de primitivas para qualquer função, inclusive aquelas sem primitiva! Para essas últimas, a calculadora utiliza alguns “truques” para dar o resultado, que pode ser dado em formato de imagem ou no mesmo formato que a entrada. É impressionante. No site, também há uma parte explicando (bem por cima) o funcionamento da calculadora.
Com isso, dá para você conferir sua lista de 500 integrais para resolver ou seus “probleminhas” de física se você não tiver com uma HP por perto.
Essa calculadora é uma versão online da calculadora que vem com o programa Mathematica, da Wolfram, que, infelizmente, é pago (se alguém conhecer algum programa gratuito que faça isso, fale com a gente!).
O site da Wolfram, aliás, tem uma base de dados bastante extensa e útil nessas horas de aperto, com informações sobre funções, séries e loucuras do gênero :).
Enfim, esta é uma ferramenta essencial para aqueles que estão cursando cálculo ou estão estudando alguma coisa que depende de integrais.
Posts Relacionados:
Acompanhe-nos por
RSS, por Email ou via Twitter.
Veja como ter um desconto no Dreamhost: um excelente servidor web.
25 Aug

Uma decepção geral de programadores Java com o MacOS é que a versão corrente do Java é a 1.5. Um update da Apple foi lançado para fornecer suporte a Java 1.6, mas está disponível apenas para a plataforma 64 bits (não vejo sentido nenhum nisso). E aparentemente nenhum esforço tem sido feito para que os usuários de Mac tenham a versão mais recente do Java em suas máquinas.
E ai que entra o projeto SoyLatte, um port do Java do BSD para o Mac (lembrando que o kernel do Mac usa o FreeBSD). O projeto funciona bem e é fácil de instalar, mas existe um porém: qualquer programa que use janelas precisa do X11 do Mac rodando. Portanto, você precisará instalar o X11 e lembrar de roda-lo antes de uma aplicação Java, uma chateação bem grande. Note que se o X11 não estiver rodando a janela simplesmente não abrirá (aparentemente assim que o X11 rodar, elas aparecem) e não encontrei nada que automatize o processo, ou seja, que rode o X11 pra você se ele não estiver rodando. Uma boa é deixar a configuração pronta para usar o SoyLatte, mas usar o 1.5 quando for possível.
Esta solução não é nem perto de ser ótima, mas enquanto a Apple nos deixar na mão é o que podemos fazer. A muito tempo atrás, abordamos como instalar pacotes open-source no seu Mac, acho que vale a pena dar uma olhada.
Imagem por justinsane
Posts Relacionados:
Acompanhe-nos por
RSS, por Email ou via Twitter.
Veja como ter um desconto no Dreamhost: um excelente servidor web.