1. Introdução aos Testes no Django

    Estou iniciando no processo de gerar testes para meu código no django, vou ir colocando as minhas impressões sobre o assunto.

    Em primeiro lugar, pelo menos na versão 1.5, é de senso comum que o código de testes apresentado para o Django está longe do ideal, o que vejo é que a maioria dos projetos não faz uso do “tests.py” padrão gerado no comando “createapp”, logo existem muitas versões diferentes de estruturas e testrunners na internet.

    Decidi me basear no que pode ser encontrado no Two Scoops of Django.

    Um detalhe importante é verificar qual versão do Django está sendo usada, porque da 1.5 para a 1.6 houve uma troca no “test runner” para usar um que encontra com mais facilidade os testes dentro dos módulos.

    Nesse caso, é interessante criar um settings/test.py específico para testes. De modo que seja usado um banco de dados sqlite na memória, que torna o processo bem mais rápido. o settings pra versão 1.5 e 1.6 podem ser encontrados no github do projeto base do Two Scoops of Django.

    A partir daí, é apenas começar a escrever os testes :), o que preciso começar a fazer e aprender conforme faço.


  2. Consistência não é crítica

    Vendo um dos vídeos do Google I/O 2013 sobre design, além de vários conceitos comuns que permitem usar o modo como as pessoas percebem o mundo para melhorar o design, um trecho do final me chamou a atenção, aonde o palestrante diz que:

    Consistência não é crítica”, e é o tipo de coisa na qual as pessoas se concentram, acreditando que manter a consistência entre diversas partes do sistema ou entre mudanças realizadas em novas versões seja o mais importante para evitar dúvidas no usuário final, quando na realidade não é assim, mais importante que consistência é ter inovação e aprendizado, mostrando para as pessoas o que mudou, ensinando através de exemplos simples de modo que cada um possa extrapolar os usos das novas funcionalidades.

    Consistency is not critical

    Esse trecho acontece bem no final da palestra, aos 35 minutos, tudo o que vem antes é muito interessante, mas essa parte é a principal do meu ponto de vista, já que é muito comum ver casos onde não há inovação por medo que a falta de consistência vá afastar os usuários, acredito fortemente que, se a mudança for positiva, e bem definida para o usuário, as chances de que ele aprenda rapidamente a lidar com o que mudou e fique feliz com essa inconsistência são muito grandes.


  3. Pelican

    É isso aí, wordpress é legal, tem um painel administrativo e tudo mais, mas está na hora de ser um dos caras legais, resolvi trocar o wordpress por um gerador de sites estático, e entre vários, escolhi o Pelican.

    Pra mim, a grande vantagem é o tempo de carregamento, sem a necessidade de processamento e acesso ao banco, o blog ficou bem mais rápido.

    A grande maioria dos meus posts aqui acabaram sendo sobre o próprio blog, técnicas mirabolantes para manter o wordpress atualizado e plugins bizarros para conseguir postar usando o vim (bizarro mas legal).

    Queria um tema simples, o mais minimalista possível, principalmente porque não sou muito bom na parte de design. Então montei o layout usando o Toast, um framework CSS bem simples, que o próprio autor considera como apenas framework para facilitar a criação de wireframes, mas que eu gostei muito da simplicidade, sem a necessidade de colocar algo enorme como um bootstrap (o código do Toast tem apenas algumas regras bem simples.).

    Para atingir essa simplicidade o mesmo não funciona no IE7, mas tudo bem, não espero que ninguém acessando isso daqui esteja usando ele.

    Considerei em colocar os comentários do Google Plus, gosto do modo como eles se misturam com as postagens na rede social (de forma muito melhor do que a do facebook, por exemplo), mas por padrão o widget do Google não é responsivo, além de ser necessário ter conta para comentar.

    E como o Pelican já tinha tudo pronto para uso do Disqus, resolvi utilizá-lo, tinha trauma do mesmo pela lentidão que apresentava anos atrás, mas isso parece ter se resolvido.

    Outra coisa que aproveitei para fazer foi adicionar as tags semânticas do schema.org, agora os posts tem definido corretamente autor, conteúdo e data de postagem, o que já é um bom começo e que o Google já entende do que se trata na hora de indexar.

    Então é isso, não cheguei a fazer uma comparação muito exata, mas tenho certeza que o blog está por volta de 3 vezes mais rápido para carregar, e aguentando uma quantidade muito maior de visitas sem problemas, agora é fazer mais postagens, se possível sem ser apenas sobre o próprio blog.


  4. Wordpress e temas padrão

    A versão 3.8 do  wordpress está realmente diferente, o admin está com um visual novo, e o tema padrão apresenta novo segue a mesma linha flat que tem feito muito sucesso.

    Gostei tanto do tema padrão que resolvi usá-lo para esse blog, só com algumas pequenas mudanças, talvez eu “fuce” mais no decorrer do tempo, mas está bem aceitável. O suficiente para que eu cancelasse os planos de fazer algo baseado no temas roots.

    No caso, as alterações que fiz no CSS foram as seguintes:

    1
    2
    3
    4
    5
    6
    7
    8
    .entry-title {
    text-transform: none;
    }
    
    .site-content .entry-header,.site-content .entry-content,.site-content .entry-summary,.site-content .entry-meta,.page-content {
    margin: 0 auto;
    max-width: 674px;
    }
    

    O primeiro para remover o estilo que deixa o título dos posts todo em maiúsculo, e o segundo para aumentar um pouco a largura do espaço de postagem.


  5. Escrita na HD, noatime, nodiratime

    Um grande gargalo de performance é sempre a escrita em disco, existe uma mudança no /etc/fstab que pode melhorar um pouco a performance do sistema.

    No caso, é necessário adicionar o “noatime” e “nodiratime” nas options de montagem, no meu caso, adicionei tanto no / como no /home

    1
    2
    UUID=3fbf7e07-a761-4780-8e08-b7a5a9b9322d / ext4 noatime,nodiratime,errors=remount-ro 0 1
    UUID=55960f8a-716a-475f-9b52-180d1df7aaa7 /home ext4 noatime,nodiratime,defaults 0 2
    

    De acordo com o manual do mount, esse é o significado dessas configurações:

    noatime

    Do not update inode access times on this filesystem (e.g., for faster access on the news spool to speed up news servers).

    nodiratime
    Do not update directory inode access times on this filesystem.

    Resumindo, você perde a informação de “quando foi a última vez que o arquivo/pasta foram acessados”, que eu não sei exatamente quais partes do sistema utilizam, mas não tem me feito falta nos últimos meses.

    Não fiz nenhum benchmark, porém a lógica está a favor de alguma melhora de performance durante a leitura na HD (ou seja, ler um arquivo não envolve mais realizar uma escrita). O que provavelmente só vai ser notável em um processo de leitura de muitos arquivos.


  6. Quedas de Força, Boot e Teclados USBs

    A informática é uma ciência oculta, certos erros não tem muita relação com a solução final.

    Depois de uma queda de força, o notebook parou de bootar, selecionando o modo de recuperação do ubuntu no grub, o boot parava em uma mensagem enigmática:

    Booting Node 0, Processor #1”

    Já comecei a acreditar que a queda de força teria afetado o processador, porém, após uma busca no Google, achei uma solução inusitada:

    http://forums.opensuse.org/english/get-technical-help-here/hardware/460402-boot-panic-2.html

    It was my wireless keyboard. Not sure if its just the battery or something else. But if i don’t plug it in, everything is booting just fine. Weird, isn’t it.

    Removi então o teclado e o mouse das USBs, e incrivelmente o boot ocorreu sem problemas.

    E foi isso, problemas estranhos e suas soluções bizarras, mandrakarias da informática.

    Por

    Em meta.


  7. Log 07/01/13

    Log é uma série de posts sobre considerações do dia-a-dia, de coisas simples (ou complexas) com as quais me deparo.

    • Usar imagens com radio inputs pode ser feito usando apenas html e css
    1
    2
    3
    4
    5
    6
    7
    8
            .radio_option {
                display:none;
            }
    
            <label for="opcao">
                <input type="radio" name="option" class="radio_option">
                <img src="imagem.png" alt="Opcao">
            </label>
    

    Colocando a imagem dentro do label para o input, e escondendo o radio com css, clicar na imagem terá o mesmo efeito de clicar no input, sem necessidade de javascript.

    • Evitar que mudanças feitas em arquivos já presentes em um repositório git é possível sem necessidade do gitignore

    git update-index --assume-unchanged [arquivo]

    Isso é útil para evitar a inserção de arquivos de configuração modificados por cada desenvolvedor para criar um ambiente de desenvolvimento no repositório principal

    Por

    Em log.


  8. Log 03/01/13

    Log é uma série de posts sobre considerações do dia-a-dia, de coisas simples (ou complexas) com as quais me deparo.

    • Ao documentar uma data, tentar usar valores que sejam fáceis de distinguir dia do mês, quanto menos quem estiver lendo a documentação tiver que “assumir” o valor, melhor.

    "data_criacao":"06/06/2012 19:19:43"

    Na data acima ninguém sabe se o primeiro campo é do dia ou do mês, só se pode considerar que seja do dia, já que o nome do campo está em português, mas não significa uma regra.

    • Se você pretende manter um fórum, por favor, insira uma busca clara no mesmo, é o mínimo que pode ser feito para evitar posts repetidos.
    Por

    Em log.

    tags: formatos


  9. daniloshiga.com

    Depois de muito tempo, resolvi iniciar meu site pessoal, e ao invés de criar algo com um design arrojado e completo logo no início, vou fazer o inverso, adicionar os dados e os links mais relevantes primeiro, e extender o site a partir daí.

    A idéia é que o site seja feito das melhores práticas em desenvolvimento, sem pressa, com atenção aos detalhes.

    Por enquanto o que existe é apenas um html com links para os vários lugares da internet onde existem mais informações sobre mim, o site pode ser visitado aqui

    O repositório do mesmo está no github e a implantação está seguindo a mesma linha deste mesmo blog, porém bem mais simples, o conteúdo do post-receive hook é apenas uma linha:

    1
    2
    #!/bin/bash 
    GIT_WORK_TREE=[caminho para pasta pública na hospedagem] git checkout -f
    

    Uma melhor prática já aplicada é o uso de microdata para dar um pouco de semantica ao site, além de ser uma boa prática de SEO.


  10. Separando arquivos numerados

    Para separar por volta de 200 arquivos numeros, fiz um pequeno shell script

    Os arquivos estão nomeados como “001 - nome” até “194 - nome”, esse script separa cada 10 episódios em uma pasta, a variável “j” foi necessária por
    causa do 0 no início da numeração.

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    #!/bin/bash
    for i in {0..19}; do
        if [ $i -lt 10 ];
        then
            j="0";
        else
            j="";
        fi
        mkdir -p /caminho/de/destino/$j$i
        cp -v $j$i* /caminho/de/destino/$j$i
    done;
    

    Apenas um exemplo de um pequeno script para resolver um problema simples.

Página 1 / 2 »