martes, 22 de noviembre de 2011

Mis intentos fallidos por instalar Fedora Verne y Debian testing

En estos últimos días decidí salir de terreno seguro y volver a experimentar con distintas distribuciones. Venía utilizando sin ningún problema Ubuntu 11.10, más que conforme con el rediseñado Centro de software y Unity -que por cierto, aunque aún le falte ya está bastante usable-.

Decidí probar con Fedora Verne, el cual no me convencía tanto debido a un problema grave que tuve con su hermano mayor Lovelock. Instalé el sistema sin sobresaltos, y cuando reinicio la PC para comenzar a probarlo y configurarlo...pimba. "Algo salió mal" anunciaba el horrible cartel de GNOME 3.2 que ya me había hecho la vida imposible en Lovelock. Sin tener suerte intenté que detectara al menos el driver Nouveau de mi tarjeta NVIDIA, y decidí instalar Debian.

Lo peor de cuando instalé Fedora 16 es que al hacerlo con la versión en DVD, tardó varias horas en completarse la instalación, para que luego no anduviese. Me hacía sentir un fracasado...

En fin, instalé Debian testing (tenía el DVD 1 de hace algunos meses atrás, así que seguro tardaría en terminar las actualizaciones) esperando poco más de una hora a que finalice. Cuando lo voy a encender me encuentro conque los maestros de Debian no tuvieron una mejor idea que colocar GNOME 3 en su distribución de pruebas. No me gustó para nada, yo esperaba que al ser Debian ellos siguieran con GNOME 2.32, pero no fue así. Traté de hacer andar el driver privativo de NVIDIA -esta vez, al menos anduvo sin aceleración 3D-, pero cuando reinicio la PC y veo que Debian se congela al inicio, comencé a lanzarle sillas a mi pobre hermano en un intento de descargarme con algo/alguien.

Un poco más tranquilo, me acordé del éxito que tuve con openSUSE 11.4 y me interesé por la reciente 12.1. Descargué la imagen ISO en mi portátil (porque para colmo Debian me jodió el arranque GRUB de mi PC de escritorio impidiéndome usar las Siete Ventanas), la quemé en un DVD grabable y cuando me dispongo a verificar si la integridad del DVD de openSUSE era la óptima, el instalador me dice que el disco presentaba fallas. Comencé a lanzar joysticks contra la pared (las sillas ya estaban rotas) gritando "NOOOOOOO, ISABELL!!!!!!!!" al mejor estilo Tano Pasman.

Siendo consciente de que ya no tenía nada que perder -mi partición Windows 7 seguía sanita y mientras no la tocara no iba a pasar nada malo-, probé a instalar openSUSE aunque el disco tenga fallas, y la verdad es que se instaló perfectamente. Es más, el disco sólo falló al final de la instalación, configurando GRUB. Pero hacerlo manualmente es muy fácil si al menos Linux funciona.

Después de hacer todas las configuraciones y de instalar lo que yo llamo "paquetes must-have", reinicié y Windows funcionaba sin ningún problema :D

¿Alguna vez les sucedió algo así? ¿Pudieron reparar los joysticks que lanzaron? Porque ése es mi próximo problema a resolver jajajaja.

viernes, 11 de noviembre de 2011

Cómo programar un semáforo con Gambas 2.22 en Ubuntu

Hoy enseñaré a programar un semáforo con Gambas 2.22 de una manera fácil y relativamente rápida.

Lo primero y primordial es tener instalado el Gambas (pequeño detalle, jeje).

Luego podremos empezar:

1) Ante todo, abrimos Gambas y hacemos clic en Nuevo proyecto.

2) En la siguiente página le damos clic en Siguiente sin modificar nada, y seleccionamos una carpeta en donde querramos guardar todos los datos del proyecto. Yo recomiendo hacer una ruta más o menos así: /home/USUARIO/Proyectos/Gambas2/Semaforo para facilitar el acceso y la comprensión en las carpetas.

3) Colocamos el nombre del proyecto y el título que deseemos. Por ejemplo:
Nombre: SemaforoDePedrito (no se pueden poner acentos ni espacios acá)
Título: Semáforo

4) Una vez en el proyecto, hacemos doble clic en FMain y vamos a la pestaña Ver y activamos la Caja de herramientas.

5) Al activar las herramientas, veremos que se despliega una ventana con distintas pestañas (Form, Dialog, Container, Special). Nos vamos a la pestaña Container y usamos la herramienta DrawingArea para armar tres cuadrados, que son los que vamos a usar como luces del semáforo. Desde Propiedades podemos editar los valores Height y Width para ajustar a nuestro gusto el tamaño de los cuadrados, y el valor Background para ajustar los colores de los cuadrados.

6) Ordenamos los tres cuadrados de tal forma de que nos quede arriba la primera figura que hicimos, en el medio la segunda y abajo la tercera:


7) Opcionalmente podemos usar la herramienta Label de la pestaña Form para hacer que el semáforo se parezca más a un semáforo (jeje), y colocarla debajo de los cuadrados a través de la pestaña Jerarquía. Una vez más podemos usar Background para definir un color:


8) En la caja de herramientas, hacemos clic en la pestaña Special y colocamos un Timer en cualquier parte del área de trabajo. El Timer nos permitirá configurar los tiempos de cada una de las luces del semáforo. Una vez colocado el Timer, hacemos clic una sola vez sobre él y desde Propiedades ajustamos el Delay a 500 (1000 equivale a un segundo, pero en este caso no nos sirve el segundo entero ya que las luces tardarían demasiado en cambiar), y lo ponemos como Enabled.

9) Desde la pestaña Form colocamos un TextBox en una zona que no hayamos usado del área de trabajo, y cambiamos la propiedad Text a 0 (cero) y la propiedad Visible a False. Éste elemento actuará como motor del semáforo al permitirnos especificar cuándo va a pasar lo que querramos que pase.

10) Para programar el Timer hacemos doble clic sobre él. A continuación colocaré el código que utilicé personalmente para hacer el semáforo:

PUBLIC SUB Timer1_Timer()
C.TEXT = C.TEXT + 1
IF C.TEXT = 1 THEN
DrawingArea1.Visible = FALSE
DrawingArea2.Visible = FALSE
DrawingArea3.Visible = TRUE
ELSE IF C.TEXT = 20 THEN
DrawingArea1.Visible = FALSE
DrawingArea2.Visible = TRUE
DrawingArea3.Visible = TRUE
ELSE IF C.TEXT = 21 THEN
DrawingArea1.Visible = FALSE
DrawingArea2.Visible = FALSE
DrawingArea3.Visible = TRUE
ELSE IF C.TEXT = 22 THEN
DrawingArea1.Visible = FALSE
DrawingArea2.Visible = TRUE
DrawingArea3.Visible = TRUE
ELSE IF C.TEXT = 23 THEN
DrawingArea1.Visible = FALSE
DrawingArea2.Visible = FALSE
DrawingArea3.Visible = TRUE
ELSE IF C.TEXT = 24 THEN
DrawingArea1.Visible = FALSE
DrawingArea2.Visible = TRUE
DrawingArea3.Visible = TRUE
ELSE IF C.TEXT = 25 THEN
DrawingArea1.Visible = FALSE
DrawingArea2.Visible = FALSE
DrawingArea3.Visible = TRUE
ELSE IF C.TEXT = 26 THEN
DrawingArea1.Visible = FALSE
DrawingArea2.Visible = TRUE
DrawingArea3.Visible = TRUE
ELSE IF C.TEXT = 27 THEN
DrawingArea1.Visible = FALSE
DrawingArea2.Visible = FALSE
DrawingArea3.Visible = TRUE
ELSE IF C.TEXT = 28 THEN
DrawingArea1.Visible = FALSE
DrawingArea2.Visible = TRUE
DrawingArea3.Visible = TRUE
ELSE IF C.TEXT = 29 THEN
DrawingArea1.Visible = TRUE
DrawingArea2.Visible = FALSE
DrawingArea3.Visible = FALSE
ELSE IF C.TEXT = 50 THEN
DrawingArea1.Visible = TRUE
DrawingArea2.Visible = TRUE
DrawingArea3.Visible = FALSE
ELSE IF C.TEXT = 51 THEN
DrawingArea1.Visible = TRUE
DrawingArea2.Visible = FALSE
DrawingArea3.Visible = FALSE
ELSE IF C.TEXT = 52 THEN
DrawingArea1.Visible = TRUE
DrawingArea2.Visible = TRUE
DrawingArea3.Visible = FALSE
ELSE IF C.TEXT = 53 THEN
DrawingArea1.Visible = TRUE
DrawingArea2.Visible = FALSE
DrawingArea3.Visible = FALSE
ELSE IF C.TEXT = 54 THEN
DrawingArea1.Visible = TRUE
DrawingArea2.Visible = TRUE
DrawingArea3.Visible = FALSE
ELSE IF C.TEXT = 55 THEN
DrawingArea1.Visible = TRUE
DrawingArea2.Visible = FALSE
DrawingArea3.Visible = FALSE
ELSE IF C.TEXT = 56 THEN
DrawingArea1.Visible = TRUE
DrawingArea2.Visible = TRUE
DrawingArea3.Visible = FALSE
ELSE IF C.TEXT = 57 THEN
DrawingArea1.Visible = TRUE
DrawingArea2.Visible = FALSE
DrawingArea3.Visible = FALSE
ELSE IF C.TEXT = 58 THEN
DrawingArea1.Visible = TRUE
DrawingArea2.Visible = TRUE
DrawingArea3.Visible = FALSE
ELSE IF C.TEXT = 59 THEN
C.TEXT = 0
ENDIF
END

ACLARACIONES:
  • C.TEXT es el nombre de mi TextBox, y lo que hice al colocar C.TEXT=C.TEXT+1 fue indicarle al Timer que vaya sumando de a 1 en el TextBox. Recordemos que al Timer le colocamos un Delay de 500, es decir, que sumará de a 1 dos veces por segundo. EJEMPLO: En dos segundos, el TextBox habrá sumado 1+1+1+1=4.
  • En el caso de IF C.TEXT = 1 THEN, lo que especificamos es que cuando en el TextBox diga 1, va a suceder lo que detallemos en las próximas líneas de código. EJEMPLO: En el caso de DrawingArea1.Visible = FALSE, decimos que cuando pase medio segundo (cuando diga 1 en el TextBox), el cuadrado nro. 1 -la luz roja- NO va a ser visible.

A partir de esto espero que puedan reflexionar por sí mismos sobre la función de cada una de las líneas de código (muy importante en todos los lenguajes de programación). Pero si hay algo que no se entiende, no duden en preguntar.