martes, 7 de julio de 2015

Optimizando mirrors en #Arch Linux

Soy un usuario fanático de #ArchLinux, a casi 20 años de manejar Linux y -particularmente- 13 de mantenerlo como opción primaria de escritorio (y casi única, porque seamos realistas el mundo aún no nos atiende como se debe), estoy encantado con el concepto de rolling release y particularmente con el poder de controlar al más mínimo detalle las características del sistema operativo, evitando -por ejemplo- que se activen servicios innecesarios desde el momento de instalación incluso.

En esta ocasión quería compartir una particular experiencia para los usuarios de #ArchLinux de tal manera que puedan tener sus mirrors actualizados y -por sobre todo- ordenados por performance, el proceso es bastante simple, sólo abran un terminal y escriban lo siguiente:

pacman -S reflector

Esto permitirá instalar un script que permitirá el manejo cómodo de los mirrors, hecho esto -con permisos de root- haremos uso del mismo para descargar los 200 mirrors más actualizados:

reflector --verbose -l 200 -p http --sort rate --save /etc/pacman.d/mirrorlist.backup

No nos olvidemos de sacar un backup de nuestro mirrorlist original:

cp /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.original

Finalmente, los ordenamos y creamos el nuevo archivo mirror:

rankmirrors -n 10 /etc/pacman.d/mirrorlist.backup > /etc/pacman.d/mirrorlist


Listo! Ahora podemos descargar nuestras actualizaciones diarias (bueno, yo lo hago cada hora, se ha vuelto un vicio) con una performance envidiable, incluyo un screenshot de la última actualización de paquetes en mi #ArchLinux


jueves, 7 de julio de 2011

Implementando fácilmente Python en Linux

Implementar Python en Linux en plataformas web no es tan simple como trabajar con apache y php, ese matrimonio del mal :).

En el trabajo diario de mi empresa ICTEC implementar las soluciones (basadas en Python) requería algo de ese esfuerzo adicional, sin embargo, escribimos unos scripts que permitían configurar fácilmente Python en Linux, específicamente CentOS.

Es así que liberamos python-deploy un conjunto de scripts y archivos que -a modo de guía- ayudarán a cualquier desarrollador a poner en producción su aplicación.

Python-deploy fue originalmente empleado para llevar a producción desarrollos escritos en Python y empleando Tornado. En este caso, se instala MongoDB como motor de base de datos no-relacional y Nginx como web server de cara al usuario que permite hacer balanceo de carga. Como cereza que corona el pastel, agregamos supervisor, un genial gestor de demonios que hará de nuestros servicios algo simple de administrar.

lunes, 1 de febrero de 2010

Victoria de Ruby resolviendo Fibonacci (vs Python)

Conversando rápidamente con un 'amix' en twitter (@Yaraher - Alvaro Pereyra) me dí con la sorpresa de que el rendimiento de Ruby se ha incrementado dramáticamente, así que lo sometí a una sencilla prueba comparándolo con Python: la archi conocida secuencia fibonacci.

El vídeo muestra una ventana de Terminator, dividida en 2 áreas horizontales y 4 verticales.  En la primera sección vertical se ejecuta la secuencia fibonacci empleando Python2.6, en la segunda con Python 3.1, en la tercera con Ruby 1.8 y en la cuarta con Ruby 1.9.1.





En primer lugar las tareas se ejecutan simultáneamente, luego se ejecuta cada una individualmente y así poder apreciar su rendimiento como proceso mandatorio.


Código Python

def fib(n):
 if n == 0 or n == 1:
         return n
 else:
  return fib(n-1) + fib(n-2)

for i in range(36):
 #print "n=%d => %d" % (i, fib(i))
 print ("n=",i," =>",fib(i))


Código Ruby

def fib(n)
 if n == 0 || n == 1
              n
 else
  fib(n-1) + fib(n-2)
 end
end

36.times do |i|
 puts "n=#{i} => #{fib(i)}"
end




El resultado de la prueba fue una victoria absoluta para Ruby 1.9.1 (con unos impresionantes 8.xx segundos, pero solamente cuando es el proceso principal que emplea el CPU, cuando no es así el rendimiento es similar al de Python), ambas versiones de Python van muy parejas sin mucho cambio en el rendimiento (19 y 21 segundos) y si están empleando 1.8, dejen de hacerlo: es malísimo (62 segundos)