Calourada2010

Preview:

DESCRIPTION

Apresentação feita no Calourada Livre 2010 na Universidade Federal de Itajubá

Citation preview

Software Livredentro daspossibilidades acadêmicas

Tudo tem um começo...

E um fim que queremos evitar...

5 anos pra isso?

Head Hunter

A universidade é um espaço para aprender e experimentar...

Queria achar uma coisa legal p/ fazer....

Já passou em Cálculo?

Mas com pouco tempo de aula vão perceber...

Mostrar como o Sofware Livre pode ajudar a entender algumas matérias na graduação e como isso pode te ajudar no futuro.

Antes de  focarmos em argumentos  técnicos, precisamos compreender o conceito sobre as liberdades  essenciais  para  um  sofware  ser considerado livre.

0. A liberdade para executar o programa, para qualquer propósito

1. A liberdade de estudar como o programa funciona, e adaptá­lo para as suas necessidades 

2. A liberdade de redistribuir, inclusive vender, cópias de modo que você possa ajudar ao seu próximo

3. A liberdade de modificar o programa, e liberar estas modificações, de modo que toda a comunidade se beneficie

E toda jornada tem um começo...

É preciso andar por onde a estrada vai de modo a unir o que você aprende dentro da universidade com o que é praticado fora dela. 

FPGA, SoC, ...

Dataware House

Banco de Dados

Sistemas Embarcados

Compiladores

Virtualização

Jogos

Simulação

Web

Escalabilidade

Sistemas de comunicação

Sistemas Operacionais

RTOS

Arquitetura de Processadores

CAD

Drivers

Office*

A lista de áreas não é pequena...

...nem as soluções oferecidas.

Servidores GUI

Como eu posso começar então?

A primeira parte diz respeito a familiarização com as ferramentas básicas. 

Pré­requisito

1) Instalar alguma distribuição GNU/Linux.

2) Se familiarizar com a interface da linha de comando.

 

Nos primeiro semestres, nas parte que envolvem software temos:

 Introdução a Programação Estrutura de Dados Programação Orientada a Objeto (POO)

A  primeira  coisa  é  um  compilador  para executar  seus  testes.  Vale  a  pena  estudar  e conhecer as opções do  GCC.

A  segunda  coisa  é  um  depurador  para executar  seus  testes.  Vale  a  pena  estudar  e conhecer as opções do GDB.

 

GNU Compiler Collection 

gcc exemplo.c ­o exemplo.exe

Executável do compilador               (gcc ou g++)

Código­fonte (lembre­se da extensão)

Este parâmetro idica um nome de saída,se nada for definido o padrão é a.out

Arquivo de saída

 

GNU Compiler Collection 

gcc ­Wall ­ggdb exemplo.c ­o exemplo.exe 

Habilita todas as warnings que alguns usuários consideram questionáveis e que são fáceis de evitar (ou modificar para previnir)

Gera as informações de debug para o GDB

#include <stdio.h>

int main(int argc, char *argv[]) {

    printf(“Olá Mundo!\n”);    return 0;}

$ gcc ­Wall ­ggdb exemplo.c ­o exemplo.exe 

$ ./exemplo.exe Olá Mundo!

Compilar o programa:

E executar o código:

E se alguma coisa der errado?

Se você rodar o programa e ele não funcionar da forma como você pretendia?

 

GNU Debugger 

gdb exemplo.exe

Executável do depurador       

Arquivo executável (ELF)

$ gdb ­q exemplo.exeReading symbols from /home/maluta/exemplo.exe...done.

GNU Debugger 

(gdb) l1       #include <stdio.h>23       int main(int argc, char *argv[]) {456               printf("Olá Mundo!\n");7               return 0;8       }

(gdb) rStarting program: /home/maluta/exemplo.exeOlá Mundo!

http://www.coding.com.br/programacao/basico­de­ponteiros­com­o­gdb/

Além disso é preciso entender ferramentas que não se aprendem na escola...

Dominar  algum  software  que  faça  o controle de versão do seu código. 

Existem vários,  vale  a pena entender pelo menos:

GIT [git]

Mercurial [hg]

Bazaar [bzr]

Dominar  algum  software  que  faça  a automatização  na  construção  do  seu executável. 

Existem vários,  vale  a pena entender pelo menos:

autotools

cmake

scons

 Python 

Bônus

ex.

Parser Visualização

# -*- coding: utf-8 -*-from pylab import *

N = 100start = 0end = 1

A = rand()B = rand()

x = linspace(start,end,N)y = A*x + By += randn(N)/10

p = polyfit(x,y,1)

figure()

title('Regressao linear')plot(x,y,'o',label='A=%.2f, B=%.2f' % (A,B))plot(x,polyval(p,x),'-',label='A=%.2f, B=%.2f' % tuple(p))legend(loc='best')

show()

Um exemplo comum é fazer uma regressão linear (muito utilizado nas atividades práticas de física) 

$ python reglin.py

Lá pela metade do curso novidades que irão refinar seu conhecimento aprendido na base. 

Design Patterns

Banco de Dados

Redes

Sistemas Operacionais

Design Patterns

Sua utilização na maioria dos casos será intuitiva, o quanto antes você se acostumar com a prática melhor será seu código. Os padrões de desenvolvimento são utilizados em programas que utilizam Interface Gráfica, acesso a Banco de Dados, ...

Mas também em código estruturais, como o kernel.

Sistemas Operacionais

Os livros tradicionais que abordam S.O são teóricos, abordam o conceito mas não a prática.

O kernel Linux ao longo do tempo foi sendo aprimorado, são boas fontes de informação:

 Source :­) Documentation/ Linux Kernel Maillist (lkml) Livro: Linux Kernel Development  (Robert Love) Livro: Essencial Linux Device Drivers (Sreekrishnan Venkateswaran)

Banco de Dados

Conheçer os wrappers de acesso, novamente o Python é um começo.

MySQL é um bom começo, mas infelizmente a industria é voltada também as soluções proprietárias

BD orientado a objeto é uma promessa.

Redes

Primeiro terreno que o Linux se tornou popular.

Servidor de páginas (ex:. Apache)Servidores de Impressão (ex.: CUPS)Servidores de Arquivos  (ex.: proftpd)

O NFS (Network File System) que além se ser uma das melhores maneiras de compartilhar arquivos é utilizado no desenvolvimento de sistemas embarcadose em algumas implementações de clusters.

O 9P (Plan 9 Filesystem Protocol) utilizado no Plan9

O sistemas distribuídos criaram situações onde outras soluções foram propostas,No âmbito geral conhecer CORBA e o D­BUS 

Servidores de Email  (ex.: postfix)

Tem muitas coisa para nos manter entretidos... 

E olha que faltou falar de muita coisa...

Conclusão

A universidade vai te ensinar pouca coisa sobre software livre.

Tente aliar os dois lados: matérias vs. aprendizado prático

Tenha o espírito hacker.

Tenha paciência, não é do dia p/ noite que você vai entender as coisas.

www.twitter.com/maluta

Obrigado pela atenção

www.coding.com.br

Tiago Maluta

Imagens utilizadas em  http://www.flickr.com/photos/st3f4n/sets/72157616350171741/