sábado, 6 de setembro de 2008

Juntando vários arquivos .pdf em um só com o auxílio de um código em lLPO C e a ferramenta pdftk

Para mais informações sobre o pdftk, de uma buscada na internet
O programa converte todos os arquivos .pdf da pasta com excessão aqueles com espacos no nome, por exemplo "exemplo 1.pdf"
Copie oo código c e salve como 1.c
Complile, cc 1.c -o 1 e execute com ./1
Pronto basta procurar o arquivo PDFTK ...
Ai vai o código:
Eu ia colocar em c mas como nao da pra colocar vai em xml









#include <stdlib.h>


#include <stdio.h>


#include <string.h>


#define LEITURA 0


#define ESCRITA 1


#define LEITURAESCRITA
2


#define TAMNOME 500


/*===================================================================*/


/*===================================================================*/


void
mostraRespricoes();


int open1(char *file,
int oflag );


void prog();


char *gettextoarq(int
fd, char *buf, int buf_size, char *texto);


char
*gettextoarq1Somenteleitura( char *arq, char *texto);


char
***getLinhasSomenteleitura(char *arq, int *j, char ***texto4);


void mostraLinhas(char
*arq, int j);


char
*getLinhaISomenteleitura(char *arq, int *j, char *linha, int I);


char
*gettextoarq1Somenteleitura1( char *arq);


char
*getLinhaISomenteleitura1(char *arq, int I);


int
getNumeroLinhaString(char *str);


int contachar(char
string[], char letra);


void mostraLinhas1(char
*arq);


int
getNumeroLinhaStringArquivo(char *arq);


char *strpdftk(char
*arq);


void limpaStr(char
*Str);


char
**getvetorLinhasArg(char *arq);


void mostraLinhas2(char
*arq);


char
**getvetorLinhasArg1(char *arq);


char
**getvetorLinhasArg1(char *arq);


void mostraLinhas3(char
*arq);


int
getimaiorStringemArq(char *arq);


int
get_Strlen_da_maior_String_em_Arq(char *arq);


char
***alocar_vetor_string_arq(char *arq);


char
***get_vetor_string_arq(char *arq);


void mostraLinhas4(char
*arq);


char
***alocar_vetor_string_arq(char *arq);


char
substituiEspacoPor_(char *str);


char *subs_str(char
*string, char *substring, char *nova);


/*===================================================================*/


/*===================================================================*/


/*===================================================================*/


char
***get_vetor_string_arq(char *arq)


{


int l, i, j, k, m, n,
o, num_linhas;


char ***vet1, **vet;


vet1=NULL; vet=NULL;


vet1=alocar_vetor_string_arq(arq);


vet=*vet1;/* tenho o
vetor de strings alocadinha basta preenchê-lo*/


num_linhas=getNumeroLinhaStringArquivo(arq);


for(i=0;
i<num_linhas; i++)


{


sprintf(vet[i] ,
"%s", getLinhaISomenteleitura1(arq, i) );


}


return vet1;



}


/*===================================================================*/


/*===================================================================*/





void mostraLinhas4(char
*arq)


{


int l, i, nl;


char **vet, ***vet1;


vet=NULL; vet1=NULL;


vet1=get_vetor_string_arq(arq);


vet=*vet1;


nl=getNumeroLinhaStringArquivo(arq);


for(i=0; i <
nl;i++)


{


printf("\n
vet[%i]: %s", i, vet[i]);


}



printf("\n\n
************************************\n\n");



}


/*===================================================================*/


void mostraLinhas3(char
*arq)


{


int l, i;


char **vet;


vet=NULL;


vet=getvetorLinhasArg1(arq);



if(vet==NULL){printf("\n Deu problema no mostra linha3 ver e
nulo !\n");}


//t8=getLinhaISomenteleitura1(arq,
9);


/*printf("\n
Passemos a i=getNumeroLinhaStringArquivo(arq);\n");*/


i=getNumeroLinhaStringArquivo(arq);


//printf("
********* Mostrando as %i linhas do arquivo %s ****\n\n", i,
arq);


printf("Linhas(vet)[
%i ]{%i}: %s \n", 0, strlen(vet[0]), vet[0]);


printf("Linhas(vet)[
%i ]{%i}: %s \n", 1, strlen(vet[1]), vet[1]);


/*


for(l=0; l < i;
l++)


{


printf("Linhas(vet)[
%i ]{%i}: %s \n", l, strlen(vet[l]), vet[l]);


}*/


printf("\n\n
************************************\n\n");



}


/*===================================================================*/


/*===================================================================*/


void mostraLinhas2(char
*arq)


{


int l, i;


char **vet;



vet=getvetorLinhasArg(arq);



//t8=getLinhaISomenteleitura1(arq,
9);



i=getNumeroLinhaStringArquivo(arq);


//printf("
********* Mostrando as %i linhas do arquivo %s ****\n\n", i,
arq);



for(l=0; l < i;
l++)


{


printf("Linhas(vet)[
%i ]{%i}: %s \n", l, strlen(vet[i]), vet[i]);


}


printf("\n\n
************************************\n\n");



}


/*===================================================================*/


int
get_Strlen_da_maior_String_em_Arq(char *arq)


{


int l, i, k, la, bb,
maior, idomaior;


char **vet,
str[TAMNOME];


k=0;maior=0;


for(i=0;
i<getNumeroLinhaStringArquivo(arq);i++)


{


k =
strlen(getLinhaISomenteleitura1(arq, i));


if(k>=maior){maior=k;idomaior=i;}


}


return maior;


}


/*===================================================================*/


char
***alocar_vetor_string_arq(char *arq)


{


int tam1, tam2, i,
j;


char **vetor;


tam2 =
get_Strlen_da_maior_String_em_Arq(arq);


tam2=tam2*sizeof(char);


tam1=getNumeroLinhaStringArquivo(arq);


if((vetor=(char**)malloc(tam1*sizeof(char*)))==NULL)


{


printf("\n Nao
foi possivel alocar as linhas do de vetor de strings para do arquivo
\n");


return NULL;


}


for(i=0;
i<tam1;i++)


{


if((vetor[i]=(char*)malloc(tam2))==NULL)


{


printf("\n
Nao foi possivel alocar as colunas do vetor de strings para do
arquivo \n");


for(--i;i>=0;i--)


{


free(vetor[i]);


}


free(vetor);


return NULL;


}


}


return &vetor;








}


/*===================================================================*/


int
getimaiorStringemArq(char *arq)


{


int l, i, k, la, bb,
maior, idomaior;


char **vet,
str[TAMNOME];


k=0;maior=0;


for(i=0;
i<getNumeroLinhaStringArquivo(arq);i++)


{


k =
strlen(getLinhaISomenteleitura1(arq, i));


if(k>=maior){maior=k;idomaior=i;}


}


return idomaior;


}


/*===================================================================*/char
**getvetorLinhasArg1(char *arq)


{


int l, i, k, la, bb;


char **vet,
str[TAMNOME];


/* o probela e alocar
o vetor para armazenar*/



i=getNumeroLinhaStringArquivo(arq);


vet=(char**)malloc(i*sizeof(char*));


if(vet==NULL){printf("\n
Nao foi possivel alocar as linhas do vetor de linhas \n");
return NULL;}





for(la=0; la < i;
la++)


{


strcpy(str
,getLinhaISomenteleitura1(arq, la));


k = strlen(str);


/*printf("\n k
= strlen(str);: %i\n st: %s\n", k, str);*/


vet[la]=(char*)malloc(k*sizeof(char));if(vet[la]==NULL){printf("\n
Nao foi possivel alocar as colunas do vetor de linhas \n");
free(vet);return NULL;}



sprintf(vet[la],
"%s", str);


for(bb=0; bb<=la;
bb++)


printf("%s \n
", vet[bb]);


//strcpy(vet[l],
str);


// if((l%2)!=0){


//printf("
%i%%3=%i\nLinhas(vet[%i])[ %i ]: %s \n str : %s \n\n",l, l%3, l,
l, vet[l], str);


//}



}


//printf("
vet[1-4]: %s %S %s %S \n\n", vet[0], vet[1], vet[2], vet[4]);


printf(" Agora vem
a montagem do vetor vet : %s \n\n", vet);


/* for(la=0; la <
i; la++)


{



printf("\n
vet[%i]: %s\n ", la, vet[la]);



}*/


return vet;




}


/*===================================================================*/





void mostraLinhas1(char
*arq)


{


int l, i;






//t8=getLinhaISomenteleitura1(arq,
9);



i=getNumeroLinhaStringArquivo(arq);


printf("
Mostrando as %i linhas do arquivo \n\n", i);



for(l=0; l < i;
l++)


{


printf("Linhas[
%i ]: %s \n", l, getLinhaISomenteleitura1(arq, l));



}


printf("\n\n
************************************\n\n");



}


/*===================================================================*/


char
**getvetorLinhasArg(char *arq)


{


int l, i, k;


char **vet, *str;


l=getNumeroLinhaStringArquivo(arq);


//printf("
Mostrando as %i linhas do arquivo \n\n", l);


vet=(char**)malloc(l*sizeof(char));


if(vet==NULL){printf("\n
Nao foi possivel alocar as linhas do vetor de linhas \n");
return NULL;}


for(i=0; i < l;
i++)


{


strcpy(str
,getLinhaISomenteleitura1(arq, i));


k = strlen(str);


vet[i]=(char*)malloc(k*sizeof(char));


if(vet[i]==NULL){printf("\n
Nao foi possivel alocar as colunas do vetor de linhas \n");
return NULL;}


strcpy(vet[i] ,
str);


printf("vet[ %i
]: %s \n", l, vet[i]);



}


//printf("\n\n
************************************\n\n");




return vet;


}


/*===================================================================*/


/*===================================================================*/


void mostraLinhas(char
*arq, int j)


{


int l;



//t8=getLinhaISomenteleitura1(arq,
9);




printf("\n\n
Mostrando as %i linhas do arquivo \n\n", j);



for(l=0; l < j;
l++)


{


printf("Linhas[
%i ]: %s \n", l, getLinhaISomenteleitura1(arq, l));



}


printf("\n\n
************************************\n\n");


printf(" %s \n O
Arquivo tem %i linhas", gettextoarq1Somenteleitura1(arq),
getNumeroLinhaString(gettextoarq1Somenteleitura1(arq)));/**//**/


printf("\n\n
************************************\n\n");


}


/*===================================================================*/


void mostraRespricoes()


{




printf(" 1 - O
arquivo arqpdf.txt tem que estar no mesmo diretorio \n ");


printf(" 2 - Os
arquivos a serem convertidos devem estar no mesmo diretorio \n");


printf(" 3 - O
arquivo gerado tera o nome de \'PDFTK921_ ...pdf\'\n");


printf(" 4 - Os
nomes dos arquivos a serem unidos nao podem possuir espacoe em
branco, pelo menos por enquanto\n");



}


/*===================================================================*/


/*===================================================================*/


int contachar(char
string[], char letra)


{


int contador,
tamanho, ocorrencia = 0;


tamanho =
strlen(string);



for(contador=1;contador <= tamanho;contador++)



if(string[contador] == letra)


ocorrencia++;


return(ocorrencia);


}


/*===================================================================*/


int
getNumeroLinhaString(char *str)


{


/*onde str é a
string com várias linhas*/


return
contachar(str, '\n');



}


/*===================================================================*/


int
getNumeroLinhaStringArquivo(char *arq)


{


/*onde str é a
string com várias linhas*/


int i;


char *s1;


s1=gettextoarq1Somenteleitura1(arq);


i=getNumeroLinhaString(s1);


i=i-1;


return i;


}





/*===================================================================*/





/* fazer uma função
que retorne somente a string da linha,


* deve-se passar a
linha e um ponteiro onde string estara*/


char
*getLinhaISomenteleitura1(char *arq, int I)


{


int i;


char text[10000],
*t1, *t2, charater[500], *ta1;



t1=gettextoarq1Somenteleitura1(arq);


sprintf(text, "%s",
t1);



/* agora com a
string t1 tendo uma copia em "text"


* da pra ficar
mais aliviado, pois nao perderemos o


* conteudo do
arquivo, os nomes dos documentos*/


//res = strtok(s,
delim);


t2=strtok(text,
"\n");


//sprintf(texto[0],
"%s", t2);


//printf(" \n
O conteudo da variaveis text (antes de retornar a linha) e %s \n Ja o
conteudo de t2 e %s \n \n", text, t2);



if(I==0)


{



return t2;


}


for(i=1;(i<=I)&&
(t2 != NULL); i++)


{ //res =
strtok(NULL, delim);


t2=strtok(NULL,
"\n");


sprintf(charater,
"%s", t2);


//printf("
\n O conteudo do arquivo na linha %i e %s \n Ja o conteudo de t2 e
%s \n Ja o conteudo de charater e %s \n", i, text, t2,
charater);



if(i==I)


{ strcpy(ta1,
charater);


return t2;


}


if(t2==NULL)


{


printf("
\n A linha pedida para a funcao e maior que a quanidade de linhas no
arquivo! \n Entre com um valor de linha menor que o numero de linhas
do arquivo!\n ");



return NULL;


}




}


if(i==I)


{


strcpy(ta1,
charater);


return t2;


}


return NULL;


}





/*===================================================================*/


void limpaStr(char
*Str)


{


int i, j;



i=strlen(Str);


for(j=i-1;j>=0;j--)


{


/*Str[j]=NULL*/;strcpy((*(Str+j)),"
");


}


}


/*===================================================================*/


/* fazer uma função
que retorne somente a string da linha,


* deve-se passar a
linha e um ponteiro onde string estara*/


char
*getLinhaISomenteleitura(char *arq, int *j, char *linha, int I)


{


int i;


char texto[500][500],
text[10000], *t1, *t2, charater[500];


printf("\n
Agora entrarei na funcao t1=gettextoarq1Somenteleitura(arq, t1);\n");


t1=gettextoarq1Somenteleitura1(arq);


sprintf(text, "%s",
t1);


/* agora com a
string t1 tendo uma copia em "text"


* da pra ficar
mais aliviado, pois nao perderemos o


* conteudo do
arquivo, os nomes dos documentos*/



t2=strtok(text,
"\n");


sprintf(texto[0],
"%s", t2);


*j=i;


if(I==0)


{


if(/*
*linha==NULL */strcmp(linha,NULL)==0)


{/* se estiver
passando somente um


* ponteiro sem
nada , NULL*/



linha=texto[0];


}


sprintf(linha,
"%s", texto[0]);


return
linha;


}


//printf("*j=
%i \t", *j);


for(i=1;(i<500)||(t2!=NULL);
i++)


{


t2=strtok('\0',
"\n");


sprintf(charater,
"%s", t2);


strcpy(texto[i],
charater);


*j=i;


// printf("*j=
%i \t", *j);


if(t2==NULL ||
strlen(charater)<3)


{



*j=i;



printf("
\n A linha pedida para a funcao e maior que a quanidade de linhas no
arquivo! \n Retornarei a ultima linha do arquivo\n ");



if(/*
*linha==NULL */strcmp(linha,NULL)==0)


{/* se
estiver passando somente um


* ponteiro
sem nada , NULL*/


linha=texto[i-1];


/*linha =
*//*strcpy(linha, texto[i-1]);*/


return
linha;


}


sprintf(linha,
"%s", texto[i-1]);


return linha;




}


if(i==I)


{


if(/*
*linha==NULL */strcmp(linha,NULL)==0)


{/* se
estiver passando somente um


* ponteiro
sem nada , NULL*/


linha=texto[i];


return
linha;


}


sprintf(linha,
"%s", texto[i]);


return linha;


}



}


return NULL;


}





/*===================================================================*/





char
***getLinhasSomenteleitura(char *arq, int *j, char ***texto4)


{


int i;


char texto[500][500],
text[10000], *t1, *t2, charater[500], **texto5;


t1=gettextoarq1Somenteleitura(arq,
t1);


printf("\n
entrou em char ***getLinhasSomenteleitura(char *arq, int *j, char
***texto4) \n gettextoarq1Somenteleitura(arq, t1); = %s \n ",
t1);



sprintf(text, "%s",
t1);


/* agora com a
string t1 tendo uma copia em "text"


* da pra ficar
mais aliviado, pois nao perderemos o


* conteudo do
arquivo, os nomes dos documentos*/



t2=strtok(text,
"\n");


sprintf(texto[0],
"%s", t2);


*j=i;


//printf("*j=
%i \t", *j);


for(i=1;(i<500)||(t2!=NULL);
i++)


{


t2=strtok('\0',
"\n");


sprintf(charater,
"%s", t2);


strcpy(texto[i],
charater);


*j=i;


// printf("*j=
%i \t", *j);


if(t2==NULL ||
strlen(charater)<3)


{



*j=i;


/*
*texto4=&texto[0][0];


*texto4= =
strdup(texto[0]);*/


// strcpy(texto5,
texto);


*texto4=texto5;


return texto4;



}



}


/*
*texto4=&texto[0][0];


*texto4= =
strdup(texto[0]);*/


// strcpy(texto5,
texto);


*texto4=texto5;


// return
&texto5;


return texto4;


}


/*===================================================================*/


char
*gettextoarq1Somenteleitura1( char *arq)


{



int fd, buf_size;


char buf[500],
buf2[10000], *buf3;


buf_size=499;


fd=open1(arq,
LEITURA);


buf3=gettextoarq(fd,
buf, buf_size,buf2);


close(fd);


return buf3;



}


/*===================================================================*/


/*===================================================================*/


/*===================================================================*/


/*===================================================================*/


/*===================================================================*/





char *strpdftk(char
*arq)


{


int i, j, k, l, m, n,
n1;


char *arq1, *arq2,
*arqout, *out, *ext, *meio;


l=getNumeroLinhaStringArquivo(arq);



n1=strlen("pdftk
");


n1=n1+800;


out=(char*)malloc(n1*sizeof(char));


arq1=(char*)malloc((n1-120)*sizeof(char));


arq2=(char*)malloc((n1-120)*sizeof(char));


ext=(char*)malloc((n1-500)*sizeof(char));


k=0;


i=0;


m=1;


//printf("\n
String0: %s\n", out);


//limpaStr(out);


//printf("\n
String1depois: %s\n", out);


/*printf("\n\n\n\n
getLinhaISomenteleitura1(arq, 2) : %s \n\n\n",
getLinhaISomenteleitura1(arq, 2));*/


/*


printf("\n\n\n\n
arquivos0 e arquivo1 arquivo2 respectivamente %s %s %s \n\n\n",
getLinhaISomenteleitura1(arq, 0), getLinhaISomenteleitura1(arq, 1),
getLinhaISomenteleitura1(arq, 2));*/


arq1=getLinhaISomenteleitura1(arq,
0);


arq2=getLinhaISomenteleitura1(arq,
1);


sprintf(ext, "
pdftk %s %s cat output PDFTK921_%i.pdf ;", arq1, arq2, 0);


//printf("\n %s
\n", ext);


strcat(out, ext);


k++;


sprintf(ext, "
pdftk PDFTK921_%i.pdf %s cat output PDFTK921_%i.pdf ;", k-1,
getLinhaISomenteleitura1(arq, 2), k);


strcat(out, ext);


//printf("\n
%s\n\n ", ext);


k++;


sprintf(ext, "
pdftk PDFTK921_%i.pdf %s cat output PDFTK921_%i.pdf ;", k-1,
getLinhaISomenteleitura1(arq, 3), k);


strcat(out, ext);


//printf("\n
%s\n\n ", ext);


k++;


for(i=4; i<l; i++)


{



sprintf(ext, "
pdftk PDFTK921_%i.pdf %s cat output PDFTK921_%i.pdf ;", k-1,
getLinhaISomenteleitura1(arq, i), k);


strcat(out, ext);


//printf("\n
\n %s\n\n ", ext);


k++;




}


//printf("\n out
= %s\n", out);


--k;


for(--k;k>=0;k--)


{


sprintf(ext, "
rm pdftk PDFTK921_%i.pdf ; ", k);


strcat(out, ext);


// printf("\n
\n %s\n\n ", ext);


}


strcat(out, " ls
-la ");


//printf("\n out
= %s\n", out);


return out;


}


/*===================================================================*/


/*===================================================================*/


/*===================================================================*/


/*===================================================================*/


/*===================================================================*/


/*===================================================================*/


/*===================================================================*/


/*===================================================================*/





char
*gettextoarq1Somenteleitura( char *arq, char *texto)


{



int fd, buf_size;


char buf[500],
buf2[10000], *buf3;


buf_size=499;


fd=open1(arq,
LEITURA);


printf("\n
Agora entrarei na funcao buf3=gettextoarq(fd, buf,
buf_size,buf2);\n");


buf3=gettextoarq(fd,
buf, buf_size,buf2);


printf("\n
Antes de entrar no If do texto \nO conteudo do arquivo %s e :\n %s
\n", arq, buf3);


if(/*
*texto==NULL */strcmp(texto,NULL)==0)


{/* se estiver
passando somente um


* ponteiro
sem nada , NULL*/


texto=buf3;



}


sprintf(texto,
"%s", buf3);


//printf("\n
Agora entrarei na funcao close(fd);\n");


close(fd);


//printf("\n O
conteudo do arquivo %s e :\n %s \n", arq, buf3);


return buf3;



}


/*===================================================================*/


char *gettextoarq(int
fd, char *buf, int buf_size, char *texto)


{


for(;;)


{


if(read(fd, buf,
buf_size)==0)


{


sprintf(texto, "
%s \n", buf);


return texto;


}


sprintf(texto, "
%s \n", buf);


}



}


/*===================================================================*/


int open1(char *file,
int oflag )


{


int fd;


if((fd=open(file,
oflag))==-1)


{


printf("\n Nao
e possivel abrir o arquivo %s \n", file);


return fd;


}


return fd;


}
/*===================================================================*/


char
substituiEspacoPor_(char *str)


{


return subs_str(str,
" ", "_");


}



/*===================================================================*/


char *subs_str(char
*string, char *substring, char *nova)


{


char *extrai;


int
tamanho1,tamanho2,contador, a4;





tamanho1 =
strlen(substring);


tamanho2 =
strlen(nova);


a4=strlen(string);





if((tamanho1 >
tamanho2) || (tamanho2 > tamanho1))


return(" ");


else


{


extrai =
strstr(string,substring);





if(extrai)


{



for(contador = 0;contador < a4; contador++)



string[(extrai - string) + contador] = nova[contador];



return(string);


}


else


return("
");


}


}



/*===================================================================*/


void prog()


{


char cmd[400],
arq[200], texto[600], **t1, ***t6, *t7, *t10, *t8, tr[200];


int i;


strcpy(tr,"O
joao e bacana pra caramba");


t7=NULL,t8=NULL;


sprintf(arq, "%s",
"arqpdf.txt");


//sprintf(stdout
,"%s", "imprimindo na tela, stdout com sprintf");


/*
printf("************************************");


printf("\n\n a
string %s sem espacos e : %s \n\n", tr,
substituiEspacoPor_(tr));*/


printf("************************************");


printf("\n
Programa que concatenara todos os arquivos .pdf em um \n\n\n ");


printf(" Para
esse programa funcionar direito e Necessario que: \n ");


mostraRespricoes();


sprintf(cmd, "for
x in *.pdf; do echo %s ", "\"$x\"; done >
arqpdf.txt");


system(cmd);


printf(" \n
cmd:\n %s \n ", cmd);



t10=strpdftk(arq);


printf(" \n
cmd:\n %s \n ", t10);


system(t10);



printf("
\n\n");


}


/*===================================================================*/


int main()


{


prog();



return ;


}


/*===================================================================*/





/*





*


* ordem das chamadas
de funções que estão me
dando dor de cabeça:


*


* prog();
==>>getLinhaISomenteleitura(arq, &i, t7, 3); ==>>
gettextoarq1Somenteleitura1(arq); ==>> ==>> ==>>
==>> ==>> ==>> ==>> ==>> ==>>
==>>


*


* -> prog();
==>>mostraLinhas(arq, 10); ==>>getLinhaISomenteleitura1(arq,
3); ==>> t1=gettextoarq1Somenteleitura1(arq); ==>> ==>>
==>> ==>> ==>> ==>> ==>> ==>>
==>> ==>>




-> prog();
==>>mostraRespricoes() ==>>[mostraLinhas4(arq);==>>
(vet1=get_vetor_string_arq(arq);==>>)==>>nl=getNumeroLinhaStringArquivo(arq);==>>]==>>
==>> ==>> ==>> ==>> ==>> ==>>
==>> ==>> ==>>








* */

quarta-feira, 3 de setembro de 2008

Link q mostra como instalar a interface gráfica no debian GNU/Linux 40.0 Etch cd oficial i 386 Biário-1

A instalação do Debian é bem tranquila, para instalar a interface gráfica, basta seguir as informações do link: http://wiki.forumdebian.com.br/index.php/Instalando_um_Ambiente_Gr%C3%A1fico_no_Debian

Se desejar ver a documentação do Debian em Português acesse:

http://wiki.forumdebian.com.br/index.php/P%C3%A1gina_principalhttp://wiki.forumdebian.com.br/index.php/P%C3%A1gina_principal

sexta-feira, 29 de agosto de 2008

Usando o pdftk, como converter 2 .pdf em 1

Apenas espelhando o site www.vivaolinux.com.br/dica/Manipulando-arquivos-PDF-com-pdftk/
É que esqueci como coverter 2 .pdf para 1

O download desta ferramenta está disponível em .tar.gz e .tar.bz2 no link:

* http://www.accesspdf.com

Concluído o download, deve-se fazer a descompactação do mesmo:

$ tar -zxvf pdftk-1.12.tar.gz
ou
$ tar -jxvf pdftk-1.12.tar.bz2

Agora entre no diretório criado e em seguida no sub-diretório pdftk:

$ cd pdftk-1.12/pdftk

Dependendo de sua distribuição, execute o comando make 'arquivo', onde 'arquivo' corresponde à sua distribuição. Exemplos:

* Debian: make Makefile.Debian
* Mandrake: make Makefile.Mandrake
* RedHat: make Makefile.RedHat
* Outros: make Makefile.Generic


Terminado o processo de instalação, o arquivo "pdftk-1.12/pdftk/pdftk" já estará criado e poderá ser utilizado.

Dicas de utilização

Concatenando dois arquivos em um:

$ pdftk Arquivo1.pdf Arquivo2.pdf cat output Concatenado1e2.pdf

Dividindo arquivos:

$ pdftk Arquivo.pdf burst

* Desta forma cada página do arquivo será separada em um arquivo independente e nomeados como pg_0001.pdf, pg_0002.pdf e assim por diante.

Selecionando páginas a serem separadas:

$ pdftk Arquivo.pdf cat 1-5 10-12 output PaginasSelecionadas.pdf

* O arquivo PaginasSelecionadas.pdf será criado com as páginas de 1 a 5 e de 10 a 12 do arquivo Arquivo.pdf.

Pode-se remover uma determinada página repetindo o comando anterior alterando apenas os parâmetros. Por exemplo, remover a página 5 de um arquivo:

$ pdftk Arquivo.pdf cat 1-4 6-end output NovoArquivo.pdf

Você pode também criar um relatório com os metadados e "jogá-los" em um .txt:

$ pdftk Arquivo.pdf dump_data output relatorio.txt

Maiores informações podem ser obtidas no manual no pdftk em pdftk-1.12/pdftk.1.txt.

Fontes:

* http://applications.linux.com/applications/06/04/17/1943230.shtml?tid=47
* http://www.accesspdf.com/article.php/20041129180128366

E manual do pdftk:

$ less ./pdftk-1.12/pdftk.1.txt

terça-feira, 15 de julho de 2008

Usando funções para substituir o comando for da linguagem C

Alguns cientistas da computação provaram que é possível resolver problemas de linguagens decidíveis (a maior parte dos programas de computador comerciais) utilizando-se apenas de funções recursivas , e entrando nessa onde resolvi fazer o seguinte código?

[code]




//################################################
//Bibliotecas incluídas no programa
//################################################
#include
#include
//################################################
//======================================================
//Funções utilizadas no programa
//======================================================
//------------------------------------------------------
int fib10it(int fib1)
{
int atual, prox, ant, i;
atual=1; prox=1; ant=0; i=0;

if(fib1 < 0){
printf("\n |> !!! Erro !!! Fibonacci nao aceita numeros negativos \n");
return 0;}
if(fib1==0)return 1;
if(fib1==1)return 1;
for(i=0; i < fib1; i++)
{
atual = ant + prox; ant=prox;
prox = atual;
}
return atual;//retorna o valor de fibonacci de forma iterativa

}
//------------------------------------------------------
//------------------------------------------------------
int fib10(int fib1)
{
if(fib1 < 0){
printf("\n |> !!! Erro !!! Fibonacci nao aceita numeros negativos \n");
return 0;}
if(fib1==0)return 1;
if(fib1==1)return 1;
//printf("\n\n Esta passando na funcao recursiva fib10()! \n\n");
return fib10(fib1 -1 )+ fib10(fib1 - 2);
}
//------------------------------------------------------
void fc2(int va)
{

printf(" \t %i", fib10it(va));
}
//------------------------------------------------------
//------------------------------------------------------
void fc1(int va)
{

printf(" \t %i", fib10(va));
}
//------------------------------------------------------
int forrec7( int j, void (*func1)())/* equivaçemte ao for(i=0; i < = j; i++), onde func1 é o endereço da função que você deseja que esteje dentro do for

seria semelhante a:
for(i=0; i < = j; i++)
func1();

*/
{

return forrec(0, j, func1);
}
//------------------------------------------------------
int forrec6( int j, void (*func1)())/* equivaçemte ao for(i=0; i < j; i++), onde func1 é o endereço da função que você deseja que esteje dentro do for

seria semelhante a:
for(i=0; i < j; i++)
func1();

*/
{

return forrec1(0, j, func1);
}
//------------------------------------------------------
int forrec5(int i, void (*func1)())/* equivaçemte ao for(; i > 0; i--), onde func1 é o endereço da função que você deseja que esteje dentro do for

seria semelhante a:
for(; i > 0; i--)
func1();

*/
{

if(i < = 0)
return 0;
(*func1)();
/*printf("\n i=%i, j=%i", i, j);*/
i--;
return forrec5(i, func1);
}
//------------------------------------------------------
int forrec4(int i, void (*func1)())/* equivaçemte ao for(; i > = 0; i--), onde func1 é o endereço da função que você deseja que esteje dentro do for

seria semelhante a:
for(; i > = 0; i--)
func1();

*/
{

if(i < 0)
return 0;
(*func1)();
/*printf("\n i=%i, j=%i", i, j);*/
i--;
return forrec4(i, func1);
}
//------------------------------------------------------
int forrec3(int i, int j, void (*func1)())/* equivaçemte ao for(i=j; i > = 0; i--), onde func1 é o endereço da função que você deseja que esteje dentro do for

seria semelhante a:
for(i=j; i > = 0; i--)
func1();




*/
{
if(i < 0)
return 0;
return forrec4(j, func1);
}
//------------------------------------------------------
int forrec2(int i, int j, void (*func1)())/* equivaçemte ao for(i=j; i > 0; i--), onde func1 é o endereço da função que você deseja que esteje dentro do for

seria semelhante a:
for(i=j; i > 0; i--)
func1();

*/
{

if(i < = 0)
return 0;
(*func1)();
/*printf("\n i=%i, j=%i", i, j);*/
i--;
return forrec2(i, j, func1);
}
//------------------------------------------------------
int forrec1(int i, int j, void (*func1)())/* equivaçemte ao for(i=0; i < j; i++), onde func1 é o endereço da função que você deseja que esteje dentro do for

seria semelhante a:
for(i=0; i < j; i++)
func1();

*/
{

if(i > = j)
return 0;
(*func1)();
/*printf("\n i=%i, j=%i", i, j);*/
i++;
return forrec1(i, j, func1);
}
//------------------------------------------------------
//------------------------------------------------------
int forrec(int i, int j, void (*func1)())/* equivaçemte ao for(; i<=j; i++), onde func1 é o endereço da função que você deseja que esteje dentro do for

seria semelhante a:
for(; i < = j; i++)
func1();

*/
{

/* em haskell (não testei ainda) :
forrec i j = forrec (i=i+1) j
forrec i j
| i > j =0
*/

if(i>j)
return 0;
(*func1)(i);
/*printf("\n i=%i, j=%i", i, j);*/
i++;
return forrec(i, j, func1);
}

//------------------------------------------------------
void for_iterativo(int i, int j, void (*func1)())
{
for( ; i < = j ; i++)
(*func1)(i);

}
//------------------------------------------------------
void for_iterativo1( int j, void (*func1)())/* for( i=0 ; i <= j ; i++)*/
{
int i;
i=0;
for( ; i < = j ; i++)
(*func1)(i);

}
//------------------------------------------------------
//------------------------------------------------------
void fib20()
{
int op, seq;
op=0, seq=0;
printf("\n | > \t Deseja que o for usado seja o recursivo ou o iterativo ? \n | > \t Para recursivo tecle 1 \n | > \t Para iterativo tecle 2: \n | > ");
scanf("%i", &op);
printf("\n | > \t Entre com o termo que deseja gerar a sequencia: \n | >");
scanf("%i", &seq);
printf("\n | > \t A sequencia de fibonacci e: \n | > \t ");
(op==1)?forrec7( seq , &fc1):for_iterativo1( seq, &fc2);

}
//------------------------------------------------------
//------------------------------------------------------
int fib2(int fib1)
{
int op;
op=0;
printf("\n | > \t Deseja que o for usado seja o recursivo ou o iterativo ? \n | > \t Para recursivo tecle 1 \n | > \t Para iterativo tecle 2: \n | > ");
scanf("%i", &op);
(op==1)?forrec7( fib1 , &fc1):for_iterativo1( fib1, &fc2);
printf("\n | > \t A sequencia de fibonacci e: \n | >");

return 0;

}
//------------------------------------------------------
void cle()
{
//?????????????????
// Declarações de variáveis principais
int seq;

//?????????????????
/* !!!!!!!!!!!!!!! */
//inicalização das variáveis
seq=0;
/* !!!!!!!!!!!!!!! */
printf("\n\n\n | > Programa que retorna a sequencia do numero de fibonacci \n ");
fib20();
printf("\n\n\n");

}
//------------------------------------------------------
//======================================================
int main(int argc, char **argv)
{
cle();
return 0;
}





[/code]

Esse código foi testado apenas na linguagem C!
Esse código da função que realiza a tarefa do comando for é interessante, pois utilizando-se de funções recursivas evita-se entrar em loops infinitos, já que um loop na pilha da recursão no máximo estouraria a pilha..! O uso de funções recursivas exige mais tempo de processamento e memória, mas é menos sujeito a erros, vale a pena o programador se perguntar: "O que desejo ? Eficiência ou garantia que meu código está coeso e não dará pau ?"

domingo, 6 de julho de 2008

__| O cara da informatica |__

Hoje recebi um e-mail do DEFUG e entre algumas coisinhas do DEFUG, achei interessante postar isso aqui, para aqueles que pensam que o cara da informática é um ser que não necessita de descanso, repare nas coias ai abaixo ...!


"Nem tudo que publicamos aqui e' serio, na verdade adoramos rir de nos mesmos e, sempre publicamos textos engracados que falam desta nossa vida tecnologica. O Fernando Anselmo, fernando.anselmo@dfjug.org, coordenador e moderador da lista de discussao do DFJUG, distribuiu o texto abaixo entre os amigos (e a carapuca serviu para todos :-))

Para os verdadeiros CARAS DA INFORMaTICA
1) O CARA DA INFORMaTICA dorme. Pode parecer mentira, mas o CARA DA INFORMaTICA precisa dormir como qualquer outra pessoa. Esqueca que ele tem celular e telefone em casa, ligue so para o escritorio;

2) O CARA DA INFORMaTICA come. Parece inacreditavel, mas e verdade. O CARA DA INFORMaTICA tambem precisa se alimentar e tem hora para isso;

3) O CARA DA INFORMaTICA pode ter familia. Essa e a mais incrivel de todas: Mesmo sendo um CARA DA INFORMaTICA, a pessoa precisa descansar no final de semana para poder dar atencao a familia, aos amigos e a si proprio, sem pensar ou falar em informatica, impostos, formularios, consertos e demonstracoes, manutencao, virus e etc.;

4) O CARA DA INFORMaTICA, como qualquer cidadao, precisa de dinheiro. Por essa voce nao esperava, ne? e surpreendente, mas o CARA DA INFORMaTICA tambem
paga impostos, compra comida, precisa de combustivel, roupas e sapatos e ainda consome Lexotan para conseguir relaxar. Nao peca aquilo pelo que nao pode pagar ao CARA DA INFORMaTICA;

5) Ler, estudar tambem e trabalho. E trabalho serio. Pode parar de rir. Nao e piada. Quando um CARA DA INFORMaTICA esta concentrado num livro ou publicacao especializada ele esta se aprimorando como profissional, logo trabalhando;

6) De uma vez por todas, vale reforcar: O CARA DA INFORMaTICA nao e vidente, nao joga taro e nem tem bola de cristal, pois se achou isto demita-o e contrate um PARANORMAL OU DETETIVE. Ele precisa planejar, se organizar e assim ter condicoes de fazer um bom trabalho, seja de que tamanho for. Prazos sao essenciais e nao um luxo. Se voce quer um milagre, ore bastante, faca jejum, e deixe o pobre do CARA DA INFORMaTICA em paz;

7) Em reunioes de amigos ou festas de familia, o CARA DA INFORMaTICA deixa de ser o CARA DA INFORMaTICA e reassume seu posto de amigo ou parente, exatamente como era antes dele ingressar nesta profissao. Nao peca conselhos, dicas. ele tem direito de se divertir;

8) Nao existe apenas um 'levantamentozinho' , uma 'pesquisazinha' , nem um 'resuminho', um 'programinha pra controlar minha loja', um 'probleminha que a maquina nao liga', um 'sisteminha' , uma 'passadinha rapida (ALIAS CONTA-SE DE ONDE SAIMOS E ATe CHEGARMOS)', pois esqueca os 'inha e os inho (programinha, sisteminha, olhadinha, )' pois, CARAS DA INFORMATICA nao resolvem este tipo de problema. Levantamentos, pesquisas e resumos sao frutos de analises cuidadosas e requerem atencao, dedicacao. Esses topicos podem parecer inconcebiveis a uma boa parte da populacao, mas servem para tornar a vida do CARA DA INFORMATICA mais suportavel;

9) Quanto ao uso do celular: celular e ferramenta de trabalho. Por favor, ligue, apenas, quando necessario. Fora do horario de expediente, mesmo que ainda duvide, o CARA DA INFORMATICA pode estar fazendo algumas coisas que voce nem pensou que ele fazia, como dormir ou namorar, por exemplo;

10) Pedir a mesma coisa ao mesmo tempo nao faz o CARA DA INFORMATICA trabalhar mais rapido. Solicite, depois aguarde o prazo dado pelo CARA DA INFORMATICA;

11) Quando o horario de trabalho do periodo da manha vai ate 12h, nao significa que voce pode ligar as 11:58 horas. Se voce pretendia cometer essa gafe, ligue apos o horario do almoco (relembre o item 2). O mesmo vale para a parte da tarde: ligue no dia seguinte;

12) Quando o CARA DA INFORMATICA estiver apresentando um projeto, por favor, evite as perguntas que nao tenham relacao com o projeto. Isso tira a concentracao, alem de torrar a paciencia.

13) O CARA DA INFORMATICA nao inventa problemas, nao muda versao de WINDOWS, nao tem relacao com virus, NaO e CULPADO PELO MAL USO DE EQUIPAMENTOS, INTERNET E AFINS. Nao reclame! O CARA DA INFORMATICA com certeza fez o possivel para voce pagar menos. Se quer EMENDAR, EMENDE, mas antes demita o CARA DA INFORMATICA e contrate um CARA DE POG;

14) Os CARAS DA INFORMATICA nao sao os criadores dos ditados 'o barato sai caro' e 'quem paga mal paga em dobro'. Mas estao todos de acordo com eles;

15) Nao pergunte para O CARA DA INFORMATICA uma sugestao de computador BOM e BARATO para voce comprar. Nao existe computador BOM e BARATO. Ou e uma coisa, ou e outra;

16) E, finalmente, o CARA DA INFORMATICA tambem e filho de DEUS e nao filho disso que voce pensou.

Agora, depois de aprender sobre O CARA DA INFORMATICA, repasse aos seus amigos, afinal, essas verdades precisam chegar a todos. O CARA DA INFORMATICA agradece.
/** Certificacao JEDI http://www.dfjug.org/DFJUG/tvdfjug/videos/v_wildt.html **/"

terça-feira, 1 de julho de 2008

Matando processos com o auxílio da shell do linux, do kill e do ps

Para matar aquele processo chato que acabou entrando em loop infinito, ou você não aguenta mais esperar a resposta dele...!!

Para matar um processo é necessário primeiro saber qual é o número do PID dele, para isso você digita na shell:

$ ps -A



Sabendo o PID basta dar o comando:

$ kill PID_do_Processo


Por exemplo eu vou matar o processo do java, para isso dei um ps -A que me gerou o resultado abaixo:

danilomatias@danilomatias-laptop:~$ ps -A
PID TTY TIME CMD
1 ? 00:00:02 init
2 ? 00:00:00 kthreadd
3 ? 00:00:00 migration/0
4 ? 00:00:00 ksoftirqd/0
5 ? 00:00:00 watchdog/0
6 ? 00:00:00 migration/1
7 ? 00:00:00 ksoftirqd/1
8 ? 00:00:00 watchdog/1
9 ? 00:00:00 events/0
10 ? 00:00:00 events/1
11 ? 00:00:00 khelper
46 ? 00:00:00 kblockd/0
47 ? 00:00:00 kblockd/1
50 ? 00:00:00 kacpid
51 ? 00:00:00 kacpi_notify
134 ? 00:00:00 kseriod
176 ? 00:00:00 pdflush
177 ? 00:00:00 pdflush
178 ? 00:00:00 kswapd0
219 ? 00:00:00 aio/0
220 ? 00:00:00 aio/1
1417 ? 00:00:00 ksuspend_usbd
1420 ? 00:00:00 khubd
1558 ? 00:00:00 ata/0
1565 ? 00:00:00 ata/1
1566 ? 00:00:00 ata_aux
2319 ? 00:00:00 scsi_eh_0
2320 ? 00:00:00 scsi_eh_1
2321 ? 00:00:00 scsi_eh_2
2361 ? 00:00:00 scsi_eh_3
2362 ? 00:00:00 usb-storage
2398 ? 00:00:00 scsi_eh_4
2399 ? 00:00:00 scsi_eh_5
2536 ? 00:00:00 kjournald
2741 ? 00:00:00 udevd
3049 ? 00:00:00 kpsmoused
4263 ? 00:00:00 kjournald
4534 tty4 00:00:00 getty
4535 tty5 00:00:00 getty
4537 tty2 00:00:00 getty
4540 tty3 00:00:00 getty
4541 tty6 00:00:00 getty
4727 ? 00:00:00 acpid
4761 ? 00:00:00 kondemand/0
4762 ? 00:00:00 kondemand/1
4847 ? 00:00:00 syslogd
4900 ? 00:00:00 dd
4902 ? 00:00:00 klogd
4924 ? 00:00:00 dbus-daemon
4940 ? 00:00:00 NetworkManager
4954 ? 00:00:00 NetworkManagerD
4967 ? 00:00:00 system-tools-ba
4987 ? 00:00:00 avahi-daemon
4988 ? 00:00:00 avahi-daemon
5030 ? 00:00:00 cupsd
5098 ? 00:00:00 dhcdbd
5117 ? 00:00:01 hald
5120 ? 00:00:00 console-kit-dae
5121 ? 00:00:00 hald-runner
5194 ? 00:00:00 hald-addon-inpu
5200 ? 00:00:00 hald-addon-cpuf
5201 ? 00:00:00 hald-addon-acpi
5225 ? 00:00:00 hald-addon-stor
5228 ? 00:00:00 hald-addon-stor
5254 ? 00:00:00 hcid
5274 ? 00:00:00 btaddconn
5275 ? 00:00:00 btdelconn
5285 ? 00:00:00 bluetoothd-serv
5286 ? 00:00:00 bluetoothd-serv
5291 ? 00:00:00 krfcommd
5330 ? 00:00:00 gdm
5333 ? 00:00:00 gdm
5337 tty7 00:05:46 Xorg
5375 ? 00:00:00 atd
5389 ? 00:00:00 cron
5486 ? 00:00:00 vmnet-bridge
5497 ? 00:00:00 dhclient
5504 ? 00:00:00 vmnet-netifup
5517 ? 00:00:00 vmnet-dhcpd
5532 ? 00:00:00 vmnet-netifup
5541 ? 00:00:00 vmnet-dhcpd
5546 ? 00:00:00 vmnet-natd
5624 tty1 00:00:00 getty
5719 ? 00:00:01 gconfd-2
5721 ? 00:00:00 gnome-keyring-d
5722 ? 00:00:00 x-session-manag
5809 ? 00:00:00 seahorse-agent
5813 ? 00:00:00 dbus-daemon
5814 ? 00:00:01 gnome-settings-
5822 ? 00:00:00 pulseaudio
5825 ? 00:00:00 gconf-helper
5834 ? 00:00:00 compiz
5840 ? 00:00:06 gnome-panel
5841 ? 00:00:02 gnome-screensav
5842 ? 00:00:01 nautilus
5849 ? 00:00:00 bonobo-activati
5876 ? 00:00:00 gvfsd
5893 ? 00:00:00 gvfs-fuse-daemo
5914 ? 00:00:15 compiz.real
5915 ? 00:00:00 bluetooth-apple
5918 ? 00:00:00 update-notifier
5922 ? 00:00:00 tracker-applet
5925 ? 00:00:00 evolution-alarm
5928 ? 00:00:00 trackerd
5931 ? 00:00:01 nm-applet
5932 ? 00:00:00 python
5933 ? 00:00:00 gnome-volume-ma
5935 ? 00:00:00 gnome-power-man
5986 ? 00:00:00 evolution-excha
5994 ? 00:00:00 trashapplet
5996 ? 00:00:00 evolution-data-
5999 ? 00:00:00 gvfsd-trash
6007 ? 00:00:00 gvfsd-burn
6024 ? 00:00:00 sh
6025 ? 00:00:00 compiz-decorato
6027 ? 00:00:04 gtk-window-deco
6036 ? 00:00:00 mixer_applet2
6039 ? 00:00:00 fast-user-switc
6052 ? 00:20:36 firefox
6428 ? 00:00:14 java
6489 ? 00:00:02 gnome-terminal
6491 ? 00:00:00 gnome-pty-helpe
6492 pts/0 00:00:00 bash
6509 pts/1 00:00:00 bash
6577 ? 00:00:00 sh
6578 ? 00:00:00 dcop
6580 pts/1 00:00:00 ps

Verifiquei que o PID do java é: 6428

Agora vou dar o comando para matar o processo 6428:

danilomatias@danilomatias-laptop:~$ kill 6428


Prontinho processo morto com êxito!

Assindo Vídeos no linux com o ffplay

O ffplay é um programa de visualização de vídeos que acompanha o ffmpeg, ao instalar o ffmpeg, para poder converter vídeos (você instala nas distribuições baseadas em debian com o comando $ sudo apt-get install ffmpeg)

Quando você instalou o ffmpeg instalou sem querer também o ffplay e o ffserver

O comando para ver um vídeo (qualquer formato de vídeo que o ffmpeg suporta, a lista se encontra na próxima postagem, um deles é o .flv) no ffplay é:

$ ffplay nome_do_video.extensao_do_video

Por exemplo se eu quero ver o vídeo 1.flv eu dou o comando:

$ ffplay 1.flv



As opções do ffplay se encontram abaixo:




danilomatias@danilomatias-laptop:~/Vídeos/ffmpeg$ ffplay
ffplay version SVN-rUNKNOWN, Copyright (c) 2003-2006 Fabrice Bellard, et al.
usage: ffplay [options] input_file
Simple media player

Main options:
-h show help
-x width force displayed width
-y height force displayed height
-s size set frame size (WxH or abbreviation)
-fs force full screen
-an disable audio
-vn disable video
-ss pos seek to a given position in seconds
-bytes seek by bytes
-nodisp disable graphical display
-f fmt force format

Advanced options:
-ast
-pix_fmt format set pixel format
-stats show status
-debug print specific debug info
-bug workaround bugs
-vismv visualize motion vectors
-fast non spec compliant optimizations
-genpts generate pts
-lowres
-skiploop
-skipframe
-skipidct
-idct algo set idct algo
-er threshold set error detection threshold (0-4)
-ec bit_mask set error concealment options
-rtp_tcp force RTP/TCP protocol usage
-sync type set audio-video sync. type (type=audio/video/ext)
-threads count thread count

While playing:
q, ESC quit
f toggle full screen
p, SPC pause
a cycle audio channel
v cycle video channel
t cycle subtitle channel
w show audio waves
left/right seek backward/forward 10 seconds
down/up seek backward/forward 1 minute
mouse click seek to percentage in file corresponding to fraction of width




Para exibir isso que está acima de o comando:



$ ffplay


Olhando essa ajuda ai acima observa-se que a forma geral do comando é:
ffplay [options] input_file

Ou seja: ffplay opções arquivoDeVideo



Um exemplo, para conseguir ver o vídeo pti.flv com algumas opções digitei:


$ ffplay pti.flv -skiploop -skipframe -stats -ss pos -fs -ast -debug -vismv -genpts
-lowres -threads count

Onde o Vídeo pti, rodará na tela inteira do monitor (-fs) e as demais opções estão ali a volta.




Espero ter ajudado!

Lembre-se o ffplay é o player que toca o maior número de formatos existentes (pelo menos dos que eu conheço)

Apenas por isso acho que essa dica é válida

Abração e se cuida!

sábado, 28 de junho de 2008

Convertendo vídeos no linux baseado em distribuições debian, e baixando vídeos do youtube

Caso não tenha o ffmpeg instalado em seu computador digite na console do seu linux baseado em distribuições debian (Kurumin, ubuntu ...)

$ sudo apt-get install ffmpeg


Para ver os formatos que o ffmpeg pode converter basta dar o comando na shell:



$ ffmpeg -formats



O Resultado é:



FFmpeg version SVN-rUNKNOWN, Copyright (c) 2000-2007 Fabrice Bellard, et al.
configuration: --enable-gpl --enable-pp --enable-swscaler --enable-pthreads --enable-libvorbis --enable-libtheora --enable-libogg --enable-libgsm --enable-dc1394 --disable-debug --enable-shared --prefix=/usr
libavutil version: 1d.49.3.0
libavcodec version: 1d.51.38.0
libavformat version: 1d.51.10.0
built on Mar 12 2008 14:31:53, gcc: 4.2.3 (Ubuntu 4.2.3-2ubuntu4)
File formats:
E 3g2 3gp2 format
E 3gp 3gp format
D 4xm 4X Technologies format
D MTV MTV format
D RoQ Id RoQ format
D aac ADTS AAC
DE ac3 raw ac3
E adts ADTS AAC
DE aiff Audio IFF
DE alaw pcm A law format
DE amr 3gpp amr file format
DE asf asf format
E asf_stream asf format
DE au SUN AU Format
DE audio_device audio grab and output
DE avi avi format
D avs avs format
E crc crc testing format
D daud D-Cinema audio format
D dc1394 dc1394 A/V grab
D dsicin Delphine Software International CIN format
D dts raw dts
DE dv DV video format
D dv1394 dv1394 A/V grab
E dvd MPEG2 PS format (DVD VOB)
D ea Electronic Arts Multimedia Format
DE ffm ffm format
D film_cpk Sega FILM/CPK format
DE flac raw flac
D flic FLI/FLC/FLX animation format
DE flv flv format
E framecrc framecrc testing format
DE gif GIF Animation
DE gxf GXF format
DE h261 raw h261
DE h263 raw h263
DE h264 raw H264 video format
D idcin Id CIN format
DE image2 image2 sequence
DE image2pipe piped image2 sequence
D ingenient Ingenient MJPEG
D ipmovie Interplay MVE format
DE m4v raw MPEG4 video format
D matroska Matroska file format
DE mjpeg MJPEG video
D mm American Laser Games MM format
DE mmf mmf format
E mov mov format
D mov,mp4,m4a,3gp,3g2,mj2 QuickTime/MPEG4/Motion JPEG 2000 format
E mp2 MPEG audio layer 2
DE mp3 MPEG audio layer 3
E mp4 mp4 format
D mpc musepack
DE mpeg MPEG1 System format
E mpeg1video MPEG video
E mpeg2video MPEG2 video
DE mpegts MPEG2 transport stream format
D mpegvideo MPEG video
E mpjpeg Mime multipart JPEG format
DE mulaw pcm mu law format
D mxf MXF format
D nsv NullSoft Video format
E null null video format
D nut nut format
D nuv NuppelVideo format
DE ogg Ogg format
E psp psp mp4 format
D psxstr Sony Playstation STR format
DE rawvideo raw video format
D redir Redirector format
DE rm rm format
E rtp RTP output format
D rtsp RTSP input format
DE s16be pcm signed 16 bit big endian format
DE s16le pcm signed 16 bit little endian format
DE s8 pcm signed 8 bit format
D sdp SDP
D shn raw shorten
D smk Smacker Video
D sol Sierra SOL Format
E svcd MPEG2 PS format (VOB)
DE swf Flash format
D tiertexseq Tiertex Limited SEQ format
D tta true-audio
DE u16be pcm unsigned 16 bit big endian format
DE u16le pcm unsigned 16 bit little endian format
DE u8 pcm unsigned 8 bit format
D vc1 raw vc1
E vcd MPEG1 System format (VCD)
D video4linux video grab
D video4linux2 video grab
D vmd Sierra VMD format
E vob MPEG2 PS format (VOB)
DE voc Creative Voice File format
DE wav wav format
D wc3movie Wing Commander III movie format
D wsaud Westwood Studios audio format
D wsvqa Westwood Studios VQA format
D wv WavPack
DE yuv4mpegpipe YUV4MPEG pipe format

Codecs:
D V 4xm
D V D 8bps
D V VMware video
D V D aasc
EA ac3
DEA adpcm_4xm
DEA adpcm_adx
DEA adpcm_ct
DEA adpcm_ea
DEA adpcm_ima_dk3
DEA adpcm_ima_dk4
DEA adpcm_ima_qt
DEA adpcm_ima_smjpeg
DEA adpcm_ima_wav
DEA adpcm_ima_ws
DEA adpcm_ms
DEA adpcm_sbpro_2
DEA adpcm_sbpro_3
DEA adpcm_sbpro_4
DEA adpcm_swf
DEA adpcm_xa
DEA adpcm_yamaha
D A alac
DEV D asv1
DEV D asv2
D V D avs
DEV bmp
D V D camstudio
D V D camtasia
D V D cavs
D V D cinepak
D V D cljr
D A cook
D V D cyuv
D A dca
D A dsicinaudio
D V D dsicinvideo
DES dvbsub
DES dvdsub
DEV D dvvideo
DEV D ffv1
DEVSD ffvhuff
DEA flac
DEV D flashsv
D V D flic
DEVSD flv
D V D fraps
DEA g726
DEV gif
DEA gsm
D A gsm_ms
DEV D h261
DEVSDT h263
D VSD h263i
EV h263p
D V DT h264
DEVSD huffyuv
D V D idcinvideo
D A imc
D V D indeo2
D V indeo3
D A interplay_dpcm
D V D interplayvideo
EV jpegls
D V kmvc
EV libtheora
EV ljpeg
D V D loco
D A mace3
D A mace6
D V D mdec
DEV D mjpeg
D V D mjpegb
D V D mmvideo
DEA mp2
D A mp3
D A mp3adu
D A mp3on4
D A mpc sv7
DEVSDT mpeg1video
DEVSDT mpeg2video
DEVSDT mpeg4
D VSDT mpegvideo
DEVSD msmpeg4
DEVSD msmpeg4v1
DEVSD msmpeg4v2
D V D msrle
D V D msvideo1
D V D mszh
D V D nuv
DEV pam
DEV pbm
DEA pcm_alaw
DEA pcm_mulaw
DEA pcm_s16be
DEA pcm_s16le
DEA pcm_s24be
DEA pcm_s24daud
DEA pcm_s24le
DEA pcm_s32be
DEA pcm_s32le
DEA pcm_s8
DEA pcm_u16be
DEA pcm_u16le
DEA pcm_u24be
DEA pcm_u24le
DEA pcm_u32be
DEA pcm_u32le
DEA pcm_u8
DEV pgm
DEV pgmyuv
DEV png
DEV ppm
D A qdm2
D V D qdraw
D V D qpeg
D V D qtrle
DEV rawvideo
D A real_144
D A real_288
D A roq_dpcm
D V D roqvideo
D V D rpza
DEV D rv10
DEV D rv20
D A shorten
D A smackaud
D V smackvid
D V D smc
DEV snow
D A sol_dpcm
DEA sonic
EA sonicls
D V D sp5x
DEV D svq1
D VSD svq3
D V targa
D V theora
D V D tiertexseqvideo
D V tiff
D V D truemotion1
D V D truemotion2
D A truespeech
D A tta
D V D ultimotion
D V vc1
D V D vcr1
D A vmdaudio
D V D vmdvideo
DEA vorbis
D V vp3
D V vp5
D V vp6
D V vp6f
D V D vqavideo
D A wavpack
DEA wmav1
DEA wmav2
DEVSD wmv1
DEVSD wmv2
D V wmv3
D V D wnv1
D A ws_snd1
D A xan_dpcm
D V D xan_wc3
D V D xl
DEV D zlib
DEV zmbv

Supported file protocols:
file: pipe: udp: rtp: tcp: http:
Frame size, frame rate abbreviations:
ntsc pal qntsc qpal sntsc spal film ntsc-film sqcif qcif cif 4cif
Motion estimation methods:
zero(fastest) full(slowest) log phods epzs(default) x1 hex umh iter

Note, the names of encoders and decoders dont always match, so there are
several cases where the above table shows encoder only or decoder only entries
even though both encoding and decoding are supported for example, the h263
decoder corresponds to the h263 and h263p encoders, for file formats its even
worse



Em outras palavras ele é capaz de converter qualquer formato desses abaixo para qualquer formato desses abaixo:






.3gp2
.3gp
.4xm
.MTV
.aac
.ac3
.adts
.aiff
.alaw
.amr
.asf
.asf_stream
.au
.audio_device
.avi
.avs
.crc
.daud
.dc1394
.dsicin
.dts
.dv
.dv1394
.dvd
.ea
.ffm
.film_cpk
.flac
.flic
.flv
.framecrc
.gif
.gxf
.h261
.h263
.h264
.idcin
.image2
.image2pipe
.ingenient
.ipmovie
.m4v
.matroska
.mjpeg
.mm
.mmf
.mov
.m4a
.3gp
.3g2
.mj2
.mp2
.mp3
.mp4
.mpc
.mpeg
.mpeg1video
.mpeg2video
.mpegts
.mpegvideo
.mpjpeg
.mulaw
.mxf
.nsv
.null
.nut
.nuv
.ogg
.psp
.psxstr
.rawvideo
.redir
.rm
.rtp
.rtsp
.s16be
.s16le
.s8
.sdp
.shn
.smk
.sol
.svcd
.swf
.tiertexseq
.tta
.u16be
.u16le
.u8
.vc1
.vcd
.video4linux
.video4linux2
.vmd
.vob
.voc
.wav
.wc3movie
.wsaud
.wsvqa
.wv
.yuv4mpegpipe

Codecs:
.4xm
.8bps
.VMware video
.aasc
.ac3
.adpcm_4xm
.adpcm_adx
.adpcm_ct
.adpcm_ea
.adpcm_ima_dk3
.adpcm_ima_dk4
.adpcm_ima_qt
.adpcm_ima_smjpeg
.adpcm_ima_wav
.adpcm_ima_ws
.adpcm_ms
.adpcm_sbpro_2
.adpcm_sbpro_3
.adpcm_sbpro_4
.adpcm_swf
.adpcm_xa
.adpcm_yamaha
.alac
.asv1
.asv2
.avs
.bmp
.camstudio
.camtasia
.cavs
.cinepak
.cljr
.cook
.cyuv
.dca
.dsicinaudio
.dsicinvideo
.dvbsub
.dvdsub
.dvvideo
.ffv1
.ffvhuff
.flac
.flashsv
.flic
.flv
.fraps
.g726
.gif
.gsm
.gsm_ms
.h261
.h263
.h263i
.h263p
.h264
.huffyuv
.idcinvideo
.imc
.indeo2
.indeo3
.interplay_dpcm
.interplayvideo
.jpegls
.kmvc
.libtheora
.ljpeg
.loco
.mace3
.mace6
.mdec
.mjpeg
.mjpegb
. mmvideo
.mp2
.mp3
.mp3adu
.mp3on4
. mpc sv7
.mpeg1video
.mpeg2video
.mpeg4
.mpegvideo
.msmpeg4
.msmpeg4v1
.msmpeg4v2
.msrle
.msvideo1
.mszh
.nuv
.pam
.pbm
.pcm_alaw
.pcm_mulaw
.pcm_s16be
.pcm_s16le
.pcm_s24be
.pcm_s24daud
.pcm_s24le
.pcm_s32be
.pcm_s32le
.pcm_s8
.pcm_u16be
.pcm_u16le
.pcm_u24be
.pcm_u24le
.pcm_u32be
.pcm_u32le
.pcm_u8
.pgm
.pgmyuv
.png
.ppm
.qdm2
.qdraw
.qpeg
.qtrle
.rawvideo
.real_144
.real_288
.roq_dpcm
.roqvideo
.rpza
.rv10
.rv20
.shorten
.smackaud
.smackvid
.smc
.snow
.sol_dpcm
.sonic
.sonicls
.sp5x
.svq1
.svq3
.targa
.theora
.tiertexseqvideo
.tiff
.truemotion1
.truemotion2
.truespeech
.tta
.ultimotion
.vc1
.vcr1
.vmdaudio
.vmdvideo
.vorbis
.vp3
.vp5
.vp6
.vp6f
.vqavideo
.wavpack
.wmav1
.wmav2
.wmv1
.wmv2
.wmv3
.wnv1
.ws_snd1
.xan_dpcm
.xan_wc3
.xl
.zlib
.zmbv





O Comando para converter Vídeos usando o ffmpeg é :



ffmpeg -i nome_do_arquivo_a_ser_convrtido.extensao_do_arquivo -ab 56 -ar 22050 -b 50 -s 320x240 -title Titulo\ do\ Video -comment Comentario\ Sobre\ o\ video nome_do_videoConvertido.extensaoDesejadaDoArquivoConvertido




Para baixar os vídeos do site do youtube você pode utilizar o programa youtube-dl, já para instalar o programa youtube-dl no seu computador basta basta dar o comando:
$ sudo apt-get install youtube-dl

Para baixar o vídeo do youtube basta você saber o url do vídeo (o endereço lá na barra de endereços, começa com: http://br.youtube.com/...) e
dar o comando:
$ youtube-dl -t url_do_youtube_de_seu_video_a_baixar

onde o -t vai dar o nome do título ao seu vídeo+alguns_caracteres_loucos

As opções dele são (comando youtube-dl -h):

Usage: youtube-dl [options] video_url

Options:
-h, --help print this help text and exit
-v, --version print program version and exit
-u USERNAME, --username=USERNAME
account username
-p PASSWORD, --password=PASSWORD
account password
-o FILE, --output=FILE
output video file name
-q, --quiet activates quiet mode
-s, --simulate do not download video
-t, --title use title in file name
-l, --literal use literal title in file name
-n, --netrc use .netrc authentication data
-g, --get-url print final video URL only
-2, --title-too used with -g, print title too

Por exemplo para baixar e converter o clipe da música the scientis do coldplay eu digitei na shell:

$ youtube-dl -t http://br.youtube.com/watch?v=V3Kd7IGPyeg


Retrieving video webpage... done.
Extracting video title... done.
Extracting URL "t" parameter... done.
Requesting video file... done.
Video data found at http://v23.cache.googlevideo.com/get_video?video_id=V3Kd7IGPyeg&origin=mia-v9.mia.youtube.com&signature=8D276E61B6768A37B575ECBFE1256192C8A841DE.70A5E75A202DBC3A1748773BF40CF9CAFA9B20A0&ip=189.58.113.244&ipbits=16&expire=1214700090&key=yt1&sver=2
Retrieving video data: 100.0% ( 9.22M of 9.22M) at 82.35k/s ETA 00:00 done.
Video data saved to coldplay_the_scientist-V3Kd7IGPyeg.flv



$ ffmpeg -i coldplay_the_scientist-V3Kd7IGPyeg.flv -ab 56 -ar 22050 -b 50 -s 320x240 -title The\ Scientist\ Coldplay coldplay_the_scientist.avi

Baixe uma porrada de coisas do nosso amigo Henrique como o SO Debian ...


http://meusarquivos.no-ip.info/temp/debian-40r3-i386-CD-1.iso


Veja as pastas do Linux dele em:
http://meusarquivos.no-ip.info/linux/



http://meusarquivos.no-ip.info/linux/Configurando_Servidor_FTP.doc



http://meusarquivos.no-ip.info/linux/Configurar_Apache/




http://meusarquivos.no-ip.info/linux/Configurar_Samba/




http://meusarquivos.no-ip.info/linux/Formatando_o_PenDrive_em_modo_Texto.doc




http://meusarquivos.no-ip.info/linux/Limitar_Banda_apache.pdf




http://meusarquivos.no-ip.info/linux/Linux_no_Pendriver.doc




http://meusarquivos.no-ip.info/linux/Matar_Processos.txt



http://meusarquivos.no-ip.info/linux/Restaurando_Grub.doc



http://meusarquivos.no-ip.info/linux/Rotear_a_Conexao.doc




http://meusarquivos.no-ip.info/linux/SSH_Seguro.doc




http://meusarquivos.no-ip.info/linux/Samba_Sem_Login_e_Senha.doc




http://meusarquivos.no-ip.info/linux/Configurar_Apache/Instalar_Apache_Completo.txt




http://meusarquivos.no-ip.info/linux/Configurar_Apache/hosts.txt



http://meusarquivos.no-ip.info/linux/Configurar_Apache/httpd.conf.txt




http://meusarquivos.no-ip.info/linux/Configurar_Apache/httpd.conf.txt



http://meusarquivos.no-ip.info/linux/Configurar_Apache/hosts.txt



http://meusarquivos.no-ip.info/linux/Configurar_Samba/smb.conf.txt



http://meusarquivos.no-ip.info/linux/Pacote_Portugues_PT_BR.txt




http://meusarquivos.no-ip.info/linux/Reparando_Problema_Flash.txt

Baixe o kurumin-ng_8.06.iso do nosso amigo Henrique

Pra acessar as pastas online de nosso amigo Henrique acesse:

http://meusarquivos.no-ip.info/

Lá tem muitos materiais legais sobre linux, scripts em fim, muitas coisas boas mesmo, só faltava ele colocar umas músicas e filmes para a gente baixar lá ...!

Mas Baixe o Kurumin-ng_8.06 clicando no link abaixo:

http://meusarquivos.no-ip.info/temp/kurumin-ng_8.06.iso

É aquele mesmo esquema do Xp baixe e grava no cd ...!

Baixe o cd do Windows xp service pack 3 (.iso - 627 MB)

Baixe o cd do Windows xp service pack 3 (.iso - 627 MB)
com serial e tudo gratuitamente disponibilizado pelo Henrique em sua pasta pessoal
Para baixar o arquivo acesse o Link:

http://meusarquivos.no-ip.info/temp/WinXP-SP3/WinXP-SP3_Final.iso

Baixe e grave o cd, não testei para ver se realmente funciona!

Baixe o serial em:

http://meusarquivos.no-ip.info/temp/WinXP-SP3/md5sum.txt

Copie em um papel e teste na instalação


O Henrique é o carinha da foto pequena abaixo:


Detalhe tirei tudo da pasta pessoal dele da rede dele que tem dois usuários um que é ele que usa kurumin NG e outra que usa Windows XP

Só torça para que ele não tire de lá tão cedo, pois ele não sabe quem sou eu e nem faz a mínima idéia que achei esses .iso na parte pessoal dele!

sábado, 21 de junho de 2008

Descompactando um arquivo dividido em várias partes .rar na shell do Linux

Para descompctar um arquivo compactado com compactação rar de nível 5 (-m5), é usado o comando abaixo na shell do linux:



# rar x -m5 -v -y nomedoArquivoCompactado.partMaiorNumeroInteiro.rar




O comando -v é apenas para indicar que são arquivos divididos em partes, diria que é a parte mais importante do comando.

o -y é para ele assumir sim para todas as perguntas que ele faria, é dispensável, porém se você não colocar muito provavelmente você terá que ficar respondendo sim (yes) a algumas perguntas na shell

segunda-feira, 16 de junho de 2008

Problemão - minha placa mãe já era, estou sem computador e escrevendo e-mail da UDESC, alguma sugestão do que fazer ?

Caraca minha vida ferrou a beça, minha placa mãe do computador já era, fiquei o maior tempão em cima para arrumar e ao que tudo indica foi o chipset, ou seja vou ter que trocar a placa mãe o pior é que ela, uma PCChips 825v7.2c, não tem mais pra vender, vou ter que tirar a terça após a prova de SOP para ver o que eu consigo fazer, para colocar placa nova eu vou ter que vender as minhas memória que são ddr1, pois as placas que se vendem hoje só são compatíveis com memória ddr2, para ajudar minha fonte do computador queimou, isso é o de menos já que o hacker arruma na boa, e ele tem fonte velha para trocar peças, mas esse negócio da placa mãe ai, vai me obrigar a trocar praticamente um computador inteiro, pior ainda eu não tenho verba agora para investir nisso ...
Isso significa que por enquanto só vou ter acesso durante uma hora aqui na Biblioteca da UDESC

Eu passei para o Reginaldo, alguns endereços de uns telecentros de inclusão digital da casa Brasil, onde se usa Linux, vou ter que dar uma olhada se paga alguma coisa para usar, acho que não paga nada, é bem provável que vá lá na quarta após a aula de TEC, é a única alternativa que vejo, já que usar o notebook do meu irmão , que é casado e mora em outra casa, é meio inviável, pois ele não quer que instale nada e ele usa o notebok todos os dias ...!

Sabe o que é pior ainda ? Tudo o que eu tenho está no meu hd de 500 GB, que sem a minha placa é inútil, é um hd PATA, perdi, pelo menos durante um bom tempo, tudo, tudo mesmo, trabalhos, livros, filmes, músicas, isso sem falar no meu hd de 40 GB PATA que também tinha muitas coisas importantes ...



Alguma sugestão ?
O Vinícius sempre tem grandes idéias, só por isso estão pedindo alguma sugestão.

Como não tenho celular, o único jeito agora é deixar recado na secretária eletrônica lá em casa!
O número é 55 47 3026-2334, onde 55 é o DDI do Brasil, 47 o DDD de Joinville, 30 a operadora, GVT, 26 a região do Telefone Bairro Floresta e 2334 o número do telefone


Aquele abraço e tenha o melhor dia da sua vida e se cuida!

sábado, 14 de junho de 2008

Compro notebook até 1000 reais

Compro notebook até 1000 reais
Pago em 20 notas de 50 reais na hora, o notebook tem que estar em perfeito estado ...!

Pelo jeito minha carteira de motorista vai ter que esperar de novo ...!

segunda-feira, 9 de junho de 2008

Um pouco de Poesia Drumond - Havia uma pedra no meio do caminho

Havia uma pedra no meio do caminho


No meio do caminho

No meio do caminho tinha uma pedra
tinha uma pedra no meio do caminho
tinha uma pedra
no meio do caminho tinha uma pedra.

Nunca me esquecerei desse acontecimento
na vida de minhas retinas tão fatigadas.
Nunca me esquecerei que no meio do caminho
tinha uma pedra
tinha uma pedra no meio do caminho
no meio do caminho tinha uma pedra

http://www.pensador.info/p/havia_uma_pedra_no_meio_do_caminho/1/ - Carlos Drummond de Andrade

domingo, 8 de junho de 2008

A sociedade da informação Um pouquinho sobre o SQuid

Há muitas lendas sobre o tal do Squid, um software livre utilizado para bloquear acesso de páginas ilícitas no seu servidor proxy, de acordo com [1] squid é um proxy-cache de alta performance para clientes web,
suportando protocolos FTP, gopher e HTTP.

O fato é que com ele você consegue bloquear aquelas páginas de sacanagem que a galera da empresa anda acessando, principalmente o tal do orkut, conseguimos criar uma geração que consegue manter amigos que pouco estão se importando se você está bem ou mal, que não ajudam-nos em absolutamente nada, e que nos roubam um tempo precioso demais em nossas vidas ...!

Mas em fim, há pessoas que acreditam que ficar o dia inteiro se relacionando no orkut trará algum benefício ..., pior pais acreditam nisso ...!

Sou da área de tecnologia da informação, mas cada vez mais percebo que a informação existe, porém as pessoas estão menos preparadas para filtrar aquilo que é util daquilo que não é ...!

Enquanto não ensinarmos aos filhos da nossa nação que a maior parte das informações são realmente lixos virtuais, teremos essa geração de ignorantes , que embora tenham acesso a informação de qualidade, preferem adquir o lixo virtual ao invés daquilo que é realmente proveitoso ...!


Quanto a tirar mais proveito da informação, a Bíblia Sagrada a pelo menos 2725 anos atrás já dava um conselho válido:

"5 O sábio escutará e absorverá mais instrução, e homem de entendimento é aquele que adquire orientação perita "
- Provérbios 1: 5

Ou seja, o sábio sempre procura orientação, quer virtualmente, em livros, de todas as formas com pessoas que conhecem algo ...!

Mas o que se observa na rede é que não raro, as pessoas tendem a se orientar com pessoas que não conhecem o assunto ...!

Trazendo esse exemplo para realidade, seria equivalente a você ir a um pai de santo para se curar de uma pneumonia ..., me pergunto o que está contecendo ?

Sabemos que para aprender qualquer coisa é necessário muito esforço, porém qual é a medida de esforço para aprendermos algo ?

Novamente a Bíblia, apesar de ser um livro muito antigo têm a resposta:


" 4 se persistires em procurar isso como a prata e continuares a buscar isso como a tesouros escondidos, 5 neste caso entenderás o temor a Jeová e acharás o próprio conhecimento de Deus." - Provérbios 2: 4, 5

Um minerador trabalha ate não conseguir mais para achar a prata, assim é a informação, você se esforça até não conseguir mais ...!
Estranho não ? Justamente a Bíblia o livro que as pessoas julgam antiquado é que tem a orientação de como tirar mais proveito das informações na era da informação!


Quanto a informações de fontes sem conhecimento, novamente a Bíblia apesar de antiga sempre deu a orientação
"0 Quem anda com pessoas sábias tornar-se-á sábio, mas irá mal com aquele que tem tratos com os estúpidos." - Provérbios 13: 20


Em outras palavras, você que procura nutrir sua mente com informações estúpidas e sem credibilidade também será julgado estúpido ...

Por isso a própria Bíblia já orientava a ter boas referências.

Mas como na sociedade da informação, parece que somente os que trabalham com a informação, é que necessitam, saber o que realmente é útil e o que não. Nós dessa área somos contratados para tentar impedir que informações estúpidas e sem utilidade se infiltrem na cabeça dos funcionários, fazendo com que o nível de idiotices nas organizações diminua.

Uma das formas de se fazer isso é bloquear os sites no proxy com o Squid.

Como há muitas coisas inúteis inclusive sobre o Squid, separei alguns links que realmente me ajudarão a configurar esse negócio.


São eles:

Homepage oficial of squid


Documentation oficial of squid not in English
http://www.squid-cache.org/Doc/#non-english


Who looks after the Squid project?
http://www.squid-cache.org/Intro/who.dyn



Baixe o código fonte da última versão aqui


E finalmente a Documentação útile em Português:

[1] - http://www.linuxman.pro.br/squid/ - Configurando um Squid "Ninja"
Submitted by Eri on Wed, 2005-09-14 23:10.


Um breve tutorial com algumas dicas e detalhes importantes conseguidos no dia-a-dia.


E


http://www.geocities.com/glasswalk3r/linux/squidnomicon-online.html
- SquidNomiCon -
Versão 1.41



Alceu Rodrigues de Freitas Junior

São Paulo

2003


Já ia esquecendo ..., tenho mais referências ...


http://www.gdhpress.com.br/redeseservidores/leia/index.php?p=cap5-8
- Instalando o Squid - Artigo bem objetivo



http://www.zago.eti.br/squid/suse101-user-ip.html
- SUSE 10.1 - Tutorial squid por user ou IP.




http://www.visolve.com/squid/squid30/accesscontrols.php
- Squid 3.0 Configuration Manual




http://br.geocities.com/cesarakg/installing-configuring-squid.html
- Instalando e Configurando o Squid ( Por Jennifer Vesperman - 26/07/2001 )






http://www.gdhpress.com.br/redeseservidores/leia/index.php?p=cap5-8
- IInstalando o Squid






Esse abaixo não é exatamente sobre squid, mas mostra como monitorar as conversas no msn.

É incrível, mas nós da área de TI, temos como saber se o funcionário trabalha ou não nas corporações.

Obviamente essa monitoração é ilegal, ela só é realizada após a empresa pedir para os funcionários assinarem um documento, dizendo que os recursos são da corporação então, eles estão sujeitos a serem fiscalizados como são utilizados ...!

Isso da dor de cabeça na justiça, para se garantir, você funcionário, está sendo pago para trabalhar então trabalhe, não fique falando mau do chefe, lembre-se sempre você é pago para trabalhar, não pra ficar pensando coisas a respeito das pessoas...!





http://www.zago.eti.br/msn.html
- msn - dicas, log, im-sniff, firewall, proxy



http://www.zago.eti.br/squid/A-menu-squid.html
- Squid - Linux-br FAQ, modelos e documentação.

Faça bom proveito!
Se não deseja pagar para que alguém tenha que pensar por você, aprenda a pensar você mesmo!
Aprenda a distiguir o que serve e o que não serve!

Tenha o melhor dia da sua vida!

terça-feira, 3 de junho de 2008

Abrindo e fechando a gaveta de CD/DVD pela console (Shell) no Debian linux

Para abrir a gaveta basta abrir a shell (console) e digitar:

#eject -r
para fechar a gaveta:

#eject -t

Para mais informações:


#eject -h

Após dar o eject -h na shell, aparece nela as mensagens:

$ eject -h
Eject version 2.1.4 by Jeff Tranter (tranter@pobox.com)
Usage:
eject -h -- display command usage and exit
eject -V -- display program version and exit
eject [-vnrsfqpm] [] -- eject device
eject [-vn] -d -- display default device
eject [-vn] -a on|off|1|0 [] -- turn auto-eject feature on or off
eject [-vn] -c [] -- switch discs on a CD-ROM changer
eject [-vn] -t [] -- close tray
eject [-vn] -T [] -- toggle tray
eject [-vn] -x [] -- set CD-ROM max speed
eject [-vn] -X [] -- list CD-ROM available speeds
Options:
-v -- enable verbose output
-n -- don't eject, just show device found
-r -- eject CD-ROM
-s -- eject SCSI device
-f -- eject floppy
-q -- eject tape
-p -- use /proc/mounts instead of /etc/mtab
-m -- do not unmount device even if it is mounted
Long options:
-h --help -v --verbose -d --default
-a --auto -c --changerslot -t --trayclose -x --cdspeed
-r --cdrom -s --scsi -f --floppy -X --listspeed -q --tape
-n --noop -V --version
-p --proc -m --no-unmount -T --traytoggle
Parâmetro pode ser um dispositivo ou um ponto de montagem.
Se omitido, o nome padrão é `cdrom'.
Por padrão tenta -r, -s, -f e -q, nessa ordem, até obter sucesso.

Para saber como montar as partições apartir do cd acesse o Artigo :
Montando partições e discos no Linux da infowester
Para saber mais sobre patições existentes no linux acesse:


Capítulo 4 - Discos e Partições - Guia Foca Linux
Lá existem até exemplos de como montar partições ...!

segunda-feira, 2 de junho de 2008

DFJUG # 749

/****************************************************************
* Sumario do boletim DFJUG # 749 enviado para 29.384 desenvolvedores Java
* Raphael Adrien e' o coordenador regional JEDI para Goias
* JBuilder agora e' da Embarcadero
* Projetos Praticos com JBoss Seam
* Nova edicao da Revista MundoJava - A Nova Geracao de Aplicacoes Desktop
* Cursos Java da X25
* Emprego Java (16)
****************************************************************/
Esta e' uma mensagem automatica, por favor, NAO responda a este e-mail. O nosso servidor de correio e' apenas para envio de mensagens. Respostas (replay) para este boletim nao sao monitoradas, nem respondidas.

PessoALL, bom dia,

Hoje 16.878 participam dos cursos JEDI - www.dfjug.org/DFJUG/jedi/index.jsp

__| Raphael Adrien e' o coordenador regional JEDI para Goias |__
O colega Raphael Adrien, raphael.adrien@gmail.com, e' o novo responsavel pela divulgacao da Iniciativa JEDI no estado de Goias. Ele ja' tem feito varias apresentacaoes da nossa Iniciativa em faculdades da regiao e mais abaixo voce pode ler alguns de seus comentarios.

Ele e' Bacharel em Sistemas de Informacao, pela Universidade Salgado de Oliveira, pos Graduacao lacto sensu tecnologia da informacao e negocios eletronicos, pela mesma instituicao. Trabalha desde 2005 com a linguagem JAVA, com foco em desenvolvimento de sistemas para Web utilizando alguns frameworks de desenvolvimento como DWR, Structs, Hibernate, DWR, JUnit, JSF, prestando servico para todo o sistema FIEG (FIEG, SESI, SENAI, IEL, ICQ Brasil), atua tambem como professor da FATESG - Faculdade de Tecnologia SENAI, ministrando disciplinas relacionadas a linguagem de programacao e rede de dados. Trabalhou com suporte e manutencao de sistemas GNU/Linux - Kurumim, no Tribunal de Justica de Goias / Forum. Um dos fundadores do PEQUIJUG, coordenador do GOJAVA desde janeiro/2008.

Ele comemora o sucesso do JEDI em seu estado : A palestra em Anapolis foi um sucesso, algo em torno de 300 alunos estiveram presentes, um professor da instituicao me convidou para ministrar a mesma palestra em outra instituicao de ensino da cidade estou aguardando o e-mail dele para ajustar os detalhes, o JEDI esta sendo bem aceito aqui em nosso estado, agora gostaria de saber se essas palestras estao se transformando em inscricoes no site, teria como me enviar a quantidade de alunos cadastrados no JEDI do estado de Goias, ou quantidade de acessos oriundos de nosso estado? As fotos do evento podem ser visualizadas, em http://www.gojava.org/ugojava_ueg_anps.

Bem esta semana estarei ministrando duas palestras sobre JEDI a primeira sera 29/05 quinta-feira na Universidade Salgado de Oliveira para alunos do 1º e 2º periodo do curso de Sistema de informacao;
A segunda sera no dia 31/05 no 5 Forum Goiano de Software Livre & 1 Simposio Goiano de Software livre (http://www.sgsl.ueg.br/), que ja' conta com mais de 1380 inscritos, vamos estar fazendo um trabalho de divulgacao do JEDI neste evento. Outro ponto que estaremos ministrando dois mini-cursos de JAVA Basico e o material do JEDI sera utilizado, assim os alunos poderao continuar estudando apos o termino do curso.
Hoje comecei a campanha por questoes do JEDI, esta no meu blog, e na lista de nossa comunidade, espero conseguir algumas questoes.

Havera' uma apresentacao de JEDI no 5 Forum Goiano de Software Livre & 1 Simposio Goiano de Software Livre (http://www.sgsl.ueg.br/), vou apresentar a iniciativa e vamos ter dois mini-cursos de JAVA Basico utilizando o material da iniciativa, ministrado por Marcos Fernando "Nerd", entre varios outros cursos como JSF, Ruby OnRails, Tibco..

Os interessados devem entrar no site do evento e efetuar sua inscricao.

Nao sei se ja tinha enviado, mas segue anexo o link da apresentacao do JEDI em Anapolis, as fotos estao em nosso sitio (http://www.gojava.org/ugojava_ueg_anps).

Em nosso site tera toda a programacao de palestras e eventos ministrados pelo GOJAVA (http://www.gojava.org).
/******* Cobertura do JavaOne 2008, patrocinio CodeGear e Politec ********/

__| JBuilder agora e' da Embarcadero |__
Participe do evento online e ao vivo, sobre o recente anuncio do acordo de compra da CodeGear por parte da Embarcadero Technologies.

David Intersimone "David I", Vice Presidente de relacionamento com desenvolvedores e Evangelista Chefe da CodeGear, sera o anfitriao de uma conversa com membros da comunidade e os CEO da CodeGear Jim Douglas e Wayne Williams CEO da Embarcadero Technologies.

Os dois CEOs irao debater detalhes do recente anuncio, o que significa para os clientes e parceiros da CodeGear e Embarcadero, os beneficios que as empresa poderao obter com a criacao da maior empresa de software independente, focada em design, desenvolvimento, gerenciamento e otimizacao de aplicacoes e bancos de dados. Durante o chat ao vivo, os CEOs responderao perguntas de todos os membros da comunidade.


- Data/Hora e informacao para registro
Quinta-feira 22 de Maio
14:00 - Horario de Brasilia http://borland.interwise.com/borland/iSeminar/RN1890/

- Envie suas pergunta antecipadamente
Se deseja enviar perguntas antecipadamente para Jim y Wayne em Portugues, envie um email para alanusse@codegear.com. com o titulo "Pergunta para o Chat entre comunidades e CEOs" e sua respectiva pergunta

- Informacoes adicionais sobre o anuncio:

Press Release – Embarcadero - http://dn.codegear.com/article/38155
Customer letter from Wayne Williams, CEO Embarcadero Technologies -
http://www.codegear.com/article/38135/images/38135/WWCustomerLetterFinal.pdf

Carta de David Intersimone a comunidade, Evangelista Chefe, CodeGear - http://dn.codegear.com/article/38155

FAQ - http://www.codegear.com/article/38135/images/38135/CG_Customer_FAQ_FINAL_5.7.08.pdf

Embarcadero Technologies Press Contacts - http://www.embarcadero.com/news/media_contact.html

/***/
Tambem sobre a aquisicao do JBuilder voce encontra informacoes em :
Andreano - http://blogs.codegear.com/andreanolanusse/2008/05/08/o-dia-seguinte-a-grande-noticia-%e2%80%93-diretamente-do-java-one/

David I - http://blogs.codegear.com/andreanolanusse/2008/05/08/comunicado-a-comunidade-de-desenvolvedores-brasileira/
/******* Cobertura do JavaOne 2008, patrocinio CodeGear e Politec ********/

__| Projetos Praticos com JBoss Seam |__
Paulo Andre, lcm@lcm.com.br, editor da editora Ciencia Moderna, nos comunica o lancamento do livro : Projetos Praticos com JBoss Seam (Primeira edicao, 2008)

Autor: Jim Farley
Numero de paginas: 256 pp.
ISBN: 978-85-7393-677-3

Livros de programacao devem ser escritos para desenvolvedores que precisam obter as coisas prontas e que buscam ativamente ferramentas para obter coisas melhores e mais rapidas, mas que nao tem tempo suficiente para fazer ambos. Uma vez que isto inclui a maioria de nos, este livro, baseado em projetos, e exatamente o que voce precisa para colocar JBoss® Seam em pratica imediatamente.

Voce vera como o Seam e usado na pratica, a medida que for guiado atraves da construcao de uma aplicacao web real, capitulo por capitulo. Esta abordagem ajudara voce a aprender mais rapido as tecnicas corretas, ao inves de simplesmente olhar para exemplos isolados. Voce vera todas as questoes comuns que surgirao quando abrir a caixa de truques do Seam em um unico lugar e simplesmente testemunhar como ele se mantem como um framework consistente. Mais informacoes no nosso site www.lcm.com.br

Sumario: 1 Introducao ao Seam; 2 Configuracao e Administracao do Seam; 3 Fundamentos do Componente; 4 Contextos e Conversacoes; 5 Fluxo de Navegacao da Pagina Estruturado; 6 Seguranca; 7 Gestao de Processos de Negocios; 8 Clientes Web Ricos.
/******* Cobertura do JavaOne 2008, patrocinio CodeGear e Politec ********/

__| Nova edicao da Revista MundoJava - A Nova Geracao de Aplicacoes Desktop |__
OEditor Executivo da evista MundoJava, Marco Antonio Guapo, guapo@mundojava.com.br, comenta sobre a nova edicao da revista MundoJava

A geracao de aplicacoes desktop e a capa da nova edicao da revista MundoJava. A edicao traz artigos importantes sobre o tema e contem como BRINDE o Poster SCJP Parte 3

- Desenvolvendo aplicacoes desktop ricas na Plataforma NetBeans
- Animacoes 2D em JavaFX na Pratica
- Binding, Componentes Customizados e Templates de Telas no SwingBean 1.2

Completando a edicao ainda ha diversos outros artigos interessantissimos:
- Click Framework
- Acesso a Servicos Multimidia em Java ME com a SIP-API e IMS
- RSS dinamico, rapido e facil com ROME e STRUTS 2
- Escolhendo uma Ferramenta Case Gratuita para Modelagem UML
- Modelando Transacoes de Facade a AspectJ
- MundoOO: O Ciclo agil de um Dia
- Tendencias em Foco: Java e o Mundo Web 2.0
- De Olho no Mercado: Educacao Continuada de um Desenvolvedor

Garanta ja sua edicao nas bancas de revista!!
Ou faca sua assinatura pelo site www.mundojava.com.br
/******* Cobertura do JavaOne 2008, patrocinio CodeGear e Politec ********/

__| Cursos Java da X25 |__
Diana L. Nunes dos Santos - x25@x25.com.br, coordenadora da X25 - www.x25.com.br, empresa parceira do DFJUG, divulga os cursos de sua empresa:

* Pacote Logica + Java
http://www.x25.com.br/curso/logica_java/197

* Pacote Requisitos de Software - Levantamento, Analise e Gestao
http://www.x25.com.br/curso/pacote_requisitos_de_software_levantamento_analise_e_gestao/358

* RUP 2003 Completo
http://www.x25.com.br/curso/rup_2003_completo/352

* Webdesign
http://www.x25.com.br/curso/webdesign/30

* Gerencia de Projetos PMI na Pratica
http://www.x25.com.br/curso/gpp_gerencia_de_projetos_pmi_na_pratica/119

* QA - Qualidade de Software
http://www.x25.com.br/curso/qa_qualidade_de_software/353

* Preparatorio para certificacao PMP
http://www.x25.com.br/curso/preparatorio_para_certificacao_pmp/120

* LPN - Linux Professional Network
http://www.x25.com.br/curso/lpn_linux_professional_network/287

* Pacote ITIL v.2 e COBIT Foundation
http://www.x25.com.br/curso/pacote_itil_v_2_e_cobit_foundation/351

=========================================
C O N T A T O S
=========================================
X25 Treinamento e Consultoria
Tel. : (61)3244 2510
End. : 910 Sul, Bl. D Sala 239
Email : contato@x25.com.br
atendimento@x25.com.br
Web : http://www.x25.com.br
/******* Cobertura do JavaOne 2008, patrocinio CodeGear e Politec ********/

__| Emprego Java (16) |__
Juliana Marchiori, juliana@cts-tec.com.br, Gerente Administrativa do Centro de Tecnologia de Software, www.cts-tec.com.br, informa : O Centro de Tecnologia de Software seleciona profissionais para Brasilia, para
as vagas informadas abaixo. Interessados enviar curriculo para o e-mail
rh@cts-tec.com.br, com pretensao salarial.

1) Arquiteto de Software
Experiencia com Websphere Aplication Server e JBOSS
Conhecimento e experiencia na definicao e implementacao de arquitetura de aplicacoes corporativas com J2EE
Desejavel experiencia na utilizacao de processo de desenvolvimento baseado no Processo Unificado
Desejavel conhecimento e experiencia com SOA e EJB3

2) Analista/Projetista
Experiencia com Websphere Aplication Server e JBOSS
Conhecimento e experiencia no desenvolvimento de aplicacoes corporativas com J2EE
Conhecimento e experiencia em projeto de aplicacoes utilizando UML
Desejavel experiencia na utilizacao de processo de desenvolvimento baseado no Processo Unificado
Desejavel conhecimento e experiencia com SOA e EJB3

3) Implementador Java
Conhecimento e experiencia no desenvolvimento de aplicacoes com Java
Desejavel conhecimento de UML e processo de desenvolvimento baseado no
Processo Unificado
Desejavel certificacao SCJP

4) Coordenador de Requisitos
Conhecimento e experiencia no levantamento de Requisitos
Conhecimento de UML e processo de desenvolvimento baseado no Processo
Unificado
Conhecimento e experiencia na implantacao da disciplina de Requisitos no processo de desenvolvimento

5) Analista de Requisitos
Conhecimento e experiencia no levantamento de Requisitos
Desejavel conhecimento de UML e processo de desenvolvimento baseado no
Processo Unificado

6) Coordenador de Testes
Conhecimento e experiencia na elaboracao de roteiro de testes
Conhecimento e experiencia na utilizacao de ferramentas de teste de mercado
Conhecimento de UML e processo de desenvolvimento baseado no Processo
Unificado
Conhecimento e experiencia na implantacao da disciplina de Testes no processo de desenvolvimento

7) Analista de Testes
Conhecimento e experiencia na elaboracao de roteiro de testes
Conhecimento e experiencia na utilizacao de ferramentas de teste de mercado
Desejavel conhecimento de UML e processo de desenvolvimento baseado no
Processo Unificado

8) DBA DB2
Ampla experiencia com DB2

9) DBA SQL Server
Ampla experiencia com SQL Server
/***/
Camila Magri, marketing@trainingtecnologia.com.br, Assistente de Marketing
da Training Tecnologia, www.trainingtecnologia.com.br, empresa parceira do DFJUG oferece :

Vaga: Programador Junior (03 vagas)
Atividades: Suporte a sistemas, suporte a protocolo a LDAP, codificacao de sistemas Java, implementacao, testes. Homologacao e estabilizacao de processos e sistemas em ambiente de producao; Elaboracao de scripts, procedures, interfaces, desenvolvimento de programas ou quaisquer outros recursos necessarios para apoio ao planejamento, controle e automacao da producao.

Conhecimentos: Excelente logica de programacao e suporte a sistemas com conhecimento consolidado de Java WEB; intermediario em linguagem de declaracao XML, Processos de engenharia de software, banco de dados
relacionais e plataformas Windows e Linux. Desejavel em UML e sistemas de controle de versao.

Vaga: Analista desenvolvedor (02 vagas) Atividades: Suporte a sistemas, suporte a protocolo LDAP, codificacao de sistemas Java, testes. Homologacao e estabilizacao de processos e sistemas em ambiente de producao; Elaboracao de scripts, procedures, interfaces, desenvolvimento de programas ou quaisquer outros recursos necessarios para apoio ao planejamento, controle e automacao da producao.

Conhecimentos: excelente logica de programacao e suporte a sistemas, com conhecimento consolidado em Java EE (servelet, JSP) em linguagem de declaracao XML, transformacao XSLT, XSD, SGBD. Intermediario LDAP,
processos de engenharia de software orientada a objeto, UML, design patterns, lingua inglesa. Desejavel sistemas de controle de versao, Unix/Linux. Entreprise archictect.

Candidatos encaminhar curriculo para : camila@trainingtecnologia.com.br
Informacoes : 3033-8364
/***/
Fabio dos Reis Silva, fabio.silva@nct.com.br, Analista de Pessoal/RH da NCT Informatica, informa : Estou a procura de um Analista de Sistemas que tenha certificacao em UML e nivel Superior para trabalhar em Brasilia.
/***/
Regina Costa comunica : Empresa de grande porte na prestacao servicos de informatica contrata tecnicos especialistas em LINUX - minimo de 4 anos de experiencia em suporte a Linux e seus softwares basicos

Encaminhar curriculum para reginavcc@terra.com.br
/***/
As vagas de emprego e/ou estagio oferecidas neste boletim do DFJUG sao de inteira responsabilidade das pessoas e/ou empresas que as submetem. O DFJUG apenas as repassa da forma como sao recebidas, por acreditarmos que se trata de prestacao de servico para a comunidade Java.
/******* Cobertura do JavaOne 2008, patrocinio CodeGear e Politec ********/

__| Desistencia |__
O DFJUG respeita a sua privacidade e e' contra o Spam. Caso voce nao queira mais receber este informativo, envie um e-mail para sergio@dfjug.org, e digite no campo Assunto (Subject) a palavra RETIRAR. Para informacoes em geral sobre as atividades da nossa comunidade, envie um e-mail para fernando.anselmo@dfjug.org. Obrigado.
/******* Cobertura do JavaOne 2008, patrocinio CodeGear e Politec ********/

Sempre e importante ressaltar que o DFJUG e patrocinado pelo Instituto CTS - www.cts.org.br, que nos fornece todo o apoio logistico, administrativo e juridico que nosso grupo necessita para realizar seus projetos tecno/sociais. Abracos a todos e bons codigos !!!

Daniel deOliveira
JUG Leader / Founding Java Champion
Brasilia Java Users Group
daniel@dfjug.org
www.dfjug.org
Brasil

SOA - Leia mais ...!

Service-oriented architecture

SOA_Software


SOA Software Has Big Plans For Blue Titan




Abaixo estao alguns links selecionados sobre o assunto, apenas copie e cole eles na barra de endereço, e não esqueça de clicar em ir, é que daria muito trabalho linkar tudo isso ...!


http://labase.nce.ufrj.br/cursos/fdbc/aulas/aula18/slide.html

http://www.nce.ufrj.br/conceito/artigos/2005/01p1-1.htm

http://www.microsoft.com/brasil/msdn/Tecnologias/visualcpp/visualcpp_webservices.mspx

http://www.braziloutsource.com/wss2.html


http://imasters.uol.com.br/artigo/4422/webservices/descrevendo_um_web_service_-_wsdl/


http://blog.fragmental.com.br/category/engenharia/arquitetura/soa/page/3/


http://www.javafree.org/content/view.jf?idContent=106


http://www.guj.com.br/java.tutorial.artigo.159.1.guj


http://ws.apache.org/axis/java/user-guide.html


http://javaboutique.internet.com/tutorials/Axis2/


http://www.linhadecodigo.com.br/Artigo.aspx?id=38

http://www.mhavila.com.br/link/internet/xml.html

http://www.javafree.com.br/content/view.jf?idContent=4

http://www.linhadecodigo.com/Artigo.aspx?id=3

http://imasters.uol.com.br/artigo/3879/xml/soap_attachments_com_axis/

http://palmadias.blogspot.com/2007_07_01_archive.html


http://www.intelligentedu.com/blogs/post/best_new_training_sites/414/Free-Course-on-Web-Development-with-.NET/pt/



Não tem nada haver com o assunto mas é interessante ler:
Por que o Linux é uma opção melhor que o Windows:

http://www.novell.com/pt-br/linux/truth/better_choice.html


http://www.google.com/search?hl=pt-PT&lr=&client=iceweasel-a&rls=org.debian:pt-BR:unofficial&pwst=1&q=arquitetura+SOAP+%2Blinguagem+C+%2BArquitetura+SOAP+%2BWSDL+-.pdf+-.ppt+&start=80&sa=N