Mostrando postagens com marcador AlmirNeto. Mostrar todas as postagens
Mostrando postagens com marcador AlmirNeto. Mostrar todas as postagens

16 dezembro 2009

O GOPHP Conference 2009 foi um sucesso!


O evento aconteceu no dia 12/12/2009 no SENAI em Goiânia e contou com mais de 100 congressistas.

Foram diversas palestras e minicursos nos quais os congressistas tiveram a oportunidade de adquirir conhecimento acerca de novas tecnologias e metodologias.

Durante os dois coffee breaks os participantes saborearam salgadinhos e refrigerantes, além de praticar o networking.
Ainda durante os coffe breaks, os congressistas puderam tirar dúvidas e conhecer outros grupos de usuários que estavam em hacklabs. Os seguintes grupos de usuários participaram do evento:
- GOJava
- RubyGO
- Debian-GO
- Ubuntu-GO
- Mulheres na Tecnologia
- Goiaba Digital

No final do dia tivemos uma mesa redonda bastante produtiva sobre o Mercado de Trabalho PHP com a participação do Pablo Dall'Oglio, Otávio Calaça e Eduardo Neves(eth0).

Ainda tivemos o sorteio de várias camisetas, descontos em cursos e outros brindes no encerramento do evento. Todos os congressistas ganharam um adesivo do GOPHP e um chaveiro do elePHPant!

Como o evento foi realizado com o objetivo de comemorar o aniversário de 2 anos do GOPHP, não poderia faltar um bolo de aniversário!
No final do evento os congressistas se reuniram para cantar parabéns para o GOPHP e saborear o delicioso bolo!

Para finalizar com chave de ouro, alguns congressistas e palestrantes foram a um restaurante para uma confraternização.

Foi interessante perceber a grande participação feminina no evento e a presença de várias pessoas do interior de Goiás, do Distrito Federal, Minas Gerais e Tocantins.

As fotos do evento podem ser visualizadas nos links abaixo:
- http://www.flickr.com/photos/45617268@N04/
- http://picasaweb.google.com/fernandopedro/GOPHPConference

A organização do GOPHP Conference 2009 agradeçe todos os patrocinadores, grupos de usuários, palestrantes e congressistas pelo inesquecível evento, e garante que em 2010 um evento ainda maior virá!

28 fevereiro 2009

David Cummings: Ligue o parâmetro Error Reporting imediatamente

David Cummings tem a sua própria empresa de software que é especialista em sistemas de gerenciamento de conteúdo, e ganhou vários prêmios. Se alguém sabe como desenvolver uma aplicação PHP eficientemente, é o Dave.

David escreveu um artigo para o SitePoint sobre as duas dicas de PHP que ele gostaria de ter aprendido quando começou a programar. Uma das dicas: Ligar o parâmetro Error Reporting imediatamente.

"A coisa mais importante que eu digo as pessoas que utilizam PHP é para ligar o parâmentro Error Reporting para seu nivel máximo. Por que fazer isso? Geralmente os erros são setados para um nível que irá esconder muitas coisas como:
- declarar uma variável antes do tempo,
- referenciar uma variável que não está disponível naquele segmento de código, ou
- usar uma definição que não foi feita
Esses fatores podem não parecer um grande problema -- desde que seu desenvolvimento seja estruturado ou orientado a objetos com funções e classes. Frequentemente escrever um código sem exibição de erros em um nível máximo pode custar horas para verificar funções que não estão funcionando por causa de variáveis que não estão acessíveis ou foram escritas erroneamente"

Exibição de erros pode facilitar e muito encontrar a razão de um erro. Um pequeno bug no código pode ser fácilmente encontrado se a exibição de erros estiver no nível máximo. Poupe-se e deixe que o PHP procure seus erros por você.

Obs.: Este post é o décimo de uma série que mostra dicas de desenvolvimento pelos mestres do PHP. O post original em inglês foi feito pelo Glen Stansberry e pode ser visto clicando aqui

21 fevereiro 2009

Rasmus Lerdorf: Não utilize um framework PHP

Contrariando o que Josh Sharp pensa, Rasmus Lerdorf, o 'Pai' do PHP, acredita que frameworks não são uma boa. Por que? Porquê eles são muito lentos em comparação com o PHP sozinho.

Durante a apresentação de Rasmus no Drupalcon 2008, ele comparou o tempo de resposta de uma página PHP com um exemplo simples de 'Olá, Mundo' com alguns frameworks PHP, e mostrou que os frameworks são muito lentos em comparação com o PHP.

Você pode escutar ou assistir a apresentação de Rasmus na íntegra. Resumidamente, ele mostra que a performance é prejudicada quando se utiliza um framework PHP.

Obs.: Se você precisa utilizar um framework, Rasmus recomenda o Code Igniter

Obs.: Este post é o nono de uma série que mostra dicas de desenvolvimento pelos mestres do PHP. O post original em inglês foi feito pelo Glen Stansberry e pode ser visto clicando aqui

19 fevereiro 2009

Trabalhando com Lobs, Blobs, Clobs do Oracle no PHP

Trabalhar tipos de dados como Varchar2 no Oracle é bastante simples, mas e se for necessário armazenar uma informação que tenha mais de 4000 caracteres?
Para esses casos a solução é um dos tipos LOB(Oracle Long Object), que necessitam um tratamento especial com a utilização da API do PHP para trabalhar com Lobs.

Objetos Long no Oracle
O Oracle fornece os seguintes tipos de dados LOB:
- BLOB, utilizado para armazenar informações binárias
- CLOB, utilizado para armazenar caracteres com a codificação do banco de dados
- NCLOB, utilizado para armazenar informações com codificação UNICODE. Deve-se observar que NCLOBs, atualmente não são suportados pela extensão OCI8 do PHP, que será explicada neste artigo.
- BFILE, utilizado para referenciar arquivos externos do sistema operacional.

Uma subcategoria dos LOBs, são os LOBs temporários, que podem ser tanto um BLOB, quanto um CLOB ou NCLOB, com a diferença que são armazenados temporariamente na seção até você limpar a memória.
Obs.: As versões mais antigas do Oracle fornecem os tipos LONG e LONG RAW, para caracteres e binários respectivamente. Com o Oracle9i, esses tipos ficaram depreciados em favor dos LOBs.


Armazenamento permitido em um LOB
Para os tipos BLOB, CLOB e NCLOB, o Oracle Database 10g é capaz de armazenar até 128TB em um único registro, dependendo das configurações do banco.

Um objeto LOB compreende dois elementos: O conteúdo do LOB e o localizador do LOB, que é um ponteiro para o conteúdo do LOB. Essa separação é necessária para permitir que o Oracle armazene e gerencie os LOBs de maneira eficiente, e isso é refletido na API do PHP, ao realizar consultas nos LOBs.
Para os tipos internos de LOBs(exceto BFILEs), o Oracle irá armazenar o conteúdo na linha dentro da tabela, juntamente com o restante do registro, em LOBs que tem como tamanho menos de 4KB.
Para LOBs com mais de 4KB, as informações são gravadas fora da tabela. Essa medida permite que os registros pequenos de LOBs sejam trabalhados mais rapidamente do que os maiores, que são armazenados em um local separado, e por isso tem um tempo de acesso mais lento.

Há outras opções para o armazenamento e acesso de LOBs - como utilização de cache e buffer -, que pode fazer com que a performance seja aumentada. Para maiores informações veja o Guia de Performance de LOBs.

Restrições em LOBs
Há algumas restrições que se aplicam ao trabalhar com LOBs, as mais importante estão no seu uso nas consultas SQL.
Não é possível utilizar LOB em nenhuma das seguintes consultas:

SELECT DISTINCT
ORDER BY
GROUP BY

Também não é possível utilizar LOBs em junções de tabelas(JOIN), UNION, INTERSECTION e MINUS.
Há ainda outras restrições como não ser possível utilizar um LOB como chave primária de uma tabela. Para maiores informações, veja o Guia do Desenvolvedor de Aplicações Oracle - Large Objects

CLOBs e codificações
A codificação padrão de uma base de dados é determinada com o parâmetro NLS_CHARACTERSET, e um texto em um CLOB utiliza o mesmo tipo de codificação determinado nesse parâmetro.
Para visualizar o tipo de codificação utilizado em uma case de dados, deve-se utilizar o seguinte SQL.

SELECT value FROM nls_database_parameters WHERE parameter = 'NLS_CHARACTERSET'

Para alterar a codificação de uma base utilize:

ALTER DATABASE CHARACTER SET UTF8

Obs.: Cuidado ao realizar essa operação, principalmente se houver informações na base, ou se a aplicação utilizar outro tipo de codificação.

Trabalhando com LOBs
As explicações seguintes focam na extensão OCI8 do PHP. É bom lembrar que o Oracle fornece um pacote chamado DBMS_LOB, que contém funções para trabalhar com LOBs utilizando PL/SQL.

A extensão OCI8 registra uma classe chamada OCI-Lob no escopo global da aplicação. Quando se executa uma consulta do tipo SELECT por exemplo, onde uma das colunas for um tipo LOB, o PHP vai automaticamente transformar esse campo em um objeto OCI-Lob. Assim que houver uma referencia a esse objeto, será possível chamar métodos como load() e save(), para acessar ou modificar o conteúdo do LOB.
Os métodos disponíveis dependem da versão da PHP que está sendo utilizada. O PHP 5 provê métodos como read(), seek() e append(). Para visualizar os métodos disponíveis, utilize o script abaixo.




No PHP 5.0.5, os seguintes métodos são retornados:
OCI-Lob::load()
OCI-Lob::tell()
OCI-Lob::truncate()
OCI-Lob::erase()
OCI-Lob::flush()
OCI-Lob::setbuffering()
OCI-Lob::getbuffering()
OCI-Lob::rewind()
OCI-Lob::read()
OCI-Lob::eof()
OCI-Lob::seek()
OCI-Lob::write()
OCI-Lob::append()
OCI-Lob::size()
OCI-Lob::writetofile()
OCI-Lob::writetemporary()
OCI-Lob::close()
OCI-Lob::save()
OCI-Lob::savefile()
OCI-Lob::free()

Na prática, a extensão OCI8 do PHP 4.x permite a leitura e escrita de LOBs completos somente, que são os usos mais comuns em aplicações Web. O PHP5 extende essas funcionalidades, permitindo que sejam lidos ou gravados pedaços de um LOB, assim como a utilização de buffer com os métodos setBuffering() e getBuffering().
O PHP5 ainda disponibiliza as funções oci_lob_id_equal() e oci_lob_copy().

Os exemplos abaixo utilizam a nova nomenclatura das funções OCI para PHP5. No PHP5 há o caracter underline entre as palavras. Ex.: PHP4 - ociparse(), PHP5: oci_parse().
Nos exemplos será utilizada a sequência e a tabela abaixo:


CREATE SEQUENCE mylobs_id_seq
NOMINVALUE
NOMAXVALUE
NOCYCLE
CACHE 20
NOORDER
INCREMENT BY 1;

CREATE TABLE mylobs (
id NUMBER PRIMARY KEY,
mylob CLOB
)


Na maioria dos exemplos, serão utilizados CLOBs, mas a mesma lógica pode ser aplicada aos BLOBs.

Inserindo um LOB
Para inserir um LOB, antes de mais nada, é necessário inicializar o campo LOB com as funções empty_blob ou empty_clob do Oracle - Não é possível atualizar uma informação em um LOB que contenha um valor NULL.
Uma vez inicializado, é necessário vincular a coluna a um objeto OCI-Lob do PHP e atualizar o conteúdo do LOB através do método save() do objeto.

O seguinte script fornece um exemplo, retornando o campo LOB da consulta INSERT:
save('INSERT: '.date('H:i:s',time())) ) {

// Se houver erro a transação é cancelada
oci_rollback($conn);

} else {

// Se não houver erro a transação é confirmada
oci_commit($conn);

}

// Libera recursos
oci_free_statement($stmt);
$myLOB->free();


// desconecta do banco, etc...
?>

Perceba que esse exemplo utiliza transação, chamando o método oci_execute com a constante OCI_DEFAULT, o que faz com que a alteração no banco somente seja realizada após oci_commit ou oci_rollback.
Isso é importante, pois há dois estágios na inserção. O primeiro cria o registro e o segundo atualiza o conteúdo do LOB.

Se fosse utilizado um campo BLOB, a única mudança necessária seria na chamada ao método oci_bind_by_name:
oci_bind_by_name($stmt, ":mylob_loc", $myLOB, -1, OCI_B_BLOB);

Há uma maneira de vincular um campo LOB sem especificar seu tipo:



Essa maneira simplifica o código significativamente e é adequado quando há a necessidade de escrever um LOB relativamente pequeno. Se for necessário escrever um LOB extenso, é possível nevegar pelo conteúdo chamando as funções write() e flush() para escrever pequenos pedaços de cada vez e não sobrecarregar a memória.

Retornando um LOB
Quando uma consulta SELECT contém uma coluna LOB, o PHP irá automaticamente vincular a coluna com um objeto OCI-Lob. Por exemplo:

load()."\n";
}

// etc.
?>


Esse processo pode ser simplificado com a utilização da constante OCI_RETURN_LOBS na chamada ao método oci_fetch_arrray(), instruindo a substituição dos objetos LOB por seus valores:


while ( $row = oci_fetch_array($stmt, OCI_ASSOC+OCI_RETURN_LOBS) ) {
print "ID: {$row['ID']}, {$row['MYLOB']}\n";
}


Atualizando um LOB
Para atualizar o conteúdo de um LOB, é possível utilizar o comando RETURNING da mesma maneira que na inserção, mas há uma maneira mais simples, que é utilizar a sintaxe SELECT ... FOR UPDATE

truncate() ) {
oci_rollback($conn);
die ("Failed to truncate LOB\n");
}

// Salva o novo valor no campo LOB
if ( !$row['MYLOB']->save('UPDATE: '.date('H:i:s',time()) ) ) {

// Se houver erro a transação é cancelada
oci_rollback($conn);

} else {

// Se não houver erro a transação é confirmada
oci_commit($conn);

}

// Libera recursos
oci_free_statement($stmt);
$row['MYLOB']->free();
?>



Da mesma maneira que no INSERT, é necessário realizar o UPDATE utilizando uma transação. Um passo importante é chamar o método truncate(). Ao atualizar um LOB com save(), ele irá substituir o conteúdo do início do LOB até o tamanho da nova informação.
Isso significa que o conteúdo anterior(se for maior que o novo), poderá continuar no campo LOB.

No PHP 4.x, onde o método truncate() não está disponível, a alternativa é utilizar o método empty_clob() do Oracle para apagar qualquer conteúdo do LOB antes de salvar a nova informação.


save( 'UPDATE: '.date('H:i:s',time()) ) ) {

OCIRollback($conn);
die("Unable to update lob\n");

}

OCICommit($conn);
$mylob->free();
OCIFreeStatement($stmt);

?>


Trabalhando com BFILES
Ao utilizar o tipo BFILE, as consultas INSERT e UPDATE dizem ao Oracle qual a localização do arquivo no sistema de arquivos do servidor(Que pode não ser o mesmo do servidor Web), ao invés de passar o conteúdo do arquivo. Utilizando uma consulta SELECT, é possível ler o conteúdo de um BFILE através do Oracle, ou chamar as funções do pacote DBMS_LOB para buscar informações do arquivo.

O maior benefício dos campos BFILEs é a possibilidade de acessar o arquivo original diretamente do sistema de arquivos e ainda conseguir localizar arquivos via SQL. Isso significa que, por exemplo, imagens podem ser exibidas diretamente do sistema de arquivos enquanto é possível acompanhar o relacionamento entre a tabela contendo o BFILE e uma tabela de usuários que guarda quem fez o upload.

Como um exemplo, primeiramente é preciso atualizar a tabela utilizada nos exemplos anteriores.

ALTER TABLE mylobs ADD( mybfile BFILE )

Após isso é necessário registrar um atalho para um diretório no Oracle e dar permissões de leitura a este.
CREATE DIRECTORY IMAGES_DIR AS '/home/public_html/images'
GRANT READ ON DIRECTORY IMAGES_DIR TO usuario_do_banco

Agora é possível inserir BFILEs com:



Se for necessário, é possível ler o conteúdo de um BFILE através do Oracle utilizando a mesma maneira realizada com os CLOBs. Alternativamente, se for necessário buscar o nome dos arquivos, é possível acessar diretamente do sistema de arquivos, utilizando uma chamada à função DBMS_LOB.FILEGETNAME:



Ainda é possível utilizar a função DBMS_LOB.FILEEXISTS para descobrir quais arquivos foram deletados pelo sistema operacional mas ainda estão referenciados no banco da dados.

Conclusão
O texto original em inglês foi escrito pelo desenvolvedor Harry Fuecks e está disponível no site da Oracle.
No link há outros artigos sobre integração PHP e Oracle.

18 fevereiro 2009

Josh Sharp: Utilize um Framework PHP

Há sempre um grande debate sobre usar um framework como Zend, CakePHP, Code Igniter ou qualquer outro framework. Há vantagens e desvantagens ao utilizar um, e muitos desenvolvedores tem a sua própria opinião sobre isso.

Josh Sharp é um desenvolvedor web que acredita que o PHP é muito fácil de se aprender, e que utilizar um framework traz um ganho de tempo e elimina erros ao programar.

"A facilidade de uso do PHP é também uma desvantagem, pois há menos restrições na estrutura do código que você está escrevendo, portanto é muito mais fácil escrever código ruim. Há uma solução: Utilize um framework"

Frameworks PHP ajudam a padronizar a maneira que você programa, e pode promover um grande ganho de tempo no processo de desenvolvimento. Você pode ler mais sobre os benefícios de utilizar um framework PHP no blog do Josh

Obs.: Este post é o oitavo de uma série que mostra dicas de desenvolvimento pelos mestres do PHP. O post original em inglês foi feito pelo Glen Stansberry e pode ser visto clicando aqui

15 fevereiro 2009

Jack D. Herrington: Utilize processamento em lote

Jack Herrington não é um estranho no PHP e no mundo do desenvolvimento. Escreveu mais de 30 artigos para a prestigiada IBM developerWorks, Jack ainda publicou livros como PHP Hacks.

Herrington recomenda a utilização de processamento em lote e utilização do cron para aquelas tarefas que podem rodar em background.

"Certamente, em alguns pequenos casos, é mais fácil utilizar uma thread para ajudar a realizar pequenos trabalhos. Mas é fácil ver que com o uso de ferramentas convencionais -- cron, MySQL, Orientação a Objetos no PHP e PEAR::DB -- criar trabalhos em lote no PHP é algo simples de se implementar"

Jack acredita na simplicidade, e ao invés de utilizar threading nos servidores ele utiliza a simples combinação de cron, PHP e MySQL para processar tarefas em background.

"Eu já fiz os dois, e acredito que o cron tenha vantagem no princípio KISS - Keep it Simple Stupid(Faça de maneira simples, estúpido). Ele deixa o processamento em background simples. Ao invés de ter processamento de tarefas multithread, com aplicações que executam para sempre, e depois nunca liberam memória, você tem um script em lote que o cron executa. O script determina se tem algo a fazer, faz se tiver, e então termina.. Você não precisa se preocupar com liberação de memória."

Obs.: Este post é o sétimo de uma série que mostra dicas de desenvolvimento pelos mestres do PHP. O post original em inglês foi feito pelo Glen Stansberry e pode ser visto clicando aqui

14 fevereiro 2009

Joey Sochacki: Utilizar melhor as funções de filtros do PHP

Enquanto Joey Sochacki não é um grande nome quanto Matt Mullenweg na comunidade PHP, ele é um desenvolvedor que compartilha dicas no seu blog Devolio

Joey descobriu que, mesmo com as toneladas de filtros que podem ocorrer ao escrever códigos PHP, poucos programadores utilizam as funções de filtro do PHP

"Filtrar informações. Todos nós temos que fazer isso. A maioria, se não de todos nós, desprezam a fazê-lo. No entanto, a maioria são funções filter_* do PHP, que nos possibilita fazer todo o tipo de ordenação e validação. Utilizando essas funções, nós podemos validar tipos de dados, URLs, endereços de email, endereços de IP, retirar caracteres inválidos e muito mais, com relativa facilidade"

Filtrar pode ser complicado, mas pode ajudar imensamente. Com a ajuda de Joey você irá aprender como instalar os filtros e então filtrar quase tudo, tirando vantagem do imenso poder dos filtros do PHP.

Obs.: Este post é o sexto de uma série que mostra dicas de desenvolvimento pelos mestres do PHP. O post original em inglês foi feito pelo Glen Stansberry e pode ser visto clicando aqui

11 fevereiro 2009

Chad Keiffer: Aumentar a velocidade de desenvolvimento PHP com uma IDE, Templates e Snippets

Quando Chad Kieffer não está ocupado trabalhando em interfaces e administrando bancos de dados, ele está dando conselhos no seu blog 2 tablespoons.

Chad acredita que utilizando uma IDE como Eclipse PDT(Pacote de desenvolvimento PHP para o Eclipse), combinando com templates e snippets, a velocidade de desenvolvimento pode ser aumentada.

"Longas listas de tarefas e prazos curtos fazem com que os desenvolvedores não se familiarizem com funcionalidades avançadas que suas ferramentas proporcionam. Isso é uma vergonha pois algumas funcionalidades como Templates podem realmente reduzir o tempo de codificação e os erros."

Obs.: Este post é o quinto de uma série que mostra dicas de desenvolvimento pelos mestres do PHP. O post original em inglês foi feito pelo Glen Stansberry e pode ser visto clicando aqui

10 fevereiro 2009

1º Encontro do GOPHP em 2009

O Grupo de Usuários PHP de Goiás - GOPHP - irá realizar seu primeiro encontro no sábado, dia 14/02/2009, às 18:00 no Cantinho Frio em Goiânia.
O encontro terá como um dos objetivos principais a apresentação e integração de novos membros do grupo.

Até agora já são mais de 20 integrantes confirmados para o encontro.

Maiores informações

Local: Cantinho Frio
Data: 14/02/2009
Horário: 18:00
Mapa: http://maps.google.com/maps/ms?ie=UTF8&hl=pt-BR&msa=0&msid=113253769484703174698.00043f0cfcc38cbe74bb4&ll=-16.678869,-49.240186&spn=0.008386,0.019312&z=16

Pauta:
1 - Reorganização do Organograma com definição de responsabilidades
2 - Apresentação de novos membros
3 - Organização de equipe responsável pelo hacklab GOPHP do Flisol

Participantes:
1 - Otávio Calaça
2 - Walker de Alencar(Talvez)
3 - Almir Neto
4 - David Moraes
5 - Andressa Martins
6 - Leonardo Medeiros
7 - Aurélio Luis
8 - André Rodovalho(Talvez)
9 - Luciana Oliveira
10 - Bruno Leonardo
11 - André Luiz
12 - Carlos Antônio
13 - Fernando Pedro
14 - Silas Júnior
15 - Gilberto Santos
16 - Pedro Ivo B. Gimenes (Através de videoconferência via Gtalk)
17 - João Pedro
18 - Guilherme Euler(Talvez)
19 - Guilherme Pereira
20 - Diego Tolentino
21 - Alessandro Castro
22 - Allan Marmo
23 - Hugo Seabra
24 - Jivago Medeiros

Se você trabalha ou se simpatiza com PHP, não perca essa oportunidade de conhecer outros desenvolvedores goianos.
Para quem ainda não é membro do grupo, cadastre-se em: http://groups.google.com/group/gophp

07 fevereiro 2009

Ben Balbo: Invista em cache de informações

Ben Balbo está escrevendo para o Site Point, um site de tutoriais pare desenvolvedores e designers. Ele faz parte do comitê do Grupo de Usuários de PHP de Melbourne e do Clube de Desenvolvedores de Software Livre. Não é surpresa que ele recomende que um maior tempo seja gasto com cache no PHP.

"Se você tem um site que é predominantemente estático, como um blog, que é administrado por um sistema gerenciador de conteúdo, este terá pequenas alterações apenas, e com um pequeno tempo adicional gasto, é possível ter grandes benefícios de aumento de performance. Utilizar cache para sites mais complexos que geram conteúdo baseado no usuário, como um portal ou um comércio virtual, será um pouco mais complicado, porém os benefícios ainda serão claros"


Há várias técnicas de cache no PHP.
- Chamadas de funções com cache
- Setar cabeçalhos com data de expiração
- Utilizar cache em downloads no Internet Explorer
- Cache através de sistemas de template
- Cache_Lite
e muitos outros. Por causa da natureza dinâmica de linguagens como o PHP, cache é um ponto crítico para guardar aquelas partes da página que são acessadas frequentemente porém não são atualizadas sempre.

Obs.: Este post é o quarto de uma série que mostra dicas de desenvolvimento pelos mestres do PHP. O post original em inglês foi feito pelo Glen Stansberry e pode ser visto clicando aqui

04 fevereiro 2009

Dave Child: Nunca, jamais acredite nos usuários

Dave Child é a mente por trás do site recentemente renomeado Added Bytes(Anteriormente ilovejackdaniels.com), que exibiu as excelentes Planilhas de Dicas para várias linguagens de programação feitas por Dave.
Dave trabalhou em várias empresas de desenvolvimento no Reino Unido e se estabeleceu como uma autoridade no mundo da programação.

Ele oferece alguns sábios conselhos sobre escrita de código seguro em PHP: Não acredite em seus usuários. Eles podem te machucar!

"A regra principal para desenvolvimento web é: Nunca, jamais, acredite nos seus usuários.
Assuma que todo pequeno pedaço de informação que seu site coleta de um usuário contém código malicioso. SEMPRE!
Isso inclui informação que você acha que checou com validações no cliente, por exemplo utilizando JavaScript.
Se você consegue controlar isso, será um bom começo. Se a segurança no PHP é importante para você, esse é o ponto principal a aprender.
Seja paranóico! Se você assume que seu site nunca será atacado, ou jamais enfrentará problemas, então algo está errado e você pode ter sérios problemas.
Porém se você acredita que cada visitante do seu site está pronto para atacar e que você está sempre em guerra, isso irá te ajudar a manter seu site seguro e preparado caso algo dê errado."


Obs.: Este post é o terceiro de uma série que mostra dicas de desenvolvimento pelos mestres do PHP. O post original em inglês foi feito pelo Glen Stansberry e pode ser visto clicando aqui

Base de dados de CEPs disponível de graça!

Acho que todo mundo já passou por uma situação na qual há necessidade de preencher um endereço baseado em um CEP.
Infelizmente os Correios não proporcionam uma busca fácil em sua base para essa finalidade. Muito menos disponibilizam essa base de CEPs gratuitamente.
Portanto a solução mais utilizada é procurar na internet uma base de dados roubada adquirida de terceiros, ou então contratar o serviço de alguma empresa.

Para resolver, ou pelomenos amenizar essa situação, uma empresa de consultoria em software livre chamada (PC)² desenvolveu uma solução para acesso a essas informações.

Chamada de CEP Livre, essa solução é bastante simples de se utilizar. Basta fazer uma requisição HTTP a um endereço e receber, em formato XML ou CSV, as informações de um CEP.

O mais interessante dessa solução é que ela é colaborativa, ou seja, qualquer usuário pode adicionar um novo CEP no sistema, aumentando a base de dados e, além disso é gratuita, sem a necessidade de cadastro.
Por enquanto as informações somente podem ser acessadas online, mas a empresa promete lançar uma solução offline.

O CEP Livre pode ser utilizado gratuitamente em sistemas pessoais ou comerciais.

Para visualizar as informações de um CEP devem ser utilizadas as URLs abaixo:

1 - Resposta em XML - http://ceplivre.pc2consultoria.com/index.php?module=cep&cep=01311-000&formato=xml
2 - Resposta em CSV - http://ceplivre.pc2consultoria.com/index.php?module=cep&cep=01311-000&formato=csv

Para adicionar um CEP à base de dados do CEP Livre, acesse a URL abaixo:
http://ceplivre.pc2consultoria.com/index.php?module=cep&event=formeditacep

Obs.: As informações cadastradas são validadas pela empresa antes de serem adicionadas à base.

Para mais informações clique aqui

03 fevereiro 2009

Está chegando o PHP TestFest 2009

Esse ano, o PHP TestFest será realizado de 01/04/2009 até 30/06/2009.
O TestFest é um período onde vários grupos de usuários de PHP do mundo inteiro irão dedicar um tempo para realizar testes no PHP. O objetivo é ajudar os desenvolvedores da linguagem a realizar vários testes, descobrir bugs e melhorar a performance da linguagem.

Além de ajudar a linguagem a estar em constante melhoria, os desenvolvedores podem ganhar uma conta de email @php.net e os maiores contribuintes irão ganhar 10 elePHPants.

Esse ano não haverá uma data definida para facilitar a participação de uma maior quantidade de grupos.

Se você quer participar, procure o grupo de usuários de PHP da sua região(http://www.php.org.br) ou acesse o site do evento para maiores informações.

31 janeiro 2009

Matt Mullenweg: Utilize muitas tabelas com PHP e MySQL para escalabilidade

Ninguém precisa questionar a autoridade de Matt Mullenweg com PHP. Ele simplesmente desenvolveu o sistema de blogs mais popular do mundo: Wordpress.

Depois de criar o Wordpress, Matt e companhia lançaram o Wordpress.com, um site gratuito de blogs baseado no Wordpress MU. Atualmente o Wordpress.com hospeda mais de 4 milhões de blogs.
Se alguem sabe criar como criar um site com boa escalabilidade, é o Matt. Em 2006 ele explicou porquê o Wordpress utiliza uma tabela do MySQL separada para cada blog, ao contrário de usar uma tabela gigante para todos os blogs.

"Nós testamos essa técnica para o MU, mas descobrimos que é muito 'caro' escalar após um determinado ponto. Com estruturas monolíticas, você esbarra em uma parede baseada no seu hardware. No MU, os usuários são divididos e é possível particionar facilmente, por exemplo no WordPress.com nós temos usuários particionados entre 4096 bases de dados, o que te permite escalar eficientemente para centenas de milhares e até milhões de usuários com tráfego extremamente alto."


Poder migrar essas tabelas permite que o código e os blogs sejam executados mais rapidamente. Paralelamente, a utilização de cache e o uso inteligente de banco de dados, Matt mostrou que sites extremamente populares como Facebook e Wordpress.com podem administrar incríveis quantidades de informações

Obs.: Este post é o segundo de uma série que mostra dicas de desenvolvimento pelos mestres do PHP. O post original em inglês foi feito pelo Glen Stansberry e pode ser visto clicando aqui

30 janeiro 2009

Participe da Pesquisa Salarial de Profissionais de TI

O blog Profissionais TI, juntamente com nosso parceiro SilasIUB estão promovendo uma pesquisa salarial para profissionais de TI.

Mas porquê fazer mais uma pesquisa, já que existem tantas por aí? Por um simples detalhe. A maioria das pesquisas não consegue mensurar corretamente os valores dos salários por regiões.

Para nós goianos por exemplo, as pesquisas mais conhecidas como da InfoExame são furadas. Como é utilizada uma média nacional, o valor fica muito acima do real. E infelizmente ainda não tivemos nenhuma pesquisa exclusivamente para cá.

Portanto um dos objetivos principais dessa nova pesquisa é traçar a média por estado ou cidade, exibindo resultados reais.

Porém para a pesquisa funcionar, precisamos de uma quantidade considerável de participantes para obter um resultado confiável.

A pesquisa é bem simples, contando com apenas 5 campos, e irá consumir menos de 2 minutos do seu tempo.

Participe e nos ajude a divulgar essa iniciativa.

Clique aqui para participar da pesquisa!

O GDrive vem aí!

Parece que finalmente, após anos de espera, o Google Drive vai sair do papel.
Há muito tempo todos aguardam pelo lançamento do produto, que deve fazer parte do Google Pack e funcionar como um disco virtual para o armazenamento de qualquer tipo de arquivo pelos usuários do Google.

Segundo o blog Google Discovery, a descrição oficial do produto deve ser: Backup de arquivos online e armazenamento.
Uma breve descrição do produto foi encontrada e explica o que é o GDrive.

"O GDrive fornece armazenamento confiável para seus arquivos, incluindo fotos, música e documentos. GDrive permite que você acesse seus arquivos de qualquer lugar, o tempo todo e através de qualquer dispositivo - seja seu desktop, web browser ou telefone celular".

Fonte: Google Discovery

Novos sites sobre PHP no Brasil

Foram lançado mais dois sites sobre PHP no Brasil.

O primeiro é o http://www.PHP.com.br, o portal de entrada sobre PHP no Brasil. Ele traz o resumo dos principais sites temáticos, de revistas, eventos e comunidades nacionais.

O segundo é o http://www.php-obj.com.br, um site temático especialista que aborda exclusivamente assuntos relacionados a orientação a objetos, design patterns e temas relacionados a estes.

29 janeiro 2009

Rasmus Lerdorf: Somente utilize PHP quando for realmente necessário

Não há pessoa que saiba melhor a capacidade do PHP do que seu criado. Rasmus Lerdorf criou o PHP em 1995, e desde então a linguagem se espalhou na comunidade de desenvolvimento de software, mudando a cara da Internet.
No entanto, Rasmus não criou o PHP com essa intenção. O PHP foi criado com o objetivo de solucionar problemas de desenvolvimento web.

"A motivação nunca foi filosófica ou narcisística. Foi puramente um caso de necessidade de uma ferramenta para solucionar problemas reais relacionados a Web. Em 1994 as opções eram muito limitadas em questão de ferramentas para desenvolvimento Web."

No entanto, você não pode utilizar PHP para tudo. Lerdorf é o primeiro a admitir que o PHP é somente uma ferramenta e tem suas limitações.

"Utilize a ferramenta correta para o trabalho. Já estive em empresas que utilizam o PHP em todas as ocasiões, porém o PHP não foi feito para ser uma linguagem de propósito geral, apropriada para todos os problemas."

Tentar utilizar o PHP para tudo não é eficiente, e certamente não é a melhor utilização do seu tempo como desenvolvedor web. Não tenha medo de utilizar outras linguagens se o PHP não estiver funcionando para seus projetos.

Obs.: Este post é o primeiro de uma série que mostra dicas de desenvolvimento pelos mestres do PHP. O post original em inglês foi feito pelo Glen Stansberry e pode ser visto clicando aqui

23 janeiro 2009

6ª Edição da PHP Magazine Disponível para Download

A PHP Magazine disponibilizou a sua 6ª edição, desta vez voltada para o público iniciante. Nos artigos relacionados, discute-se a integração de diferentes tecnologias, utilização de biblioteca gráfica,mapeamento objeto-relacional, transferência de arquivos e uma simples aplicação com PHP-GTK.

Para fazer o download da revista, clique aqui

22 janeiro 2009

Por que usar PHP?

Não é à toa que temos no mundo mais de 4.500.000 de desenvolvedores PHP. Mas porque essa linguagem de programação os seduziu?
Seria a velocidade? A facilidade em se desenvolver? A portabilidade? O elePHPant?

Para responder a essa questão e mostrar para as empresas o quanto o PHP pode ser rentável, o Grupo de Usuários de PHP da Irlanda redigiu um documento intitulado PHP White Paper mostrando as vantagens do PHP.
Abaixo segue um resumo do que se trata o documento.

1 - Identidade
O PHP é, assim como Java e .NET, uma linguagem de programação e uma plataforma global.

Como linguagem de programação, PHP tem uma sintaxe bastante parecida com C, Shell, PERL e Java.

Com PHP é possível desenvolver:
- Aplicações Web Dinâmicas(websites, intranets, extranets, etc.)
- Aplicações Desktop(PHP-GTK e PHP4Delphi)
- Rich Clients(PHP-XUL)
- Web Services(SOAP, XML-RPC, REST)
- Scripts de linha de comando
- Tarefas de segundo plano

Cerca de 1000 engenheiros desenvolvem o PHP.

O PHP é Software Livre, distribuído sob uma licença na qual os usuários não são obrigados a publicar seu código.
A portabilidade é uma das maiores vantagens do PHP, possibilitando sua instalação em vários Sistemas Operacionais como: Windows, Linux, Unix, IBM iSeries, SGI IRIX, RISC OS, Netware Novell, Mac OS X e AmigaOS

2 - Estatísticas de uso
Segundo a NetCraft, o PHP é utilizado em um a cada três sites na Internet. Ou seja, mais de 20 milhões de domínios. 35% da Internet roda PHP

Uma das maiores plataformas do mundo é o Yahoo, que utiliza PHP e chega a receber 150 mil visitantes simultaneamente.

3 - PHP para sua Empresa
-> Simplicidade
O PHP é uma linguagem com um modelo de desenvolvimento muito simples. O objetivo inicial do PHP era tornar possível um desenvolvimento rápido sem um treinamento preliminar. Esse objetivo foi alcançado, fazendo com que a maioria das empresas de hospedagem ofereçam PHP nos seus servidores.

-> Adaptabilidade
O PHP usa duas sintaxes. Uma é procedural e a outra é orientada a objetos. A procedural é utilizada por webmasters que trabalham na interface com o usuário.
Já a sintaxe Orientada a Objetos é, propositalmente similar ao Java e C#, com o objetivo de reduzir os custos com treinamento e encorajar a migração para o PHP.

-> Interoperabilidade
O PHP pode instanciar objetos COM, .NET e JAVA, além de disponibilizar mecanismos para comunicação com todos os principais bancos de dados relacionais, assim como com LDAP, XML, Web Services, Lotus Notes, SAP, entre outros.

-> Portabilidade
Disponível para a maioria dos sistemas operacionais, o PHP funciona da mesma maneira que a Maquina Virtual do Java(JVM). Após desenvolver a aplicação, ela irá funcionar imediatamente, sem a necessidade de recompilar, independente de qual sistema operacional está sendo utilizado.

-> Durabilidade
A durabilidade de uma tecnologia depende principalmente da quantidade de usuários. O PHP é utilizado por mais de 4.500.000 desenvolvedores no mundo, fazendo com que sua comunidade seja extremamente forte e atuante.

-> Performance
O PHP tem uma grande performance e estabilidade. A combinação Linux/Apache/PHP é muito forte.

-> Retorno do investimento
Os pontos citados acima resultam em um rápido retorno do investimento. Isso é possível graças à ausência de custos com licenças, pequeno custo com treinamentos, entre outros.

4 - Arquitetura Técnica
Na maioria das vezes o PHP é utilizado com:
- Um servidor Web: Apache ou Microsoft IIS
- Um SGDB(Banco de Dados): MySQL, PostgreSQL, Oracle, SQL Server, etc

A maioria das plataformas utilizam Linux, Apache, MySQL e PHP(Conhecido como LAMP)

A plataforma pode utilizar as seguintes interfaces:
- Web(HTML, WML, etc.)
- Web Services
- Rich Clients, cliente/servidor(PHP-GTK, PHP-XUL, etc.)
- Linha de Comando(CLI)
- Documentos Office(Open Documents, Open XML, PDF, Flash, etc.)

A classe FPDF faz com que documentos PDF complexos sejam desenvolvidos com poucas linhas de código.

-> Mecanismo Interno
O núcleo interno do PHP 5 é o Zend Engine 2. O PHP é feito com uma arquitetura modular, e utiliza os mesmos conceitos do Java e .NET. Um pré-compilador compila o código e envia para a execução em tempo real.
Essa arquitetura permite que engenheiros utilizem ferramentas de otimização(opcode cache).
É possível diminuir o tempo de execução de um script em até 66%. Além disso, o PHP oferece uma API para que seja possível estender suas funcionalidades com módulos adicionais.
Esses módulos permitem uma conexão com um banco de dados ou LDAP, executar componentes Java ou COM, conversar com Web Services utilizando SOAP, entre outros.
O PHP pode ser automaticamente atualizado através do PEAR e PECL.

Independente da interface utilizada, a execução sempre segue o mesmo processo. Primeiramente, o script PHP é interpretado pelo núcleo. É nesse ponto que o PHP vai, por exemplo, conectar com o banco de dados. Depois disso, o fluxo é transmitido para o servidor Web ou o servidor GTK para que seja enviado ao cliente final.

O repositório de classes PEAR oferece mais de 300 componentes adicionais, que são simples de instalar e atualizar com um único comando.

5 - Uma plataforma que resolve problemas de integração
-> Muitos conectores
Cerca de 40% dos custos de desenvolvimento estão na integração de aplicações ou fontes de dados. Para reduzir esses custos, o PHP pode conectar diretamente com a maioria dos bancos de dados(Oracle, SQL Server, MySQL, dBase, ODBC, XML, etc.), diretórios(LDAP, etc.), sistemas de pagamentos online(Verisign, Cybercash, Realex, etc.) e protocolos(SMTP, IMAP, FTP, HTTP, TCP, SSH, etc.).

-> Comunicação via COM, .NET e Web Services
O PHP é o campeão no quesito de integração de baixo nível. A plataforma pode facilmente instanciar objetos COM, classes Java e .NET. PHP 5 com SOAP tem uma camada de alto nível para ler ou criar Web Services.

6 - PHP, J2EE e .NET: Utilização concorrente
Graças a habilidade de trabalhar bem com COM e Java, PHP está se tornando um padrão no gerenciamento da camada gráfica de aplicações que utilizam múltiplas linguagens de programação. Por exemplo a Lufthansa(Uma das maiores empresas de transporte do mundo) utiliza PHP para exibir a interface visual, e J2EE para a camada de negócios.

-> Comunicação com .NET
É possível instanciar componentes COM. A clase(ainda experimental) dotnet_load() permite que um componente Microsoft .NET seja instanciado pelo PHP.
Alguns compiladores do PHP para MSIL(código intermediário do .NET) estão em desenvolvimento(PHP Sharp)
Há ainda uma implementação para a plataforma .NET Mono(Software Livre)

-> O grupo de trabalho JSR 223(para chamar objetos Java a partir de outras linguagens) é liderada pela Zend Technologies(Empresa desenvolvedora do PHP).
-> A IBM oferece boas literaturas para o PHP como: "Bringing PHP to Your IBM iSeries Server" e "Developing PHP Application for IBM Data Servers"
-> Há rumores de que a Oracle irá incluir o PHP no "Oracle Application Server".
-> O PHP está disponível para as plataformas Netware 6.x.

7 - O Ecossistema PHP
Após 10 anos de vida, o PHP construiu um grande ecossistema. Algumas ferramentas tornam o desenvolvimento mais fácil e rápido.
A comunidade de Software Livre vem produzindo aplicações empresariais há vários anos. Essas aplicações ajudam empresas a encontrar suas necessidades.

Segue uma lista de exemplos.
-> Desenvolvimento de Software
Dreamweaver, Eclipse, PHPEdit, Zend Studio

-> Otimização
APC, eAccelerator, Smarty, JpCache

-> Administração
phpMyAdmin, phpOracleAdmin, phpSysbaseAdmin, phpPgAdmin

-> Gerenciamento de Conteúdo
Spip, eZ Publish, Joomla, Typo 3

-> Framework
PEAR, Symphony, CakePHP, Prado, Seagull, Zend Framework, eZ Components

-> ERP, webshops
Dolibarr(ERP), GeStock(Gerenciamento de estoque), osCommerce(Comércio Virtual), SugarCRM(CRM)

Como a plataforma PHP atualmente domina a Internet, é muito importante ter acesso a um grande número de recursos, empresas e desenvolvedores.
A Zend oferece uma certificação para desenvolvedores PHP, que certifica que um Engenheiro PHP é totalmente treinado, experiente e utiliza as melhores práticas.

No Brasil a comunidade do PHP é muito grande. O PHP Brasil Comunidades é composto por vários grupos regionais.

Em vários anos o PHP teve poucos avisos de segurança. Utilizado com o Linux e Apache, o resultado é a plataforma mais segura para a Internet.
Como seu código fonte está disponível e está constantemente sendo melhorado pela comunidade, é a melhor tecnologia para proteger informações importantes e confidenciais.

Não é a toa que empresas consagradas como Yahoo, Facebook, Wikipédia que recebem milhões de acessos diários escolheram o PHP!

Fonte: Irish PHP Users Group