Archivo para abril, 2008

Strategic Pattern

Posted in Patrones de Diseño on abril 28, 2008 by César Intriago

The Architect

El Strategic Pattern es un patrón de diseño cuyo concepto es poder definir un conjunto de algoritmos intercambiales, de tal forma que el cliente que los use no se vea afectado. Para tratar de explicar este patrón de diseño tomemos como ejemplo un sistema que permita crear super héroes (como un juego), sabemos que todo super héroe tiene varios poderes especiales, un nombre y una identidad secreta. Los poderes pueden ser distintos entre personajes, por ejemplo Flash es el "hombre más rápido", pero no vuela como Superman y Ironman. Strategic Pattern nos permite modelar este tipo de situaciones, la idea es programar contra interfaces y no clases concretas, separarando las partes variables de lo estático. En este caso lo variable es el tipo de poder especial que tiene cada personaje.

Diagrama UML:

En este diagrama UML separamos la parte variable (color verde) y definimos una interfaz IPoderEspecial, la cual posee el método Activar() que se encarga de activar el poder especial del personaje. Las implementaciones reales están definidas en las clases Volar, VisionCalorifica, Velocidad y Fuerza; por otro lado la clase Heroe implementa la IPoderEspecial (por el principio de programar contra interfaces y no clases concretas), la clase Heroe define aspectos estáticos del personaje, y expone un método abstracto llamado MostrarSímbolo() el cual muestra la imagen representativa de cada héroe, finalmente son las clases concretas Flash, Ironman y Superman quienes definen cada personaje y establecen la habilidad de cada uno mediante el métodod ActivarPoder().

Básicamente este patron de diseño no es de utilidad cuando tenemos varios algoritmos (o super poderes) que un cliente (super héroe) puede utilizar, podemos cambiar estos algoritmos (ya que están separados y encapsulados) sin tener que afectar el cliente, lo que nos ayuda a reutilizar código y mantenerlo bajo patrones claros.

Anuncios

Pimp your Dock

Posted in Apple, Tutorial on abril 23, 2008 by César Intriago

Con Leopard viene un nuevo Dock 3D, el cual es muy sencillo de modificar, por ejemplo en mi caso lo cambié por uno de color negro como se ve en la siguiente figura:

Para cambiar el dock, se deben reemplazar 4 archivos png por las imágenes del nuevo dock, estos son los pasos:

  1. Descarga nuevos Docks de http://leoparddocks.com

  2. Entra a Mac HD / Sistema / Librearía / CoreServices

  3. Clic derecho en "Dock" y selecciona "Mostrar el contenido del paquete"

  4. Entrar a Contents / Resources /

  5. Realiza una copia de seguridad de los siguientes archivos:

    • scurve-l.png

    • scurve-m.png

    • scurve-sm.png

    • scurve-xl.png

  6. Luego arrástralos a la papelera

  7. Copia o mueve los nuevos archivos descargados a esa carpeta (Deben tener los mismos nombres)

  8. Abre la Terminal y escribe "Killall Dock" (Sin las comillas y respetando mayúsculas o minúsculas)

  9. Listo, el Dock deberá aparecer con el nuevo estilo.

Happy tunning

Historias de taxis

Posted in Opinion on abril 22, 2008 by César Intriago

Por cuestiones de trabajo, me tengo que desplazar bastante dentro de la ciudad usando aquel famoso medio llamado Taxi (amarillos y no amarillos). La de historias que salen de conversar con los señores del volante pana, ejemplo:

Uno resultó ser actor de doblaje, resulta que había doblado al español a Tom Hanks en la película Expreso Polar, tenía un programa famoso de radio hace fuu, profesor, relacionar público, etc. Me estaba llevando por la ciudad un actor de alto calibre y yo ni cuentaffff.

A otro lo llamó a media “carrera” la esposa, y la casi bronca porque pensaba que el pana andaba con otra, hasta me tocó hablar para decirle que no andaba con otra jermu en el carro.

En otra ocasión me tocó un medio político – fanático, que porque me vió saliendo del banco con corbata que habrá pensado que me preguntaba que “¿Cómo anda la administración?” y qué opino del Presi Correa, entonces le dije que lo veo bien, y que no le pare mucha bola a la prensa para que no peleen…. uuuufffff me llevó toda el viaje que sí, que no se qué, que el Presi es el todo poderoso, que toda la prensa son un asco, corruptos vendidos, etc, etc, gorditas horrorosas y demás jaja, un personaje el Sr. chofe.

Nada como los nombres de los lugares, por ejemplo, cuando estoy en Quito y quiero ir al hotel Hilton Colón, toca decir “Al Colón”, pero en Guayaquil no saben que es eso, ahí toca “Al Hilton”.

En Colombia por otro lado era reggaeton a fffuuullllLLLLLL.

Algunos ya no cobran en dólares, sino en Yanquis !

Otro tuneadasos, del tipo rápidos y furiosos, hasta en los aros casi las -calcamonías-. 

Cosa que interesante la nota ah ah, así que gracias a los señores del taxi que llevan de un lado al otro, no cometerán imprudencias por favor, luego x qué las pu13@d4s.

Ya chao, :: 8L@ck0ut ::

Tenis de Mesa

Posted in Opinion on abril 21, 2008 by César Intriago

Hoy estaba viendo la tele, cuando por ahí en el canal 6 (cable), veo un programa deportivo nacional, y de verdad era DEPORTIVO ya que hablaban de mas de un deporte (no como los otros programas “deportivos” juass juass). Bueno este programa la verdad se me escapa el nombre pero las veces que lo puedo ver siempre me ha parecido muy bueno, hoy pasaron un reportaje del torneo latinoamericano de Tenis de Mesa Mega5 que se desarrollo en Cuenca (que se realizó por junio-julio del 2007) , me acordé de la época de colegio cuando era un adicto a este deporte y entrenaba con un buen grupo de compañeros y amigos, así que entraron las ganas de volver a jugar, falta ver donde y listo. De lo que se vió estuvo intresante el Mega5, se vio buen tenis de mesa, y camaradereía entre los países, así que felicitaciones y sigan adelante !!

Complejo Deportivo Totoracocha, Cuenca, Ecuador

 

El Tenis de Mesa es un deporte excelente que demanda estado físico, reflejos, velocidad, control, disciplina, enfoque, después de todo en menos de un segundo hay que tomar algunas decisiones como determinar como el oponente regresa la bola, pensar la forma de devolver, la dirección y golpe/efecto… te saca la madre. Lo mejor es que veo más colegios que incorporan este deporte a sus actividades.

BlackoutNews

Posted in Aplicaciones, Blend on abril 11, 2008 by César Intriago

Esta será una mini-aplicación desarrollada en Windows Presentation Foundation, que podrán descargar y usarlar para ver mensajes RSS ( como los mensjaes de este Blog! ). Está en pañales la aplicación, pero la idea es que sea visualmente novedosa y útil. En la siguiente imagen podrán ver un prototipo de la aplicación:

La navegación de los menús será tipo iPod, con animaciones para cambiar las pantallas. Como todo buen primer protitpo, aquí está el ejecutable para que la descarguen y prueben los menús ya que es lo único que funciona:

BlackoutNewsPrototipo.zip

NOTA: No hay un botón para cerrar la aplicación todavía, así que Alt+F4.

ACTUALIZACION (19-abr-2008): He dado las vueltas por todos lados, y una cosa que parecía tan simple como crear un UserControl heredado de otro, ya no es sencillo con WPF, hay unas formas de hacerlo usando C# (No se puede con XAML o usando VS o Blend) pero es tedioso, así que tendré que esperar para hacer algo simple hasta que WPF esté mas completo.

Formas de escribir código

Posted in Opinion on abril 5, 2008 by César Intriago

public void ContenidoMensaje()

{

Estando algunos años en el tema de desarrollo y trabajando con varios profesionales, algo que siempre me ha llamado la atención son las distitnas formas que tenemos para escribir código o el “estándar” de nomenclatura. Esto le he evidenciado en algunas personas que al preguntarle el por qué escriben de cierta forma, la respuesta es PORQUE ASÍ ME ENSEÑARON EN LA U, y algunos lo defienden a muerte, y lo peor es que no tiene ninguna razón ni saben bien por qué escriben así, es decir adoptan un estilo por tradición y a ciegas sin haber analizado las ventanas y desventajas. Personalmene en la universidad me explicaron distinos estándares (Camel, Hungarian Notation, etc..), sus ventajas y desventajas, y que como profesionales deberíamos poder decidir que usar.

Por ejemplo, cuantos escriben código usando esta notación:

int intEdadPersona;
string strNombrePersona;

Podrá estar mal o bien, personalmente no me gusta para nada este estilo, y no le veo ninguna utilidad de anteponer tres letras que denoten el TIPO de dato, me parece anticuado y que puede llegar a ser confuso, con lenguajes que actualmente están fuertemente tipificados e IDEs que facilitan conocer en cualquier momeno el tipo de una variable, esto es innecesario, se han puesto a leer un libro de programación?, han visto si usan ese estándar antigüo?.. pues creo que no. Solo piensen en el caso de que creen sus propias estructuras: Persona, Carro, Perro:

Persona prsNombre;

Carro crrModelo;

Perro prsNombre (no hay como porque se repite), prsNombrePerro?, prrNombre?

Una vez tuve la oportunidad de leer un libro de estándares para desarrollar para .Net Framework escrito por los autores del mismo Framework, básicamente recomiendan que las variables se debe nombrar por lo que representan y no por lo que contienen, por ejemplo:

string nombrePersona;

La variable nombrePersona contiene como su nombre lo indica, el nombre de un individuo, y no me dice que es un string (str). De esta forma se tiene un código mas limpio y fácil de leer y mantener. Porque qué pasaría si tengo una variable llamada intEdad, y la uso en muchas partes de mi código, y luego por cosas de la vida veo que es necesario que la edad se guarde como cadena y no como entero?, hay que modificar el nombre de la variable en todas sus ocurrencias por un simple cambio en el tipo de dato (que viva el “refactor” pero igual es un esfuerzo operativo innecesario).

Veo que esa notación de nombres media Hungarian Notation (porque ni si quiera es el estándar completo) es usada bastante, específicamente en nombrar variables y en tablas. Por otro lado .Net Framework usa esta notación en las interfaces al anteponer la letra ‘I’. Yo uso parcialmente esta notación en algunos nombres de controles, pero no más.

Otros casos que me parecen confusos es cuando la usan en nombres de tablas, es muy probable que luego de un tiempo ni el que se inventó los nombres recuerde que significan las letras que puso: por ejemplo SAC_CAL_DET_ESTUDIANTE, tan claro como el agua verdad?, obviamente se tratata del Sistema ACadémico, y esa tabla almacena las CALificaciones DETalladas del ESTUDIANTE, o… ¿era el CALendario DETallado del ESTUDIANTE??

Mi recomendación final para todos los desarrolladores/estudiantes/profesores/profesionales no es que se cambien de un estilo a otro, mas bien piensen bien la nomenclatura que usan, que tiene de bueno y malo, lo uso porque así me enseñaron en la universidad?, que tal si el profesor estaba equivocado. Para los que estudian, no crean siempre en lo que dice el profesor (yo fui profesor, y esa frase me la dijo un profesor) , investiguen y tengan capacidad de decisión, algunas veces la única diferencia entre un alumno y un profesor es un capítulo del libro; una forma de progresar y mejorar es también cambiando e innovando y no mantener tradiciones por que sí y ser profesionales de cabeza cuadrada.

}

Sabías que… Aceleración de Hardware y WPF

Posted in Opinion, WPF on abril 5, 2008 by César Intriago

Con Windows Presentation Foundation, tener una tarjeta de video potente y moderna, no te garantiza un desempeño rápido de WPF que use 100% aceleleración de hardware, depende también de tener drivers actualizados de las tarjetas de video y si usas Windows Vista (WDDM) o Windows XP (XPDM).

WPF solo aplica el anti-aliasing (suavizado de líneas) para dibujos 3D en Windows Vista, en Windows XP se verán líneas un poco “pixeladas”.

Cuando WPF evalúa una tarjeta de video, se analiza la RAM disponible, “pixels shaders” (entre otras cosas permiten efectos de transparencie), y demás factores que le permiten asignarle una puntuación a la tarjeta de video, esto se conoce como “Rendering tier” ( ¿Capa de Dibujo? ). Los 3 posibles “Rendering tiers” son 3:

  • Rendering Tier 0: Significa que tu tarjeta de video no puede proveer aceleración por hardware.
  • Redering Tier 1: La tarjeta de vide puede proveer acelearación de hardware parcial.
  • Rendering Tier 2: Siginifica que todo usará acelareación por hardware en todo lo que pueda.

Lo mejor de todo es que podemos conocer el “Rendering tier” de nuestra tarjeta de video usando un sencillo código en .Net, Lo que necesitamos usar es la propiedad estática Tier, esta propiedad la podemos encontrar en la clase System.Windows.Media.RenderCapability. Por ejemplo:

public static int NivelDibujo
{
get
{
// Convertimos el RenderingTier de 16 bits.
int nivel = RenderCapability.Tier >> 16;  return nivel;
}
}

Y pueden bajar el código fuente desde aquí