VidaGeek.net

Linux, Open-source, Programação e Produtividade

Archive for May, 2007

Segue abaixo um video tutorial (em inglês) muito interessante sobre como compartilhar pastas e arquivos através de redes NFS e Samba (SMB) no Ubuntu 6.10. Com apenas 10 minutos você aprende a configurar sua máquina para permitir esse tipo de acesso pela rede.

Posts Relacionados:

  • Livro grátis de Ubuntu
  • Ubuntu planeja versão móvel
  • Mitos do Linux derrubados
  • Ubuntu Ganha o Parlamento Francês
  • Aprendendo Bash
  • Um pouco de Bash - Parte I
  • UTF-8 no Latex
  • Acompanhe-nos por RSS, por Email ou via Twitter.

  • 9 Comments
  • Filed under: Linux
  • Jogos para Geeks: Settlers of Catan

    Durante a estada em Porto Alegre, aprendemos (graças ao Danilo Sato) a jogar Settlers of Catan, um jogo de tabuleiro baseado em estratégia por turnos.

    Projetado por Klaus Teuber, Settlers recebeu prêmios de “Melhor Jogo do Ano” na Alemanha e nos EUA.

    A história é a seguinte: grupos de colonos chegam à ilha de Catan, e disputam entre si o domínio dos recursos e do espaço. Domínio esse que é estabelecido (no jogo) com a conquista de dez pontos de vitória.

    No início, cada jogador coloca no tabuleiro dois povoados, cada um com uma estrada adjacente. Cada povoado deve estar a uma distância de pelo menos dois espaços de qualquer outro povoado, não importando seu controlador.

    Durante sua vez, cada jogador joga dois dados, e avalia sua soma. Se ela for igual ao número que estiver sobre algum terreno, esse terreno concede, para cada povoado que se situe ao seu redor, um recurso de seu tipo ao contolador do povoado.

    Entretanto, se sair um ‘7′ na soma dos dados, todos os jogadores com mais de sete cartas de recursos devem descartar metade delas, e aquele que jogou os dados escolhe uma nova posição para o “ladrão” (uma peça que impede a produção de recursos no território em que se encontra estacionada), e toma um recurso, escolhido às escuras, da mão de um oponente que possua um povoado vizinho à posição escolhida.

    Cada jogador pode trocar quatro recursos de um tipo por um recurso à sua escolha, mas possuir povoados em lugares especiais - os portos - altera esse balanço. Podem também ser feitas trocas livres entre os próprios jogadores.

    E, após jogar os dados, o jogador pode “construir”, o que significa trocar os recursos adequados para poder colocar uma peça - estrada, povoado, ou cidade - no tabuleiro, ou obter uma carta de desenvolvimento, as quais possuem efeitos valiosos, como a habilidade de mover o “ladrão” para outro lugar (carta Soldado), ou ainda obter dois recursos à escolha (carta Ano de Fartura).

    Cada povoado vale um ponto de vitória, cidades valem dois, a maior estrada (com comprimento maior do que seis) vale dois pontos, e o maior exército (com mais de três soldados) vale também dois pontos.

    É um jogo interessante e bastante estratégico, com um fator aleatório razoavelmente forte - pelo fato da produção estar ligada ao lançamento dos dados. Só é de se lamentar o fato de que não existe uma versão nacional. MAS…

    Há versões online como JSettlers e Xplorers, além de várias outras, e também existe um projeto (Pioneers) que oferece pacotes para Gentoo, Debian, e outras distribuições, além, é claro, do código-fonte.

    Para saber mais (e ver fotos), há a entrada para Settlers Of Catan no BoardGameGeek, uma fonte de informações e (muitas) fotos de jogos de tabuleiro.

    Posts Relacionados:

  • Oito (ou dez) coisas que todo geek precisa pra produzir mais
  • Nova Coluna Semanal: Geek Style of Life
  • Game Developers Conference
  • Atualizações de Segurança do Windows Vista
  • Linux para jogos
  • Futuro dos Jogos
  • Jogos para Geeks: Mudando Regras
  • Acompanhe-nos por RSS, por Email ou via Twitter.

  • 3 Comments
  • Filed under: Dicas, Jogos
  • Dia C - Tuning

    Enfim chegamos à parte que todos esperavam. Como extrair ou últimos ciclos do seu processador. Como evitar fazer qualquer coisa que não seja realmente necessária ao seu código. Mas antes de começar a carnificina, algumas considerações:

    • Antes de mais nada, otimização não deve ser feita em todo o seu código. Deve ser feita apenas nos gargalos de desempenho. Após o código ser otimizado, ele costuma ficar muito ilegível ou até mesmo inseguro e instável. Por isso, quanto melhor escolhida a área de otimização, melhor sua otimização.
    • Nunca, mas NUNCA mesmo, comece seu projeto já otimizando o código. Essa é uma das receitas para o fracasso total do seu projeto. Código otimizado é mais difícil de ler, de escrever e de depurar. Normalmente você vai perder horas apenas pra entender o que está acontecendo em um bloco de 20 linhas de código.
    • Otimização não reduz a complexidade do algorítmo. Usar um algorítmo melhor (de menor complexidade) é quase sempre mais indicado do que otimizar o código (falo quase sempre porque talvez exista algum caso estranho em que isso não seja verdade).

    Mas, se depois de fazer tudo isso, seu código ainda não roda em tempo satisfatório, o resto das dicas pode ajudar bastante:

    • Antes de mais nada, encontre o gargalo de desempenho. Normalmente um programa gasta 90% do tempo executando 10% do código. Esses 10% devem ser o alvo da sua otimização
    • Indique quais variáveis devem ser mantidas em registradores. Geralmente contadores são as variáveis mais acessadas durante a execução de um laço. Se elas forem mantidas nos registradores, você ganhará tempo pois elas não precisam ir para a cache e voltar o tempo todo.
    • Sempre que possível, evite calcular duas vezes a mesma coisa. Armazene o resultado(não estou falando de Programação Dinâmica. Estou falando de cálculos simples, como onde deve estar a informação em uma matriz).
    • Quando precisar atravessar um vetor em ordem crescente ou decrescente, faça isso com um loop em que o ponteiro é incrementado. Isso é mais eficiente porque quando você acessa uma posição de um vetor, você usa uma multiplicação para isso. Quando você atravessa o vetor incrementando o ponteiro, a multiplicação é trocada por uma multiplicação mais simples (dependendo, pode ser até mesmo um bitshift) e uma soma.
    • Não passe muitos parâmetros ou parâmetros grandes para funções. Dê preferência a passagem de ponteiro quando o parâmetro ultrapassar o número de bytes de uma Word (4 bytes em um processador de 32 bits e 8 em um de 64). Com isso, você reduz o overhead do protocolo de chamada de função, que deve alocar memória extra na pilha e identificar os seus parâmetros.
    • Sempre que possível e viável, declare suas funções como inline. Funções inline são inseridas diretamente no código, evitando a chamada de função. Mas não faça isso com funções grandes (mais que 7 linhas). Pode gerar erros estranhos e bugs realmente difíceis de achar, além de não melhorar a velocidade do código
    • Troque chamadas de funções simples por macros. Uma macro é ainda mais eficiente que uma função inline, mas é menos segura.
    • Declare suas variáveis no bloco mais local possível. Assim, somente quando ela for necessária ela será alocada.
    • Quando suas condições booleanas forem compostas, coloque elas em ordem de frequência. Isso otimiza pois C fecha as codições booleanas por “curto-circuito”. Quando alguma delas impede que o resultado seja TRUE, ele simplesmente considera FALSE e não testa o resto. Então faz bastante diferenção você verificar primeiro algo que quase nunca acontece e somente depois você verifica o que está sempre determinando a condição booleana.
    • Se quiser economizar memória em suas structs, coloque os tipos de dentro dela em ordem decrescente de tamanho (em bytes). Isso vai impedir que o compilador use um alinhamento de 4 ou 8 bytes para toda a estrutura. Mas cuidado porque isso pode reduzir o desempenho do seu programa.
    • Se estiver usando algum compilador que defina _GNUC_, ou seja, suporta o padrão GNU para C, especifique atributos (__atributte__) para as suas funções e estruturas indicando o que pode ou não pode acontecer com elas.
    • Use assembly. C possui suporte a assembly inline, usando o identificador “asm” (”__asm__” também é válido em compiladores GNUC).

    Mais informações: Optimizing C and Cpp e C Coding

    Próximo post: ???

    Posts Relacionados:

  • Séries
  • Dia C - Algoritmos Genéricos
  • Game Developers Conference
  • Digam adeus ao mouse
  • Um dia na vida de um programador azarado
  • O Mal da Google
  • CeBIT
  • Acompanhe-nos por RSS, por Email ou via Twitter.

    Um problema um pouco recorrente no Linux é que, quando uma atualização é feita, em geral, algo para de funcionar. Isso aconteceu comigo hoje, quando fiz um update do meu Gentoo (aquele do Guia Linux) e os drivers de Wireless foram atualizados. Para resumir, quando vim para a faculdade descobri que não conseguia conectar meu micro.

    Por uma sorte incrível estava comigo um CD do Ubuntu 7.0.4 que pretendia dar uma olhada. Este é um relato de como consertei meu sistema através do Ubuntu e sua facilidade configurar o Hardware.

    Bom, como disse, meu Wireless não estava funcionando, então usei o CD do Ubuntu para dar boot na maquina. Como o Ubuntu foi feito para funcionar “out of the box”, minha placa wi-fi foi imediatamente localizada e pude conectar na web.

    Dessa forma, com a ajuda de um guia de recuperacao do GRUB (que não era o meu problema) pude entrar no meu gentoo e fazer tudo como se estivesse nesse sistema (afinal é tudo Linux…). Para isso fiz:

    sudo mkdir /mnt/root
    sudo mount -t ext3 /dev/sda3 /mnt/root
    sudo mount -t proc none /mnt/root/proc
    sudo mount -o bind /dev /mnt/root/dev
    sudo cp -L /etc/resolv.conf /mnt/root/etc/resolv.conf
    sudo chroot /mnt/root /bin/bash

    Estava agora em casa, com uma pequena excessão que, no Ubuntu, as partições são sda e nao hda como estava acostumado, mas isso não foi um problema. Dei alguns emerges, recompilei o kernel, alterei algumas configurações e finalmente consegui meu Wireless no Gentoo devolta (mais ou menos, tive que fazer uma gambiarra).

    Portanto, fica como dica, mesmo que não use o Ubuntu carregue consigo o CD de instalação que pode eventualmente ser útil, por exemplo para fazer a instalacao do Gentoo quando seu Wireless não funciona. Outra dica, não atualize seu sistema no dia da entrega de trabalho…

    Posts Relacionados:

  • Livro grátis de Ubuntu
  • Ubuntu planeja versão móvel
  • Compartilhando pastas e arquivos com Ubuntu
  • Ubuntu Ganha o Parlamento Francês
  • Quer trabalhar na Google?
  • Analisando o boot do Ubuntu com o Bootchart
  • Meu Ubuntu fala!
  • Acompanhe-nos por RSS, por Email ou via Twitter.

  • 22 Comments
  • Filed under: Dicas, Linux

  • Publicidade