Archive for março \27\-02:00 2013

Ubuntu 12.04 LTS: Configurando Pentaho na inicialização

Posted on março 27, 2013. Filed under: Linux, Pentaho, Ubuntu | Tags:, , , , |

Introdução

O objetivo deste artigo é disponibilizar scripts de inicialização para os serviços do Pentaho BI Server e Pentaho Administration Console. Os scripts foram feitos para uso no Ubuntu Server 12.04 LTS.

Instalação do Pentaho

Recomendo o link abaixo para instalação do Pentaho BI Server no Ubuntu 12.04 LTS. Apesar do link estar se referindo ao Ubuntu Desktop, realizei a instalação normalmente em um Ubuntu Server.

http://akbarahmed.com/2012/05/24/install-pentaho-bi-server-4-5-on-ubuntu-12-04-lts-desktop/

Script init para o Pentaho BI Server

Criar o script de init abaixo em /etc/init.d/pentaho:
(PS: Configurar as variáveis de ambiente JAVA_HOME, JRE_HOME e PENTAHO_HOME de acordo com sua instalação)

#!/bin/bash
### BEGIN INIT INFO
# Provides: start-pentaho stop-pentaho
# Required-Start: networking
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Description: Pentaho BI Platform
### END INIT INFO

export JAVA_HOME="/usr/lib/jvm/jdk1.6.0_31"
export JRE_HOME="/usr/lib/jvm/jdk1.6.0_31/jre"
export PENTAHO_HOME="/opt/pentaho"

start(){
        echo "Iniciando aplicacao biserver"
        $PENTAHO_HOME/biserver-ce/start-pentaho.sh > /tmp/pentaho.out 2>&1
        echo "ok"
}

stop(){
        echo "recebi: $1"
        echo "Finalizando aplicacao biserver"
        $PENTAHO_HOME/biserver-ce/stop-pentaho.sh
        echo "ok"
}

case "$1" in
start)
        start $2
        ;;
stop)
        stop $2
        ;;
*)
        printf "\nUsage: $0 \n
                start | stop            : Inicia ou finaliza a aplicacao biserver\n"
        ;;
esac
exit 0

Instalando os links de init:

# update-rc.d pentaho defaults
 Adding system startup for /etc/init.d/pentaho ...
   /etc/rc0.d/K20pentaho -> ../init.d/pentaho
   /etc/rc1.d/K20pentaho -> ../init.d/pentaho
   /etc/rc6.d/K20pentaho -> ../init.d/pentaho
   /etc/rc2.d/S20pentaho -> ../init.d/pentaho
   /etc/rc3.d/S20pentaho -> ../init.d/pentaho
   /etc/rc4.d/S20pentaho -> ../init.d/pentaho
   /etc/rc5.d/S20pentaho -> ../init.d/pentaho

Script init para o Pentaho Administration Console

Criar o script de init abaixo em /etc/init.d/pentaho-adm:
(PS: Configurar as variáveis de ambiente JAVA_HOME, JRE_HOME e PENTAHO_HOME de acordo com sua instalação)

#!/bin/bash
### BEGIN INIT INFO
# Provides: start-pentaho-adm stop-pentaho-adm
# Required-Start: networking
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Description: Pentaho BI Platform Administration Console
### END INIT INFO


export JAVA_HOME="/usr/lib/jvm/jdk1.6.0_31"
export JRE_HOME="/usr/lib/jvm/jdk1.6.0_31/jre"

export PENTAHO_HOME="/opt/pentaho"

start(){
        echo "Iniciando aplicacao administration-console"
        cd $PENTAHO_HOME/administration-console && ./start-pac.sh > /tmp/pentaho_console.out 2>&1 &
        echo "ok"
}

stop(){
        echo "recebi: $1"
        echo "Finalizando aplicacao administration-console"
        cd $PENTAHO_HOME/administration-console && ./stop-pac.sh
        echo "ok"
}

case "$1" in
start)
        start $2
        ;;
stop)
        stop $2
        ;;
*)
        printf "\nUsage: $0 \n
                start | stop : Inicia ou finaliza o administration console\n\n"
        ;;
esac
exit 0

Instalando os links de init:

# update-rc.d pentaho-adm defaults
 Adding system startup for /etc/init.d/pentaho-adm ...
   /etc/rc0.d/K20pentaho-adm -> ../init.d/pentaho-adm
   /etc/rc1.d/K20pentaho-adm -> ../init.d/pentaho-adm
   /etc/rc6.d/K20pentaho-adm -> ../init.d/pentaho-adm
   /etc/rc2.d/S20pentaho-adm -> ../init.d/pentaho-adm
   /etc/rc3.d/S20pentaho-adm -> ../init.d/pentaho-adm
   /etc/rc4.d/S20pentaho-adm -> ../init.d/pentaho-adm
   /etc/rc5.d/S20pentaho-adm -> ../init.d/pentaho-adm
Ler Post Completo | Make a Comment ( None so far )

Facebook sdk, publicação offline no mural do usuário com access token

Posted on março 26, 2013. Filed under: Facebook, PHP | Tags:, , , , , , |

Introdução

Neste artigo vamos aprender como realizar publicações no mural do usuário mesmo o usuário estando offline na sua aplicação do facebook. A publicação é feita no feed de notícias, ficando disponível para todos amigos.

Para que seja possível publicar no mural do usuário offline, vamos precisar dos seguintes procedimentos:

  • É necessário que o usuário tenha acessado sua aplicação em algum momento e ter fornecido a permissão de publicação chamada publish_stream.
  • Guardar o identificador do usuário do facebook em nosso banco de dados.
  • Gerar e armazenar o access token do nosso aplicativo.

Com posse desses dados, podemos seguir adiante no nosso script de publicação offline.

Primeiro, vamos a um exemplo simples de como obter o ID do usuário no facebook e solicitar a permissão publish_stream. Depois veremos como obter o access token do seu aplicativo e por final, um script que demonstra como fazer a publicação no mural do usuário com access token.

Solicitando permissão de publicação e obtendo o ID do facebook

Em um primeiro instante, o usuário precisa acessar nossa aplicação e fornecer a permissão publish_stream. Faça essa implementação em seu aplicativo de acordo com suas próprias regras. Segue abaixo um script simples que realiza as operações que necessitamos. Utilize-o adaptando de acordo com sua necessidade.

<?php
// incluir a lib fo facebook
require 'facebook-php-sdk-master/src/facebook.php';

// Cria a instancia da aplicacao, informando o appid e o secret
$facebook = new Facebook(array(
  'appId'  => 'APP_ID',
  'secret' => 'SECRET',
));

$user_id = $facebook->getUser();

if ($user_id) { // usuario logado
	// solicitar permissao
	try {
		$permissions = $facebook->api("/me/permissions");
		if(! (array_key_exists('publish_stream', $permissions['data'][0])
		)) {
			header("Location: " . $facebook->getLoginUrl(array("scope" => "publish_stream")));
		    	exit;
		}
        } catch (FacebookApiException $e) {
                error_log($e);
                $user = null;
        }
	//
	// $user_id e o id do usuario no facebook
	// salvar o ID do usuario em banco
	echo $user_id;

} else {
        // usuario nao logado, solicitar autenticacao
        $loginUrl = $facebook->getLoginUrl();
	header("Location: $loginUrl");
}

Mais detalhes de como solicitar permissões pelo aplicativo, acessar meu aritgo Facebook App: Requisitando permissões pela API do PHP

Obtendo o access token do seu aplicativo

Para que seja feita a publicação no mural do usuário com ele estando offline de seu aplicativo, é necessário termos em mão o access token do nosso aplicativo.

Para gerar o access token é simples, basta acessar a URL abaixo, substituindo os campos YOUR_APP_ID e YOUR_APP_SECRET pelos respectivos dados do seu aplicativo.

https://graph.facebook.com/oauth/access_token?client_id=YOUR_APP_ID&client_secret=YOUR_APP_SECRET&grant_type=client_credentials

A resposta da URL acima, deverá retornar no seguinte formato:

access_token=YOUR_APP_ACCESS_TOKEN

Salve o access token do seu aplicativo em um lugar onde poderá recuperá-lo mais tarde. (Normalmente em um banco de dados).

Expiração do access token

O access token do seu applicativo é assinado e associado ao seu APP_ID e SECRET. Portanto, o access token do aplicativo não expira, a não ser caso você resetar o seu APP_ID e SECRET.

Caso o usuário tenha removido seu aplicativo da lista de Aplicativo Configurados, você também não conseguirá mais postar no mural dele. Portanto, seja prudente ao realizar as publicações. Avise o usuário sobre a sua intenção de publicação no momento que o usuário ingressar no seu aplicativo.

Aplicativo de publicação

Segue abaixo um script simples que realiza a publicação no mural do usuário, sem a necessidade dele estar online no seu aplicativo.

<?php
// incluir a lib fo facebook
require 'facebook-php-sdk-master/src/facebook.php';

// Cria a instancia da aplicacao, informando o appid e o secret
$facebook = new Facebook(array(
  'appId'  => 'APP_ID',
  'secret' => 'SECRET',
));

// dados para envio da publicacao
$feed_data = array(
	"message" => "Youtube",
	"name" => "Site do Youtube", 
	"link" => "http://www.youtube.com", // link da publiccao
	"caption" => "www.youtube.com",
	"access_token" => "YOUR_APP_ACCESS_TOKEN",
);

try {
	// publica foto na timeline
	$dados = $facebook->api("/ID_USUARIO/feed", "post", $feed_data);
	echo "Foto publicada com sucesso!";
} catch (Exception $e) {
	echo "<pre>";
	var_dump($e);
	echo "</pre>";
}

Lembre-se de substituir os seguintes parâmetros:

  • APP_ID: ID do seu aplicativo.
  • SECRET: SECRET do seu aplicativo.
  • YOUR_APP_ACCESS_TOKEN: access token do seu aplicativo.
  • ID_USUARIO: ID do usuário que deseja publicar no mural.

Para mais detalhes de como realizar publicações, verificar o artigo Facebook php sdk, postando mensagens no mural do usuário

Ler Post Completo | Make a Comment ( 4 so far )

Zend Framework 2 Tips: Usando Doctrine em testes unitários

Posted on março 14, 2013. Filed under: PHP, Tips, Zend Framework | Tags:, , , |

Introdução

Neste artigo vamos aprender como instanciar o Entity Manager do Doctrine nas classes de teste unitário no Zend Framework 2. Se você usa Doctrine no seu projeto, é bem provável que algumas classes que precisará testar possuem a dependência do Entity Manager. É sobre isso que trata esse artigo.

Caso necessário, em artigo anterior, já vimos como instalar os módulos Doctrine, ZFTool e Firephp no Zend Framework 2.

Registrando os módulos do Doctrine no Config de testes

Se você criou seu módulo do Zend Framework através do ZFTool provavelmente foi criado uma pasta chamada test/ dentro do diretório pai do seu módulo. No caso de exemplo do módulo Application, que já vem instalado no esqueleto inicial do projeto, o caminho ficaria: module/Application/test/.

O primeiro passo é registrar os módulos do Doctrine dentro do arquivo TestConfig.php.dist que esta dentro do diretório test/ do seu módulo:

<?php
// module/Application/test/TestConfig.php.dist
return array(
    'modules' => array(
        'Application',
        'DoctrineModule',
        'DoctrineORMModule'
    ),
    'module_listener_options' => array(
        'config_glob_paths'    => array(
            '../../../config/autoload/{,*.}{global,local}.php',
        ),
        'module_paths' => array(
            'module',
            'vendor',
        ),
    ),
);

Bootstrap

Existe um arquivo chamado Bootstrap.php dentro do diretório test/ do seu módulo. Esse arquivo é responsável por inicializar todos os parâmetros necessários para que você possa trabalhar com testes unitários no Zend Framework.

Vamos criar dentro do arquivo Bootstrap.php um método estático que será responsável por retornar o Entity Manager do Doctrine. É através deste método que vamos acessar o Entity Manager em nossos testes:

<?php
// module/Application/test/Bootstrap.php
..
    public static function getEntityManager()
    {
    	$sm = static::getServiceManager();
    	return $sm->get('doctrine.entitymanager.orm_default');
    }
    
}

Bootstrap::init();

Acessando o Entity Manager

Por final, vamos acessar o Entity Manager dentro de nossas classes de teste. Podemos estar testando um Controller, um Model ou qualquer outro componente. Basta chamarmos o método estático Bootstrap::getEntityManager();.

Não se esqueça de usar o namespace do Bootstrap no início do seu script:

<?php
// module/Application/test/ApplicationTest/Model/AlbumTest.php
namespace ApplicationTest\Model;
use ApplicationTest\Bootstrap;
//.... setUp, etc.

public function testAlbum()
{
	$em = Bootstrap::getEntityManager();
	$album = new Album($em);
}
Ler Post Completo | Make a Comment ( None so far )

Instalando Zend Framework 2 com ZFTool, FirePhp e Doctrine

Posted on março 9, 2013. Filed under: PHP, Zend Framework | Tags:, , , , , |

Introdução

Neste artigo vamos demonstrar como instalar o esqueleto do Zend Framework 2 junto com os componentes ZFTool, FirePhp e Doctrine. Vou focar mais na instalação dos componentes. Instalar o esqueleto do Zend Framework é simples e pode ser feito através do link citado mais abaixo.

Entendo os componentes

ZFTool é uma ferramenta usada para facilitar a gerencia de projetos do Zend Framework. Pode ser usado para criar/excluir módulos, criar novas aplicações do zend framework ou simplesmente instalar o diretório library do zend framework.

O módulo do FirePHP para Zend Framework, permite que você envie informações de log diretamente para a extensão FirePHP do Firefox. Muito útil para debugar sua aplicação ZF2.

O Doctrine fornece diversas bibliotecas com foco em persistência de dados. Seus principais projetos desenvolvidos são um Object Relational Mapper (ORM) e um Database Abstraction Layer. Você pode usar ele junto com o Zend Framework 2. Um alternativa ao Zend\Db.

Lembre-se que a instalação de cada um desses componentes é feita de forma independente. Portanto, caso queira instalar apenas 1 ou de 2 desses componentes e não todos, é possível fazer sem preocupações.

Instalando o Esqueleto do Zend Framework

Aconselho usar o link abaixo para instalação inicial do zend framework. É uma referência oficial que estará sempre atualizada.
http://zf2.readthedocs.org/en/latest/user-guide/skeleton-application.html

Instalando e usando o ZFTool

Instalar o ZFTool é bem simples. Basta entrar no diretório raiz da sua aplicação do Zend Framework e executar:

$ php composer.phar require zendframework/zftool:dev-master
composer.json has been updated
Loading composer repositories with package information
Updating dependencies
  - Installing zendframework/zftool (dev-master 7bdb1bc)
    Cloning 7bdb1bcec331d995c800287b0dca614b62b701cc

Writing lock file
Generating autoload files

Usando o zftool

Para usar o zftool, copie o arquivo zf.php para a raiz da aplicação do zend framework. Dessa forma:

$ cp vendor/bin/zf.php ./

Algumas funcionalidades do ZFTool:

  • Listando módulos
  • $ ./zf.php modules
    Modules installed:
    Application
    
  • Criando módulos
  • $ ./zf.php create module Admin
    The module Admin has been created
    
    $ ./zf.php modules
    Modules installed:
    Application
    Admin
    
  • Referência completa
  • Mais funcionalidades sobre o ZFTool, acessar:
    https://github.com/zendframework/ZFTool

Instalando e usando o FirePHP

Para instalar o FirePHP, basta executar o comando abaixo na raiz do diretório do projeto do zend framework:

$ php composer.phar require firephp/firephp-core:dev-master
composer.json has been updated
Loading composer repositories with package information
Updating dependencies
  - Installing firephp/firephp-core (dev-master f60753a)
    Cloning f60753a8dd7817e4da6bc73e0e717387a9a0866a

Writing lock file
Generating autoload files

Usando o FirePHP

Para utilizar a classe de logger do Firephp, vamos primeiro criar um factory para ela no arquivo Module.php do nosso módulo. O factory deve ser criado dentro da função getServiceConfig().

No caso, estamos trabalhando com o módulo Application:

(Se necessário, caso não exista ainda, criar a função getServiceConfig() dentro de Module.php)

// module/Application/Module.php
public function getServiceConfig() {
	return array(
		'factories' => array(
			'Zend\Log\FirePhp' => function($sm) {
				$writer_firebug = new \Zend\Log\Writer\FirePhp();
				$logger = new \Zend\Log\Logger();
				$logger->addWriter($writer_firebug);
				return $logger;
			},
		),
	);
}

Exemplo de utilização do Firephp no Controller:

// module/Application/src/Application/Controller/IndexController.php
public function indexAction()
{
	$firephp = $this->getServiceLocator()->get('Zend\Log\FirePhp');
	$firephp->info("info log");
	$firephp->warn("warn log");
	$firephp->crit("critical log");

	return new ViewModel();
}

Lembre-se que para funcionar corretamente, você precisa instalar a extensão firephp no seu Mozilla Firefox:
http://www.firephp.org/

Resultado do teste anterior:

ScreenShot082

Mais detalhes, consultar a documentação do ZF:
http://framework.zend.com/manual/2.0/en/modules/zend.log.overview.html#using-built-in-priorities
http://framework.zend.com/manual/2.0/en/modules/zend.log.writers.html

Instalando e usando o Doctrine

Para instalar o Doctrine, executar o comando abaixo no diretório raiz da sua aplicação Zend:

$ php composer.phar require doctrine/doctrine-orm-module:dev-master
composer.json has been updated
Loading composer repositories with package information
Updating dependencies
  - Installing doctrine/common (2.3.0)
    Downloading: 100%

  - Installing symfony/console (v2.2.0)
    Downloading: 100%

  - Installing doctrine/doctrine-module (0.7.1)
    Loading from cache

  - Installing doctrine/dbal (2.3.2)
    Downloading: 100%

  - Installing doctrine/orm (2.3.2)
    Downloading: 100%

  - Installing doctrine/doctrine-orm-module (dev-master 8da0dab)
    Cloning 8da0dab03be4f282b97632d54979d6b45d6bf479

doctrine/doctrine-module suggests installing doctrine/data-fixtures (Data Fixtures if you want to generate test data or bootstrap data for your deployments)
doctrine/orm suggests installing symfony/yaml (If you want to use YAML Metadata Mapping Driver)
doctrine/doctrine-orm-module suggests installing zendframework/zend-developer-tools (zend-developer-tools if you want to profile operations executed by the ORM during development)
doctrine/doctrine-orm-module suggests installing doctrine/migrations (doctrine migrations if you want to keep your schema definitions versioned)
Writing lock file
Generating autoload files

Usando o Doctrine no ZF2

O primeiro passo é registrar os módulos e namespaces do doctrine no zf. Edite o arquivo APP_DIR/config/application.config.php e adicione as linhas responsáveis por registrarem os módulos do Doctrine:

return array(
    'modules' => array(
        'Application',
         outros modulos..
        'DoctrineModule',
        'DoctrineORMModule',        
        ),
        mais configs...

Depois configure os dados de conexão com o banco de dados que será utilizado pelo Doctrine. Crie um arquivo dentro de APP_DIR/config/autoload. No meu caso, criei o arquivo APP_DIR/config/autoload/doctrine_orm.local.php, parametrizando os dados de acesso ao banco de dados. Veja abaixo, que configurei uma conexão com o postgresql. Com um pouco de ajuste você pode modificar para mysql caso desejado:

<?php
// config/autoload/doctrine_orm.local.php
return array(
    'doctrine' => array(
        'connection' => array(
            'orm_default' => array(
                'driverClass' => 'Doctrine\DBAL\Driver\PDOPgSql\Driver',
                'params' => array(
                    'host'     => 'localhost',
                    'port'     => '5432',
                    'user'     => 'userdatabase',
                    'password' => 'senhadatabase',
                    'dbname'   => 'nomedatabase',
                )
            )
        )
    ),
);

Finalmente para podermos utilizar o Doctrine dentro de nosso módulo do Zend Framework precisamos de alguns ajustes no arquivo module.config.php que fica dentro do diretório config/ do módulo. Em nosso caso, em module/Application/config! Lembre-se de trocar o Application pelo nome do módulo no qual esta trabalhando.

Insira as linhas destacadas abaixo no arquivo module.config.php:

<?php
// module/Application/config/module.config.php
namespace Application;

return array(
  'router' => array(
    ...
  ),
  'controllers' => array(
    ...
  ),
  'view_manager' => array(
    ...
  ),
  'doctrine' => array(
    'driver' => array(
      __NAMESPACE__ . '_driver' => array(
        'class' => 'Doctrine\ORM\Mapping\Driver\AnnotationDriver',
        'cache' => 'array',
        'paths' => array(__DIR__ . '/../src/' . __NAMESPACE__ . '/Entity')
      ),
      'orm_default' => array(
        'drivers' => array(
          __NAMESPACE__ . '\Entity' => __NAMESPACE__ . '_driver'
        )
      )
    )
  )
);

Veja que foi necessário incluir a linha namespace no começo do arquivo, devido estamos usando a constante __NAMESPACE__ na configuração para o Doctrine. Isso facilita nosso trabalho, deixando o código desta configuração mais dinâmico um pouco.

Com essa configuração o Doctrine vai passar a procurar os arquivos Entity dentro de NomedoModulo/src/NomedoModulo/Entity. Basta criar o diretório Entity no caminho correto e dentro dele o arquivos que representam as entidades do seu banco de dados. Após essa configuração, você já esta apto à utilizar o Doctrine junto com o Zend Framework 2.

No nosso caso o caminho do diretório Entity ficaria em module/Application/src/Application/Entity.

Arquivo composer.json final

Após a instalação das 3 bibliotecas, ZFTool, FirePhp e Doctrine, nosso arquivo composer.json do Zend Framework ficou da seguinte forma:
(Destaquei apenas as linhas que foram inseridas devido a instalação das bibliotecas)

{
    "name": "zendframework/skeleton-application",
    "description": "Skeleton Application for ZF2",
    "license": "BSD-3-Clause",
    "keywords": [
        "framework",
        "zf2"
    ],
    "homepage": "http://framework.zend.com/",
    "require": {
        "php": ">=5.3.3",
        "zendframework/zendframework": "2.*",
        "zendframework/zftool": "dev-master",
        "firephp/firephp-core": "dev-master",
        "doctrine/doctrine-orm-module": "dev-master"
    }
}

Parabéns
Se você chegou até aqui e conseguiu configurar e instalar os módulos desejados na sua aplicação Zend Framework, Parabéns!

Referências

Selecionei alguns links que podem ser úteis referente ao assunto deste artigo:

https://github.com/zendframework/ZFTool
http://samminds.com/2012/07/install-doctrine-2-for-zend-framework-2/
http://www.jasongrimes.org/2012/01/using-doctrine-2-in-zend-framework-2/
http://docs.doctrine-project.org/en/2.0.x/reference/association-mapping.html
http://docs.doctrine-project.org/en/2.0.x/reference/annotations-reference.html
http://docs.doctrine-project.org/en/latest/reference/dql-doctrine-query-language.html
http://docs.doctrine-project.org/en/2.0.x/reference/query-builder.html

Ler Post Completo | Make a Comment ( None so far )

Liked it here?
Why not try sites on the blogroll...

%d blogueiros gostam disto: