Primer batch de tweetcodes (1 - 10)

Desde finales de enero estoy publicando un tweetcode al día en gnusocial (@oneliners), y en twitter (@twtcodes). El concepto viene de una idea que tuvo @hacklego para hackliza: un twitcode sería un pequeño codigo, de no más de 140 caracteres, que tenga alguna utilidad. Parte de la idea, era también dar una explicación de como funciona, así que ahora que va más de un mes de estos twitcodes, toca empezar a explicarlos. Veamos...

1. Colorear 0s y 1s

1
sed 's/1/\x1b\[1;32m1/g'|sed 's/0/\x1b\[1;31m0/g'|sed 's/\x1b\[1;3[12]m[01]/&\x1b\[0m/g'


En gnusocial, twitter.

Desglose:

1
2
3
sed 's/1/\x1b\[1;32m1/g' | # Colorea los 1s de verde
sed 's/0/\x1b\[1;31m0/g' | # Colorea los 0s de rojo
sed 's/\x1b\[1;3[12]m[01]/&\x1b\[0m/g' # A los 
continue.

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.

Subuser: un Docker para el escritorio

Hoy andaba trasteando con Docker e intentando hacer que corriera una aplicación de escritorio, algo que no se puede hacer sin salirse del flujo que se espera de esta herramienta.

Docker es una plataforma que permite gestionar “contenedores”, algo similar a las máquinas virtuales de toda la vida, pero sin la sobrecarga de tener que simular otro sistema completo con su kernel y sus cosillas... Estos contenedores encontraron un entorno perfecto en los servidores, donde permiten montar más VPS, o donde permiten que cada micro-servicio corra de forma aislada sin necesidad de varias máquinas.

Sin embargo estos sistemas no estan orientados a las máquinas de “escritorio”, y se portan 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.

El Julia set en un shader

Desde que empezó el tema de los smartphone, siempre sonó interesante la idea de programar desde el propio cacharro. Si bien ya se podía desde (casi?) el principio con SL4A, nunca fué algo demasiado cómodo.

Pues bien, resulta que en F-Droid (market de aplicaciones libres) tienen un entorno que permite programar Shaders en GLSL, programas que permiten generar gráficos desde la GPU, e incluso utilizarlos como fondo de pantalla, Shader Editor.

El programilla es bastante sencillo, y parece un buen método para aprender a hacer shaders, sabiendo por ejemplo C, y a partir de los ejemplos que incluye.

Pues bien, ahí va algo programado cacharreando con esto 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.

Evolucionando decoders [1]: Brainfuck

Ya va casi un año desde el último post, como pasa el tiempo...

Esta época he estado liado con varios proyectos, he acabado mi Trabajo de Fin de Grado, del que intentaré hablar más adelante, y he participado en algún CTF. Algo que he notado es que en lo que se refiere a pruebas criptográficas suele haber dos tipos, en las que el algoritmo está claro desde el principio y hay que atacarlo. Y en las que se da un texto cifrado y se plantea el reto de obtener el flag que hay en el.

La idea detrás de este segundo tipo de pruebas (supongo) 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.

Extrayendo subtitulos de un .mkv

Realmente sobre esto ya había escrito pero se perdió en alguna migración... así que aquí está de nuevo

Todo el parseado y la extracción la implementa mkvtoolnix, así que habiéndolo instalado...

1
sudo apt-get install mkvtoolnix

A partir de ahí podemos ver las pistas que tiene un archivo

1
mkvinfo video.mkv
continue.

Migrando ownCloud de MySQL a SQLite

En su momento realicé una instalación de ownCloud utilizando MySQL como base de datos, más tarde se hizo obvio que esta no era la opción correcta y que la necesidad de ahorrar toda la memoria RAM posible y el hecho de que no hubiera más accesos que los míos apuntaron a que debía haber optado por SQLite, el proceso es algo complicado la primera vez así que aquí queda explicado por si hay que repetirlo...

Lo primero es convertir la propia base de datos a SQlite, idealmente esto supondría sacar un mysqdump, pasárselo a SQLite y el estándar del lenguaje haría el continue.

Previous »