Desenvolvimento rápido

Últimamente está na moda a palavra “ágil”.
Você têm de projetar rápido, desenvolver rápido, implementar rápido para ser considerado ágil.

E apesar do PHP fornecer centenas de funções prontas para diversas tarefas rotineiras, ele perde feio comparado a outras linguagens mais novas como Ruby ou Python, principalmente quando juntamos a estas seus grandes frameworks – Rails no caso do Ruby e Django no caso do Python.

Mas a comunidade PHP tem suas cartas na manga, vários frameworks agilizam o desenvolvimento tanto em aplicações simples como em aplicações sofisticadas.
E são várias as opções. Tem para todos os gostos, nos próximo posts vou falar um pouco deles.

Hoje começo com o CakePHP:

Descrição:
Compete de frente com o Rails. Possui uma base bem estruturada, código bem organizado, comunidade participativa e uma licensa flexivel. Seu grande destaque está no baker, que gera ações básicas (criar,ler,atualizar e apagar entradas) para uma tabela do banco de dados.

Como usa-lo?
É muito fácil, basta ir a página dele e fazer o download do último lançamento. Recomendo a versão 1.2.xx , apesar de ser RC2 (candidata a estável) ela já está bem estável e possui vários melhoramentos em relação a versão 1.1.xx.
Em seguida descompacte o arquivo onde achar melhor (dentro de seu servidor web) e pronto. Agora só falta você configurar o arquivo “/app/config/database.php”. Nele você encontra instruções de como inserir as informações para acessar o seu banco de dados, há até um exemplo de como fazer.
Agora é só acessar, através do navegador, a pasta que você descompactou o CakePHP.

Onde encontrar material para estudo?
Como comentei antes, o CakePHP possui uma comunidade bem participativa, mas a maioria não fala português, então você encontrará bastante informação em inglês, aqui listo alguns sites e blogs com informações sobre o tema, bons estudos:

  • CakePHP – A página oficial, sempre com novidades (inglês)
  • The Cookbook – O manual oficial do cake. Possui conteúdo para versão 1.1 e 1.2, sendo que a segunda esta sendo finalizada. Obrigatório. (em inglês com parte do conteúdo em português, só alterar no rodapé da página).
  • API for CakePHP – A documentação das classes, métodos e funcionalidades do CakePHP. Não é muito rica em detalhes, mas está melhorando. Obrigatório. (inglês)
  • lemoncake – Um blog com várias discussões sobre CakePHP e dicas/tutoriais de como usar recursos do Cake. Muito recomendado. (inglês).
  • aranworld – Um blog que tem posts esporádicos a respeito do CakePHP, mas no link que vinculei, há uma série de posts sobre o sistema de controle de acesso do CakePHP, uma ferramente extremamente poderosa mas que pode parecer complicada de utilizar no inicio. Muito recomendado. (inglês)
  • CakePHP – Brasil – Portal brasileiro sobre CakePHP, ótimo para quem não arrisca muito o inglês, possui dicas e até uma versão traduzida do manual. Muito recomendado. (português)

E podem esperar que em breve haverá vários posts a respeito. Estou utilizando bastante o CakePHP e tenho gostado muito. Colocarei algumas dicas aqui logo logo.

Jogar Quake direto no Browser?

Parece um absurdo, mas não é.

A Fundação Mozilla está desenvolvendo uma Máquina Virtual que implementa o ECMAScript(linguagem que deu origem ao ActionScript do Flash, similar ao JavaScript) versão 4, e graças a idéia de um de seus desenvolvedores, será possível rodar aplicativos escritos no Muito Bom e também muito velho C. Sim, aquela linguagem que é preferida por pessoas como Linus Torvalds e Paulo Adonis.

Além do C, já é possível rodar aplicações Python com esta máquina virtual, e no futuro será possível utilizar várias outras linguagens.

Para provar o feito, a equipe do Tamarin rodou Quake e Zelda ( rodando em um emulador de Nintendo escrito em C ). Tudo funcionou, som e imagem, mas claro, a perfomance não é a mesma. Segundo o desenvolvedor, é aceitável.

Esta pode ser mais uma arma da Mozilla e uma carta na manga da Adobe para enfrentar a Microsoft e seu Silverlight+Visual Studio( que já permite a utilização de linguagen .NET ). Se isso vai gerar bons frutos, só na prática saberemos.

A grande notícia relacionada ao projeto, é que além de tornar possível rodar estas linguagens, o Tamarin poderá substituir o flashplayer nos navegadores, sendo uma alternativa Open Source ( e integrada ao navegador ).

Fontes: INFO Online, The Web at Toolness[en], Tamarin Project[en].

Liberando tudo… (nem tudo)

Como prometido, pretendo falar a qualquer momento sobre programação em ActionScript 3, esta linguagem que é vinculada ao Flash, Flex e agora ao Air, todos da Adobe.

Antes de começar, irei disponibilizar um sistema que iniciei e não terminei, feito puramente em AS3.0. O projeto consistia em um sistema para auxiliar no cadastramento e recadastramento dos armários administrados pelo Centro Acadêmico de Ciência da Computação da UFMS. Ele começou como exercício de estudo meu e de alguns amigos, usando ActionScript 2, mas logo no início todos desanimaram, onde eu fui a única excessão. Como já trabalhava com AS2 e tinha curiosidade de mexer com AS3 resolvi reescrever tudo o que havíamos feito usando AS3 e implementar o que faltava. Até que cheguei no ponto onde necessitava de uma linguagem externa para manipular um arquivo XML.

Por questões de infra-estrutura( local onde o sistema rodaria ), optei por usar o Java, e pedi a um amigo que fizesse a implementação. Ele o fez, mas eu acabei não integrando ao sistema pois já havíamos feito todo o trabalho daquele ano manualmente.

Agora estou liberando todas as classes que utilizei para que quem quiser ajudar, ou estudar possa fazer.

Bom proveito.

ps.: Estarei explicando mais pra frente o que cada classe faz.
ps2.: A versão do SuSE que utilizei no primeiro contato com um GNU/Linux foi 8.2

sistema-armarios

Diário de bordo

Tentando manter este espaço ativo, irei relatar minhas últimas atividades, e talvez as futuras.

Como comentei no post anterior, terminei a pouco o novo site para a Empresa de Análise Ambiental – Anambi, e como fiz a página utilizando o Adobe Flash e ActionScript2 ( não utilizei o ActionScript3 por conta do flashplayer ter de ser mais novo e reduzir o número de possíveis clientes ), os problemas que encontrei e como contornei. Acredito que será uma boa troca de experiência ( tem até uma parte de SEO, gostaria de saber se o que fiz é o melhor ou não ).

O PHPMS organizou o TestFest que havia comentado, e estive lá com a rapaziada. Foi divertido, apesar de não termos conseguido fazer muitos testes ( o sistema de testes é impressionante ), conseguimos discutir bastante sobre as funcionalidades do PHP 5.3. Tiramos algumas fotos e fiz um pequeno video, que estou upando para o YouTube neste exato momento. Se estiver interessado em ver, o enderço para as fotos é: http://www.flickr.com/photos/26464783@N02/ e para os videos veja em: http://br.youtube.com/phpms.

Por falar em video, trabalhar com video foi extremamente complicado pra mim. Como não tenho intenção nenhuma de mexer com esta área, não quero comprar nem aprender a usar programas complexos para edição de videos, e achar uma programa simples para isso é uma tarefa quase impossível, tanto no Windows quanto no Linux. Estou usando o openSUSE e o Windows Vista Business, e em ambos os sistemas tive muita dificuldade para conseguir fazer uma edição dos videos. Na verdade, no openSUSE eu nem consegui faze-lo. O programa simplesmente parava de responder toda vez que tentava adicionar um arquivo. Já no Windows eu tive de baixar o Nero e utilizar o Vision, já que o Movie Maker insistia em travar toda vez que tentava “compilar” o projeto.

Alguém aí já trabalhou com videos no Linux? Estou tentando abandonar o Windows de vez e uma das coisas que ainda me prende nele é descarregar minha filmadora ( uma Sony DCR-DVD, sem porta FireWare, que por acaso só tem driver para Windows ) e um programa para trabalhar com os videos descarregados. Alguem saberia um programa para fazer isso?

Voltando a ativa ( no bom sentido )

Faz muito tempo desde a última vez.

Estou fazendo este post para avisar 3 coisas:

  1. Estou vivo, sim, estou. E voltarei a fazer posts, com relativa frequência. Acabei com alguns serviços e agora estou tendo tempo para respirar, e até escrever;
  2. Sábado agora o PHP-MS estará organizando seu primeiro TestFest, trazendo o evento que é mundial para este fim de mundo. Para maiores informações, visitem o endereço do grupo: www.PHPMS.org, o evento será realizado na PetCursos de Campo Grande.
  3. Acabei de entregar um novo site para a Anambi – Análise Ambiental, um trabalho que gostei muito de fazer ( matei um pouco da saudade do velho Flash e o ActionScript ). Procuramos fazer junto com a empresa um site que fosse leve, agradável e que valorizasse a relação que a empresa tem com o meio ambiente. E aproveitando este embalo com o Flash, nos próximos posts estarei falando sobre alguns problemas enfrentados e como contornei os mesmos. Espero poder trocar experiências com vocês.

É isso, até breve( desta vez será breve mesmo).

Vamos lá…

Primeiro post do novo blog…

Pois é, depois de algum tempo inativo, acho que agora “Vai!”.
Dêem uma olhada na página “O que é isso?” no menu acima para ver o que esperar deste blog =]

Para começar, passo um site que conheci ontem, e estou aproveitando muito, o nome dele é Numa Boa, portal mantido pela vovó Vicki, com assuntos diversos, mas um prato especial para os Geeks/Nerds de plantão, confiram, vale realmente a pena.

A seção que tem me prendido ao site é a de tutoriais, especialmente os sobre o Joomla. Se você tinha alguma dúvida para trabalhar com este CMS, aproveite, entre na Aldeia e aprenda muito.

Já está adicionado aos favoritos.

Obrigado vovó =]

Falta de tempo…

Pois é…

Estou trabalhando, estudando e colaborando . Não estou conseguindo dedicar o tempo que gostaria a escrita neste blog. Mas não vou abortá-lo, pretendo apenas aumentar o já grande intervalo entre posts.

Meu próximo post na área de programação deverá ser sobre ActionScript. Pretendo mostrar a facilidade de se criar interfaces elaboradas com a linguagem.

Antes de encerrar, gostaria de avisar aos que já utilizam ou pretendem utilizar o Joomla! que a extensão que ajudei a traduzir para o nosso português está com uma nova versão: Attachments 1.2.2 ( Anexos 1.2.2 ).

Outra coisa, para os que se interessaram pela validação de dados em PHP5, vale a pena dar uma olhada nesta outra alternativa: http://www.vivaolinux.com.br/artigos/verArtigo.php?codigo=7838. Onde é abordado o uso de filtros da própria linguagem para validar ( confesso que nunca utilizei, mas me pareceu algo extremamente funcional, e com ótimo potencial ). Fica então as dicas.

Até breve.

Validação de dados em PHP5 – final

Olá a todos,

Continuando e finalizando a sequência de artigos sobre validação ( veja também a parte 1, 2 e 3 ), iremos abordar a união de procedimentos na validação.

Como vimos anteriormente, todo cuidado é pouco, então quanto maior o número de testes que submetermos um dado, maior a chance de ele chegar a nós da forma que esperamos ( sem causar danos a integridade do sistema ).

Vimos que a utilização de ER é essencial, toda vez que soubermos o padrão do valor esperado. Ou seja, se sabemos que um número de telefone é da forma “3333-4444”, e que isso nunca irá mudar, teremos as ER’s como nossa arma mais forte.

Mas existem casos em que não temos idéia do que o usuáiro pode inserir em um campo. Nestes casos, uma ER não tem grande utilidade, e temos de recorrer a outros recursos, como algumas funções do próprio PHP ou MySQL/Postgree para “limpar” as informações, de modo que ela não prejudique o fucionamento do sistema. Algumas destas funções são:

  • strip_tags() , que tenta limpar ( retirar tags HTML e PHP ) e retornar uma string passada como parâmetro.
  • htmlentities() , substitui TODOS os caracteres que possuírem um correspondente html.

Unindo a utilização destas funções, ER ( quando convir, não se esqueça que para se utilizar uma ER temos de ter um padrão esperado ) e cuidado na hora de pegar valores dos arrays superglobais ( $_POST, $_GET, … ), teremos um sistema com uma boa segurança a injeção de códigos por terceiros.

Vamos então fazer uma função ( não farei uma classe pois a idéia é ser bem especifico, podendo a função ser utilizada como um método sem problemas ).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
function valida( $valor, $tipo )
{
$erCPF = '/[0-9]{3}\.[0-9]{3}\.[0-9]{3}\-[0-9]{2}/';
$erCEP = '/[0-9]{5}\-[0-9]{3}/';
$erFONE = '/(0((([0-9]{2}){2})|([0-9]{2})))?[0-9]{3,5}\-[0-9]{4}/';
$erEMAIL = '/[[:alnum:]]\@[[:alnum:]]+(\.[[:alnum:]])+/';
$erDATA = '/(0[1-9]|[12][0-9]|3[01])\/(0[1-9]|1[012])\/[12][0-9]{3}/';
$erTEXTO = '/([a-z][A-Z])*/';//aceita somente letras
$erALPHANUM = '/[[:alnum:]]*/';//aceita numeros e letras
$erNUM = '/[0-9]*/';//aceita somente numeros
$erALL = '*';//aceita qualquer coisa
$tipo = strtoupper( trim($tipo) );
$padrao = 'er'.$tipo; //faço concatenação do prefixo 'er' com o tipo, para formar o nome da variavel com o padrao correto.
$valor = strip_tags( htmlentities(trim($valor)), '<a><b><i><p>' ); //limpo a variavel com valor, retirando possíveis funções do PHP ou tags HTML que possam ser prejudiciais ao sistema, mas permitindo algumas que podem ser uteis em determinados casos
 
if( preg_match( $$padrao, $valor ) )
{
echo 'O dado passou pela validação de padrão.<br/>';
//podemos validar melhor alguns dados
switch( $tipo )
{
case 'CPF':
if ( validaCPF( $valor ) )
echo 'O CPF é válido.';
else
{
echo 'O CPF não é valido';
return false;
}
break;
//você pode por um 'case' para cada tipo de dado que quiser validar com alguma formula especifica
default:
echo 'O dado foi validado';
break;
}
return true;
}
else
echo 'O dado não passou pela validação de padrão.<br/>';
 
return false;
}

Bom, este é um exemplo de função que poderíamos utilizar para validação de dados, podendo ser inserida em uma classe com um método dela.

Mas como utilizamos ela? Simples, veja( supondo que temos vindo de um formulário um campo email, via POST:

1
2
3
4
if( valida( $_POST['email'], 'email' ) )
echo 'Email válido';
else
echo 'Email inválido';

Fica fácil não?

Bom, nesta função, é chamada outra função ( validaCPF ), que não é de minha autoria, e que dei os devidos créditos na parte 3 desta série. Esta função implementa o algoritmo de validação do CPF, com seu digito verificador e tudo mais. É um algoritmo muito difundido, e bem documentado na internet, faça uma busca se estiver interessado no assunto. É interessante.

Função para validação de dado( veja o fonte )

É isso, espero ter ajudado, qualquer coisa, mail-me.

Até a próxima.

Validação de dados em PHP5 – Parte 3

Depois de um longo período sem nada útil, vamos continuar a série mais querida deste blog: “Validação de dados em PHP5”.

Está é a parte 3 da série, e talvez a última ( a menos que surjam pedidos ou dúvidas ) da série, se você não viu, veja: parte 1, parte 2.

Como falei na parte 2, o PHP trabalha com dois padrões de ER ( Expressões Regulares ): o padrão PCRE e o padrão POSIX. Adotaremos de agora em diante o padrão PCRE por ser recomendado pelo próprio manual do PHP.

Na última parte fizemos a validação de um número de CEP.

Agora veremos outros casos de uso, primeiro dois casos simples como o do CEP, um para validar um número de telefone ( possivelmente de celular ) e outro para validar um endereço de email – este último muito útil e utilizado, pois permite uma alta confiabilidade nos dados verificados.

Nossa ER para validar um telefone:

1
$telER =/(\([0-9]{2}\)\ )?[0-9]{4}\-[0-9]{4}/; //formato: (67) 9999-0000

Simples não é? Que tal “complicar” um pouco mais? Então compliquemos:

1
2
3
//formato: 0556733334444 ou 06733334444 ou 3333-4444
 
$telER = '/(0((([0-9]{2}){2})|([0-9]{2})))?[0-9]{3,5}[0-9]{4}/';

E como validar uma data? Fácil fácil…

1
2
3
//formato: 01/01/1001
 
$dataER = '/(0[1-9]|[12][0-9]|3[01])\/(0[1-9]|1[012])\/[12][0-9]{3}/';

Validar um CNPJ:

1
2
3
//formato: 11.222.333/0001-01
 
$cnpjER = '/[0-9]{2}\.[0-9]{3}\.[0-9]{3}\/[0-9]{4}\-[0-9]{2}/';

Depois que a gente começa, não da vontade de parar, mas parem mesmo assim. Agora que já viram alguns exemplos de ER, tentem fazer a de vocês mesmos. Façam uma ER para validar uma idade ( considerem que existe gente com mais de 100 anos ).

Depois de você ter feito suas ER, pode continuar…

Vamos validar um endereço de email agora:

1
2
3
//formato: nome@host.com ou nome@subhost.host.com
 
$emailER = '/[[:alnum:]]\@[[:alnum:]]+(\.[[:alnum:]])+/';

Será que já ta bom?

Não, mas chega de mostrar ER pronta para vocês, ta, uma última vez, fiz um arquivo de teste explicando algumas ER: Expressões Regulares . Espero que seja útil.

Lembrem-se que estou utilizando o padrão PCRE, então nada de usar estas expressões com as funções “ereg”.

Enquanto escrevia esta parte, pensei em algumas coisas para continuação. Então, ainda esta semana concluo.

Até.

ps.: para quem ver o arquivo e ficar curioso sobre a verificação extra do CPF, saiba que é utilizado o Algoritmo de Validação do CPF ( procure por este termo no Google ) implementado em PHP pelo Jefferson Estanislau da Silva e disponibilizado no link: http://www.vivaolinux.com.br/scripts/verScript.php?codigo=401. Fiz algumas alterações, pois no original, usava ER no padrão POSIX. Darei mais detalhes na continuação.

E os posts?

Calma, tudo ao seu tempo.

Já falei aqui que quero postar sobre Orientação a Objetos, sobre os livros que comprei recentemente, sobre o Joomla! e claro, continuar os artigos sobre validação ( afinal, temos de concluir o que iniciamos, não é? ). Meu próximo post será a continuação dos posts sobre validação. Não, eu ainda não o escrevi, mas o farei ainda hoje, mais tardar amanhã. Mas apesar de não ter escrito, já sei o que farei.

Em seguida, devo escrever um post sobre o Joomla! ( estou fazendo aquele componente que comentei anteriormente ), e está sendo uma experiência legal.

Neste meio tempo, provavelmente haverão alguns posts menos nerds, ou geek como preferirem. Minha vida acadêmica está voltando ao normal e com ela minhas responsabilidades com o Movimento Estudantil ( não, eu não fiquei a toa minhas férias e deixei tudo parado, não totalmente ). E com maior vivencia do assunto, as idéias, conflitos e reflexões vão “aflorando” e pretendo usar este espaço como válvula de escape, afinal, ninguém é de ferro – eu muito menos.

Está chegando a era da filosofia nerd neste blog ( não precisam se assustar, não serei tão incisivo, não no começo ), mas o mundo nerd não perderá mais um espaço, continuarei falando MUITO sobre programação, tecnologia ( que não comentei ainda ) e afins.

Até breve.