Consejos para contratar una aplicación a medida

Desarrollo de software a medidaTengo un compañero de profesión, programador, y compañero de empresa algunas veces, con el que me sigo encontrando puntualmente en determinados ámbitos laborales, que defiende una idea que me ha repetido varias veces: “Yo no hago los programas sencillos a propósito. No quiero que puedan llamar a cualquiera a modificarlos luego, y yo quedarme sin trabajo. Quiero ser imprescindible

La verdad es que es algo que no comparto, pero es una verdad incómoda que varios compañeros de profesión siguen, aunque éste es de los pocos que, aunque en “petit commite”, tiene los redaños de admitirlo.

No ignoro que en otras profesiones pueden darse casos similares, pero quizás la abstracción de los procesos automáticos hace más proclive esta “mala praxis” en el ámbito de la programación.

Pero no todo está perdido. Siguiendo una serie de consejos, los gestores de las empresas que deban contratar servicios informáticos pueden evitar la dependencia excesiva de un único profesional, que a la larga puede producir, y eso lo he visto, que por la falta de ese profesional, una empresa haya tenido que sustituir toda la aplicación informática porque nadie podía mantenerla o adaptar  los cambios.

Propiedad.

Legalmente, una empresa es propietaria del código, si éste se ha desarrollado en su empresa usando sus sistemas, pero si no es el caso, el gestor o director de la empresa receptora del software debería en la medida de lo posible disponer y ser el propietario del código fuente del software. No es un tema baladí, ni mucho menos, y quizás es el más importante de los consejos aquí descritos. No fueron pocas, las empresas que debido a de la llegada del EURO, o el cambio al año 2000, y por no disponer del código fuente, tuvieron que abandonar sus aplicaciones a medida y comprar o desarrollar nuevo software.

Control.

Directores, gestores, o en empresas más grandes, los responsables, deben reunirse habitualmente y conocer el desarrollo del software. Para ello es necesario que dichos responsables dispongan de cierta alfabetización TIC. Los desarrolladores a menudo pecan,  pecamos, de cierta             falta de asertividad. El lenguaje usado es demasiado técnico sin darnos cuenta que al otro lado, la mayoría de las veces, no hay desarrolladores. Por eso el dominar un poco el lenguaje técnico es deseable en estos casos.

Documentación

Desarrollo, control y documentación del software a medidaOtra de las piedras angulares del control del software desarrollado para nuestra empresa es la documentación sobre el mismo. Y no me refiero a una explicación de que hace el programa. Eso lo puede redactar cualquier usuario avanzado del software. Me refiero a documentación técnica que posteriormente pueda ser entendida por otro desarrollador. Existen varios tipos de documentación técnica, todo dependerá de lo grande de nuestra solución y los lenguajes y sistemas implicados. Cualquier documento técnico que puedan darnos los desarrolladores o podamos exigirles es una inversión de futuro. No sólo por situaciones de “desaparición” del desarrollador o empresa desarrolladora, sino como soporte para analizar las implicaciones de futuras modificaciones o ampliaciones de nuestro software.

Conclusión

Hay que confiar en la profesionalidad de los desarrolladores de nuestro software, pero esta confianza no ha de ser ciega en ningún caso. Estos consejos nos pueden ahorrar sustos en el futuro y no incurrir en costes innecesarios en una aplicación en la que en su momento ya se hizo la inversión para implementarla.

Desencadenantes (TRIGGERS) iSeries

iSeries: Desencadenantes. Creación de un TRIGGER iSeries

Imaginad que necesitáis saber qué registros de artículos (es un ejemplo) se cambian, agregan o suprimen cada día en vuestra base instalada, para luego realizar tareas de comprobación sólo de esos registros. Se nos ocurre enseguida hacer una tabla que contengan los códigos de los registros modificados, añadidos o suprimidos durante el día y luego algún proceso por la noche que repase esta lista para nuestro propósito. Si es una aplicación pequeña es relativamente fácil localizar qué programas hacen esto, pero si la BI es muy grande el tema se vuelve bastante complicado, y ya no digamos si de algunos procesos no tenemos localizados los fuentes, entonces la tarea es imposible.

 

¿Seguro  que Imposible? No, aún hay esperanza, podemos usar los desencadenantes, TRIGGERS, de nuestro iSeries.

¿Qué es un desencadenante en el AS400?

Es una llamada automática a un programa, antes o después, de la inserción, adición o supresión de un registro en un fichero. De esta manera podemos realizar procesos de forma paralela sin modificar programas de la base instalada. Es un proceso rápido ya que no es un añadido al sistema operativo del iSeries sino que bebe del propio funcionamiento interno de los sistemas del iSeries (os daréis cuenta cuando expliquemos como usarlo).

Maravilloso, ¿verdad? Dejad que por un momento os devuelva a la tierra y os diga que sí, que lo parece, pero la primera vez que nos enfrentamos con un desencadenante algunos factores hacen que parezca complejo y mucha gente desiste de su uso. Más aún si intentamos leernos el REDBOOK de turno de IBM sobre el tema, más de 500 páginas. Para los que ya dominen el tema de los desencadenantes pueden encontrar dicha información en: Stored Procedures, Triggers, and User-Defined Functions on DB2 Universal Database for iSeries

 

Para los que aún no dominen el tema explicaremos los pasos mínimos necesarios para realizar un desencadenante (TRIGGER) sencillo pero completamente funcional.

El REDBOOK hablará de muchos pasos y muchos factores y variables pero principalmente son sólo tres pasos:

  • Definir el objetivo
  • Crear el programa receptor del evento
  • Activar el desencadenante

 

Vamos paso a paso a realizar nuestro TRIGGER

Definir primero el objetivo

Como todo en la vida, la programación no es una excepción, lo primero es saber dónde vamos. Definir el objetivo es importante para saber cómo tenemos que realizar el programa receptor del evento. No será igual si lo que queremos es controlar un tipo de cambios u otros, por ejemplo.

En nuestro ejemplo queremos saber cuando un artículo es añadido o modificado en nuestra BI para tareas de auditoría nocturna. Ya tenemos claro el objetivo, vamos a ver qué hemos de hacer.

Crear el programa receptor del evento

Esta es la parte compleja de la operación. ¿Cómo ha de ser un programa receptor de un desencadenante?

El primer paso es saber la longitud en bytes del fichero que vamos a colocar en TRIGGER así como la posición en la que está el campo o campos que necesitaremos recuperar para lo que necesitemos.

Para saber dichos datos usaremos el mandato DSPFFD

Añadir trigger a fichero iseries

En nuestro caso el fichero tiene una logitud de 142.

Y en cuanto a la posición del campo de código de artículo que nos interesa está en la posición 1 y tiene una longitud de 10.

Añadir trigger a fichero iseries

Una vez apuntados estos datos podemos realizar ya un programa que vaya a recibir un desencadenante. ¿Por qué digo recibir? Porque los programas que se usan como desencadenantes reciben automáticamente del OS400 dos parámetros. El primero de estos parámetros es un largo registro de 1050 posiciones con muchos valores, pero de los que no usaremos en este caso casi nada. Marcaré solamente lo que nos va a servir en este caso. Quedaría así la DS:

 

IPARM       DS

I                                        1  10 FNAME

I                                       11  20 LNAME

I                                       21  30 NNAME

I                                       31  31 TEVEN          

I                                       32  32 TTIME

I                                       33  33 CMTLCK

I                                       34  36 FILL1

I                                    B  37  400CCSID

I                                    B  37  400CCSID

I                                       41  48 FILL2

I                                    B  49  520OLDOFF

I                                    B  53  560OLDLEN

I                                    B  57  600ONOFF

I                                    B  61  640ONLEN

I                                    B  65  680NOFF

I                                    B  69  720NEWLEN

I                                    B  73  760NNOFF

I                                    B  77  800NNLEN

I                                       81 208 RESV3

I                                      209 336 OREC

I                                      337 340 OOMAP

I                                      341 468 RECORD

I                                      469 650 NNMAP

I                                      651 850 NNMA2

I                                      8511050 NNMA3

 

Y el segundo parámetro sería:

 

IPARM2       DS

I                                    B   1   40LENG

 

Y recibiríamos los parámetros así:

 

C           *ENTRY    PLIST

C                     PARM           PARM1

C                     PARM           PARM2

 

 

El parámetro TEVEN que he marcado en la DS le dirá al programa qué evento ha llamado al desencadenante, la inserción, la supresión o la modificación, y qué otro parámetro de la DS debemos usar:

C                     SELEC

C           TEVEN     WHEQ ‘1’                        ALTA

C                     Z-ADDNOFF      O       50

C           TEVEN     WHEQ ‘2’                        BAJA

C                     Z-ADDOLDOFF    O

C           TEVEN     WHEQ ‘3’                        MODIFICACION

C                     Z-ADDOLDOFF    O

C                     Z-ADDNOFF      O2      50

C                     ENDSL

C                     ADD  1         O

C                     ADD  1         O2

 

Y ahora 0 y O2 contienen el desplazamiento dentro de la DS donde están los datos del fichero que nos interesan y por ello necesitábamos saber la longitud del fichero, usaremos la siguiente función:

 

C           TEVEN     IFEQ ‘3’

C           142       SUBSTPARM1:O2  CAMIN     P

C                     ELSE

C           142       SUBSTPARM1:O   CAMIN     P

C                     ENDIF

 

Y habiendo antes definido la DS CAMIN de la siguiente manera para saber dónde estaba el código de artículo:

 

I            DS

I                                        1 142 CAMIN

I                                        1  100CET02

Ya tenemos el campo CET02 que en nuestro caso es el código de artículo modificado o insertado.

Luego con un sencillo:

 

C           CET02     CHAINETI02CNG             77

C   77                Z-ADDCET02     CET02C

C   77                WRITERETI02C

 

Nos guardaremos qué artículos se han modificado o insertado a lo largo del día para luego nuestro sistema de auditoría nocturna.

Activar el desencadenante

Si hemos realizado el paso anterior, que es el verdaderamente complejo, esta parte es muy sencilla. Sólo debemos usar el mandato de iSeries ADDPFTRG para añadir el desencadenante al fichero.

Usando este mandato, le diremos que antes o después del evento que nos interesa se ejecute el programa que hemos creado con anterioridad.

En nuestro caso nos interesa que después de la inserción en el fichero de artículos o después de cualquier modificación se active la llamada a nuestro programa que grabará un registro con el  código de artículo para una auditoría posterior. Por tanto tendremos que llamar a los siguientes dos mandatos:

 

ADDPFTRG

                FILE(MIBIBLIO/ARTICULOS)

                 TRGTIME(*AFTER)

                TRGEVENT(*INSERT)

                PGM(MIBIBLIO/MITRIGGER)   

 

Este primer mandato insertará la ejecución del programa después de la inserción de un registro en nuestra tabla de artículos.

Añadir trigger a fichero iseries

Y luego:

 

ADDPFTRG

                FILE(MIBIBLIO/ARTICULOS)

                 TRGTIME(*AFTER)

                TRGEVENT(*UPDATE)

                PGM(MIBIBLIO/MITRIGGER)   

 

Este segundo mandato insertará la ejecución del programa después de la modificación de un registro en nuestra tabla de artículos.

Y ya tenemos activado y funcionando el desencadenante, sin tocar ningún programa de nuestra BI podemos hacer procesos como éste.

A tener en cuenta

Una vez activado un desencadenante contra un fichero de nuestro iSeries no podremos modificar la estructura de este fichero o eliminarlo. Antes de ello hay que eliminar los TRIGGERS que tenga activado, usando para ello el mandato RMVPFTRG

 

 

                                      

 

 

 

 

 

 

La versatilidad del ODBC

Como Programar desde casa contra Bases de Datos de AS400 sin necesidad de AS400

¿Os imagináis que necesitáis realizar una pequeña (o gran) aplicación visual para tratar datos del AS400 pero no disponéis de ningún AS400 a mano de momento? No hay problema. Existe una posibilidad para hacer posible la programación contra bases de datos AS400 sin necesidad de un iSeries durante el proceso de desarrollo.

Es más un truco que una utilidad, pero funciona. El tema es que tuve que programar una utilidad para consultar un fichero del iSeries de manera visual pero no tenía acceso a la máquina de IBM en ese momento.

El primer paso es la creación de la bases de datos, y la tabla o tablas, en Microsoft Access, sí, esa aplicación que muchos programadores discriminan por limitada, pero no lo es.

Es importante que la estructura sea igual a la tabla o tablas del iSeries, respetando este principio, después no tendremos problemas.

Es indiferente si usamos el antiguo sistema de Microsoft Access (.mdb) como el nuevo sistema de bases de datos de Microsoft Access (.accdb) Lo importante es que las tablas tengan el mismo nombre que en iSeries, los mismos campos y el mismo orden.

Una vez creada la base de datos en Microsoft Access es hora de crear un ODBC que acceda a esta base de datos. Un OBDC es un puente muy versátil, la definición estándar es  que ODBC “es un estándar de acceso a las bases de datos desarrollado por SQL Access Group en 1992. El objetivo de ODBC es hacer posible acceder a cualquier dato desde cualquier aplicación, sin importar qué sistema de gestión de bases de datos (DBMS) almacene los datos”  gracias todo ello a un sistema de separación de capas, pero no es este el objetivo de este artículo.

Para crear el ODBC iremos a las herramientas administrativas de nuestro Microsoft Windows.

ODBC. Herramientas administrativas

Y una vez dentro de esta opción buscaremos de DNS de usuario y agregar.

Creación de un ODBC Microsoft Access

Y luego escogemos la opción que nos interesa que es Microsoft Access Driver (*.mdb, *.accdb)

Creación de un ODBC Microsoft Access

Le damos un nombre, la descripción y lo enlazamos con la base de datos de Microsoft Access que antes hemos creado. Y ya lo tenemos.

Creación de un ODBC Microsoft Access

 Ahora deberemos ir a nuestra solución visual y trabajar contra este ODBC tranquilamente como si fueran tablas de iSeries, usando sentencias SQL.

En mi caso tengo esta función escrita en Visual Basic .NET para abrir la conexión al ODBC que hemos creado antes.

Conexión visual a ODBC

A partir de ahora trabajaremos con dicha conexión abierta usando sentencias SQL como si se tratara de las tablas de nuestro inexistente iSeries. Cuando acabemos con nuestra solución visual la llevaremos al cliente donde si está, esta vez sí, la máquina de IBM.

Allí instalaremos nuestra solución y crearemos el ODBC con el mismo nombre que hemos creado el anterior OBDC pero en este caso no será tipo Access Driver sino iSeries Access ODBC Driver.

Creación de un ODBC iSeries

La única consideración importante es avisar cuando creemos el OBDC contra el iSeries cuál es la biblioteca donde están las tablas, ya que mientras Access no tiene bibliotecas y en las sentencias SQL no hemos tenido que informar de ello, en el AS400 es necesario informar de las bibliotecas en los SQL, pero si lo ponemos ya en el ODBC no tendremos que cambiar nada.

Creación de un ODBC iSeries

Y sí, habéis leído bien, no hay que cambiar ya NADA. La solución visual conectará con el iSeries usando las mismas sentencias de Visual Studio .NET, sólo cambiando el ODBC. Hemos conseguido desarrollar sin iSeries una solución que funciona finalmente en un AS400.

Nace un nuevo Titán: POWER8 de IBM

IBM-power7Hace unas semanas IBM presentaba los nuevos iSeries dotados de Power8. Hace algunos años,  cuando aparecieron las primeras máquinas con procesadores Power7 el salto evolutivo fue muy apreciable. Ahora después de que esos procesadores Power7 ya han pasado al mercado más doméstico (algunas consolas de última generación llevan Power7 en sus “tripas”) de nuevo IBM nos sorprende con el Power8, demostrando porqué es uno de los fabricantes más importantes de procesadores.

¿Por qué Power8?

En un momento como el actual, en el que las empresas necesitan respuestas casi inmediatas, fiabilidad y seguridad en el procesamiento de la información, nos encontramos con este nuevo procesador de IBM que ofrece máxima velocidad a la hora de gestionar la información, es un sistema más equilibrado y seguro, y permite el manejo de un gran volumen de datos. Las soluciones basadas en el Power8 permiten a las empresas despreocuparse en cierta medida de su infraestructura y enfocarse más en el negocio, ya que es el primer procesador diseñado para Big Data y Analytics.

¿Cuáles son sus principales características?

  • IBM apuesta (como ya lo está haciendo con la futura MRAM) por el ahorro energético. El nuevo procesador usa un control energético avanzado, lo que reduce el consumo de energía.
  • El rápido acceso a los datos es una demanda de las grandes y medianas empresas . Gracias a los nuevos procesadores que incorpora el nuevo IBM POWER8 la obtención de la información es aún más rápida.
  • Uso de la plataforma middleware y base de datos estable lo que proporciona una arquitectura completamente segura e implementa de forma eficaz aplicaciones de procesamiento empresarial.
  • Los nuevos sistemas soportan cargas de trabajo en múltiples plataformas como son UNIX, IBM y Linux.
  • Se reduce la latencia, o lo que es lo mismo la suma de retardos temporales dentro de una red.
  • El trasporte de datos de dentro a fuera o viceversa dentro del sistema se realiza a una velocidad mucho mayor.
  • Gracias a la velocidad aumentada de transporte de datos y el rápido acceso a ellos la velocidad,  la eficiencia de las aplicaciones de bases de datos se ve enormemente aumentada.
  • Se mejorar la virtualización, la multipropiedad y la Nube.

Como ya se puede ver los nuevos sistemas Power8 están diseñados claramente para optimizar el análisis y el tratamiento de grandes cantidades de datos que es una de las demandas de la mayoría de las empresas, por no decir todas. A parte se proporciona escalabilidad superior a muchos otros sistemas y un alto grado de seguridad gracias a su diseño, que proporciona seguridad desde la propia creación del sistema.

A parte de toda esta innovación y características, hemos de tener en cuenta algunos números, como por ejemplo: Los Power8 llevan 12 núcleos SMT8. El banwidth en que se mueve es de 230GB/s. Para compararlo con algo más común, los nuevos POWER8 analizan los datos 50 veces más rápido que las últimas versiones de x86.

 

Más novedades en relación a los iSeries

Tampoco deja indiferente la nueva versión del poderoso y robusto sistema operativo OS400, la V7R2, de la que podemos destacar las siguientes características:

  • Opciones de seguridad mejoradas en DB2 ® para i
  • Muchas de las nuevas funciones de productividad del programador y la función ampliada en DB2 para i
  • Mayor facilidad de uso con IBM Navigator para i
  • Mejoras de Client Solutions iAccess
  • Extensión de la seguridad de más aplicaciones a través de nuevos entornos (SSO) inicio de sesió único
  • Libertad Core como la base para la aplicación Integrated Server
  • Apoyo a Zend Server 6.0 en IBM i 7.2
  • Mejoras en el rendimiento del sistema de archivos integrado
  • Extensiones a los entornos de impresión
  • Hub funciones ampliadas para Backup, Recuperación y Servicios de Medios (BRMS)
  • Para i Express ® con una nueva HyperSwap capacidad PowerHA ® SystemMirror ® ®
  • Apoyo a los nuevos Power Systems ™ integradas con la arquitectura POWER8 ™ y el procesador
  • Las capacidades adicionales de E / S, incluyendo el apoyo a la WAN a través de LAN
  • Rational ® Herramientas mejoras para apoyar Formato gratuito Programa Report Generator (RPG)
  • Soporte para el archivo de código abierto solución de servicio de Samba

 

Si desea más información sobre los sistemas Power8, precios y posibilidad de disponer de uno en su empresa, le informaremos sin compromiso.