Examen 70-536 aprobado

Esta mañana he hecho y aprobado el examen 70-536, primer examen requerido para la certificación Microsoft Certified Technical Specialist de ASP.NET, para la cual haré el segundo y último examen en las próximas semanas.

🙂

A aquellos que sois estudiantes os recuerdo que el programa DreamSpark oferta un voucher gratuito hasta el 30 de junio. Oferta que esperamos que se repita tras la finalización de esta.

Y nada que os animo a certificaros!!!

Silverlight: El sistema de ficheros y configuraciones

Una de las grandes limitaciones que tiene Silverlight es el acceso a disco, esto es debido a su ejecución aislada dentro del navegador. Habréis leído que Silverlight 3 tendrá capacidades de ejecución offline y out-of-browser, el resultado será el mismo ya que funcionaría igual que si siguiera alojada en el navegador.

Por muchos motivos podemos querer persistir en local algunos datos que hemos generado o que nos hemos traído del servidor.

Para ello Silverlight nos propone el Isolated Storage (almacenamiento aislado) donde podemos guardar ficheros y crear una jerarquía de carpetas. Antes de seguir quería comentar donde se encuentran estos directorios en la máquina:

  • Windows Vista/7: C:Users<Usuario>AppDataLocalLowMicrosoftSilverlightis
  • Windows XP: C:Documents and Settings<Usuario>Local SettingsApplication DataMicrosoftSilverlightis
  • Mac OS X: /Users/<Usuario>/Library/Application Support/Microsoft/Silverlight/is

Dentro de esas carpetas lo organiza por grupos, definiendo un grupo por dominio (definiendo dominio como nombre de dominio, puerto y protocolo). De tal forma que los siguientes serían grupos diferentes:

En cambio los siguientes serían el mismo grupo:

La importancia de conocer estos grupos es que a cada grupo el Isolated Storage le va a asignar una cuota de espacio en disco. Por defecto esta cuota está establecida en 1.0 MB ya que para pequeñas configuraciones y un uso “standard” del Isolated Storage sería suficiente. Pero aún así, previo ser aceptado por el usuario esta se puede aumentar a voluntad del programador.

Pero ya ha llegado el momento de usarla. Principalmente tenemos dos clases con las que debemos jugar IsolatedStorageFile y IsolatedStorageSettings. La primera es para todo lo que he dicho hasta ahora acceso a disco, ficheros, carpetas, etc. IsolatedStorageSettings, en cambio, nos sirve para guardar objetos binarios.

El funcionamiento de ambas es muy sencillo, lo vamos a ver mejor con un ejemplo:

var store = 
IsolatedStorageFile.GetUserStoreForApplication();
using (var stream = store.CreateFile("Fichero.txt"))
using (var writer = new StreamWriter(stream))
{
writer.WriteLine("1");
writer.WriteLine("2");
}

Con la función IsolatedStorageFile.GetUserStoreForSite() podríamos obtener el Store del grupo o sitio. Y tras ejecutar el código, ahí tenemos el fichero:

image 

El store tiene muchos métodos a mayores, para comprobar si existe un fichero, ver y modificar la cuota, leer ficheros, crear directorios, etc.

En cambio con el IsolatedStorageSettings es mucho más simple:

IsolatedStorageSettings.ApplicationSettings["Fondo"] =
Colors.Blue;

También tenemos el SiteSettings donde podremos cambiar todas las propiedades a nivel de sitio.

Silverlight es bastante potente a nivel de sistema de ficheros, está limitado a su vez por la isla en la que encuentra,pero que debido a la anatomía de las aplicaciones Silverlight no debería de ser eso un problema.

Los comentarios son bienvenidos 😉

Follow me! http://twitter.com/eugenioestrada

Nos renovamos, nuevo estilo, nuevo nombre, nueva tematica

En mi blog de geeks.ms/blogs/eecsaky, ya llevábamos bastante tiempo con el estilo antiguo del blog y ha sido el momento de renovarlo, hemos cambiado a un nuevo diseño que le de prioridad a los artículos. Un estilo más simple y más elegante.

Entre las novedades del nuevo diseño retomamos dos cosas de los antiguos estilos:

  • Nube de tags: Donde se podrá ver de lo que más se habla en este blog
  • Mis libros: Volvemos a recomendar libros a la izquierda, usando la API de Amazon, tengo la lista de los libros que forman parte de mi librería

Además cambiamos el nombre del blog a “Eugenio Estrada’s Blog” el mismo que tengo en la réplica de weblogs.asp.net/eecsaky. Y también la descripción del blog que junto con la idea de “monotematizar” el blog para tratar temas de WPF, Silverlight, UX Design en general, etc.

Y además quiero renovar los blogs recomendados ya que hay muchos sin actividad, etc. por lo que propongo intercambios de links para el que tenga un blog activo.

Lo dicho, renovados!

Follow me! http://twitter.com/eugenioestrada

Para empezar con Silverlight

Uno de los últimos libros que he adquirido ha sido “Silverlight 2 Unleashed” y tras varias semanas trabajando con él al lado ya puedo recomendar su lectura a los que estén empezando o ya están trabajando con Silvelright. Es una muy buena referencia. Son 550 páginas de código en color que cubre todo los aspectos importantes de Silverlight 2.0. Pero como podrás ver a continuación la tabla de contenidos es muy espesa y variada. Vamos, todo libro que un programador de Silverlight debe tener.

El contenido es el siguiente:

  1. Introducing Silverlight
  2. Understanding XAML
  3. Playing with XAML Transforms and Animations
  4. Expression Blend
  5. Using Media
  6. Blending a Little More
  7. Deploying to a Web Page
  8. Programming Silverlight with JavaScript
  9. Understanding .NET
  10. Progressing with .NET
  11. Progression with Animations
  12. Encoding Videos with Microsoft Encoder
  13. Progressing with Videos
  14. Letting .NET and JavaScript talk
  15. Digging into Silverlight Elements
  16. Digging deeper Silverlight Elements
  17. Using Resources, Styling, and Templating
  18. Data Binging and Using Data Controls
  19. Creating User Controls and Custom Controls
  20. Talking Silverlight 2 One Step Further
  21. Talking Silverlight 2 Even Further
  22. Connecting to the Web
  23. Placing Cross-domain Request and Handling Exceptions
  24. Silverlight: Continuing the Journey

Como podéis ver a continuación el libro vale apenas $31.49 en Amazon, ya sabéis que incluír en vuestra Wish List!

Quién está usando Silverlight? Ebay

Cuando realmente necesita saber si usted ganó el artículo de eBay, use la nuevo herramienta de seguimiento de artículos en subasta creado por eBay usando Silverlight e Internet Explorer 8 (IE 8). Esta herramienta le permite fácilmente el seguimiento de todos los elementos que están interesados en ver, así como que las subastas que haya ganado con una herramienta de arrastrar y soltar que funciona como una barra al lado de eBay en IE 8.


Who’s using Silverlight? Ebay

Post original:

http://team.silverlight.net/announcements/who-s-using-silverlight-ebay/

Traducido por Eugenio Estrada

Últimas noticias: Windows Media Center ofrece NetFlix utilizando Silverlight

Ya es oficial! A partir de hoy Silverlight es compatible con Windows Media Center. Microsoft acaba de anunciar la disponibilidad inmediata del servicio de NetFlix en Windows Media Center para Windows Vista Home Premium o Ultimate. Por debajo, este es el mismo servicio basado en Silverlight que los usuarios puedan obtener de www.netflix.com. Para usarlo en Windows Media Center, es necesario ser un suscriptor de NetFlix y es necesario que usted tenga Silverlight instalado en su PC. Como se muestra a continuación, ahora un nuevo elemento NetFlix aparece en TV + Cine en la interfaz del Windows Media Center.

image

En el primer uso, se le pedirá que instale Silverlight 2, si no está instalado en su máquina. Después de iniciar sesión en su cuenta, tendrá la oportunidad de darse cuenta de que la interfaz de usuario se ha optimizado para la experiencia de Windows Media Center. Aunque tiene acceso al catálogo de NetFlix de más de 100.000 DVDs y la capacidad de buscar y añadir cualquier película de DVD a su cola, la interfaz está diseñada para el descubrimiento y la reproducción de los más de 12.000 «Watch Instantly» títulos fácil. Windows Media Center también ha expuesto su lista de categorías recomendadas que le permite encontrar rápidamente las películas y programas de TV que desea ver. Si su Windows Media Center está sentado en su regazo o directamente conectado a su televisor, la interfaz de usuario funciona igualmente bien. También funciona con cualquier control remoto compatible con Windows Media Center.image

Desde el punto de vista del consumidor, la mejor cosa acerca de esta aplicación es que le ofrecemos la mejor experiencia de streaming adaptable de Silverlight transparentemente protegido por PlayReady DRM que NetFlix ofrece desde su sitio web, pero está integrado en la experiencia de Windows Media Center. Eso significa que usted puede navegar fácilmente a una variedad de contenidos de diferentes proveedores, sin tener que saltar en torno a distintos sitios web. En Windows 7, se pone aún mejor con la adición de un nuevo EPG que integra tanto la programación televisiva y los contenidos de Internet. Esto contribuye al objetivo de Windows Media Center de ser el mejor lugar para ver la televisión en el PC.

Para los proveedores de contenidos como NetFlix, el soporte de Silverlight en Windows Media Center significa que puede aprovechar la mayoría, si no todos, de su anterior desarrollos de Silverlight para llegar a una gran audiencia potencial. Windows Media Center está disponible en la mayoría de los 180 millones de licencias vendidas de Windows Vista en todo el mundo. Windows Media Center cuenta con más de 13 millones de usuarios únicos por mes, que pasan unos 90 minutos en Media Center por sesión. Técnicamente, Silverlight simplemente se conecta a Windows Media Center de la misma forma que se conecta a un navegador web, por lo que apoya todas las características de Silverlight. Sin embargo, eso no significa que cualquier proveedor de contenido puede hacer que su aplicación Silverlight esté disponible en Windows Media Center.

Esperamos que el equipo de Windows Media Center, continúe añadiendo más experiencias de contenido basadas en Silverlight en el futuro.

Tim Harader
Sr. Product Manager
Silverlight Media

 

Traducido por Eugenio Estrada

Post original:

http://team.silverlight.net/announcements/breaking-news-windows-media-center-brings-netflix-to-consumers-using-silverlight/

Tip/Trick: Como cambiar el serial de Office

Alguna vez tenemos que cambiar el serial que tiene nuestro Office. Ya sea por un cambio de licencia, la legalización de éste, etc. Poca gente sabe que no es necesario reinstalarlo. Simplemente siguiendo unos sencillos pasos se puede llegar a cambiar el seria de nuestro office.

Para ello debemos de abrir el menú de inicio ir a “Ejecutar” y escribir: “regedit.exe”.

Una vez que tenemos abierto el Editor de registro debemos de buscar la siguiente carpeta:

HKEY_LOCAL_MACHINESOFTWAREMicrosoftOffice12.0Registration

Donde pone 12.0 debemos de poner el número de nuestra versión:

  • Microsoft Office 2003: 11.0
  • Microsoft Office 2007: 12.0
  • Próximamente Microsoft Office 2010: 14.0

Una vez ahí veremos que hay carpeta del estilo de:

{90120000-0011-0000-0000-0000000FF1CE}

Mirando dentro de esa debemos de buscar en el ProductName el nombre de nuestra versión por ejemplo: “Microsoft Office Professional Plus 2007”, una vez que lo tengamos localizado debemos modificar dentro de esa carpeta el DigitalProductID, por ejemplo cambiándole un carácter.

Una vez hagamos eso, cerramos el editor de registro abrimos una aplicación del Office y automáticamente ya nos pide un serial nuevo.

Como siempre, espero que le sea útil a alguien 🙂

http://eugenioestrada.es/blog

Tip/Trick: Como grabar un CD/DVD desde Windows Vista o Win7

Desde Vista, Windows tiene una utilidad que no mucha gente sabe y es a la hora de grabar un CD o DVD.

Nos ponemos en el caso de que queremos grabar un CD o DVD que solemos hacernos nuestra propia carpeta con los elementos que queremos grabar, etc. Luego tenemos que abrir nuestra grabador nero pirata preferido, añadir los elementos y grabarlo con odioso asistente con miles de opciones que para grabar las fotos de la tarde de verano y el video de la piscina, nos da lo mismo.

¿Qué propone Windows Vista y sucesivos al respecto?

La carpeta donde harás tu colección de elementos será la propia unidad de CD/DVD RW como si fuese una carpeta normal y corriente… y luego… ¿eh? ¿Cómo grabo?

Pues ya ha grabado, cuando expulsemos el CD/DVD tardará un poco más de lo habitual porque estará cerrando el disco, pero éste ya estará grabado.

En Windows 7 además han añadido la opción de grabar imágenes ISO.

http://eugenioestrada.es/blog

Tutorial: Usando el Visual State Manager

image

Tras varios meses trabajando con Silverlight uno empieza a tener buenas práctivas y ver como es más productivo. Por la forma de programar con Silverlight nos obliga a manipular el layout de nuestra aplicación constantemente. Para ello tenemos tres opciones: programáticamente desde C#, con StoryBoards o usando el Visual State Manager (VSM a partir de ahora).

Para nuestro tutorial vamos a crear un control llamado AnimatedImage con un UserControl normal con un Image dentro.

<UserControl
	xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
	xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
	x:Class="EugenioEstrada.AnimatedImage"
	Width="Auto" Height="Auto">
	<Grid x:Name="LayoutRoot">
		<Image x:Name="InternalImage">
		
		</Image>
	</Grid>
</UserControl>

Lo que queremos hacer con este control es sencillo, que al pasar el Mouse por encima de la imagen ésta se escale un 1,5. Y luego que al hacer Click (controlando el MouseDown y MouseUp del ratón) haga una animación. Para hacer las animaciones debemos definir los RenderTransform tanto del Grid como del Image:

<Grid x:Name="LayoutRoot" RenderTransformOrigin="0.5,0.5">
	<Grid.RenderTransform>
		<TransformGroup>
			<ScaleTransform/>
        		<RotateTransform/>
    			<SkewTransform/>
</TransformGroup> </Grid.RenderTransform> <Image x:Name="InternalImage" RenderTransformOrigin="0.5,0.5"> <Image.RenderTransform> <TransformGroup> <ScaleTransform/> </TransformGroup> </Image.RenderTransform> </Image> </Grid>

Sólo hemos definido el Scale, Rotate y Skew porque son los únicos que vamos a modificar luego. Y el RenderTransformOrigin define que el origen de las transformaciones será el punto central del elemento. Dentro del Grid vamos a definir el VSM y también debemos importar el namespace del VSM. Quedando así al final:

<UserControl
	xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
	xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
	xmlns:w="clr-namespace:System.Windows;assembly=System.Windows"
	x:Class="EugenioEstrada.AnimatedImage"
	Width="Auto" Height="Auto">
	<Grid x:Name="LayoutRoot" RenderTransformOrigin="0.5,0.5">
		<Grid.RenderTransform>
			<TransformGroup>
				<ScaleTransform/>
        			<RotateTransform/>
<SkewTransform/>
       </TransformGroup>
</Grid.RenderTransform>
        <w:VisualStateManager.VisualStateGroups>
<!-- A partir de ahora aquí -->
</w:VisualStateManager.VisualStateGroups>
        <Image x:Name="InternalImage" RenderTransformOrigin="0.5,0.5">
     <Image.RenderTransform>
        <TransformGroup>
        <ScaleTransform/>

        </TransformGroup>
        </Image.RenderTransform>
     </Image>
    </Grid>
</UserControl>

Ahora seguiremos dentro del VisualStateGroups, para hacernos una idea de como funciona el VSM  este define ciertos grupos de estados, por ejemplo para poder agrupar por estados que responden al mouse, estados comunes, etc. Sirve para agrupar estados de forma lógica reduciendo la combinatoria de éstos. Luego cada estado lo define un StoryBoard, que es el que establecerá el estado de la UI y luego se podrían definir transiciones entre estados para que no haya inconsistencias en el diseño. En nuestro caso solamente tendremos tresestados: Normal, MouseOver, MouseUp y todos los agruparemos en el VisualStateGroup que llamaremos CommonStates.

<w:VisualStateGroup x:Name="CommonStates">
	<w:VisualState x:Name="Normal"/>
	<w:VisualState x:Name="MouseOver"/>
	<w:VisualState x:Name="MouseUp"/>
</w:VisualStateGroup>

Para hacer esto recomiendo el uso de Microsoft Expression Blend (http://expression.microsoft.com) ya que es mucho más sencillo:

image

Empezaremos definiendo el estado Normal para verlo de ejemplo lo que hará es que desde un escalado del 150% pasará al 100% y esto se haría así:

<w:VisualState x:Name="Normal">
    <Storyboard>
        <DoubleAnimationUsingKeyFrames BeginTime="00:00:00"
            Storyboard.TargetName="InternalImage"
            Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)">
            <EasingDoubleKeyFrame KeyTime="00:00:00" Value="1.5"/>
            <EasingDoubleKeyFrame KeyTime="00:00:00.2000000" Value="1"/>
        </DoubleAnimationUsingKeyFrames>
        <DoubleAnimationUsingKeyFrames BeginTime="00:00:00"
            Storyboard.TargetName="InternalImage"
            Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleY)">
            <EasingDoubleKeyFrame KeyTime="00:00:00" Value="1.5"/>
            <EasingDoubleKeyFrame KeyTime="00:00:00.2000000" Value="1"/>
        </DoubleAnimationUsingKeyFrames>
    </Storyboard>
</w:VisualState>

Lo más complicado es el entender el TargetProperty que es el siguiente:

Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleY)"

No es un acceso intuitivo (del estilo InternalImage.ScaleTransform.ScaleY) esto se debe a como funcionan las DependencyProperties de WPF/Silverlight que nos dará tema para otro artículo. Pero para hacer una vista muy rápida se debe a que las DependencyProperties son métodos estáticos que se encargan de hacer el get y el set mediante eventos. Esto nos permite luego usar todas capacidades de Data Binding que tiene tanto WPF como Silverlight. De una forma muy parecida vamos a crear los otros dos estados:

<w:VisualState x:Name="MouseOver">
	<Storyboard>
		<DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="InternalImage"
			Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)">
			<EasingDoubleKeyFrame KeyTime="00:00:00.2000000" Value="1.5"/>
		</DoubleAnimationUsingKeyFrames>
		<DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="InternalImage"
			Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleY)">
			<EasingDoubleKeyFrame KeyTime="00:00:00.2000000" Value="1.5"/>
		</DoubleAnimationUsingKeyFrames>
	</Storyboard>
</w:VisualState>
<w:VisualState x:Name="MouseUp">
	<Storyboard>
	    <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="LayoutRoot"
			Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[2].(RotateTransform.Angle)">
			<EasingDoubleKeyFrame KeyTime="00:00:00.1000000" Value="30"/>
			<EasingDoubleKeyFrame KeyTime="00:00:00.2000000" Value="-30"/>
			<EasingDoubleKeyFrame KeyTime="00:00:00.3000000" Value="0"/>
		</DoubleAnimationUsingKeyFrames>
	</Storyboard>
</w:VisualState>

Ahora llega el momento de escribir un poco de C#. Debemos manejar los eventos MouseMove, MouseLeave y MouseLeftButtonUp del InternalImage:

<Image x:Name="InternalImage"
	RenderTransformOrigin="0.5,0.5"
MouseMove="InternalImage_MouseMove"
MouseLeftButtonUp="InternalImage_MouseLeftButtonUp"
MouseLeave="InternalImage_MouseLeave">

Y la clase AnimatedImage queda de la siguiente forma con los manejadores de eventos:

using System.Windows;
using System.Windows.Controls;

namespace EugenioEstrada
{
	public partial class AnimatedImage : UserControl
	{
		public AnimatedImage()
		{
			InitializeComponent();
			VisualStateManager.GoToState(this, "Normal", false);
		}

		private void InternalImage_MouseMove(object sender, System.Windows.Input.MouseEventArgs e)
		{
			VisualStateManager.GoToState(this, "MouseOver", false);
		}

		private void InternalImage_MouseLeftButtonUp(object sender, System.Windows.Input.MouseButtonEventArgs e)
		{
			VisualStateManager.GoToState(this, "MouseUp", false);
		}

		private void InternalImage_MouseLeave(object sender, System.Windows.Input.MouseEventArgs e)
		{
			VisualStateManager.GoToState(this, "Normal", false);
		}
	}
}

VisualStateManager es una clase estática y la firma de su método GoToState es la siguiente:

public static bool GoToState(Control control, string stateName, bool useTransitions);

El parámetro control es aquel objeto que queremos cambiarle el estado, el stateName es el nombre del estado al que queremos cambiar y el último parámetro, useTransitions, se usa para establecer si se usarán las transiciones de estado o no, en nuestro caso como no hemos definido ninguna lo establecemos en false.

Y finalmente el resultado es el siguiente:

Tras este artículo se nos abren varias opciones de publicación como Dependency Properties, Data Binding, etc.

 http://twitter.com/eugenioestrada (tweet me!)