Mis experiencias con Visual C++ 2005 Express

Hola a todos!

Desde hace bastante tiempo estoy desarrollando un juego en PC usando C++ y OpenGL. (¡No, no me tiréis piedras, no usar DirectX tiene una explicación!). Así que este fin de semana, después de desesperarme con el Dev-CPP, decidí cambiarme y usar el Visual C++ 2005 Express.

La razón de no usar DirectX es que para dominar el mundo conseguir la mayor distribución posible necesito que el juego sea multiplataforma. De ahí que use OpenGL, SDL y C++. 😛

Ya tenía experiencia con el Visual C++ 6 y con el Visual C++ 2003, así que sabía que lo que me iba a encontrar era conocido, y probablemente podría aumentar mi productividad.

También tenía algunas dudas sobre si hacer el cambio o no, sobre todo después de leer los posts de Rafael Ontivero, pero como este proyecto es propio, consideré que no corría riesgos por probarlo.

A la hora de configurar el entorno de desarrollo, todo ha ido como la seda. Directorios para includes, librerías, etc… Estupendamente. Terreno conocido. 🙂

Hay un par de cosas que no me han gustado de esta versión:

  • A la hora de compilar, siempre genera la versión Release.
  • Cuando pulsas F5, siempre genera la versión Debug.
  • No he visto forma humana de hacer refactoring.
  • El Intellisense funciona cuando quiere, y sólo sobre lo que hubiese ya compilado al cargar el proyecto. Posteriores compilaciones añadiendo métodos, propiedades, etc, etc, no hacen que se refresque el Intellisense (o eso me ha parecido).

Si lo pienso fríamente, tiene sentido. Pero no me deja elegir. El combo para elegir la configuración de generación de assemblies está deshabilitado, y la verdad es que no se si está capado para la versión Express (en cuyo caso, sería mejor que no apareciese en absoluto) o que soy un zote y no he encontrado aún la forma de habilitarlo (esto será lo más probable…)

En cuanto al rendimiento de la aplicación, no he notado mejora alguna, pero tampoco pérdida alguna… Teniendo en cuenta que el trabajo duro lo hace OpenGL, es lo razonable 😉

Pero claro, el poder disponer de una herramienta como ésta, y gratuita, es algo muy, muy interesante. A aquellos frikis como yo que quieran usar C++ para proyectos personales, se lo recomiendo encarecidamente. Pero sólo en el caso de que sean aplicaciones no .NET, ya que la productividad de C# sigue estando a años luz que la de C++ (al menos para mí).

Saludos!

Cómo evitar la limitación de anchura en los formularios Windows (o poner la tuya propia)

En el blog de Metaemotion hay un artículo interesante (en castellano) en el que se detalla cómo se puede eliminar la restricción de tamaño mínimo que tienen impuestas por defecto las ventanas de Windows.

Lo que no se comenta en ese artículo es que podemos aprovechar esa misma técnica para cambiar la restricción de tamaño mínimo cuando esta esté entre 0 y 112 píxeles (para el resto de tamaños se puede usar la propiedad MinimumSize de la clase System.Windows.Forms.Form).

La lectura es más que recomendable 😉

Saludos!

Creando un sistema de reglas sencillo, pero flexible (IA)

Hola!

Curioseando un poco por la red, he encontrado un artículo muy interesante en #flipcode, en el que el autor comenta cómo se puede crear un sistema de reglas utilizando .NET que tome decisiones basándose en una máquina de estados.

Realmente esto no es novedoso, pero me ha llamado la atención el sistema tan sencillo que ha creado el autor para componer reglas básicas (lo que en el artículo llama primitivas).

Así que si tenéis que hacer una máquina de estados, os recomiendo que lo peguéis una ojeada.

Saludos!

UPDATE: Obviamente, esto no os será interesante si estáis utilizando Workflow Foundation… Pero por desgracia no todo el mundo puede usar .NET 3.0 😉

Invocando páginas ASP.NET con procesos pesados y no morir en el intento (y II)

A petición de espinete escribo una segunda parte del artículo, en el que adjunto el código fuente de ejemplo con lo que se proponía en el artículo anterior.

En el código adjunto se pueden ver las siguientes clases:

  • Trabajador: Esta clase es la que tiene implementado el proceso pesado. En nuestro caso, simplemente irá desde un número especificado como mínimo hasta el máximo, esperando un segundo en cada iteración.
  • GestionTrabajadores: Esta clase es el singleton al que se refiere el artículo anterior. Se encarga de gestionar una tabla hash en la que las instancias de la clase Trabajador se identifican mediante un Guid.

Además, podemos ver que hay tres páginas en el proyecto Web:

  • Inicial.aspx: En esta página se crea una instancia de la clase Trabajador, se la inicializa, y se la añade a la clase GestionTrabajadores, tras haber creado un Guid para identificarla. Posteriormente se reenvía al usuario a la siguiente página, pasando el Guid de la petición actual.
  • EnProceso.aspx: En esta página se muestra el progreso de la petición actual. Si se detecta que la petición ha finalizado, se reenvía al usuario a la siguiente página.
  • Terminado.aspx: En esta página simplemente se muestra un mensaje que indica que el procesamiento ha finalizado.

Obviamente, las mejoras que se le pueden hacer a este ejemplo son innumerables, pero aquí dejo un par de ideas, a ver si alguien se anima y las realiza, aportándolas para la comunidad:

  • La página Inicial.aspx, en vez de notificar el GUID de la petición, podría enviarnos a la página EnProceso.aspx, y en esta página que se muestren los diferentes trabajos que hay en curso. Para ello bastaría con proporcionar un enumerador a la clase GestionTrabajadores para recorrer la tabla hash.
  • La página EnProceso.aspx podría utilizar AJAX para no tener que refrescarse cada dos segundos.

Bueno, pues esto es todo por hoy.

Saludos!

00011101

Hola!


Ya es oficial. Hoy soy un año más viejo que ayer. ¿A que no adivináis cuántos cumplo? [:P]


Aprovecho para dar las gracias a todos los lectores de Geeks.ms. Muchas gracias por estar ahí, y aportar comentarios que enriquecen muchísimo los contenidos de los blogs.


Saludos!