1. 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” ou “nodiratime” nas options de montagem, no meu caso, adicionei tanto no / como no /home

    1
    2
    UUID=3fbf7e07-a761-4780-8e08-b7a5a9b9322d / ext4 noatime,errors=remount-ro 0 1
    UUID=55960f8a-716a-475f-9b52-180d1df7aaa7 /home ext4 noatime,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.

    Edit

    Como apontado pelo Douglas nos comentários, o noatime já implica o nodiratime, então se for feito o uso do primeiro, não é necessário usar o segundo, pesquisei um pouco e encontrei o motivo, onde, se o noatime estiver sendo usado, o código nem mesmo checa pelo nodiratime:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    void touch_atime(struct vfsmount *mnt, struct dentry *dentry)
    {
            /* ... */
            if (inode->i_flags & S_NOATIME)
                    return;
            if (IS_NOATIME(inode))
                    return;
            if ((inode->i_sb->s_flags & MS_NODIRATIME) && S_ISDIR(inode->i_mode))
                    return;
    

    Editei o post para refletir essa informação, e obrigado Douglas pela correção.


  2. 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.


  3. 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.


  4. 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


  5. 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.


  6. 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.



  7. UTF-8 por padrão no MySQL

    Para que o mysql use UTF-8 por padrão, é necessário adicionar duas linhas no /etc/mysql/my.cnf (no caso do ubuntu)

    1
    2
    3
    [mysqld] 
    character-set-server=utf8 
    collation-server=utf8_general_ci
    

    Depois disso e de reiniciar o mysql (sudo restart mysql), é possível verificar se deu certo com a query:

    1
    show variables like "%character%";show variables like "%collation%";
    

    Se tiver dado certo, a coluna Value estará apenas com valores relacionados ao UTF-8


  8. gerar patch com pré-processamento do arquivo

    Um exemplo de como gerar um patch de um arquivo mas antes fazendo algum tipo de processamento, no caso, usando o sed para remover algumas linhas do arquivo, por exemplo

    1
    diff <(/bin/sed '/[regex]/d' arquivo.txt) <(/bin/sed '/[regex]/d' arquivo2.txt) > $patchfile
    

  9. Erro do dia: chmod *

    Chmod é um comando delicado, e executá-lo as pressas sem muita atenção e com sono pode gerar alguns problemas.

    O comando “chmod 600” muda as permissões de um arquivo para que apenas o dono dele tenha acesso, barranco qualquer tipo de acesso de outros usuários, o problema é que executei esse comando assim:

    sudo chmod 600 *

    Fiz isso dentro da home, em um primeiro momento pode-se até pensar que isso não geraria problemas mais graves, até aumentaria a segurança do sistema, o problema é que diretórios precisam de permissão de execussão para que você possa lista-los, logo, fiquei sem acesso a nenhuma das pastas da minha home, assim como os programas que estava usando no momento.

    A solução para o problema foi, primeiro voltar a permissão dos arquivos para algo mais comum:

    sudo chmod 644

    Depois mudar as dos diretórios, para isso, executei um find no home, buscando apenas pelo primeiro nível de profundidade (apenas os arquivos presentes no mesmo diretório), usando “-type d” para atingir apenas os diretórios, e finalmente usando o -exec neles, com o chmod com as permissões corretas (incluindo execução), usando o “+” no exec porque não há problemas em passar várias pastas como parâmetro do chmod.

    sudo find . -maxdepth 1 -type d -exec chmod 755 {} +

    Resultado, tudo de volta ao normal, e um lembrete para se tomar cuidado com o chmod.

    Por

    Em erro.

    tags: erro

« Página 2 / 3 »