Archive for April, 2009

Publicidad retro de Perdidos(Lost)

Posted in Curiosidades, Retro, retroinformatica on April 14th, 2009 by mrcomputer – Be the first to comment

Via: Z80 RetroHard

Fuente: Vintage DHARMA ads

¿Qué aspecto tiene vuestra terminal?

Posted in Scripts, linux on April 13th, 2009 by mrcomputer – 8 Comments

Tras leer un post del amigo SarteJP se me ocurrió que podríamos todos enseñar nuestra terminal, que diseño tenemos, que prompt, etc. Así que os invito a que mandéis un pantallazo de vuestro terminal, junto a la distro que usáis y si tenéis web, vuestra web a miguelperis[arroba]mrcomputer[punto]es y yo lo colocaré en este post.

Comienzo yo con el mio:

mrcomputer

Distro: Ubuntu 8.04

Marcos Tzuc Cen

Distro: Debian Lenny 5.0

Jainux

Distro: Monkey Linux 0.1

OS: Iphone OS

SartreJP

Distro: Debian Lenny 5.0

Darío Diaz

Distro: Ubuntu 8.10

Ubunlog

Distro: Ubuntu 9.04 beta

Juani Paccapelo

Distro: Ubuntu 8.10

Apollito

Distro: Ubuntu 8.10

Gelical

Distro: Ubuntu 8.04

Christian

OS: MacOS X

Inclusa

Distro: Ubuntu 9.04

Posion bit

posion

Distro: Debian lenny

Animaros, que así además tenéis un enlace gratis desde el blog a vuestra web :P

Script: Crear listas de reproducción m3u

Posted in Scripts, linux on April 12th, 2009 by mrcomputer – 6 Comments

Los archivos M3U son un tipo de archivos que sirven para almacenar listas de reproducción de archivos multimedia, y principalmente usado para listas de reproducción de audio. Estos archivos son reconocidos por la mayoría de reproductores en todos los sistemas operativos, como pueden se XMMS, VLC, Winamp, etc.

Los archivos M3U son archivos de texto plano con extensión .m3u y con una sintaxis muy sencilla.

En la primera línea de un archivo M3U siempre tiene que estar la sentencia #EXTM3U, que es lo que indica que se trata de un fichero M3U. Posteriormente se introducen en cada línea se introduce la ruta(relativa o absoluta) de los archivos multimedia que conformarán la lista de reproducción. Existen otras sentencias, pero son optativas y sirven para indicar el tiempo del archivo y el titulo en texto claro.

Como podéis ver es muy sencillo crear archivos de listas de reproducción M3U, también es muy sencillo ocultar datos en estos archivos, pero de esto hablaré en un próximo post.

Pues bien, a continuación teneis un sencillo script de bash que crea una lista de reproducción con los archivos mp3 y ogg que se encuentren en el directorio actual y recursivamente en todos los subsiguientes. También si descomentas una linea podrás agregar los archivos wav, pero la he comentado porque no es tan común tener música en .wav.

#!/bin/bash
##################################################################################
#       Script para crear archivos m3u con los arhivos a partir  del
#                               directorio actual
#               Creado por Miguel Peris(mrcomputer) version 1.0 11/04/2009
#       Uso: ./m3.sh nombre_de_la_lista.m3u
#             Sin parametros genera un nombre de lista por defecto
#       Licenciado bajo los terminos de la licencia GPL v3
##################################################################################
 
if [ -z $1 ]; then
archivo="lst-$(basename $PWD).m3u"
else
archivo=$1
fi
echo $archivo
 
# cabecera del archivo m3u y si el archivo existe lo borra
echo "#EXTM3U">$archivo
 
# genera listas para mp3 y ogg
ls -1R |find . -type f -print| grep -i .mp3 >>$archivo
ls -1R |find . -type f -print|  grep -i .ogg >>$archivo
 
# Descomentar la siguiente linea para tambien introducir los .wav a la lista
#ls -1R |find . -type f -print|  grep -i .wav >>$archivo
 
#EOF

Ahora solo hay que guardarlo como m3.sh y darle permisos de ejecución con chmod +x m3.sh. Si lo ejecutas sin parámetros el nombre de la lista de reproducción será lst-<directorio_actual>.m3u, por ejemplo si el directorio que nos encontramos se llama musica, el archivo m3u que genera el script por defecto será lst-musica.m3u.

En cambio si por parámetros le pasamos un nombre, generará la lista con ese nombre. Por ejemplo si ejecutamos nuestro script así, ./m3u.sh mi_lista.m3u generará el archivo mi_lista.m3u. También si queremos podemos pasarle el nombre con la ruta(absoluta o relativa) de la lista.

Espero que a alguien le sea de utilidad este pequeño script.

Twitter, mrcomputerblog

Posted in Noticias on April 11th, 2009 by mrcomputer – 1 Comment

He decidido crear una cuenta de twitter para el blog, en ella se publicará un twitt cada vez que haya un nuevo post en el blog, además de que dentro de poco os mantendrá informados de como va la migración del blog al nuevo host - sí, migro a un host mejor.

Así que os invito a que lo sigáis en twitter y también puedes seguirme a mí también si quieres.

http://twitter.com/mrcomputerblog

Simpático curso de Bash scripting

Posted in Scripts, programación on April 10th, 2009 by mrcomputer – 4 Comments

He encontrado este simpático curso de Bash scripting, en el que lo explican con conversaciones de amigos en un bar.

Este curso originalmente fue escrito por un profesor de la universidad de Brasil, y aqui podéis leerlo en español: http://wiki.softwarelivre.org/TWikiBar/WebHome#Libro_de_Shell_en_Espa_ol

Nhopkg-fe

Posted in Noticias, linux, programación on April 5th, 2009 by mrcomputer – 8 Comments

Últimamente y ahora que tengo una semana de vacaciones con mas intensidad, estoy desarrollando (o al menos intentándolo) una GUI, interfaz gráfica, front end, o como sea ;) de nhopkg, el gestor de paquetes universal creado por jotahacker.

Lo estoy desarrollando en Gambas, un lenguaje similar al Visual Basic, pero más potente y lo que es más importante, libre. La intención es facilitar al usuario la tarea de instalar, desinstalar y manejar paquetes, y aprovechar al 99% las posibilidades que ofrecerá la nueva versión de nhopkg, la versión 0.5, que entre otras muchas mejoras incluirá repositorios.

Os dejo un pantallazo para que veáis como, más o menos, como quedará:

Aún le queda bastante que andar, pero ya implementa todas las funciones básicas, y alguna un poco mas avanzada. Espero que en unas semanas pueda ser liberado junto a la nueva versión de nhopkg

Script: tic-tac-toe (tres en raya)

Posted in Scripts, linux on April 5th, 2009 by mrcomputer – 2 Comments

Este clásico juego de mesa, que ha jugado un papel muy importante en algunas peliculas, también se puede hacer con bash.

Solo tenéis que guardar este código en un archivo llamado ttt.sh o bajarlo desde aquí y darle privilegios de ejecución con chmod +x ttt.sh. Ya podrás ejecutarlo con ./ttt.sh y jugar a este juego.

#!/bin/bash
# Sat Jul 12 16:52:30 EDT 2003
# NAME: ttt
# Copyright 2003, Chris F.A. Johnson
# Released under the terms of the GNU General Public License
 
ESC=$'\e'
 
tictactoe() {
[ $verbose -ge 1 ] &amp;&amp; echo tictactoe $* &gt;&amp;2
    board=`printf "%9.9s" "        "`
    mvnum=1
    remainder=" 1 2 3 4 5 6 7 8 9 "
    show "$board"
    while :
    do
      status
      eval \$player$P
      [ $? -ne 0 ] &amp;&amp; return
      put $_MOVE "$board"
      board=$_PUT
#      show "$board"
      mkbold "$_MOVE"
      printat 0 0 $mvnum
      printat $prompt
      sleep $pause &amp;
      mlist="$mlist $_MOVE"
      remainder=${remainder/ $_MOVE / }
 
      checkboard "$board" &amp;&amp; {
	  mkbold $win
	  printat $prompt "$cle"
	  eval winner \$player$P
	  return
      }
 
      [ $mvnum -eq 9 ] &amp;&amp; {
	  B=$U mkbold "$_MOVE"
	  winner "Neither player"
	  return
      }
      wait
      B=$U mkbold "$_MOVE"
      if [ $P = O ]
      then
	  P=X
	  OP=O
      else
	  P=O
          OP=X
      fi
      mvnum=$(( $mvnum + 1 ))
    done
}
 
winner() {
[ $verbose -ge 1 ] &amp;&amp; echo winner $* &gt;&amp;2
     printat $prompt "$cle $* wins\n\n"
}
 
status() {
[ $verbose -ge 1 ] &amp;&amp; echo status $* &gt;&amp;2
    if [ $verbose -ge 1 ]
    then
	printat 4 0
	printf "${cle}Move: %s Player: %s Board: \"%s\"  Last move: %s  Move list: %s" \
	    "$mvnum" "$P" "${board// /-}" "$_MOVE" "$mlist"
    else
	false
    fi
}
 
show() {
[ $verbose -ge 1 ] &amp;&amp; echo show $* &gt;&amp;2
    printat 0 0 $mvnum
    printat 0 $top  ##$(( ($LINES - 5) / 2 ))
    printf "  %${margin}.${margin}s | %1s | %1s\n" "${1:0:1}" "${1:1:1}" "${1:2:1}"
    printf "%${margin}.${margin}s---+---+---\n" " "
    printf "  %${margin}.${margin}s | %1s | %1s\n" "${1:3:1}" "${1:4:1}" "${1:5:1}"
    printf "%${margin}.${margin}s---+---+---\n" " "
    printf "  %${margin}.${margin}s | %1s | %1s\n" "${1:6:1}" "${1:7:1}" "${1:8:1}"
}
 
put() {
[ $verbose -ge 1 ] &amp;&amp; echo put $1 \""$2"\" &gt;&amp;2
   local n=$(( $1 - 1 ))
   _PUT=${2:-$board}
   [ "${_PUT:$n:1}" = " " ] &amp;&amp;
            _PUT=${_PUT:0:$n}$P${_PUT:$1}
}
 
checkboard() {
[ $verbose -ge 1 ] &amp;&amp; echo checkboard \"$*\" &gt;&amp;2
    case $1 in
	$P??$P??$P??) win="1 4 7" ;;
	?$P??$P??$P?) win="2 5 8" ;;
	??$P??$P??$P) win="3 6 9" ;;
	??$P?$P?$P??) win="3 5 7" ;;
        $P???$P???$P) win="1 5 9" ;;
	$P$P$P??????) win="1 2 3" ;;
	???$P$P$P???) win="4 5 6" ;;
	??????$P$P$P) win="7 8 9" ;;
        *) false ;;
    esac
}
 
mkbold() {
[ $verbose -ge 1 ] &amp;&amp; echo mkbold $* &gt;&amp;2
  for sq in $*
  do
    row=$(( ($sq - 1) / 3 ))
    col=$(( ($sq - 1) % 3 + 1 ))
    printat $(( ($col * 4) + $margin - 2 )) $(( ($row * 2) + $top ))
    printf "${B}$P${U}"
  done
}
 
human() {
[ $verbose -ge 1 ] &amp;&amp; echo human $* &gt;&amp;2
   while :
   do
       key "Select ($remainder)"
#       case $_MOVE in
#	  "$ESC") read -sn1; read -sn1 kp; continue ;;
#       esac
       _MOVE=$_KEY
       case $_MOVE in
	   1|2|3|4|5|6|7|8|9) [ "${board:_MOVE-1:1}" = " " ] &amp;&amp; break ;;
	   q|Q|x|X) echo; return 5 ;;
	   p) printat $prompt
	      KEYECHO= KEYMAX=$(( $COLUMNS - 10 )) key "Enter delay in seconds"
	      pause=$_KEY
	      ;;
	   "") set -- $remainder
	       _MOVE=$1
	       [ $verbose -ge 1 ] &amp;&amp; echo "|$_MOVE|" &gt;&amp;2
	       break ;;
	   *) printat $prompt
	      printf "\r%s%s\r" "  "$cle" $_MOVE: Invalid move"
	      sleep 1
	      printf "%s\r" "$cle" ;;
       esac
   done
}
 
randy() {
[ $verbose -ge 1 ] &amp;&amp; echo randy $* &gt;&amp;2
    randstr $remainder
    _MOVE=$_RANDSTR
}
 
key() {
[ $verbose -ge 1 ] &amp;&amp; echo key $* &gt;&amp;2
    printat $prompt "$cle$CVIS$beep"
    read -${KEYECHO}n$KEYMAX -p "${1:-PAK}: " _KEY 2&gt;&amp;1
    printf "$CINV"
}
 
getkey() {
    local OKchars=${1:-${remainder// /}}
    local kp2 kp3
    stty -echo
    while :
      do
      prompt="==&gt;"
      prompt
      IFS= read -r -sn1 -p " " kp 2&gt;&amp;1 || exit 2 #cleanup
      case $OKchars in
          *"$kp"*)
              case $kp in
                  $ESC)
                      read -st1 -n1 kp2
                      case $kp2 in
                          \[) read -st1 -n1 kp3
                              case $kp3 in
                                  A) kp=$UP; break ;;
                                  B) kp=$DN; break ;;
                                  C) kp=$RT; break ;;
                                  D) kp=$LF; break ;;
                              esac
                              ;;
                       esac
                       ;;
                  *) break ;;
              esac
              ;;
       esac
    done
    _KEY=$kp
}
 
randstr() {
[ $verbose -ge 1 ] &amp;&amp; echo randstr $* &gt;&amp;2
#    [ -n "$1" ] || return 1
    n=$(( ($RANDOM % $#) + 1 ))
    eval _RANDSTR=\${$n}
}
 
isblock() {
[ $verbose -ge 1 ] &amp;&amp; echo isblock $* &gt;&amp;2
    win=
    block=
    for _MOVE in $remainder
    do
        P=$OP put $_MOVE
	P=$OP checkboard "$_PUT" &amp;&amp; return
    done
    _MOVE=
}
 
block() {
[ $verbose -ge 1 ] &amp;&amp; echo block $* &gt;&amp;2
    block=
    for _MOVE in $remainder
    do
        put $_MOVE
	checkboard "$_PUT" &amp;&amp; return
        P=$OP put $_MOVE
	P=$OP checkboard "$_PUT" &amp;&amp; block=$_MOVE
    done
    [ "$block" ] &amp;&amp; { _MOVE=$block; return; }
    randy
}
 
computer() {
[ $verbose -ge 1 ] &amp;&amp; echo computer $* &gt;&amp;2
   local r c
   case $mvnum in
       1) randstr 1 3 7 9
	  _MOVE=$_RANDSTR ;;
       2)
	   if [ "${board:4:1}" = " " ]
	   then
	       _MOVE=5
	   else
	       randstr 1 3 7 9
	       _MOVE=$_RANDSTR
	   fi
	   ;;
       3)  r=${mlist// /}
	   c='1 3 7 9'
	   randstr ${c//[$r]/}
#	   randstr ${remainder//[$r]/}
	   _MOVE=$_RANDSTR
	   ;;
       4)
	   isblock
	   [ "$_MOVE" ] &amp;&amp; return
	    r=${mlist// /}
	    c='2 4 6 8'
	    randstr ${remainder//[$r]/}
	    _MOVE=$_RANDSTR
	    ;;
       *) block ;;
   esac
}
 
printat() { #== print arguments 3-... at Y=$2 X=$1
[ $verbose -ge 1 ] &amp;&amp; echo printat $* &gt;&amp;2
    [ $# -lt 2 ] &amp;&amp; return 1
    local y=$2
    local x=$1
    shift 2
    msg="$*"
    printf "\e[%d;%dH%b" $y $x "$msg"
}
 
version()
{
    echo "    $progname, version $version
    Copyright $copyright, $author $email
    This is free software, released under the terms of the GNU General
    Public License.  There is NO warranty; not even for MERCHANTABILITY or
    FITNESS FOR A PARTICULAR PURPOSE.
"
}
 
usage()
{
echo "
    ${B}NAME${U}:  $progname - Tic-Tac-Toe
 
    ${B}USAGE${U}: $progname [OPTIONS]
 
    ${B}OPTIONS${U}:
 
        -x player1         - specify first player
        -o player2         - specify second player
        -c player1,player2 - specify both players
        -p seconds         - time to pause between moves
 
        -h, --help       - help: print this message
        -H, --help_long  - help: print more detailed message (if available)
        -v, --verbose    - sends messsages to \$HOME/tttlog
        -V, --version    - print version information
 
    Copyright 2003, Chris F.A. Johnson
"
}
 
verbose=0
longusage=0
version="1.0"
copyright=2003
author="Chris F.A. Johnson"
progname=${0##*/}
P=X
OP=O
 
playerX=human
playerO=computer
co=
li=
 
if tput ce &gt;/dev/null 2&gt;&amp;1
then ## e.g. FreeBSD
    co=co
    li=li
elif tput el 2&gt;/dev/null
then ## e.g. Linux
    co=cols
    li=lines
fi
 
UNBOLD=$'\E[0m'
standout=$'\E[0;1;7m'
cle=$'\E[K'
clb=$'\E[1K'
ULINE=$'\E[0;4m'
REVERSE=$'\E[0;7m'
BLINK=$'\E[0;5m'
BOLD=$'\E[0;1m'
CINV=$'\E[0;8m'
 
R=$REVERSE
U=$UNBOLD
B=$BOLD
BR=$B$R
Cl=$'\f'
if [ "$co" ]
then
    tput reset
    COLUMNS=${COLUMNS:=`tput $co`}
else
    COLUMNS=${COLUMNS:-80}
fi
top=6
margin=11
prompt="3 $(( $top + 9 ))"
beep=  #$'\a'
pause=1
KEYMAX=1
KEYECHO=s
 
while getopts vVhH-:xoX:O:c:p: var
do
 case "$var" in
 
     x) playerX=human
	playerO-computer
	;;
     o) playerO=human
	playerX=computer
	;;
     X) playerX=$OPTARG ;;
     O) playerO=$OPTARG ;;
     c|C) playerO=${OPTARG#*,}
	  playerX=${OPTARG%,*}
	  ;;
     p) pause=$OPTARG ;;
 
    -) case $OPTARG in
         help) usage; exit ;;
         verbose) verbose=$(( $verbose + 1 )) ;;
         version) version; exit ;;
       esac
       ;;
    h) usage; exit ;;
    H) longusage=1; usage; exit ;;
    v) verbose=$(( $verbose + 1 )) ;;
    V) version; exit ;;
    *);;
 esac
done
shift $(( $OPTIND - 1 ))
 
if [ "$co" ]
then
    COLUMNS=`tput $co`
else
    COLUMNS=${COLUMNS:-80}
fi
margin=11  ##$(( ($COLUMNS - 11) / 2 ))
clear
 
if [ $verbose -ge 1 ]
then
    exec 2&gt;$HOME/tttlog
    set -x
fi
 
tictactoe
printat $prompt "\n$CVIS\n"

Fuente: http://cfaj.freeshell.org/shell/scripts/ttt-sh.html

Gráfico: Años de longevidad de las distros Linux

Posted in Sin categoria, linux on April 3rd, 2009 by mrcomputer – 1 Comment

Hace unos días  se cumplió el quinto aniversario de Ubuntu. Y zootropo de Mundo Geek ha creado una gráfica comparativa del tiempo que llevan algunas distribuciones en el “mercado”.

Como podemos observar la mas longeva es Debian (aunque Slackware es unos meses mayor) y tan solo es una adolescente aún, con solo 16 años de vida.

Via: Mundo Geek