¿Wannacry en Linux? o por qué Linux es más seguro que Windows

Hace poco leí este artículo, sobre que ‘ni Linux ni Mac te salvarán de la condena de los ransomware‘. Y es cierto lo que dice, Linux es el campeón en vulnerabilidades descubiertas de todos los tiempos. También pueda que tenga razón sobre el hecho que los malwares los hagan para Windows porque es el sistema operativo para desktops más popular. De esto ya había escrito hace algunos años atrás.

Pero en este post quiero recalcar un pequeño detalle, que diferencia a Linux (y quizas Mac, no lo se) de Windows, en el caso de los errores de seguridad.

Continue reading “¿Wannacry en Linux? o por qué Linux es más seguro que Windows”

Ahora es ‘Vendimia Framework’

Hace unos días, antes de dormir, googleé ‘M3 framework‘. Y resulta que ese nombre lo usa un plan de modernización del gobierno de USA, un software de topografía, un protocolo de IoT, una librería para web adaptable, y una plétora de otras cosas más.

Así que decidí renombrar el proyecto. Seguiré la sugerencia de mi gran amigo Ricky Muñoz, y ahora se llama ‘Vendimia Framework‘ 👏👏

GitHub: https://github.com/vendimia/vendimia

(futuro) Sitio web: http://vendimia.in

M3 Framework

Actualización: El framework ahora se llama “Vendimia

TL;DR: Para ir al cau cau de este post, haz clic aquí.

Un poco de historia.

Todo empezó con el servidor web Xitami a finales del milenio pasado, por allá en el lejano 2000. Jaime y yo la pasábamos de lo lindo haciendo programas en Pascal para usarlo de filtro HTML en el Xitami, y colocar un contador de visitas en la web, y otras monadas. Oh, las gratas memorias…

Continue reading “M3 Framework”

tmux-git 0.4

Este es un pequeño update al tmux-git:

  • La configuración ahora está guardada en un fichero separado ~/.tmux-git.conf, creado automágicamente en la primera ejecución
  • Soporte inicial para Mac con homebrew.
  • He removido la verificación de ejecución dentro de tmux de la función principal. Ahora se realiza en el .bashrc, por lo que si usas una versión anterior a la 0.3, debes de editarlo y colocar la línea de instalación como está en el README.md

https://github.com/drmad/tmux-git/releases/tag/v0.4

PHP7: Sintaxis uniforme de variables

PHP 7 ya casi está aquí. Su principal cambio, es que debe funcionar, en promedio, el doble de rápido que PHP 5.x sin necesidad de modificar los programas ya hechos. Rasmus mostró unos slides en PHP Australia con unos benchmarks (con flecha derecha avanza los slides) sobre algunas aplicaciones populares, y su diferencia de velocidad. Y wao…

Esta nueva versión tiene un gran cambio que traerá problemas con el código en PHP ya existente, ahora usa una nueva sintaxis de variables que afecta cómo se evalúan las variables variables desreferenciadas.

Las variables variables son una de esas travesuras mágicas de PHP que algunos lo toman como mala práctica de programación,  aunque te ayuda bastante si los usas con cautela: Una variable variable es una forma de acceder a una variable, propiedad, función, o método, usando el valor de otra variable.

$nombre = 'oliver';
$campo = 'nombre';
echo $$campo;

El código de arriba mostrará oliver. Con el tiempo, la sintaxis de PHP se volvió más compleja, y la forma de evaluar variables variables cuando se desreferencia un array comenzó a ser inconsistente. PHP normalmente analiza las expresiones de izquierda a derecha. En el código:

$arr['el'] -> prop;

PHP primero buscar la variable array $arr, luego busca su elemento 'el', y del objeto resultante accede a su propiedad prop.

PERO en algunas expresiones más complejas como:

$$arr['el'] -> prop

PHP 5.x primero obtendrá el valor de $arr, ubicará su elemento ‘el’, y luego buscará una variable con nombre igual a dicho resultado, y de ahí accederá a su propiedad prop. Empieza a analizar por la mitad, regresa a la izquierda, y luego se va a la derecha. Y hay muchos más casos de inconsistencias de este tipo, incluso con expresiones idénticas en contextos distintos.

Adiós al desorden

En PHP7 el análisis de las variables será de izquierda a derecha, sin excepciones. Ya me topé con un problema de estos: Este línea de código empezó a generar la noticia ‘Array to string conversion‘:

$res[] = $record -> $params[0];

Quizás haya tenido un poco de sentido común esta forma de analizar variables: obtienes la propiedad cuyo nombre se guarda en el índice 0 del array $params, del objeto $record. Pero nuevamente es inconsistente con el análisis izquierda-derecha. PHP7 ahora lo analiza así: Obtiene la propiedad guardado en la variable $params del objeto $record, y de él obtiene el elemento 0. Como $params es un array, y las variables variables tienen que ser strings, produce la noticia que mencioné arriba.

Para lograr el comportamiento que quiero en PHP7, es necesario darle un hint al analizador usando llaves, para agrupar los elementos que deben ser analizados juntos:

$res[] = $record -> {$params[0]};

Este código también es válido en PHP5. Este cambio trae orden al caos, a costas de romper compatibilidad con código anterior. Pero además, este cambio prepara al analizador de PHP para poder evaluar expresiones más complejas. Ahora queda a esperar al lanzamiento final, en Octubre 🙂

Jugando con el framebuffer de Linux en Raspberry PI

Hace una semana llegó (después de 4 meses), la pantalla 7″ touch que pedí al Papa Noel chino 🙂

IMG-20150817-WA0009

Docenas de ideas se me ocurrieron para usar esta pantalla con el Rasperry Pi del la visita anterior de Papa Noel: Desde un on-board display para el carro, hasta un reloj mono para mi alcoba. Pero cualquier cosa que haga tiene un pequeño reto: El hardware es bastante limitado: 700 MHz de velocidad de procesador, 512MB de RAM, entre otras cosas. Pero eso es excelente: con pocos recursos, necesitas ser creativo 🙂

El primer problema es cómo dibujar una interfase gráfica para lo que vaya a hacer. Lo más sencillo hubiera sido quizás usar Gambas, pero el overhead sería demasiado. Así que comencé a bajar de nivel, pensando en Python + OpenGL, C++ + OpenGL, pero todo me pareció muy complicado y/o con demasiado overhead. Al final, después de indagar un poco, llegué a viejo Framebuffer de Linux. Y es perfecto: No requiere ninguna dependencia (ya viene todo en Linux), funciona en cualquier Linux, y es bastante sencillo de usar: Como en los viejos tiempos, accedes a la memoria de vídeo directo para dibujar los pixeles. Mi lado oldschool demoscener se emocionó B-)

Y qué mejor forma de probarlo, que implementar un viejo efecto de fuego 😀

Este código está hecho en C, y tuvo varias iteraciones. Primero lo empecé probando en Dorothy, que su framebuffer sólo trabaja a 1024×768 y 32bpp. Pero era demasiado lento en el RPI. Al final quedó trabajando a 8 bpp (como en la VGA de antaño, so retro!!1ONE 😀 ), usando lookup tables para evitar ejecutar rand() en el bucle principal (lento), y convirtiendo las funciones para leer y escribir pixeles en macros.

El código fuente está en github.

Mi c-foo está muy oxidado… aun hay espacio para optimar más ese código. Aún así, fue una semana excelente, acabando con un perfecto #viernesretro 😀

El Cañón de los Perdidos

Todo el departamento de Ica ha estado en algún momento de la vida de la tierra sumergido bajo el mar. Esto le da a su tierra sus excelentes propiedades para la agroindustria.

Pero el distrito de Santiago y el distrito de Ocucaje son particularmente interesantes, ya que su historia geológica es tangible. En su desierto se pueden encontrar no sólo fósiles de ballenas o tiburones, sino toda las épocas de su existencia guardadas en los estratos de las rocas.

estratos2

estratos

Por dichos distritos pasa y desemboca el Rio Ica, el cual ha cavado por el paso de los eones bellos paisajes, que aun en temporada seca mantiene su vegetación y encanto.

rio_ica

En el 2009 se hizo público un nuevo atractivo de esta zona por un reportaje de un canal local: una vertiente del río Ica, que ahora está seco, cavó en la tierra un pequeño cañón.

El 10 de julio del 2011, un grupo de personas de la Asociación de Promoción Turística y Cultural de Ocucaje, al intentar llegar al cañón, se perdieron por varias horas, y de ahí lo bautizaron como El Cañón de los Perdidos.

Hace unas semanas, mi amigo Bryam y yo nos propusimos perdernos hasta encontrarlo 😀 . Con Google Maps en la mano, y después de 6 horas de divagar por los desiertos de Ocucaje y Santiago (y tomar docenas de fotos a cada piedra o ave que encontramos), llegamos a esta pequeña maravilla natural.cañon-1

Está a aproximadamente 82km de camino desde el centro de Ica. La mayor parte es trocha, pero transitable. Bryam ha hecho un mapa del camino en su página de Destinos Ica. El cañón debe tener unos 2km de largo, y unos 100 metros de profundidad en su inicio. Al final de él, la pendiente es menos pronunciada, y se puede bajar.

cañon-2 cañon-3cañon-4El final del cañón tiene una mini-cascada seca, que le llaman La Cara del Puma, y debajo hay un pequeño pozo de agua estancada.

cañon-5

El lugar tiene su encanto, aunque más me gustó las 6 horas perdidas en el desierto 🙂

Branch de Git en Tmux

Para desempolvar este blog, le he instalado el nuevo tema 2014 que está bien paja. Después le cambiaré la imagen de la portada. Pero por ahora, quiero comentarles sobre un pequeño script que he creado para jugar mejor con Git:

https://github.com/drmad/tmux-git

Este script muestra la rama (‘branch‘) activa del repositorio Git que está en el directorio activo en la barra de estado de Tmux, un “multiplexador” de terminales cliente-servidor muy paja, que además proporciona esa barra de estado.

¿Por qué Tmux? Hay varias soluciones para mostrar el branch activo en el prompt  del terminal de Linux, como esta (lo cual es muy útil, para no estar repitiendo git status constantemente), pero la verdad es que me gusta tener el prompt sencillo, sin tantos bombos ni platillos. Entonces, ¿dónde muestro esa información?

Ahi entra a tallar Tmux.

 

Instalación

Primero necesitas, obviamente, tener instalado tmux y git… Si unas una distro derivada de Debian (como Ubuntu, Mint, ElementaryOS, SteamOS, etc.), basta ejecutar:

sudo apt-get install tmux git

Una vez instalado todo, clonas el proyecto a una carpeta escondida en tu home:

git clone git://github.com/drmad/tmux-git.git ~/.tmux-git

Luego, agregas el script en el fichero de incialización de Bash ejecutando esta línea:

 

echo "if [[ \$TMUX ]]; then source ~/.tmux-git/tmux-git.sh; fi" >> ~/.bashrc