El universo de Paquitosoft

15Apr/120

Nueva herramienta de analisis de codigo para Javascript

Cada vez me gusta más Javascript. Es curioso cómo hace no tanto tiempo era un lenguaje desconocido y un poco aterrador para mí. Sin embargo, y gracias a la inestimable ayuda de Mootools, mi atracción por JS no ha dejado de crecer.

Creo que podría decir que hoy en día es mi lenguaje favorito. La comunidad que se ha creado alrededor de él es inmensa y no para de crecer, y no solo para el trabajo en los navegadores, sino ahora (desde hace casi dos años) también en el servidor gracias a ese otro grandísimo proyecto que es NodeJs.

Hablemos de mi libro... A lo largo de los múltiples proyectos escritos utilizando Java en los que he estado involucrado, he ido descubriendo una herramienta asombrosa que se llama Sonar. Se trata de un proyecto Open-Source para el análisis del código que desarrollas en base a un conjunto de reglas que gente mucho más preparada que yo ha ido describiendo a lo largo del tiempo. Lo realmente bueno de esta herramienta es la explotación  y presentación que hace de los resultados. Es realmente ipresionante.

Este tipo de herramientas te ayudan a ser mejor desarrollador. Te resaltan tus defectos y te enseñan cómo solucionarlos. Pues bien, ahora que me he adentrado en el mundo de Javascript, busqué herramientas de este tipo que pudieran existir. Las dos principales son: JSLint (del gran maestros Douglas Crockford) y JSHint (fork de la primera).

Estas dos herramientas sirven para analizar el código Javascript escrito en base a un conjunto de buenas prácticas recopiladas por el señor Crockford (JSLint) y refinadas por la comunidad (JSHint). Sirven para escribir un código que tenga un riesgo bajo en tiempo de ejecución.

Ambas herramientas tienen un sitio web donde puedes insertar tu código y obtener un análisis esxhaustivo y ambas tienen bastantes opciones de configuración.

Cuando empecé a usarlas, pensé que estaría bien tener una herramienta propia que me ayudara a tener información sobre mi código de manera más ágil. Eché un vistazo por internet para ver las opciones que había y encontré este artículo, donde integraban esas herramientas con Growl, dando un buen resultado en Mac.

Sin embargo, me veo obligado a trabajar con Uindous, por lo que se me ocurrió que podría intentar crear mi propia herramienta usando las ya existentes...

Y por fin llegamos al corazón del asunto. JSQA es un proyecto Open Source que utiliza JSHint para analizar el código Javascript que tú le digas y para mostrar el resultado de dicho análisis en tiempo real mediante una página web. La idea es que tú conectas la herramienta a tu código y tienes disponible una web en local donde tienes los resultados del análisis de manera que, si tú cambias uno de tus ficheros, automáticamente es analizado y el resultado se actualiza en la web.

Os dejo una captura de pantalla de la web:

Para usarla no tenéis más que acceder al sitio del proyecto en GitHub y seguir las intrucciones para su instalación.

Espero que os resulte tan útil como a mí.

5Jan/110

Refactorizando objetos nativos en Mootools

La lección aprendida de esta semana va sobre el uso de la función Class.refactor del paquete More de Mootools.

Esta función resulta muy útil cuando necesitamos extender la funcionalidad de una clase (ya sea propia de Mootools o una nuestra). Antes de su aparición, era muy fácil incluir nuevos métodos a una clase existente o incluso sobreescribirlos con otra de las funciones que está en el Core, Class.implement. Un ejemplo de su uso podría ser el siguiente:

Element.implement({
 
   // Incluyo un nuevo método en todos los elementos para
   // jugar con su opacidad pudiendo especificar el tiempo
   // de la transición.
   fadeInTime: function(type, time) {
      var endValue = 1;
      if ('out' == type) {
         endValue = 0;
      } else if ('toggle' == type) {
         endValue = (this.get('opacity') == 1) ? 0 : 1;
      }
      new Fx.Tween(this, {
         property: 'opacity',
         duration: time
      }).start(endValue);
   },
 
   // Sobreescribo el método destroy para que no se elimine
   // ningún elemento sino que se oculten
   destroy: function() {
      this.set('opacity', 0);
   }
});

El problema venía cuando realmente queríamos añadir funcionalidad a una función existente, puesto que utilizando implement(), no se puede acceder al código que estamos sobreescribiendo (ej: la palabra clave super en Java).
Así, para sobreescribir una función podríamos hacer:

   // Sobreescribimos la clase FX.Tween para enviar al log los parametros
  // con los que se ejecuta
  Fx.Tween = Class.refactor(Fx.Tween, {
    start: function(property, from, to){
        Log.log("Fx.Tween::start - Parámetros utilizados: " + property + ", " +
          from + ", " + to);
    this.previous(property, from, to);
    }
  });

Utilizando la función previous() podemos ejecutar el código que estamos sobreescribiendo.

Ahora bien, el problema aparece cuando queremos sobreescribir un método de un objeto nativo, por ejemplo Element. La clase Element de Mootools no es sino un envoltorio sobre el objeto Element al que se le añaden una serie de funciones que hacen mucho más fácil la manipulación de los elementos de una página, por lo que la refactorización que hemos utilizado hace un momentos no nos vale, porque solo es aplicable a clases Mootools puras.

Para ejemplificar este problema imaginad que necesitamos mandar al log todas las veces que se añade un evento de tipo mouseover a cualquier elemento.
Nuestra primera aproximación sería la siguiente:

  Element = Class.refactor(Element, {
    addEvent: function(type, fn) {
      if ('mouseover' == type) {
        Log.log("Element::addEvent - Añadiendo evento de tipo mouseover.");
      }
      this.previous();
    }
  });

La idea es buena, pero nos encontramos con la limitación de la función refactor para objetos nativos y, por eso, este código fallará.
En su lugar, para implementar nuestra idea haríamos lo siguiente:

  (function() {
    // Almacenamos en este scope privado el código original del
    // método que vamos a extender
    var originalAddEvent = Element.prototype.addEvent;
 
    // Sobreescribimos el método utilizando la función guardada
    Element.implement({
      addEvent: function(type, fn) {
        if ('mouseover' == type) {
          Log.log("Element::addEvent - Añadiendo evento de tipo mouseover.");
        }
        originalAddEvent(type, fn);
      }
    });
  })();

Es importante rodear nuestro código de una función autoejecutada para aislar la variable donde guardamos la implementación original de la función que extendemos para que no se mezcle en el espacio global de javascript.

El origen de este post está en una pregunta en StackOverflow.

13Oct/091

Porque versionar no está tan mal…

Seguro que más de un@ no comparte mi opinión, de hecho, a veces ni yo mismo la comparto; tod@s hemos escuchado versiones que mancillaban el honor (en mayor o aún más mayor medida) de temas originales que hemos adorado hasta ponernos de rodillas.

Sin embargo, y afortunadamente, a lo largo de los años he ido encontrando algunas excepciones, algunas versiones que no tienen nada que envidiar a sus originales, algunas canciones que nos emocionan incluso más que sus padres.

Hoy dejo aquí una lista con mis versiones favoritas, las que más merecen mis alabanzas y las que os recomiendo:

Se aceptan nuevas entradas...

Tagged as: , 1 Comment
8Apr/0910

Notimoo – Notificaciones mediante Mootools

Como indicaba en mi post anterior, la comunidad de progamadores que se está pasando al framework Javascript Mootools es bastante grande y yo me incluyo en el saco.

Después de trastear un poco con esta librería, me he decidido a escribir mi primer plugin para ser utilizado con ella de modo que pueda conocer realmente cómo es desarrollar con Mootools.

La idea de este nuevo plugin viene de Growl, un fantástico sistema de notificaciones existente para Mac OS que me gustaría utilizar en aplicaciones web basadas en AJAX.
Primero busqué si alguien lo había hecho antes y me encontré con el plugin de Daniel Mota. Su trabajo está muy bien, pero no era exactamente lo que yo estaba buscando. Yo quería un sistema más configurable, donde tuviese la posibilidad de configurar el posicionamiento de las notificaciones, cambiar su apariencia, que su tamaño pudiera ser dinámico, que tuviese en cuenta el scroll,...

Así pues, me puse manos a la obra y desarrollé Notimoo, un plugin compacto (4kb) que implementa todas esas funcionalidades que yo buscaba para un sistema de notificaciones.

Está programado utilizando la versión 1.2 de Mootools y también ha sido probado con la 1.2.1.
Si quieres ver un ejemplo simple del sistema pincha aquí.
Para descargar el plugin puedes acceder a la web demostración o al sitio dedicado en Google Code.

Para más información, entra en la página dedicada.

1Apr/091

Mootools – Javascript de última generación

Éste es un post dedicado a todos aquellos que, como yo, se acercaron hace unos años al mundo del Javascript y huyeron despavoridos.

Javascript ha evolucionado mucho y gracias sobre todo a los nuevos frameworks que se han ido creando durante los últimos años.
Hoy en día, la pogramación del lado cliente para las aplicaciones web se realiza sobre alguna de estas librerías pues facilitan mucho el trabajo, proveen gran cantidad de componentes prefabricados comunes y, lo que para mí es más importante de todo, incitan a la programación orientada a objetos.

Algunos de los frameworks más importantes hoy en día son:

Hace unos meses me vi obligado a volver al javascript después de muchos años sin haber hecho nada con él. La idea que yo tenía era la de un lenguaje muy simple pero que se utilizaba de manera muy compleja. El código resultante solía ser enrevesado y difícil de seguir.

Así pues, temía el momento del reencuentro. Sin embargo, no se produjo un reencuentro sino un descubrimiento ya que el Javascript actual dista mucho de las características del "viejo". De hecho, cuando fuí capaz de cambiar el chip en mi cabeza y olvidar lo que sabía de JS para aprenderlo de nuevo al nuevo estilo, me vi completamente sorprendido ante la potencia y flexibilidad que ahora tiene.

Gran parte de mi nueva js-filia tiene como origen el framework Mootools.
A pesar de que, por lo que leo en internet, hoy en día parece que es más popular jQuery, a mí Mootools me parece una obra maestra, y no solo porque facilita muchísimo la escritura de código multi-navegador, sino porque te "obliga" a adquirir buenas prácticas y patrones a la hora de programar.
En un framework con una documentación (tutorial) muy completa, bastantes ejemplos (versión actual, versión anterior) y una comunidad activa (Foro 1, Foro 2), donde gran cantidad de programadores contribuyen escribiendo nuevos componentes basados en este framework (incluido yo -atentos al próximo post-).

Pues eso, a todos aquellos que tengais una mala imagen del Javascript porque hace tiempo que no lo tocais y teneis mal recuerdo de él, visitad la web de Mootools y sorprendeos con el Javascript de nueva generación.

19Jan/090

Advertencias a la hora de liberar tu iPhone 3G

Una breve nota para todos aquellos que teneis (o vais a tener...) un iPhone 3G y no sois de Movistar.

Hasta este mes no era posible utilizar el teléfono con una compañía diferente a timofónica, pero gracias (muuuuuuuuuuchas gracias) a los chicos del dev team, ya es posible.


El proceso, en principio, es muy simple: restaurar el iPhone, desprotegerlo e instalar un pequeo porogramita (yellowsn0w).



Como ya hay miles de sitios donde explican el proceso (Applesfera, iPhoneros,...) yo quiero advertiros de un par de detalles de mi experiencia para ayudar a aquellos que dicho proceso no les funcione a la primera:

  • No actualices un iPhone con firmware 2.1 a 2.2. RESTAURA el teléfono con la versión 2.2
  • No realices el proceso desde un Mac con versión 10.5.6 o superior
  • Cuando termines el proceso, no le digas a iTunes que utilice tu antiguo perfil que tiene guardado. CREA UNO NUEVO

Si el proceso no te funciona aún siguiendo estas advertencias puedes ser de los pocos desafortunados que no pueden liberar su iPhone. (Consulta la página de testimonios y escribe allí los problemas que has tenido

Tendrás que esperar a que saquen una versión más estable de su programa.

2Jan/092

¿Por dónde se sale de esta rotonda?

Hace ya algún tiempo que he entrado en una rotonda de la que no sé salir...

Tras un verano más dedicado a actividades lúdicas en la naturaleza que a trabajos en casa delante del ordenador, afronté la llegada del nuevo curso con ganas de hacer algo de provecho con mi tiempo libre. Teniendo en cuenta que dos días de la semana los dedico a la práctica del badminton, me quedaban otros dos o tres en los que podría aprovechar las horas de vida que nos deja el trabajo a los curritos.

Filed under: General Continue reading
13Nov/080

El descubrimiento del mes: Kate Nash

Imagino que a estas alturas ya tod@s conocéis el fantástico portal de música Last.fm. Para aquell@s melómanos que todavía no os habéis dado de alta, estáis perdiendo un tiempo muy valioso de vuestras vidas, pues es una web dedicada a aglutinar toda la música que escuchamos los habitantes de este planeta que nos conectamos a su servicio y ponerla a nuestra disposición para que la escuchemos y obtengamos mucha información: desde los conciertos que dará nuestro grupo favorito (ese Muchachito!!!) a videos musicales o biografías. Llevo unos días utilizando la aplicación que han creado para el iPhone y es sencillamente im-prescindible. Por cierto, si utilizáis Linux, activad la opción del Amarok para integraros con el portal y os dará muchas alegrías.

Bueno, pues estaba yo estos días pidiéndole a Last.fm que me aconsejara música nueva y he descubierto a Kate Nash, una jovenzuela británica que se dió a conocer el año pasado en MySpace gracias a la ayuda de Lily Allen.

Pues me ha sorprendido mucho verme de nuevo enganchado a un disco; ya hacía tiempo que no me pasaba y casi había olvidado lo que es estar todo el día con las mismas canciones en la cabeza, escuchando cada tema uno y otra vez sin llegar a cansarse.

Kate tiene una voz muy peculiar, pero lo que realmente me ha gustado más es su manera de cantar marcando mucho la pronunciación de las palabras, es como si cantase intentando vocalizar. En cierto modo me ha recordado al cantante de The Streets (fantásticos temazos como Turn the page o The irony of it all).

De entre las doce canciones que forman su primer disco 'Made of Bricks',la que más me obsesiona en 'Dickhead' (que viene siendo algo así como gilipollas). A pesar de tener una letra muy simple, hay un verso que dice: '35 personas no pudieron contar, con (los dedos de) sus dos manos, la cantidad de veces que me has hecho pararme y preguntarme ¿Por qué razón te estás comportando como un gilipollas?, si es que me parto...

Lo dicho, Kate Nash es mi descubrimiento musical del año y espero que sea el de algun@ de vosotr@s también.

Filed under: Música No Comments
26Oct/080

¿Dónde está el humor de los hermanos Cohen?

Este fin de semana tuve la oportunidad de ir al cine y así poder pasar página al terrible capítulo que escribió en mi diario de películas visionadas la infame "Amar en tiempos de cólera". Esta vez no pensaba cometer el error de aventurarme a ir sin saber, así que decidí apostar a caballo ganador: los hermanos Cohen.

Con un reparto con nombres como John Malkovitz, Frances McDormand, Brad Pitt y George Clooney, la película debería estar por encima de la media. Aunque no quise enterarme de todo el argumento para mantener el factor sorpresa intacto, sí que me enteré de la trama y quedé convencido de que vería una nueva comedia que me haría reír 100% seguro. No esperaba algo tan bueno como "El gran Lebowski", pero sí una buen rato de sonrisas y alguna risa.

Vale, pues el resultado en un descafeinado con demasiada agua: muy divertido el papel del señor Pitt, unas carcajadas con el aparato que se monta en casa el señor Clooney y muy poco más. Lo más hilarante de la película son dos secuencias de poco más de un minuto en las que el director de la CIA trata de entender qué demonios ha sucedido con un grupo de gente, entre los que se encuentra uno de sus ex-agentes, que está haciendo cosas muy extrañas.

Total, que esta vez los hermanos Cohen me han decepcionado porque, o mi sentido del humor se ha extraviado estos días, o el suyo ha cambiado mucho.

Filed under: Películas No Comments
29Sep/080

Nueva versión LML (y ya van 3)

La semana pasada estuve desarrollando una pequeña aplicación para uso personal y utilicé LML para el acceso a datos de la misma.

En este caso era un programa en Swing con acceso a una base de datos SQLite, por lo que utilicé la librería de manera que ella misma tuviese que lidiar con la conexión.

He detectado un error a la hora de trabajar con identificadores generados por el motor de base de datos, ya que la librería no recuperaba dichos identificadores tras crear un objeto.

He corregido este error y también he añadido una excepción nueva para informar en los casos donde el motor no soporta la recuperación de claves tras su generación.

Aquí están los enlaces como de costumbre:

Filed under: General No Comments