Mostrar la fecha de compilación

Un dato importante cuando se está investigando un fallo o probando una nueva funcionalidad en un software es saber sobre qué versión del código estamos trabajando. Además del número de versión (más adecuado para versiones públicas) o el número de compilación, una forma de identificar la versión actual del código es usando la fecha de compilación del mismo. Este dato tiene varias ventajas inherentes: no necesita de ningún contador que haya que incrementar, viene de fábrica, y es natural usarlo tanto en conversaciones (en la compilación de hace dos días…) como al buscar el commit relacionado.

C y C++ proveen de tres macros relacionadas que son de utilidad:

  • __DATE__: devuelve la fecha de compilación del fichero en formato

Sigue leyendo →

Lo estás agarrando mal

Muchos recordarán el antennagate, cuando el diseño de antena exterior del iPhone 4 mostró un pequeño fallo: el usuario era capaz de cortocircuitar las antenas con su mano al sujetarlo de determinada forma (una forma no precisamente extraña), degradando la recepción hasta el punto de no tener señal en algunas ocasiones. El problema era gordo, aunque también es cierto que tampoco era para empezar la tercera guerra mundial como muchos quisieron hacer. Yo mismo tuve el iPhone 4 y el fallo se convertía en problema básicamente en zonas de baja recepción; no quito peso al fallo, pero si a la publicidad que se le hizo.

Pero vayamos a lo que interesa, lo que dijo Steve Jobs al respecto: «Lo …

Sigue leyendo →

Máxima resolución de webcam en OpenCV

Desde que comencé a usar ordenadores allá por 1992 (😱), siempre me pareció que el lado más oscuro e incomprensible de la informática se llamaba impresoras. Esta opinión cambió ligeramente desde que añadimos soporte para webcams en nuestras aplicaciones; ¡ahora hay un segundo lado oscuro e incomprensible! Cada webcam es, como se dice coloquialmente, de su padre y de su madre, con ajustes y especificaciones propios y casi únicos. Para poner peor las cosas, OpenCV (la biblioteca por antonomasia para procesamiento de imágenes) es bastante básica, o mejor dicho, genérica, en cuanto a captura de vídeo se refiere. En este artículo nos ocuparemos de un aspecto en específico: las resoluciones soportadas, o mejor dicho, la máxima resolución que una …

Sigue leyendo →

Atributo maybe_unused (C++17)

En algunos ejemplos mostrados en entradas anteriores ha aparecido el uso del atributo [[maybe_unused]] que igual no os suena aún. Los atributos son una característica del C++ moderno que permiten indicar al compilar información acerca del código, con el fin de optimizar determinados fragmentos, introducir restricciones o generar el código de una forma específica. Los atributos vienen a unificar alternativas ya existentes pero que eran propias de cada compilador, generando código no portable u obligando a usar macros y detección del compilador. Una lista completa de los atributos de C++ puede encontrarse en cppreference.com.

En nuestro caso, [[maybe_unused]] es un atributo introducido en C++17, que indica al compilador que no genere warnings de no-uso para el identificador asociado. Esto …

Sigue leyendo →

Iterando sobre QMaps

Los que trabajáis normalmente con Qt me entenderéis la siguiente expresión: en lo que respecta a contenedores de datos (bueno, y en muchos otros también), Qt es casi un lenguaje propio, sigue su propia filosofía y adapta C++ a ella. Por ejemplo:

  • Uso extensivo del COW (Copy-On-Write) para reducir la carga asociada a la copia de objetos.
  • Compatibilidad parcial con los contenedores de la biblioteca estándar y sus algoritmos (por ejemplo, el método size de todos los contenedores Qt devuelve un entero con signo, en lugar de un size_t como hacen los contenedores estándar). Esto se ve además en cantidad de métodos duplicados para ser compatibles con algoritmos de la biblioteca estándar (véase QList::push_back y QList::append).
  • Compatibilidad

Sigue leyendo →

Correspondencia de monitores entre Qt y Windows

Hace poco modifiqué el módulo de splash screens (en Qt) para mostrar la imagen en el mismo monitor en el que se mostraría la aplicación. Esto implica conocer en qué monitor se va a mostrar la aplicación, calcular el tamaño del escritorio, escalar la imagen, entre otras.

Qt ofrece una forma muy amigable de solicitar información sobre las pantallas disponibles mediante QApplication::screens(), la cual devuelve una lista de QScreens desde donde podemos consultar datos como la resolución y el factor de escala, por lo que los requisitos de dimensionado estaban cubiertos: sólo quedaba por conocer el monitor en el que se iba a mostrar la aplicación.

Nótese que este módulo se usa tanto en aplicaciones creadas en Qt como …

Sigue leyendo →