06out

Steve Jobs 1955-2011

FILED IN Notícias Sem comentários

Até agora estou sem palavras… Essa foi a primeira vez que morre alguém que não é amigo ou familiar e eu fico com um nó na garganta. Sim, estou muito triste por perder um ídolo! E tenho certeza que outro dia muito triste para mim será quando o Woz se for… Mas mesmo com toda genialidade do Woz, Jobs tinha algo a mais, ele estava muito além de nós em suas idéias e invenções. É fato que ele nunca foi uma pessoa das mais amigáveis com seus funcionários. Causava arrepios quando chegava na Apple (sempre vi isso como um pai querendo o melhor para seu filho), mas não é essa a questão, ele foi um gênio, um visionário, um apaixonado por seu trabalho, empresa e idéias.

Mesmo triste, eu me sinto muito, mais muito feliz por ter participado dessa geração que acompanhou e viu Steve revolucionar o mundo tecnológico… Obrigado por tudo Seteve e descanse em paz.

, ,

22set

[Rapidinha] – Objetos Dinâmicos

FILED IN OO | PHP | Rapidinhas Sem comentários

Mais um post da série de rapidinhas! :D

O PHP nos oferece inúmeras possibilidades e conhecer todas elas é fundamental para que você não reinvente a roda. Uma dessas possibilidades é criar objetos dinamicamente, sem possuir uma classe definida. Obviamente que o objeto criado dinamicamente poderá armazenar apenas dados e não funções.  Para criar esse objeto, você precisa informar que o seu objeto dinâmico é da classe StdClass (Standard Class). Veja o exemplo:

$pessoa = new StdClass;
$pessoa->nome = "Fernando";
$pessoa->sexo = "Masculino";
$pessoa->cidade = "Rio de Janeiro";

Resposta: stdClass Object ( [nome] => Fernando [sexo] => Masculino [cidade] => Rio de Janeiro )

Simples assim!

, , , , , ,

21set

[PHP OO] – Polimorfismo

FILED IN OO | PHP 2 Comentários

O Polimorfismo (“…Existência de uma espécie sob várias formas…”) é um artefato simples mas seu entendimento é muito importante na orientação a objetos. Quando falamos em polimorfismo em OO, queremos dizer que podemos derivar classes de uma mesma superclasse e utilizar métodos iguais, porém com comportamentos diferentes. Veja o exemplo:

Arquivo Calculo1.php

class Calculo1{
	public $resposta;

	public function dividir(){
		return $this->resposta = 10/2;
	}

}

Arquivo Calculo2.php

require_once "Calculo1.php";

class Calculo2 extends Calculo1{
	public $resposta;

	public function somar(){
		return $this->resposta = 1+1;
	}

}

Repare que temos 2 arquivos diferentes onde em Calculo2.php nossa classe Calculo2 está herdando as características da classe Calculo1 (saiba mais sobre herança clicando aqui). Feito isso eu posso receber as resposta de Calculo1 (dividindo) e Calculo2 (somando) criando apenas o objeto da classe Calculo2:

require_once "Calculo2.php";

$calculo = new calculo2;
$calculo->dividir(); ou $calculo->somar();

print_r($calculo);

//resposta 5 ou 2

Mas digamos que no calculo 2 eu queira uma outra função dividir (4 por 2) que será específica apenas na minha aplicação (Calculo2.php) e com isso não quero mudar nada no arquivo Calculo1.php:

require_once "Calculo1.php";

class Calculo2 extends Calculo1{
	public $resposta;

	public function somar(){
		return $this->resposta = 1+1;
	}

	public function dividir(){
		return $this->resposta = 4/2;
	}
}

Nesse momento entra o “X” da questão, o polimorfismo. Quando eu mandar executar $calculo->dividir() o PHP procura dentro da minha classe Calculo2 a função dividir e, encontrando, executa a divisão 4/2 e, se ela não existir, ele irá executar a outra função dividir 10/5, que está dentro do arquivo Calculo2.php. Teoricamente poderíamos encontrar algum problema ao estender uma classe da outra e utilizar duas funções com o mesmo nome, mas é exatamente o contrário que o polimorfismo nos permite fazer.

Espero ter ajudado alguém com essa pequena e simples explicação.

Grande abraço!

PS: Leia sobre “Polimorfismo ou Sobrecarga?“.

, , , , ,

19set

[PHP OO] – Encapsulamento

FILED IN OO | PHP 2 Comentários

Obs: Esse post parte do princípio que você tem conhecimentos em PHP e está iniciando em Orientação a Objetos.
Obs2: Antes que alguém queira reclamar, eu usei os gets e sets para mostrar um exemplo simples, muito simples!

O Encapsulamento é um dos recursos mais importantes na Orientação a Objetos. Como sempre, lá vou eu com as minhas definições de dicionário: Encapsular – “Circundar, rodear de uma cápsula… proteger em uma cápsula ou como em uma cápsula…”. Existem três formas de encapsular seus objetos: public (público), protected (protegido) ou private (privado), vamos entender melhor cada um desses tipos.

Public (público): Quando um atributo ou método é definido como public significa que ele pode ser acessado livremente em qualquer lugar da classe ou subclasse. Existem duas formas de você declarar um atributo ou método como público, são elas:

<?php

// Forma 1
class TesteEncapsulamento {
   $teste;
}

// Forma 2
class TesteEncapsulamento {
    public $teste;
}

?>

Apesar da primeira forma estar correta no PHP, eu recomendo e prefiro sempre a utilização da segunda, pois assim você ficará acostumado a sempre declarar a visibilidade de seus Métodos e Atributos.

Protected (protegido): Quando um atributo ou método é definido como protected significa que ele só pode ser acessado de dentro da própria classe ou em suas classes-filha (saiba mais sobre Herança clicando aqui):

<?php

class TesteEncapsulamento {
    protected $teste;
}
?>

Private (privado): Quando um atributo ou método é definido como private significa que ele só pode ser acessado de dentro da própria classe. Sendo assim suas subclasses não podem acessar seus métodos e atributos (saiba mais sobre Herança clicando aqui):

class Funcionario {
   private $nome;

   public function setNome($nome){
      $this->nome = $nome;
   }
   public function getNome(){
      return $this->nome;
   }

 }

Esse post foi quase uma “rapidinha”, simples, rápido e direto. Ficou com alguma dúvida? Mande uma mensagem que prometo responder o mais rápido possível!

Grande abraço!

, , , , ,

17set

[PHP OO] – Herança

FILED IN OO | PHP 3 Comentários

Obs: Esse post parte do princípio que você tem conhecimentos em PHP e está iniciando em Orientação a Objetos.
Obs2: Antes que alguém queira reclamar, eu usei os gets e sets para mostrar um exemplo simples, muito simples!

A reutilização de parte de nossos códigos é fundamental para nos dar uma maior agilidade no desenvolvimento de nossas aplicações. Quando escutamos a palavra HERANÇA logo lembramos de nossos parentes e o que herdamos ao longo dos anos. Em OO a herança tem quase o mesmo significado. No dicionário encontramos a seguinte definição para herança: “Aquilo que se herda por disposição testamentária ou por via de sucessão. Sucessão, exatamente isso que acontece na orientação a objeto (“…acontecimentos que se seguem ou se sucedem em determinada ordem…”). Chega de filosofar e vamos direto ao ponto…

Em orientação a objetos nós utilizamos o compartilhamento de atributos e métodos entre as classes “filhas”. A classe “filha” herda automaticamente todas as características de sua classe mãe. Vamos entender melhor: Imagine uma empresa, um banco por exemplo… Independente do setor ou do cargo ocupado por cada um, todos os contratados são funcionários desse banco e possuem alguns atributos iguais (nome, endereço, telefone, salário etc). Com isso podemos criar uma classe Funcionário e, com base nessas informações, criaremos uma outra classe (Gerência) que irá herdar as informações da classe Funcionário. Veja o exemplo abaixo para entender melhor (Clique aqui para fazer download do exemplo).

<?php
/*
* Classe mãe "Funcionário". Arquivo Funcionario.php
*/
class Funcionario {
   private $nome;
   private $endereco;
   private $telefone;
   private $salario;

   public function setNome($nome){
      $this->nome = $nome;
   }
   public function getNome(){
      return $this->nome;
   }
   public function setEndereco($endereco){
      $this->endereco = $endereco;
   }
   public function getEndereco(){
      return $this->endereco;
   }
   public function setTelefone($telefone){
      $this->telefone = $telefone;
   }
   public function getTelefone(){
      return $this->telefone;
   }
   public function setSalario($salario){
      $this->salario = $salario;
   }
   public function getSalario(){
      return $this->salario;
   }

 }
 ?>
/*
* Classe filha "Gerência". Arquivo Gerencia.php
*/
<?php

require_once "Funcionario.php";

/*
* O extends indica que a classe "Gerência" está herdando as
* caracteristicas da classe "Funcionário".
*/
class Gerencia extends Funcionario {
   private $setor;
   private $bonificacao;

   public function setSetor($setor){
      $this->setor = $setor;
   }
   public function getSetor(){
      return $this->setor;
   }
   public function setBonificacao($bonificacao){
      $this->bonificacao = $bonificacao;
   }
   public function getBonificacao(){
      return $this->bonificacao;
   }

 }
 ?>
/*
* Arquivo de teste ExemploFuncionario.php
*/
<?php

require_once "Gerencia.php";

$exemploFuncionarioGerencia = new Gerencia();
$exemploFuncionarioGerencia->setSetor("Gerência");
$exemploFuncionarioGerencia->setBonificacao("R$100,00");
$exemploFuncionarioGerencia->setNome("Fernando");
$exemploFuncionarioGerencia->setEndereco("Rua dos Bobos, número 0");
$exemploFuncionarioGerencia->setTelefone("9999-8888");
$exemploFuncionarioGerencia->setSalario("R$1.000,00");

print_r($exemploFuncionarioGerencia);

?>
Resposta:

Gerencia Object
(
    [setor:Gerencia:private] => Gerência;
    [bonificacao:Gerencia:private] => R$100,00
    [nome:Funcionario:private] => Fernando
    [endereco:Funcionario:private] => Rua dos Bobos, nœmero 0
    [telefone:Funcionario:private] => 9999-8888
    [salario:Funcionario:private] => R$1.000,00
)

 Veja que no arquivo ExemploFuncionario.php eu pude criar uma instância da classe “Gerência”. Pelo simples fato da classe Gerência estender a classe Funcionário eu pude manipular e “setar” informações referentes a classe Gerência e Funcionário.

No próximo post irei abordar o Encapsulamento. Como diria Didi Mocó… “Aguarde e confie!”

, , , , ,

11set

[Rapidinha] – WTF DOCTYPE?

FILED IN HTML | Rapidinhas Sem comentários

Sim, ainda existem pessoas que não sabem para que serve o DOCTYPE, mas isso não é nenhuma vergonha.

O DOCTYPE (abreviação de Document Type Definition – Definição de tipo de documento) serve para definir de que forma os navegadores vão se comportar ao ler seu código. Essa declaração deve aparecer sempre no início de cada documento que você criar (quando eu falo início é início mesmo! Antes da tag <html>). Quando declaramos um DOCTYPE de forma errada ou simplesmente não o declaramos, o navegador irá interpretar seu documento em modo quirks, o que significa que sua página irá ser tratada com erros e, por mais que seu XHTML/HTML e CSS tenham sido codificados perfeitamente, sua página será “renderizada” incorretamente.

Existem alguns tipos de documentos que você pode declarar. No HTML 4.01 e no XHTML 1.0 vamos encontrar 3 tipo, o Strict (não são permitidos erros de estrutura e a utilização do CSS é obrigatória), o Transitional (mais flexivel, permite a navegação por browsers sem suporte ao CSS) e o Frameset (utilizado para documentos que fazem uso de frames). Já no HTML 5 e no XHTML 1.1 encontraremos apenas uma opção:


< !DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">


< !DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/1999/REC-html1401-19991224/loose.dtd">


< !DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
"http://www.w3.org/TR/1999/REC-html1401-19991224/frameset.dtd">


< !DOCTYPE html>


< !DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">


< !DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


< !DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">


< !DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

Evite problemas e dores de cabeça, utilize o DOCTYPE correto! ;)

, , , , , , , , , , ,

10set

[Agile] – Agile e eu, eu e o agile!

FILED IN Agile | Scrum Sem comentários

Eu sempre falo isso nas minhas palestras de Scrum, mas eu não acreditava que o Scrum poderia me ajudar. Eu não entendia de que maneira um monte de “papeizinhos coloridos” colados no quadro poderiam me ajudar no meu dia a dia. Eu lia, lia e lia mas mesmo assim não estava convencido de que isso poderia melhorar meu trabalho… Foi ai que em um PHP Conference eu fiz um Workshop de Secrum e passei a ver como essa “bagaça” podia ser útil! Acho que só passei a reparar nos benefícios depois que ganhei uma equipe de 5 programadores e me identifiquei com inúmeros problemas apresentados e solucionados no Scrum. Tentarei agora passar um pouco da minha experiência com a implantação e aplicação do Scrum.

Aplicando e apanhando (Scrum em equipe)

Voltei do PHP Conference com muitas ideias e super empolgado com as possibilidades, preparei uma apresentação, convenci meu chefe de que o Scrum poderia ajudar no nosso trabalho, treinei minha equipe, arrumei um quadro, montei o Kanban e… FIASCO! Deu quase tudo errado.

1) Transparencia:  Não tive problemas com relação a isso e, na minha opinião, é um dos maiores problemas que um Scrum Master pode ter. Se sua equipe não passa exatamente o que está acontecendo, tenha certeza de que a chance do seu Sprint dar certo é minima!

2) Tudo junto e misturado: Vamos lá galera, Sprint Backlog pronto, equipe preparada, café pronto, equipe trabalhando a todo vapor e… Diálogo:

Chefe: Para tudo que você está fazendo e adianta esse trabalho aqui…
Você: Estamos no meio de um Sprint! Falta apenas alguns dias para terminar, vou colocar esse trabalho no próximo sprint.
Chefe: Não não… Eu preciso disso para ontem etc etc etc.

Resumo… Ou teremos um Sprint cancelado (isso é tão sério como roubar comida de um gordinho – sou gordo e sei como isso dói) ou teremos um atraso no Spint (isso também é como roubar comida de um gordinho). Cancelamento de Sprint desanima a equipe, atraso de Sprint desanima seu cliente e faz com que você perca a credibilidade e, tenha certeza, reconquistar essa credibilidade é uma terefa complicada e na maioria das vezes dói no bolso (no seu é claro)!

3) Reuniões periódicas? Experiência própria! Falar para seu cliente que você trabalha com desenvolvimento ágil é legal, agora tentar explicar o papel dele dentro do Scrum é um tiro na cabeça! Ele não vai acreditar que isso funciona, não vai querer as reuniões periódicas e vai tudo dar errado. O melhor a fazer é explicar de forma reduzida o que é o desenvolvimento ágil e fazer com que ele participe sem perceber que está participando. Marque as reuniões periódicas sem dar esse título para seu cliente, tente fazer ele participar dessas reuniões fazendo com que ele fale quando deve falar, opine quando deve opinar. Muitas vezes ele vai falar de mais e vai querer que você adicione inúmeras novas funcionalidades, não se desespere, não desanime, anote tudo!

4) Em quanto tempo o trabalho esterá pronto? Ai é que entra o seu jogo de cintura. Acabei de falar “…não se desespera, não desanime, anote tudo”. Anote tudo e faça o seu cliente entender que quanto mais funcionalidades ele pedir mais tempo vai demorar para você entregar o trabalho e mais dinheiro ele irá gastar. Vale lembrar que no Scrum, mudanças são bem vindas.

O resumo disso tudo é que você precisa ter jogo de cintura, não pode ser tímido e nunca deixe o seu cliente tomar conta do projeto! Lembre-se ele está apenas envolvido com o projeto e você está comprometido.

, , , , , ,

20ago

[Rapidinha] – A diferença entre HTML e XHTML

FILED IN Rapidinhas | XHTML Sem comentários

A linguagem eXtensible HyperText Markup Language, ou simplesmente XHTML, é uma linguagem de marcação baseada em outra linguagem complexa chamada SGML e é destinada a escrever documentos web. A grande diferença entre o HTML e o XHTML está em suas regras:

  • Os documentos devem receber uma boa formatação/indentação
  • Todas as tags são escritas em letras minúsculas
  • Todas as tags e elementos vazios devem ser fechadas (em caso de tags sem fechamento, como o input, o fechamento deve ser feito desta maneira: <input type=”text” id=”teste” value=”" />).
  • Diferença na sintaxe dos atributos. Ex: readonly=”readonly”, checkd=”checkd”

Simples assim! :)

, , , , , ,

17mai

[Palestra] – PHPRio Talks’11

FILED IN Agile | Palestras | Scrum 2 Comentários

No último dia 16/05 estive palestrando no PHPRio Talks.

“O PHPRio Talks é um evento mensal e gratuíto que visa abordar temas ligados ao desenvolvimento web. Os temas são sugeridos pela comunidade e ministrados por voluntários. É uma iniciativa com o espírito do Software Livre. Participe divulgando, assistindo, dando sugestões ou até mesmo palestrando.”

Como prometido, criei esse “post” para compartilhar os “Slides” apresentados e as referências citadas durante a palestra.

Palestra:

 

Links da palestra:

- Manifesto ágil: www.manifestoagil.com
- Definição de Scrum: toma.ai/ih6
- Planning Poker: toma.ai/jh6

Livros:

- Scrum e XP direto das Trincheiras: toma.ai/gh6
- Kanban e Scrum – obtendo o melhor de ambos: toma.ai/hh6

Esse é o vídeo que eu mostrei no final da palestra (para quem saiu mais cedo, vale conferir). Ele mostra a dura realidade de quem não utiliza Scrum ou métodos de desenvolvimento ágil no seu dia-a-dia! :)

Assim que o vídeo da palestra estiver disponível, libero aqui nesse post.


 

, , , , , , , ,

07mai

[PHP] – PHPRio Talks

FILED IN Agile | Eventos | PHP | Scrum Sem comentários

No próximo dia 16/05/2011, você, morador do Rio de Janeiro, tem um compromisso! Assistir a minha palestra de Scrum, que acontecerá no PHPRio Talks. :)

“O PHPRio Talks é um evento mensal e gratuíto que visa abordar temas ligados ao desenvolvimento web. Os temas são sugeridos pela comunidade e ministrados por voluntários. É uma iniciativa com o espírito do Software Livre. Participe divulgando, assistindo, dando sugestões ou até mesmo palestrando.”

As vagas são limitadas, confirme sua presença em http://migre.me/4tIaH

 

, , , , , ,

TOPO