Mi escritorio en Agosto…

August 16th, 2008

pantallazo_mini.png

Día de la independencia en google.co.ve

July 6th, 2008

Chévere que estuvieron pendientes en google.co.ve de poner un tema del logo de google con la independencia de Venezuela:

 Dia de independencia en google.co.ve

Caraqueños Ubunteros en el CNSLv4 Maracay

June 8th, 2008

Este sábado 7 de Junio de 2008, un grupo de caraqueños ubunteros (y zonas aledañas: Charallave) participamos en el 4to Congreso Nacional de Software Libre en su edición de la ciudad de Maracay.

caracaqueños hacia maracay

Los participantes, en la foto de arriba de izquierda a derecha, fuimos: santiago-ve, venedesanz, cmartinez28 y camilex.

El congreso estuvo muy bueno. Se nos agotaron los CDs quemaditos. Logramos un buen registro de personas asistentes que desean más información sobre Software Libre y Ubuntu GNU/Linux.

stand cnslv4 maracay

También se rifaron varios CDs orginales de Ubuntu entre los asistentes a las charlas, lo cual ayudó a hacer un poquito más animado el evento.Que incluyó una clausura con un baile típico de varias partes de Venezuela, especialmente estas zonas del centro-norte del país: ‘La Burriquita’. “Préstame tu burra pa’ i’ pa’ Choroní; ti tu burra buena yo vuelvo a vení”.

burriquita

Y de verdad que siempre es grato volver a los eventos de Software Libre, porque la gente es excelente, se aprende mucho y se logra bastante avance en la concientización libertaria.

Ubuntu Hardy Heron en laptop Toshiba Satellite A215-S7407

June 5th, 2008

Mi laptop es una Toshiba Satellite A215-S7407. Por supuesto corre Ubuntu GNU/Linux.

La primera instalación de Ubuntu que hice sobre esta laptop fue Gutsy Gibbon 7.10. Allí están las instrucciones para realizar exitosamente esta instalación.

Con Ubuntu Hardy Heron 8.04 la cosa fue más fácil. La primera vez, con el 7.10, lo más problemático fué el sonido, que no lo reconoció automáticamente; esa vez tardé 2 días en encontrar la solución. Con Hardy Heron el sonido funcionó a la primera vez, es decir no tuve que hacer nada más que instalarlo. Es de notar que desde Gutsy Gibbon hice un update hacia Hardy Heron.

Lo único que tuve que volver a configurar fue el driver del dispositivo inalámbrico (el wireless) porque fallaba. Lo que hice fue:

  • Regresé a la página de cuervo.
  • Volví nuevamente a la página del driver inalámbrico.
  • Esta vez descargué el driver  rtl8187b-modified-jadams-2-1-2008.tar.gz, el cual confirmo que funciona bien en Ubuntu Hardy Heron 8.04. El driver modificado originalmente por cuervo no funciona  correctametne en Hardy.
  • Descomprimí el driver y ejecuté:
    • chmod -R +x *
    • ./makedrv
  • Listo, con esto ya tenemos el driver compilado.
  • Para levantar el driver: ./wlan0up
  • Para detener el driver: ./wlan0down

Eso es todo lo que hay que hacer, por ahora.

Gracias a la página de cuervo.

Reunión de Ubuntu.

June 3rd, 2008

El sábado pasado nos reunimos en la sede de la empresa Rotator, empresa donde trabaja nuestro compañero santiago-ve.

Allí hablamos sobre los preparativos para el evento del aniversario de Ubuntu-ve.

He aquí una foto del grupo asistente:

 Reunión de Ubuntu-Ve Caracas

De izquierda a derecha:

camilo, vanesa, santiago, nelo, cesar y en el centro (sentado) nelson.

Virtual Box con soporte USB en Ubuntu Gutsy

May 3rd, 2008

Virtual Box tiene un problema con Ubuntu Gutsy, que no funciona con los puertos USB. Esto ocurre por un problema de configuración que se soluciona de la siguiente forma:

Hay que editar el siguiente archivo:

sudo gedit /etc/init.d/mountdevsubfs.sh

Luego hay que descomentar las siguientes líneas:

#
# Magic to make /proc/bus/usb work
#
mkdir -p /dev/bus/usb/.usbfs
domount usbfs “” /dev/bus/usb/.usbfs -obusmode=0700,devmode=0600,listmode=0644
ln -s .usbfs/devices /dev/bus/usb/devices
mount –rbind /dev/bus/usb /proc/bus/usb

Luego de guardar los cambios hay que correr el script:

sudo /etc/init.d/mountdevsubfs.sh start

Eso es todo. A mi me funcionó la segunda vez que arranqué Virtual Box luego de los cambios, así que si a la primera no te funciona, vuelve a probar.

Me guié por estas instrucciones: VirtualBox - Problema con USB en Ubuntu Gutsy 7.10

Compartir la conexión a Internet de la casa

May 2nd, 2008

Compartir la conexión a Internet de la casa.

Tuve que volver a reconfigurar mi Linux para compartir conexión a Internet.

Hace un par de días “actualicé” mi máquina de la casa a Ubuntu Hardy Heron 8.04. En realidad no fue una actualización, sino que decidí reformatear y particionar nuevamente el disco: 10 Mb para el sistema y 30 Mb para /home, es decir para los datos de los usuarios. La formatié para quitarle Windows EP que aún le quedaba y que hace más de un año nadie usaba.

Como esta instalación implicaba borrar todo de la compu, hice un respaldo de los datos de usuario. Pero desafortunadamente se me olvidó respaldar los archivos de configuración que tenía preparados para compartir Internet.

Lo que tiene la máquina

Veamos, la máquina tiene dos interfaces:

  • eth0 está conectada a internet, en realidad está pegada a un concentrador o un suiche que a su vez está pegado a un modem ABA de CANTV. Solo me dieron el cable y la condición de que solo conectara una máquina y que solo tomara una dirección IP de las que da CANTV con su DHCP.
  • eth1 está conectada a un cable de red cruzado. Elegí un cable cruzado porque así no necesito conectar un suiche entre la máquina de mi casa y mi laptop. Por cierto, solo tengo dos máquinas así que prefiero un cable cruzado que tener más cables, enchufes y cachivaches de red por allí.

Con Feisty, inicialmente tenía una sola interfaz, eth0 es la red integrada. Pero cuando le puse la otra tarjeta esta tomó eth0 y la integrada a veces tomaba eth1 y a veces eth2. Menos mal que ahora cada interfaz se queda siempre con su nombre y no cambian cada vez que enciendo la computadora.

Lo que instalé

Pues ya con el sistema instalado, lo que necesitaba básicamente es un servidor DHCP y unas reglas de ruteo.

Para instalar el servidor dhcp:

sudo aptitude install dhcp3-server

Luego hay que editar dos archivos, el primero le indica al servidor DHCP sobre cuál de las interfaces de red debe servir DHCP (en mi caso eth1 que representa mi red interna); el segundo indica la configuración DHCP y el rango de direcciones que se pueden servir.

Dirección IP de la interfaz eth1 y configuración de eth0

Antes de configurar el servidor DHCP la interfaz eth1 debe tener una IP fija que los clientes de la red interna puedan encontrar; mientras que la interfaz eth0 debe tener una IP variable que toma directamente del ABA de CANTV.

Ahora vamos a ver cómo se configuran las interfaces para que puedan ser reconocidas correctamente por el servidor DHCP y que luego funcionen la reglas de ruteo.

camilo@paraguachoa:~$ cat /etc/network/interfaces
auto lo
iface lo inet loopback

iface eth1 inet static
address 192.168.0.1
netmask 255.255.255.0
pre-up /etc/network/compartirinternet_eth1.sh

auto eth1

iface eth0 inet dhcp

auto eth0

Se observa que eth0 se configura automáticamente con DHCP que obtiene directamente de CANTV; mientras que eth1 se configura manualmente con la dirección 192.168.0.1 para que pueda ser ubicada como router por los clientes. Notar que en pre-up se corre un script para compartir la conexión, este script lo veremos al final.

Indicar la interfaz que hará DHCP

Ahora si hay que modificar los archivos del servidor DHCP. Uno para indicar cual tarjeta de red servirá DHCP y otro para indicar las reglas del servicio DHCP.

camilo@paraguachoa:~$ cat /etc/default/dhcp3-server
INTERFACES=”eth1″

Como se ve, solo contiene una linea indicando la única interfaz que servirá DHCP, esto implica que la interfaz eth0 no servirá DHCP. Esto para evitar interferir con el DHCP de CANTV.

Reglas para servir DHCP

Hay que indicarle al servidor DHCP las configuraciones que le va a dar a los clientes:

camilo@paraguachoa:~$ cat /etc/dhcp3/dhcpd.conf
ddns-update-style none;
option domain-name “cantv.net”;
option domain-name-servers 200.11.248.12, 200.44.32.12;
default-lease-time 43200;
max-lease-time 86400;
authoritative;
log-facility local7;
subnet 192.168.0.0 netmask 255.255.255.0 {
range 192.168.0.2 192.168.0.20;
option routers 192.168.0.1;
}

Observar básicamente que hay que colocar los servidores DNS de CANTV que es el proveedor ISP. También se ve que el rango de direcciones IP a servir es de 192.168.0.2 a 192.168.0.20. Esto significa que los clientes van a tomar solo estas direcciones. En la realidad, como tengo solo una máquina cliente, esta siempre está tomando la dirección 192.168.0.20.

El router es la dirección que usarán los clientes (en mi caso la laptop) para buscar la salida a internet. Esta dirección debe corresponder a la dirección de la interfaz eth1.

El Script de IPTABLES

Por último, para hacer el ruteo utilicé este script de iptables que ya tengo configurado. Este es el mismo que me funcionaba en Feisty. Básicamente le dice al sistema que enrute el tráfico de la interfaz eth1 a través de la eth0:

camilo@paraguachoa:~$ cat /etc/network/compartirinternet_eth1.sh
#!/bin/sh
##
## masquarading_from_eth1_to_eth0.sh
##
## Made by root
##
##

UNIVERSE=eth0
DMZ=eth1

#
# delete all existing rules.
#
/sbin/iptables -F
/sbin/iptables -t nat -F
/sbin/iptables -t mangle -F
/sbin/iptables -X

# Always accept loopback traffic
/sbin/iptables -A INPUT -i lo -j ACCEPT

# Allow established connections, and those not coming from the outside
/sbin/iptables -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables -A INPUT -m state –state NEW -i ! $UNIVERSE -j ACCEPT
/sbin/iptables -A FORWARD -i $UNIVERSE -o $DMZ -m state –state ESTABLISHED,RELATED -j ACCEPT

# Allow outgoing connections from the LAN side.
/sbin/iptables -A FORWARD -i $DMZ -o $UNIVERSE -j ACCEPT

# Masquerade.
/sbin/iptables -t nat -A POSTROUTING -o $UNIVERSE -j MASQUERADE

# Enable routing.
echo 1 > /proc/sys/net/ipv4/ip_forward

Listo! Ya tengo la Internet compartida.

Cuánto diseño de sistemas se debe hacer

April 19th, 2008

Generalmente, cuando se desarrolla software, se sigue o se trata de seguir un enfoque más o menos sistematizado. Primero se hace un análisis y levantamiento de información, luego se hace un diseño del sistema, se programa, y finalmente se prueba y se le da soporte y mantenimiento.

Análisis del sistema.

El análisis y levantamiento de información del sistema, son vitales. Aquí siempre se debe hacer mucho trabajo en amplitud y en profundidad. Como en muchos tipos de trabajos planificados o sistematizados, el inicio siempre es crucial.

Al inicio del proyecto, antes de comenzar con los demás procesos del desarrollo del software, el análisis debe ser bastante amplio, tratar de tomar en cuenta la mayor cantidad de aspectos del sistema. En ese momento es muy difícil profundizar en los detalles de análisis, debido a que hay mucho trabajo y muchas cosas dispersas que hay que comenzar a unir. Aún así, generalmente se hace alguna profundización en algunos pocos aspectos del análisis.

Luego, cuando se avanza en el análisis, y cuando se tiene un buen panorama sobre lo que se quiere del sistema, es cuando se puede hacer una análisis más profundo. Muchas veces distintos niveles de análisis pueden ocurrir al mismo tiempo, algunos más profundos que otros.

Y mientras se profundiza en el análisis, se comienza a hacer el diseño.

Diseño suficiente.

Últimamente se ha escrito mucho sobre el gran diseño y el diseño suficiente.

El gran diseño se refiere a hacer un gran esfuerzo de diseño de software, que se realiza en las etapas tempranas del proyecto. El objetivo es tener el diseño de todos los componentes que tendrá la aplicación, con un nivel de detalle bastante fino. Es un objetivo difícil de lograr y que generalmente consume mucho tiempo. Se supone el diseño que se haga debe mantenerse durante todo el desarrollo del proyecto, es decir, que una vez diseñado y aprobado ese diseño, éste no puede sufrir cambios; y es que luego no habrá tiempo para hacer eso cambios.

Realmente sí se pueden hacer algunos pocos cambios, pero solo a nivel micro, generalmente no se pueden hacer grandes cambios porque hacerlos es muy costoso.
Para poder trabajar con gran diseño hay que tener una buena experiencia con el tipo de proyectos que se tiene entre manos. Generalmente no se planifica ningún espacio de tiempo para hacer grandes cambios después, cuando ya el proyecto esté avanzado. No es muy adecuado cuando el proyecto incluye aspectos innovadores, nuevas tecnologías o nuevas experiencias para el equipo de trabajo.

Para trabajar con un enfoque de gran diseño, generalmente el equipo de trabajo cuenta con uno o unos pocos (poquísimos) diseñadores, que fungen como mentes maestras, expertos que pueden vislumbrar lo que necesitará y lo que hará el programa, y las necesidades de programación y de herramientas. El diseñador crea según su experiencia y según lo que pueda intuir sobre la evolución del proyecto.

Ahora, existe el diseño suficiente. Este es un enfoque distinto al gran diseño, que también se utiliza para el desarrollo de proyectos. Aquí lo que ocurre es que no se realiza un gran diseño al inicio del proyecto, sino que se hace un diseño que cumpla con las expectativas y con el alcance únicamente de una etapa del proyecto. Para lograr esto, primero hay que separar el proyecto por etapas; en términos de desarrollo ágil el proyecto se divide en iteraciones. Cada iteración debería llevar una pequeña fase de diseño, que sirve de plan para comenzar a programar en esa iteración; luego se ajustará el diseño, cambiando directamente la programación, según sea necesario.

Es de notar que hay extremistas que piensan que no se debería hacer ningún diseño del sistema. Piensan que si se siguen ciertas reglas de programación, cierta metodología, y en especial se aplica refactoring o rehacer nuevamente el software, se termina llegando a un diseño adecuado para el sistema.

En este punto es obvio una diferencia con el gran diseño; una diferencia de actitud hacia el proyecto: el gran diseño promueve que no se deben hacer grandes cambios en el desarrollo, que hay que apegarse al plan diseñado originalmente y no salirse (mucho o casi nada) de ese plan; mientras que en el diseño suficiente se promueve que se rehaga nuevamente el software en cada iteración, solamente en los aspectos mínimos necesarios según ciertas reglas que son muy sencillas.

En el diseño suficiente, no existe una mente maestra o un pequeño grupo de diseñadores que deciden de antemano todo lo que se hará. Por el contrario, cada programador del grupo debe ser capaz de decidir el mejor diseño para el módulo en que está trabajando en la iteración actual, que cumpla suficiente con los requerimientos. Generalmente el diseño y el código de cada programador se discute y comparte con los demás miembros del equipo. Muchas veces los programadores se rotan para que programen en cada parte o cada módulo de la aplicación.

Entonces, ¿Cuál es el mejor enfoque de diseño?

Pues, alguna gente cree que es mejor trabajar con gran diseño, mientras que otros creen que es mejor trabajar con diseño suficiente.

Es de notar que, si se necesita flexibilidad, si hay que adaptarse a cambios en los requerimientos en etapas tardías, es mejor usar metodologías ágiles y diseño suficiente.

Ahora, si el proyecto es estable, no cambiará, si se tiene suficiente experiencia y habilidad para hacer un diseño en grande del sistema al inicio del proyecto, es razonable utilizar el enfoque del gran diseño.

Personalmente creo que cuando se hacen proyectos a la media es mejor usar metodologías ágiles y olvidarse del gran diseño. Es mejor hacer diseño suficiente y ajustar en el camino, rehaciendo lo necesario para que al final el diseño resulte bueno.

Cambio delfín por elefante

April 18th, 2008

En estos día, santiago-ve, uno de nuestros compañeros de la comunidad de ubuntu-ve, y un muy buen evangelizador de software libre, me ha estado hablando mucho de PostgreSQL, obviamente con la intención, no solo de que lo pruebe, sino también de que me cambie.

Pues, el cambio viene a partir de ahora.

Todo comenzó por el canal de IRC #ubuntu-ve, dentro de la conversación, me enteré que puedo hacer algunas cosas interesantes con PostgreSQL, que no puedo hacer con MySQL, ni que yo sepa, con Oracle y otros bichos de más oscuro origen.

Ahh, por cierto, el delfín es MySQL, es su logo; y el elefante es PostgreSQL, porque también es su logo.

Bueno, el punto que me convenció es que puedo usar muchos lenguajes de programación para hacer los procedimientos almacenados (stored procedures). Si, ya no tendré que lidiar todo el tiempo con el archi-desagradable PL/SQL. Puedo hacerlos en Phyton o PHP, hasta en Ruby, si quisiera. Ese es el punto más fuerte, para mi, que me ha convencido de comenzar a usar PostgreSQL.

Pero, a pesar que ya no necesitaba mucho más para convencerme, puesto que ya me decidí a cambiar, ahora resulta que MySQL va ha ir dejando de ser completamente libre, de forma progresiva pero segura. Según dicen, solo algunas partes comenzarán a ser cerradas y convertidas en partes privativas (no partes privadas o pudendas).

Bueno, creo que él mismo se fue solito. Adiós MySQL. ¿Nos veremos en el futuro? Quien sabe, las vueltas que da la vida.

Se acerca el FLISOL, hora de levantarse…

April 12th, 2008

Pues si, ya se acerca el FLISOL. Estoy anotado como voluntario para colaborar, en Caracas, con el grupo de Ubuntu-ve. Estos días he estado tan ocupado que ni siquiera he escrito mucho en el blog.

Pero ya no me quedaré dormido cinco minutos más, es hora de levantarse.

A la comunidad de ubuntu-ve: cuenten conmigo. Nos vemos en el FLISOL. Trataré de llevar una pila de discos, me comprometí al menos con 20, pero trataré de llevar más. También participaré haciendo instalaciones y hablando con la gente para evangelizar sobre Ubuntu.