E-commerce cresce 30% no Brasil

30 Mar 2010 In: Uncategorized

O comércio pela internet vem se tornando cada vez mais comum na vida dos brasileiros, segundo a 21ª edição do Relatório WebShoppers da e-bit. Somente em 2009, as vendas pela web cresceram 30 por cento, estabelecendo faturamento de R$10,6 bilhões.

No ano passado, 17,6 milhões de consumidores fizeram compras pela internet, um crescimento de 33 por cento em relação a 2008.

O crescimento foi resultado do cumprimento dos prazos estabelecidos para entrega de grande parte dos produtos e por conta do aumento de confiança e satisfação dos consumidores em relação ao sistema e formas de pagamento.

As expectativas para esse ano são altas. De acordo com o relatório, a Copa do Mundo tem grandes chances de elevar o faturamento brasileiro ainda no primeiro semestre de 2010, por conta da venda de aparelhos de televisão. A previsão é de faturamento de R$13,6 bilhões e crescimento de 35 por cento dos consumidores em relação a 2009.

Fonte: http://olhardigital.uol.com.br/digital_news/noticia.php?id_conteudo=11057&/E_COMMERCE+CRESCE+30+NO+BRASIL

Lentidão com acesso a SSH

28 Feb 2010 In: Linux, SSH

Decidi fazer esse pequeno guia para quem usa conexão ssh e enfrenta uns 10 segundos para poder digitar a senha de acesso ssh. O problema está relacionado com o DNS, onde o OpenSSH tenta negociar com o servidor. Resolvendo:

Edite o arquivo:
/etc/ssh/sshd_config

Caso o parametro
#UseDNS no
esteja comentado, retire o ‘#’. Caso não esteja, adicione no fim do arquivo, salve e reinicie o ssh.

sudo /etc/init.d/ssh restart

Pronto, lentidão resolvida.

Protegendo meu código PHP

30 Dec 2009 In: Uncategorized

Um dos grandes problemas com linguagem interpretada é na hora de vender a aplicação. Ou seja, além de vendê-la, você disponibiliza o código fonte.

Em alguns casos o código aberto não é uma solução muito estratégica.

Para isso existe uma alternativa em pecl: bcompiler.
Este possibilita, dentre várias alternativas, a pré-compilação e compilação do código PHP.

Instalando no Linux
Obs: Esta demonstração será na distro ubuntu 9.10 com php5 e bcompiler0.9.2.

Package necessários:
php5-dev libbz2-dev

Para instalar:

sudo apt-get install php5-dev libbz2-dev

Baixando o bcompiler
http://pecl.php.net/package/bcompiler/
Baixe a última versão

  • Desmonte a compactação.
  • Entre no diretório criado e execute os seguintes comandos:
phpize
./configure
make
make test
make install

Após esses passos, entre com o gedit ou outro editor e edite o php.ini:

sudo gedit /etc/php5/apache2/php.ini

Adicione no final do arquivo:

extension=bcompiler.so

E reinicie o Apache:

sudo /etc/init.d/apache2 restart

Crie o phpinfo:
Você poderá visualizar as informações da instalação do bcompiler.

<php
   phpinfo();
?>

Um pequeno exemplo da utilização do bcompiler
Informações: www.php.net/bcompile

Crie um arquivo myclass.php:

<?php
class MyClass {
   private $test = null;
 
   public function setVar($var){
      $this->var = $var;
   }
 
   public function getVar(){
      return $this->var;
   }
}

Agora criaremos o arquivo compiler.php que transformará nosso arquivo myclass.php em bytecodes:

<?php
   $fh = fopen("myclass.phb", "w");
   bcompiler_write_header($fh);
   bcompiler_write_file($fh, "myclass.php");
   bcompiler_write_footer($fh);
   fclose($fh);
?>

Execute o compiler.php e o script criará um arquivo myclass.phb.

Pronto! Este arquivo já esta em bytecode.

Seu manuseio é semelhante a um arquivo php.
Exemplo: include “myclass.phb”;

Por hoje é so… :)

Instalando o LAMP no ubuntu e habilitando o mod rewrite.

8 Dec 2009 In: Linux

Bom, vai parecer um pouco, ou melhor, bastante duplicados, mas vou ensinar os passos para instalar o LAMP no ubuntu. Utilizarei a distro ubuntu 9.10. Instalando o Apache No terminal, execute:

sudo apt-get install apache2

Com isso você já terá o apache rodando. Teste: http://localhost/ Instalando o PHP

sudo apt-get install php5 libapache2-mod-php5
sudo /etc/init.d/apache2 restart

Instalando o MySQL

sudo apt-get install mysql-server
sudo apt-get install libapache2-mod-auth-mysql php5-mysql phpmyadmin

E por fim, o que não poderia faltar: habilitando o Mod_Rewrite do Apache

sudo a2enmod rewrite
sudo sed -i '//{N;N;s/none$/All/i}' /etc/apache2/sites-enabled/000-default
sudo apache2ctl restart

Tela branca no CakePHP

28 Sep 2009 In: Uncategorized

Hoje tive um problema no qual nunca tinha passado: uma tela branca depois de mandar os arquivos para o servidor e acessar a url.
Nada de erro, nada de nada… Pronto, pânico!
Procurando um pouquinho na net, me deparei com um post do Tulio, que passou por este mesmo problema.
Foi resolvido mandando os arquivos para o servidor no modo Binário.
Aqui funcionou depois de trocar o modo de transferência.
Ps: Também tive que colocar 1 transferência simultânea.

Usando o Component Auth do CakePHP

1 Sep 2009 In: CakePHP, Framework, Programação, component

Tenho visto várias pessoas com dúvidas em relaxão a utilização do componente Auth, por este motivo descidi escrever este pequeno tutorial.

Tudo começa com seu app_controller

app_controller.php

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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
<?php
class AppController extends Controller {
 
	public $components = array('Auth');
 
	public function beforeFilter(){
 
		/** 
		* Configuração das para que o Auth identifique os 
		* campos de acesso no sistema
		*/
		$this->Auth->fields = array(
			'username' => 'email',
			'password' => 'password'
		);
 
		/**
		* Caso acesso a area restrita e não logado é
		* redirecionado para efetuar login
		*/
		$this->Auth->loginAction = array(
			'controller' => 'users',
			'action' => 'login',
			Configure::read('Routing.admin') => true
		);
 
		/**
		* Redirecionamento após login
		*/
		$this->Auth->loginRedirect = array(
			'controller' => 'users',
			'action' => 'index',
			Configure::read('Routing.admin') => true
		);
 
		/**
		* Redirecionado quando o usuário requesita logout
		*/
		$this->Auth->logoutRedirect = array(
			'controller' => 'users',
			'action' => 'login',
			Configure::read('Routing.admin') => true
		);
 
		/**
		* Somente user ativo e administradores
		*/
		$this->Auth->userScope = array('User.status' => 1);
 
		// Autenticação somente para admin
		if (!isset($this->params['prefix'][Configure::read('Routing.admin')])) {
			$this->Auth->allowedActions = array('*');
		}else{
			$this->Auth->allowedActions = array(
				'admin_recover_password', // Caixa para colocar e-mail e recuperar senha
				'admin_edit_password' // link que é enviado por email para cadastrar nova senha
			);
		}
 
		$this->Auth->loginError = 'Erro na autenticação';
		$this->Auth->authError = 'É necessário a autenticação no sistema';
		$this->Auth->authorize = 'controller';
	}
 
	/**
	* Verifica se usuário esta logado
	*
	* @return boolean
	*/
	public function isAuthorized(){
		return true;
	}
}

em meu controller

users_controller.php

1
2
3
4
5
<?php
class UsersController extends AppController {
	public function login(){}
}
...

Feito estes ajustes é so criar as view e pronto o component Auth fará o resto.

ps: Ao adicionar um usuário o Auth se encaregará de fazer o hash da senhas.

até a proxima.

Paginação com dados HABTM CakePHP

25 Aug 2009 In: CakePHP, Framework, Programação

Uma exelente receita de bolo para paginação entre dados que estão relacionados em HABTM

http://cakebaker.42dh.com/2007/10/17/pagination-of-data-from-a-habtm-relationship/

Esses dias estava refletindo o quanto fico fácil programar para internet, claro com ajuda dos diversos frameworks.
Uma ferramenta indispensável para mim é o Framework de desenvolvimento a-lá JavaScript jQuery, esta excelente caixa de ferramentas ajuda muito com o desenvolvimento de efeitos e melhorias na acessibilidade de um site. Pensando nisso separei alguns plugins os quais eu mais uso.

Validation
link: http://docs.jquery.com/Plugins/Validation
função: Validação de campos de formulários
exemplo:

<input type="text" name="name" class="required" />
1
2
3
$(document).ready(function(){
        $("#form").validate();
});

Masked Input
link: http://www.tidbits.com.br/plugin-de-mascara-para-jquery-masked-input
função: Mascara em objetos de formulários
exemplo:

1
2
3
4
5
6
$(document).ready(function(){
	$("#telefone").mask("9999-9999");
	$("#cpf").mask("999.999.999-99");
	$("#cep").mask("99999-999");
	$("#data").mask("99/99/9999");
});

Uploadify
link: http://www.uploadify.com/demo/
função: Alternativa muito boa para o swfupload totalmente em JQuery e aberto para modificação no flash.
exemplo:

1
2
3
4
5
6
7
8
$(document).ready(function() {
       	$("#fileInput1").uploadify({
	'uploader'       : '/_scripts/uploadify.swf',
	'script'         : '/_scripts/uploadify.php',
	'cancelImg'      : '/_images/cancel.png',
	'folder'         : '/_uploads',
	'multi'          : false
});

Datepicker
link: http://jqueryui.com/demos/datepicker/
função: Calendaria e mais calendario.
exemplo:

1
2
3
$(function() {
	$("#datepicker").datepicker();
});

jwysiwyg
link: http://code.google.com/p/jwysiwyg/
função: Este editor wysiwyg é excelente apesar de não ser o mais famoso é bem usado no meio JQuery.
exemplo:

1
2
3
$(function(){
    $('#wysiwyg').wysiwyg();
});

SVN Ignorando a pasta tmp do CakePHP

31 Jul 2009 In: CakePHP, SVN

Uma coisa muito chata é quando você da commit no Tortoise e ele também adiciona na lista os arquivos tmp do CakePHP.

Solução:

Entre em propriedades do Tortoise na pasta tmp
Entre no opção New…
Selecione a opção svn:ignore no campo Property name
No campo Property value adicione o *
Selecione a opção Apply property recursively e click em ok

Pronto quando você der commit as próximas vezes ele ignorará a pasta tmp e seu conteúdo.

ufa :D

Plugin PagSeguro para CakePHP

17 Jul 2009 In: CakePHP, Framework, Programação, php

Plugin PagSeguro

Finalmente consegui achar tempo para fazer este plugin. A idéia dele é bem simples. Você tem à disposição um component e um helper. Você manda um array com todas as informações da compra para o component e ele reorganiza tais informações, passando para o padrão do PagSeguro. Após isso, é só mandar para view e chamar o helper para criar o form e os hiddens padrões.

Segue um exemplo:

Utilizando o pligin

Em seu controller, chame o component e o helper:

var $components = array('Pagseguro.PagSeguro?');
var $helpers = array('Pagseguro.Formpg');

Array padrão referente às informações necessárias e opcionais para o PagSeguro:

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
 $sale = array(
        'email_cobranca' => null,
        'tipo' => 'CP',
        'moeda' => 'BRL',
        'tipo_frete' => 'SD', //opcional
        'ref_transacao' => null, //opcional
        'produto' => array(
           1. => array(
                  'item_id' => null,
                  'item_descr' => null,
                  'item_valor' => null,
                  'item_quant' => null,
                  'item_frete' => null, //opcional
                  'item_peso' => null, //opcional
                  'item_quant' => null 
            ) 
        ), 
        'cliente' => array( //opcional
            'nome' => null, //opcional
            'cep' => null, //opcional
            'end' => null, //opcional
            'num' => null, //opcional
            'compl' => null, //opcional
            'bairro' => null, //opcional
            'cidade' => null, //opcional
            'uf' => null, //opcional
            'pais' => null, //opcional
            'ddd' => null, //opcional
            'tel' => null, //opcional
            'email' => null //opcional 
        ) 
    );

Arrumando valores referentes à dinheiro, se seu sistema jogar o valor com vírgula ou ponto. Exemplo: 30,99 ou 30.99.

$valor = $this->PagSeguro->parcePagSeguro('30.98');
//retorno 3098;

Setando os dados:

$this->PagSeguro->setSale($sale);

Arrumando no padrão e mandando para a view:

$this->set('data', $this->PagSeguro->generateInformation());

Na view:

echo $formpg->create();
echo $formpg->hidden($data);
echo $formpg->submit(array('img' => 'btnFinalizar.jpg')); //opções: btnFinalizaBR.jpg btnConcluirBR.jpg btnFinalizar.jpg btnConcluir.jpg
echo $formpg->end();

Download

Repositório em desenvolvimeto

svn checkout http://pagseguro.googlecode.com/svn/trunk/

Última versão estável

svn checkout http://pagseguro.googlecode.com/svn/tags/0.1.0

Site do oficial das ferramentas PagSeguro

http://visie.com.br/pagseguro/cake.php

Bugs, sugestões, duvídas ou elogios:

http://code.google.com/p/pagseguro/

:)