Páginas

quarta-feira, 22 de agosto de 2012

/* Jogo da velha do Chaves (C e Allegro) */

Com mais tempo livre por causa da greve na universidade, resolvi desenvolver um jogo da velha "gráfico". Esse projeto basicamente é uma evolução de um simples exercício que fiz e postei aqui no blog há um tempo: jogo da velha em C, só que agora utilizando a biblioteca gráfica Allegro. Resolvi fazê-lo pois eu estava sentindo que a sintaxe e conceitos da Allegro estavam caindo no esquecimento pelo tempo sem desenvolver nada utilizando-a.

O tema do jogo é o seriado Chaves. O jogador 1 é o Chaves e o jogador 2 o Kiko. O background do jogo é a vila do seriado e adicionei uma trilha sonora para o jogo ficar mais animado :)
Como estou temporariamente sem Linux, tive que desenvolver no Windows utilizando o Dev-C++. Por isso ainda não testei no Linux para fazer as adaptações e tornar um código "multi-SO".

O código, como de costume, coloquei no GitHub: Jogo da Velha do Chaves com Allegro. No momento faltam apenas três características para a versão final:
- implementar scores(jogador 1 e jogador 2)
- implementar uma lógica de quem é o primeiro a jogar(atualmente o Chaves sempre começa jogando)
- criar a possibilidade de um jogo contra o computador com 3 níveis(até o momento só temos o modo multiplayer)

26/08/12: Commitado no repositório as modificações para gravar o placar e definir quem começa jogando na atual rodada.




Pra quem for dar uma olhada, aceito críticas(boas ou ruins) e sugestões :)

You can do it!

domingo, 13 de maio de 2012

Plugin Java para navegadores no Gentoo

Recentemente tentei acessar o site do Geogebra para utilizar o aplicativo online, mas acabei me deparando com um problema: o aplicativo não era executado pela justificativa de que eu não tinha nenhuma JRE instalada. O problema disso tudo é que eu tinha sim uma JRE instalada, até porque eu desenvolvo normalmente aplicativos Java.


Então qual seria o problema? Tentei diversos navegadores: Chrome, Firefox e o próprio Epiphany que vem com o Gentoo. Mas, com algumas pesquisas descobri que era algo bem simples! Quando for instalar a sua JRE/JDK é preciso usar a USE Flag nsplugin. Só isso? Sim! Apenas edite seu arquivo make.conf que fica neste caminho: /etc/make.conf. Adicione nsplugin às variáveis USE e compile o pacote novamente.


Para confirmar que os plugins para seu navegador foram corretamente instalados, execute o comando para listar os plugins instalados:


$ eselect java-nsplugin list


Se estiver com dificuldades em instalar a JRE/JDK da Oracle em seu Gentoo recomendo a leitura desta postagem: Instalando pacotes manualmente no Gentoo




Mais sobre Gentoo em:
Gentoo
- Dalton Matos

sábado, 17 de março de 2012

Chrooting Gentoo

Quem utiliza o Gentoo já precisou ao menos uma vez fazer chroot por outro SO, como durante a instalação do próprio. Ainda há casos onde é necessário recorrer ao live do Gentoo(ou à uma outra distro Linux com live) para poder acessar nosso Gentoo original e realizar as devidas modificações.

Exemplo?
Em um emerge --depclean que uma vez fiz, acidentalmente removi o pacote da synaptics que era necessário para que meu teclado funcionasse. Como meu teclado não funcionava precisei dar chroot pelo live do Ubuntu no Gentoo, e então, fiz emerge do pacote.

How to?
Utilizando o live de alguma distro Linux, abra o terminal. Após isso, precisamos montar as partições do Gentoo:


# mkdir /mnt/gentoo
# mount /dev/sdaX /mnt/gentoo
# mkdir /mnt/gentoo/boot
# mount /dev/sdaY /mnt/gentoo/boot
# mount -t proc none /mnt/gentoo/proc
# mount -rbind /dev /mnt/gentoo/dev

obs.:
  • sdaX: 'X' é o número da partição da instalação do Gentoo
  • sdaY: 'Y' é o número da partição de boot do seu Gentoo
  • Os comandos precisam ser executados como root
Agora podemos dar chroot e acessar nosso Gentoo:


# chroot /mnt/gentoo /bin/bash
# env-update
# source /etc/profile
# export PS1="(chroot) $PS1" /*este comando é opcional*/


Pronto! Você já está no seu Gentoo e pronto para modificações, reparos, etc.


Considerações:

  • Uma cópia do Gentoo já instalada na máquina
  • O live utilizado possuir a mesma arquitetura que a instalação do Gentoo
  • As partições sda podem variar de acordo com o modo de particionamento e instalação do Gentoo


Mais informações, acesse:

If it moves, compile it!

quarta-feira, 21 de dezembro de 2011

/* Instalando pacotes manualmente no Gentoo */

     Há pouco tempo resolvi instalar alguma distro Linux no meu notebook. Depois de algumas pesquisas e indicações, escolhi o Gentoo Linux. Ainda estou me habituando ao novo ambiente e frequentemente me surgem dúvidas, onde nada que uma pesquisa básica na internet ou a ajuda do Dalton Matos (que me ajuda ativamente com o Gentoo) não resolva.


     Como desenvolvo programas em Java, resolvi começar a usar o Gentoo também para tal fim. Após baixar o Eclipse, fui fazer emerge da JDK pelo terminal. Foi então que surgiu o problema!
Fiz o emerge normalmente: emerge virtual/jdk
A questão foi que a JDK default do emerge não é a da Oracle. Com isso, um projeto teve alguns problemas de compatibilidade. Fui então procurar como instalar a JDK adequada. Graças a esta página da documentação do Gentoo consegui instalá-la.


Instalando Pacotes Manualmente
     Alguns pacotes não podem ser baixados diretamente pelo emerge, mesmo com modificações em arquivos como o package.license. Isso ocorre por questões de licenciamento, registro, etc.
     Ao tentar fazer emerge de pacotes que estão nesta situação ocorrerá um erro. Será então exibido no terminal o caminho do log (algo parecido com "/var/tmp/portage/.../build.log"). Abra este arquivo com o editor de preferência. Nele você encontrará informações sobre o porque não foi possível fazer o emerge. Se o pacote tiver que ser baixado manualmente, neste arquivo estará indicado aonde fazer o download. Faça o download do arquivo e então copie este arquivo para o caminho /usr/portage/distfiles. Pronto, agora você poderá fazer o emerge deste pacote e, como ele já foi baixado, será compilado(se for o caso) e instalado em seu sistema.
     No caso da JDK7 da Oracle, eu baixei o .tar e copiei-o para a pasta distfiles. Depois disso, dei emerge: emerge dev-java/oracle-jdk-bin, e o pacote foi instalado normalmente.

sexta-feira, 4 de novembro de 2011

/* Mini-Grep */


Descrição/Sobre:
Grep (global / regular expression / print) é um programa executado pela linha de comando do Linux. Esse programa consiste em buscar uma expressão (uma palavra, por exemplo) em arquivos. O Grep original imprime na saída padrão todas as linhas em que ocorreram a expressão mencionada.
Este é um código que funciona de forma parecida, mas reduzida, por isso mini-grep. O uso pela linha de comando é: [programa] [opções] [expressão] [arquivo]. Lembrando que programa é o executável do mini-grep e o arquivo deverá ser o nome com sua extensão.


Código:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

FILE* abreArquivo(char caminho[], char modo[]){
    FILE *f = fopen(caminho, modo);
    
    if(!f){
           printf("ERRO: O arquivo nao existe\n<ENTER>");
           getchar();
           exit(0);
    }
    return f;
}


void fechaArquivo(FILE *f){
    if(fclose(f)){
        printf("ERRO: Problemas ao fechar o arquivo\n<ENTER>");
        getchar();
     }
}

char* leLinha(FILE *f, char *aux){
     int cont = 0;
     
     do{
        if(aux == NULL){
           aux = (char*) malloc(sizeof(char));
           if(!aux){
              printf("ERRO: erro ao alocar memoria\n<ENTER>");
              getchar();
              exit(0);
           }
        }
        else{
           aux = (char*) realloc(aux, (cont+1) * sizeof(char));
           if(!aux){
              printf("ERRO: erro ao realocar memoria\n<ENTER>");
              getchar();
              exit(0);
           }
        }

        fscanf(f, "%c", &aux[cont]);
        cont++;
     }while(aux[cont-1] != 10 && aux[cont-1] != 0);
     aux[cont-1] = 0;
     
     return aux;
}

void buscaPalavra(FILE *f, char *palavra, int op){
    int linha = 0;
    
    if(!op) strupr(palavra);
    
    while(!feof(f)){
       char *aux = NULL;
       
       aux = leLinha(f, aux);
       linha++;
       if(!op) strupr(aux);
       
       if(strstr(aux, palavra)){
          printf("%d: %s\n", linha, aux);
          printf("\n<ENTER>");
          getchar();
          free(aux);
          aux = NULL;
          return ;
       }
       
       free(aux);
       aux = NULL;
    }
    
    printf("Palavra nao encontrada");
    printf("\n\n<ENTER>");
    getchar();
    
}

int parametrosCorretos(int argc, char *argv[]){
    if(argc < 3 || argc > 4){
       printf("\nUso correto: [%s] [opcoes] [palavra] [nome_do_arquivo]", argv[0]);
       printf("\n\n\n<ENTER>");
       getchar();
       return 0;
    }
    
    if(argc == 4)
       if(strcmp(argv[1], "-i")){
          printf("\nOpcao incorreta.\n\nLista de opcoes validas:\n\n");
          printf(" [-i]\tnao diferenciar maiusculas de minusculas");
          printf("\n\n\n<ENTER>");
          getchar();
          return 0;
       }
    return 1;
}

int main(int argc, char *argv[]){
    FILE *f = NULL;
    
    system("cls");
    if(!parametrosCorretos(argc, argv)) exit(0);
    
    if(argc == 4){
       f = abreArquivo(argv[3], "r");
       buscaPalavra(f, argv[2], 0);
    }
    else{
       f = abreArquivo(argv[2], "r");
       buscaPalavra(f, argv[1], 1);
    }
    
    fechaArquivo(f);
    return 0;
}



Primeiro testamos se os parâmetros foram passados de maneira correta e para isso chamamos a função 'parametrosCorretos'. Se o programa foi chamado de forma correta, abrimos o arquivo(se ele existir) e buscamos a palavra a partir da função 'buscaPalavra'. Como não sabemos o tamanho da linha a princípio, se usássemos um array já com suas dimensões definidas poderíamos cair em uma situação em que a linha é maior que este array. Resolvemos este problema com a função 'leLinha', que vai alocando a memória caractere a caractere. Por fim retorna o endereço da linha. O programa para na primeira ocorrência da expressão, e se a mesma não for encontrada exibe uma mensagem no final. :)


---
You can do it!