Artículo
· 5 jun, 2019 Lectura de 7 min
El arte de mapear Globals para Clases (1 de 3)

¿Alguno de ustedes desea traer de vuelta una antigua aplicación MUMPS? Siga estos pasos para mapear sus globales ya establecidos para clases y mostrar todos esos hermosos datos en Objects y SQL

Al seguir los sencillos pasos en este artículo y los dos siguientes, podrá mapear todas las variables globales, excepto las más difíciles, para clases de Caché. Para los que estén locos pondré un archivo zip con diferentes mapeos que he coleccionado a lo largo de los años. Esto NO es para datos nuevos; si no cuenta con datos globales ya establecidos, por favor, utilice el almacenamiento predeterminado.

0 0
0 264
Artículo
· 5 jul, 2022 Lectura de 1 min
Ejemplo de código para concatenar arrays JSON

ObjectScript no incluye ningún método por defecto para añadir un array JSON a otro. Este es un fragmento de código que utilizo y que es equivalente al método concat() de JavaScript.

Puedes llamarlo con cualquier número de argumentos para concatenarlos en un nuevo array. Si un argumento es un array dinámico, sus elementos serán añadidos. Si no, el argumento en sí será añadido.

0 0
0 263

Introducción

En este artículo, voy a contarles cómo logré realizar la integración en la plataforma Intersystems IRIS 2020 de una cuenta de correo Outlook Exchange con oAuth 2.0. Aunque esta tarea puede parecer sencilla, la realidad es que Intersystems IRIS 2020 no cuenta con los componentes necesarios para lograrlo. En mi caso, utilice código de la versión 2022 (puedes descargar la versión de evaluación) y lo adapté a la versión 2020. Si bien es factible actualizar entre versiones con el instalador IRIS 2022, esto toma semanas de pruebas antes de realizar el cambio en productivo, y la integración no podía esperar, es por esto que se optó por tomar componentes de IRIS 2022 y copiarlos/adaptarlos a la versión 2020.

21 2
2 263
Artículo
· 28 oct, 2021 Lectura de 2 min
Generadores de documentación estática

¡Hola comunidad!

En el pasado, la documentación técnica del código fuente y de los productos de software se generaba en archivos chm, pdf y generadores de documentación de los propios lenguajes de programación. Este enfoque antiguo tenía las siguientes limitaciones:

  1. Documentación obsoleta,
  2. Documentación no interactiva y difícil de consultar,
  3. Diseño poco amigable y que no se adhiere a HTML,
  4. Imposibilidad de personalizar el diseño de los documentos,
  5. Imposibilidad de tener documentación en HTML 5 online y offline.
  6. Falta de soporte a Markdown.

Hoy en día, existen varias soluciones de generación de documentación que producen Portales de Documentación Web muy atractivos, interactivos y con opciones estáticas y dinámicas, con soporte total para HTML 5 y más recientemente Markdown.

Consulta la tabla con las opciones de código abierto más populares:

0 0
0 261
Artículo
· 7 oct, 2021 Lectura de 2 min
Cómo obtener Upstream en GitHub

¡Hola desarrolladores!

Con frecuencia, cuando colaboramos con el repositorio de alguien en GitHub, seguimos el siguiente ciclo:
1. Fork: crear nuestra bifurcación del repositorio
2. Clone: clonar una copia local de nuestro repositorio bifurcado
3. Realizar nuestros cambios y guardarlos con un Commit en nuestra copia local
4. Push: publicar nuestros cambios al repositorio clonado de GitHub
5. Hacer Pull-Request para solicitar incorporar nuestros cambios desde nuestro fork — bifurcación — al repositorio original
6. Y si todo va bien se hará un Merge — fusión o incorporación — con nuestros cambios en el repositorio original

¡Todo esto es genial y funciona bien!

Y si queremos realizar una segunda colaboración justo después de llevar a cabo un Merge , es necesario que primero realicemos un Fetch upstream en nuestro repositorio clonado para que tengamos disponibles los cambios actualizados que incorporamos al repositorio original a través del Pull Request.

Los más frikies de git lo hacen muy fácilmente, pero muchos terminamos simplemente por eliminar nuestro primer fork y crear otro nuevo.

1 0
0 258
Artículo
· 2 feb, 2024 Lectura de 9 min
PrivateGPT explorando la documentación

Considerar el nuevo interés empresarial en la aplicación de IA generativa a información y datos privados locales comercialmente sensibles, sin exposición a nubes públicas. Al igual que una cerilla necesita la energía del golpe para encenderse, el nuevo desafío de "energía de activación" del líder tecnológico es revelar cómo la inversión en hardware GPU podría respaldar nuevas capacidades competitivas. La capacidad puede revelar los casos de uso que brindan nuevo valor y ahorro.

Afilar este hacha comienza con un protocolo funcional para ejecutar LLM en un portátil local.

1 0
0 257

Estaba buscando la forma mas simple de conectar desde el visual studio code a mi instancia local por el terminal sin tener que ir cambiando de ventana.

Soy consciente de que esto tambien se puede conseguir por telnet pero me parece complicar la cosa para conectarme a mi local.

La solución mas sencilla me ha parecido navegar a la carpeta /bin de la instalación (o añadirla al PATH), y ejecutar .\csession.exe NOMBREDEINSTANCIA.

2 0
0 256
Artículo
· 28 feb, 2023 Lectura de 6 min
Como controlar el acceso a tus recursos con OAuth2

Buenas a todos,

una de las herramientas potentes que tiene Intersystems es la posibilidad de implementar en el propio sistema la autenticación OAuth2. Esta herramienta nos da la posibilidad de poder controlar quien accede a nuestros recursos y como accede.

A continuación planteo una solución ante el problema de querer controlar quien accede a mis recursos y la posibilidad de monitorizarlo. Para ello deberemos seguir los siguientes pasos:

7 0
3 256

¡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.

2 0
0 252

¡Hola Comunidad!

Voy a empezar a traducir los artículos de mi compañero Murray sobre rendimiento, pues son muy interesantes y merece la pena echarles un vistazo. Aprovecho para comentar que si tenéis preguntas y /o problemas de rendimiento os animéis a escribir y entre todos trataremos de ayudaros. Empecemos...

Tu aplicación está implementada y todo funciona bien. ¡Genial, enhorabuena! Pero, de repente, el teléfono empieza a sonar sin parar: son usuarios que se quejan de que la aplicación a veces se vuelve "lenta". Pero... ¿qué quiere decir eso? ¿A veces? ¿De qué herramientas dispones y a qué estadísticas deberías prestar atención para encontrar y resolver la lentitud? ¿La infraestructura de tu sistema está a la altura de la carga de usuarios? ¿Qué preguntas de diseño de infraestructura deberías haber hecho antes de haber pasado a producción? ¿Cómo puedes hacer la planificación de capacidad para nuevo hardware con confianza y sin gastar en más hardware del necesario? ¿Cómo hacer que el teléfono deje de sonar? ¿Cómo podrías haber evitado que sonara desde un principio?

1 0
0 252

¡Hola Comunidad!

En publicaciones anteriores, mi compañero Murray mostró cómo se pueden recopilar métricas históricas de rendimiento utilizando los pButtons. Hablamos primero de los pButtons porque se instalan con cada instancia de las plataformas de datos (Ensemble, Caché, …). Sin embargo, existen otras formas para recopilar, procesar y desplegar las métricas de rendimiento de Caché, en tiempo real, ya sea con la finalidad de realizar una supervisión sencilla o, lo más importante, para llevar a cabo operaciones analíticas mucho más sofisticadas y obtener la capacidad de planificación. Uno de los métodos utilizados más comunes para recopilar datos es el SNMP (Protocolo simple de administración de la red).

0 0
0 251
Artículo
· 24 mar, 2021 Lectura de 1 min
Problema con docker-compose

Entorno:

  • Windows 10
  • Docker Desktop version v20.10.5

Desde la última actualización de Docker Desktop (~ 2 semanas) recibo este mensaje de error al ejecutar docker-compose build

C:\GitHub\zme>docker-compose build
Building iris
failed to get console mode for stdout: The handle is invalid.

2 0
0 251

Hola a todos,

con este artículo, me gustaría mostrar lo fácil y dinámicamente que puede ser configurada nuestra herramienta de Alerta y Monitorización de Sistema (SAM, del inglés System Alerting and Monitoring). El caso de uso podría ser el de un flujo de aprovisionamiento CI/CD ágil y rápido, donde queráis ejecutar vuestros tests unitarios y de estrés, y podáis ver rápidamente si los tests tuvieron éxito o cómo están estresando el sistema y tu aplicación ( el API de SAM en el backend de InterSystems IRIS es extensible para tu implementación APM).

0 0
0 250

¡Hola desarrolladores!

Últimamente he estado probando el módulo csvgen y buscaba un fichero CSV para probar. Resulta que encontré un fichero muy interesante en Data.World con estadísticas sobre los episodios de Game of Thrones (Juego de Tronos). Estadísticas sobre muertes 😱.

¡Han documentado todos los asesinatos a lo largo de las 8 temporadas y han anotado dónde, quién, qué clan y con qué arma ha matado a otro personaje!

0 0
0 250
Artículo
· 16 abr, 2019 Lectura de 3 min
Copiar parte de las propiedades de un objeto a otro

A veces, necesitamos copiar parte de las propiedades de un objeto en otro diferente.

La forma mas facil sería hacer lo siguiente:

Set obj1.FirstName = obj2.FirstName

Set obj1.SecondName = obj2.SecondName

¿Que sucede si el objeto contiene un gran número de propiedades? ¿Y si solo necesitamos extraer un importante grupo de datos, y complementar la información en otro objeto?

Tenemos las siguientes clases:

3 0
0 249
Artículo
· 27 abr, 2022 Lectura de 3 min
¿Qué o quién está consumiendo mis licencias?

De vez en cuando, recibimos la pregunta anterior en soporte, algo o alguien está usando más licencias de las esperadas y necesitamos encontrar qué está pasando.

Tenemos dos escenarios. El primer escenario es cuando nos damos cuenta que las licencias están agotadas porque la aplicación no funciona o porque intentamos conectarnos a través del terminal y sale el "encantador" mensaje <LICENSE LIMIT EXCEEDED>:

2 0
0 249

Como no podía ser de otra manera y fieles a nuestra cita de los viernes, procedemos a publicar las predicciones de la aplicación QuinielaML para la jornada 9ª de Primera División y 10ª de Segunda.

Os recuerdo que QuinielaML está desarrollada sobre InterSystems IRIS haciendo uso de sus capacidades de Machine Learning que proporciona mediante la funcionalidad IntegratedML así como de Embedded Python que permite la captura de datos para entrenar el modelo predictivo.

Aquí tenemos la jornada de este fin de semana:

1 1
0 248

No sé si alguna vez os ha ocurrido. Nosotros trabajamos con VSCode para programar en IRIS, sincronizamos las clases con un servidor de desarrollo y lo tenemos conectado a un repositorio Git.

Tenemos proyectos que tienen cientos de clases, algunos hasta miles. Nos ocurre a menudo que, estamos realizando un desarrollo en un Namespace, y sin terminarlo, surge una incidencia que hay que solventar (o un nuevo desarrollo más prioritario). Dejamos el desarrollo que estamos haciendo, comiteando todo lo realizado hasta el momento.

14 2
1 247

Servir el café: Cómo crear y programar una tarea

¿No te gustaría que una taza de café caliente te esperara justo al llegar a la oficina? ¡Vamos a automatizar eso!

Cache e IRIS incorporan un Administrador de tareas, que debería resultar familiar a quienes estén acostumbrados a utilizar el programador de tareas de Windows o a usar cron en Linux. Tu cuenta de usuario requerirá tener acceso al recurso %Admin_Task para utilizarlo, y puedes acceder a él desde el portal de administración en System Operation -> Task Manager. Cuando se instala por primera vez, hay aproximadamente 20 tipos de tareas que puedes programar.

Si quieres añadir tus propias tareas, empieza creando una clase que extienda %SYS.Task.Definition. Como mínimo, debes sobreescribir el método OnTask, que tiene una firma de Method OnTask() As %Status. El código de ese método se ejecutará cada vez que se lance la tarea. De hecho, si tu tarea arroja "Error #5003: No implementado (Error #5003: Not Implemented)" cada vez que se ejecuta, es porque este método no se sobreescribió correctamente. De manera muy básica, podría ser:

0 0
0 246

Durante las últimas semanas, el equipo de Solution Architecture (Soluciones de Arquitectura) ha estado trabajando para terminar la carga de trabajo de 2019: esto incluyó la creación del código abierto de la Demostración de Readmisiones que llevó a cabo HIMSS el año pasado, para poder ponerla a disposición de cualquiera que busque una forma interactiva de explorar las herramientas proporcionadas por IRIS.

0 1
0 245
Artículo
· 11 abr, 2023 Lectura de 3 min
Tutorial rápido para crear bases de datos de ejemplo

Introducción

Este es un sencillo tutorial sobre la manera más rápida que conozco para crear una base de datos de ejemplo para cualquier propósito, como hacer pruebas, hacer ejemplos para tutoriales, etc.

Creando un namespace

  1. Abre el terminal
  2. Escribe "D $SYSTEM.SQL.Shell()"
  3. Escribe "CREATE DATABASE " y el nombre que quieres para tu namespace.

Ahora tienes un nuevo namespace de una manera más rápida que creándolo desde el Portal de Gestión - que por supuesto ofrece más opciones de configuración.

1 0
0 244
Artículo
· 15 mayo, 2020 Lectura de 9 min
Gestión de índices

¡Hola desarrollador!

Si has leído la parte 1 de este artículo, ya tienes una buena idea del tipo de índices que necesitas para tus clases y cómo definirlos. Lo siguiente es saber cómo gestionarlos.

Plan de consultas

(RECUERDA: Al igual que cualquier modificación en una clase, añadir índices en un sistema en producción conlleva riesgos: si los usuarios están actualizando o accediendo a datos mientras se rellena un índice, podrían obtener resultados vacíos o incorrectos a sus consultas, o incluso dañar los índices que se están formando. Ten en cuenta que hay pasos adicionales para definir y usar índices en un sistema en producción. Estos pasos se analizarán en esta sección, y se detallan en nuestra documentación).

0 1
0 243

Viajar en el tiempo es como visitar París. No puedes simplemente leer la guía, tienes que arrojarte. Come la comida, usa los verbos equivocados, recibe el doble de cargos y terminas besando a completos desconocidos.

El Doctor

Vamos ahora a viajar por el tiempo, osea, vamos a ver fechas futuras y pasadas y como calcularlas en diferentes formatos. La TARDIS no espera, ponte a los mandos y sujétate fuerte.

Travel in TARDIS

13 0
0 242
Artículo
· 15 sep, 2023 Lectura de 42 min
IAM (InterSystems API Manager) - de cero a cien

Este artículo ha sido actualizado con respecto al original en inglés (más antiguo). Los ejemplos que se presentan aquí han sido validados con la última versión de IAM, actualmente la 3.2.1.0-4, y la versión más reciente de InterSystems IRIS, la 2023.2, que es la primera en que ya no se instala por defecto un servidor web.

Este artículo contiene los materiales, ejemplos y ejercicios necesarios para aprender los conceptos básicos de IAM.

Todos los recursos están disponibles en este git: https://github.com/grongierisc/iam-training.

Las soluciones están en esta rama.

2 0
1 242

Quería compartiros hoy un pequeño truco para personalizar cómo se muestran los mensajes en el Visor de Mensajes. En concreto, cómo mostrar mensajes JSON directamente en el Visor de Mensajes en lugar de serializados como XML.

image

3 2
0 242
Artículo
· 1 ago, 2019 Lectura de 7 min
Extensiones de lenguaje

¡Hola a tod@s!

En este artículo trataré una característica particular de Caché, muy útil, pero que probablemente no se conoce ni se usa bien. Me refiero a la función de Extensiones de lenguaje.

Esta característica permite extender los comandos, variables especiales y funciones disponibles en Caché Object Script con comandos, variables especiales y funciones propias. Esta funcionalidad también se aplica a otros idiomas que Caché admite en el servidor, incluidos Caché Basic y Multivalue Basic.

¿Por qué necesitaría o querría agregar nuevos comandos?

1 0
0 241
Artículo
· 17 jun, 2021 Lectura de 2 min
Cómo crear un PDF a partir de un archivo de texto

Cómo utilizar Java Gateway para acelerar el desarrollo

InterSystems IRIS incluye Object Gateways dinámicos para Java, .NET y (ahora) Python. Estos gateways permiten que tu aplicación IRIS utilice bibliotecas en estos lenguajes, eliminando la necesidad de crear todo desde cero en ObjectScript.

En este ejemplo, utilizamos las bibliotecas iTextPdf y Apache PdfBox para leer un archivo de texto y producir un PDF básico a partir de él. Estas bibliotecas son controles PDF profundos y ricos, por lo que un poco de desarrollo podría producir una aplicación de ejemplo que ofrezca resultados mucho más convincentes para tus necesidades. También he incluído un archivo de clase corto el cual hace que su uso desde ObjectScript sea muy sencillo.

0 0
0 241
Artículo
· 11 jun, 2020 Lectura de 4 min
Resumen sobre el alcance de las variables locales

Este es un resumen de un tema que aparece en varios lugares de la documentación en línea, sobre todo como observaciones, pero nunca como un capítulo dedicado.

Érase una vez... No, no es un cuento para niños.
En los comienzos de Caché (y antes), tenías tu partición para ejecutar tu código. Parte de esa partición era un espacio con todas tus variables locales bien ordenadas según %,A,..Z,a,...z

3 1
0 240