Arquivo de Feb/2009

23 FebPsycho Carnival 2009

Mais um carnaval animado em curitiba! Mais um Psycho Carnival! E esse ano teve algumas melhorias bem interessantes:

  • Uma quantidade absurda de bandas (com 4 bandas internacionais)
  • Ingresso com um preço muito convidativo (R$10,00 + uma lata de leite (que pelo menos no sabado, não me parecia ser obrigatório levar)).
  • Um local bem grande para o evento.

Eu fui curtir no sábado (21/02/1984) e gostei bastante do lugar (Novo Operário), foi muito bem escolhido! Era grande e arejado (tudo bem que faltava alguns ventiladores na pista), coube todo mundo bem tranquilo,  a galera só se apertava para ir ao bar (que existia dois, mas mesmo assim as filas eram enormes). Ah! E as 500 primeiras pessoas ganharam um cd dos “The Mullet Monster Mafia” + um zine “Fosforo”.

Os show, como sempre, foram muito bons e o pessoal estava muito empolgado. Nesse dia rolou:

  1. Chibuku (Alemanha)
  2. Sick Sick Sinners (Curitiba)
  3. Big Nitrons (Santos)
  4. Damn Laser Vampires (Porto Alegre)
  5. Billy Bastardos (Londrina)
  6. Los Primitivos (Argentina)

De todas essas, Los Primitivos, foi a que mais me chamou a atenção. Eu não conhecia a banda, mas os caras mandam um rockabilly bom pra caramba! Muito dançante e animadora a música. Banda muito boa mesmo.

Outro show que gostei muito foi Sick Sick Sinners e a galera agitou muito também.

Sick Sick Sinners

Sick Sick Sinners

No domingo, rolou uns shows ao ar livre e de graça, nas Ruínas de São Francisco . O pessoal se reuniu lá depois do Zombie Walk  (que eu perdi). Mas tinha bastantes zumbis no show e todos estavam muito bem produzidos ^^

Hoje é o ultimo dia, que vai contar com Klingonz (Uranus-UK) e Cenobites (Holanda).  É isso, fico devendo fotos. Só tirei aquela mesmo e ainda foi com o n95.

^^

19 FebTestes automatizados com Zend Framework – Parte 1

Automatizar os testes, em suas aplicações web, é um importante passo no sentido de ter a confiança necessária para realizar as alterações em sua aplicação e manter a mesma confiança para entregar um produto com qualidade e livre de problemas. Com o Zend Framework gerenciando seus testes (através do PHPUnit), você pode construir um conjunto muito bom de “caso de testes” para sua aplicação sem muito esforço.

A “Parte 1″, dará para vocês todas as informações básicas, que são necessárias para começar a escrever seus próprios testes em suas aplicações que utilizam o Zend Framework. Na parte 2, irei fornecer para vocês alguns exemplos de uso real, sobre outras formas de se escrever testes.

Vamos direto para o assunto.

Para o exemplo abaixo, eu vou utilizar um controller real de um dos meus projetos. Esse Controller manipula atividades nas contas, como por exemplo: logins, logouts, registros e confirmações. Nós vamos usar um banco de dados de teste que é um clone da nossa base de produção e o “Doctrine” para gerenciar o ORM (desculpe-me Zend_Db:()). Eu vou assumir que você está usando o Zend Framework (1.6+) como layout do projeto e que esta um pouco familiarizado com o Zend_Config e usando um plugin de inicialização (que é criado por padrão, no Zend Studio for Eclipse 6.1).

Ler Mais…

18 FebZend Server

A Zend anunciou hoje que tornou pública uma versão beta de seu novo produto: Zend Server. Ele é totalmente gratuíto para qualquer um que realizar o download e o testar (Os feedbacks são sempre bem vindos!). 

O Zend Server foi concebido para ser um pacote com os softwares necessários para configurar rapidamente o Apache com PHP+ZF+PHP Optimizer. Ele vem com uma interface que lhe permite configurar facilmente o seu PHP.  Os pacotes estão disponiveis para diversas plataformas (Win, Mac, Linux).

Estão sendo lançadas 2 versões. Uma FULL (que após o Beta se tornará um produto comercial) e a versão CE que será uma versão gratuíta para ser usada conforme você desejar.

A versão FULL, irá possuir alguns itens a mais (como já era de se esperar)

  • Page Caching
  • Monitoring
  • Support & Hot Fixes

Links:
Saiba mais
Download

16 FebIntegrando o Zend Framework com o Dojo – Parte III

Dando continuidade a nossa integração, vamos dar uma rapida olhada na criação de layouts utilizando o dojo toolkit. Basicamente ele vai construir todos os blocos que formam o seu layout. Criando os DIVs com os IDs que você definir (que terão o estilo presente no css). O código final fica bem interessante e você já vai se habituando a utilizar os helper dos dojos e seus view.

Para esse exemplo, vamos utilizar novamente o Zend_Layout para abstrair o nosso html. Exemplo:

teste.phtml

<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xml:lang="pt-br" xmlns="http://www.w3.org/1999/xhtml" lang="pt-br">
<head>
    <link rel="stylesheet" type="text/css" href="/estilos/teste.css">
	dojo()->isEnabled()){
            $this->dojo()->setLocalPath('/js/dojo/dojo.js')
                         ->setDjConfig(array(
                                          'parseOnLoad' => true,
                                          'extraLocale' => array('pt-br', 'en-us')
                                       ))
                         ->addStyleSheetModule('dijit.themes.nihilo');
        }
	?>

	dojo(); ?>


borderContainer()->captureStart('corpo', array('design' => 'headline'));

/* CABEÇALHO: INICIO */
echo $this->contentPane(
    'cabecalho',
    'TESTE DE LAYOUT COM DOJO'
);
/* CABEÇALHO: FIM */

/* BARRAS_EXTRAS: INICIO */
echo $this->contentPane(
    'caixa_mensagem',
    'CAIXA DE MENSAGEM'
);
/* BARRAS_EXTRAS: FIM */

/* CONTEUDO: INICIO */
echo $this->contentPane(
    'conteudo',
    $this->layout()->content
    .$this->inlineScript()
);
/* CONTEUDO: FIM */

/* MENU LATERAL: INICIO */
$barra_lateral =  $this->contentPane(
    'menu_lateral',
    'Opções
  1. Opção 1
  2. Opção 2
  3. Opção 3
  4. Opção 4
  5. Opção 5
' ); echo $this->contentPane( 'box_menu_lateral', $barra_lateral ); /* MENU LATERAL: FIM */ echo $this->borderContainer()->captureEnd('corpo'); /* CORPO: FIM */ ?> </body> </html>

Explicando um pouco essa sopa de código. Logo no início do arquivo, adicionamos o Dojo em nosso layout e setamos para que ele utilize o tema chamado “nihilo”. É um tema bem interessante, para se trabalhar em escala de cinza.

Na sequência, criamos um “borderContainer” Start. Desse trecho, até o “borderContainer” End, ele vai capturar todo o código e jogara dentro de um div chamado “corpo”.




Seguindo a ordem das coisas, o próximo elemento a ser criado é o cabeçalho, seguido pela barra de mensagens. O “conteudo” e a “barra_lateral” são os próximos da lista. Eles ficarão um ao lado do outro (veremos isso logo a seguir no css).

Se você já percebeu o padrão de uso, o primeiro parametro do elemento é sempre o seu ID enquanto o segundo é o seu valor.

É o elemento “conteudo”:

/* CONTEUDO: INICIO */
echo $this->contentPane(
    'conteudo',
    $this->layout()->content
    .$this->inlineScript()
);
/* CONTEUDO: FIM */

que irá receber a saída da view do seu sistema. Os outros DIVs estão com os valores fixo, mas eles podem ser facilmente substituidos utilizando “placeholders” ou algum helper (para criar o menu por exemplo).

Para testar perfeitamente esse código, crie também esse arquivo de estilo:

teste.css

/* TAGS GENERICAS:INICIO */
body{font:12px verdana,arial,tahoma;background:#ffffff;}
ul{list-style:none;}
h3{font:13px verdana,arial,tahoma;color: #7172A3;font-weight: bold}
/* TAGS GENERICAS:FIM */

/* ELEMENTOS DO LAYOUT:INICIO */
#cabecalho{height: 40px; color: #ffffff; background-color: #794256;font-family: Georgia,"Times New Roman","Bitstream Charter",Times,serif;font-size: 22px;padding: 10px;}
#caixa_mensagem{color: gray; background-color: #fffbcc;font-family: verdana, arial;font-size: 11px;padding: 10px;border-top: 1px solid #e6db55;border-bottom: 1px solid #e6db55;margin-top: 2px}
#caixa_mensagem div{height: 15px;}
#conteudo{float: left; background-color: black; padding: 3px;margin-top: 3px}
#menu_lateral{background-color: silver; padding: 3px;}
#box_menu_lateral{float: right; width: 230px; background-color: black; padding: 3px;margin-left: 10px;margin-top: 3px}
/* ELEMENTOS DO LAYOUT:FIM */

Se tudo correu bem, você terá algo parecido com isso:

Exemplo de layout com dojo

Exemplo de layout com dojo

*OBS: O texto dessa screenshot está na view que chamei.

Por fim, acredito que fora o carater educativo do dojo layout é possivel se virar muito bem sem ele. Mas para um sistema totalmente integrado e interativo com dojo, ele é fundamental. Mas se me permitem uma ultima dica: Utilizem esse aprendizado apenas nas views e deixe o dojo layout amadurecer mais.

^^

08 FebDojo Toolkit (ajax): Submetendo um form via POST

Irei demonstrar nesse pequeno tutorial, como é fácil enviar os dados de um formulário pelo método POST, utilizando o Dojo Toolkit para gerenciar as requisições http (xhr ou ajax).

Para o nosso exemplo, crie essa função genérica para envio dos dados:

function enviaForm(formulario_url, formulario_id){
	var config = {
	        url: formulario_url,
	        load: function(data){
			 /* retorno da informação. Você pode chamar uma outra função aqui para processar os dados de retorno da requisição, que estão contido na váriavel "data" */
	        },
	        error: function(data){
	                console.debug("An error occurred: ", data); /*Em caso de erro joga no console*/
	        },
	        timeout: 2000, //timeout da operação
	        form: formulario_id
	};

	dojo.xhrPost(config); /* Executa a requisição  */

}

Como vocês já devem ter percebido, é uma função bem pequena e simples (apesar de bastante útil). Acredito que só com os comentários contidos nela, você já consiga identificar o que cada bloco de comando é responsável em tratar. Para executa-la, é só adicionar sua chamada em um evento de sua preferência. Como por exemplo:

	Enviar dados

Aonde:

  1. /mamifero/cadastrar é a url que você enviará os dados do formulário.
  2. form_cadastro_mamifero é o id do form fictício de cadastro de mamíferos.

Simples não? Utilizando uma função genérica desse tipo, fica bem mais tranquilo trabalhar em sistemas dinâmicos. Principalmente se você der uma pequena implementada no atributo “load” (criando uma função genérica de tratamento de erros/mensagens, por exemplo) e com seus scripts server-sides sempre retornando dados padronizados, você consegue um bom resultado com apenas 2 pequenas funções.

^^

03 FebTestando a integração do Jquery com o Zend Framework

Desde a versão 1.7.0 do Zend Framework, está disponível o suporte a Jquery como uma alternativa à integração do Dojo Toolkit existente.

Atualmente o Jquery pode ser integrado em sua aplicação por três maneiras diferentes:

  • View helper para ajudar a configurar o ambiente do jquery (incluir o script basicamente)
  • Helpers do  Zend_view especifícos para o Jquery
  • Elementos específicos para o Zend_Form

É essa integração com o Zend_form que vamos ver agora.

OBS:  Sempre lembrando que a pasta ZendX se encontra dento de extras/librarys no zip do zendframework mais recente (versão full)

Instalando
Levando em consideração que você já possui o ZF rodando, baixe o jquery e um tema para o ui do jquery (http://ui.jquery.com/themeroller/). Descompacte os dois pacotes dentro de sua pasta js em public. No meu caso ficou assim:

public/js/jquery/
public/js/jqueryui/

Configurando o view
Com os arquivos em seus devidos lugares, devemos agora configurar nosso view para jogar os comandos jquery. Notem que é igual a configuração do dojo, algumas coisas eu tentei sem olhar a documentação, somente por já conhecer a integração com o dojo.

teste.phtml

<?php
if ($this->jquery()->isEnabled()){

$this->jquery()->setLocalPath('/js/jquery/jquery.js')->setUiLocalPath('/js/jqueryui/jquery.ui.all.js')->addStylesheet('/js/jqueryui/theme/ui.all.css');
}

echo $this->jquery();

?>

Agora, vamos partir para o controller. É aqui que iremos pegar o form (que será criado mais adiante) e inseri-lo no template.

testeController.php

<?php

class TesteController extends Zend_Controller_Action
{
protected $_form;

public function init()
{
ZendX_JQuery::enableView($this->view);
}

public function getForm()
{

$formid = 'fteste';
$this->_form = new TestejqueryForm(array(
'action' => '/teste/salvar',
'method' => 'post',
'id' => $formid,
));
}
return $this->_form;
}

public function indexAction()
{
$this->view->form = $this->getForm();

}
}

O form propriamente dito:

Fjquery.php

<?php
class TestejqueryForm extends ZendX_JQuery_Form
{
public function __construct($options=null)
{
parent::__construct($options);

$campo = $this->createElement('DatePicker', 'data_nasc');
$campo->addValidator('NotEmpty')
->addValidator('StringLength', true, array(1,10))
->setJQueryParam('dateFormat', 'dd/mm/yy')
->setRequired(true)
->setLabel('Data de nascimento');
$this->addElement($campo);

$campo = $this->createElement('Slider', 'teste_slider');
$campo->addValidator('NotEmpty')
->setJQueryParams(array('defaultValue' => '75'))
->setRequired(true)
->setLabel('Jquery Slider');
$this->addElement($campo);

}
}

E por fim, de um echo do form no seu view

   <?php echo $this->form ?>

Esse é o resultado dos códigos acima:

zendx_jquery

zendx_jquery

Conclusão

Com certeza o ZendX_JQuery tem muito a evoluir. Ao menos no quesito form, ele esta muito crú. Nem de perto possuí todas as funcionalidades que a integração com o dojo proporciona. Mas devo confessar que não li sobre o motivo dessa integração e nem seus objetivos. Talvez o lance principal esteja nos helpers mesmo, para facilitar o uso apenas.

Na screen que eu tirei, percebe-se que o calendário e o slider se fundem, quando o calendário deveria sobrepor os outros elementos. Outro problema é um erro que o firebug acusa sempre que eu tento trabalhar com o slider. Cada vez que vou arrastar o ponteiro ele da o erro, dizendo que não possui uma função chamada. Isso ocorreu também com os elementos “AutoComplete” e “Spinner”, mas esses infelizmente nem chegaram a aparecer na tela. Não sei responder se acabei fazendo algo errado com esses elementos ou se é um problema na integração. Se alguém teve mais sorte que eu, agradeceria as explicações.

Resumindo tudo. Ainda fico com o Dojo. Possui mais opções de elementos e uma integração muito mais concreta. Próximo teste no Jquery com ZF só daqui algumas boas atualizações!

^^

02 FebDica rápida: Dojo ShrinkSafe

Dojo ShrinkSafe é o compactador de javascript que o pessoal da DojoToolkit criou e utiliza.

Em uma das layers que compilei, consegui transformar um arquivo de 680kb (sem compactação) em apenas 245kb. É uma mudança de mais de 50%. Otimizei o dojo, diminuindo o número de requisições que ele faz e ainda por cima diminui o tamanho da layer personalizada.

Se você está utilizando Dojo (ou não)  em seus projetos, recomendo que compacte seus scripts personalizados sempre com o ShrinkSafe. Assim ninguém irá conseguir lêr eles e você terá sempre um código compactado e leve.

link: http://shrinksafe.dojotoolkit.org/

SEO Powered by Platinum SEO from Techblissonline