Archive for the "Programação" Category

[Coding Dojo] Analizando URLs

Realizamos um Dojo interessante, o problema escolhido possibilitou a escolha de uma linguagem de programação diferente, fizemos alguns refactoring no código, o resultado você pode conferir na retrospectiva.

Utilizamos o PHP (Sem um framework de testes) e escolhemos o problema Analizando URLs (dojopuzzles.com)

Código do problema

<HTML>
<HEAD>
 <TITLE>DOJO</TITLE>
</HEAD>
<BODY>
<pre style="background-color:#EBEBEB;">
<?php
  function testeVazio(){
    if(valida("") != "Erro, parametros vazios!") {
      echo "Passou vazio e não detectou erro ............. FAIL";
    } else {
      echo "Teste valida com parametros vazios ........... OK";
    }
    echo "<br />";
  }

  function testaEspacoEmBranco() {
    if(valida(" ") != "Erro, espacos em branco detectado!") {
      echo "Passou espacos em branco e nao detectou erro . FAIL";
    } else {
      echo "Teste valida espacos em branco ............... OK";
    }
    echo "<br />";
  }

  function testaDoisEspacosBrancos(){
    if(valida("  ") != "Erro, espacos em branco detectado!")
      echo "Passou dois espacos em branco nao detectados . FAIL";
    else
      echo "Passou no teste dos dois espacos em branco.... OK<br/>";
  }

  function testaProtocolo() {
    $teste = array(
      "protocolo" => "http",
      "host" => "teste",
    );

    if(valida("http://teste") != $teste ) {
      echo "Erro, Retornou array invalido ................ FAIL";
    } else {
      echo "Array semelhante, passou ..................... OK";
    }
  }

  function valida($param){
    if ($param == "")
      return ("Erro, parametros vazios!");

    $url = trim($param);
    if ($url == ""){
      return "Erro, espacos em branco detectado!";
    } /*else {
      return "Passou no teste dos espacos em brancos...... OK<br/>";
    }*/

    return array("protocolo"=>"http",
                 "host"=>"teste"
    );

  }

  testeVazio();
  testaEspacoEmBranco();
  testaDoisEspacosBrancos();
  testaProtocolo();
?>
</pre>
</BODY>
</HTML>

Retrospectiva

  1. Pontos positivos
    • Maior entendimento
    • Linguagem fácil
    • Integração com o Grupo
    • Aprendizado de uma nova linguagem
    • Novas funções aprendidas
    • Linguagem interessante
    • Refactoring
    • Pontos Negativos
    • Dependência de um Timer
    • Entendimento da Estrutura
    • Editor Ruim
    • Sugestão
    • Utilizar o Notepad++
Link pro Repositório! github.com

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

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 ?

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
}

Identação de Código Fonte

É comum em linguagem de programação termos uma maneira de organizar o código, a essa maneira denominamos Identação.

Apesar de que na maioria das linguagens de programação a identação ser algo meramente estético, ela mostra de forma mais clara a hierarquia dos elementos e por isso facilita a leitura de um código fonte de um programa.

Quando começamos a programar geralmente não compreendemos a facilidade que a identação nos dará, por exemplo:

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

main()
{
int pegavalor;
pegavalor=0;
printf("Entre com um valor ");
scanf("%i",&pegavalor);
if(pegavalor < 100)
{
printf("O valor digitado e menor que 100\n");
}
else
{
printf("O valor digitado e maior ou igual a 100\n");
}
if(pegavalor%2==0)
printf("O valor digitado e um numero par\n");
else
printf("O valor digitado e um numero impar\n");
system("pause");
}

No exemplo acima, não estamos tendo um cuidado com a organização do arquivo, o que pode gerar algumas confusões em uma revisão futura, lembrando que o exemplo tem apenas 24 linhas, porém se imaginarmos um sistema de 1000 linhas, isso irá atrapalhar a interpretação do código, abaixo uma sugestão de identação, parecida com a usada por Brian Kernighan e Dennis Ritchie (ver blog do Hélio*), veja:

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

main() {
  int pegavalor;
  pegavalor=0;
  printf("Entre com um valor ");
  scanf("%i",&pegavalor);
  if(pegavalor < 100) {
    printf("O valor digitado e menor que 100\n");
  } else {
    printf("O valor digitado e maior ou igual a 100\n");
  }
  if(pegavalor%2==0)
    printf("O valor digitado e um numero par\n");
  else
    printf("O valor digitado e um numero impar\n");
  system("pause");
}

Com o mesmo conteúdo, já é possível perceber que por mais simples que seja a “identação” ela possível uma melhor visualização, perceba que os if’s ganharam recuos, possibilitando que apenas batendo o olho você saiba que determinada fecha chaves ( } ) pertence a um determinado if.

Imaginando em um arquivo grande, isso irá facilitar MUITO a vida do programador, possibilitando até a descobrir erros de forma rápida.

A dica é, observe os exemplos, escolha uma identação e pratique-a mantenha seu código organizado, e você será “um pouco” mais feliz

*O blogueiro e programador Hélio Costa Silva fez um interessante post em se Blog, mostrando diversas maneiras de se organizar (identar) o código. CONFIRA

Tabela Verdade [Atualizado]

Por definição. Tabela-verdade é o conjunto de todas as possibilidades combinatórias entre valores de diversas variáveis lógicas (binários), as quais se encontram em apenas duas situações (V)erdadeiro ou (F)also, e um conjunto de operadores lógicos.

A lógica binária, ou bitwise operation é a base de todo o cálculo computacional. Na verdade, são estas operações mais básicas que constituem todo o poderio dos computadores. Qualquer operação, por mais complexa que pareça, é traduzida internamente pelo processador para estas operações.
Por isso dizemos então que o computador trabalha apenas com zeros e uns.

As operações que podemos aplicar sobre esses valores lógicos estão abaixo restritos:

Operador NOT (!)

O operador unário NOT, ou negação binária resulta no complemento do operando, i.e., será um bit ’1′ se o operando for ’0′, e será ’0′ caso contrário, conforme podemos confirmar pela tabela de verdade:

A ¬A
1 0
0 1

Implementação em C

A = 0;
B = !A;

Operador AND (&&)

O operador binário AND, ou conjunção binária devolve um bit 1 sempre que ambos operandos sejam ’1′, conforme podemos confirmar pela tabela de verdade:

A B A ∧ B
1 1 1
1 0 0
0 1 0
0 0 0

Implementação em C

 if (variavel1 &amp;&amp; variavel2) { /*código*/ } 

Operador OR (||)

O operador binário OR, ou disjunção binária devolve um bit 1 sempre que pelo menos um dos operandos seja ’1′, conforme podemos confirmar pela tabela de verdade:

A B A ∨ B
1 1 1
1 0 1
0 1 1
0 0 0

Implementação em C

if ( variavel1 || variavel2 ) {
  /* Código */
}

Existe também outros operadores, como o NAND e o XOR, para mais informações, segue alguns links:

Wikibooks: Introdução à programação/Lógica

Organização e estruturas de Computador – Lógica Digital

 

[Atualização]

Para quem quiser brincar com portas lógicas, acesse http://logic.ly/demo/

[Atualizado]

Introdução a lógica, UFSC - http://www.inf.ufsc.br/ine5365/introlog.html

Ranking da linguagens de programação

Qual é a melhor linguagem de programação[bb] ?

Qual a linguagem de programação aonde estão os melhores salários[bb]?

Por qual linguagem de programação eu devo começar?

Essas 3 perguntas não tem respostas rápidas e fáceis, visto que o mercado de T.I. é muito grande, com diversas demandas e que muda constantemente. Portando essas perguntas são acompanhadas de inúmeras outras, afim de chegar mais próximo do que o profissional[bb]deseja.

Porém é possível visualizar um Ranking aonde estão dispostas as linguagens e sua “reputação” por assim dizer.

Abaixo o gráfico feito pela TIOBE Software, com uma informação importante. Encabeçando a lista temos o Java e logo abaixo C, uma linguagem por muitas vezes tida como velha e pelos menos entendidos: Morta.

Se você está na dúvida, veja o Ranking e observe aonde você vai colocar suas fichas ;)

Veja a matéria completa aqui (em inglês)