2007-04-15

El remplazo de Visual Basic?

Desde que recuerdo programo en BASIC, es mi lenguaje favorito por muchas razones, me gusta la sintaxis, me gusta la filosofía del lenguaje, me gusta que sea sencillo y a la vez poderoso (no he encontrado nada que no se pueda hacer con él, como hacerlo es harina de otro costal) comencé a programar en BASIC hace muchos años, con un libro llamado BASIC para Niños era un libro con un personaje gracioso llamado Arturo te enseñaba a hacer ciclos FOR, bloques IF, etc. Todavía recuerdo el primer programa que escribí en mi vida, si, el mismo que todo el mundo:

10 PRINT "Hola!, me llamo Arturo"

Una sola línea de código en el GWBASIC con el número 10 que imprimía en pantalla algo... similar... al Hello World! que todo el mundo escribe. Muchos años después continúe explorando el mundo BASIC pasando por qBASIC del MS-DOS y después Visual BASIC 5 y 6, mi versión de BASIC favorita. En esa época detestaba el lenguaje C con toda mi alma, por varias razones, la primera era que mi papá lo odiaba y me había hablado pestes de él, la segunda y la más importante era que instalé el Microsoft QuickC en mi PC y nunca pude entender por que cuando quería ejecutar el programa con printf("hola mundo\n"); me decía que printf no estaba definida. Para alguien que viene del BASIC eso de los .h y las librerías es Chino Avanzado! Ahora todo tiene sentido para mí pero en ese entonces solo acentuó mi odio contra el C.

Es aquí donde se tuerce toda la historia, pues llegó Microsoft con su Visual Studio.net y sus ganas de ser como Java y se cagó el Visual Basic convirtiéndolo en un híbrido horrible entre C++ y BASIC, un completo chasco y una desgracia para el mundo BASIC, estoy seguro que Bruce McKinney escritor de Programación Avanzada en Visual Basic (Hardcore Visual Basic) estaría de acuerdo con migo, o por lo menos, eso fue lo que dio a entender en la sección "El espíritu del BASIC" de ese libro, la verdad no podría asegurarlo, pues no he vuelto a leer ninguna de sus obras. Las razones de Microsoft "No queremos mas programadores mediocres" (Esto fue dicho en una conferencia celebrada en el Hotel Duruelo de Villa de Leyva, Boyacá, Colombia por Microsoft para la presentación del paquete .net y Microsoft Windows Server 2003 al mundo académico [yo estuve presente allí], aún tengo el libro y la copia de Visual Studio.net que regalaron ese día).

En fin, el caso es que para mi Visual BASIC terminó en la versión 6.0 jamás se lanzó otra versión del lenguaje que tanto amo. Aún lo uso y me rehúso a dejarlo es el lenguaje en que más cómodo me siento. Pero... hay que afrontar lo inevitable, uno no puede quedarse en lo antiguo pues eso lo único que hace es atrasarlo más. Así que... hay que afrontar lo inevitable... hay que aprender C++. No fue muy difícil la verdad, tantos años de BASIC y Windows habían aumentado mi comprensión del mundo de la informática al punto que ya podía comprender que significaba hacer #include y entonces al fin printf("Hola mundo!\n"); funcionó y en la consola apareció "Hola Mundo!"

Momento de migrar a C++, aunque aún era reacio y entonces prinf pasó a ser COUT << "Hola mundo!\n"; que para mi tenía más sentido pues se parecía más al PRINT del BASIC [en ese tiempo no entendía, que COUT era un objeto y no lo vine a entender sino hasta hace poco] luego llegaron los años de colegio y en 11 aprendimos C++ y entonces aumenté mi comprensión del mundo de la programación en C. Luego llego Mario Young quien por todos los medios intentó hacer que programara en C++ con él... ahhh, difícil la cosa pues en ese entonces yo todavía no quería soltarme del BASIC.

Luego llego la Universidad... ahhh que excelente ya por fin tuve en aprendizaje sistemático del C++, lo básico, programación orientada a objetos, estructuras de datos, Java (que siempre complementa el entendimiento de los objetos) y ahora considero que sé bastante de C++ y de la programación por objetos aunque todavía me siento más cómodo programando en BASIC.

Ahora se abren nuevos horizontes ante mí, el sistema operativo Linux es el sistema del futuro y para aquellos que aún estamos a tiempo (aunque un poco retrasados) de entrar en el nuevo paradigma es momento de darnos cuenta de la realidad... si volvemos a caer en el lado oscuro de Microsoft será fatal. Así que... hay que evolucionar, y ¿que ofrece Linux? ¿que más? C++. Así que a programar a punta de APIs ¿no? ¡PUES NO! ¡AL FIN LO HE ENCONTRADO! El sustituto perfecto de Visual BASIC. Lenguaje base C++ multiplataforma con desarrollador de interfases y ¡NO ES JAVA! ¡ES CÓDIGO NATIVO EN TODOS LOS SISTEMAS! Ahhh ¡que bonito se siente decirlo!



¿parecido huh? Si bastante, pero es ¡MEJOR! ¡SI, MEJOR! lo que ves allí con la conexión entre el Clicked() del botón y el Close() de la ventana ¡¡ES TODO LO QUE SE NECESITA PARA QUE LA VENTANA SE CIERRE!! ¿No es impresionante? ¡Es Excelente! ¡Asombroso! Definitivamente es momento de comenzar una nueva vida. Adiós al BASIC, ¡siempre te querré! pero.... es momento de que yo evolucione y tu no me lo permites... XD

Todo esto tan maravilloso es el qt [ http://www.trolltech.com ] Es una librería gráfica multiplataforma que permite crear entornos gráficos de forma sencilla y que correrán en cualquier entorno (he sabido que hay para Linux, macOS y Windows) ¡SIN CAMBIAR UNA SOLA LÍNEA DE CÓDIGO! Ya que es código C++ que es muy portable y que prácticamente está en todos los sistemas. Mientras tengas las librerías necesarias en tu sistema teóricamente puedes simplemente compilar y ya. ¡NO ES QUE ESTO ES TAN IMPRESIONANTE QUE NO ME LO PUEDO CREER! Así que aquí comienza mi viaje a través del terreno por ahora desconocido de la programación Linux, adiós a las ataduras de Microsoft. ¡FREE! ¡AT LAST!

Lo siento... me dejé llevar un poco. En estos días (si me queda tiempo) estaré posteando los pasos para instalar el QT4 en un sistema Kubuntu, (gracias a Mario Young quien me ayudó a mi a lograrlo).

Gracias por leerme.

2007-04-13

Linux...

Cuento más lo uso, más me convenzo de que Linux es el sistema operativo del futuro. Más me gusta, más cómodo me siento con él, aún me cuesta desligarme de Windows, debo reconocerlo, bueno, después de todo ese es el sistema operativo que he usado toda mi vida y es difícil dejar atrás la experiencia que ya tengo en pro de un mundo nuevo. ¿Que perderé, que ganaré a cambio? ¿será equivalencia de intercambio? ¿estaré ganando más de lo que pierdo? ¿será al contrario?

Tengo la suerte de tener amigo que comparten con migo su pericia y que poco a poco me transmiten su experiencia. También es una suerte saber que la comunidad Linux es una comunidad solidaria que está siempre dispuesta a ayudar a los que comenzamos a entrar en este mundo y que pensamos que es mejor adelantarse a los cambios que verse forzados a afrontarlos. Estoy a punto de dejar atrás algo importante, pienso dejar atrás el Microsoft VisualBasic que tanto me gusta y que a este punto es mi lenguaje favorito por volverme un programador del entorno KDE. Es un gran paso pero hay que darlo en algún momento, pienso que en el futuro me puede abrir muchísimas puertas.

Quizás sea momento de relegar a Windows a la posición que Linux ocupó por mucho tiempo como sistema operativo secundario y enviarlo a una miserable esquina del disco duro para expandir las fronteras de Linux y liberar de una vez por todas el potencial que este sistema tiene para ofrecer.

Doy gracias a los amigos que han estado con migo durante esta transición, a Xavier por ayudarme siempre, a él le debo el estar aquí y ahora, a Mario Young que una vez me habló de Linux y yo lo rechacé por "no ser estándar" ¡DIABLOS, QUE LOCO ESTABA! Ahora tengo hambre de más conocimiento y espero sinceramente que estas personas sigan a mi lado en el camino que hay por venir.

A los que todavía no conocen Linux los insto a que lo prueben y se convenzan por ustedes mismos de que un sistema operativo gratuito y libre no es malo y que les traerá muchas más satisfacciones que sinsabores en cuanto le cojan el tiro.

Es momento de dar el paso hacia el futuro, ojalá que más adelante pueda decir con todo orgullo "Linux es el único sistema operativo que uso". Gracias a la comunidad Linux por brindarle de forma desinteresada a la humanidad una verdadera joya de la ingeniería.

Me he puesto un poco Solemne pero... ya que más da, "¡El conocimiento humano pertenece al mundo!" ¡Que viva el software libre!

2007-04-04

Aceleración gráfica y TwinView para las nVidia en Kubuntu

Antes que nada agradecer a Xavier Corredor Llano por ayudarme a configurar la aceleración gráfica, el siempre ha sido mi senpai de Linux por lo que estoy muy agradecido, de no ser por el probablemente todavía estaría buscando el .exe en los tar que se descargan de internet... XD

Bueno, ahora si comencemos, hace rato que vengo usando Linux y solo hasta el día de hoy pude por fin hacer que el sistema acelerara las gráficas sin bloquearse y también logré que Linux usara un segundo monitor con la característica TwinView de las nVidia con TV-Out.

Primero decir que tengo una nVidia Gforce 6200 con 256 MB de memoria de vídeo. Esto lo digo no por alardear sino para que quede constancia de que no tengo ni idea si esto funcionará en otras tarjetas nVidia, valga decir que el hilo que me proporcionó la información para activar el TwinView dice que sirve con todas las nVidia.

1. Configurar los Drivers

Lo primero es configurar los drivers, como todos ya saben los drivers libres para Linux proporcionan las funcionalidades básicas para la tarjeta de vídeo pero no aceleran las gráfica ni tampoco proporcionan la posibilidad de usar TwinView, así que hay que descargar los drivers para la nVidia que corresponde. Instalar los siguientes paquetes (dependiendo de la tarjeta que tengas)

Si buscas nVidia en el Synaptic seguramente te saldrán todos los paquetes.

Paquete

Para tarjeta

nVidia-glx

nVidia gForce, nForce, y Quadro

Ejemplo: gForce 6200

(Tarjetas nVidia de las nuevas)

nVidia-glx-legacy

nVidia gForce 2, TNT, TNT 2

Ejemplo: gForce 2 MX/MX400

(Tarjetas nVidia de las antiguas)

nVidia-kernel-common

TODAS LAS TARJETAS nVidia

Además de estos paquetes necesitarás instalar el Linux-restricted-modules que correspondan al kernel de Linux que tengas instalado. Para saber el kernel puedes fijarte en el grub cuando arranca o escribir en la consola el comando uname -a o uname -r.

Por ejemplo, si al poner uname -r el sistema te da la salida: 2.6.17-11-generic deberás bajar el paquete linux-restricted-modules-2.6.17-11-generic que en el ejemplo sería el que concuerda con tu Kernel. OJO! Si hay otros paquetes similar instalados no los desinstales, solo instala el que concuerda con tu kernel de ser necesario.

Una vez instalado el Driver, el siguiente paso es hacer que el X use el driver propietario (es decir el que creo nVidia) y no los drivers libres que vienen con el Linux, para hacer eso dale al menú K y en Ejecutar escribe:

kdesu kate /etc/X11/xorg.conf

El sistema te pedirá el la contraseña del root y enseguida aparecerá Kate con el xorg.conf que es el archivo de configuración del X (¡así que ten cuidado con lo que modificas!) ahí busca la sección Device, que debe lucir más o menos así:

Section "Device"

Identifier "NVIDIA Corporation NV40? [Unknown nVidia Card]"

Driver "nv"

BusID "PCI:1:0:0"

EndSection

Antes de modificar el archivo TE RECOMIENDO QUE SAQUES UNA COPIA DE SEGURIDAD EN TU DIRECTORIO DE USUARIO, Luego debes editar la parte que dice Driver y poner “nvidia” en vez de “nv” y guardar el archivo.

Si eres precavido (e inteligente) este es un buen momento para que reinicies el PC ya que si te apresuras a agregar el código para el TwinView y luego no te resulta no sabrás si lo que ha fallado es el Driver o la configuración del TwinView. Pero... si no quieres reiniciar el equipo (¡Me gusta el peligro! ¡es mi desayuno!) pues entonces adelante a la sección siguiente del documento.

Ah, por cierto, TE RECOMIENDO que reinicies el sistema entero, no solo el entorno gráfico, mi senpai de Linux (Xavier) me sugiero esto así que yo se lo sugiero a mis lectores también.

Después de reiniciar la máquina al iniciar DEBE aparecer el logotipo de nVidia en el monitor antes de que aparezca e Katapult (pantalla de inicio del KDE, donde pones la contraseña), si no, es por que probablemente algo ha fallado, revisa los pasos anteriores para ver que puede ser.

2. Activar el TwinView

Si ya has probado el driver y sabes que funciona todo y estás listo para agregar el TwinView entonces debes seguir estos pasos: Primero abre el xorg.conf con el comando que discutimos antes, nuevamente RECUERDA SACAR UNA COPIA DE SEGURIDAD DEL ARCHIVO, PERO NO REMPLACES LA QUE HABÍAS SACADO EN EL PASO ANTERIOR. En el archivo localiza la sección Device y agrega algunas líneas de código para que se vea como esta:

Section "Device"

Identifier "NVIDIA Corporation NV40? [Unknown nVidia Card]"

Driver "nvidia"

BusID "PCI:1:0:0"

Option "TwinView" "True"

Option "TwinViewOrientation" "Clone"

Option "UseEdidFreqs" "True"

Option "MetaModes" "1024x768,1024x768"

Option "UseDisplayDevice" "CRT,TV"

EndSection

Bueno, algunos comentarios acá: 1. Solo agrega las líneas que dicen Option, NO MODIFIQUES LAS LÍNEAS QUE YA HAY EN EL ARCHIVO. 2. La opción TwinViewOrientation tiene tres configuraciones (por lo menos que yo sepa) y ellas son: LeftOf o RightOf para que el escritorio se extienda hacia la izquierda o derecha en el segundo monitor, y Clone para que el segundo monitor muestre una imagen idéntica a la que muestra el primer monitor.

3. La opción MetaModes define la resolución para cada una de las pantallas, acá debes tener cuidado de establecer las resoluciones que tu tarjeta de vídeo soporta para el TwinView o de lo contrario puedes terminar con errores raros o con visualizaciones erráticas. Si tienes una gForce de las nuevas te recomiendo que comiences probando con dos resoluciones iguales, 1024x768 para ambas. Si tienes una gForce de las viejas te recomiendo 1024x768,800x600. Ten presente que puedes agregar varios MetaModes separados por ; (punto y coma), por ejemplo:

Option “MetaModes” “1024x768,1024x768;1024x768,800x600”

En realidad no sé exactamente que comportamiento tiene esta configuración, pero mis experimentos parecen mostrar que los MetaModes establecen las resoluciones para los monitores en el orden en que aparecen en la opción UseDisplayDevice y que cuando se agrega más de un MetaMode Linux intentará con cada uno hasta encontrar uno que la tarjeta acepte. Nuevamente esto es solo una posibilidad, nada es seguro aquí. Pero si tienes más dudas mira el hilo del foro de Ubuntu (Al final en Referencias)

4. Finalmente la opción UseDisplayDevice permite establecer que monitores se usarán, acá debes establecer donde están conectados los monitores, por ejemplo, si tienes dos monitores conectados uno a la salida análoga (VGA) y el otro en la digital entonces sería: “DVI,CRT” asumiendo que el monitor en la salida análoga es el segundo monitor. Otro ejemplo (que es el de mi caso) es que tengas un monitor conectado a la salida análoga (tu monitor principal) y un TV conectado en la salida de S-Video (Composite Video) en ese caso sería “CRT,TV”.

Guarda el xorg.conf, reinicia el equipo y si has hecho todo bien ya debes tener TwinView. A mi en lo personal no me gustó la extensión del escritorio por que Linux a diferencia de Windows no clona el Papel Tapiz sino que lo estira y el escritorio luce... algo horrible, pero de resto bien.

He de decir que NUNCA pude hacer que mi gForce 2 MX400 trabajara con Linux, no por el driver ni nada sino por que cuando usaba la aceleración gráfica el sistema se congelaba al mejor estilo de Windows y nunca pude solucionar ese inconveniente. Ahora me pregunto si era por que tenía algo mal configurado, por culpa de los legacy-drivers o quizás por la propia tarjeta de vídeo, un overheat ¿quizás?. En cualquier caso si alguien logra configurar una gForce 2 MX400 pues que me mande un correo electrónico para poder quitarme la espina del cerebro.

Referencias:

  1. Mi Senpai de Linux, Xavier Corredor Llano que me ayudó con todo lo de la aceleración gráfica

  2. nVidia TwinView - Ubuntu Forums en http://ubuntuforums.org/showthread.php?p=1773584