quinta-feira, 3 de novembro de 2005

Apresentação RTOS - Sistema Operacional de Tempo Real

Antes de mais nada, a receptividade em sala na terça foi muito legal. Obrigado a todos que se fizeram presentes.

Estou publicando o material para referencia futura. Talvez nem tão futura assim, a prova é semana que vem! :D

Abaixo também estão as matérias na istoé e no globo reporter sobre os carros "sem piloto". Não deixe de ler, é bastante interessante.

Artigo
Apresentação
O piloto sumiu!
Japão, 60 anos depois

quarta-feira, 19 de outubro de 2005

Criando máquinas virtuais com Qemu

Muitos alunos ficaram interessados na apresentação de trabalho sobre Qemu da Cristiane ontem. Ela resolveu publicar o artigo para quem quiser ter uma noção completa do tema.

Clique sobre os links para baixar os arquivos em formato pdf da apresentação e do artigo:

Artigo
Apresentação

segunda-feira, 19 de setembro de 2005

Uma nova gravação

Isso aqui já está quase se tornando blog de música clássica mesmo, então aqui está mais uma gravação pra quem curte um som de violão clássico!

É uma composição de Francisco Tárrega, conhecida como "Mazurka". Mazurka é um rítmo polonês de dança popular de roda. (veja na wikipedia)

Mazurka - Tárrega

Espero que gostem!

segunda-feira, 12 de setembro de 2005

Ensino sequencial, é tão difícil assim?

Quando estudei linguagens formais com o professor Marcelo Pelágio fiquei muito entusiasmado e ancioso pra colocar logo a mão na massa e utilizar ferramentas construídas com base nos problemas já conhecidos na contrução de compiladores (lex, yacc). A maior vontade era ver um autômato daquele virar código fonte de compilador. A maioria da turma aprendeu a matéria muito bem.

Existe algo chocante na troca de professor. Seria muito interessante se houvesse uma continuação. Pra que vai servir aquela matéria agora? Você se esforça, pergunta, tenta compreender, enfim, pra que? Você podia estar muito bem testando seu compilador, na linguagem que você inventou, ao invés de ficar lendo este artigo aqui agora ou pior ainda, estar aprendendo a programar na aula de compiladores.

Nada contra aprender programar, pelo contrário. Só acredito que a aula de compiladores não seja o lugar ideal. Na verdade penso que deviamos estar implementando um compilador de linguagem, usando autômatos, follow, first, e tudo mais. Porém, esta questão é polêmica e vou deixar de lado.

Bom, vou fazer uso daquele conteúdo neste artigo, mais precisamente da parte de recursão à esquerda, embora de uma forma pouco usual.

O último exercício pedido na disciplina de Compiladores foi o reconhecimento de uma expressão algébrica. Minha dúvida tentava fazer o professor perceber que aquela regra de produção está com recursão a esquerda, e por isso está tão difícil perceber como validar a sintaxe.

O "livro do dragão" explica muito bem isso. Bater o olho e perceber o que é reconhecido pela regra de produção fica bem mais fácil se eliminarmos a recursão. Lembra-se que o professor Pelágio dizia que não é possível implementar uma regra com recursão à esquerda?

Veja a regra com recursão:

<soma> -> <soma> <sinal> <termo> | <termo>
<sinal> -> + | -
<termo> -> 0|1|2|3|4|5|6|7|8|9

Agora sem recursão (alfa e beta, se lembra?):

<soma> -> <termo> <soma2>
<soma2> -> <sinal> <termo> <soma2> | E
<sinal> -> + | -
<termo> -> 0|1|2|3|4|5|6|7|8|9

Ou mais simples ainda:

<soma> -> <termo> <soma> | + <termo> <soma> | - <termo> <soma> | E
<termo> -> 0|1|2|3|4|5|6|7|8|9

Derivando isso, observamos que sempre teremos as seguintes combinações:

<termo>
<termo> + <termo>
<termo> + <termo> - <termo> ...
<termo> - <termo>
<termo> - <termo> - <termo> + <termo> ...

Ou seja, "um só termo" ou "um termo e sequências de sinal seguido de termo".

Desta forma fica mais fácil desenvolver o algorítimo.

Vamos desenvolver um protótipo. Para cada item da regra de produção defina uma função. Crie também uma função chamada "erro" que quando executada mostra a mensagem "erro de sintaxe" e sai do programa. Veja abaixo os exemplos. Observe os comentários antes de cada função.


void erro() {
printf("Erro de sintaxe!\n");
exit(1);
}

/* Sai do programa se a palavra recebida como argumento não for
* o sinal de adição ou o sinal de subtração
*/
void sinal(char *palavra) {
if (*palavra != '+' && *palavra != '-')
erro();
}
/* Sai do programa se a palavra recebida como argumento não for
* um número
*/
void termo(char *palavra) {
se (!isdigit(*palavra))
erro();
}

/* A regra de produção em si. "Um termo"
* ou "um termo e sequencias de sinal e termo"
*
* A função proxPalavra retorna a próxima palavra do
* arquivo que foi lido no inicio do programa, está em anexo no final.
*
*/
void soma(char *textoDoArquivo) {
char *palavra;
palavra = (char*)malloc(sizeof(char)256);

proxPalavra(palavra, &textoDoArquivo);
termo(palavra);
while(1) { /* infinitamente (a recursão da regra de produção é esta) */
proxPalavra(palavra, &textoDoArquivo);
sinal();
proxPalavra(palavra, &textoDoArquivo);
termo();
}
}

Depois que você abrir o arquivo e carregar seu conteúdo, chame a função soma passando a variável com o conteúdo do arquivo.

Em resumo, não mudou nada. Derivar a regra de produção é a forma mais fácil de saber por onde começar, como era em Linguagens Formais.

Baixe o arquivo com a função proxPalavra()

Tenho também a função que lê todo o arquivo e armazena em uma variável. Se estiver interessado é só me pedir por e-mail.

domingo, 17 de julho de 2005

Férias, um pouco de tempo sobrando e...

Bem, olha só o que aprontei. Nem todo mundo sabe, até porque não divulgo muito isto, mas tenho uma certa "paixão" por violão clássico.

Estava sem muito o que fazer e tinha comprado um fone de ouvido com microfone pra afinar o violão pelo computador (fica 100%) então pensei: porque não gravar algumas músicas? :D

Por enquanto são apenas cinco. Três de Bach, uma sonata de Handel e uma bem famosa de Francisco Tárrega, Lágrima.

Bourree em Em - Bach
Minueto em D - Bach
Jesus Alegria dos Homens - Bach
Sonatine - Handel
Lágrima - Tárrega

Meu violão não é uma maravilha, pra não dizer genérico. O que salva são as cordas da giannini de tensão alta, uma maravilha.

Não se asuste com a extensão do arquivo. Este formato (ogg) é bastante popular e livre. Qualquer player suporta, inclusive o winamp.

Por fim, pra quem achou que o post iria acabar sem informática, gravei tudo no Audacity que por sinal me surpreendeu bastante. Tem de tudo pra gravação e edição de som, é livre e ainda fala nosso idioma. Quer ver as screenshots?

quarta-feira, 11 de maio de 2005

Seminário Reiser4

Acadêmicos, fiquei surpreso e alegre com a receptividade em sala ontem, no seminário de Reiser4. Todo mundo me olhava com um rosto que só eu terei guardado na mente! Aparentemente era uma mistura de espanto com quero mais, que seria impossível explicar com palavras. Indiscutivelmente interessante.

Ficou faltando um detalhe importante. Seria a tal versão 1.0 da apresentação. Como disse, a figura da árvore foi substituída, porém esqueci de atualizar o maldito disquete :D

A figura adicionada foi esta aqui.
Nela você pode notar, no canto inferior esquerdo, os itens (azuis) detro das folhas da árvore. O detalhe nisto é a fragmentação. Da forma como foi implementado, o conteúdo de um arquivo é dividido em um ou mais itens em uma ou mais folhas. Isto reduz a fragmentação interna, elimina a fragmentação externa e faz com que o Reiser4 seja mais eficiente no aproveitamento de espaço que outros sistemas de arquivos.

Baixe aqui a apresentação.

Espero que tenha sido de bom proveito para todos.

segunda-feira, 9 de maio de 2005

Aula - Triggers e Procedures

Como resultado da aula de banco de dados compilei uma semi-apostila abordando as principais características e formas de utilização para stored procedures e triggers em banco de dados relacionais.

Clique aqui para baixá-la. Está em formato PDF.
Agradeço o envio de sugestões para melhorá-la.

segunda-feira, 4 de abril de 2005

Desmistificando conhecimento

A palavra que por aqui aparece hoje é "conhecimento". Já olhou o significado no dicionário? Veja só: experiência, idéia, noção, informação, notícia, além de outros. Mas onde isto influi?

Há de concordar que sendo conhecimento qualquer tipo de informação, o que aconteceu no BigBrother e na novela das oito também está incluso. Poderia ser aproveitado, por exemplo, ao participar de um programa televisivo. No entanto, este tipo de conhecimento fica pra outra ocasião.

Quero destacar o conhecimento que tem o poder de encher seu bolso. O conhecimento que você pode ter na área em que atua; o que te destaca no meio de uma multidão e ainda o que te faz ser diferente dos outros funcionários ou concorrentes a sua volta.

Quanto a finalidade do conhecimento, uma pergunta: Como fazer algo se você não sabe pra que serve? Ou pior ainda, como fazer algo sem conhecer nada sobre o problema a ser resolvido?

Por exemplo: Como fazer um software sem conhecer a área onde ele pretende atuar? Que problemas da área ele deve resolver? Sem estas informações acredito não ser possível e é muito provável que o que você construir não será nada bom ou não resolverá problema algum.

De acordo com o dicionário, experiência também é conhecimento. Então, deduz-se que se você constrói software ou pretende construir é preciso ter experiência. É tão óbvio que é praticamente ridículo dizer, mas experiência só se adquire praticando.

Alguém questionaria: como praticar algo que não conheço? Eu diria: A pergunta é outra: Quem pode te mostrar o caminho pra começar a conhecer ou praticar algo? Existem muitas pessoas a nossa volta que tiveram a chance de aprender antes. As que realmente tem algum conhecimento a oferecer não exitam em repassar, pois repassar conhecimento também significa adquirir mais. Aprendi muito mais quando precisei ministrar uma aula que em qualquer outra ocasião.

Existe um inconveniente em ter bastante conhecimento, principalmente no seu emprego: você acaba resolvendo muitos problemas facilmente. Não tendo você simplesmente diria que não consegue fazer. O leitor mais atento percebeu pra quem sobra à tarefa. É quase como uma seleção natural, o que é difícil sempre cai na mão de quem sabe como resolver e estes sempre são pessoas atarefadíssimas.

Mas também existem inumeráveis lados bons. Em um emprego, por exemplo, o conhecimento teria o poder de elevar teu cargo; em seus investimentos o conhecimento financeiro pode te aposentar com trinta anos (não duvide, é possível), no seu negócio você saberia lidar melhor com seus clientes que por sua vez comprariam mais e te dariam mais lucros, e não para por aqui.

Em qualquer que seja a área de atuação, basta você adicionar conhecimento que o nível sobe. Seja o nível do seu salário, o seu nível de prestígio, o nível do seu cargo, etc. É como jogar água em um tubo de ensaio, porém a água faria o tubo transbordar ao contrário do conhecimento.

Mais um último problema no processo: nós adultos temos medo de errar, uma criança não, mas nós sim. Nascemos fazendo tudo errado, aprendemos a andar errando, a beijar errando e logo em seguida a escola nos ensina que existe apenas uma resposta certa e que quem erra é burro. Não está explícito, mais note que é assim que funciona. Só que o ser humano não aprende assim. O ser humano aprende errando e se não houver erro não há acréscimo de conhecimento.

É também importante ser humilde. Pessoas humildes aprendem mais que pessoas arrogantes. Burrice é fingir ser inteligente. Quando você finge está no auge dela. Quantas vezes você acha que Einstein errou até provar o que descobriu? Ele foi um vencedor, portanto aprenda a fracassar mais.

Resumindo, expanda sempre seu contexto. Pra quem ainda não acordou estamos em plena era da Informação. Cultivar o hábito de estar à frente da manada é uma forma de enxergar o futuro. Estar junto com ela torna impossível ver o que está a sua frente.

domingo, 6 de março de 2005

A maior coleção de mestres do mundo

Ao longo da vida tem-se várias pessoas com o propósito de lhe ensinar algo, mesmo que seja em troca de favores. Porém, raramente ensinarão apenas você. Geralmente tentam ensinar várias pessoas ao mesmo tempo. E o tempo é pequeno. E cada pessoa não sabe o mesmo e nem tem a mesma facilidade de compreender. Por mais esforço que haja, nunca todas as palavras serão ditas nem todos os detalhes repassados e compreendidos.

Analizando bem, parece não ter solução pois nunca foi diferente, não é mesmo? Não, não é. Pense mais um pouco e chegará a uma pergunta: Se alguém ensina, onde aprendeu?

Talvez com outro professor. Mas prefiro ir direto a fonte. Vou te apresentar a maior coleção de mestres e professores que existe. Eles são de todas partes, alguns são chamados de "os melhores do mundo". Mas ainda tem mais: estão a sua disposição, na sua hora de folga e só pra você. Na maioria das vezes de graça ou quase de graça.

Dá pra imaginar o que é possível aprender com tantos mestres dispostos a ensinar por este preço? (Tomara que aprender é algo que lhe estimula, porque senão, continuar não faria sentido)

Estes mestres nascem dos raros, porém incansáveis, soldados do aprendizado e da descoberta. Não se cansaram ou acomodaram, e foi por isso que mudaram e continuam mudando o mundo.

Muitos são os que não tem o hábito de utilizar o conhecimento deles. Como dito, é hábito. Ora, hábito é algo que se faz sempre, então é preciso fazer a primeira, a segunda, a terceira e nunca a última vez.

Muitos outros associam-nos as "pessoas que ensinam". Nada de errado, pois realmente são mestres dos mestres. O problema está em não se considerar mestre, ou não querer se tornar um. Vale ressaltar que mestre é alguém que ensina o que faz, e não o que sabe. Isto não implica que sabe pouco, implica que faz muito.

O que é mais lamentável em tudo é que embora todos saibam que utilizar o conhecimento deles é necessário, poucos o fazem ou farão. E não adianta insistir.

Pra quem não tem o "hábito" de usar estes mestres, dê a si mesmo uma chance de tentar. Mesmo que não compreenda tudo que eles dizem. Ao "ouvir" vários deles passará a compreender melhor o que todos dizem, da televisão ao jornal, do seu colega ao professor.

Acredito que já nem preciso mais dizer quem são.
Preciso? Bom, este mestres sobre os quais escrevo são os livros.

Leia também:
Prazer da leitura
Por que ler?