Google
 

miércoles, 31 de octubre de 2007

Paciencia

Conoces la frase, "Uno no sabe lo que tiene, hasta que lo pierde"

En el mundo informático, nunca me puse a pensar, ¿Qué pasaría si no existiera el mouse?

Tal cual hoy la conocemos, sería un caos total, lo sé en carne propia, porqué hoy me quede sin mouse.

Este hecho, por lo menos, me hace pensar en lo siguiente:

Si queres desarrollar la paciencia, toma unas horas de trabajo, y hazlo sin mouse, si lo haces, entenderas de lo que estoy hablando.

Tips GX e Idea: Ajustar ancho de columna de una Grilla

Te ha pasado que cuando desarrollas un nuevo sistema, defines las transacciones, haces la reorg, le aplicas pattern, lo especificas, lo compilas, y listo!!!, a cargar las nuevas transacciones.

Hasta el momento de cargar las transacciones, pareciera que uno no se cuenta de como van a quedar los títulos de las columnas de las grillas.

Por ejemplo dos atributo, tipo Char 1, con los valores (S, N), visualizado con un combo box (Si, No)

"Permiso de usuario a visualizar su email",
"Permiso de usuario a visualizar su nombre completo"

Las columnas quedan muy anchas y estéticamente no queda bien

Digamos, que sos de las personas que cargan en la transacción la propiedad del atributo "Column Title", antes de continuar ,Te felicito!, vas por buen camino, pero como en mi caso, tengo que reconocer que en esa área, tengo una mala práctica.

Digamos entonces que cargue en la propiedad "Column Title"

"Permiso ver email", ó "Ver email"
"Permiso ver Nombre" ó "Ver Nombre"

Para este ejemplo, quizás ya sea suficiente con eso, la columna de la Grilla queda menos ancha, y si no, es ahi donde se comienza a abreviar. Para el tema de abreviaciones no quiero entrar en detalles, pues generalmente los usuarios finales me preguntan ¿Y que significa la columna:

"Per. Usu. Email"?

Tips:
Ante esta situación leyendo un poco, encontre una mini solución:
Hacer que títulos de las columnas aparezcan en más de una linea utilizando <BR> y seteando la propiedad TitleFormat en 1, de los atributos, variables que esten en una grilla.

Como utilizo Pattern, generalmente corrijo el título de las columnas de una grilla, es ahí donde agrego el tag <BR>

"Permiso<BR>ver email", ó "Ver<BR>email"
"Permiso<BR>ver Nombre" ó "Ver<BR>Nombre"

Luego, en el evento Start agrego la siguiente linea (eso en K2B lo hago en el Pattern)

NombreAtributo.TitleFormat = 1

Idea:
Agregar la propiedad TitleFormat al atributo para que vaya acompañado con el valor de la propiedad "Column Title"

Espero te sirva

lunes, 29 de octubre de 2007

Código

Según la Real Academia Española, presenta varias acepciones:

  • Conjunto de normas legales sistemáticas que regulan unitariamente una materia determinada.
  • Combinación de signos que tiene un determinado valor dentro de un sistema establecido.
  • Sistema de signos y de reglas que permite formular y comprender un mensaje.
  • Conjunto de reglas o preceptos sobre cualquier materia.

Según la Wikipedia:

  • el código, en Teoría de la comunicación, el conjunto de rasgos que tiene el mensaje para que pueda ser entendido por el emisor y el receptor. El código que se ha usado en este texto, por ejemplo, es la lengua española o el castellano.
  • un código, en Derecho, el conjunto unitario, ordenado y sistematizado de normas
  • el código binario, código fundamental en el que se basan los ordenadores, el más simple pues solo consta de dos elementos (0) y (1) que combinados de distintas maneras como impulsos eléctricos ponen las bases para la informática
  • el código fuente, en programación, el texto escrito en un lenguaje de programación que ha de ser compilado o interpretado para ejecutarse en una computadora.

Código

Soy de la idea de seguir las reglas, de respetar y considerar los consejos de aquellos que tienen experiencia y éxito en un área determinada. Me gusta investigar, averiguar y/o estudiar, aplicar "The best practice", ya sea en análisis, diseño, programación como también en las relaciones humanas.

Por mi paso por la universidad, unas de las cosas que me llamaron la atención en una de esas clases "filosóficas", donde el profesor nos decía, de la "mala base" de la Informática de mi País.

Según este profesor, esa "mala base", se debió principalmente a los Ingenieros. Fueron los primeros en trabajar en Informática, personas con espíritu de avanzada de quienes se puede decir, -fueron los pioneros en la "Industria del Software" del Paraguay-.

¿Y como es eso? En una misma frase, se habla positiva y negativamente de las mismas personas --decía mi profesor--, sucede que la visión de los ingenieros está en el "objetivo final", considerando, que ellos trabajan con "objetos materiales", visibles, palpables, con un fin bien especifico.

Hasta este punto, aun no entendía, que fue lo que hicieron "mal", los ingenieros, mi profe continuo:

- Sucede que los ingenieros no se preocupan en demasía de como se hizo un ladrillo, o de como se fabrico el cemento, tampoco les interesa la forma en que se trabajo en la fundición para la creación de varillas de acero y/o hierro, y más se enfocan en utilizar dichos materiales para obtener un objeto especifico, ejemplo: Una vivienda, un edificio. -

- Esa misma metodología de trabajo, lo aplicaron a la hora de "Generar código fuente", vieron los lenguajes de programación como materiales terminados que se utilizaban como ladrillos, cemento, varillas de hierro, etc. para construir un software, el cual estaba enfocado específicamente para solucionar un problema, y el software, funcionaba-.

Pero hay de nosotros, los que si ya estudiamos Ingeniera Informática, Programación, Análisis de Sistemas, de donde sabemos, que si importa y es necesario saber de como se hicieron los ladrillos, de como se hacen las varillas de hierro. Y a la hora de corregir, modificar, redefinir algún proceso hecho por uno de los "Pioneros", ¡¡¡¡es un suplicio!!!! Es mejor tirar aquello y hacerlo de nuevo, respetando el "código", "the best practice", aplicar las metodologías que aprendiste en la universidad.

La pregunta es: ¿Será que la nueva generación aun sigue trabajando como los "Pioneros"?

Si te sueno algo como esto:

  1. Programación no estructurada
  2. Utilización de GOTO
  3. Código repetido sin siquiera saber que es la "misma rutina"
  4. Utilice 99 para salir
  5. Ni una pantalla de WorkWith, siempre se ingresa la clave primaria, para ver mas información
  6. No hay conexión entre pantallas, ninguno de ellos recibe parámetros
  7. Las tablas sin normalización
  8. Un "atributo" en mas de una tabla, no tiene el mismo nombre, ni mismo tipo (tampoco es un subtipo)
  9. Ni un ápice de comentario ni documentación

Si conoces a alguien de la nueva generación, y trabaja bajo estas características, deberías preguntarle (si te animas), ¿Sos Ingeniero?

Si algún día, en Paraguay, queremos forma parte de la creación de:

  • Software de vanguardia
  • Proveedores de software de "Primer Mundo"
  • Los mayores exportadores de software de América del Sur
  • Ser los primeros en "outsourcing" de América

Para llegar a ser aceptado dentro del gran mercado del Software, cada día debemos ser los mejores, en seguir y crear "Códigos".

jueves, 25 de octubre de 2007

Patterns - Idea: Una sola definición de grillas por Transacción

¡¡¡Me encanta Patterns!!! Es una herramienta que esta sobre un generador. Podríamos decir que está a un tercer nivel de abstracción, primero el lenguaje de programación en si, luego esta el CASE, para este caso Genexus, y sobre está herramienta, Patterns.

Para alguien como yo, que nunca escribió mínimos "Tag" para un HTML, trabajar en Genexus, para realizar un "Web Panels" era algo tedioso, no porque la herramienta no lo permita hacer, sino, por esa condición de "Diseñador Gráfico" que uno tiene que tener a la hora de hacer sitios profesionales y con estilo.

Y la parte de estética, definitivamente, lo soluciona Patterns.

Ahora que se esta trabajando en la Rocha, seria bien interesante considerar la siguiente "Idea". Se basa en el caso de uso para WorkWith y K2BWorkWith

Primero explico el problema:
Ya que soy de la línea de escribir código lo menos posible, hay algo bastante repetitivo, a la hora de trabajar con Pattern con varias transacciones (20 en adelante), donde las relaciones por claves foráneas ya son bastantes.

Por cada instancia de Pattern, se tiene definir todos los atributos que se desean visualizar en la grilla, el titulo de las columnas, los filtros, los prompts, chequear si la búsqueda es por un Combo Box, las condiciones, en el caso de K2BWorkwith, agregar código, variables, y la misma tarea se repite en los "Tabs".

Posible solución:
A la hora de generar la instancia del Pattern, que haya una configuración global, donde se permite setear la no creación automática de los Tabs.

La idea es generar las instancias "Selection" de todas las transacciones, modificar los titulo de columnas de ser necesario, selección de atributos a visualizar, definición de filtros, condiciones, etc.

Una vez concluido esto, tener la opción, para la generación automática de los "Tabs", y cada Tabs copie lo que corresponda según cada "Selection" de esa Transacción.

Con esto, aparte de ser mas rápido la generación de los objetos Patterns, también se obtiene mas homogeneidad a la hora de visualizar los datos.

¡Una sola definición de grillas por Transacción!

Si algún tercero lo hace antes que Artech lo lanze, no pido mucho, solo el 1% de las ganancias por 5 años.

miércoles, 24 de octubre de 2007

Generador de Código

Cuando tenia 14 años (creo), comenzaba estar en auge la versión de 3.3 del DOS, en esa época comencé a estudiar "Operador de Computadoras". En mi país, muy por detrás de los demás países en materia de tecnología (incluso hasta hoy), hablar en esa época de un "Generador de Código", no estaba dentro del léxico natural del mundo laboral informático.

Unos meses después, ya empecé dentro del mundo de programación, bueno digamos "la base", "Diagramación y Programación". Ha esa altura, aun no había escrito ni una sola linea en una computadora, ni siquiera mi sentaba cerca de una, todo lo que hacíamos estaba con lápiz y papel.

¡Por fin!, mi primer lenguaje de programación, Basic, eso si, no me pregunten que tiene, ni como es, ni cuales son sus mandatos. Algunos creo, SAY, LET, REM, guau!!!! sinceramente, no me acuerdo!!!! El punto que si recuerdo es que en aquellos tiempos si que "soñaba", ya que después de terminar la tarea en casa, "a lápiz y papel" (no piensen que tenía computadora en casa!), continuaba con un programa que su objetivo principal era crear otro programa (no me creo ningún iluminado), al final no salio nada, y mas todavía a lápiz y papel (aunque hoy sé que tuve un gran problema de recursividad, por todos los GOTO...), pero hoy, mi espíritu sigue siendo el mismo, busco de cualquier forma, escribir lo menos posible para que la "computadora" me de la solución a los problemas para los cuales mis "jefes" me pagan, aunque en realidad en eso hay un contrasentido, pues para lograr algo como eso, primero hay que "escribir mucho".

Paso el tiempo, por motivos de fuerza mayor no pude continuar estudiando, mi ultima profesora quiso en un momento dado, que sea su "ayudante de cátedra", pero aquello no salio y volví a tocar una computadora, recién cuando ingrese en la Facultad Politécnica de la Universidad Nacional de Asunción.

Aquello de estudiar solamente en las condiciones económicas de mi familia, "no cabía", así que tuve que trabajar casi desde el primer semestre. Mi primer empleo fue ser ordenanza de una abogada, "muy buena" por cierto, pues formo parte de la terna para el cargo de Juez en lo Laboral.

Aquello de ser abogado ya comenzaba a entusiasmarme, así que tomé una drástica decisión, no importaba donde me vaya a trabajar y cuanto me iban a pagar (en realidad gané menos de lo que ganaba de ordenanza), decidí trabajar como "Programador". Por aquella época, ya me sentía bastante afianzado, ya que en enero durante la Feria (época donde no se trabaja en Palacio de Justicia, ni los abogados por ende), mi jefa me dio permiso de utilizar su computadora, una 286, en la cual terminé un Sistema hecho en Clipper, que presente en febrero, en el tercer examen final de la materia Taller II.

Un tiempo después de mi intensa búsqueda, por fin encontré mi nuevo trabajo (que por razones de publicidad no mencionaré el nombre de la empresa), y cual fue mi la sorpresa, esta empresa trabajaba bajo un "Generador de Código para Clipper", hecho por el mismo dueño de la empresa.

Al estar casi un año en esa empresa renuncie, luego estuve semi-libre como cinco meses (eso para no decir "vago"), después 7 meses en otra empresa y luego un 21/07/1998 ingrese a la empresa donde hasta hoy trabajo.

Hasta hoy, sigo trabajando ahí, estoy cerca de los 10 años, y si sigo escribiendo, es porque aun continuo trabajando por ahí, o porque necesito tener ingresos, y me meto a escribir como loco hasta saber que hacer.

Lo primero que toque fue SYNON. Para los que no saben de que se trata, SYNON es un CASE que genera código RPG. SYNON se dejó de usar, dando paso al ahora ya famoso GENEXUS, en Paraguay por lo menos es así.


A que viene todo esto, el tema es que básicamente toda mi vida profesional esta basado sobre herramientas CASE, para mi, todo esto es un "SUEÑO" hecho realidad.

Así que, la idea principal de este Blog, es dar mas sueños, ideas, tips para obtener uno de los mayores beneficios del "Generador de Código", escribir menos.