Tiago Madeira Inferências aleatórias de um cérebro em versão alpha

"Só se dedicará a um assunto com toda a seriedade alguém que esteja envolvido de modo imediato e que se ocupe dele com amor. É sempre de tais pessoas, e não dos assalariados, que vêm as grandes descobertas."
(Arthur Schopenhauer)

Arquivo do mês: January, 2007

26/01/2007

Acer Orbicam

Agora que já estou com o Acer Aspire 5050-3205 quase totalmente configurado com Gentoo, estou resolvendo os últimos problemas de hardware, que creio que são os mais difíceis: wireless e webcam.

Estou conseguindo gravar DVDs, usar ponto de interrogação (eba!) = AltGr+W, o som hda-intel já está funcionando (embora eu não consiga salvar as configurações entre as sessões - alsactl store/restore), estou a 1280x800 usando drivers proprietários da ATI e chegando a 1600fps com a ATI Radeon Xpress 1100. O sistema está quase redondo e bem rápido.

Acabei de entrar em contato com o Michel Xhaard, doutor francês responsável pelo GSPCA, que é o driver que suporta as câmeras no Linux. A câmera do Acer Aspire 5050-3205 no lsusb -v é reconhecida como:

idVendor 0x0c45 Microdia
idProduct 0x6260
bcdDevice 1.00
iManufacturer 0
iProduct 1 USB20 Camera

Na resposta do e-mail que eu mandei pra ele (e que ele respondeu em menos de meia hora, achei super legal!), ele disse que isso é igual uma Sonix USB2.0 sn9c201+Ov7670. O GSPCA ainda não a suporta, mas segundo o Michel, ele deve suportar em breve. Então, se você tem uma câmera embutida da Acer como a minha, o lance é ficar ligado e esperar pelo "sn9c20x" na lista de drivers suportados. ;)

Compare preços de notebooks no Buscapé!

Technorati Tags: , , , , , , , , ,

Compare Preços de: notebooks, acer aspire, hp pavilion, computadores, pentium 4, nintendo wii, ps3, celulares, câmeras digitais

284 comentários

24/01/2007

Aspire 5050-3205 é pop!

Palavras mais buscadas para entrar nesse site segundo o Slimstat desde 15 de dezembro de 2006:

  • tiago - 44 IPs
  • acer 5050-3205 - 36 IPs
  • acer aspire 5050 - 22 IPs
  • acer 5050 - 22 IPs
  • tiago madeira - 11 IPs
  • windows live menseger - 10 IPs
  • LAN HOUSE - 10 IPs
  • 5050-3205 - 9 IPs
  • ACER ASPIRE 5050-3205 - 8 IPs
  • acer 5050 3205 - 8 IPs
  • como entrar no youtube - 8 IPs
  • aspire 5050 - 8 IPs
  • hackear orkut - 8 IPs
  • roubar senha de msn - 6 IPs
  • roubar msn - 6 IPs
  • senhas do msn - 6 IPs
  • "hackear orkut" - 5 IPs
  • ATI Radeon Xpress 1100 - 5 IPs
  • descobrir senha do msn - 5 IPs

Aqueles posts pra conseguir paraquedistas estão rendendo e os ganhos do Adsense desse mês estão melhores que o do mês passado e muito melhores do que do mês retrasado. Mesmo assim ainda estão baixos. Nessa semana eu estou com uma média de um dólar por dia.

Além dessas palavras-chave, também buscaram hotchick, sexygirl, entre outras besteiras assim que eu escrevi no post sobre MSN.

Bom... Pelo menos eu devo estar dando um retorno real pra quem procura sobre o Acer Aspire 5050-3205 no Google. :) O hardware dele está sendo cada vez melhor reconhecido aqui... Não consegui fazer o wireless funcionar, mas agora o som hda-intel e a placa de vídeo estão perfeitas (a Radeon tá fazendo 1600 frames por segundo!) O AltGr+W = ponto de interrogação ainda não funcionou! Modifiquei na pasta symbols do XKB como vários locais na internet dizem, mas não funciona. Novidades a qualquer momento... ;-)

Technorati Tags: , , , , , ,

Compare Preços de: notebooks, acer aspire, hp pavilion, computadores, pentium 4, nintendo wii, ps3, celulares, câmeras digitais

24 comentários

24/01/2007

for (d=hoje; d<=17/03; d++) { Estude - OBI }

IMPORTANTE: Esse post não é recomendado pra quem nunca programou. Escrevi sem pensar neles... :-)

Bom... Existem pessoas que sabem programar e não programam. O difícil na arte de programar é pensar, porque o resto é escrever em inglês e se acostumar com uma sintaxe rigorosa.

Comecei ontem a ensinar um amigo a programar em C para participar da OBI 2007, que foi anunciada nessa semana. Eu poderia ensinar Pascal, que é mais que suficiente para olimpíadas (quem conhece o André Linhares entende o que eu quero dizer...), mas resolvi ensinar C porque eu me embabacaria no Pascal e no C eu vejo os blocos mais "definidos" com as chaves; aqueles begins e ends "sujam" o código. E como diz o lema do sistema desse blog, code is poetry.

O reverendo e meus leitores mais novos devem estar se perguntando: como o Tiago é capaz de fazer essas loucuras? É verdade que fiquei um bom tempo sem escrever sobre programação, mas adoro isso! É lazer pra mim e essa também é a minha profissão, já que eu não consigo viver desse blog (por culpa sua que não clica nos meus anúncios...). Só quando começo a brincar é que lembro como é divertido e acho que é porque eu me sinto "no poder". :-)

Mas voltando ao assunto... Esse meu colega é campeão regional de matemática e tem uma facilidade incrível para matérias exatas (e pras humanas mais ainda, eu acho). Eu estava sem nada pra escrever aqui no blog e resolvi escrever sobre o que eu vou ensinar pra ele amanhã: arrays e for.

Meu aluno está resolvendo a prova da Programação Nível 1 da OBI2005. Ele já resolveu a Frota de Táxi e agora precisa resolver o problema Campos de Minhoca.

O problema é que, pela primeira vez, ele se depara com uma situação em que tem que receber como entrada uma tabela completa! Sugeri que ele usasse dois while, um dentro do outro. Ele pensou um pouco e conseguiu fazer o seguinte código:

scanf("%d %d", &n, &m);
 
natual=1;
while (natual<=n) {
	matual=1;
	while (matual<=m) {
		scanf("%d", &valor);
		matual=matual+1;
	}
	natual=natual+1;
}

Perfeito. Era o que eu queria que ele fizesse. Mas agora entenda sua situação: como armazenar todos esses números pra depois trabalhar com eles?

Dessa maneira, cada vez que recebemos um novo elemento da tabela, colocamos numa variável valor e ao final do recebimento da entrada ficaremos apenas com o último elemento da tabela.

E então entram os arrays...

Arrays são matrizes de matemática ou, numa língua muito mais fácil, tabelas. Vamos supôr que eu receba 1000 valores e queira saber qual é o maior deles. Imaginem como seria para declarar suas variáveis, recebê-los e tratá-los:

int var1, var2, var3, var4, ..., var1000;
 
scanf("%d", &var1);
scanf("%d", &var2);
scanf("%d", &var3);
scanf("%d", &var4);
...
scanf("%d", &var1000);
 
if (var1>maior) {
	maior=var1;
}
 
if (var2>maior) {
	maior=var2;
}
 
if (var3>maior) {
	maior=var3;
}
 
...

Impossível! Totalmente inviável. Então alguém teve a brilhante idéia de criar um elemento que guarda várias variáveis de uma vez. Então surgiram os arrays. Você cria uma só variável e na sua declaração coloca o número de elementos que ele tem dentro de chaves.

int var[1001];

Depois para receber os valores você pode então simplesmente usar o while como usou no exemplo do Campos de Minhoca:

int var[1001], indice;
 
indice=1;
while (indice<=1000) {
	scanf("%d", &var[indice]);
	indice=indice+1;
}

E para ver qual é o maior deles basta usar mais um while:

indice=1;
while (indice<=1000) {
	if (var[indice]>maior) {
		maior=var[indice];
	}
}

Mas peraí... Então como faríamos no Campos de Minhoca? Lá não temos só uma lista de N números, mas uma tabela mesmo, com altura e largura. É simples, basta fazer com que cada índice dessa lista seja outra lista.

int tabela[1001][1001];

Assim, podemos acessar todos os elementos e pra saber o elemento da coordenada 5, 23 basta usar a variável tabela[5][23].

Aí aquele primeiro código do Campos de Minhoca torna-se:

scanf("%d %d", &n, &m);
 
natual=1;
while (natual<=n) {
	matual=1;
	while (matual<=m) {
		scanf("%d", &valor[natual][matual]);
		matual=matual+1;
	}
	natual=natual+1;
}

As variáveis [n,m]atual vão crescendo e preenchendo a tabela. :)

Só que acontece que se programássemos dessa maneira gastaríamos uma porção de códigos e ficaríamos confusos pra trabalhar com arrays, tendo que sempre verificar os índices e acabaríamos errando bastante. Então criou-se o for. O for é uma simplificação desse tipo de while. Você diz que:

para todo natual de 1 a n, faça:
alguma coisa
fim-para

Escrever for em Pascal é super divertido, porque você se sente falando com o computador:

for i:=1 to 100, do begin
	código aqui
end;

No C existe uma sintaxe mais versátil, mas que pode ser um pouquinho mais difícil de entender no início:

for (atribuição; condição; incremento)

A atribuição é onde você coloca o primeiro valor do índice. A condição é a condição para que o enquanto continue funcionando. O incremento é o que ele deve fazer ao final de cada loop (geralmente é aumentar um).

Então, ao invés de fazer esse while:

indice=1;
while (indice<=1000) {
	scanf("%d", &var[indice]);
	indice=indice+1;
}

Você pode escrever:

for (indice=1; indice<=1000; indice=indice+1) {
	scanf("%d", &var[indice]);
}

E como resolver a parte da entrada do Campos de Minhoca sabendo disso?

Simples... Basta colocar um for dentro do outro:

scanf("%d %d", &n, &m);
 
for (i=1; i<=n; i++) {
	for (j=1; j<=m; j++) {
		scanf("%d", &matriz[i][j]);
	}
}

Observação 1: Escrever variavel++ é a mesma coisa que escrever variavel=variavel+1.

Observação 2: Geralmente utiliza-se i para o primeiro for, depois j, k, l e eu nunca tive que passar do l. :)

Observação 3: Se eu queria um vetor de 1000 posições lá em cima, por que eu declarei 1001? Bom... O C conta a partir de 0. Quando eu peço 1000, ele vai me dar um vetor de 0 a 999. Já que eu queria ter o var[1000] eu precisei declarar de 1000+1=1001.

Ficou claro ou muito confuso? Se deu pra entender isso aí, agora é só mandar a ver no resto do problema! :)

Technorati Tags: , , , , , , ,

Compare Preços de: iPod, home theater, plasma, lcd, câmeras digitais, games, ps3

2 comentários

Assine via RSS

Assine gratuitamente o meu blog e receba todas as atualizações na hora, em seu agregador de feeds favorito.

Seja o 236º assinante

Busca no blog

Escreva palavras-chave para buscar e clique em Pesquisar.

Busca Google

Blogs de minha autoria

Publicidade

Dreamhost

Creative Commons - Some rights reserved tiagomadeira.net © Todo o conteúdo deste blog, exceto quando especificado o contrário, está licenciado sob uma Licença Creative Commons por Tiago Madeira. Os comentários são de responsabilidade de seus respectivos autores.