Pregunta Mathew Lambert · oct 22, 2021

Tenemos un escenario bastante complejo pero creo que es sencillo de explicar y que quede claro.

Estamos desarrollando un ejecutador de tareas que corre en un servidor con una timezone indiferente.

Las tareas se tienen que ejecutar cada dia pero a una hora definida para una cierta timezone

Guardamos en base de datos la hora a la que queremos ejecutar la tarea y de que timezone es (no vayas al pozo de guardar en UTC, ya que cuando tengas DST será a horas distintas)

Lo que queremos es que cuando obtengamos nuestra tarea de la DB, convertir el 02:00 Europe/Madrid ya sea a UTC o a local (servidor)

2
0 99
Comentarios Mathew Lambert · sep 22, 2021

Sobreescribiendo el método Read (que tiene un tipo de retorno %CacheString) en una nueva clase que hereda de %Stream.FileCharacter, se obtiene un error de compilacion informando que el tipo de retorno es incorrecto y ha de ser Binary, aun cuando matchea la firma del padre.

Mirando la global de codigo compilado vemos:

^oddCOM("%Stream.FileBinary","m","Read",42)="%Library.Binary"

Despues de más investigaciones encontramos que hay un método generator que mira la definicion de clase OdbcType.

Seteandolo a LONGVARCHAR nos da:

^oddCOM("User.CStream","m","Read",42)="%Library.String"

0
0 108
Artículo Mathew Lambert · sep 1, 2021 2m read

¡Hola a todos!

Hace poco aprendí algo nuevo mientras trabajaba en un problema con el Centro de Soporte Internacional (WRC), y quería compartirlo con todos por si pudiera ayudar a alguien más.

Escenario:

Tienes archivos que se escriben inexplicablemente en una carpeta de tu servidor y, debido a la cantidad de archivos en la carpeta y al rendimiento general del sistema, no es posible trabajar sobre los archivos para localizar el origen.

0
0 1252
Artículo Mathew Lambert · jul 7, 2021 1m read

A veces necesitas importar datos a IRIS de forma rápida y sencilla. Por eso se ha desarrollado un gestor de importación en IRIS.

Esta aplicación permite importar datos en formato JSON y también ofrece una interfaz muy sencilla para transferir datos desde colecciones en MongoDB a globals en IRIS. Nunca ha sido más fácil.

Vamos a ver unos ejemplos.

Importación de JSON

0
0 210
Artículo Mathew Lambert · jun 18, 2021 1m read

Introducción

Este es Iris-key-uploader, un front-end en Angular con su API REST.

El objetivo de este proyecto es importar fácilmente archivos de claves a IRIS desde una interfaz de usuario web.

¿Por qué este proyecto?

Desafortunadamente el panel de IRIS para cambiar la clave no da la oportunidad de subir la licencia.

Como se puede ver, solo se puede navegar desde el lado del servidor.

¿Qué pasa si no se tiene un acceso directo a él?

Te gustaría tener una página web sencilla para subir la nueva clave y activarla.

Ese es el propósito de este proyecto.

Demo

Interfaz de Usuario

0
0 102
Artículo Mathew Lambert · feb 15, 2021 9m read

Introducción y motivación {#RobustErrorHandlingandCleanupinObjectScript-IntroductionandMotivation}

Una unidad de código en ObjectScript (pongamos, un ClassMethod) puede producir una gran variedad de efectos secundarios inesperados cuando interactúa con partes del sistema que están fuera de su propio alcance y no han sido depuradas adecuadamente. En forma de lista parcial, se incluyen:

  • Transacciones
  • Locks
  • Dispositivos E/S
  • Cursores SQL
  • Flags de systema y configuración
  • $Namespace
  • Archivos temporales
1
1 144
Pregunta Mathew Lambert · ene 13, 2021

¿Alguien sabe si hay una manera fácil de saber si la ejecución del comando $ System.SQL.PurgeForTable ha ido bien / mal?

La documentación describe que se devuelve un string, pero de hecho hay un bonito  Quit ""  en el código.

¿Quizás dentro de PurgeForTable ^% apiSQL hay alguna variable de proceso establecida cuando va bien / mal?

¡Muchas gracias!

3
0 157
Artículo Mathew Lambert · dic 18, 2020 2m read

Hace poco, tuve que generar una especificación en Swagger a partir de clases persistentes y en serie, así que ahora publico el código (no está completo, aún queda resolver las especificaciones de la aplicación, pero es un comienzo).

El código está disponible aquí.

Supongamos que tenemos estas clases:

0
0 323
Artículo Mathew Lambert · dic 17, 2020 3m read

Uno de los principales beneficios de ObjectScript es la velocidad y eficiencia que ofrece a un desarrollador experimentado. Veamos un ejemplo de todos los beneficios que se pueden obtener con ObjectScript.

Imagina que tienes una clase que almacena nombres de sus usuarios. Llamaremos a la clase **Data.User**, y le daremos las mismas propiedades que tiene una cadena _Name_. A continuación, necesitaremos un método para crear un nuevo usuario o actualizar uno ya existente. Un enfoque inexperto y simplista sería muy similar al siguiente ejemplo:

0
0 126
Artículo Mathew Lambert · nov 25, 2020 17m read

Este artículo fue creado como efecto secundario de las preparaciones para un conjunto más extendido de artículos sobre la simple, pero útil, implementación de MapReduce en Caché. Estaba buscando una forma relativamente fácil de pasar argumentos a (potencialmente) múltiples objetivos mediante mecanismos de invocación remota. Y tras varios intentos, me di cuenta de que en el ObjectScript de Caché contamos con mecanismos muy potentes que podrían ser de utilidad para esto: dynamix dispatching para métodos y propiedades.

0
1 152
Artículo Mathew Lambert · oct 14, 2020 1m read

Esto lo escribo más para ayudar a mi memoria que para otra cosa. Pensé en compartirlo, porque a menudo aparece en los comentarios, pero no está en la documentación de InterSystems

Hay una utilidad increíble que se llama ^REDEBUG, que aumenta el nivel de información que se registra en mgr\cconsole.log. 

Para activarla:

a) inicia el terminal/login

b) zn "%SYS"

c) do ^REDEBUG

d) cambia el nivel de registro a FFFFFFFF

0
0 154
Artículo Mathew Lambert · jul 31, 2020 2m read

¡Hola desarrolladores!

Después de trabajar un poco con IRIS, queremos compartir con vosotros la "caja de herramientas" para InterSystems IRIS: ToolBox-4-Iris.

¿En qué consiste?

ToolBox-4-Iris es una API para IRIS que incluye un conjunto de herramientas muy útiles, no disponibles en IRIS y que simplifican enormemente el desarrollo de aplicaciones. Permite ahorrar tiempo y esfuerzo en las "herramientas típicas" que todo desarrollador necesita. Esto incluye clases adicionales, métodos individuales o incluso macros más eficientes, que se describen en sus respectivos paquetes.

Contenido

0
0 152
Artículo Mathew Lambert · jul 24, 2020 2m read

¡Hola desarrolladores!

Estoy seguro de que la mayoría de vosotros ya conoceis la posibilidad de usar GZIP en los productos de InterSystems. Pero el problema es que GZIP trabaja con un único archivo o flujo de datos, y no admite carpetas. Al trabajar con sistemas Unix, es posible solucionarlo con la herramienta de compresión tar, incluida en cada sistema Linux de forma predeterminada. Pero ¿qué hacer si debemos trabajar también en Windows, que no lo incluye?

0
0 109
Pregunta Mathew Lambert · jul 20, 2020
Usamos el método de encriptacion de contrseñas mencionado y necesitamos saber si la implementación es acorde con las recomendaciones NIST / FIPS https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf
 
Leyendo la documentación no me queda 100% claro ya que dice "(See RSA Laboratories Public-Key Cryptography Standards #5 and Federal Information Processing Standards Publications 180-4 and 198-1 for more information.)"
1
0 735
Artículo Mathew Lambert · jul 15, 2020 4m read

¡Hola desarrolladores!

Aquí podéis ver el anuncio del proyecto isc-tar de @Dmitriy Maslennikov. En ocasiones, la historia de porque se ha llegado a un resultado es igual o más interesante que el resultado: cómo se construyó, cómo funciona y qué sucede en torno al proyecto. Esta es la historia:

  • Cómo desarrollar este proyecto
  • Cómo probarlo
  • Cómo lanzar nuevas versiones para publicar
  • Cómo automatizar todo lo anterior
  • Integración continua

Os hablaré de todo eso.

0
0 133
Artículo Mathew Lambert · jul 7, 2020 6m read

Introducción

Si gestionas múltiples instancias de Caché en varios servidores, puede que quieras ejecutar código arbitrario de una instancia de Caché en otra. Los administradores de sistemas y especialistas de soporte técnico también podrían querer ejecutar un código arbitrario en servidores Caché remotos. Para satisfacer estas necesidades, he desarrollado una herramienta especial llamadaRCE.
En este artículo, analizaremos cuáles son las formas más comunes de resolver tareas similares y cómo RCE (Remote Code Execution) puede ser útil.
0
0 439
Artículo Mathew Lambert · jun 25, 2020 3m read

El propósito de este artículo es reforzar el perfil de un procedimiento muy potente que ha estado disponible desde hace mucho tiempo para nosotros, y abrir un debate sobre las maneras en que puede utilizarse (o explotarse).

Puedes leer más información sobre el el mecanismo aquí. En resumen, cuando definas una clase puedes utilizar la palabra clave Projection para referirte a una o más clases de proyección. Una clase de proyección permite implementar métodos que se llaman desde puntos clave en el ciclo de vida de tu clase.

0
0 506
Artículo Mathew Lambert · jun 15, 2020 7m read

Esta es una guía para principiantes, para el desarrollo de servicios web RESTful con Ensemble.

Contexto

Antes de comenzar a leer esta breve introducción, lee la documentación de Ensemble, prestando especial atención al capítulo sobre creación de servicios y clientes REST con Ensemble (“Creating REST services and clients with Ensemble”)

El enfoque de esa documentación creo que es indiscutiblemente la forma más rápida y simple de crear servicios RESTful. Como principiante, leí la documentación y me quedaron varias dudas. Este breve artículo enumera esas preguntas, junto con mis humildes respuestas

0
0 400
Artículo Mathew Lambert · mayo 19, 2020 2m read

Los WebSockets, como tecnología de comunicación, están ganando una importancia cada vez mayor.
En el namespace SAMPLES puedes encontrar un buen ejemplo para ejecutar un WebSocket Server.
También hay un útil ejemplo para un Browser Client, pero sigue estando en el navegador.

La cuestión es:
¿Cómo consumir la salida de un WebSocket Server en tu aplicación?

0
0 147
Artículo Mathew Lambert · mayo 18, 2020 2m read

Los WebSockets, como tecnología de comunicación, están ganando una importancia cada vez mayor.
En el namespace SAMPLES puedes encontrar un buen ejemplo para ejecutar un WebSocket Server.
También hay un ejemplo útil para un Browser Client en el cual JavaScript hace la mayor parte del trabajo. 

La cuestión es:
¿Cómo consumir la salida de un WebSocket Server en tu aplicación?

0
0 176
Artículo Mathew Lambert · mayo 7, 2020 4m read

¡Hola Comunidad!

Hace un par de días, un cliente me comunicó su intención de mejorar su aplicación legacy existente, que usa Servicios Web SOAP, por lo que comparte la misma autorización con su nueva API de aplicación basada en REST. Como su nueva aplicación usa OAuth2, el desafío estaba claro: cómo pasar un token de acceso con una solicitud SOAP al servidor.

0
0 1350
Pregunta Mathew Lambert · abr 28, 2020

He estado leyendo la guía de documentación para 2018.1 sobre los planes de consultas congeladas varias veces en los últimos días ( enlace ) y hay una respuesta que no encuentro directamente.

Mi forma de actualización on premise es:

  • Actualizar la versión de HealthShare
  • Descongelar todos los planes de consulta de mi namespace
  • Purgado de todas las queries
  • Sobreescribo la base de datos que contiene la lógica (tanto la lógica antigua como la nueva contienen consultas estáticas compiladas con la versión HS de destino y consultas dinámicas)
1
0 133
Artículo Mathew Lambert · abr 16, 2020 10m read

¡Hola Comunidad!

Descubrí el Desarrollo Basado en Pruebas (TDD) hace casi 9 años y me enamoré del concepto inmediatamente.

Hoy se ha vuelto muy popular pero, desafortunadamente, muchas empresas no lo usan. Es más, muchos desarrolladores, sobre todo principiantes, ni siquiera saben exactamente qué es ni como usarlo.

Resumen

Mi objetivo con este artículo es mostrar cómo usar TDD con %UnitTest. Mostraré mi flujo de trabajo y explicaré cómo usar cosFaker, un proyecto de @Henry Pereira Pereira, usando Caché y que hace poco lo subió a OpenExchange.

Así que... ¡preparaos que allá vamos!

¿Qué es TDD?

0
0 270
Artículo Mathew Lambert · mar 25, 2020 6m read

¡Hola Comunidad!

Creo que hoy en día todo el mundo guarda el código fuente de sus proyectos en repositorios como Github, GitLab, bitbucket, etc. Lo mismo sucede con proyectos de InterSystems IRIS, se pueden ver algunos ejemplos en Open Exchange.

¿Qué hacemos cada vez que empezamos o continuamos nuestro trabajo con un repositorio en particular con la plataforma de datos InterSystems?

1
1 909
Artículo Mathew Lambert · mar 20, 2020 2m read

Hola a tod@s,

En recientes conversaciones, respuestas y comentarios, la redirección IO (con el famoso código) se veía como la solución indiscutible. Sin duda, es una solución potente y no solo permite registrar la salida, sino también hacer captura de teclas en la entrada.

Pero creo que para simplemente generar un registro (log), supone un sobretrabajo. Si solo necesitas obtener un texto o descargar sus variables u objetos, entonces SPOOL debería ser suficiente.

0
0 117
Artículo Mathew Lambert · mar 6, 2020 3m read

¡Hola Comunidad!

Esta publicación es para presentarles uno de los primeros proyectos en COS de @Henry Pereira . Lo creó cuando empezó a aprender el lenguaje y lo sigue mejorando hasta hoy.

El CosFaker (aquí en Github) es una biblioteca de COS pura, para generar datos falsos.

cosFaker vs Utils de populación

¿Por qué usar cosFaker si Caché tiene la utilidad de popular datos?

1
1 155