Table of Contents

Como contribuir

Sua contribuição ao código é essencial pois é através dela que você demonstra o seu conhecimento, seu entendimento das características (das básicas até as mais sutís) do programa, e também a sua atividade e determinação.

Para que suas contribuições sejam maximizadas (o que impacta positivamente sua nota), siga este pequeno guia de 'Como contribuir'.

Iniciando

Tenha certeza de que sua conta está devidamente configurada. Cheque os seguintes itens:

Repositório

Os trabalhos podem ser em grupos ou individuais, com ou sem repositório upstream. Confirme em aula como será cada exercício.

Trabalhos pelo Classroom (assignments)

Trabalhos em grupos criados manualmente (BecoSystems)

Trabalhos em grupo com

Trabalhos individuais com

Antes de mais nada!

Editor de textos

O editor de textos usados é o vi (lê-se "vi-ai") ou vim (que é o vi improved), disponível na quase totalidade dos sistemas Linux, Unix e Mac (existe também para instalação gratuita em Windows). Sua grande vantagem é a operação remota, além de uma quantidade enorme de comandos para configuração e facilidades para programação.

O vi é um excelente editor para quem o conhece. Para quem não o conhece, é difícil e pode ser muito frustrante.

Felizmente existe um excelente arquivo em PDF na pasta hydrabox com explicações sobre a maioria dos comandos. Não deixe de ler.

Atividade registrada

Tenha certeza de seguir estas recomendações para ter um maior aproveitamento:

Arquivos no repositório

Formatação

O estilo de indentação

Linguagem C

O estilo Allman é um entre mais de 15 estilos e variantes disponíveis e encontradas em vários tipos de código. Não misture os estilos. Este estilo utiliza a seguinte sintaxe, chamada de broken brackets (ou chaves quebradas). Atente para os espaços entre operadores e mudanças de linhas no exemplo abaixo:

/**
 * @ingroup GrupoUnico
 * @brief Breve descricao blablabla
 * ...
 */
int foonc(int is_bar[MAX], int x)
{
    int p; /* a really though condition */
    
    p = !(is_bar[0] || is_bar[1]);

    if(is_bar[x] == 2 && !p)
    {
        bar(p + 1);
        return 1;
    }
    else
        return 0;
}

PROLOG

Um exemplo de trecho de código seria:

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Aqui vai a licenca, copyright, etc.
% Uma breve descrição do programa
% Autor, data, email para contato

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Sessao de modulos 

:- dynamic([mulher/1]).

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Sessao da base de conhecimento estatico

% Lista de homens, vivos e mortos
homem(socrates).
homem(platao).

% Lista de homens ainda vivos
vivo(platao).

% Lista de objetos inanimados
pedra(diamante).
pedra(rubi).

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Sessao de regras sobre a mortalidade

% indica as condicoes necessarias para um objeto ser mortal
% caso homem
mortal(X) :-
    vivo(X),
    homem(X).

% caso mulher (clausula dinamica)
mortal(X) :-
    vivo(X),
    mulher(X). % BUG: lembrar de fazer assert!
...

Conheça todos os estilos na página de documentação do astyle.

Dicas para um bom código fonte:

Comentários

Comentários DOXYGEN

Antes de cada função, coloque comentários na sintaxe DOXYGEN. O mínimo necessário para bem explicar uma função é detalhar:

O exemplo abaixo mostra somente os campos obrigatórios, e descreve hipotéticas variáveis i, o e z:

/**
 * @ingroup Modulo
 * @brief Breve descricao
 * @details Descricao detalhada
 * que pode estar em multiplas linhas
 *
 * @param[in] i indice de entrada
 * @param[out] o indice recalculado de saida 
 * @param[in,out] z Entra com um valor blablabla e devolve blebleble
 *
 * @return Descricao do que a funcao retorna
 * @author Ruben Carlo Benante
 * @date 2016-06-05
 */

No meio do código

Variáveis

Organização

A ordem que o esqueleto do programa deve ter é como segue:

Em linguagem C

Em PROLOG

Ciclo de trabalho

Teste

Faça uma boa mensagem de commit

Faz um exemplo para demonstrar a clareza do commit

Sem este commit a explicação sobre mensagens de commit ficaria falha, sem um exemplo concreto. 
Este é um problema, porque assim fica apenas na imaginação o que seria um bom commit. 
Este commit corrige este problema ao fazer aqui um exemplo concreto e imperativo.

A primeira linha é um título imperativo descritivo do essencial. Os dois parágrafos seguintes, 
o de cima e este, são explicações mais aprofundadas. É importante descrever (1) _o que ocorria_ 
antes do commit, (2) _qual_ é o problema que este commit resolve, (3) _porque_ este comportamento 
é problemático, e (3) _como_ este commit corrige este problema.

Também é possível usar enumerações para clarificar algumas mudanças em pontos 
específicos, como:

* mudafunc() : agora não retorna mais void e sim o código do cliente
* funcoutra() : criada para cumprir outra finalidade que estava faltando
* divideaqui() : criada para cumprir uma finalidade tal e tal que antes 
estava sendo feita na função mudafunc() de modo a ficar mais clara a divisão do que cada função faz.

Lembre que a primeira linha é importante para ver o log e acompanhar a evolução do programa.

Dicas de configuração

Final de linha estilo Unix ()

# Arquivo .gitattributes

* text=auto
*.c text
*.h text
*.x binary

Obrigado!

Agora é com você! Bom estudo!

Atenciosamente,

Prof. Dr. Ruben Carlo Benante <rcb@beco.cc>