Haciendo balance… Feliz 2009!

 rusovcz9jmG5

 

Bueno, ante todo felicitar el año a todos… tal cual se avecina suerte a todo el mundo :). Por otra parte, haciendo un poco de balance este año me ha traído unas cuantas cosas que quiero citar aquí:

El cambio de vida, del colegio a la facultad; cumplimos un año en Lusco Tekhne; la mayoría de edad. Pero los tecnológicamente más importantes.

iPhone 3G

El lanzamiento del teléfono maquero ha sido un gran boom que ha generado un punto de inflexión en la telefonía móvil. Uno de los gadgets de los cuales no me puedo separar de él ahora mismo.

FIC.NET Club

El haber empezado con la creación del dotNetClub de Coruña ha sido un aventura muy emocionante en menos de 3 meses tiene un número muy considerable de miembros y esperemos hacer cosas muy interesantes.

DevCamp Guadalajara

El DevCamp de Guadalajara fue uno de los eventos a los que he asistido que más me ha gustado, mezcla de contenido técnico y lúdico.

TechEd Dev Emea

Hito estrella del año 2008, una semana llena de contenido técnico y con experiencias únicas.

n1430140234_137270_1359

Por otra parte…

El 2009 nos depara muchas cosas… Windows 7, Visual Studio 2010, .NET 4.0, ¿Office 14? (algo sabremos seguro).

A saber que más nos traerá!

Lo dicho, suerte en 2009!!! Seguiremos en contacto por los medios habituales: blog, facebook, twitter, messenger, correo…

http://eugenioestrada.es/blog

Época festiva y la publicidad engañosa…

Estos días podemos ver en la televisión un anuncio que me ha dejado alucinando, se trata de una cadena de informática y electrodomésticos que basa sus anuncios en completas estupideces. Impactante si. Pero a mi entender degrada la imagen de la empresa.

En la línea de sus anteriores anuncios el de estas navidades me ha llamado mucho la atención. Son dos personas en un avión donde comparan la adquisición de cada cual su portátil. El individuo que había comprado su equipo en dicha empresa esgrimía el argumento de que esgrime es que su equipo tenía una tarjeta gráfica de 256 MB.

No sólo eso, ahora vemos una nueva versión de dicho anuncio cuyo reclamo es idéntico. Ahora bien, el problema es que quien vea el anuncio sin tener un poco de idea dirá: WOW tiene 256 MB de gráfica. Cuando realmente desde que salió Vista por allá finales del 2006 la gran mayoría de los portátiles traen una tarjeta gráfica de 256 MB ya que es lo mínimo necesario para correr un Vista Home Premium. A pesar de que también los PCs con Vista Home Basic también incluyen dicha memoria en la tarjeta gráfica.

No creo que a éste hecho se le pueda llamar publicidad engañosa, no engaña a nadie específica aquello que tiene el portátil. De todas formas no me parece ni ético ni moral por parte de ésta cadena tener una publicidad que crea falses expectativas. Ya que la persona que vea dicho anuncio y vaya comprar este producto se pensará que está comprando algo mucho mejor que lo que realmente es.

No se… ¿qué os parece?

Seadragon, el iphone y mas

image Aprovechando el lanzamiento por parte de Microsoft, su primera aplicación para el iphone quería contaros que es eso de Seadragon, Deep Zoom, Photosynth y en general Live Labs.

Ultimamente se ha puesto de moda hacer público unos departamentos que hasta ahora estaban en la sombra. Los laboratorios de investigación de los departamentos. Como Live Labs y Office Labs. Ambos laboratorios se traen entre manos proyectos muy interesantes. En este post nos vamos a centrar en los primeros Live Labs y en concreto en los proyectos Deep Zoom y Seadragon.

Entre otros uno de los proyectos más importantes de Live Labs es Photosynth se trata una herramienta online en la cual ingresando fotos de una misma ubicación nos genera un mundo en 3D, es muy recomendable su visita. Deep Zoom es otro de los proyectos estrella, coge una imagen panorámica de grande proporciones y te permite visualizarla en resoluciones menores, permitiendo hacer un zoom haciendo efecto de profundidad. Para ello necesitamos de Deep Zoom Composer que es la herramienta que te permite fragmentar la imagen para poder realizar ese efecto con Silverlight. Y aquí es donde entra en juego Seadragon.

Seadragon es una API de AJAX que permite hacer ese mismo efecto que hacemos con Silverlight pero con los estándares de la Web. No solo eso, te permite navegar en los mundos 3D de Photosynth (vistos en 2D).

En definitiva Microsoft, antes de sacar su cliente para Windows Mobile lo ha hecho para Iphone, permitiendo ver imagenes de alta resolucion en el Iphone. Es muy curioso os recomiendo echarle un vistazo.

http://eugenioestrada.es/blog

Google Chrome deja de ser beta

El emergente navegar Google Chrome ha dejado de ser beta, una beta que ha durado a penas unos 100 días, 3 meses en los que Google ha madurado el producto.

No voy a entrar en polémicas de otras ocasiones sobre si Google Chrome es un sistema operativo, un puñal a Firefox o el que supondrá la eliminación de Internet Explorer.

Simplemente me pregunto, ¿qué nos ofrece Google Chrome? En un momento en el que la guerra de navegadores ya se había decantado entre dos entra el tercero en discordia con una interfaz muy simple, permite integrar como si fuese una aplicación servicios de Google como Google Reader, Google Docs o GMail.

Pero… ¿qué más? A mi esto me sabe a poco. No tiene ni un simple botón de inicio. O acaso pensará Google que estas cosas suponen una complejidad en la interfaz. La verdad no lo se… pero bueno… que Google se olvide de sus amigos de Linux y Apple ya no tiene perdón.

El canon significa gratuidad

Tras ver como la SGAE era sancionada por atentar contra la privacidad, he reflexionadao sobre el famoso canon y he llegado a la conclusión de que el propio canon está atentando contra la propiedad privada.

Al comprar un producto multimedia estamos pagando por éste y por el supuesto uso ilegal que podríamos hacer uso de él. Lo cual en teoría debería darnos derecho a hacer el uso legal e ilegal, ya que estás pagando por ambos. Incluso podría llegar a decir que estás convirtiendo una acción legal a una acción ilegal.

Muchas veces pretenden equiparar el mundo de la música (y/u otros productos multimedia con derechos de propiedad intelectual) con el software y yo creo que estamos muy equivocados al hacerlo.

Principalmente por un mótivo, al comprar un producto de software estás comprando una licencia de uso que conlleva ciertos compromisos por ambas partes, es un contrato de uso. Es normal que se permite más de X instalaciones ya que significaría que la empresa de software se estaría atando a todas aquellas instalaciones. El mundo libre tiene un modelo válido  y respetable basado en la oferta de servicios al rededor de un producto libre, favoreciendo la libertad de elección a la hora de obtener dicho servicio. Cada uno puede obtar por el que quiera.

En la música, al comprar un álbum ¿estás comprando el disco o estás comprando una licencia de uso en algunos ámbitos restringidos? Tu compras, que yo sepa, el disco. Si el modelo ha cambiado que me avisen. Comprando el disco, su contenido, tienes derecho a copiarlo para escucharlo en el coche, por el cual pagas canon; meterlo en tu ipod, también pagas canon; en tu ordenador, más canon; o hacer un collage de fotos e incluirle esa canción que tanto te gusta (canon, canon, canon).

Por lo tanto, si pago canon quiere decir que puedo reproducirlo en ese medio. No solo eso, ¿una compra de un producto lo ata a una persona? ¿quién dice que el disco que está en las escaleras de tu casa, entre tu casa y la de tu vecino, es tuyo o es de tu vecino? ¿o aquel disco que te preste del grupo que vimos en aquel concierto? ¿no tenemos derecho a compartir?

Continuando en el mundo de los derechos de autores. ¿un libro no puedo prestarselo a un amigo? ¡qué eliminen las bibliotecas! (o que paguen canon). ¿Acaso se ha dejado de vender libros a causa de las bibliotecas? Hablo de las bibliotecas porque es lo más parecido a un programa peer to peer. Un lugar donde la gente comparte, o una institución, comparte aquellos libros que ha comprado.

El caso es que si a alguien le gusta un libro, lo compra. La producción literaria se ha disparado en las últimas décadas, al igual que la producción musical, cinematográfica, etc. Y cuantos más alla a repartir de la tarta menos parte del pastel se llevarán. Es lógico, no pueden pretender que porque ahora haya más cantantes todos vendan lo mismo que vendían.

El problema nos lo podemos encontrar en la venta ilicita de contenidos. En ese caso, si veo normal un canon, dos o los que hagan faltan, pero ¿nos dedicamos todos a la venta de contenidos? (yo si… pero no digais nada…, nos os fastidia, claro que no!). Por lo tanto todos los dispositivos atados al canon ni se usarrán ni la mitad para ese comportamiento ilegal del cual se podrían quejar.

No se… Esto es una pequeña reflexión en alto. Creo que el canon es una ¡barbaridad!.

Todos contra el canon: www.todoscontraelcanon.es

Por cierto… Si pongo la música en mi casa, se oye por la ventana y lo escucha la gente ¿tengo que pagar canon?, voy a ponerla bajita por si acaso. O mejor, no esuchar música que total para la calidad tan pésima de música que tenemos aquí… Espero que los contenidos extranjeros no estén atados al canon, eso o comprar en amazon.

http://eugenioestrada.es

Ibas a pasarte a Yoigo? Y si te dieran 5 euros de saldo?

3[1]


Si, si, como lo oyes… (o lees). Desde la tienda online de yoigo puedes poner que vienes recomendado por mi y te darán 5 € en saldo. A mi me darán 20 € y tu luego podrás invitar a más personas para beneficiarte tu de esos 20 €. ¿Qué te parece?


Así que ya sabes, si te haces de Yoigo, pon que vienes de parte de 622729682 y los dos saldremos ganando.


Podéis ver más información de la promoción en: http://www.yoigo.com/aqui_un_amigo/


http://eugenioestrada.es/blog

Cómo persistir un objeto que tiene métodos y delegados

Normalmente usamos el XmlSerializer para persistir objetos en disco, para clases simples nos sirve, pero el problema es cuando intentamos persistir clases más complejas con delegados y métodos no nos sirve. Un escenario de uso puede ser planificador de tareas. Para empezamos a crear la clase que vamos a persistir.

[Serializable]
public class Tarea
{
    [Serializable]
    public delegate void TareaDelegate();

    private readonly TareaDelegate tarea;

    public Tarea(TareaDelegate Task, DateTime FechaEjecucion)
    {
        ejecutada = false;
        tarea = Task;
        fechaEjecucion = FechaEjecucion;
    }

    private bool ejecutada;

    public bool Ejecutada 
    {
        get { return ejecutada; }
    }

    private readonly DateTime fechaEjecucion;

    public DateTime FechaEjecucion
    {
        get { return fechaEjecucion; }
    }

    public void Ejecutar()
    {
        if ((FechaEjecucion < DateTime.Now & Ejecutada == false))
        {
            tarea();
            ejecutada = true;
        }
    }
}

Son muy importantes las etiquetas Serializable tanto de la clase como del delegado ya que sino no funcionará la persistencia. Como véis la clase es bastante sencilla: un delegado, una variable del delegado, una serie de propiedades y el método ejecutar que si se ha cumplido unas condiciones se ejecuta.

En nuestro caso estamos haciendo el ejemplo en una aplicación de consola, en la clase de ésta vamos a incluír los dos siguientes métodos:

public static void Tarea1()
{
    Console.WriteLine("Hola");
}

public static void Tarea2()
{
    Console.WriteLine("Adios ;)");
}

Y en el método Main escribimos lo siguiente:

//Creamos una lista de tareas
var ListaDeTareas = new List<Tarea>();

//Declaramos un par de tareas, les ponemos como fecha de ejecución
//ahora para que se ejecuten en el mismo momento
var Tarea1 = new Tarea(Tarea1, DateTime.Now);
var Tarea2 = new Tarea(Tarea2, DateTime.Now);

//Las añadimos a dicha lista
ListaDeTareas.Add(Tarea1);
ListaDeTareas.Add(Tarea2);

//Creamos el formateador a binario
var formatter = new BinaryFormatter();

//El stream donde vamos a guardar las tareas
var stream = new FileStream("tareas", FileMode.OpenOrCreate);

//Serializamos nuestra lista y liberamos el stream
formatter.Serialize(stream, ListaDeTareas);
stream.Close();

Y cuando queramos leer las tareas usamos el siguiente código:

//Creamos el stream
var stream = new FileStream("tareas", FileMode.Open);

//Obtenemos la lista del archivo
var Lista = (List<Tarea>)formatter.Deserialize(stream);
stream.Close();

//Recorremos las tareas y las ejecutamos
foreach (var tarea in Lista)
{
    tarea.Ejecutar();
}

Debemos importar los siguientes nombres de espacio:

  • System.IO
  • System.Runtime.Serialization
  • System.Runtime.Serialization.Formatters.Binary

Éste código nos generará un código parecido a éste dentro del archivo:

image

Espero que sea útil.

http://eugenioestrada.es/blog

Como hacer una aplicacion con temas usando WPF

Si quieres crear una serie de skins para usar con WPF es mucho más sencillo que en Windows Forms. Para ello debemos tener claro el concepto de recurso en WPF.

Un recurso es todo aquello que no es específico, por ejemplo, un botón puede ser un recurso, un color puede ser un recurso, una brocha puede ser un recurso, todo aquello que tu puedes reutilizar más tarde. Estos se guardarán en lo llamado ResourceDictionary, pero mejor vemos un ejemplo, vamos a crear un archivo llamado blue.xaml, con el siguiente contenido:

<ResourceDictionary 
      xmlns=http://schemas.microsoft.com/winfx/2006/xaml/presentation 
      xmlns:x=http://schemas.microsoft.com/winfx/2006/xaml>
      <Style TargetType="{x:Type Button}">
        <Setter Property="Background" Value="Navy" />
        <Setter Property="Foreground" Value="LightBlue" />
      </Style>
      <Style TargetType="{x:Type RadioButton}">
            <Setter Property="Foreground" Value="Navy" />
      </Style>
      <Style TargetType="{x:Type TextBox}">
            <Setter Property="Background" Value="LightBlue" />
            <Setter Property="Foreground" Value="Navy" />
      </Style>
</ResourceDictionary>

Una vez que ya tengamos nuestro diccionario, tenemos que ver como añadirlo a nuestro proyecto. Nosotros podemos crear tantos Diccionarios de recursos como queramos.

Para ello debemos ir a ver el App.xaml y vemos el siguiente tag:

<Application.Resources>
      <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                  <ResourceDictionary Source="blue.xaml" />
            </ResourceDictionary.MergedDictionaries>
      </ResourceDictionary>
</Application.Resources>

Bien, como véis podemos añadir a los MergedDictionaries el diccionario de recursos que queramos aplicar. Pero nosotros lo que queremos es poder cambiarlo, para ello debemos acceder a estos MergedDictionaries y para cambiarlo. Lo primero es crear un diccionario debemos hacerlo así:

ResourceDictionary blueTheme;
blueTheme = new ResourceDictionary();
blueTheme.Source = new Uri("blue.xaml", UriKind.Relative);

Después vamos a tener que acceder a dichos diccionarios y cambiarlo:

Application.Current.Resources.MergedDictionaries.Clear();
Application.Current.Resources.MergedDictionaries.Add(blueTheme);

Y con eso ya podemos cambiar el skin, si tenemos varios skins fácilmente podemos crear varios ResourceDictionary y podremos modificar los skins.

Es bastante sencillo.

http://eugenioestrada.es/blog