jun 25

Assistindo FISL10 com o VLC

Como não pude participar do FISL10 estou assistindo as palestras pela TV Software Livre.

O meu Firefox anda rebelde com Java e não consigo assistir as palestras sem travar, então resolvi assistir usando o VLC.

Segue uma cola para acessar rápido digitando no console do Linux:

Sala TVSL – vlc http://stream.softwarelivre.org/iceredir/tvsl.ogg
Sala FISL 1 – 40A – vlc http://stream.softwarelivre.org/iceredir/fisl1.ogg
Sala FISL 2 – 41A – vlc http://stream.softwarelivre.org/iceredir/fisl2.ogg
Sala FISL 3 – 41B – vlc http://stream.softwarelivre.org/iceredir/fisl3.ogg
Sala FISL 4 – 41C – vlc http://stream.softwarelivre.org/iceredir/fisl4.ogg
Sala FISL 5 – 41D – vlc http://stream.softwarelivre.org/iceredir/fisl5.ogg
Sala FISL 6 – 41E – vlc http://stream.softwarelivre.org/iceredir/fisl6.ogg
Sala FISL 7 – 41F – vlc http://stream.softwarelivre.org/iceredir/fisl7.ogg
Sala FISL 10 – Teatro – vlc http://stream.softwarelivre.org/iceredir/fisl10.ogg

usando o comando “vlc http://url” você consegue abrir o VLC direto no canal.

Ripando vídeo com o VLC
Ex:

# vlc http://stream.softwarelivre.org/iceredir/fisl7.ogg --sout '#duplicate{dst=display,dst=std{access=file,mux=ogg,dst="/tmp/14_00_07.ogg"}}' &_

Grade:
http://fisl.softwarelivre.org/10/papers/pub/

jun 21

ImageMagick PNG -> JPG

Como fazia tempo que não mexia no M$ Word, havia me esquecido que a M$ tem sérios problemas com arquivos de imagem PNG.
Fiz todas as imagens no OpenOffce usando PNG.
Ai quando precisei terminar o arquivo no M$ Word, surpresa!
Sumiram todas as minhas imagens.

Como não estava afim de perguntar para o Google como que eu resolvia isso, fiz um bash para listar as imagens e usando o convert do Imagemagick para converter os arquivos.

Segue o script sem vergonha?

files="*.png"
for i in $files
do
  m_name=`basename $i .png`
  convert  $i  jpg/$m_name.jpg

  echo $m_name.jpg
done

Referência: http://www.imagemagick.org/script/index.php

jun 01

Desenvolvendo um bolo de milho (sem lactose e sem glúten) – 1.0 Release

O objetivo deste tutorial é desenvolver um bolo de milho sem glúten e sem lactose.

Notas da versão 1.0 Release
- FIX, retirado leite de soja (não fazia parte da receita original)

Ingredientes

5 espigas de milho verde
3 ovos
2 xícaras de açúcar refinado
1 xícara de óleo (de preferência de canola)
- 1 xícara de leite de soja sem lactose
1 colher de sopa de fermento

bolo_ingredientes

Preparo

1) Unte a forma com manteiga e coloque maizena
2-3) Raspe as 5 espigas de milho no liquidificador
4) Coloque todos os ingredientes listados acima
5) Bata tudo por 1 minuto
6) Coloque o conteúdo na forma, e leve ao forno por +-40min a 260º
7) Separe um pedaço para você antes que acabe

bolo_preparo

fev 27

Três Windows ao mesmo tempo com o VirtualBox

A primeira pergunta que se faz quando se lê um título deste é:

Para que me serve rodar Windows dentro do Linux? Muito menos três deles.

Calma eu explico.

Infelizmente temos que aceitar o fato de que a maioria das pessoas usam o Windows. A maioria usa o navegador padrão dele, o Internet Explorer.
Muitos usam e nem sabem o que é um navegador.

Para fazer um website, temos que estar atentos para que o mesmo funcione no IE6/7/8, no Opera, no Safari, no Firefox no Crome no etc.
E como testar tudo isso?

Existem várias ferramentas para testar como, plugins do Firefox, alguns softwares para Windows, alguns hacks usando Wine no Linux ou ainda, usa um virtualizador, como o VirtualBox. A melhor opção ainda acho que é o VirtualBox.

Com o VrtualBox podemos instalar vários sistemas operacionais sem causar danos a máquina.
Como sou um usuário Debian, e desenvolvo websites, preciso sempre estar testando eles no IE6/7.

Instalação do VirtualBox

Baixando direto do site:

Instalando no Debian:

# apt-get install virtualbox-ose virtualbox-ose-guest-utils

Instalando no Windows:

Baixa
clica clica clica ...

Instalação do Windows

Escolhendo o sistema operacional:
vbox_01

Escolhendo a quantidade de memória do sistema:
vbox_02

Criando um HD virtual:
- Clique em novo
- Selecione a opção Imagem dinamicamente expansível (assim ela só ocupara o espaço que estiver instalado o sistema)
vbox_03
vbox_04

Configurando CD/ISO:
- Clique em CD/DVD-ROM
- Configure o seu CD/DVD-ROM ou selecione uma ISO
vbox_05
vbox_06

Instalação do Seamless

O Seamless é um modo no qual desaparece o fundo do Windows, fazendo com que as janelas fiquem como se fossem do Linux.

Clique em: Dispositivos -> Instalar adicionais para convidados
vbox_07

Espere um pouco e prossiga a instalação dos drivers do VirtualBox dentro do Windows hospedeiro:
vbox_08

Depois de reiniciar, selecione a opção: Máquina -> Modo Seamless
vbox_09

Os Três Windows

A cima temos o Windows XP SP2, a baixo temos um Windows Vista e ao lado direito um Windows XP SP3:
vbox_11

Três versões de Internet Explorer (ou carinhosamente chamado de IECA):
vbox_12

Você também pode instalar varias versões de Linux dentro do seu Windows, para ir se acostumando, quem sabe um dia você mude…

fev 24

SOAP com Zend Framework

Objetivo

O objetivo deste tutorial é ensinar a criar um Servidor SOAP, utilizando
a biblioteca do Zend Framework.
Pedi para o meu amigo Artista Frustrado, elaborar uma introdução a webservice, e fazer exemplos em outras linguagens, confira.

Material

Componentes do Zend Framework:

  • Zend_Loader
  • Zend_Soap
  • Zend_Soap_Client
  • Zend_Soap_AutoDiscover

Arquivos soap.tar.bz2:

/index.php
/client.php
/Client
    /Calculadora.php
/Server
    /Calculadora.php
    /ServerSoap.php
/README

Testado no seguinte ambiente:

  • Versão do Zend Framework testada: 1.7.5
  • Sistema Operacional: Linux
  • Distribuição: Debian Lenny
  • Versão do PHP: PHP 5.2.6-1+lenny2
  • Versão do Apache: Apache/2.2.9 (Debian)

Material recomendado para leitura:

SOAP

O SOAP é um protocolo de comunicação entre o web service e o cliente. Suas especificações não são simplesmente uma transferência de XML basica, são envolvidas diversas regras para aplicações em diveras plataformas e formatos de XML.

Quando utilizar SOAP?

Quando você não quer disponibilizar a apresentação da camada so seu aplicativo, e sim, apenas algumas funcionalidades, evitando abrir conexões com bancos.

Quando você tem que iteragir com outros sistemas homogeneos. Exemplo, o seu fornecedor tem uma aplicação em .NET e precisa acessar uncionalidades do seu sistema que é feito em PHP. Assim, temos linguagens, sistemas operacionais e banco de dados diferentes podendo se comunicar.

Quando você quer centralizar as regras de negócios no servidor. Usando clientes que acessam o servidor, sendo eles qualquer dispositivo (PDA, Terminal, celular etc.)

Configurando o Ambiente

Temos a seguinte estrutura de pastas:

/soap
    /index.php
    /client.php
   /Client
        /Calculadora.php
    /Server
        /Calculadora.php
        /ServerSoap.php
    /README
/zf

Na pasta soap é aonde ficam os arquivos e na pasta zf a biblioteca do Zend Framework.

- Descompacte o arquivo soap.tar.bz2 na sua pasta web (no meu caso foi na pasta /var/www)

- Configure o apache para apontar para a pasta do soap
No Linux:


    ServerName soap.localhost
    DocumentRoot /mnt/dados/www/soap

- Adicione no arquivo hosts: 127.0.0.1 soap.localhost
No Linux: adicione a linha no arquivo /etc/hosts

- Reinicie o apache

- Teste no browser os endereços:
– http://soap.localhost
– http://soap.localhost?wsdl

- Finalmente execute o cliente:
No Linux:

:# php cliente.php

Deve aparecer a seguinte resposta:
##############################

Lista das funções disponíveis:
array(3) {
  [0]=>
  string(12) "string ola()"
  [1]=>
  string(25) "int somar(int $a, int $b)"
  [2]=>
  string(45) "string objeto(string $objeto, string $metodo)"
}

ola() -> Oi

somar(2,2) -> 4

calculadora->somar(3,3) -> 6

calculadora->naoexiste() -> O método: naoexiste() não foi implementado.

##############################

Pronto você já esta usando SOAP.

Exemplo

O nosso exemplo consiste em um servidor web rodando um web service em PHP com Zend_Soap_Client Zend Framework, e um cliente também em PHP que acessa a mesma máquina através do console, no endereço http://soap.localhost.

O cliente deve solicitar ao servidor algumas funções, e obter suas respostas.

O arquivo index.php contém o código para a criação do arquivo WSDL e do servidor SOAP.
O Zend_Soap_AutoDiscover cria o arquivo WSDL para o servidor SOAP.
O Zend_Soap que executa as funções cadastradas no WSDL, por isso que é passado por parâmetro a url http://soap.localhost/index.php?wsdl .

arquivo index.php

set_include_path(
    '../zf/ZendFramework-1.7.5/library/'
    . PATH_SEPARATOR . get_include_path()
);

require_once "Server/Calculadora.php";
require_once "Server/Soap.php";
require_once "Zend/Loader.php";
Zend_Loader::registerAutoload();

ini_set("soap.wsdl_cache_enabled", 0); //** Limpa o cache

if(isset($_GET['wsdl'])) {
    //** Cria o arquivo WSDL automaticamente
    $autodiscover = new Zend_Soap_AutoDiscover();
    $autodiscover->setClass('ServerSoap');
    $autodiscover->handle();
} else {
    //** Executa o servidor SOAP
    $soap = new Zend_Soap_Server("http://soap.localhost/index.php?wsdl");
    $soap->setClass('ServerSoap');
    $soap->handle();
}

IMPORTANTE: Deve-se colocar o tipo de dados que os métodos recebem e retornam usando os tipos de dados do PHPDOC. Veja nos comentários do exemplo.

arquivo Server/Soap.php

class ServerSoap
{
    /**
     *  @return string
     */
    public function ola()
    {
        return "Oi";
    }

    /**
     * @param int $a
     * @param int $b
     * @return int
     */
    public function somar($a,$b)
    {
        return $a + $b;
    }

    /**
     * Executa uma classe vinda do cliente.
     *
     * @param string $objeto
     * @param string $metodo
     * @return string
     */
    public function objeto($objeto, $metodo)
    {
        $tmp = unserialize($objeto);

        //** Verifica se o método existe para o $objeto
        $class_methods = get_class_methods($tmp);
        foreach ($class_methods as $method_name) {
            if($method_name == $metodo)
            {
                $tmp->$metodo();
                return serialize($tmp);
            }
        }

        $tmp->msg = "O método: {$metodo}() não foi implementado.";
        return serialize($tmp);
    }
}

O Zend_Soap_Client conecta no servidor SOAP, passando a url do WSDL. Para acessar as funções cadastradas basta a variável instanciada e o nome da função.

arquivo client.php:

set_include_path(
    '../zf/ZendFramework-1.7.5/library/'
    . PATH_SEPARATOR . get_include_path()
);

require_once "Client/Calculadora.php";
require_once "Zend/Loader.php";
Zend_Loader::registerAutoload();

ini_set("soap.wsdl_cache_enabled", 0); //** Limpa o cache

//** Inicia a conexão com o cliente
$client = new Zend_Soap_Client("http://soap.localhost/index.php?wsdl");

echo "\n##############################\n\n";

echo "Lista das funções disponíveis:\n";
var_dump($client->getFunctions());

//** Chama a função ola()
echo "\nola() -> ".$client->ola() ."\n\n";

//** Chama a função somar(a,b)
echo "somar(2,2) -> ".$client->somar(2,2) ."\n\n";

//** Cria o objeto Calculadora e passa para o SOAP executar a soma
$calculadora = new Calculadora(3,3);

$soapCalculadora =  $client->objeto(serialize($calculadora), "somar"); //* A Calculadora tem que ser serializada antes de passar para o SOAP.
$unserializeCalculadora = unserialize($soapCalculadora); //* A Calculadora tem que ser deserializada antes de chamar o metodo resposta().
echo "calculadora->somar(3,3) -> ".$unserializeCalculadora->resposta()."\n\n"; 

$erroCalculadora = $client->objeto(serialize($calculadora), "naoexiste");//** Tentando executar um método inexistente.
$erroCalculadora = unserialize($erroCalculadora);
echo "calculadora->naoexiste() -> ".$erroCalculadora->msg."\n";

echo "\n##############################\n\n";

A classe Calculadora

Temos duas instâncias do objeto Calculadora, uma para o servidor , aonde contém o método calcular() e a do cliente aonde temos o método resposta().
Para passar o objeto Calculadora do cliente para o servidor, e depois do servidor para o cliente, usamos uma técnica chamada serialização.

Server/Calculadora.php

/**
 * Classe calculadora do servidor
 *
 */
class Calculadora
{
    public $a;
    public $b;
    public $resposta;

    /**
     * Executa a soma
     *
     */
    public function somar()
    {
        $this->resposta = $this->a + $this->b;
    }
}

Client/Calculadora.php

/**
 * Classe calculadora do cliente
 *
 */
class Calculadora
{
    public $a;
    public $b;
    public $resposta;

    /**
     * Construtor da classe
     *
     * @param int $a
     * @param int $b
     * @return void
     */
    public function __construct($a, $b)
    {
        $this->a = $a;
        $this->b = $b;
    }

    /**
     * Retorna a resposta da soma
     *
     * @return int
     */
    public function resposta()
    {
        return $this->resposta;
    }
}

Para dúvidas ou críticas construtivas entre em contato.

fev 23

Instalando ambiente de desenvolvimento (TRAC + SVN)

Este post não é para ser um tutorial, mas sim um lembrete de como instalar e criar um ambiente de desenvolvimento no Debian, utilizando o TRAC e o SVN sobre o Apache2.

Material de consulta:
TRAC
SVN
WebAdmin

Instalando o TRAC e o SVN:

# apt-get install apache2 subversion libapache2-svn trac libapache2-mod-python

Configurando o Projeto:

Para organizar melhor o seu projeto utilize a seguinte estrutura no seu projeto:

/var/www/
    projeto/
        svn/   //seu subversion
        trac/ //seu trac
        www/ //seu ambiente de teste caso seja um projeto web
        desktop/ //seu ambiente de teste caso seja um projeto desktop

Vamos aos comandos:

criando pastas:

# mkdir /var/www/projeto
# cd /var/www/projeto/

Criando o repositório SVN:

#  svnadmin create svn

Criando o TRAC do projeto:

#  trac-admin trac initenv

Criando as senhas pelo Apache tanto para o SVN quanto para o TRAC:

# htpasswd2 -c /var/www/projeto/svn.passwd eu

Configurando SVN no Apache2:


        ServerName svn.localhost
        ErrorLog /var/log/apache2/error_svn_log
        CustomLog /var/log/apache2/access_svn_log common
        
                DAV svn
                SVNPath /var/www/projeto
                AuthType Basic
                AuthName "Projeto"
                AuthUserFile /var/www/projeto/svn.passwd

                        Require valid-user
                
                # SSLRequireSSL
        

Configurando o TRAC no Apache2:


        ServerName trac.localhost
        CustomLog /var/log/apache2/access_trac_log combined
        ErrorLog /var/log/apache2/error_trac_log
        Alias /trac "/usr/share/pyshared/trac/htdocs/"
        SetEnv TRAC_ENV "/var/www/projeto/trac/htdocs"
        ScriptAliasMatch ^/(.*) /usr/share/trac/cgi-bin/trac.cgi/$1
        
                AuthType Basic
                AuthName "Lanche"
                AuthUserFile /var/www/projeto/svn.passwd
                Require valid-user
                # SSLRequireSSL
        

Após instalar o TRAC, vale apena instalar o WebAdmin que possibilita o gerenciamento do TRAC via WEB sem precisar entrar no console via trac-admin, caso seja menor que TRAC 0.11.xx.

Se for um TRAC 0.11.xx basta adicionar as linhas abaixo na configuração:

[components]
webadmin.* = enabled

Outra hora explico o porque de usar o TRAC + SVN.

Posts mais antigos «

» Posts mais novos