Esa maldita librería conio.h

25 09 2008

El titulo esta algo dramático pero sirve para llamar la atención :) ..

Como un pequeño offtopic:

No se como paso pero se habían borrado los comentarios de aproximadamente los últimos 15 días , sepa si moví algo sin querer pero de que paso, paso, pero por suerte el lunes pasado me decidi a sacar el primer backup del blog xD, (si, el primero) , gracias a eso puede restaurar esos comentarios desde el phpmyadmin :) .

Ahora al tema principal:

Una de las virtudes del humano es el poder evolucionar y progresar a cosas mejores, es nuestra naturaleza y se aplica incluso a la informática. Los tiempos cambian y la era en la que MSDOS era el único rey ya termino, sin embargo y por desgracia todavía quedan secuelas de ese “reinado” y un claro ejemplo es el uso que todavía se le sigue dando al mítico TURBO C , y que muchos todavía nos vemos obligados a escribir programas exclusivos para windows en las universidades y/o trabajos.

Para los que estan relacionados con el medio les va a sonar familiar la librería conio.h, si, esa misma cabecera de borland que usamos a cada momento para escribir los programas en modo texto y para ocupar las famosas funciones, getch(), clrscr(), gotoxy(x,y), y que es el impedimento #1 de porque no es común tener programas portables de windos a linux..

(conio.h no es una librería de GNU/Linux).

¿Entonces ante esta problemática que se puede hacer?.

Para nuestra fortuna y como era de esperarse ya pensaron en eso y tenemos una gran alternativa al conio.h, borland y al turbo c que se llama Ncurses, me voy a ahorrar el trabajo de dar el concepto porque ya esta explicado en la wikipedia, asi que solo estan a un click de conocerlo :) .

La instalación es fácil en debian y derivados, basta con hacer:

apt-get update

apt-get install ncurses*

Ahora, un programa sencillo que use ncurses seria uno que te pida el nombre y después lo imprima en pantalla xD (uy) .

En ncurses la sintaxis es similar a si estuviéramos usando el stdio.h y conio.h, sin embargo hay algunas cosas nuevas que le dan más potencia a curses y que hacen que varien algunas cosas un poco con respecto a lo que estamos acostumbrados.

A lo bueno (escribir un programa usando ncurses) :

Lo primero y obvio incluir la cabecera en el programa:

#include <ncurses.h>

después viene la declaración de la función principal, la variable del tipo char y ahora algo importante que es iniciar la pantalla que se hace con la función initscr() , podemos borrar los datos que ya pudieran estar en la pantalla con erase() (vendría siendo el equivalente al clrscr() del conio.h)

La impresión se hace con printw(), y la sintaxis es la misma que el printf(), la lectura de datos se hace con scanw() y la sintaxis es la misma que el scanf(), por ultimo si queremos esperar un caracter del teclado se hace lo mismo que en turbo c, getch(), ahora algo importante también, cerrar la ventana con endwin() y sin olvidar el común return 0 .

queda de esta forma:

Nótese que estoy usando nada más el gedit que viene incluido en gnome, no necesito más.. después solo es cuestión de guardar el programa con una extensión .c

Si quisiéramos sentirnos más leets a la hora de programar podemos usar el vim para codear en la misma consola:

/* No se porque no me coloreo las funciones ni resalto nada :| , pero en un vim sin problemas se ve bastante bien xD */

¿Y como se viera el programa compilado y ejecutado?

/* Para compilar (via terminal):

gcc ncurses.c -o ncurses -lncurses

gcc es el compilador de linux, ncurses.c es el código fuente del programa ncurses es el nombre con el que se va a guardar el programa y el -lncurses es para obligar al compilador a usar la librería. */

Bonito verdad? :) , ese mismo programa se podría hacer en turbo c usando las librerías nativas de el:

Y ejecutándolo:

Pero esta no es toda la grandeza de usar ncurses, sino que es mucho más potente y amplio que usar conio.. con ncurses se pueden hacer las mismas cosas que con conio y mejor, p.e:

El uso de colores en la consola, permite hacer programas que funcionen con pestañas :D , entre otras cosas. Espero poder enseñarles otro programa en alguna otra entrada cuando ya haya ampliado más el tema :) .

Para ver la documentación se puede con:

man ncurses

Y para ver la documentación de las funciones que este trae con:

man función

Hablando un poco del entorno de programación si a alguien no le gusta usar gedit o vim siempre pueden hacerlo por medio de anjuta para más comodidad :)

El tema de ncurses es largo, hay documentación en Internet pero a mi parecer todavía esta deficiente, asi que yo también ando en la búsqueda de encontrar información mas completa, pero por el momento y si les interesa siempre se le puede preguntar al gran google.

¿Pero los programas escritos usando ncurses como los podemos usar en Windows?

Pues se puede con PDCurses pero el tema lo dejo para otra entrada del blog, porque creo que ya se agrando mucho esta xD

—–

Una de las frases que más he escuchado durante toda mi vida por parte de mi familia, es que en un medio laboral competitivo los que logran algo son los mismos que han logrado diferenciarse del resto, entonces lo mejor es siempre aprender cosas nuevas y por qué no transmitirlas a gente que les interese tanto como a mi? :)

Saludos a los que leen !





Bloodhound Gang – The Bad Touch

14 09 2008

Pocas veces hago 2 posts el mismo día pero esta vez vale la pena, por azares del destino volví a escuchar esta canción que es una representante de una etapa de mi vida, creo que fue hace como 8 años cuando sonaba en mtv, estaba en 5to grado, y escuchaba esta canción casi todas las tardes.. escucharla me hace acordarme de como era todo en ese tiempo :)

[youtube]http://www.youtube.com/watch?v=iTW8oUV8Aq0[/youtube]

You and me baby ain’t nothin’ but mammals
So let’s do it like they do on the Discovery Channel
Do it again now… xD





Google Chrome en Linux

14 09 2008

Pasando por alto los misterios y los parecidos curiosos del logo (nótese que la comparación va más allá haciéndola con una webcam y el zorro (o panda) de firefox xD :D ), posteo la forma para ejecutar el navegador estrella de google en los sistemas GNU/Linux ;) .

Hace unos días lanzo en primicia un beta de su navegador propio llamado Google Chrome, por desgracia solo disponible por el momento para windows.

Bastante simple pero funcional como es la costumbre de Google, asi que para gente como yo que no necesitamos mucho para ser feliz es un buen producto xD

Ahora a lo bueno, ¿Como ejecutarlo en Linux? .

Hay 2 formas hasta el momento, desde la web oficial se pueden descargar las fuentes y compilarlo uno mismo, sin embargo eso no significa que va a funcionar a la perfección, ya que esa opción esta orientada más a los desarrolladores de la compañía que a otra cosa.

Entonces por el momento lo mejor y la opción más conocida… wine!

Lo primero es descargar la versión más nueva y necesaria de wine para poder correrlo sin problemas (1.1.4)..

Esta versión por no ser la estable todavía no esta en los repositorios, asi que el método para la instalación va a ser diferente al típico apt-get install (bueno, no inmediatamente xD).

Entonces tenemos que agregar unos nuevos repositorios para poder usar esta versión, la forma de hacerlo para diferentes distribuciones esta aquí:

http://www.winehq.org/site/download

Una vez seguidos los pasos ya podemos instalar wine normalmente:

apt-get install wine

o

aptitude install wine

Ahora antes de comenzar con la instalación del GC hay que hacer estas cosas antes:

cd $HOME
rm winetricks
wget http://www.kegel.com/wine/winetricks
mv .wine .wine.old
sh winetricks msxml3 corefonts firefox flash winxp

Explicando, se mueve al directorio home del usuario, en caso que haya antes un script llamado winetricks lo borra.

Después descarga el nuevo script, y renombra el fichero .wine a .wine.old, por ultimo se ejecuta el script (winetricks) que se encarga de descargar e instalar esos programas en wine que son necesarios para el funcionamiento del GC.

Una vez hecho esto ya podemos instalar el navegador :D

Descarga

Una vez descargado solo se ejecuta por medio del wine, bien con click derecho y “ejecutar con wine” o por la terminal con un:

wine nombre.exe

Ahora esperar que se descargue e instale.. :D

Pero.. todavía no esta listo para usarse del todo, para eso hay que pasarle 2 parámetros al ejecutable.

wine chrome.exe –no-sandbox –new-http

Y ahora si, ya podemos usar el GC en Linux :D

Free Image Hosting at www.ImageShack.us

Pero mi opinión es que esto no es algo muy practico, usarlo con el wine le mata todas las virtudes que posee, deja de ser ligero y sencillo y se vuelve bastante pesado, aparte de algunos problemas que note como que los vídeos de youtube aparecen cabeza abajo (wtf?! o_O).

Asi que es mejor esperar un rato a que este la versión oficial para los linuxeros :D , entonces este método queda como una forma friki/geek que tienen más utilidad para ser presumida de que podes usar GC en Linux que para usarlo realmente.

Referencias





El LHC y el no fin del mundo

10 09 2008

Y llego el día que se encendió el famoso LHC cosa que según algunos escandalosos tenia el 75% de probabilidad de destruir el mundo a causa de crear un agujero negro dentro de el planeta mismo, osea iba a pasar esto:

[youtube]http://www.youtube.com/watch?v=y9myUuhDRZ8[/youtube]

Lo cual hasta el momento no ha pasado xD, aunque estaba leyendo que el riesgo (que ha descartado completamente Hawking ya que si se crea uno seria inestable y se evaporaría por la misma gravedad al instante), no estaba planeado por el día de hoy, sino que hasta que comiencen a colisionar partículas y eso esta planeado para algún día después del 21 de octubre.

Independiente de esto es un experimento alentador, que podría ser el más grande de la historia podría probar la existencia de multiversos, y finalmente confirmar la Teoría de Cuerdas

Hace un tiempo puse un documental sobre eso aquí mismo, lo pueden ver por si a alguien le gustaría ampliar el tema:

Click

Volviendo al tema de LHC, hasta google le honro su logo por un día:

Es de ver como se desarrolla todo esto de la “máquina de Dios”, tal vez resuelve preguntas comunes de como es que estamos aquí, como se formo el universo, etc, etc, etc.

Pero lo del fin del mundo si bien para mi es algo completamente escandaloso y sensacionalista me recordó a un documental que vi hace como 2 años en el discover channel , creo que se llamaba “día final” y trataba sobre las 6 causas más probables en las que podía acabar la tierra, y si una de las causas era a causa de un experimento parecido al LHC :) :

[youtube]http://www.youtube.com/watch?v=T1vKisefsuI[/youtube]

y para terminar la frase de hoy:

“No soy honesto. Y de un hombre que no es honesto, sólo se puede esperar que no sea honesto. Honestamente, es con los honestos con los que hay que tener cuidado, porque nunca puedes prever cuando harán algo extraordinariamente estupido”

Capitan Jack Sparrow





Formula de primalidad

3 09 2008

Vi esta formula en Bucles y me pareció bastante interesante.

Citando textualmente:

Vi la fórmula en A Passion for Mathematics, de Clifford A. Pickover, que a su vez lo cita de Mathematical Mysteries, de Calvin Clawson.

Clawson dijo sobre ella: «Es verdaderamente asombrosa. ¿Cómo sabe si su argumento es primo o compuesto?»

La formula es funcional yo mismo la probe, pero deja de ser exacta a medida que j comienza a crecer, o al menos asi paso en mi hoja de cálculos (Gnumeric)..

Si es primo el resultado da 1, si compuesto da 0, (solo se toma la parte entera del resultado).

A mi me comenzó a fallar a partir de 11, pero con otros programas más profesionales y dejando más exacta la formula se puede seguir evaluando hasta números más altos :) .

//

Aprovecho para avisar que inauguro la categoría de ciencia en este blog :D , como dije en uno de mis primeros posts de el blog, este va a tratar de todos los temas que me agradan a mi y la ciencia es uno de ellos :) .

Además que es algo que va de la mano con el “geekismo” y la tecnología :D