quarta-feira, 23 de abril de 2008

Dica Postgres - Obter quantidade de linhas de update no PL/pgsql

Para obtermos no PostgreSQL o número de linhas atualizadas por um UPDATE por exemplo, devemos usar a opção GET DIAGNOSTICS. Veja o exemplo na sequência:

CREATE OR REPLACE FUNCTION f_insert_pesq(
         p_dn_simulation_number integer, 
         p_dc_protocol character varying, 
         p_dn_scenario integer, 
         p_dn_variation integer, 
         p_dn_subscenario integer, 
         p_dn_pesq double precision
) RETURNS character varying AS
$BODY$
DECLARE
    v_count INTEGER;
BEGIN
 UPDATE simulation SET dn_pesq = p_dn_pesq
 WHERE dn_simulation_number = p_dn_simulation_number
 AND dc_protocol = p_dc_protocol
 AND dn_scenario = p_dn_scenario
 AND dn_variation = p_dn_variation
 AND dn_subscenario = p_dn_subscenario;

 GET DIAGNOSTICS v_count = ROW_COUNT;

 IF v_count > 0 THEN
         RETURN 'success update';
 ELSE
  RETURN 'simulation not found';
 END IF;
END;
$BODY$
LANGUAGE 'plpgsql';


Tranquilis em !!!

sexta-feira, 18 de abril de 2008

Shell: timestamp2datetime

php -r "print date('l dS \of F Y h:i:s A', $1) . \"\n\";"

Shell: Script para retornar timestamp de um arquivo


#!/bin/bash
if [ $# -ne 1 ]; then
echo "Usage: $0 file"
exit
fi
echo $1 | \
cpio -o 2> /dev/null | \
od -x | \
sed -n 'n;s/[^ ]* *\(....\) *\(....\).*/16i\1\2p/;y/abcdef/ABCDEF/;p;q' | \
dc

Shell: Script para alterar o fundo de tela


#!/bin/bash
#
# setwallpaper.sh

BG_DIR="$HOME/wallpapers"
TOTAL=`ls -f $BG_DIR/* | grep -E ".png|.jpg" -c`
IMG=$(($RANDOM%$TOTAL))
COUNT=0
for i in `find $BG_DIR -type f | sort` ;
do
if [ $COUNT -eq $IMG ];
then
rm "$BG_DIR/background"
ln -s "$i" "$BG_DIR"/background
xv -viewonly -rmode 5 -rbg black -root -quit -maxpect $BG_DIR/background
exit
fi
COUNT=$(($COUNT+1))
done

Shell: Script para gerar screenshots


#!/bin/bash
#
# snapshot.sh
DATE=`date +%d%m%Y-%H%M%S`
xwd -root | convert - "$HOME/snapshot-$DATE.jpg"

Linux: xbindkeys

Xbindkeys é um programa que permite mapear teclas de atalho para execução de programas. Muito útil para mim que uso gerenciadores de janela que não fazem o mapeamento de teclas especias do meu notebook.

Para efetuar um mapeamento, execute-o com o parâmetro -k. Desse modo, ele executa em modo de "escuta" retornando uma sequência de instruções as quais você insere no arquivo .xbindkeysrc no seu HOME.

Logo abaixo, o arquivo de configuração que utilizo na minha máquina:

"amixer set Master 3%+"
m:0x0 + c:176
NoSymbol

"amixer set Master 3%-"
m:0x0 + c:174
NoSymbol

"amixer set Master toggle"
m:0x0 + c:160
NoSymbol

"xlock"
m:0x40 + c:72
Mod4 + F6

"music_control.sh --stop"
m:0x0 + c:164
NoSymbol

"music_control.sh --fwd"
m:0x0 + c:153
NoSymbol

"music_control.sh --play-pause"
m:0x0 + c:162
NoSymbol

"music_control.sh --rew"
m:0x0 + c:144
NoSymbol

Shell: Script genérico para controle de players de som



#!/bin/bash
#
# music_control.sh

unset PROGRAM
unset PLAYERS

PLAYERS="xmms.bin amarok audacious"

for PROGRAM in $PLAYERS ;
do
if ps -u $USER | grep $PROGRAM > /dev/null 2>&1 ;
then
break
else
unset PROGRAM
fi
done

[ -z $PROGRAM ] && exit 1

case "$1" in
'--play-pause')
$PROGRAM -t
;;
'--stop')
$PROGRAM -s
;;
'--rew')
$PROGRAM -r
;;
'--fwd')
$PROGRAM -f
;;
*)
echo "Usage: $0 --play-pause | --stop | --rew | --fwd"
exit 1
;;
esac

quinta-feira, 17 de abril de 2008

Linux: xtermcontrol

Meu terminal padrão é o xterm. Como uso ele ou no Wmii ou Awesome, ás vezes tenho o incoveniente de estar logado em várias máquinas ao mesmo tempo e não saber em qual terminal é cada máquina. Uma forma de resolver foi com o uso do programa xtermcontrol. Utilizo esse programa da seguinte maneira:

# .bashrc

vim () {
command vim $*
xtermcontrol --title $USER@$HOSTNAME
}

ssh () {
for i in $*; do
if [ `echo $i | grep -E "@|\.|i\d*"` ]; then
xtermcontrol --title $i
fi
done
command ssh $*
xtermcontrol --title $USER@$HOSTNAME
}


Como vocês podem ver criei sub-rotinas para rodar o vim e o ssh. Dessa forma, quando estou logado em uma máquina, o título do xterm apresenta o endereço da máquina e assim sei exatamente onde estou.

Awesome com gráficos



Depois da experiência com o wmii, o nosso amigo r3n4n descobriu mais um window manager pequeno, completo e de fácil manipulação, o awesome.

Além de todas as suas facilidades, o awesome tem configurações interessantes de objetos para gráficos e barras de progresso.

Através do meu já modificado e antigo script de status do wmii, consegui integrar as informações obtidas a essas funcionalidades.


O script de status pode ser obtido no link script de status awesome em conjunto ao script de configuração do awesome que está no link awesomerc.

quarta-feira, 16 de abril de 2008

Convertendo videos para o formato 3gp (celular)

Inicialmente vamos reduzir o vídeo e transforma-lo em avi

mencoder SEU_VIDEO -nosound -ovc lavc -lavcopts vcodec=mpeg4 -vf expand=128:96,scale=128:96 -o movie.avi -ofps 12

Para que o video tenha melhor resolução, você pode utilizar 176:144 na escala e expansão

Bom, temos agora que obter o som do video
mplayer -vo null -ao pcm -af resample=8000,volume=+4db:sc SEU_VIDEO

Na sequência vamos unir o som e o video reduzido ao formato 3gp
ffmpeg -i movie.avi -i audiodump.wav -b 48 -ac 1 -ab 12 -map 0.0 -map 1.0 undo.3gp

Referências:

segunda-feira, 14 de abril de 2008

Linux: Como alterar o modo de operação de uma interface de rede

# /sbin/mii-tool -F 100baseTx-FD eth0

Força a eth0 trabalhar em 100mbits Full Duplex. Os possíveis modos são:

100baseTx-FD, 100baseTx-HD, 10baseT-FD ou 10baseT-HD.

Drunk Penguins

Drunk Penguins
Drunk Penguins