2009-01-26

SOW: Cómo permitir que desde una página de la intranet se abra un fichero local

A partir de windows XP SP2 el Internet Explorer (y sólo el Internet Explorer, no los controles basados en él, como el que se utiliza en of2k…) considera “Mi PC” como una zona más, que es además más restringida que las otras zonas (intranet local, internet, etc…).

Para permitir la navegación “entre zonas” es necesario cambiar a “0” el valor de la clave 2101 de la zona que corresponda, en nuestro caso la 0. La configuración de las zonas en el registro está en:

HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\CurrentVersion\Internet Settings\Zones

(a continuación copiado de http://support.microsoft.com/kb/182569 )

The Zones key contains keys that represent each security zone that is defined for the computer. By default, the following five zones are defined (numbered zero through four):

Value Setting

------------------------------

0 My Computer

1 Local Intranet Zone

2 Trusted sites Zone

3 Internet Zone

4 Restricted Sites Zone

Note By default, My Computer does not appear in the Zone box on the Security tab.

Each of these keys contains the following DWORD values that represent corresponding settings on the custom Security tab.

Note Unless stated otherwise, each DWORD value is equal to zero, one, or three. Typically, a setting of zero sets a specific action as permitted, a setting of one causes a prompt to appear, and a setting of three prohibits the specific action.

Value Setting

----------------------------------------------------------------------------------

1001 ActiveX controls and plug-ins: Download signed ActiveX controls

1004 ActiveX controls and plug-ins: Download unsigned ActiveX controls

1200 ActiveX controls and plug-ins: Run ActiveX controls and plug-ins

1201 ActiveX controls and plug-ins: Initialize and script ActiveX controls not marked as safe for scripting

1206 Miscellaneous: Allow scripting of Internet Explorer Web browser control ^

1207 Reserved #

1208 ActiveX controls and plug-ins: Allow previously unused ActiveX controls to run without prompt ^

1209 ActiveX controls and plug-ins: Allow Scriptlets

120A ActiveX controls and plug-ins: Display video and animation on a webpage that does not use external media player ^

1400 Scripting: Active scripting

1402 Scripting: Scripting of Java applets

1405 ActiveX controls and plug-ins: Script ActiveX controls marked as safe for scripting

1406 Miscellaneous: Access data sources across domains

1407 Scripting: Allow Programmatic clipboard access

1408 Reserved #

1601 Miscellaneous: Submit non-encrypted form data

1604 Downloads: Font download

1605 Run Java #

1606 Miscellaneous: Userdata persistence ^

1607 Miscellaneous: Navigate sub-frames across different domains

1608 Miscellaneous: Allow META REFRESH * ^

1609 Miscellaneous: Display mixed content *

160A Miscellaneous: Include local directory path when uploading files to a server ^

1800 Miscellaneous: Installation of desktop items

1802 Miscellaneous: Drag and drop or copy and paste files

1803 Downloads: File Download ^

1804 Miscellaneous: Launching programs and files in an IFRAME

1805 Launching programs and files in webview #

1806 Miscellaneous: Launching applications and unsafe files

1807 Reserved ** #

1808 Reserved ** #

1809 Miscellaneous: Use Pop-up Blocker ** ^

180A Reserved #

180B Reserved #

180C Reserved #

180D Reserved #

1A00 User Authentication: Logon

1A02 Allow persistent cookies that are stored on your computer #

1A03 Allow per-session cookies (not stored) #

1A04 Miscellaneous: Don't prompt for client certificate selection when no

certificates or only one certificate exists * ^

1A05 Allow 3rd party persistent cookies *

1A06 Allow 3rd party session cookies *

1A10 Privacy Settings *

1C00 Java permissions #

1E05 Miscellaneous: Software channel permissions

1F00 Reserved ** #

2000 ActiveX controls and plug-ins: Binary and script behaviors

2001 .NET Framework-reliant components: Run components signed with Authenticode

2004 .NET Framework-reliant components: Run components not signed with Authenticode

2100 Miscellaneous: Open files based on content, not file extension ** ^

2101 Miscellaneous: Web sites in less privileged web content zone can navigate into this zone **

2102 Miscellaneous: Allow script initiated windows without size or position constraints ** ^

2103 Scripting: Allow status bar updates via script ^

2104 Miscellaneous: Allow websites to open windows without address or status bars ^

2105 Scripting: Allow websites to prompt for information using scripted windows ^

2200 Downloads: Automatic prompting for file downloads ** ^

2201 ActiveX controls and plug-ins: Automatic prompting for ActiveX controls ** ^

2300 Miscellaneous: Allow web pages to use restricted protocols for active content **

2301 Miscellaneous: Use Phishing Filter ^

2400 .NET Framework: XAML browser applications

2401 .NET Framework: XPS documents

2402 .NET Framework: Loose XAML

2500 Turn on Protected Mode [Vista only setting] #

2600 Enable .NET Framework setup ^

{AEBA21FA-782A-4A90-978D-B72164C80120} First Party Cookie *

{A8A88C49-5EB2-4990-A1A2-0876022C854F} Third Party Cookie *

* indicates an Internet Explorer 6 or later setting

** indicates a Windows XP Service Pack 2 or later setting

# indicates a setting that is not displayed in the user interface in Internet Explorer 7

^ indicates a setting that only has two options, enabled or disabled


2008-07-12

Saludos desde la playa

Acabamos de llegar a Baiona. Algunas fotos recién sacadas:



2008-06-11

Ya estamos en SpringOne


De momento sólo hemos desayunado y estrenado la red wifi del evento. En la foto vemos a Nacho currando ya de mañanita.



Por cierto, lo primero que hemos aprendido es que publicarán todas las presentaciones en la web "Parleys" donde, de hecho, ya hay un montón de presentaciones sobre Java y Spring. La web parece chula...

2008-05-26

ScribeFire - plugin para Firefox

Getting started with ScribeFire - ScribeFire: Fire up your blogging

Muy cómodo este plugin del Firefox, por ejemplo para hacer este post que estás leyendo ahora mismo...

2008-04-07

Ya lo cacé - Problema con WMI

Viva el Wireshark… la clave era husmear en el tráfico TCP porque el error lo estaba devolviendo el clientesow.exe (como es lógico, ya que esto sólo ocurre en esta máquina).

 

La traza es algo así (está entremezclada la petición con la respuesta):

Culture=neutral, PublicKeyToken=f3f121c2e6d50af7............HS:\SOW\DOMI\CI000003x5000\000000000019009\CI000000x5000\000000000000001\.......................4System.Runtime.Remoting.Messaging.LogicalCallContext.....E2ETrace.ActivityID..System.Guid......System.Guid....._a._b._c._d._e._f._g._h._i._j._k.................................`...g.

.NET......>.....

..................A"..........................+System.Runtime.InteropServices.COMException

....ClassName.Message.InnerException.HelpURL.StackTraceString.RemoteStackTraceString.RemoteStackIndex.ExceptionMethod.HResult.Source...........System.Exception.......+System.Runtime.InteropServices.COMException......Clase no registrada

 

.......   at System.Runtime.InteropServices.Marshal.ThrowExceptionForHR(Int32 errorCode, IntPtr errorInfo)

   at System.Management.ManagementScope.InitializeGuts(Object o)

   at System.Management.ManagementScope.Initialize()

   at System.Management.ManagementObject.Initialize(Boolean getObject)

   at System.Management.ManagementBaseObject.get_Properties()

   at caixagalicia.CGAL013.ClienteSOWDistr.ClienteSOW.ObtenerRutaAbsoluta(Int32& codError, String& strError, String rutaRelativa, String& rutaUnidadDeRed, String& directoriosRutaRelativa)

   at System.Runtime.Remoting.Messaging.StackBuilderSink.PrivateProcessMessage(MethodBase mb, Object[] args, Object server, Int32 methodPtr, Boo

lean fExecuteInContext, Object[]& outArgs)

   at System.Runtime.Remoting.Messaging.StackBuilderSink.SyncProcessMessage(IMessage msg, Int32 methodPtr, Boolean fExecuteInContext)

...........8.ThrowExceptionForHR.mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089.System.Runtime.InteropServices.Marshal.Void ThrowExceptionForHR(Int32, IntPtr)T.........mscorlib.....4System.Runtime.Remoting.Messaging.LogicalCal

lContext.....E2ETrace.ActivityID..System.Guid......System.Guid....._a._b._c._d._e._f._g._h._i._j._k.................................`...g.

 

Investigando por internet llegué a la conclusión de que el problema es que está jodido el WMI (a veces pasa), pero no hay problema: Microsoft hace muchas chapuzas, pero luego también hace la herramienta chapuza para arreglar la chapuza primera cuando se jode…

 

En fin: http://windowsxp.mvps.org/repairwmi.htm te lleva a The WMI Diagnosis Utility [microsoft.com]

 

Lo he intentado todo, pero no hay forma, no lo arreglo ni a la de tres.

 

 

 

2008-01-16

llegó la nieve

Hoy ha empezado a nevar en serio. A ver si tenemos suerte y mañana para, porque si no tendremos problemas para marcharnos.

2008-01-13

a 2600 metros

Hoy hemos comido en el punto más alto a 2600 metros. Hacia un aire de la leche.

Estuvimos todo el día esquiando pero hizo sol y se estaba muy bien.

Bicos

2008-01-06

Cómo grabar el audio de ClassicFM.co.uk

Esta emisora de radio emite también por Internet usando un stream de Windows Media Audio embebido en un "reproductor" que es una página web. La verdadera dirección del stream no la podemos ver fácilmente si usamos Internet Explorer, pero usando otros navegadores (u otros sistemas operativos) podemos averiguar que la auténtica dirección del stream es:

http://mediaweb.musicradio.com/Playlist.asx?StreamID=2

Ahora sólo necesitamos algún programa que permita grabar un stream de este tipo; lamentablemente la mayor parte son de pago, sin embargo he podido encontrar uno gratuito que funciona: "Freecorder Toolbar" (http://freecorder.com/freecorder3). Se instala como una barra de herramientas en el internet explorer y trae preconfiguradas algunas emisoras de radio para reproducir y grabar. Como ClassicFM no viene, tenemos que añadirla:

Seleccionamos "add stations"



Y luego "definimos nuestra propia emisora", usando la dirección del stream que averiguamos antes por métodos misteriosos:



por cierto que usando la búsqueda de emisoras también sale un ClassicFM pero no estoy seguro de si es la misma emisora.

Otra cosa: la suite de productos de esta empresa (applian technologies) tiene una pinta estupenda; interesante para comprarla (vía emule o cualquier otra tienda), en concreto Replay AV permite capturar música de cualquier fuente e incluso planificar las capturas...

2007-12-16

Correo y messenger en el mac

Todos los usuarios de mac utilizan Adium para sustituir al messenger y Mail.app (la que viene con Mac OS) para leer el correo. Pues bien, ambos me han dado problemas (problemas tontos, pero problemas) que me ha resultado divertido resolver.

Adium

Adium es estupendo; se conecta con MSN, GTalk, etc... y es una verdadera aplicación Mac, con una estética impecable y gran facilidad de uso. Lamentablemente también tiene fallos: si no es capaz de conectarse en el arranque da un error. A mi esto me pasa con frecuencia: si cierro la tapa del mac, y luego la vuelvo a abrir pasa un rato hasta que el wifi se conecta, y entonces Adium se queja. El icono empieza a botar, alertas en el escritorio, mensaje de error y, lo peor de todo: no reintenta la conexión por si solo. Así que empecé a investigar un poco y encontré el siguiente script:

if appisrunning("Adium") then
    tell application "Adium"
        repeat with acc in accounts
            connect acc
        end repeat
    end tell
end if

on appisrunning(appName)
    tell application "System Events" to (name of processes) contains appName
end appisrunning

Lo pegué en el editor de scripts y luego generé una aplicación (adium_reconnect.app). Lo que no me gustaba de esta aplicación es que si la ejecutaba, el icono aparecía brevemente en el dock (un poco molesto) así que encontré una utilidad para transformarla en aplicación background. Se llama Drop Script Backgrounder, con lo que el script me quedó perfecto.

Finalmente quedaba conseguir que el script se ejecutase cada 5 minutos por sí solo. Existen diversas formas en el mac de crear una tarea programada (con el propio calendario es la más sencilla) pero escogí usar cron; el fichero se modifica usando el comando "crontab -e"

# min   hour    mday    month   wday    command
*/5 * * * * open /Applications/Internet/Adium_reconnect.app >> /dev/null #2>&1 

Ya está todo listo. El último detalle sería ir a las preferencias de Adium y eliminar los avisos para el caso de que se produzca algún error.

Un último detalle: los chicos de Adium afirman que en la próxima versión este problemilla estará solucionado.

Correo

Encuentro a Mail.app excesivamente sencilla. Insertar un hipervínculo es un poco rollo; insertar una imagen... no sé dónde está. Insertar una tabla... más bien imposible. Así que mi consejo es usar Thunderbird, que es open source y mucho más pontente PERO: ¿se integra con la libreta de direciones del mac? pues no, al menos no en la versión que se puede encontrar en la web de Thunderbird. Sin embargo en la próxima versión, la 3.0, sí habrá esta integración, y hay quien se la ha incorporado ya a la versión actual: http://forums.mozillazine.org/viewtopic.php?p=3003235


2007-10-17

Zero mail inbox

Voy a intentar recoger las ideas del método Inbox Zero de Merlin Mann que me han parecido más interesantes. Hay una presentación en vídeo del método completo en http://video.google.com/videoplay?docid=973149761529535925&hl=en pero ojo, que dura una hora.

  - Usar plantillas para correos que se suelen repetir
  - Admitir "no lo sé" a veces es lo mejor
  - Borrar, borrar, borrar

2. Si no vas a hacer nada con un mensaje,

  - 2 minutos de cada 20 para revisión y respuestas super-rápidas y ultra-críticas
  - 10 minutos de cada 90 para responder cosas no críticas
  - 2 minutos de cada hora y 15 al final de la jornada para procesar los mensajes, y enviarlos a 
    · tareas para mí o para otro
    · reuniones en el calendario
    · respuesta rápida
  - un par de veces a la semana: revisar las reglas, las carpetas, etc...
El resto del tiempo: el outlook está cerrado. Esto es sólo un ejemplo, claro. La práctica lleva a la perfección. 

  - ¿me importa para algo este mensaje?
  - ¿qué me implica hacer a mí?
  - ¿de qué forma puedo cerrar el tema?

5. Procesa todos los mensajes hasta que no quede ninguno
esto no significa responderlos todos ahora, significa procesarlos. 

6. Finalmente: la bandeja de entrada nunca llega a estar realmente a cero; pero es el ideal, el objetivo último. Estos son unos pequeños trucos para mantener la bandeja vacía:
 - No te mates en el sistema de archivo: una gran carpeta "archivo" suele ser suficiente
 - Responde ahora o nunca
 - No estés todo el tiempo con el outlook, no es productivo. Tu tiempo es importante, valóralo como se merece.

2007-10-10

Conferencia sobre UBL

 

UBL: Universal Business Language; estándar OASIS

·         Diccionario de datos normalizado

·         Definiciones estándar de las palabras clave

·         Extensible de varias formas

Caso práctico de integración de procesos de negocio usando UBL 2.0; gobierno danés

·         ¿Qué cubre UBL?

o       “Sourcing” (catálogo, precios, etc…)

o       “Pedidos” (pedido, respuesta a pedido, cambio de pedido, etc…)

o       “Fulfillment” (albarán, certificado de origen, recibo de entrega, …)

o       “Facturación”

·         Novedad en UBL 2.0: “Profiles”. Especifican el acuerdo acerca de qué se va a intercambiar; la diferencia con EDI es que no hay que firmar acuerdos en papel

o       El perfil se escoge de entre los posibles ofrecidos por el receptor de la transacción, en un registro común

Proyecto CODICE: Dirección General del Patrimonio. COmponents y DOcumentos Interoperables para la Contratación Electrónica

·         Objetivo: mercado europeo de e-Procurement sin problemas de interoperabilidad

o       Directiva europea 2004/18/EC y futura ley de contratación pública “ley de contratos del sector público”

o       Inspirado por el proyecto de EU IDABC (documento de requisitos), además de los estándares

§         ISO 15000 ebXML Core Components Technical Specifications

§         UBL

·         Librería de documentos definidos a partir de sus componentes, que se buscan y encuentran en UBL, y a partir de los procesos que forman parte de la contratación pública.

·         Librería de componentes que son una extensión de la librería UBL

·         Todo disponible en www.meh.esd

DocOnTime: Implementación de factura electronica en las empresas

·         Problema: formato de las facturas

o       Propietarios

o       Nacionales (el de la AEAT no tiene aspiración de trascender fronteras)

o       Internacionales: UBL, ojo que tiene problemas de semántica e interpretación

Future of UBL (Port Community Systems, Australia – miembro OASIS)

·         No hay previsión de ninguna nueva versión, únicamente revisiones menores

·         XML (CBL) + EDI (Edifact, X12) = ebXML

·         ebXML + XCBL = UBL

·         UN/CEFACT apoya UBL 2.0, pero producirá su propio conjunto de esquemas xml en los próximos años, que podrán derivar del actual UBL

·         La librería UBL y la UN/CEFACT Core Component Library se alinearán en 2008, es decir, se definirá y mantendrá la relación entre ambas bibliotecas de componentes “core”

Integración entre UBL y CCI-AEAT (Fundetec)

·         2010: Toda la administración debería estar preparada para recibir factura electrónica

·         CCI-XML es el único formato aceptado legalmente por la admon.

·         La factura electrónica tiene que estar firmada digitalmente; existe disparidad en formatos y autoridades certificadoras

·         Soluciones:

o       Se desarrollará la correspondencia CCI-UBL

o       Se desarrollará un directorio de empresas que aceptan factura electrónica y en qué formato, mantenido por el ministerio de industria y accesible vía WS o web

o       El DNI electrónico se implantará en 2 años

o       Desarrollo de librerías open-source para facilitar la integración en software existente de estos formatos

El papel de las entidades financieras en la adopción de e-factura (Eurobits)

·         Eurobits

o       Eurobits fue creada por Caja Madrid y Bankinter

o       Suministra servicios de factura electrónica, agregación de cuentas, … via web-services

·         El papel de los bancos

o       Pueden abstraer a sus clientes de las complejidades tecnológicas

o       Pueden absorber el coste porque pueden obtener beneficios por otro lado

o       La relación entre el banco y sus clientes (proveedores y consumidores) no es trivial, está próxima al negocio

o       Los bancos están acostumbrados a integrarse con los sistemas de pago de diversas empresas

·         Retos

o       Interoperabilidad

o       Promoción de estándares abiertos

 

 

2007-05-12

Acerca de SOA

En InfoQ hay una presentación sobre SOA que dio un tal Gregor Hohpe, arquitecto en Google, en JavaZone; unas conferencias organizados por un grupo noruego de programadores de Java.

Este ser humano es, por cierto, el autor de "Enterprise Integration Patterns" y tiene un artículo muy simpático llamado "Your Coffee Shop Does Not Use Two-Phase Commit" que salío publicado el año pasado en la revista Software de IEEE en el que explica que un sistema que tiene que tener gran capacidad tiene que abandonar cosas como el 2pc por el camino.

Resumo los puntos que me parecieron interesantes de su presentación:

1. ¿Qué es SOA?
  • Es un estilo de arquitectura, en el que las interacciones entre sistemas están orientadas a documentos es decir, están autocontenidas en un alto grado
  • Bajo nivel de acoplamiento, se puede cambiar un servicio internamente sin que los consumidores del servicio se enteren
  • Las interfaces están claramente especificadas
2. ¿Cómo hemos llegado hasta aquí?
Principalmente en los sistemas distribuidos el objetivo hasta ahora, en arquitecturas previas, era ocultar la complejidad al desarrollador; es decir: el código remoto es exactamente igual que el código local. Este enfoque ignora:
  • latencia de la red
  • redes desconectadas intermitentemente
  • inexistencia de referencias (punteros)
  • alto acoplamiento entre sistemas
En muchos sistemas actuales, altamente distribuidos y con muy grandes requerimientos de rendimiento estos problemas existen, y mucho. Si ocultamos el hecho de que los sistemas están distribuidos al desarrollador el resultado puede ser que el sistema resultante no sea todo lo escalable que deseamos.

Así surgió la "orientación a servicios"; no existen interacciones complejas (polimorfismo, referencias, etc...) sino interacciones simples, autocontenidas, basadas en un documento que normalmente es XML y, más apropiadas para ser asíncronas.

3. ¿Cómo está la situación ahora?
El hecho es que este es un nuevo modelo de programación; y las herramientas actuales son bastante primitivas todavía. Está por ver si llegan a ser como las que tenemos para los lenguajes tradicionales. Es cierto que aparentemente se puede programar gráficamente un proceso de negocio y demás pero... ¿cómo se buscan las diferencias entre este proceso y su versión anterior? ¿hay algo similar a diff o merge para los diagramas? y si, quizás no haya que programar mucho hasta que hay que hacer algo "avanzado", en ese momento ya hay que programar y, de todas maneras, programar gráficamente puede ser algo bastante complicado.


Es interesante también el artículo "Developing in a SOA World", que contiene la mayor parte de las ideas de la presentación.

2006-11-30

WS-AT en .Net framework v3

WS-AT forma parte de “Windows Communication Foundation” (WCF). Por lo visto el soporte de WS-AT debe habilitarse y configurarse en Windows. Para ello hay un panelito que explican en http://blogs.msdn.com/distilled/archive/2006/05/15/598257.aspx

La documentación sobre “Windows Communication Foundation” está en http://msdn2.microsoft.com/en-us/library/aa388579.aspx y, en concreto, la parte en la que hablan de ws-at es http://msdn2.microsoft.com/en-us/library/ms729784.aspx

Al parecer, crear un “servicio” con este nuevo modelo de programación es algo tan sencillo como esto:

El código:

using System;
using System.Collections.Generic;
using System.Text;
using System.ServiceModel;
using System.ServiceModel.Description;

[ServiceContract]
public interface IEcho
{
[OperationContract]
string Echo(string s);
}

public class MyService : IEcho
{
public string Echo(string s)
{
return s;
}
}

class Program
{
static void Main(string[] args)
{
string baseAddress = "http://localhost:8080/wcfselfhost/";
ServiceHost host = new ServiceHost(typeof(MyService), new Uri(baseAddress));

// Create a BasicHttpBinding instance
BasicHttpBinding binding = new BasicHttpBinding();

// Add a service endpoint using the created binding
host.AddServiceEndpoint(typeof(IEcho), binding, "echo1");

host.Open();
Console.WriteLine("Service listening on {0} . . .", baseAddress);
Console.ReadLine();
host.Close();
}
}

La configuración (web.config o app.config)

<configuration>
<system.serviceModel>
<services>
<service name="MyService" behaviorConfiguration="HttpGetMetadata">
<endpoint address="echo2" contract="IEcho" binding="basicHttpBinding" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="HttpGetMetadata">
<serviceMetadata httpGetEnabled="true" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>

Por cierto, MS ha tenido la amabilidad de desarrollar unas “Visual Studio 2005 extensions for .Net framework 3.0” que supongo que facilitarán el desarrollo de estos “servicios”

2006-09-28

Miranda IM para Jabber

Miranda es un cliente de IM muy potente. Se puede conectar con AIM, ICQ, MSN, Yahoo, etc... pero en este caso me interesa como cliente de Jabber porque, además, se integra perfectamente con DesktopSidebar (al contrario que PSI).

Para instalarlo no hay más que bajarlo de www.miranda-im.org, desactivar todos los plugins que no usemos (AIM, ICQ...) y configurar la cuenta jabber.

Lo único que eché de menos después es la posibilidad de que me avisase sin incordiar de que hay mensajes nuevos (el típico aviso no-obtrusivo). Para ello hay que instalar dos plugins:
  • Message Notify es el plugin que "genera los eventos"
  • Popup Plus es el plugin que, cuando se produce un evento, muestra unos bonitos mensajitos emergentes
Si hay que criticarle algo, es que su diseño es demasiado modular. Mira que haber un plugin para generar eventos, y otro para tratarlos... demasiao

2006-08-07

Features Provided by System.Transactions

Features Provided by System.Transactions

¿no deberíamos echarle un ojo a esto? ¿incluye a los Enterprise Services?

2006-06-19

la burrocracia

por fin he conseguido enterarme de cómo va esto, aunque me ha costado, lo reconozco: 
 
Cómo dar de alta transacciones
Lo mejor es conectarse al cics (CICS1P) y ejecutar el siguiente comando: "cemt i tran inq(cg*)". Eso nos mostrará todas las transacciones CG* y a qué programa llaman. Si la aplicación sigue alguna lógica en la relación programa-transacción, intentamos mantenerla. Si ya la ha perdido, pues buscamos una libre y punto. Ojo, que la serie 90 (CG90, CG91, NC90, NC91,...) están reservadas para los "procesos online".
 
Una vez tengamos claro el código que queremos para nuestra transacción (NC83) y el programa mandamos un correo a "CPD Aplicaciones Desarrollo" solicitando el alta e indicando el programa asociado y, uno o dos días después, nos contestarán algo.
 
 
Cómo dar de alta planes (y tablas)
Para incluir programas en el plan de una transacción, hay que saber lo siguiente: todas las transacciones tienen un plan (para la CG01, es el CG01PLAN, y así...) que se pueden consultar (pero no modificar) con el panelito de los planes. Los programas involucrados en una transacción (si no me equivoco) tienen que estar incluidos en su plan.
 
En fin, para solicitar que nos añadan programas al plan de una transacción usaremos la dirección "CPD Aceptacion Aplicaciones".
 
En pruebas no hay problema, vosotros mismos podéis solicitar todas estas cosas, pero... ¡ojo! luego hay que hacer lo mismo para explotación, apuntadlo todo religiosamente en algún sitio, preferiblemente adjunto a los "documentos del proyecto".
 
Un saludo

2006-06-17

Visita a microsoft


Visita a microsoft, originally uploaded by sanchon.

El jueves hicimos una visita a los chicos de microsoft en su sede de madrid. La visita fue bastante provechosa.

2006-06-13

Un wiki para llevar puesto

Hoy he encontrado algo que me ha dejado atonito: un wiki que consiste en un único fichero html que puedes llevarte a donde quieras: Tiddly Wiki. De hecho hay bastante afición y ya he visto varias variantes:
El truco es que toda la programación está en realidad embebida en el propio HTML en Javascript. ¡Técnicamente brillante!. Si quieres uno vacío bájatelo de aquí (dándole a "guardar destino como..." del fichero TiddlyWikiVacio.html), porque lo que necesitas es guardarte en tu disco el fichero html.

De cualquier manera en las webs anteriores explican cómo usarlo. Teniendo esto... ¿para qué quieres el Word? Si lo piensas, esto equivale a tener ¡¡el propio word incluido en el documento!!!

2006-05-22

The LINQ Project

Parece que el LINQ Project va más allá de únicamente suministrar capacidad de querys a los lenguajes .net, además hay dos partes de este proyecto (DLINQ y XLINQ) encaminadas a ayudar a resolver los problemas de "mapping" entre el modelo relacional (SQL), el jerárquico (XML) y los lenguajes orientados a objetos, respectivamente.

Sobre el O/R Mapping, nada nuevo: igual que Java 5 EE, la "solución" pasa por decorar los atributos y métodos con la información necesaria para hacer la correspondencia (véase DLinq Overview.doc)

2006-04-05

O/R Mapping: recapitulemos

Estamos en unos momentos importantes: tenemos la oportunidad de definir la forma en la que se van a programar las aplicaciones del futuro. Es conveniente que veamos el state-of-the-art de uno de los principales problemas para programar con orientación a objetos: el trabajo con bases de datos relacionales.

Desde la wikipedia (buen artículo, con decenas de enlaces) he llegado a un artículo que realmente explica en detalle el tema: Mapping Objects to Relational Databases: O/R Mapping In Detail .

Ahora es un poco tarde, pero el fin de semana me lo voy a leer para ver si en el ECC faltan cosas importantes. Además la wikipedia ofrece un montón de enlaces por los que aún no he podido navegar...

2006-03-24

Java Expo

[update] Acabo de encontrar las presentaciones

Tino y yo estamos recién llegados de la Java Expo en Madrid. A continuación resumo mis notas de estos tres días:

NetBeans


Con diferencia el producto más publicitado; se nota que el evento estaba dirigido a programadores y que se la herramienta se la han currado bastante.

  • Ajax: presente en varios componentes de interfaz de usuario web del netbeans. Recomiendan además usar algún toolkit como Dojo aunque no uses netbeans


  • BPEL: El estándar actual es WS-BPEL 2.0 (Oasis). Permite diseñar los procesos de negocio gráficamente y por detrás la herramienta mantiene el BPEL


  • Web: Soporta Struts y WSF en la versión 5.0, que son los frameworks más usados para desarrollo de páginas JSP. Pensados para que se siga el patrón Model-View-Controller. El más reciente es JSF (Java Server Faces) por cierto


  • Plugins: Es totalmente extensible y modular. Se pueden encontrar plugins de todo tipo en netbeans.org, nbextras.org y en blogs.sun.com/scblog o este otro blog.

  • Otras virguerías: (algunas son packs que hay que instalar) Profiling, UML sincronizado con el código, editor de aplicaciones Swing (Matisse) muy mejorado, muchos refactorings, utilidades de colaboración y trabajo en grupo, prueba unitaria con JUnit, los proyectos son archivos ANT para permitir fácilmente la integración continua....


Java 5


Se enfoca sobre todo en la facilidad de desarrollo, ya que J2EE 1.4 obliga a conocer muchas APIs y ficheros de configuración y deployment.

  • Es más facil desarrollar: APIs más sencillas, anotaciones y uso de POJO (Plain Old Java Objects)

  • O/R Mapping: gracias al uso de anotaciones es posible especificar en el código la información suficinente para que un EJB sea persistente en una b.d. relacional

  • Web-Services: también simplificados gracias a las anotaciones



Glassfish


Es el servidor de aplicaciones gratuito que implementa Java EE 5.0. Consúltese The Aquarium


Preguntas


  • El nuevo servidor de aplicaciones GlassFish de Sun, es gratis, pero... ¿es posible usarlo en producción o daría algún problema?

  • ¿cómo gana dinero Sun, si todos sus productos son gratuitos y open source?


Fotos


21-03-06_123221-03-06_1231


2006-03-11

Prueba de video en YouTube

Probando los vídeos de YouTube...

2006-02-23

abrir un fichero con process start

Primero lo intentamos abrir con "Process.Start", y luego usamos el handle que devuelve para poner la ventana delante. El problema es que si la aplicación ya estaba abierta, no devuelve nada así que lo que hacemos es buscar una ventana en cuyo título aparezca el fichero que queremos abrir...


using System;
using System.Diagnostics;
using System.Runtime.InteropServices;

namespace cancelarConexiondeRed
{
        /// <summary>
        /// Descripción breve de Class1.
        /// </summary>
        class Class1
        {



                [DllImport("user32.dll", EntryPoint = "SetWindowPos")]
                public static extern bool SetWindowPos(
                        IntPtr hWnd,               // window handle
                        IntPtr hWndInsertAfter,    // placement-order handle
                        int X,                  // horizontal position
                        int Y,                  // vertical position
                        int cx,                 // width
                        int cy,                 // height
                        uint uFlags);           // window positioning flags

                public const int HWND_TOP            = 0x0;
                public const int HWND_TOPMOST    = -1;
                public const int HWND_BOTTOM     = 0x1;
                public const uint SWP_NOSIZE     = 0x1;
                public const uint SWP_NOMOVE     = 0x2;
                public const uint SWP_SHOWWINDOW = 0x40;


               
                [DllImport("user32.dll")]
                static extern IntPtr SetActiveWindow(IntPtr hWnd);
                [DllImport("user32.dll", SetLastError=true)]
                static extern void SwitchToThisWindow(IntPtr hWnd, bool fAltTab);

                [STAThread]
                static void Main(string[] args)
                {
                        Process ventana = Process.Start(@"u:\teclas.txt");
                        Console.ReadLine();
                        if (ventana!=null)
                                SwitchToThisWindow(ventana.MainWindowHandle, true);
                        else
                        {

                                Process[] myProcesses = Process.GetProcesses();
                                foreach(Process myProcess in myProcesses)
                                {
                                        if (myProcess.MainWindowTitle.IndexOf(@"u:\teclas.txt") != -1)
                                        {
                                                SwitchToThisWindow(myProcess.MainWindowHandle, true);
                                                break;
                                        }
                               
                                }
                        }
                }

        }


2006-02-22

Mejoras de seguridad en Service Pack 2

Sólo por poneros al tanto de lo que llevo investigado esta mañana. A ver qué nos cuentan los de Microsoft...
- "Mi PC" ahora es una nueva zona, y tiene mayores restricciones de seguridad aún que la zona de internet, es decir: una página HTML que se abra desde c:\ no podrá hacer prácticamente nada. Hasta ahora esto no era así, y los hackers buscaban agujeros del windows o del explorer que dieran acceso a la zona de Mi PC para desde ahí hacer sus guarrerías. Microsoft, en vez de preocuparse por arreglar los agujeros de windows o del explorer, lo que hace es convertir la zona en super-restringida y punto. No es mala idea: para evitar los virus podrían hacer lo mismo e impedir la ejecución de ficheros .exe en windows.
- Por otra parte hay una opción de seguridad que tienen todas las zonas (la opción 2101, "Zone elevation") que impide que desde otra zona se haga link a esta. La opción es "Zone elevation" y la tiene la zona de "intranet local" para impedir que, por ejemplo, desde un web de internet se pueda hacer link a una página de la intranet. La zona de Mi PC, como esta restringidísima también tiene activa esta opción: es una zona más y tiene restringido el hacer link a ella desde las demás.
- La zona de Mi PC no está accesible en las opciones de seguridad del Explorer; pero hay una clave del registro que la haría visible (http://www.phdcc.com/xpsp2.htm)
En resumen: ¿es peligroso activar la opción 2101 en la zona de mi pc? esa opción lo único que impide es la "zone elevation", es decir, el poder hacer link a una página local desde otra que no es local; todas las otras opciones de seguridad que ahora tiene la zona de mi PC seguirían activas (nada de scripts, nada de activex, nada de nada). Creo que no es peligroso a menos que haya algún otro agujero de seguridad, de la misma forma que la habilidad de windows para ejecutar programas exe no es peligrosa a menos que haya algún otro agujero que permita a alguien meter un exe no deseado en la máquina... Es cierto que desde una web maliciosa se podría abrir o hacer link a un contenido que resida en mi pc, pero me lo abriría a mí; de ahí a que alguien "de fuera" pueda acceder entiendo que hay una gran diferencia.
Lo dicho, esperaremos a que los de microsoft digan algo y ya veremos. Un saludo

prueba

Esto es una prueba:

2006-02-15

copiar ficheros en plan guay...

Bueno chicos, un amable señor del msdn magazine se ha dignado implementar en .net una llamada elegante a la función de windows CopyFileEx. La cosa no es fácil porque la función es ultra-guay: tiene para reanudar la copia desde donde falló y permite pasarle una función de callback a la que ella llama para informar del progreso de la copia (que nosotros no vamos a usar, pero molar, mola) y otras tremendas opciones.

Me he hecho una aplicacioncita de consola que va copiando un fichero e imprimiendo el progreso y la verdad es que mola; sería algo así:

class Class1
{

[STAThread]
static void Main(string[] args)
{
FileRoutines.CopyFile(new FileInfo(@"U:\Correo\P5567backup.pst"),

new FileInfo(@"\\vclsfls1\rpos\RPOS103\prueba\P5567.pst"),
CopyFileOptions.Restartable,
new CopyFileCallback(ActualizarProgresoDeCopia)); //este nosotros no lo usaremos, aunque mola!
}



public static CopyFileCallbackAction ActualizarProgresoDeCopia(FileInfo source, FileInfo destination, object state, long totalFileSize, long totalBytesTransferred)
{
Console.WriteLine("Bytes copiados: " + totalBytesTransferred.ToString());
return CopyFileCallbackAction.Continue;
}


}

He comprobado que, efectivamente, si lo cortas a la mitad (paras el programa) y luego simplemente vuelves a intentar la copia, el proceso continúa desde donde lo dejó.

Ahí va la clase "FileRoutines", muy elegantemente implementada...


public sealed class FileRoutines
{
public static void CopyFile(FileInfo source, FileInfo destination)
{
CopyFile(source, destination, CopyFileOptions.None);
}


public static void CopyFile(FileInfo source, FileInfo destination, CopyFileOptions options)
{
CopyFile(source, destination, options, null);
}


public static void CopyFile(FileInfo source, FileInfo destination, CopyFileOptions options, CopyFileCallback callback)
{
CopyFile(source, destination, options, callback, null);
}


public static void CopyFile(FileInfo source, FileInfo destination, CopyFileOptions options, CopyFileCallback callback, object state)
{
if (source == null) throw new ArgumentNullException("source");
if (destination == null)
throw new ArgumentNullException("destination");
if ((options & ~CopyFileOptions.All) != 0)
throw new ArgumentOutOfRangeException("options");


new FileIOPermission(FileIOPermissionAccess.Read, source.FullName).Demand();
new FileIOPermission(FileIOPermissionAccess.Write, destination.FullName).Demand();


CopyProgressRoutine cpr = callback == null ? null : new CopyProgressRoutine(new CopyProgressData(source, destination, callback, state).CallbackHandler);

bool cancel = false;
if (!CopyFileEx(source.FullName, destination.FullName, cpr, IntPtr.Zero, ref cancel, (int)options))
{
throw new IOException(new Win32Exception().Message);
}
}


private class CopyProgressData
{
private FileInfo _source = null;
private FileInfo _destination = null;
private CopyFileCallback _callback = null;
private object _state = null;


public CopyProgressData(FileInfo source, FileInfo destination, CopyFileCallback callback, object state)
{
_source = source;
_destination = destination;
_callback = callback;
_state = state;
}


public int CallbackHandler(
long totalFileSize, long totalBytesTransferred,
long streamSize, long streamBytesTransferred,
int streamNumber, int callbackReason,
IntPtr sourceFile, IntPtr destinationFile, IntPtr data)
{
return (int)_callback(_source, _destination, _state, totalFileSize, totalBytesTransferred);
}
}


private delegate int CopyProgressRoutine(
long totalFileSize, long TotalBytesTransferred, long streamSize,
long streamBytesTransferred, int streamNumber, int callbackReason,
IntPtr sourceFile, IntPtr destinationFile, IntPtr data);

[SuppressUnmanagedCodeSecurity]
[DllImport("Kernel32.dll", CharSet=CharSet.Auto, SetLastError=true)]
private static extern bool CopyFileEx(
string lpExistingFileName, string lpNewFileName,
CopyProgressRoutine lpProgressRoutine,
IntPtr lpData, ref bool pbCancel, int dwCopyFlags);
}


public delegate CopyFileCallbackAction CopyFileCallback(FileInfo source, FileInfo destination, object state, long totalFileSize, long totalBytesTransferred);

public enum CopyFileCallbackAction
{
Continue = 0,
Cancel = 1,
Stop = 2,
Quiet = 3
}


[Flags]
public enum CopyFileOptions
{
None = 0x0,
FailIfDestinationExists = 0x1,
Restartable = 0x2,
AllowDecryptedDestination = 0x8,
All = FailIfDestinationExists Restartable AllowDecryptedDestination
}


}

2006-02-09

Para leer: Novedades de .net

Dos artículos del msdn para ir entrando en detalle en las novedades de c# y del .net framekork 2.0:

2006-01-19

FREE PDF Reader for Everyday Use

FoxIt Reader es rápido, pequeño, no requiere instalación... ¡que le den al adobe acrobat reader! yo ya me he cambiado

2006-01-18

MSDN .NET Framework Developer Center: The LINQ Project

Este es el tremendo artículo (espeso como él solo) de las grandes mentes pensantes de Microsoft sobre las nuevas características del c# 3.0. La coña es la cantidad nueva de inventos que hay que meterle al lenguaje (lambda-expresiones, bla, bla...) para poder integrar una especie de SQL en él.

2005-12-15

Me gusta mi teclado...

...y muchas veces en windows no queda más remedio que usar el ratón. Un par de veces está bien, pero para cosas repetitivas te acabas cansando.

Ya hace tiempo que vengo usando slickrun como sustituto de "Inicio - ejecutar..." porque me permite definir mis propios comandos rápidos (por ejemplo, tengo un comando proy que abre directamente el proyecto CGDN+ que se le pase como parámetro).

Hoy he descubierto qliner hotkeys, que es la forma más fácil que he visto nunca de tener combinaciones de teclas asignadas a programas o acciones. Te pinta un teclado en la pantalla al darle durante más de 3 segundos a la tecla "win", y permite asignar accesos directos (outlook, explorer, mis documentos) a combinaciones de la tecla "win". Super guay.

2005-12-12

Tendencias en desarrollo de software

Resumen del artículo de Infoworld.com sobre tendencias en desarrollo de aplicaciones.

Plataformas y lenguajes:
-
Windows y Linux siguen dominando como plataformas
- Unix (open o mainframe) cede terreno ante Linux
- Los lenguajes que crecen en popularidad (Java, C#, VB.net, Python y Ruby) tienen en común que están orientados a objetos y que corren en entornos "gestionados" (máquinas virtuales), con características que los hacen más sencillos (garbage-collection, ausencia de punteros...)
- C y C++ se ven constantementes desplazados por Java y, más recientemente, C#

Métodos y técnicas de desarrollo
- El modelado (de datos y procesos) está encontrando uso en la práctica, más allá del entorno académico al que se restringía hasta hace poco
- Las herramientas y técnicas de prueba también están empezandose a adoptar de forma generalizada, aunque aún queda un largo camino

Tendencias
- Open source está ganando una gran importancia (Eclipse), aunque Microsoft dada su posición dominante no está en absoluto amenazada
- De las tecnologías más recientes, únicamente los web-services han satisfecho las expectativas de adopción por parte de la comunidad de desarrollo

Ajax - ¿qué hay de nuevo?

Ya hace tiempo encontré alguna librería para hacer aplicaciones AJAX de forma sencilla (no "a lo macho" que es como lo hacemos nosotros en CGDN+). ¿Cómo está la situación hoy? Vayamos por partes...

¿Qué es AJAX? en la wikipedia viene una serie de definiciones y ejemplos; básicamente se trata de cargar partes de una página dinámicamente usando ciertas funciones javascript disponibles desde IE5.5 (XMLHttpRequest). Eso permite a un programador ingenioso hacer aplicaciones web más amigables, ya que simulan funcionar como una aplicación pc clásica (véase gmail, flickr, etc...)

¿Qué tenemos hoy en día para programar con AJAX sin necesitar a un super-experto en programación? pues, aunque aún es software beta; microsoft tiene preparado "Atlas", un conjunto de librerías y utilidades (pensadas, como no, para ASP.NET 2.0) que permiten (en teoría) diseñar una interfaz de usuario a base de drag and drop con toda la potencia del AJAX.

Para el que quiera profundizar...

2005-10-19

SlickUpload: Subir ficheros indicando el progreso

Impresionante, si conseguimos saber cómo funciona... una solución que ya he visto es esta otra
pero realmente no muestra el progreso de subida, sino el progreso del almacenamiento en disco... parece que SlickUpload sí muestra el verdadero progreso.

Seguiremos investigando.

2005-09-26

El misterio de los add-ins de Office, resuelto

Gracias a esta herramienta, he podido averiguar cómo funcionan los add-ins de Visio por fin. Resulta que un add-in no es más que una dll COM normal, registrada en la máquina (que implemente cierta interfaz, pero eso ahora no importa).

Para que Visio sepa qué add-ins hay y demás hay una rama del registro concreta en la que se almacenan simplemente sus nombres, y la forma de carga. Ahí va un ejemplo:



[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Visio\Addins\VisioAddIn.Connect]
"Description"="Cliente para Visio RPOS"
"FriendlyName"="Cliente Visio RPOS"
"LoadBehavior"=dword:00000003



La clave es el "LoadBehavior", que indica si deshabilitar o no el add-in. En nuestro caso necesitamos un 3.