quinta-feira, dezembro 30, 2010

Migração - ti.guimesmo.com

Como estou prometendo há algum tempo, migrei o blog para o wordpress e para o meu domínio. A partir de agora postarei em http://ti.guimesmo.com

Até.

quarta-feira, dezembro 01, 2010

Groupon Clube Urbano: quero meu celular

Fora do comum no meu blog, vou postar uma reclamação sobre um péssimo serviço de compras coletivas: o Clube Urbano, recentemente adquirido pelo Groupon.

Fiz até aqui 3 ou quatro compras lá. Tudo ia bem, até que precisei de atendimento. Eu explico:

No final do mês de outubro adquiri um celular Motorola ZN300, numa oferta que me pareceu vantajosa: $54 com plano claro controle 35, que é o que eu gasto normalmente com celular. Dias depois da compra enviei um e-mail para o SAC com o texto:

"Adquiri o celular Motorola ZN300 pelo Grupon, mas agora não sei como proceder. Ele será entregue automaticamente ou devo retirar em algum posto?

Obrigado.
Luiz Guilherme."

Claro que eu sabia que o celular deveria ser entregue o endereço de entrega solicitado pelo Groupon no momento da compra e por mim informado. Era uma pergunta simples, mas vejam a resposta dada pela empresa:

Prezado Luiz Guilherme, boa tarde.

Segue as regras da Claro:

O Plano Controle R$35 tem franquia mensal de R$35 (trinta e cinco reais) para ligações e serviços da Claro. Ao final da franquia, a linha é bloqueada para ligações tarifadas, mas o cliente pode optar por inserir créditos para continuar efetuando ligações e usando
os serviços da Claro.
Regras:
  • 1 groupon por CPF (individual e não cumulativo com outras promoções)
  • Oferta válida para aquisição de uma nova linha mediante contratação do Plano Controle 35 (permanência mínima 12 meses)
  • Para efetuar o resgate, será necessário informar: dados cadastrais, data de vencimento da fatura e “aceite“ do Contrato SMP e Condições Comerciais junto à Claro
  • A entrega do aparelho será realizada no endereço cadastrado em até 15 dias úteis após a confirmação da compra pela Claro
  • A ativação da linha (Pós Paga) será feita em até 48 horas úteis após o recebimento do aparelho
  • Data da Promoção: 28/10/2010
  • O período para resgate do cupom é de 03/11/2010 à 10/11/2010
  • Caso o resgate não seja efetuado no período citado acima, o cupom ficará inválido
  • O resgate do cupom deverá ser efetuado através do link http://www.promocaogroupon.com.br/claro_zn300 (exclusivo Claro)
Benefícios:
- O cliente terá controle total de seus gastos com o celular.
- A Claro envia um Torpedo (SMS) após cada evento tarifado, informando o saldo para o cliente.
- O valor mensal é fixo e pode ser usado tanto para ligações quanto para serviços.
Promoção!! Você pode falar até 900 minutos por mês durante um ano e ganhar até 30 minutos por dia! A cada 30 segundos falados e tarifados você ganha bônus de 15 minutos. Você tem até o último dia do mês para usar seus bônus, sendo que 90% do bônus recebido é válido de Claro para Claro e 10% de Claro para Fixo. E tem mais: você ganha 30 Torpedos por mês para falar com qualquer operadora nacional por até 1 ano.
O que é descontado da franquia do plano?
- Ligações locais para qualquer celular e número fixo, realizadas dentro da rede Claro.
- Ligações a cobrar recebidas
- Ligações de longa distância nacionais e internacionais
- Torpedos (SMS) e Claro Fotos (MMS) enviados para qualquer operadora nacional com a qual a Claro mantém acordo
- Claro Fotos (MMS) enviados para e-mail
- Uso de dados para WAP, downloads pelo celular e acesso à internet
O que não é descontado da franquia do plano?
- Mensalidades referentes a pacotes promocionais
- Multas e juros
- Doações
- Outras cobranças mensais diversas
Dúvidas, entrar em contato pela Central de Atendimento 1052
Consulte as condições, maiores informações do Plano Controle 35 e tarifas excedentes no site www.claro.com.br, via 1052 ou Lojas Claro. Limitada a uma ativação por CPF. Sujeito à análise de crédito e permanência mínima. Imagens meramente ilustrativas.

Para o resgate do celular é necessário ter em mãos o groupon (cupom da oferta) que foi enviado por e-mail caso o senhor não tenha recebido, nos informe, que enviaremos.

Atenciosamente,

Talita Gorgatti
Groupon


Bom, tudo bem, preciso ter o o cupon, isso era fácil, mas depois de vários dias esperando e nenhum contato (a promessa era de 15 dias úteis após a compra) mandou outro e-mail:


Boa tarde.


Compramos, um amigo e eu o celular há algumas semanas atrás. Eu comprei pouco antes, mas a entrega do celular dele foi feita, enquanto o meu ainda não chegou. Gostaria de saber se há alguma forma de acompanhar o pedido.

Obrigado.

E a Resposta:

Prezado Luiz Guilerme, boa noite.

Seu aparelho já está com a transportadora, por gentileza aguarde até o dia 28/11/2010.

Peço desculpas em nome do Groupon por algum transtorno causado.

Priscilla Alves
Equipe Groupon

Nem vou comentar o meu nome escrito incorretamente, esperei até o dia 28, 29, 30... finalmente liguei no Groupon... alguém aí já ligou no Groupon? Em mais de 10 tentativas, não consegui sequer uma vez chegar a um atendente. Um absurdo. Mandei outro e-mail, dessa vez sem resposta, pedindo o cancelamento da compra e hoje novamente solicitando contato.

Afinal, seria o Groupon Clube Urbano tão desinteressado na satisfação de seus compradores a ponto de não ter uma central de atendimento? Eu só quero meu celular.

segunda-feira, novembro 22, 2010

Sistema de gerenciamento de login e controle de usuário com spaghetti*

Como pediram to colocando aqui a forma de gerenciamento de login usando session sem o auth component. Não é nada complicado, aliás, é simples demais, gostaria de opiniões sobre a segurança.

Primeiro tá tabela no banco:

CREATE TABLE IF NOT EXISTS `users` (

`id` int(10) unsigned NOT NULL AUTO_INCREMENT,

`username` varchar(255) NOT NULL,

`password` varchar(255) NOT NULL,

`permission` varchar(255) NOT NULL,

PRIMARY KEY (`id`)

);

O model é o mais simples possível:

class Users extends AppModel {}

?>

O controle de login eu faço na home ou num controller de login. Depende do número de ambientes. O projeto que eu to usando como base aqui tem 3 tipos de permissão de usuário, então coloquei no home controller de cada sessão

public function admin_index(){

$this->layout = 'login';

if(isset($_SESSION['permission']) and $_SESSION['permission'] == 'admin' and $_SESSION['loged'] == 1){

$this->redirect("/admin/qualquer-coisa");

}

elseif(!empty($this->data)){

$this->data["password"] = Security::hash($this->data["password"], "sha1", true);

$result = $this->Users->all(array(

'conditions'=>array(

'username'=>htmlspecialchars($this->data['username']),

'password'=>$this->data['password'],

'permission'=>'admin')

));

if(sizeof($result)){

$_SESSION['loged'] = 1;

$_SESSION['permission'] = 'admin';

$this->redirect("/admin/qualquer-coisa");

}

else{

$this->set("errorMessage", "Usuario ou senha incorretos. Tente novamente");

}

}

}

/**

* Metodo de logout para todas as areas

*/

public function logout(){

session_destroy();

$this->redirect("/");

}

?>

A View é básica é obvia, é só um form com nome de usuário e senha:

<div class="login">

<h1>Area do Administrativah1>

<h2>Digite seu nome de usuario e senhah2>

echo $form->create() ?>

echo $form->input("username", array(

'label'=>'Usuario', 'div'=>null));

echo $form->input("password", array(

'label'=>'Senha', 'div'=>null, 'type'=>'password'));

?>

echo $form->close("Login") ?>

if(isset($errorMessage)){ ?>

<br/>

echo "$errorMessage"; ?>
} ?>
div>

E finalmente pra direcionar o usuário, o before filter:

public function beforeFilter (){
if($this->params['prefix'] == "admin"){
if($this->params['here'] != '/admin'){
if($_SESSION['permission'] != 'admin'){
$this->redirect('/admin');
}
}
}
}

Enfim, nada complicado. Única coisa que não vou colocar aqui é que precisa iniciar a sessão, e isso eu fiz no index da webroot (session_start()).

Qualquer consideração, coment.

Claro que algumas melhorias poderiam ser feitas, mas coloquei aqui só a essencia da coisa. Peço desculpas pelo layout horrível do texto. Em breve (mais um ano ou dois) eu migro pro wordpress e dou um jeito nisso.

terça-feira, setembro 14, 2010

Cidades do Brasil para Mysql+Spaghetti*

Recentemente precisei da lista de cidades do brasil e encontrei esse link com elas formatadas para firebird. Como precisava usar com Mysql+php com spaghetti, alterei o arquivo, que pode ser visualizado em: www.guimesmo.com/cidades.html.

Qualquer Bug, comentae (as chaves estrangeiras não foram definidas na estrutura sql. O Spaghetti faz isso no php, me livrando do DB).

Qualquer dúvida:
http://spaghettiphp.org
http://forum.spaghettiphp.org

(fiz o html pra ninguem precisar fazer download do sql. Se for interessante, ve a estrutura e copia do navegador direto. Quem quiser o .sql clica aqui.)
.
.

domingo, setembro 05, 2010

Meu primeiro projeto usando o spaghetti* framework

Ontem, dia 4/09, quando já chegávamos ao dia 5, foi lançado o site da JN Concursos, meu primeiro projeto usando o Spaghetti* php framework.
Antes de iniciar o projeto, eu pensava em melhorar e padronizar a estrutura dos meus trabalhos, deixar as partes separadas e aproveitar melhor o código já escrito. Foi quando conheci o spaghetti (história já contada no post anterior).

Falando mais precisamente desse projeto, posso dizer que valeu a pena usar o framework. Com ele melhorei a segurança do sistema, criei níveis de usuário, reaproveitei muita coisa e comecei efetivamente a trabalhar com php orientado a objetos, que era um desejo de tempos (na verdade desde que comecei a trabalhar com php, mas não conseguia encontrar o ponto viável de uso).

Uma das vantagens que eu havia visto no framework era a facilidade de salvamento de dados na edição. Normalmente a cada update tinha que escrever um comando gigante de sql e personalizado pra cada aplicação. Com o spaghetti veio uma coisa muito mais simples: se tem id é update, se não tem é inserção, não preciso verificar na função, é só enviar e pronto. Eliminei umas 15 horas só com isso, além de evitar reescrita de código em todos os lugar (o que eu teria que escrever "update x set y = z" eu resolvida com $this->Model->save( $this->data ).
Outra facilidade é o uso de prefixos para as seções. Assim eu padronizei localização de itens, ficando html de sessão administrativa no mesmo diretório da exibição padrão. Organização 100%. Antes de usar o spaghetti eu usava um diretório de páginas onde ficava tudo, e tudo era incluído na index, sem url amigável e gerando códigos imensos em arquivos unicos com funções desorganizadas (não exatamente, mas a estrutura não me agradava).

Meu maior problema foi com o auth component. Depois de muito tentar usando o padrão do framework, decidi por usar um solução alternativa, mais parecida com o que eu usava antes. Deu certo, mas espero que nos próximos sites eu consiga usar uma estrutura mais padronizada e por que não mais segura.

Enfim, gostei do resultado final. O sistema ficou fácil de gerenciar e manter e já serviu de base para outros projetos.

Hoje não estou em casa, mas assim que possível compartilho algumas coisas que precisei modificar no core pra garantir funcionamento de algumas funções (pouquissimas coisas), além de outras que eu estou prometendo há algum tempo (como o gerenciador de arquivos para ckeditor integrado ao editor).

Convido a acessar o site: www.jnconcursos.com.br

Para o desenvolvimento usei as ferramentas: Aptana studio 2.x.x (inicio), Kate (editor de textos do KDE), MySql (e suas ferramentas gráficas), Firefox (essencialmente com firebug), Virtual Box (pra validação usando MS Windows com Internet Explorer(6, 7 e 8), Safari, Chrome, Firefox), Inkscape, Gimp e Adobe Photoshop (esse último foi usado em outro computador apensar pra trabalho no Logo, já que infelizmente o Gimp ainda não tem 100% de compatibilidade com PSD, porem tudo o que usa imagem no site exceto o logo foi feito com Inkscape e Gimp). Tudo rodando com Mandriva Linux 2008.1, com Apache, MySql e php nas últimas versões disponíveis. Tudo isso no meu Celeron 2.1 com 768 de Ram (e uma FX 5200).
O Site foi testado em todos os browsers citados em suas últimas versões, exceto o Internet Explorer, que infelizmente precisa ser testado em todas as versões desde o 6.

PS: Estou querendo migrar esse blog para o meu domínio (guimesmo.com), por isso algumas promessas minhas ainda não foram cumpridas

PS2: Não indico usar um hardware semelhante ao meu com versões mais atualizadas de software. Porém, a versão 2008.1 tinha um desempenho razoável com KDE 3.5.

PS3: qualquer bug, da um 'Coment' :D

quarta-feira, agosto 18, 2010

Spaghetti Framework PHP

Há alguns meses comecei um projeto de tamanho razoável, e não queria continuar na linha em que eu vinha seguindo com php: projetos despadronizados, com linguagem estruturada e difíceis de dar manutenção. Conversando com o Chavão (www.chavao.net/) ele me indicou o spaghetti.

Pelo definição do próprio site do projeto (que é brasileiro, mantido por brasileiros e documentado por brasileiros) “Spaghetti* é um framework escrito em PHP para ajudar a tornar o seu dia-a-dia mais produtivo e divertido.”. Na prática, com o Spaghetti algumas tarefas que dariam grande trabalho e seriam repetitivas, acabam se tornando práticas, fáceis e intuitivas.


O spaghetti trabalha com o modelo mvc. O que é mvc e algumas características mais profundas sobre isso podem ser encontradas no site do projeto. Em resumo, o MVC ajuda a separar casca e amendoim. Não entendeu? MVC deixa a sua lógica de banco de dados separada da lógica de programação que fica também separada da exibição do conteúdo gerado.


Confesso que no começo é um pouco complicado, mas após uma lida básica na documentação já é possível trabalhar sobre a plataforma.


Uma das vantagens do spaghetti é que ele é leve, apenas alguns kbs, isso viabiliza o uso. A configuração é muito simples e a curva de aprendizado é compensatória, mas daí você diz: Guimesmo, eu só faço site pra farmácia e açougue, pra que eu vou usar um framework? Eu respondo: padronizar suas aplicações, evitar desperdício de código, facilitar a manutenção e agilizar o seu trabalho para novos projetos, independente do porte da aplicação.


Um exemplo de como o spaghetti pode ser viavel mesmo para pequenas aplicações:


Digamos que o site do açougue use um sistema de pedidos. Os pedidos podem ser editados e excluidos pela administraçaõ e enviados pelo usuário. Julgando que o banco de dados já foi configurado e a exibição também, você teria em php puro:


function edit($id){

$query = 'select * from pedidos where id = '.$id;

$res = mysql_query($query);

$pedido = mysql_fetch_array($res);

return $pedido;

}

function save($id = null){

if($id){

$query = 'update pedidos set '.../* campos para atualizacao */

}

else{

$query = 'insert into pedidos (…) values() '.../* campos para atualizacao */

}

$res = mysql_query($query);

return $res;

}


já com o spaghetti:

public function edit($id){

$pedido = $this->Pedidos->firstById($id);

$this->set('pedido', $pedido);

}

public function save(){

$save = $this->Pedidos->save($this->data);

$this->set('save', $save);

}


Sim, é só isso. Na verdade é necessária configuração do banco de dados, criação do model e das views correspondentes aos métodos. Também estamos julgando dados enviados via POST. No spaghetti pode ser evitado o transtorno de adicionar novamente todas as variáveis do POST caso elas sejam correspondentes ao existente no banco. Claro que validação de dados é necessária nos dois casos, mas para um exemplo prático, uma aplicação que eu usaria 2 dias com spaghetti eu levei 5 com php estruturado. Por que eu usei php estruturado? O spaghetti precisa do mod_rewrite do apache habilitado, e nem todos os servidores permitem isso (principalmente pela incompetência dos administradores). Alguém pode perguntar onde foi parar a função para salvamento em caso de edição. O spaghetti identifica se deve editar ou criar um novo pelo envio da chave primaria nas informações de salvamento. Enviando o id via post ele identificará que deve salvar uma página existente. Simples.


Infelizmente a documentação não é um forte da comunidade spaghetti ainda (segundo o próprio Júlio), os colaboradores não são tão numerosos, mas considero um projeto de futuro (mas que pra mim já é presente). E fica o convite para desenvolvedores mais experientes e dispostos a colaborar com o projeto.


http://www.spaghettiphp.org


PS: Parabéns aos idealizadores e mantenedores do projeto. Infelizmente não consegui colaborar muito até aqui, mas o quanto eu puder divulgar este projeto e colaborar com novos usuários, podem contar comigo.


PS2: O comentário sobre a documentação se deve ao fato de boa parte do framework naõ estar citada na documentação oficial, assim existem muitas funções do framework que não são usadas por simples desconhecimento (por exemplo a classe inflector, que se eu conhecece antes me pouparia pelo menos 8 horas de trabalho em um projeto que desenvolvi).


Até

quarta-feira, agosto 11, 2010

Conheça o Mandriva Linux!





Mais rápido, mais sexy.

Prepare-se para ficar impressionado com o seu sistema! Ele inicia mais rápido do que nunca!
Mandriva oferece três diferentes temas projetados por um profissional para melhorar sua experiência de usuário: escolha o que você quiser!
Se você não encontrar o que melhor lhe convier, escolher entre todos os wallpapers disponíveis



GNOME 2.30.1.
* Como uma prévia do GNOME 3.0, você pode dar uma olhada no gnome-shell que redefine as interações dos usuários com seus desktops.
* Tomboy agora pode sincronizar suas notas com o serviço web Snowy
* Pitivi video editor foi atualizado para a versão 0.13.4, que inclui uma reescrita completa.
* Empathy é agora instalado por padrão ao invés do Pidgin.



KDE 4.4.3
Muitas novas funcionalidades para o KDE 4, incluindo algumas que foram notavelmente presentes no KDE 3, mas falta no KDE 4.0, 4.1 e 4.2, juntamente com algumas novas características. Também deve fornecer uma experiência de desktop mais estável do que o KDE 4.2.
* Dados sobre a migração do KDE 3: os dados serão copiados e migrados para o KDE 4 (preferências do usuário, e-mails, ...)
* Nepomuk: a tecnologia Nepomuk foi integrada. Você será capaz de organizar o seu desktop, dependendo de seus projetos, anotar documentos... Informações completas
* Amarok versão 2.3.1 final: muitas correções de bugs e a volta capacidade para ler CDs
* KMess MSN Live messenger instantâneo 2.0.3.



Mandriva desktop inteligente.
Seu ambiente de trabalho é ainda mais inteligente e ajudará-lo em suas atividades diárias.
Você tem muitos documentos, e-mails, dados, imagens, vídeos. Agora você pode organizá-los de acordo com seus projetos. Adicionar notas, comentários, tags em clics do mouse.
Seus dados estarão então disponíveis, mais facilmente, justamente quando você precisa deles.



OpenOffice
Mandriva Linux 2010 Spring inclui-Go OO vindo do OpenOffice.org popular. Isso significa mais recursos, como suporte SVG, transições 3D, suporte VBA, integração ao KDE 4 e Inclui extensões úteis.



Configure o seu desktop.

Mandriva Control Center é uma característica exclusiva do Mandriva Linux. É até mais fácil de configurar o seu sistema, rede e hardware.
O gerente de software rpmdrake dá acesso a mais de 20.000 pacotes de software.
A impressora é automaticamente detectada e pode ser configurada em poucos cliques.
Internet nunca foi tão fácil: se conectar à Internet ou em banda larga, Wi-Fi ou 3G.
Você nunca foi tão seguro: você está protegido contra vírus e spyware graças ao firewall embutido. E graças ao controle dos pais, seus filhos podem ter acesso seguro à Internet.


Essas são apenas algumas das características do melhor sistema operacional disponível!
Obtenha agora mesmo a versão Powerpack ou uma das versões gratuitas do Mandriva Linux!



Quer saber mais? Veja como você pode entrar em contato com a comunidade:

  • Mandriva Brasil e a comunidade de língua portuguesa, não só Brasileira, para saber as última notícias sobre que esta acontecendo com a Mandriva e sua comunidade.

  • O Fórum MandrivaBrasil ajudando a encontrar a resposta para a sua pergunta.

  • Wiki MandrivaBr construindo a documentação de ajuda da comunidade em língua portuguesa.

  • Planeta Mandriva Brasil - onde os blogs de usuários Mandriva se encontram.

  • Canal de IRCpara um bate papo amigável com outros usuários e desenvolvedores.




Texto adaptado do site www.mandriva.com