Agile Open Campinas 2011

May 17
2011

Participei recentemente de um excelente evento em Campinas. Agile Open Campinas. Pessoal o evento foi excelente, e nele se pode ver o quanto um dia inteiro de pessoas inteligentes, maduras, buscando melhorar a si e a seu ambiente pode ser produtivo. Fiquei tão maravilhado com o formato open (explico outro dia, ou no final do post se tiver paciência) que estou agilizando, junto com o Heitor Roriz, para que tragamos um evento no mesmo formato para cá.

Bom, seguem algumas fotos do evento de Campinas. Em breve, dou mais detalhes do evento por aqui. Abraços.

Uma experiência socialista

Dec 01
2010

Um professor de economia na universidade Texas Tech disse que nunca reprovou um só aluno antes, mas tinha, uma vez, reprovado uma classe inteira.

Esta classe em particular tinha insistido que o socialismo realmente funcionava: ninguém seria pobre e ninguém seria rico, tudo seria igualitário e “justo”.

O professor então disse:

- Ok, vamos fazer um experimento socialista nesta classe.. Ao invés de dinheiro, usaremos suas notas nas provas. Todas as notas seriam concedidas com base na média da classe, e portanto seriam “justas”.

Com isso ele quis dizer que todos receberiam as mesmas notas, o que significou que ninguém seria reprovado. Isso também quis dizer, claro, que ninguém receberia um “A”

Depois que a média das primeiras provas foram tiradas, todos receberam “B”. Quem estudou com dedicação ficou indignado, mas os alunos que não se esforçaram ficaram muito felizes com o resultado.

Quando a segunda prova foi aplicada, os preguiçosos estudaram ainda menos – eles esperavam tirar notas boas de qualquer forma. Aqueles que tinham estudado bastante no início resolveram que eles também se aproveitariam do trem da alegria das notas. Portanto, agindo contra suas tendências, eles copiaram os hábitos dos preguiçosos.. Como um resultado, a segunda média das provas foi “D”. Ninguém gostou.

Depois da terceira prova, a média geral foi um “F”. As notas não voltaram a patamares mais altos, mas as desavenças entre os alunos, buscas por culpados e palavrões passaram a fazer parte da atmosfera das aulas daquela classe. A busca por “justiça” dos alunos tinha sido a principal causa das reclamações, inimizades e senso de injustiça que passaram a fazer parte daquela turma. No final das contas, ninguém queria mais estudar para beneficiar o resto da sala.
Portanto, todos os alunos repetiram o ano… Para total surpresa!!!

O professor explicou que o experimento socialista tinha falhado porque foi baseado no menor esforço possível da parte de seus participantes. Preguiça e mágoas foi seu resultado. Sempre haveria fracasso na situação a partir da qual o experimento tinha começado.

“Quando a recompensa é grande”, ele disse, “o esforço pelo sucesso é grande, pelo menos para alguns de nós. Mas quando o governo elimina todas as recompensas ao tirar coisas dos outros sem seu consentimento para dar a outros que não batalharam por elas, então o fracasso é inevitável.”

“É impossível levar o pobre à prosperidade através de legislações que punem os ricos pela prosperidade.
Para cada pessoa que recebe sem trabalhar, outra pessoa deve trabalhar sem receber.
O governo não pode dar para alguém aquilo que não tira de outro alguém.
Quando metade da população entende a idéia de que não precisa trabalhar, pois a outra metade da população irá sustentá-la, e quando esta outra metade entende que não vale mais a pena trabalhar para sustentar a primeira metade, então chegamos ao começo do fim de uma nação.
É impossível multiplicar riqueza dividindo-a.”

atribuído à Adrian Roger, 1931.

Esse foi mais um texto muito bom enviado pelo meu irmão, Jefferson.

O verdadeiro desenvolvimento

Sep 27
2010

Não é segredo que recentemente nasceu meu pequeno herdeiro, José Miguel. Isso enche o meu peito de felicidade, todos os dias um pouco mais.

Mas nessa última semana, para a tristeza geral, faleceu uma amiga. Ela foi vítima da depressão, a doença que nos mata um pouco a cada dia, no órgão mais importante de nosso corpo, a alma.

E é claro, acompanhei um pouco da agonia dos pais, diante da impotência do acontecido. Um pai jamais deveria ter que enterrar os seus filhos, seja qual for o contexto. Isso é contra a natureza das coisas. Como era de se esperar, me coloquei em seu lugar. Afinal, tenho uma vida sob minha responsabilidade, que posso eu fazer para evitar esse tipo de fim?

Eu posso quem sabe dar uma excelente educação, nos melhores colégios que a região possa oferecer. Claro, vou ter que trabalhar dobrado, triplicado. Deixar de estar presente em vários momentos importantes para o meu filho. Não, talvez seja melhor pagar um colégio médio, mas de boa qualidade, mantendo o pouco tempo livre que tenho para me dedicar a ele.

Eu sei lá, poderia pensar num milhão de coisas interessantes para se fazer, mas para cada uma delas eu ia lembrar de um ponto negativo, que me impediria ou no mínimo me faria pensar se era tão interessante assim. Pois como dizia aquela música, cada escolha é uma renúncia. Algo tem que ser deixado de lado para um novo caminho seja trilhado e isso sempre é complicado.

Portanto não é a escola, a alimentação, os irmãozinhos que eu posso lhe dar, ou qualquer outra coisa que possa ser comprada ou tocada. O que não pode faltar é o amor. Todos os dias eu me sento com meu pequeno filho no colo, de frente para mim e conversamos sobre qualquer bobagem que me venha a mente. Ele, como ainda não sabe falar, me responde com um sorriso tão perfeito, que em alguns momentos se torna uma gargalhada. Esse sorriso é puro, sem malícia, sem segundas intenções, somente demonstra o quanto está feliz em ter o pai dele por ali, conversando com ele. E acho que assim que eu vou fazer. Levando com muito amor e carinho a minha vida, sem deixar que isso falte, para que se desenvolva um ser humano pleno, em todas as suas habilidades, para que ele possa ser o que ele quiser ser na vida.

Sobrevivência ou Egoísmo

Sep 21
2010

Vez por outra eu vejo uma situação e um debate interminável toma conta da minha cabeça. Normalmente isso toma a minha noite toda e vai até o outro dia, só saciando quando eu consigo colocar isso para fora, no papel ou num post. Então, para minha terapia, eu compartilho esses pensamentos com vocês.

Eu vi algumas atitudes do ser humano, principalmente os que estão em minha volta, e pensei: como podem ser tão egoístas? Mas como eu fiz um julgamento, fiz o que eu sempre faço em seguida, procuro em mim mesmo esse tipo de atitude. A parte deprimente é que encontrei. Foi só então que tive a minha iluminação: somos todos egoístas. No fundo da alma mesmo. Uns mais, outros menos, mas somos todos. Negar essa verdade é o mesmo que negar aquela coisa fundamental que nos torna humanos.

Mas isso não nos torna Lex Luthors e sim sobreviventes. Em última instância somos todos pequenos e jovens macaquinhos querendo passar os seus genes para a frente, manter a sua linhagem viva, ser imortais ou seja, sobreviver.

E nessa visão, existem duas categorias de seres humanos, muito bem definidas, segundo essa minha revelação. Os que acreditam que a sobrevivência só pode ser alcançada se a própria vontade for imposta, se somente os seus desejos forem atendidos e/ou todos os demais concorrentes deixarem de existir, e esses são chamados de egoístas. E existem aqueles que acreditam que, se estamos inseridos em um grupo, todo o grupo deve se elevar, aumentando assim as chances de sobrevivência de toda aquela categoria, incluindo a si mesmo, esses são conhecidos como líderes, aqueles que transformam o lugar aonde estão. Os primeiros sempre serão párias e o grupo sempre os terá em segundo plano. Os últimos são aquilo que tornou possível um pequeno grupinho de bichos se transformar no que chamamos de sociedade.

Faça a sua reflexão e diga a si mesmo: em qual grupo você está? Ou melhor, em qual você quer estar?

Uma ótima semana a todos.

Levantamento de Requisitos

Sep 20
2010

Recentemente, em uma palestra, me perguntaram qual a parte mais importante no planejamento de um software. Na minha humilde opinião eu respondi que além de coisas como manutenabilidade e boa documentação (não muita, mas de qualidade), o que eu achava mais importante é extrair as informações do cliente e até mesmo envolve-lo no processo, como acontece no Scrum.

Naquela ocasião citei uma imagem que exemplifica de maneira sem retoques o que eu estava falando. Quem puder dizer que não é verdade que atire o primeiro código-fonte.

Criando listas com PHP/MySQL – Paginação

Sep 11
2010

Olá amiguinhos.

Depois de colocar uma listagem bem simples, buscando os dados do banco e montando numa tabela, eu vou colocar o resto da implementação, bem como os arquivos do projeto.

Nesse post vamos criar a lista, pagina, postando para uma página de tratamento fictícia. Vamos usar um pouco de Javascript e CSS, mas não é obrigatório, é só para dar alguma elegância ao projeto.

Como eu fiz esse artigo meio que de encomenda para um amigo, que não queria usar Ajax, eu não isso aqui. Portanto pense nisso antes das críticas :D .
Read the rest of this entry »

Orientação à Objetos em Delphi (Parte 1 e 1/2)

Aug 27
2010

Apesar do povo no twitter querer me massacrar quando digo que o Delphi é uma linguagem (muito boa por sinal), há muito que ele não trata mais de Pascal com uma IDE bonitinha. Mas como eu respondi lá, isso é uma questão comercial, que pouco me importa, afinal, não ganho ou perco um centavo com isso. Quanto a linguagem ser boa, não há dúvidas, com ela eu construi minha casa, estou pagando o carro, os meus treinamentos, a educação do meu filho…

Piadas à parte, vamos ao ponto, no último post que eu tratei sobre o assunto (Orientação à Objetos) a coisa ficou meio descontextualizada, principalmente por se tratar de uma palestra que fiz aqui na Produtec. Assim, vou tentar simplificar um pouco mais o conceito, sem necessariamente entrar na conversa com o banco.
Primeiro vamos imaginar um problema. Alguém lhe fez a solicitação:

Criar uma classe Lampada, que tenha como ser ligada, desligada e possa me responder seu atual estado (ON/OFF). Essa pessoa lhe solicitou também um formulário que interagisse com essa classe, acessando os seus métodos.

Então vejamos, temos uma classe mais ou menos como a desenhada abaixo:


Como vemos, teremos então a classe Lampada, que possuirá um atributo privado chamado acesa do tipo boleano e três métodos públicos bastante simples; ligarLampada() muda o atributo acesa para true, desligarLampada() seta o atributo para false e isLampadaLigada() que retorna o estado do atributo. Até aqui bem simples.
Para a implementação eu vou herdar de TControl, por enquanto isso será suficiente, afinal não quero ter que implementar as coisas mais básicas na mão, como a criação do componente e tal. Isso fica mais ou menos assim:

unit uLampada;

interface

uses Controls;

type
  TLampada = class(TControl)
  private
      Facesa: Boolean;
      procedure Setacesa(const Value: Boolean);
      property acesa: Boolean read Facesa write Setacesa;
  public
      procedure LigarLampada;
      procedure DesligarLampada;
      function isLampadaLigada: Boolean;
  end;

implementation

{ TLampada }

procedure TLampada.DesligarLampada;
begin
   acesa := False;
end;

function TLampada.isLampadaLigada: Boolean;
begin
   Result := acesa;
end;

procedure TLampada.LigarLampada;
begin
   acesa := True;
end;

procedure TLampada.Setacesa(const Value: Boolean);
begin
   Facesa := Value;
end;

end.

Percebam aqui algumas particularidades do Delphi. Pra começar, os métodos tem um “tipo”. Métodos que necessitam retornar valores são declarados como function e os que não precisam retornar valor, portanto são somente procedimentos, são assim chamados procedure. Ambos podem receber parâmetros, mas no nosso exemplo não tivemos necessidade. A única diferença é mesmo o retorno.

Para declarar a propriedade acesa, eu simplesmente digitei property acesa:boolean; e pressionei o atalho Ctrl+Shift+C. Isso nos leva a outro ponto legal de destacar que é o encapsulamento. Veja como ficou o código:

  private
      Facesa: Boolean;
      procedure Setacesa(const Value: Boolean);
      property acesa: Boolean read Facesa write Setacesa;

Assim, na prática, o valor será gravado em Facesa (o “F” é padrão do Delphi, não pergunte). Como se percebe ele completou a linha com as cláusulas read e write, determinado assim o Getter e o Setter da propriedade acesa. Portanto quando uma chamada um outro objeto acessar a propriedade acesa, a classe irá ler o valor da variável Facesa e na hora de atribuir o valor, o procedimento Setacesa(const Value: Boolean);.

A cláusula const antes do parâmetro indica que o mesmo não pode ser alterado no corpo do procedimento. Ele pode ser atribuído normalmente na chamada.

Com o procedimento SetAcesa podemos colocar quaisquer tratamentos que se fizerem necessários. Mas isso é assunto para outro post.

Para a aplicação rodar como pedido, devemos criar um formulário que interaja com um objeto da classe criada. Vou não criar muita firula aqui, serão apenas 3 botões, Ligar, Desligar e Status.

Aqui fica mais clara ainda a simplicidade desse sistema. Basta criar uma instância da classe TLampada e fazer com que os botões acessem os seus métodos. Veja como ficou simples.

unit uInterruptor;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, uLampada;

type
  TfrmInterruptor = class(TForm)
    btnLigar: TButton;
    btnDesligar: TButton;
    btnStatus: TButton;
    procedure btnStatusClick(Sender: TObject);
    procedure btnDesligarClick(Sender: TObject);
    procedure btnLigarClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    MinhaLampada: TLampada;
  public
  end;

var
  frmInterruptor: TfrmInterruptor;

implementation

{$R *.dfm}

procedure TfrmInterruptor.btnDesligarClick(Sender: TObject);
begin
   MinhaLampada.DesligarLampada;
end;

procedure TfrmInterruptor.btnLigarClick(Sender: TObject);
begin
   MinhaLampada.LigarLampada;
end;

procedure TfrmInterruptor.btnStatusClick(Sender: TObject);
var
   cMsg: String;
begin
   cMsg := 'A lâmpada ';

   if not MinhaLampada.isLampadaLigada then
      cMsg := cMsg + 'não ';

   cMsg := cMsg + 'está ligada.';
   ShowMessage(cMsg);
end;

procedure TfrmInterruptor.FormCreate(Sender: TObject);
begin
   MinhaLampada := TLampada.Create(Self);
end;

end.

A única dica é criar a MinhaLampada na criação do formulário. Não preciso me preocupar com dispor dela, pois ela foi criada “afiliada” ao form, portanto quando um for para o vinagre o outro vai junto.

Bom pessoal, agora que desaceleramos e começamos de maneira mais básica acho que consegui isolar um pouco mais os conceitos. Acredito que todos entendem que temos uma classe TLampada, com atributos privados, com métodos públicos que nos permitem controlar a lâmpada. Esclarecemos também que o que se manipula posteriormente é a instancia, o objeto MinhaLampada, não a classe. E podemos ter quantas instancias da Lampada criadas dentro da nossa aplicação.

No próximo post sobre o assunto vamos criar um serviço que controle a “energia” do exemplo. Até lá.

Porque não programamos em casa?

Aug 23
2010

Delphi orientado à objetos – parte 1

Jul 27
2010

Já tem um bom tempo que programo com Delphi. E sempre ouvi críticas pesadíssimas sobre o quanto a linguagem é ruim. Eu sempre acreditei que existiram sempre programadores ruins e que os programas saiam ruins, o que gerou essa impressão negativa, bem como os vários problemas que a Borland (fabricante do Delphi, agora CodeGear) impôs nas mudanças de versão. Assim, resolvi desmistificar essa coisa de que é impossível programar orientado à objetos usando o Delphi.

Segue o material do nosso último treinamento, sobre como usar o Delphi, orientado à objetos.
Embora pareça que estamos trabalhando com OO desde sempre, afinal instanciamos objetos baseados em classes, isso não é inteiramente verdade.
Como me disse um professor certa vez: “Seu sistema é orientado à objetos? Ótimo. Me mostre a sua classe NotaFiscalSaída.”

Assim achei por bem usar um exemplo bem simples, estados e cidades para mostrar o poder que o Delphi tem e de quebra demonstrar que o que está errada é a maneira como programamos e não a linguagem que usamos, seja ela qual for.
Read the rest of this entry »

Foco na solução?

Jul 27
2010

Um paciente vai num consultório psicológico e diz pro doutor:
- Toda vez que estou na cama, acho que tem alguém embaixo.
Aí eu vou embaixo da cama e acho que tem alguém em cima. Pra baixo, pra  cima, pra baixo, pra cima.
Estou ficando maluco!
- Deixe-me tratar de você durante dois anos. -diz o psicólogo.
- Venha três vezes por semana, e eu curo este problema.
- E quanto o senhor cobra? – pergunta o paciente.
- R$ 120,00 por sessão – responde o psicólogo.
- Bem, eu vou pensar – conclui o sujeito. Passados seis meses, eles se encontram na rua.
- Por que você não me procurou mais? – pergunta o psicólogo.
- A 120 paus a consulta, três vezes por semana, dois anos, ia ficar caro  demais, ai um sujeito num bar me curou por 10 reais.
- Ah é? Como? – pergunta o psicólogo.
O sujeito responde:
- Por R$ 10,00 ele cortou os pés da cama…
Muitas vezes o problema é sério, mas a solução pode ser muito simples!

HÁ GRANDE DIFERENÇA ENTRE FOCO NO PROBLEMA E FOCO NA SOLUÇÃO!!!

Arquivo

Categorias