domingo, agosto 23, 2009

Prog en bash - Tres en Raya



#!/usr/bin/env bash
## para hacer mas portables los scripts se utiliza -- #!/usr/bin/env bash -- en lugar de -- #!/bin/bash -- ##

############################################################################################
# ¬¬¬¬¬¬¬¬¬¬ LOS TEMAS TRATADOS EN ESTE PROGRAMA SON: ¬¬¬¬¬¬¬¬¬¬¬¬ #
# ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬ #
# -> Estructuras de control ( while, for, etc..., if, case ) #
# -> Funciones y los comando return, local -- salidas de los programas pj: '$?' #
# -> Trabajo con cadenas http://www.the-evangelist.info/articulos/2008/09/30/bash-cadenas/ #
# -> Secuencias de escape: http://www.euskalnet.net/iosus/linux/Bash-Prompt-HOWTO-5.html #
# utilizadas para dar color a los caracteres ( "\033[0;31m" "\033[0;34m" ) #
# -> Comando test el cual es muy utilizado #
# -> Operaciones aritmeticas -- utilizada para la variable CONTADOR #
############################################################################################
# ¬¬¬¬¬¬¬¬¬¬ RECOMENDACIONES PARA MEJORAR ¬¬¬¬¬¬¬¬¬¬¬ #
# ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬ #
# -> Estudiar el comando tput y como dar color y efectos a los caracteres #
# para reemplazar de este modo las secuencias de escape #
# -> Como declarar Vectores en bash #
# -> Como simplificar las funciones creadas en este programa para hacerlo mas #
# eficiente y corto #
# -> Estudiar el comando trace #
#################################################################################

# triqui echo para dos personas obligatoriamente

##################################################
# ¬¬¬¬¬¬¬¬¬¬¬ VARIABLES ¬¬¬¬¬¬¬¬¬¬¬ #
# ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬ #
# C1 ... C9 = el valor de cada uno de los campos #
C1=" " #
C2=" " ################
C4=" " #
C3=" " #
C5=" " #
C6=" " #
C7=" " #
C8=" " #
C9=" " ##########################################
#
# vectores bash = " http://universo.emergya.info/snippets/arrays-en-bash " #
#
COLOR=" " #########################
CARACTER=" " #guarda el caracter 'X' o 'O' #
JUGADOR=2 #
JUGADA=" " #
CONTADOR=0 #
SALIR="n" #termina el bucle while #
#
######## FIN VARIABLES #############################

##########################################################################################
# ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬ FUNCIONES CREADAS ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬ #
# ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬ #
# funcion_imprime_triqui() ... imprime la cuadricula con los nuevos valores "X" o "O" #
# funcion_verifica_casilla() ... verifica que la casilla no este ocupada #
# funcion_leer_jugada() #
# funcion_triqui_horizontal() ############################
# funcion_triqui_vertical() #
# funcion_triqui_diagonal() #
# #
##### FIN FUNCIONES ##########################################

##### DESARROLLO DEL JUEGO ########################
# #
# imprimir_triqui #
# establecer jugador #
# pedir jugada #
# |-----> verificar triqui horizontal #
# |-----> verificar triqui vertical #
# |-----> verificar triqui diagonal #
# si hay triqui terminar #
# contador_jugadas++ #
# #
###### FIN DESARROLLO DEL JUEGO ###################


function funcion_imprime_triqui()
{
# uso de printf y echo para imprimir en pantalla

printf " 1 2 3 \n"
printf " ____________\n"
printf "1 | $C1 | $C2 | $C3 |\n"
printf " |___|___|____|\n"
echo -e "2 | $C4 | $C5 | $C6 |"
echo -e " |___|___|____|"
echo -e "3 | $C7 | $C8 | $C9 |"
echo -e " |___|___|____|"
}


function funcion_verifica_casilla()
{

# tratar de simplificar esta funcion ya que es muy repetitiva sobre todo por la instruccion 'case'

local aux=" "

secuencias de escape = http://www.euskalnet.net/iosus/linux/Bash-Prompt-HOWTO-5.html
if [ $JUGADOR -eq 1 ]; then
aux="\033[0;31m$1\e[0m" ##color rojo #establese el color de la 'X'
else
if [ $JUGADOR -eq 2 ];then
aux="\033[0;34m$1\e[0m" ##color azul #establese el color de la 'O'
fi
fi


case $2 in
1) if [ C1=" " ]; then C1=$aux
else echo "Casilla Ocupada"
fi
;;
2) if [ C2=" " ]; then C2=$aux
else echo "Casilla Ocupada"
fi
;;
3) if [ C3=" " ]; then C3=$aux
else echo "Casilla Ocupada"
fi
;;
4) if [ C4=" " ]; then C4=$aux
else echo "Casilla Ocupada"
fi
;;
5) if [ C5=" " ]; then C5=$aux
else echo "Casilla Ocupada"
fi
;;
6) if [ C6=" " ]; then C6=$aux
else echo "Casilla Ocupada"
fi
;;
7) if [ C7=" " ]; then C7=$aux
else echo "Casilla Ocupada"
fi
;;
8) if [ C8=" " ]; then C8=$aux
else echo "Casilla Ocupada"
fi
;;
9) if [ C9=" " ]; then C9=$aux
else echo "Casilla Ocupada"
fi
;;
*) echo "Casilla Incorrecta"
;;
esac


} # fin funcion verifica_casilla()



function funcion_triqui_horizontal()
{
# echo "horizontal"

case $1 in
1|2|3) if [ "$C1" != " " ] && [ "$C2" != " " ] && [ "$C3" != " " ]; then
if [ "$C1" = "$C2" ] && [ "$C2" = "$C3" ]; then
echo -e "\033[31;42;5m ***** TRIQUI ***** \e[0m"
return 1
fi
fi
;;
4|5|6) if [ "$C4" != " " ] && [ "$C5" != " " ] && [ "$C6" != " " ]; then
if [ "$C4" = "$C5" ] && [ "$C5" = "$C6" ]; then
echo -e "\033[31;42;5m ***** TRIQUI ***** \e[0m"
return 1
fi
fi
;;
7|8|9) if [ "$C7" != " " ] && [ "$C8" != " " ] && [ "$C9" != " " ]; then
if [ "$C7" = "$C8" ] && [ "$C8" = "$C9" ]; then
echo -e "\033[31;42;5m ***** TRIQUI ***** \e[0m"
return 1
fi
fi
;;
esac

return 0
}


function funcion_triqui_vertical()
{
# echo "vertical"

case $1 in
1|4|7) if [ "$C1" != " " ] && [ "$C4" != " " ] && [ "$C7" != " " ]; then
if [ "$C1" = "$C4" ] && [ "$C4" = "$C7" ]; then
echo -e "\033[31;42;5m ***** TRIQUI ***** \e[0m"
return 2
fi
fi
;;
2|5|8) if [ "$C2" != " " ] && [ "$C5" != " " ] && [ "$C8" != " " ]; then
if [ "$C2" = "$C5" ] && [ "$C5" = "$C8" ]; then
echo -e "\033[31;42;5m ***** TRIQUI ***** \e[0m"
return 2
fi
fi
;;
3|6|9) if [ "$C3" != " " ] && [ "$C6" != " " ] && [ "$C9" != " " ]; then
if [ "$C3" = "$C6" ] && [ "$C6" = "$C9" ]; then
echo -e "\033[31;42;5m ***** TRIQUI ***** \e[0m"
return 2
fi
fi
;;
esac

return 0
}


function funcion_triqui_diagonal()
{
# echo "diagonal"
case $1 in
1|5|9) if [ "$C1" != " " ] && [ "$C5" != " " ] && [ "$C9" != " " ]; then
if [ "$C1" = "$C5" ] && [ "$C5" = "$C9" ]; then
echo -e "\033[31;42;5m ***** TRIQUI ***** \e[0m"
return 3
fi
fi
;;
3|5|7) if [ "$C3" != " " ] && [ "$C5" != " " ] && [ "$C7" != " " ]; then
if [ "$C3" = "$C5" ] && [ "$C5" = "$C7" ]; then
echo -e "\033[31;42;5m ***** TRIQUI ***** \e[0m"
return 3
fi
fi
;;
esac

return 0
}


function funcion_leer_jugada()
{

echo -n "jugada ["X" o "O"] casilla [1,2,...9 ]: "
read JUGADA
funcion_verifica_casilla $JUGADA

# ${JUGADA:2:1} es una forma de extraer una subcadena de una cadena ... para mas info consultar la web http://www.the-evangelist.info/articulos/2008/09/30/bash-cadenas/

# la forma de capturar un valor de retorno es por medio de la variable interna ' $? ' la cual guarda el resultado del ultimo programa ejecutado

funcion_triqui_horizontal ${JUGADA:2:1}
if [ 1 -eq $? ]; then
return 1
fi

funcion_triqui_vertical ${JUGADA:2:1}
if [ 2 -eq $? ]; then
return 2
fi

funcion_triqui_diagonal ${JUGADA:2:1}
if [ 3 -eq $? ]; then return 3 ;fi

#NOTA IMPORTANTE: normalmente la instruccion if...then...fi se escribr asi:
# if ; then
#
# fi
# pero si se quiere escribir la instruccion if...then...fi en una sola linea de debe hacer de la siguiente forma
# if ; then ;fi


return 0
}


##### DESARROLLO DEL JUEGO #####

while [ "$SALIR" = "n" ]; do

funcion_imprime_triqui

if [ $JUGADOR -eq 1 ];then
JUGADOR=2
else
if [ $JUGADOR -eq 2 ];then
JUGADOR=1
fi
fi

echo
echo "Jugador $JUGADOR"

funcion_leer_jugada


# el caracter '?' guarda el resultado del ultimo programa (comando) ejecutado *** en este caso se usa para optener el valor de retorno de algunas funciones
case $? in
1|2|3) SALIR="y"
funcion_imprime_triqui
;;
esac

#sleep 2

CONTADOR=$(($CONTADOR+1))
done
##### FIN DESARROLLO DEL JUEGO #####

martes, mayo 20, 2008

LFS - Guardando Sistema Temporal

Algo importante cuando estas trabajando con LFS es saber como guardar el sistema temporal creado el cual te permitirá iniciar formalmente tu sistema desde ceros, esto pensando en que te evites iniciar una y otra vez desde ceros, ceros :D

" Cuando terminas de crear el sistema temporal, este es totalmente independiente de la distro en la cual lo creaste, y por eso luego puedes hacer chroot. Si hubiera dependencias de librerías con el sistema anfitrión, no podrías continuar dentro del chroot ".
Les dejo entonces dos posibles formas de guardar su sistema temporal
  • Creando un tar de la carpeta donde esta tu sistema temporal, el compañero "Ricardo J. B." lo hace como root de la siguiente forma:
# cd ${LFS}
  # tar cf ../lfs-tools.tar *
  • Algunas personas como el compañero "Carlos Sánchez" tuvieron problemas al guardar el firectorio en un tar.gz, entonces lo que hicieron fue falsearse un disco virtual con el sistema de ficheros ext3.. lo puedes hacer sin necesidad de software especial simplemente con la misma terminal....

    En el mismo sitio donde tienes el $LFS/tools crea un directorio llamado disco-tools, despues genera un archivo vacio (fuera de disco-tools) mediante el siguiente comando....

    > touch disco-tools.ext3 (.ext3 no es obligatorio es solo para recordar)

    Luego dale tamaño en Mbs. al disco virtual

    > dd if=/dev/zero of=disco-tools.ext3 bs=1024 count=1024XXX

    el valor de "count" esta en Kbs... Por ejemplo 102400=100Mbs o 1024000=1Gb, le das el que necesiteis.

    le das formato

    > mkfs.ext3 disco-tools.ext3 (aceptas el mensaje que te de)

    luego lo montas

    > mount -vt ext3 disco-tools.ext3 disco-tools -o loop
    > cp -Rv $LFS/tools disco-tools

    umount -v disco-tools

    lo comprimes en el formato que quieras...

    Esto incluso te puede servir para guardar tu distro una vez terminada y portarla a otras máquinas... Etcétera usa vuestra imaginación....
  • Otra forma puede ser hacer una imagen de la partición que aloja tu LFS, con Part Image (http://www.partimage.org/) u otro software similar. Aqui encontraras algunos manuales y/o tutoriales que te pueden ayudar partimage.pdf y GURA
Bueno espero que les sirva, si saben de alguna otra, favor deja tu comentario con la solucion y/o idea

martes, noviembre 27, 2007

tiras comicas y juegos gratis

Estos link´s los dejo ademas para no olvidarme, despues los arreglo para que tengan una ejor presentacion

Tiras comicas

muy buenas tiras comicas ... si conocen de otras se les agradece el aporte:
linuxhispano , tiraecol , proyectoanonimo , Lika y Neord

20 mejores video juegos
peceren buenos, almenos en la imagen se miran buenos graficos aqui

En estos links encontraras algunos para linux entrega_1 entrega_2

lunes, abril 30, 2007

Flisol Popayán 2007

Alex Martinez :" coordinador general " (es solo para dar cache :D)

No se en que esten metidas las otras comunidades, o que tantos espacios tengan para difundir y promocionar el uso del software libre, pero en Popayan, tenemos seguro, tres .... FLISOL, VLVL, JSL y deseo que que no dejemos perder estos espacios ya que son todos nuestros.

Todo parecia ir bien, hasta que recibimos un correo donde se nos comunicaba que nadie estaria a cargo de la coordinación y ademas las tareas que se tenian no se estaban realizando como se esparaba .....

Ese día Vultur tuvo una reunión para tratar de arreglar las cosas, Ulises tenua un plan B y decidimos seguirlo, de esa manera todo quedo cuadrado, las tareas repartidad y los grupos conformados ...

Debo decir que fue una semana llena de fé (para mí), desde antes sabia que el evento se realizaria ya que no era el unico entusiasmado con la idea del flisol, es el caso de Cristian Pineda estudiante de ing electronica quien contacto a su amiga Carolina Findlay estudiante de diseño grafico para que le colaborara en la creacion del afiche para la evento,,, esa fue una iniciativa que gusto mucho.

!!!Toco movernos¡¡¡, la promocion del evento no es complicada, pero si se necesita de personas que esten dispuestas a visitar los colegios, universidades, emisoras y televisión, no se que tan complicado sea en las otras ciudades, pero en Popayán no es muy complicado; las emisora (unicauca, policia, radio super) no cobran ya que el evento es para la comunidad, solo se necesita alguien a quien hacerle la entrevista, la visita a los colegios y universidades tampoco es complicada, es solo ir, hablar y pegar unos afiches....

Gracias a todos por estar ese día, quede muy contento con los resultados .... esta vez entendí lo que es trabajo en equipo - GLUC/VULTUR/POLUX - grupo de usuarios de software libre del Cauca

jueves, abril 12, 2007

"Linux From Scratch" o "Linux Desde Ceros"

Hola a todos ......
Alguna vez se me metio a la cabeza adentrarme un poco mas en el mundo linux, hasta el punto de interesarme en como es que funciona el sistema operativo y depronto en crear mi propia distro... ya que habia escuchado mucho acerca de que tienes a disposicion el codigo fuente y puedes modificar, etc...

Alguna vez asistí al SITI (Seminario Internacional de Tecnologías Internet), y aparecio alguien con una distribucion linux creada por estudiantes de la Universidad Cooperativa llamda Caucanix, creo que era xtingray el director de tesis y me llamo la atencion cuando dijo !! miren lo que se ha hecho en la UC ¡¡, eso me impacto y me anime mucho mas, asi que decidi leerme la tesis, la busque durante dos o tres semanas y nada que aparecia, hasta que al fin me la prestaron, y !oh¡, sorpresa, no era lo que estaba buscando, mucha teoria pero poca practica... supongo que eso son las tesis ....

Pregunte en el GLUC si habian pensado en algo similar y me respondieron que la idea era trabajar con ellos, pero que se habian perdido los muchachos ....
Estuve en la Universidad Cooperativa, tratando de que me dieran una copia de la distro pero hmmm, nada, no la tenian, dure como dije, dos o tres semanas buscandola y nada ...


Asi que buscando, buscando, me tope con el proyecto LFS y al leerlo me senti muy identificado con esto, resulto ser lo que estaba buscando .... descargue los libros y los guarde por un tiempo en la compu ya que no podia leer, la vista me molestaba, hasta que imprimi el primer libro...

Ahora ya he comenzado y debo decir que estoy satisfecho con los resultados, solo he termminado la primer parte del libro, pero me ha dado bastante para leer e investigar, ya es la segunda vez que comienzo la creacion de mi LFS, la primera vez hice algo mal y me toco reiniciar todo, pero no fue tan traumatico, ahora estoy en la mirando como implemento un sistema para el manejo de paquetes, espero poder implementar el de debian....

bueno , ya les seguire comentando de mis avances en esto, hasta la proxima

miércoles, noviembre 23, 2005

Mi primera publicaciòn

Esta es mi primera publicacion, en lo que es mi primer blog, y estas son algunas fotos de mi primera presentacion en la semana linux realizada en la universidad distrital - Bogotá Colombia - en la cual presente el proyecto ESOL ( Evaluacion de sistemas Operativos Libres Para la Educación ) el cual todavia esta en curso. Esperamos que para diciembre ya este adelantado una gran parte de lo que falta Con este proyecto trataremos de ayudar a aquellas personas que se preguntan ¿ por que existen tantas distribuciones ? y ¿ Que distribución es la que mas me conviene ? . Con el proyecto trataremos de crear un modelo de evaluación de un " sistema operativo libre " mas especificamente GNU/Linux desde la perspectiva de la usabilidad, osea, que se pueda usar sin el temor de que para esto se requieren muchos conocimientos acerca de programación o computación.
Para esto creamos unas fichas las cuales seran guia al momento de tomar una distro y someterla a evaluación.


Popayan Cauca