Mostrando entradas con la etiqueta Programación. Mostrar todas las entradas
Mostrando entradas con la etiqueta Programación. Mostrar todas las entradas

martes, 3 de junio de 2014

Disponibilizar aplicaciones Windows GDI/GDI+ en la Web

En estos tiempos donde la conectividad remota es un valor agregado interesante para cualquier aplicación, los que estamos en informática desde hace mucho tiempo conocemos la importancia de mantenerlas actualizadas y vivas. Y hay aplicaciones que han dado lo mejor de sí durante años, pero que hoy, con entornos cada vez más heterogéneos y dispositivos impensados hasta hace unos años, quedan relegadas y obsoletas.
Cuando la migración de esas aplicaciones no es posible (porque no se tienen los fuentes, o porque el esfuerzo de reescribirlas es algo que no se puede encarar), encontrar alguna alternativa que disminuya o elimine su obsolescencia es de un valor incalculable.

Dentro de la nueva línea de productos Thinfinity™ y luego de un largo tiempo de investigación y desarrollo, la empresa Cybele Software, Inc. presenta Thinfinity™ Virtual UI, un set de herramientas que permite transformar aplicaciones Windows convencionales de 32 y 64 bits (las típicas aplicaciones desktop) en aplicaciones accesibles desde entornos web.
Lo interesante es que esto se consigue prácticamente sin esfuerzo: sólo hay que agregar la librería correspondiente al programa y recompilar. Así, las aplicaciones pueden ser usadas como siempre y, además, ser accesibles desde cualquier browser, incluyendo dispositivos móviles y permitiéndonos, así, acceder a los beneficios de la virtualización sin el alto costo de instalación de entornos como Citrix XenApp® o Microsoft™ RemoteApp.

El esquema arquitectónico y de conectividad también es bastante simple:

  • Un set de librerías (dlls, fuentes, etc., dependiendo del lenguaje del programa original).
  • Un pequeño servidor http(s)/websockets que hace de enlace entre el browser y la aplicación final.

Lo bueno del enfoque es que acceder a la aplicación es apenas lo primero y básico que se puede conseguir: dado que el cliente es puro javascript (no hay java ni ningún plugin de browser de por medio) con la pericia suficiente las aplicaciones extendidas con Thinfinity™ Virtual UI se pueden integrar en circuitos de información SOA, sitios web ya existentes y cualquier otra combinación que se nos ocurra.

Los requisitos para su funcionamiento no son demasiados, aunque necesita, como entorno de ejecución final, Microsoft Windows 8, Microsoft Windows Server 2012, ó superior. Aquí va el detalle de los requisitos mínimos:

  • Para el desarrollo y pruebas
    • Sistema operativo:
      • Microsoft Windows 7 32­bit / 64­bit 
      • Microsoft Windows 8 32­bit / 64­bit 
      • Microsoft Windows Server 2012 32­bit / 64­bit 
    • Entorno de desarrollo (entre otros):
      • Microsoft Visual Studio
      • Delphi 5 to XE6
      • Microsoft Visual Basic
      • PowerBuilder
  • Servidor:
    • Microsoft Windows 8 32­bit / 64­bit
    • Microsoft Windows Server 2012 32­bit / 64­bit
  • Usuario final:
    • Cualquier browser con soporte HTML5 (todos los estándares del mercado lo soportan) sin importar el sistema operativo ni el tipo de dispositivo.
Para mayor información:

viernes, 20 de febrero de 2009

Cómo obtener los nombres de columna de una tabla en Oracle

Si les pasa lo que me está pasando a mí ahora, que tengo que acceder a una tabla ORACLE a través de un componente que no devuelve los nombres de los campos y no tengo el usuario de conexión ni nada por el estilo, o si por alguna razón necesitan el origen de la tabla, pueden tirar una consulta como la siguiente:

select column_name "Campo", data_type "Tipo de dato",
data_length "Tamaño", nullable "Permite nulos"
from all_tab_columns
where table_name = '[NOMBRE_DE_LA_TABLA]'


donde [NOMBRE_DE_LA_TABLA] se reemplaza por, (je), el nombre de la tabla en mayúsculas y sin los corchetes.

No estoy diciendo nada nuevo, pero lo uso de ayuda memoria, previo googleo.

lunes, 8 de diciembre de 2008

Max y Min en XPath

Antes de que me olvide: como XPath no soporta funciones que devuelvan máximos y mínimos de manera natural, lo que debemos hacer es filtrar los nodos eliminando aquellos que tienen un nodo mayor, antes (preceding-sibling) o después (following-sibling). De esa forma podemos obtener el nodo deseado.

Ejemplo:

Con un XML que contenga...

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="max.xsl"?>
<root>
<nodo id="1">12</nodo>
<nodo id="2">17</nodo>
<nodo id="3">58</nodo>
<nodo id="4">33</nodo>
</root>

y un XSL que diga...

<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="root">
root contiene <xsl:value-of select="count(node())"/> nodos.<br/>
El mayor valor es <xsl:value-of
select="nodo[not(preceding-sibling::nodo &gt; .)
and not(following-sibling::nodo &gt; .)]"/><br/>
El menor valor es <xsl:value-of
select="nodo[not(preceding-sibling::nodo &lt; .)
and not(following-sibling::nodo &lt; .)]"/><br/>
</xsl:template>
</xsl:stylesheet>

... dará como resultado...

Root contiene 4 nodos.
El mayor valor es 58
El menor valor es 12