TeraBIThia

24/11/09

CERN CMS Fireworks

Archivado en: General — crisfervil @ 11:47 pm

He visto unas capturas de pantalla de la aplicación que usan para analizar los datos que genera el Colisionador de Hadrones del CERN y me ha llamado la atención lo espectacular de la interface… así que he investigado un poco…

R121995-L6-E18[1]

Parece una aplicación en Java, o C++ , sobre Linux

Halo-HCAL-113686[1]

No está mal eh!

CollisionEvent[1]

Aunque pone FireWorks, creo que no tiene nada que ver con el Macromedia Adobe Fireworks

Tutorial de la aplicación:

https://twiki.cern.ch/twiki/bin/view/CMS/WorkBookFireworksTutorial

Vídeo de demostración de la aplicación.

http://cms-service-sdtweb.web.cern.ch/cms-service-sdtweb/fireworks/demo.mov

En el video parece que responde bastante bien.

La habrán hecho en la India? en China? cuándo han podido tardar en hacer algo así? cuánto debió costar?

El LHC comenzó a construirse sobre el antiguo túnel del LEP, en el año 2000, y al parecer tendrá un coste total de 3,7 Billones (con B) de Euros!!  Desde luego no podrán decir que no han tenido tiempo y presupuesto..

http://cms.web.cern.ch/cms/News/e-commentary/cms-e-commentary09.htm

Crossposted from crisfervil.com

23/11/09

DataTable to Excel con un control DataGrid

Archivado en: General — crisfervil @ 6:07 pm

Dejo código con otra opción para exportar datos de un DataTable a un archivo Excel.

Resulta que el Excel es capaz de reconocer código html de una tabla, y eso es precisamente lo que genera el control DataGrid.

Este método no me gusta demasiado porque implica referenciar el espacio de nombres System.Web, y si estamos en una aplicación de escritorio, no me parece demasiado elegante. Supongo que en una aplicación Web, se notaría menos, pero un control es para lo que es, y si empezamos a usar cosas para lo que no son es cuando aparecen los problemas.

Esto mismo se podría hacer usando simplemente un objeto HtmlWriter, pero el código quedaría bastante más complejo que este.

 

image

 

Una de las ventajas de este método es la posibilidad de añadir estilos dinámicamente, por ejemplo usando un fichero css como este:

 

image

 

Habría que añadir unas cuantas líneas más al método anterior, para inyectar el contenido del css al html generado.

Esta alternativa abre la posibilidad de tener varios formatos de exportación, definidos en distintos archivos css, y un único método para realizar la exportación.

 

image

 

Una de las desventajas de esta método podría ser el rendimiento. El volumen de información generado es bastante alto, y ante un número elevado de filas y de columnas, el rendimiento se resiente.

Este sería el contenido del texto generado, para un DataTable con dos filas y dos columnas

image

Abriéndolo con el Excel:

image

Sé que funciona con el Excel 2003 y posteriores, pero sospecho, aunque no estoy seguro, de que también lo reconoce el Excel 2000.

 

También se puede exportar a Excel, usando el formato Office Xml.

Crossposted from crisfervil.com

DataTable To Excel con ExcelExportLib

Archivado en: General — crisfervil @ 11:36 am

Dejo este snippet, por si a alguno le puede servir.

Es una manera más de exportar un DataTable, o un DataSet a un fichero Excel, pero esta vez usando el formato Office Xml.

Wikipedia: http://es.wikipedia.org/wiki/Microsoft_Office_XML

Los formatos Microsoft Office XML (no confundir con Office Open XML) son formatos de documento basados en XML (o lenguajes de esquema XML) introducidos en versiones de Microsoft Office anteriores a Office 2007. En Microsoft Office XP se introdujo un nuevo formato XML para almacenar hojas de cálculo de Excel y Office 2003 añadió formatos basados en XML para documentos de Word.

Estos formatos fueron reemplazados por la especificación Office Open XML (ECMA-376) en Microsoft Office 2007.

El formato Excel xml tiene más o menos la siguiente apariencia:

image

Una de las ventajas de este formato, es la posibilidad de incluir formatos (valga la redundancia), fórmulas, etc. y que son reconocidos desde la versión 2003.

image

image

Más información acerca del formato: http://msdn.microsoft.com/en-us/library/aa140066%28office.10%29.aspx

Una exportación sencilla, no tiene ninguna complicación, pero so quisiéramos añadir ciertas complejidades, hay mucho código que escribir.

Por eso, me he apoyado en esta librería que proporciona un modelo de objetos bastante sencillo, que permite centrarse en la información a generar, y delegar el “renderizado” del documento xml.

http://excelexportlib.codeplex.com/

image

Traducción: ExcelExportLib es una librería de exportación simple que crea un archivo .xml. Este archivo puede ser abierto en Excel. Al contrario que los archivos csv, este formato contiene información de formato. La principal ventaja del proyecto es que permite la exportación de datos en Excel sin necesidad de ejecutar Excel.

A mí lo que me gustó de la librería es lo sencillita que es. Simple, pero potente.

Un ejemplo:

image

 

Bueno, y finalmente el snippet.

 

image

image

Por supuesto, al Excel generado se le pueden añadir todo tipo de formatos, fórmulas, totales, etc.

Y allí donde ExcelExportLib no llegue, siempre se puede añadir funcionalidad propia.

Normalmente para saber cómo se traduce a xml una característica del documento Excel, por ejemplo una fórmula, un formato, etc., se pueden consultar las especificaciones, pero lo más sencillo suele ser generar un documento con la características en cuestión, guardar el archivo en formato xml y ver el resultado.

Por ejemplo, ¿cómo se especifica la característica de formato condicional?

 

image

Guardamos el documento en formato xml….

image

 

Y abrimos el resultado con un editor de texto, o uno xml.

 

image

 

PD: No suelo pegar el código, por un trauma personal. He sufrido el copy-pasteado de mucha gente, y la verdad es que no se lo deseo a nadie. Por eso pongo la imagen, y que cada uno escriba su propio código. Perdón por los inconvenientes ocasionados. ;)

Crossposted from crisfervil.com

Novedades acerca del caso LSE

Archivado en: General — crisfervil @ 11:00 am

No sé si habrás leído algo acerca del caso de la London Stock Exchange, en el que se había reemplazado el sistema existente construido sobre linux y java, por un sistema completamente nuevo basado en el .net framework, windows y sql server.

Si no, en este post de Jorge viene muy bien explicada toda la historia:
http://geeks.ms/blogs/jorge/archive/2009/10/22/el-caso-de-la-lse-london-stock-exchange-y-los-procesos-en-tiempo-real.aspx

Bueno, pues resulta que finalmente han salido a la luz estas imágenes que relatan fielmente como fue la entrevista de trabajo del Project Manager que contrataron para dirigir dicho proyecto. Por supuesto, no puedo citar mis fuentes.

 image

http://www.dilbert.com/

Crossposted from crisfervil.com

21/10/09

Resumen Examen MCTS 70-536 – Autenticación y Autorización

Archivado en: Uncategorized — crisfervil @ 11:59 pm

 http://www.microsoft.com/learning/en/us/exam.aspx?ID=70-536&locale=en-us

Este es otro de los resúmenes que he rescatado. Va de la gestión de la seguridad en el .net Framework.

Como curiosidad, indicar que en la RAE sólo existe el término Autenticación, y no Autentificación. Se define autenticación como la acción y el efecto de autenticar, y autenticar es "autorizar o legalizar algo", o bien "dar fe de la verdad de un hecho o documento con autoridad legal" (fuente: diccionario online de la RAE). Creo que conocer el significado de las palabras es importante para aclarar nuestras ideas y trasmitirlas con fidelidad a nuestros pensamientos. Por eso me detengo en estos detalles.

Obs de último momento: Están admitidos tanto el verbo autenticar como autentificar. Ambos términos tienen el mismo significado. Ver + info aquí.

Bueno… a lo que íbamos.

En la jerga informática, que es la que nos interesa…

Autenticación: Es el proceso de identificación de un usuario.

Autorización: Es proceso por el que permite o deniega el acceso de un usuario a un recurso.

La clase System.Security.Principal.WindowsIdentity representa un usuario de Windows. No permite autenticar a un usuario; solo guarda el resultado de la autenticación. Estos son sus métodos más importantes:

GetAnonymous (shared)

Devuelve un objeto WindowsIdentity que representa a un usuario anónimo.

GetCurrent (shared)

Devuelve un objeto WindowsIdentity que representa el usuario actual de Windows.

Impersonate (shared)

Devuelve un objeto WindowsImpersonationContext que representa un usuario concreto del sistema. Permite al código que se está ejecutando reemplazar a otro usuario de Windows.

GetCurrent

Devuelve el objeto WindowsPrincipal correspondiente al usuario.

Estas son propiedades (no estáticas) de WindowsIdentity

AuthenticationType

String que indica el método de autenticación. Generalmente "NTLM".

IsAnonymous

bool que indica si el usuario es anónimo.

IsAuthenticated

bool que indica si el usuario ha sido autenticado.

IsGuest

bool que indica si el usuario es un usuario "guest" o invitado.

IsSystem

bool que indica si el usuario es un usuario de sistema.

Name

string con el nombre de usuario y el dominio en el que ha sido autenticado. Si posee una barra invertida (\) dentro del nombre, indica que el usuario ha si do autenticado por un dominio de Active Directory. En caso contrario la autenticación se produjo contra el equipo local.

Token

int con el token identificador del usuario.

La clase WindowsPrincipal proporciona acceso a los grupos de los que un usuario es miembro. Esta clase debe ser creada pasando como parámetro de su constructor una instancia de WindowsIdentity, o bien llamando  al método GetCurrent() de WindowsIdentity. Estos son algunos de sus métodos:

IsInRole

bool que indica si el usuario es miembro del grupo especificado.

Las clases PrincipalPermission y PrincipalPermissionAttribute permiten, en conjunto, saber si el usuario cumple o no unos criterios de autorización determinados.

Estas son las propiedades de PrincipalPermission

Authenticated

bool que en caso de ser true, indica que el usuario debe estar autenticado para poseer la autorización.

Name

string que indica el nombre que debe tener el usuario para poseer la autorización.

Role

string que indica el nombre del grupo al que debe pertenecer el usuario para poseer la autorización.


Métodos
de PrincipalPermission

Demand

Comprueba que el usuario cumpla con los criterios de Authenticated, Name y Role especificados en sus propiedades. En caso contrario, se lanza una SecurityException.

   


Seguridad Declarativa (Declarative RBS Demands)
: Indica al runtime, mediante atributos, que realize comprobaciones Role-Based Security (Seguridad basada en Roles) antes de ejecutar el código de un ensamblado, clase o método.

Usar este tipo de atributos es la manera más segura de impedir la ejecución de código a usuarios no autorizados, aunque posee algunos inconvenientes.

Para usar estos atributos, es no olvidar realizar los siguientes pasos:

- Realizar una llamada a System.AppDomain.CurrentDomain.SetPrincipalPolicy indicando la política de seguridad para el IPrincipal (usuario) que ejecutará nuestro código.
- Un bloque try catch para capturar accesos no autorizados. Si se denegara el acceso se lanzaría una SecurityException.
- Los atributos PrincipalPermission para declarar los accesos requeridos al ensamblado, clase o método cuyo acceso se desee restringir.

Seguridad Imperativa
Las validaciones usadas en la seguridad imperativa se realizan dentro del código y eliminan la limitación de la seguridad declarativa de restringir los accesos a grandes porciones de código.

Los pasos para incluir la seguridad imperativa en el código son los siguientes:
- Realizar una llamada a System.AppDomain.CurrentDomain.SetPrincipalPolicy indicando la política de seguridad para el IPrincipal (usuario) que ejecutará nuestro código.
- Un bloque try catch para capturar accesos no autorizados. Si se denegara el acceso se lanzaría una SecurityException.
- Un objeto PrincipalPermission para especificar las restricciones que aplicarán al código.
- Una llamada a PrincipalPermission.Demand() para verificar que el IPrincipal especificado está autorizado.

La clase PrincipalPermission posee 3 constructores:

- PrincipalPermission(PermissionState): el enum PermissionState indica si la política de autorización es restrictiva o permisiva, es decir, si de primeras  no autorizamos al recurso a menos que cumpla el resto de requisitos, o si de primeras autorizamos al recurso, a menos que cumpla los requisitos.
- PrincipalPermission(Name, Role): Especifica como requisitos de autorización un nombre de usuario y un rol determinado.
- PrincipalPermission(Name, Role, Authenticated) Especifica como requisitos de autorización un nombre de usuario, un rol y un estado de autorización determinados.

Implementando usuarios y roles(grupos) propios
Para realizar esta tarea es necesario implementar las interfaces System.Security.Principal.IIdentity y System.Security.Principal.IPrincipal. Estas interfaces permiten utilizar la infraestructura de acceso y autenticación de la plataforma. De hecho, las clases WindowsIdentity y WindowsPrincipal las implementan. De igual modo, en asp.net existen la clase FormsIdentity y PassportIdentity que también son implementaciones de estas intefaces.
Con lo cual, para implementar nuestro propio motor de autenticación y gestión de grupos y usuario, tirando por ejemplo, contra una base de datos, debemos, bien heredar de alguna de las clases vistas anteriormente o implementar estas interfaces.

Propiedades de IIdentity

AuthenticationType

string para determinar el tipo de autenticación a usar. Para usar el de windows, NTLM.

IsAuthenticated

booleano que indica si el proceso de autenticación ha sido válido.

Name

string con el nombre de usuario.

Métodos de IPrincipal

Identity

Objeto IIdentity que determina la identidad del usuario

IsInRole

bool que indica si el Identity pertenece al grupo o rol especificados.

La excepción System.Security.Authentication.AuthenticationException se lanza cuando se produce un error de autenticación.

La excepción System.Security.Authentication.InvalidCredentialException se lanza cuando el sistema ha denegado nuestra autenticación y no podemos volver a intentar autenticarnos.

Crossposted from crisfervil.com

Entradas más antiguas »

Blog de WordPress.com.