sexta-feira, 22 de novembro de 2013

Criando um repositorio GIT de forma fácil e rápida

Para se criar um servidor central git para salvar seus  projetos e compartilhar com outros desenvolvedores, tenha uma máquina rodando um servidor ssh  e um dominio. Caso a máquina so faça compartilhamento num rede interna, basta ter em mãos o ip dela.

Configure os usuários e grupos com permissão de acesso a máquina e tenha certeza que todos conseguem acessar via ssh nela. Como exemplo, aqui o usuário será 'user' e o endereço do host servidor será 'meu.server.br'.

Crie uma pasta para ser o repositório dos projetos. Aqui usaremos como exemplo a pasta '/pasta/repo'.

Agora, no servidor, você vai criar uma pasta limpa para receber o projeto e executar o comando de inicialização do projeto git remoto, assim:



$ cd /pasta/repo
$ mkdir meuprojeto.git
$ cd meuprojeto.git
$ git --bare init



IMPORTANTE : a pasta do projeto compartilhado DEVE terminar com ‘.git’


Em sua área de trabalho LOCAL, você irá para a pasta do projeto que quer iniciar no servidor e executar os comandos para enviar ao repositório o projeto:



$ cd meuprojeto
$ git init
$ git add .
$ git commit -m 'meu primeiro commit'
$ git remote add origin user@meu.server.br:/pasta/repo/meuprojeto.git
$ git push origin master



E caso tenha outros desenvolvedores, basta eles fazerem uma clonagem do proejto e começarem a participar do desenvolvimento assim



$ git clone usuario@meu.server.br:/pasta/repo/meuprojeto.git


...
após algumas alterações do projeto
...
$ git commit -am 'eu fiz umas alterações ! LOL'
$ git push origin master



terça-feira, 29 de outubro de 2013

Livros ( ebooks ) gratuitos sobre PHP Framework Symfony 2

Symfony é um dos mais populares frameworks de desenvolvimento para PHP que existe hoje no mercado, e para aqueles que desenvolvem nesse framework, uma boa documentação se faz necessário.

Aqui está disponibilizado um pacote com 6 ebooks gratuitos sobre Symfony 2 - vai desde apresentação, técnicas básicas e até mesmo referências.

Para evitar um flood de downloads, eu coloquei uma senha no pacote. Então você terá de baixar a senha e o pacote para conseguir descompactar os ebooks.

Aproveitem.

Pacote de Ebooks




 

Senha



domingo, 1 de setembro de 2013

Javascript : Simples Video Player usando Youtube API

Para quem não sabe, a Google disponibiliza para desenvolvedores uma APi de manipulação para vídeos do Youtube, onde você pode ter uma grande quantidade de opções de controle.

Baseado nessa API, vou disponibilizar aqui um simples player que aceita opções.

Crie um script de nome 'youtube.js' e coloque o seguinte conteudo


// youtube.js
// Aqui é incluido a API em javascript para Youtube.
var tag = document.createElement('script');
tag.src = "https://www.youtube.com/iframe_api";
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag,firstScriptTag);

// Aqui é a função que carrega o vídeo.
// 'vid' é o id do video do youtube.
// 'playerid' é o id da tag html que vai rodar o vídeo.
function loadVideo(vid,playerid){

    var player = new YT.Player(playerid, { // O id do player é colocado, passado pelo parâmetro da função.
        height: '390',
     width: '640',
     videoId: vid, // Id do vídeo passado pelo parâmetro.
     playerVars: {
            'autoplay':'1',    // Liga o autoplay.
         'controls':'1',    // Mostra os controles.
         'enablejsapi':'1', // Usa a API javascript.
         'showinfo':'0',    // Esconde as informações de cabeçalho do vídeo.
         'autohide':'1'     // Esconde os controles automaticamente durante a execução (se 'controls' for '1' ).
     },
    });

    return false;

} 

Agora é só seguir o exemplo abaixo:


<DOCTYPE HTML>
<html lang="pt-br">
<head>
Youtube API


</head>
<body>
</body> </html>

A opções em 'playerVars' e seus valores pode ser vistas aqui: https://developers.google.com/youtube/player_parameters#Parameters

O guia de referencia para a API você encontra aqui: https://developers.google.com/youtube/iframe_api_reference

sexta-feira, 26 de abril de 2013

Script de instalação do Steam no Debian Wheezy

Finalmente estão pensando nos gamers que usam Linux. A novidade é que a Valve, criadora de jogos como Counter Strike e outros, lançou sua plataforma de jogos Steam para Linux.

Infelizmente eles fizeram mais pensando na turma do Ubuntu, e portanto é complicado fazer uma instalação do Steam para outras distros.
Felizmente, criarem um script onde toda essa complexidade é automatizada para instalar o steam, pelo menos no Debian Wheezy.

Confiram o script:

#!/bin/bash
#
# Steam installer for Debian wheezy (32- and 64-bit)
#
# Place into empty directory and run.
#

download() {
    local url="$1"
    local filename="$(basename "$url")"

    if [ ! -f "$filename" ]; then
        wget -c "$url" -O "$filename.part"
        mv "$filename.part" "$filename"
    fi
}

package() {
    local url="$1"
    local target="$2"

    download "$url"

    mkdir -p "$target"
    ar p "$(basename "$url")" data.tar.gz | tar xz -C "$target"
}

set -e

package http://media.steampowered.com/client/installer/steam.deb "${PWD}/tree"

STEAMPACKAGE="steam"
STEAMCONFIG="${HOME}/.steam"
STEAMDATALINK="${STEAMCONFIG}/${STEAMCONFIG}"
STEAMBOOTSTRAP="steam.sh"
LAUNCHSTEAMDIR="$(readlink -eq "${STEAMDATALINK}" || echo)"
LAUNCHSTEAMPLATFORM="ubuntu12_32"
LAUNCHSTEAMBOOTSTRAPFILE="${PWD}/tree/usr/lib/steam/bootstraplinux_${LAUNCHSTEAMPLATFORM}.tar.xz"
STEAM_DATA_HOME=${XDG_DATA_HOME:-$HOME/.local/share}
CLASSICSTEAMDIR="$HOME/Steam"
DEFAULTSTEAMDIR="$STEAM_DATA_HOME/Steam"

STEAMDIR="${DEFAULTSTEAMDIR}"

if [ ! -d "$STEAMCONFIG" ]; then
    mkdir "$STEAMCONFIG"
fi

echo "Setting up Steam content in $STEAMDIR"

mkdir -p "${STEAMDIR}"
tar xJf "${LAUNCHSTEAMBOOTSTRAPFILE}" -C "${STEAMDIR}"

cat > "${STEAMDIR}/steam_on_debian.sh" < "${STEAM_DATA_HOME}/applications/steam.desktop"
cp -R tree/usr/share/icons "${STEAM_DATA_HOME}"

echo "Adding Steam to PATH"
MAGIC_LINE="[[ -f \"${STEAMDIR}/setup_debian_environment.sh\" ]] && source \"${STEAMDIR}/setup_debian_environment.sh\""

cat > "${STEAMDIR}/setup_debian_environment.sh" < /dev/null 2>&1; then
    PATH="${STEAMDIR}/debian_bin:${PATH}"
    export PATH
fi
EOF

mkdir -p "${STEAMDIR}/debian_bin"

cat > "${STEAMDIR}/debian_bin/steam" <> "${HOME}/.bashrc"

    echo
    echo "Steam was added to your profile. Please relogin or source ~/.bashrc."
    echo
fi

echo "To uninstall:"
echo "rm -rf ${STEAM_DIR}"
echo "rm -f everything steamish from ${STEAM_DATA_HOME}/applications"
echo "remove ${MAGIC_LINE} from ${HOME}/.bashrc"

Para instalar, vocẽ precisa já estar logado no site do steam no seu navegador, porque no fim da instalação ele precisa atualizar do servidor da Valva. Jogue o script na pasta raiz de seu usuário, dê permissão de execução, e rode.

Quem quiser baixar o script direto, eis o link aqui : steam_bootstrap.sh
Agora divirtam-se.

quarta-feira, 13 de março de 2013

PHP : array de estados brasileiros com nomes e siglas

Esse é um simples array com os nomes dos estados e suas correspondentes siglas.

Cada estado é um array numerado e e "bem comportado" : tudo em minúsculas e sem acentos, porque evita problemas de compatibilidade de codificação e você sempre pode usar um "strtoupper", "ucfirst" e "ucwords" do PHP para tratar a formatação.


$estados = array(
1=>array("sigla"=>"ac","nome"=>"acre"),
2=>array("sigla"=>"al","nome"=>"alagoas"),
3=>array("sigla"=>"am","nome"=>"amazonas"),
4=>array("sigla"=>"ap","nome"=>"amapa"),
5=>array("sigla"=>"ba","nome"=>"bahia"),
6=>array("sigla"=>"ce","nome"=>"ceara"),
7=>array("sigla"=>"df","nome"=>"distrito federal"),
8=>array("sigla"=>"es","nome"=>"espirito santo"),
9=>array("sigla"=>"go","nome"=>"goias",
10=>array("sigla"=>"ma","nome"=>"maranhao"),
11=>array("sigla"=>"mt","nome"=>"mato grosso"),
11=>array("sigla"=>"ms","nome"=>"mato grosso do sul"),
13=>array("sigla"=>"mg","nome"=>"minas gerais"),
14=>array("sigla"=>"pa","nome"=>"para"),
15=>array("sigla"=>"pb","nome"=>"paraiba"),
16=>array("sigla"=>"pr","nome"=>"parana"),
17=>array("sigla"=>"pe","nome"=>"pernambuco"),
18=>array("sigla"=>"pi","nome"=>"piaui"),
19=>array("sigla"=>"rj","nome"=>"rio de janeiro"),
20=>array("sigla"=>"rn","nome"=>"rio grande do norte"),
21=>array("sigla"=>"ro","nome"=>"rondonia"),
22=>array("sigla"=>"rs","nome"=>"rio grande do sul"),
23=>array("sigla"=>"rr","nome"=>"roraima"),
24=>array("sigla"=>"sc","nome"=>"santa catarina"),
25=>array("sigla"=>"se","nome"=>"sergipe"),
26=>array("sigla"=>"sp","nome"=>"sao paulo"),
27=>array("sigla"=>"to","nome"=>"tocantins")
);

Mas se ainda assim quiser uma solução mais imediata, aqui tem uma string mais compacta:

$estados = array(
"AC"=>"Acre",
"AL"=>"Alagoas",
"AM"=>"Amazonas",
"AP"=>"Amapá",
"BA"=>"Bahia",
"CE"=>"Ceará",
"DF"=>"Distrito Federal",
"ES"=>"Espírito Santo",
"GO"=>"Goiás",
"MA"=>"Maranhão",
"MT"=>"Mato Grosso",
"MS"=>"Mato Grosso do Sul",
"MG"=>"Minas Gerais",
"PA"=>"Pará",
"PB"=>"Paraíba",
"PR"=>"Paraná",
"PE"=>"Pernambuco",
"PI"=>"Piauí",
"RJ"=>"Rio de Janeiro",
"RN"=>"Rio Grande do Norte",
"RO"=>"Rondônia",
"RS"=>"Rio Grande do Sul",
"RR"=>"Roraima",
"SC"=>"Santa Catarina",
"SE"=>"Sergipe",
"SP"=>"São Paulo",
"TO"=>"Tocantins"); 

Uma mão na roda, não é mesmo ?

terça-feira, 26 de fevereiro de 2013

PHP : Extendendo sua classe com multiplas classes ao mesmo tempo

Quem desenvolvem em PHP, principalmente utilizando orientação a objetos, uma hora tem a nescessidade de usar mais de uma classe ao mesmo tempo junto com uma classe específica.
Para tornar o problema claro, se tivermos uma classe 'A' e precisarmos dos objetos de duas classes independentes 'B' e 'C', o modo mais claro de fazer isso é

Problema acontece quando não podemos extender a classe B com C, seja porque ela já extende uma class D , seja porque ela é usada por outras classes que ja possuem métodos iguais aos de C , etc.
Enfim, uma mão na roda seria simplesmente mantermos as classes "puras" e independentes e extende-las com a classe que quisermos.
A solução para isso é a seguinte:
  1. Crie uma classe abstrata com o seguinte conteudo:
    Abstract class ExtensionBridge {
     
        private $_exts = array();
        
        public function addExt($object){
            $this->_exts[]=$object;
        }
        
        public function __get($varname){
         
            foreach($this->_exts as $ext){
                if(property_exists($ext,$varname))
                return $ext->$varname;
            }
      
        }
        
        public function __call($method,$args){
         
            foreach($this->_exts as $ext){
                if(method_exists($ext,$method))
                return call_user_method_array($method,$ext,$args);
            }
            
            throw new Exception("Este Metodo {$method} nao existe!");
        
     }
    
        }
    
    }
    
  2. Após isso, em nossa classe A , extendemos as classes B e C assim:
    class A extends ExtensionBridge {
    
        public function __construct(){
    
            parent::addExt( new B() );
     parent::addExt( new C() );
    
        }
    
    }
    
E pronto, você pode utilizar todos os métodos das classes B e C na classe A. Se tiver mais classes a serem adicionadas, basta ir acrescentando com o 'addExt'.

Referência

Blog do Fabio Souto Carlos Coelho : Extend de múltiplas classes em PHP - Multiple Inheritance

domingo, 27 de janeiro de 2013

Instalando o Skype 4.1 no Debian 6 Squeeze

Como todo mundo sabe, a Micro$oft comprou a Skype e vai migrar o msn para esse serviço. Por um lado é bom, porque o skype já possue um suporte aceitável no linux - inclusive o compartilhamento de cam, que tinha sido bloqueado pela M$ em outros sistemas que não fosse Windows e MSN.


Segue aqui a receita para instalar a mais nova versão com suporte a msn e facebook para Debian 6  Squeeze. No meu caso é 64bits, mas deve funcionar melhor ainda em sistemas de 32 bits.


Toda a operação deve ser realizada como root.

  1.  Baixe a versão Dynamic do Skype para Linux ( http://www.skype.com/intl/pt-br/get-skype/on-your-computer/linux/downloading.dynamic ).
  2. Descompacte a pasta do Skype que você baixou em '/opt'. Eu renomeei a pasta para 'skype', porque acho mais fácil de trabalhar.
  3. Instale os seguintes pacotes:
    $ aptitude install lib32asound2 ia32-libs ia32-libs-gtk
    
  4. Agora, baixe os seguintes arquivos:
    $ wget http://ftp.us.debian.org/debian/pool/main/q/qt4-x11/libqt4-webkit_4.6.3-4+squeeze1_i386.deb
    $ wget http://ftp.us.debian.org/debian/pool/main/q/qt4-x11/libqt4-phonon_4.6.3-4+squeeze1_i386.deb
    $ wget http://ftp.us.debian.org/debian/pool/main/q/qt4-x11/libqt4-xmlpatterns_4.6.3-4+squeeze1_i386.deb
    
  5. Não instale esses pacotes com o dpkg. Você deve descompactá-los com o comando 'ar' :
    $ ar -x libqt4-webkit_4.6.3-4+squeeze1_i386.deb
    $ ar -x libqt4-phonon_4.6.3-4+squeeze1_i386.deb
    $ ar -x libqt4-xmlpatterns_4.6.3-4+squeeze1_i386.deb
    
    que irá gerar uma pasta 'usr' na pasta do skype com o conteudo:
    usr/lib/libQtWebKit.so.4
    usr/lib/libQtWebKit.so.4.6
    usr/lib/libQtWebKit.so.4.6.3
    usr/lib/libphonon.so.4
    usr/lib/libphonon.so.4.3
    usr/lib/libphonon.so.4.3.1
    usr/lib/libQtXmlPatterns.so.4
    usr/lib/libQtXmlPatterns.so.4.6
    usr/lib/libQtXmlPatterns.so.4.6.3
    
  6. Com isso, já poderá executar o skype com o comando
    $ LD_LIBRARY_PATH=/opt/skype/user/lib/ ./skype
    
  7. Para disponibilizar a outros usuários do sistema, crie um script de nome 'skype' em '/usr/local/bin' com o seguinte conteudo:
    #!/bin/sh
    
    LD_LIBRARY_PATH=/opt/skype/usr/lib/ /opt/skype/skype
    

    e dê permissão de execução para que outros usuários do sistema o usem

    $ chmod ugo+x /usr/local/bin/skype
    

Assim, você poderá executar o skype onde quiser, inclusive criar um icone em sua barra de tarefas ou na área de trabalho.



Fonte: Introdução para skype para linux



terça-feira, 22 de janeiro de 2013

Como visualizar uma área de trabalho remota do Linux no Windows

Dica para quem precisa visualizar uma área de trabalho remota num servidor ou desktop Linux através de uma máquina rodando Windows.
Para fazer isso, basta instalar dois programas no Windows:

- Putty
- Xming


A vantagem desse método ao invés do VNC por exemplo, é o uso do ssh e uma menor carga, pois você rodará no Windows somente os programas gráficos que executar no terminal via ssh.

  1. Pois bem, para fazer isso,  instale o Putty e o Xming. 
  2. Após isso, configure uma sessão ssh no Putty numa máquina Linux com X server rodando, e salve. 
  3. Teste a conexão para ver se tudo funciona bem, e então, clique nela na lista de sessões a sua sessão salva, clique em "Load".
  4. Em seguida, clique na lateral do Putty e, "Connection" > "SSH" > "X11"
  5. Clique na caixinha "Enable X11 forwarding"
  6. Clique novamente em "Session" logo acima da lateral do Putty e clique em "Open" para sua conexão.

Após isso, vai abrir um terminal onde você pode chamar qualquer programa gráfico, como por exemplo, o Firefox e ele será aberto no seu Windows como se fosse um programa dele, mas rodando no Linux.

domingo, 20 de janeiro de 2013

Nginx - Como definir userdir com php habilitado


Para quem usa servidor Nginx, mas tá com dificuldade em habilitar o php para seus usuário, basta abrir o arquivo '/etc/nginx/sites-available/default'
e logo abaixo da sessão

server{

location ~ \.php$ {
...
}

acrescente as linhas

server{

location ~ \.php$ {
...
}

location /~ {

      location ~ ^/~([^/]+)/(.+\.php)$ {
            
             include fastcgi_params;
             fastcgi_param SCRIPT_FILENAME /home/$1/public_html/$2;
             fastcgi_pass 127.0.0.1:9000;
      
      }
      
      location ~ ^/~([^/]+)(|/.*)$ {
             alias /home/$1/public_html/$2;
             index index.html index.htm index.php;
      }

}

E sim, é isso mesmo, tem um 'location' dentro do 'location'. Só seguir a lógica de que as pastas de usuários estão dentro da pasta raiz, logo, são 'location' de usuários dentro da 'location' raiz.

Essa configuração foi feita num Debian Squeeze, algumas opções, diretórios e arquivos podem ser diferente de outras distros e sistemas, mas a estrutura é a mesma.