viernes, 24 de julio de 2015

Configurar las brightness keys en Kali Linux

Recientemente he tenido que cambiar de portátil, y esta vez (y por el momento) me he decidido por instalarle Kali Linux. La verdad es que me sorprendió ver que funcionaba *casi* todo recién instalda Kali, pero una de las cosas que no funcionaban eran las teclas de brillo o iluminación de pantalla (también conocidas como screen brightness keys o brightness buttons). Después de darle un par de vueltas, encontré dos formas fáciles de solucionarlo, la mía y una un poco mejor ;)

La primera forma que encontré de solucionarlo -la mía- fue modificar directamente los valores del gnome settings daemon power a través de un pequeño script. El script lo he colgado en mi github https://github.com/rubenhortas/gnome_brightness_keys y lo podéis utilizar libremente.

Para utilizarlo sólo hay que guardarlo en un directorio en el que tenga permisos de ejecución, y asignar los comandos "brightnessControl up" (para aumentar el brillo) y "brightnessControl down" (para bajar el brillo) a las teclas a través del propio menú de gnome (Aplicaciones > Herramientas del sistema > Preferencias > Configuración del sistema > Teclado > Atajos > Combinación personal).

Haciéndolo de esta forma las teclas van a funcionar, pero no nos va a salir el indicador de brillo en la pantalla cada vez que cambiemos el brillo.

La solución que encontré para que las teclas funcionen y muestre el indicador de cambio de brillo en pantalla ha sido instalar xdotool y asignar loscomandos "xdtool key XF86MonBrightnessUp" (para subir el brillo) y "xdotool key XF86MonBrightnessDown" (para bajar el brillo) a las teclas.

Con cualquiera de estas dos soluciones tendremos las teclas de brillo funcionando.

Enjoy! ;)

domingo, 19 de abril de 2015

borrar la partición de caché en un moto g



Hace un par de meses mi Motorola Moto G (primera generación) empezó a sufrir de "muerte súbita". El teléfono, aún teniendo batería se apagaba de repente. Aunque volvía a encender aleatoriamente (sobretodo después de ponerlo a cargar unas horas), era un problema que me tenía enfadado. La solución fue borrar la partición de caché del dispositivo. Para borrar esta partición, los pasos a seguir son:

  1. Con el teléfono apagado, pulsar la tecla bajar volumen durante 2-3 segundos. Sin soltar la tecla, pulsar también la tecla de encendido y después soltar ambas.

  2. * El dispositivo mostrará distintas opciones de arranque.

  3. Utilizar la tecla bajar volumen para desplazarse a "Recovery" (recuperación) y la tecla subir volumen para seleccionar la opción.

  4. * Si el dispositivo se reinicia, es que se ha esperado demasiado para hacer una selección. Hay que volver a empezar el proceso.

    * El dispositivo mostrará el logotipo de Motorola y, a continuación, el de Android de emergencia (un logotipo con una exclamación)

  5. Mantener pulsada la tecla subir volumen durante 10-15 segundos. Manteniendo pulsada la tecla subir volumen, tocar y soltar la tecla de encendido.

  6. * El dispositivo mostrará opciones de menú adicionales (el texto aparecerá en azul) * Si se queda atascado en este paso, se puede intentar un reinicio forzado pulsando la tecla de encendido y la tecla bajar volumen. (Habrá que volver a empezar todo el proceso)

  7. Utilice la tecla bajar volumen para desplazarse hasta la opción de borrado de la partición de caché "Wipe Cache" y la tecla de encendido para seleccionar la opción.

  8. * El dispositivo llevará a cabo el borrado de la partición.
    * El dispositivo se reiniciará y comenzará la secuencia de encendido normal.

Enjoy!

lunes, 8 de diciembre de 2014

python 101 para desarrolladores

Coruña Developers (@CorunaDev) es una iniciativa que acaba de surgir en A Coruña y que, en resumidas cuentas, pretende ser un punto de encuentro para desarrolladores. Un lugar donde poder conversar, debatir y sobretodo aprender de otros desarrolladores con más experiencia en otras áreas.

El viernes pasado tuve la oportunidad de inaugurar las charlas con "Python 101 para desarrolladores". La charla es una introducción a Python, pasando por alto cosas básicas, haciendo hincapié, sobretodo, en las diferencias, ventajas y desventajas que presenta Python respecto a otros lenguajes de programación. Dejando para el final ciertas anotaciones que consideré necesarias, aunque no pude profundizar en ellas por la extensión de los temas a los que hacen referencia.

Desde aquí quiero volver a aprovechar para agradecerles a los chicos de Coruña Developers la oportunidad y la experiencia (también el trato recibido), y a los asistentes el interés y la curiosidad demostrada. La verdad es que para mi ha sido una experiencia muy positiva, y espero que resultase productiva para los asistentes.

Aunque sé que para los no asistentes las diapositivas y los ejemplos pueden resultar escuetos, por consenso con la organización y los asistentes, he decidido colgar el material utilizado (diapositivas y ejemplos de código). Mientras se crean los servicios que servirán de puntos comunes para alojar todo el material que vaya generando el proyecto Coruña Developers, he subido las diapositivas a google drive (en formato pdf), y los ejemplos utilizados a github.

Para los no asistentes, esta documentación podrá resultar escueta por encontrarse fuera de contexto. Ya que simplemente se trata de material de apoyo (notas breves y ejemplos simples) para la charla. Material que sirve para dotar de estructura, consistencia y un hilo argumentativo la narración. Un material que, por su formato, deja fuera ciertos temas y matices y comentados durante la charla. De todas formas, puede que aún así resulte de interés.

Personalmente, y después de hablar con los organizadores sobre las ideas que tienen, creo que es una iniciativa muy interesante. Estoy seguro de que estaré en futuras ocasiones, en principio como asistente, pero quien sabe! Quizás en un futuro tenga la oportunidad de repetir como ponente ;)

Podéis seguir las actividades de Coruña Developers en su página de facebook: https://www.facebook.com/groups/CorunaDevelopers y/o en su twitter: @CorunaDev

Nos veremos en futuras ediciones!

Python 101 para desarrolladores (Material)

domingo, 14 de septiembre de 2014

integrar pydev y github en eclipse

Cuanto más programas, más indispensables se vuelven los sistemas de control de versiones. Aunque ya he hablado de alguno ellos en este blog anteriormente, hoy voy a explicar cómo integrar eclipse + PyDev + GitHub. Para programar en python como un pro ;)

Requisitos previos

  1. Instalar PyDev (rama Main)

    Requisitos:

    • Java 7
    • Python >= 2.1 o Jython >= 2.1 o IronPython >= 2.6
    • Eclipse >= 3.8

    Abrimos Eclipse y vamos al menú: Help > Install New Software...

    En la siguiente pantalla, pulsamos Add y añadimos la dirección de las actualizaciones de la rama main de PyDev: http://pydev.org/updates. Como nombre le pondremos "PyDev".

    Marcamos PyDev y desmarcamos la opción "Contact all update sites during install to find required software".

    Pulsamos Next. Leemos y aceptamos la licencia y pulsamos Finish.

  2. Instalar EGit y GitHub Mylyn Connector

    • Volvemos al menú Help > Install New Software... de Eclipse
    • Introducimos la dirección de las actualizaciones de nuestra versión de Eclipse (en mi caso "3.8 Juno" -> http://download.eclipse.org/releases/juno/).
    • Filtramos los resultados por "git" y seleccionamos: EGit, JGit y Mylyn Github
    • Pulsar Next y finalizar la instalación.
  3. Manejando los repositorios de GitHub

    • Crear el repositorio en la web de github
    • Importar el repositorio en Eclipse

      Aunque hay muchos tutoriales disponibles para hacer esto, en ellos recomiendan crear los archivos directamente en Eclipse, hacer un commit y un push en el repostorio local de Git y asociar el repositorio local de Git con el repositorio remoto en GitHub. Pero eso crea una carpeta con el nombre que tiene el proyecto en Eclipse dentro del repositorio en GitHub. Cosa que no me gusta nada. Por eso, esta parte la voy a hacer "a mi manera", cambiando el modo, y evitando así tener esa carpeta en el repositorio de GitHub.

      • En el área de proyectos pulsar botón derecho, "Import"
      • Seleccionar Git/Projects from Git y pulsar Next
      • Seleccionar "URL"
      • Introducir la URL del repositorio en GitHub (los campos Host y Repository path se autocompletan. Introducir el usuario y la contraseña y marcar la opción "Store in Secure Store".
        Pulsar "Next", "Next", "Next" hasta llegar a la pantalla para seleccionar el asistente para importar proyectos.
      • Importar el proyecto como proyecto general (general project)
        Pulsar "Next" y "Finish"

      Ahora ya tendremos nuestro proyecto de GitHub importado en Eclipse

      • Añadir los archivos al proyecto
      • Hacer el primer commit

        Botón derecho sobre el proyecto > Team > Commit.

        *Hasta que no hagamos un commit, los archivos del proyecto mostrarán un pequeño interrogante.

      • Introducir el primer comentario. Seleccionar los archivos que queremos incluír en el commit y que queremos sincronizar con el repositorio en GitHub y pulsar "Commit" o "Commit and Push" (si los queremos subir ya).
      • Si no hemos hecho el push (o para futuros pushs)

        • Seleccionamos el proyecto, botón derecho > Team > Push to Upstream

          Y ya tendremos los cambios locales sincronizados con nuestro repositorio en GitHub

  4. Activando PyDev

    En estos momentos, notaremos que no nos funcionan las comprobaciones de PyDev.

    Para solucionarlo:

    • Seleccionar el proyecto > botón derecho > PyDev > Set as Source Folder (add to PYTHONPATH)
      No os preocupéis, enseguida lo borramos de ahí ;)
    • Seleccionar el proyecto > botón derecho > PyDev > Code analysis
    • Quitar el proyecto de PYTHONPATH

      Como ya está funcionando PyDev, si no lo necesitamos explícitamente, eliminamos el proyecto del PYTHONPATH.

Y ya está. Ya tendremos todo listo. La verdad es que parece un proceso tedioso, pero en cuanto se hace una o dos veces, uno se da cuenta de que no son más que un par de clicks aquí y allí ;)

Enjoy!

Fuentes:

martes, 26 de agosto de 2014

iceweasel, tor y dns leaks

Para los que no conozcáis iceweasel, he de decir que es un fork totalmente libre de firefox, y el navegador predeterminado de Debian. De cualquier forma, es mi navegador habitual.

Todo empezó el pasado domingo, cuando me decidía a bajarme el último capítulo de una de esas series extranjeras que sigo y que aquí ni se estrenaron, ni se estrenan, ni se las espera. La página no estaba disponible. Como no tenía la IP de la página, comprobé su estado a través del servicio: downforeveryoneorjustme.com.

Era solo yo. Entonces me di cuenta de que mi ISP había decidido volver a bloquear ciertas páginas de descargas. Páginas de esas que tan poco les gusta a unos y que tan útiles nos resultan a otros.

Esto me enfadó bastante. Por una parte, por qué están bloqueadas otra vez? Hay una sentencia judicial reciente que les obliga a levantar el bloqueo. Por otra parte, qué anduve haciendo con mis DNS y por qué me dejé puestas las que usa el ISP y no las OpenDNS? (Seguro que ya no eran horas...) En ese momento pensé que tal y como están las cosas (gracias a un buen puñado de ministros inútiles) sería mejor bajar el torrent a través de TOR (siempre cifrando el tráfico del cliente de descargas, claro). Pero... Tampoco resolvía!

WTF? AYFKM??? DNS LEAKS?!?!?!

Cambio las DNS y me dispongo a comprobar si hay fugas con wireshark. Efectivamente, unas fugas de DNS tan grandes que no sabía si tendría que pagarles el IBI. D'OH!!!.

Inmediatamente se me vino a la cabeza una mala configuración de firefox/bug que provocaba estas fugas (allá por el 2012...), y fui directo al about:config a comprobarlo, por si era heredada.

Después de cambiar la variable network.websocket.enabled y ponerla a false, me vuelvo a wireshark, a ver que tal están las cosas ahora y... Sigo con fugas! D'OH!!! (2).

Pero ya que estamos aquí, y por aquello de no dar dos viajes, vamos a rebuscar un poco en las opciones relacionadas con las DNS...

network.proxy.socks_remote_dns = false? Vamos a ponerla a true... A ver qué dice ahora wireshark...

Efectivamente, era eso. Y yo dejando mi rastro de miguitas de DNS por TOR :'(

Gran lección aprendida: Antes de salir de casa hay que hacer siempre los deberes.

Así que ya sabéis, cuidado con esas fugas!

*Nota: Algunas extensiones pueden revelar nuestra IP aún mientras estamos utilizando TOR o i2p. Haced los deberes!

*Nota 2: Los enlaces están apuntando a meneame.net y wikipedia intencionadamente. No pienso enlazar a ningún medio de AEDE.

Enjoy! ;)