Sincronizar carpetas entre Android y PC
Para GNU/Linux. La idea es sencilla: un script BASH que mediante el uso de ADB (Android Debug Bridge) mantenga una o varias carpetas sincronizadas entre nuestro Android y el ordenador de tal manera que siempre dispongamos de una copia en nuestro disco duro y esta se realice de manera automática (sin más intervención manual que conectar el teléfono al USB para cargarlo) y rápida.
En el siguiente vídeo se ve como funciona y como la sincronización es bastante rápida.
Idealmente esto lo empecé para mantener a mano en el ordenador las fotografías y vídeos que grabo con mi móvil (un Android – HTC Wildfire S) pero en realidad nada impide que esto puede ser usado para sincronizar otros contenidos ó simplemente como un modo cómodo de traspasar archivos al teléfono habitualmente para usarlo como pendrive.
La alternativa más evidente a este uso de ADB para sincronizar dos carpetas sería el montaje del teléfono como unidad de disco duro externo y a continuación usar alguna aplicación como sync para la sincronización, pero hay un par de ventajas a favor de ADB abismales: en el tiempo que tarda el teléfono en desmontar y montar en el PC la nueva unidad como un disco duro de nuestro ordenador he acabado yo de transferir alrededor de 200 Mg de archivos. La velocidad de transferencia es idéntica pero la conexión en inmediata (un par de segundos. Actualmente mantengo sincronizados 15 carpetas que contienen 250 archivos. Desde que conecto el teléfono al USB y aparece el diálogo informando de “No es necesaria la sincronización” pasan aprox. 6 seg).
Además de la velocidad, al no estar la tarjeta del teléfono montada como un disco duro/pendrive se gana en seguridad frente a archivos corruptos o desmontajes inapropiados. Si tienes que irte de improviso simplemente desconectas el teléfono y te lo llevas.
El único engorro es instalar ADB que viene con el kit de desarrollo de Android distribuido por Google. Si no las tienes ya instaladas simplemente sigue los pasos que se indican en la sección “Descargar Android SDK“
Preparar el móvil
La única preparación o instalación en el teléfono móvil es dejar activa por defecto la depuración USB de tal manera que siempre que se conecte esté accesible de forma inmediata para la aplicación ADB. Para activar la depuración usb, en tu teléfono busca y activa: Ajustes->Aplicaciones->Desarrollo->Depuración USB
Preparar el PC
En tu ordenador la única tarea extraordinaria (si no has hecho todavía) es asegurar que el ejecutable de ADB está accesible para todo el sistema. En mi caso ADB está instalado en /usr/bin.
Identificar tu Android
A continuación necesitamos algunos datos con los que reconocer cuando nuestro teléfono ha sido conectado al USB del ordenador.
Conecta el móvil vía USB, abre una konsola/terminal y escribes dmesg. Verás algunas líneas de información detectando la conexión de un nuevo dispositivo USB. Busca la línea que indica idVendor y idProduct. Copia y guarda esa información en un archivo de texto para usarla a continuación.
Reglas para UDEV
UDEV es el servicio encargado en la mayoría de los Linux modernos de registrar y administrar la conexión de dispositivos al ordenador. Mediante un serie de reglas indicamos a UDEV que es lo que tiene que hacer cuando detecte que se ha conectado/desconectado tal o cual dispositivo.
Las reglas UDEV estan normalmente (en openSuse 11.3) en el directorio /etc/udev/rules.d. En dicho directorio veréis una lista de archivos de texto que configuran el comportamiento de UDEV. Para no alterar archivos de sistema ya existentes lo ideal es crear nuestro propio archivo (como root) conteniendo nuestras reglas personalizadas y a continuación situarla al final de la lista de archivos existentes simplemente asignándole un nombre único tal como “99-mis reglas.rules” que lo situa al final de la lista.
(todas las operaciones siguientes se realizan como administrador, sudo) Si ya tienes tu archivo de reglas personales edítalo, de lo contrario crea uno con la siguiente línea:
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTRS{idVendor}=="XXXXX-ID-VENDOR", ATTRS{idProduct}=="XXXXX-ID-PRODUCT", ACTION=="add", RUN+="/bin/su mi-usuario -c '/home/mi-usuario/bin/sincro-movil'"
Reemplaza XXXX-ID-PRODUCT y XXXX-ID-VENDOR por los valores de tu dispositivo obtenidos en el paso anterior y mi-usuario por tu nombre de usuario.
En un terminal recarga las reglas conudevadm control --reload-rules
Probando la detección
Bien, vamos a comprobar que todo funciona como debe y que UDEV detecta y ejecuta el script correctamente, creamos un script que más tarde completaremos y lo guardamos con el nombre usado en el punto anterior (/home/mi-usuario/bin/sincro-movil) con el siguiente contenido:#!/bin/bashHaz ejecutable el script (chmod +x /home/mi-usuario/bin/sincro-movil).
echo "Hola móvil" > /home/mi-usuario/Desktop/movil.conectado
Una vez hecho esto conecta tu teléfono al puerto USB, en un par de segundos debería aparecer en tu escritorio una archivo de texto llamado “móvil.conectado“. Si no es así comprueba las rutas de archivos, nombres de archivos, etc…
Una vez que tienes tu script creado, funcionando y ejecutado correctamente desde UDEV pasamos a llenarlo de contenido.
Script de sincronización
El script que utilizo para la sincronización podéis copiarlo/descargarlos desde aquí sincroMovil (txt).
Guardad el contenido como (p.ejem) sincroMovil en vuestra carpeta ~/bin (o donde le indicasteis en el paso anterior a UDEV) y hacedlo ejecutable (chmod +x ~/sincroMovil). Editadlo y corregid las líneas que requieren personalizarse, las carpetas que quereis sincronizar, etc…
En este vídeo podéis ver el script en funcionamiento. Tomar una foto de la pantalla, conectar el teléfono y tener la imagen en el escritorio en unos segundos.
Sincronización: Básicamente el script lo que hace es generar un par de listas de archivos para cada una de los directorios a sincronizar. Ambos archivos se guardan en local (por rendimiento) y bajo los nombres (personalizables) de sincro.list y sincro.list.remota. Cuando el script se ejecuta (porque UDEV ha detectado la conexión o bien lo lanzamos manualmente) se recrean de nuevo ambas lista y se comparan mediante DIFF. Este archivo de diferencias define si es necesario el copiado de archivos y la dirección del mismo (del teléfono al PC ó viceversa) o simplemente se emite un diálogo avisando de que no es necesaria la sincronización.
Borrado local: Antes de hacer esto el script comprueba si falta algún archivo en local desde la última sincronización (es decir, se ha borrado manualmente) y caso de detectar que falta algún archivo lo borra también en el teléfono. Pero no a la inversa. Es decir, si borramos un archivo en local se borrará en el teléfono en la siguiente sincronización, pero si lo borramos en el teléfono únicamente el fichero se volverá a copiar a este en cuanto lo enchufemos al PC.
He hecho esto así porque parece más cómodo eliminar imágenes y vídeos desde el escritorio que desde el teléfono. Tiene el inconveniente de que no podremos eliminar un archivo desde el teléfono si este se encuentra en una carpeta sincronizada ya que a cada conexión se volverá a copiar desde el PC. Esto en realidad no es un bug sino una feature. :D
Si queréis anular esta función de borrado basta con comentar la línea 156 del script.
Mejoras
La principal mejora a introducir sería el refresco de la caché del teléfono. Actualmente el teléfono no se entera de los cambios ocurridos en su sistema de archivos (al menos en las galerías de fotos que mantengo sincronizadas). Si borramos un archivo en local y sincronizamos las carpetas, el teléfono sigue mostrando la miniatura de una imagen que ya no existe y emite un error al tratar de abrirla.
Si enviamos algún archivo al teléfono no aparece en la lista hasta que la caché se refresca.
Debe haber alguna manera de forzar el refresco de la caché pero he sido incapaz de encontrarla. Se agradece cualquier información.
Abierto el plazo para la presentación de candidaturas para la celebración de la openSUSE Conference 2015.
La edición 2013 ha sido la primera celebrada lejos de ciudades donde SUSE tiene oficina. Su organización corrió a cargo de la comunidad salvo en aspectos legales y económicos fundamentalmente. La openSUSE Conference 2013 tuvo lugar en Tesalónica, Grecia, en verano, y participaron unas 300 personas.
La edición 2014 se celebrará en Dubrovnik, Croacia en Abril. Ya se está preparando la organización del evento. Desde hace unas semanas, se ha abierto el plazo para la presentación de candidaturas a la celebración de openSUSE Conference 2015.
El evento cuenta con el apoyo de SUSE como principal espónsor. Esto da una garantía importante a la hora de poder organizarlo porque algunos de los gastos básicos de este evento de comunidad están cubiertos de antemano. La comunidad openSUSE asume algunas de las tareas más tediosas de la organización de modo que los organizadores locales no tienen que ocuparse de ellos. Los contenidos y el trabajo relacionado con sponsors también viene dado por la comunidad.
Dicho de otro modo, entre SUSE y la comunidad openSUSE asumen una parte del trabajo lo que garantiza que la organización del evento sea asumible para un reducido número de voluntarios locales. Depende del país y lugar de celebración, SUSE dispone de soporte local lo que facilita la difusión del evento, entre otras tareas.
En definitiva, si tienes experiencia en la organización de eventos de Software Libre, échale un vistazo a openSUSE Conference y presenta tu candidatura.
Un Portapapeles en la Nube
En esta ocasión implementaremos una serie de scripts para que cada vez que copiemos algo a nuestro portapapeles (Klipper, en este caso) tengamos una copia en la nube. Así por ejemplo, si nos encontramos con una página interesante que nos gustaría seguir viendo después en otro computador o dispositivo, bastará con copiar la dirección y ya la tendremos directamente accesible desde la nube.
Materiales:
- xbindkeys: Programa que nos permite crear atajos de teclado.
- xmodmap: Utilidad para cambiar el comportamiento de algunos atajos.
- xvkbd: Utilidad para emulación de teclado.
- Una cuenta en Copy o Dropbox. Ambos con clientes Linux y Android.
xbindkeys no viene en la instalación por defecto para openSUSE 12.3 por lo que iremos al OBS y buscaremos la versión (inestable) que corresponde a nuestro openSUSE (One-Clic Install). Particularmente instalé la versión que estaba en el repo Utilities dejando sin suscripción al repositorio después de instalar.
xmodmap ya estaba instalado en el sistema por defecto. Para instalar xvkbd sólo bastará hacerlo de la manera usual:
# zypper in xvkbd
$ xbindkeys --defaults > $HOME/.xbindkeysrc
# Examples of commands:
#"xbindkeys_show"
# control+shift + q
# set directly keycode (here control + f with my keyboard)
#"xterm"
# c:41 + m:0x4
# specify a mouse button
#"xterm"
# control + b:2
combinación de teclas
Al final del archivo entonces agregaremos lo siguiente:
"~/bin/super_copiar.sh"
m:0x50 + c:54
$ xbindkeys -k
$ xmodmap -e "remove mod4 = Super_L"
#!/bin/bash xvkbd -xsendevent -text "\Cc" qdbus org.kde.klipper /klipper org.kde.klipper.klipper.getClipboardHistoryItem 0 >> ~/Dropbox/Historial.txt
$ chmod +x ~/bin/super_copiar.sh
Alcances menores
He elegido super+c en vez de sobreescribir el control+c habitual pues porque la privacidad es importante, así enviaremos exactamente sólo lo que nos interesa tener en la nube mediante una combinación de teclas alternativa.
Es probable que debamos ejecutar al inicio de sesión el comando xmodmap y la activación de xbindkeys. Para eso podemos hacer un script simple llamado atajos_de_teclado.sh y pondremos lo siguiente:
#!/bin/bash /usr/bin/xmodmap -e "remove mod4 = Super_L" /usr/bin/xbindkeys
Guardamos los cambios, cerramos, damos permisos de ejecución y lo copiamos a nuestra carpeta ~/.kde4/Autostart
Eso sería todo. Como tarea pueden mejorar el script super_copiar.sh para agregar a cada línea la fecha y la hora en que el comando fue agregado a nuestro historial ;-)
Plasmoide para consultar la RAE

Acabo de sacar la primera versión de raecas, un plasmoide para consultar la RAE. Es muy sencillo su uso; escribes el término a consultar y le das al intro.
Está basado en qRAE.
Versión beta de qRAE disponible
No hace mucho tiempo que decidí crear una versión de escritorio del «Diccionario de la RAE«. Bueno, pues ya está disponible la primera beta de qRAE, un cliente del diccionario castellano de la RAE basado en Qt. No es gran cosa, pero puede ser útil para aquellos que consultamos la RAE a menudo. En teoría se puede compilar en cualquier plataforma, pero de momento sólo he creado un paquete RPM.
openSUSE Conference 2013 : La “Llamada de trabajos” se extiende hasta el 17 de Junio
Plazos de entrega….Originalmente, la “llamada de trabajos” de la Conferencia de openSUSE 2013 (oSC13), la reunión anual de nuestra comunidad, ha terminado el 3 de abril.
Sin embargo, algunos de ustedes parecen haber perdido la fecha límite y todavía hay un puñado de ranuras que quedan por cubrir, así que estamos extendiendo la convocatoria de propuestas hasta el lunes, 17 de junio 24:00.
Sin embargo, tenía que haber un pero, esperamos que el programa le llenan rápidamente, así que su “merde juntos”, “no es que francés nuevo”, y presentar sus propuestas lo más antes posible!
Lo que estamos buscando
Su presentación debe ser una charla, una presentación con diapositivas, o un taller en el que se indica a la gente en una experiencia práctica de laboratorio. El foco de su presentación debe ser uno de los siguientes 3 temas:
Comunidad y Proyectos
Presentaciones en esta área deben centrarse en las actividades del proyecto y de la comunidad openSUSE, incluyendo pero no limitado a la gobernabilidad de proyectos, marketing, obras de arte, informes embajador y así sucesivamente.
Geeko Tech
Presentaciones en esta área deben centrarse en las tecnologías de openSUSE como el embalaje, la distribución, la infraestructura, etc openSUSE
openWorld
En esta área , invitamos otros proyectos de software libre para compartir su trabajo y colaborar con la comunidad openSUSE. Las contribuciones no se limitan a contenido técnico, que puede optar por hablar de su proyecto favorito (“pet project”), como la construcción de un barco, un robot, u otros temas de interés.
y ya que estamos en eso, no olvide registrarse!
El registro seguirá abierto hasta que comience el evento e instamos a que se registre tan pronto como puedas! Las inscripciones nos ayuda a negociar con el lugar de celebración, hoteles y otros proveedores, que hace que sea más fácil para nosotros para planificar para la alimentación y la cantidad correcta de la diversión del partido durante oSC13.
Y recuerde: usted puede apoyar al oSC13 mediante con la compra de entradas de aficionados ($ 50) o boletos profesionales ($ 250) durante el registro. Los fondos provenientes de estas ventas de entradas son una parte muy importante del presupuesto para la conferencia general!
Power to the Geeko!
La conferencia de openSUSE es la reunión anual de los muchos que apoyan el proyecto openSUSE y otros colaboradores de software libre y los entusiastas. El evento en Salónica será nuestra quinta conferencia y esperamos que sea una vez más un gran éxito. Las charlas, talleres y discusiones de interés común constituyen el marco para el intercambio de información y conocimiento. En este marco, se proporciona un gran ambiente para la colaboración y la creación de conexiones y recuerdos duraderos.
El “Poder para el Geeko” lema de la conferencia de este año nos conecta con el pasado de nuestro país de acogida mientras se mira en el futuro a medida que continuamos en nuestro camino a cambiar el mundo.
Vamos a tener diversión!
Los filósofos griegos fueron parte de una revolución que cambió el mundo. Así somos nosotros, y por lo tanto, bajo el lema de “El poder de la Geeko”, nos reunimos y trabajamos en nuestra revolución. Permite obtener los engranajes giratorios presentar sus propuestas de sesiones, registrar su asistencia, nos ayudan a encontrar patrocinadores y hacer que la próxima conferencia de openSUSE un evento impresionante.
Cambiando el blog
En la última semana compré un pequeño dominio ando moviendo unas cosas para allá. El blog se va a http://nest.hawkzc.net.
El contenido será el mismo, sólo que ahora será manejado por Drupal.
Saludos.
Generar Lorem Ipsum en Libre/open Office
Hay ocasiones en que deseamos generar plantillas para algunos documentos y necesitamos establecer algún texto para indicar los lugares en donde se debe poner información.
Bueno, pues como la ayuda de Magenta Lorem Ipsum podemos crear con varios clics ese texto de ejemplo característico en muchos tutoriales.
Lo primero primero que tenemos que hacer es instalar la extensión en nuestro Libre/open Office. Para esto debemos descargar el OXT desde la página de Libre Office e instalarlo. Si no sabes cómo instalar extensiones, checa este tuto en la wiki.
Tendremos que reiniciar nuestro Office para que aparezca la extensión. En la próxima carga del programa debe aparecer un botón parecido a este:
Para generar el texto simplemente damos clic el ese botón para que nos aparezca un cuadro en donde especificaremos el tamaño del texto a insertar.
A primera vista, genera párrafos, pero en la lista aparecen otras opciones.
Elegimos la medida deseada y damos clic en el botón de Generar. Al final debemos tener un resultado como este:
Bookmark Autohider: ocultando automáticamente barra de marcadores en Firefox
Navegando por el sitio de extensiones de Mozilla, me he topado con esta extensión que permite recuperar un poco de espacio en la ventana de Firefox.
Al instalar Bookmark Autohider, la barra de marcadores se ocultará mientras el cursor del ratón no se encuentre cerca de la barra de direcciones.
Pero si colocamos el cursor cerca de la barra de direcciones, ocurre esto:
La extensión tiene varias opciones para configurar los tiempos en que se oculta o muestra la barra. Lo pueden encontrar en el apartado de Complementos de Firefox.
Espero que les sea de utilidad la extensión.
¿Cómo saber el número de meses entre dos fechas en PHP?
En las últimas semanas he trabajado en un proyecto donde hacemos uso del cálculo de fechas. Como ya han de deducir, uno de esos cálculos está relacionado a la redacción de esta entrada.
Pues bien, es algo sencillo. Primero tendremos que declarar nuestras dos fechas como un tipo de dato DateTime:
$fechainicial = new DateTime('2012-01-01');
$fechafinal = new DateTime('2013-01-01');
Ahora usaremos el método diff que poseen los objetos DateTime para saber la diferencia de tiempo entre nuestras dos fechas:
$diferencia = $fechainicial->diff($fechafinal);
El método diff nos devuelve un objeto del tipo DateInterval, que almacena la información sobre la diferencia de tiempo entre fechas (años, meses, días, etc.).
Bueno, para calcular los meses tendremos que multiplicar el atributo «y» por 12 (número de meses que contiene un año). Luego le sumamos el valor que hay en el atributo «m«, quien contiene el número de meses en nuestro intervalo de tiempo.
$meses = ( $diferencia->y * 12 ) + $diferencia->m;
Y listo, si hacemos la impresión de nuestra variable $meses, debe aparecer el número 12.









