¿Cómo podría nadie volver a confiar en Microsoft nunca más?

Me parece importantísimo lo que se explica en este artículo de Glyn Moody, por lo que me he tomado la molestia de traducirlo personalmente. NO es una traducción automática, ni tampoco he hecho una traducción literal (si esperas eso, mejor vete a la fuente original), he traducido el artículo expresando las ideas como he considerado que mejor se ajustan a lo que el autor dice, e incluso añadiendo algunas anotaciones en las cuestiones que considero que podían no entenderse correctamente. A continuación el artículo traducido:

Edward Snowden

Edward Snowden

A partir de los detalles revelados por Edward Snowden en el periódico "the Guardian" sobre el espionaje norteamericano, los usuarios que sepan leer entre líneas, pueden aprender muchas cosas. Por una parte se desmorona el argumento norteamericano de negar los hechos repetidamente ofreciendo su propia versión de la historia; ya que por primera vez Edward nos ofrece detalles sobre lo ocurrido, que antes sólo conocíamos por medio de filtraciones y rumores, si es que llegábamos a enterarnos.

Por otra parte, las prisas y los cambios constantes en la versión oficial de los hechos por parte del gobierno norteamericano, son la confirmación, por sí alguien aún tenia alguna duda, de que los datos de Edward Snowden son importantes.

Pero quizás lo más importante de todo, es que los periodistas por fin se han atrevido a realizar preguntas que deberían haber realizado hace años o incluso décadas.

Instalaciones generales de la NSA en Fort Meade, Maryland.

Instalaciones generales de la NSA en Fort Meade, Maryland. Wikipedia

Y todo esto ha desembocado en una serie de interesantísimas historias sobre el espionaje de la NSA (agencia nacional de seguridad americana), muchas de las cuales contienen datos concretos que casi son tan importantes como la historia principal. Como por ejemplo esta noticia que ha aparecido este fin de semana en "Bloomberg".

A parte de otras cosas, me resulta destacable lo que trata sobre Microsoft y su grado de responsabilidad e implicación por haber estado ayudando a la NSA a espiar a todo el mundo. Por supuesto esto no es nada nuevo, ya en 1999 se conocieron las "puertas traseras" que traían programados los Windows:

Un descuido por parte de los programadores de Microsoft ha revelado que hay software específicamente desarrollado por la NSA introducido secretamente en Windows. Estos programas de acceso remoto de la NSA han sido programados en todas las versiones del sistema operativo Windows actualmente en uso, exceptuando las primeras versiones de Windows 95 (y las anteriores) -Nota del Traductor: Es decir desde hace ya 18 años.-

Este descubrimiento es equiparable a las revelaciones de principios de año, de que otro gigante del software americano, Lotus, había incluido puertas traseras en su sistema "Notes" para proveer información de "ayuda" a la NSA; o equiparable a la importancia de la noticia de que ciertas funciones de seguridad, en otros sistemas de software, habían sido modificadas (debilitadas) intencionadamente.

Más recientemente, ha habido noticias sobre Skype, que fue comprada por Microsoft en mayo del 2011. Y en 2012 hubo discusiones sobre si Microsoft modifico la arquitectura de Skype para hacer más fácil la interceptación y seguimiento de conversaciones (la compañía incluso ha patentado la idea) y las últimas filtraciones parecen confirmar que estos temores estaban bien fundados, tal y como apunta Slate.

Hay muchos detalles llamativos en el articulo del Washington Post sobre PRISM y sus capacidades, pero hay una parte en particular que pone los pelos como escarpias. El periódico cita una presentación PowerPoint alto-secreto de la NSA, e indica que la agencia tiene una "Guía para la recolección de datos de Skype" (“User’s Guide for PRISM Skype Collection”) que esboza como se pueden escuchar las conversaciones de otras personas sin que lo sepan en Skype "cuando uno de los intermediarios de la llamada es un teléfono normal y para cualquier combinación de 'audio, video, chat y transferencia de archivos' cuando uno de los usuarios este conectado por ordenador".

Pero incluso todo esto queda insignificante comparado con la última información ofrecida en Bloomberg:

Microsoft Corp., la compañía de software mas grande del mundo proporciona a las agencias de inteligencia información sobre los fallos de seguridad en su conocido software antes de que se publiquen los parches, según han informado dos personas familiarizadas con el procedimiento. Esta información puede ser usada para proteger los ordenadores del gobierno, pero también para acceder a los ordenadores de los terroristas o fuerzas militares enemigas.

Frank Shaw

Frank Shaw

En Redmond, tanto Microsoft como otras compañías de seguridad en Internet han sido conscientes de este tipo de "preaviso" al gobierno americano para explotar las vulnerabilidades de su software, que ha sido vendido a gobiernos extranjeros, según dos informadores del gobierno que prefieren permanecer en el anonimato ya que el tema es confidencial. Además Microsoft no pregunta, y no puede saber cómo usa el gobierno estas "herramientas". La respuesta de Microsoft la ha dado Frank Shaw, portavoz, diciendo que esas versiones del software se realizaron en cooperación con varias agencias, y que están diseñadas por el gobierno para ofrecer una "rápida solución" para gestionar y reducir los riesgos.

Así pues, pensemos por un momento...

Las compañías y los gobiernos compran software de Microsoft, dependiendo de la compañía para crear programas seguros y fiables. Todo el mundo sabe que ningún software esta completamente libre de fallos, y los bugs se encuentran frecuentemente en el software de Microsoft (igual que en el software libre, por supuesto). Así qué el problema no es "¿qué software tiene fallos?" porque cualquier código, por pequeño que sea, los tiene. El problema está en la gente que produce ese software y como responden por él.

Las compañías y los gobiernos quieren que los fallos se corrijan lo antes posible, de manera que no puedan ser explotados por los criminales y provoquen daños en sus sistemas. Pero ahora sabemos que una de las primeras cosas que hace Microsoft es enviarles información sobre sus vulnerabilidad a "múltiples agencias" (seguramente incluidas la NSA y la CIA). Y además ahora sabemos que "estos tipos de avisos permiten al gobierno americano explotar las vulnerabilidades en el software vendido a los gobiernos extranjeros".

Y te recuerdo que "gobiernos extranjeros" son todos los países europeos además del resto (de hecho el gobierno inglés ha estado espiando "de manera amistosa", lo cual quiere decir que todos lo hacen). Además sería estúpido pensar que las agencias de seguridad del gobierno americano solamente han usado el conocimiento privilegiado de estos fallos para entrar en sistemas gubernamentales; ya que el espionaje industrial forma parte del ya antiguo sistema de vigilancia "Echelon", y no hay razón para pensar que el gobierno americano se contenga en estos aspectos a día de hoy (en todo caso, habrían intensificado su espionaje).

Todo esto significa que es altamente probable que las vulnerabilidades de los productos de Microsoft han sido usadas normalmente para para entrar en sistemas de gobiernos y empresas extranjeras con diferentes propósitos de espionaje. Así qué cada vez que una empresa instala un nuevo parche de Microsoft para arreglar los fallos de seguridad, seguramente alguien habrá usado esas vulnerabilidades para nefastos propósitos.

Las implicaciones de todo esto son realmente importantes. Las compañías compran productos de Microsoft por muchos motivos, pero ellos asumen que Microsoft hace todo lo que puede por protegerlos. Pero a la vista de los últimos hechos, todas esas suposiciones son mentira: Microsoft consciente y regularmente pasa información sobre como entrar en sus productos a las agencias norteamericanas. Lo que se hace con esa información es, por supuesto, secreto, pero no por ser asuntos de "terrorismo" sino porque es muy probable, que sea ilegal todo lo que hacen contra los gobiernos y empresas extrajeras.

Todo esto no es más que una enorme traición a la confianza que los usuarios han depositado en Microsoft, y dudo mucho que ningún informático pueda recomendar seriamente el uso de los productos de Microsoft, ahora que todos sabemos que son el objetivo de los ataques desde las agencias gubernamentales americanas, y que conocemos las enormes perdidas que pueden provocar a las compañías (tal y como ocurrió con Echelon). Pero hay otro interesante punto de vista. Aunque no se ha escrito mucho sobre ello (me incluyo, lo lamento) un nuevo acuerdo legal europeo que trata a los atacantes online, que tiene los siguientes aspectos:

El texto pide que los estados miembros europeos establezcan penas de prisión no inferiores a dos años para los crímenes de acceso ilegal o alteración de sistemas de información, alteración ilegal de datos, interceptación ilegal de la comunicaciones o producir y vender herramientas que permitan realizar estos actos.

"Acceso ilegal o alteración de los sistemas de información" parece ser precisamente lo que está haciendo el gobierno americano a los sistemas extranjeros y seguramente también los europeos. Lo cual indica que en el gobierno americano habría culpables según estas nuevas regulaciones. Pero quizás Microsoft también sea culpable ya que es quien provee las herramientas para el "acceso ilegal" en primer lugar. Y hay otro aspecto, supongamos que los espías americanos usan los fallos de los productos Microsoft para irrumpir en un sistema, y a través de este, espiar a un tercero. Sería posible que la compañía espiada en primer lugar fuera acusada de todos los crímenes realizados desde sus sistemas sin tener conocimiento de nada de lo que ocurría, pero siendo culpable. Probar la inocencia aquí seria muy difícil ya que sería ineludible que los sistemas de esa compañía fueron usados para espiar.

Por último, ese riesgo es otra buena razón para no volver a usar nunca más ningún software de Microsoft, ni ningún otro software que creen a partir de ahora durante varios años. No es sólo que el software libre sea más barato (especialmente ahora que tenemos en cuenta el coste dañino que implica el uso del software de Microsoft), sino que además está mejor escrito, es más rápido, es más eficiente y más seguro, pero por encima de todo, lo más importante es que el software libre respeta a los usuarios otorgándoles el verdadero control de sus máquinas.

Esto también te libra de los problemas de que la empresa que te proporciona el software, por el que tu has pagado, este permitiendo a otros acceder a tus sistemas en tu perjuicio. Después de todo la mayoría de los programadores que se encargan de corregir fallos en el software libre tienen muy poco aprecio por la autoridad gubernamental, así que están completamente en contra de permitir las vulnerabilidades que quiere la NSA y que Microsoft les ha facilitado.

 Después de todo esto, que no es nada nuevo para algunos, yo me pregunto otra vez ¿cómo pueden tener las administraciones públicas españolas la cara dura de seguir justificando la compra de software de Microsoft?

Plugin WordPress: Mail_Me_If_Link_Broken

En una tarde he escrito este pequeño plugin para WordPress. Tenía muchas ganas de ver el sistema de plugins de WordPress, y he quedado gratamente sorprendido :-), ha sido sencillo, hay bastante documentación de funciones, y mucha información en Google de gente que los ha trabajado previamente (con Coppermine Gallery no hay tanta información).

El plugin
Su funcionalidad es muy sencilla, se me ocurrió hace tiempo, que pensé que sería útil a la hora de gestionar un sitio Web con mucha cantidad de información, tener algún sistema que te permitiera identificar los enlaces rotos. Hace cosa de unas semanas en el trabajo se me presento precisamente esta necesidad, administrando un portal con una cantidad de contenido ingente, hay muchos enlaces que están rotos (especialmente los de los contenidos más antiguos) y era necesario poner a una persona a revisar los enlaces (absurdo, porque como digo la cantidad de contenido es ingente).

Lo primero que pensé fue algún tipo de mecanismo que automatice el proceso, de manera que se conecte a la URL del enlace, y si recibe un error (tipo mensaje 404, 500, y demás) pues me enviara un mail. Pero no me acababa de convencer esta idea, porque en el sistema donde lo pretendía aplicar, había enlaces que enlazaba a una página estática que si funcionaba, pero que lo que fallaba era el contenido que debía mostrar (vídeos flash) por lo tanto ese supuesto código pensaría que el enlace estaría correcto.

La solución que se me ocurrió después es que sea el usuario que está navegando por la Web el que avise; en realidad es el mismo mecanismo que se está utilizando ahora, es el usuario el que nos indica que un enlace está roto, enviandonos un mail y diciendonos que en "tal" página el enlace no vá. Pero esto lo usan poco usuarios, pues poca gente se toma la molestia de mandarte un correo para advertirte de algo que no va en tu Web.

Con el plugin se le simplifica la tarea al usuario, de manera que al pasar el ratón por encima de un enlace, sale al lado un minúsculo botón Botón enlace roto que permite al usuario avisar del comportamiento incorrecto de ese enlace. De manera que para el usuario no hay complicación ninguna. Por otra parte el plugin internamente calcula todos los datos del enlace que presuntamente no funciona y te manda un mail a la cuenta que este configurada en WordPress.

Aspectos a mejorar en futuras versiones:

  • Que la cuenta de correo sea configurable, por si el administrador prefiere recibir el mensaje en otro correo.
  • Preguntar al usuario un captcha o suma sencilla, de manera que se eviten falsos positivos (envíos por error).

Información útil para desarrolladores:

Es el primer plugin que desarrollo para WordPress, pero al final todos los plugins de todas las plataformas se parecen en algunos aspectos. Por ejemplo los plugins para aplicaciones Web, es muy común que tengan algun mecanismo que te permita procesar la llamada a un archivo del plugin, usualmente para procesar una petición AJAX. En este caso esta información no la encontré en la documentación oficial (aunque ahora sé que está, pero no lo vi) sino que la localicé en la página de este programador.

Resumiendolo un poco, para poder realizar una petición a un archivo de un plugin de WordPress, y que este archivo pueda hacer uso de las librerías de funciones y variables que ofrece WordPress, es necesario que la llamada pase por el Core de WordPress, ya que si le haces la llamada directamente a tu archivo, dichas funciones no estarán disponibles (no las habrá cargado).

Para realizar esto son necesarios dos pasos, primero crear (y enlazar a su handler respectivo) la función encargada de procesar la petición a tu archivo, bien sea un código PHP o cualquier otra cosa, en el siguiente ejemplo proceso dos peticiones diferentes, una a un código PHP y la otra para obtener una imagen:

Pero esto no es todo, Worpress por motivos de seguridad no permite el paso de ninguna petición a los plugins a menos que le identifiques claramente las peticiones que debe autorizar. Esto se realiza dando de alta en WordPress (en un array destinado a tal efecto) el nombre de la variable que identificará la petición de tu plugin:

Eso es todo, este último paso por ejemplo no lo tiene Coppermine Gallery (y creo que debería). Por último, las llamadas a tu plugin las puedes realizar con llamadas del tipo:

A continuación se puede descargar el plugin y todo su código fuente, como siempre con licencia Creative Commons :-)

Plugin WordPress Mailme If Link Broken
Plugin WordPress Mailme If Link Broken
mailme_if_link_broken.zip
Version: 1.0
192.3 KiB
64 Downloads
Details...

Plugin Coppermine "Graphic_Keywords_Editor"

Me gusta mucho la galería de fotos Coppermine, considero que es una gran herramienta para poder gestionar todas las fotos que hago, tanto con la cámara como con el móvil. Lo genial de esta aplicación es que las fotos las tengo siempre disponibles en mi servidor, y no sólo eso, sino que familia y amigos también pueden acceder a las fotos, comentarlas y bajárselas si las desean usar; pero todo ello desde una plataforma que este controlada y donde la autoría y propiedad de las fotos siga siendo mía, al contrario que con Facebook que al subir las fotos, estas automáticamente les pasan a pertenecer a ellos. Quizás podría ser interesante utilizar herramientas tipo Flickr, DevianArt o Picasa, pero aunque algunas las he probado, me gusta más mi Coppermine ;-).
Con Coppermine, no pretendo evitar que me copien y/o utilicen las fotos sin consentimiento, simplemente me aseguro no estar "regalándoselas" a ninguna empresa. Además, el hecho es que las fotos en su mayoría, las tengo puestas en galerías de libre acceso, es decir que cualquier persona puede acceder y verlas o bajarlas (y por lo tanto usarlas). Eso no es algo que me preocupe, es más me alegraría saber que alguna persona le gustara tanto alguna de mis fotos que quiera utilizarla, si se da el caso estaría muy agradecido de que me dijera donde la ha utilizado para verlo.
Y por estos motivos, cuando veo algo que echo en falta en Coppermine, pienso si podría haberlo programado alguien, o si no, si podría hacerlo yo y colaborar de esa forma al crecimiento de la herramienta.
Este es uno de esos casos, a mi siempre me ha parecido genial la idea de etiquetar las fotos, porque facilita la tarea de encontrar luego fotos de personas, lugares o las fotos de un viaje concreto. Pero la forma de etiquetar en Coppermine es horrible, ya que hay que ir etiquetando las fotos de una en una, es tedioso, arduo y lo peor es que a menudo se comenten errores (unas veces utilizas una etiqueta con espacios para una persona, y otras veces sin espacios) y luego tienes varias fotos de una misma persona con varias etiquetas diferentes, por lo tanto pierdes la potencia de las etiquetas para localizar las fotos de esa persona.

Por estos motivos he implementado un pequeño plugin que me facilita la tarea de etiquetar mis fotos en Coppermine. Etiquetar las fotos en Coppermine ahora es más fácil y eficiente. Las características que cumple el plugin son las siguientes:

  • Se pueden seleccionar varias fotos simultáneamente para etiquetarlas.
  • Se pueden aplicar varias etiquetas simultáneamente a una o varias fotos.
  • La selección de fotos a etiquetar se realiza con el ratón y de manera similar a como se trabaja en un explorador de archivos en el PC; es decir se pueden seleccionar fotos pinchando y arrastrando, se pueden añadir fotos a la selección usando la tecla "control" (Ctrl), se puede de-seleccionar fotos haciendo clic nuevamente en ellas, etc. En cualquier caso aunque el funcionamiento se ha intentado que sea lo más similar posible al del explorador de archivos, hay algunas funcionalidades que no son iguales por limitaciones de la librería utilizada (JQuery v1.9)
  • Ver las etiquetas de cada foto al pasar el ratón por encima de la misma.
  • Ofrecer una lista de las etiquetas utilizadas anteriormente al escribir la etiqueta (el típico autocompletar).
  • Permitir operaciones de añadir etiquetas a una foto, eliminar etiquetas a la foto y reemplazar las etiquetas de una foto (esta última operación sustituye todas las etiquetas de golpe, quizás para una próxima versión mejore esta operación).
  • Cada usuario sólo puede editar las etiquetas de sus fotos; con excepción de administrador que puede etiquetar lo que quiera.
  • Permitir localizar todas las fotos SIN etiquetas; esto lo hace buscando todas las fotos con el campo de etiquetas vacio, y acto seguido les pone una etiqueta especial "_noKeywords_" de manera que se puedan localizar mediante la búsqueda normal de Coppermine.
  • Multilenguaje (actualmente español e inglés).

A continuación dejo un vídeo donde se ve el funcionamiento y la idea:

Limitaciones actuales:

  • Sólo funciona con el tema por defecto ("curve") de Coppermine; esto de debe a problemas con el hook para añadir botones.
  • En algunas tablet/móviles no funciona bien el autocompletar.

Comentarios útiles para desarrolladores:
La idea inicial del plugin era que simplemente permitiera seleccionar varias fotos con el ratón pinchando y arrastrando, esto fue más o menos sencillo de implementar con la funcionalidad "selectable" de JQuery UI; el problema vino al intentar utilizar la librería JQuery en Coppermine porque ya tiene una versión de la misma, pero es antigua (1.3 creo) y para usar el "selectable" necesitaba la 1.9 (la que había usado en las pruebas), tras investigar me encontré que una posible solución era cambiar el nombre de la función JQuery, el conocido "dollar" $(' ... '); para ello utilicé la función "noConflict":

Mediante "noConflict", podemos utilizar varias versiones de JQuery en una misma aplicación sin que se estorben unas a otras, básicamente lo que hace es que a cada versión de JQuery a utilizar le asigna un nombre diferente, en mi caso utilicé "jQuery19" como puedes ver. Esa línea la tienes que poner al final de la declaración de la librería de JQuery; y cada vez que en tu código quieras utilizar esa versión de JQuery simplemente llamas a JQuery con el nombre en cuestión en lugar del dollar, como puedes ver en el siguiente ejemplo:

Una vez que logré hacer funcionar la selección de imágenes en Coppermine sin problemas de conflictos entre versiones de JQuery, tenía otro problema, que fue el CSS necesario para que las fotos seleccionadas se vieran destacadas. El problema era que las etiquetas CSS que yo daba a las imágenes destacadas se veían sobrescritas por el CSS propio del Coppermine, por lo que no tenían efecto. Esta tontería me costo unas pocas horas de repaso de teoría del HTML, HTML5 y de las Hojas de Estilo en Cascada (no hay mal que por bien no venga) hasta que recordé que en CSS para conseguir sobrescribir una propiedad que está declarada después de la tuya, lo que puedes hacer es ser más específico en el selector. Resumiendo, que tenía que utilizar "td.ui-selected" en vez de ".ui-selected" en el selector para darle las propiedades a la foto seleccionada (si te quedan dudas, ya sabes, a recordar la teoría del CSS ;-)). Y por fin fui capaz de seleccionar fotos...

Selección de fotos con el mi plugin para Coppermine

Selección de fotos con mi plugin para Coppermine

Después implementé las funciones que añadían o eliminaban etiquetas en el servidor. No fue complicado pues hay bastante documentación para conocer el funcionamiento de los plugins en Coppermine, su BD, tablas y la forma de acceder y tocar en la BD.

Llegado a este punto tenía una primera versión funcional, pero al utilizarla me di cuenta que carecía de cosas importantes para que me fuera realmente útil, entre ellas:

  • La posibilidad de ver las etiquetas que tenía cada foto que estaba etiquetando
  • Ver las etiquetas previas que había utilizado con anterioridad en otras fotos (autocompletar).

La primera cuestión se solucionó más o menos rápido, pero para la segunda, después de investigar, encontré la librería "select2" basada en JQuery, pero no se puede decir que tenga mucha documentación (a día de hoy poco más de 3 ejemplos), y me costo lo suyo hacer que funcionara (mucho buscar en Internet y prueba y error). Cuando conseguí que funcionaran las pruebas, resultó que al añadir el código al plugin del Coppermine no funcionaba nada, tras más quebraderos de cabeza, resultó que me estaba pillando (lógicamente) la JQuery del Coppermine en vez de la mía (la 1.9); tenía que modificar la librería para que usara la versión nueva, para ello sustituí todas las llamadas a la función JQuery en la librería Select2 por la llamada a la mía ("jQuery19"); esto implicaba sustituir todos los "dollar", todas las definiciones de nuevas funciones y todas las llamadas (así dicho parece fácil, que lo es, pero la dificultad estuvo en darse cuenta del fallo y después en encontrar todas esas llamadas). Cuando todo funcionó ya tenía el autocompletar de las etiquetas, y al utilizarlo, ya sí empezaba a resultarme un plugin útil.

Muestra del autocompletar del plugin para Coppermine

Muestra del autocompletar del plugin para Coppermine

Con esta versión he organizado bien mis fotos, he realizado pruebas en la tablet y también funciona, pero con el uso, me han surgido nuevas necesidades. Concretamente la de localizar todas las fotos SIN etiquetas. Esto ha sido fácil de implementar, apenas me ha llevado una tarde. De esta forma ya puedo localizar rápidamente todas las fotos que aún no les he dado una etiqueta.

También comentar que NO he podido hacer que el botón que activa/desactiva la edición de las etiquetas se ponga mediante el uso del hook que Coopermine tiene para ello, el "sys_menu" ni con el "sub_menu". Desconozco porqué, pero cuando he tratado de buscar solución, toda la referencia que encuentro es para la creación de temas. En un futuro tengo que tratar de arreglar esto, porque tal y como está montado, el plugin sólo funciona con el Coppermine con el tema por defecto "curve"; si está usando otro tema, el botón de activar/desactivar no sale.

Después de todo esto, comentar que estoy abierto a nuevas ideas que puedan hacer de Coppermine un herramienta más útil aún :-).

Graphic Keywords Editor plugin for Coppermine
Graphic Keywords Editor plugin for Coppermine
graphic_keywords_editor.zip
Version: 1.0
244.9 KiB
39 Downloads
Details...

Plugin MultiPicFilmStrip para Coppermine Photo Gallery

En mi galería de fotos montada con Coppermine he realizado varios cambios y modificaciones, pero siempre me quedo con el amargo regusto de hacerlo deprisa y corriendo, sin dedicarle el tiempo que se merece, por ello hace un par de semanas me mire el sistema de plugins de esta galería de fotos. Me sorprendio, es fácil y sencillo, en escasos minutos tienes tu primer plugin de pruebas instalado, configurado y funcionando. Después de esa grata sorpresa monte un plugin que modifica ligeramente el comportamiento de la tira de fotos que sale debajo de la vista de imágenes.

El comportamiento por defecto de la tira de imágenes de Coppermine es avanzar una imagen por cada vez que hacemos clic en la flecha de avanzar o retroceder, y resulta un poco molesto para mi gusto tener que estar haciendo clics uno tras otro para moverme por varias imágenes. Con el plugin que he creado, esa tira de imágenes mostrará seis nuevas imágenes cada vez que hagamos clic en la flecha correspondiente.

Para hacer funcionar el plugin únicamente necesitas descargar el archivo, descomprimirlo y subir la carpeta "moveMultiplePicsOnFilmstrip" a la carpeta plugins de tu Coppermine. Después lo activaremos desde la configuración de plugins de Coppermine, no hay que configurar nada, y desde ese momento, las fotos de la tira de imágenes avanzará seis fotos por cada clic que realicemos. He creado un pequeño vídeo para ver el comportamiento antes y después de la activación del plugin.

Información para desarrolladores:

Hacer un plugin para Coppermine es extremadamente sencillo, me ha sorprendido gratamente, y si sueles meterle mano a tus aplicaciones web para que se comporten exactamente como tu quieres, en el caso de esta galería de fotos creo que merece la pena dedicarle unos minutos para entender el funcionamiento de su sistema de plugins y hacer que tus modificaciones sean reutilizables.

En mi caso tuve un pequeño problema, y es que el código Javascript que hace funcionar el comportamiento de la tira de imágenes o filmstrip, es el archivo "displayImage.js", y por algún motivo, este archivo siempre es el último en añadirse al array de códigos Javascript de la galería. Ello me provocaba que los cambios que yo hacia en el comportamiento de código Javascript se machacaran con el comportamiento original. Una primera solución evidente es tocar el archivo Javascript original, pero eso es una solución que requería de acciones extra aparte de la simple instalación y activación del plugin. Es decir era una solución poco elegante y bastante chapucera, por ese motivo, tras pensarlo un poco más se me ocurrió una solución mejor; lo que necesitaba era desactivar el handler de JQuery al evento clic de la flecha, pero para eso tenía que ejecutar el "unbind" después de que Coppermine cargara todos los Javascript. Esto lo solucione haciendo uso de una llamada a mi función con un delay no bloqueante como puede verse a continuación.

La función "nextPic(false)" es una copia de la función original que se ejecutaba con el clic, solo que modificada para que pueda llamarse varias veces seguidas. Concretamente la función se auto-llama a si misma cinco veces (más la llamada original, seis) provocando el avance consecutivo de seis fotos.

En un futuro realizaré una segunda versión de este código que en la activación del plugin pregunte el número de fotos a avanzar, de forma que se pueda configurar fácilmente si se desea que avancen más o menos fotos.

Por último comentar que un buen inicio para trabajar los plugins es ver como están creados otros plugins, puedes consultar muchos aquí. Y para comenzar el desarrollo puedes empezar con la propia documentación que ofrece Coppermine aquí.

Plugin Coppermine MoveMultiplePicsOnFilmStrip
Plugin Coppermine MoveMultiplePicsOnFilmStrip
moveMultiplePicsOnFilmstrip.zip
Version: 0.1
6.1 KiB
73 Downloads
Details...

Breve script para eliminar paquetes

Hoy he tratado de instalar un programa en mi ubuntu del portátil, para poder instalarlo me requería una serie de dependencias, concretamente con librerías de KDE (bastantes librerías); el problema ha venido cuando después de instalar dichas dependencias, la instalación del programa (que por cierto era el KTechLab y [2]) seguía sin poder realizarse. No me supone mayor problema, porque mi interés era solo por probarlo (aún está en beta), pero ahora el sistema se ha quedado un un montón de paquetes instalados que no quiero para nada, y que me consumen recursos. Podría entretenerme en desinstalar uno a uno los que yo he instalado, pero posiblemente quedarían dependencias sueltas en el sistema; por no hablar de que quizás no me acuerde de todo lo que he instalado.

Para solventar este problemilla, si hemos utilizado el Synaptic para realizar la instalación de los paquetes, podemos acudir a su historial, donde cómodamente podemos ver todos los paquetes instalados y/o actualizados ordenados cronológicamente (los que han sido instalados/actualizados desde el Synaptic).

El único inconveniente es que este histórico de paquetes está en un formato poco (o nada) útil (ni práctico). Para ello me he creado un (mini)script en bash que me permite rápidamente ejecutar la desinstalación de los paquetes que no me interesan y dejar mi sistema limpio tal y como estaba antes de intentar probar el programilla de pruebas.

El uso del script es muy sencillo y simple, he grabado un pequeño vídeo donde se ve como lo utilizo yo.

Cambiar la codificación a UTF-8

Hoy me he encontrado con el problema siguiente, un cliente al que le tengo montada la tienda con OSCommerce me dice que los productos le salen con caracteres raros (típico rombito) en la vista de tienda, pero en la parte de administración todo sale OK.

Tras investigar un poco, por algún motivo, el navegador no coge bien el charset de la página, que OSCommerce monta para la tienda, y donde el charset está correctamente puesto a ISO-8859-1, y curiosamente, si le pido al navegador que me utilice la codificación de UTF-8 si me muestra correctamente los caracteres. ¿Pero qué está pasando aquí?

Hay que tener en cuenta que hay dos problemas, el primero es que OSCommerce me esta usando la codificación ISO, tanto en la interfaz de la administración, como en la propia tienda, podría intentar cambiar sólo uno de ellos (la tienda), pero es posible que me encuentre con otros problemas, de hecho lo he intentado pero entonces se mostraban bien los artículos antiguos, pero volvía a tener el problema con los artículos nuevos que creaba. Entonces he tenido que cambiar la codificación a utilizar para la interfaz de la administración de la tienda en un archivo, y después también la codificación para la interfaz "frontend" de la tienda en otro:

Como la solución pasa por utilizar la codificación UTF-8 (que por cierto es la que debería usarse, no sé porque motivo OSCommerce no la usa por defecto), me dispongo a configurar OSCommerce a UTF-8, pero no sólo hay que decírselo en los archivos mencionados, ¿qué pasa con todas las traducciones de los archivos de OSCommerce que están en ISO-8859-1? Y no son ni uno, ni dos archivos, son unos pocos, total que me he montado este pequeño script en Shell-Script para realizar la tarea:

 

Con dicho script transformo los archivos al UTF-8, pero además, habra que decirle en algún sitio al OSCommerce que el estilo de codificacion de caracteres a indicar en el HTML (el charset del HTML generado) es utf-8.
Los comandos "file" y "iconv" estan por defecto en la mayoría de sistemas Linux. Y para una explicación de los comandos puedes echar un vistazo por aquí.

El mismo comando, pero separando las ordenes en varias, para facilitar la comprensión:

Lo que yo he montado es un simple bucle "for" que para cada uno de los archivos "php" de la carpeta actual, si su codificación de caracteres es ISO-8859-1 la cambia a UTF-8.

Create PDF from an image on PHP

Recently a friend asked me to create a script to make a PDF document from a set of images. The initial idea was get a table of 3x3 images randomly from a bunch. He need to run it into his web server, for this reason I think PHP (language supported) is the best option. He has a lot of cards, for example (the full set is about 25-30 cards):

Image of exampleExample cardExample card

And he want to allow people to download random cards from Internet. This random characteristic is the key he wants to reach. The solution is very simple as you can see below.

Example of final image of random cards

Example of final image of random cards

First, as always, I look for information on the net and I get a couple pages of interest.

Here we can get basics functions to create simple images as rectangles or lines:
http://bulma.net/body.phtml?nIdNoticia=671
As you can see the simplest way is use "gd" library. This library is commonly installed on PHP web servers. I make a couple of test and everything works, so I'll develop the script with it. Another solution will be "ImageMagick" library, in my case I can use both, but if you are interested you must test wich one you can use.

On this other page I find some function to get my image on a PDF file.
http://blog.unijimpe.net/crear-pdf-con-imagenes-en-php
With R&OS library you get "ezImage" function that is your solution. I must dig in by source code to understand all parameters because I can't find good documentation, but after couple tests I get my script work!

This script can be configured with the number of images on columns and rows. You can select the distance between images in pixels too. It's easy, I left some comments along the code.

I hope it will be usefull, here you can get my final script.

The script must be located on a folder next to all cards and the PDF library. I put here a compressed file with all together.

I hope it will be usefull, here you can get my final script.

Cards maker in PHP
Cards maker in PHP
creadorCartas.tar.bz2
525.2 KiB
196 Downloads
Details...

Foto aleatoria en WordPress

Objetivo del proyecto:
Lograr que las imágenes de la cabecera de mi WordPress se tomen aleatoriamente de mi Coppermine.

Hoy he terminado de montar un pequeño script que comencé ayer. La idea era cambiar las imágenes que me muestra WordPress en la cabecera, que si bien son monas, pero me gustan más las que yo hago, concretamente quería que las imágenes se cargarán desde un Coppermine que tengo montado. Para ello he indagado un poco y he encontrado una referencia para hacer algo parecido:

Ese código PHP simplemente hace uso de una función ya implementada en el Coppermine que se llama "get_pic_data(...)", tras buscar información sobre la misma en la documentación del código de la aplicación, (concretamente la función se puede ver aquí) he podido comprender su funcionamiento, parámetros que recibe y como los utiliza (es lo maravilloso de Software Libre).

Yo tome ese código original y lo he adaptado para que me devuelva aleatoriamente una imagen de uno de mis álbumes de mi Coppermine, dicho álbum es expresamente para almacenar estas cabeceras; por último sólo necesito tocar en el WordPress para que muestre la imagen a partir del script en cuestión en lugar de las que el tiene.

El código final después de las modificaciones es el siguiente:

He dejado al final comentado las líneas necesarias para mostrar una o todas las imágenes del álbum seleccionado, quizás sea útil.

Como comentaba en el WordPress hay que tocar un último detalle para que en vez de tomar las fotos que tiene por defecto, llame a mi nuevo script. Esto es muy simple desde la propia interfaz del WordPress editando el archivo "header.php" para cambiar que en lugar de mostrar la imagen devuelta por la función "header_image()" muestre la imagen que devuelve mi Script.

Esto mismo se puede hacer (y más elegante/bonito) desde mi punto de vista, en vez de tocando el header.php, editando el archivo "wp-includes/theme.php" para hacer que la funcion "header_image()" devuelva la ruta que llama a mi Script, el único inconveniente de esta segunda opcion es que hay que tener acceso al archivo "wp-includes/theme.php" (normalmente por FTP).

Por ultimo añadir que yo también he tocado el CSS del WordPress para hacer que el título de la web y demás salga encima del banner, ya que no me gusta que se desaproveche tanto espacio en la pantalla, citando a Juande (un ex-jefe mio del que aprendí muchísimo) "la pantalla es un recurso más, y como tal debe ser gestionado eficientemente".

La solución creada cumple con el objetivo inicialmente planteado. Y de hecho está funcionando ahora mismo.

Posibles mejoras:

  1. Sería interesante modificar mi Script para que corrija el MIME type del archivo devuelto y sea acorde a la imagen que se envía, actualmente el MIME type está fijo a "image/png", y las imagenes almacenadas en el Coppermine no tienen siempre ese formato, aunque yo lo suelo utilizar.
  2. Resultaría interesante hacer una modificación al Coppermine, de manera que no sea necesario subir expresamente los banners ya editados desde el PC, sino que al subir cualquier foto, pregunte si quieres sacar un banner a partir de ella, y en caso afirmativo, te muestre una interfaz en la propia web que te permita recortar la imagen subida y el Coppermine se encargue de crear la imagen/banner y guardarlo en el álbum correspondiente de "banners" (además de la imagen original).

Arduino - Comunicacion serie con Java y salida a LCD y LED bicolor

A principios de año aproveche la oportunidad de asistir a un curso de Arduino que se realizó en el IES los Viveros de Sevilla.
El curso fue muy productivo e interesante, lástima que en aquellos días yo estaba también preparando la oposición y no pude sacar todo el provecho al curso como me habría gustado, en cualquier caso aprendí mucho y más tarde, cuando me he visto liberado de ciertas obligaciones he continuado aprendiendo y avanzando con Arduino.
Este proyecto los realicé en dicho curso, no es un proyecto final, sino una pruebas para comprobar funcionamiento y costes.

La idea que se pretendía era comunicar una aplicación realizada en Java (con su interfaz gráfica) con un Arduino, este ultimo mostraría información en una pantalla LCD y modificaría los valores de un LED bicolor.

Imagen de la interfaz gráfica desarrollada en JAVA para comunicarme con el Arduino

Imagen de la interfaz gráfica desarrollada en JAVA para comunicarme con el Arduino

Una de las características que eche en falta en el curso fue la falta de reconocimiento que aprecie (por algunos comentarios) hacia los estándares, y en mi camino he aprendido que los estándares (y especialmente los desarrollados por organizaciones tan importantes como la W3C, IEEE, ISO, ANSI, ...) son de una importancia enorme, ya que nos permiten avanzar mucho más rápido gracias a que "no hay que reinventar la rueda". Por este motivo, uno de los requisitos que yo quería que cumpliera este pequeño proyecto era lograr que la comunicación entre el PC y el Arduino se realizará en XML (lo cual se logró, y de manera satisfactoria).

Arduino - Comunicacion serie con Java y salida a LCD y LED bicolor - YouTube.

Respecto a la aplicación en JAVA hay poco que comentar, simplemente es una pequeña interfaz gráfica, a mi me gusta el IDE NetBeans y es el que utilicé, respecto a las librerías para comunicarme por el puerto serie con el Arduino, usé las mismas que utiliza el IDE Arduino 1.0, estas se encuentran en la carpeta "/lib" de dicho IDE.
Por otra parte el XML lo genero con la librería XStream que es una maravilla, muy cómoda, rápida y flexible (no es la primera vez que la uso en mis proyectos ;-)).

El hardware montado es sencillo, en el siguiente esquema de conexiones (creado con Fritzing) faltarían indicar que la comunicación serie se realiza por el propio USB del Arduino.

Esquema del montaje y conexiones del proyecto

Esquema del montaje y conexiones del proyecto

Respecto al código fuente del Arduino, estuve buscando previamente si alguien habia realizado alguna librería o conjunto de funciones que me permitieran trabajar el XML, lo que encontré fue una función que posteriormente edité y modifique para que funcionara como yo quería. Concretamente lo que cambié fue para que detectara correctamente los cierres de las etiquetas XML.

A continuación se puede descargar todo el proyecto bajo licencia Creative Commons.

Creative Commons LicenseEsta obra de Alejandro Lorente está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 Unported.

Esquema de conexiones
Esquema de conexiones
led_PC_y_LCD_con_arduino.fzz
Version: alpha1
7.7 KiB
611 Downloads
Details...
Codigo fuente del proyecto para el Arduino
Codigo fuente del proyecto para el Arduino
mensajePCarduinoLCD.ino
Version: alpha1
6.4 KiB
598 Downloads
Details...
Codigo fuente Java del proyecto
Codigo fuente Java del proyecto
arduinoVentanasXML.tar.bz2
Version: alpha1
78.2 KiB
331 Downloads
Details...