Entradas

¿Por qué no deberías utilizar ServerDate() o ServerNow() en GeneXus?

Imagen
Históricamente en los sistemas Cliente-Servidor, la aplicación se ejecutaba en el PC del usuario. Por esto, para obtener la fecha de forma consistente, ésta se obtenía desde el DBMS. Hoy en día, generalmente disponemos de un sistema Web con una arquitectura en 3 capas, donde el usuario utiliza un navegador el cual se conecta al servidor de aplicaciones y este último, si es necesario, al DBMS. Debido a que todos los usuarios se conectan, a través del Browser, al servidor de aplicaciones, ya no es necesario consultar la fecha-hora desde la base de datos. En su lugar, lo mejor es retornarla directamente desde este servidor de aplicaciones. Pero, ¿Que es lo que hacen estas funciones? Estas funciones obtienen la fecha desde el DBMS mediante una query. Por ejemplo, en MSSql se utiliza: SELECT GETDATE() Esto quiere decir que cada vez que obtienes la fecha mediante estas funciones, el servidor de aplicaciones debe hacer un consulta al DBMS. Suponiendo que estamos trabajando con un sistema W...

GeneXus - Como ejecutar un procedimiento Java main por consola

Imagen
Los procedimientos marcados como main/command-line son sumamente útililes para realizar varias tareas que por su definición no son compatibles con la ejecución en línea. Entre ellas podemos encontrar procesos batch, tareas programadas y otros. La ejecución de estos procedimientos en otros generadores como .Net es trivial, ya que se crea un .exe y se ejecuta directamente. En Java esto no es tan sencillo ya que para ejecutar hay que invocar el intérprete de java con la ruta de las diferentes librerías que componen el proyecto (classpath). Luego de investigar al respecto, encontré que la forma más sencilla para esto es mediante el comando: java -cp build\classes\java\main;build\libs\* com.<kbname>.a<proc.main> Ej.: java -cp build\classes\java\main;build\libs\* com.mykb.amyproc Hay que tener en cuenta que esto funcionará a partir de GeneXus 18.

¿Actualizaste a MacOS Ventura y te dejó de funcionar la generación de apps con GeneXus 17? ¡Solucionado!

Imagen
Si les pasó actualizar MacOS a la versión Ventura, seguramente les dejó de funcionar la generación de aplicaciones creadas con GeneXus 17. Aquí les explico como poder seguir utilizando GeneXus 17 sin hacer un downgrade de MacOS. Instalar la versión de xcode compatible con Ventura. En mi caso instalé la v14.2. Si no lo tienen instalado, deben instalar GeneXus 18. Respaldar la carpeta GeneXus17\iOS y copiar a esta, los siguientes archivos de la carpeta GeneXus18\iOS: MacTransfer.exe, MacTransfer.exe.config, MacTransfer.scpt y Renci.SshNet.dll Abrir la terminal de MacOS y ejecutar: brew install cocoapods Hacer un rebuild de la app en GeneXus17 y probar que ésta funcione correctamente. Si esto no les llega a funcionar, la otra opción es hacer el downgrade con lo cual pueden incurrir en perdida de datos.

Resumen de lo que nos trae el upgrade 10 de GeneXus 17

Imagen
Este resumen me centraré en las mejoras y cambios que considero destacados del nuevo upgrade. ¡Lo imperdible! PlantCare - ECommerce Sample PlantCare es un App-eCommerce de ejemplo multidispositivo basada en una tienda dedicada a la venta de plantas. Fué realizada con import from Sketch y es compatible con iOS, Android y Angular. 51257 : Se permite importar archivos de diseño de Figma Se implementó el soporte de Figma como proveedor de diseño. Más información: Design Import option | Article (genexus.com) Aplica a: Development Environment A tener en cuenta 51285 : Se deja de soportar SQL Server 2000 A partir de GeneXus 17 Upgrade 10 ya no se puede seleccionar SQL Server 2000 en nuevos environments. Sí se sigue soportando aún en environments que ya tienen seleccionada esa versión. En upgrades futuros se quitará el soporte también para ese escenario. Aplica a: .NET Framework Generator, Java Generator, .NET Generator (ex .NET Core) 51317 : Pasa a ser requerimiento Java JDK 11 para el genera...

Resumen de lo que nos trae el upgrade 9 de GeneXus 17

Imagen
Este resumen me centraré en las mejoras y cambios que considero destacados del upgrade 9 de GeneXus 17. Nuevas funcionalidades 50932 : Soporte de OAUTH para envío y recepción de emails en cuentas de Google y Office 365 Se implementó el soporte al envío y a la recepción de emails autenticándose via OAUTH, especialmente diseñado para cuentas Google y Office 365. (Las APIs de Google en general permiten autenticación y autorización a través de OAUTH 2.0. https://developers.google.com/identity/protocols/oauth2). Aplica a: .NET Framework Generator, Java Generator, .NET Generator (ex .NET Core) 51001 : OpenAPI import tool permite seleccionar las operaciones a ser importadas. Se implementó un asistente en OpenAPI import tool que permite seleccionar las operaciones a ser importadas. Más información: https://wiki.genexus.com/commwiki/servlet/wiki?31864,OpenAPI+import+tool Aplica a: Development Environment 51002 : Se implementó la posibilidad de realizar promedios móviles, sumas parciales o difer...

Enviando nuestros logs a Kibana rápido y simple

Imagen
Mediante Kibana y Elastic Stack comenzarás a monitorear y gestionar tus logs como nunca antes. Todo centralizado, o sea, sin tener que ir a cada servidor a revisar los archivos de logs o a la base de datos. Sumado a esto tendrás el poder de uno de los mejores motores de búsqueda actuales, cómo es Elasticsearch. Elasticsearch ( parte de Elastic Stack) nos brinda la capacidad de realizar búsquedas en tiempo record sobre millones de registros. Esto sumado a la visualización de última generación con Kibana, nos brinda herramientas de vanguardia para la gestión de logs. En otras oportunidades he conversado sobre la gestión moderna de logs, aquí dejo un vínculo para el que guste interiorizarse en el tema, ya que verán las ventajas y como se utilizan este tipo de tecnologías: https://youtu.be/9XGR40-D-HM ¡Ahora, manos a la obra! Para que todo lo anterior funcione, debes instalar y configurar tres tecnologías de Elastic Stack: Kibana, Elasticsearch, Logstash. Por suerte, esta tarea se hará muy...

Buenas prácticas trabajando con parámetros o configuración del sistema

Imagen
En éste artculo repasaremos algunas buenas prácticas sobre la utilización de parámetros para resolver temas como: ¿Donde se utiliza cierto parámetro? ¿Por qué tengo dos claves de parámetro para la misma configuración? ¿Como resolver el valor por defecto del parámetro? ¿Como almacenar parámetros? Estructura y almacenamiento Para el almacenamiento recomiendo una estructura atributo valor, la cual es elástica, por lo que no quedamos atados a una estructura en particular. En este sentido, podríamos tener la estructura siguiente: Parameters * ParameterKey - VarChar(32) * ParameterValue VarChar(512) Para el caso de las claves (ParameterKey), es importante que sean descriptivas. Si fuesen numéricas, cada vez que ingresemos a revisar la base de datos, necesitamos la lista de mapeo para encontrar el parámetro deseado. En lo que respecta a si la clave es case sensitive, se recomiendan lo más simple posible a fin de evitar errores en queries y otros. Por lo que se debiera establecer un solo case,...

Buenas prácticas al registrar logs en desarrollo de software

Imagen
La información que generamos de logs en nuestros sistemas es vital para encontrar donde se da un problema puntual. Con la gran cantidad de logs generados, que pueden ser hasta millones al día, el proceso de encontrar un dato específico se puede volver muy difícil y a veces podemos no encontrar lo que buscamos. Por eso, siempre digo que el análisis de logs es como "Encontrar una aguja en un pajar". En este documento les comentaré sobre las mejores prácticas basadas en investigación y experiencia para obtener los mejores resultados. Seguridad No por casualidad el punto seguridad está al principio. La seguridad de sistemas hoy en día es más relevante que nunca, ya que cada vez hay más ataques para obtener información y utilizarla para fines ilícitos. Si por ejemplo utilizamos archivos de texto plano o un software como Kibana-local -que por defecto no trae control de usuario y contraseña- tenemos nuestra información expuesta. Esto quiere decir que debemos tener "mucho" ...

¿Por qué debiéramos tener un proyecto que aporte a la sociedad?

Imagen
El 21 de octubre pasado, luego de la charla brindada por Javier Verdura de Tesla en el evento GeneXus Live 21 , vi muchos puntos en común con pensamientos y decisiones que he tomado los últimos tiempos. En parte de su charla, Javier comentaba que había trabajado varios años diseñando productos de consumo, lo cual de alguna forma no lo llenaba completamente. Sin embargo trabajando en Tesla se siente apasionado por su trabajo y sabe que está realizando diseños para mejorar la vida de las personas en el planeta. Parte de los proyectos que tienen en Tesla -aparte de autos eléctricos, baterías para hogar y otros para la disminución de CO2- están los proyectos para que sean atractivas las alternativas renovables y hacer que se vuelvan deseables. El proyecto que comentó en este punto es un techo americano que a la vez genera electricidad mediante la luz solar. Con su trabajo, está convencido que está ayudando a cambiar el mundo, ayudando a revertir el efecto invernadero. En mi caso, luego de...

Como versionar nuestras aplicaciones y algunas ideas para automatizar

Imagen
Si será importante el versionado de nuestras aplicaciones que lo primero que preguntamos cuando nos reportan un problema es "¿Que versión tiene de la aplicación?". Nomenclatura Lo primero es definir la nomenclatura vamos a utilizar. La nomenclatura utilizada normalmente es: x.y.z x: Cambio mayor. Esto podría ser interpretado como un cambio importante en la aplicación. En un lenguaje como .Net podría representar el cambio de la versión del framework o Java de la máquina virtual. También, o más importante, una nueva versión de todo el sistema o un cambio significativo, por ejemplo, un nuevo frontend. y: Cambio menor. En este caso, generalmente se utiliza para al agregado de nuevas funcionalidades al cierre de un ciclo, por ejemplo, de un sprint. En mi caso, normalmente lo incremento en cada cambio de base de datos. De esta forma puedo saber cuáles versiones incluyen cambios de estructuras. z: Correcciones/patches Puede ser utilizado para hotfixes, funcionalidades y otros, de fo...

Buenas prácticas al nombrar objetos en GeneXus

Imagen
El nombrar objetos de forma correcta y mediante una nomenclatura específica es muy importante ya que estandariza el nombre de los objetos en una KB. Esto es más importante aún cuando intervienen varios desarrolladores, ya que los objetos tendrán una misma nomenclatura y los desarrolladores sabrán como encontrar o crear rápidamente un objeto. Por ejemplo, si no tenemos una forma consistente de nombrar objetos, cada programador podría asignarle un nombre según su experiencia. Por ejemplo, para obtener el nombre de un cliente podríamos tener casos como estos: ObtenerNombreDeCliente NombreDeCliente TraerNombreCliente En base a lo anterior, y teniendo en cuenta que en una KB pueden trabajar varios programadores, se vuelve inmanejable encontrar un objeto puntual, lo que lleva a la duplicación de código. Esto nos hace perder productividad ya que tenemos más de un objeto haciendo lo mismo. A su vez genera un problema al momento de testear o realizar una corrección puesto que es difícil saber s...

Como dejar estatico el cabezal de nuestra web

Imagen
Los sitios web modernos, traen consigo muchas funcionalidades que están "copadas". Una de ellas es el cabezal estático el cual implementé en GProjex . A continuación les explico como incorporarlo en sus sitios web. Cabe aclarar que ésta es la implementación a "manopla". Si utilizan algo como Bootstrap es mucho más sencillo ya que se puede implementar directamente.

¿Que es la zona de confort?

Imagen
Normalmente pasamos la mayor parte de nuestro tiempo en lo que llamamos la zona de confort. Se trata de lo que conocemos, lo que nos gusta y nos hace sentir seguros. Aquí corresponden nuestro trabajo y nuestro entorno. En la zona de pánico se encuentran nuestros sueños, lo que nos gustaría hacer pero por una serie de miedos y dudas no lo hacemos. Entre medio está lo que llaman los desafíos, retos y zona de aprendizaje. Este es el camino que debemos tomar para comenzar a expandir nuestros horizontes y dejar de pensar que nuestros ideales son inalcanzables. Por tanto, la pregunta es, ¿continuaras estando en tu zona de confort a costas de preguntarte algún día, que hubiera pasado si lo hubiese intentado? Un video muy interesante sobre este punto: