Posteado por: camilotorresf | Octubre 22, 2009

OVI: Olimpíadas Venezolanas de Informática

Durante los días 7 al 11 de diciembre en el I.U.T. Valencia (IUTVAL) se van a realizar las primeras Olimpíadas Venezolanas de Informática. Ya pueden ir anotando el evento en sus agendas. Se presentarán los mejores trabajos de investigación en Informática de este año.

Enlaces para información:

http://www.tcont.com.ve/ovi/

Noticia

Posteado por: camilotorresf | Octubre 15, 2009

Más censura en la Wikipedia: Venenux

Al hacer una búsqueda por Internet se puede observar que hay muchas quejas de censura en la Wikipedia. Ellos utilizan este lema: la enciclopedia libre. Luego de investigar he notado que no es tan libre y que si hay censura. La última víctima de la que me he enterado es la distro Venenux.

Esta distro es latinoamericana y se originó en Venezuela, es una muy buena distro basada en Debian. Es estable y tiene muchos paquetes, incluso muchos que no están en Debian. Es ligera y se puede usar cómodamente porque usa el escritorio KDE 3.5. Como muchas otras distros le pusieron una página o entrada en la Wikipedia, entrada que fue borrada recientemente, según el censor, por ser ‘propaganda’ de la distro.

Venenux merece nuestro apoyo porque, a parte de ser una distro muy buena, es una distro nuestra. Si estás usando una distro que corre leeento, que se chupa toooda la memoria, entonces cámbiate a Venenux.

Posteado por: camilotorresf | Octubre 10, 2009

Tableta Digital Genius Mousepen 8×6

La tabla digital
tableta digitalPuse a funcionar la tableta Mousepen 8×6 de la empresa Genius. Mi sistema es Debian Testing (Squeeze) AMD64. Para esta arquitectura no hay driver compilado, por lo que tuve que bajarlo y compilarlo, lo cual resultó muy sencillo.

El driver
Solo hay que descargar el driver wizardpen, mejor si es la última versión que es la 0.7-alpha2, y seguir las instrucciones de compilación que están para Ubuntu, pero funcionan igualitas en Debian. Asegurese de hacer ’sudo make install’ en vez de solo ‘make install’ para que se instale sin problemas.

La configuración en Debian
Luego viene la parte de configuración, que es la emocionante. Se conecta la tabla digital y se escribe:

cat /proc/bus/input/devices | grep Name

Lo que arroja:

...
N: Name="UC-LOGIC Tablet WP8060U"
...

Ese es el nombre de la tableta que se va a usar en los siguientes pasos.

Quien controlará la tableta para poder dibujar y hacer cosas será el servidor gráfico X.org, por lo tanto se edita el archivo de configuración de X.org:

sudo gedit /etc/X11/xorg.conf

En mi caso tuve que comentar, dentro del archivo xorg.com, la sección del ratón (mouse), porque hay que agregar una nueva. También agregué lo que indica en el manual de configuración del driver ‘wizardpen’. En definitiva esto fue lo que comenté y lo que agregué:

#Section "InputDevice"
#       Identifier      "Configured Mouse"
#       Driver          "mouse"
#EndSection

Section "InputDevice"
Identifier      "Configured Mouse"
Driver          "vmmouse"
Option          "Emulate3Buttons"       "true"
EndSection                                    

Section "InputDevice"
Identifier      "WizardPen Tablet"
# Paste the name of the tablet as found in the previous step
Option          "Name"          "UC-LOGIC Tablet WP8060U"
Option          "SendCoreEvents"        "true"
Driver          "wizardpen"
Option      "TopX"      "5619"
Option      "TopY"      "6554"
Option      "BottomX"   "29405"
Option      "BottomY"   "29671"
Option      "MaxX"      "29405"
Option      "MaxY"      "29671"
EndSection

Y al final agregué esto último:

Section "ServerLayout"
Identifier      "Default Layout"
Screen          "Default Screen"
InputDevice     "WizardPen Tablet" "SendCoreEvents"
InputDevice     "Configured Mouse" "CorePointer"
EndSection

Lo demás lo dejé igualito.

Reiniciar X y listo, o casi
Hay que reiniciar las X para que tome los cambios, como se indica en el instructivo de instalación. En mi caso el sistema se clavó completamente (ni las terminales virtuales que salen con Ctrl+Alt+Fn funcionaron más). Así que me tocó reiniciar después de varias semanas de tener la computadora ‘encendida’ (uptime), si no tomamos en cuenta el hecho que siempre la pongo a hibernar (se apaga) jajaja.

Al reiniciar la tableta ya funcionaba. No la he calibrado hasta ahora porque me gusta como está funcionando. Si hago la calibración, lo publicaré por aquí.

En Inkscape
Para que funcione en Inkscape hay que irse hasta el menú ‘Archivo->Dispositivo de entrada’, elegir ‘WizarPen Tablet’ y poner el modo ‘Pantalla’ o ‘Ventana’ para que funcione la presión del lápiz, dale ‘Guardar’ para que tenga efecto siempre.

En GIMP
En GIMP hay que ir al menú ‘Editar->Preferencias’ luego seleccionar en la lista izquierda ‘Dispositivos de Entrada’, de allí seleccionar ‘Configurar los dispositivos de entrada extendidos’, elegir igual ‘WizarPen Tablet’ y poner el modo ‘Pantalla’ o ‘Ventana’ para que funcione la presión del lápiz, dale ‘Guardar’, cerrar la ventanita en luego seleccionar el botón ‘Guardar la configuración del dispositivo de entrada ahora’ para que todo quede guardado y funcione siempre.

Suerte si tienes una de estas o quieres comprar una. El dibujo de la tabla digital arriba es hecho con la tabla funcionando.

Posteado por: camilotorresf | Octubre 8, 2009

Próximo evento: Jornadas de Software Libre en Cúcuta

Amigos del grupo de usuarios de Ubuntu Colombia han hecho una invitación a los Ubunteros Venezolanos para que participen en las Jornadas de Software Libre a realizarse en la ciudad de Cúcuta.

Según la propia página de las jornadas: “Las Jornadas de Software Libre 2009 se realizaran en La Ciudad Frontera, Cúcuta – Norte de Santander, de 30 de Octubre al 1 de Noviembre en las instalaciones de la Universidad Francisco de Paula Santander y el Hotel Bolivar. Es un evento totalmente libre.”

Entonces cualquiera puede ir, no solamente miembros de Ubuntu Venezuela, así aprenden un poco sobre el SL en Colombia y también de las charlas y ponencias. Si te queda cerca, no te lo pierdas. Lástima que a mi me queda lejos…

Posteado por: camilotorresf | Junio 27, 2009

Comienza el Ubuntazo

Aún no ha llegado la gente, pero ya tenemos casi todo listo para comenzar. Esperamos que lleguen bastantes para las charlas. Hay CDs quemados con Ubuntu y KUbuntu gracias a que la vez pasada Danilo trajo un paquete de discos en blanco que para esta vez se grabaron.

Aún no se ha logrado la conexión con NetLynx, pero allí vamos, poco a poco.

Posteado por: camilotorresf | Junio 4, 2009

Una relación entre la POO y las oraciones.

Una relación entre las oraciones, las clases, las variables y los métodos.

He estado viendo algún código escrito en Java que resulta no solo un poco difícil de entender sino que también es muy pesado para leer. Es un código difícil de entender porque el algoritmo no se ve claramente, resulta que muchas veces el programa tiene 300 o 500 líneas de código contínuas con puros detalles de implementación, todo metido en un solo método. En la mayoría de los casos, ese código hace algo sencillo como: generar un archivo con un formato particular, aplicar unas reglas a unos registros de BD, generar un reporte y cosas así. Pero resulta muy dificil de entender por la estructura desorganizada del código. También resulta pesado de leer precisamente por ese desorden, porque el código está todo metido en un solo método de Java con todos los detalles de implementación uno tras otro.

Ese código resulta difícil de mantener: toma mucho tiempo entender lo que hace. Al leerlo hay que adivinar el algoritmo y a la vez estar pendiente de los detalles. Cuando se llega a la mitad de un método que tiene 400 líneas de código, ya uno no recuerda lo que hacen las primeras líneas. En ese momento uno desearía que el código estuviera dividido en subtareas y que las subtareas sean llamadas de forma ordenada en un método controlador que sea corto y que al leerlo se vea claramente el algoritmo.

A raíz de esto me puse a reflexionar varias cosas sobre la programación orientada a objetos y sobre el diseño de los programas. Alguna gente piensa que mientras se programa también se va diseñando la solución. Esto no significa que no se haga un diseño previo de los programas, lo que significa es que la programación implica un esfuerzo intelectual que incluye la generación de parte del diseño del programa, más que todo el diseño detallado. Esto ocurre frecuentemente porque es muy costoso y lleva mucho tiempo hacer un diseño detallado para luego programarlo de forma casi mecánica; por el contrario en muchos casos es más conveniente hacer un diseño hasta cierto nivel de detalle intermedio y saltar luego a la programación, donde se teminan de diseñar los detalles mientras se construye el programa.

Es probable que en los programas que yo vi no pasaran por ninguna etapa de diseño. En algunos casos da la impresión que ni siquiera se reflexionó un poco sobre la estructura del programa. Ni hablar siquiera de refactoring; es comprensible que un primer diseño y un primer programa tenga ciertos defectos, al hacer refactor se logra ir mejorando el diseño del programa y la estructura del código fuente. Pero en estos casos hay indicios de que no se intentó hacer refactoring, da la impresión que dejaron el primer código que hicieron y funcionó, sin preocuparse por la estructura.

La Reflexión
Hay muchas cosas que se pueden hacer para remediar este problema, basta con seguir los consejos de programación que existen desde hace años.

Pero esto me ha llevado a una sencilla reflexión de cómo enseñar algunas cosas a las personas que están aprendiendo a programar y también a los que programan desordenadamente. El bojetivo de esta reflexión es buscar una forma sencilla de explicar o enseñar a los programadores un solo aspecto sobre el paradigma de programación orientado a objetos. Aquí van mis reflexiones.

La Oración: Sujeto y Predicado
La oración está compuesta principalmente por dos elementos: sujeto y predicado.

El sujeto de la oración es la persona, ser o cosa sobre la cual se está refieriendo.

El predicado es lo que hace o sobre lo que se aplica en el sujeto. Existen dos tipos de predicados: predicados nominales y predicados verbales.

Los predicados nominales representan una cualidad o un estado del sujeto en la oración. Los predicados verbales representan una acción del o sobre el sujeto.

Ejemplos de Oraciones
Veamos ahora con unos ejemplos:

Oración: el ratón está quieto
El sujeto es: el ratón; el predicado es de tipo nominal, ya que representa una cualidad o estado del ratón: está quieto.

Oración: el ratón se detiene
El sujeto sigue siendo: el ratón; el predicado ahora es de tipo verbal, pues representa una acción que está realizando el sujeto: se detiene. La diferencia con el predicado nominal del ejemplo anterior es que no se sabe si el ratón está quieto o no, solo se sabe que está detiéndose.

Oración: el ratón salta de la ventana al jardín
Esta oración es más complicada, el sujeto sigue siendo el mismo ratón; el predicado es verbal, porque indica una acción que está haciendo el ratón, pero da unos datos adicionales que son la ventana y el jardín, los lugares de origen y destino del salto. La ventana y el jardín forman parte nominal del predicado porque indican el estado anterior y el estado posterior a la acción (es decir al salto).

¿Qué tiene que ver esto con la POO?
Ya entendiendo esta simple estructura de la oración pasamos a ver cómo se une con la programación orientada a objetos.

Clases ~ Sujetos
En muchos lenguajes el programador va construyendo clases para modelar el programa que quiere construir.

Supongamos que queremos hacer un programa para controlar los ratones virtuales dentro de un juego de simulación que pasea por las casas de las personas virtuales. Entonces podríamos tener una clase llamada Ratón ya que todos los ratones harán básicamente lo mismo: merodear por allí.

public class Raton

Es algo muy natural que el sujeto de la oración se convierta en el objeto o la clase al momento de programar. En la mayoría de los casos los objetos y las clases representan sujetos de las oraciones.

Supongamos que queremos hacer unos reportes de personas asociadas a una logia que llevan: encabezado, cuerpo y un total, cada uno de una base de datos distinta. Al momento de analizar la información de lo que va a hacer el reporte nos damos cuenta que:
- Cada reporte debe colocar las etiquetas nombre, teléfono y servicio en el encabezado.
- Cada reporte debe buscar los datos en una base de datos.
- Cada reporte debe escribir correctamente el nombre, el teléfono y el servicio correcto para cada asociado.
- Cada reporte debe escribir un pie con el total de los asociados.

Vemos que son oraciones, cada requerimiento analizado se puede describir con una oración. En este caso el sujeto siempre es “el reporte” y que todos los reporte hacen básicamente lo mismo, por lo que se podría tener una clase “Reporte” que modele este sujeto:

public class Reporte

Ahora bien, ya vimos que los sujetos en las oraciones se modelan como clases y objetos en la POO. ¿Qué pasa con los predicados? pues bien, veamos cada tipo de predicado por separado.

Predicados Nominales ~ Variables o Atributos de Clases y Objetos
Para el caso de los predicados nominales, estos son los que indican cualidad o estado del sujeto, se utilizan variables de objeto o atributos de objeto (en Java se llaman atributos). Ejemplo, para saber si el ratón está detenido y para saber su velocidad cuando se mueve o salta:

public class Raton {
boolean estaDetenido;
int velocidad;
}

Otro ejemplo con respecto a los reportes que vimos anteriormente, cada reporte toma sus datos de una base de datos distinta:

public class Reporte {
DataSource baseDeDatosDeAsociados;
}

Entonces vemos que los predicados nominales se modelan como atributos o variables de objeto o de clase.

Predicados Verbales ~ Rutínas, Funciones o Métodos
Finalmente los predicados verbales implican alguna acción (algún verbo que indica la acción) que realiza el objeto y se modelan como métodos porque es allí donde van los pasos necesarios para ejecutar una acción. Generalmente el objeto tiene un estado antes de ejecutar la acción y otro distinto luego que termina la acción. Ejemplos:

public class Raton {
boolean estaDetenido;
int velocidad;
String posicion = “ventana”;

boolean detener() {
estaDetenido = true;
velocidad = 0;
return estaDetenido;
}

void saltar(String desde, String hasta) {
if (posicion.equals(desde)) {
posicion = hasta;
}
}

void main() {
detener()
saltar(“ventana”, “jardin”);
}
}

public class Reporte {
DataSource baseDeDatosDeAsociados;

void main() {
baseDeDatosDeAsociados = …;
escribirEncabezado();
traerDatos();
escribirCuerpo();
escribirTotal();
}
void escribirEncabezado() {
….
}
void traerDatos() {
….
}
void escribirCuerpo() {
….
}
void escribirTotal() {
….
}
}

En el ejemplo sencillo que se da del Reporte se puede ver claramente el algoritmo de funcionamiento en el método main(). Lo importante aquí no es mostrar que el programa esté correcto o no, solo es mostrar un ejemplo sencillo de cómo organizar el código para que sea fácil de leer. Por eso busqué la relación que existe entre las oraciones que usamos para comunicarnos en nuestro lenguaje natural y la forma de modelarlas en la programación orientada a objetos y particularmente en Java. Elegí Java porque es el lenguaje en que esta escrito el código que leí.

Conclusiones y Poner Claramente El Algoritmo
Entonces:
- Sujeto: se modela como clases y objetos.
- Predicado nominal: se modela como atributos o variables de clases y objetos.
- Predicado verbal: se modela como métodos de clases y objetos.

No son reglas dogmáticas aunque pienso que aplican en la mayoría de los casos.

Adicionalmente noté que es mejor tener un algoritmo claro (como el método main() del ejemplo del Reporte) y delegar los detalles en subrutinas (métodos de Java). Mientras los nombres de los métodos sean representativos de la acción que realmente hace el método y cada método haga solo una cosa, el algoritmo se entenderá bastante fácilmente.

Posteado por: camilotorresf | Mayo 23, 2009

Terminó el primer Ubuntazo…

Hoy me tocó hacer 3 artículos del Ubuntazo. Y es que lo hicimos tan bien que hasta tuvimos tiempo de escribir.

Fue mucha gente. Se copiaron muchos ISOs tanto en CDs como en USB Drives. Algunos Pen Drives son muy lentos, pero la ventaja sobre el CD es que se puede grabar sobre varios Pen Drives al mismo tiempo.

Sala de charlas

Sala de charlas

Las charlas fueron muy buenas y la gente se fue contenta. Solo se instalaron 2 computadoras nuevas y se hicieron algunas cositas de soporte.

cantando

cantando

Al final cantamos una canción de software libre.

Posteado por: camilotorresf | Mayo 23, 2009

Ubuntazo está siendo un éxito.

El Ubuntazo está resultando todo un éxito. Mucha se ha resgistrado y las charlas han estado full.

Como coordinador de soporte el trabajo ha sido relativamente suave. Ya quemamos todos los CDs que trajo la gente. También copiamos un montón de Pen Drives.

Registro.

Registro.

Soporte técnico

Soporte técnico

Posteado por: camilotorresf | Mayo 23, 2009

Comienza el Ubuntazo

Incluso antes de las 9:30am ya ha comenzado a llegar gente. Todo está listo para comenzar el Ubuntazo de hoy.

IMG_0029

Suerte.

Posteado por: camilotorresf | Mayo 20, 2009

Salimos del FLISOL, entramos a los Ubuntazos

Luego del exitoso FLISOL, sobre el cual no había tenido tiempo ni de escribir ni una felicitación ni a los participantes ni a los organizadores (FELICITACIONES A TODOS), ahora nos tocan los Ubuntazos.

Los Ubuntazos son eventos de software libre para promocionar la comunidad de Ubuntu-ve caraqueña; pero también son para promocionar Ubuntu-ve y el proyecto Ubuntu como un todo.

Los primeros Ubuntazos estarán enfocados en la captación de más miembros para la comunidad Ubuntu-ve. La idea es que la gente comience a participar, que hagan preguntas y que entren el el IRC, los foros y la lista de correos.

Para mí la lista de correos es la principal herramienta de participación en la comunidad. Precisamente sobre la lista de correos me corresponde dar una charla este sábado, que es el primer Ubuntazo. Voy a preparar una presentación con una muestra de cómo se hace el registro en la página de Ubuntu-ve para entrar en la lista, incluyendo: confirmación del correo, reglas de la lista, cómo hacer preguntas en la lista y alguna otra cosa. No tendré mucho tiempo así que tengo que hacerlo corto (7 minutos). No podré hacer demostración en vivo.

El próximo mes esperamos hacer otro nuevo Ubuntazo, y luego viene el 5to Congreso Nacional de Software Libre, que tampoco nos podemos perder.

Entradas antiguas »

Categorías