Assuntos tratados na disciplina:
- Ferramentas
- git, github, gitlab
- cmake
- IDE - Emacs (spacemacs), VS Code, PyCharm, Spyder, Jupyter, etc.
- GDB
- Linguagens abordadas:
- C
- Python
- Emacs Lisp
- Conceitos:
- Programação Orientada a Objetos
- Programação Funcional
- Programação Imperativa
- Construção de Aplicativos com Interface Gráfica utilizando GTK
- Conceitos:
- Licenças de Software
- Opensource
- Software livre (FOSS)
- Shareware
- Freeware
- Software proprietário
- Sistema Operacional, Kernel, Libc, Shell
- Licenças de Software
- Instalação de Sistema Operacional (SO) Baseado em Linux: Debian GNU/Linux 11 Codename bullseye
- Partições de HD
- Conceitos:
make
,gcc
- código de retorno de processo (
return
ouexit
) - variáveis locais, criadas na pilha, e variáveis globais
- Formato ELF, seções:
- .data
- .text
- .bss
- HEAP
- Stack
- GDB
- Estrutura de programas em C (exemplo)
- Arquivos de código fonte (.c)
- Arquivos objeto (.o)
- Arquivos de cabeçalho (.h)
- Compilador GCC e suas flags
- Makefile (exemplo):
- Para criação e utilização do makefile no VS Code é necessário instalar uma extensão chamada Makefile Tools.
- Para instalar abra o Quick Open (Ctrl + P) e cole o seguinte comando:
ext install ms-vscode.makefile-tools
- Instalação e configuração de SO e ambiente de desenvolvimento integrado (IDE)
- IDE: Emacs com Spacemacs
- Para instalar Emacs: rodar no terminal
sudo apt update sudo apt install emacs
- Para instalar Spacemacs: rodar no terminal
cd ~ git clone https://github.com/syl20bnr/spacemacs ~/.emacs.d
- Usar arquivo de configuração
.spacemacs
presente na pasta emacs- Salve o arquivo .spacemacs na sua pasta de usuário
- Para usar modo
C/C++
, instalar pacoteccls
:
sudo apt update sudo apt install ccls
- IDE: Emacs com Spacemacs
- Conceitos:
- Controle de versões
rcs
,svn
,git
- Tabela com comandos Git e atalhos de teclado equivalentes no Emacs
- Exemplo com código para calcular fatorial de n
Cálculo do termo n da sequência de Fibonacci
- Linguagem utilizada:
C
- Tarefas:
- Inicialmente, implementar utilizando laços de controle de fluxo (ex:
for
) - Posteriormente, implementar utilizando funções recursivas
- A transição entre versões deve ser feita usando recursos de controle de versões (ex:
commit
,branch
, etc)
- Inicialmente, implementar utilizando laços de controle de fluxo (ex:
- Serão avaliadas as competências do aluno ao usar ferramenta
git
e plataforma de hospedagem com controle de versões
- Conceitos:
- Programação imperativa
$\neq$ Programação funcional - Programação estruturada (
(do) while
,for
)$\neq$ Programação não-estruturada (goto
) - Programação orientada a objetos (OOP)
$\neq$ Programação não-orientada a objetos - OOP
- Objetos
- Classes
- Herança
- Polimorfismo
- Vantagens: Encapsulamento, modularidade, manutenção, legibilidade
- Linguagens para OOP: C++, Rust, Python
- Programação imperativa
- Continuação do trabalho de cálculo do número n da sequência de Fibonacci
- Criar um repositório na nuvem
- Your repositories -> New
- Inserir nome do repositório
- Escolher entre público e privado
- Adicionar README.md, licença e
.gitignore
- Create
- Your repositories -> New
- Clonar repositório
- Usar
ssh
para editar e enviar o código de volta ao repositório remoto- Para usar o
ssh
, tem que criar uma chave criptográfica assimétrica e carregá-la na sua área do GitHub:
ssh-keygen -t ed25519 -C emaildelogin
- Duas chaves são criadas no diretório
~/.ssh
:id_ed25519
(chave privada) eid_ed25519.pub
(chave pública) - Usar a chave pública no GitHub:
- Settings -> SSH and GPG keys -> New SSH key
- Inserir nome de identificação da chave
- Em Key, colocar conteúdo do arquivo
id_ed25519.pub
:ssh-ed5........emaildelogin
- Settings -> SSH and GPG keys -> New SSH key
- Para usar o
- Caso não precise, pode-se usar
https
- Usar
- Criar e editar localmente os arquivos
- Adicionar arquivos ao controle de versões (
add
), "tirar foto" (commit
) e enviar para remoto (push
)
- Conclusão do trabalho de cálculo do número n da sequência de Fibonacci
Aprendizado orientado a tarefas | Aprendizado orientado a componentes |
---|---|
Tutoriais | Tipos de dados e operadores |
Exemplos | Controle de fluxo |
Definição de funções | |
Definição de novos tipos | |
Biblioteca padrão |
-
Tipos de dados:
- Numéricos:
int
,float
,complex
- Texto:
str
- Booleanos:
bool
- Outros tipos: Sequência, Mapeamento, Binário
- Numéricos:
-
Tipos de operadores:
- Matemáticos:
+
,-
,*
,/
,**
,<<
, etc - Booleanos:
or
,and
,xor
,not
, etc
- Matemáticos:
-
Controle de fluxo:
- Condicional:
if bool1: statements elif bool2: statements else statements
- Laços de repetição:
for var in range(n): statements
while bool1: statements
- Teste de trecho de código:
try: test code except typeerror: statements
- Abertura de arquivos de texto
with open('file.txt','r') as f: handle data in f
- Condicional:
- IDE: Emacs com Spacemacs
- Para instalar interpretador interativo
ipython
: rodar no terminal
sudo apt update sudo apt install python3-pip ipython3 sudo update-alternatives --install /usr/bin/ipython ipython /usr/bin/ipython3 1
- Para instalar dependências para habilitar recursos de python no Emacs: rodar no terminal
pip install jedi json-rpc service_factory flake8 autoflake
- Usar arquivo .spacemacs da pasta emacs
- Comandos no Emacs após editar um programa em
python
:C-c C-p
: inicia o interpretadorpython
C-c C-c
: roda o programaC-c C-r
: roda o que está selecionado
- Para instalar interpretador interativo
- Definição de funções:
- Conferir exemplo
- Definição de novos tipos:
class nome:
- Conferir exemplo
- Declarar variáveis locais ao início
- Exemplos de redefinição de operadores para classes:
- Redefinir
r+n
:def __add__(self,v)
- Redefinir
r+=n
:def __iadd__(self,v)
- Redefinir
- Conferir exemplo
- Regular Expressions (Regex)
- Usar pacote
re
:
import re re.search('regex_pattern',string)
- Exemplos de padrão:
'^a'
começa com letraa
'^[0-9]'
começa com número'n'
contém letran
- Usar pacote
Grupo | Módulo | Integrantes | Data do seminário |
---|---|---|---|
1 | datetime |
2 | 01/11 |
2 | scipy + numpy |
3 | 01/11 |
3 | matplotlib |
2 | 08/11 |
4 | pandas |
3 | 08/11 |
5 | postgres +mariadb +mysql |
3 | 22/11 |
6 | control |
3 | 22/11 |
7 | pil |
2 | 29/11 |
8 | opencv |
3 | 29/11 |
9 | simply |
3 | 06/12 |
Os grupos que são formados por 2 integrantes tem que fazer a apresentação em no mínimo 20 minutos e no máximo em 30 minutos.
Os grupos que tem 3 integrantes tem que fazer a apresentação em no mínimo 30 minutos e no máximo em 40 minutos.
Elabore um programa em Python que lê um arquivo separado por vírgulas (,) e muda as vírgulas por ponto e vírgula (;), escrevendo o arquivo final com outro nome.
Envie o link do repositório.
A família de linguagens LISP é muito abrangente, tendo uma grande quantidade de dialetos. Pode-se dizer que dentro dela, existem dois grandes grupos:
- LISP propriamente dita, tendo como Common-LISP um dos maiores exemplos, seguido do Emacs-LISP; e
- SCHEME, com vários dialetos como GUILE, Chez-SCHEME & Racket, Gerbil & Gambit, etc.
Foi passado em sala, algumas noções iniciais de Emacs-LISP, resumidas em um tutorial.
Os alunos puderam rodar os exemplos do tutorial e fazer algumas experimentações com Emacs-LISP dentro do editor Emacs.
Foi explicado alguns conceitos sobre a programação funcional e funções em LISP, com exemplos no tutorial.
O tutorial sobre manipulação de buffers exemplifica comandos básicos para criação de buffers, leitura de arquivos, entre outros.
Elabore um programa em LISP ou Python que lê um arquivo input.dat
, cujo conteúdo consiste de linhas com dois inteiros cada x, y, separados por vírgula ou espaço.
O programa deve criar um novo arquivo output.dat
que contenha o número de Fibonacci X do primeiro número e o fatorial Y do segundo número, respeitando a estrutura:
Linha n: Fib(x)=X Fact(y)=Y
Envie o link do repositório no E-Disciplinas USP.
Para quem optou por utilizar o Emacs LISP, como ele tem algumas vantagens devido ao tipo buffer
, seguem algumas dicas:
Deve-se trabalhar com dois buffers: b-in (buffer de entrada de dados) e b-out (buffer de saída de dados).
Criando os buffers:
(setq b-in (find-file-noselect "input.dat"))
(setq b-out (find-file-noselect "output.dat"))
Um conjunto de funções interessantes seria:
(split-string (buffer-substring-no-properties (line-beginning-position) (line-end-position))
(next-line)
O trecho de código acima retorna uma lista com as strings separadas por espaço. Veja que você pode usar outros separadores para split-string
, no argumento opcional.
Para converter de string para número, use string-to-number
.
Para varrer todo o buffer de entrada, veja o código
(with-current-buffer b-in
(beginning-of-buffer)
(while (not (eobp)) ;; eobp retorna verdadeiro para fim de buffer
(let ((l1 (split-string (buffer-substring-no-properties (line-beginning-position) (line-end-position)))))
;; código para inserir no buffer de saída
(with-current-buffer b-out
;; ... use a função insert que tem strings como argumento. A função format é como o printf, mas ela retorna uma string para a insert
))
(next-line)))
No final, salve o buffer de saída:
(with-current-buffer b-out
(save-buffer))
A solução completa pode ser vista no arquivo funcional.el, mas não é única, existem muitas variações.
numpy
+scypy
datetime
matplotlib
pandas
Teste nos serviços de git hosting, como GitHub e GitLab.
- Para criar teste automático:
No projeto de interesse, acessar a aba Actions. Escolher a ação adequada para o projeto e clicar em Configure.
Um arquivo de configuração (extensão
.yml
) é criado na pasta/.github/workflows
.
- Estrutura básica do arquivo de configuração:
- Define nome da ação
name: Exemplo de automatização
- Define quando realizar as ações (no exemplo, realiza as ações na branch
main
após um Push ou Pull Request)
on: push: branches: [ "main" ] pull_request: branches: [ "main" ]
- Define ambiente de execução e as ações em si (no exemplo, a única ação definida, "Compila programa", é definida pelo comando
make
e é executada no ambienteubuntu-latest
- Ubuntu 20.04)
jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Compila programa run: make
Possibilidades disponíveis para o campo
runs-on
podem ser vistas aqui.
Gtk + Python + Glade: construindo aplicativos gráficos com a interface gráfica Gtk, tutoriais em Python GTK+ 3 Tutorial. Atualmente o Gtk está em sua versão 4 (major version), porém a distribuição Debian estável utiliza a versão 3.