jueves, 22 de noviembre de 2007

Port de FPDF para Realbasic

Para los que no lo conocen realbasic es un RAD con la capacidad de generar binarios para Windows, GNU/Linux y MAC.

Es un lenguaje que fue concebido como un Visual Basic 6 mejorado, con mayor orientación a objetos pero con una sintaxis casi identica.

Su IDE es realmente bueno y los binarios generados realmente funcionan.

Posee soporte nativo para bases de datos RealSQL que no es más que un SQLLite integrado al lenguaje. Además mediante Plugins podemos conectarnos con las bases de datos más habituales del mercado, desde SQL Server pasando por MySQL o mediante un driver ODBC.

Mi experiencia al migrar sistemas VB6 a Realbasic fue realmente buena, si bien los "automigradores" que vi por ahi no funcionaron ninguno, en aplicaciones chicas se puede aprobechar para hacer una revision del codigo.

La gran ventaja de todo esto es que cuando terminemos tendremos una aplicación que correra en cualquiera de los sistemas operativos más utilizado.

La gran contra:
La gran contra que le encontre a este lenguaje fue la ausencia absoluta de una herramienta de reporte (como data report de visual basic). Esto puede causar un impacto negativo en las personas que tenian sus reportes integrados en Visual.

La gran ventaja:
Realbasic seria la evolucion de Visual Basic 6 sin llegar a las propuestas de .NET. Para los que necesitamos una solucion multiplataforma de programación Creo que es la opcion profesional que mejor se ajusta.

Precios?
La version standard de linux es de libre descarga y sin limitaciones.

Para windows y mac las versiones standard cuestan 100U$S, nada mal comparado con lo que hay que desembolsillar para comprar un visual studio.

Si quieren más información visiten http://realsoftware.com/store/realbasic/pricing/ en donde podrán ver los distintos tipos de compras que pueden realizar.


Bueno luego de esta introducción les cuento que he realizado un port de la clase FPDF en RealBasic, lo que permite realizar archivos PDF desde realbasic sin ningun inconveniente, hasta ahora solo soporta las 14 tipografias standard y funciona tanto en linux como en windows. (si alquien puede probarlo en una MAC estaria barbaro).

Tengo bastantes cosas por hacer todavia ya que por ejemplo el soporte para imagenes no esta terminado ya que priorice las cosas más importantes.

Mañana voy a poner a vuestra disposicion la clase para libre descarga, su licencia, Freeware al igual que FPDF asique no se asusten.

Fundamentalmente este port nacio de ver que muchas de las cosas que se hacen para RealBasic son pagas :(

Saludos Terricolas

viernes, 2 de noviembre de 2007

El mejor consejo que le puedo dejar a mi hijo

Hoy encontré esto en un video y sinceramente pienso que sería el mejor consejo que le puedo dejar a mi hijo.

Tiene hechas algunas correcciones para adaptarlo al argentino :D pero la escencia es la original. Salu2





Si pudiera ofrecerte sólo un consejo para el futuro sería: usa protector solar. Los científicos han comprobado los beneficios a largo plazo del protector solar. Mientras que los consejos que te voy a dar, no tienen ninguna base confiable y solo se basan únicamente en mi propia experiencia.

He aquí mis consejos:

Disfruta de la fuerza y belleza de tu juventud. En realidad no me hagas caso. Nunca entenderás la fuerza y belleza de tu juventud hasta que se te haya marchitado. Pero créeme, dentro de 20 años cuando en las fotos te veas a ti mismo comprenderás de una forma que no puedes comprender ahora cuántas posibilidades tenías ante ti y lo hermoso que eras en realidad. Y no, no estás tan gordo como te imaginas.

No te preocupes por el futuro. O preocúpate sabiendo que preocuparse es tan efectivo como tratar de resolver una ecuación de matemáticas mascando chicle. Lo que sí es cierto es que los problemas que realmente tienen importancia en la vida son esos que jamás pasaron por tu mente, de esos que te sorprenden a las cuatro de la tarde de un día cualquiera.

Todos los días haz algo a lo que temas.

Canta!

No juegues con los sentimientos de los demás, y no toleres que la gente juegue con los tuyos.

Relájate.

No pierdas el tiempo sintiendo celos. A veces se gana y a veces se pierde. La competencia es larga y al final solo compites contra ti mismo.

Recuerda los elogios que recibas. Olvida los insultos. (Pero si consigues hacerlo, dime como).

Guarda tus cartas de amor. Tira los viejos extractos bancarios.

Estírate.

No te sientas culpable si no sabes muy bien que quieres de la vida. Las personas más interesantes que he conocido no sabían que hacer con su vida cuando tenían 20 años. Es mas, algunas de las personas más interesantes que conozco tampoco lo sabían a los 40.

Toma mucho calcio.

Cuida tus rodillas, sentirás la falta que te hacen cuando te fallen...

Quizás te cases, quizás no. Quizás tengas hijos, quizás no. Quizás te divorcies a los 40. Quizás bailes el vals en tu 75º aniversario de boda. Hagas lo que hagas no te enorgullezcas ni te critiques demasiado. Siempre optaras por una cosa u otra... como todos los demás.

Disfruta de tu cuerpo. Aprovéchalo de todas las formas que puedas. No le tengas miedo ni te preocupes de lo que piensen los demás, porque es el mejor instrumento que tendrás jamás.

Baila. Aunque tengas que hacerlo en el comedor de tu casa.

Lee las instrucciones, aunque no las sigas.

No leas revistas de belleza. Para lo único que sirven es para hacerte sentir feo.

Aprende a entender a tus padres. Será tarde para cuando ya no estemos.

Llévate bien con tus hermanos. Son el mejor vínculo con el pasado y probablemente serán ellos los que te acompañen en el futuro.

Entiende que los amigos vienen y se van, pero hay un puñado de ellos que debes conservar con mucho cariño.

Esfuérzate en no desvincularte de algunos lugares y costumbres porque cuanto más pase el tiempo, más necesitaras a las personas que conociste cuando eras joven.

Vive en una ciudad alguna vez, pero múdate antes de que te endurezcas.

Vive en el campo alguna vez, pero múdate antes de que te ablandes.

Viaja.

Acepta algunas verdades ineludibles: Los precios siempre subirán. Los políticos siempre mentirán, y tú también envejecerás y cuando seas viejo añoraras los tiempos en que eras joven, los precios eran razonables, los políticos eran honestos y los niños respetaban a los mayores.

Respeta a los mayores.

No esperes que nadie te mantenga, pues tal vez recibas una herencia, tal vez te cases con alguien rico, pero nunca sabrás cuanto durará.

No te hagas demasiadas cosas en el pelo porque cuando tengas 40 años parecerá el de alguien de 85.

Se cauto con los consejos que recibes. Y ten paciencia con quienes te los dan. Los consejos son una forma de nostalgia. Dar consejos es una forma de sacar el pasado de la basura, limpiarlo, ocultar las partes feas y reciclarlo, dándole más valor del que tiene.

Pero hazme caso .... en lo del protector solar.

martes, 28 de agosto de 2007

Problemas con CUPS en Feist

Hace tiempo ya que tenia problemas con las impresiones en Feist.
Resulta que cuando se mandaba a imprimir más de un trabajo a la ves se tildaba el cups y me llenaba el /var/log/cups/error_log con mensajes como

Unable to accept client connection - Too many open files.

A raiz de eso me meti en un thread https://bugs.launchpad.net/ubuntu/+source/cupsys/+bug/112803 el cual estoy siguiendo desde mayo y por fin se llego .. despues de más de 1 mes a una solución.

El problema era una librería de dbus y se soluciona haciendo un upgrade ya que salio el patch oficial. Asique si tienen problemas con el cupsys ... no lo agredan y hagan un

sudo apt-get update && apt-get upgrade

... y listo ...

Saludos

miércoles, 13 de junio de 2007

Recuperar password de MySQL

Si si ya se .. hace una bocha que no escribo .. pero bueno es que estoy medio perdido .. y dentro de ese laberinto estube buscando como cornos cambiar la password de mysql de una base que no me acordaba. Surfeando a full encontre esto en un blog por lo que lo voy a traducir al castellano (ah por cierto la fuente es http://felipecruz.com/changing-root-pass-on-mysql.php)

Cambiar la clave de root en mysql

Muchas distros de Linux tienen una opcion para instalar MySQL. En este caso, o aunque compilen MySQL la clave por defecto esta en blanco (NA: en ubuntu no). MySQL puede tambien correr en entornos windows. Cuando instalan MySQL, asegurense de establecer una clave para el usuario root. Una de las formas de hacer esto es:

root@u-1:/home/u-1# mysql -u root mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 1 to server version: 3.23.47

Type 'help;' or 'h' for help. Type 'c' to clear the buffer.

mysql> SET PASSWORD FOR root@localhost=PASSWORD('rubberchicken');
Query OK, 0 rows affected (0.06 sec)

mysql>

En el ejemplo anterior, establecimos la clave del usuario root a rubberchicken. Ahora al intentar ingresas sin el -p (para que solicite contraseña) se nos denegará el acceso:

root@u-1:/home/u-1# mysql -u root mysql
ERROR 1045: Access denied for user: 'root@localhost' (Using password: NO)


Por lo que deberemos ingresar suministrando la clave o solo agregando el -p para que sea de modo interactivo.

root@u-1:/home/u-1# mysql -u root -p mysql
Enter password:
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 3 to server version: 3.23.47

Type 'help;' or 'h' for help. Type 'c' to clear the buffer.

mysql>

Para reiniciar una clave de root que fue olvidada (reemplazar los path por los de tu distro):

[root@host root]# killall mysqld
[root@host root]# /usr/libexec/mysqld -Sg --user=root &
Si lo anterior no funciona proba con lo siguiente:

mysqld --skip-grant-tables --user=root

Ahora volvemos a cargar el cliente mysql:

[root@host root]# mysql
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 1 to server version: 3.23.41

Type 'help;' or 'h' for help. Type 'c' to clear the buffer.

mysql> USE mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> UPDATE user
-> SET password=password("newpassword")
-> WHERE user="root";
Query OK, 2 rows affected (0.04 sec)
Rows matched: 2 Changed: 2 Warnings: 0

mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)

mysql> exit;
[root@host root]#killall mysqld

Reiniciar el servidor MySQL de forma normal:

/etc/init.d/mysqld start 

lunes, 16 de abril de 2007

abm-o-matic para todo el mundo

Hace un par de años atras cuando comencé a trabajar para una empresa de software, me di cuenta el caos de programas que tenia, cada programa era totalmente distinto al otro, siendo que todos hacian básicamente lo mismo un proceso de ALTA, uno de MODIFICACION, uno de CONSULTA y uno de LISTADO. Si si, el famoso ABM.

El tema es que estos ABM's venian de la época de Francisco Cachilo (un programador no muy agil que se las rebuscaba para hacer todo más complicado y más feo).

Por lo que me surgió la idea de hacerle una lavada de cara al sistema y eliminar del menu de usuarios como 3 o 4 opciones por cada subsistema.

Me acuerdo que los menues no terminaban nunca, por cada opcion tenias un submenu que decia

Archivo de Talcosa
  • Alta de Talcosa
  • Consulta de Talcosa
  • Listado de Talcosa

o a veces peor

Archivo de Talcosa
  • Alta de Talcosa
  • Consulta de Talcosa por color de Pelo
  • Consulta de Talcosa por color de Ojos
  • Consulta de Talcosa por color de Calzones
  • Listado de Talcosa por color de Pelo
  • Listado de Talcosa por color de Ojos
  • Listado de Talcosa por color de Calzones

EN FIN UN HORROR!!!!

Luego de pelearme con la vida y despues de muchas horas de trabajo (8) se me ocurrio hacer un Programa que haga ABM's!

Si si .. algo así como una herramienta CASE pero más a lo bestia.

Bueno de ahí fue donde empece a buscar como demonios acceder a la definición de los campos y las tablas y los indices y etc. etc., pero eso ya lo puse en el posteo pasado por lo que ahora me voy a centrar en como lo hice.

Bien la cosa fue realmente sencilla:

Agarre un programa modelo que había hecho en donde se contemplaba, el Alta, la modificación el borrado, la consulta y el listado. A este programa lo llame PLANTILLA.p.

/*****************************************************************************/
/* PLANTILLA PARA ABM-O-MATIC */
/*****************************************************************************/

/** DEFINO BOTONES **/

def button btnAgregar label 'AGREGAR'.
def button btnModificar label 'MODIFICAR'.
def button btnBorrar label 'BORRAR'.
def button btnImprimir label 'IMPRIMIR'.

/** DEFINO UN QUERY **/
def query qry01 for @4@.

/** DEFINO UN BROWSE **/
def browse brw01 query qry01 share-lock
display
@1@
with 10 down width 78.

/** DEFINO UN FRAME **/
def frame frmMain
brw01 at 1
btnAgregar at 1
btnModificar
btnBorrar
btnImprimir
with 1 down row 3 centered
title '[ @5@ ]'.

def frame frmIngreso
@1@
with 1 down row 6 centered overlay 1 col color message
title '[ ALTA/MODIFICACION DE REGISTRO ]'.

/** DEFINO EVENTOS **/
on choose of btnAgregar run Agregar.
on choose of btnModificar run Modificar.
on choose of btnBorrar run Borrar.
on choose of btnImprimir run Imprimir.

/** MAIN **/
hide all no-pause.
status input off.
run OpenQry.
enable all with frame frmMain.
wait-for endkey of this-procedure.

/*** PROCEDURES ***/
procedure Agregar.

create @0@.
update
@2@
with frame frmIngreso.

message 'Confirma el Alta?'
view-as alert-box buttons OK-CANCEL title '[ ATENCION ]'
set wCh as Log.

if wCh <> true then delete @0@.
run OpenQry.

end procedure.


procedure Modificar.

update
@2@
with frame frmIngreso.

run OpenQry.

end procedure.

procedure Borrar.
message 'Confirma la baja?'
view-as alert-box buttons OK-CANCEL title '[ ATENCION ]'
set wCh as Log.

if wCh = TRUE then delete @0@.
run openQry.
end procedure.

procedure Imprimir.

form header
'Nombre Empresa' at 1
'Nro.Pag.: ' to 70 page-number format "99999999" to 80
'Fecha ..: ' to 70 today to 80
skip(1)
"Listado de @5@" at 30
skip(1)
with frame tit no-label no-box page-top.

message '¿Confirma la Impresión?' view-as alert-box buttons YES-NO update wCh.

if wCh <> TRUE then return.

output to archivo.txt paged page-size 66. /*** ACA LA SENTENCIA OUTPUT ***/

view frame tit.

get first qry01.
repeat while avail @0@:
display
@1@
with down frame frmImpresion width 255 no-box.

get next qry01.
end.

reposition qry01 to row 1.
output close.

end procedure.

procedure OpenQry.
close query qry01.
open query qry01
@3@
.
end procedure.


/*****************************************************************************/
/* (C) 2000 ABM-O-MATIC by Diego J. Coppari All Right Reserved */
/********************************* EOF ***************************************/


Bien, esa fue mi plantilla, ahora que fue lo siguiente que hice, hice un programa que "parseaba" este archivo y a medida que lo recorría iba reemplazando los numeros por su valor. Si se fijan tenemos varios.

@0@ = Nombre de la Tabla primaria
@1@ = Lista de campos para los display estos además de TABLA.campo tienen el label y el format.
@2@ = Lista de campos en el formato TABLA.campo sin agregados para los ABM.
@3@ = Sentencia del Open Query
@4@ = Lista de Tablas para el Query (Tabla1, Tabla2, TablaN)
@5@ = Titulo del Programa


Explicado esto creo que no les será muy difícil crear algo funcional, la parte más difícil ya la tienen.

Se trata de jugar y de tener un programa funcional en un 90%, cosa de tocar 2 o 3 pabadas y que quede andando.

Y por sobre todo, lo más importante, que todos los programas tengan la misma estructura.

sábado, 7 de abril de 2007

VACACIONES!

Je que bien me vinieron estos 2 días feriados. El único inconveniente fue el contenido televisivo, pero bueno ... aguante isohunt. Ah, por cierto no miren EPIC Movie.

Volviendo al tema de Progress no se donde nos habíamos quedado pero se me ocurrió postear algo que quizá muchos no lo saben, y es la forma de acceder a la info sobre la base de datos.

Las bases de datos Progress tienen una serie de tablas ocultas en donde guarda toda la información sobre las tablas, campos, indices, etc.

Estas tablas comienzan con un guión bajo "_".

Las más importantes o las que yo más he usado son:

_Filelist: Contiene Registros sobre los archivos que componen la base de datos.

_Field: Contiene Registros sobre todas las tablas de la base de datos.
_Field-Trig: Contiene Registros sobre los triggers de tablas.

_File: Contiene Registros sobre los campos de una determinada tabla (_file).
_File-Trig: Contiene Registros sobre triggers de campos.

_Index: Contiene Registros sobre los indices de una tabla.
_Index-Field: Contiene Registros sobre los campos que integran un indice.

Por ejemplo, si quisieramos saber todos los campos de una tabla llama "USUARIOS" tendriamos que ejecutar la siguiente instrucción:

for each _file
where _file._file-name = "USUARIOS",
each _field of _file:

display _field.

end.


Un ejemplo que voy a postear me sirvio mucho para detectar todos los trigguers que tenia una base de datos.

for each _file,
each _field of _file,
each _field-trig of _field:

display _file._file-name format 'X(10)'
_field._field-name format 'X(10)'
_field-trig._Event format 'X(08)'
_field-trig._Proc-Name format 'x(30)'
_field-trig._Override
_field-trig._Trig-Crc

with width 255 no-label.

end.

En el próximo post les voy a enseñar como hacer ABM's genericos utilizando estas tablas.

Salu2

miércoles, 4 de abril de 2007

Como repuntar

Bueno tendría que leer un rato largo para acordarme donde me quede :D jejeje pero igual ahora estoy medio distraído ya que estuve pasando la ecografía que le realizaron a mi mujer la cual grabaron en un prehistorico VHS por lo que tube que salir a pedir una video cassetera prestada y desempolvar mi vieja AIMS Video Highway Xtreme 98, colocarla en mi computadora y renegar!!!! pasando el VHS a DVD.

Ya que tamos lo incrusto acá ya que lo subí a youtube para que lo vea la flia (y los que no tienen vhs :p) ahí va.





En fin, para los que son poseedores de una placa capturadora de tv (o tv tunner) y la tienen ahi tirada porque no anda más que en Win98 les cuento que hay un fantastico programa freeware que se llama DScaler que tiene soporte para estas placas basadas en el chip Bt848. Es más este programa hace de todo incluso grabar desde la tele o la entrada video-in.

No hace falta instalar la placa para hacerla funcionar, solamente bajan el software y el mismo se comunica directamente con la placa. Trae soporte para un montón de placas por lo que si les interesa bajenlo y denle una oportunidad, además trae filtros y soporte para Close Caption y otra infinidad de cosas. Realmente no tiene desperdicio y no consume recursos como los Programas que generalmente vienen con las placas.

Por otro lado si les interesa, también hay un proyecto freeware que se llama btwincap que es un driver gratuito para cualquier placa sintonizadora de tv (tv tunner) que tengan chips Bt848/49/78/79. Esta muy bueno porque es un Driver universal con el que van a poder hacer andar esa placa que habían dado por muerta, o que la estaban por usar para hacer un asadito.

Ok, hecho este paréntesis prometo que mi próxima aparición va a ser sobre algo de Progress

jueves, 29 de marzo de 2007

Ubuntu Dapper Linux y Progress 8 y 9

Un coctel explosivo se podría denominar a esta convinación jajaja. pero no es así. Resulta que tube que toparme con la migración de un par de servidores que se encontraban en Red Hat 7.3 y de paso porrazo cambiar algunas versiones de progress 8 a 9.

Si bien saben Ubuntu Linux esta basado en Debian, por lo que oficialmente Progress no daba soporte ya que solo "funciona" en Red Hat (por lo menos así me habian dicho).

Bien la cosa no fue tan complicada al final pero si junto con un amigo renegamos (más el que yo) bastante para lograr que todo funcionara bien y así fue.

La primera vez que fui evangelizado con Ubuntu fue con un Hoary, ahi no hubo demasiados problemas ya que fue en una arquitectura x86, por lo que con solo copiar la carpeta dlc al /usr/dlc y salio andando.

Cuando salio Breezy, empezaron los problemas ya que había muchos cambios y Progress 8 se negaba a funcionar porque no andaba la libreria libcwait.so y cuando la hacias andar te reclamaba un error con la GLIB 2.0.

Este problema más tarde también lo tube en Dapper pero ambos problemas se corrijen usando un parche para pasar el progress a la versión Progress 8.3e y borrando o renombrando (todavia no se bien porque) la carpeta /lib/tls.

El problema más grabe con Progress fue cuando quise instalar Progress 9 con una arquitectura x86_64. El sistema operativo fue Ubuntu Dapper 64 bit.

Aquí los problemas fueron varios.

El primer problema es que Progress 9 usa JAVA para todo lo que sea conexiones JDBC y ODBC, por eso si por ejemplo quieren conectar Progress con PHP mediante ODBC, van a tener que hacerlo andar si o si :D.

Para conseguir el Java solo tienen que hacer un:

# sudo apt-get install sun-java5-*

Luego hay que incluir las carpetas de libreria dentro del ld.so.conf ( si no esta el archivo hay que crearlo a pata)

# sudo vi /etc/ld.so.conf
/usr/dlc/lib
/usr/dlc/odbc/lib
Otra cosa a tener en cuenta es que no siempre el PATH al java esta bien apuntado y por ahi según la distro de Linux este en lugares distintos, por lo que no vendria mal chequear el archiv /usr/dlc/bin/sql_env en donde estan todas las variables de entorno que usa Progress. Este archivo tiene un inmenso CASE que segun la plataforma (uname) carga los parámetros correspondientes.

Un caso seria si usan las librerías compatibles con JAVA ia32-sun-java5


El siguiente paso es reconfigurar el linkeo de librerias


# sudo ldconfig

Puede ser que hasta este momento, siga sin funcionar correctamente, bueno es solo fijarse con el ldd que libreria esta faltando haciendo un ldd a todos los archivos que estan en /usr/dlc/odbc/lib y fijarse que no halla ninguna falla. (por ahi conviene usar el ldd -r)


LINKEO CORRECTO DE LIBRERIAS

I386
-rw-r--r-- 1 root root 1292301 2005-11-19 16:25 libstdc++-3-libc6.2-2-2.10.0.so
lrwxrwxrwx 1 root root 40 2006-11-07 15:43 libstdc++-libc6.1-1.so.2 -> /usr/lib/libstdc++-3-libc6.2-2-2.10.0.so
lrwxrwxrwx 1 root root 31 2006-11-09 18:28 libstdc++-libc6.2-2.so.3 -> libstdc++-3-libc6.2-2-2.10.0.so
lrwxrwxrwx 1 root root 18 2006-10-27 16:38 libstdc++.so.6 -> libstdc++.so.6.0.7
-rw-r--r-- 1 root root 849556 2006-04-20 19:19 libstdc++.so.6.0.7


AMD64
-rw-r--r-- 1 root root 1292301 Nov 9 11:54 libstdc++-3-libc6.2-2-2.10.0.so
lrwxrwxrwx 1 root root 38 Nov 9 12:09 libstdc++-libc6.1-1.so.2 -> /lib32/libstdc++-3-libc6.2-2-2.10.0.so
lrwxrwxrwx 1 root root 31 Nov 9 15:36 libstdc++-libc6.2-2.so.3 -> libstdc++-3-libc6.2-2-2.10.0.so
lrwxrwxrwx 1 root root 18 Nov 9 15:48 libstdc++.so.6 -> libstdc++.so.6.0.7
-rw-r--r-- 1 root root 849556 Nov 9 15:42 libstdc++.so.6.0.7

COMO CONSEGUIR LA libstdc++-3-libc6.2-2-2.10.0.so

# sudo apt-get install libstdc++2.10-glibc2.2


Para finalizar prueben lanzar una base y conectarse con el SQL Explorer (sqlexp)

Si esto funciona quiere decir que todo esta bien instalado

miércoles, 28 de marzo de 2007

Demaciadas emociones

Si por esas casualidades tienen un Progress 8 para windows van a tener un archivo que más de una vez le va a salvar la vida que es el x:\dlc\prohelp\techeng.hlp (taria bueno un man para linux de este archivo)

Gracias a este pequeñin pude aprender casi todo lo que hoy se de Progress y aplicarlo.

Uno de los principales miedos que a uno le inculcan cuando usa Progress (por lo menos a mi me paso) es tener mucho cuidado con los archivos de extension LK .

Veamos: Cada base de datos que uno crea en Progress (estoy pasando por alto un montón de cosas que supongo que ya lo saben sino no estarían en el blog), se compone de varios archivos
los archivos:

MIBASE.bi (Before Image)
MIBASE.db (La base de datos en sí)
MIBASE.lg (Un archivo de log)
MIBASE.lk (Indica que la base de datos esta en uso por algun proceso cuando ese proceso finaliza el archivo desaparece)
MIBASE.lic (si alguien sabe que es seria un buenisimo aporte al blog!)

Bien si por esas casualidades de la vida estamos usando Progress nos vamos a topar con un inconveniente que es que el archivo .db no puede superar los 2GB. En el caso de que suceda hay que hacer un proceso que se denomina conversión a Multi-volumen.

Esto es agarrar el archivo .db y hacerle un split :D jajajaja , no fuera de broma ..
Lo que hace en teoria progress es generarte n archivos .db y ponerte un pedacito de la base en cada uno segun lo definas en un archivo al que daras el nombre de MIBASE.st.

los archivos del tipo MIBASE.st se refieren a la estructura en la que esta conformada la base de datos.

por lo tanto si creamos una base en formato multi-volumen tendremos varios archivos .d?? se agrega este archivo MIBASE.st y probablemente el archivo .bi se pase a llamar .b1 o similar.

Bueno espero que si algun Progressista esta leyendo el blog pueda contribuir o corregirme si me equivoco. De ultima de eso se trata ;)

Mi Primera Vez

Bueno esta en realidad no es mi primera vez en un blog, pero si la primera vez que se me ocurre hacer algo por la vida (de los demás) ..

Resulta que programe/o desde hace mucho tiempo en Progress y se me ocurrio volcar algunas de las cosas que se en algún lado como para que alguien que se encuentre en las mismas que yo tenga un lugar más para intercambiar info.

No hay demasiadas cosas sobre Progress dando vueltas, y no me extraña ya que en sí es relativamente fácil hacer cosas ya que es un lenguaje 4GL y citando a un amigo es "como hablarle a la PC" ...

En fin uno puede usarlo así "a la bartola" o puede aprender a reutilizar código y tratar de "estandarizar" las cosas dependiendo de como le guste a cada uno programar.

Ultimos comentarios