Ajustando el brillo de la pantalla en Awesome

Poder cambiar la luminosidad de una pantalla siempre es algo práctico, para ajustarla cuando hay más o menos luz, o incluso apagarla para que un portatil siga procesando sin la pantalla encendida. Esto suele funcionar solo cuando utilizamos un entorno como KDE o Gnome, pero puede que no sea así si no utilizamos ciertos drivers o si preferimos entornos más configurables (como awesome).

Si preferimos hacerlo a mano, podemos desde la línea de comandos en /sys/class/backlight/, en el directorio de cada dispositivo hay un archivo brightness que marca el brillo actual (y que acepta cambios) y otro, max_brightness, donde indica el valor máximo que acepta, por ejemplo. continue.

TensorFlow con Python3

TensorFlow es una librería Open Source que Google ha liberado a principios de este mes. Permite de forma sencilla montar flujos de procesado y entrenamiento con elementos como redes neuronales, e incluso implementar nuevas operaciones sobre su arquitectura (tutorial y ejemplos).

Esta librería está escrita en C++, pero la arquitectura, los datos a tratar y las operaciones se declaran en Python. Esto está genial, ya que da un gran rendimiento sin tener que pelearse con Segmentation Faults, pero si pensabas utilizar Python3 para esto... quizá tengas que esperar un poco, resulta que aún no está soportado [issue #1 en el GitHub], aunque tienen intención de hacerlo en algún continue.

Un algoritmo de búsqueda de elementos similares

Es curioso, hay momentos en los que uno tiene que buscar una solución a un problema sencillo, por ejemplo, dadas varias listas de elementos, buscar la más parecida a otra nueva, y encontrar una solución (muy simple!). Pero esta solución no aparece en ningún otro sitio, a alguien se le tuvo que ocurrir! será tan simple (y tan inferior a otras), que no merece la pena documentarla?, simplemente uno no es capaz de encontrarla?... es probable :P...

Después de hacer alguna prueba más... resulta que no escala bien, y con grandes datos pierde ventaja rápidamente xD

Bueno, siendo como fuere, ahí va continue.

Writeup de inBINcible [NcN CTF Quals]

Lleva un tiempo el blog parado, pero traigo algo interesante, veamos como reversear un binario de los presentados en las quals del CTF de la No Con Name.

Aviso: Soy bastante novato en esto, así que seguro que se podrían obviar muchos pasos o hacer más sencillo con los conocimientos y herramientas adecuadas. Si sabes algo de esto, mejor ve ya a la parte curiosa ;).

El binario en cuestión es “inbincible”, si lo ejecutamos produce el siguiente resultado:

1
2
3
$ ./inbincible
Nope!
$

Obviamente no es el que nos interesa, así que veamos lo que hace, abrimos con gdb y buscamos una función desde la que empezar continue.

CM sin agentes de servidor? Prueba ansible

Hace unas semanas había hechado un vistazo a algunas herramientas de gestión de la onfiguración como chef, puppet y salt, pero lo dejé cuando vi que requerían un servicio en el servidor donde se instalaran.

Pues bien, resulta que este sábado, en el hackmeeting se habló de ansible, una herramienta para este propósito escrita en python. Me perdí la charla pero hoy le heché un vistazo a la página web

Ansible is a radically simple IT orchestration engine that makes your applications and systems easier to deploy. Avoid writing scripts or custom code to deploy and update your applications— automate in a language that approaches plain English, using SSH, with no agents to install on remote systems.

Eso suena muy, muy bien, ando probándolo y por ahora anda genial, quizá es lo que estabas buscando :P.

Detectando el lenguaje de un texto

A veces puede resultar útil detectar el lenguaje de un texto, en los sistemas *NIX es habitual tener un directorio con listas de palabras habituales de varios idiomas, simplemente comparando la proporción de palabras de un texto que cae en esa lista a través de los distintos lenguajes da un número que parece bastante significativo acerca de que idioma se trata.

Por ejemplo, probando esta aproximación sobre el texto traducido (en Markdown, sin convertir a HTML) de la entrevista de Snowden para Der Spiegel muestra los siguientes resultados:

1
2
3
4
5
6
7
$ python lang.py entrevista-de-edward-snowden-para-der-spiegel.txt
entrevista-de-edward-snowden-para-der-spiegel.txt [2341]

58.61%  spanish
51.60%  galician
29.18%  american-english
29.09%  british-english

Hacerlo sobre el texto de la GPLv3 continue.

Resolviendo nombres con Tor

El protocolo DNS tiene su tiempo, los RFC que lo definen, 1034 (conceptos e instalaciones) y 1035 (implementación y especificación) datan del 1987 y como en todos los protocolos de la época la seguridad brilla por su ausencia, cualquiera que sniffe la red puede ver que dominios visita alguien, ya no digamos quien provea el servidor DNS, pero poca solución tiene a corto plazo, Internet depende de este sistema de nombres y no hay otro sistema mejor que disponga de la infraestructura necesaria, no?

Resulta que la interfaz SOCKS de los proxy Tor ofrece una opción no estándar (punto 2) que permite usar esta red para resolver nombres, se puede continue.

Montando un tracker de torrent con twisted

Hace unas semanas supe de Twisted, una librería asíncrona de programación en red para python... lo que viene siendo node.js para python.

Entre otros muchos protocolos (incluyendo SSH, cliente y servidor) que soporta está por supuesto HTTP, lo que nos permite montar un servidor web dinámico sin necesidad de pararse a configurar apache, nginx o algo por el estilo, simplemente haciendo

pip install twisted

Y que aplicación web se puede montar rápidamente en un servidor web? un tracker de Bittorrent!

continue.

Diccionarios a lo Javascript en Python

Los "diccionarios" en javascript tienen una propiedad curiosa, que se pueden manejar los elementos como si fuera un array índicando el índice (con una variable) o como si fuera un atributo del objeto:

> var x = {}
> x
{}
> x.name = "joe"
'joe'
> x
{ name: 'joe' }
> x['name']
'joe'
> x.name
'joe'
>

En python los diccionarios no tienen esa propiedad, pero es fácil de hacer una clase que sí, apoyandose en que cada objeto tiene un diccionario interno, self.dict que almacena sus atributos, jugando con él (al menos si no nos metemos con los atributos que define la clase :P)... continue.

Previous »