Arquivos

Archive for the ‘Tecnologia’ Category

ABC++ Coletando lixo do C (Garbage colector para C e C++)

setembro 21st, 2010 No comments
/*
Pessoal,

Todos que usam C e C++ com mais seriedade sabem que a utilização da
memória pode ser um problema.
Matreizes dinâmicas, ponteiros de char e tudo o mais que pode crescer
e explodir o programa.
Não seria bom se a linguagem C tivesse um recurso para controlar a
memória ? Em alguns projetos, sim. Em outros é bom ter um controle
manual da memória.
Tudo que é automático falha automaticamente.
Mas e se fosse possível usar este recurso sempre que for conveniente
sem perder o poder de poder fuçar na unha quando for necessário ?

Hmmmm agora estamos falando como programadores de verdade!

A linguagem C é extensível e existe como adicionar uma lib que faça o
sujo trabalho de coletar o lixo para nós.

Sim, a biblioteca de GC (Garbage Colector),  possui um algoritmo de
"limpeza" de memória e basicamente você não vai ficar perdido em meio
a funções free() não finalizadas e também vai ter uma indicação melhor
em tempo de execução se alguma área de memória explodiu, e onde.
Isso dá uma grande agilidade e poder de depuração.
Bom, as referências dessa lib: Está hospedada e mantida pela HP. É
usada no projeto Mozilla, Inkscape, Mono e vários projetos.
Abaixo um simples exemplo de programa devorador de memória alocada e
como ele fica simples feito com a lib.
Vejam que basta utilizar GC_MALLOC() no lugar do mal-loco() original
ou seja a lib possui interface com o esquema de alocação de memória
feito por programadores cabra-macho sim senhor.
E notem também que o free() foi pra /dev/null

*/

//Exemplo de utilização da biblioteca. loop.c

#include "gc.h"
#include <assert.h>
#include <stdio.h>

int main()
{
        int i;

        GC_INIT();    /* Optional on Linux/X86; see below.  */
        for (i = 0; i < 10000000; ++i)
        {
                int **p = (int **) GC_MALLOC(sizeof(int *));
                int *q = (int *) GC_MALLOC_ATOMIC(sizeof(int));
                assert(*p == 0);
                *p = (int *) GC_REALLOC(q, 2 * sizeof(int));
                if (i % 100000 == 0)
                        printf("Heap size = %d\n", GC_get_heap_size());
        }
        return 0;
}
//EOF

// Compilação:
// cc -I/home/xyz/gc/include loop.c /home/xyz/gc/lib/libgc.a -o loop

//Referencias da lib:
//http://www.hpl.hp.com/personal/Hans_Boehm/gc/
//http://www.hpl.hp.com/personal/Hans_Boehm/gc/simple_example.html
Categories: Tecnologia Tags:, , ,

Vetor 2D Dinamico em Linguagem C

setembro 10th, 2010 No comments

Normalmente esse processo é meio chato, dá bugs estranhos e é meio
obscuro então vai uma dica para quem quer e/ou precisa tratar com esse
tipo de vetor.

Vamos tratar com vetor de “char” dinâmico com 2 dimensões (o mesmo de
um vetor de strings de 1 dimensão):

Imagine a situação em que temos uma linha com N palavras e queremos
colocar cada uma em uma posição do vetor para isso eu vou usar algumas
funções: “strtok”, “strcpy” e “getline” (explicação de como funciona
fica pra próxima).
Lembrando que “line” é um char * para uma linha com N palavras.(nesse
exemplo usei um teste.txt com 9 palavras)

int main() {
FILE *fentrada;
char **vetor = NULL;
char *line = NULL;
char *token;
size_t len = 1;
int N = 9;
int i;
fentrada = fopen(“teste.txt”, “r”);
getline(&line, &len, fentrada);
token = strtok(line, ” “);
vetor = (char **) realloc(vetor, N * sizeof(char **));
vetor[0] = (char *) malloc(sizeof(char) * (strlen(token) + 1));
strcpy(vetor[0], token);
for (i = 1; i < N; i++) {
token = strtok(NULL, ” “);
vetor[i] = (char *) malloc(sizeof(char) * (strlen(token) + 1));
strcpy(vetor[i], token);
}
return 0;
}

Esse processo é pra quando você sabe o valor de N, caso não saiba fica assim:

int main() {
FILE *fentrada;
char **vetor = NULL;
char *line = NULL;
char *token;
size_t len = 1;
int N = 9;
int i;
fentrada = fopen(“teste.txt”, “r”);
getline(&line, &len, fentrada);
token = strtok(line, ” “);
vetor = (char **) realloc(vetor, 1 * sizeof(char **));
vetor[0] = (char *) malloc(sizeof(char) * (strlen(token) + 1));
strcpy(vetor[0], token);
i = 1;
do {
token = strtok(NULL, ” “);
if (token) {
vetor = (char **) realloc(vetor, (i + 1) * sizeof(char **));
vetor[i] = (char *) malloc(sizeof(char) * (strlen(token) + 1));
strcpy(vetor[i], token);
i++;
N = i;
}
} while (token);
return 0;
}

A idéia é que a primeira dimensão seja dinâmica e vá variando conforme
o numero de palavras e a segunda dimensão tenha o tamanho exato da
palavra(pra não desperdiçar memória ou não estourar a memória se
faltar).

Ambas as implementações é possível acessar a posição da palavra, pra
por exemplo imprimir:
for (i = 0; i < N; i++) {
printf(“%s\n”, vetor[i]) ;
}

Bom esse é um artigo para preparação para Vetor 3D logo mais postarei outro artigo explicando sobre Vetor 3D

Categories: Tecnologia Tags:

Instalar GNOME no Slackware

agosto 26th, 2010 No comments

yo! Depois de um bom tempo usando GNOME no Slackware e gostando muito, resolvi fazer esse post, mostrando passo a passo como instalar o GNOME 2.30 no Slackware Linux 13.1 usando um dos projetos que distribuem o GNOME para Slackware, o GNOME SlackBuild (http://gnomeslackbuild.org), também chamado de GSB.

Uma das coisas mais legais do GSB é que ele praticamente não modifica nada no Slackware, tornando bem simples o processo de remoção caso queria removê-lo do sistema (e esse procedimento está na documentação oficial), além de possuir uma versão para x86_64 e de procurar se manter atualizado. Realmente é um ótimo projeto e espero que dure por muitos anos.

Read more…

Categories: Tecnologia Tags:, ,

Nerdicas 11 – Aproveitando melhor seu monitor widescreen

julho 30th, 2010 2 comments

Os monitores widescreen são ótimos para ver filmes e vídeos, mas para editar textos, programar e criar webpages mostram bem poucas linhas e “desperdiçam” muito espaço lateral.

Mas com um pequeno suporte de madeira podemos colocar o monitor a 90 graus e aproveitar a largura dele como se fosse altura .

Fica como aqueles monitores de Arcade antigos.

No KDE fica fácil ajustar a tela para que ela funcione “de lado” a 90 graus.
Crie um script e coloque em:

~/.kde/Autostart com a seguinte linha:

#!/bin/bash
/usr/bin/kdialog --yesno "Virar tela 90%"
if [  "$?" == "0" ] ; then
/usr/bin/xrandr -o 1
fi

.

Isso gera um popup no KDE perguntando se deseja virar o vídeo a 90 toda vez que logamos no kde.
Um <enter> vira a tela e um <esc> sai do popup.

Na imagem como ficou meu “novo monitor de programação”:

Categories: Tecnologia Tags:, ,

Erro do Windows 7 com JDK 6

julho 24th, 2010 No comments

Fala pessoALL. Tudo tranquilo com vcs?

Bom, estou postando novamente para compartilhar o problema que tive com a instalação da JDK do Java 6 update 21. Troquei meu notebook por um da DELL e resolvi pegar esse fim de semana para fazer a instalação dos programas o qual eu utilizo no meu dia a dia de trabalho. Primeiro fiz as cópias de todos os meus arquivos para o notebook novo e depois resolvi instalar as ferramentas de desenvolvimento que eu utilizo.

Bom quando baixei a SDK do Java, tentei executá-la e obtive um erro um tanto quanto estranho. O erro apresentado foi o seguinte: “Erro ao aplicar transformações. Verifique se os caminhos de transformação especificados são válidos”. Como foi a primeira vez que obtive esse erro, fui dar uma googlada para verificar se achava alguma coisa, e pra minha surpresa a maioria dos itens que achei, não resolviam meu problema.  Quebrando um pouco a cabeça, cheguei a solução da seguinte maneira:

1º Passo: Executei o instalador em modo de log com o comando: jdk-6u21-windows-i586.exe -l*v c:\arquivo.log. Este comando faz com que seja gerado um arquivo de log, o qual armazenei na pasta raiz com o nome arquivo.log

2º Passo: Analisei o arquivo gerado e vi que ele extraia um arquivo .MSI em uma determinada pasta, no meu caso era: “C:\Users\Jederson\AppData\LocalLow\Sun\Java\jdk1.6.0_21″. Para localizar essa linha procure pelo termo: “Package we're running from ==>".

Com isso siga para o caminho localizado ai, e execute o arquivo .MSI, com isso a instalação irá percorrer sem problemas.

É isso ai pessoal. Java is the future.

Abraço ALL

Categories: Tecnologia Tags:,

Firebird Developers Day 7º Edição

julho 20th, 2010 No comments

Olá, a todos.

Este é meu primeiro post no choppnerd, apesar de juntamente com outros membros ter fundado o grupo. No dia 17 de julho, estive presente no 7º firebird developers Day ( 7FDD ) que trata de banco de dados, em especial do banco de dados firebird. Como de costume varias foram as palestras apresentadas e dentre as que acabei assistindo a que mais se destacou foram as novidades do firebird 3.0, que terá lançamento previsto para o segundo quarto do ano que vem. Nessa versão do firebird, haverá diversas mudanças estruturais das quais, pretende deixar o banco de dados mais robusto.

Para quem não conhece o firebird, convido-os a baixar e a conhece-lo, já que é um banco de dados que é muito rápido, não necessita de configurações especificas para funcionar e várias empresas o utilizam, dentre as quais podem-se destacar banco do brasil e Caixa.

Outra palestra que foi bastante proveitosa, foi a palestra do Douglas Tosi, que mostrou a nova funcionalidade de TraceAPI ( disponível na versão 2.5 do firebird que está em Release Candidate 2 ). Est API tem como característica mostrar os eventos em tempo real do banco de dados, de tal forma que consigamos ver tudo o que está acontecendo, como os comandos que estão sendo executados ( triggers, procedures e selects ) e eventos tais como logar e deslogar no banco de dados, preparações de sql.

No geral, o evento contou mais de 550 pessoas, e também ouve doações para a Firebird Foundation, que por sinal, foi a maior doação de um FDD.

Para quem não conhece, e tem interesse em conhecer este banco de dados, o site para download é www.firebirdsql.org, e ele está disponível para diversas plataformas como windows ( 32/64 bits), Linux ( 32/64 bits), Hp-Ux, MacOS e Solaris. Alem de diversos drivers disponíveis, como ODBC, Provider para .Net e JDBC para Java.

Espero que tenham gostado.

Jederson Zuchi.

Categories: Tecnologia Tags:

Teste de processador

junho 9th, 2010 No comments

O que acontece quando se retira o cooler do processador?

O calor gerado é tanto que dizem por aí que se pode até fritar um ovo:

Crianças, não façam isso em casa… façam na do RicLeite!!!

Categories: Tecnologia Tags:

Nerdicas 10 – Crtl+Alt+End para desligar o Linux

junho 7th, 2010 No comments

yo! Vamos a mais uma nerdica simples. Você, assim como eu, pode ter alguns servidores espalhados por aí, servidores de clientes que, por algum motivo ou outro, quer desligar o servidor durante do fim de semana ou por dar umas férias coletivas e fechar a empresa por algum tempo (ok, acho que ninguém faz mais isso hoje em dia…).

Geralmente os servidores não tem monitor e é um desperdício de tempo ir no local só para desligar o servidor e nem sempre temos a chance de fazer isso remoto. Pior ainda é fornecer a senha root (ou qualquer outra) para o dono da empresa e deixar ele fazer isso, já que é um perigo permitir acesso ao servidor sem necessidade e ainda mais se a pessoa, como é na maioria dos casos, não possui conhecimento em Linux.

Read more…

Categories: Tecnologia Tags:,

Atualizar Slackware 13.0 para 13.1

junho 4th, 2010 No comments

Vou apresentar minha experiência atualizando meu notebook e o desktop de trabalho para do Slackware 13.0 para a versão 13.1. A atualização foi tranquila e vou descrever o método tradicional de atualização, pois é possível atualizar seu sistema usando o slackpkg.

Uma observação que faço é que esse documento é uma tradução adaptada do UPGRADE.TXT que acompanha do Slackware 13.1 e que eu recomendo fortemente que você leia o arquivo CHANGE_AND_HINTS.TXT antes de atualizar.

Read more…

Categories: Tecnologia Tags:,

Aprenda a dobrar camisas com um engenheiro

junho 2nd, 2010 No comments

Muito interessante! Me lembro que até o Sheldon Cooper do seriado The Big Bang Theory utilizou um apetrecho destes…

Categories: Tecnologia Tags: