Páginas

viernes, 17 de febrero de 2012

Comparación de dos instancias de una Clase Compleja en C#

Una de las funciones mas útiles es “Equals” nativo de la clase tipo object, esto nos ayuda a comparar si una instancia de un objeto es igual a otra, pero cuando contamos con clases un poco mas complejas, donde tenemos varias propiedades, los resultados tal vez no sean muy coherentes, en este caso es mejor realizar un algoritmo de comparación, para esto debemos hacer que nuestra clase esté basado en la Interface IEquatable, y programarla función “Equals”, ahora esto puede ser un asunto muy engorroso si tenemos bastantes propiedades que queremos comparar, y es en este momento que podemos utilizar “Reflection”, en el siguiente ejemplo crearé una clase “credito” con algunas propiedades basada a la interface IEquatable, y en la programación de la función Equals usaremos reflection, para evitar comparar propiedad por propiedad, esto es bastante útil cuando se tiene bastante bastantes propiedades:
   1: public class credito:IEquatable<credito>

   2: {

   3:     public Decimal credito_id { get; set; }

   4:     public String vendedor_id { get; set; }

   5:     public String estado { get; set; }

   6:     public String cliente_id { get; set; }

   7:     public String nombre { get; set; }

   8:     public String apellido { get; set; }

   9:     public DateTime fecha_nac { get; set; }

  10:     public String direccion_domicilio { get; set; }

  11:     public String telefono_domicilio { get; set; }

  12:     public Double numero_cuotas { get; set; }

  13:     public String cedula_conyuge { get; set; }

  14:     public String nombre_conyuge { get; set; }

  15:     public String observacion { get; set; }

  16:     public String email { get; set; }

  17:     public Int64 cotizacion_id { get; set; }

  18:     /// <summary>

  19:     /// Permite realizar comparaciones del objeto de este  tipo 

  20:     /// desarrollado por Patricio Rosado 

  21:     /// </summary>

  22:     /// <param name="other"></param>

  23:     /// <returns></returns>

  24:     public bool Equals(credito other)

  25:     {

  26:         //Se Obtienen la lista de propiedades de los objetos para compararlos uno a uno.

  27:         PropertyInfo [] prop1 =GetType().GetProperties();

  28:         PropertyInfo [] prop2 =GetType().GetProperties();

  29:         for (int i = 0; i < prop1.Length; i++)

  30:         {

  31:             // en caso de que ninguno de las dos propiedades no sean nulas, se comparan.

  32:             if (prop1[i].GetValue(this, null) != null && prop2[i].GetValue(other, null) != null)

  33:             {

  34:                 if (!prop1[i].GetValue(this, null).Equals(prop2[i].GetValue(other, null)))

  35:                     return false;

  36:             }

  37:             else

  38:             {

  39:                 //Caso contrario se revisa que los dos estén nulos, si uno de los dos no es nulo 

  40:                 //Se retorna False.

  41:                 if (prop1[i].GetValue(this, null) == null && prop2[i].GetValue(other, null) != null)

  42:                     return false;

  43:                 if (prop1[i].GetValue(this, null) != null && prop2[i].GetValue(other, null) == null)

  44:                     return false;

  45:             }

  46:         }

  47:         return true;

  48:     }

  49: }

no olvidar hacer un using System.Reflection;

martes, 27 de diciembre de 2011

¿Por que usar Shared Server en Oracle Database?

Una de las cosas que debemos tomar en cuenta cuando tenemos base de datos Oracle, es la cantidad de procesos en el servidor que se pueden ejecutar por cada cliente conectado a la base de datos, estos procesos consumen memoria del servidor, y cuando los requerimientos a la base de datos aumentan, y existen muchas conexiones concurrentes, se nos hace un problema cuando estos procesos se consumen la memoria del servidor.
Oracle tiene una solución bastante practica para estos “problemas” y son los servidores compartidos, con la configuración correcta podemos hacer que varios clientes sean atendidos por un solo proceso en el servidor, estos procesos son llamados despachadores o dispatchers.
Haciendo una balanza se puede hacer que ciertos usuarios tengan conexión a un servidor dedicado, mientras la mayoría este con servidores compartidos, mas información sobre como configurar servidores compartidos en Oracle Database lo encontramos en el siguiente link http://docs.oracle.com/cd/B19306_01/network.102/b14212/dispatcher.htm

miércoles, 21 de diciembre de 2011

Intercalación En SQL Server Analysis Service y SQL Server DataBase

En mi reciente incursión al mundo de Business Intelligence con Sql Server, me he encontrado con ciertas novedades a tomar en cuenta, una de ellas fue la intercalación.
Con aun muy poca experiencia instalé SQL Server R2 y por un alerta que me salía cambié mi idioma de Windows a Español -  España, instalé y luego cambié la configuración en Windows.
Después de un arduo trabajo en sacar un piloto acerca de un cubo de ventas, el cual dicho sea de paso fue todo un éxito, se me ocurrió que era mejor definir los formatos de las métricas en el cubo, para no hacer eso en el cliente, todo estaba bien, pero el gran problema es que me salía el símbolo de Euro, revisé la configuración de Windows y nada, luego fui a la configuración de idioma e intercalación de SSAS y cambio la configuración de español – España a español -  Ecuador, reinicio AS, proceso el cubo y comenzó mi problema. las dimensiones que tenían miembros acentuados o caracteres como la Ñ no podían ser procesados, me lleve bastante tiempo en revisar que era, volví a dejar como estaba, pero no funcionaba, revisé en los foros, y pedí ayuda en los foros de Microsoft,él Colega Guillermo Taylor, me dijo que la solución era simple, tener una intercalación en la Base de Datos, compatible con la intercalación de SSAS, me pareció lógico, mas que nada porque el problema es que mientras SSAS buscaba datos de una dimensión con tildes la base de datos no diferenciaba tildes, así que si SSAS buscaba “Alejandría” la base de datos solo encontraba “Alejandria”, lo revisé, lo dejé idéntico, intento procesar las dimensiones, y NADA….
La solución estaba dada, Guillermo tenía razón, pero además de hacer configurar correctamente la Intercalación de la Base de Datos y SSAS también había que re implementar  todo el Cubo, algo que en ese momento no sabía pero que por instinto lo hice, gracias a Dios encontré ayuda idónea y  salí bien librado.
Tengo mas de 7 años de experiencia con Oracle, pero en SQL Server 2008 me cambiaron muchas cosas de su antecesor SQL 2000 y me siento un novato pero estoy poniéndome al día con los conocimientos, y a medida tenga mas experiencia los comentaré por este medio, puede que estas experiencias ayuden a mas personas.

jueves, 24 de noviembre de 2011

Autenticación en C#

Algo super sencillo de hacer es un proceso de Autenticación, sin embargo muchas personas lo hacen dentro del hilo de ejecución del sistema, poniendo como Pantalla principal el formulario de la contraseña y luego ocultándolo, ya que si se cierra se termina el hilo de ejecución del sistema.
Para hacerlo de una mejor manera podemos hacer lo siguiente…
En nuestro proyecto tenemos el Program.cs, el cual es el principal, agregamos un formulario principal [frmPrincipal] y uno de autenticación [frmAutentica] y hacemos lo siguiente:
en Program.cs tenemos un código parecido a este:
   1: namespace Comercial

   2: {

   3:     static class Program

   4:     {

   5:         /// <summary>

   6:         /// Punto de entrada principal para la aplicación.

   7:         /// </summary>

   8:         [STAThread]

   9:         static void Main()

  10:         {

  11:             Application.EnableVisualStyles();

  12:             Application.SetCompatibleTextRenderingDefault(false);

  13: /*Es en este lugar donde hay que insertar el código que valida el usuario*/

  14:             Application.Run(new frmPrincipal());

  15:         }

  16:     }

  17: }

El código que metemos en ese lugar es el que usamos para invocar nuestro formulario de autenticación, en este formulario validamos el usuario y la clave y damos como resultado  DialogResult.Ok en caso que la autenticación sea exitosa. además para mantener en Memoria, nombre, id y otros datos del usuario podemos crear una clase que guarde estos datos, y luego invocarla. el código puede ser algo parecido al siguiente:


   1: DatosUsuario user = new DatosUsuario();// Aqui se los datos del usuario

   2: frmAutentica auth = new frmAutentica();

   3: auth.user = user;

   4: DialogResult dr;

   5: dr=auth.ShowDialog();

   6: if (dr == DialogResult.OK)

   7: {

   8:     // En el form frmPRincipal creamos una sobrecarga del constructor para que nos acepte el parametro user

   9:     Application.Run(new frmPrincipal(user));

  10: }

Espero esta contribución les ayude.

miércoles, 5 de octubre de 2011

Con Steve Jobs muere una era de la informática.

Tal vez no muchos han tenido la suerte de ver la pelicula “Los piratas de Sillicon Valley”, y aunque es un docudrama no autorizado, habla mucho sobre este gran personaje, Steve Jobs, en la misma película podemos ver también a personajes importantes de la Informática como Bill Gates, Steve Wozniac, Paul Allen, Steve Ballmer, entre otros.

Hago referencia a esta película, porque a pesar de que ya todos conocíamos al empresario Steve, al igual que a Bill, fue con esta película, que al menos personalmente me sentí mas identificado con la informática, me ha servido de inspiración, no solo Jobs, sino también Woz, Gates, y compañía, pues indudablemente eran unos Genios, en toda la extensión de la palabra.

Se acusa a Steve de haber sido arrogante, insoportable, apasionado, y adicto al trabajo, pero ¿quien con menos talento nos creemos la ultima coca cola del desierto?, así es la vida, Dios le dio el talento para cambiar el mundo, para hacer historia, para mejorar con la tecnología la calidad de vida de las personas, pues es así como Steve hizo su contribución con este planeta.

Ahora solo se haba de iPhone, iPod, iPad, pero la historia es mas que eso, Apple I, Apple II, Lisa, Machitosh, que en realidad fueron las creaciones que hicieron de APPLE una empresa de respeto.

Para un muchacho de 21 años, cuando la mayoría de jóvenes a esa edad nos ingeniábamos como cortejar a la chica guapa de la U, Steve ya comenzaba desde un garaje a cambiar el mundo, he ahí lo mas inspirador.

Dentro de esa carcaza de Genio estaba un ser humano, con familia, hijos, esposa, y una vida compleja, llena de enfermedades.

Definitivamente Steve dejará un vacía muy grande en el mundo informático, nos toca esperar que un nuevo genio surja y también se de a la tarea de cambiar el mundo..

Adiós Steve Jobs.

jueves, 22 de septiembre de 2011

Ser Informático… ¿es buen negocio?

Después de un análisis en que hubiera sido el mejor negocio o la mejor profesión a la que me pude haber dedicado llegué a la siguiente conclusión.

1. No importa la profesión o la rama, lo importante es la pasión y amor con la que hagas tu trabajo.

2. La mejor profesión o la que mas nos gusta no siempre nos hará millonarios es mas probablemente seamos chiros.

3. Si queremos tener dinero debemos hacer lo que mas dinero da en el momento y lugar en el que estamos, así no nos guste lo que hagamos.

Además  de estos tres puntos que eran muy generales, me imaginaba que hubiera pasado si hubiese escogido ser otra cosa y no un informático, entonces me puse a ver a mi esposa y sus estudios de Educadores de Párvulos, a mi primo y sus estudios de Arquitectura, a muchos amigos abogados, y otros tantos doctores, y me puse a pensar, que si bien es cierto uno debe hacer lo que a uno lo hace feliz, y cada persona tomará siempre caminos distintos, pero definitivamente existen muchas ventajas de ser un informático.

1. La Informática se aplica a todas las áreas, así que buscar trabajo es fácil.

2. Cuando estás estudiando solo necesitas un computador, toda tu inteligencia, creatividad y lógica. nada de libros de miles de dólares o materiales costosos etc.

3. Definitivamente el pago es bueno cuando trabajas en países del primer mundo, y entre aceptable y mas o menos en los países del tercer mundo.

Lamentablemente en mi país algunas empresas no solicitan DBA, Programadores, HelpDesk, Ing. de Producción, Ing de Desarrollo, Arq. de Software entre otras… si no que es muy común encontrar anuncios que digan…

“Se Solicita Asistente de Sistemas ” (Pueden Creerlo??? Asistente de Sistemas, si leyeron bien, Asistente… a que se refiere?  suena a que  necesito alguien que me traiga el café… pero bueeeeee)

Además piden:

Que tenga titulo de ingeniero en sistemas o afines

Con experiencia en Manejo de Bases de Datos Oracle, Sql Server, DB2.

Programación en .NET, C#, VB, c++, C, Java, php. mínimo de 3 años

claros conocimientos en metodologías  y arquitectura de software.

Conocimiento indispensables en administración de Windows 2008, Linux, Unix, Mac.

Creativo, que trabaje bajo presión, investigativo, y alta capacidad de análisis.

Sueldo: $600

Entonces es ahí en donde me pregunto..

1. Que es un Asistente de Sistemas? suena a Secretario? o es que para preparar un café necesitas un algoritmo? o es que solo vas a recibir llamadas y tramitarlas dependiendo el problema?

2. Alguien a quien se denomine asistente sería capaz de hacer toda la basura que están pidiendo?, es mas ¿Podrá entenderlo?

3. Si en adquirir esos conocimientos algunos tendrían que volver al colegio y universidad y otros incluso volver a nacer,  porque te ofrecen un sueldo menor al de algunos que posiblemente a duras penas saben leer, escribir y hablar?

Bueno son cosas que hasta ahora creo que solo pasan en mi querido Ecuador…

Ser informático es muy rentable solo si trabajamos en Verdaderas empresas serias, o como independientes, caso contrario, mejor dedicarse a vender Huevos.. jeje

miércoles, 24 de agosto de 2011

Patentes ¿Conceptuales?

Al parecer si se te ocurre una idea cualquiera que esta sea y la implementas en tu app, escribiendo tu propio código, incluso sin usar códigos de terceros, y a otro se le ocurrió “el concepto” antes que a ti, tendrás que pagar licencia por el uso de patentes?, tal vez entiendo mal o definitivamente si se nos ocurre poner un botoncito de actualizar versión hay que ver a quien se le ocurrió la idea primero para pagarle por poder desarrollarlo incluso, si la idea fue propia y no copiada?

David un programador Español, es uno de los tantos programadores de app que se encuentran en problemas de patentes, sin haber copiado absolutamente nada, un algoritmo escrito por el e ideado por el, resulto ser similar al de un concepto patentado.. bueno, el asunto esta raro, nadie da razones, nadie dice porque, David no sabe ni que mismo es que ha supuestamente utilizado de esa patente, el asunto es que ya tiene demandas fuertes, ahora el problema es ¿que pasa con la libertad de los programadores?, Facebook, o Myspace tuvieron que pagarle a alguien por el concepto “Redes Sociales”.  bueno no se hasta donde llegue la cosa, en realidad no está clara, mas acerca de esta noticia en http://www.bbc.co.uk/mundo/noticias/2011/08/110824_tecnologia_lodsys_patentes_nc.shtml

Saludos..