terça-feira, 10 de fevereiro de 2009

Fazer o subversion trabalhar por você

Quando você está trabalhando em um repositório Subversion em um projeto para a web, a melhor coisa que tem é quando alguem faz um commit a alteração aparecer no webserver do mesmo servidor.

O subversion possui os scripts HOOK, que são executados quando alguma ação é feita no subversion.

O que eu usei foi o script post-commit. Ele é executado após um commit.

O padrão é que os scripts estejam com permissão de execução no diretório hook dentro do repositório.

Só que os problemas de permissões são inúmeros!

A principal dica é: Usando webdav para o subversion, dê um checkout (svn checkout http://localhost /var/www) e depois altere o dono para www-data recursivamente (chown www-data:www-data -R /var/www)

Abaixo está o script post-commit, altere-o para suas necessidades:


#!/bin/bash
/bin/sleep 3
/usr/bin/svn update /var/www/ --non-interactive --no-auth-cache --username XXXX --password XXXXX

domingo, 8 de fevereiro de 2009

Configurando o aMSN para acesso público

O aMSN é um cliente para a rede MSN que mais se assemelha ao cliente da microsoft no windows. O problema é que ele vem bem feio na sua configuração "default".

Vamos usar como base o Ubuntu Intrepid, e instalar o aMSN 0.98 com o skin do Windows Live 2009 e com suporte ao MSN Plus!

Baixe o pacote deb do aMSN no link: http://www.getdeb.net/download/3001/0 e depois instale normalmente usando o gerenciador de pacotes do ubuntu.

Agora baixe o Colored Nicks, que dá suporte ao MSN Plus! no link: http://europa.solit.us/archives/downloadstatic/6325657399, é só descompactar na pasta ~/.amsn/plugins

Agora baixe o skin do Windows Live Messenger 2009 no link: http://amsn.fr.nf/communaute/download/file.php?id=21&sid=ce88c102d6b53fc952f74772b1ad08c5 , depois descompacte na pasta ~/.amsn/skins

Pra tudo funcionar, simplesmente escolha o skin e carregue o plugin dentro do aMSN.

O unico problema do acesso público, é que os plugins tem que serem carregados toda vez que uma pessoa entra no aMSN.

Usando o perfil que tinha salvo, percebi que tinha um arquivo chamado plugins.xml que guardava as configurações de plugins. O problema é que quando vc coloca na pasta principal do aMSN, ele simplesmente era apagado...

Ai descobri um comando novo no linux, o chattr. Com ele eu consigo marcar um arquivo como imutável, assim ninguem consegue alterar o arquivo (a não ser o root).

Aqui está um exemplo do arquivo plugins.xml


<config>
<plugin>
<name>Nudge</name>
<loaded>true</loaded>
<entry>
<key>notsentinwin</key>
<value>1</value>
</entry>
<entry>
<key>notrecdinwin</key>
<value>1</value>
</entry>
<entry>
<key>soundnotsend</key>
<value>1</value>
</entry>
<entry>
<key>soundnotrec</key>
<value>1</value>
</entry>
<entry>
<key>shake</key>
<value>0</value>
</entry>
<entry>
<key>shakes</key>
<value>10</value>
</entry>
<entry>
<key>addblockbutton</key>
<value>0</value>
</entry>
<entry>
<key>notify</key>
<value>1</value>
</entry>
<entry>
<key>addclmenuitem</key>
<value>0</value>
</entry>
<entry>
<key>addbutton</key>
<value>1</value>
</entry>
<entry>
<key>shaketoo</key>
<value>0</value>
</entry>
<entry>
<key>limit</key>
<value>1</value>
</entry>
<entry>
<key>delay</key>
<value>60</value>
</entry>
</plugin>
<plugin>
<name>Winks</name>
<loaded>true</loaded>
<entry>
<key>use_extrac32</key>
<value>0</value>
</entry>
<entry>
<key>flashplayerargs</key>
<value></value>
</entry>
<entry>
<key>1</key>
<value>#</value>
</entry>
<entry>
<key>play_embed</key>
<value>0</value>
</entry>
<entry>
<key>#</key>
<value>show_add_wink</value>
</entry>
<entry>
<key>flashplayer</key>
<value></value>
</entry>
<entry>
<key>#use_queque_in</key>
<value>1</value>
</entry>
<entry>
<key>#use_queque_out</key>
<value>1</value>
</entry>
<entry>
<key>play_inmediatly</key>
<value>1</value>
</entry>
<entry>
<key>cabextractor</key>
<value>cabextract</value>
</entry>
<entry>
<key>close_on_leave</key>
<value>1</value>
</entry>
<entry>
<key>notify_in_one_line</key>
<value>0</value>
</entry>
</plugin>
<plugin>
<name>Cam Shooter</name>
<loaded>true</loaded>
</plugin>
<plugin>
<name>remind</name>
<loaded>true</loaded>
<entry>
<key>beginend</key>
<value>1</value>
</entry>
<entry>
<key>nbline</key>
<value>10</value>
</entry>
<entry>
<key>checknote</key>
<value>1</value>
</entry>
<entry>
<key>filetransfert</key>
<value>1</value>
</entry>
<entry>
<key>daysnumber</key>
<value>7</value>
</entry>
<entry>
<key>when</key>
<value>1</value>
</entry>
</plugin>
<plugin>
<name>ColoredNicks</name>
<loaded>true</loaded>
<entry>
<key>nostyle</key>
<value>0</value>
</entry>
</plugin>
<plugin>
<name>Search Contact</name>
<loaded>true</loaded>
<entry>
<key>search</key>
<value>0</value>
</entry>
<entry>
<key>hide</key>
<value>0</value>
</entry>
<entry>
<key>advanced</key>
<value>1</value>
</entry>
</plugin>
<plugin>
<name>aMSN Plus</name>
<loaded>false</loaded>
<entry>

<key>allow_commands</key>

<value>1</value>

</entry>
<entry>

<key>allow_quicktext</key>

<value>1</value>

</entry>
<entry>

<key>allow_colours</key>

<value>1</value>

</entry>
<entry>

<key>quick_text</key>

<value>[list]</value>

</entry>
<entry>

<key>parse_nicks</key>

<value>1</value>

</entry>
<entry>

<key>colour_nicks</key>

<value>1</value>

</entry>
<entry>

<key>#resource</key>

<value>aMSN</value>

</entry>
</plugin>
</config>



Coloque ele na pasta principal do aMSN: ~/.amsn

depois é só dar esse comando: chattr +i plugins.xml

Pronto! Qualquer dúvida, comente o post!

quinta-feira, 5 de fevereiro de 2009

Como colocar uma mensagem do Jquery validate dentro de um objeto definido

Fiquei um dia tentando colocar a mensagem do Jquery validate dentro de um <p>, pois o validate cria um label, e ele tava pegando as propriedades do css da pagina, e tava acabando com o layout.

Depois de ler muito o código fonte do validate, consegui o seguinte código:


<script type="text/javascript">
$(document).ready(function(){

$("#form_login").validate({ //nome do formulário
rules: {
user_login: { // regra do campo user_login
required:true, // campo requirido
minlength: 2 // deve ter no mínimo 2 caracteres
},
user_pass: {
required:true,
minlength: 4
}
},
errorPlacement: function(error, element) { // função que define onde deve ser colocado os erros
var elemento = "#"+element.attr("name")+'_p';
$(elemento).html(error.html());
}
});

});
</script>


Como eu já tinha colocado no formulário paragrafos seguindo o padrão nome_do_elemento_p, na linha var elemento = "#"+element.attr("name")+'_p'; eu crio uma variável de texto pegando o nome do elemento com erro e adicionando no final o _p

Na linha $(elemento).html(error.html()); pegamos a mensagem de erro a colocamos dentro do p.

Fácil? depois que ralei procurando como faz ficou sim!

Qualquer dúvida, comente.

Como ligar o rewriter do apache em um alias

Trabalhando com Zend, surgiu a necessidade de configurar varios aliases para diversas pastas do sistema zend, pois eu tinha uma pasta de teste, outra de produção e etc.

Eu poderia fazer por virtualhost, mas é complicado, pois eu teria que acessar cada um com um IP, e isso daria mais trabalho.

Fucei fucei, até que consegui a solução.


Eu uso o Ubuntu server, os arquivos de configuração do apache fica em /etc/apache2

Dentro desse, existe o diretório "conf.d", lá dentro eu criei um arquivo para adicionar novos aliases ao apache.

O arquivo que criei foi zend.conf, e está desse jeito


Alias /teste /home/usuario/teste/public/

<Directory /home/usuario/teste/public/ >
Options Indexes FollowSymLinks MultiViews
AllowOverride all
Order allow,deny
allow from all
</Directory>


Assim ele está mapeando o diretório /home/usuario/teste/public/ onde vamos ter um .htaccess para fazer o trabalho do rewriter do Zend.


RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule !\.(js|ico|gif|jpg|png|css)$ /teste/index.php


Percebeu que o .htaccess está direcionando para o index.php? simples né?

Se não entendeu alguma coisa, faça um comentário.

ps.: Não esqueça de reiniciar o apache!