Cambiar tamaño de las imágenes en una tarea

Desde opencms podemos crear una tarea con la clase org.opencms.scheduler.jobs.CmsCreateImageSizeJob podemos cambiar el tamaño de las imágenes que han subido los usuarios.
La tarea la va a reescalar respetando las proporciones de la imagen, por lo que es muy bueno para evitar imagenes muy grandes subidas por los usuarios.

Antes debemos configurar en WEB-IF/config/opencms-vfs.xml

<loader class="org.opencms.loader.CmsImageLoader">
<param name="image.scaling.enabled">true</param>
<param name="image.scaling.downscale">w:800,h:600,q:97,c:transparent</param>
></loader>

 

El parámetro image.scaling.downscale tiene:

  • w: El ancho de la imagen
  • h: la altura de la imagen
  • q:la callidad de la imagen en porcentaje
  • t: grado de transparencia de la imagen
  • c: color de fondo en hexadecial como c0c0c0

Otros parámetros que podemos configurar son

  • image.folder
  • image.scaling.maxblursize
  • image.scaling.maxsize

La tarea la creamos como el resto:
tareaopencms-cmscreateimagesizejob

Los molestos ._ de OSX

Malditos y molestos ficheros ._ culpables de los fork de HFS que se crean para meter las “propiedades” de OSX. Malditos y culpables que cuando copias desde el Finder aparecen por todos los lados y, aunque no os lo creáis, en algunos sistemas os pueden dar problemas.

Menos mal que el terminal esta para ayudaros:

find / -name '._*' -delete

Ya sabéis, un find para buscar, el / para buscar en todo el equipo (podéis poner la ruta que mas os guste o que necesitéis, el ‘._*’ que es el string de conexión que significa que busque todos los ficheros que comienzan por ._ y el -delete para que les borre.

log4j: fijando un fichero de propiedades

Hoy me he encontrado con que lo4j no me encontraba el fichero log4j.properties así que decidí depurar un poco en java con la opción “-Dlog4j.debug”.

Después de copiarlo en todos los sitios posibles seguía sin encontrarlo, así que lo fijé con la opción “-Dlog4j.configuration=/tmp/log4j.properties” pero aun así seguí sin encontrarlo. Tras mucho pegarme pensé en utilizar notación HTML y probar con “-Dlog4j.configuration=file:///tmp/log4j.properties” y funcionó.

Curioso 🙂

Evitar Thumbs.db bajo Windows Vista y Windows 7

Desactivar la creación de los ficheros Thumbs.db bajo Windows Vista o Windows 7 es muy similar a hacerlo bajo Windows XP, salvo que tenemos que mirar en otros sitios.

1. Lo primero es acceder a las directivas del equipo, pulsando el botón de windows y escribiendo “gpedit.msc”.
2. Configuración de usuario > Plantillas Administrativas > Componentes de Windows > Explorador de Windows
3. Hacemos doble click en “Desactivar la presentación de miniaturas y mostrar solo iconos en las carpetas de red”.
4. Seleccionamos “Habilitar”.

De esta forma no se crearan los ficheros Thumbs.db en las unidades de red, que aunque no ocupan mucho, pueden llegar a ser molestos.

El proceso es similar bajo Windows Vista.

Evitar Thumbs.db bajo Windows XP

Al hilo del post anterior, si queremos evitar (bajo Windows XP) que cree el fichero Thumbs.db tendremos que realizar los siguientes pasos:

1. Abrir el explorador de archivos (botón derecho del ratón sobre el botón de inicio y pulsar sobre explorar)
2. En los menus: herramientas > opciones de carpeta
3. Activamos “No alojar en caché las vistas en miniatura”.

No .DS_Store en unidades de red bajo OSX

Si desde OSX montais las unidades compartidas de vuestros alojamientos y se os crean los molestos ficheros .DS_Store no tenéis más que abrir un terminal y escribir la siguiente linea:

defaults write com.apple.desktopservices DSDontWriteNetworkStores true

De esta forma modificareis el fichero de configuración del Finder añadiendo esa linea en el XML correspondiente.

Recordad que el .DS_Store es similar al fichero Thumbs.db bajo Windows.

Aplicación fantasma para acceder a un perfil en facebook

Investigando con el objetivo de crear una aplicación en Facebook que permita controlar una cuenta de forma offline permitiendo: escribir en su muro, crear eventos, gestionar páginas… he llegado a la conclusión que esto puede llevarse a cabo con  aplicación fantasma (vacía) ya que lo importante del asunto es conseguir los permisos necesariosestos son los pasos necesarios para hacerlo de la forma sencilla:

1)  Agregar aplicación Developer

Suponiendo que tenemos creada ya una cuenta en Facebook, el primer paso consiste en agregar la aplicación “Developer“ o “Desarrollador” a nuestro perfil. Todo contenido que se agrega a Facebook es una aplicación, así que para desarrollar nuevas aplicaciones es necesaria una aplicación que las contenga.

Una vez que tenemos agregada la aplicación “Desarrollador” estamos en disposición de crear aplicaciones nuevas…

Aplicación Desarrollador

2) Crear nuestra aplicación desde la aplicación developer…

Crear nueva aplicación

La primera vez que queramos crear una aplicación se nos pedirá que introduzcamos un código que nos llega por sms al telefono móvil que tenemos configurado en la cuenta o que introduzcuamos una tarjeta de credito válida si también la tenemos configurada en la cuenta, la segunda y sucesivas aplicaciones que creemos bastará introducir un captcha como control de seguridad.

Captcha de confirmación

En la configuración de la nueva aplicación  algunos aspectos importantes que debemos configurar son:

  • El tipo de canvas (contenedor de nuestra aplicación) en nuestro caso lo configuramos  como IFrame, que  se caracteriza porque la aplicación pasa a estar realmente en tu propia página web y Facebook simplemente muestra un IFrame (un marco) en su sistema con el que cargar tu web. Facebook, con sus últimos cambios pasa a recomendar este sistema.
  • La URL del Canvas: página web de nuestra aplicación.
    ** NOTA- en nuestro caso aunque configuramos una página en nuestros servidores, estará vacía.
  • El nombre de página de lona: que será la forma de referirnos a nuestra aplicación en facebook y que http://apps.facebook.com/NOMBRE_APLICACION

Para cada aplicación se generan automaticamente un conjunto de claves que utilizaremos para referir a la aplicación y autenticarnos:

  • Id de aplicación – identificador de la aplicación.
  • Clave API
  • Clave secreta de aplicación
Configuración de nuestra aplicación
Configuración de la aplicación mosto_uva

 

3) Conseguir permisos para nuestra aplicación y un perfil concreto

Nuestra aplicación puede hacer prácticamente cualquier acción que un usuario podría hacer en su perfil, pero es necesario que el usuario de un perfil de permiso explicitamente a la aplicación incluso en nuestro caso que hemos creado la aplicación desde el propio perfil UVa.

Todo esto podría programarse directamente en la aplicación que tenemos alojada en nuestros servidores con la ayuda del  javascript sdk o el  PHP sdk, en cualquier caso es importante entender que cualquiera de estas dos APIs son una abstracción de la Graph API.

La API Graph es el core de la plataforma facebook, permitiendo a los desarrolladores leer y escribir datos en facebook. Provee un vista simple y consistente del Social Graph (El término Social Graph fue utilizado por primera vez por Facebook para describir las conexiones que unos usuarios mantienen con otros dentro de una red social, es decir, un mapa de sus relaciones.), donde se representan los objetos (gente, fotos, eventos, páginas) y las conexiones entre ellos (amistad, likes, etiquetas de fotos)

http://developers.facebook.com/docs/reference/api/

 

La llamada que tenemos que realizar para solicitar los permisos será del siguiente tipo:

https://graph.facebook.com/oauth/authorize?type=user_agent&?client_id=ID_APLICACION&?redirect_uri=http://www.facebook.com/connect/login_success.html&?scope=offline_access,manage_pages,publish_stream,create_event

  • client_id – es el id de la aplicación, que habíamos apuntado en el paso anterior.
  • redirect_uri – es la página a la que redireccionar el navegador una vez hayamos dado los permisos a la aplicación.
  • scope – es una lista de permisos, cuyos posibles valores podemos consultar en la documentación al respecto. El permiso offline_access es uno de los más importantes: permite que el token que nos va a pasar Facebook para autenticarnos no caduque, incluso cuando el usuario esté desconectado. Si quieres interactuar con las páginas que gestiona tu usuario, en lugar, o además de con tu propia cuenta personal, necesitarás requerir también el permiso manage_pages, nosotros en principio vamos a solicitar prácticamente todos los permisos posibles.
Solicitud de permisos de la aplicación
Aplicación mosto_uva solicitando permisos al usuario

 

4) Obtener el token de acceso

Ahora que ya tenemos una aplicación con permisos, cada vez que invoquemos nuestra aplicación desde nuestro perfil (aunque nuestra aplicación esté vacía y no haga nada) aparecerá un token de acceso en forma de parametro “ACCESS_TOKEN” que lleva implicitos todos los permisos que el perfil otorga a la aplicación y que se mantendrán mientras no eliminemos la aplicación de nuestro perfil.

De nuevo se puede utilizar la graph api para preguntar directamente por el token de acceso.

https://graph.facebook.com/oauth/access_token?client_id=YOUR_APP_ID&client_secret=YOUR_APP_SECRET&grant_type=client_credentials

ACCESS_TOKEN=

 

5) Interactuar con el perfil que dio permisos a nuestra aplicación fantasma

Ahora ya podemos publicar en el muro y las páginas que administra el perfil de la universidad desde el que hemos autorizado la aplicación, las posibilidades infinitas solo hay que construir llamadas a la API en forma URL enviando siempre como parametro el access_token que nos autoriza.

Podemos hacer una rápida prueba de concepto haciendo un pequeño script con ayuda del comando curl desde un interprete de comandos:

curl -F ‘access_token=TOKEN_ACCESO’ \
-F ‘message=Hola uva adictos.’ \
https://graph.facebook.com/universidad.devalladolid/feed

Nos permite agregar un mensaje en el perfil “universidad.devalladolid” que es desde el que hemos dado permisos a nuestra aplicación.

 

Error en Apache: No space left on device: mod_rewrite: could not create rewrite_log_lock

Hoy nos hemos encontrado con este error en Apache que impedía su arranque:

No space left on device: mod_rewrite: could not create rewrite_log_lock

La solución, algo que no tenía que usar desde la práctica de sistemas operativos de la carrera. Borrar los semáforos del sistema.

Podemos ver los semáforos del sistema con el comando “ipsc -s”:

# ipcs -s (mostrar el listado de Semaphore Arrays, este es un ejemplo, no el mio)
------ Semaphore Arrays --------
key semid owner perms nsems
0x00000000 2686976 stas 600 1
0x00000000 2719745 stas 600 1
0x00000000 2752514 stas 600 1

Y podemos ir matando los semáforos con “ipcrm -s SEMID” siendo SEMID el identificador del semáforo obtenido con “ipsc -s”.

Es importante que lo ejecutéis con suficientes privilegios por lo que os recomiendo usar el usuario “root”.