发布新帖

查找

摘要
· 一月 26

Publications des développeurs d'InterSystems, semaine Janvier 19 - 25, 2026, Résumé

Janvier 19 - 25, 2026Week at a GlanceInterSystems Developer Community
问题
· 一月 26

Professional Home Painting Services in Dubai

Professional home painting services in Dubai provide high-quality painting solutions designed to enhance the beauty and protection of residential properties. These services include interior and exterior painting, wall preparation, crack filling, primer application, and smooth finishing using premium, eco-friendly paints suitable for Dubai’s climate. Skilled painters ensure precise application and long-lasting results for apartments, villas, and townhouses.

Expert home painting services in Dubai focus on attention to detail, color consultation, and proper surface treatment to achieve a flawless and elegant finish. From single-room painting to complete home repainting, professional teams work efficiently while maintaining cleanliness and minimizing disruption to daily life. High-quality paintwork also helps protect walls from moisture, heat, and wear.

Choosing reliable home painting services in Dubai ensures improved aesthetics, increased property value, and durable paint finishes. With experienced painters, modern tools, and customer-focused service, professional home painting solutions deliver beautiful, long-lasting results tailored to residential needs.

讨论 (0)1
登录或注册以继续
公告
· 一月 26

Ayudad a dar forma al futuro del desarrollo en ObjectScript

Hola Comunidad,

Estamos emocionados de invitaros a participar en la creación de la próxima generación de herramientas de desarrollo para ObjectScript. Estamos trabajando en un asistente de codificación en ObjectScript potenciado por IA, diseñado específicamente para desarrolladores de IRIS. No es una IA genérica adaptada a ObjectScript, sino una solución construida desde cero para entender los modismos de ObjectScript, las APIs de IRIS, producciones de interoperabilidad y los flujos de trabajo reales de los desarrolladores.

Para asegurarnos de construir algo realmente útil, necesitamos vuestra opinión.

👉 Encuesta para desarrolladores del Agente de Codificación en ObjectScript 👈

La encuesta dura aproximadamente 5 minutos y abarca temas como:

  • Vuestro rol y nivel de experiencia
  • Puntos problemáticos y flujos de trabajo actuales
  • Qué características son más importantes (generación de código, depuración, soporte de aprendizaje y más)
  • Dónde y cómo os gustaría usar una herramienta así

La encuesta está abierta a desarrolladores de todos los niveles de experiencia en ObjectScript.

¿Qué sigue?

  • Se compartirán los resultados agregados con la comunidad
  • Los participantes interesados podrán recibir invitaciones a la beta temprana
  • Actualizaciones periódicas sobre el progreso a medida que avance el desarrollo

Vuestros comentarios influirán directamente en qué construimos primero y cómo funcionará.

Si tenéis preguntas, no dudéis en comentar abajo o contactad directamente a thomas.dyar@intersystems.com.

Gracias por ayudarnos a crear mejores herramientas para la comunidad de ObjectScript. ¡Esperamos con ganas vuestra participación!

讨论 (0)1
登录或注册以继续
文章
· 一月 26 阅读大约需 3 分钟

Générer un JWT sans accès au certificat/aux clés x509 du système

Pour générer un JWT à partir d'un certificat/clé X.509, toute opération (y compris la lecture) sur %SYS.X509Credentials requiert l'autorisation d'accès (U) à la ressource %Admin_Secure. Cette dernière est nécessaire car %SYS.X509Credentials est persistant ; cette implémentation vise à empêcher tout accès non autorisé aux clés privées.

Si la ressource %Admin_Secure n'est pas disponible lors de l'exécution, vous pouvez utiliser la solution de contournement suivante.

Lors de l'examen du code de génération des JWT, j'ai constaté que ce code utilise %SYS.X509Credentials uniquement comme source de données d'exécution pour PrivateKey, PrivateKeyPassword et Certificate. Pour contourner ce problème, vous pouvez utiliser une implémentation non persistante de l'interface X.509, exposant uniquement ces propriétés. Si vous utilisez l'interopérabilité, le certificat/clé privée peut être stocké dans les informations d'identification pour un accès sécurisé.

Class User.X509 Extends %RegisteredObject
{

Property PrivateKey As %VarString;
Property PrivateKeyPassword As %String;
Property Certificate As %VarString;
Property HasPrivateKey As %Boolean [ InitialExpression = {$$$YES} ];
ClassMethod GetX509() As User.X509
{
    set x509 = ..%New()
    set x509.PrivateKey = ..Key()
    set x509.Certificate = ..Cert()
    quit x509
}

/// Get X509 object from credential.
/// Username is a Cert, Password is a Private Key
ClassMethod GetX509FromCredential(credential) As User.X509
{
    set credentialObj = ##class(Ens.Config.Credentials).%OpenId(credential,,.sc)
    throw:$$$ISERR(sc) ##class(%Exception.StatusException).ThrowIfInterrupt(sc)
    
    set x509 = ..%New()
    set x509.PrivateKey = credentialObj.Password
    set x509.Certificate = credentialObj.Username
    quit x509
}

ClassMethod Key()
{
    q "-----BEGIN RSA PRIVATE KEY-----"_$C(13,10)
    _"YOUR_TEST_KEY"_$C(13,10)
    _"-----END RSA PRIVATE KEY-----"
}

ClassMethod Cert() As %VarString
{
    q "-----BEGIN CERTIFICATE-----"_$C(13,10)
    _"YOUR_TEST_CERT"_$C(13,10)
    _"-----END CERTIFICATE-----"
}

}

Vous pouvez générer un JWT de la manière suivante :

ClassMethod JWT() As %Status
{
    Set sc = $$$OK
    //Set x509 = ##class(%SYS.X509Credentials).GetByAlias("TempKeyPair")
    Set x509 = ##class(User.X509).GetX509()
    
    Set algorithm ="RS256"
    Set header = {"alg": (algorithm), "typ": "JWT"}
    Set claims= {"Key": "Value" }
    
    #; create JWK
    Set sc = ##class(%Net.JSON.JWK).CreateX509(algorithm,x509,.privateJWK)
    
    If $$$ISERR(sc) {
        Write $SYSTEM.OBJ.DisplayError(sc)
    }

    #; Create JWKS
    Set sc = ##class(%Net.JSON.JWKS).PutJWK(privateJWK,.privateJWKS)
    
    If $$$ISERR(sc) {
        Write $SYSTEM.OBJ.DisplayError(sc)
    }

    Set sc = ##Class(%Net.JSON.JWT).Create(header,,claims,privateJWKS,,.pJWT)
    
    If $$$ISERR(sc) {
        Write $SYSTEM.OBJ.DisplayError(sc)
    }
    
    Write pJWT
	Return sc
}

Vous pouvez également utiliser un objet dynamique pour éviter la création de classe ; dans ce cas, cela ressemblerait à ceci :

ClassMethod JWT(credential) As %Status
{
    Set sc = $$$OK
    //Set x509 = ##class(%SYS.X509Credentials).GetByAlias("TempKeyPair")
    Set credentialObj = ##class(Ens.Config.Credentials).%OpenId(credential,,.sc)
    throw:$$$ISERR(sc) ##class(%Exception.StatusException).ThrowIfInterrupt(sc)
    
    Set x509 = {
        "HasPrivateKey": true,
        "PrivateKey": (credentialObj.Password),
        "PrivateKeyPassword":"",
        "Certificate":(credentialObj.Username)
    }

    Set algorithm ="RS256"
    Set header = {"alg": (algorithm), "typ": "JWT"}
    Set claims= {"Key": "Value" }
    
    #; create JWK
    Set sc = ##class(%Net.JSON.JWK).CreateX509(algorithm,x509,.privateJWK)
    
    If $$$ISERR(sc) {
        Write $SYSTEM.OBJ.DisplayError(sc)
    }

    #; Create JWKS
    Set sc = ##class(%Net.JSON.JWKS).PutJWK(privateJWK,.privateJWKS)
    
    If $$$ISERR(sc) {
        Write $SYSTEM.OBJ.DisplayError(sc)
    }

    Set sc = ##Class(%Net.JSON.JWT).Create(header,,claims,privateJWKS,,.pJWT)
    
    If $$$ISERR(sc) {
        Write $SYSTEM.OBJ.DisplayError(sc)
    }
    
    Write pJWT
    Return sc
}
讨论 (0)1
登录或注册以继续
文章
· 一月 26 阅读大约需 2 分钟

Archivando mis paquetes OEX

Durante los últimos 9 años, he publicado más de 90 paquetes en OEX.
Y durante todo este tiempo, las condiciones y los entornos cambiaron.
Al principio, 

  • no había Docker
  • no había PM/ZPM
  • no había Python embebido, no había AI
  • el Caché, Ensemble, CSP, ZEN, ... dominaban

A medida que pasó el tiempo, también cambiaron las versiones de los productos y los lenguajes externos.
Ajustar unos pocos paquetes no era un problema al principio,
y era una cuestión de calidad de soporte para vuestros “consumidores”.

Con el volumen actual, no veo forma de mantener este objetivo para todos mis paquetes.
Y basándome en las comprobaciones de calidad, tengo la impresión de que no es solo mi problema.
Los cambios recientes causaron suficientes problemas solo con las actualizaciones de versión.

Así que propuse la idea de una etiqueta DEPRECATED para los paquetes de OEX.

Sería justo señalizar a otros usuarios de OEX que no hay intención de hacer ningún mantenimiento de un paquete.

También, como una especie de advertencia, si se usa.

Además, un paquete DEPRECATED debería estar libre para
ser adoptado y re-elaborado, y eventualmente arreglado
por algún otro miembro de la comunidad.

Casi no hubo eco.
De hecho, mi única opción fue retirarlos de la publicación. Unos 90 paquetes en total.
Mucho código que funcionaba bien dejó de estar disponible y que podría ser un ejemplo para principiantes o una fuente de trucos.
Así que cambié de opinión y marqué los paquetes que podrían ser útiles,

 sin mantenimiento ni actualización

Como solución temporal, también estoy usando la función de archivado de GitHub para evitar cambios por accidente.

Así que espero que la mayoría de estos 90 paquetes vuelvan a aparecer con el tiempo.
Y con ellos también todos los comentarios y artículos relacionados.
Lo entiendo como una especie de museo para mostrar lo fácil o complicado que fue el entorno en su momento.
Y sin ignorar los logros pasados.

1 条新评论
讨论 (1)1
登录或注册以继续