Evitando Captchas Repetidos no Yii Framework 12/02/2011
Posted by pablodurans in Yii framework.add a comment
Quando estava testando um caso de uso implementado utilizando o Yii, percebi que os captcha’s se repetiam. Considerando que meu objetivo era evitar que o usuário usasse um bot que executasse várias vezes a mesma ação, o captcha, então, não estava servindo a minha necessidade.
Não encontrei nada na web e tive que vasculha o código do framework para resolver este problema.
Para isto, o código abaixo deve ser adicionado antes de chamar o render() da view onde se encontra o captcha.
...
$captchaAct = $this->createAction('captcha');
if($captchaAct != null) $captchaAct->getVerifyCode(true);
...
É importante frisar que ‘captcha’ é o nome da action que foi definido no metodo actions() do controller. No caso em que outro nome tenha sido usado, igual substituição deve ser feita nesse código.
Mesclando Celulas em Tabela do LaTeX 08/05/2010
Posted by pablodurans in Latex.add a comment
Os editores de texto como o Open Office e o Word oferecem a possibilidade de inserir tabela. Juntamente a esta função, também é possível mesclar varias células de uma tabela dando uma maior liberdade ao usuário. Com esse recurso pode-se listar dados objetos (Como times) agrupando eles por um atributos (Estado). Abaixo é mostrado um exemplo disto:
Nesse exemplo percebe-se que a primeira linha foi toda mesclada para colocar o nome Brasil e que a células que possuem os estados (São Paulo e Rio) são resultado desse artifício.
Para fazer isso no LaTeX é necessários os Comandos \multicolumn e \multirow.
multicolumn
O multicolumn faz junções horizontais. É bastante simples de usar, basta chama-lo passando a quantidade de células e a posição que o texto deve ficar. O código abaixo exemplifica isso
O resultado deste código é:
multirow
Da mesma forma, o multirow faz junções verticais, sendo que os mesmo parâmetros são passados. Novamente outro codigo para demonstrar:
Mas nesse caso, o resultado não é o esperado. As linhas horizontais que dividem as celulas não desaparecem.[Figura abaixo]

Como forma alternativa para resolver esse problema, pode ser usado o \cline que traça uma linha horizontal em apenas algumas colunas. \cline{col Inicio-col Fim}:
Pegando o IP e a porta do canal no JGroups 03/12/2009
Posted by pablodurans in Uncategorized.add a comment
Editando pdfs com PDF-JAM 12/11/2009
Posted by pablodurans in linux.add a comment
O pdf-jam é um pacote de comandos na linha de comando do linux que fazem edições simples em pdfs. Ele vem com 3 comandos:
pdfjoin
faz concatenação de um ou mais pdf’s, a forma simples de usar é:
$ pdfjoin file1.pdf file2.pdf … –outfile file_result.pdf
pdf90
rotaciona em 90 graus um arquivo pdf, forma simples de usar é:
$pdf90 file.pdf
Isso vai criar um arquivo file-rotated.pdf
pdfnup
tem como função principal juntar uma serie de paginas em uma só(em forma de grid), mas também pode ser usado para incluir só algumas paginas no arquivo resultante. Uma forma simples de usar é:
pdfnup file.pdf –nup 3×2 –pages 1,4,7-10
Isto vai gerar um pdf com 6 paginas(3×2) com as paginas 1,4,7,8,9,10
Para mais informações:
http://www2.warwick.ac.uk/fac/sci/statistics/staff/academic/firth/software/pdfjam
Traduções no seu gmail ou gtalk 04/06/2009
Posted by pablodurans in Uncategorized.add a comment
Quem nunca teve dificuldades com inglês e não conseguiu um dicionário de inglês.
Na internet possui varios tradutores, mas nenhum que esteja aberto quase sempre. Mas isso foi antes do google criar os boot de tradução do gtalk. É fácil ter, basta adicionar pt2en@bot.talk.google.com e en2pt@bot.talk.google.com
a sua lista de contatos e pronto, tudo que você manda pra eles, eles mandam de volta traduzido.
Auto Complet Terminal Ubuntu 04/06/2009
Posted by pablodurans in linux.add a comment
Qualquer shell linux possui uma habilidade bastante útil que é completar os comandos quando apertamos em <TAB>, então o restante do comando pode ser completado com um comando que esteja no path ou com um arquivo que esteja na pasta atual.
No caso do ubuntu, além de comandos e arquivos, ele também completa com interfaces de rede, subcomandos além de, para alguns comandos, só completar com arquivos que sejam relevantes. Exemplo:
$ unzip <Tab> (Só completará com arquivos que tenham a extensão .zip)
Alguns comandos, embora conveniente, não possuem essa qualidade, um exemplo é o g++. No meu caso, só queria que ele completasse com arquivos de extensão cpp ou c .
Pesquisando onde provavelmente implementaria essas funções(o arquivo ~/.bashrc) encontrei que para isso ele executa o script /etc/bash_completion . Minha solução para adicionar esse conveniência ao g++ foi adicionar a seguinte linha nesse script.
complete -f -X ‘!*.@(cpp|c)’ g++
Também poderia colocar esta linha no ~/.bashrc, mas colocando no /etc/bash_completion, todos os usuários herdarão essa função.
Quando você abrir o /etc/bash_completion você verá que comandos como unzip, xpdf, gunzip, entre outros também estarão lá. Assim você poderá alterar eles também, por isso, cuidado ao alterar esse arquivo(talvez por isso ele necessite de permissão de sudo)
Teclado Multimidia no Dynabook TX 980LSBB no linux 10/12/2008
Posted by pablodurans in dynabook, linux.Tags: teclado multimidia, toshiba a100
add a comment
Já tenho esse notebook a 2 anos e nunca tinha conseguido fazer com que o linux(especificamente o ubuntu) reconhecer alguma hotkey. Hoje, resolvi depois de tanto tempo, vê se havia alguma atualização para minha BIOS(provavelmente). Foi só eu atualizar a BIOS que baixei nesse site: http://cdgenp01.csd.toshiba.com/content/support/downloads/ta7i0v600.exe . Então as teclas responsáveis pelo player, luminosidade do lcd e o mudo começaram a funcionar.
Eu sei que é um executavel que estou mandando baixar, mas percebam que o dominio é toshiba.com qualquer coisa, procurem isso pelo site http://www.csd.toshiba.com/cgi-bin/tais/support/jsp/modelContent.jsp?ct=DL&os=&category=&moid=1358998&rpn=PSAA8U&modelFilter=A100-ST8211&selCategory=3&selFamily=1073768663&selModel=1358998|PSAA8U# .
Implementando um pipe para Unix/Linux 12/07/2008
Posted by pablodurans in Linguagem C, linux, Sistema Operacionais.Tags: Console, pipe, Shell
add a comment
Suponhamos que você deseja implementar seu proprio shell. Uma das tarefas mais difícil que você terá será para implementar o pipe.
Pipe é o redirecinamento da saída padrão de um programa para a entrada padrão de outro.[http://pt.wikipedia.org/wiki/Pipe]
Este Artigo demonstra como isso pode ser feito de um forma interativa(usando for, while ou do…while) e não recursiva.
Comunicar 2 processos irmão
A primeira coisa a se entender é como comunicar irmãos. Uma boa alternativa é criar um tunel no pai e os filhos herdaram esse tunel. Pra criar tunel, precisamos da chamada ao sistema chamada pipe. essa chamada ao sistema recebe um vetor de inteiro e depois de executada na posição 0 conterá um descritor de Stream que pode apenas ser lido e na posição 1 conterá um descritor onde pode-se escrever.
…
int fd[2];
pipe(fd);
if(!fork()){
close(fd[1]);
…
}
else if(!fork()){
close(fd[0]);
…
}
else {close(fd[0]); close(fd[1]);}
Nesse caso o primeiro processo criado lerá o que o segundo escrever nesse tunel criado.
Fazer pipe entre 2 processos irmãos
No exemplo passado, apenas fizemos um tunel entre os processos, mas a comunicação ainda não é feita pela saida padrão para a entrada padrão. Para isso usaremos a função dup2 que é uma implementação da chamada ao sistema dup. A função dup2 recebe o identificador de 2 descritores e ela faz uma copia do primeiro no lugar do segundo.
…
int fd[2];
pipe(fd);
if(!fork()){
close(fd[1]);
dub2(fd[0], 0);//0 é o identificador do fluxo STDIN
}
else if(!fork()){
close(fd[0]);
dub2(fd[1], 1);//1 é o identificador do fluxo STDOUT
…
}
else{close(fd[0]); close(fd[1]);}
Neste caso, o primeiro processo lerá através da entrada padrão a saida padrão do segundo processo.
Fazer pipe entre n processos
Já conseguimos fazer o pipe entre 2 processos, mas muitas vezes precisamos fazer pipes entre vários processos, um exemplo é:
$ cat arquivo | grep palavra | sort | more
Nesse exemplo ele mostrará na tela todas as linhas do arquivo que contenha um certa palavra, de forma ordenada e com pausas quando a tela estiver cheia.
Isso só prova a necessidade de uma interação no código. Abaixo mostro o código onde consegui fazer isso.
int fd[2];//contem os tuneis
int past;//contem a saida do tunel anterior
int i=0;
for(; i<cmd.size()-1; i++){
pipe(fd);//cria o tunel que é herdado pelo filho
if(!fork()){//para o novo processo
if(i!=0){//se não for o primeiro comando
dup2(past, 0);//recebe como entrada a saida do tunel passado
}
dup2(fd[1], 1);//a saida vai para o novo tunel
execvp(cmd[i][0],cmd[i]);//especializa o novo processo
}
close(fd[1]);//fecha o tunel para o pai
if(i!=0) close(past);//fecha o tunel passado para o pai
past = fd[0];//o tunel atual agora é o passado
}
if(!fork()){//executado para o ultimo processo
if(i!=0){//se ele tb não for o primeiro
dup2(past, 0);//coloca a entrada para a saida do tunel
}
execvp(cmd[i][0],cmd[i]);//especializa este processo
}
Obs: cmd é um vector de arrays de arrays de characters(Declaração vector<**char> ou vector<char[] [] > )
Instalar VMWare no kernel 2.6.24-18-generic 09/06/2008
Posted by pablodurans in linux.add a comment
Quando passei do Ubuntu 7.10 para o 8.04, acabou que o kernel tb foi atualizado, e depois disso, não consegui mais instalar o VMWare, coisa que eu já tinha feito do ubuntu 7.10.
O erro que aparecia era:
Using 2.6.x kernel build system.
make: Entering directory `/tmp/vmware-config0/vmmon-only’
make -C /lib/modules/2.6.24-16-generic/build/include/.. SUBDIRS=$PWD SRCROOT=$PWD/. modules
make[1]: Entering directory `/usr/src/linux-headers-2.6.24-16-generic’
CC [M] /tmp/vmware-config0/vmmon-only/linux/driver.o
CC [M] /tmp/vmware-config0/vmmon-only/linux/hostif.o
CC [M] /tmp/vmware-config0/vmmon-only/common/comport.o
CC [M] /tmp/vmware-config0/vmmon-only/common/cpuid.o
In file included from include/asm/bitops.h:2,
from /tmp/vmware-config0/vmmon-only/./include/vcpuset.h:74,
from /tmp/vmware-config0/vmmon-only/./include/modulecall.h:23,
from /tmp/vmware-config0/vmmon-only/common/vmx86.h:18,
from /tmp/vmware-config0/vmmon-only/common/hostif.h:18,
from /tmp/vmware-config0/vmmon-only/common/cpuid.c:14:
include/asm/bitops_32.h:9:2: error: #error only <linux/bitops.h> can be included directly
make[2]: *** [/tmp/vmware-config0/vmmon-only/common/cpuid.o] Error 1
make[1]: *** –_module_/tmp/vmware-config0/vmmon-only– Error 2
make[1]: Leaving directory `/usr/src/linux-headers-2.6.24-16-generic’
make: *** http://vmmon.ko Error 2
make: Leaving directory `/tmp/vmware-config0/vmmon-only’
Unable to build the vmmon module.
Procurando nos foruns do vmware, acabei descobrindo uma maneira bem fácil de conseguir instalar o vmware.
_______________________________________________________________________
Primeiramente rode o instalador do vmware
$ vmware-player-distrib/vmware-install.pl
quando perguntar se você quer rodar o vmware-config.pl, ponha no.
Tem-se que agora alterar o arquivo vmmon-only/include/vcpuset.h dentro de /usr/lib/vmware/modules/source/vmmon.tar . Execute os comandos a seguir(como super usuário).
$ cd /tmp
$ cp /usr/lib/vmware/modules/source/vmmon.tar .
$ tar -xvvf vmmon.tar
Editando o arquivo usando gedit(ou editor de sua preferencia)
$gedit vmmon-only/include/vcpuset.h
Altere a linha 74 colocando linux/bitops.h no lugar de asm/bitops.h
salve o arquivo e feche o editor.
Agora só falta subtituir pelo antigo, lembrando de salvar uma copia do antigo
$ tar cvf vmmon.tar vmmon-only
$ mv /usr/lib/vmware/modules/source/vmmon.tar /usr/lib/vmware/modules/source/vmmon.tar.orig
$ cp vmmon.tar /usr/lib/vmware/modules/source
agora entre no diretorio que você descompatou o instalador do VMware para rodar o vmware-config.pl .
$ cd bin
$ ./vmware-config.pl
Pronto, agora você tem o VMWare instalado na sua maquina.





