Author Archive

Realizando TDD em C, simples e prático – MinUnit

Gostaria de compartilhar aqui uma ferramenta que vem sendo utilizada nos Dojos da FAC SBO, extremamente útil e fácil de utilizar.
Para realizar o Dojo o ideal é ter alguma ferramenta que auxilie nos testes (TDD) de maneira que não fosse necessário muitos desvios no código.
Após várias buscas na Internet, descobri ferramentas interessantes, algumas poderosas, porém para quem está começando em TDD, esse “monte” de opção poderia atrapalhar mais do que ajudar, até que finalmente encontrei uma biblioteca simplista que cumpre com o necessário, e é de fácil entendimento, mesmo por pessoas que estão começando a programar em C.
MinUnit – a minimal unit testing framework for C [link]
Esse senhor é composto de 2 arquivos simples, o primeiro é a biblioteca, que tem apenas 4 linhas e é responsavel pela mágica, veja:

/* file: minunit.h */
#define mu_assert(message, test) do { if (!(test)) return message; } while (0)
#define mu_run_test(test) do { char *message = test(); tests_run++; \
                               if (message) return message; } while (0)
extern int tests_run;

Esse arquivo você coloca no diretório da sua aplicação e da um #include nele, pronto, agora é só utilizar o esqueleto abaixo (o segundo arquivo) e então passar a ter os testes para a sua aplicação.

/* file minunit_example.c */

#include <stdio.h>
#include "minunit.h"

int tests_run = 0;

int foo = 7;
int bar = 4;

static char * test_foo() {
    mu_assert("error, foo != 7", foo == 7);
    return 0;
}

static char * test_bar() {
    mu_assert("error, bar != 5", bar == 5);
    return 0;
}

static char * all_tests() {
    mu_run_test(test_foo);
    mu_run_test(test_bar);
    return 0;
}

int main(int argc, char **argv) {
    char *result = all_tests();
    if (result != 0) {
        printf("%s\n", result);
    }
    else {
        printf("ALL TESTS PASSED\n");
    }
    printf("Tests run: %d\n", tests_run);

    return result != 0;
}

Tudo o que você deverá ter em seu arquivo é:

  • Criar seu teste com a assinatura padrão – static char * test_bar()
  • Adicionar na função all_tests através do comando mu_run_test(nome_da_sua_funcao) as funções criadas por ti.
  • Em sua função de teste, você fará afirmações (asserts) utilizando a função *mu_assert(“mensagem”, teste_lógico);
  • Run!

*Vale lembrar que a idéia é, se seu teste_lógico falhar, então a mensagem será exibida!

Idéia: Olhe o código da MinUnit, veja e reveja, entenda, é um código SIMPLES entre aspas!

1a. Olimpíada de Programação – FAC SBO

Na ultima sexta feira, dia 17/06/2011, realizamos no laboratório 1 da FAC a Primeira Olimpíada de Programação da FAC Sbo.
Com a presença de aproximadamente 30 alunos, resolvemos 6 problemas propostos, em números tivemos:

  • 2 horas e 40 minutos de duração
  • 275 submissões de arquivos para correção
  • 29 submissões corretas
  • 6 % dos times resolveram em java
  • 94 % em C e C++

O placar final ficou:

 

Sagrou-se campeão o time 42 que fez submissões rápidas e corretas, deixando apenas o ultimo problema para a sessão de “desempate”

O evento foi um sucesso, no final do post, mais fotos.

Ainda que alguns times tiveram suas soluções questionadas pelo software Juiz do evento, o resultado do placar não mudaria.

Agradeço a todos os colaboradores que fizeram esse evento ser possível, assim como todos os participantes.



Lista de discussão Dojo FAC SBO

Faça parte da lista de discusão Dojo FAC SBO

Assim você poderá ficar informado dos próximos Dojos que irão acontecer.

Basta se inscrever por aqui: http://groups.google.com/group/dojo-fac-sbo

Primeiro Coding Dojo – FAC Sta. Barbara D’Oeste

No dia 29/04/2011 realizamos o primeiro Coding Dojo na FAC, em Santa Barbara D’Oeste. Com a participação de aproximadamente 10 alunos o evento foi um sucesso. Em uma conversa posterior com os alunos, todos gostaram da iniciativa e da interação que o dojo proporciona.
Veja algumas fotos:

 

O que foi feito:
Linguagem escolhida: C
Probelma: Caixa Eletrônico
Editor escolhido: Dev-C++
Código gerado: aqui

O que foi bom:
Dialogo entre alunos de diferentes séries, maior conhecimento da linguagem.
Diversidade de pessoas.
Idéias diferentes
Bastante coisas novas

O que foi ruim:
Por ser a primeira vez, todos ficaram um pouco envergonhados
Dificuldade de entendimento
Poucas pessoas

Sugestão:
Ter sempre um professor para auxiliar
Conhecer mais linguagens

Dançando e Organizando – Data Sorting Dances

Algoritmos de Ordenação de Dados geralmente são processos “dispendiosos” para entender, porém cada dia aparece uma forma diferente de visualizar o que o algoritmo está fazendo.

Já havia dado uma olhada em diversos sites na internet mostrando graficamente (em java) como os algoritmos funcionava, porém o pessoal da Romania’s Sapientia University resolveu inovar e mostrar os algoritmos de forma “Dançante”, produzindo assim imagens mais completas de como cada algoritmo executa seus passos. Veja:

Bubble Sorting

Insert Sort

Shell Sort

Select Sort

Da joinha pra eles no facebook Algo-rythmics ;)

Podcast – Um jeito diferente de aprender, se divertir, e compartilhar informação

Mas afinal, o que é podcast:

Podcasting é uma forma de publicação de arquivos de mídia digital (áudio, vídeo, foto, PPS, etc…) pela Internet, através de um feed RSS, que permite aos utilizadores acompanhar a sua atualização. Com isso, é possível o acompanhamento e/ou download automático do conteúdo de um podcast.

E dai ?

Ai que você pode utilizar da facilidade, praticidade de baixar esses arquivos automaticamente em seu computador, mandar diretamente para seu player (mp3/ipod/mp10) e escutar enquanto trabalha, enquanto está no ônibus, etc…

Aqui vai algumas dicas de podcast para ouvir:

O primeiro é o GuanaCast, fazendo destaque para os programas de construção de Algoritmos: http://www.guanabara.info/guanacast/

Depois um podcast novo, curto e muito interessante para a área, Grok Podcast: http://grokpodcast.com/

Para os mais novos que conhecem informática já no idos de computadores Pentim, sistemas operacionais com interface grafica, vale a passada pelo Podser Podcast (meu podcast preferido ;) )  n25, Velharias da informática: http://migre.me/4a27h

Abaixo deixo um link que achei enquanto estava pesquisando sobre podcasts de programação, o Miguel Duarte pegou aqui diversos podcasts sobre programação e sobre tecnologia, confira a lista em http://miguelduarte.org/2011/02/27/podcasts-de-tecnologia-e-programacao/

.Net Architects Podcast [link] - Um podcast sobre arquitetura de software com .Net, do grupo .Net Architects

Você também pode ter o seu podcast… com um pouco de trabalho e idéias na cabeça, tudo é possível

O que é um Coding Dojo?

O que é Coding Dojo?

Primeiramente vamos ver o que é Dojo. Primeiramente Dojo (pronuncia-se Dojô) é onde se pratica artes marciais, sendo assim o objetivo de praticar os movimentos aprendidos exaustivamente, com isso chega a uma maior precisão de cada golpe, movimento,etc. Inspirado nisso, foi-se criado o Coding Dojo que é uma reunião composta por um grupo de programadores com o intuito de treinar e assim procurar umaprimoramente naquilo que eles sabem fazer. Eles focam um problema que tem que ser resolvido, sendo assim um desafio de programação usando as práticas ágeis.

Coding Dojo é uma técnica de treinamento que remete as artes marciais. O dojô é o local onde os movimentos da luta são repetidos a exaustão, sempre fazendo pequenas melhorias a cada repetição. No nosso caso, o treino deve reunir pessoas para resolver um problema simples de programação em conjunto…

http://dojofloripa.wordpress.com/about/

Princípios do Coding Dojo

  1. Aprendizado Contínuo

  2. Todo mundo aprende com o problema a ser solucionado, porque você compartilha experiências e conhecimento no intuito de alcançar algo.

  3. Ambiente Seguro

  4. Vai estar em lugar tranquilo, divertido, sem pressões do seu chefe, do dia a dia do trabalho. É colaborativo e inclusivo, ou seja, do amador ou mais experiente vão poder ajudar sem medir a competência um do outro.

  5. Passos de Bebê

  6. Não precisa ser feito às pressas, é feito uma coisa de cada vez.

Como é composto um Coding Dojo?

  • A duração é de aproximadamente 1 hora e 45 minutos;
    • Esse tempo é pequeno para não ficar cansativo.
  • Inicie descrevendo a todos o problema a ser resolvido;
    • É muito aconselhado não usar problemas reais, porque sempre deparamos por isso todos os dias. Sendo assim pode ser, por exemplo, converter números inteiros em romanos e em cima disso todos vão procurar resolver.
  • No Coding Dojo são usados as práticas ágeis;
    • Por exemplo: Programação em Par, TDD e Passos de Bebê, com o intuito de não só aprender desenvolvimento ágil, mas também ter uma maior união entre o grupo presente.
  • Inicialmente será implementados testes em cima do problema com uma dupla;
    • A partir da programação em par, a dupla(piloto e co-piloto) inciar a implementação dos testes unitários basedos nos requisitos do problema levantado e a platéia fica acompanhando. Dependendo do problema, recomendo que o piloto seja quem sabe mais desse desafio, se não for o caso, então faça um sorteio que fica mais democrático :)
  • Possui turnos de 5 a 7 minutos;
    • Esse turno é usado para seguir uma rotação: 1 – Sai o piloto, 2 – O co-piloto torna o piloto do próximo turno, 3 – Alguém da platéia torna o co-piloto. A dupla terá um turno para implementar os testes. Não precisa apressar para terminar (lembra do passo de bebê?). Se não acabar a tempo não tem problema.
  • Faça uma retrospectiva do que foi feito;
    • Mesmo que o problema não foi solucionado, não tem problema. Deixe uns 10 minutos antes de acabar o Dojo para todos reunirem e responder três perguntas: 1 – O que foi feito?, 2 – O que foi bom?, 3 – O que pode melhorar para o próximo Dojo? Caso vocês gostarem ;-)

Regras do Coding Dojo

No Coding Dojo possui algumas regras básicas para serem seguidas:

  • É necessário ter somente um computador ligado à um projetor (ou um monitor, TV também serve);
    • Como vai ser usado programação em par nos turnos, a platéia vai vendo o que a dupla está fazendo.
  • Quando estiver falhando o teste, todos devem ficar em silêncio e quietos. Não pode atrapalhar a dupla;
    • O TDD segue uma regra: 1 – Escreva o teste, 2 – Falhou? Faça ela passar, 3 – Passou? Refatore. Durante a implementação do teste até quando ela não passar, a platéia deve ficar calada. Somente a dupla pode discutir, sugerir e brigar. Isso é importante para não atrapalhar o andamento do turno. Aí, quando passar o teste, todos podem dar pitaco, sugerir o que deve ser melhor e o que pode melhorar.
  • Não pode fazer um Coding Dojo com um problema inacabado do Dojo anterior;
    • Não pode levar um problema que não foi solucionado do Coding Dojo anterior. Se não terminou, não tem problema. Leve um novo desafio para ser feito no próximo, e não problemas já usados.

O que pode e não pode no Coding Dojo?

Tem certas práticas em um Dojo que são bons, mas tem alguns que atrapalham a harmonia e que quebra os princípios propostos. Abaixo estão elas:

  • O que pode?
    • Comes e Bebes (mas sem atrapalhar o fluxo da reunião);
    • Dar dicas de um determinado problema quando o teste passar;
    • Dar sugestões e dicas durante a apresentação do problema;
    • Fazer em qualquer lugar, caso cumprir as regras acima;
    • Compartilhar conhecimento;
    • Ajudar;
    • Relacionar com outros programadores.
  • O que não pode?
    • Levar algum problema de Coding Dojo anterior;
    • Levar um problema do dia a dia (vamos exercitar nossa criatividade :) ;
    • Discutir tecnologias durante o Dojo (sem flamewar por favor!!);
    • Falar quando o teste estiver em vermelho.
    • Atrapalhar o andamento do Coding Dojo;

Via: WebLovers

Pessoal de Santa Bárbara, vamos montar um grupo de DOJO ?

Site do MySQL foi Hackeado com SQLInjection


Saiu hoje no Slashdot: o site do MySQL foi hackeado e incrivelmente, explorando um ataque de SQLInjection.
Mais informações no site Techie Buzz

Criando um repositório SVN no Google para seus projetos

Uma ótima maneira de começar a entender o que é SVN é criar você mesmo um repositório, e utiliza-lo, ficando assim claro o que é cada um das ciglas, checkin, checkout, merge, diff, etc.

Aqui fica um link para um post explicando como criar o “Seu repositório” no Google Code. (de grátis)

Configurando o Dev-C++ para entender parametrôs e criando bibliotecas externas

Depois de um longo inverno, aqui estamos…
Apresento hoje um vídeo onde demostro como configurar o Dev-C++ para passar parametros na execução de um programa. Isso é usado quando queremos testar a função main passando argumentos para ela.
Já postado aqui com o titulo de “A declaração “padrão”da função Main” a explanação do comportamento dos argumentos, agora mostro de forma a não precisar entrar no “Prompt de Comando” para realizar esses testes.
Na segunda parte do vídeo faço um exemplo de como criar bibliotecas, os arquivos necessários e a ligação deles.

Espero que aproveitem o vídeo
Obs.. na segunda aula de ponteiro postado aqui, no final do vídeo demostro o funcionamento da argc, argv, quem ainda tiver dúvidas pode recorrer ao vídeo

Códigos:
exemplo.c // argc, argv

#include <stdio.h>
#include <string.h>

// utilizando os argumentos da funcao main

int main (int argc, char const *argv[])
{
	// argc - Variavel que contem o numero de argumentos recebido pela funcao main
	// argv - Matriz de strings, contendo em cada posicao, cada um dos argumentos passados

	int i;
	int flag;
	int acheiSilent =0;

	flag = 0;

	// Imprime Argumentos
	for(i = 0; i < argc; i++) {
		printf("argv[%i] = %s\n",i,argv[i]);
	}

	// verifica se o usuario passou um argumento desejado
	// o argumento desejado é "FAC", se em alguns dos argumentos contiver a palavra FAC
	// imprimir uma mensagem na tela
	for(i = 0; i < argc; i++) {
		if(strstr(argv[i],"FAC"))
			printf("Encontrei a palavra FAC na posicao %i dos parametros\n",i);
	}

	// Abaixo  1 exemplo como no ATPS, aonde a comparação é otimizada
	for(i = 0; i < argc; i++) {
		flag = flag || (strstr(argv[i],"-c"));
		acheiSilent = acheiSilent || (strstr(argv[i],"-s"));
		acheiSilent = acheiSilent || (strstr(argv[i],"-silent"));
	}

	if(flag) {
		printf("achei um parametro -c\n");
	}

	if(acheiSilent) {
	    printf("achei um parametro silenciador (-s ou -silent)");
	}
	getch();
	return 0;
}

exemplo.c // bibliotecas

#include <stdio.h>
#include "imprime.h"
// criando bibliotecas
// Arquivo principal
// Os outros arquivos estao no mesmo diretorio

int main (int argc, char const *argv[])
{
	imprime("Ola mundo");
	getch();
	return 0;
}

imprime.h

#include "imprime.c"
void imprime(char *mensagem);  // assinatura da funcao

imprime.c

#include <stdio.h>

void imprime(char *mensagem) {
	printf("%s", mensagem); // corpo da funcao
}