Serialización binaria, ejemplo simple

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;
using System.Diagnostics;

namespace ConsoleApplication14
{
    class Program
    {
        static void Main(string[] args)
        {
            //Crea el formatter que es el encargado de serializar
            var formatter = new BinaryFormatter();

            //Es necesario un Strema de cualquier tipo (un FileStream por ejemplo)
            var stream = new MemoryStream();

            //se instancia el objeto a serializar
            var o = new MyClass() { MyProperty = 1, MyProperty2 = "dos", PropiedadIgnorada ="Ignorar" };
            o.SetValorPrivado(true);

            //Se serializa el objeto y se pone en el Stream
            formatter.Serialize(stream, o);

            var data = stream.ToArray();

            //De-serializamos
            var o2 = (MyClass) formatter.Deserialize(new MemoryStream(data));

            
            //verificamos que el objeto de-serializado sea igual al original
            Debug.Assert(o.MyProperty.Equals(o2.MyProperty));
            Debug.Assert(o.MyProperty2.Equals(o2.MyProperty2));

            //La propiedad que no se serializó queda en null
            Debug.Assert(o2.PropiedadIgnorada==null);

            //notar que se serilizan los valores privados también
            Debug.Assert(o.VerificarValorPrivado().Equals(o2.VerificarValorPrivado()));
        }
    }

    //Las clases para serializar con el serializador binario tienen que estar marcadas
    //como Serilizable
    [Serializable]
    class MyClass
    {
        private bool _private;

        public int MyProperty { get; set; }
        public string MyProperty2 { get; set; }

        //con el atributo NonSerialized se ignoran propiedades
        //que no queremos serilizar
        [System.NonSerialized]
        public string PropiedadIgnorada;

        public void SetValorPrivado(bool valor)
        {
            _private = valor;
        }

        public bool VerificarValorPrivado()
        {
            return _private;
        }
    }
}

Teoría de objetos: Diferencia entre clase y objeto

Diferencia entre clase y objeto

Antes que nada vamos a comenzar aclarando una diferencia que muchas veces cuesta comprender: diferencia entre clase y objeto

  • Clase: una clase es un molde, un concepto, una abstracción, por ejemplo: Automóvil
  • Objeto: un objeto es una instancia de una clase, un elemento concreto de una abstracción por ejemplo: MiAuto es una instacia de la clase auto

En C# sería así:

Clase Automóvil:

 

public class Automovil
{
    public void Arrancar();
    public string Marca { get; set; }
}

Objeto miAuto

Automovil miAuto = new Automovil();

Así comenzamos con una pequeña serie de pequeños post con conceptos básicos, espero que los disfruten. Hasta la próxima

Workshop con PC: "Desarrollando aplicaciones Web con herramientas y prácticas actuales".

Los días Lunes 24, martes 25, Lunes 31 de Agosto y Martes 1 de septiembre de 18:30 a 21:30, estaré en las instalaciones del Grupo de usuarios de Microsoft dictando un workshop con máquina sobre desarrollo

La idea es ver el desarrollo de una aplicación web utilizando herramientas y técnicas de uso diario (un poco en contraposición al clásico "novedades de .net 12") para que podamos llevarnos conocimientos para aplicarlos en el día a día, si bien el temario es extenso nada quita que podamos ir abordando temas que surgan en el momento

En resumen, la idea es que todos aprendamos y nos llevemos algo que nos ayudea a mejorar nuestros desarrollos

Entre los temas centrales tenemos

  • ASP.NET MVC
  • UNIT TEST/ MOCKING
  • PATRONES
  • LINQ
  • EXPRESIONES LAMBDA
  • INVERSIÓN DE CONTROL/ INYECCIÓN DE DEPENDENCIAS
  • MÉTODOS DE EXTENSIÓN

Dejo el link de la charla para que se anoten, nos vemos en el MUG

UPDATE: Curso sobre desarrollo en el MUG

Casi termino de redondear el temario para el pequeño curso que voy a dictar en el MUG seguramente a mitad de Agosto, aún falta definir si los cuatro encuentros ser dividirán en dos semanas de dos encuentros y cuatro de uno y los días, lo seguro es que será de 18:30 a 21:30. Dejo el temario actualizado.


Desarrollando aplicaciones Web con herramientas y prácticas actuales.

Cuatro sesiones recorriendo los elementos actuales del desarrollo web utilizando la tecnología.NET

  • 1 - Conceptos básicos:
    • Delegados, Eventos
    • Reflector, la herramienta indispensable
    • Extension methods
    • Expresiones lambda
    • Linq
    • Refactor, mejorando el código
    • Http, verbos, qué pasa en el cable?
    • Html, css
    • 2-Comenzando con la aplicación web, paso a paso:
    • Fiddler, firebug, IEDeveloper toolbar herramientas para tener a mano
    • Asp.net MVC. ¿Por qué? ¿Qué ventajas tiene?
    • jQuery para acelerar el desarrollo de javascript
    • Ajax para hacer más interactiva las aplicaciones
  • 3-Mejorando el diseño:
    • Más de lo anterior
    • Desacoplando las cosas
    • Patrones para todos los días Repository, Factory, etc.
    • IoC
    • Inyección de dependencias
    • ORM
    • Linq2sql
  • 4-Testing y otras cuestiones:
    • Aumentando la calidad de nuestra aplicación
    • Unit test
    • Code coverage. ¿Qué tanto se ha probado?
    • Mocking
    • TDD

Llamada a participación Ágiles2009 en Brasil

Estimado colega,

Qué opinas de formar parte del equipo de expositores que reune nombres como Brian Marick, Diana Larsen, Matt Gelbwaks, Naresh Jain, Dave Nicolette, Alan Cyment, Alexandre Magno, entre otros?

 El próximo lunes 6 de julio será la última oportunidad para presentar tu propuesta de charla en Ágiles 2009!

Ágiles 2009, a realizarse en Florianópolis, Brasil, es un evento sin fines de lucro, organizado por profesionales entusiastas del tema, unidos por el objetivo de crear un espacio amplio de discusión sobre las metodologías ágiles y su adopción en América Latina. Como expositor, tendrás acceso libre a la conferencia y otras ventajas que los organizadores están preparando para ti! Puedes proponer una presentación, un tutorial, un reporte de experiencias o un workshop.

Accede a http://www.agiles2009.org/es/submissions.php para ver la información que debes proporcionar para presentar tus propuestas.

 Esperamos contar contigo en Ágiles 2009!

 Comité Organizador www.agiles2009.org

 

Qué temas y con qué profundidad te gustaría ver en una capacitación?

Estoy delineando algunas ideas para una capacitación con máquina y todo en 2, 3 o 4 encuentros. La idea es ver algunos de los temas que fui presentando en el MUG pero aplicados a problemas reales y vinculados, como "en la vida real"

Qué temas tratar?

La idea es ver:

  • Delegados y esas cosas
  • Linq
  • Exmpresiones Lambda
  • Linq2Sql o Entity Framework
  • ASP.NET MVC
  • jQuery
  • IoC
  • Un poco de patrones
  • Mocking
  • TDD
  • Algunas herramientas como Fiddler, Visual Studio, nUnit, etc.

La idea es recopilar adeptos para armar el curso e ir definiendo el temario para definir el tiempo y sobre todo el costo (si, van a tener que pagar para escucharme :P )

Condiciones

El lugar será el MUG y el horario de 18:30 a 21:30 ya que me parece que pocos pueden (incluído yo) pedirse 3 o 4 días para algo así

Bueno, tiro la piedra, espero sumar adeptos e idea y las iremos sumando para que sea una buena experiencia y que todos podamos aprender

UPDATE

Más o menos voy dando forma al temario, a ver qué les parece

Desarrollo de una aplicacion Web con herramientas y prácticas actuales, en .NET, obvio.

-Conceptos básicos, para entender lo otro:

  • Delegados
  • Eventos
  • Reflector, la herramienta indispensable
  • Extension methods
  • Expresiones lambda
  • Linq
  • Refactor, mejorando el código
  • Http, verbos, qué pasa en el cable?
  • Html, css

-Comenzando con la aplicación web, de a poco:

  • Fiddler, firebug, IEDeveloper toolbar herramientas para tener a mano
  • Asp.net MVC, por qué, qué ventajas tiene?
  • jQuery para acelerar el desarrollo de javascript
  • Ajax para hacer más interactiva las aplicaciones

-Mejorando el diseño:

  • Más de lo anterior
  • Desacoplando las cosas
  • Patrones para todos los días Repository, Factory, etc.
  • IoC
  • Inyección de dependencias
  • ORM
  • Linq2sql

-Testing:

  • Aumentando la calidad de nuestra aplicación
  • Unit test
  • Code coverage, qué tanto se ha probado?
  • Mocking
  • TDD

Es una idea pero para ir definiendo cosas, sobretodo el objetivo, cómo vincular los conceptos de uso diario y actuales

Cómo pasar elementos desde una lista a otra con javascript: con la ayuda de jQuery

Intercambio de items entre listas con jQuery

Como digo siempre el verdadero poder de jQuery se encuentra en los selectores, si bien uno se entusiasma inicialmente con los efectos, animaciones, etc. con el tiempo uno se da cuenta que en el día a día jQuery y sus selectores son sus verdadres aliados, para demostrar esto vamos a ver un ejemplo sencillo de una tarea no tan simple

Seguramente les ha tocado tener que hacer la típica pantalla con dos listas, en la cual se pasan elementos de una a la otra. Se habrán encontrado con algunos problemas para localizar los elementos, verificar que cuando querramos pasar de una lista a la otra haya algo seleccionado, etc. He visto ejemplos de código bien pulidos con unas cuantas líneas de javascript y no tan claro pero que funcionan, bueno, vamos a ver cómo se puede hacer esto con jQuery con 3 o 4 líneas gracias a los selectores

<script language="javascript" type="text/javascript">
$(function()
{
    $("#add").click(function()
    {
        mover("origen", "destino");
    }); 
    
    $("#remove").click(function()
    {
        mover("destino","origen");
    });           
});

function mover(origen, destino)
{
    $("#" + origen + " option:selected").remove().appendTo("#" + destino);
}
</script>

Y el HTML sería

<table>
    <tr>
        <td>
            <select id="origen" multiple="multiple" size="5">
                <option value="1">uno</option>
                <option value="2">dos</option>
                <option value="3">tres</option>
                <option value="4">cuatro</option>
            </select>
        </td>
        <td>
            <input type="button" id="add" value=">" /><br />
            <input type="button" id="remove" value="<" />
        </td>
        <td>
            <select id="destino" size="5">
                <option value="5">cinco</option>
            </select>
        </td>
    </tr>
</table>

Mágico, no sólo es sencillo, sino que podemos usar la función mover para mover elementos desde cualquier lista a otra con varios elementos seleccionados, incluso si fuera un combo y todo gracias a los selectores. Hasta la próxima