Tutoriales

Un vistazo al .dpr

Cuando creamos un projecto nuevo en Delphi el IDE automáticamente crea un archivo con extensión dpr (delphi project) y, si el proyecto contiene forms, un archivo dfm (delphi form) por cada form del proyecto (y también una unidad .pas por cada uno).

El archivo con extensión dpr constituye un archivo de proyecto de Delphi. En el se encuentra recogido el código de inicialización de la aplicación así como todas las unidades y formularios del proyecto.

Delphi esta construido sobre el lenguaje de programación pascal, o más concretamente sobre Object Pascal que incluye el paradigma de objetos al lenguaje Pascal. Por ello conserva la organización inicial de pascal en casi su totalidad.

Por más que el IDE de desarrollo nos facilite las cosas y parezca que pasan 'mágicamente', lo cierto es que todo, absolutamente todo, lo que se programa desde delphi acaba siendo un programa de Object Pascal. Por ello lo primero que encontramos en el dpr es la sentencia program NombreDePrograma; seguida de las declaraciónes uses (las unidades y formularios que aparecen en el project viewer (del menu view, project viewer) se leen de aqui) seguido de la declaración de variables, declaración de funciones (normalmente ninguna puesto que el IDE nunca mete funciones aqui) y por último un begin y un end dentro de los cuales se crean los formularios de la aplicación.

Medir el tiempo de ejecución de un fragmento de código

Introducción

En determinadas ocasiones necesitamos saber el tiempo que tarda una determinada rutina en ejecutar generalmente por que creemos que un determinado fragmento esta tardando más de lo esperado y queremos saber donde está el cuello de botella o por que tenemos alguna aplicación que tiene establecidos unas limitaciones de rendimiento que queremos cumplir.

Hay varias funciones en el la libreria kernel32.dll de windows que pueden ayudarnos en nuestra tarea. GetTickCount (y GetTickCount64) y la combinación de QueryPerformanceCounter y QueryPerformanceFrecuency.

Singletons en Delphi

Cuando programas en delphi y has programado en un lenguaje como C++ o C# que permiten clases estáticas llegas a echarlas un poco de menos puesto que son un recurso muy util.

¿Qué es una clase estática?

Una clase estática es, simplificando, una clase que proporciona una serie de metodos pero que no necesita ser instanciada, es decir, no necesitas crear un objeto de la clase para poder llamar a sus metodos.

En realidad en c# está separación llega al nivel de metodo, es decir, es posible definir determinados metodos de una clase como estáticos y otros no, de forma que se pueda llamar a dichos metodos sin necesidad de instanciar la clase, más o menos en C# viene a ser algo así:

public class MiClaseEstatica
{
  private int m_value;

  public MiClaseEstatica()
  {
    m_value = 0;
  }


  public int Value(){ return m_value; }

  public static int RestoDeDivisionConBucle(int numerador, int denominador)
  {
    int resultado = numerador;
    while (resultado < denominador)
    {
      resultado = resultado - denominador;
    }

    return resultado;
  }
}

De está forma la clase tiene dos funciones una de las cuales es estática y otra no, de forma que podemos hacer una invocación como:

MiClaseEstatica.RestoDeDivisionConBucle(30,4);

pero no podríamos invocar la función Value sin crear una instancia de la clase.

Managed DirectX. Introducción y Tutorial I.

Introducción

DirectX. Si has llegado a este artículo por que quieres programar tu propio Quake 4 en tus ratos libres deja que te saque de tu error, jamás vas a poder hacerlo. Antiguamente los juegos los programaban uno o dos programadores que trabajaban unos meses y conseguían crear un juego (mejor o peor). Actualmente los juegos los programan equipos relativamente grandes de personas con diversas especialidades (no hace falta solo programar sino también diseño gráfico, composiciones musicales, efectos de sonido, etc).

¿Entonces que voy a poder hacer? Bueno, quizá no consigas programar un juego de última generación pero quizá si puedas programar algún pequeño juego, conseguir un simulador físico convincente o sencillamente impresionar a las visitas (y de paso mejorar tu curriculum). Además programar gráficos en 3D es bastante gratificante (una vez las cosas van funcionando) puesto que el resultado es más "gráfico".

Managed DirectX se traduce como DirectX "Asistido" que me parece un termino muy feo en español así que simpre utilizaré el termino ingles que me suena mucho más apropiado.

Tipos de Datos. Pipe (Tubería)

Introducción

Un pipe o tubería es una estructura de datos que representa un canal de comunicación con una estructura de tipo FIFO (primero en entrar, primero en salir).

La denominación de tubería (en ingles pipe) viene del concepto de que los datos que introducimos o empujamos por un extremo de la tubería "aparecen" en el extremo contrario. Si realizamos una operación de lectura en la tubería y no hay datos en esta el hilo llamante se quedará bloqueado hasta que haya datos. Si realizamos una escritura en la tubería y esta ha alcanzado su tamaño máximo el proceso que desea escribir en la tubería se quedará bloqueado hasta que algun lector saque un dato.

Obtener el tiempo de CPU de procesos y tareas

Introducción

Lo primero que tenemos que considerar al intentar obtener los tiempos de uso de CPU de los procesos de Windows y de sus tareas es el hecho de que windows no está, mágicamente, calculando dicho porcentaje.

En lugar de mantener un porcentaje que no le serviría para nada, Windows, para cada proceso, guarda el tiempo de CPU que este ha estado en ejecución en modo usuario, el tiempo que ha estado en ejecución en modo sistema y el instante de creación del proceso.

Dados estos datos no es posible obtener directamente el consumo de CPU instantaneo de un proceso. Podremos obtener el consumo medio de uso de CPU por parte del proceso haciendo (TiempoMedio = TiempoUsuario + TiempoSistema / TiempoActual - TiempoCreación). Podríamos decir que la medida del consumo instantaneo de CPU es como el potencial eléctrico, no existe XD.