2010-07-23
2009-12-23
utilidades mac
Las verdaderamente imporantes son gratuitas:
Internet:
- Adium: mensajeria instantánea (compatible con MS Messenger, GTalk, etc...) gratuito. Muy recomendable acompañarlo de Growl
- NetNewsWire: noticias vía RSS: se sincroniza automáticamente con Google Reader
- El Safari no lo soporté hasta que le metí:
- Evernote: para anotar cosas: se sincroniza con cualquier cosa (incluyendo móviles)
El programa de correo que trae (mail) es suficiente para un uso básico. Si usas mucho el correo yo probaría el Thunderbird.
Por supuesto, Firefox también es una buena opción como navegador, pero yo al final me he quedado con el Safari “tuneado”
Multimedia
- Seashore: a veces hace falta un pequeño editor de imágenes, tipo "paint".
- VLC: reproduce cualquier cosa (audio vídeo, etc...) y para un portátil es ideal. Para un uso del PC como “media center” yo uso PLEX, que es una maravilla.
- Perian: plug-in para el Quicktime para que reproduzca divx, xvid, etc...
Utilidades
- iStatPro: es un "widget" del "dashboard" que te permite ver datos del sistema: uso de cpu, memoria, estado de la batería, etc...
2009-11-09
Macros para Outlook: nueva versión y sourceforge
- si el correo no tiene categorías, se le piden al usuario y si ya tiene no
- las categorías que tenga un correo se añaden al asunto del mismo al archivarlo (por si se pierden en algún momento, por ejemplo Vaults y cosas de esas...)
- el código esta un poquillo mejor estructurado, pero sigue siendo chapucero
Lo que mola es que lo he licenciado con GPLv3 y lo he dado de alta en SourceForge, para probar un poco el sistema. Tiene buena pinta; así de gratis te dan:
- subversion
- servidor de ficheros (para que la gente se descargue el proyecto)
- foros
- aplicación de incidencias y solicitudes
- gestión de usuarios
- página web en la que puedes poner lo que quieras
Estupendo. Por cierto, el "proyecto" es este:
https://sourceforge.net/projects/macrosdeoutlook/
http://macrosdeoutlook.sourceforge.net/
2009-08-06
2009-06-29
Yo también tuve un Walkman
Jeje... tampoco era tan grande:


2009-05-04
Funciones útiles para el Outlook (GTD)
- "al archivo" --> mueve el correo a la carpeta de archivo
- "ahora no" --> mueve el correo a la carpeta de "pendiente" y crea una tarea relacionada
- "a la espera" --> mueve el correo a la carpeta de "a la espera" prefijando el asunto con el nombre de la persona por la que esperamos
Attribute VB_Name = "Módulo1"
' ****************************
' ****************************
' ** Botones **
' ****************************
' ****************************
Public Sub ArchivarMensaje()
MoverMensajeSeleccionado "Carpetas Personales\Archivo\Proyectos", False
End Sub
Public Sub AhoraNo()
'MoverMensajeSeleccionado "Carpetas Personales\01 Pendiente", True
CrearTareaAPartirDeCorreo ("Carpetas Personales\01 Pendiente")
End Sub
Public Sub ALaEspera()
Dim esperandoPor As String
esperandoPor = InputBox("¿esperando por quién?", "Por quien espera este tema?")
MoverMensajeSeleccionado "Carpetas Personales\02 A la espera", True, "[" & esperandoPor & "] "
End Sub
' ******************************
' ******************************
' ** Funciones principales **
' ******************************
' ******************************
Private Sub MoverMensajeSeleccionado(carpeta As String, pasarACarpetaDestino As Boolean, Optional concatenaEstoAlPrincipio)
Dim olApp As Outlook.Application
Dim olExp As Outlook.Explorer
Dim olMessage As MailItem
Dim fldCurrent As Outlook.MAPIFolder
Dim fldDestino As Outlook.MAPIFolder
Dim cntSelection As Integer
Dim i As Integer
Set olApp = Outlook.CreateObject("Outlook.Application")
Set olExp = olApp.ActiveExplorer
cntSelection = olExp.Selection.Count
For i = 1 To cntSelection
Set olMessage = olExp.Selection.Item(i)
Set fldCurrent = olExp.CurrentFolder
Set fldDestino = GetFolder(carpeta)
'olMessage.ShowCategoriesDialog
If Not IsMissing(concatenaEstoAlPrincipio) Then
olMessage.Subject = concatenaEstoAlPrincipio & " " & olMessage.Subject
olMessage.Save
End If
olMessage.Move fldDestino
Next
If pasarACarpetaDestino Then
Set olExp.CurrentFolder = fldDestino
End If
End Sub
Public Sub CrearLINKMensaje()
Dim olApp As Outlook.Application
Dim olExp As Outlook.Explorer
Dim olMessage As MailItem
Set olApp = Outlook.CreateObject("Outlook.Application")
Set olExp = olApp.ActiveExplorer
Set olMessage = olExp.Selection.Item(1)
Dim ClipBoard As String
ClipBoard = "Outlook:" + olMessage.EntryID
Set DataO = New DataObject
DataO.Clear
'Data0.SetData DataFormats.HTML, ClipBoard
DataO.SetText ClipBoard
DataO.PutInClipboard
End Sub
Private Sub CrearTareaAPartirDeCorreo(carpetaPendientes As String)
Dim fldDestino As Outlook.MAPIFolder
Dim olApp As Outlook.Application
Dim olExp As Outlook.Explorer
Dim olMessage As MailItem
Dim olTask As Outlook.TaskItem
Dim newolMessage As MailItem
Set fldDestino = GetFolder(carpetaPendientes)
Set olApp = Outlook.CreateObject("Outlook.Application")
Set olExp = olApp.ActiveExplorer
'El correo (o correos) actualmente seleccionados...
Dim cntSelection As Integer
cntSelection = olExp.Selection.Count
If (cntSelection = 1) Then
'...se mueve a la carpeta de "Pendientes"
Set olMessage = olExp.Selection.Item(1)
Set newolMessage = olMessage.Move(fldDestino)
'y se crea una tarea a partir de él a la que se la adjunta el enlace al correo
Set olTask = olApp.CreateItem(olTaskItem)
'asunto
olTask.Subject = olMessage.Subject
'contenido
InsertLinkToMessage olTask, newolMessage
'categorias
olTask.Categories = olMessage.Categories
olTask.Display
Else
MsgBox "solo uno, por favor"
End If
End Sub
' ********************************
' ********************************
' ** Utilidades de bajo nivel **
' ********************************
' ********************************
Private Function GetFolder(strFolderPath As String) As MAPIFolder
' folder path needs to be something like
' "Public Folders\All Public Folders\Company\Sales"
Dim objApp As Outlook.Application
Dim objNS As Outlook.NameSpace
Dim colFolders As Outlook.Folders
Dim objFolder As Outlook.MAPIFolder
Dim arrFolders() As String
Dim i As Long
On Error Resume Next
strFolderPath = Replace(strFolderPath, "/", "\")
arrFolders() = Split(strFolderPath, "\")
Set objApp = CreateObject("Outlook.Application")
Set objNS = objApp.GetNamespace("MAPI")
Set objFolder = objNS.Folders.Item(arrFolders(0))
If Not objFolder Is Nothing Then
For i = 1 To UBound(arrFolders)
Set colFolders = objFolder.Folders
Set objFolder = Nothing
Set objFolder = colFolders.Item(arrFolders(i))
If objFolder Is Nothing Then
Exit For
End If
Next
End If
Set GetFolder = objFolder
Set colFolders = Nothing
Set objNS = Nothing
Set objApp = Nothing
End Function
Private Sub RenombrarTituloSegunCategorias()
Dim olApp As Outlook.Application
Dim objCat As Category
Dim cat As String
Dim olTask As TaskItem
Set olApp = Outlook.CreateObject("Outlook.Application")
Set olTask = olApp.ActiveInspector.CurrentItem
categoriasArr = Split(olTask.Categories, ";")
For i = 0 To UBound(categoriasArr)
cat = categoriasArr(i)
If Mid(cat, 1, 4) = "Prj:" Then
olTask.Subject = "[" & Mid(cat, 5) & "] " & olTask.Subject
End If
Next
End Sub
Sub InsertLinkToMessage(task As Outlook.TaskItem, msg As Outlook.MailItem)
Dim objInsp As Outlook.Inspector
' requires reference to Microsoft Word library
Dim objDoc As Word.Document
Dim objSel As Word.Selection
Dim objParagraph As Word.Paragraph
Dim olAtt As Outlook.Attachment
Dim strAdjuntos As String
strLink = "Outlook:" & msg.EntryID
strLinkText = "Mensaje original"
Set objInsp = task.GetInspector
Set objDoc = objInsp.WordEditor
Set objSel = objDoc.Windows(1).Selection
If msg.BodyFormat <> olFormatPlain Then
' ¿tiene adjuntos?
strAdjuntos = ""
For Each olAtt In msg.Attachments
strAdjuntos = olAtt.FileName & "; "
Next
objDoc.Range.Text = vbCrLf & _
"De: " & msg.SenderName & vbCrLf & _
"Asunto: " & msg.Subject & vbCrLf & _
"Recibido: " & msg.ReceivedTime & vbCrLf & _
"Adjuntos: " & strAdjuntos & vbCrLf & vbCrLf & _
msg.Body & vbCrLf
objDoc.Range.Font.Shrink
objDoc.Range.Font.Shrink
objDoc.InlineShapes.AddHorizontalLineStandard objSel.Range
objSel.Range.Text = vbCrLf & vbCrLf & vfCRLF & vbCrLf & vfCRLF
'objParagraph = objDoc.Paragraphs.Add(objSel.Range)
'objParagraph.Range.Text = vbCrLf
objDoc.Hyperlinks.Add objSel.Range, strLink, _
"", "", strLinkText, ""
Else
objSel.InsertAfter strLink
End If
Set objInsp = Nothing
Set objDoc = Nothing
Set objSel = Nothing
End Sub
Private Function GetMsgDetails(Item As MailItem, Details As String) As String
If Details <> "" Then
Details = Details + vbCrLf
End If
Details = Details + Item.Subject + vbCrLf
Details = Details + "Outlook:" + Item.EntryID + vbCrLf
GetMsgDetails = Details
End Function
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
2008-06-11
Ya estamos en SpringOne

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
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
2008-01-13
a 2600 metros
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
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
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=30032352007-10-17
Zero mail inbox
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
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
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
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.
2007-02-25
2006-11-30
WS-AT en .Net framework v3
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”




