June 2008

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.

Curriculum Vitae

Información personal

  • Nombre: Jorge Córdoba Simón
  • Nacionalidad: Española
  • Lugar de residencia actual: Madrid, Spain
  • Fecha de nacimiento: October the 3rd, 1980
  • e-mail: jorge(at)stackframe(dot)org

Formación

  • Ingeniería Superior de Informatica. Facultad de Informática. Universidad Politécnica de Madrid
  • FIRST Certificate in English. Cambridge University.
  • C# .NET. Alahambra Eidos.

Lenguajes

  • Español. Lengua materna
  • Inglés. Avanzado hablado y escrito (nivel de conversación, técnico)

Experiencia profesional

1/06/2008 - Actualidad

  • Proyectos:
    • Grupo Servicios de sincronización. Nucleo del sistema de comunicaciones FIS-HE. Varios lenguajes</li>
  • Puntos de interés:
    • Preparación de especificaciones del sistema de comunicaciones. Sistema DOORS
    • Discusión y aprobación de especificaciones con el cliente (Berna, Suiza)
    • Desarrollo y gestión de la implementación. Delphi y .NET.

21/12/2008 - 31/05/2008. Isdefe. Secatet

  • Proyectos:
    • Sicet. (Sistema de catalogación para el ejercito de tierra). Desarrollo y mantenimiento. Delphi
    • Sicea. (Sistema de catalogación para el ejercito de aire). Desarrollo. Asp .NET
  • Puntos de interés:
    • Uso intensivo de Ajax basado en la funcionalidad proporcionada por jQuery
    • Creación de varios controles de usuario para encapsular ciertos comportamientos comunes

08/03/2004 - 20/12/2008. Amper Programas. Departamento de software.

  • Proyectos (Ejercito Suizo y Ejercito Español):
    • BAT. Sistema experto de análisis táctico, basado en reglas. Arquitectura y desarrollo. Delphi
    • IO. Sistema de réplica distribuido. Desarrollo y mantenimiento. Delphi
  • Puntos de interés:
    • Desarrollo del sistema experto usando una adaptación del modelo RETE
    • Desarrollo multihilo usando Delphi (proporcionando alta escalabilidad y rápido tiempo de respuesta)
    • Desarrollo de distintas estructuras y clases para manejar la sincronización entre hilos y el acceso rápido a datos (sistema de caché, pipeline de trabajo, balanceador de tareas, factoría de tareas)
    • Codificación de algunas secciones en ensamblador puro para mejorar la eficiciencia
    • Desarrollo de TCP/IP y UDP

03/08/2003 - 03/07/2004. Amper programas. Departamento de software. Beca

  • Proyectos:
    • Aplicación de administración y configuración de usuarios y redes.Visual Basic para aplicaciones
    • Intranet. Desarrollo y mantenimiento. Asp, JavaScript.

Otro trabajo como freelance

  • Systema de control, mantenimiento y login de un cibercafé. Arquitectura y desarrollo. Delphi
  • Framework the plugins open source. Arquitectura y desarrollo. C# .NET: Framework que permite el desarrollo basado en plugins en cualquier aplicación compatible con .NET utilizando una metodología de hooks y servicios.
  • Página web de una inmobiliaria. PHP y JavaScript.

Aplicación de gestión para una empresa de ascensores Borland C++ Contribuciones al sistema de gestión de contenidos open source Drupal Analizador léxico/sintáctico genérico de una pasada. Delphi: Analizador genérico de una pasada para cualquier lenguaje definido mediante un conjunto de reglas.

Otra información

Carnet de conducir.

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.

Multihilo. Espacios de memoria, código reentrante y código threadsafe.

Introducción

Este artículo sirve de introducción al concepto de espacio de memoria de un proceso para su aplicación al concepto de multihilo de forma que solo da una introducción a los distintos segmentos de memoria y a aspectos como la visibilidad para centrarse en el porque y el cuando de la sincronización en el acceso a datos.

En la mayoría de los sistemas operativos (y para lo que nos ocupa en Windows y en Linux) todo proceso tiene varios segmentos en memoria, en concreto son el segmento de código, el segmento de datos, el segmento de pila y el segmento de heap.

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.