lunes, junio 27, 2011

Como quitar columnas de un fichero de texto

Supongamos que tenemos un gran fichero de texto y queremos quitarle unas columnas (me ha ocurrido hoy mismo).

Creo que la forma más sencilla es con Perl:

Leemos el fichero de entrada línea a línea, pero escribimos en el fichero de salida todo menos las columnas que no nos interesan.



$fichero="origen.txt";
open(FICH, $fichero) or die("Error al abrir el fichero");
open(SALIDA, ">destino.txt");
while(<FICH>){
$linea=$_;
$basura=substr($linea, 0, 10);
$texto=substr($linea, 10, 100);
printf SALIDA $texto;
}
close FICH;
close SALIDA;

Saludos.


sábado, junio 25, 2011

Sobre compiladores de C++

El programa del otro día lo hice con el compilador de Microsoft Visual C++.

Uno de los problemas es que por defecto, el ejecutable que crea no incluye las librerías DLL (Dinamic Link Library). Hasta un programita tan pequeño como el del otro día tiene varias dependencias de DLL. Estas librerías se linkan en tiempo de ejecución (normalmente).

Inconvenientes:

1.-No hacemos nada distribuyendo solo el fichero .exe. Habría que pasar también las DLL-s que colocaríamos junto al ejecutable.

2.-Otra alternativa es instalar en el PC donde se vaya a ejecutar el .exe el "Visual C++ redistributable package". La versión 2010 ocupa 4,8 Mb.

3.-Crear un instalador (muy ridículo para el programa que hemos hecho).

Alternativas:

1.-Forzar el linkado en tiempo de compilación. Trae otras complicaciones.
2.-Utilizar otro compilador. Esto es lo que he elegido yo.


Compilando el programita anterior con el C++ de MinGW el ejecutable pasa a ocupar algo menos, y ahora se supone que es totalmente independiente.

Esta es la ejecución:



Saludos.

martes, junio 21, 2011

El descuento por pronto pago

Este es un tema más complicado que lo que parece. Normalmente nos indican algo así: 3/10, n/90 que significa: 3% de descuento si pagas en 10 días importe Neto si pagas a 90. Las fórmulas que hay detrás tienen su complicación. Este programa que he hecho en C++ lo podéis compilar con cualquier compilador libre. Calcula el tipo de interés real que tenemos que tener en cuenta. En el ejemplo que he puesto (3% de descuento por pronto pago) el coste de financiación anual equivalente llega al 14,91%. El código fuente:
#include <iostream>;
#include <math.h>;
#include <iomanip>;
using namespace std;

int main()
{
  float descuento;
  float costeFinanciacion;
  float costeFinanciacionAnual;
  float diasSinDescuento;
  float diasDescuento;
  cout<<"\n\nCoste de \n";
  cout<<"---------------------------------------\n\n";
  cout<<"Descuento (%): ";
  cin>>descuento;
  cout<<"\nDias para pagar (con descuento): ";
  cin>>diasDescuento;
  cout<<"\nDias para pagar (sin descuento): ";
  cin>>diasSinDescuento;
  cout<<std::endl<<"Coste de financiacion enganosa: ";
  costeFinanciacion = descuento*100/(100-descuento);
  cout<<setprecision(4)<<costeFinanciacion<<" %\n\n";
  cout<<"Coste de financiacion anual equivalente:\n\n";
  costeFinanciacionAnual = pow((1 + (costeFinanciacion/100)),(365/(diasSinDescuento-diasDescuento))) - 1;
  cout<<costeFinanciacionAnual * 100<<" %"<<std::endl<<std::endl;

  cin.sync();
  cin.get();

  return 0;
}
Por cierto, para el coloreado del código fuente he utilizado este sitio de "Online syntax highlighting". Saludos.

miércoles, junio 15, 2011

Envío de mensajes de correo en HP-UX

Hola,
Hoy he tenido que configurar el sendmail en un servidor HP-UX.

Si está instalado el sendmail el fichero de ayuda estará en /etc/share/lib/sendmail.hf

Lo primero sería saber si ya está configurado.

Intentamos enviar un mail:


#sendmail –v usuario@miempresa.com fichero.txt
unknown miempresa.com: Name server timeout
usuario@miempresa.com..... Transient parse error – message queued for future delivery usuario@miempresa.com... queued /dead.letter...
Saved message in /dead.letter

Podemos ver el mensaje almacenado en /var/spool/mqueue

#sendmail –bv
Recipient names must be specified

Para ver si sendmail está en ejecución:
#ps –ef|grep sendmail
sendmail: accepting connections

Para arrancar el servicio sendmail:
#/sbin/init.d/sendmail start
sendmail has already been started

Para parar el servicio sendmail:
/sbin/init.d/sendmail stop
Sendmail killed.

Configuración de sendmail si tenemos un Relay de correo llamado servidor.miempresa.com

Editamos el fichero /etc/mail/sendmail.cf

Buscamos la línea donde pone #“Smart” relay host (may be null)
debajo de esa línea hay un DS
Ponemos DSservidor.miempresa.com

Buscamos #my official domain name
debajo de esa línea hay un #Dj$w.Foo.COM
Ponemos Dj$w.miempresa.com

Guardamos el fichero sendmail.cf

Configuración de red:

Ahora bien, tenemos que poder llegar bien al relay de correo servidor.miempresa.com

Editamos el fichero /etc/hosts y añadimos la IP y denominación del relay de correo.

Por último hay que indicar al S.O. que tiene que utilizar el fichero hosts cuando vaya a buscar la IP del servidor:

Vamos a /etc y creamos un nuevo fichero (si no existe) llamado nsswitch.conf
Ponemos: hosts:files

Ahora reiniciamos sendmail como hemos visto arriba y podemos enviar el primer mensaje:

sendmail –v usuario@miempresa.com fichero

usuario@miempresa.com... Connecting to servidor.miempresa.com via relay... 220 servidor.miempresa.com
Microsoft ESMTP MAIL Service, Version: 5.0.2195.6713 ready at Wed, 15 Jun 2011 11:40:11 +0200 EHLO servidor-remitente.miempresa.com
250-servidor.miempresa.com Hello 250-TURN 250-ATRN 250-SIZE 2097152 250-ETRN 250-PIPELINING 250-DSN 250-ENHANCEDSTATUSCODES 250-8bitmime 250-BINARYMIME 250-CHUNKING 250-VRFY 250 OK
MAIL From: SIZE=1174
250 2.1.0 root@servidor-remitente.miempresa.com....Sender OK
RCPT To:
250 2.1.5 usuario@miempresa.com
DATA
354 Start mail input; end with .
250 2.6.0 201106150915.p5F9Fil04117@servidor-remitente.miempresa.com; Queued mail for delivery usuario@miempresa.com... Sent (201106150915.p5F9Fil04117@servidor-remitente.miempresa.com;
Queued mail for delivery) Closing connection to servidor.miempresa.com
QUIT
221 2.0.0 servidor.miempresa.com Service closing transmission channel

Un usuarios de la máquina podría enviar mensajes con MAILX por ejemplo:

Supongamos que el usuario hace un script para enviar todos los días un fichero de log a varias personas:

#!/bin/sh
mailx -s "logs del servidor pepito" usuarioPedro@miempresa.com,usuarioLuis@miempresa.com /home/log

Saludos.

jueves, junio 09, 2011

Qué bonita es Barcelona! Parte 2.


Decía que había llegado a la Catedral del Mar, la catedral del pueblo:




Ahora vamos a la parte de atrás de la Catedral y buscamos la calle Montcada. Nada más entrar por esta calle, encontraremos a la derecha la calle más estrecha de Barcelona, que se encuentra cerrada con una verja en la actualidad:


Lo siguiente que encontraremos a mano derecha será la Euskal Etxea, y justo después, también a mano derecha, entramos por un estrecho callejón.

Siguiendo el callejón daremos la vuelta a la manzana y así llegaremos a una antigua chimenea. Es la antigua fábrica de moneda de Barcelona.

En esta imagen vemos la parte trasera de la Catedral (abajo en la imagen), la posición de la Euskal Etxea, la entrada al Centro Cultural Euskal Etxea y la chimenea (arriba en la imagen):



Aquí vemos la chimenea:


Ahora en lugar de fabricar monedas, en estas instalaciones se encuentra la Sociedad Gastronómica Euskalzaleak que por dentro debe estar ambientada con imágenes de los caseríos vascos (no había nadie y no pude entrar :-(

En esta dirección hay más información de la Sociedad y de la fábrica de moneda:

He recogido este interesante texto de ese blog (coreuskalhiria): "Se trata de la antigua Ceca (palabra de origen árabe que indica el lugar donde se acuñan monedas) medieval de Barcelona, "Cap i Casal de Catalunya" la cual estuvo en funcionamiento desde el siglo XIV hasta finales del siglo XIX, con intervalos de descanso forzoso.

La historia de la misma aún está por escribir pero por sus puertas han entrado y salido miles y miles de monedas, desde los croats y los diners hasta los florins; y desde las monedas de la Guerra de los Segadors hasta las monedas de Barcelona, de la guerra napoleónica. Y más: Isabel II la hizo reconstruir, en la puerta central aún se ve el escudo de la reina. Pero, poco a poco, la política de centralizar las acuñaciones en la Ceca de Madrid, hace caer en el olvido la magnífica fábrica que aún se yergue majestuosa a pesar de las severas heridas recibidas.

La encontramos en la misma calle actual de la Seca (ceca) y ocupa toda una manzana. Flanqueada por la calle de las Mosques (moscas), Flassaders (fabricantes de mantas) y Cirera (cereza), aún mantiene el aroma de un tiempo que, a pesar de los cambios, aún perdura".



Por último cogimos el metro para ir a ver la siempre impresionante Sagrada Familia:




Saludos.

miércoles, junio 08, 2011

Qué bonita es Barcelona! Parte 1.

El sábado tuve boda en este hotelón W de Barcelona.


Antes de la boda visité el parque Güell que estaba a rebosar de gente. Desde este parque se pueden ver buenas vistas de la ciudad.


Y por supuesto, se puede degustar la arquitectura fantastica de Gaudí:




Al día siguiente paseo por el puerto (vista desde el Aquarium):



Y por la tarde un paseo que comenzó por la Catedral con su mercado de antigüedades:


Y continuó atravesando el barrio Gótico:





Hasta llegar a la Catedral del Mar (Novela histórica muy recomendable y que se lee de un plumazo). La Catedral del pueblo.



Saludos.

viernes, junio 03, 2011

Errores en la instalación de Office

Casi me vuelvo loco... y además no sólo me ha ocurrido a mí. Resulta que hay un montón de gente que pregunta en foros por estos mismos errores y nadie les da la solución.

Incluso a uno le han acusado injustamente de intentar instalar una copia pirata. El moderador del foro va y le dice que si el office que intenta instalar está en un ISO, pues que es pirata. Pues mire usted, mi Office no es pirata y me lo he tenido que descargar en imagen ISO y además a mí me daba el mismo error que al otro, por lo que era un caso interesante para estudiar.

En cada intento de instalación me ha dado alguno de estos dos errores:

1.-"El programa de instalación no puede continuar porque un archivo necesario está dañado o no está disponible. Ejecute de nuevo el programa de instalación desde el disco original o la ubicación de descarga."

2.-"El programa de instalación no se completó correctamente. Sentimos los inconvenientes causados".


¿El problema?

En mi caso la ISO se había descargado bien.

El programa de grabación de la imagen (software libre Infrarecorder) había grabado bien.

Pero, el CD lo había grabado desde un portátil al que al parecer no le funciona bien el grabador.

Entonces, ¿por qué me había costado tanto caer en que el CD estaba dañado?

Primero porque el contenido del CD se lista bien, y luego porque ese mismo CD dañado se lee perfectamente desde la grabadora averiada y había podido instalar en ese portátil el Office2010.

Este era un problema que antiguamente solía ocurrir con las disqueteras. La disquetera de tu puesto funcionaba mal (algún tipo de desalineación), pero no te lo parecía porque leía y escribía bien tus disquetes. Ahora bien, cuando ibas a otro PC para una presentación por ejemplo no había forma de leer.


Para saber si te está pasando esto mismo, fíjate en la unidad de DVD. El icono aparece desdibujado. No consigue leer el logo del Office2010.


Así es como se debería ver:



Otros errores típicos del Office:

Suelen producirse errores cuando versiones anteriores se han desinstalado de forma incorrecta lo cual parece ser que es muy habitual.

Tanto es así, que Microsoft ha publicado 3 scripts de desinstalación (Windows 2003, Windows 2007 y Windows 2010) que podéis descargar de aquí: http://support.microsoft.com/kb/290301/es

Saludos.