terça-feira, 23 de dezembro de 2008

cron com SUSE 11

Tentei por alguns dias fazer funcionar o cron em um SUSE 11.o com insucesso.

O programa (script) que desenvolvi funcionava perfeitamente como usuário root, porém no cron não funcionou.

Uma das formas de verificar o funcionamento do cron é através do comando abaixo.

tail /var/log/messages

Neste arquivo são armazendos as mensagens de execução do cron.

Programei cron através do comando:

crontab -u root -e

* * * * * date > /root/teste

Este script é executado a cada minuto. É armazenado no arquivo teste a data e hora a cada minuto.

Porém o meu script não funcionava no cron.

Após alguns testes, descobri que é necessário definir no script os arquivos com o caminho absoluto, e eu havia definido com caminho relativo.

Extrai uma coluna de uma lista

O meu problema é extrair uma coluna de uma lista. Por exemplo, com o comando

ps -aux


recebo

root 3399 0.0 0.0 1580 612 ? S Dec22 0:00 syslogd -m 0
root 3403 0.0 0.0 1524 468 ? S Dec22 0:00 klogd -x
root 3414 0.0 0.0 1512 448 ? S Dec22 0:04 irqbalance
rpc 3432 0.0 0.0 1676 568 ? S Dec22 0:00 portmap
rpcuser 3452 0.0 0.0 1664 720 ? S Dec22 0:00 rpc.statd
root 3464 0.0 0.0 1572 400 ? S Dec22 0:00 mdadm --monitor -
root 3481 0.0 0.0 83556 604 ? S Dec22 0:00 /sbin/auditd
root 3569 0.0 0.0 7592 1916 ? S Dec22 0:01 cupsd
root 3594 0.0 0.0 3656 1572 ? S Dec22 0:00 /usr/sbin/sshd
root 3610 0.0 0.0 2136 900 ? S Dec22 0:00 xinetd -stayalive
root 3639 0.0 0.0 6100 2580 ? S Dec22 0:01 sendmail: accepti
smmsp 3648 0.0 0.0 5992 2292 ? S Dec22 0:00 sendmail: Queue r
root 3659 0.0 0.0 1568 472 ? S Dec22 0:00 gpm -t imps2 -m /
root 3669 0.0 0.0 1600 640 ? S Dec22 0:00 crond
xfs 3693 0.0 0.0 5452 3112 ? S Dec22 0:00 xfs -droppriv -da
daemon 3703 0.0 0.0 1584 580 ? S Dec22 0:00 /usr/sbin/atd
root 3735 0.0 0.1 11644 5232 ? S Dec22 0:00 /opt/fgs/www/bin/
apache 3746 0.0 0.1 11776 5328 ? S Dec22 0:00 /opt/fgs/www/bin/
apache 3747 0.0 0.1 11776 5328 ? S Dec22 0:00 /opt/fgs/www/bin/
apache 3748 0.0 0.1 11776 5328 ? S Dec22 0:00 /opt/fgs/www/bin/
root 3756 0.0 0.0 4244 1116 ? S Dec22 0:00 sh /usr/RaidMan/R
root 3760 0.5 0.4 228124 19852 ? S Dec22 9:51 ./jre/bin/java -D
root 3772 0.0 0.0 1504 432 tty2 S Dec22 0:00 /sbin/mingetty tt
root 3773 0.0 0.0 1504 432 tty3 S Dec22 0:00 /sbin/mingetty tt
root 3774 0.0 0.0 1504 428 tty4 S Dec22 0:00 /sbin/mingetty tt
root 3775 0.0 0.0 1496 424 tty5 S Dec22 0:00 /sbin/mingetty tt
root 3776 0.0 0.0 1496 424 tty6 S Dec22 0:00 /sbin/mingetty tt

Desta lista necessito retirar a segunda coluna.

Com o comando abaixo é possível obter somente as informações da segunda coluna.

ps -aux | awk '{ print $2 }'

Recebo:

3399
3403
3414
3432
3452
3464
3481
3569
3594
3610
3639
3648
3659
3669
3693
3703
3735
3746
3747
3748
3756
3760
3772
3773
3774
3775
3776

E qual a finalidade disso?

Uma utilidade para o meu dia a dia, necessito matar os processos do Postgres.

ps -aux | grep postgres: | awk '{ print $2 } ' | while read l; do echo 'kill ' $l ; done

ps -axu - lista os processos

grep postgres: - seleciona os processo postgres:

awk '{ print $2 }' - retira a segunda coluna da lista de processo

while read l - coloca na variável l o número do processo

do echo 'kill' $l - escreve no monitor o comando kill número do processo. Caso deseje realmente apagar o processo, utilize o comando do kill $l.

Ajudas de Carlos Eduardo de Andrade Brasileiro e Frederico Meireles Palma

sexta-feira, 19 de dezembro de 2008

Comando para apagar em lote

O meu problema é apagar um conjunto de arquivo por lote. Poderia ser utilizado o comando

rm *.pdf

Mas, caso existam muitos arquivos em uma pasta ou os arquivos estejam em pastas diferentes não é possível utilizar este comando.

O comando abaixo procura todos os arquivos .pdf e apaga-os.

find . -name *.pdf | while read LINHA; do rm $LINHA ; done

quarta-feira, 19 de novembro de 2008

Busca arquivo diretorio Linux

Colaboração: Ricardo Jurczyk Pinheiro

Data de Publicação: 19 de November de 2008

Uma necessidade que tenho vez por outra, no Linux, é descobrir em que
arquivo de configuração, dentro do /etc, devo mexer. Como o /etc tem vários
diretórios, e dentro deles outros arquivos, acabei desenvolvendo uma solução
"rápida e suja", que funciona muito bem:


#!/bin/sh
#
# Pesquisa - Encontra um padrao dentro de uma lista de arquivos
# numa arvore de diretorios
# Autor: Ricardo Jurczyk Pinheiro - ricardojpinheiro@ibest.com.br
# Versao 0.
000000000000000000000000000000000000000000000000000001
#
#
if [ $# -ne 2 ]; then
echo "$0 (palavra a ser procurada) (arvore de diretorios)"
exit 1
else
for nome in $(find $2 -type f | sort | uniq); do
echo $nome
cat $nome | grep $1
done
fi

E basta fazer um pipe com o less, que resolve o problema de excesso de informações na tela.

Ricardo Jurczyk Pinheiro - Linux user #82838 - http://estudiodaintrospeccao.blogspot.com

terça-feira, 18 de novembro de 2008

Função em Postgres

O meu problema é transformar um campo que retorna a informação da forma:

"250077#;#251420#;#251000#;#250915#;#250840#;#251720#;#251320#;#251398#;#"

em um lista da forma:

"500625,500085,250760,250933,250050,250530,250210,250560,251430,251570,251100,250077,251420,251000,250915,250840,251720,251320,251398,251207,250205,251203,251365,251445,250720,250990,250940,250790,250980,250090,251270,251280,250937,250740,250230,250290,250280,250130,251580,251275,250250,250215,250435,250950,250120,250040,251510,352780,351670,350150,350140,311787,250270,251600,251590,250190,250270,251600,251590,250190,250960,250220,251450,250070,251330,251680,250960,250220,251450,250070,251330,251680,251560,250820,251593,250580,251272,251160,250520,250080,251150,250640,251500,"

Para resolver isso criei uma função em PostgreSQL para executar esta tarefa:

CREATE or REPLACE FUNCTION lista_mun() RETURNS varchar AS '

DECLARE
mviews RECORD;
lista varchar;
BEGIN
lista := \'\';
FOR mviews IN select replace(resposta,\'#;#\',\',\') as mun
from dados.itemquest
where pergunta=\'p_mun_ref\' LOOP

lista := lista || mviews.mun;

END LOOP;

RETURN lista;
END;
' LANGUAGE plpgsql;


Forma de utilização:
select lista_mun()

A função acima tem um problema, como comparar o texto contendo número inteiros com um número inteiro.

Assim reescrevi a função para que retornasse um vetor de inteiros:

CREATE OR REPLACE FUNCTION dados.lista_mun()
RETURNS integer[] AS
$BODY$
DECLARE
mviews RECORD;
lista varchar;
return_arr text[];
BEGIN
lista = '';
FOR mviews IN select replace(resposta,'#;#',',' ) as mun
from dados.itemquest
where pergunta='p_mun_ref' LOOP

lista := lista || mviews.mun;

END LOOP;

return_arr := '{' || lista || 0 || '}';

RETURN return_arr;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE;

Para utilizar esta função, é necessário transformar o vetor de inteiros para número inteiros individuais:

select *
from
generate_series(1,array_upper(dados.lista_mun(),1)) as idx(i),
dados.lista_mun() as arr(a)

Onde a função
array_upper(dados.lista_mun(),1) = Retorna o tamanho do array
generate_series(1,array_upper(dados.lista_mun(),1)) = Retorna número de 1 ao tamanho do array

O uso final da função ficou assim:

select c.gid, MakePoint(c.longitudes,c.latidudese ) as the_geom
from mapas.shp_munic c
where c.ibge in
(select arr.a[idx.i]
from
generate_series(1,array_upper(dados.lista_mun(),1)) as idx(i),
dados.lista_mun() as arr(a))

segunda-feira, 10 de novembro de 2008

Alguns configure para POSTGRES/POSTGIS/MAPSERVER/PHP

Para o POSTGIS
./configure \
--with-pgsql=/opt/PostgreSQL/8.3/bin/pg_config \
--with-geos \
--with-proj \


Para o PHP
./configure \
--with-apxs2=/usr/local/apache2/bin/apxs \
--with-pgsql=/opt/PostgreSQL/8.3/bin \
--enable-soap \
--enable-zip \
--with-gd \
--with-jpeg-dir=/usr/local

Para o MapServer
./configure \
--with-wfs \
--with-wfsclient \
--with-wmsclient \
--with-gdal=/usr/local/bin/gdal-config \
--with-php=/usr/local/include/php \
--with-mygis=yes \
--with-postgis=/opt/PostgreSQL/8.3/bin/pg_config \
--with-proj

segunda-feira, 6 de outubro de 2008

Erro de Instalação

1 - Verifique se existe a biblioteca solicitada.
cd /
find . -name libc.so*

2 - Caso exista a biblioteca o binário esta fazendo referencia a um Kernel especifico, então utilize o seguinte comando

cp Install.bin Install.bak
cat Install.bak | sed "s/export LD_ASSUME_KERNEL/#xport LD_ASSUME_KERNEL/" > Install.bin
rm Install.bak

Versão Kernel SUSE

uname -r

sexta-feira, 26 de setembro de 2008

Um Olhar Sociotécnico sobre a Engenharia de Software

As novas tecnologias modificam a forma e a substância do
controle, da participação e da coesão social. Porém, ao fazê-lo, são também modificadas pela experiência social, de sorte que o técnico e o social constituem um movimento de "co-modificação", somente percebido por uma aproximação concomitantemente social e técnica, por um olhar sociotécnico. O artigo pretende apresentar algumas das principais características deste olhar, bem como discutir os desafios que coloca para a engenharia de software.

terça-feira, 2 de setembro de 2008

Init Level para Boot

/etc/inittab

=x=x=x=x=x=x=x=x=x=x=x=x=x=x=x=x=x=x=x=x=x=x=x=x=x=x=x=x=x=x=x=x=x=x=x=x

#
# /etc/inittab
#
# Copyright (c) 1996-2002 SuSE Linux AG, Nuernberg, Germany. All rights reserved.
#
# Author: Florian La Roche, 1996
# Please send feedback to http://www.suse.de/feedback
#
# This is the main configuration file of /sbin/init, which
# is executed by the kernel on startup. It describes what
# scripts are used for the different run-levels.
#
# All scripts for runlevel changes are in /etc/init.d/.
#
# This file may be modified by SuSEconfig unless CHECK_INITTAB
# in /etc/sysconfig/suseconfig is set to "no"
#

# The default runlevel is defined here
id:5:initdefault:

# First script to be executed, if not booting in emergency (-b) mode
si::bootwait:/etc/init.d/boot

# /etc/init.d/rc takes care of runlevel handling
#
# runlevel 0 is System halt (Do not use this for initdefault!)
# runlevel 1 is Single user mode
# runlevel 2 is Local multiuser without remote network (e.g. NFS)
# runlevel 3 is Full multiuser with network
# runlevel 4 is Not used
# runlevel 5 is Full multiuser with network and xdm
# runlevel 6 is System reboot (Do not use this for initdefault!)
#
l0:0:wait:/etc/init.d/rc 0
l1:1:wait:/etc/init.d/rc 1
l2:2:wait:/etc/init.d/rc 2
l3:3:wait:/etc/init.d/rc 3
#l4:4:wait:/etc/init.d/rc 4
l5:5:wait:/etc/init.d/rc 5
l6:6:wait:/etc/init.d/rc 6

# what to do in single-user mode
ls:S:wait:/etc/init.d/rc S
~~:S:respawn:/sbin/sulogin

# what to do when CTRL-ALT-DEL is pressed
ca::ctrlaltdel:/sbin/shutdown -r -t 4 now

# special keyboard request (Alt-UpArrow)
# look into the kbd-0.90 docs for this
kb::kbrequest:/bin/echo "Keyboard Request -- edit /etc/inittab to let this work."

# what to do when power fails/returns
pf::powerwait:/etc/init.d/powerfail start
pn::powerfailnow:/etc/init.d/powerfail now
#pn::powerfail:/etc/init.d/powerfail now
po::powerokwait:/etc/init.d/powerfail stop

# for ARGO UPS
sh:12345:powerfail:/sbin/shutdown -h now THE POWER IS FAILING

# getty-programs for the normal runlevels
# :::
# The "id" field MUST be the same as the last
# characters of the device (after "tty").
1:2345:respawn:/sbin/mingetty --noclear tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6
#
#S0:12345:respawn:/sbin/agetty -L 9600 ttyS0 vt102
#cons:1235:respawn:/sbin/smart_agetty -L 38400 console

#
# Note: Do not use tty7 in runlevel 3, this virtual line
# is occupied by the programm xdm.
#

# This is for the package xdmsc, after installing and
# and configuration you should remove the comment character
# from the following line:
#7:3:respawn:+/etc/init.d/rx tty7


# modem getty.
# mo:235:respawn:/usr/sbin/mgetty -s 38400 modem

# fax getty (hylafax)
# mo:35:respawn:/usr/lib/fax/faxgetty /dev/modem

# vbox (voice box) getty
# I6:35:respawn:/usr/sbin/vboxgetty -d /dev/ttyI6
# I7:35:respawn:/usr/sbin/vboxgetty -d /dev/ttyI7

# end of /etc/inittab

sábado, 12 de julho de 2008

Programção Portão

Instruções de Programação para central simplesV5.
Observações a serem respeitadas, antes do início da programação.
Cuidado com o passo 10, porque após o mesmo o motor se liga automaticamente.
Durante o reconhecimento automático do curso , (passo 11) os transformadores ficam sem funcionar, apenas podendo ser parado através da botoeira.

Iniciando a programação

1.Coloque o jumper em (programação), o led vermelho se acende.
2.Aguarde 2 segundos, e o led verde piscará 5 vezes, mantendo o led vermelho aceso.
3.Caso não seja necessário apagar por completo a memória, pule para o passo 4, em caso contrário, limpando assim, todos os transmissores e configurações, proceda da seguinte forma: Pressione a tecla (BOT) por 5 segundos, até que comece a piscar o led verde.
4.Este estágio é para a central aprender o transmissores, que pode ser por botão individual, até 2 botões, ou transmissores.
5.Pressione o botão do transmissor necessário, feito isso o led verde começa a piscar, neste momento a central aguarda que você confirme o transmissor, pressionando a tecla (BOT).
6.Repita o passo 5, por todos os transmissores utilizados.
7.Retire o jumper de (programação), observando o seguinte, se você não continuar o processo em 8 segundos, a central reinicia automaticamente, em modo normal de funcionamento.
8.Pressione brevemente a tecla (BOT) para indicar para a central prosseguir o processo de programação, como aprendizagem dos tempos de fechamento automático e de luz de garagem.
9.Agora a central pisca o led verde e espera que seja programado o tempo de fechamento automático, ou semi-automático, pressionando a tecla (BOT) pelo tempo desejado no fechamento automático (mantendo a mesma pressionado), ou pressione por menos de 5 segundos, e a central atenderá como semi-automático.
10.Agora está aceso o led vermelho e piscando o led verde, e a central esta esperando o tempo da luz de garagem, caso exista o opcional instalado, e o processo é similar ao descrito acima, pressione a tecla (BOT) pelo tempo desejado a luz de garagem, ou pressione por 5 segundos, e a central entenderá como dispositivo não estalado. (CUIDADO AGORA O MOTOR VAI LIGAR).
11.A partir de agora o motor liga automaticamente inicialmente para fechar, caso esteja no meio.
12.Após o fechamento total do portão, o mesmo pára e inicia a abertura até o final, quando obtém as informações de tempo do curso e peso do portão. OBS: neste passo os transmissores estarão sem ação, e se for necessário parar o portão em programação, utilize a botoeira.
13.Terminou a abertura a central se inicia automaticamente.
Considerações da central
Para dasabilitar temporariamente o fechamento automático, para o portão com o controle remoto, segurando pressionado o botão por mais de 2 segundos, a central responderá com um piscar no led vermelho e uma piscada na luz de garagem quando existir. Voltando a se reprogramar log após o próximo funcionamento da mesma

quarta-feira, 2 de julho de 2008

Apagar arquivos em PHP

// apaga todos os arquivos do diretorio /tmp

$files = glob('tmp/*.*');
array_map('unlink', $files);

/**********************************************************/
// O codigo abaixo apaga todos os arquivos do diretorio temp que foram
// criado a mais de 5 minutos

$afiles = glob('temp/*.*');
array_map('unlink', array_filter($afiles, "cinco_minutos"));

function cinco_minutos($var)
{
$tempo = time() - (5 * 60); // Horario atual menos 5 minutos
return(filectime($var) < $tempo);
}

segunda-feira, 23 de junho de 2008

Fábula da formiga e consultores

Todos os dias, a formiga chegava cedinho ao escritório e pegava duro no trabalho. Era produtiva e feliz.
O gerente marimbondo estranhou a formiga trabalhar sem supervisão. Se ela era produtiva sem supervisão, seria ainda mais se fosse supervisionada. E colocou uma barata, que preparava belíssimos relatórios e tinha muita experiência, como supervisora. A primeira preocupação da barata foi a de padronizar o horário de entrada e saída da formiga. Logo, a barata precisou de uma secretária para ajudar a preparar os relatórios e contratou também uma aranha para organizar os arquivos e controlar as ligações telefônicas. O marimbondo ficou encantado com os relatórios da barata e pediu também gráficos com indicadores e análise das tendências que eram mostradas em reuniões. A barata, então, contratou uma mosca, e comprou um computador com impressora colorida. Logo, a formiga produtiva e feliz, começou a se lamentar de toda aquela movimentação de papéis e reuniões!
O marimbondo concluiu que era o momento de criar a função de gestor para a área onde a formiga produtiva e feliz, trabalhava. O cargo foi dado a uma cigarra, que mandou colocar carpete no seu escritório e comprar uma cadeira especial. A nova gestora cigarra logo precisou de um computador e de uma assistente (sua assistente na empresa anterior) para ajudá-la a preparar um plano estratégico de melhorias e um controle do orçamento para a área onde trabalhava a formiga, que já não cantarolava mais e cada dia se tornava mais chateada. A cigarra, então, convenceu o gerente marimbondo, que era preciso fazer um estudo de clima. Mas, o marimbondo, ao rever as cifras, se deu conta de que a unidade na qual a formiga trabalhava já não rendia como antes e contratou a coruja, uma prestigiada consultora, muito famosa, para que fizesse um diagnóstico da situação. A coruja permaneceu três meses nos escritórios e emitiu um volumoso relatório, com vários volumes que concluía : "há muita gente nesta empresa".
E assim, o gerente geral seguiu o conselho da consultoria, já que tinha pago um preço bem alto pelo trabalho, e demitiu a Fomiga que andava desmotivada e aborrecida..."

quarta-feira, 21 de maio de 2008

Update com Select

A expressão abaixo realiza uma atualização no campo profissional_de_nivel_medio com o resultado da expressão select. Nesta expressão faz-se uma ligação da tabela que deve ser alterada com a tabela consultada em and dados.equipe.id_cras=tmp.adequacao.id_cras.

update tmp.adequacao set profissional_de_nivel_medio = (
select count(id_cras)
from dados.equipe
where formacao='Profissional de nível médio'
and dados.equipe.id_cras=tmp.adequacao.id_cras

terça-feira, 20 de maio de 2008

Procedure postgres

CREATE FUNCTION sesan.proposta_resumo() RETURNS void AS
$$
begin
drop table sesan.proposta_tmp;

create table sesan.proposta_tmp as
select proposta_id, protocolo, titulo, edital, ibge, usuario from sesan.proposta;

alter table sesan.proposta_tmp add column elegivel varchar(10) ;
alter table sesan.proposta_tmp add column habilitado varchar(10) ;

update sesan.proposta_tmp
set habilitado = resposta
from sesan.proposta_valores
where pergunta = 'habilitado'
and sesan.proposta_tmp.proposta_id =sesan.proposta_valores.proposta_id;

update sesan.proposta_tmp
set elegivel = resposta
from sesan.proposta_valores
where pergunta = 'elegivel_valor'
and sesan.proposta_tmp.proposta_id =sesan.proposta_valores.proposta_id;
end;$$
LANGUAGE plpgsql;
ALTER FUNCTION sesan.proposta_resumo() OWNER TO sesan_user;

quinta-feira, 15 de maio de 2008

Inserção com Select

A expressão SQL abaixo executa uma inserção no banco de dados copiando os registros já existentes no id_detail = 1.

O resultado será um conjunto de registros com id_detail=2 e os demais campos iguais aos registros com id_detail = 1.

insert into mapas.map_detail
( id_mapa , ordem , nome_camada , tipo_conexao, conexao_usuario , conexao_senha , conexao_dbname , conexao_host , conexao_port , sql , tipo_mapa , projecao , color_red , color_green, color_blue , outline_red, outline_green , outline_blue , symbol, symbolsize , labelitem , lablefont , labelsize )
select 2 as id_mapa , ordem , nome_camada , tipo_conexao, conexao_usuario , conexao_senha , conexao_dbname , conexao_host , conexao_port , sql , tipo_mapa , projecao , color_red , color_green, color_blue , outline_red, outline_green , outline_blue , symbol, symbolsize , labelitem , lablefont , labelsize
from mapas.map_detail
where id_mapa=1

domingo, 4 de maio de 2008

Experiência para classificar propostas de editais nacionais utilizando indicadores georrefenciamento

Descrever a experiência com classificação de propostas para editais nacionais utilizando indicadores e dados de georrefenciamento.

O que foi possível descobrir no programa Bolsa Família com Georreferenciamento

Este artigo se propõe a descrever algumas caracterísitcas do programa Bolsa Família que foi possível descobrir com ferramentas de Georreferenciamento.

Descrever as características de um sistema de georreferenciamento ou geoprocessamento.

Descrever as  finalidades de indicadores

Algumas "verdades":

O programa esta crescendo no Brasil. Apresentar os locais onde o programa esta diminuindo de beneficiários.

Apresentar a queda da tranferência per carpita na expansão do programa.

Algumas peculiaridades. É verdade que se transfere mais dinheiro para São Paulo em Bolsa Família que Fundo de Transferência Municipal?

Existe um município chamado Pinto Bandeira no Rio Grade do Sul que não existe mais, porém há ainda transferência de renda para lá.

A cobertura do programa ultrapassa 90% na maioria dos municípios, mas como funciona isto nos municípios maiores?

A estimava de probreza é maior que 90%  em quantos municípios?

sexta-feira, 11 de abril de 2008

Subsídios para organizar avaliações da ação governamental

"Uma avaliação cumulativa que não seja formativa, isto é que não contribua para tomada de decisão aprimorada é irrelevante e constiui uma perda de recursos."



"Para ser eficiente a avaliação precisa ser sustentada por uma cultura de aprendizado: sem esta, corre o risco de se tornar um exercício irrelevante, ou pior, uma restrição burocrática sufocante"



"O monitoramento é um processo sistemático e contínuo que, produzindo informações sintéticas e em tempo eficaz, permite a rápida avaliação situacional e a intervenção oportuna que confirma ou corrige as ações monitoradas"



"Quem não monitora os problemas que deve resolver e o resultado das ações com as quais pretente enfrentá-las não sabe o que acontece por conta do seu agir e nem que mudanças provocou com sua ação."



"Para monitorar é necessário tornar preciso o problema, demarcá-lo e medi-lo com rigor, conhecer suas principais determinações e desenhar ações específicas com o poder de eliminar ou minimizar as causas fundamentais que o geram. Ao se implementarem as ações, deverão ser produzidos indicadores pertinentes - porque são úteis para quem responde por sua execução - e, portanto, passíveis de serem trabalhados (analisados e avalidados) para poder informar a quem tem o dever de coordenar as ações e poder corrigi-las, caso necessário. Somente problemas bem definidos e ações bem desenhadas e programadas, ambos identificados por preciosos e detalhados indicadores, são passíveis de monitoramento, podendo ser avaliados de forma conseqüente e oportuna."



"Acampanhamentos e avaliações superficiais sob a forma de relatórios não orientados para a tomada de decisão, produzidos com enormes lapsos de tempo, sem nenhuma sintonia com os processos reais exigentes da atenção e intervenção dos gerentes de programas e dos condutores do plano."



"Quem monitora, avalia. Quem avalia, confirma ou corrige, exercendo o poder de dirigir consciente e direcionalmente"



"O monitoramento requer a produção sistemática e automatizada de informações relevantes,
precisas, sintéticas"



"Essas informações existirão apenas quando a ação tiver sido desenhada e programada de forma a permitir que se cumpra a exigência de produzir informações apropriadas e a um ritmo adequado à tomada de decisões. E isso se consegue criando condições favoráveis (técnica e informacionalmente) para se estabelecer a obrigatoriedade do registro das informações necessárias que compõem o sistema de monitoramento. "






SISTEMA DE MONITORAMENTO


BEM DEFINIDO. No monitoramento, o usuário é um ator concreto, atual, muito bem definido, que necessita de informações para orientar a ação cotidiana, para conhecer seus resultados e compará-los com o planejado.



ULTRA-SELETIVA. Os sistemas de monitoramento são projetados para atender um usuário concreto, responsável por um plano/programa/projeto específico. A informação necessária é ultra-seletiva.



INFORMAÇÃO EM TEMPO EFICAZ.O monitoramento tem que atuar em tempo eficaz e, no limite, em tempo real, pois é usado para corrigir com oportunidade ações em andamento. Informação fora do prazo eficaz desinforma.



PERECÍVEL. O monitoramento serve como ‘feed back’ para a ação, produzindo informações perecíveis. Se chegarem fora do tempo terão valor igual ao de um jornal velho.




PRODUÇÃO DESCENTRALIZADA E USO ESPECÍFICO. O monitoramento é totalmente descentralizado, produzindo informações que permitam corrigir oportunamente ações no nível em que ocorram. Seu uso é muito particular para as necessidades do usuário.




INDICADORES E SINAIS. O monitoramento opera com indicadores e sinais significativos para um usuário específico. Resultam de um processamento complexo das informações básicas e é dirigido para atender necessidades decisórias referentes aos planos/programas conduzidos pelo usuário.




Os sistemas de informações tradicionais, baseados em estatísticas e em registros descontínuos e inorgânicos, muitas vezes quase aleatórios, tentam oferecer muita informação não pertinente e não processada. Desse modo, provocam uma congestão no sistema sensorial das organizações e, “em último termo, acabam por desinformar ao dirigente. Muitas antenas anulam a capacidade e nitidez de recepção da informação que importa. Se confunde a enorme massa de informação gerada na base, que constitui a matéria-prima informativa que deve ser processada pelo monitoramento, com o número reduzido de informações relevantes que, mediante filtros inteligentes, geram os sinais que devem guiar o processo de direção. O sistema de monitoramento deve ser capaz de manejar em forma ágil e flexível uma grande massa de informação sobre a gestão de uma organização pública, reduzindo esta grande massa que desinforma por sobrecarga de dados a um grupo reduzido de sinais e informação filtrada e inteligente




"Assim como um alto dirigente responde pelo conjunto do plano, um gerente é o responsável pelo enfrentamento global do problema que o programa busca resolver. Isso significa que a ele cabe coordenar o conjunto de ações concebidas como necessárias e suficientes, para que sejam implementadas de forma convergente, na seqüência temporal apropriada, com a intensidade adequada, atingindo as causas críticas do problema. Da mesma forma, o alto dirigente precisa saber, no seu nível, do andamento global do plano para poder conduzi-lo com propriedade, tomando as decisões corretas, no tempo certo. Para assim procederem, é imprescindível que estejam, ambos, permanentemente aptos a tomarem as decisões necessárias em cada momento que elas se apresentarem, com segurança e oportunidade. Isso se concretiza com contínuas avaliações de desempenho.




“Como se consegue isso?
A resposta é simples: estando informado sobre tudo o que é importante, para poder avaliar e agir. Mas alcançar essa condição não é algo simples. Supõe que as informações de base (menor unidade operativa de cada ação) estejam sendo registradas, agrupadas (para conformar um conjunto significativo), agregadas (para compor tarefas e, posteriormente ações), relacionadas (para construir os indicadores), analisadas e avaliadas. Importa, também, estar informado sobre o contexto no qual se desenvolvem as ações (restrições, imprevistos, surpresas, oportunidades), pois a informação (ou indicador) somente ganha sentido e torna-se inteligível quando referida ao cenário no qual se realizou. Ademais, é fundamental dispor de informações em tempo oportuno para poder agir com eficácia e, é bom lembrar, as ações acontecem em ritmos de tempo diferentes, exigindo decisões em tempos também distintos.”





Origem "Subsídios para Organizar Avaliações da Ação Governamental"
Ronaldo Coutinho Garcia
Brasília, janeiro de 2001

ISSN 1415-4765