11.11.09

Google’s “go” simple & stupid benchmark (1st round: I/O)

Systems programming language? They gotta be kiddin…

$ cat hello.cpp && g++ hello.cpp &&
> time for i in $(seq 100); do ./a.out >/dev/null; done

#include <stdio.h>
int main (int argc, char** argv)
{
    for (int i=10000;i--;)
    {
        printf("hello, world\n");
    }
}

real 0m0.427s
user 0m0.220s
sys 0m0.164s

$ cat hello.py &&
> time for i in $(seq 100); do python hello.py >/dev/null; done

for i in range(1,10001):
    print "hello, world"

real 0m3.809s
user 0m2.800s
sys 0m0.724s

$ cat hello.go && 8g hello.go && 8l hello.8 &&
> time for i in $(seq 100); do ./8.out >/dev/null; done

package main
import "fmt"
func main()
{
    for i:=10000;i>0;i--
    {
        fmt.Printf("hello, world\n")
    }
}

real 0m7.528s
user 0m6.388s
sys 0m0.664s

Continued in Round 2: memspeed

09.11.09

Puls, 256 bytes intro by Arriola

This post is twice the size of Puls 😯

09.2.09

hoygan, no puedo resizear las afotos, cómo ago!

Hay momentos en la vida en que pringar puede ser divertido. Por supuesto, se trata de cuando alguien te ruegadeja migrar su apestoso Microsoft Windows Whatever (TM) a Linux.

En su primeras horas de contacto con una Ubuntu 9.04 recién instalada, mi querida aikurushii se me queja en formato hoygan (que en mala hora se me ocurrió enseñarle) de que en Windows podía redimensionar imágenes con solo hacer click derecho, y ahora en Linux no, y que Linux apesta.

Como acto reflejo, me calzo un ssh a su ordenador, y esgrimiendo vim a dos manos le esbozo un bash en 5 minutos:

#!/bin/bash
size=$(echo "$0" |sed "s/.*\.\(.*\)\.sh/\1/g")
for i in "$@"
do
        newname="$(echo "$i" |sed "s/\.\(...\)$/.$size.\1/g")"
        cp "$i" "$newname"
        mogrify -resize $size "$newname"
done
text="Resized to $size px wide."
#some optional user interface candy, uncomment at will:
#zenity --info --text "$text"
#echo $text

El script en cuestión se guarda en, por ejemplo, /usr/local/bin/resizer.640.sh, o resizer.1024.sh, o la resolución a la que se quiera redimensionar las imágenes (también se puede symlinkear el script con varios nombres, por supuesto, y cada uno resizeará a un tamaño diferente).

Y por fin, desde el navegador de ficheros de turno, se le dice que abra las imágenes en cuestion con el susodicho script, et voilà, Linux doesn’t suck any more!

Bueno, y entonces es cuando se me ocurre googlear un poco 😀 y encuentro esta cosa llamada NIS… si el caso es reinventar la rueda 😀 😀 😀

06.5.09

Frikuriosidades estadisticas en bash

Tras descubrir el excelente sitio CommandLineFu, no he podido resistirme a probar uno de sus fus con los cuatro usuarios que utilizo mas a menudo.

El comando en cuestion muestra un Top 10 de comandos usados en bash:

history | awk '{a[$2]++}END{for(i in a){print a[i] " " i}}' | sort -rn | head

Los resultados obtenidos son:

stenyak@home     root@home      stenyak@work      root@work
3195 ls          1098 ls        1481 ls           182 pacman
2240 cd          639 cd         1310 svn          146 ls
1147 hg          356 vi         1045 cd           80 rm
1077 vi          303 emerge     1017 vi           74 vi
393 rm           233 eix        979 make          58 cd
381 su           144 rm         386 rm            36 for
357 find         93 grep        373 grep          23 ping
333 man          87 mount       269 ssh           19 umount
293 mplayer      82 man         266 svndiff.sh    19 grep
275 mv           81 smartctl    161 hg            15 su

Por supuesto, las estadisticas son todo mentiras. Cabe destacar el buen trabajo que hacen muchas distribuciones en conseguir que bash autodestruya sus historiales. No me he molestado en comprobarlo en las Gentoo y ArchLinux que utilizo, pero si usais Ubuntu, que sepais que os ocurre by default.

Pero weno, que he hecho esto porque me aburria, asi que la rigurosidad de la prueba nos la pela un poco, no? xD

He probao el script en la RedHat de mi server offsite, pero parece no funcionar; si alguno hoygais un fix, ruego compartais el conocimiento.

(tenia pensao meter una grafica de gnumeric o gnuplot por aki, que los posts siempre quedan mejor con dibujines para que la gente no tenga que leer, pero sorry, no me aburro tanto esta vez 😀 . Weno, vamos a intentar hacer el blog un poco mas interactivo, a ver que tal sale…)

¿Cual es tu Top 10 como luser y como root?


02.24.09

Bash 4.0 on the loose!

Parece que hay una nueva version del omnipresente y monopólico shell default en casi cualquier distribución GNU/Linux:

Bourne-again Shell

El changelog de la nueva 4.0 no parece sugerir grandes cambios a primera vista, sino más bien pequeños tweaks por aki y por allá, pero son bienvenidos de todas formas. Al fin y al cabo, existen mil y una shells alternativas en caso de que no nos mole mucho la forma a veces warra de implementar funcionalidades en bash 😉

Happy bashacking!

01.20.09

Consistent Desktop UI proposal

I’ve always been a bit particular with my desktop preferences. After using WindowMaker, Gnome+Sawfish, Ion2, WMII, Kde+Kwin, Gnome+Metacity, Compiz Fusion+AWN and testing out some more, I’ve yet to see one that fully addresses my needs.

One of my main complaints is the waste of screen real estate. Both window managers and applications themselves are at fault for this. The influence of Windows UI style in panels and windows has prevented most designers from getting the most out of the users’ screens. Ion2 is the window manager i’m currently most happy with, but it’s still not perfect if applications don’t properly cooperate, which is only possible if they follow some sort of guidelines (such as those discussed and published by the FreeDesktop project).

This blog post shows a suggestion that could, IMHO, improve the desktop experience, although maybe at the cost of reduced usability for computer illiterates.

As an introduction, here’s a quickly gimped draft of the idea I had some months ago:

simple UI draft

The increase in usable space is obvious (well, at least to power users). The famous and ancient “title bar” is gone. We already have the window title in the so-called task bar, so why repeat it again using a whole horizontal bar for it? And what’s with the habit of dedicating another whole bar for 5 tiny application menues? Furthermore, the old status bar can be set to automatically hide for additional real estate (with a behaviour similar to that of Google browser Chrome).

Most interactive widgets have been moved to the top of screen (but they might as well have been placed on the bottom or aside). Personally, I see no reason for spreading buttons all over the screen, other than following the current desktop environment trends. Having them all close together greatly reduces the need to move the mouse.

Keep in mind that the tabs depicted in that draft are not supposed to be fullscreen-only, but have a mixed TDI & MDI behaviour (similar to Opera but, instead, leaving the management of those document windows to… well, the window manager 🙄 ).

But it doesn’t stop there. While we’re at it, why not merge the ideas behind desktops and apps? Here’s the natural evolution of the original idea:

evolved draft

There, the concept of virtual desktops is applied as a way to organize tabs (instead of using yet more windows for the same application instance).

The key is what I’ve just decided to name generic-bar. This bar contains an “app” icon (gnome icon, firefox icon, favicon…), abstracted pager, “tabs” and applets (menues, buttons, traditional applets…) in any desired number and order. For example, in the last draft there are two generic bars: the first one contains “applications”, while the second one contains what we currently know as “tabs”. In essence, both applications and tabs would be handled the same way by the proposed desktop environment. Furthermore, this hypothetical desktop environment could handle generic-bar nesting of any depth.

The good thing is that this desktop proposal does not remove any functionality currently found on most desktop environment UIs, but actually adds more while freeing up even more space for your valuable applications to use.

11.13.08

Looking beyond Pandora’s box

Many of you may remember the awesome Pandora music service. If you’re north american, you can actually still enjoy it, while the rest of the world suffers a massive IP address ban.

Luckily, there are several alternatives to Pandora’s boombox, the most known of which is Last FM: Imeem, Youtube music playlists, Anywhere FM… But recently I got pointed in the direction of a very interesting one: Jamendo.

Jamendo hosts a heck of a lot of music without shitty restrictive licenses. Not only is most of the music very high quality, but it’s also free for download. That’s right, at no cost. You can burn whole albums onto discs, copy them to thumbdrives, share with friends, share with strangers (via P2P)… almost anything you want to do, you can, in virtue of their Creative Commons licenses.

You can also, of course, donate some money to the artists you like. 😉

We can’t thank you enough, Lessig!

11.5.08

Cómo “arreglar” Gnome (X11 y SSH mediante)

Hago un minipost para añadir una pequeña correción al rant de la semana pasada sobre cómo “arreglar” Ubuntu. En concreto sobre el tema de edición del registro de gnome, donde hacía alusión a lo divertido que puede ser retocar la configuración de Gnome en remoto.

Al grano: existe una nueva opción e), con la que podemos evitar tanto el hospital como el manicomio. Como veis, son todo ventajas!

Consiste en conectar via SSH con X forwarding al host contaminado con gnome en cuestión, tal que asín:

ssh -XC <host con gnome>

Una vez hecho eso, tenemos un prompt normal y corriente, en el que al lanzar cualquier proceso que intente acceder a las X, hará uso del server X11 de nuestro ordenador local 😀 . Mediante la opción -C, además, comprimimos mediante gzip las cosas, bastante util si no estamos en una LAN rápida.

Por ejemplo, si escribimos esto en nuestra shell…

gconf-editor

…se lanzaría una horrorosa ventana GTK en nuestra propia pantalla. Algunos programas dicen chorradas sobre dbus al intentar ejecutarlos, se arregla mediante dbus-launch:

dbus-launch <programa quejica>

Para desafiar aún más nuestra salud mental, podemos probar a hacer gamberradas como lanzar el panel de gnome localmente, con resultados exhilarantes:

  • Borde superior: tenemos el panel de Gnome remoto, seguido del panel de KDE local.
  • Lado izquierdo: un GIMP remoto (el título <@blackube> denota el hostname remoto).


clickety click

  • Lado derecho: un GIMP local.
  • Borde inferior: otro cacho de gnome-panel remoto.
  • Fondo de pantalla: el del KDE local.
Como datos interesantes, un par de cosas:
  • Al parecer no se comparten los portapapeles, asi que no se puede copiar-pegar de un gimp a otro. Imagino que será mi culpa de algún modo.
  • Ambos GIMPs se muestran con mi configuración local de 120 DPI (y no a los 120 y 90 DPIs respectivos de cada host).
Resumiendo, que esto es un brainfuck en toda regla y lo demás son tonterías. Espero que por lo menos os saque de apuros algún día! 😛

10.29.08

Cómo “arreglar” Ubuntu

Soy de los que opinan que Ubuntu por defecto apesta un buen rato (y cuando digo Ubuntu, también quiero decir Kubuntu, Xubuntu, Edubuntu…). Le salva que es facilísima de instalar. Con este minitutorial espero conseguir que Ubuntu sea usable para alguien más que Joe Sixpack.

Supongo que la mayoría de pegas que tengo son respecto a la filosofía de Ubuntu, pero como es mucho más facil quejarse y escribir en blogs que hacer mi propio fork de Ubuntu, prosigo con mis pataleos. 😀

Lo primero, no sé para qué diablos deshabilitan la cuenta de root, si cualquiera puede hacer un sudo -s o un sudo bash. Por tanto, vamos a ahorrarnos teclear chorradas redundantes, que con el su de toda la vida vale y sobra:

sudo passwd

Por supuesto, nos metemos como root para los siguientes pasos. Hay dos formas:

su    #para la gente normal

su -c bash   #para la gente acostumbrada a sudo

Lo siguiente, no sé a quién se le ocurrió que para tener permisos de administrador, vale con saberte tu propia clave. Así que vamos a evitar que cualquier luser con una cuenta en el sistema pueda ganar permisos de root:

perl -pi -e ‘s/env_reset/env_reset, rootpw/g’ /etc/sudoers

Otra tema que me enerva bastante es ese asqueroso feto de engendro abortado llamado vim-tiny. No podían poner vi, qué va. Tenian que coger vim, partirle las piernas, extirparle el lóbulo frontal, y ponerle de nombre vim-tiny. Y al vim normal, ya puestos a liarla, le renombramos como vim-full, qué leches…
Después diran que la gestión de paquetes de Gentoo y de BSD son un coñazo, pero por lo menos no necesitamos recurrir a semejantes warrohacks para bastardizar un simple paquete!

apt-get remove vim-tiny

apt-get install vim-full

perl -pi -e ‘s/”syntax on/syntax on/g’ /etc/vim/vimrc   #démosle un poco de color a las tareas de sysadmin, en honor al difunto Tiny

SSH, absolutamente imprescindible, pero capándolo a solo quien lo necesite.

apt-get install ssh

usuarios=”root hombreman lusuario”

addgroup sshlogin

for i in $usuarios; do adduser “$i” sshlogin; done

echo “AllowGroups sshlogin” >> /etc/ssh/sshd_config

Lógicamente, esta gentucilla debería tener una política de contraseñas mínimamente digna:

for i in $usuarios; do chage -m 50 -M 60 -W 10 “$i”; done

También queda el tema de que cualquier usuario puede apagar el ordenador cuando quiera, incluso si otro luser tiene abierto un openoffice sin guardar en su sesión.

El equipo donde he metido Ubuntu ha quedado un poco más severo, pudiendo solamente el usuario root reiniciar/apagar/hibernar/suspender el equipo. Por desgracia, debido a las sabias decisiones del equipo de Gnome, uno se ve obligado a elegir entre:

a) Hacer clicks en noséqué clon de regedit.exe.

b) Editar archivos XML a pelo.

c) Dar palos de ciego con gconf-tool desde consola.

Por supuesto, si estais en remoto (como yo), existe otra opción igualmente agradable:

d) Averiguar uno mismo si es solamente una leyenda urbana, o si realmente el ser humano es capaz de meterse su propia cabeza por el weeeeno, como ibamos diciendo, que se puede configurar con algo de paciencia.

Nuestra Ubuntu ya pinta un poco mejor, no os parece?


Esto es otra cosa. 😎

Otro día más y mejor!

P.S.: Antes de que se enciendan las llamas, comentar unos pares de cosas:
– Respeto la libertad de cada uno de tener su propia opinión sobre el software mencionado.
– De hecho, estoy seguro de que a alguien le puede gustar semejantes fustañas como Gnome y Gconf.
– Odio casi por igual a Gnome y a KDE.
– La mayor parte de este post la he escrito de coña, incluído este comentario, pero podéis flamearme igualmente 😉

10.3.08

El método de la nevera

¡Hola frikomaníacos!

Bienvenidos otra vez a Frikomanía, el programa para los que a veces se aburren! En la edición de hoy vamos a hablar sobre discos duros y neveras.

Como todos sabemos, solo los blandos hacen backups de sus discos duros, y nosotros no somos blandos. La experiencia nos indica que es mejor esperar a que el disco duro pete. Sólo cuando éste eche humo procederemos a hacer una copia de sus datos.

Así pues, en el frikonsejo de hoy vamos a ver cómo recuperar datos de un disco duro muerto mediante una nevera. Para ello necesitaremos las siguientes herramientas:

  • Una bolsa de congelante. Sí, una de esas típicas azules o verdes.
  • Una bolsa de aire hermética.
  • Un ventilador de Bilbao (aunque con uno de 30cm también debería valer).
  • Un trapo que absorba bien la humedad (por ejemplo una toalla o un trapo de cocina limpio).
  • Si nuestro ordenador es un sobremesa vertical, un soporte de unos 15cm (una caja, una pila de discos duros, etc.).
  • Una nevera que funcione correctamente a temperaturas bajo cero.
  • Por último, un disco duro muerto con datos absolutamente críticos. Preferiblemente suena a carraca y al agitarlo se oyen piezas sueltas en su interior.

Una vez dispongamos de todos estos elementos, podemos empezar con las labores de rescate.

Antes de nada, es necesario aclarar que, al contrario de lo que reza la sabiduria popular, los discos duros de hoy en día no están cerrados a cal y canto. Suelen tener alguna pequeña apertura de ventilación, con filtros finos para evitar que entre mierda. Por tanto, el primer paso que vamos a dar es:

Introducimos el disco duro en la bolsa vacía, y la cerramos bien.

En nuestro caso, el objetivo es evitar en la medida de lo posible la condensación de agua en el interior y exterior del disco duro, puesto que el segundo paso es:

Metemos la bolsa con el disco duro en el congelador, y lo dejamos reposar hasta que esté tan frío que duela.

Mientras se enfría, intentaremos aclarar por qué acabamos de dejar un disco duro junto a dos piezas de atún congelado.

La idea básica es contraer el material previamente expandido debido al calor. Tanto los servos como los rodamientos y los circuitos en funcionamiento generan calor. Con la edad, el calor dilata demasiado los componentes, reduciendo la conductividad de las soldaduras. Además de los efectos eléctricos, dicha dilatación puede provocar la desalineación de las cabezas de lectura de los discos. Al congelar el disco duro se revierten y demoran estos efectos, permitiendo leer del disco mientras permanece frío.

Disclaimer: el proceso de congelación y posterior uso del disco duro puede dañarlo hasta dejarlo completamente inútil. Si has sido un blando no debería importarte, porque ya tendrás los datos importantes a salvo. Si en cambio eres un macho de verdad, tienes dos opciones: a) Seguir adelante con este tutorial. b) Irte al rincón de los blandos y pagar grandes sumas de dinero por una recuperacion profesional, en vez de seguir peligrosos frikonsejos en blogs desconocidos. En cualquier caso, la culpa de lo que pase será tuya, y solo tuya.

while (disk.temperature > 0) goto Disclaimer;

Bueno, nuestro disco duro debería estar ya en su punto. Vamos a preparar el entorno de recuperación.

Sacamos un cable de datos y la alimentación para el disco duro, ya sea SATA, IDE, eSATA o una caja conversora USB.

Si hace falta, utilizamos el soporte para no dejar el disco duro colgando. A continuación preparamos la refrigeración adicional:

Colocamos el ventilador bilbaíno apuntando al final del cableado, donde irá colocado nuestro disco duro.

Preparamos la bolsa de hielo rodeándola con el trapo, para evitar humedad.

Ahora llega lo interesante:

Sacamos el disco duro, lo enchufamos al ordenador, y ponemos la bolsa de hielo por encima.

La cosa podría quedar tal que asín (click para ampliar, y perdonad la pésima calidad de la foto):

En mi caso, utilicé una caja USB tanto para el disco fumao como para el backup, de forma que no necesitaba apagar el ordenador, teniendo listo un comando mount + rsync en consola para el siguiente paso:

Copiamos los datos críticos a otro soporte de almacenamiento muy rapidico, antes de que se caliente el bicho de nuevo.

Gracias a toda la ventilación que le hemos metido, el disco debería aguantar alrededor de media hora, tal vez más, suficiente para copiar los datos críticos. Así que con un poco de suerte, terminaremos el día con los datos a salvo y un posapapeles de última generación!

Bueno frikomaníacos, esto ha sido todo por hoy. En el siguiente programa aprenderemos cómo jakear el equispé de nuestros amigos con un bate de baseball, un pañuelo y un frasco de cloroformo.

Hasta la próxima semana! 😀