|
|
![]() |
|
© 2000-2011 Pedro Freire |
Olá rapazes!*
Se estás aqui provavelmente és meu aluno. Procura na lista abaixo pelo nome da escola/instituto onde tens aulas e pelo nome da cadeira/módulo que tens comigo. Depois é só descarregar o material e abrir!
Se não encontrares aquilo que procuravas aqui, tenta procurar no Moodle da Lusófona (onde tens de fazer login seguindo a hiperligação ao canto superior direito).
1º semestre: Arquitectura de Computadores (1º ano)
Esta é uma cadeira do 1º ano, 1º semestre. O objectivo com esta cadeira é (também) dar-vos a conhecer os sistemas de "baixo nível" dos computadores. Refiro-me à única linguagem que o computador realmente conhece: Assembly.
Este conceito irá ser a base para compreenderem como é que na realidade funcionam os restantes sistemas informáticos de que terão conhecimento ao longo do curso. Por exemplo: como funcionam então as restantes linguagens informáticas se o computador só compreende Assembly?
A resposta é simples. Veja-se como analogia os sinais de trânsito. A linguagem falada humana é a única que na realidade compreendemos. Mas "em cima dela" fizemos uma criação intelectual necessária para (neste caso) rapidamente compreendermos avisos típicos de trânsito. Cada um deles é pequeno, simples e (+/-) intuitivo, mas para o descrevermos precisamos de usar muitas palavras da nossa linguagem falada.
O mesmo se passa com todo o software no computador que tem de ser "convertido" para muitas (mesmo muitas) "instruções" Assembly. Esse processo de conversão pode ser feito à priori, para poupar tempo (chamando-se então "compilação") ou "em tempo real" para poupar esforço ao programador (chamando-se então "interpretação"). Os programas (em Assembly**) que fazem estas coisas para as várias linguagens chamam-se então os compiladores e intérpretes das linguagens.
O que vamos descobrir este semestre são as instruções Assembly. Quem corre estas instruções é o processador central do computador (CPU), e cada tipo de computador tem um CPU diferente, logo uma linguagem Assembly diferente — daí que programas para um tipo de computador (e.g.: os antigos Mac) não funcionem noutro (e.g.: os PCs). Nas aulas práticas de Arquitectura de Computadores vamos estudar o Assembly dos PCs que usam um CPU da Intel linha "APX" ou "x86". Esse CPU usa um conjunto de instruções habitualmente chamado de "arquitectura Intel de 32 bits" ou "IA-32". Os novos PCs de 64 bits continuam a correr perfeitamente código IA-32, tal como qualquer clone da AMD (embora estes prefiram referir-se a ele simplesmente como "arquitectura x86").
Para simplificar o trabalho ao CPU (e termos computadores mais baratos e rápidos), cada instrução Assembly é codificada em apenas 1 ou poucos bytes (falaremos do que são bytes nas aulas teóricas com o Prof. regente da cadeira Alexandre Pereira). Mas bytes representam-se habitualmente por números o que tornaria a programação em Assembly (ainda) mais complicada. Então existe geralmente uma abreviação (habitualmente chamamos-lhe "mnemónica") textual para cada instrução. E temos então um programa que converte um ficheiro de texto com essas abreviações para um ficheiro executável com os bytes finais prontos a correr pelo CPU. Como a linguagem Assembly é um caso especial das linguagens, não chamamos a esse programa nem compilador nem intérprete, mas sim o assembler (em Inglês, "Assembly" é "montagem" — como em "linha de montagem" — e "assembler" é então aquele que monta [as instruções]).
Infelizmente, cada assembler usa um conjunto de mnemónicas ligeiramente diferente dos outros, mesmo quando são assemblers para o mesmo CPU. Nas aulas práticas vamos usar o Netwide Assembler (nasm) porque é gratuito e open-source. Embora o nasm funcione também em Windows, os exemplos das aulas práticas serão sempre com as "chamadas de sistema" do Linux (que é ele também, gratuito e open-source, permitindo aos alunos "ver por baixo do capô" para ver como funciona), pelo que estaremos sempre a trabalhar com o Linux. Se tu já conheces outros assemblers e queres usá-los, não há problema, mas cuidado que as frequências incidem (também) sobre as mnemónicas do nasm e respostas que possam ser válidas para outros assemblers mas não o sejam para o nasm são sempre consideradas erradas.
Para poderes trabalhar com o Linux no teu computador Windows de casa, terás de o instalar. Isto pode ser em chamado "dual-boot" ou com uma máquina virtual (tipicamente VMware — mais conhecida e versátil — ou, gratuitos, a Sun VirtualBox ou o Microsoft Virtual PC). Procura ajuda na Lusófona sobre este tópico, mas irei distribuir um Linux preparado para as aulas aos alunos que tiverem dificuldade em instalá-lo. O Guião tem mais detalhes.
A avaliação de toda a cadeira (incluindo a parte prática) é feita nas aulas teóricas pelo Prof. Alexandre Pereira. Consistirá em princípio em uma/duas frequências ao longo do semestre e um projecto final. Confirma com o Prof. Alexandre Pereira como é feita a avaliação (os dados de contacto dos professores estão nos sistemas da Lusófona).
A matéria e exercícios de Assembly que vamos usar foram desenvolvidos pelo Prof. Alexandre Pereira pelo que não devem estar num site público como este. Procura no Moodle da Lusófona (ou no site do Prof. Alexandre Pereira) por esse material. Abaixo tens acesso ao material desenvolvido por mim: o guião e os exercícios modificados por mim.
Guião das aulas práticas
Capítulo de vírgula flutuante da Sebenta
Exercícios das aulas práticas
1º semestre: Compiladores (3º ano)
As aulas práticas vão consistir no uso do analisador lexico lex (ou mais propriamente, a sua versão open-source, flex), e no compilador de gramáticas yacc (ou melhor, o bison open-source). Ambos estes utilitários existem nos sistemas Linux que se encontram no mercado, pelo que podes usá-los em casa. Também consegues encontrar versões para Windows, por exemplo as que acompanham o MinGW, que inclui um (necessário) compilador de C. Pessoalmente eu uso o MinGW em Windows, mas nas aulas vou estar a mostrar-vos os temas num Linux da Lusófona.
As aulas práticas tocarão os seguintes tópicos:
- Contextualização: o que fazem o flex e o bison
- Expressões regulares
- Ficheiros flex
- Exemplos e exercícios
- Limitações do flex → gramáticas e o bison
- Ficheiros bison
- Exemplos e exercícios
- Projecto
A avaliação da parte prática da cadeira consistirá em uma frequência em data a marcar dependendo do avanço dos alunos, e num projecto final em grupo (grupos de 2 a 5 elementos – excepções terão de ser confirmadas comigo) com enunciado a ser entregue antes do Natal. A frequência será (provavelmente) feita no Moodle, mas os alunos terão de estar presentes na sala de aula durante a frequência. Só será levada em conta a nota de alunos presentes e que tenham assinado uma folha de presenças. Normalmente as minhas frequências são feitas permitindo a consulta, mas confirmem comigo antes da data da frequência!
O projecto terá de ser entregue no último dia de aulas, com a presença de todos os elementos do grupo. Alunos que não estejam presentes na apresentação têm zero (0) no projecto. Se um aluno não puder estar por força maior, todo o grupo deve apresentar noutra data mais tarde (e a falta do aluno deve ser justificada). A apresentação é oral e as notas podem variar para cada elemento do grupo consoante o à-vontade de cada um com o próprio código. A nota é-vos dada na mesma altura. Não é necessária a entrega de relatório, mas é necessário a entrega do código-fonte. Aproveito para avisar que costumo fazer enunciados originais, e que se noto que o código foi (mal) copiado/adaptado de terceiros, aperto ainda mais com vocês...
A nota final da cadeira é definida pelo Prof. Vítor Santos, regente da cadeira. Para vos ajudar vou dar-vos as informações que tenho neste momento, mas é o Prof. Vítor Santos que define a nota e pode alterar estas regras a qualquer momento. Por favor contactem o prof. para terem informações mais actualizadas e fidedignas (os dados de contacto dos professores estão nos sistemas da Lusófona). Em princípio, a nota final será a média aritmética entre a nota final da parte prática e a nota da parte teórica da cadeira. Será o Prof. Vítor Santos a determinar como será efectuada a avaliação da parte teórica. Nenhuma das duas partes da cadeira pode ter nota inferior a oito (8), sob pena dos alunos serem obrigados a ir a exame. As notas de trabalhos da parte prática não serão levadas em conta se o aluno for a exame.
Abaixo tens acesso ao material desenvolvido por mim: o guião e os exercícios criados por mim.
Enunciado do projecto 2011/2012
Guião das aulas práticas
Exercícios das aulas práticas
Notas da frequência de Dezembro de 2011
2º semestre: Algoritmia (1º ano)
Os computadores hoje em dia não estão mais rápidos só porque correm a mais GHz, mas porque os métodos (algoritmos) de trabalhar a informação são cada vez mais inteligentes para poupar trabalho ao próprio computador.
Vê um exemplo (se bem que extremo): o Google. Achas realmente que quando carregas no botão "Pesquisa do Google" ele vai naquele momento procurar em todas as páginas na Internet pelas palavras que lhe deste? Achas que se fosse assim ele conseguiria responder-te em 1 segundo ou menos? Repara como o teu computador leva geralmente vários segundos para descarregar uma única página da Internet. Por muitos computadores e ligações à Internet simultâneas que o Google tivesse, seria impossível para ele descarregar "toda a Internet" num segundo para fazer a tua pesquisa. O processo tem de ser mais inteligente do que o que aparenta à superfície.
Formas inteligentes de guardar e pesquisar informação para que ela possa ser trabalhada de forma mais rápida, é o que vamos estudar em Algoritmia. Vamos ver, por exemplo, como é que consegues encontrar um elemento no meio de um conjunto de 100 olhando para apenas 7 elementos. Vamos falar de vectores, filas, pilhas, árvores, merge sort, quick sort, pesquisa binária e muitos outros temas. As aulas práticas vão ser baseadas na linguagem C, onde iremos trabalhar nestas estruturas com apontadores.
Vamos trabalhar em C no Windows usando o Dev C++ da Bloodshed que usa o compilador da GNU (GCC) e é software gratuito sob a GPL. Em algumas salas iremos estar a trabalhar com o Eclipse com o plug-in CDT em Linux.
Tem cuidado se já tens o GCC instalado no teu computador (com o MinGW ou Cygwin). O Dev C++ pode ficar confuso e dar erros estranhos quando é instalado desta forma. Em alternativa podes usar qualquer compilador ou ambiente de trabalho de C: CodeBlocks, Microsoft Visual C++ ou até o próprio Notepad ("Bloco de Notas") usando a compilação em linha de comandos com o MinGW ou Cygwin. Todas estas opções são gratuitas!
A avaliação de toda a cadeira (incluindo a parte prática) é feita nas aulas teóricas pelo Prof. Alexandre Pereira. Consistirá em princípio em duas/três frequências ao longo do semestre e um projecto final. Confirma com o Prof. Alexandre Pereira como é feita a avaliação.
Guião das aulas práticas
Enunciado do projecto 2010/2011
Exercícios das aulas práticas
2º semestre: Computação Gráfica (2º ano)
Esta cadeira é essencial se te fascinam os jogos de computador (e como fazê-los). Vamos falar do principal ingrediente de um jogo: o desenho de imagens tridimensionais. Vamos também falar sobre todos os conceitos que levam a esse objectivo, desde desenho de poligonos 2D a cores e projecções.
Nas aulas práticas vamos estar a desenvolver aplicações de janela com OpenGL e a framework Qt. Para além de seguirmos alguns exemplos, vamos trabalhar sobre um pequeno e simples "jogo" que exemplifica os conceios aqui descritos.
Enunciado do projecto 2010/2011
Guião das aulas
CGMaze: Um "jogo" de labirinto (Mac OS X)***
CGMaze: Um "jogo" de labirinto (Windows)
CGMaze: Código-fonte (sem código dos alunos)
Exemplos NeHe
Se não encontrares aquilo que procuravas aqui, tenta procurar no Moodle do ISMAT (onde tens de fazer login seguindo a hiperligação ao canto superior direito).
1º semestre: Sistemas Embebidos (3º ano)
Em Sistemas Embebidos vamos estar a falar de dispositivos com capacidade computacional, mas que não são computadores de uso geral. Estamos a falar de controladores de impressoras, equipamento de rede, telemóveis, computadores de bordo de automóveis, etc.. Como é a arquitectura de tais sistemas? Que desafios, linguagens e técnicas de desenvolvimento são usadas?
Nas aulas práticas vamos estar a desenvolver aplicações para telemóveis BlackBerry, usando o SDK oficial desta empresa.
A avaliação da cadeira incluirá uma frequência a meio do semestre sobre a matéria teórica, e um projecto a apresentar na última aula, desenvolvido para o BlackBerry. Cada um destes pontos de avaliação tem um peso de 50% para a nota final, e em nenhum deles podes ter nota inferior a 8,0.
2º semestre: Computação Distribuída (3º ano)
Em Computação Distribuída vamos estar a falar de processos e aplicações que (podem) ter pontos de processamento (CPUs, memória e computadores em geral) distribuídos por uma LAN ou WAN (ou seja, que podem estar em pontos separados geográficamente). Vamos falar das problemáticas de fiabilidade e segurança existentes nestes sistemas e soluções actuais.
Enunciado do projecto 2010/2011
Exemplo de código cliente-servidor usando sockets
Resolução do 1º exercício
Resolução do 2º exercício
Se não encontrares aquilo que procuravas aqui, tenta procurar nas correspondentes páginas das cadeiras do sistema Fénix: LEIC/Alameda, LEIC/Taguspark, LERC/Taguspark, LEE/Taguspark, MEIC/Alameda, MEIC/Taguspark.
1º semestre: Planeamento e Gestão de Redes Informáticas (1º ano de Mestrado; Taguspark)
As aulas de laboratório de Planeamento e Gestão de Redes Informáticas no IST do Taguspark incidem sobre os guiões de laboratório que têm de ser completados cada semana e apoio ao projecto final.
Eu estou convosco às segundas e quartas-feiras para vos ajudar nos laboratórios e para tirar dúvidas para a execução do projecto. Para outras questões, por favor fala com o professor regente da cadeira (Prof. Rui Santos Cruz), ou consulta a página oficial da cadeira.
* ...e minhas senhoras!
** Os primeiros eram (obrigatoriamente) em Assembly. Hoje em dia o primeiro programa que se escreve (usando Assembly ou outra linguagem) para qualquer nova linguagem de computador que seja inventada é um compilador da própria linguagem.
*** Só para Mac com processador Intel, e precisa de já estar instalado o Qt 4.7.0.
Todos os direitos reservados.
