jueves, agosto 29, 2013

Manipulación de Excel desde FreePascal-Lazarus



Primer post desde el 12 de Julio. Creo que como paréntesis ya está bien. Ya de vuelta en el trabajo he tenido que programar una utilidad para revisar contenido borrable de las unidades de red. He elegido FreePascal como lenguaje y Lazarus como IDE de desarrollo.

¿Los motivos?
  1. Creo que lo iba a hacer más rápido en Pascal que en C++.
  2. En Pascal tengo todas las funciones y procedimientos necesarios desde el minuto 0. No voy a tener que buscar librerías por ahí. (al menos no sin contar con la ayuda de la comunidad de FreePascal-Lazarus).
  3. He podido comprobar que la documentación de FreePascal-Lazarus es muy completa. Esto es lo que más miedo me daba, junto a la posibilidad de que hubiera funciones, procedimientos, librerías inacabados, o con bug-s (cosa que no ha ocurrido).
Vamos al meollo: Queremos que nuestro programa Pascal sea capaz de generar un fichero Excel (mi versión es la 2010 y ha funcionado bien), y de guardar datos en él. La versión de Lazarus que me he bajado es la 1.0.12.

PRIMERO.-Necesitamos descargar el paquete fpspreadsheet_pkg
En SourceForge.net tenemos la última versión: http://sourceforge.net/projects/lazarus-ccr/files/FPSpreadsheet/

SEGUNDO.-Se abre el paquete dentro del IDE Lazarus. Para ello tenemos que ir al menú PAQUETE, opción "ABRIR ARCHIVO DE PAQUETE".


TERCERO.-Le damos al botón COMPILAR y ya podemos darle a USAR, AGREGAR AL PROYECTO. De esta forma ya podemos utilizar los procedimientos y funciones para crear o acceder a un fichero Excel.

CUARTO.-EJEMPLO DE CREACIÓN DE UN EXCEL CON ALGUNOS VALORES.

Declaramos estas variables:
  • LibroExcel: TsWorkbook; 
  • HojaExcel: TsWorksheet;
Inicializamos las mismas: 
  • LibroExcel:= TsWorkbook.Create; 
  • HojaExcel:= LibroExcel.AddWorksheet('Resultado');
Damos valores a celdas:
Según sea el tipo de dato hay que usar un procedimiento diferentes: WriteUTF8Text, WriteNumber, etc. El primer parámetro que pasamos es el número de fila Excel, el segundo es el número de columna, y el tercero es el dato que escribimos.
  • HojaExcel.WriteUTF8Text(fila, 0, directorio);
  • HojaExcel.WriteNumber(fila, 1, numeroDeFicheros);
          LibroExcel.WriteToFile('result-unidad-' + unidad + format('%d-%d-%d ',[dd,mm,yy])+ STR_EXCEL_EXTENSION, true);


Escribimos todo en un fichero Excel. El primer parámetro es el nombre del fichero y el segundo es TRUE o FALSE dependiendo si queremos sobreescribir el fichero en caso de que exista (true), o no (false).

  • LibroExcel.WriteToFile('resultado.xls', true);
Saludos.

P.D.: Documentación del uso de los procedimientos y funciones del paquete este enlace de freepascal.org: http://wiki.freepascal.org/FPSpreadsheet

viernes, julio 12, 2013

Programa de espionaje con Microsoft

Como siempre la realidad supera a la ficcion. Hacia tiempo que se acusaba de conspiranoicos a los que hablaban de puertas traseras en productos de Microsoft. Ahora sabemos que es peor de lo que hubieramos imaginado.

http://www.elmundo.es/america/2013/07/11/estados_unidos/1373571751.html



viernes, junio 21, 2013

Error al validar cuenta de google en Play Store

Si tienes la seguridad de estar poniendo bien el usuario y password de tu cuenta de Google en una aplicación como Play Store por ejemplo, y te sale este error:

"your username and password do not match"

Esto suele ocurrir porque tienes activada la validación en dos pasos, y la aplicación no es capaz de autenticarte.

Solución:

Entra en https://google.com/accounts
Clic en SEGURIDAD
Entra en "Aplicaciones y sitios conectados".

Tendrás que indicar un nombre de aplicación y le das a "GENERAR CONTRASEÑA".

Esa contraseña que te muestra google es la que tendrás que emplear en la aplicación. Sólo se introduce una vez y listo.

Saludos,

lunes, junio 17, 2013

HP-UX, algunos problemas al montar un filesystem

Me encuentro con que el servidor no tiene montado un filesystem. Reviso el fichero /etc/fstab y la entrada para montarlo está correctamente.

Intento que monte otra vez los que no están montados con:
mount -a

UX:vxfs mount: ERROR: V-3-20003: Cannot open /dev/vgeva8100/lveva8100: No such s
UX:vxfs mount: ERROR: V-3-24996: Unable to get disk layout version

Voy a echar un vistazo a ver qué pasa con el VG:
vgdisplay -v /dev/vgeva8100

vgdisplay: Volume group not activated.
vgdisplay: Cannot display volume group "/dev/vgeva8100".

Si no está activado, vamos a activarlo a ver que pasa:
vgchange -a y /dev/vgeva8100

Activated volume group.
Volume group "/dev/vgeva8100" has been successfully changed.

Por lo menos ahora está activo, vamos a intentar montarlo otra vez:

mount -a
UX:vxf
mount: ERROR: V-3-21268: /dev/vgeva8100/lveva8100 is corrupted. needs checking

Vamos a pasar el fsck (asegurarse de que el filesystem no esté montado):
umount /oradata

fsck -F vxfs -y -o full,nolog /dev/vgeva8100/rlveva8100

pass0 - checking structural files
pass1 - checking inode sanity and blocks
pass2 - checking directory linkage
fileset 999 directory 534 block devid/blknum 0/1034503114 offset 868 references free inode
...
...
...
au 54268 emap incorrect - fix? (ynq)y
au 54268 state file incorrect - fix? (ynq)y
au 54271 emap incorrect - fix? (ynq)y
au 54271 state file incorrect - fix? (ynq)y
fileset 999 iau 0 summary incorrect - fix? (ynq)y
fileset 999 iau 2 summary incorrect - fix? (ynq)y
fileset 999 iau 6 summary incorrect - fix? (ynq)y
free block count incorrect 752990 expected 752992 fix? (ynq)y
free extent vector incorrect fix? (ynq)y
OK to clear log? (ynq)y
flush fileset headers? (ynq)y
set state to CLEAN? (ynq)y

Después de esto ya me ha dejado montar y sin problemas.
Saludos,

viernes, junio 14, 2013

Quitar password a documentos pdf


Imagen descargada de wikipedia.

Desde el mundo Windows es un lío, ya que hay muchas utilidades pero casi todas son de pago.

Desde gnuLinux en cambio todo son ventajas. Podemos utilizar GhostScript de desde la línea de comandos para quitarle la password:


gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=ficheroSalida.pdf -c .setpdfwrite -f ficheroEntrada.pdf



En mi caso tengo que quitar la password a un montón de ficheros por lo que he hecho el siguiente script:


for f in *.pdf
do
 echo "Fichero: $f"
 gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=SP_"$f" -c .setpdfwrite -f "$f"
done

Otras opciones: Utilizando pdftk

Utilizando pdfcrack

Sobre el script: Otras opciones en este sitio.

martes, junio 11, 2013

Mac OSX. Como abrir terminal y moverse por un disco extraible


El título lo dice todo.
Queremos abrir una terminal cosa muy sencilla.
El problema es cuando queremos recorrer directorios de un pen-drive o similar. O sea, que no sabemos dónde se montan estos dispositivos en Mac OSX.

La respuesta es cd /Volumes

Saludos,

viernes, junio 07, 2013

Terminal en UNIX, configuración básica


Desde mi PC Fedora abro sesión en un servidor HP-UX.
Todo va aparentemente bien, pero cuando edito un fichero con VI me sale la siguiente advertencia:


I don't know what kind of terminal you are on - all I have is 'unknown'.

El problema además, es que no me deja editar más de una línea de texto del fichero. El vi se está comportando como los antiguos editores de líneas (Edlin del MS-DOS por ejemplo).


En mi Fedora:
echo $TERM
xterm-256color


Abro sesión en  HP-UX:

echo $TERM
unknown


Hacemos en HP-UX:
export TERM='xterm'

y Ahora asunto arreglado.

Saludos,

miércoles, junio 05, 2013

Niveles de ejecución en RedHat, Fedora, CentOS, etc.


Supongamos que queremos configurar el arranque del servicio sendmail.

Para arrancar sendmail en todos los niveles de ejecución:
chkconfig sendmail on

Para arrancar en unos cuantos niveles de ejecución determinados:
chkconfig --level 345 sendmail on

Otras opciones interesantes:
Para arrancar ahora mismo el servicio independientemente de la configuración:
service sendmail start

Para ver cómo está configurado el arranque automático del servicio:
chkconfig --list sendmail

Saludos,

viernes, mayo 10, 2013

Configuración de RPM y YUM para indicarles cual es el proxy que deben utilizar

Configuración de RPM:

Hay que definir las siguientes variables de entorno en el fichero /etc/profile
(también podemos definirlas en el .bash_profile del usuario):

En el ejemplo supongo que vamos al puerto 8080.

export http_proxy=http://usuario:password@servidor:8080
export ftp_proxy=http://usuario:password@servidor:8080

Configuración de YUM:

Editamos el fichero de configuración: /etc/yum.conf

proxy=http://usuario:password@servidor:8080


Fuente aquí.

Saludos,

jueves, mayo 09, 2013

Sincronización de hora en un servidor Linux

En este ejemplo el servidor Linux es el que pide todos los días la hora a un servidor NTP.

Vamos al home de root y creamos el script actualiza-hora.sh

#!/bin/bash
/usr/sbin/ntpdate SERVIDOR


si hay un firewall por medio, habría que poner el argumento -u:
/usr/sbin/ntpdate -u SERVIDOR

Hay que darle permisos de ejecución:

#chmod 744 actualiza-hora.sh

Configurar con crontab la ejecución diaria del script. En el ejemplo se actualizaría a las 20:10

#crontab -e

10 20 * * * /root/actualiza-hora.sh 1> /root/actualiza-hora.log 2> /root/actualiza-hora.err

Saludos,

miércoles, mayo 08, 2013

Actualizar la hora en un servidor HP-UX sincronizando con un servidor NTP

Información muy completa sobre "Configuración y uso de NTP". Incluye tanto el punto de vista del cliente que pide la hora, como la del servidor que la ofrece: www.alcancelibre.org/staticpages/index.php/como-ntp

En HP-UX, configuramos así el servidor para que reciba la hora:

Entramos en SAM (System Management Homepage):
#sam

Vamos a "NETWORKING AND COMMUNICATIONS".



Seleccionamos "Network Services Configuration".


Luego TIME:


Ahora "NTP Network Time Sources":


Configuramos el servidor de tiempos propio o externo:


Luego convendría reiniciar el servicio NTP:

#cd /sbin/init.d
#./xntpd stop
#./xntpd start

Saludos,

miércoles, abril 24, 2013

Instalación de impresora HP en Linux




El fabricante HP ofrece drivers de sus impresoras, escaner y fax para GNU/Linux. Llama a este servicio: HPLIP (HP Linux Imaging and Printing).

En mi caso tengo un CentOS 6.2 y voy a imprimir en la impresora HP Laserjet 1020. Como no está bien instalada tengo este error: "Printer HP-Laserjet-1020: printer requires a binary plugin, run hp-setup".


1.-Del enlace que he indicado arriba descargamos el paquete hplip recomendado para nuestro S.O. e impresora.
En mi caso es el hplip-3.13.4_rhel-6.0.x86_64.rpm

2.-Instalamos el paquete.
yum install hplip-3.13.4_rhel-6.0.x86_64.rpm
Me salen mensajes de error por conflictos con otro software de HP instalado ya en mi Linux: "conflicts with file from package hplip-common-3.10.9-3.el6.x86-64"

Eso me obliga a desinstalar estos paquetes:

yum remove hpijs*
yum remove libsane-hpaio*
yum remove hplip-common*
yum remove hplip-libs*

Ahora si consigo instalar el paquete.

3.-Instalamos el setup de HP que nos lo ha dejado en /usr/bin
Ponemos el argumento -i para que sea en modo interactivo.
./hp-setup -i

4.-Nos hace las siguientes preguntas:
  • ¿Está conectada por wifi o por USB?
  • ¿Cómo deseas instalar el plug-in de HP? Tengo como opción por Internet que no funciona creo que porque no tiene en cuenta mi configuración proxy. No me queda otra que indicarle una ruta al fichero que busca (hplip-3.13.4-plugin.run).
5.-Descargo el fichero hplip-3.13.4-plugin.run de este sitio de HP.

Ahora sin reiniciar ni nada ya puedo imprimir desde CentOS en la impresora HP.

Saludos,

lunes, abril 08, 2013

Ayuda para saber qué leer...



Leo menos de lo que quisiera. Yo diría que por falta de tiempo de ocio. Por eso selecciono mucho las lecturas.

Este ensayo del conocidísimo profesor y crítico Harold Bloom te intenta aconsejar sobre lo que deberías leer. Imprescindible lectura. Sobre todo el prefacio.

http://www.unpa.edu.mx/~blopez/algunosLibros/Harold%20Bloom%20-%20Como%20Leer%20Y%20Por%20Que.pdf

Espero que te sirva.

Saludos,

Fotografía: biblioteca vaticana.

lunes, marzo 25, 2013

Oracle. Parámetro shared pool reserved size

La recomendación solía ser que el valor del parámetro SHARED_POOL_RESERVED_SIZE fuera el 10% del parámetro SHARED_POOL_SIZE.

Para modificarlo:

alter system set shared_pool_reserved_size=2G scope=spfile;


lunes, marzo 04, 2013

Oracle, limpiar zonas de memoria

Para limpiar la "shared pool":

alter system flush shared_pool;
Conviene lanzarlo un par de veces.

Para limpiar el "buffer cache":

alter system flush buffer_cache;

Sobre configuración de memoria en Oracle11g: http://docs.oracle.com/cd/B28359_01/server.111/b28274/memory.htm

Saludos,

Mi móvil no sincroniza con Gmail después de habilitar la "Verificación en dos pasos"

El acceso a Gmail funciona bien desde cualquier PC, pero no desde mi móvil Android.
¿Qué hacer? El proceso es un poco lioso...


  1. Entramos en Gmail, hacemos clic en el icono del engranaje (arriba a la derecha). Seleccionamos "Configuración".
  2. Vamos a la pestaña de "Cuentas e Importación", "Cambiar la configuración de la cuenta". Hacer clic en "Otra configuración de la cuenta google".
  3. En Cuentas seleccionamos "Seguridad", "Verificación en los pasos".
  4. Entramos en "Más información", y a la izquierda hacemos clic en "Problemas comunes".
  5. Seleccionamos nuestro problema, que es "LAS CONTRASEÑAS DE APLICACIONES NO FUNCIONAN". En este momento se nos invita a entrar a  https://accounts.google.com/DisplayUnlockCaptcha desde el dispositivo móvil y siguiendo las indicaciones el móvil sincroniza perfectamente.
Saludos,

lunes, febrero 18, 2013

Conseguir un carácter ASCII en Windows o en Linux

Hay caracteres ASCII que se resisten a ser mostrados, bien porque no sabemos como indicar al sistema operativo que queremos introducir un código ASCII, o bien porque no sabemos el código correspondiente al carácter que queremos introducir.

Introducir un carácter ASCII en Windows:
Tecla ALT + código decimal del carácter ASCII.
Así es bastante habitual alguno de estos:

  • ALT+92 = Contrabarra (para path-s en Windows).
  • ALT+126 = Vírgula (para patrones en PERL).
  • ALT+64 = Arroba (correos).
  • ALT+124 = Pipe (barra vertical).
Introducir un carácter ASCII en Linux:
Al menos en mi CentOS la combinación de teclas es:
Shift (Mayúsculas) + CONTROL + U y a continuación se introduce el código hexadecimal del carácter ASCII.
  • Shift+Control+U y luego x5C = Contrabarra.
  • Shift+Control+U y luego x7E = Vírgula.
  • Shift+Control+U y luego x40 = Arroba.
  • Shift+Control+U y luego x7C = Pipe (barra vertical).
Nota en Linux u otros UNIX:
Después del Shift+Control+U, en mi Centos puede poner una contrabarra antes de x5C por ejemplo, y se muestra bien. También puedes prescindir de la x poniendo directamente 5C.

Por último para necesitamos una tabla de caracteres ASCII con su correspondiente código decimal y binario. Aquí hay un par muy completas:



miércoles, febrero 06, 2013

UNIX, hp-ux, ORACLE, sqlplus: No me funciona la tecla de retroceso o backspace

El problema es que accedemos en remoto y el sistema operativo no está recibiendo correctamente el carácter de retroceso.

Cada vez que demos al backspace, visualmente puede que veamos ^H o en mi caso desde la terminal CentOS ^?

Solucionamos el problema con el siguiente comando:

stty erase Pulsar_retroceso

Saludos,

martes, febrero 05, 2013

Corrupción IV: Coloca a tus amiguetes del partido y échalos con indemnización millonaria antes de que entren los nuevos

Metro Bilbao:

"el cese de tres personas de la anterior dirección de Metro van a costar a todos los bizkainos más de medio millón de euros. Y ha dado nombres y apellidos. El primero el del propio consejero delegado, Iñaki Prego, con un sueldo de más de 140.000 euros y una indemnización por cese de 145.000. También el de la Jefa del servicio jurídico, Carmen Sarachu, que ha cobrado una indemnización de 260.000 euros. El tercer caso sería el del último director de Metro Bilbao, Iñaki Etxenagusia, quien, según Bilbao, habría cobrado una indemnización de 93.000 euros por seis meses de trabajo."

Que casualidad, todos políticos (PSE/PSOE). Aquí la historia completa de esta nueva estafa.

Si esto no es robar...