miércoles, 10 de diciembre de 2008

Como incluir un fichero en el resultado de una prueba unitaria en Visual Studio 2008

Existen ocasiones en las que nos puede interesar que una prueba unitaria incluya un determinado recurso. Esto ocurre cuando el código que deseamos testear cuenta con la existencia , por ejemplo, de un determinado fichero de texto, una hoja de cálculo o una Service-based Database (.mdf)

Como sabrán, el resultado del proceso de test genera una nueva carpeta (TestResults) donde incluye el resultado de cada generación. Si dicho resultado cuenta con una referencia relativa (la mejor manera de hacerlo) hacia un recurso pues ya la tenemos liada...

Pero como siempre (o casi) la solución es más facil de lo que parece. Existe un decorador especialmente creado para esta necesidad. Basta con colocar sobre el método que deseamos incluya el recurso el item de despliegue de la siguiente manera:

[TestMethod()]
[DeploymentItem(@".\fichero.xls")]

public int EjemploTest()
{

...

(.\ si está en la raiz claro...)

Por supuesto los más inquietos ya se estarán preguntando como evitar tener que incluir este decorador en todos los métodos (especialmente interesante si se trata de una Service-based Database (mdf)).

Pues para esto también existe una facil solución. Basta con incluir el recurso en el fichero LocalTestRun.testrunconfig dentro del elemento Deployment con la siguiente sintaxis:


\[Nombre del proyecto]\[Nombre del recurso]

y ya podemos quitar el decorador.

Como siempre, espero que les sea de utilidad.

Un saludo.

Extra ball:
Si desean incluir un fichero Service-based Database (mdf)  en una prueba unitaria y referenciarlo con un connection string del estilo: "..AttachDbFilename=|DataDirectory|.." asegurense que tienen instalado el SP1 de VisualStudio 2008.  Si este, la referencia se realiza directamente contra en .Net Framewok y no encontrará el recurso.


lunes, 1 de diciembre de 2008

WPF Binding del control al propio DataContext

Alguna vez me han proguntado como se puede relacionar el propio objeto del DataContext en un Binding. Esto que en principio puede parecer un poco raro suele ser muy habitual a la hora de establecer Converters en WPF (IValueConverter).

Bueno pues el tema es de lo más simple. Supongamos que deseamos hacer un Binding del objeto del contexto a la propiedad Text de un TextBlock:

Text="{Binding Mode=OneWay, Converter={StaticResource andoniBlogConverter}}

*Notese que no se establece Path ni por propiedad ni a través de la sobrecarga del constructor de la clase Binding

Por supuesto se necesitaría un converter puesto que el objeto del contexto no es de tipo string (necesario para la propiedad Text seleccionada)

Por supuesto necesitariamos el Static Resource:

andoniNamespace:AndoniBlogConverter x:Key="andoniBlogConverter"


y la referencia al namespace en la declaración del UserControl:

xmlns:andoniNamespace="clr-namespace:Andoni.blog.ExampleConverter"

Espero que les sea de ayuda.

Bueno, un saludo



lunes, 29 de septiembre de 2008

Microsoft + JQuery ! (con el MVC la Santa Trinidad)

jQuery va a formar parte de la plataforma oficial de desarrollo de Microsoft.

Por cierto, jQuery es una librería de Javascript que permite simplificar la gestión de manipulación de documentos HTML a través del D.O.M. gestión y manejadores de eventos, animaciones...

Esta unión va a permitir que jQuery se distribuya con el Visual Studio. La idea es incluirla sin modificaciones (a ver si es verdad!!) de tal manera que se permita al equipo de desarrollo de jQuery continuar su propio avance de manera independiente.

Además los desarrolladores de Visual Studio podrán disponer de intellisense para jQuery (hay rumores que comentan que estará disponible como una descarga gratuita independiente en unas semanas)

Personalmente he desarrollado algunos proyectos con jQuery y la experiencia ha sido positiva por lo que me parece una conjunción positiva.

Un saludo.

martes, 2 de septiembre de 2008

Nuevo navegador web de Google: Chrome

Ya está disponible la versión beta del nuevo navegador de Google: Chrome para Windows. Aunque llega tarde y no parece que aporte mucho a un mercado bien cubierto por los dos eternos rivales (Firefox e Internet Explorer) no está de más echale un ojo a ver que les parece.

Se lo pueden descargar de la web de Google:

Chrome

Un saludo.

martes, 8 de julio de 2008

viernes, 27 de junio de 2008

Ejemplo de globalización

He recibido la notificación de que desde la Universidad de Panamá, concretamente la facultad de Informática, electrónica y comunicaciones ha empleado información de este blog para realizar un estudio sobre entornos de programación.

Me alegro que les haya servido de ayuda.

Un saludo "transoceánico".

martes, 24 de junio de 2008

Cuando emplear declaración implicita de tipo de variables en .net

En C# 3.0 es posible descargar en el compilador la tarea de determinar el tipo de una variable. Dicha labor de inferencia se realiza en tiempo de compilación por lo que desde el punto de vista de la aplicación generada (del IL en adelante) se mantiene la verificación estricta de tipos.

La palabra reservada para declarar de este modo las variables es "var".

Ahora la pregunta es cuando usarla y cuando no. Porque exista esta caracteristica no vamos a volver locos, por lo tanto mi recomendación es usarla solo y exclusivamente cuando sea estrictamente necesario.

Esto es, cuando vayamos a crear una variable de un tipo que no existe y no queremos reutilizar más alla del ámbito de vida de la misma.

En cualquier otro caso, como siempre, especificamos en tiempo de diseño el tipo porque mejora la legibilidad y nos cuesta lo mismo.

Además aligeramos el proceso de compilación y evitamos posibles errorres de programación que se apoyen en el funcionamiento de la inferencia del compilador.

Dicho queda, un saludo.

Palabra de consultor...

martes, 17 de junio de 2008

Firefox 3.0

Ha sido liberada la versión 3.0 (como yo que también soy 3.0!! ) del navegador Firefox. Vaya por delante que soy usuario convencido del mismo y el producto destaca por su calidad y rendimiento.

Ahora, otra cosa es la tabla de comparaciones del sitio web oficial, atentos que no tiene desperdicio:



Madre mia que publicidad barata y ofensiva. Con lo facil que es dejar que la gente pruebe lo bueno que es y se decida. Mal, mal...

Un saludo.

martes, 10 de junio de 2008

SCRUM o como sobrevivir entre Sprints...

En mi empresa estamos introduciendo la metodología ágil SCRUM así que hemos pasado a vivir entre Sprints e incertidumbre. Existen algunas características que "obligan" al equipo a centrarse en las tareas y a unificar los esfuerzos.

Cada tres semanas nos comprometemos a una entrega con el cliente, priorizada por el, cada día hacemos una reunión a primera hora donde revisamos como van las tareas que nos hemos auto-asignado así como los impedimentos que nos hemos ido encontrando.

En contra de lo qe pueda parecer, el equipo trabaja más unido que nunca, la compenetración y colaboración es máxima y la eficiencia aumenta día a día.

Ya iremos hablando más de SCRUM que da para mucho.

Un saludo

miércoles, 28 de mayo de 2008

Carga diferida de entidades en el Entity Framework

Alguna duda que se repite cuando se trabaja (o mejor dicho todavía se trastea...) con Microsoft Entity Framework es la posibilidad de realizar cargas diferidas de entidades en base a la navegación que sobre el E.D.M. se va realizado.

Imaginemos que tenemos una entidad Curso y otra Alumno. Supongamos que existe una relación de navegación de 1 a * entre ambas. (Relación de asociación a nivel del CSDL). La cuestión es si podemos recuperar los cursos (solo los cursos) y en base a nuestras necesidades avanzar por alumnos automatizando la carga de los mismos a través del mecanismo de carga diferidad "orquestado" de manera automática por el Entity Framework.

La respuesta es NO.

La respuesta oficial del equipo de desarrollo de ADO.net de Microsoft es que ellos bajo ninguna circunstancia permiten que el Entity Framework tome la iniciativa y acceda a la Base de Datos subyacentce sin la autorización expresa del desarrollador. (Lease esto lease paso del tema que es un patín...). De hecho esta funcionalidad ha sido desestimada (al menos de momento) por lo que no está planificada en el roadmap del producto.

Palabra de ADO.net Developer Team...

Saludos.

martes, 27 de mayo de 2008

Entity Framework SP1 (o como no debe usted implementarse su propio O.R.M. a estas alturas...)

Con el reciente lanzamiento de la Beta del Visual Studio 2008 SP1 por parte de Microsoft me he decidido a investigar la nueva versión del Entity Framework que en el se incluye. Tengo que decir que aunque la cosa todavía esta un poco verde promete.

Se caia de maduro que Microsoft necesitaba cubrir un nicho en la que las soluciones de terceros (Hibernate, Neo, Codus...) se le habian colado en su bonito .NET Framework: Los Object Rational Mapping (ORM) y los servicios de consultas contra dichos objetos.

Microsoft ha realizado intentos, timidos pasos hacia lo que hoy es (o mejor dicho mañana será) el Entity Framework. Se probó con el DataSet, que prometia ser la revolución y se quedo por el camino, muy mal acompañado del XSD para definir modelos. Las especificaciones completas de XSD además de ser infumables, se olvidan por completo de hablar de servicios como la persistencia. Así que no es el lenguaje optimo para hablar de entidades que queremos trabajen con el ORM.

De hecho, existe una nueva especificación para definir los modelos conceptuales (CSDL), de almacenamiento (SSDL) y mapeo el E.D.M.(Entity Data Model). Dichas especificaciones cubren ambos mundos de manera muy natural (puesto que para eso ha sido creado, dicho sea de paso)

Disponer de un ORM (entre otras funcionalidades) estandar y mantenido por Microsoft es un tema a tener muy en cuenta. Yo por mi cuenta, me cree hace un par de años una implementación propia de un ORM común para mis proyectos. Pero no solo yo, es que casi todos los colegas con cierta carga de proyectos se han ido haciendo las suyas propias formando una torre de Babel de lo más poco práctica.

Y el problema no solo es hacerlo sino mantenerlo (y más rápido que Microsoft) desviando esfuerzo de la implementación de sus propias aplicaciones. Por eso es tan interesante el Entity Framework.

Por supuesto, existe la guinda del pastel en forma de LINQ to Entities que es una implementación del proveedor de LINQ para trabajar contra objetos de tipo Entidad (Definidos en el E.D.M.) e incluso una implementación de SQL llamada eSQL(subconjunto muy limitado (sin instrucciones DML para la release 1)) para atacar directamente al nuevo cliente EntityClientProvider que se coloca sobre los proveedores de todas la vida, abstrayendo de sus particularidades.

En este aspecto coincidimos todos los que "parimos" cualquier implementación mejor o peor (que de todo hay no se vayan a crerer) de ORM, en cuanto madure un poco, al trastero con las soluciones propias y a trabajar con el Entity Framework.

Como ven hay muchas cosas interesantes pero ya las iremos viendo poco a poco.

Un saludo.

Razones para evitar la programación en cliente en Aplicaciones Web

Existen algunas razones para intentar evitar la programación en el lado del cliente:
  • Aislamiento
    El código del lado del cliente no puede acceder a los recursos del servidor. Por ejemplo, una aplicación que se ejecuta en el cliente no tiene una manera sencilla de leer un fichero o interactuar con una base de datos del servidor (al menos no sin caer en problemas con la seguridad y compatibilidad de navegadores)

  • Seguridad: Los usuarios finales pueden ver el código de cliente. (Y cuando digo pueden es SIEMPRE pueden solo varia el tiempo que tienes que invertir en poder ...) Por lo tanto un usuario malintencionado al entender como funciona la aplicación puede "trampearla" más a menudo.
Un saludo

lunes, 19 de mayo de 2008

En que ando metido...

Hace tiempo que no cuento nada por aqui, así que voy a comentaros en que investigaciones ando metido ...

  • Entity Framework
  • WPF
  • WCF
  • Mock
  • SCRUM
  • PoliceInjection
  • MVC con comandos en WPF
  • JQuery
  • ...
Ya os iré constando cosillas interesantes.

Saludos

Una pregunta para los religiosos...

Si decimos que Dios creo el universo... ¿Quien creó a Dios?

Espero sus respuestas!

lunes, 28 de abril de 2008

domingo, 20 de abril de 2008

Definición de la Arquitectura del Software

"La arquitectura del software es un conjunto de decisiones de diseño, que tomadas de forma errónea, pueden hacer que un proyecto sea cancelado”

Eoin Woods

Instituto de Ingeniería del Software CarniegeMellon

sábado, 5 de abril de 2008

Programadores

Los restrictivos trabajos de las grandes compañías son especialmente duros para los programadores, porque la esencia de la programación es construir cosas nuevas. La gente de ventas realiza las mismas presentaciones muchas veces, el soporte responde repetidas veces a las mismas consultas, pero cuando has escrito una pieza de código no quieres volver a escribirla de nuevo.

Por lo tanto, un programador trabajando como lo que significa ser programador están pensando siempre en hacer cosas nuevas.

Un saludo a todos los compañeros programadores!!

lunes, 24 de marzo de 2008

Versiones de ASP.NET

Con ASP.NET 3.5 Microsoft espera continuar su éxito en el refinamiento y mejora de ASP.NET.
Las buenas noticias es que Microsoft no ha eliminado o modificado funcionalidades. (Manteniendo la compatibilidad hacia atrás) El enfoque de la mayoría de los cambios y funcionalidades de alto nivel incorporados, es hacer su programación más productiva. (Eso esperemos al menos ;))

De cualquier manera, han existido cuatro liberaciones mayores de ASP.NET:
  • ASP.NET 1.0: La primera de las liberaciones creó el núcleo de la plataforma ASP.NET e introduce un amplio rango de funcionalidades esenciales.

  • ASP.NET 1.1: La segunda liberación añadió mejoras de rendimiento y corrección de errores pero no nuevas funcionalidades. (Lógico en los albores...)

  • ASP.NET 2.0: La tercera liberación recopiló una buena cantidad de funcionalidades nuevas, las cuales fueron creadas sobre la fontanería existente en ASP.NET. El énfasis general se centró en proveer a los desarrolladores con "regalitos" profabricados que pudiesen ser usados sin escribir mucho (o nada) de código. Algunas de estas nuevas funcionalidades incluidas de fabrica fueron en soporte para la navegación de sitios Web, características de temas para estandarizar el diseño de las páginas Web y una manera más fácil de recuperar la información de una base de datos.

  • ASP.NET 3.5: Esta cuarta liberación mantiene el mismo motor básico que ASP.NEt 2.0, pero añade algunas florituras y dos cambios dramáticos. (¡Como suena eso de importante!)

    Las mejora más significativa es el ASP.NET AJAX toolkit, el cual otorga a los desarrolladores Web mejores herramientas para crear sitios Web de respuesta rápida que incorporen ricos efectos normalmente vistos en aplicaciones de escritorio. (como por ejemplo el drag-and-drop y autocompletar)

    La otra innovación es el soporte para LINQ, un conjunto de mejoras del lenguaje incluidas en .NET 3.5 que permiten realizar búsquedas en datos de memoria de la misma manera que se consulta a una base de datos.

Nota:
Si se pregunta que ocurre con el ASP.NET 3.0, bien pues... no existe!

Microsoft empleó el nombre .NET 3.0 para liberar un conjunto de nuevas tecnologías, que incluían el Windows Presentation Foundation (WPF), Windows Workflow Foundation (WF) y Windows Communication Foundation (WCF), pero no incluyó ninguna actualización de la versión de ASP.NET

Un saludo.

lunes, 17 de marzo de 2008

Windows Communication Foundation (1)

El W.C.F. (no confundir con el W.T.F.! ;)) es el núcleo de las aplicaciones de comunicación orientadas a servicio (service-oriented) para la plataforma Windows.

Se coloca sobre los estándares de Servicios Web y está diseñada para las necesidades de la arquitectura orientada a servicio (S.O.A.) y el Software como servicio (Software As A Service (SAAS)) (Perdón por la anidación...)

Esta filosofía establece que el software debe ser construido alejado del "grano fino", con componentes débilmente acoplados y con interfaces bien definidas que se comuniquen empleando protocolos estándar.

Los Servicios Web fueron el principio de esta tendencia, donde la lógica de negocio de una manera independiente de la tecnología, exponiendo un interfaz basado en XML utilizando un lenguaje llamado Web Services Description Language (W.S.D.L.). Los desarrolladores pueden entonces emplear un mensaje XML con un formato llamado Object Access Protocol (S.O.A.P.) (Jabón para los profanos...) que deriva de XML para comunicar con el Sevicio.

Seguiremos profundizando...

Un saludo

jueves, 13 de marzo de 2008

No puedo evitarlo...

Viendo las nuevas Foundations de Microsoft: Windows Communication Foundation, Windows Workflow Foundation, Windows Presentation Foundation...

Sus en siglas son : (WPF, WCF, y WWF) solo falta: WTF (What The Fuck !!)

Je je, lo siento, chiste malo...

Un saludo

Diferencias entre .NET Framework 3.0 y .NET Framework 3.5

Para aclarar un poco la cosa, digamos que el Framework 3.0 es esencialmente un add-on/plugin para el Framework 2.0 para añadir las funciones básicas para que las aplicaciones puedan engancharse con WPF, WCF, y pre LINQ.

.NET Framework 3.0, llamado antiguamente WinFX incluye un nuevo conjunto de APIs de código manejado que son una parte integral de los sistemas operativos Windows Vista y Windows Server 2008. También se encuentra disponible para Windows XP SP2 y Windows Server 2003 como descarga.

No hay cambios mayores de arquitectura en esta release; .NET Framework 3.0 emplea el Common Language Runtime del .NET Framework 2.0. A diferencia de releases previas del .NET no hay una release de .NET Compact Framework homologa.

Por su parte, el .NET Framework 3.5 que ha sido liberado por Microsoft recientemente es una release completa. Dicho Framework solo correrá sobre Windows XP SP2 o posterior y el soporte para LINQ es nativo.

Algunas características a tener en cuenta son:

  • Esta versión del Framework emplea la versión 2.0 del CLR (el mismo modelo que usa el .NET Framework). Sin embargo, instala el .NET Framework 2.0 SP1, el cual añade algunos métodos y propiedades, requeridos por las características .NET Framework 3.5 como LINQ a las clases de la BCL del .NET Framework 2.0. Dichos cambios no afectan a aplicaciones escritas para la versión 2.0 del Framework.

  • Tanto el soporte completo para los tipos de proyectos del .NET Framework 3.5, como compilaciones para .NET Framework 3.5 están incluidas en el Visual Studio 2008
  • El código fuente de la BCL (Base Class Library) de esta release será liberada bajo la licencia Microsoft Reference License. (Sí, han leído bien!!)

  • .NET Framework 3.5 SP1, con codename "Arrowhead", mejorará el soporte para aplicaciones ocasionalmente conectadas y provee soporte built-in para el Microsoft ASP.NET MVC Framework.

  • .NET Compact Framework 3.5 será liberado a la vez que esta actualización para proveer por ejemplo LINQ, HTTP compression y mejoras para el soporte de audio para dispositivos móviles.
Espero que les sirva de ayuda.

Un saludo

Windows SDK

Una de las características necesarias (pero no suficientes) de todo buen desarrollador de Software es la disposición a aprender a trabajar con nuevas tecnologías, mejores, más potentes, que modifican los hábitos y patrones de trabajo. (En caso contrario valore la posibilidad de dedicarse a la ebanistería... ;))

La rueda de Microsoft no deja de girar y se avecinan tiempos de evolución- revolución con la nueva versión del Microsoft .NET Framework.

Para que se hagan una idea de por donde van a ir, o mejor dicho, ya van, los tiros vamos a explicar algunso aspectos importantes del nuevo panorama.

El Windows SDK contiene todas las APIs para desarrollar la siguiente generación de aplicaciones Windows, incluidas las dirigidas a Windows Vista, y provee los cimientos para el desarrollo de software para las plataformas de cliente y servidor de Windows para el futuro inmediato. (más o menos inmediato que todavía hay por ahí quien desarrolla las aplicaciones en Access...)

El Windows SDK se centra en el .NET Framework 3.0 que contiene las clases con las que ya está familiarizado del .NET Framework 2.0 más WPF, WCF, y WWF.

Estas siglas (no tiene nada que ver con el Pressing Catch!) hacen referencia a los siguientes conceptos:
  • Windows Communication Foundation
  • Windows Workflow Foundation
  • Windows Presentation Foundation
Que veremos más en detalle en siguientes posts.

Un saludo

miércoles, 12 de marzo de 2008

Arquitectura de capa de presentación: Del ayer al mañana (II)

Como los ordenadores se hicieron mas sofisticados, las tarjetas perforadas dejaron paso a los terminales que adquirían y mostraban los resultados del servidor central.


Arquitectura de petición-respuesta basada en terminal

Para un procesamiento muy básico este modo de proceder era útil, pero los requisitos de las aplicaciones informáticas son cada vez más sofisticados, como el correo electrónico, news... para los cuales dichos terminales se han quedado pequeños.

Pese a esto, es común observar en grandes almacenes o grandes tiendas de venta al público, que las cajas siguen funcionando con terminales poco más sofisticados que estos, donde todos los procesos se ejecutan en el servidor pese a tener un PC en la caja con la suficiente capacidad para desarrollar otras tareas. (Upsizing? otro día hablaré de ello...)

Si recuerda algun viejo programa de correo electrónico para terminales como "eml" también recordará la necesidad de tres o cuatro dedos extra para hacer cualquier cosa útil.

Desde el punto de vista de la arquitectura, este escenario no difiere mucho del de las tarjetas perforadas, pero unifica el punto de contacto con el mainframe y cambia el medio del papel a los electrones. Pese a que la arquitectura no cambia la implementación si lo hace y fue este cambio de implementación un factor que encaminó la mejora global de la experiencia de usuario, un hecho que continua hoy en día.

martes, 11 de marzo de 2008

Arquitectura de capa de presentación: Del ayer al mañana (1)

El interfaz de usuario a evolucionado a lo largo de un camino cíclico que abarca desde los clientes ligeros hasta los pesados y vuelta a empezar.

Por un lado, los requisitos de los usuarios así como las demandas de funcionalidad extra conducen al tipo de cliente pesado. Por otro lado, los requisitos y demandas relativas a la facil instalación, actualización y mantenimiento nos conducen a los clientes más ligeros.

Con cada iteración el interfaz de cliente "más ligero" gana funcionalidad y el "más pesado" se vuelve más fácil de instalar, actualizar y mantener.

El interfaz de usuario original fue probablemente el cliente más ligero de todos. Las tarjetas perforadas que se enviaban al servidor central que devolvía los resultados impresos.

Arquitectura simple de petición-respuesta

martes, 26 de febrero de 2008

Cuantas efes hay?

Hoy he leído en microsiervos esta especie de prueba. La cosa consiste en contar el número de efes que existen en el siguiente texto:

FINISHED FILES ARE THE RE
SULT OF YEARS OF SCIENTI
FIC STUDY COMBINED WITH
THE EXPERIENCE OF YEARS...


Pues la respuesta es (
6) <-Selecciona el texto
Cuesta, verdad?
Un saludo
.

miércoles, 20 de febrero de 2008

Diferencias entre las clases Debug y Trace en Microsoft.Net

Otra duda que se repite es la diferencia entre dichas clases.

Las clases Debug y Trace son idénticas. Las mismas exponen los mismos métodos y propiedades, y escriben sus salidas al mismo conjunto de Listeners.

La única diferencia entre Debug y Trace es que las sentencias Debug no están incluidas de manera predeterminada cuando el programa se compila en modo Release, mientras que las Trace si que lo son.

De esta manera, la clase Debug se emplea principalmente para depuración en fase de desarrollo, mientras que Trace puede ser usada para pruebas y optimizaciones después de que la aplicación ha sido compilada y puesta en producción.

Espero que les quede claro y les haya sido de interés.

Un saludo.

Programacición VS Idiotas

"La programación es una carrera entre los desarrolladores, intentando construir mayores y mejores programas a prueba de idiotas, y el universo, intentando producir mayores y mejores idiotas. Por ahora va ganando el Universo"

Rich Cook

lunes, 18 de febrero de 2008

Sabio Miguel de Unamuno

Como decía el gran Miguel de Unamuno:

"No hay mayor necio que el que confunde el valor con el precio"

La sociedad lunar

En la segunda mitad del siglo XVIII, un grupo de científicos, inventores y pensadores se reunían en Birmingham y sus alrededores. La mayoría pertenecían a familias humildes y vivían alejados de los centros de poder, pero juntos iban a cambiar el mundo para siempre.

Era la sociedad lunar y bromeaban entre ellos llamándose lunáticos. La explicación es que se reunían cada noche de luna llena para tener suficiente luz para volver a casa. Una visión tan pragmática como sus integrantes que estaban convencidos de que la ciencia debía servir para mejorar la condiciones de vida de toda la humanidad.

Esto les convirtió en el motor de arranque la madre de todas las revoluciones del Siglo XVIII, la revolución industrial.

viernes, 15 de febrero de 2008

Atentados y suicidios

En el atentado del 11-S de E.E.U.U. 3.074 personas perdieron la vida de forma trágica. No obstante, cada año en E.E.U.U. se suicidan 30.000 personas, que es 10 veces la cantidad de personas que murieron en el 11-S. Teniendo en cuenta que los E.E.U.U. no es el lugar del mundo donde hay más suicidios este es un tema preocupante del que se habla muy poco. Es un tema que nos hace avergonzarnos.

La tasa de suicidios se ha incrementado un 60% en los últimos 45 años. Teniendo en cuenta que el poder adquisitivo (global también) ha aumentado debería aumentar también la satisfacción, pero las cifras nos cuentan otra historia. Según la O.M.S. es el tercer causa de muerte entre los 15 y 45 años teniendo en cuenta que los hombre se suicidan tres veces más que las mujeres. (Aunque ellas hacen mayor número de intentos)

Ale, ya pasó.

miércoles, 13 de febrero de 2008

Clases VS Estructuras

Una duda que me llega con relativa frecuencia es la relativa alas diferencias entre las clases y las estructuras. Vamos a aclarar dichos conceptos y su uso.

(Las próximas veces que algún desarrollador me pregunte, enlace al canto ! ;))

Aparentemente, las clases y las estructuras son muy similares. Ambas pueden contener miembros como campos y métodos, las dos requieren un constructor para crear una nueva instancia y heredan (en .NET Framework) del objeto Object.

La diferencia clave entre las clases y las estructuras es que las clases son Tipos por Referencia y las estructuras Tipos por Valor. A bajo nivel, esto significa las instancias de las clases se colocan en memoria en el Heap mientras que las instancias de datos de las estructuras lo hacen el el Stack.

Acceder al Stack está pensado para ser mas rápido y ligero, pero el almacenamiento de grandes cantidades de datos en dicho Stack puede lastrar el rendimiento general de la aplicación.

En la práctica, esto se traduce en que las estructuras son buena idea para objetos pequeños y ligeros que contienen instancias de datos relativamente pequeñas, o para objetos de corta persistencia.

Las clases son mejores para objetos más grandes, que almacenan mayor cantidad de datos y que se espera existan en memoria durante más tiempo.

Dicho queda, un saludo.

Confiabilidad

El proceso de diseñar para confiabilidad implica revisar el patrón de uso esperado de la aplicación, especificando el perfil de confiabilidad requerido e ingeniando la arquitectura del software con la intención acomodarse al perfil.

Tareas:

  • Especificar los requisitos de confiabilidad en la especificación.
  • Emplee una buena infraestructura arquitectónica.
  • Incluya información de mantenimiento en la aplicación.
  • Emplee redundancia.
  • Use herramientas de desarrollo de calidad.
  • Emplee comprobaciones de confiabilidad que son provistas por la aplicación.
  • Emplee una manipulación de errores consistente.
  • Reduzca la funcionalidad de la aplicación para conseguir la aplicación libre de defectos en vez de completa pero con errores.

El rendimiento de una aplicación se define en base a unas métricas claves, como son el rendimiento de las transacciones y la utilización de recursos. Para determinar el objetivo de rendimiento debe responder a algunas preguntas como las siguientes:

  • ¿Cual es el objetivo de negocio?
  • ¿Cuál es la funcionalidad clave de la aplicación?
  • ¿Cuáles son las características requeridas por los diferentes conjuntos de usuarios?
Un saludo.

martes, 12 de febrero de 2008

La paradoja del mentiroso

Supongamos que les digo:

"Esta afirmación es falsa"
  • Si digo la verdad (verdadero) esto significaría que la afirmación es falsa con lo cual llegamos a una contradicción.
  • Si en cambio la afirmación es falsa la afirmación deberá ser verdadera, lo cual nos lleva de nuevo a una contradicción.
Esto es un bucle extraño en el cada suposición inicial conduce a una refutación de la misma.

Un saludo, ahí les dejo peleando con las afirmaciones verdaderas y falsas.

lunes, 11 de febrero de 2008

Escalabilidad y disponibilidad

Veamos a aclarar algunos aspectos importantes a la hora de evaluar la planificación de una aplicación, como son la escalabilidad y la disponibilidad.

La escalabilidad se define como la capacidad de incrementar recursos para producir un incremento lineal en la capacidad del servicio. A una aplicación se le puede hacer scale-up o scale-out

Las directrices para el escalado:

  • Diseñar procesos que no esperen.
  • Diseñar los procesos de tal manera que no peleen por los recursos.
  • Diseñar procesos conmutables.
  • Diseñar componentes intercambiables.
  • Partición de recursos y actividades.

Disponibilidad es la medida de cuan a menudo una aplicación esta disponible parar su uso. Para decidir el nivel de disponibilidad de una aplicación debe responder a las siguientes preguntas:

  • ¿Quién es el cliente y cuales son sus expectativas?
  • ¿Cuánto tiempo de “no disponibilidad” es aceptable?
  • ¿Hay procesos internos de la compañía que dependen de la aplicación?
  • ¿Qué calendario y presupuesto de desarrollo tiene la aplicación?

Las directrices para diseñar pensado en disponibilidad son:

  • Reducir el tiempo planificado de “no disponibilidad”.
  • Reducir el tiempo no planificado de “no disponibilidad” utilizando Clustering.
  • Utilizar balanceo de carga.
  • Utilizar RAID para el almacenamiento de datos.
  • Aísle las aplicaciones de misión crítica.
  • Utilice colas de mensajes.

Un saludo.

domingo, 10 de febrero de 2008

El cine de Ray Harryhausen

Aunque me gusta el cine no puedo decir que soy un experto en la materia. De todas formas, hoy quería hablar de un director/productor/Responsable de efectos visuales... de cine un tanto particular.

Su nombre es Ray Harryhausen y ha realizado películas como:

Esas películas tienen el encanto de los efectos especiales hechos "a mano" y temática de Dioses y epopeyas. Cine de siesta de fin de semana, pero muy divertido al fin ya al cabo.



Un saludo.

Artium

Hoy he estado visitando el museo Artium.

La definición propia del mismo es la siguiente:



"ARTIUM es un museo y centro de actividades culturales dedicado a coleccionar, producir, difundir, investigar y transmitir el arte de nuestro tiempo. Su finalidad es elevar la cultura artística y desarrollar la conciencia crítica de la sociedad, así como proyectar una imagen de Álava comprometida con el arte y la cultura."

Realmente el museo está bien, es pequeñito pero moderno, tanto en el contenedor como el contenido. Esta bien ubicado en Gasteiz, capital de la provincia de Araba y la entrada (4,5 €) tampoco es la más cara del mundo (El Guggenheim - Bilbao me parece que era 12,5 €).

No obstante, lo que más ha llamado mi atención, es la poca afluencia de público que, al menos hoy, existía. Practicamente estábamos solos con el staff del museo.

Algo se esta haciendo mal con la forma de transmitir la cultura, pero que...?

jueves, 7 de febrero de 2008

Dignidad humana VS Religión

Citando al famoso físico americano Steven Weinberg, ganador del premio nobel de física de 1979:

"La religión es un insulto a la dignidad humana. Sin ella habría gente buena haciendo el bien y gente mal haciendo el mal. Pero para que gente buena haga el mal, se necesita la religión"

No se puede explicar mejor.

Amén

miércoles, 6 de febrero de 2008

Ideal cientifico o cientifico ideal

Contaba mi admirado Richard Dawkins, que existía un anciano profesor en su área que había profundizado apasionadamente en una teoría durante años. Un buen día, un investigador americano vino y refutó completamente la teoría del anciano.

El anciano dio un paso al frente, estrechó su mano y dijo:

"Mi querido amigo deseo agradecerselo. He estado equivocado estos 15 años"

Y toda la clase aplaudió. Era el científico ideal, alguien que había invertido casi una vida entera y le alegraba que le mostraran su error, y que la verdad científica haya avanzado.

viernes, 1 de febrero de 2008

Certificación 70-300 "Analyzing Requirements and Defining Microsoft .NET Solution Architectures"

Hoy he superado con éxito el examen de certificación de Microsoft 70-300 de nombre:

"Analyzing Requirements and Defining Microsoft .NET Solution Architectures"

La llevaba preparando unos meses (tengo poco tiempo para estudiar). El material de preparación es bastante interesante y se centra en el desarrollo de soluciones informáticas desde la perspectiva de la organización, toma de requisitos, metodología de desarrollo, arquitectura de la solución...

Un tema interesante, la verdad.

miércoles, 30 de enero de 2008

Diseño de especificaciones de seguridad (3 de 3)

Unos conceptos muy importantes relacionados con la seguridad son los de autenticar (demostrar que se es quien se dice ser) y autorizar (establecer que puede y que no puede hacer el usuario por ser quien es)

Para diseñar una estrategia de autenticación y autorización se necesita:

  1. Identificar los recursos.
  2. Seleccionar la estrategia de autorización.
  3. Seleccionar las identidades empleadas para acceder a los recursos.
  4. Considerar el flujo de identidad.
  5. Seleccionar el enfoque de autenticación.
  6. Decidir como debe fluir la identidad.
Con esta triada damos por finalizado (de momento) este repaso a conceptos generales relacionados con la seguridad.

martes, 29 de enero de 2008

Diseño de especificaciones de seguridad (2 de 3)

Continuemos viendo las especificaciones de seguridad. Como hemos identificado en el post anterio existen diferentes tipos o categorias de amenazas. Su concimiento nos permite crear un plan o metodología para contemplar una posible respuesta a dichos tipos de amenazas.

Con el fin de tener un guión a la hora planificar esta tarea podemos identificar una serie de pasos para crear un modelo de amenazas son:

  • Organizar una reunión de tormenta de ideas.
  • Aplicar la organización de categorías de seguridad STRIDE.
  • Listar todas las posibles amenazas.
  • Crear apuntes.
  • Investigar.
  • Clasificar el riesgo de cada amenaza.
Por supuesto estas actividades deben tener su soporte tecnológico. Los grandes fabricantes de entornos de desarrollo están ampliamanete sensibilizados con los problemas de seguridad (más les vale) y portan tecnología out-the-box para la correcta gestión de la seguridad de las aplicaciones que sobre ellos se desarrollan.

Por ejemplo, las características de seguridad del Microsoft .Net Framework incluyen:

  • Validaciones de Tipo seguro
  • Firmado de código.
  • Encriptación y firmado de datos.
  • Seguridad de acceso al código.
  • Seguridad basada en roles.
  • Almacenamiento separado.

Finalizaremos en el siguiente post.

¿Por que no se puede viajar más rápido que la velocidad de la Luz?

Todos hemos oído alguna vez que nada puede viajar más rápido que la luz (300.000 km/s) pero alguna vez se han parado a pensar porque ocurre esto. Pues la explicación se la debemos (como no!!) a Albert Einstein.

Hay dos razones por las que es la velocidad límite:
  1. Einstein demostró que la masa de un objeto es más grande cuanto mayor sea su velocidad. Como es fácil deducir, cuanto mayor sea su masa más trabajo nos costara mover el objeto. De hecho, a la velocidad de la luz, la masa del objeto se vuelve infinita, por lo que es imposible acelerarla más. Esta teoría se demuestra en aceleradores de protones donde se envían electrones y protones a una velocidad cercana a la de la luz y se observa como su masa va creciendo.

  2. La segunda razón tiene que ver con el tiempo. Cuanto más rápido nos movemos más se ralentiza el tiempo. De echo al llegar a la velocidad de la luz el tiempo se detiene (y al sobrepasarla iría hacia atrás!!). Este fenómeno se demuestra también en aceleradores de partículas. Por ejemplo los neutrones son inestables y decaen al de pocos minutos. Sin embargo si se acelera hasta una velocidad similar a la de la luz tarda horas en decaer puesto que su reloj interno se ralentiza.
Espero que les haya resultado interesante.

Diseño de especificaciones de seguridad (1 de 3)

Vamos a analizar algunos aspectos relativos a la seguridad de las aplicaciones. Primero veamos los tipos más comunes de vulnerabilidades de seguridad:

  • Contraseñas débiles.
  • Software des-configurado o mal configurado.
  • Ingeniería social.
  • Conexiones de Internet.
  • Transferencia de datos sin encriptar.
  • Desbordamiento de buffer.
  • SQL Injection.
  • Secretos en código.

El conocimiento de dichos tipos de vulnerabilidades nos permite realizar una planificación más detallada de los pasos a seguir y aspectos a tener en cuenta.

Los pilares para crear una estrategia de seguridad incluyen:

  • Confiar en sistemas de seguridad probados.
  • Nunca confiar en las entradas externas.
  • Asumir que los sistemas externos no son seguros.
  • Aplicar el principio de mínimos privilegios.
  • Reducir la disponibilidad de componentes y datos.
  • Colocar como modo por defecto el modo seguro.
  • No confiar en la seguridad por ocultación.
  • Seguir los principios de STRIDE.
Continuaremos con el siguiente post.

jueves, 24 de enero de 2008

Diseño de la capa de datos (3 de 3)

Más aspectos a tener en cuenta en la capa de datos:

  • La normalización es el proceso progresivo de refinamiento del modelo lógico con el fin de eliminar los duplicados y las mermas de espacio de la base de datos.

  • El resultado de la normalización es reducir las inconsistencias y hacer más rápida las modificaciones de los datos.

  • Denormalizar es el proceso de deshacer una normalización para generar tabas con más campos que requieran menos Joins lo que implique una mejora del procesamiento de las Querys.

  • La integridad de datos hace referencia a la consistencia y precisión de los datos.

    • La integridad de dominio especifica un conjunto de valores de datos legitimados para una columna y determina si el valor nulo será admitido.

    • La integridad de Entidad requiere que cada fila en una tabla posea un identificador único, conocido como el valor de clave primaria.

    • La integridad referencial asegura que las relaciones entre claves primarias y claves extranjeras son siempre mantenidas.

Diseño de la capa de datos (2 de 3)

Sigamos analizando aspectos importantes de la capa de datos:

  • Los tipos de datos especifican la clase del dato que será almacenado en un campo y como ese dato será representado.

  • Las claves únicas identifican cada instancia de una entidad dentro del modelo de datos.

  • Las claves extranjeras unen dos tablas en una base de datos.

  • Las relaciones entre las entidades se representan añadiendo las claves de una entidad en las otras tablas.

  • Para optimizar las prestaciones de una base de datos usted necesita:
    • Optimizar su base de datos.
    • Realizar pruebas de estrés a la aplicación.
    • Usar transacciones ajustadamente.
    • Comunicar efectivamente cruzando los limites.
  • Un índice es una lista ordenada de filas en una tabla que el DBMS puede emplear para acelerar las operaciones de búsqueda.

  • Puede optimizar la velocidad de procesamiento de tablas muy grandes participando sus datos, tanto vertical (de una tabla a varias con la misma clave primaria y diferentes columnas) como horizontalmente (de una tabla a varias que contengan las mismas columnas).
Continuamos en el próximo post.

Diseño de la capa de datos (1 de 3)

Vamos a comenzar una serie de posts dedicados a hablar de la capa de datos en la arquitectura de tres capas tradicional. (Datos, negocio y presentación)

En la fase de planificación de la M.S.F., el equipo del proyecto analiza los requisitos de la solución y especifica como los datos serán estructurados, almacenados, accedidos y validados.

Algunos aspectos a tener en cuenta son:

  • Un esquema de base de datos refleja las entidades del problema, los atributos de dichas entidades así como las relaciones entre dichas entidades.

  • El modelo físico de datos de un DBMS define la estructura interna que dicho DBMS para mantener la gestión de dichos datos.

  • Los tres modelos físicos de datos que se emplean normalmente son los ficheros planos, el modelo jerárquico y el modelo relacional.

  • Las entidades y atributos que se derivan durante el diseño lógico son “mapeadas” por las tablas, campos y relaciones en la base de datos.

  • Las tablas son la representación física de las entidades en una base de datos relacional.

  • Las columnas son la representación física de las propiedades en una base de datos relacional.
Seguimos en el próximo post.

miércoles, 23 de enero de 2008

Distribución y capas de la aplicación

Nunca está de más repasar algún concepto básico de la arquitectura del Software.

Un aspecto a considerar a la hora desarrollar un proyecto relacionado con el Software es el método de distribución de la aplicación. Se debe tener en cuenta que las n capas lógicas no tienen que traducirse necesariamente en n capas distribuidas físicamente.

De echo, esta separación física implica una serie de tareas de configuración desde el punto de vista de Sistemas (visibilidad, rendimiento, configuración de firewalls...) y empobrece el rendimiento de la misma, al obligar a realizar una serie de serializaciones y envíos de red que no realizaría sin dicha distribución.

Por otro lado, aporta una poderosa escalabilidad puesto que pueden crecer los requisitos de procesamiento de las diferentes capas, permitiendo una respuesta efectiva. (Clustering, Granja de Servidores, mejor y más potente Hardware)

Como conclusión podemos afirmar que no siempre que haya capas se distribuirá físicamente una aplicación, pero si para poder distribuirla se ha tenido que desarrollar en capas.

viernes, 18 de enero de 2008

Phishing de lo más cutre

Hoy he recibido un mensaje de correo electrónico intentando hacer un Phishing que es de los más cutres que he visto nunca:



El texto dice:

"Debido a las ediciones recientes que aparecieron al la caixa servicio online estamos actualment lanzar un nuevo sistema de la seguridad para parar los escapes de la información.
Para beneficiar de las nuevas instalaciones seguir por favor el acoplamiento abajo.
Para poner al día tu estado de cuenta ***AUTHENTICAR*** y terminar por favor los pasos necesarios.
****Advertencia**** Si no terminas los pasos siguientes tu cuenta se puede exponer a las acciones del fraude. No contestar por favor a este mensaje. Para cualquier investigación, entrar en contacto con el Servicio de Cliente.

"

Usando la traducción automática las cosas no quedan bien rematadas...

En fin, sin más comentarios.

Microsoft y el patrón MVC (Vista Controlador Modelo)

Microsoft planea liberar el patrón Vista-Controlador-Modelo (M.V.C.) para desarrolladores de ASP.NET en la primera mitad de este año. M.V.C. representa un paradigma que interesa a muchos desarrolladores.

Esta muy bien que Microsoft haga estándar "de facto" el uso de ciertos patrones a través de sus herramientas, puesto que estas características "out of the box" hacen que la comunidad de desarrolladores sobre tecnologías Microsoft (la media al menos) de un paso hacia delante.

Por otro lado, debemos decir que el patrón M.V.C. no es nuevo ni mucho menos, que la gente de Java lo conoce y emplea hace unos cuantos años y que la propia gente de Microsoft tenia una implementación del mismo muy interesante a través de un Application Block (User Interface Process Application Block for .NET me parece recordar...)

No obstante, buena noticia para la comunidad de desarrolladores con herramientas de Microsoft.

miércoles, 16 de enero de 2008

Sun Microsystems compra MySQL AB

Hoy se ha anunciado que Sun Microsystem ha firmado un acuerdo definitivo para adquirir MySQL AB, un icono del open-source por aproximadamente 1000 millones de dólares.

Más información...

Triangulo de tradeoff

En los proyectos, existe una clara relación entre las diferentes variables como son: recursos, calendario y características que lo componen. La relación entre dichas variables se ilustra en la siguiente figura:




Como se ve en la imagen, cualquier cambio en uno de los factores implica que se producirán cambios inevitablemente en los demás. La clave para desarrollar una solución se encuentra en el correcto balanceo entre los recursos, fechas de despliegue y características.

A menudo, el equipo del proyecto es reacio a reducir el numero de características de la solución. El triangulo de tradeoff ayuda a explicar las limitaciones y presenta las opciones a sacrificar.

Como manejar los tradeoffs

Antes de nada me gustaría aclarar que la palabra "tradeoff" en castellano significa "sacrificar una cosa por otra". La mantengo en los post por ser un tecnicismo empleado y por mantener una mayor legibilidad en el texto.

Los proyectos frecuentemente fallan, sufren grandes retrasos o exceden el presupuesto planificado. Que el proyecto tenga un alcance ambiguo puede contribuir o ser la causa de estos problemas. El alcance del proyecto especifica que hará o no la solución. Para definir y gestionar correctamente el ámbito de un proyecto de software se debe:
  • Identificar las restricciones del proyecto.
  • Gestionar los tradeoffs del proyecto.
  • Establecer un control de cambios.
  • Monitorizar los avances del proyecto.
En el proceso de identificar y gestionar los tradeoffs del proyecto no es necesario reducir las características de la solución, pero la identificación de tradeoffs puede implicar una reducción de características.

Dicha gestión provee un mecanismo estructurado para balancear todas las partes del proyecto al darse cuenta de que no puede atender todos los objetivos al mismo tiempo. Tanto el cliente como el equipo debe revisar los tradeoofs y estar preparado para tomar decisiones dificiles. El triangulo de tradeoffs y la matriz de tradeoffs son las dos herramientas que la M.S.F. emplea para gestionar dichos tradeoffs.

En el próximo post veremos el triangulo de tradeoffs

martes, 15 de enero de 2008

Las bases genéticas de la ansiedad y la tristeza

Hoy comienzo una nueva serie de post sobre otro tema que me interesa especialmente, la ciencia y el cerebro.

En la sociedad actual existe un gran problema de ansiedad y depresiones. Dichos problemas radican en el cerebro, pero ¿como funciona dicho proceso?

El cerebro humano tiene miles de millones de neuronas que forman un sistema de comunicación que se envian mensajes de una a otra en forma de impulsos eléctricos. Estos impulsos de una neurona a otra se convierten en señales químicas. Ciertas disfunciones en estas sustancias qúimicas estan en la base de la enfermedad depresiva.

  • La depresión severa se manifiesta por una combinación de síntomas, que interfieren la capacidad de trabajar o estudiar del individuo.

  • La distemia es una depresión menos grave pero que también interfiere en la forma de actuar de la persona.

  • En el trastorno bipolar llamado enfermedad maníaco-depresiva la persona afectada pasa de estados de animo alto o euforia a estados de animo bajo.
Como en muchas disfunciones cerebrales la depresión también presenta un a predisposición genética a padecerla. Es bastante corriente en la vejez. La O.M.S. ha concluido que la depresión es el cuarto problema de salud del mundo, ya que afecta a unos 340 millones de personas de todo el planeta.

El trastorno de ansiedad generalizada también está muy extendido entre la población, afecta a 183 millones de personas, la mayoría mujeres. La ansiedad sirve para enfrentarse a situaciones amenazantes, sirve para actuar y estar alerta. Sin embargo esta situación tan util puede ser contraproducente si hay un trastorno. En lugar de una situación adaptada a las circunstancias, la ansiedad se convierte entonces en una situación de estrés constante, fatiga, dificultad para concentrarse, irritabilidad...

Todos conocemos a alguien en estas situaciones, más en una profesión como el desarrollo de Software con tantas presiones de fechas y económicas.

Por lo tanto, si queremos ser productivos, debemos estar alerta respecto a estos factores y ser capaces de manejar la ansiedad evitando que nos domine y nos haga perder el control.

Atajos de teclado para C# en Visual Studio 2008

Ya existe el mapa de atajos de teclado de C# del Visual Studio 2008.

Si lo desean, aquí lo pueden descargar.

Diseño de la capa de presentación (2 de 2)

Existen diferentes tipos de modelos de Interfaz de usuario:
  • Basados en escritorio.
  • Basados en Web.
  • Basados en dispositivos móviles.
  • Basados en documentos.
La ayuda o asistencia técnica se puede proveer a través de cualquiera de las siguientes opciones:

  • Ayuda on-line.
  • Tooltips.
  • Información de estado.
  • Asistentes.
  • Ayuda de accesibilidad.

Para interfaces de usuario de mayor complejidad, podemos plantearnos la posibilidad de desarrollar componentes de proceso de Interfaz de usuario. Dichos componentes de proceso de interfaz de usuario son típicamente implementados en clases que exponen ciertos métodos que pueden ser invocados por los interfaces de usuario.

Estos componentes de proceso coordinan que elementos del interfaz de usuario mostrar. Son abstractos de la forma de representación así como de la funcionalidad de adquisición de datos provista en los componentes de Interfaz de Usuario.

lunes, 14 de enero de 2008

SAF (Strategic Architect Forum).

Durante el pasado Noviembre, se desarrolló en las oficinas de Microsoft Corp. el Strategic Architect Forum, donde se trataron temas como el mundo del Software y los servicios, Data Services para la Web, VoIP, experiencia de usuario para arquitectos entre otros.

Aquí (en inglés) todas las sesiones grabadas en video, transcripciones y presentaciones completas de los 3 días.

Diseño de la capa de presentación (1 de 2)

El diseño de cualquier aplicación no está completo sin especificar la manera en que los usuarios interactúan con el sistema.

La interacción con el usuario se realiza a través de la capa de presentación.

Dicha capa de presentación es la parte de la aplicación que provee el mecanismo de comunicación entre el usuario y la capa de servicios de negocio (capa de negocio) del sistema.

La capa de presentación más simple contiene los componentes de interfaz de usuario, por ejemplo formularios Web. Para interacciones más complejas puede diseñar componentes de proceso de usuario que orquesten los elementos de interfaz de usuario y controlen la interacción con el usuario.

Los componentes de interfaz de Usuario muestran los datos a los usuarios, adquieren y evalúan los datos introducidos por este e interpretan los gestos de los usuarios que indican que el usuario desea realizar una operación sobre los datos.

Además la interfaz de usuario debe filtrar las acciones presentado solo las que tengan sentido en un momento concreto.

Las características que un buen interfaz posee son:

  • Diseño intuitivo.
  • Empleo óptimo del espacio de la pantalla.
  • Fácil navegación.
  • Navegación controlada.
  • Validación de datos de entrada.
  • Menús, barras de herramientas y ayuda.
  • Tratamiento eficiente de eventos.
En el próximo post seguiremos hablando de la capa de presentación

jueves, 10 de enero de 2008

Globalización y Localización (en informática, claro)

la definición de estos términos en el ámbito de la arquitectura informática es el siguiente:

  • Globalización es el proceso de diseñar y desarrollar un producto de Software que funcione en múltiples culturas y localizaciones.

  • Localización es el proceso de adaptar una aplicación globalizada a una cultura y localización particular.

Existen diferentes técnicas para implementar dichas características, pero como norma general tanto los diseñadores como los desarrolladores deben tener en cuenta que cualquier concepto, formato o literal susceptible de variar en diferentes culturas debe ser especificado en un artefacto aparte de la aplicación, con el fin de que pueda ser sustituido por otro en base a la cultura-localización del usuario.

miércoles, 9 de enero de 2008

Reto matemático 2

Si listamos todos los número naturales por debajo del 10 que son múltiplos de 3 o de 5 obtenemos 3,5,6 y 9. La suma de esos números es 23.

Encuentre la suma de todos los múltiplos de 3 o 5 por debajo de 1000.

Resultado del Reto Matemático 1

Pues el resultado del Reto Matemático 1 es:

104743

Este es el número primo que ocupa la posición 10.001

Si desean descargarse la implementación en C# (2.0) de una posible solución pueden hacerlo de aquí

Que es el modelo de amenazas STRIDE? 2 de 2

  • Information disclosure (Revelación de información)
    Un usuario sin autorización obtiene datos privados, como números de tarjetas de crédito y fechas de espiración.

  • Denial of service (Denegación de servicio)
    Cualquier ataque que intenta evitar el acceso a un recurso computacional. Los ataques DoS pueden provocar:

    • Que una aplicación o el S.O deje de funcionar.
    • Utilización masiva de CPU en cálculos innecesarios.
    • Consumo de memoria del sistema de tal modo que se dañen las funcionalidades de las aplicaciones o del sistema operativo.
    • Reducción de ancho de banda.

  • Elevation of privilege (Escalada de privilegios)
    Un usuario consigue mayores privilegios que los planificados por el administrador, creando un usuario malintencionado para lanzar ataques de las demás categorías o amenazas de seguridad.

Pues ya tienen el STRIDE. No me digan que no es interesante.

martes, 8 de enero de 2008

Que es el modelo de amenazas STRIDE? 1 de 2

El modelo de amenazas es una técnica empleada para identificar y categorizar las amenazas de una aplicación.

  • Spoofing identity (Suplantación de Identidad)
    Un usuario malintencionado se hace pasar por una entidad de confianza.
    NOTA:
    IP spoofing es un caso especial de suplantación de identidad. Ocurre cuando un usuario malintencionado inserta una falsa dirección I.P. en una transmisión por Internet de tal manera que dicha transmisión parezca que proceda de una fuente segura. De esta manera el usuario malicioso puede conseguir acceso a un sistema.

  • Tampering (Falsificación)
    Un usuario consigue acceso autorizado a un ordenador y cambia sus operaciones, configuración o datos.

  • Repudiation (Repudio)
    Un administrador de sistemas o agente de seguridad es incapaz de probar que el usuario malicioso ha realizado cierta acción.

Ya tenemos STR... el próximos post el resto.

Bases para la creación de aplicaciones seguras.

Existen algunos conceptos a tener en cuenta a la hora de valorar la seguridad de nuestras aplicaciones:
  • Confiere en los sistemas de seguridad probados y testados. (relativamente, claro)
  • Nunca confíe en las entradas externas.
  • Asuma que los sistemas externos no son seguros.
  • Aplique los principios de privilegios mínimos.
  • Reduzca la disponibilidad de componentes y datos.
  • Por defecto, establezca un modo seguro.
  • No confíe en la seguridad por ocultación.
    Que no tenga ningún enlace no protege el fichero. (menos si Google nos lo indexa ;))
  • Siga los principios del STRIDE. (spoofing identity, tampering, repudiation, information disclosure, denial of service, and elevation of privilege.)
Aun con todos estas características puede que su aplicación no sea segura, pero tenarlos a la vista puede ser un buen hábito.

Saludos y feliz 2008 recién estrenado...