Técnicas RAD

now browsing by category

 

Porqué menciono Clipper

Durante muchos años trabajé con Clipper, versión 5.2e de Nantucket Associates. No es un sistema muerto de programar. He desarrollado programas de mas de 50 mil líneas de código y poco a poco ire poniendo aqui información util.

Cada cierto tiempo me preguntan que es la ventaja o desventaja de la versión 5.3; en pocas palabras, para programas grandes, que corrían, ya no.

En mi opinión la muerte de Clipper se debió a Visual Objects, que en su versión 1.5 podía manejar Clipper, y en la 2.0 No.

Muchos programadores se pasaron a Visual Basic 3. otros probamos en su momento Harbour.

Sin embargo, se le extraña. Algunas de las habilidades de Clipper hacen falta en la red actual. Al mismo tiempo, hay nostalgia en lo que se podía hacer con Valkyrie, y algunas utilerías relacionadas. Objeto Tbrowse…. Tiempos de Juventud.

Otros usos de Clipper

El día de ayer recibí un correo donde alguien me critica diciendo que clipper es un lenguaje Muerto, etc. etc. etc.-

Debo comentar que Clipper no es un lenguaje de usu multiple, sino un “lenguaje enfocado a manejador” de bases de datos, y es lo suficientemente activo para que alguien que no tiene un sitio especializado, como yo, reciba 10 correos mensuales con preguntas. Varios de los de esta lista además me conocieron por ese medio, así que sin comentarios.

En el mismo correo me preguntaba la persona que dijera un caso en que clipper fuera mejor que Visual Basic.

Cabe aclarar que cada uno es mejor para cierto tipo de cosas, pero Clipper se distingue por su facilidad para manejar archivos de textos planos.

Recientemente me encontré con 3 MB de información repartida en 110 archivos txt, que quería integrar a una tabla única de datos. Lo que hice fue dos base con DBU, una inicial y una con un ajuste para descartar espacios sobrantes, realicé el código en 10 minutos, y la ejecución para cargar y procesar los 110 archivos, tardó un total de 12 segundos en una Pentium 2 a 450 con 96 Mb de RAM. Calculen cuanto se hubiera tardado en Visual Basic, y si el proceso se hiciera regularmente, quizá haría que VB llamara a Clipper, pero seguiría haciendolo en Clipper, así como algunas cosas las hago desde Pascal Llamado por Clipper o por VB.

El segundo ejemplo de porque clipper está vivo, les adjunto un código que uso como reloj despertador, tiene dos modalidades, una para sonar a una hora determinada en formato 24:00 , y otra cada cinco minutos. La única falla que le he encontrado es que el modo de cinco minutos falla después de la media noche, pero rara vez alguien esta en la oficina a esas horas.

Como verán es bastante sencillo y mucho mas corto que su equivalente en VB.

Saludos…
[code]
LOCAL hora:=0
LOCAL min:=0
LOCAL día:=date()
LOCAL proceso:=alert(“Proceso?”,{“Alarma”,”5 Min”})
set date to british
set century on
cls
do case
CASE proceso=1

Notas Sobre Clipper 5.3 Después de un mes de uso.

Notas sobre Clipper 5.3 después de un mes de uso (escrito en 1997)

El objetivo de este reporte es dar una versión preliminar sobre el manejo de CLIPPER 5.3, así como sus nuevas funciones, únicamente en entorno DOS.

Características Principales

  1. Modo Gráfico 640* 480 a 16 colores, que a su vez es compatible con ordenes en modo Texto, equivalentes a una pantalla de 80*30.
  2. Funciones incorporadas para manejo de Iconos, Bitmaps, etc.
  3. Nuevos Objetos: ListBox, CheckBox, Menú, ETC.
  4. Soporte a Mouse tipo Arquitectura Abierta, es decir, debe programarse COMPLETAMENTE para ser utilizable, pero es

100 % compatible con librería Gráfica incluida y objetos incluidos.
Dos Enlazadores: BLINKER (modo real) y EXOSPACE (modo Protegido)
Cambios en el trasfondo a algunas ordenes (alert y ReadVar Por ejemplo)
Nuevas funciones para fines varios.
El uso de EXOSPACE elimina las restricciones de falta de acceso a memoria.
Es necesario hacer un breve desglose punto por punto.

Modo Gráfico 640* 480 a 16 colores, que a su vez es compatible con ordenes en modo Texto, equivalentes a una pantalla de 80*30.
Este modo gráfico permite una resolución muy decente y mezclar recursos de ambos modos de vídeo. Si el código se realiza de manera adecuada, aun es compilable bajo 5.2, y no hay penalización apreciable al usar aplicaciones en modo “texto”. Noto una carencia en CLIPPER, ya que no hay una función que detecte el tipo de TARJETA de video, pero he realizado una en ensamblador con ese fin.

Funciones incorporadas para manejo de Iconos, Bitmaps, etc.
Es posible crear librerías de Iconos y Bitmaps legibles por Clipper, pero no por otros programas. Los Iconos deben ser tipo 766 bytes, y los Bitmaps están sujetos a la restricción del modo de video. En el directorio BIN hay varias utilerías específicas, y las 10 o 20 pruebas que he hecho, demuestran que esta función es sumamente versátil.

Sin embargo, las pruebas mencionadas las realicé con aplicaciones sencillas, enlazadas con BLINKER. Al tratar de incorporarlas de entrada a Suministros me enfrenté con un problema: La librería LLIBG es del tipo residente, y si se enlaza en modo real, ocupa casi toda la memoria disponible, si la aplicación es grande, no es posible ejecutar el código, y la falta de memoria sale del programa sin aviso de error de ningún tipo. Pero al enlazar con EXOSPACE, el código funcionó bien, excepto el detalle anotado en EXOSPACE, ENSAMBLADOR, Y C.

Las pruebas se realizaron en un sistema AMD K5 200 256 K Cache, con una tarjeta de video TRIDENT ISA con 1 MB y disco duro lento. Por el tipo de disco los resultados en bitmaps no fueron tan espectaculares, pero el tiempo de carga de *. BMP no es precisamente rápido, sin ser lento.

Para agilizar el sistema desarrollé un ejecutable que crea el código MASM necesario para crear el archivo icono, lo que permite crear una librería de creación de Iconos, que resulta 22.4 veces más rápida que las librerías BML de Clipper, eliminando también la restricción de nombre. Si se crean los iconos en un disco RAM de 10 Kb no hay demora alguna. El precio de incorporar una librería con los objetos *. ASM, es el requerimiento de un KB de memoria LOAD por Icono, lo que fuerza a usar EXOSPACE.

Nuevos Objetos: ListBox, CheckBox, Menú, ETC.
Debido a la falta de tiempo, no me fue posible correr estos objetos a su máxima capacidad, pero se caracterizan por estas características:

En modo texto el resultado es muy decente, pero en modo gráfico no son de muy buen ver
No tienen apoyo integrado a Mouse
La configuración de colores es confusa
Pueden ser herramientas muy potentes, pero es necesario conocerlas a fondo antes de poder utilizarlas de manera adecuada
Creo que será más conveniente realizar un equivalente basado en iconos, porque su utilidad principal será en modo gráfico.

Soporte a Mouse tipo Arquitectura Abierta, es decir, debe programarse COMPLETAMENTE para ser utilizable, pero es 100 % compatible con librería Gráfica y objetos incluidos.
El manejo de Ratón es sumamente adaptable, ya que realiza funciones directas a las principales, si no todas, interrupciones de DOS (#33), pero será necesario hacer uso intensivo de MSHOW y MHIDE o su equivalente, manejándolas a diestra y siniestra, de manera similar al manejo de Mouse en C. Lo único en que tuve dificultad fue en cambiar el cursor del Mouse, pero se debe a que no manejo todavía al 100% las funciones de Mouse 5.3

Dos Enlazadores: BLINKER (modo real) y EXOSPACE (modo Protegido)
El enlazador BLINKER es parecido al RTLINK (igual sintaxis), pero es más rápido. El único pero que encontré, es que hasta el momento no he encontrado el modo de hacer un OVERLAY a la librería de gráficos LLIBG, desde BLINKER, lo que quita casi toda la memoria convencional. Este enlazador solo es utilizable en 5.3.

EXOSPACE. En un equipo con 8 MB de memoria XMS liberó cerca de 6.8 MB para uso del programa. Sin embargo, requiere para COMPILAR 2MB de memoria no utilizada por SMARTDRV. Si se liberan estos 2 MB, el resultado es rápido. No permite crear código cuando hay EXTERNALS sin definir, lo que es bueno o malo según el punto de vista.

Aparentemente es incompatible con el controlador de dispositivo DISPLAY.SYS.

Una situación especial se encontró con el reloj residente en memoria, por lo que sugiero se revise la nota EXOSPACE, ENSAMBLADOR, Y C.

Cambios en el trasfondo a algunas ordenes ( Alert y ReadVar Por ejemplo )
Algunas funciones han sido modificadas de manera drástica con relación a las versiones anteriores. Al momento he tenido problemas con Alert, ya que la nueva función no permite uso de colores, y en ocasiones se muestra incompleto el borde derecho de la pantalla. Para corregirlo he creado una función nueva, que sustituye ventajosamente a la de Clipper 5.2 y Clipper 5.3, sin cambios en Sintaxis.

ReadVar devolvía el nombre de la variable GET utilizada, pero actualmente parece tener más amplio alcance, lo que hace que deba considerarse como una función completamente diferente. No he realizado pruebas intensivas, pero el problema parece ser que la versión nueva funciona incluso en las operaciones que realizan evaluación de tiempos de espera, devolviendo valores pertenecientes al mismo código de Clipper y no de la aplicación.

Es posible que otras funciones tengan cambios, pero a la fecha no lo he detectado.

Nuevas funciones para fines varios.
Clipper incluye un modulo mejorado de Memos, llamados BLOBS, que se ven mas complicados que la versión anterior, con poca funcionalidad adicional. Además de estos cambios hay unas cuantas funciones para manejo de directorios, conteo de DispBegin() abiertos, y traslaciones de campos a archivos y viceversa, pero no parecen excesivamente funcionales.

El uso de EXOSPACE elimina las restricciones de falta de acceso a memoria.
Con el uso de EXOSPACE, la memoria extendida no utilizada por el sistema esta disponible para los programas, pero en equipos con 4MB, esto obliga a desactivar SMARTDRV, lo que reduce el rendimiento ligeramente, y causa un cierto retraso en operaciones de refresco de pantalla, sobre todo en modo gráfico. Para Suministros Si significa problemas, ya que según palabras de Ana Claudia Pérez, jefa de Suministros en Supremo, “Tu nos acostumbraste a que el sistema obedecía muy rápido”.

Es muy probable que con 8 MB el rendimiento pueda ajustarse a niveles mas que aceptables.

EXOSPACE, ENSAMBLADOR y C

Una de las reglas principales de programación en modo protegido es el no alterar los segmentos DS / ES, pero muchas de las aplicaciones normales no lo considera. Esto obliga a no utilizar un modo reentrante ni punteros de segmento amplio, entre otras operaciones. Para fines prácticos, todo lo que llame al sector “Cabecera” de información de un ejecutable En ejecución, provoca alteración en DS, por lo que el programa termina de manera brusca. Esto me obligó a modificar las funciones en MASM, sobre todo EXEPATH, que devolvía el nombre del ejecutable en proceso. La versión original funcionaba sin problemas, pero una segunda versión completamente diferente presentó el mismo problema. Tomé un código *.OBJ de la librería de Dominio publico KLIPPER, que no tiene el problema mencionado. El código del reloj residente no funciona en EXOSPACE por lo mismo, y agradecería cualquier sugerencia que eliminara esta situación.

Finalmente, una función llamada WHOAMI.C, para identificar a usuario según la red, realizada en MICROSOFT, presenta resultados diferentes ya enlazada según la versión de Clipper. En 5.0 – 5.2 devuelve valor correcto, pero en 5.3, responde como si no existiera red, o no se hubiera realizado el Login correspondiente.

Otra deficiencia de ORACLE.

Pues me encontré de repente un problema tecnico. Una serie de tablas de las que necesitaba exportar de manera facil el contenido, en formato SQL (INSERTs) etc, y no se ve manera facil o intuitiva de hacerlo. Me tuve que hacer una funcion en PHP , que llama a metalibrerias mias, para generar el dump.

Otra cosa mas que no hace de manera intuitiva.

function dumpABC(){
/*=========================================================================
Nombre: dumpABC
Descripción : Generar el contenido de la tabla en SQL
Parámetros: n/a
Regresa : n/a
Variables Globales Usadas: none
Notas : Esta es una versión borrador y no incluye manejo de apostrofes en cadenas.
ni campos de tipo raro o CLOB. Asume punto decimal como punto y no coma.
Autor : Alfonso Orozco
Fecha Inicial : 08 ene 09
Fecha UM :
=========================================================================*/
$t= san2(base64_decode($_GET[‘t’]),’A’); // sanitize.
$sql2=\”select * from $t\” ;
echo \”

Dump de \” . NombreTabla($t) .\”

\”;
$result = qquery ($sql2);
$fields = mydb_num_fields ($result);
$rows = mydb_num_rows ($result,$sql2);
$cadcampos = \”Insert INTO $t (\”; // para el dump, parte fija.
if( Z_BASE==\”ORACLE\”) $result = qquery ($sql2);

for ($f=0; $f<$fields; $f++) { $cadcampos .=\",\".mydb_field_name($result,$f) ; } // for $cadcampos .= \") VALUES (\"; if( Z_BASE==\"ORACLE\") $result = qquery ($sql2); if ($rows==0) echo InfoBox('

No hay información que mostrar
‘);
if ($rows>0)
{echo \”‘;
} // if rows>0

echo ‘‘;
mydb_free_result($result);
// /mydb_close($pk);
} // dumpabc

Estupidez de versiones Oracle-niana

Normalmente trabajé hace años con alguna de las versiones de Oracle8i, pero no tenia problemas excepto un bug latoso.

La 10, que no es la mas actual, es algo completamente diferente.

En pocas palabras, ellos mismos hablan de usar una version para pruebas llamada ORACLEXE , que esta llena de errores, conocidos desde hace dos años, y si uno quiere que funcione actualizada, debe poner otro programa, o mejor dicho otra version de Oracle para desarroll oque ya tengo.

Oracle usa tambien una version extraña de “listerners” o “demonios”, que se configuran a traves de algunos archivos medio raros. Ok.

El problema es que Mi version actualizada, 10.2.0.4, de la que YO, como persona tengo licencia, es diferente a :

a – La version que trae el XE (10.2.0.1)
b – La version instalada en el servidor de producción (10.2.0.1)

Y si actualizo B, no solamente es un parche de 3 gb que tarda varias horas en instalarse, sino que hay que hacer una orden especial para poder hacer un EXP de 10.2.0.3 a a, asi que seria suicida cuando tengo un sistema en una dependencia de gobierno, que seguramente paga las licencias de ORACLE, que no tiene actualizado el server, pedirles que ne un momento hagan algo que no han hecho en mas de dos años.

En resumen:

1- Hay versiones desactualizadas donde estoy
2- y recomiendan algo desactualizado
3- Si tengo una actualizada, no puedo usar la herramienta que recomiendan.
4- Si actualizo, le doy tiro en el pie a toda la secretaría.

ARGHHHHHHHHHHHHHHHHHHHHHHHHHHHH

Ing. de Software tradicional Vs Metodología Incremental

Lo que nos dice la ingeniería de software convencional es que se debe realizar un análisis exhaustivo, un diseño profundo, una implementación lo más estándar posible, como por ejemplo utilizar patrones de diseño, este consejo de la teoría de la ingeniería de software es bastante importante de tenerla en cuenta, pero resulta que la empresas necesitan soluciones a corto plazo y el hecho de seguir al pie de la letra un proceso, no es conveniente en términos útiles, pero sin embargo la calidad definitivamente esta en el proceso.

La metodología incremental se sostiene en una herramienta que automatiza los procesos que en cierta forma son considerados tediosos, esta metodología esta orientada a soluciones rápidas, en donde lo que importa es la funcionalidad sin tener en cuenta el tiempo que se pasa en las modificaciones y mantenimiento que no están documentadas. A simple vista la solución utilizando esta metodología es muy útil, es más es relativamente eficiente en términos empresariales, pero a la vista de la ingeniería de software y de la calidad, esto parece un poco dudoso en donde surge la pregunta ¿no sería mejor dedicar más tiempo para asegurar la calidad del software?, obviamente la respuesta depende del sistema a implantar. Si el sistema es especifico con un corto ciclo de vida sin tendencias a ser modificado este podría seguir el proceso incremental, pero si el sistema es un conjunto de mecanismo que van hacer automatizados el concepto cambia radicalmente, hay que crear el software lo más flexible posible con la documentación necesaria como para que pueda tener un ciclo de vida largo con modificaciones y mantenimiento continuo y que se adaptable a la nuevas tecnologías. Claro que todo esto solo puede ser un consejo bastante académico y teórico, pero si nuestra meta es la calidad, hay que pensarlo.

Hasta una proxima oportunidad.

Saludos Cordiales.