sábado, agosto 30, 2008

Microsoft F# Developer Center

Está disponible en MSDN un área dedicada a F# junto con el primer CTP de la integración en Visual Studio. Definitivamente algo para entretenerse

Microsoft F# Developer Center

domingo, junio 22, 2008

Mi humilde opinión en F#

El día de hoy después de un gran esfuerzo y de una parcial cambio en el modelo de programación terminé de leer Expert F#. Que puedo decir, este es uno de esos libros que me cambió la percepción de muchos aspectos del desarrollo de software.

Algunas opiniones en distintos aspectos

Escritura

La escritura es muy clara y a pesar de que hay temas muy complejos que son abordados de manera muy simple para este humilde mortal los ejemplos de código están muy bien elegidos para explicar el mensaje.

Es interesante que si bien no se trata de entrar en detalle en todos los aspectos clarifica muchas cosas de lenguajes funcionales, .Net framework, modelos de programación, parsers, etc.

Claramente este libro será mi libro de cabecera por un buen tiempo, aún si no estoy programando en F#

Programación

La cantidad de cosas que aprendí, recorde y corregí de mis idas es muy grande para enumerarla. Los conceptos, explocaciones y recomendaciones incluidas en el libro son generales y pueden ser aplicadas en cualquier entorno y lenguje de programación.

Otro punto alto y loable.

El lenguaje

Debo decir que si bien hay muchos lenguajes que me gustan y con los cuales tuve química desde el principio (C#, Python, Lisp, Turbo Pascal) F# no fue uno de ellos. Sin embargo una vez terminada la lectura del libro debo decir que quede muy impresionado por el mismo y con muchas ganas de programar un módulo real (no quiero ejemplos ni ejercicios). Tengo en mente un muy buen ejemplo pero por ahora lo mantengo en el misterio :)

PS: Esta lectura me ha hecho aprender y apreciar cosas de otras lenguajes y debo decir que estoy muy interesado en aprender más de los conceptos de Erlang. El lenguaje no me parece atractivo pero su diseño y conceptos es ciertamente MUY interesante

domingo, mayo 25, 2008

Prácticas Funcionales en desarrollos empresariales

Hace unos meses que estoy trabajando, muy lentamente, en el uso de F# para ello estoy constantemente releyendo el excelente libro Expert F#. Durante este periodo empezé el desarrollo de un proveedor de ADO.Net y decidí aplicar algunos de los linemientos y conceptos de programación funcional. Para ser más exacto decidí tratar de crear objetos inmutables y funciones sin efectos colaterales y esta experiencia me deja algunos aprendizajes:

  • Estamos muy mal acostumbrados. Es decir que la evolución de los lenguajes nos han llevado a pensar en un modelo donde las variables pueden ser alteradas en cualquier momento sin entender las implicaciones de estos cambios. Una vez que uno empieza a pensar en concurrencia, multi.core, etc. este tipo de programación es muy nocivo.
  • Es muy práctico diferenciar los datos mutables e inmutables. Dado que el proveedor será usado en un entorno donde la mutabilidad es "recomendada" es necesario soportar algunos de estos aspectos pero resulta interesante que al separar aquellos aspectos mutables de los inmutables se puede ahorrar mucho esfuerzo.
  • Las funciones sin efecto colateral generan código que facilmente puede ser paralelizado y ejecutado de manera asincrónica.

En fin creo que el ejercicio fue muy bueno y estoy contento con los resultados obtenidos y justo cuando estaba en el proceso de detallar todos estos aspectos este post me evita el trabajo :)

domingo, abril 27, 2008

Programación Paralela, Concurrencia y otros

Estoy tratando de entender la tendencia en este campo y la cantidad de esfuerzos y variedad de librerias me esta volviendo loco.
En cuanto tenga una idea de algo volveré a comentar en el tema

Seguridad en Frameworks - Parte I

Durante los últimos meses he estado trabajando mucho en la generación de un framework de uso no controlado. Es decir un framework que será utilizado por un conjunto variado de desarrolladores con los cuales no habrá una interacción. Esto no es una novedad para quienes desarrollan frameworks opens-source o redistribuibles, sin embargo a diferencia de ellos este framework es de uso corporativo y con un foco muy alto en la seguridad y restricción en lo que los usuarios del mismo pueden realizar. Para ser más claros la idea no es solo proveer piezas reutilizables de código y lógica sino asegurar que dichas piezas sean utilizadas obligatoriamente y limitar el código desarrollado en lo que puede realizar directamente.

Duante el desarrollo de dicho framework utilizamos muchos, sino todos, de los recursos disponibles en lo que se refiere a diseño de frameworks y librerias base pero llegó un punto donde la información disponible no era suficiente para poder lograr nuestro objetivo. Esto tenía que ver con el uso de CAS (Code Access Security). Ha sido establecido por más de uno que la documentación relacionado con el tema es bastante críptica por lo que luego de una breve investigación logramos establecer un mecanismo para lograr nuestro objetivo. Así que creo que vale la pena resumir el resultado del análisis.

¿Que es CAS?

CAS es un mecanismo que permite controlar la ejecución de porciones de código limitando de esta forma el acceso a operaciones y recursos protegidos. En el caso de un framework empresarial el uso de CAS es muy importante pues permite que los administradores puedan limitar el acceso de las aplicaciones a los recursos declarados. Algunos de los elementos que son controlados a traves de CAS son:

  • Acceso a red
  • Acceso a bases de datos
  • Acceso al sistema de archivos
  • Acceso al Registro de Windows

CAS ha sido muy poco utilizado en general debido a que la mayoria de las aplicaciones se ejecutan en FullTrust.

El Framework como Proxy

Framework como Proxy

Si bien el escenario ideal permite que una aplicación pueda estar limitado a acceder a los recursos exclusivos a través de CAS esto implica que toda aplicación deberia tener un inventario de los recursos utilizados (el escenario ideal incluso para un modelo de amenazas) pero esto no es posible cuando se habla de cientos de aplicaciones modificadas varias veces por año. Por esto es que en el escenario en el que estuvimos trabajando se planteó utilizar el framework de desarrollo como proxy es decir, todo acceso a un recurso sensible es realizado por el framework y las aplicación solo tienen permiso de invocar al framework.

En este caso se da un cambio en las premisas de administración donde en lugar de buscar la mayor restricción en el acceso a recursos se favorece el control y auditoria de acceso. Con el escenario propuesto si bien las aplicaciones podrán acceder a todos los recursos el framework genera toda la información de auditoria necesaria y puede brindar mecanismos de restricción de acceso que sea configurable de manera más simple que la consola y herramientas de CAS.

En próximos posts haré un análisis básico del uso de CAS en una configuración de permisos delegados.

Recursos para el diseño de frameworks

Design Guidelines for Developing Class Libraries

LINQ Framework Design Guidelines

Framework Design Guidelines

Designing .NET Class Libraries: Security

martes, enero 22, 2008

Guardar archivos en base de datos

Ayer me pasaron este enlace con relación al impacto de guardara documentos en base de datos. El análisis se focaliza en el rendimiento y considera aspectos como la fragmentación y tipo de acceso. Es más basta con decir que el autor es Jim Gray para saber la calidad del paper.

MUY RECOMENDABLE

http://research.microsoft.com/research/pubs/view.aspx?msr_tr_id=MSR-TR-2006-45

jueves, enero 03, 2008

Robocopy es oficial

Hace mucho tiempo que uso robocopy como la herramienta de linea de comando por defecto en mi día a día por eso al instalar una nueva máquina es una de las herramientas que siempre copio la última versión.

Por todo esto no habia notado que en Vista ya es oficial. Hasta Xp y 2003 la herramienta de línea de comando para hacer copia de una rama de un directorio habia sido xcopy, que era bueno pero tenía muchos deficiencias comparado con Robocopy sin embargo si en vista ejecutan xcopy esto es lo que verán:



C:\Users\cristofg>xcopy /?
Copies files and directory trees.

NOTE: Xcopy is now deprecated, please use Robocopy.

XCOPY source [destination] [/A | /M] [/D[:date]] [/P] [/S [/E]] [/V] [/W]
[/C] [/I] [/Q] [/F] [/L] [/G] [/H] [/R] [/T] [/U]
[/K] [/N] [/O] [/X] [/Y] [/-Y] [/Z] [/B]
[/EXCLUDE:file1[+file2][+file3]...]



 



Así que Robocopy ya no es parte de resource kit ni nada pareido y es parte de la instalación por defecto de Vista. Esta es una gran noticia para nosotros fanáticos de Robocopy y también para los que aprenderán a usarlo