19 Enero 2007

Primeros pasos con Ogre 3D 1.0.6

Bueno el ogre es un engine para trabajar con 3D (creo que funciona ademas de para C++ para Python) libre, bueno para mas informacion el articulo de ogre 3D en la wikipedia inglesa.

Pues no se si me vuelto muy sibarita por usar librerias como Gtk o SDL pero me aconstumbrado a una buena documentacion :P, y estos del Ogre pese a que usan wiki parece que mantener documentacion de antiguas versiones, marcar las cosas deprecadas con deprecated parece que esto no va con ellos :P, porque es muy sufrido trabajar e incluso comenzar a aprender Ogre con unas librerias obsoletas como las 1.0.6 (que son las que vienen en los repositorios oficiales de Ubuntu). Y quiza algun puñado de ejemplos tontunos si que seria interesante, asique aqui va un poco mis primeros pasos.

Quiza el primer cambio es que:

SceneManager* mSceneManager = mRoot->createSceneManager(ST_GENERIC,"sceneManager");

en la version antigua es:

SceneManager* mSceneManager = mRoot->getSceneManager(ST_GENERIC);

Por lo demas no avanzado tanto como para seguir informando de como va el tema. Aunque para compilar es otro suplicio, saque la informacion mezclando lo que saque de un foro, el wiki y conceptos previos y es tal que asi:
En ubuntu y Debian hay un comando muy interesante que se llamag pkg-config y este vale para muchas cosas pero en nuestro caso se puede usar para sacar informacion de como se compila con OGRE y en mi caso sale esto:

pkg-config --libs OGRE
-lOgreMain

pkg-config --cflags OGRE
-DEXT_HASH -I/usr/include/OGRE

Ya tenemos opciones del compilador para el ogre y una linea de compilador es tal que asi:

g++ pruebaOgre.cpp -o pruebaOgre -lOgreMain -DEXT_HASH -I/usr/include/OGRE

Y bueno aqui el codigo fuente tontuno que funciona…no hace nada solo compila pero al menos se ve algo, la ventana de eleccion del sistema de render:

#include <Ogre.h>
#include <OgreErrorDialog.h>

using namespace Ogre;
using namespace std;

int main(int, char **)
{
    try
    {
        Root* mRoot = new Root("","","");

        if (!mRoot->restoreConfig())
        {
            if (!mRoot->showConfigDialog())
            {
                return 1;
            }
        }
        RenderWindow* mWindow = mRoot->initialise(true,"Application");

        SceneManager* mSceneManager = mRoot->getSceneManager(ST_GENERIC);
        Camera* mCamera = mSceneManager->createCamera("Camera");
        mCamera->setPosition(Vector3(0.0f,0.0f,500.0f));
        mCamera->lookAt(Vector3(0.0f,0.0f,0.0f));
        mCamera->setNearClipDistance(5.0f);
        mCamera->setFarClipDistance(5000.0f);

        Viewport* mViewport = mWindow->addViewport(mCamera);
        mViewport->setBackgroundColour(ColourValue(0.0f,0.0f,0.0f));
        mCamera->setAspectRatio(Real(mViewport->getActualWidth())
/Real(mViewport->getActualHeight()));

        mRoot->startRendering();

        delete mRoot;

    } catch (Exception& e)
    {
        ErrorDialog* dlg = PlatformManager::getSingleton().createErrorDialog();
        dlg->display(e.getFullDescription());
        delete dlg;
        return 1;
    }
    return 0;
}

El ejemplo lo he sacado de Xadeck on Ogre: Tutorial 1 simplificando un poco (un poco bastante xD) el codigo.

Y aqui teneis el resultado, la pantalla de ogre para elegir el sistema de “rendeo”.
Ogre Linux

Y bueno hasta aqui he llegado en este dia y medio de comenzar con Ogre…aun recuerdo cuando empeze con las SDL….y aun recuerdo cuando empeze con Basic xD.

A ver si avanzo algo mas y voy comunicandolo aqui, mas o menos el siguiente paso sera enterarse un poco de la sintaxis de Ogre.

Por: MD | Consejos, Trucos y Tutoriales | Comentarios (0) | Referencias ()

7 Enero 2007

Links interesantes dentro de w3c.es

Si algo bueno dio el premio asturias, dentro de todo lo malo que ha dado y los chanchullos gordos que tiene a lo premio planeta o peor, siendo mas que un premio un acuerdo a la sombra de los medios de comunicacion.

Bueno si algo bueno dio, es que en españa tengamos una sede del w3c que es el consorcio/fundacion en relacion a las tecnologias de internet, y bueno a parte de los pocos puestos de trabajo…a ver si hay suerte y sueltan mas puestos que la gente tenemos la mala constumbre de comer, aparte de eso es que ya poco a poco (muy poco a poco porque hace un mes han metido mas) estan metiendo tutoriales, documentacion en relacion a las tecnologias de internet.

Y bueno de la pagina se pueden destacar:

Por: MD | Consejos, Trucos y Tutoriales | Comentarios (0) | Referencias ()

30 Diciembre 2006

Lista comandos apt-*

Siempre se me olvida alguno y via meneame encontre la lista en Recetario APT, y bueno pues la repego aqui para los vaguetes ;) :

  • apt-get update
    Actualiza el listado de paquetes disponibles.
  • apt-get check
    Comprueba que todo ha ido bien tras la utilización de apt-get update.
  • apt-get install lista_de_paquetes
    Instala los programas deseados.
  • apt-get –reinstall install paquete
    Reinstala un programa.
  • apt-get upgrade
    Actualiza el sistema.
  • apt-get dist-upgrade
    Actualización más profunda.
  • apt-get remove lista_de_paquetes
    Desinstala un paquete.
  • apt-get –purge remove lista_de_paquetes
    Desinstala un paquete y elimina los archivos de configuración.
  • apt-get -f install
    Para resolver dependencias.
  • apt-get clean
    Para limpiar los paquetes descargados e instalados.
  • apt-get autoclean
    Para limpiar los paquetes viejos que ya no se usan.
  • apt-cache search nombre paquete
    Para buscar un paquete determinado.
  • apt-get source paquete
    Descarga archivos fuente.
  • apt-get build-dep paquete
    Configura las dependencias de construcción para paquetes fuente.
  • apt-get dselect-upgrade
    Sigue las selecciones de dselect.
  • apt-show-versions (–u)
    Ideal para mezclar y conocer que paquetes hay instalados, y actualizaciones selectivas.
  • apt-cache show paquete
    Obtener más información de un paquete específico (da información de tanto paquete instalado como del que no).
  • apt-cache showpkg paquete
    Más información aún.
  • apt-cache depends paquete
    Para saber de que paquete depende.
  • apt-file search filemane
    Para encontrar el nombre de un paquete desde un fichero.
  • apt-file list paquete
    Lista el contenido de un paquete.
  • apt-file update
    Para mantener al día esta función.
  • apt-get autoremove
    Para mantener el sistema limpio de librerías que no hacen falta. Cuando instalamos un programa es posible que con él se instalen algunas dependencias. Si luego borramos ese programa en cuestion, dichas dependencias quedaran obsoletas. Para borrar paquetes que no se necesitan.
  • apt-get check
    Para diagnosticar: Actualiza la caché de paquetes (/var/cache/apt/pkgcache.bin), crear un nuevo árbol de dependencias y busca dependencias imposibles de resolver.
  • apt-cache unmet
    Muestra un resumen de las dependencias no satisfechas en la caché de paquetes.
  • apt-cache pkgnames –generate
    Muestra una lista de todo lo que tenemos instalado en el sistema. La salida es rapidísima, por lo que mejor sería enviarla a un archivo para poder revisarla tranquilamente editándolo (apt-cache pkgnames –generate > archivo). Lo de –generate es opcional, pero parece que optimiza la cosa un poco. También se le puede poner un prefijo: apt-cache pkgnames lib –generate nos listará todos los paquetes de nuestro sistema que comiencen con la cadena “lib”.
  • OPCIONES
    • apt-get –s
      Simula una acción.
    • apt-get –d
      Sólo descarga.
    • apt-get –y
      No pregunta y asuma que si a todo.
    • apt-get –u
      Muestra paquetes actualizados.
    • apt-get -h
      Muestra texto de ayuda.
    • apt-get -q
      Salida registrable - sin indicador de progreso.
    • apt-get -qq
      Sin salida, excepto si hay errores.
    • apt-get -f
      Intenta continuar sí la comprobación de integridad falla.
    • apt-get -m
      Intenta continuar si los archivos no son localizables.
    • apt-get -b
      Construye el paquete fuente después de obtenerlo.
    • apt-get -V
      Muesta números de versión detallados.
    • apt-get -c=?
      Lee este archivo de configuración.
    • apt-get -o=?
      Establece una opción de configuración arbitraria, p. ej. apt-get -o dir::cache=/tmp

Por: MD | Consejos, Trucos y Tutoriales | Comentarios (2) | Referencias ()

16 Diciembre 2006

Escribir caracter fin de fichero desde teclado en GNU/Linux

Como es algo que siempre se me olvida lo pongo por aqui (despues de haber buscado entre libros y googleando) por si algun otro se le olvida tambien ;), es simple solo es:

CONTROL+d

Esto vale para cuando estas trasteando con la entrada estandar como si fuera un fichero, en plan redireccionando los descriptores de archivo o cuando usas lex a lo bruto.

Y bueno ya de paso otro comando de GNU/Linux de la consola que siempre se me olvida y puedes dejar flipados a gente de cierta edad mas que con beryl…yo he tenido vecinas de mi abuela que me han preguntando por el resultado del comando, y el comando es:

cal <mes> <año>

Este devuelve bien formateadito una hoja de calendario del mes y el año que le pases (si solo le das el año te devuelve las 12), y el uso para dejar flipada a la gente de cierta edad es decirle que puedes calcular el dia de la semana en que nacieron o en que se casaron o dias de estos a recordar.

Por: MD | Consejos, Trucos y Tutoriales | Comentarios (0) | Referencias ()

21 Noviembre 2006

Numeros Narcisistas (y el codigo en C cutre pero que funciona)

Via un blog perdido en el historial del firefox, he econtrado una curiosidad matemática de estas curiosas. Los Numeros Narcisistas que no son numeros pijos, sino numeros que la suma de sus cifras elevadas a numero de cifras que tienen es igual al numero. Un ejemplo segun el cacho codigo fuente que he hecho en poco menos de una hora para probar la curiosidad son:
Numero narcisista: 1=1
1^1=1
Numero narcisista: 2=2
2^1=2
Numero narcisista: 3=3
3^1=3
Numero narcisista: 4=4
4^1=4
Numero narcisista: 5=5
5^1=5
Numero narcisista: 6=6
6^1=6
Numero narcisista: 7=7
7^1=7
Numero narcisista: 8=8
8^1=8
Numero narcisista: 9=9
9^1=9
Numero narcisista: 153=153
3^3=27
5^3=125
1^3=1
Numero narcisista: 370=370
0^3=0
7^3=343
3^3=27
Numero narcisista: 371=371
1^3=1
7^3=343
3^3=27
Numero narcisista: 407=407
7^3=343
0^3=0
4^3=64
Numero narcisista: 1634=1634
4^4=256
3^4=81
6^4=1296
1^4=1

Y bueno para finalizar el codigo fuente asi cutrecillo pero sobrado para probar esta curiosidad sin llegar a numeros astronomicos (se puede mejorar y optimizar pero para haberlo hecho en dos patadas funciona que es lo que interesaba):

/*
Numeros narcisistas
*/

#include <stdio.h>
#include <math.h>

int main(void)
{
    int n,i;
    int elevado;
    int suma;
    int numCifras,cifra;
    int modulo,divisor;

    for(n=1;n<3000;n++)
    {
     suma=0;
     numCifras=(int)log10((float)n)+1;
     for(i=1;i<=numCifras;i++)
     {
      modulo=(int)pow( 10,(float)i);
      divisor=(int)pow( 10,(float)(i-1));
      cifra=(n%modulo)/divisor;
      elevado=(int)pow((float)cifra,(float)numCifras);
      suma=suma+elevado;
     }
     if(suma==n)
     {
      printf("Numero narcisista: %i=%i\n",n,suma);
      suma=0;
      numCifras=(int)log10((float)n)+1;
      for(i=1;i<=numCifras;i++)
      {
       modulo=(int)pow( 10,(float)i);
       divisor=(int)pow( 10,(float)(i-1));
       cifra=(n%modulo)/divisor;
       elevado=(int)pow((float)cifra,(float)numCifras);
       printf("%i^%i=%i\n",cifra,numCifras,elevado);
       suma=suma+elevado;
      }
     }
    }

    getchar();
    getchar();

    return 0;
}

Por: MD | Consejos, Trucos y Tutoriales | Comentarios (0) | Referencias ()

2 Noviembre 2006

Poner “bien” el boton de cerrar pestañas del Firefox2

Simple y directo.

En Firefox (no en el m$ iexploter :P) escribir en la barra de direcciones about:config, va ha salir una pagina con las configuraciones de tu Firefox entonces buscar la línea que pone browser.tabs.closeButtons hacer doble clic para cambiar el 1 por 3, y ya esta.

Por: MD | Consejos, Trucos y Tutoriales | Comentarios (0) | Referencias ()

22 Septiembre 2006

Minitutorial conectarse IRC via Gaim

Estando en aburrido curso se me a ocurrido conectarme al irc en el gaim de windows que tengo instalado (si estoy con m$windows xD ). y buscando los servidores de irc-hispano me dado cuenta que nadie ha hecho un minitutorial para conectarse a las redes irc via Gaim, asique bueno voy a dejar algo para la humanidad aunque sea poca cosa.

Un minitutorial sencillito sobre todo para la gente que le gusta esto de la informatica (y el software libre tambien pues mejor que mejor) y esta comenzando. De las imagenes que salgan, algunas estan reducidas para adaptarse al formato de la pagina asique clickar encima para verla mas grande, hay cosas emborronadas porque son datos personales como el nick que uso en el irc habitualmente, pero sin problemas. Y bueno los pasos:

  • Tener instalado el Gaim en tu Sistema Operativo (m$Windows, Linux…), sino Pagina Gaim.
  • Y porque Gaim, por ser un cliente muy liviano, poco escandaloso…es que el amsn y el me$egüer de micro$oft son con muchos colores chillones, mucha mierdecita y tonteria cantosa. Ademas el Gaim de ser multiplataforma, es multiprotocolo. Quiza lo que hecho en falta es un plugin para bloquear (creo que alguno habia…tengo que mirar…y sino haber si aprendo a programar plugins para el gaim :) ) las asquerosos privados de publicidad que te sueltan en irc-hispano.
  • Pues lo primero añadir una cuenta/conexion al irc, en la ventana principal y en el menu -> Cuentas -> añadir/Editar. Y os saldra la ventana de la imagen, como veis yo uso varias cuentas a la vez y de distintos protocolos (ventajas del gaim ^_^). Pulsais el boton añadir.
  • Tendreis ahora esta ventana o parecida que muestro. Y los campos se rellenan tal que en protocolo se elige IRC, nombre de usuario el que se quiera, apodo el que se quiera y contraseña si es necesario (cuando tienes tu apodo/nick registrado por ejemplo). En servidor segun a que red te quieres conectar, tienes variados como los del irc-hispano (lista con variados) o FreeNode que tiene los siguientes servidores (servidores de freenode). Asique por ejemplo en servidor se podria poner atreides.irc-hispano.org para que se conecte a la red del irc-hispano.
  • Pulsar boton de guardar, aparecera en la ventana anterior de cuentas y si tiene la casilla de habilitado con el tick pues estas conectado. Sino clickale tambien.
  • Y ahora para conectarse a los canales hay dos maneras, si sabes el nombre del canal y si no:
    • Si los sabes el nombre del canal, vas en la ventana principal del Gaim y menu -> amigos -> Unirse a un chat. Y os saltara la ventana que tengo en la imagen. En cuenta elegis la cuenta del irc que hicisteis anteriormente y escribis el nombre del canal en el cuadro de texto y la Contraseña si es necesario. Y darle al boton de unirse
    • Si no conoces el nombre, pues en la ventana principal en el menu -> herramientas -> Listar Salas…como en la imagen que veis debajo.
      Despues tendreis la ventana que sale a continuacion….bueno parecida sin ningun canal, elegis la cuenta de irc que creamos antes y pulsais obtener la lista. Esto tardara un ratito. Y os dara de resultado pues algo parecido a lo de la imagen, salvo que lo puedes ordenar por nombre, numero de usuarios, clickando en nombre o usuarios. Y nada elegis el que mas os interese y le dais doble click o lo marcais en azul y boton de unirse.

Y ya esta asi de sencillo es conectarse a las redes de irc via Gaim.

Por: MD | Consejos, Trucos y Tutoriales | Comentarios (0) | Referencias ()

20 Septiembre 2006

Aprendiendo Python (parte 3) - Cosas interesantes en la vision general

Ante todo esto son pequeños apuntes de Python, os recomendaria no seguirme a mi y seguir algun tutorial decente (este de Guía de aprendizaje de Python es muy bueno). Estas notas, pequeños apuntes y tal que vaya dejando son cosas interesantes que me van surgiendo y que no pretenden ser un tutorial al uso, sino puntos de interes utiles para apoyar el seguimiento de otros tutoriales. Y van dentro de mi punto de vista por eso destacare cosejas que me parecen destacadas para mi y omitire otras que subjetivamente no me interesan…no obstante siempre se puede añadir algo si los comentaristas lo creen oportuno ;).

Entonces visto esto, cosas que estoy viendo interesantes de Python:

  • No hay bloques de codigo separados con “{ }” o “begin end” tipicos o topico. Y la forma de separar bloques de codigo como funciones y procedimientos es con tabuladores.
  • No hay definicion previa de varibles y parametros, mas o menos lo que pasa en todos los lenguajes de script.
  • No hay diferencias entre procedimientos y funciones, si la funcion/procedimiento no retorna nada retorna None.

Y de momento, una vision general…bueno muy general ;).

Articulos anteriores de Aprendiendo Python:

Por: MD | Consejos, Trucos y Tutoriales | Comentarios (4) | Referencias ()

Aprendiendo Python (parte 2) - Mas links de interes

Despues del curso aburrido en que estoy llegue a casa vi en mis marcadores que tenia otros links interesantes sobre el tema de Python…de otras veces que me propuse seriamente aprender Python ;) .

Bueno los links de interes:

Articulos anteriores de Aprendiendo Python:

Por: MD | Consejos, Trucos y Tutoriales | Comentarios (0) | Referencias ()

19 Septiembre 2006

Aprendiendo Python (parte 1)

Bueno estoy en un curso aburrido y tengo mucho tiempo libre en el curso porque es bastante simplito el curso, asique en vez de dedicarlo a vaguear viendo tonterias de internet, me planteado firmemente pues aprender un poquejo de Python. Por cierto me encanta mucho mas el logo anterior que tenia, que veis aqui en plan caricatura que el logo corporativo y superserio que tiene ahora, pero bueno que se le va a hacer. Y bueno no se cuanto avanzare en mi aprendizaje porque tengo que ser consecuente con el profesor y atender cuando toque atender.

Y bueno pues ya que tengo la herramienta del blog, pues voy a ir poniendo mi proceso de aprendizaje por si sirve de ayuda a alguien mas o de punto de referencia, y existe un viejo proverbio chino que dice “el que enseña, aprende dos veces”:

  • Toma de contacto: recomiendo los siguientes links:
  • Bajarse e instalar el Python si no estas en un GNU/Linux porque en este normalmente esta instalado, sino usar el sistema de instalacion que traiga para instalarlo.
  • Yo voy a seguir el siguiente tutorial porque es bastante interesante y asequible (y creo que es el que comenze en sus tiempos cuando me puse anteriormente en serio con Python :P ), es Inmersión en Python.
  • Python es un lenguaje interpretado, y orientado a Objetos aunque se puede programar de forma estructurada clasica.
  • Algo de mi cosecha propia habra a lo largo de la muestra de mi camino de aprendizaje.
  • Y mas o menos los itos u objetivos que me autoplanteado, es llegar a manejar con soltura python, programar con soltura y multiplataforma Gtk y trastear con las SDL y un poquito de OpenGL (como en C, en mis tiempos ;) ). Si consigo eso mas o menos pues sentire que aprovechado estas aburridas horas.

Y bueno ¿Porque Python? Y porque no, creo que es un lenguaje bastante potente y multiplataforma….que por desgracia es lo que mas prima algunas veces…, el sistema de librerias me recuerda vagamente al de Java en plan “que es lo que tengo…tengo de to” y no esta carente de polemica como paso en la noticia de meneame Un navegador web con 25 líneas de código en Python pero esto es como cocinar, algunas veces tienes ganas de encender el horno estarte tus horas disfrutanto de una cocina tradicional, elaborada hablar con tu compañero/a de cocina de temas variados mientras realizas la comida y otras veces quieres una pizza precocinada arreglarla un poco con tomate natural y alguna especias (infotruco patrocinado por El libro de cocina del Anarkista). Pues en programacion idem algunas veces te gusta darle a pelo a C e incluso echarle moral teniendo lineas de ensamblador por ahi tiradas, y otras veces quieres algo menos laborioso y tirar de librerias para hacer arbolitos y tal y en ese punto estan lenguajes como Python, Java…

Bueno pues ha pasado el tiempo y todavia no picado nada de codigo Python, por escribir el articulo para Sandia pero bueno me he divertido y espero haber aclarado algo el tema de Python.

Por: MD | Consejos, Trucos y Tutoriales | Comentarios (2) | Referencias ()