Manejo del puerto paralelo en Linux con gcc


Hace unos años me armé la plaqueta de interfaz para controlar el puerto paralelo de la PC.
Hoy en día he retomado el proyecto y trataré de armar un pequeño robot comandado por esta placa desde linux, utilizando una notebook o netbook.

Asi que una de las cosas fundamentales que necesito para este trabajo es conocer el manejo de los puertos con el lenguaje C desde Linux y como compilarlo.
Este es el código básico para el manejo del puerto paralelo en Linux con gcc:

#include
#include
#include
#define puerto 0x378     /* LPT1 */

int main (void)
{

unsigned int p; // en esta variable le decimos, en hexa, cuantos cuantos leds prenderan

//apertura del puerto
if(ioperm(puerto,1,1))
{
perror(“Se ha encontrado el siguiente error: “); //manejo de errores
exit(1); //salida con error
}

p = 0x01; //puerto 1
outb(p,puerto); //envia el valor en binario al puerto
usleep(1000000); //delay

p = 0x00; //puerto 0. Apaga todos los bits
outb(p,puerto);

if(ioperm(puerto,1,0)) //cerramos los permisos del uso al puerto
{
perror(“Se ha encontrado el siguiente error: “); //volvemos a manejar un eror en caso de…
exit(1); // salimos mostrando mensaje de error
}
exit(0); //terminamos el programa

Ahora, como compilamos este programa ?
Supongamos que lo guardamos con el nombre test.c

$ gcc -o test test.c

Para ejecutarlo bastará con la orden:

$ sudo ./test

Para saber los valores de encendido y apagado de los 8 puertos de salida, revisar el post de Control de Potencia con PC

Observando la Luna, Jupiter y Saturno con el ASIMOV


Bueno, la otra noche estuvimos viendo con mi hija en nuestro telecopio casero ASIMOV la Luna que estaba hermosa y además pudimos ver con bastante detalle a Júpiter y sus cuatro satélites principales Io, Europa, Calixto y Ganímedes.

El tema es que se veía tan bien que quise sacarles unas fotos para compartirlas. Solo tengo una cámara digital común y corriente, así que el resultado no fué muy bueno, pero algo se distingue.
La cámara es una Sony DSC W50, con flash desactivado y apoyando la lente directamente sobre el ocular.

dsc019181

Este es Jupiter y sus 4 satélites principales Io, Europa, Calixto y Ganímedes. Alineados al planeta. En la foto no se aprecian los detalles.

dsc01992
dsc01996

Estas son de la Luna, probando diferentes opciones de luz de la cámara.

Este es Saturno, pierde bastante nitidez con la camara…

Todas fueron tomadas usando un ocular Plossl de 20mm. Nada de Barlows aún…

Restaurar Menu de Aplicaciones y System Tray en GNOME


Si en algún momento les pasa que pierden la barra de programas del GNOME completa, pueden agregarla nuevamente de la siguiente manera:

Sobre la barra inferior  de programas hacemos click con el boton derecho del mouse -> “New  Panel” esto agregará la barra de menú en la parte superior del escritorio.
En esta nueva barra, nuevamente click con el boton derecho del mouse -> Add to Panel -> Menu Bar (A custom menu bar)
En esta nueva barra, nuevamente click con el boton derecho del mouse -> Add to Panel -> Notification Area
En esta nueva barra, nuevamente click con el boton derecho del mouse -> Add to Panel -> Clock

Con esto la barra ha quedado igual a la original en cualquier instalación de Fedora.

Ejecutar SQL Server Stored Procedures desde PHP bajo Linux


Tratando de ejecutar Stored Procedures existentes en una base de datos SQL Server desde PHP bajo Linux, me encontré con el problema de que al querer ejecutar un stored procedure simple, sin parámetros, obtenía siempre el mismo error: “stored procedure execution failed”.
La sentencia de llamada era muy simple:

$conn = mssql_connect($host, $user, $pass);
mssql_select_db(‘nombredb’, $conn);
$proc = mssql_init(‘nombre_proc’, $conn);
$proc_result = mssql_execute($proc);

La solución es hacer una declaración explícita de los datos del servidor SQL Server en el archivo /etc/freetds.org de la siguiente manera:
[servidor]
        host =xxx.xxx.xxx.xxx
        port = 1433
        tds version = 8.0

Error “Failed to get lock using fcntl(2)” en Evolution


Bueno, la verdad es que suena horrible este error, dado que la funciónm fcnl es utilizada a nivel filesystem para administrar lockeo o bloqueo los archivos que etán siendo accedidos.

La cuestión es que un equipo donde se hallan configurados los homes centralizados a través de NFS, comenzó a dar este error al intentar abrir cualquier correo dentro del evolution.
Dado que la red en ese momento estaba funcionando correctamente así como los servicios de NFS y los usuarios con homes compartidos se estaba logueando correctamente, mi primer intento de solución fué eliminar los *.index * en /home/usuario/.evolution/mail/local a fin de que al abrir el evolution se reconstruyan los indices…

Pero sin resultado positivo.

Así que aplicamos el plan B: realicé un respaldo completo de la cuenta del evolution a través del menú “Backup Settings”. Eliminé por completo los archivos de datos del evolution. Desinstalé el evolution. Lo volví a instalar… y restauré el backup de la cuenta de usuario.
Resultado ? volvió a funcionar correctamente.

Mi conclusión: en algún lado, quedó algún archivo de configuración del evolution con los datos erroneos ante algún problema de red.

Si alguien le encontró una solución mas facil… soy todo oidos…
Si alguien sabe la causa exacta de este problem…también soy todo oídos…

Restaurar menu de aplicaciones de gnome / Restore gnome applications menu


Resulta que en un equipo, el menú “Aplicaciones” no mostraba su contenido. Los menúes “Lugares” y “Sistema” funcionaban correctamente mostrando su contenido.
Luego de buscar un rato encontré que para restaurar el menú de aplicaciones de gnome a su contenido original, lo que hay que hacer es eliminar el archivo:
/home/usuario/.config/menus/applications.menu ó copiarlo desde otro equipo…
en mi caso particular, el archivo estaba en tamaño 0 bytes, probablemente por algún problema de red con los homes compartidos por NFS.

smokeping-2.4.1 Installation Notes


smokeping-2.4.1 Installation NotesOn publictest8.fedoraproject.org (2.6.18-194.8.1.el5xen)Ticket #2510

1) We need to install the following packets:# yum install rrdtool# yum install fping# yum install echoping# yum install curl# yum install perl perl-Net-Telnet perl-Net-DNS perl-LDAP perl-libwww-perl perl-RadiusPerl perl-IO-Socket-SSL perl-Socket6 perl-CGI-SpeedyCGI

I suposed installed httpd.

2) We download smokeping and set to its working directory:# wget http://oss.oetiker.ch/smokeping/pub/smokeping-2.4.1.tar.gz# tar zxvf smokeping-2.4.1.tar.gz# mv smokeping-2.4.1 /opt/smokeping

3) We need to rename some files to its working name:# mv /opt/smokeping/bin/smokeping.dist /opt/smokeping/bin/smokeping# mv /opt/smokeping/htdocs/smokeping.cgi.dist /opt/smokeping/htdocs/smokeping.cgi# mv /opt/smokeping/htdocs/tr.cgi.dist /opt/smokeping/htdocs/tr.cgi# mv /opt/smokeping/etc/config.dist /opt/smokeping/etc/config# mv /opt/smokeping/etc/basepage.html.dist /opt/smokeping/etc/basepage.html# mv /opt/smokeping/etc/smokemail.dist /opt/smokeping/etc/smokemail# mv /opt/smokeping/etc/tmail.dist /opt/smokeping/etc/tmail# mv /opt/smokeping/etc/smokeping_secrets.dist /opt/smokeping/etc/smokeping_secrets# chmod 600 /opt/smokeping/etc/smokeping_secrets

4) We need to modify this file:# vi /opt/smokeping/bin/smokepingand replace the firsts 9 lines with this values: #!/usr/bin/perl -w # -*-perl-*-

use lib qw(/usr/lib/perl5/vendor_perl/5.8.8/i386-linux-thread-multi/auto/RRDs/); use lib qw(/opt/smokeping/lib);

use Smokeping 2.004000;

Smokeping::main(“/opt/smokeping/etc/config”);

5) We need to modify this file:# vi /opt/smokeping/htdocs/smokeping.cgiand replace the firsts 10 lines with this values: #!/usr/bin/speedy -w # -*-perl-*-

use lib qw(/usr/lib/perl5/vendor_perl/5.8.8/i386-linux-thread-multi/auto/RRDs); use lib qw(/opt/smokeping/lib); use CGI::Carp qw(fatalsToBrowser);

use Smokeping 2.004000;

Smokeping::cgi(“/opt/smokeping/etc/config”);

6) We need to modify this file:# vi /opt/smokeping/htdocs/tr.cgiand replace the firsts 4 lines with this values: #!/usr/bin/speedy -w use strict; use lib qw(/opt/smokeping/lib); use lib qw(perl);

7) We need to prepare the http directory:# mkdir -p /var/www/html/smokeping/img /var/www/html/smokeping/script/ /opt/smokeping/data /opt/smokeping/var# chown -R apache:apache /var/www/html/smokeping/img

# ln -s /opt/smokeping/htdocs/cropper /var/www/html/smokeping/cropper# ln -s /opt/smokeping/htdocs/resource /var/www/html/smokeping/resource# ln -s /opt/smokeping/htdocs/script/Tr.js /var/www/html/smokeping/script/Tr.js# ln -s /opt/smokeping/htdocs/smokeping.cgi /var/www/html/smokeping/smokeping.cgi# ln -s /opt/smokeping/htdocs/tr.cgi /var/www/html/smokeping/tr.cgi# ln -s /opt/smokeping/htdocs/img /var/www/html/smokeping/img

uncomment the following line at /etc/httpd/conf/httpd.conf:AddHandler cgi-script .cgi

8 ) We need to create this file with this content:# vi /etc/httpd/conf.d/smokeping.conf Alias /smokeping/ /opt/smokeping/htdocs/

DirectoryIndex index.php index.cgi smokeping.cgi Options Indexes FollowSymLinks ExecCGI MultiViews AllowOverride all

9) We modify the configuration file with content like this: *** General ***

owner    = hvivani contact  = hernan@vivani.com.ar mailhost = localhost sendmail = /usr/sbin/sendmail # NOTE: do not put the Image Cache below cgi-bin # since all files under cgi-bin will be executed … this is not # good for images. imgcache = /var/www/html/smokeping/img imgurl   = http://publictest8.fedoraproject.org/smokeping/img datadir = /opt/smokeping/data piddir  = /opt/smokeping/var cgiurl   = http://publictest8.fedoraproject.org/smokeping/smokeping.cgi smokemail = /opt/smokeping/etc/smokemail tmail = /opt/smokeping/etc/tmail # specify this to get syslog logging syslogfacility = local0 # each probe is now run in its own process # disable this to revert to the old behaviour # concurrentprobes = no

*** Alerts *** to = hernan@vivani.com.ar from = smokealert@publictest8.fedoraproject.org

+someloss type = loss # in percent pattern = >0%,*12*,>0%,*12*,>0% comment = loss 3 times  in a row

*** Database ***

step     = 300 pings    = 20

# consfn mrhb steps total

AVERAGE  0.5   1  1008 AVERAGE  0.5  12  4320     MIN  0.5  12  4320     MAX  0.5  12  4320 AVERAGE  0.5 144   720     MAX  0.5 144   720     MIN  0.5 144   720

*** Presentation ***

template = /opt/smokeping/etc/basepage.html

+ charts

menu = Charts title = The most interesting destinations

++ stddev sorter = StdDev(entries=>4) title = Top Standard Deviation menu = Std Deviation format = Standard Deviation %f

++ max sorter = Max(entries=>5) title = Top Max Roundtrip Time menu = by Max format = Max Roundtrip Time %f seconds

++ loss sorter = Loss(entries=>5) title = Top Packet Loss menu = Loss format = Packets Lost %f

++ median sorter = Median(entries=>5) title = Top Median Roundtrip Time menu = by Median format = Median RTT %f seconds

+ overview

width = 600 height = 50 range = 10h

+ detail

width = 600 height = 200 unison_tolerance = 2

“Last 3 Hours”    3h “Last 30 Hours”   30h “Last 10 Days”    10d “Last 400 Days”   400d

#+ hierarchies #++ owner #title = Host Owner #++ location #title = Location

*** Probes ***

+ FPing

binary = /usr/sbin/fping

*** Slaves *** secrets=/opt/smokeping/etc/smokeping_secrets #+boomer #display_name=boomer #color=0000ff #+slave2

*** Targets ***

probe = FPing

menu = Top title = Network Latency Grapher remark = Welcome to the SmokePing website of Fedora Project.    Here you will learn all about the latency of our network.

+ Test menu= Targets title = Ping Targets #parents = owner:/Test/James location:/

++ publictest8

menu = publictest8 title = publictest8 #alerts = someloss #slaves = boomer slave2 host = publictest8.fedoraproject.org

++ bodhost01

menu = bodhost01 title = bodhost01 #alerts = someloss host = bodhost01.fedoraproject.org

++ ibiblio01

menu = ibiblio01 title = ibiblio01 #alerts = someloss host = ibiblio01.fedoraproject.org

++ internetx01

menu = internetx01 title = internetx01 #alerts = someloss host = internetx01.fedoraproject.org

++ osuosl01

menu = osuosl01 title = osuosl01 #alerts = someloss host = osuosl01.fedoraproject.org

++ serverbeach01

menu = serverbeach01 title = serverbeach01 #alerts = someloss host = serverbeach01.fedoraproject.org

++ serverbeach02

menu = serverbeach02 title = serverbeach02 #alerts = someloss host = serverbeach02.fedoraproject.org

++ serverbeach03

menu = serverbeach03 title = serverbeach03 #alerts = someloss host = serverbeach03.fedoraproject.org

++ serverbeach04

menu = serverbeach04 title = serverbeach04 #alerts = someloss host = serverbeach04.fedoraproject.org

++ serverbeach05

menu = serverbeach05 title = serverbeach05 #alerts = someloss host = serverbeach05.fedoraproject.org

++ telia01

menu = telia01 title = telia01 #alerts = someloss host = telia01.fedoraproject.org

++ tummy01

menu = tummy01 title = tummy01 #alerts = someloss host = tummy01.fedoraproject.org

++ download05

menu = download05 title = download05 #alerts = someloss host = download05.fedoraproject.org

++ people01

menu = people01 title = people01 #alerts = someloss host = people01.fedoraproject.org

#++ MultiHost

#menu = Multihost #title = James and James as seen from Boomer #host = /Test/James /Test/James~boomer

10) Now we star smokeping and httpd:# /opt/smokeping/bin/smokeping# /sbin/service httpd start

11) You can view it working at: publictest8.fedoraproject.org/smokeping/

Ticket #2510

Setting up de IT department from scratch – Obteniendo recursos financieros


El presente post, viene a raíz de que muchas veces me preguntan cuanto presupuesto manejo en el Departamento de Sistemas. Y cada vez que les comento que el presupuesto es prácticamente como para mantener insumos, no me pueden creer. Mas aún cuando se enteran de que armamos el departamento de sistemas desde cero… practicamente sin presupuesto.

Esta es la historia:

Resulta, que en el año 2003 me llamaron de la empresa donde trabajo actualmente para un desafío muy importante para mi carrera: Desarrollar el departamento de sistemas desde cero. No había practicamente nada en la empresa, solo un viejo IBM 36 que en la década del 80 había sido la vedette del lugar y un par de PCs sin conexión a la red.

Así que bueno… había que hacer de todo: diseñar las redes, implantar un ERP, armar la estructura de servidores y sus plataformas, etc, etc, etc. Interesante, no?
Cantidad estimada de puestos de trabajo: 50
Para hacerla mas interesante, se adicionaban las siguientes variables: el presupuesto era escaso: Se podría comprar el ERP y algunas PCs.
Demasiado escaso: Faltaban al menos los recursos financieros para comprar los servidores, licencias, armar las redes, etc, etc, etc.

Como haríamos eso?

La solución que  aplicamos para obtener los recursos financieros necesarios para desarrollar la estructura que requeríamos fué armar proyectos tecnológicos para obtener crédito fiscal y subsidios otorgados por entidades gubernamentales.

El gobierno Argentino, otorga subsidios y crédito fiscal, en distintas modalidades a los proyectos que demuestren un cierto grado de innovación tecnológica.

Es así que presentamos varios proyectos, entre ellos el denominado “Punto de Venta POS bajo Linux”, siendo uno de los primeros sistemas privados de punto de venta con impresoras fiscales que se desarrolló por completo bajo linux y se implementó en Argentina.
Otro de los proyectos fué el de “Trazabilidad del Frío”, sistema que realiza un mapeo de los productos supercongelados desde la salida de fábrica hasta el puno de venta.

De esta manera, obtener recursos financieros, resulta posible si se encuentra la manera de armar algún proyecto lo suficientemente atractivo como para que sea aprobado y aprovechar asi sus beneficios.

Gracias Nestor por su carismático couching en el uso de estas estrategias.

Algunas de las entidades que gestionan estos proyectos en nuestro país son:
http://www.agencia.gov.ar/     (Nación)
http://www.cic.gba.gov.ar/     (Provincia de Bs. As.)

El departamento de Sistemas antes:

May19050

y después:

DSC02137

SCAN_ENABLE exception on MC1000 Barcode Scanner


Este bug está reportado para algunos equipos Motorola / Symbol MC1000 con Windows CE 4.2.

El problema es que luego de una determinada cantidad de lecturas el laser se deshabilita hasta que se haga un warm boot del equipo. El error informado es SCAN_ENABLE exception, perteneciente a las librerías precompiladas de Symbol.

La solución viene de la mano de un patch:MC100_SCANNER_FIX_4.2 que hay que descargar en la carpeta Platform del dispositivo y luego realizar un cold boot del terminal.