ER: substituir . (ponto) por , (virgula) apenas para numeros num texto

16/04/2009 by Fábio Arezi

Hoje o problema foi diferente, tenho uma planilha gerada do resultado de um SQL. Salvei o resultado num CSV mas quando eu abro ele numa planilha (Calc do OO por exemplo) as colunas com números decimais abrem com o tipo data, pois no formato brasileiro se usa virgula pra separar decimais. Bom, preciso substituir todas as ocorrências de . por , no meu CSV. O problema é que a substituição tem que ser somente para números, por ex “Sr. Fábio” o ponto teria que ser mantido.

Pra resolver isso, usa-se a expressão regular com retrovisores. Eu testei no Kate (do KDE) e no Eclipse mas acredito que funcione na maioria dos editores que suportem expressão regular. Bom, então abri o texto no editor, fui em Editar -> Substituir, e marquei a opção de expressão regular.

No campo de busca coloquei:

([0-9])(\.)([0-9])

E no de substituição:

\1,\3

Ou seja, o \1 e o \3 são os retrovisores que tem que ser mantidos na substituição.

Claro, poderia fazer a substituição no próprio SQL, no meu caso, no PostgreSQL, poderia usar a função:

replace(valor::text, '.', ',')

onde valor é o nome do meu campo do tipo float.

VirtualBox: HD adicional no WinXP

14/04/2009 by Fábio Arezi

Criei um Windows XP virtual pra mim fazer alguns testes. Mas criei um HD virtual muito pequeno (4Gb) então resolvi criar no virtualbox um HD adicional de 16Gb. O problema é que não aparecia a unidade do HD novo em “Meu Computador”.

A algum tempo atrás tive o mesmo problema no VMware. Fucei fucei e acabei desistindo.

O que acontece é que o Windows detecta o HD novo mas não mostra pois não está formatado. Então descobri como formatar o HD novo no windows… segue os passos.

- Adicione o Disco Rigido Virtual pelo gerenciador de discos virtuais do virtualbox

- Vincule a maquina virtual que se deseja adicionar.

- Inicie o windows (no virtualbox)

Agora o pulo do gato. No XP…

- Abra o painel de controle -> Ferramentas administrativas -> Gerenciamento do computador -> Armazenamento -> Gerenciamento de disco

- Agora no Disco 1 (disco zero é o C:) crie a nova partição e a formate.

Pronto! Vai aparecer a nova partição no “Meu Computador” do novo HD, pronta pra ser usada.

Não cheguei a testar, mas acredito q essa dica vale pro VMware tb.

Openoffice Calc: abrir documento com diretorio relativo usando Hyperlink

13/04/2009 by Fábio Arezi

Ok.. sei que eu esqueci esse blog… mas enfim.. essa eu não podia esquecer..

Em resumo, eu precisava gerar uma planilha e ao clicar num campo, abrisse outra planilha (em outro arquivo)  que estivesse no mesmo diretório.

Usei a função do Calc =HYPERLINK(’file:///home/eu/planilha2.ods’)

O problema é que se eu enviar esses arquivos pra outra pessoa, quando abrir, o link não vai funcionar.

Depois de pesquisar bastante e quebrar bastante a cabeça eis a solução:

Adicione as seguintes variaveis na planilha1.ods, no menu Inserir -> Nomes -> Definir… em Nome, coloque o nome da variavel, e em Atribuido a, coloque a formula.

camCompleto   ->   CÉL("FILENAME")
dirAtual ->  MEIO(camCompleto;2;PESQUISAR("/[^/]+'#";camCompleto)-1)

e na celula que se quer colocar o link para o outro arquivo, coloque:

=HYPERLINK(dirAtual&"planilha2.ods";"abrir")

Outra forma também, poderia resumir tudo em um comando sem usar variaveis do OO, ficaria:

=HYPERLINK(MEIO(CÉL("FILENAME");2;PESQUISAR("/[^/]+'#";CÉL("FILENAME"))-1)&"planilha2.ods";"abrir")

Essa dica funciona no Openoffice tanto no Linux quanto no windows.

PostgreSQL: migrando de LATIN1 pra UTF-8

16/07/2008 by Fábio Arezi

Pra padronizar meus sistemas, resolvi migrar as bases de LATIN1 pra UTF8. Sei que alguns não vão concordar com minha escolha mas enfim. Segue os passos que eu fiz em um servidor RedHat5 (testei com Debian e funcionou também) com a versão 8.1 do PostgreSQL. Fiz com uma base de em torno de 800Mb.
Recomendo que teste em um ambiente separado antes de aplicar na produção. Use por conta e risco.

Primeiro pare todos os serviços que utilizam o banco (ex. stop no apache, tomcat, jboss) para ninguém (usuários) alterar o banco durante o processo.
Nos comandos abaixo, substitua:
usuario_banco = usuário dono do banco, com permissões de apagar e criar bancos
meu_banco = o banco que vc quer fazer a migração

fazer um backup em texto plano

/usr/bin/pg_dump -i -h localhost -U usuario_banco -F p -D -v -f bancoL.sql meu_banco

aqui está o segredo. Use o software iconv para conversão

iconv -f iso-8859-1 -t utf-8 bancoL.sql > bancoU.sql

abra o arquivo bancoL.sql (de preferencia use o vim pra editar)
e no inicio aí pela linha 7, onde tem “SET client_encoding = ‘LATIN1′;” troque LATIN1 por UTF8

Com banco fazer:

faça um backup é claro
pg_dump -U usuario_banco -i -F c -b -f banco.backup meu_banco

agora apague o banco inteiro
dropdb -h localhost -U usuario_banco meu_banco

crie-o com UTF8
createdb -h localhost -E UTF8 -U usuario_banco meu_banco

e agora restaure o banco “uteéfeoitoado” :)
psql -h localhost -U usuario_banco -d meu_banco < bancoU.sql

caso use em seus SQL a função TO_ASCII, com UTF-8 ela não irã funcionar. Veja aqui a alternativa em um post passado que eu fiz.

Fim do google browser sync, pra mim

19/06/2008 by Fábio Arezi

Como uso geralmente 3 PCs (no trabalho, meu notebook e o PC da minha mãe) e nos 3 casos uso Firefox, sempre usei o addon do google
que servia pra sincronizar meus favoritos, ou seja, se eu adicionasse um favorito no firefox do meu notebook, no dia seguinte na máquina do meu trabalho o favorito estaria lá. Além de guardar as abas da ultima sessão quando eu fechasse o firefox, e quando eu abrisse em outra máquina ele me dava a opção de
abrir os mesmos sites que estavam abertos na outra máquina.
Quando saiu o beta do firefox 3, eu feliz da vida, fui tentar atualizar e, dizia que o plugin do google não estava disponível para o FF3, somente para versão 2. Bom… paciência, vamos esperar a versão final do FF3, enquanto isso continuei com o FF2. Ontem saiu a versão final do FF3 e hoje fui tentar instalar o addon do google denovo e pra minha surpresa não funcionou novamente. Buscando sobre o assunto, descobri por esse blog que o addon está descontinuado
http://lifehacker.com/396112/google-browser-sync-discontinued-no-firefox-3-support
pelo que entendi o google diz que não está com tempo para atualizar a ferramenta para o firefox 3 e sugere algumas alternativas “concorrentes”.
. FoxMarks (www.foxmarks.com)
. Google Toolbar
. Weave (http://labs.mozilla.com/2008/06/weave-status-update/)

Dei uma olhada superficial nas opções e minha opção foi para o FoxMarks que me pareceu um projeto maduro e estável, e inclusive posso acessar meus favoritos direto no site do my.foxmarks.com, quando não estou em casa ou no trabalho.
Bastou instalar o addon, reiniciar o Firefox3 criar uma conta e, fim, todos viveram felizes para sempre, inclusive o pobre do google que não pode alocar um desenvolvedor para fazer uma atualização que eu acredito que não levaria mais que 3 dias de trabalho.

MySql em rede

14/05/2008 by Fábio Arezi

Não sou muito fã do MySql, mas tive que instalar ele em um servidor Debian e acessar de outra máquina. Apanhei um bocado.. pelo phpMyAdmin eu acessei, configurei as permissões para acesso de qualquer máquina e não tinha jeito, dava erro de conexão. Pesquisando um pouco descobri que tem uma configuração adicional a fazer.
No arquivo /etc/mysql/my.cnf procure a seguinte linha

bind-address = 127.0.0.1

agora a comente ou a apague.
reinicie o mysql

/etc/init.d/mysql restart

pronto. Agora o mysql vai aceitar conexão pela rede.
Mas tem um problema. Ele vai aceitar conexão de qualquer máquina, e como no meu caso eu preciso que só da minha rede interna (192.168.1.*) tenha acesso e não o mundo inteiro, usei o portmap, ou seja, adicione as seguintes linhas no fim do arquivo /etc/host.allow

mysqld : 192.168.1.0/255.255.255.0 : allow
mysqld : ALL : deny

e reinicie o portmap

/etc/init.d/portmap restart

Pronto.

KTouch com teclado ABNT2 brasileiro

03/05/2008 by Fábio Arezi

Um programa que minha mãe adorou quando instalei o Ubuntu Hardy no computador dela foi o KTouch. Um programa para aprender/treinar digitação. O grande problema é que nas opções para selecionar o teclado, não achei o tipo brasileiro (da ABNT).
Investigando um pouquinho descobri que no Hardy vem instalado o KTouch 1.5.3 e a versão mais nova para do KDE3 é o 1.6
A solução foi simples. Baixei o .tar.gz do 1.6 e nele procurei os teclados e estava lá o PT-BR :) copiei ele pro diretório do ktouch, abri o programa e estava lá a opção brasuca.

Passo a passo

Instale o KTouch
sudo apt-get install kde-i18n-ptbr ktouch

No site http://ktouch.sourceforge.net/ em downloads, baixe o arquivo ktouch-1.6.0.tar.gz (a versão 1.6).
abrao o arquivo ktouch-1.6.0.tar.gz e navegue até /ktouch-1.6.0/ktouch/keyboards/ e extraia somente o arquivo pt.br.keyboard

mova o arquivo pt.br.keyboard pro diretorio do ktouch com o comando
sudo mv pt.br.keyboard /usr/share/apps/ktouch/

Abra o programa KTouch, vá em Configurações, Layouts de teclado e clique em Português (pt.br)

Pronto, minha mãe feliz da vida.

PostgreSQL: função TO_ASCII em banco UTF-8

09/04/2008 by Fábio Arezi

a função TO_ASCII no postgresql é muito util principalmente para buscas onde se quer ignorar acentos em string. Ela funciona bem quando o banco de dados estiver em LATIN1 por exemplo.

SELECT TO_ASCII('tchê'); -- retorna 'tche'

mas quando usamos ela em um banco UTF8 retorna o erro “conversão de condificação de UTF8 para ASCII não é suportada”.

Para contornar isso criei uma função SEM_ACENTO para usar no lugar da TO_ASCII.

CREATE OR REPLACE FUNCTION sem_acento(text)
RETURNS text AS
$BODY$
select
translate($1,'áàâãäéèêëíìïóòôõöúùûüÁÀÂÃÄÉÈÊËÍÌÏÓÒÔÕÖÚÙÛÜçÇ','aaaaaeeeeiiiooooouuuuAAAAAEEEEIIIOOOOOUUUUcC');
$BODY$
LANGUAGE 'sql' IMMUTABLE STRICT;

Tamanho das tabelas no PostgreSQL

03/04/2008 by Fábio Arezi

Hoje precisava saber a relação das tabelas do meu banco e principalmente o tamanho de cada tabela. Pesquisando um pouco montei o seguinte SQL.

SELECT esquema, tabela,
       pg_size_pretty(pg_relation_size(esq_tab)) AS tamanho,
       pg_size_pretty(pg_total_relation_size(esq_tab)) AS tamanho_total
  FROM (SELECT tablename AS tabela,
               schemaname AS esquema,
               schemaname||'.'||tablename AS esq_tab
          FROM pg_catalog.pg_tables
         WHERE schemaname NOT
            IN ('pg_catalog', 'information_schema', 'pg_toast') ) AS x
 ORDER BY pg_total_relation_size(esq_tab) DESC;

a coluna tamanho mostra o tamanho que os registros (tuplas) da tabela está ocupando no disco, e a coluna tamanho_total inclui também os TOASTs e os índices associados à tabela.

Qualquer outra sujestão é bem vinda :)

agendando avisos diários no kubuntu e ubuntu

19/03/2008 by Fábio Arezi

Eu gostaria que todo dia, meu PC me avisasse, às 14:30 da hora de dar uma parada e fazer um lanche. Então, pesquisando, fuçando e testando eu fiz o seguinte:

edite, como root, o arquivo /etc/crontab

adicione a seguinte linha no fim do arquivo

30 16   * * *   fabio  DISPLAY=:0 kdialog --msgbox "Hora do lanche"

detalhando os parâmetros:

  • 30 – o minuto da hora (16 horas e 30 minutos)
  • 16 – a hora (as 4 da tarde)
  • * * * – todos dos dia
  • fabio – o usuario que usa o sistema (login)
  • kdialog – no meu caso eu usei o kdialog pois uso kubuntu. Se for Ubuntu (gnome) use o gdialog.
  • “Hora do lanche” – mensagem. Substitua pela sua.

E não perca mais a hora :)