Esta página contem informações úteis para o dia a dia de meu trabalho
quinta-feira, 31 de dezembro de 2009
Matriz Lógica
quarta-feira, 18 de novembro de 2009
terça-feira, 10 de novembro de 2009
Verificar se o conteúdo de um campo postgresql é numérico
select pergunta, resposta
from dados.itemquest
where (resposta ~ '^[0-9.-]+$');
A expressão:
where (resposta ~ '^[0-9.-]+$');
retorna true para conteúdo numérico.
quarta-feira, 4 de novembro de 2009
Backup banco postgres
# Determinado da data e hora e ano
ano=`date +%Y`;
mes=`date +%m`;
hora=`date +%H`;
min=`date +%M`;
let dia=10\#`date +%d`;
#hora = 'date +%h';
if ($dia<10) then
j=0$dia;
else
j=$dia;
fi
dia=$j;
j="";
D=$dia
M=$mes
A=$ano
# Definindo o usuario e senha do banco de dados
export PGUSER="USUARIO DO BANCO";
export PGPASSWORD="SENHA DO BANCO";
#Fazendo o backup
pg_dump -i -h SERVIDOR -p 5432 -U "USUARIO DO BANCO" -F c -b -v -f /dados/backup/MI_SOCIAL/CONVENIO_DB$ano$mes$dia$hora$min.backup "CONVENIO_DB"
terça-feira, 20 de outubro de 2009
Leitura XML em PHP
$filename ="/windows/discog/wwwroot/xml/questionario.xml";
$xml = simplexml_load_file($filename );
if (!$xml) {
$errors = libxml_get_errors();
foreach ($errors as $error) {
echo display_xml_error($error, $xml);
}
libxml_clear_errors();
}
var_dump($xml);
var_dump(get_object_vars($xml));
?>
terça-feira, 6 de outubro de 2009
Administrar o tempo é planejar a vida
Eduardo O C Chaves
Geralmente quem escreve sobre administração do tempo não o faz porque seja especialista na questão, mas, sim, porque quer aprender mais sobre o assunto. Pelo menos foi esse o meu caso. Vou relatar aqui algumas de minhas descobertas, como roteiro para a leitura do quarto texto.
1) Administrar o tempo não é uma questão de ficar contando os minutos dedicados a cada atividade: é uma questão de saber definir prioridades. Provavelmente (numa sociedade complexa como a nossa), NUNCA vamos ter tempo para fazer tudo o que precisamos e desejamos fazer. Saber administrar o tempo é ter clareza cristalina sobre o que, para nós, é mais prioritário, dentre as várias coisas que precisamos e desejamos fazer - e tomar providências para que essas coisas mais prioritárias sejam feitas, sabendo que as outras provavelmente nunca vão ser feitas (mas tudo bem: elas não são prioritárias).
2) Dentre as coisas que vamos listar como prioritárias, algumas estarão ali porque nos são importantes, outras porque são urgentes. Imagino que algo que não é NEM importante NEM urgente não estará na lista de ninguém. E também sei que na lista de todo mundo haverá coisas que são IMPORTANTES E URGENTES. Não resta a menor dúvida de que estas coisas devem ser feitas imediatamente, ou, pelo menos, na primeira oportunidade. Poucas pessoas questionarão isso. O problema surge com coisas que consideramos importantes, mas não urgentes, e com coisas que são urgentes, mas às quais não damos muita importância.
3) Digamos que você considere importante ficar mais tempo com sua família. Por outro lado, você tem que trabalhar x horas por dia. Se o seu trabalho é mais importante do que ficar com a sua família, o problema está resolvido: você trabalha, mesmo que isso prejudique a convivência familiar. Mas e se o trabalho não é mais importante para você do que a convivência familiar? Neste caso, provavelmente o trabalho é urgente, no sentido de que tem que ser feito, pois doutra forma você vai ser despedido (ou perder clientes, se for autônomo ou empresário) e vai ter dificuldades para manter sua família (embora, sem trabalho, provavelmente vai poder passar mais tempo com ela…). Aqui o conflito é entre o importante e o urgente - e é aí que a maior parte de nós se perde, e por uma razão muito simples: algumas das tarefas que temos que realizar não são selecionadas por nós, mas nos são impostas. Isto é: não somos donos de todo o nosso tempo. Não temos, em relação ao nosso tempo, toda a autonomia que gostaríamos de ter. Quando aceitamos um emprego, estamos, na realidade, nos comprometendo a ceder a outrem o nosso tempo (e, também, o nosso esforço, a nossa capacidade, o nosso conhecimento, etc.). Este é um problema real e de solução difícil: não somos donos de boa parte de nosso tempo.
4) Acontece, porém, que geralmente usamos mal o tempo que dedicamos ao trabalho (e, por isso, temos que fazer hora extra ou trazemos trabalho para casa), ou mesmo o tempo que passamos em casa. Usar mal QUER DIZER que muitas vezes usamos o nosso tempo para fazer o que não é nem importante nem urgente, mas apenas algo que sempre fizemos, pela força do hábito. Alguém me disse, quando eu era criança, que a gente nunca deveria abandonar a leitura de um livro, por pior que ele fosse. Que bobagem! Mas quanto tempo desperdicei terminando de ler coisa que de nada me serviu por causa desse conselho! Uma vez me peguei dizendo à minha família que não poderia fazer algo (não me lembro o quê) domingo de manhã porque precisava ler os jornais. Eu lia, religiosamente, a Folha e o Estado aos domingos de manhã (sinto muito, folks: há tempo que não freqüento escola dominical). Lia por hábito. Achava que um professor tem que se manter informado. Mas quando disse que "precisava" ler os jornais me dei conta de que realmente não precisava lê-los. O que é de pior que poderia me acontecer se eu não lesse os jornais, me perguntei. NADA, foi a resposta que tive honestamente que dar. Se houver algo importante nos jornais provavelmente fico sabendo no noticiário da TV, ou na VEJA. Mas daí me perguntei: e preciso ler a VEJA todas as semanas? Resposta: não. Existe algo que eu prefiro ler/fazer naquelas manhãs de domingo que ganhei? Claro, muitas coisas - PARA AS QUAIS EU ANTES NÃO TINHA TEMPO. Ganhei as horas dos jornais, ganhei as horas da VEJA, fui ganhando uma horinha aqui outra ali, para as coisas que eu realmente queria fazer há muito tempo e não achava tempo…
5) Administrar o tempo é ganhar autonomia sobre a sua vida, não é ficar escravo do relógio. É uma batalha constante, que tem que ser ganha todo dia. Se você quer ter a autonomia de decidir passar mais tempo com a família, ou sem fazer nada, você tem que ganhar esse tempo deixando de fazer outras coisas que são menos importantes para você. Em última instância pode ser que você até tenha que, eventualmente, arrumar um outro emprego ou uma outra ocupação.
6) O tempo é distribuído entre as pessoas de forma bem mais democrática que muitos dos outros recursos de que nós dependemos (como, por exemplo, a inteligência). Todos os dias cada um de nós recebe exatamente 24 horas (a menos que seja o último dia de nossas vidas): nem mais, nem menos. Rico não recebe mais do que pobre, professor universitário não recebe mais do que analfabeto, executivo não recebe mais do que operário. Entretanto, apesar desse igualitarismo, uns conseguem realizar uma grande quantidade de coisas num dia - outros, ao final do dia, têm o sentimento de que o dia acabou e não fizeram nada. A diferença é que os primeiros percebem que o tempo, apesar de democraticamente distribuído, é um recurso altamente perecível. Um dia perdido hoje (perdido no sentido de que não realizei nele o que precisaria ou desejaria realizar) não é recuperado depois: é perdido para sempre.
7) Há os que afirmam, hoje, que o recurso mais escasso na nossa sociedade não é dinheiro, não são matérias primas, não é energia, não é nem mesmo inteligência: é tempo. Mas tempo se ganha, ou se faz, deixando de fazer coisas que não são nem importantes nem urgentes e sabendo priorizar aquelas que são importantes e/ou urgentes.
8) Quem tem tempo não é quem não faz nada: é quem consegue administrar o tempo que tem de modo a poder fazer aquilo que quer.
9) Por outro lado, ser produtivo não é equivalente a estar ocupado. Há muitas pessoas que estão o tempo todo ocupadas exatamente porque são improdutivas - não sabem onde concentrar seus esforços e, por isso, ciscam aqui, ciscam ali, mas nunca produzem nada. Ser produtivo é, em primeiro lugar, saber administrar o tempo, ter sentido de direção, saber aonde se vai.
10) Administrar o tempo, em última instância, é planejar estrategicamente a nossa vida. Para isso, precisamos, em primeiro lugar, saber aonde queremos chegar (definição de objetivos). Onde quero estar, o que quero ser, daqui a 5, 10, 25, 50 anos? O segundo passo é começar a estrategiar: transformar objetivos em metas (com prazos e quantificações) e decidir, em linhas gerais, como as metas serão alcançadas. O terceiro passo é criar planos táticos: explorar as alternativas específicas disponíveis para se chegar aonde queremos chegar, escolher fontes de financiamento (emprego, em geral, é fonte de financiamento), etc. Em quarto lugar, fazer o que tem que ser feito. Durante todo o processo, precisamos estar constantemente avaliando os meios que estamos usando, para verificar se estão nos levando mais perto de onde queremos vamos querer estar ao final do processo. Se não, troquemos de meios (procuremos outro emprego, por exemplo).
11) Mas tudo começa com uma verdade tão simples que parece uma platitude: se você não sabe aonde quer chegar, provavelmente nunca vai chegar lá - por mais tempo que tenha.
12) Quando o nosso tempo termina, acaba a nossa vida. Não há maneira de obter mais. Por isso, tempo é vida. Quem administra o tempo ganha vida, mesmo vivendo o mesmo tempo. Prolongar a duração de nossa vida não é algo sobre o qual tenhamos muito controle. Aumentar a nossa vida ganhando tempo dentro da duração que ela tem é algo, porém, que está ao alcance de todos. Basta um pouco de esforço e determinação.
(*) Este artigo é resumo, feito em 1998, de um livreto, Administração do Tempo, que escrevi em 1992.
© Copyright by Eduardo Chaves
Last revised: 02 May 2004
segunda-feira, 5 de outubro de 2009
10km ObCursos
domingo, 4 de outubro de 2009
19a Corrida das pontes
terça-feira, 29 de setembro de 2009
Postgres Regular Expression
select resposta
from dados.itemquest
where pergunta = 'sagi_latitude'
and (resposta ~ '[-]{0,1}[0-9]{1,2}.[0-9]*')
sexta-feira, 4 de setembro de 2009
JavaScript e Expressões Regulares
onkeyup=\'javascript:
this.value=this.value.replace(/\D/g,"");
this.value=this.value.replace(/^(\d{5})(\d)/,"$1-$2");\'
onkeypress=\'javascript:
this.value=this.value.replace(/\D/g,"");
this.value=this.value.replace(/^(\d{5})(\d)/,"$1-$2");\'
telefone
onKeyUp=\'javascript:
t=this.value.replace(/\D/g,"");
t=t.replace(/^(\d\d)(\d)/g,"($1) $2");
this.value=t.replace(/(\d{4})(\d)/,"$1-$2");\'
CPF
onkeyup='javascript:this.value=this.value.replace(/\D/g,"");
this.value=this.value.replace(/(\d{3})(\d)/,"$1.$2");
this.value=this.value.replace(/(\d{3})(\d)/,"$1.$2");
this.value=this.value.replace(/(\d{3})(\d{1,2})$/,"$1-$2");'
function validacpf(campo){
var i;
//s = document.getElementById('login').p_cpf.value;
s = campo;
var c = s.substr(0,9);
var dv = s.substr(9,2);
var d1 = 0;
for (i = 0; i < 9; i++){
d1 += c.charAt(i)*(10-i);
}
if (d1 == 0){
alert("CPF Invalido")
return false;
}
d1 = 11 - (d1 % 11);
if (d1 > 9) d1 = 0;
if (dv.charAt(0) != d1){
alert("CPF Invalido")
return false;
}
d1 *= 2;
for (i = 0; i < 9; i++){
d1 += c.charAt(i)*(11-i);
}
d1 = 11 - (d1 % 11);
if (d1 > 9) d1 = 0;
if (dv.charAt(1) != d1){
alert("CPF Invalido")
return false;
}
return true;
}
quinta-feira, 27 de agosto de 2009
CRON x SHUTDOWN
Necessitei reinicializar a máquina uma vez por dia, e para fazer funcionar isso:
# crontab -e -u root
0 4 * * * /sbin/shutdown -h now
Desta forma todos os dias, as 4h00 da madrugada o computador se reinicializa automaticamente
segunda-feira, 10 de agosto de 2009
Configuração e erro PHP
error_reporting(E_ALL);
ini_set("display_errors", 1);
quinta-feira, 23 de julho de 2009
Uso do xserver (e aplicações) remotamente, via ssh
Data de Publicação: 28 de March de 2009
Perambulei muito pela 'net (via google) para achar alguma coisa que me
permitisse, acessando máquina remota via ssh, usar aplicativos gráficos,
tais como o firefox, e-mail (MUAs), editores de texto. Ou sempre faltava
algo ou era mais complicado do que receita de renda de bilros.
Finalmente, juntando partes daqui, dacolá, cheguei a uma receitinha QUE
FUNCIONA. Vejamos:
Na máquina que vai ser o SERVIDOR, altere o /etc/ssh/sshd_config,
como segue:
X11Forwarding = yes (normalmente comentado)
AllowTcpForwarding = yes (idem)
Daí é só dar restart no sshd (cada distribuição tem seu "jeito" particular).
No destino (a máquina que vai usar os aplicativos remotos), basta abrir um
terminal qualquer - no ambiente gráfico - estabelecer conexão ssh apropriada
e chamar o aplicativo desejado:
$ ssh -XYCc blowfish usuario@maquina.destino
[informações do acesso.. ]
Estando no terminal (agora é no remoto):
$ firefox &
$ sylpheed &
Trafegando os dados no tunel ssh é seguro, é tudo criptografado. Além do que
vc pode (por exemplo) navegar em sites nunca dante navegados (proibição ou
bloqueio de proxies NÃO FUNCIONAM mais pra vc)
sexta-feira, 29 de maio de 2009
Criar um shape de um conjunto de outros
select cntry_name as pais, fips_cntry as sigla,
GeomUnion(the_geom) as the_geom from mapas.ar
group by cntry_name, fips_cntry
O comando GeomUnion gera uma agregação de geometrias.
Com isso parti para criar uma tabela que represente os países da américa do sul.
create table mapas.southamericacountry as
select cntry_name as pais, fips_cntry as sigla,
GeomUnion(the_geom) as the_geom from mapas.ar
group by cntry_name, fips_cntry
union
select cntry_name as pais, fips_cntry as sigla,
GeomUnion(the_geom) as the_geom from mapas.bl
group by cntry_name, fips_cntry
....
Incluir um arquivo Shape no PostGIS
shp2pgsql ve mapas.ve > ve.sql
onde:
ve - corresponde aos arquivos do mapa (ve.shp, ve.dbf, ve.shx, ve.sbx, ve.sbn).
mapas.ve - é o destino no banco de dados, mapas é o schema PosgtreSQL e ve no nome da tabela.
ve.sql - é o arquivo destino, ou seja, é criado um script sql para inserir no banco de dados.
sexta-feira, 22 de maio de 2009
Código para recuperar o fonte de uma função
No exemplo abaixo a função chama-se indicador_repasse_por_cisterna
select prosrc
from pg_catalog.pg_proc
where proname= 'indicador_repasse_por_cisterna'
quinta-feira, 14 de maio de 2009
Suse / Oracle / PHP
oracle-instantclient11.1-basic-11.1.0.7.0-1
e coloquei o caminho da biblioteca Oracle em (/usr/lib/oracle/11.1/client/lib/)
ld.so.conf
Para ativar o ld.so.conf
ldconfig
Caminho para biblioteca
Para isso inseri esta informação em:
/etc/ld.so.conf
utilizei o comando
ldconfig
para fazer valer as alterações executadas.
rpm
Utilizei o comando:
rpm -qa | grep oracle
Extrair arquivos de Imagens ISO
Criar o diretório ISO
# mkdir /mnt/iso
# mount -o loop disk1.iso /mnt/iso
Copiando o arquivo file.txt para /tmp
# cd /mnt/iso
# cp file.txt /tmp
Copiando o arquivo foo.rpm da imagem
# cd /mnt/iso/RedHat/RPMS
# cp foo.rpm /tmp
fonte: http://www.cyberciti.biz/tips/extracting-particular-file-from-linux-iso-cd-image-file-after-installation.html
data: 14 de maio de 2009
segunda-feira, 11 de maio de 2009
Procurar um texto em uma lista de arquivos
find . -name '*.php' | cut -c 1-100 | cat | grep version
find - para procurar os arquivos *.php
cut - cortar o texto da posição 1 até 100
cat - apresentar o conteúdo do texto
grep - selecionar o um texto específico
outra forma
find . -name "*.php" | xargs cat | grep close
mais uma forma
find . -name '*.php' | xargs -n2 grep 'banco' >lista
cat lista
quarta-feira, 8 de abril de 2009
Exim
./var/spool/exim
./var/log/exim
./etc/sysconfig/exim
./etc/init.d/exim
./etc/logrotate.d/exim
./etc/exim
./usr/share/doc/packages/exim
./usr/sbin/exim
Arquivo de configuração do Exim
./etc/exim/exim.conf
- exim -bp
- exim -Mrm `ls /var/spool/exim/input/ | grep -- -H$ | cut -c 1-16`
sexta-feira, 6 de março de 2009
Triggers
O problema enfrentado foi criar registros em uma tabela que contenha a quantidade de página e as páginas. Por exemplo, caso o número de páginas seja 10, necessita-se 10 registros com as páginas de 1 a 10.
Para resolver isso, optou-se de utilizar gatilhos (TRIGGERS) na tabela ufcaio. Para cada operação nesta tabela reflete-se na tabela ufcaio_destino.
Tabela destino igual a tabela origem
CREATE TABLE teste.ufcaio_destino
(
uf character varying,
estado character varying,
paginas integer,
pagina integer
)
WITHOUT OIDS;
ALTER TABLE teste.ufcaio_destino OWNER TO postgres;
Tabela origem.
CREATE TABLE teste.ufcaio
(
uf character varying,
estado character varying,
paginas integer,
pagina integer
)
WITHOUT OIDS;
ALTER TABLE teste.ufcaio OWNER TO postgres;
Associando um Trigger na tabela origem.
CREATE TRIGGER ufcaio_trigger
AFTER INSERT OR UPDATE OR DELETE
ON teste.ufcaio
FOR EACH ROW
EXECUTE PROCEDURE teste.ufcaio();
Função chamada pelo Trigger.
CREATE OR REPLACE FUNCTION teste.ufcaio()
RETURNS trigger AS
$BODY$
BEGIN
--
IF (TG_OP = 'DELETE') THEN
delete from teste.ufcaio_destino where uf=OLD.uf;
return OLD;
ELSIF (TG_OP = 'UPDATE') THEN
delete from teste.ufcaio_destino where uf=NEW.uf;
FOR i IN 1..NEW.paginas LOOP
insert into teste.ufcaio_destino (uf, estado, paginas, pagina) values (NEW.uf, NEW.estado, NEW.paginas, i);
END LOOP;
RETURN NEW;
ELSIF (TG_OP = 'INSERT') THEN
delete from teste.ufcaio_destino where uf=NEW.uf;
FOR i IN 1..NEW.paginas LOOP
insert into teste.ufcaio_destino (uf, estado, paginas, pagina) values (NEW.uf, NEW.estado, NEW.paginas, i);
END LOOP;
RETURN NEW;
END IF;
RETURN NULL; -- result is ignored since this is an AFTER trigger
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE;
ALTER FUNCTION teste.ufcaio() OWNER TO postgres;
quinta-feira, 5 de março de 2009
Criando um Database novo Postgres
Criar uma pasta para acomodar o Database
mkdir /usr/local/pgsql/data
Atribuir a propriedade para o usuário postgres
chown postgres /usr/local/pgsql/data
Mudar para usuário postgres
su - postgres
Criar o Database com a aplicação initbd
/usr/local/pgsql/bin/initdb -D -A /usr/local/pgsql/data --locale='UTF-8'
Atualizar no arquivo postgres.conf as porta e a possibilidade de acesso por clientes remotos.
listen_addresses = '*'
port = 5433
Atualizar o arquivo pg_hba.conf para aceitar conexão por qualquer computador da rede 10.68.0.0
host all all 10.68.0.0/8 md5
Ligar o Banco de Dados
postmaster -i -D /usr/local/pgsql/data >>logfile 2>&1 &
Desligar o Banco de Dados
pg_ctl stop -D /usr/local/pgsql/data -w
Alterar a senha do postgres (comando SQL)
ALTER USER davide WITH PASSWORD 'hu8jmn3';
quarta-feira, 7 de janeiro de 2009
São Silvestre 2008
Site com resultado oficial da corrida: Meu número foi 14781
Passando pela linha de chegada
link
Após a chegada, eu estou me arrastando.