9.10.2006

Instalando Vista RC1 (5600)

Ya instalé Windows Vista RC1 en mi Inspiron 9400. Mucho, mucho mejor que el CTP de Julio que había instalado antes. Hasta donde he podido checar, todo funcionó a la primera (audio, video, DVD+R, ranura SD). También el desempeño está significativamente mejorado. La instalación no tomo más de 35 mins. (increíble)

Llevo todo el día en esto y ya instalé VS 2005, Office 2003, Office 2007 Beta 2, y una variedad de utilerías básicas. Todo bien.

Vista RC1 se puede obtener del sitio de suscriptores de MSDN. Las utilerías para desarrollar para .NET 3.0 RC1 las pueden obtener aquí http://msdn.microsoft.com/windowsvista/downloads/products/getthebeta/default.aspx . En esa página faltan las utilerías “Orcas” para WPF que están aquí: http://www.microsoft.com/downloads/details.aspx?FamilyID=935aabf9-d1d0-4fc9-b443-877d8ea6eab8&DisplayLang=en

Por cierto, estoy escribiendo este post desde la funcionalidad de “Blog Post” que trae Word 2007. Se conecta a blogger sin problemas y está bastante cómodo para escribir los posts cuando estás off-line.

Si me da tiempo hoy voy a instalar Vista RC1 también en una XPS 600. Espero que todo salga bien, los mantengo informados.

8.30.2006

Llegaron Nuevos Libros

Hoy me llegaron 5 libros de Amazon que pedí para echarme un clavado a fondo en .NET 3.0. Voy a empezar por Applications = Code + Markup de Charles Petzold (Microsoft Press). El estilo de Petzold me gusta mucho porque te lleva de la mano de una manera muy sencilla pero al mismo tiempo toca todos los temas relevantes con profundidad. Voy en la página 30 y me parece muy bueno, espero terminarlo en unos días y pondré aquí mis comentarios finales en un futuro post. También encargué Presenting Windows Workflow Foundation (SAMS), Programming Windows Presentation Foundation(O’Reilly), Microsoft Windows Communication Foundation Hands On! (SAMS), y Software Engineering with Microsoft Visual Studio Team System (Addison-Wesley).

.NET 3.0 es tan amplio que es difícil (y cansado) lograr un entendimiento global razonable sólo de leer artículos en Internet. Creo que los libros son una mejor opción para adentrarse en un tema tan amplio e innovador como este. Además, estoy participando en un proyecto para desarrollar un libro donde desarrollemos una aplicación concreta basada en .NET 3.0 y contar con el apoyo teórico me parece indispensable por decir lo menos.

8.20.2006

¡Podemos desarrollar sobre Xbox 360!

Microsoft acaba de lanzar una versión XNA Game Studio Express de sus herramientas de desarrollo para Xbox que cualquiera puede bajar sin costo. Me parece que este no es un evento menor. Hay millones de consolas Xbox en hogares de todo el mundo. El Xbox ha logrado un posicionamiento dentro de la sala de casa que están muy lejos de alcanzar dispositivos como las PCs con Windows Media Center.

La oferta de Microsoft permite que ejecutes aplicaciones XNA en tu PC sin ningún costo. Para correrlas en tu Xbox hay un servicio de desarrollo que cuesta

Me falta entender cómo podríamos distribuir nuestro software para Xbox. De cualquier manera, a reserva de probar está tecnología próximamente, me parece que como plataforma la Xbox es muy atractiva para aspectos más allá de los juegos. Por ejemplo, empresas que ofrecen contenido en línea pudieran ver a la Xbox como un mecanismo legítimo de distribución y acceso hacia sus clientes. El beta estará disponible a finales de mes. Con éste puedes desarrollar juegos para Windows (con cualquier fin) y para Xbox (sin fines comerciales). A principios de 2007 saldrá una versión con costo que te permitirá comercializar tus juegos también.

Para registrarte al beta puedes visitar connect.microsoft.com .

Ya veremos….

8.09.2006

¡Finalmente! Windows Vista July CTP (5472) en Inspiron 9400 (Finally! - Windows Vista July CTP (5472) on Dell Inspiron 9400)

(Find English text for this post below the Spanish text).

Cuando instalé Vista 5472 en mi Dell Inspiron 9400 no reconoció la tarjeta de video (una SigmaTel 97xx integrada). Encontraba un "dispositivo S/PDIF" pero no se escuchaba nada. Windows Update tampoco encontraba nada.

Bajé los drivers de XP del sitio de Dell y todo parecía estar bien (se escuchaba el audio) pero... resulta que el driver provocaba serias inestabilidades en Vista:

1. El explorer se congela al abrir el panel de control.
2. La búsqueda de Vista se pasma.
3. El "Network and Sharing Center" se pasma.

Encontré estos drivers para un build anterior que son unos para Realtek '97 modificados. Parece ser que ahora todo funciona. Puedes encontrar los drivers aquí.

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

When I installed Vista 5472 on my Dell Inspiron 9400 my sound card was not recognized. The OS found some sort of S/PDIF device but I had no sound at all. Windows Update found nothing either.

I tried downloading drivers from support.dell.com for Windows XP. I got sound but some serious instability ensued as explorer hung when opening Control Panel, when using search with the Windows key and when opening Network and Sharing Center.

After much searching I found this modded Realtek 97 drivers and everything now seems to work fine. You can find the drivers here.

7.25.2006

Conceptos Básicos de Windows Workflow Foundation

En mi exploración de .NET 3.0, estoy dándo una revisada a uno de sus tres pilares (aunque pienso regresar a trabajar con WPF a la brevedad). Se trata del Windows Workflow Foundation. Este nos permite separar de manera muy efectiva la lógica de un proceso de negocio de su implementación en código. En mi opinión tiene el potencial de ayudarnos a definir aplicaciones mucho más flexibles. Predigo que se vana aplicar conceptos de workflow en aplicaciones donde nunca nos lo hubieramos imáginado (Para un ejemplo de este tipo, chequen esta aplicación .NET 3.0 que revisa inventarios de XBOX 360). A continuación algunos conceptos básicos:

Un flujo de trabajo de WWF siempre está compuesto de un conjunto de actividades. Estas son ejecutadas de manera asíncrona por un motor de ejecución provisto por WWF. Las actividades pueden ser simples o compuestas. Una actividad compuesta integra a más de una actividad simple. WWF provee un conjunto de actividades predefinidas y además permite que nosotros definamos cualquier otra con la funcionalidad que necesitemos.
WWF soporta dos tipos de flujos de trabajo:

· Flujo Secuencial: Es aquel donde se ejecutan una serie de actividades en una secuencia predefinida. Esta secuencia puede incluir operadores de control de flujo similares a los que han existido durante años en lenguajes de programación. Por ejemplo, operadores de decisión (if…else) o de iteración (while). Se utiliza para flujos donde nos interesa que el control lo tanga primordialmente el proceso definido.

· Flujo de Máquina de Estados: En este flujo las actividades se ejecutan dependiendo de el estado en el que se encuentre una máquina de estados, así como de las transiciones entre estos estados (que pueden ser iniciadas por las actividades mismas). Se utiliza normalmente para flujos donde se prefiere que el control recaiga mayormente en los usuarios del sistema.

Si quieren saber más, ojalá puedan asistir este próximo Viernes al WTC piso 35 en la Ciudad de México dónde voy a dar una platica nivel 100 de introducción a este tema.

7.18.2006

Reuniones de la Comunidad .NET del D.F.

Les recuerdo que todos los Viernes últimos de cada mes tenemos las reuniones de la Comunidad de Usuarios de .NET del Distrito Federal en el piso 35 del World Trade Center.

La siguiente es el próximo Viernes 28 de Julio. Vamos a tener muchas platicas interesantes. Recuerden que no tiene costo y que no les tratamos de vender nada.

En esta ocasión voy a dar una plática de Windows Workflow Foundation.

Los esperamos.

Introducción al .NET Framework 3.0

El Microsoft .NET Framework 3.0 (antes WinFX) es una plataforma completa de desarrollo que incluye importantes avances en tres áreas que impactan directamente nuestra productividad como desarrolladores:

1. Componentes comunes nuevos para desarrollar la capa de presentación (normalmente la interfaz de usuario) de nuestra aplicación que permite la construcción de experiencias interactivas mucho más atractivas y fáciles de usar. A esta parte de la plataforma Microsoft le llama Windows Presentation Foundation. También se conoce como WPF.

2. Un conjunto de elementos que facilitan enormemente el desarrollo de sistemas distribuidos e interconectados. Estos elementos van más allá de los servicios web para facilitar la comunicación entre desarrolladores. A esta parte de la plataforma Microsoft le llama Windows Communications Foundation. También se conoce como WCF.

3. Servicios de plataforma para sostener el desarrollo acelerado de aplicaciones con elementos de flujo de trabajo. Estos servicios administran el flujo de información para un proceso de trabajo sin imponer ninguna condición sobre los requerimientos de negocio de este. A esta parte de la plataforma Microsoft le llama Windows Workflow Foundation. También se conoce como WWF.

En los próximos meses estaré participando en el desarrollo de una aplicación sobre esta plataforma y voy a estar bloggeando (me comprometo una vez a la semana) sobre este tema.

Si quieren ir experimentando junto conmigo les recomiendo instalar:

· Windows Vista Beta 2.
· Los componentes de ejecución de WinFX Beta 2.
· Visual Studio 2005
· El SDK del WinFX Beta 2
· Las herramientas de desarrollo “Orcas” para WPF Beta 2.
· Las herramientas de desarrollo “Orcas” para WWF Beta 2.
· SQL Server 2005 Express Edition SP1

Nos estamos comunicando por aquí....

5.25.2006

Impresiones Iniciales de Windows Vista Beta 2

Bueno, ayer estuve hasta las 4 a.m. instalando el Beta 2 de Windows Vista. Lo veo mucho mejor que la versión anterior que había probado (el CTP de Febrero).

- Este ya lo pude instalar en mi Dell XPS600 con RAID 0 (NVIDIA ya sacó los drivers necesarios).
- El performance es mucho mejor.
- La interfaz se ve mucho más acabada.
- El sidebar funciona bien y trae más gadgets.
- La instalación es más rápida (ayer instalé en una partición limpia).

También instalé el Beta 2 de Office 2007 pero he jugado poco con el. El Outlook al menos jaló bien. Lo demás no lo he visto, pero de un primer vistazo a Excel veo que no me va a ser tan fácil acostumbrarme a la nueva interfaz.

Me gustó tanto que hoy decidí hacer un respaldo de mi partición de Windows XP e intentar instalar Vista sobre XP. En este momento está aparentemente detenido en Gathering Files (99%) pero no se ha caído, así que le voy a tener paciencia un rato más.

Aventuras en un Framework de Seguridad en .NET (3)

En esta ocasión vamos a hablar del método Authorize (tomado del Microsoft Enterprise Library 2.o) y de los ajustes que son necesarios para llevar la funcionalidad de nuestro UserControl al .NET Compact Framework para soportar dispositivos móviles.

El método Authorize es el siguiente:


///
/// Evaluates the specified authority against the specified context.
///

/// Must be an object.
/// The name of the rule to evaluate.
/// true if the expression evaluates to true,
/// otherwise false.

private bool Authorize(IPrincipal principal, string c, out Behavior b, out bool Evaluated)
{
Evaluated = false;
if (principal == null) throw new ArgumentNullException("principal");
if (c == null ) throw new ArgumentNullException("Control");
BooleanExpression booleanExpression = GetParsedControlExpression(m_strFormName,
c, out b, out Evaluated);

if (booleanExpression == null)
{
Evaluated = false;
return true;
}
bool result = booleanExpression.Evaluate(principal);
return result;
}

La clave aquí es la llamada a booleanExpression.Evaluate(principal) que es un muy útil evaluador de expresiones que viene incluído en el Enterprise Library 2.0. Esta función utiliza el método IsInRole del Principal para evaluar la expresión conforme a las reglas que se le pasan en la cadena c.

Otro aspecto que buscamos en esta librería, es que se pueda utilizar también en el .NET Compact Framework 2.0.

Para esto, la estrategia tiene algunos cambios con respecto al control de escritorio. Los principales son:

1. La evaluación de las expresiones no la hace el dispositivo móvil, sino un servidor a través de un servicio web. esto se debe a que en el caso de un dispositivo móvil, debemos de ser cuidadosos con el consumo de recursos o el desempeño de nuestra aplicación podría verse severamente afectado.

2. Los metodos que nos permiten utilizar reflection para ver que función nos está llamando en AuthorizeMethod no existen en el Compact Framework, por lo que necesitamos pasar explícitamente el nombre del método.

5.03.2006

Aventuras en un Framework de Seguridad en .NET (2)

En esta ocasión voy a analizar algunos elementos que se requieren para satisfacer los puntos 1 y 2 de mis requerimientos planteados anteriormente.

Recordemos brevemente:

1. Que los programadores puedan implementar la seguridad sin programar.
2. Que podamos hacer visibles/invisibles o habilitados/deshabilitados elementos de la IU de manera totalmente declarativa, ya sea en una BD o en XML.

Para satisfacer el punto 1, podemos desarrollar un control gráfico, que simplemente se arrastre con drag and drop a cada forma del proyecto en la que se desea tener seguridad (aquí estamos hablando de Windows Forms).

Mi primera intención fue crear un componente no gráfico (heredando de System.Windows.Forms.Component) ya que este implementador de seguridad no requiere de una interfaz gráfica para si mismo. Sin embargo, me enfrenté a la dificultad de que un componente de este tipo no puede determinar en tiempo de ejecución a que forma pertenece. Existen algunos trucos para determinar esto en tiempo de diseño pero no me gustaron ya que quedaría una solución frágil ante renombramientos y cambios de ese tipo.

Por lo tanto opté por desarrollar un control (heredando de System.Windows.Forms.UserControl) que se vuelve invisible en tiempo de ejecución. No tan elegante como quisiera pero funcional. Se parece al viejo timer de VB6, ¿se acuerdan?

Para que este control pueda encargarse de configurar la interfaz en tiempo de ejecución, necesita analizar al correr todos los elementos gráficos de la forma e ir encendiendo/apagando/habilitando/deshabilitando los elementos de la IU conforme a las reglas de seguridad declaradas. Sin embargo, no es suficiente con hacer esto al cargar la forma. ¿Qué pasa si el código del programador enciende o habilita programáticamente un control que no debería para el usuario firmado? Por esta razón es necesario también establecer manejadores de los eventos OnEnabledChanged y OnVisibleChanged de los controles bloqueados para poder levantar una excepción de seguridad en caso necesario.

El código que itera sobre los controles se ve más o menos así:

private void AuthorizeControls( Control main)
{
IPrincipal iprin = Thread.CurrentPrincipal;
Behavior b;
bool bEvaluated = false;
foreach (Control c in main.Controls)
{


if (c.Controls.Count > 0)
AuthorizeControls(c);


if (!Authorize(iprin, c.Name, out b, out bEvaluated))
{
switch (b)
{
case Behavior.Enabled:
c.Enabled = false;
c.EnabledChanged += new EventHandler(c_EnabledChanged);
break;
case Behavior.Visible:
c.Visible = false;
c.VisibleChanged += new EventHandler(c_VisibleChanged);
break;
case Behavior.Both:
c.Enabled = false;
c.EnabledChanged += new EventHandler(c_EnabledChanged);
c.Visible = false;
c.VisibleChanged += new EventHandler(c_VisibleChanged);
break;
}
}
else
{
if (bEvaluated)
{
switch (b)
{
case Behavior.Enabled:
c.Enabled = true;
c.EnabledChanged -= new EventHandler(c_EnabledChanged);
break;
case Behavior.Visible:
c.Visible = true;
c.VisibleChanged -= new EventHandler(c_VisibleChanged);
break;
case Behavior.Both:
c.Enabled = true;
c.EnabledChanged -= new EventHandler(c_EnabledChanged);
c.Visible = true;
c.VisibleChanged -= new EventHandler(c_VisibleChanged);
break;
}
}
}
}
}

void c_VisibleChanged(object sender, EventArgs e)
{
throw new System.Security.SecurityException
(m_strUISecurityException);
}

void c_EnabledChanged(object sender, EventArgs e)
{
throw new System.Security.SecurityException
(m_strUISecurityException);
}

Este código está un poco simplificado. Para completarlo hay que contemplar la posibilidad de manejar controles que viven dentro de objetos ToolStrip. Desafortunadamente estos contenedores no tienen a sus controles "hijos" en una colección Controls sino en Items por lo que hay que considerar esa diferencia también.

En la siguiente actualización voy a hablar de como se autorizan los controles (como funciona el método Authorize.