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
domingo, 13 de maio de 2012
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
# 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*/
# 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.
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!
domingo, 30 de outubro de 2011
/* PGC - Programa de Gerenciamento de Clientes */
Como já sabemos, sistemas que gerenciam informações sempre "quebram um galho"(quando bem feitos). É só você pensar que em uma lista com 1000 materiais escritos em papéis precise das informações de um em específico. Mesmo estando organizados em ordem alfabética, por exemplo, essa é uma tarefa bem cansativa. Com um sistema fazendo esse trabalho de armazenar as informações e gerenciá-las, uma função para pesquisar um material se sairia muito melhor.
Há alguns meses, quando eu estava mais ativo na Namelez, surgiu uma proposta de sistema para um salão de beleza. O sistema deveria guardar as informações de clientes, como nome, endereço, telefones de contato, observações, etc. Fazer esse sistema foi uma experiência única, pois além de ter um contato mais direto com o cliente, pude aprender e entender várias das funções de um analista de sistemas.
Vendo que o sistema feito para o salão (que demos o nome de NameleZ SoftHair) havia sido bem sucedido, minha mãe, que trabalha com vendas, pediu que eu fizesse algo similar para ela. Foi aí que surgiu a ideia do PGC. Um sistema simples feito em C e que roda em console do Windows. Algumas características foram decididas de forma a parear com meu conteúdo atual na faculdade, como a linguagem de programação C e o uso de arquivos para guardar as informações.
O projeto ainda está na metade de desenvolvimento. É open-source e você pode fazer *o que quiser* com o código que está no meu perfil do GitHub, bem aqui.
Aceito críticas, boas ou ruins ...
You can do it!
Há alguns meses, quando eu estava mais ativo na Namelez, surgiu uma proposta de sistema para um salão de beleza. O sistema deveria guardar as informações de clientes, como nome, endereço, telefones de contato, observações, etc. Fazer esse sistema foi uma experiência única, pois além de ter um contato mais direto com o cliente, pude aprender e entender várias das funções de um analista de sistemas.
Vendo que o sistema feito para o salão (que demos o nome de NameleZ SoftHair) havia sido bem sucedido, minha mãe, que trabalha com vendas, pediu que eu fizesse algo similar para ela. Foi aí que surgiu a ideia do PGC. Um sistema simples feito em C e que roda em console do Windows. Algumas características foram decididas de forma a parear com meu conteúdo atual na faculdade, como a linguagem de programação C e o uso de arquivos para guardar as informações.
O projeto ainda está na metade de desenvolvimento. É open-source e você pode fazer *o que quiser* com o código que está no meu perfil do GitHub, bem aqui.
Aceito críticas, boas ou ruins ...
You can do it!
Assinar:
Postagens (Atom)