POV-Ray: Formas basicas (sphere, box, cone, cylinder, plane, torus)

Ilustracion de la sintaxis de las formas basicas de POV-Ray (sphere, box, cone, cylinder, plane, torus). Como actualmente llevo la materia de Graficacion y en nuestro grupo vamos a usar POV-Ray para modelar todo lo aprendido pues en esta casion quiero mostrar la sintaxis basica de las 6 formas mas basicas de POV-Ray; la esfera, el cubo, el cono, el cilindro, los 3 planos X,Y,Z y el toroide. Tambien muestro un ejemplo de codigo y doy por hecho que ya te has descargado e instalado el software, sino es asi Aqui puedes empezar http://www.povray.org/download/.

Una introduccion rapida: Los programas como POV-Ray (trazadores de rayos) son programas que permiten definir escenas con una camara simulada (camara sintetica), figuras geometricas y fuentes de luz (algo asi como focos de luz del color que nosotros deseemos) para hacer todo esto se utiliza un lenguaje de script para definir toda la escena. Al indicarle al programa que interprete (renderize) el mismo software dibuja y calcula donde inciden los rayos de luz sobre los objetos (ya no digo mas porque se pierde el objetivo de esta entrada de blog). Yo tengo instalada la version 3.6.1 de POV, como se muestra en la siguiente imagen:

Mi version de povray

Mi version de povray

Voi a ir mostrando primeramente la sintaxis de cada figura y a continuacion un ejemplo de codigo en POV-Ray seguido de la imagen que se genera, por pasos, empezamosss…

1.- OBJETO ESFERA (sphere)
Esta figura basicamente se define especificando las coordenadas del centro de la esfera y el tamaño del radio como se observa en la siguiente imagen:

Sintaxis del objeto Esfera

Sintaxis del objeto Esfera

Ejemplo de codigo fuente en POV-Ray:

  1. /*
  2. Descripcion: Posicion de la camara, dibujo de una esfera y creacion de una fuente de luz
  3. Author: Gonzalo Silverio
  4. Archivo: practica1.pov
  5. Tutorial PovRay: 3.1.6 Definiendo una fuente de luz
  6. */
  7. #include «colors.inc»
  8. //Definicion de la camara sintetica
  9. camera {
  10. location <5,2,4>
  11. look_at <0,1,2>
  12. }
  13. // Definicion del objeto esfera
  14. sphere {
  15. <0,1,2>,1.5
  16. texture{
  17. // OTRAs FORMAS DE DEFINIR EL COLOR
  18. //pigment {color Yellow}
  19. //pigment {color red 0.5 green 0.8 blue 0.8}
  20. //pigment { color rgb<0.5,0.8,0.8> }
  21. pigment { rgb<0, 0, 1> }
  22. }
  23. }
  24. //fuente de luz
  25. light_source {<2,4,4> color White }

En el codigo anterior se puede onbservar que en la linea 15 se a definido una esfera en las coordenadas 0 en X, 1 en Y y 2 en Z. La Imagen de la Escena que se genera es esta:

Renderizado de un objeto esfera

Renderizado de un objeto esfera

2.- OBJETO CAJA (box)
Una caja es una especie de cubo. Para definir un box (caja) se hace especificando dos coordenadas; la primera coordenada es la de una esquina de la caja y la otra coordenada es la otra esquina opuesta a la primera, en la siguiente imagen e puesto dos ejemplos para que esto quede mas claro. Se puede utilizar cualquiera esquinas para definir la caja.

Sintaxis del objeto Caja

Sintaxis del objeto Caja

Ejemplo de codigo fuente en POV-Ray:

  1. /*
  2. Instituto Tecnologico de Zacatepec, Mor.
  3. Descripcion: Uso del objeto Box (caja)
  4. Author: Gonzalo Silverio
  5. Archivo: practica2.pov
  6. Tutorial PovRay: 3.2.1 Objeto Caja (Box)
  7. */
  8. #include «colors.inc»
  9. #include «stones.inc»
  10. //posicion de la camara sintetica
  11. camera {
  12. location <8,8,8>
  13. look_at <2,2,2>
  14. }
  15. //Definicion de un objeto caja
  16. box {
  17. <0,0,0>,
  18. <4,4,4>
  19. texture{
  20. T_Stone25
  21. //Escalar la textura
  22. scale 19
  23. }
  24. //rotate <0,20,0> //Rotar 20 grados respecto a eje Y
  25. //El sentido de los giros se hacen usando la regla de la mano izquierda
  26. rotate y*-15 //-15 grados en y
  27. rotate z*30 //30 grados en z
  28. }
  29. // fuente de luz
  30. light_source {
  31. <6,6,8> color rgb <0.5,1,0.8>
  32. }

Como se ve en el codigo de POV-Ray he definido una caja con una esquina en el origen del sistema de coordenadas 3D (0,0,0, linea 17) y la otra esquina con 4 unidades en X, 4 en Y, y 4 unidades positivas en Z (linea 18). Ademas, le e asigando una textura estilo tipo roca (stone, linea 20), dicha textura la e escalado 19 unidades (linea 22) y por tambien e rotado la caja en Y y en Z (linea 26 y 27). La Imagen de la Escena que se genera es esta:

Renderizado de un objeto Caja

Renderizado de un objeto Caja

3.- OBJETO CONO (cone)
Un objeto cono se define en POV-Ray especificando las coordenadas del centro de sus dos extremos y sus respectivos radios como lo e indicado en la siguiente imagen. La palabra ‘open’ en gris se puede omitir; si esta palabra no esta el cono TIENE tapas, si esta palabra se pone entonces el cono NO TIENE tapas en sus extremos (esta abierto).

Sintaxis del objeto Cono

v

Si deseamos que alguno de los extremos termine en pico, entonces en uno de sus extremos indicamos un R=0 depende de donde deseamos el pico; como se observa en la siguiente imagen:

Sintaxis del objeto Cono, con extremos en pico

Sintaxis del objeto Cono, con extremos en pico

Ejemplo de codigo fuente en POV-Ray con un cono al cual se le quitan las tapas (open):

  1. /*
  2. Instituto Tecnologico de Zacatepec, Mor.
  3. Descripcion: Uso del objeto cone (cono)
  4. Author: Gonzalo Silverio
  5. Archivo: practica3.pov
  6. Tutorial PovRay: 3.2.2 Objeto Cono
  7. */
  8. #include «colors.inc»
  9. #include «stones.inc»
  10. //Posicion de la camara sintetica
  11. camera {
  12. location <8,8,8>
  13. look_at <0,0,2>
  14. }
  15. // Definicion del objeto cono
  16. cone {
  17. <4,0,0>,1
  18. <4,5,3>,1.2
  19. open //quitar tapas (abierto)
  20. texture {
  21. pigment { color rgb <0.6,0.4,1> }
  22. }
  23. }
  24. //posicion de fuente de luz 1
  25. light_source {<4,5,6> color White }
  26. //otra fuente de luz 2
  27. light_source {<8,5,6> color White }

Como se observa en el codigo he definido un cono con extremo en las coordenadas 4 unidades en X, o en Y y 0 en Z; el tamaño del radio es de una unidad. El otro extremo esta igual 4 unidades en X, 5 unidades arriba en Y y -3 unidades en Z. Recordemos que la unidades positivas en X ‘entran’ en el plano 3D y las coordenas negativas ‘salen’ del plano; es por esto que el cono se ve como se estuviera inclinado hacia nosotros en el plano. En realidad tambien podemos definir un cilindro con el objeto cone; basta con definir el mismo radio en ambos extremos. La Imagen de la Escena que se genera es esta:

Renderizado de un objeto Cono

Renderizado de un objeto Cono

4.- OBJETO CILINDRO (cylinder)
La sintaxis del objeto cilindro es casi identica a la del objeto cono con la diferencia de que solamente se especifica un radio debido a que un cilindro tiene el mismo radio en ambos extremos (si fueran diferentes pasaria a ser un cono, jejejejj). A continuacion una imagen que aclara todo:

Sintaxis del objeto Cilindro

Sintaxis del objeto Cilindro

Nuevamente la palabra clave ‘open’ quita las tapas del cilindro.
Ejemplo de codigo fuente en POV-Ray que muestra un cilindro color gris:

  1. /*
  2. Instituto Tecnologico de Zacatepec, Mor.
  3. Descripcion: Uso del objeto cylinder (cilindro) para dibujar los ejes X,Y,Z
  4. Author: Gonzalo Silverio
  5. Archivo: practica4.pov
  6. Tutorial PovRay: 3.2.3 Objeto Cilindro
  7. */
  8. #include «colors.inc»
  9. //Posicion de la camara sintetica
  10. camera {
  11. location <10,10,10>
  12. look_at <0,5,0>
  13. }
  14. //Definicion del objeto cilindro
  15. cylinder {
  16. <6,0,3>,
  17. <5,4,3>,
  18. 0.5
  19. pigment { color rgb<1,1,1> }
  20. }
  21. //A CONTINUACION SE VAN A DIBUJAR LOS 3 EJES TRIDIMENSIONALES
  22. //Dibujar el eje X
  23. cylinder {
  24. <0,0,0>,
  25. <20,0,0>,
  26. 0.1
  27. pigment { color Green}
  28. }
  29. //Dibujar el eje Y
  30. cylinder {
  31. <0,0,0>,
  32. <0,20,0>,
  33. 0.1
  34. pigment { color Green }
  35. }
  36. //Dibujar el eje Z
  37. cylinder {
  38. <0,0,0>,
  39. <0,0,20>,
  40. 0.1
  41. pigment {color Green }
  42. }
  43. // fuente de luz
  44. light_source { <8,6,6> color White }

Como se observa en el codigo e puesto la camara sintetica 10 unidades lejos del origen y he definido 3 cilindros de 20 unidades de largo en cada eje y un radio muy pequeño. Si alejaramos la camara por ejemplo a 30 unidades lejos del origen se veria donde terminan los cilindros pero la e puesto cerca para que esto de la impresion de los ejes X,Y y Z. La Imagen de la Escena que se genera es esta:

Renderizado de un objeto Cilindro

Renderizado de un objeto Cilindro

5.- OBJETO PLANO (plane)
Un plano en POV-Ray yo lo veo como un piso o techo (plano y) o como una pared (plano X y Z). Como se observa en la siguiente imagen hay dos maneras de especificar un plano; uno es con la sintaxis de vectores < , , >; mas claro para definir el plano X se hace con el vector <1,0,0>, para definir el plano Y se hace con el vector <0,1,0> o para definir el plano Z se hace con el vector <0,0,1>. Para abreviar esto; los desarrolladores de POV-Ray crearon un identificador para cada vector de tal modo que hay 3 identificadores llamados x,y y z. Ademas de especificar el plano se debe especificar un desplazamiento del plano en sistema de coordenadas, para el caso del plano X el desplazamiento es hacia la derecha (+) o a la izquierda (-), para el caso del plano Y el desplamiento es hacia arriba (+) o hacia abajo (-) y por ultimo para el caso del plano Z el desplamiento es hacia adentro (+) o hacia afuera (-). Una imagen dice mas que 1000 palabras:

Sintaxis del objeto Plano

Sintaxis del objeto Plano

Ejemplo de codigo fuente en POV-Ray que muestra el plano Y (agredrezado):

  1. /*
  2. Instituto Tecnologico de Zacatepec, Mor.
  3. Descripcion: Uso del objeto plane (plano)
  4. Author: Gonzalo Silverio
  5. Archivo: practica5.pov
  6. Tutorial PovRay: 3.2.4 Objeto Plano
  7. */
  8. #include «colors.inc»
  9. //Posicion de la camara sintetica
  10. camera {
  11. location <12,12,12>
  12. look_at <0,0,0>
  13. }
  14. //Mostrar el plano de X
  15. /*
  16. plane {
  17. <1,0,0>,-1
  18. //x,-1 Otra forma de definir este plano
  19. pigment {
  20. //checker color Red, color Blue
  21. color White
  22. }
  23. }
  24. */
  25. //Mostrar el plano de Y
  26. plane {
  27. y,1
  28. //<0,1,0>,-1 Otra forma de definir este plano
  29. pigment {
  30. checker color Red, color Yellow
  31. }
  32. }
  33. //Mostrar el plano de Z
  34. /*
  35. plane {
  36. <0,0,1>,1
  37. //z,1 Otra forma de definir este plano
  38. pigment {
  39. checker color Red, color White
  40. }
  41. }
  42. */
  43. //A CONTINUACION SE VAN A DIBUJAR LOS 3 EJES TRIDIMENSIONALES
  44. //Dibujar el eje X
  45. cylinder {
  46. <0,0,0>
  47. <20,0,0>
  48. 0.1
  49. pigment { color Green }
  50. }
  51. //Dibujar el eje Y
  52. cylinder {
  53. <0,0,0>
  54. <0,20,0>
  55. 0.1
  56. texture
  57. {
  58. pigment { color Green }
  59. }
  60. }
  61. //Dibujar el eje Z
  62. cylinder {
  63. <0,0,0>
  64. <0,0,20>
  65. 0.1
  66. texture
  67. {
  68. pigment { color Green }
  69. }
  70. }
  71. //fuente de luz
  72. light_source {
  73. <4,4,6> color White
  74. }
  75. //otra fuente de luz
  76. light_source {
  77. <0,3,3> color White
  78. }

Como ves; con agredrezado me refiero a que el plano esta formado por dos colores que se repiten en forma de cuadros dando la impresion de lejania o cercania. La Imagen de la Escena que se genera es esta si se ve como un piso ¿o no?:

Renderizado de un plano agedrezado (eje y)

Renderizado de un plano agedrezado (eje y)

…Si descomentamos las lineas 19-26 para mostrar el plano X y el codigo que muestra el plano del eje Z (lineas 39-46), el codigo se veria asi:

  1. /*
  2. Instituto Tecnologico de Zacatepec, Mor.
  3. Descripcion: Uso del objeto plane (plano)
  4. Author: Gonzalo Silverio
  5. Archivo: practica5.pov
  6. Tutorial PovRay: 3.2.4 Objeto Plano
  7. */
  8. #include «colors.inc»
  9. //Posicion de la camara sintetica
  10. camera {
  11. location <12,12,12>
  12. look_at <0,0,0>
  13. }
  14. //Mostrar el plano de X
  15. plane {
  16. <1,0,0>,1
  17. //x,-1 Otra forma de definir este plano
  18. pigment {
  19. //checker color Red, color Blue
  20. color White
  21. }
  22. }
  23. //Mostrar el plano de Y
  24. plane {
  25. y,1
  26. //<0,1,0>,-1 Otra forma de definir este plano
  27. pigment {
  28. checker color Red, color Yellow
  29. }
  30. }
  31. //Mostrar el plano de Z
  32. plane {
  33. <0,0,1>,1
  34. //z,1 Otra forma de definir este plano
  35. pigment {
  36. checker color Red, color White
  37. }
  38. }
  39. //A CONTINUACION SE VAN A DIBUJAR LOS 3 EJES TRIDIMENSIONALES
  40. //Dibujar el eje X
  41. cylinder {
  42. <0,0,0>
  43. <20,0,0>
  44. 0.1
  45. pigment { color Green }
  46. }
  47. //Dibujar el eje Y
  48. cylinder {
  49. <0,0,0>
  50. <0,20,0>
  51. 0.1
  52. texture
  53. {
  54. pigment { color Green }
  55. }
  56. }
  57. //Dibujar el eje Z
  58. cylinder {
  59. <0,0,0>
  60. <0,0,20>
  61. 0.1
  62. texture
  63. {
  64. pigment { color Green }
  65. }
  66. }
  67. //fuente de luz
  68. light_source {
  69. <4,4,6> color White
  70. }
  71. //otra fuente de luz
  72. light_source {
  73. <0,3,3> color White
  74. }

Y la Imagen de la Escena que se genera es esta:

Renderizado de los 3 planos 2 de ellos agedrezados (eje z y eje y). El eje x en color solido

Renderizado de los 3 planos 2 de ellos agedrezados (eje z y eje y). El eje x en color solido

6.- OBJETO TOROIDE (torus)
Y ya por ultimo la forma basica de POV-Ray que quiero mostrar es esta. El Toroide es una figura muy parecida a una rosquilla o ‘donita’. Creo que es la que tiene la sintaxis mas facil de todas las demas; pues solo se define especificando su radio externo y un espesor o grosor como lo he indicado en la siguiente imagen:

Sintaxis del objeto Toroide

Sintaxis del objeto Toroide

Ejemplo de codigo fuente en POV-Ray que muestra un toroide con centro en el origen y desplazado 2 unidades arriba en el je Y:

  1. /*
  2. Instituto Tecnologico de Zacatepec, Mor.
  3. Descripcion: Uso del objeto torus (toroide)
  4. Author: Gonzalo Silverio
  5. Archivo: practica6.pov
  6. Tutorial PovRay: 3.2.5 Objeto Toroide
  7. */
  8. #include «colors.inc»
  9. camera {
  10. location <12,12,12>
  11. look_at <0,0,0>
  12. }
  13. torus { 4, 1 // radio externo y grosor del toro
  14. translate 2*y //Trasladar 2 unidades en eje Y
  15. pigment { Blue }
  16. }
  17. //A CONTINUACION SE VAN A DIBUJAR LOS 3 EJES TRIDIMENSIONALES
  18. //Dibujar el eje X
  19. cylinder {
  20. <0,0,0>
  21. <20,0,0>
  22. 0.1
  23. pigment { color Green }
  24. }
  25. //Dibujar el eje Y
  26. cylinder {
  27. <0,0,0>
  28. <0,20,0>
  29. 0.1
  30. texture
  31. {
  32. pigment { color Green }
  33. }
  34. }
  35. //Dibujar el eje Z
  36. cylinder {
  37. <0,0,0>
  38. <0,0,20>
  39. 0.1
  40. texture
  41. {
  42. pigment { color Green }
  43. }
  44. }
  45. light_source {
  46. <6,6,6> color White
  47. }

La Imagen de la Escena que se genera es esta:

Renderizado de un objeto Toroide

Renderizado de un objeto Toroide

Uff al fin acabe, sinceramente si me tarde en acabar esta entrada del blog y ps espero que a alguien le sirva. Como siempre; si estas interesado en el codigo fuente basta con dejar tu e-mail para que te lo envie. Suerte !!

Como resaltar la sintaxis de codigo fuente usando la libreria GeSHi y PHP

Archivo de codigo HolaMundo.c al que GeSHi le ha resaltado la sintaxis

Archivo de codigo HolaMundo.c al que GeSHi le ha resaltado la sintaxis

En este articulo voi a describir que hice para resaltar la sintaxis del codigo fuente de arriba (HolaMundo.c) con ayuda de GeSHi; una libreria creada para este proposito. Con resaltar la sintaxis me refiero a que las palabras reservadas del lenguaje de programacion en cuestion son coloreadas, igualmente las cadenas con otro color, los comentarios, etc. Resaltar la sintaxis de cada palabra en forma manual seria tedioso y frustante es por eso que se a creado GeSHi.

Esta libreria esta escrita en PHP y puede resaltar la sintaxis del codigo fuente de muchos lenguajes de programacion como PHP, HTML, C, C++, Java, ASM (si, la del codigo ensamblador tambien!), etc. hasta la fecha son mas de 100 lenguajes soportados y siguen en aumento. Muchos sitios web (foros, blogs, hostings, etc) usan Geshi para resaltar el codigo porque esta libreria es gratuita y facil de usar (aunque algunos digan lo contrario). En lo personal yo la conoci cuando tenia mi pagina web personal en el host gratuito http://www.000webhost.com pues ahi al momento de abrir un archivo (html ho php por ejemplo) para verlo el sistema me lo mostraba muy bonito y eso me llamo la atencion y empece a investigar sobre como se hacia eso ya que mi idea era publicar algunos de mis programas y codigo fuente en mi pagina web personal (todavia no conocia a wordpress.com).

Actualmente e migrado mi pagina web personal a otro servidor gratuito llamado http://www.260mb.com, pero sinceramente le doy muuy poco mantenimiento a dicha pagina: pues ahora que he conocido wordpress.com me ha fascinado y definitivamente me gusta mas porque me hace las cosas mas faciles. Esa pagina todavia la mantengo por que ahi aprendi muucho sobre HTML (las etiquetas basicas, csss, frames, etc) y de PHP+MySQL (sesiones, enviar correos, paso de informacion de una pagina a otra, etc); de lo cual poco a poco ire subiendo a este blog.
Y digo poco a poco porque que feo es crecer!, ahora tengo muchas actividades que realizar durante el dia y aunque soy soltero las materias de la carrera me consumen todo el tiempo. pero a veces (como ahora mismo ) me doy mis escapadas de la realidad y me meto a este cyber espacio a publicar cosillas que me parecen super interesantes. Bueno pongo un pantallazo de mi pagina, nada mas para que se den una idea de que sencilla era y si quieren visitarla pues aqui esta www.gonzasilve.260mb, a lo mejor algo les gusta, solo pidanlo .:

Mi pagina web Personal

Mi pagina web Personal

Creo que ya me estoy saliendo demasiado del tema, vamos a continuar pues con lo de la libreria GeSHi…

Origenes de GeSHi

GeSHi (Generic Syntax Highlighter) inicialmente nacio como una idea de tener un resaltador de sintaxis generico para el sistema de foros phpBB.
Comunidad oficial de PHPBB en español
Pero ha evolucionado y ahora es totalmente independiente de éste. La razon por la que el resaltador GeSHi es tan popular es que es extremadamente personalizable para todos los gustos, incluso los mismos usuarios le podemos añadir nuevos lenguajes para resaltar ya que es muy facil añadir uno, tambien se puede indicar a GeSHi que numere las lineas de codigo, o personalizar el color de las palabras clave, etc.

Requisitos de instalacion de GeSHi

  • Tener un interprete PHP (4.3.0 o superior)
  • Aproximadamente 5 MB de espacio en disco.

Como se puede ver, los requisitos son solamente dos y muy faciles de cumplir con ellos.

¿Donde puedo obtener Geshi?

Geshi se puede obtener desde su pagina oficial http://qbnz.com/highlighter/, en la seccion de descargas. Desde este sitio tambien se puede acceder a la documentacion en linea de GeSHi (desafortunadamente solo en ingles), yo personalmente ya me pase por ahi y lei un poco, no toda por que es mucha informacion y yo solo necesitaba resaltar la sintaxis de algunos codigos de mi pagina web para mostrarlos en la seccion de articulos.

Instalacion de GeSHi

Creo que ya es suficiente de tanta teoria, ahora paso a explicar como usar la libreria. Voi a ir describiendo por pasos para que sea mas facil:

  1. Descargar GeSHi. Obviamente, primero que nada nos dirigimos a la pagina oficial de GeSHi y damos clicken la seccion Downloads, la cual nos va a redireccionar a sourceforge.net donde podremos elegir la version de GeSHi que queremos. A la fecha actual en que estoy escribiendo esta entrada, la version mas reciente de GeSHi es la 1.0.8.10.
  2. Al dar click en el link de descarga (download) se abre un cuadro de dialogo para indicar donde queremos realizar la descarga (depende de la configuracion de tu navegador). En esta ventana lo hubicamos en algun lugar dentro de nuestro disco duro y daremos click al boton Guardar . Yo por ejemplo en Linux Ubuntu tengo instalado a PHP como modulo de Apache (es decir mi maquina es un servidor) y la pagina donde se alojan las paginas web de mis servidor Apache es /usr/local/php/servidor_web/htdocs. Asi que descargue GeSHi en /usr/local/php/servidor_web/htdocs (entonces GeSHi quedo en /usr/local/php/servidor_web/htdocs/geshi-1.0.8.10.tar.gz). Si tu no tienes a tu computadora como servidor pero ya te creaste una cuenta en algun hosting gratuito por ejemplo http://www.tuwebhostgratis.algo/miusuario puedes descargar GeSHi en cualquier lugar de tu PC (en tu escritorio por ejemplo, sigue leyendo). El archivo pesa como 880 Kb.
  3. Descomprimir/Desempaquetar GeSHi En mi caso yo en ubuntu solo doy click derecho al archivo y elegir Extraer aqui. Entonces ahora la libreria GeSHi esta en /usr/local/php/servidor_web/htdocs.

    Si tu usas algun otro software y no te permite hacer esto ten cuidado y no vayas a crear una carpeta para geshi ya que GeSHi ya viene comprimido en una carpeta (lo digo nada mas que nada para que no te vayas a confundir en los siguientes pasos de este articulo). En tu caso si tienes hosting gratuito (ej. http://www.tuwebhostgratis.algo/miusuario) descomprime el archivo ahi mismo en tu escritorio ( o donde lo hayas descargado) y sube la carpeta geshi completa a tu hosting gratuito con algun programa FTP (como FileZilla o SmartFTP), entonces tu libreria GeSHi quedaria en http://www.tuwebhostgratis.algo/miusuario/geshi). En mi caso de Ubuntu GeSHi quedo en /usr/local/php/servidor_web/htdocs/geshi. Esto es todo, ahora la libreria esta lista para ser usada. El archivo ya descomprimido ocupa como 5 Mb.

Resaltar tu primer codigo usando GeSHi.

Ahora vamos a hacer dos ejemplos muy sencillos para ver como se usa esta libreria, para esto voi a suponer que usas Linux Ubuntu y tienes el interprete PHP como modulo de apache ejecutandose en tu maquina. Empecemos

EJEMPLO #1; RESALTAR UN TROZO DE CODIGO
En este primer ejemplo voi a resaltar un trozo de codigo de java y en especifico voi a resaltar el metodo java que calcula el factorial de un numero.

  1. El siguiente archivo pruebaGeshi1.php debes colocarlo en la carpeta raiz de tu servidor web (en el mismo nivel donde tienes la carpeta geshi), es decir, en mi caso en /usr/local/php/servidor_web/htdocs/pruebaGeshi1.php:
    <!--
               Instituto Tecnologico de Zacatepec, Morelos
    Descripcion:    Genera un Documento HTML que resalta la sintaxis de un trozo  
    				de codigo con ayuda de la libreria GeSHi.
    Author:         Gonzalo Silverio  gonzasilve@gmail.com
    Archivo:        pruebaGeshi1.php
    -->
    <HTML>
       <HEAD>
            <TITLE>Usando la libreria GeSHi I </TITLE>
       </HEAD>
    <!--Poner Fondo negro a la pagina web -->
       <BODY bgcolor="black">
       <br><br>
    	<?php
    	 require('geshi/geshi.php');            /* Incluir la libreria del resaltador de sintaxis Geshi*/
    	// Asignamos a una variable el codigo al cual queremos resaltar su sintaxis
      $trozo_codigo = "public static int factorial (int n)
    {
      int result=1;
      while(n>1)
      {
        result=result*n;
        n=n-1;
      }
      return result;
    }";
    	//Indicar el lenguaje de programacion a resaltar  
      $lenguaje="java";
    //Instanciar clase GeSHi y le pasamos el codigo a resaltar y el lenguaje
      $migeshi= & new GeSHi($trozo_codigo,$lenguaje);
    	// Activar la numeracion de lineas
      $migeshi->enable_line_numbers(GESHI_FANCY_LINE_NUMBERS, true); 
     	// cambiar estilo de numeros de lines   y el fondo
      $migeshi->set_line_style('background: yellow', 'background: #DFEEF3', true);   
    	?>
    <!-- A continuacion metemos dentro de una tabla HTML el codigo ya resaltado
    		la funcion parse_code() se la clase GeSHi permite mostrar en el navegador
    		el codigo fuente ya resaltado.
     -->
       <table width = "90%"  align="center" cellpadding="0" cellspacing="0" bgcolor="white" border=0 bordercolor="#000000">
         <tr><td><?php echo $migeshi->parse_code(); ?></td></tr>
       </table>
    <br>
       </BODY>
    </HTML>
    

    Como vez en los comentarios e puesto lo que hace cada cosa. Una linea que me parece muy importante y que me gustaria mencionar es la linea donde se incluye a la libreria GeSHi, es decir en la linea:

     require('geshi/geshi.php');
    

    Es en esta linea donde indicamos que la libreria GeSHi esta ubicada dentro dentro de una carpeta llamada geshi. Menciono esto porque un error muy comun es trata de incluir a la libreria erroneamente asi:

     require('geshi.php');
    

    ho colocar el archivo .php dentro de la carpeta de geshi e intentar incluir la libreria con require(‘geshi/geshi.php’), siendo que la libreria esta ai mismo donde esta el archivo .php (espero que me hayas entendido).

  2. Probar el ejemplo. A continuacion abre un navegador y en la barra de direcciones escribes http://localhost/pruebaGeshi1.php y presionas la tecla ENTER, te debe aparecer algo como esto:
    Trozo de codigo java al que GeSHi le a resaltado la sintaxis

    Trozo de codigo java al que GeSHi le a resaltado la sintaxis

Como ves yo e indicado el puerto en la barra de direcciones porque con ese puerto configure a mi apache cuando lo instale, pero a ti te deberia funcionar sin especificar el puerto si hiciste una instalacion tipica (por defecto el navegador usa el puerto 80, y no es necesario indicarlo). Bueno ahora vamos con el 2do ejemplo:

EJEMPLO #2; RESALTAR UN ARCHIVO DE CODIGO FUENTE
En este 2do ejemplo voi a mostrar como resaltar un todo un archivo de codigo fuente y en especifico voi a resaltar un archivo de codigo fuente de C; el clasico Hola Mundo.

  1. El siguiente archivo HolaMundo.c colocalo en la raiz de tu servidor web (en mi caso en /usr/local/servidor_web/htdocs). Este archivo es el que GeSHi va a leer y le va a resaltar su sintaxis:
    /* 
      Descripcion:	El programa clasico del "Hola mundo"; muestra un mensaje en pantalla 
      Author:		Gonzalo Silverio   gonzasilve@gmail.com
      Archivo:		HolaMundo.c
    */
    
    /* Inclusion de librerias estandar */
    #include<stdio.h>
    #include<conio.h>
    
    int main(void)			/* Rutina principal */
    {
     clrscr();				/* Limpiar la pantalla */
     printf("Hola mundo!\n");	/* Muestra mensaje y salta de linea*/
     getch();				/*Espera a que el usuario presiona 1 tecla*/
     return 0;				/* Termina el programa normalmente*/
    }
    
  2. El siguiente archivo PruebaGeshi2.php colocalo en la raiz de tu servidor web (en mi caso en /usr/local/servidor_web/htdocs). Este es el que leera el archivo anterior (HolaMundo.c), le resaltara la sintaxis y lo mostrara en el navegador. En los comentarios explico cada cosa:
    <!--
               Instituto Tecnologico de Zacatepec, Morelos
    Descripcion:    Genera un Documento HTML que resalta la sintaxis del codigo fuente 
    				de un archivo con ayuda de la libreria GeSHi y lo muestra en el navegador.
    Author:         Gonzalo Silverio  gonzasilve@gmail.com
    Archivo:        pruebaGeshi2.php
    -->
    <HTML>
       <HEAD>
            <TITLE>Usando la libreria GeSHi II </TITLE>
       </HEAD>
       <!-- Fondo de pagina negro -->
       <BODY bgcolor="black">
       <br><br>
    	<?php
    	 require('geshi/geshi.php');            /* Incluir la libreria del resaltador de sintaxis Geshi*/
    	$archivo = "HolaMundo.c";               /*Indicar cual archivo abrir*/
    	/*abrimos el archivo en modo lectura*/  
      $punteroArch = fopen($archivo,'r');         
    	/* leemos el archivo */
      $codigo = fread($punteroArch, filesize($archivo));       
    	/*Indicar el lenguaje de programacion a resaltar*/  
      $lenguaje="c";	
    	/*Instanciamos la clase, le pasamos el codigo a resaltar y el lenguaje*/
      $migeshi= & new GeSHi($codigo,$lenguaje);
    	/* Activar la numeracion de lineas */
      $migeshi->enable_line_numbers(GESHI_FANCY_LINE_NUMBERS, true);    
     	/* cambiar estilo de numeros de lineas*/  
      $migeshi->set_line_style('background: yellow', 'background: #DFEEF3', true);
    	?>
    <!-- A continuacion metemos dentro de una tabla HTML el codigo ya resaltado
    		la funcion parse_code() se la clase GeSHi permite mostrar en el navegador
    		el codigo fuente ya resaltado. -->
       <table width = "90%"  align="center" cellpadding="0" cellspacing="0" bgcolor="white" border=0 bordercolor="#000000">
         <tr><td><?php echo $migeshi->parse_code(); ?></td></tr>
       </table>
    	<?php
      fclose($punteroArch);   /* Cerrar el archivo abierto */
    	?>
    <br><br>
       </table>
       </BODY>
    </HTML>
    

    Nuevamente vuelve a abrir un navegador y en la barra de direcciones escribe la direccion http://localhost/pruebaGeshi2.php y presionas la tecla ENTER, te debe aparecer algo como la imagen que esta al principio de esta entrada de blog, bueno la pongo otra vez:

    Archivo de codigo HolaMundo.c al que GeSHi le ha resaltado la sintaxis

    Archivo de codigo HolaMundo.c al que GeSHi le ha resaltado la sintaxis

    Hasta aqui le voi a dejar y espero que me hayas entendido la mayoria. Si tienes dudas o quieres los fuentes puedes dejar tu comentario con tu e-mail y con gusto si puedo te ayudo a hacer funcionar esto. hasta pronto.

Introduccion a Bash y el Hola Mundo!

Una breve introduccion a Bash.
¿QUE ES Bash?
Es la abreviatura de Bourne-Again Shell, es un shell de Unix. Estaras pensando «¿Y que es un shell?», te contesto: Un shell es un programa intermediario entre un usuario y el Sistema operativo instalado en su computadora. Es algo asi como una forma de comunicacion, a travez de un shell podemos darle ordenes a nuestro sistema operativo para que las realice (y si es necesario que nos devuelva resultados).

Para poder darle esas ordenes al S.O. debemos hacerlo usando un lenguaje especial (algo asi como en un lenguaje de programacion), la sintaxis de ese lenguaje es lo que me interesa, por que pienso que si uno conoce la sintaxis correcta pues ya tiene una gran parte avanzada en la programacion Bash. pero dejame decirte que en Unix hay infinidad de shells, pero uno de los mas conocidos, usados y probados es el Bash. Cada Shell tiene sus particularidades y caracteristicas que los hacen diferentes a los otros, por supuesto cada quien puede escoger las shell que mas le agrade, en lo particular a mi me gusta mas Bash porque en Linux por lo que veo se usa mucho en los scripts del sistema, en los scripts de instalacion, etc. y ¿por algo sera no?.Bueno sin mas rollo voi a empezar con una introduccion a la programacion Bash.

Ejemplo de un scrip para Bash
Como es tipico vamos a hacer el «Hola mundo», por tradicion, (sino se pierde, jajajj). Lo vamos a hacer por pasos y con ejemplos; asi aprendemos mas rapido:

RESUMEN CORTO PARA CREAR Y EJECUTAR EL SCRIPT hola_mundo.sh

  1. Crear un archivo.
  2. Escribir el script y guardar el archivo con la extension .sh.
  3. Abrir una terminal.
  4. Entrar a la carpeta donde esta el script y dar permisos de ejecucion.
  5. Ejecutar el archivo.

PASO POR PASO PARA CREAR Y EJECUTAR EL SCRIPT hola_mundo.sh

  1. Crear un archivo. Con el editor que prefieras (gedit por ejemplo) crea un nuevo archivo en el escritorio y agregale lo siguiente:
    #!/bin/bash
    #Descripcion: Clasico script que muestra un saludo en pantalla
    #Author: Gonzalo Silverio -> gonzasilve@gmail.com
    #Archivo: hola_mundo.sh
    echo Hola Mundo bash
    
  2. Si lo deseas puedes quitar los datos de la descripcion, autor y nombre del archivo pues esos son solo comentarios. Pero te aconsejo poner siempre un encabezado tus programas. Lo que realmente importa del script es la primera linea:

    #!/bin/bash
    

    que sirve para indicar donde esta la shell a usar en el script. Y la ultima linea:

    echo Hola Mundo bash
    

    La cual sirve para mostrar un mensaje con el comando echo.

  3. Guardar el archivo con la extension .sh. Ahora guarda el archivo anterior con el nombre hola_mundo.sh en el escritorio (para que sea mas facil encontrarlo).
  4. Abrir una terminal. Ahora abre una terminal, para esto presiona las teclas <ALT>+<F2> y escribe gnome-terminal y pulsa la tecla <ENTER>.
    Ventana Ejecutar... de GNome

    Ventana Ejecutar... de GNome

    Se presenta la terminal (linea de comandos):

    Terminal de GNome

    Terminal de GNome

  5. Entrar a la carpeta donde esta el script y dar permisos de ejecucion. En esta ventana primeramente vamos a entrar en la carpeta del escritorio introduciendo la orden cd Escritorio y ahora vamos a aplicar permisos de ejecucion al archivo creado en el paso 1. En la terminal escribir chmod +x hola_mundo.sh, y presionar la tecla <ENTER>, una imagen dice mas que mil palabras:
  6. Dando permisos de ejecucion a hola_mundo.sh

    Dando permisos de ejecucion a hola_mundo.sh

  7. Ejecutar el script. Ahora vamos a ejecutar el script escribiendo el comando sh hola_mundo.sh o escribiendo ./hola_mundo.sh y pulsa <ENTER>; las dos formas son validas y ejecutan el script, aka el resultado:
    Ejecucion del script HolaMundo.sh

    v

Bueno eso es todo y espero que le hayas entendido algo. Los ejemplos que ire mostrando en otras entradas del blog mostraran cosas basicas de la programacion bash; como usar variables, leer un valor del teclado, etc. cosas muy basicas y al final mostrare un ejemplo mas completo. Hasta pronto y si quieres el script ya sabes, deja tu mail y te lo mando, nos vemos.

Servlet Hola Mundo!

Antes que cualquier cosa, quiero que sepas que si quieres ejecutar este ejemplo de servlet en tu computadora debes tener instalado Apache Tomcat, aca en mi otro blog hice un manual sobre como se instala y se configura Apache Tomcat. Y otra cosa, sino sabes nada de Servlets te recomiendo leer algo introductorio respuesto al tema, por que aqui solo muestro el codigo sin nada de teoria.

Yo en mi caso tengo en mi compu:
Version de la JVM: jdk1.6.0_20
Version de Apache tomcat-6.0.29
Kernel de ubuntu: 2.6.31-22
Arquitectura del equipo: i686
ruta de instalacion de Apache tomcat: /usr/local/apache-tomcat-6.0.29/

la verdad al momento de escribir esto ando aqui medio aburridon y pues se ocurrio repasar algo de servlets, quiero dejar el clasiquisimo Hola Mundo en Version Servlet. Aca el codigo muy sencillo:

/*
                   Instituto Tecnologico de Zacatepec
Descripcion: Servlet que muestra el clasico Hola Mundo.
Author:      Gonzalo Silverio  gonzasilve@gmail.como
Fecha:        12/08/2010
Archivo:     HolaMundo.java
Compilar con:  javac HolaMundo.java
*/

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HolaMundo extends HttpServlet
{
    public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws IOException, ServletException
    {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out.println("<html>");
        out.println("<head>");
        out.println("<title>Clasico Hola mundo!</title>");
        out.println("</head>");
        out.println("<body>");
        out.println("<h1>Hola mundo de servlets!</h1>");
        out.println("</body>");
        out.println("</html>");
    }
}

A continuacion la compilacion del codigo en una terminal de ubuntu:

Compilacion de servlet HolaMundo

Compilacion de servlet HolaMundo

Antes de abrirlo en el navegador no olvidar dar de alta este servlet en el archivo web.xml, es decir, darlo de alta en el archivo /usr/local/apache-tomcat-6.0.29/webapps/ROOT/WEB-INF/web.xml, agregando estas lineas:

	<!-- SERVLET DE HOLA MUNDO -->
	<servlet>
		<servlet-name>HolaMundo</servlet-name>
		<servlet-class>HolaMundo</servlet-class>
	</servlet>

	<!-- Standard Action Servlet Mapping -->
	<servlet-mapping>
		<servlet-name>HolaMundo</servlet-name>
		<url-pattern>/HolaMundo</url-pattern>
	</servlet-mapping>

ahora si voi a mostrarlo ejecutandose en Firefox de ubuntu (jejeje, un poco disfrazado):

Servlet HolaMundo ejecutandose.

Servlet HolaMundo ejecutandose.

bueno despues seguire subiendo mas cosas de Servlets, pues me llaman mucho la atencion, espero te sirva si eres novato como yo.

bye

Hola mundo en C Sharp

Sencillo programa que muestra el tipico Hola Mundo en C Sharp

public class Practica1
{
    public static void Main()
    {
        System.Console.WriteLine("hola mundo C Sharp!");
        System.Console.ReadKey();
    }
}

Con la instruccion

System.Console.ReadKey();

El sistema se queda esperando por una tecla; lo que en realidad lo puse para hacer una pausa en el programa. Aca un pantallazo de la compilacion y ejecucion del programa:

Hola Mundo en C Sharp

Como se ve en la imagen, la compilacion es muy sencilla y es muy similar a como se hace en cualquiero otro lenguaje pero antes yo ya configure mi PATH para que pueda compilar desde cualquier ruta de mi PC.

hasta pronto

hasta pronto

<a href=»http://picasaweb.google.com/lh/photo/jdBZ6DlWvb64rvxa8_tgaQ?feat=embedwebsite»><img src=»http://lh5.ggpht.com/_tBw4ZyvFB38/TDpUnugkLCI/AAAAAAAAAi4/aUOHQk8KA-o/s800/hola_mundo-csharp.gif» /></a>