martes, 15 de diciembre de 2009

Aplicación Pomodoro en C# Mobile 6.5 – Int32.Parse()

Bueno, no es oro todo lo que reluce y me he encontrado conuna limitación del framework para mobile: no existe mi tan mentado y agradecido método TryParse.

Osea que en vez de:
string texto;
int numero;

if (Int32.TryParse(texto, out numero))
{ numero = numero + 1;}

Tengo que hacer algo más feo como:

if (texto == string.empty)
{ numero = 0; }
else
{ numero = numero + 1; }

Y además dejo fuera los posibles fallos por introducir algo que no sea un número, o un número más grande que un entero de 32 bits.

P.D. También puedo utilizar el método Int32.Parse() y capturar la excepción. Pero para este caso específico me resulta mejor el uso del código anterior.

jueves, 10 de diciembre de 2009

Presentación de Historias desde Azeroth

Un nuevo blog en mi haber que se centra en las andaduras del humano Paladín Bendem F'Lar por las tierras de Azeroth.

Historias desde Azeroth.

Por si no sabeís de qué demonios estoy hablando, la temática trata sobre el juego de rol on-line World of Warcraft de Blizzard.

miércoles, 9 de diciembre de 2009

Presentación de "Moscas a Cañonazos"

Soy humano, y por ende contradictorio, polifacético y gregario. Y releyendo este blog tecnológico he visto unos cuantos post relacionados con la sociedad y sus imperfecciones que no creo que sea este el lugar más apropiado para compartirlo con el resto de, creanlo existen, lectores.

Por ello a mediados del 2009 he creado un blog específicamente para compartir mis opiniones, personales y muy posíblemente polémicas llamado Moscas a Cañonazos.

Tal vez tenga menos contenido, pero seguro, seguro que será más generalista.

lunes, 7 de diciembre de 2009

Aplicación Pomodoro en C# Mobile 6.5 – Cómo el singleton ha cambiado la arquitectura de la aplicación

Dándole vueltas al tema de los delegados, eventos y suscriptores, me día cuenta que me venía ni pintado utilizar el patrón singleton para instanciar una y solo una vez los tres o cuatro formularios de la aplicación y así poder suscribir el método del combo de tareas a realizar a todos los eventos de los diferentes formularios.

Este “ligero” cambio, literalmente, me dio la vuelta a toda la arquitectura de la aplicación ya que inmediatamente saltó a la vista que no necesitaba eventos, al poder crear un método público al cual invocar donde y cuando quisiera en el resto de la aplicación y, sorpresa, a costa de memoria la aplicación se volvió rapidísima.

Después de una par de horas revisando pros y contras y dándole vueltas a la cabeza decidí olvidar los eventos y los delegados e irme por el camino del método público ya que tiene un nivel de acoplamiento menor y se visualiza mejor en el intellisense.

Lo primero es hacer el código de instanciación Singleton de los tres formularios de la aplicación. Para refrescar la memoria os cuento que este patrón se utiliza cuando necesitas que un objeto se instancie solamente una vez, como es este el caso.

Lo primero es hacerme una clase llamada formularios, que será la que me realice la instancia de los diferentes formularios. Y cortarle la creación de la clase por defecto haciendo el método protected. (ya no puedo hacer un formulario = new formulario();).

public class formularios
    {
        protected formularios() { }
    }

A continuación le creo una variable privada estática del tipo de la propia clase igualada a nulo, que será la que utilice para saber si la clase formulario está instanciada o no.

        private static formularios instancia = null;

¿Para qué, te preguntarás? Pues para cuando desde fuera se consulte  a la propiedad pública estática del tipo de la clase formularios que devuelva una instancia de la misma, en el método get de la propiedad consulte a la variable y si está nula que cree un nuevo objeto o si no que devuelva siempre la instancia ya creada anteriormente.

        public static formularios Instancia
        {
            get
            {
                if (instancia == null)
                    instancia = new formularios();

                return instancia;
            }

        }

Fale, muy bonito. Pero dónde creo los formularios… pues a continuación.

        public Pomodoro Pomodoro = new Pomodoro();
        public Inventory Inventory = new Inventory();
        public ToDoToday ToDoToday = new ToDoToday();

Quedando el código de la siguiente manera:

    ///
    /// Instancia los formularios de la aplicación.
    /// Utilizo el patrón singleton para evitar que me instancie cada vez formularios diferentes.
    ///
    public class formularios
    {
        private static formularios instancia = null;
        protected formularios() { }
        public static formularios Instancia
        {
            get
            {
                if (instancia == null)
                    instancia = new formularios();
                return instancia;
            }
        }
        public Pomodoro Pomodoro = new Pomodoro();
        public Inventory Inventory = new Inventory();
        public ToDoToday ToDoToday = new ToDoToday();
    }

Así, por ejemplo, para navegar de un formulario a otro simplemente lo invoco a la instancia única de la clase formulario. Lo cual me da MUCHA velocidad:

formularios.Instancia.Pomodoro.Show();



Y para llamar a un método público del formulario principal desde cualquier otro formulario lo invoco asi:

formularios.Instancia.Pomodoro.recargaComboToDo();



N.A. Este código tiene un fallo perverso que debo de refactorizar con calma para ver de eliminarlo. Y es que un futuro desarrollador puede realizar las llamadas directas a los constructores públicos de los formularios y reventar todo el flujo de la aplicación. Asíque debo buscar la forma de impedir que se pueda acceder a estos constructores a menos que sea desde esta clase “formularios”.

Ya os iré contando.

Oracle Reporting Builder


Por cosas del destino y desatino de la administración pública, me he convertido (hasta el día 18 de diciembre) en el becario más caro de la aplicación de Oracle Reporting Builder. Posiblemente la peor aplicación de reportes que he visto nunca en las casi dos decadas que llevo en esto de la "informática".

Pero no nos quejemos que seguramente en dos semanas estaré buscando trabajo - o no- y centrémonos en intentar compartir un exasperante error de esta "magnífica" herramienta.

Llegas a trabajar por la mañana, abres el Reporting Builder y cargas el reporte que dejaste funcionando el Viernes pasado. Le dices que quieres "ejecutar disposición de papel" para ver por donde continuar y te devuelve un delicioso error asegurandote que hay algún código PL/SQL sin compilar.



Pos na', a compilar. Y entonces te alerta de un error de código y te indica que no encuentra la referencia a una tabla del FROM!!!. ¿Pero qué demonios? Declarar una tabla como si fuera un parámetro/variable? Esto se ha vuelto loco?



No, no se ha vuelto loco. Simplemente los mensajes de error son de lo más patético que me he encontrado nunca y lo que me está indicando - gracias Roberto por transmitirme tu enorme experiencia con este monstruo - es que no estoy conectado a la base de datos.

Ctrl + J, introduzco los datos de conexión y listo. Solucionado el problema y a continuar en el infierno... :)

miércoles, 2 de diciembre de 2009

En defensa de los derechos fundamentales en Internet

Ante la inclusión en el Anteproyecto de Ley de Economía sostenible de modificaciones legislativas que afectan al libre ejercicio de las libertades de expresión, información y el derecho de acceso a la cultura a través de Internet, los periodistas, bloggers, usuarios, profesionales y creadores de internet manifestamos nuestra firme oposición al proyecto, y declaramos que:
  1. Los derechos de autor no pueden situarse por encima de los derechos fundamentales de los ciudadanos, como el derecho a la privacidad, a la seguridad, a la presunción de inocencia, a la tutela judicial efectiva y a la libertad de expresión.
  2. La suspensión de derechos fundamentales es y debe seguir siendo competencia exclusiva del poder judicial. Ni un cierre sin sentencia. Este anteproyecto, en contra de lo establecido en el artículo 20.5 de la Constitución, pone en manos de un órgano no judicial -un organismo dependiente del ministerio de Cultura-, la potestad de impedir a los ciudadanos españoles el acceso a cualquier página web.
  3. La nueva legislación creará inseguridad jurídica en todo el sector tecnológico español, perjudicando uno de los pocos campos de desarrollo y futuro de nuestra economía, entorpeciendo la creación de empresas, introduciendo trabas a la libre competencia y ralentizando su proyección internacional.
  4. La nueva legislación propuesta amenaza a los nuevos creadores y entorpece la creación cultural. Con Internet y los sucesivos avances tecnológicos se ha democratizado extraordinariamente la creación y emisión de contenidos de todo tipo, que ya no provienen prevalentemente de las industrias culturales tradicionales, sino de multitud de fuentes diferentes.
  5. Los autores, como todos los trabajadores, tienen derecho a vivir de su trabajo con nuevas ideas creativas, modelos de negocio y actividades asociadas a sus creaciones. Intentar sostener con cambios legislativos a una industria obsoleta que no sabe adaptarse a este nuevo entorno no es ni justo ni realista. Si su modelo de negocio se basaba en el control de las copias de las obras y en Internet no es posible sin vulnerar derechos fundamentales, deberían buscar otro modelo.
  6. Consideramos que las industrias culturales necesitan para sobrevivir alternativas modernas, eficaces, creíbles y asequibles y que se adecuen a los nuevos usos sociales, en lugar de limitaciones tan desproporcionadas como ineficaces para el fin que dicen perseguir.
  7. Internet debe funcionar de forma libre y sin interferencias políticas auspiciadas por sectores que pretenden perpetuar obsoletos modelos de negocio e imposibilitar que el saber humano siga siendo libre.
  8. Exigimos que el Gobierno garantice por ley la neutralidad de la Red, en España ante cualquier presión que pueda producirse, como marco para el desarrollo de una economía sostenible y realista de cara al futuro.
  9. Proponemos una verdadera reforma del derecho de propiedad intelectual orientada a su fin: devolver a la sociedad el conocimiento, promover el dominio público y limitar los abusos de las entidades gestoras.
  10. En democracia las leyes y sus modificaciones deben aprobarse tras el oportuno debate público y habiendo consultado previamente a todas las partes implicadas. No es de recibo que se realicen cambios legislativos que afectan a derechos fundamentales en una ley no orgánica y que versa sobre otra materia.
El texto de este manifiesto se publica multitud de sitios web. Si estás de acuerdo, publícalo también tú.