Datapayasadas

diciembre 11, 2012

Workflow Foundation 4.0

Filed under: .Net, C#, Desarrollo, WF4 — Etiquetas: , , , — pabloide86 @ 11:57 pm

Buenasss amigosss! Hacía muchísimo que no escribía por acá!

El pasado Jueves 22 de Noviembre fui invitado por la cátedra de .NET de la UTN para disertar en las Mini Charlas Tecnológicas!

El tema que elegí fue Procesos de Negocios con Workflow Foundation 4.0. Me topé con esta tecnología a mediados del 2010 como parte del desarrollo de un proyecto en el que estaba trabajando. En ese proyecto estaban usando BizTalk 2000 y se estaba haciendo una migración hacia .NET, entonces WF4 surgió como un reemplazo natural a esta tecnología.

A continuación, un breve resumen de la charla.

(more…)

diciembre 21, 2011

Performance Tunning: Identificando cuellos de botella

Filed under: .Net, ASP.NET, Herramientas — Etiquetas: , , , , — pabloide86 @ 12:45 am

Holasss amigos! Hacia muchísimo que no escribía por acá! El motivo de este post es compartir mi experiencia con respecto al tunning de performance de una aplicación, mas específicamente de una aplicación web.  Mas que nada para compartir algunas herramientas y procedimientos que me fueron muy útiles a la hora de identificar cuellos de botella en el código.

Por desgracia, este trabajo siempre suele dejarse para el final, cuando todo el trabajo ya esta hecho y estamos al horno con la entrega por lo que cualquier cambio impacta mucho! Asique manos a la obra..

(more…)

julio 17, 2010

Un poquito de Generics

Filed under: .Net, C#, Desarrollo, Generics, Software — Etiquetas: , — pabloide86 @ 1:12 pm

Hola mis queridos List<Amigos>

Hoy vamos a hablar un poco sobre el mundo de los Generics. Vamos derecho al código…

Supongamos que necesitamos un método que devuelve un objeto Persona:

public Persona GetPersonaByID(int idPersona)
{
     var persona = new Persona();
     // Aquí va el codigo para armar el objeto
     return persona;
}

Para llamar a este método lo hacemos de la forma:

Persona objeto = GetPersonaByID(5);

Hasta aquí ninguna novedad. Ahora bien, supongamos que queremos hacer que el mismo método trabaje con cualquier tipo de objetos:

//T: parámetro de tipo
public T GetEntityByID<T>(int idEntity)
{
    // Aquí va el código para armar el objeto. Veremos mas adelante qué necesitamos
    // para instanciar un objeto T
    // ahora se complica un poco mas porque no sabemos bien que tipo de objetos es T
    return entity;
}

Y ahora cuando llamamos a este método le vamos a indicar con qué tipo de objetos tiene que operar:

Persona p = GetEntityByID<Persona>(5);
Ticket t = GetEntityByID<Ticket>(8);
Auto a = GetEntityByID<Auto>(19);

(more…)

abril 9, 2010

Atacando dos frentes: Serialización de objetos y transporte sobre UDP

Filed under: .Net, C#, Desarrollo, Serialización, UDP — Etiquetas: , , — Matías @ 10:10 pm

Hola!, hoy voy a contarles un poco sobre el protocolo UDP y luego mostraré un ejemplo para aprovechar la serialización de objetos de la que les hablé hace unos días.

Como siempre, vamos a empezar por lo más básico.

(more…)

octubre 19, 2009

IDataPayasadas: Trabajando con Interfaces

Filed under: C# — Etiquetas: , — pabloide86 @ 9:00 am

Buenas amigos! Hoy vamos a hablar un poquito sobre el uso de interfaces. ¿Qué son? ¿Para qué sirven? ¿Cómo usarlas? Éstas son algunas de las interrogantes que intentaremos responder.

¿Qué son?

Las interfaces son un conjunto de miembros abstractos (es decir, que no proveen una implementación por defecto) definidos bajo un nombre. Dichos miembros pueden ser por ejemplo métodos.

¿Para qué sirven?

Las interfaces expresan un protocolo o un comportamiento que las clases o estructuras deben implementar. Podemos pensarlo como un contrato que aceptan las clases si quieren implementar ese protocolo.

¿Cómo se usan?

Veamos un ejemplo para aclarar el panorama. Supongamos que tenemos la siguiente interface:

(more…)

septiembre 11, 2009

Recuperar el QueryString en un WebPart de SharePoint

Filed under: ASP.NET, C#, SharePoint — Etiquetas: , , , — pabloide86 @ 4:01 pm

Para recuperar un parametro del QueryString en un WebPart de SharePoint:

Supongamos que queremos recuperar el valor de tipo int del Parametro IdProyecto en el QueryString:

using System.Web;
.
.
.

int idProyecto = Convert.ToInt32(HttpContext.Current.Params["IdProyecto"]);

Espero que les sirva. Saludos!

Parámetros Multivalor con Reporting Services 2005 y ASP.NET ReportViewer

Filed under: .Net, ASP.NET, C#, Reporting Services — Etiquetas: , , , — pabloide86 @ 3:21 pm

Buenasss como les va? Esta vez me trae por aquí este tema de los reportes. Resulta que me han pedido que haga un reporte donde pueda filtrar los valores a mostrar en el reporte pero desde el Report Viewer en una página Aspx…

Empecemos por el reporte. Supongamos que tenemos un reporte que debe mostrar un listado de proyectos y quiero elegir cuales mostrar y cuales no.

(more…)

julio 28, 2008

Evitando el parpadeo molesto en los ListView

Filed under: C# — Etiquetas: , — Matías @ 10:06 am

Buenas,

No se si habrán notado que, por lo general, al actualizar frecuentemente un ListView (al menos en .Net Framework 2.0) se puede apreciar cierto parpadeo que puede llegar a resulta bastante molesto.
La situación rara vez se soluciona utilizando los métodos BeginUpdate() y EndUpdate(), incluso pueden empeorarla.

Investigando un poquito encontré en donde radica el problema: parece ser que la sobrecarga del método Update() del control está mal implementada, entonces actúa como si fuera un Refresh().

Un Update() debería hacer que el control redibuje solo la región invalidada, mientras que un Refresh() debería redibujar toda el área asignada al control, es decir, el control en su totalidad.

Por decirlo de algún modo, si queremos cambiar el color de fondo de un item en particular (propiedad BackColor), solo ese item debería ser redibujado. Desafortunadamente, esto no sucede … o mejor dicho, sucede pero no como debería; el ListView intenta redibujar toda la superficie a pesar de que solo hemos modificado un item.

Afortunadamente existe una forma de evitar esto, solo debemos hacer lo siguiente:

public class ListViewM : System.Windows.Forms.ListView
{
    public ListViewM()
    {
        // Activamos el DoubleBuffering
        // http://en.wikipedia.org/wiki/Double_buffering
        this.SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, true);

        // Activamos el evento OnNotifyMessage, asi tenemos la oportunidad
        // de filtrar los mensajes de Windows antes de que lleguen al WndProc
        // del formulario
        this.SetStyle(ControlStyles.EnableNotifyMessage, true);
    }

    protected override void OnNotifyMessage(Message m)
    {
        // Filtramos el mensaje WM_ERASEBKGND

        if (m.Msg != 0x14)
        {
            base.OnNotifyMessage(m);
        }
    }
}

Espero esta información les sea útil.

Hasta la próxima.

Fuentes:

http://geekswithblogs.net/cpound/archive/2006/02/27/70834.aspx

http://forums.msdn.microsoft.com/en-US/search/?q=ListView%20Flicker

julio 23, 2008

JSON: ¿El XML libre de grasas?

Filed under: C# — Etiquetas: , , — Matías @ 6:21 pm

Buenas,

Hace unos días comencé con un proyectito personal (que posteriormente voy a subir a este sitio) en el cual me encontré por primera vez con la necesidad de usar JSON. Como me sonaban las siglas, pero como no tenía la mas remota idea de que era, decidí recurrir a la Wikipedia en primer lugar, y luego googlear un ratito.
Lo que pude sacar en limpio es:

  • JSON es un acrónimo de JavaScript Object Notation. Es un subconjunto de la notación literal de objetos de Javascript, pero que no requiere el uso de Javascript.
  • Se utiliza como formato ligero para el intercambio de datos, esto es porque tiene una sintaxis más compacta que XML.
  • Suele ser utilizado conjuntamente con AJAX en sitios web (Google Maps usa una mezcla de AJAX con JSON y XML).
  • No existe información que pueda ser representada en XML, que no pueda ser representada en JSON. La inversa también se cumple.
  • JSON es independiente del lenguaje que utilicemos. Existen numerosas librerías para distintos lenguajes que nos simplifican la tarea de parseo y generación de datos con este formato: http://json.org/. La implementación para .Net (Framework 2.0) que he estado probando es la de James Newton-King y realmente esta muy bien lograda (y documentada!).

El título de éste artículo puede resultar es un tanto amarillo, o al menos exagerado en ciertas situaciones … es claro que si utilizamos tecnologías de compresión (como ser gzip) para enviar datos en formato XML o JSON al usuario, cualquier diferencia de tamaño se ve drásticamente reducida.

Sin embago, hay que reconocer, que JSON representa estructura de datos de una forma mucho más simple, especialmente porque fue diseñado para el intercambio de datos, y no como un lenguaje de marcado de propósito general (como XML).

Bien, ahora veamos un ejemplo sencillo de como serializar y deserializar una instancia de una clase sencilla en JSON.

Digamos que tenemos una clase Usuario, de la siguiente forma:

public class Usuario
{
    public string Nombre;
    public string Apellido;
    public int IdUsuario;
}

Vamos a crear una instancia de esa clase y la vamos a serializar utilizando JSON:

Usuario usu = new Usuario();
usu.Nombre = "Juan";
usu.Apellido = "Ceta";
usu.IdUsuario = 1;
string usuarioJSON = JavaScriptConvert.SerializeObject(usu);

Si inspeccionamos el contenido de usuarioJSON (que es simplemente un string) vamos a encontrar lo siguiente, que es nada menos que la instancia usu de la clase Usuario serializada.

{"Nombre":"Juan","Apellido":"Ceta","IdUsuario":1}

Para deserializarla simplemente hacemos:

Usuario usu2 = JavaScriptConvert.DeserializeObject<Usuario>(usuarioJSON);

El objeto usu2 ahora tendra el mismo contenido que tenía usu.

¿Simple, no?

Convengamos que esta no es la única forma de realizar el proceso, pero esto no es más que una introducción.

Si quieren profundizar más ya saben: Google es su amigo.

julio 11, 2008

Realizando búsquedas simples sobre colecciones

Filed under: C# — Etiquetas: , , — Matías @ 11:18 pm

Buenas,

Hoy voy a contarles un poquito como realizar búsquedas sencillas sobre colecciones genéricas en C#.

Imaginemos que tenemos una clase con la siguiente estructura:

public class Usuario
{
    public string Nombre;
    public string Apellido;
    public int IdUsuario;
}

Ahora, podríamos tener una lista con varias instancias de esa clase, llamemosla usuarios:

List<Usuario> usuarios = new List<Usuario>();

Hasta acá nada loco … entonces, si quisiéramos buscar alguna instancia en particular sobre esa lista, como por ejemplo, el usuario cuyo nombre es Matías podríamos hacer algo así:

Usuario usuario = usuarios.Find(delegate(Usuario u) { return u.Nombre == "Matías"; });

Sencillo, ¿no?

El método Find nos devolvería la primera instancia de entre todos los elementos de la colección que cumpla la condición. ¿Cuál es la condición?: la que le pasamos en el predicado. En este último estamos especificando que recorra la colección de objetos de la clase Usuario, y que referencie como “u” a la instancia actual, es decir, donde se encuentra parado en ese momento.
Luego se verifica que la variable Nombre sea equivalente a Matías, esto devolverá un true o false, y finalmente, si la condición se cumple, entonces finaliza el método devolviendo la instancia actual. Si se recorrió toda la colección sin haber cumplido la condición, entonces se devolverá null.

Bien, ahora supongamos que no solo nos interesa obtener la primer ocurrencia que cumple la condición, sino todas aquellas que lo hagan. Ejemplo: queremos encontrar a todos los usuarios de apellido Perez.

Para ello tenemos el método FindAll, funciona básicamente igual que el anterior, pero en vez de devolver una simple instancia, devuelve una colección:

List<Usuario> sublistaUsuarios = usuarios.FindAll(delegate(Usuario u) { return u.Apellido == "Perez"; });

Otro ejemplo: deseamos la lista de todos los usuarios cuyo Id sea menor de 100.

List sublistaUsuarios = usuarios.FindAll(delegate(Usuario u) { return u.IdUsuario < 100; });[/sourcecode] Como verán es una forma sencilla y elegante para realizar búsquedas sobre colecciones en C#. Si desean más información sobre estos métodos pueden ir a la página del Microsoft Development Network, mas precisamente en los siguientes enlaces: para el Find y para el FindAll.

Bueno, esto fue “Realizando búsquedas simples sobre colecciones” para Nintendo 64, y espero que le haya gustado. Chau.
LOL

— M

Blog de WordPress.com.