Categorias
Desenvolvimento Web PHP Projetos

Últimas Novidades #2

Vamos lá a mais notícias que talvez vos interessem ;]

  1. O PHPMS realizará no dia 11 de Julho seu primeiro workshop: PHP Extremo. A idéia é realizar um evento voltado a profissionais que trabalham com PHP, dando uma oportunidade para reciclar e expandir seus conhecimentos. Os temas ainda não foram decididos e a chamada de trabalhos deve ser iniciado até segunda feira próxima. Para mais informações, acesse: http://workshop.phpms.org;
  2. O PHP Mobile continua de vento em polpa, acompanhe as notícias sobre o projeto seguindo o twitter ( @phpmobile ) e site: www.phpmobile.com.br;
  3. Minha empresa está indo muito bem obrigado, pretendo disponibilizar alguns artigos e ferramentas de trabalho do dia-a-dia no site dela em breve. Se estiver precisando de algum serviço relacionado a TI, entre em contato. Será um prazer atende-lo;
  4. Atualizei o WordPress aqui do Blog (WP 2.8), de início a área administrativa ficou bugada, acusando falta de memória, tive de atualizar o php.ini aumentando o limite de memória de 32MiB para 64MiB. Achei um absurdo o sistema usar 64MiB (acho que 40MiB já seriam suficiente, mesmo assim achei muiita coisa);
  5. O Joomla lançou atualização do CMS, versão 1.5.11, possui 3 correções de segurança que devem ser aplicadas imediatamente (se você ainda não a fez);
  6. Ainda hoje atualizo o tema aqui do blog.
  7. Minha idéia dos scripts para administração está em andamento, infelizmente perdi acidentalmente uma das minhas classes principais e estou tendo de reescreve-la (como já havia comentado antes). Assim que tiver o mínimo de funcionalidade divulgo aqui.

Por último, meu notebook chegou (no dia 10 de Junho de 2009) exatos 30 dias após o início da produção por parte da Dell – apesar de antes de fazer a compra ver estampado no site que notebooks montados no Brasil tinham prazo de 10 dias úteis para entrega (14 dias corridos). Não bastace a grande demora na entrega, o notebook veio faltando uma das peças que pedi e paguei. Entrei imediatamente em contato com a Dell, pediram que enviasse um email para <pessoa>@dell.com.br para que resolvessem o problema. Mais uma vez demora, mandei o email no dia 11 de Junho, hoje, dia 13 não recebi resposta alguma. O notebook possui desempenho satisfatório mas o antedimento da Dell me decepcionou, dúvido que a Dell norte-americana trate seus clientes assim.

Enfim, se for comprar um computador, escolha um HP, Apple, Acer ou Sony, possuem qualidade igual ou melhor a da Dell e respeitam seus clientes.

Categorias
Desenvolvimento Web

Lançado Internet Explorer 8 (IE8) – Morte ao IE7

Hoje a Microsoft liberou a versão final do IE8. Dando uma pesquisada na página do lançamento, fico feliz que o suporte a padrões realmente foi aprimorado (mesmo ainda tendo chão para alcançar o Opera/Webkit/Firefox)… fico apenas com uma coisa em mente: vamos estender a campanha Morte ao IE6 ao IE7? Por uma web melhor.

Caso queira conferir as novidades no suporte a HTML e CSS, acesse: http://msdn.microsoft.com/pt-br/library/cc817571(en-us).aspx

Para ter detalhes específicos do suporte a CSS a melhor página é: http://msdn.microsoft.com/en-us/library/cc351024(VS.85).aspx

Categorias
CakePHP Desenvolvimento Web PHP Programação

CakePHP – Dúvidas Comuns #2

Dúvida: Como usar habilitar a internacionalização – o famoso I18N – nos erros de validação de seu modelo? Fácil? Como fazer então no próprio modelo para não repetir frases em várias Views?

Habilitar a internacionalização e ter a localização em uma aplicação com CakePHP desde a versão 1.2  é relativamente simples: basta uma lida no nosso Cookbook e pronto.

Outra coisa que é relativamente simples de se fazer é validar os dados, basta termos um atributo em nosso modelo chamado “validate” e seguir as dicas do livro de receitas.

Mas pelo Cookbook somos induzidos a fornecer a mensagem de erro na hora de criar a View, algo que eu particularmente não gosto. É até comum termos um modelo que é usado por Controllers diferentes e consequêntemente por Views diferentes.

Uma maneira de evitar isso, é definir as mensagens de erro já na definição das regras de validação, dentro do atributo “validate” do seu modelo. O grande problema é que para traduzir uma determinada expressão utilizamos um método, e a chamada de método na definição estática de um atributo não é permitida no PHP (dúvida? tente fazer o código abaixo)

class Modelo extends AppModel {
var $validate = _('ola mundo');
}
//esse código não devera ser executado

A solução para isso é a atribuição das regras de validação no momento da instanciação da classe, ou seja, no seu método construtor, da seguinte maneira

 class Modelo extends AppModel {
var $validate;
function __construct(){
parent::__construct();
$this->validate = array( /* aqui você pode definir as regras e mensagens,mesmo chamando um método */ );
}
}

Qualquer dúvida não deixem de utilizar os comentários ;]

——–
Atualizado: havia esquecido da chamada ao construtor da superclasse AppModels ( através do parent::__construct() ) no último código mostrado.
——–
Atualizado

Obrigado ao José Tranca e Thiago Goulart pelos comentários, as soluções propostas por eles devem ser adotada em detrimento da minha, já que melhora consideravelmente a modularidade e reusabilidade das traduções.

Categorias
Desenvolvimento Web Tecnologia

Ainda não tem hospedagem? Aproveite

Acredito que a maior parte dos visitantes deste blog trabalhem com internet. E neste trabalho, não ter um serviço de hospedagem para colocar seus serviços em produção ou mesmo durante o desenvolvimento é tão complicado quanto um médico clínico-geral não ter um estetoscópio.

As vezes nos esbarramos em alguns problemas para ter nosso espaço na web: se quiser ter um servidor em casa/escritório este terá de ter um IP fixo ou algum serviço de DNS como o NO-IP.com; se quiser ter um servidor dedicado fora de casa terá de pagar uma boa quantia; caso não disponha de muito dinheiro, terá de se satisfazer com várias limitações de recursos, certo? Não neste caso.

Infelizmente aqui no Brasil ainda é muito caro ter um servidor de hospedagem com bons recursos e preço baixo, mas lá fora isso já é realidade, então o que fazer para aproveitar isso? Primeira coisa é ter um cartão de crédito internacional (já que temos de pagar em moeda estrangeira) e se possível uma conta no PayPal (para aumentar a segurança de nossas “comprinhas”), depois disso é só escolher o host.

Atualmente trabalho com a Bluehost[en], mas ontem me inscrevi e outro grande serviço: a Dreamhost[en].

Ambos possuem ótimas características, dentre elas:

  • Espaço em disco ilimitado;
  • Trafego de dados ilimitado;
  • Domínios e subdomínios ilimitados;
  • Acesso SSH;

Além de vários outros. A diferença de preço entre elas não é muito grande, normalmente. Mas de vez em quando aparece uma grande promoção. Hoje é um desses dias.

Na Dreamhost, se você utilizar o código promocional 777 você paga somente $9,24 por um ano de hospedagem e ganha o registro de um domínio internacional na faixa. Mas só pode ser aproveitado até hoje, 15 de fevereiro de 2009. Então se tiver com uma conta PayPal ou um cartão internacional em mãos, não perca tempo.

Na Bluehost você pagará a bagatela de $6,95 por mês no plano de hospedagem (para pagamento anual). Isso dá menos de R$15,00/mês por um plano ilimitado, não é uma pechincha? Então se hoje não é 15 de fevereiro, utilize o banner abaixo e se inscreva na Bluehost para ter um ótimo serviço por um preço absurdamente baixo.

— Atualizado —

Caso tenha perdido a promoção do dia 15/02/2009, não perca as esperanças, utilize o código promocional CAUANCABRAL para registrar sua conta na Dreamhost e ganhe um bom desconto: são $50.00 para assinatura mensal (custo normal $60.90), $75.00(de $119.40) para assinatura anual e $79.00(de $214.80) para assinatura bienal. Aproveite ;P

Categorias
CakePHP Desenvolvimento Web PHP Programação

AJAX com Prototype

Prototype é uma biblioteca javascript bastante utilizada, mas que pra mim nunca chamou atenção (ao contrário do JQuery), mas como tenho utilizado o CakePHP e em sua estrutura de Helpers ele usa esta biblioteca, tive de “perder” um tempinho estudando-a.

Para isso, fiz como meu amigo PorKaria e montei um sisteminha simples de comentários (na verdade o dele era o guestbook, mas no fim fazem a mesmo coisa, hehehe).

Descrição do sistema:

Sistema usando AJAX (na verdade o X aqui é de XHTML, porque não utilizo XML) Permite a inserção de comentários, salvando-os em um banco de dados (MySQL), tudo de forma assíncrona. A bibliote utilizada para implementação da parte em javascript é a Prototype, a formatação (CSS) foi retirada de um tutorial do Tableless sobre formatação de formulários e o PHP foi escrito por mim. Além do cadastro, fiz o que pode se chamar início de um sistema de busca com sugestão (famoso autocomplete). Digo o início porque ele não avalia bem o momento de se fazer a busca e não é possível clicar nos resultados, apenas vê-los.

Categorias
Desenvolvimento Web noticias Programação

25 erros de programação mais graves

Foi divulgado pelo SANS Institute[en] uma lista com os 25 erros de programação que mais causam prejuízos no mundo. Esta lista foi elaborada por especialistas de mais de 30 instituições dos EUA e organizações internacionais de segurança digital.

tradicional erro de segurança
um erro tradicional

A lista foi subdivida em três categorias: “Interação Insegura entre Componentes”, “Risco no Gerenciamento de Recursos” e “Defesa Porosa” – no original: Insecure Interaction Between Components, Risky Resource Management e Porous Defenses.

Há na lista falhas como possibilidade de injeção de códigos, utilização de algorítmos de criptografia defasado e transferência de dados sensíveis sem criptografia.

No artigo original[en] há várias informações sobre os erros e comentários de renomadas empresas de segurança sobre a importância da lista.

Sem dúvida um texto que vale a pena para todo desenvolvedor.

via: IDG NOW!

Categorias
Desenvolvimento Web PHP

3F: Férias da Faculdade, Finalmente.

Para quem nunca viu a página “Mea Culpa” deste blog, sou acadêmico de Ciência da Computação na UFMS, e após um grande sufoco, consegui progredir de série. Agora posso desfrutar de 2 “longos” meses de descanso, da faculdade. O trabalho não para, ainda bem.

Para quebrar o marasmo, segue abaixo três funções em PHP que criei hoje para corrigir um problema na formatação de datas em uma página web.

Os dois primeiros são triviais, conversão de datas do padrão brasileiro para o padrão SQL:

function data_to_sql($sdata)
{
	$data = explode('/', $sdata);
	$data = implode('-', array_reverse($data));
	
	return $data;
}
//converte data do formato SQL para o brasileiro
function data_from_sql($sdata)
{
	$data = explode('-', $sdata);
	$data = implode('/', array_reverse($data));
	
	return $data;
}

E o terceiro é um pouco mais interessante, ele pode ser usado quando você quer montar um cabeçalho do tipo: quinta-feira, 12 de dezembro de 2009. O PHP fornece uma função nativa para isso, a função strftime(), mas ela tem como dependência um servidor com suporte a locale, e no meu caso, o locale pt_BR. Para contornar isso, fiz a seguinte função que resolve automáticamente a melhor forma de apresentar o cabeçalho desejado (considerando que strftime tem melhor desempenho do que algumas chamadas a função date(), time() e concatenação de strings):

/*
 * monta cabeçalho para impressao da data em portugues
 *  
 * @param $sdata time, passa a data desejada
 * @param $week boolean, se irá conter o nome da semana ou não
 * @return $data string, a data formatada para impressao
 */
function data_header($sdata, $week = false)
{
	$months = array('Janeiro', 'Fevereiro', 'Março', 'Abril', 'Maio', 'Junho', 'Julho', 'Agosto', 'Setembro', 'Outubro', 'Novembro', 'Dezembro'); 
	$weeks = array('Domingo', 'Segunda-feira', 'Terça-feira', 'Quarta-feira', 'Quinta-feira', 'Sexta-feira', 'Sábado');
	$data = '';
	
	//se possuir suporte a setlocale com a região brasil, utiliza a função nativa
	if(setlocale(LC_TIME, "pt_BR"))
	{
		if($week)
			$strformat = '%A, %d de %B de %Y';
		else
			$strformat = '%d de %B de %Y';
		
		$data = strftime($strformat,$sdata);
	}
	else
	{
		if($week)
			$data .= strtolower($weeks[date('w', $sdata)]) . ', ';
		
		$data .= date('j', $sdata) . ' de ' . strtolower($months[date('n', $sdata)-1]) . ' de ' . date('Y', $sdata);
	}
	
	return $data;
}

São funções simples mas que podem quebrar um galho em um dia apertado.

Categorias
ActionScript Desenvolvimento Web

Google Analytics e Adobe – facilitando a sua vida

Há um tempo atrás, postei uma forma de se monitorar páginas em Flash ou Ajax com o Google Analytics. Até aquele momento está era a única maneira “oficial” de se fazer isso e recomendada pelo Google.

Agora foi liberado pelo Google juntamente com a Adobe uma classe escrita em AS3 que facilita a coleta e monitoramento de informações através do Analytics.

Segundo o Google, esta classe contem todas as funcionalidades da versão Javascript e é totalmente compátivel com a última versão do ga.js (arquivo que deve ser incluído nas páginas que utilizam o Analytics).

Os arquivos disponibilizados já estão compilados, porém o projeto é opensource (licensiado pela Apache 2.0 license) e quem estiver interessado pode baixar o fonte para ver a implementação (por curiosidade, necessidade ou para ajudar).

Categorias
ActionScript Desenvolvimento Web

Usar Google Analytics para páginas em Flash ou Ajax? É mole…

Não sei se é de conhecimentos de todo, pelo menos para mim não era.

Para quem não sabe, Google Analytics é um serviço do Google que permite coleta e acompanhamento de diversas informações de uma página na internet, como número de visitas, origem das visitas, tempo de permanência na página, palavras chaves usadas para chegar até sua página e várias outras. Ou seja, indispensável para quem desenvolve para web (indispensável o tipo de ferramenta, existem alternativas, como o Yahoo! Web Analytics).

Para os que conhecem: uma coisa que sempre me “frustou” foi ter meus trabalhos em Flash (Ajax entra no mesmo ramo, apesar de não ter nada publicado ainda) não terem a mesma facilidade para coleta e acompanhamento de informações. O máximo que conseguia era saber de onde o individuo havia chegado, quanto tempo permaneceu no site e as palavras chaves mais comuns. Mas apesar do Google indexar o conteúdo dos arquivos em Flash, eu não podia, por exemplo, saber quais partes do site/apresentação recebia mais visita.

Agora meus problemas acabaram(-se): A resposta para o problema é 42.

Bom, na verdade a solução deveria ser óbvia para quem conhece a API ou o sistema de coleta de informações do Google, mas ainda não havia reparado no óbvio: é só fazer uma chamada a função _trackPageview();
Essa função é incluída em nossas páginas no meio do código que o Google nos passa na hora que criamos a conta no Analytics.

O interessante é que essa função aceita um parâmetro, e é esse o ponto da solução, é só dizer que “seção” do site a pessoa vai estar entrando ao clicar em um link que ela será computada pelo Analytics.

Seguindo o exemplo fornecido pelo PRÓPRIO:

seuBotao.addEventListener( MouseEvent.CLICK, this.clicked );
function clicked(MouseEvent e):Void
{
    getURL("javascript:pageTracker._trackPageview('/contato')");
}

Com este código, quando alguém clicar no botão “seuBotao”, será invocado a função clicked e nela será chamada a função javascript do Analytics, dizendo que a pessoa está acessando a pasta ‘contato’. Notem que a pasta ‘contato’ não precisa existir, pode ser um arquivo ou o que você achar melhor. Depois é só entrar no painel do Analytics e conferir as novas informações.

Supimpa, não?

Categorias
CakePHP Desenvolvimento Web PHP Programação

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.