12.18.09

The Chuck Norris Facts Bash Script

Pon un Chuck Norris en tu vida! O mejor aun, pon miles de Chuck Facts en tu consola!

Bored STenyaK Productions presents: chuckfacts.sh!

Chuck Norris for god
Coming this winter to a console in front of you…

#!/bin/bash

# check for parameters
if [ -z $1 ]
then
    echo "Please specify the destination chuck norris facts file."
    echo "E.g.: $0 ~/.chuckfacts.txt"
    exit
fi
ffile=$1

old=0
if [ -s $ffile ]
then
    old=$(wc -l $ffile |sed "s/\s.*//g")
fi

echo -n "Getting facts pack"
# download the 170 first chuck norris pages of 4q.cc site to disk
for i in $(seq 1 170)
do
    echo -n " $i"
    # only store facts
    wget -qO - \
       "http://4q.cc/index.php?pid=listfacts&person=chuck&page=$i" \
        | grep "index.php?pid=fact&person=chuck" >> $ffile
done
echo ""

echo -n "Post-processing facts..."
# remove unnecessary html code
perl -pi -e "s/.*id=.{32,32}\">//g;s/<\/a>.*//g" $ffile

# replace most common html entities
perl -pi -e "s/&quot;/\"/g" $ffile
perl -pi -e "s/&amp;/&/g" $ffile

# remove empty lines
perl -ni -e "print unless /pid=/" $ffile

# remove redundant lines
cat $ffile |sort |uniq > /tmp/chuckfacts.tmp
mv /tmp/chuckfacts.tmp $ffile
new=$(wc -l $ffile |sed "s/\s.*//g")
echo " OK"
echo "Generated $(($new-$old)) new facts ($new in total) facts."

# show how to add a fortune-like command to bashrc
echo ""
echo "You can add this to your ~/.bashrc file:"
echo 'test -s '$ffile' && cowsay -f $(ls /usr/share/cowsay/cows
      | shuf |head -1) "$(cat '$ffile' |shuf |head -1)"'

Mira que no me aburro a veces ni nada eh…

12.2.09

En defensa de los derechos de los ciudadanos en Internet

Ante la inclusión en el Anteproyecto de Ley de Economía Sostenible de modificaciones legislativas que afectan al libre ejercicio de las libertades de expresión, información y el derecho de acceso a la cultura a través de Internet, los periodistas, bloggers, usuarios, profesionales y creadores de internet manifestamos nuestra firme oposición al proyecto, y declaramos que…

1.- Los derechos de autor no pueden situarse por encima de los derechos fundamentales de los ciudadanos, como el derecho a la privacidad, a la seguridad, a la presunción de inocencia, a la tutela judicial efectiva y a la libertad de expresión.

2.- La suspensión de derechos fundamentales es y debe seguir siendo competencia exclusiva del poder judicial. Ni un cierre sin sentencia. Este anteproyecto, en contra de lo establecido en el artículo 20.5 de la Constitución, pone en manos de un órgano no judicial -un organismo dependiente del ministerio de Cultura-, la potestad de impedir a los ciudadanos españoles el acceso a cualquier página web.

3.- La nueva legislación creará inseguridad jurídica en todo el sector tecnológico español, perjudicando uno de los pocos campos de desarrollo y futuro de nuestra economía, entorpeciendo la creación de empresas, introduciendo trabas a la libre competencia y ralentizando su proyección internacional.

4.- La nueva legislación propuesta amenaza a los nuevos creadores y entorpece la creación cultural. Con Internet y los sucesivos avances tecnológicos se ha democratizado extraordinariamente la creación y emisión de contenidos de todo tipo, que ya no provienen prevalentemente de las industrias culturales tradicionales, sino de multitud de fuentes diferentes.

5.- Los autores, como todos los trabajadores, tienen derecho a vivir de su trabajo con nuevas ideas creativas, modelos de negocio y actividades asociadas a sus creaciones. Intentar sostener con cambios legislativos a una industria obsoleta que no sabe adaptarse a este nuevo entorno no es ni justo ni realista. Si su modelo de negocio se basaba en el control de las copias de las obras y en Internet no es posible sin vulnerar derechos fundamentales, deberían buscar otro modelo.

6.- Consideramos que las industrias culturales necesitan para sobrevivir alternativas modernas, eficaces, creíbles y asequibles y que se adecuen a los nuevos usos sociales, en lugar de limitaciones tan desproporcionadas como ineficaces para el fin que dicen perseguir.

7.- Internet debe funcionar de forma libre y sin interferencias políticas auspiciadas por sectores que pretenden perpetuar obsoletos modelos de negocio e imposibilitar que el saber humano siga siendo libre.

8.- Exigimos que el Gobierno garantice por ley la neutralidad de la Red en España, ante cualquier presión que pueda producirse, como marco para el desarrollo de una economía sostenible y realista de cara al futuro.

9.- Proponemos una verdadera reforma del derecho de propiedad intelectual orientada a su fin: devolver a la sociedad el conocimiento, promover el dominio público y limitar los abusos de las entidades gestoras.

10.- En democracia las leyes y sus modificaciones deben aprobarse tras el oportuno debate público y habiendo consultado previamente a todas las partes implicadas. No es de recibo que se realicen cambios legislativos que afectan a derechos fundamentales en una ley no orgánica y que versa sobre otra materia.

11.12.09

Google’s “go” simple & stupid benchmark (2nd round: memspeed)

Continued from Round 1: I/O

Thanks to Juanval for the suggestion.

$ cat hello.cpp && g++ hello.cpp &&
> time for i in $(seq 10); do ./a.out; done
int main (int argc, char** argv)
{
    const int size = 250;
    int a[size],b[size],c[size];
    for(int i=0;i<size;++i)
        for(int j=0;j<size;++j)
            for(int k=0;k<size;++k)
                c[k]+=a[i]*b[j];
}
real	0m1.041s
user	0m0.944s
sys	0m0.020s

$ cat hello.py &&
> time for i in $(seq 10); do python hello.py; done
size = 250
a,b,c = [0]*size, [0]*size, [0]*size
for i in a:
    for j in b:
        for k in range(0,size):
            c[k] += i*j
real	1m7.210s
user	1m4.924s
sys	0m0.084s

$ cat hello.go && 8g hello.go && 8l hello.8 &&
> time for i in $(seq 10); do ./8.out; done
package main
func main()
{
    var a,b,c [250]int;
    for i := range a
    {
        for j := range b
        {
            for k := range c
            {
                c[k] += a[i] * b[j];
            }
        }
    }
}
real	0m3.000s
user	0m2.812s
sys	0m0.020s

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?


05.16.09

Little Big Planet feat. Daft Punk

Hacía mucho que no posteaba nada por aquí, así que ahí va un post facilón de mítico video empotrao xD

04.3.09

Ladies and gentlemen, may I introduce you…

Just a small vid (edited by Silverghost) of the first day of my new baby bimmer, a 118D 5d. More info, pictures and a thorough review coming soon!

Un montaje (editao por Javi) del primer día del peque, mi nuevo 118D 5p. Otro dia con más tiempo le hago una review en plan, con foticos y esas chorradas 🙂 .

En efecto, éste es el digno sucesor elegido para el viejo Renault 21.

So yeah, that’s the worthy replacement for the now sadly defunct Renault 21.

03.27.09

Y ocurrió lo inexorable

Algún día tenía que pasar, y ese día ha sido hoy. He perdido uno de mis compañeros de infancia.

Han sido dos décadas de arañar los curvados arcenes entre recta y recta. De seis mil engañosas revoluciones bajo una carrocería ya vetusta. De puertos, rotondas, acantilados, baches, sinuosas secundarias, callejuelas, autopistas interminables, aparcamientos imposibles. De sufrir a corazón abierto nuestros experimentos audiotuneros. De aguantar como un campeón agonizantes repiqueteos a doble cilindro por llevar media tonelada de personas y equipaje a traves de cientos de kilómetros bajo los insidiosos soles veraniegos.

renault 21 txe injection nevada

Barca, brunibús, funeraria, ranchera, papamovil, coche fantástico, brunimovil, el coche de la fiestaCada uno te recordará con un nombre, pero ninguno te olvidará (y al que lo haga, que le zurzan el tercer ojo xD).

Venga va, tampoco nos emocionemos mucho, que el reemplazo está coming muy soon akí mismo! Ya habrá hay noticias por estos lares muahahaha! 😈