19dez

[Rapidinhas] – Descobrir endereço encurtado PHP

FILED IN Rapidinhas Sem comentários

Na última semana um amigo me perguntou de que maneira ele poderia descobrir um endereço de uma imagem encurtada pelo PHP. Existe uma maneira muito simples e rápida para resolver essa questão, basta utilizar a função get_headers(); do PHP e pronto! Essa função retorna os cabeçalhos enviados pelo servidor. Ex:

$link = get_headers('http://migre.me/7b6op', 1);
print_r($link['Location']);
Resposta: http://www.fernandovalente.com.br/wordpress/wp-content/uploads/2011/11/programacao-par.png
Faça um teste (print_r($link);) e veja o que o get_headers retorna:
Array
(
    [0] => HTTP/1.1 301 Moved Permanently
    [Date] => Array
        (
            [0] => Mon, 19 Dec 2011 13:16:22 GMT
            [1] => Mon, 19 Dec 2011 13:16:38 GMT
        )

    [Server] => Array
        (
            [0] => Apache/2.2.14 (Ubuntu)
            [1] => Apache
        )

    [X-Powered-By] => PHP/5.3.2-1ubuntu4.11
    [Location] => http://www.fernandovalente.com.br/wordpress/wp-content/uploads/2011/11/programacao-par.png
    [Connection] => Array
        (
            [0] => close
            [1] => close
        )

    [Content-Length] => Array
        (
            [0] => 0
            [1] => 41712
        )

    [Vary] => Accept-Encoding
    [Content-Type] => Array
        (
            [0] => text/html; charset=utf-8
            [1] => image/png
        )

    [1] => HTTP/1.1 200 OK
    [Last-Modified] => Mon, 07 Nov 2011 20:57:13 GMT
    [ETag] => "27c8656-a2f0-4c8f1c40"
    [Accept-Ranges] => bytes
)

Simples, rápido e direto.

, , ,

09nov

[Agile] – Programação em par

FILED IN Agile Sem comentários

No último dia 05/11/2011 estive palestrando no PHPnRio11 e, no fim da minha palestra, um grupo me procurou para tirar algumas dúvidas. Uma delas foi se eu realmente achava que era útil utilizar a programação em par e, por esse motivo, achei que valeria um post para o assunto.

A programação em par, ou pair programming, tem como objetivo minimizar erros durante o desenvolvimento de software. Essa técnica utiliza sempre dois programadores trabalhando em conjunto em um mesmo computador. Em quanto um fica no comando (piloto) o outro acompanha o processo (co-piloto) e auxilia o piloto no seu trabalho, podendo assumir o comando sempre que for preciso.

O problema é que a grande maioria das pessoas acha que ter um programador “de bobeira” olhando o que o outro está fazendo é um grande desperdício… Mais é ai que está o “pulo do gato”! Não é isso que acontece, ou não deveria acontecer. O que precisamos entender é que o co-piloto não está só observando, ele também está programando! Ele tem que participar ativamente no processo!  Quando utilizamos dois programadores com experiência e vivência diferente, teremos a possibilidade de chegar a uma terceira conclusão. Durante o desenvolvimento de uma determinada aplicação, a dupla deve discutir e chegar a um acordo de qual será a melhor solução para o problema apresentado.

Existem vários benefícios na programação em par, mas resolvi comentar os mais importantes (na minha opinião):

1) Duas cabeças funcionam melhor do que uma: Como eu falei anteriormente, com esse método reduzimos muito a possibilidade de erro, uma vez que temos duas pessoas trabalhando em cima de um único problema.

2) Maior comprometimento: Existem inúmeras formas de um programador se distrair ao longo do seu dia de trabalho (Twitter, Facebook, bate-papo, e-mail etc.), mas quando temos uma pessoa ao lado o nosso comprometimento com o trabalho fica ainda maior.

3) Troca de conhecimento: Duas pessoas diferentes, conhecimentos diferentes, experiências diferentes. Essa troca de conhecimento também é muito importante quando recebemos um novo desenvolvedor no projeto. Será muito mais fácil e menos desgastante para ele, aprender interagindo com sua nova equipe do que lendo uma documentação, que muitas vezes não mostra a verdadeira realidade.

Agora… Nem tudo são flores. Existem alguns grandes problemas que você poderá encontrar na implantação da programação em par e o maior problema será a sua equipe! Se não existir comprometimento, cumplicidade, trabalho em equipe será impossível obter sucesso. Eu aplico programação em par com a minha equipe a quase 2 anos e posso garantir que a qualidade e produtividade teve uma melhora muito grande!

Aplique, apanhe, comente e boa sorte! :D

, , , , , , , ,

06nov

[PHP] – Como foi o PHPnRio11?

FILED IN Eventos | PHP | PHP'n Rio 1 Comentário

Depois de muita espera, finalmente aconteceu o PHPnRio11 e foi um sucesso! Tudo começou com um grupo de programadores de PHP querendo fazer a diferença e, graças a essa galera, o evento desse ano mostrou seu potencial. Foi nítida a evolução dos últimos eventos para esse. Parabéns para os organizadores, aplaudo de pé o evento! Tenho certeza que ano que vem será ainda melhor!

Minha palestra:

Algumas fotos que bati do evento: migre.me/64Uoa

Videos (5 pastes):

, , , , , , , , , ,

12out

PHP´n Rio 11! Vai perder?

FILED IN Notícias | PHP Sem comentários

No próximo dia 05/11/2011 estarei palestrando no PHP´n Rio 11 e você está mais do que convidado! Inscrições abertas!

..o Grupo Local de Usuários de PHP do Rio de Janeiro (PHP Rio) vem organizando, anualmente, desde 2009, o evento chamado de PHP’n Rio. Trata- se de um evento técnico e com um retorno da comunidade magnífico, de forma que contamos sempre com auditório cheio de profissionais e estudantes, que desempenham uma participação excepcional. O PHP’n Rio está sendo apoiado juridicamente pela Associação Libre de Tecnologias Abertas (ALTA).

Não deixe para depois, clique aqui e faça sua inscrição (valor do evento R$30,00)!! Nos vemos lá! =]

Mais informações em www.phpnrio.com.br

, , , , , , , , ,

11out

[PHP'n Rio] – Quer ganhar uma camiseta PHP da LinuxMall? [ATUALIZADO!]

FILED IN PHP | PHP'n Rio Sem comentários

Filipe La Ruina, o ganhador da camiseta PHP LinuxMall

O sorteio foi realizado, mas infelizmente o ganhador não poderá comparecer ao evento e, de acordo com as regras do sorteio, ele foi desclassificado. Sendo assim, um novo sorteio irá acontecer, só que dessa vez no dia do evento!!

Novamente, BOA SORTE! :)

Como diria seu Jorge… “É isso aiiiiii!!!!”. Em uma parceria com a LinuxMall, vou sortear uma camiseta PHP no próximo dia 03/11/2011 as 20h, mas atenção para as regras:

1) O sorteio será feito pelo sistema Twitquero
2) O ganhador deverá estar presente no PHP’n Rio 11 (se o mesmo não comparecer, um novo sorteio será realizado no fim da minha palestra).
3) A entrega da camiseta será no fim da minha palestra, se o ganhador chegar depois… Já era! :)
4) O ganhador deverá seguir o twitter @linuxmall e, é claro, o meu @nandovalente

Simples assim! Agora clique AQUI e boa sorte!! :D

 

Atenção! Devido a quantidade enorme de bots e perfis criados apenas para participação de sorteios, uma avaliação será feita com o ganhador. Se perfil for identificado como um bot ou perfil feito para sorteios, um novo sorteio será realizado.

, , , , , , ,

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!”

, , , , ,

TOPO