Datapayasadas

Octubre 25, 2009

Actualizador (2da Parte)

Archivado en: .Net, C#, Desarrollo — Etiquetas:, — Matías @ 12:11 am

En el artículo previo (Actualizador 1era Parte) llegamos a definir la estructura iba a tener nuestro archivo de actualizaciones, ahora solo nos falta descargar esa información, parsearla y hacer algo útil con ella.

Recuerden que el formato a utilizar en dicho archivo será el siguiente:

ruta relativa y nombre de archivo : versión

donde la primer parte antes de caracter : es la ruta relativa tanto remota como local; y la segunda es la última versión disponible.
Veamoslo con un ejemplo que va a ser más fácil de entender. Suponiendo que mi programa consiste de los siguientes archivos:

C:\Mi Programa\EjecutablePrincipal.exe
C:\Mi Programa\una_carpeta\OtroArchivo.dll
C:\Mi Programa\otro path con espacio\Lala.dll

En el servidor de actualizaciones tendríamos:

http://miservidor.algo/actualizaciones.txt
http://miservidor.algo/EjecutablePrincipal.exe
http://miservidor.algo/una_carpeta/OtroArchivo.dll
http://miservidor.algo/otro path con espacio/Lala.dll

(más…)

Octubre 20, 2009

Actualizador (1era Parte)

Archivado en: .Net, C#, Desarrollo — Etiquetas:, — Matías @ 10:17 am

Buenas,

Esta es la primera parte de una serie de artículos en los que voy a mostrarles como hacer su propio Actualizador para utilizar en sus programas. Todavía no he decidido de cuantas partes va a constar, porque en realidad no he planificado nada, así que si después terminan siendo solo dos, ¡quedan avisados de antemano!.

Comencemos

Por lo general, siempre que creamos un programa y lo liberamos al público, vemos al (poco) tiempo la necesidad de hacerle algunos retoques ya sea por la aparición de bugs (si, si, aparecen de la nada, no es que estaban y los pasamos por alto, jajaja) que nos reportan nuestros usuarios o porque queremos agregarle nuevas funcionalidades. Sea por lo que sea, una parte importante para mantener un software estable es la capacidad del mismo para informar la existencia de nuevas versiones o mejor aún, auto actualizarse simplificándole la vida al usuario.

(más…)

Octubre 19, 2009

IDataPayasadas: Trabajando con Interfaces

Archivado en: 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:

(más…)

Septiembre 11, 2009

Recuperar el QueryString en un WebPart de SharePoint

Archivado en: 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

Archivado en: .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.

(más…)

Agosto 26, 2008

Bug gráfico: TabControl dentro de un SplitContainer

Archivado en: .Net, C#, Desarrollo — Etiquetas:, , — Matías @ 1:54 pm

Hola,

Como recordarán, o no, en un artículo pasado nos ocupamos de solucionar el parpadeo molesto de los ListView, pero lo que nos convoca hoy, es la necesidad de solucionar otro pequeño, aunque también molesto, bug gráfico que incluye el TabControl … bug que se encuentra reportado desde la versión 2005 (al menos), pero que aún no se ha solucionado en la 2008.

(más…)

Julio 28, 2008

Evitando el parpadeo molesto en los ListView

Archivado en: 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?

Archivado en: 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 17, 2008

Aplicaciones en 3 capas

Archivado en: C# — Etiquetas:, , , — pabloide86 @ 6:11 pm

Buenassssamigos…son varias las consultas que me han llegado sobre como realizar una aplicación utilizando la famosa arquitectura de 3 capas. Voy a intentar ser lo mas breve posible para que se entienda el concepto y luego les dejo un ejemplo con codigo fuente para descargar!

La separación en capas es mas un concepto lógico que físico. Se trata de dividir a un programa, o mejor dicho agrupar componentes que cumplen funciones similares para lograr que el código sea mas compacto , para eliminar problemas a la hora de introducir una modificación, para tener mas flexibilidad a la hora de cambiar las partes que componen un sistema, etc.

(más…)

Julio 11, 2008

Realizando búsquedas simples sobre colecciones

Archivado en: 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<Usuario> sublistaUsuarios = usuarios.FindAll(delegate(Usuario u) { return u.IdUsuario < 100; });

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.