septiembre 2010

Namespaces o espacios de nombre virtuales en javascript

En la mayoría de lenguajes de programación relativamente maduros o potentes, existe lo que denominamos namespace o espacio de nombres. Los namespace no son otra cosa que unos contenedores de nombre donde podremos contener clases, funciones y variables que pueden repetirse con el mismo nombre en otros espacios de nombre o namespace sin que ello suponga un error. Un ejemplo claro de cual es la verdadera utilidad organizadora de los namespace o espacios de nombres es en las librerías gráficas de los lenguajes de programación, ya que en estas librerías un elemento muy común suele ser la clase Window que hace referencia a una ventana pero que puede estar dentro de GTK, QT, .Net, API de Windows, etc. (esto no es muy correcto puesto que GTK seria GTKWindow pero es por poner un ejemplo). Javascript, como un lenguaje ya mas que maduro con el paso de los años y relativamente estandarizado por los navegadores modernos, pese a ser un lenguaje de programación multiparadigma, al igual que haga PHP, también tiene namespaces o espacios de nombre, aunque debido a la debilidad de las variables estos namespaces son mas virtuales que reales.

Entendiendo que es y para que sirve un namespace, para declararlo en javascript, lo que debemos de hacer es utilizar arrays para generarlo. Gracias a la debilidad y dinamismo de las variables en javascript, podemos asignar a una variable un array de posiciones por nombre y acceder a estas mediante un signo de puntuación «.» y no por su clave común de array [«clave»], por lo que aquí es donde viene el truco. Básicamente lo que hacemos al declarar un namespace en javascript es asignar a un variable un array con las posiciones del namespace y luego ya dentro de estas posiciones, acceder como si desde .Net o Java se tratase. Con un ejemplo se ve mas sencillo.

var Indalcasa = { Utilidades : {} };

Indalcasa.Utilidades.MiClase = function() {
  this.variable = "valor";

  this.metodo = function(parametros) {
    return this.variable + " " + parametros;
  }
};

var iClase = new Indalcasa.Utilidades.MiClase();
iClase.variable = "nuevo valor";
alert(iClase.metodo("prueba"));

El ejemplo anterior mostrará una ventana de alert con un mensaje tal que «nuevo valor prueba», ya que hemos instanciado la clase, le hemos cambiado el valor al atributo de la clase y en el método de la clase, concatenamos el valor del atributo de la clase al parámetros que hemos pasado. Esto es un pequeño y sencillo ejemplo de lo que se puede hacer con javascript, namespaces y clases.

Publicada la version 0.1.1 de puntoengine

Ayer publiqué la versión 0.1.1 de puntoengine. Puntoengine o Punto Engine PHP acortado PEP, es un framework en fase alfa para PHP del tipo MVC o Modelo Vista Controlador. Este framework basa su funcionalidad en una mezcla de diferentes frameworks web como son ASP.Net, Java Servlets y PHP en un antiguo framework propio llamado RLM Engine. Actualmente, pese a estar en una fase de desarrollo muy verde, pero ya es completamente operativo y se pueden construir webs con un sistema de Servlets como se haría una web en Java. La versión 0.1.1 en su revisión 7 de puntoengine se trata de la versión ya publicada 0.1.1 de puntoengine pero con la documentación completa del código, lo que facilita a quien quiera ver y estudiar el código y su funcionamiento, que sea mas fácil de seguir. Para la versión 0.2 de puntoengine se espera la creación de un administrador, actualmente en fase de desarrollo para poder gestionar entre otras cosas los Servlets instalados y la preparación para futuros plugins como puede ser el sistema de CMS.

Este es un proyecto a largo plazo y muy ambicioso que espero llegue lejos y pueda utilizarlo para construir diversas webs que tengo en mente. Según un calculo realizado siguiendo el sistema COCOMO, actualmente el proyecto con casi 1500 lineas de código, tendría un coste privado de unos 6.000€. Para el que quiera echar un vistazo e incluso colaborar con el desarrollo, documentación o aportando incidencias, puede hacerlo en la web del proyecto puntoengine.

Android ya es el segundo sistema operativo móvil en el mundo

Como cito en el título de este post, Android ya es el segundo sistema operativo móvil mas usado en este mundo. Según un estudio que ha realizado la consultora tecnológica Gartner según el crecimiento y uso de cada sistema operativo móvil, Android acaba de superar a BlackBerry, convirtiendose en el segundo sistema operativo móvil mas usado y con una estimación de que en los próximos 4 años alcance a la todopoderosa Nokia y su Symbian, pudiendo superar a esta en 2014. Según este estudio, en la actualidad y como se espera en los próximos años, Nokia con Symbian, seguirá al frente de los dispositivos móviles pero perdiendo cuota de mercado poco a poco frente a Android.

En la actualidad, el listado de sistemas operativos móviles mas usados es el siguiente:

  • Nokia, Symbian: 107.662.400 unidades, 40.1% cuota de mercado
  • Google, Android: 47.462.100 unidades, 17.7% cuota de mercado
  • RIM, Research In Motion, BlackBerry: 46.922.900 unidades, 17.5% cuota de mercado
  • Apple, iOS (Iphone): 41.461.800 unidades, 15.4% cuota de mercado
  • Microsoft, Windows Phone: 12.686.500 unidades, 4.7% cuota de mercado

Según las previsiones de crecimiento, y aunque desconozco si se han contado con los futuros proyectos que Google plantea para Android, como Google TV, se espera que en tan solo 4 años, Android alcance a Symbian, por lo que para 2015 y si las cosas no se tuercen, podríamos ver desbancada a Nokia de la privilegiada primera posición en el mundo de los dispositivos móviles. Las previsiones para 2014 son las siguientes:

  • Nokia, Symbian: 264.351.800 unidades, 30.2% cuota de mercado
  • Google, Android: 259.306.400 unidades, 29.6% cuota de mercado
  • Apple, iOS (Iphone): 130.393.000 unidades, 14.9% cuota de mercado
  • RIM, Research In Motion, BlackBerry: 102.579.500 unidades, 11.7% cuota de mercado
  • Microsoft, Windows Phone: 34.490.200 unidades, 3.9% cuota de mercado

Veremos si la evolución e innovaciones de las compañías hacen de esto una realidad o no. De momento y en opinión de un humilde servidor, Android, si el resto de compañías siguen con sus actuales políticas, se convertirá en breve en el numero uno de los sistemas operativos móviles, ya que Nokia no evoluciona ni innova, estaba genial cuando tenia móviles de toda la vida, pero ha llegado tarde y con grandes tropezones a la carrera de las nuevas tecnologías móviles. BlackBerry que mantendrá su posición corporativa y Apple con iOS y sus políticas restrictivas, no llegaran a donde todos esperan que lleguen. Solo el tiempo dirá que pasara y pondrá a cada compañía en su lugar.

Buscando aparcamiento con Open Spot para android

Echando un vistazo a la web de Google Labs, me encuentro con una aplicación para Android que ha desarrollado Google bastante curiosa. La aplicación en cuestión es Open Spot, se trata de un programa, similar a un GPS con Google Maps, que nos indica plazas de aparcamiento libres para que podamos aparcar. El funcionamiento es muy sencillo, un usuario que va a desplazarse con el coche, indica al programa que va a dejar su aparcamiento libre, aunque supongo que también se puede hacer a pie si vemos un hueco, y automáticamente a los usuarios que esten cerca y tengan Open Spot para Android abierto, les aparecerá un POI en el mapa indicando que ahí se encuentra una plaza libre de aparcamiento. La verdad es que además de ser una aplicación bastante curiosa, es muy útil ya que para aquellos que vivimos en grandes ciudades, nos puede ahorrar mucho tiempo y gasolina que gastamos a base de dar vueltas a las manzanas para encontrar el dichoso aparcamiento. Resaltar también que el usuario puede recibir karma de otros usuarios que hayan encontrado aparcamiento gracias a el, por lo que puede resultar hasta divertido utilizarlo. Como nota restaltar que de momento solo se encuentra disponible en Estados Unidos, Canada y Paises Bajos, pero esperemos que llegue a España pronto. Si quereis echar un vistazo os dejo la web de Open Spot.

Open Spot marcando un spot

Open Spot recuperando Spots

Convertir un texto a mayusculas (toUpper) o minusculas (toLower) con transformadas xslt

Muchas veces, cuando necesitamos manipular texto desde transformaciones xsl, nos encontramos con el caso de que tenemos un texto en mayúsculas o un texto en minúsculas y queremos convertirlo a minúsculas o mayúsculas respectivamente. En cualquier lenguaje, solemos tener métodos para hacer un ToUpper, strtoupper o por el contrario ToLower, strtolower y similares, pero en xsl, al ser tan genérico, no disponemos de ese tipo de funciones, aunque si deberían de estar.

Para suplir esta necesidad, me he creado 2 funciones muy útiles que utilizan la funcion traslate, que comentare en otro articulo. Básicamente lo que hacemos es intercambiar una cadena por la otra en base a lo que va entrando por un texto. Con estas funciones podemos llamar a StringToLower o StringToUpper como si de un template normal se tratase, indicandole el texto que queremos convertir a mayúsculas o convertir a minúsculas y automáticamente nos convertirá la cadena.

El código seria el siguiente:

<!-- Variables globales -->
<xsl:param name="lower" select="'abcdefghijklmnopqrstuvwxyz'" />
<xsl:param name="upper" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'" />
 
<!-- Convierte una cadena de texto, todo en minusculas -->
<!-- @param string text Cadena a convertir a minusculas -->
<!-- @return Cadena en minusculas -->
<xsl:template name="StringToLower">
  <xsl:param name="text"/>
  <xsl:value-of select="translate($text,$upper,$lower)"/>
</xsl:template>
 
<!-- Convierte una cadena de texto, todo en mayusculas -->
<!-- @param string text Cadena a convertir a mayusculas -->
<!-- @return Cadena en mayusculas -->
<xsl:template name="StringToUpper">
  <xsl:param name="text"/>
  <xsl:value-of select="translate($text,$lower,$upper)"/>
</xsl:template>
 
<xsl:call-template name="StringToLower">
  <xsl:with-param name="text"
      select="'Mi texto que quiere ser Reemplazado a minusculas'" />
</xsl:call-template>
<xsl:call-template name="StringToUpper">
  <xsl:with-param name="text"
      select="'Mi texto que quiere ser Reemplazado a mayusculas'" />
</xsl:call-template>

El resultado de esta tranformacion del StringToLower seria «mi texto que quiere ser reemplazado a minúsculas» y la segunda llamada con el StringToUpper seria «MI TEXTO QUE QUIERE SER REEMPLAZADO A MAYUSCULAS». Esto es algo muy útil para trabajar con textos.

Scroll al inicio