10 de jun. de 2015
20 anos de PHP
Comecei a trabalhar com desenvolvimento web em 2005, em Fortaleza no Ceará, quando um colega de faculdade me deu uma oportunidade de estágio na empresa onde tinha uma sociedade, foi um ótimo período de aprendizado e amizades, trabalhei nesta empresa com ASP 3.0, VBScript e Microsoft SQL Server 2000 (se não me engano), após isso passei um curto período em outra empresa, trabalhando com Java (web), realizei manutenção em um sistema com Struts, Hibernate e outras libs Java, se não me falha a memóri, foi nesta empresa que começou meu contato com PHP, entre estudos e projetos pessoais comecei a aprender, e também nos testes de alguns frameworks (Zend, CakePHP, ScriptCase - se podemos chamar de framework, e outros que não me recordo) para análise e adoção de um deles para uso na empresa, e criação das bases dos sistemas que viríamos a produzir.
Minha terceira empresa, tive contato com alguns sistemas em Java, mas foi onde utilizei de forma mais intensa o PHP, pois foi onde utilizei a fundo bibliotecas e frameworks PHP, chegando a implementar o framework base da empresa para sistemas produzidos pela mesma. Lembro que adotamos o Zend Framework 0.9.* beta como base desse nosso framework, utilizando em sua maioria Oracle como SGBD, alguns sistemas utilizavam Microsoft SQL Server 2000 ou MySQL, e uso pesado de interfaces ricas, usando componentes como os do ExtJS. Foi uma ótima experiência de alguns anos, e vários sistemas de sucesso produzidos, assim como um aprendizado constante.
Foi nessa época que começou a nascer a comunidade PHP cearense, batizada na época de CEPUG (Ceará PHP Users Group - na linha do CEJUG pra Java), cheguei a participar de praticamente todos os primeiros encontros, fortalecendo o networking, aprendendo e ensinando bastante coisa legal, cheguei a palestrar em uma das ocasiões, uma experiência bem bacana. Apesar de tudo e da empolgação, a comunidade por lá pelo menos, não foi muito forte, nem unida o suficiente, e entre altos e baixos, tem se mantido até hoje como dá.
A quarta empresa que trabalhei, já foi uma que sempre tive vontade de trabalhar, desde a época da faculdade, empresa de renome, e conhecida pelas ótimas práticas e projetos, lá cheguei a produzir inúmeros sistemas em PHP, utilizando Symfony 1.2.x, ExtJS, Oracle, PostgreSQL entre outros SGBDs, bibliotecas e linguagens (trabalhei um pouco com Java e C# também), foi uma das melhores empresas que trabalhei, conheci ótimas pessoas, aprendi muito mais sobre projetos, processos, CMMI e diversos outros assuntos.
A quinta e atual empresa da minha carreira, continuo trabalhando com PHP, mas agora em outro estado, São Paulo (capital), nesta empresa tive contato com o lançamento de diversos sites, negócios/ventures de naturezas diferentes, e diferente das experiências anteriores, foi um contato com sistemas/sites de uso público, e-commerces, marketplaces entre outros. Foi uma experiência totalmente diferente do que havia tido contato, pude aprender vários coisas novas, desde frameworks novos, bibliotecas, engines de armazenamento, comunicação, ferramentas/serviços de infraestrutura entre várias coisas, tantas que nem sei por onde começar.
De certa forma, sinto que sai um pouco do foco do post, mas a intenção era falar um pouco de tudo que fui exposto ao trabalhar com desenvolvimento web e PHP, e tentar expor um pouco de todas as oportunidades e crescimento que esta linguagem e comunidade tem me proporcionado. Sei que não é das melhores linguagens de programação, mas enfim, nada é perfeito. O que interessa é que ela resolve e bem os problemas que encontrei no caminho.
E você, o que tem a dizer sobre PHP? :)
13 de abr. de 2012
Symfony - Validação de datas com sfForm
No form de exemplo abaixo, pode ser notado os 2 campos de data início (dtini) e fim (dtfim), onde configuro inicialmente o validator de data e hora (
sfValidatorDateTime) para ambos, informando nas opções que a data mínima (min) aceita é o dia atual, na primeira hora do dia, que deverá ser fornecido a hora (with_time), o formato de exibição da data inválida em caso de erro (date_format_range_error), o formato de saída da data pós validação para gravação no banco (datetime_output) e o formato de entrada de data (date_format).Com isso já temos os 2 campos de datas sendo criticados de forma que o usuário não preencha uma data anterior a hoje, para fazer com que a data final seja validada como maior ou igual a data inicial, utilizei o método
bind, já que na instanciação e configuração do form, não temos como ter acesso ao valor submetido. No bind, obtenho então o valor da data inicial, e configuro como sendo a data mínima do validator da data final, pronto!Uma outra possível alternativa é utilizar o
sfValidatorCallback ou talvez o hook de postValidator.Caso visualizem formas melhores de fazer o mesmo, indiquem nos comentários.
class MyEntityForm extends MyEntityBaseForm {
public function configure() {
$dtInput = new sfWidgetFormInputText(array(), array(
'size' => 14,
'maxlength' => 10
));
$this->setWidget('dtini', $dtInput);
$this->setWidget('dtfim', $dtInput);
// Validators
// Recebo as datas no formato dd/mm/aaaa - hh:mm (d/m/Y - H:i)
$options = array(
'min' => date('Y-m-d') . ' 00:00:00',
'with_time' => true,
'date_format_range_error' => 'd/m/Y',
'datetime_output' => 'Y-m-d H:i:s',
'date_format' => '~(?P\d{2})/(?P\d{2})/(?P\d{4})\ \-\ (?P\d{2}):(?P\d{2})~'
);
$dtValidator = new sfValidatorDateTime($options);
$this->setValidator('dtini', $dtValidator);
$this->setValidator('dtfim', $dtValidator);
$this->getWidgetSchema()->setLabels(array(
'dtini' => 'Data Início',
'dtini' => 'Data Fim'
));
}
/**
* (non-PHPdoc)
* @see lib/vendor/symfony/lib/form/sfForm#bind($taintedValues, $taintedFiles)
*/
public function bind(array $taintedValues = null, array $taintedFiles = null) {
$dtIni = isset($taintedValues['dtini'])?$taintedValues['dtini']:null;
if ($dtIni) {
$dt = DateTime::createFromFormat('d/m/Y - H:i', $dtIni);
$this->getValidator('dtfim')->setOption('min',
$dt->format('Y-m-d H:i:s'));
}
return parent::bind($taintedValues, $taintedFiles);
}
}
29 de jan. de 2012
Enviar informações do controller para o layout no Symfony 1.x
Para usar é simples, basta configurar a variável no controller conforme abaixo:
$this->getResponse()->setSlot('myKey', $myVar);
e recuperá-la no layout como abaixo:
$myVar = get_slot('myKey', 'myDefaultValue');
simples e funcional.
Fica a dica.
4 de jan. de 2012
Symfony: Problema com dados na view (escape)
10 de abr. de 2011
Envio de e-mail com Symfony em desenvolvimento
dev:
mailer:
param:
delivery_strategy: single_address
delivery_address: 'meu.email@meu.host.com'
"Descobri" esse single_address navegando aqui.
3 de fev. de 2011
Singleton extensível
abstract class App_Model_Abstract {
protected static $_instance = null;
protected function __construct() {
}
public static function getInstance() {
if (self::$_instance === null) {
self::$_instance = new self();
}
return self::$_instance;
}
final private function __clone() {
}
}
você terá problemas, pois ao tentar recuperar uma instância das classes filhas:
ClasseFilha::getInstance();
você estará na verdade recuperando uma instância da classe pai, tirando o fato dela ser abstrata. Para que funcione conforme esperado precisariamos fazer:
abstract class App_Model_Abstract {
protected function __construct() {
}
final public static function getInstance() {
static $aoInstance = array();
$calledClassName = get_called_class();
if (!isset($aoInstance[$calledClassName])) {
$aoInstance[$calledClassName] = new $calledClassName();
}
return $aoInstance[$calledClassName];
}
final private function __clone() {
}
}
Fica a dica!
22 de set. de 2009
Poster de Zend Framework da MayFlower
Obrigado MayFlower.
Thanks MayFlower! :D
11 de jul. de 2009
Zend_Form: Como renderizar individualmente label e elemento / campo.
Esses dias precisei de um layout de form mais elaborado, e pra não perder as funcionalidades do Zend_Form, pesquisei sobre formas de renderizar um label e um elemento/campo individualmente.
Segue a dica:
[code]
// Renderiza o label do elemento "meuCampo"
echo $form->meuCampo->renderLabel()
// Renderiza o input do elemento "meuCampo"
echo $form->CAMPO->renderViewHelper()
[/code]
[/post_rapido]
Malz ai que o Blogger não tem code highlight! :D
3 de abr. de 2009
Net Negative Producing Programmer
1 de abr. de 2009
Sixth Sense - Tecnologia que pode mudar a maneira como nós vemos o mundo para sempre
21 de jan. de 2009
Últimos links da comunidade Zend Framework
Vejam alguns links abaixo.
http://weierophinney.net/matthew/archives/202-Model-Infrastructure.html
http://weierophinney.net/matthew/archives/201-Applying-ACLs-to-Models.html
http://weierophinney.net/matthew/archives/200-Using-Zend_Form-in-Your-Models.html
http://weierophinney.net/matthew/archives/198-Autocompletion-with-Zend-Framework-and-Dojo.html
http://akrabat.com/2008/12/13/on-models-in-a-zend-framework-application/
Segue também esse ótimo trabalho do Pádraic Brady, um livro online grátis sobre Zend Framework, um ótimo guia para quem está começando e quem é veterano no Zend Framework, com ótimas dicas. Está sendo produzido aos poucos, e já está no capítulo 4, este também sobre models :D.
http://survivethedeepend.com/
Boa leitura.
10 de dez. de 2008
Alterando o idioma do Eclipse do Fedora 10 (Eclipse Ganymede)
Mas notei uma coisa que me chateou, ele veio traduzido pra português :D
Para alguns isso pode ser interessante, pra mim não, quem está acostumado com palavras como "Commit" e vê uma tradução para "Consolidar", se perde, ou no mínimo acha estranho hehe.
Bem, fuçei um pouco, e para não desistir de usar o Eclipse da distribuição, corri atrás.
E descobri que apagando/renomeando as pastas abaixo, o Eclipse fica no idioma "normal", inglês.
/usr/share/eclipse/dropins/babel-pt/
/usr/share/eclipse/dropins/babel-pt_BR/
Fica ai a dica!
6 de dez. de 2008
VIABLOG - Promoção de natal
Deêm uma olhada e tentem a sorte no sorteio! hehe
http://www.viamais.net/blog/?p=590
18 de nov. de 2008
Testes com Wordpress
http://arianmaykon.wordpress.com/
Gostaria da opinião de vocês, qual formato acham melhor? hehe
Esse aqui (blogspot) ta beeem poluído, também entupi o blog de widgets ehhe.
Aguardos comentários! :D
12 de nov. de 2008
[POST RÁPIDO] Recuperando caller de evento DOM com Prototype.js
Antes fazia assim:
// Funciona pra Firefox e IE
var caller = event.target ? event.target : event.srcElement;
E com prototype faço:
var caller = Event.element(event);
Mais referências em: http://www.prototypejs.org/api/event#method-element
6 de nov. de 2008
Sistema de Blog completo com Zend Framework
Muito bem explicado.
O blog dele passou umas semanas fora do ar mas voltou recentemente. Ele já postou falando que irá realizar umas revisões e modificações na aplicação pra acompanhar as novidades do Zend Framework e sugestões dos seus leitores.
Fica a dica, muito boa tanto para programadores que utilizem Zend Framework a muito tempo ou não.
Link: http://blog.astrumfutura.com/comment.php?type=trackback&entry_id=368
3 de nov. de 2008
[POST RÁPIDO] Stored Procedures com Zend Framework
Vamos utilizar como exemplo a seguinte e simples procedure:
create or replace PROCEDURE sp_teste(nome in varchar2, retorno out varchar2)
IS
BEGIN
retorno := 'Seu nome: ' || nome;
return;
END;
Ela apenas recebe uma string e retorna outra.
E para executar a procedure via Zend Framework, podemos utilizar o seguinte código:
try{
// Configura a conexão
$dbConfig = array(
'dbname' => 'SeuTNSName',
'username' => 'SeuUsuario',
'password' => 'SuaSenha');
$db = Zend_Db::factory('Oracle', $dbConfig);
// Cria o statement para chamada da procedure
$stmt = $db->prepare("CALL SP_TESTE(:nome, :retorno)");
// Parâmetro nome para a procedure
$nome = 'Maykon';
$retorno = '';
$stmt->bindParam(':nome', $nome);
$stmt->bindParam(':retorno', $retorno, null, 40); // Variável que receberá o retorno
// Executa a procedure
$stmt->execute();
var_dump($nome);
var_dump($retorno);
} catch(Exception $e) {
echo $e->getMessage();
}
Simples não?
17 de out. de 2008
E nasce o PHP Brasil Comunidades!
O PHP Brasil Comunidade é grupo advindo da necessidade de união das diversas comunidades regionais e que busca criar um movimento uníssono de divulgação e propagação do PHP no Brasil e representar a comunidade brasileira mundialmente.
O grupo que hoje conta com 19 representações (PHP-AL, PHPAM, PHPDF, PHP Fortaleza, GOPHP, PHPES, PHPMG, PHPMS, PHP Pai d´Égua, PHPRS, PHPSC, PHPSP, PHP-PB, OPHPEN, ProPHP, PHP Magazine, PHPPR, bauru-php e PHPCE ) tem como foco principal a criação e apoio a eventos, fóruns, comunidades e outros meios que possam vir a fortalecer a linguagem ou capacitar desenvolvedores, em poucos meses de existência já representou, através de um dos seus membros, a comunidade brasileira na PHP/Zend Conference 2008, além de apoiar e atuar em eventos como o CONAPHP – Congresso Nacional de PHP que será realizado no CONISLI e o COLAPHP – Congresso Latino Americano de PHP que será realizado no Latinoware.
1 de out. de 2008
Desenvolvedores não pensam desenvolvedores seguem casos de uso
Leiam!
Treinamento em Zend Framework
Para ver cliquem em Treinamentos->Desenvolvimento->Zend Framework.