A otimização secreta do PHP 5.4 – PHPCast episódio 6

Podcast PHPCast

Uma otimização introduzida no PHP 5.4 – e que foi pouco divulgada – permite que scripts de PHP que criam muitos objetos da mesma classe economizem memória e rodem mais rápido, desde que todas as variáveis sejam previamente declaradas. Este foi um dos principais assuntos discutidos por Manuel Lemos e Ernani Joppert no sexto episódio do PHPCast.

Eles também comentaram sobre o desafio do Prêmio de Inovação em JavaScript, que está sendo organizado pelo site JSClasses, e que em breve vai oferecer prêmios e reconhecimento para desenvolvedores que contribuem com componentes inovadores escritos em JavaScript.

via A otimização secreta do PHP 5.4 – PHPCast episódio 6.

As 7 Principais Otimizações do PHP 5.4 – PHPCast episódio 7

Podcast PHPCast

O PHP 5.4 inclui sete otimizações que tornaram esta versão mais eficiente; não apenas em termos de rapidez de execução, mas também em termos de uso de memória. Este foi um dos principais assuntos do episódio 25 do podcast em inglês Lately in PHP, que foi comentado por Manuel Lemos e Ernani Joppert aqui no episódio 7 do PHPCast.

Este episódio foi gravado em vídeo e transmitido ao vivo para todo o público graças ao Google Hangouts On Air, que permite que qualquer pessoa possa participar e assistir à gravação de hangouts. Os vídeos são disponibilizados depois no canal do YouTube. Siga a conta do Twitter (@phpclassesearly) para saber quando o próximo episódio vai ser gravado para poder participar também.

via As 7 Principais Otimizações do PHP 5.4 – PHPCast episódio 7.

Pensamento: O que realmente vale a pena na vida? como agir nos negócios, na profissão e chegar ao topo ou onde se deseja chegar e ainda assim ficar de bem com a Familia?

Olá,

Nem tudo é como pensamos ser afinal, as vezes optamos por um caminho que não o conhecemos muito bem, caminhos estes que nos levão a um desafio que nos faz crescer como pessoas e como profissionais.

Em nossos caminhos encontramos muitos amigos, aqueles que realmente são amigos e aqueles que tem amizade por conveniência, a estes chamo-os de colegas e a estes dedico compartilhar este pensamento que no inicio da madrugada, logo depois de ver os três filmes 1,2 e 3 do famoso “Poderoso chefão”.. (de novo..rs)

“O que realmente vale a pena na vida? como agir nos negócios, na profissão e chegar ao topo ou onde se deseja chegar e ainda assim ficar de bem com a Familia?” 

Bem meus caros amigos e colegas, eu não sei a resposta, sou apenas um aprendiz, como muitos sempre aprendendo e aprendendo pois como diz a vovó, “o conhecimento ninguém te tira meu filho”, o importante mesmo é ter saúde, mas para aqueles hipócritas que ao lerem isto e estão se perguntando “quem é ele pra dizer isso”, a estes digo “Faça diferente e faça melhor e se sucesso obter, meus parabéns, Humildade não é ser bobo ou ingenuo certo?”.

Enfim, este é apenas um pensamento que retirei do filme, pode não ter valor algum, mas é uma reflexão que deve ser feita, ou não ?

Abraços,

Leonardo Cotta

Qualidade de Software: dicas para escrever um código de qualidade

Em um projeto de software, utilizar rotinas é algo comum e sem ela é praticamente impossível desenvolver um software complexo. Independentemente da arquitetura e utilizando ou não orientação a objeto, as rotinas tem grande importância. A Rotina pode ser um método ou procedimento que são ativados para um único propósito (execução dos nossos desejos em relação ao software). Desenvolver uma rotina de qualquer maneira pode afetar o processamento da aplicação ou então confundir outro colaborador que mais tarde poderá efetuar severas manutenções. Neste artigo demonstrarei os passos necessários para construir um código de qualidade.

Olá a todos! Para escrever este artigo estou sendo guiado por duas grandes obras da área de qualidade de software: CODE COMPLETE de Steve McConnell e CÓDIGO LIMPO de Robert C. Martin. O objetivo do texto é mostrar alguns passos que podem favorecer o desenvolvimento de códigos com qualidades. Este processo irá facilitar manutenção e a vida dos colegas que tiverem que alterar seu código.

Veja este artigo em: Qualidade de Software: dicas para escrever um código de qualidade.

PDO em PHP Orientado a Objetos

Nesse artigo vou mostrar como usar o PDO para conectar em um banco de dados em PHP orientado a objetos.

Nesse exemplo estou usando o banco de dados MySQL.

Vamos primeiramente criar um banco de dados chamado “teste”. Ver Listagem 1

Listagem 1: Código para criar um banco de dados no MySQL query

CREATE DATABASE IF NOT EXISTS teste

Agora vamos criar a estrutura da classe de conexão. Para isso vamos criar um arquivo chamado conexao.php e criar a nossa classe database que será uma abstrata. Ver Listagem 2.

Listagem 2: Estrutura da classe database

<?php
abstract class database{
}
?>

Vamos então adicionar os métodos padrões para as classes abstratas que são o __construct, __clone e __destruct. Ver Listagem 3.

Os métodos __construct e __destruct.são padrões do php e são responsáveis por construir e destruir a instancia da nossa classe.

O método __clone evita que nossa classe seja clonada.

Listagem 3: Classe usuarios com os métodos __construct, __clone e __destruct

<?php
abstract class database{
	/*Método construtor do banco de dados*/
	private function __construct(){}

	/*Evita que a classe seja clonada*/
	private function __clone(){}

	/*Método que destroi a conexão com banco de dados e remove da memória todas as variáveis setadas*/
	public function __destruct() {
		foreach ($this as $key => $value) {
			unset($this->$key);
        }
	}
}
?>

Na listagem 3 o método __destruct remove da memória todas as variáveis que foram setadas pela nossa classe.

Agora vamos criar os métodos de conexão e fechar a conexão com o BD. Ver Listagem 4.

Listagem 4: Métodos connect e disconnect

<?php
abstract class database{
	/*Método construtor do banco de dados*/
	private function __construct(){}

	/*Evita que a classe seja clonada*/
	private function __clone(){}

	/*Método que destroi a conexão com banco de dados e remove da memória todas as variáveis setadas*/
	public function __destruct() {
		$this->disconnect();
		foreach ($this as $key => $value) {
			unset($this->$key);
        }
	}

	private static $dbtype   = "mysql";
	private static $host     = "localhost";
	private static $port     = "3306";
	private static $user     = "root";
	private static $password = "123";
	private static $db       = "teste";

	/*Metodos que trazem o conteudo da variavel desejada
	@return   $xxx = conteudo da variavel solicitada*/
	private function getDBType()  {return self::$dbtype;}
	private function getHost()    {return self::$host;}
	private function getPort()    {return self::$port;}
	private function getUser()    {return self::$user;}
	private function getPassword(){return self::$password;}
	private function getDB()      {return self::$db;}

	private function connect(){
		try
		{
			$this->conexao = new PDO($this->getDBType().":host=".$this->getHost().";port=".$this->getPort().";dbname=".$this->getDB(), $this->getUser(), $this->getPassword());
		}
		catch (PDOException $i)
		{
			//se houver exceção, exibe
			die("Erro: <code>" . $i->getMessage() . "</code>");
		}

		return ($this->conexao);
	}

	private function disconnect(){
		$this->conexao = null;
	}
}
?>

Veja a definição das variáveis privadas usadas para conexão na Listagem 4:

dbtype – define uma string que informa qual a plataforma de banco de dados que estamos usando. Para o MySQL usamos a string “mysql” e para o SQL Server usamos a string “mssql”. Veja nesse link http://br.php.net/manual/en/pdo.drivers.php os drives de banco de dados suportados pelo PDO
host – define o nome do host
port – define a porta do host
user – define o usuário de acesso ao banco de dados
password – define a senha de acesso ao banco de dados
db – define o nome do banco de dados

O método connect tenta se conectar com o banco de dados usando as informações passadas pelas variáveis privadas, caso não consiga retorna um erro.

O método disconnect finaliza a conexão com o banco de dados. Perceba que esse método está sendo chamado pelo método __destruct, ou seja, ele sempre será executado ao término da utilização da classe database.

Por fim vamos criar os métodos insert, select, update e delete para fazer o nosso CRUD. Ver Listagem 5.

Listagem 5: Métodos insert, select, update e delete

<?php
abstract class database{
	/*Método construtor do banco de dados*/
	private function __construct(){}

	/*Evita que a classe seja clonada*/
	private function __clone(){}

	/*Método que destroi a conexão com banco de dados e remove da memória todas as variáveis setadas*/
	public function __destruct() {
		$this->disconnect();
		foreach ($this as $key => $value) {
			unset($this->$key);
        }
	}

	private static $dbtype   = "mysql";
	private static $host     = "localhost";
	private static $port     = "3306";
	private static $user     = "root";
	private static $password = "123";
	private static $db       = "teste";

	/*Metodos que trazem o conteudo da variavel desejada
	@return   $xxx = conteudo da variavel solicitada*/
	private function getDBType()  {return self::$dbtype;}
	private function getHost()    {return self::$host;}
	private function getPort()    {return self::$port;}
	private function getUser()    {return self::$user;}
	private function getPassword(){return self::$password;}
	private function getDB()      {return self::$db;}

	private function connect(){
		try
		{
			$this->conexao = new PDO($this->getDBType().":host=".$this->getHost().";port=".$this->getPort().";dbname=".$this->getDB(), $this->getUser(), $this->getPassword());
		}
		catch (PDOException $i)
		{
			//se houver exceção, exibe
			die("Erro: <code>" . $i->getMessage() . "</code>");
		}

		return ($this->conexao);
	}

	private function disconnect(){
		$this->conexao = null;
	}

	/*Método select que retorna um VO ou um array de objetos*/
	public function selectDB($sql,$params=null,$class=null){
		$query=$this->connect()->prepare($sql);
		$query->execute($params);

		if(isset($class)){
			$rs = $query->fetchAll(PDO::FETCH_CLASS,$class) or die(print_r($query->errorInfo(), true));
		}else{
			$rs = $query->fetchAll(PDO::FETCH_OBJ) or die(print_r($query->errorInfo(), true));
		}
		self::__destruct();
		return $rs;
    }

	/*Método insert que insere valores no banco de dados e retorna o último id inserido*/
	public function insertDB($sql,$params=null){
		$conexao=$this->connect();
		$query=$conexao->prepare($sql);
		$query->execute($params);
		$rs = $conexao->lastInsertId() or die(print_r($query->errorInfo(), true));
		self::__destruct();
		return $rs;
    }

	/*Método update que altera valores do banco de dados e retorna o número de linhas afetadas*/
	public function updateDB($sql,$params=null){
		$query=$this->connect()->prepare($sql);
		$query->execute($params);
		$rs = $query->rowCount() or die(print_r($query->errorInfo(), true));
		self::__destruct();
		return $rs;
    }

	/*Método delete que excluí valores do banco de dados retorna o número de linhas afetadas*/
	public function deleteDB($sql,$params=null){
		$query=$this->connect()->prepare($sql);
		$query->execute($params);
		$rs = $query->rowCount() or die(print_r($query->errorInfo(), true));
		self::__destruct();
		return $rs;
    }
}
?>

Os métodos insert, update e delete tem quase a mesma codificação, eles recebem o comando SQL e e os parâmetros então o executa retornando o número de linhas afetadas. A diferença é que o método insert retorna o último id inserido na tabela.

Caso aconteça algum erro ao tentar executar o comando esses métodos retornam o erro.

O método select recebe o SQL, os parâmetros e o nome de uma classe para o qual o método transformará os dados da tabela em objetos. Para isso é necessário criar uma classe de mapeamento VO (Value Objects) que receberá esses dados.

Caso não seja passado o nome de uma classe ele retorna um array de objetos.

Assim como nos métodos insert, update e delete, se acontecer algum erro o método select retorna esse erro.

Ficamos por aqui, até o próximo artigo.

Fonte: Linha de Código – Artigos

 

Criar objetos fica mais fácil com a primeira impressora 3D brasileira

Nós já vimos diversas impressoras 3D e os objetos criados por elas, mas elas nunca eram made in Brazil. Felizmente, pesquisadores da PUCRS resolveram criar a primeira impressora 3D nacional a chegar ao mercado. E ela tem duas vantagens em relação à concorrência vinda de fora.

Segundo a Ciência Hoje, a impressora Cliever CL-1 usa um método de impressão mais barato e de boa qualidade. Neste método, chamado modelagem por fusão de material, a “tinta” da impressora é um fio de termoplástico, que é derretido e aplicado camada a camada para criar objetos 3D. Além disso, ela não tem os pesados custos de importação da concorrência.

A impressora e o termoplástico em filamento são produzidos pela Cliever Tecnologia, empresa abrigada em incubadora da PUCRS (Pontifícia Universidade Católica do Rio Grande do Sul).

Se você está curioso em saber para que serve uma impressora 3D, o diretor da empresa, Rodrigo Krug, explica: como ela pode criar protótipos, maquetes e até implantes odontológicos, ela pode ser bastante útil para a indústria, para arquitetos e mesmo para dentistas. A impressora usa software livre para criar os modelos, e é compatível com diversos programas de modelagem 3D, como AutoCAD e SketchUp.

Enquanto impressoras 3D importadas chegam a US$50.000, a Cliever CL-1 nacional custa R$4.500. O “cartucho” da impressora também é mais barato: o quilo do termoplástico em forma de filamento deve custar R$60. [Cliever Tecnologia via Ciência Hoje]

Gizmodo