on jueves, 1 de noviembre de 2012


Este sin duda es un tema muy polémico y quisiera aclarar que mi objetivo no es ofender a nadie, si no proporcionar un punto de vista de lo que ocurre en algunas consultoras de software.

Sin duda,  cuando nos dan un sistema heredado para corregir un bug, lo primero que hacemos es encontrar  el error y corregirlo, pero que pasa realmente con ese parcheo, realmente era solo un bug o una señal de que hay vicios ocultos en la aplicación.

Hace un año corregir bugs era el peor de mis miedos en el trabajo, sin duda era por que tenia que enfrentarme a código que no era mio, incluso en varias ocasiones (en la mayoría) era código que no estaba identado, no estaba comentado, no tenia buena nomenclatura, no tenia buena lógica e incluso en algunos casos estaba mas parchado que una llanta de bicicleta, incluso sistemas que se volvían en el antipatrón Stovepipe system, su traducción al español seria sistema parchado.

En mi antiguo trabajo cuando se presentaba un modulo tipo Stovepipe, me presentaba a proponer rehacer el código y codificarlo de acuerdo al proceso de la aplicación. Era increíble que su respuesta fuera que no había tiempo y que solo lo parchara.

Era increíble el desgaste que deja el navegar por un sistema Stovepipe , estar revisando el código y checando la secuencia de su flujo, y lo triste era darte cuenta que ya habían pasado otros desarrolladores y el sistema también se había convertido en un fabuloso y estupendo código espagueti (otro antipatron de diseño).

En conclusión, es más tardado parchar que rehacer código, por que en mi nuevo trabajo, me a tocado corregir módulos, y se a optado en rehacerlos, y el tiempo casi es el mismo solo que ya queda mucho mas estructurado el código y sobre todo, que cumple con el requerimiento.

Cuando se trata de corregir bugs en un sistema bien estructurado, a lo mucho hay que validar objetos nulos, variables mal asignadas, operaciones de mas, manejo de componentes, entre otras cosas.

En conclusión, si el sistema esta asquerosamente mal, hay que pensar en rehacer partes principales acordes al requerimiento. Y si el sistema esta bien hecho, solo hay que corregir esos bugs.

Database workbench

Database workbench es un poderoso manejador de base de datos que te permite gestionar diferentes tipos de servidores de base de datos (MSSql, MySql, Firebird, Interbase), sin duda es de mi agrado ya que te permite utilizar una variedad de herramientas para la gestión de las bases de datos.

pueden descargar una version tial del siguiente sitio:
http://www.upscene.com/

on martes, 30 de octubre de 2012



Que tal, ahora veremos como podemos obtener un objeto Color en WPF en base a su color en hexadecimal, en WPF utiliza el namespace System.Windows.Media y es diferente a la clase color de System.Drawing.Color para evitar confusiones, se recomienda poner como referencia el espacio de nombres de nuestra clase Color en WPF.

using System.Windows.Media;

ahora declaramos e implementamos los siguientes métodos:


public static Color GetColorFromHexadecimal(string hexadecimalNumber)
{
     System.Drawing.Color color = System.Drawing.ColorTranslator.FromHtml(hexadecimalNumber);

     return Color.FromArgb(color.A, color.R, color.G, color.B);
}

dPara poder convertir nuestro numero hexadecimal, que en realidad es una cadena por que trae al inicio el símbolo “#”, es necesario utilizar la clase ColorTranslator y su método FromHtml, que recibe como parámetro justamente un string con un numero hexadecimal. Esta clase nos regresa un objeto de la clase Color pero del espacio de nombres System.Drawing, lo único que tenemos que hacer es convertirlo a la clase Color de System.Windows.Media con el método FromArgb.

Nuestro objeto color que obtuvimos de nuestro método FromHtml, tiene propiedades para el color Alpha, Red, Green y Blue, lo único que tenemos que hacer es utilizarlas para poder crear una instancia.


Ahora declaramos el siguiente método, que ahora nos regresara un numero hexadecimal en base a un objeto Color.

public static string GetHexadecimalFromColor(Color color)
{
     string colorInHexadecimal = "#";

     colorInHexadecimal += color.A.ToString("X2") + color.R.ToString("X2") + color.G.ToString("X2") +    
                        color.B.ToString("X2");

     return colorInHexadecimal;
}

Lo que tenemos que hacer es concatenar cada uno de las propiedades de nuestro objeto color, y convertirlas a string pero en hexadecimal.
Espero que esta información les sea de utilidad.
Enjoy  ;)
on viernes, 26 de octubre de 2012


Cuando tenemos un objeto de tipo object y sabemos cual es su verdadero tipo, tenemos que convertirlo al tipo que es, para eso utilizamos un cast, ahora bien hay dos maneras de hacer un cast en c#, pero antes de eso tenemos que hacer una clase de ejemplo. 

Se las pongo a continuación.


public class Punto
{
   public int X { get; set; }

   public int Y { get; set; }

   public Punto()
   {

   }

   public Punto(int x, int y)
   {
       this.X = x;

       this.Y = y;
   }
}
 
Y supongamos que a nosotros nos llega un objeto, ya sea por medio de un sender o por medio de cualquier otro procedimiento.


object punto = new Punto(1,1);


en algún momento nuestro objeto punto fue instanciado como object, o nos llego a nosotros como object.

Si queremos accesar a nuestras propiedades X o Y del  objeto punto, no nos aparecerán ya que es de tipo object.

Volviendo al tema de los cast, hay dos maneras de realizarlos, recordando de un cast es como un molde que se adapta a la clase que nosotros queramos.

La primer forma es antecediendo el tipo definido (nombreClase)nuestroObjecto
Y la otra es con la palabra reservada “as” nuestroObjeto as nombreClase

Vean el siguiente ejemplo:
 


static void Main(string[] args)
{
    object punto = new Punto(1,1);

    Console.WriteLine(((Punto)punto).X);
    Console.WriteLine((punto as Punto).Y);

    Console.ReadKey();
}


1era forma:

((Punto)punto).X

Los parentecis son para agrupar y poder accesar a nuestra propiedad que nos interesa.

2da forma:

(punto as Punto).Y