Entradas

Mostrando las entradas con la etiqueta programación

Seguidor de archivos en Python

Imagen
20200608102855 Seguidor de archivos en Python ¿Qué es el seguidor de archivos? Un seguidor de archivos file_follower = FileFollower(my_file, pattern) busca dentro de un archivo my_file las líneas de texto que activen una expresión regular pattern . Por defecto, file_follower comienza su búsqueda al final de my_file , por lo que sólo buscará dentro de las líneas nuevas que otra aplicación escriba en my_file . Por ejemplo, si al moment en que ejecutemos file_follower.start() el archivo my_file tuviera el contenido presentado en el listado 1, y pattern=[a - z]{3}[0 - 9]{3} : entonces file_follower sólo buscará líneas que contengan al menos una palabra formada por tres letras minúsculas y tres números después de la línea que dice "start of search" (cuarta línea). start of the file abc123 xyz987 start of search Listado 1. Contenido inicial de my_file antes de crear activar el seguidor de archivos file_follower . Cada vez que file_follower encuentra una línea que a...

Un vistazo a las plantillas de función de C++

Imagen
20200605104652 Un vistazo a las plantillas de función de C++ Las plantillas de funciones son una herramienta para programar funciones versátiles. Y eso es muy bueno, porque cuando una función es muy versátil la podemos volver a usar muchas veces y para muchos propósitos. Un ejemplo concreto Supongamos que queremos hacer una plantilla de función que compare cuál de dos números con el mismo tipo de almacenamiento es mayor. De forma específica, queremos utilizar nuestra plantilla con dos tipos de almacenamiento: enteros sin signo de 8 bits uint8_t , y números decimales de 32 bits float . Si las plantillas no existieran, tendríamos que escribir dos funciones diferentes: una para cada tipo de almacenamiento (listado 1). Pero con las plantillas, podemos escribir una sola función (listado 2). #include <cstdio> #include <cstdint> uint8_t cual_es_mayor_uint8(uint8_t x, uint8_t y) { return (x > y) ? x : y; } float cual_es_mayor_float(float x, float y) { re...

PyFilesystem: una interfaz, diferentes sistemas de archivos

Imagen
20200526115742 PyFilesystem: una interfaz, diferentes sistemas de archivos Las librerías estándar de Python incluyen funciones para majenar archivos. Entre ellas, está la función open para abrir archivos. También, dentro de su librería os cuenta con un conjunto de funciones para manejar directorios como mkdir , listdir , o las utilerías dentro de su submódulo os.path . Sin embargo, sólo podemos utilizar las funciones de la librería estándar para manejar archivos y directorios presentes (o "montados") en nuestro sistema de archivos local (en nuestra computadora). Para acceder a archivos y directorios en unidades externas, en nuestra red loca, o en la nube, tendríamos que echar mano de otras funciones. Aunque podríamos resolver el problema con la librería estándar, nos implicaría desarrollar nuestras propias librerías para cada tipo de sistema de archivos que pretendamos accesar. Afortunadamente, alguien más ya hizo el trabajo de crear una interfaz que sirve para acced...

Rapidez de escritura en archivos: "write" contra "mmap"

Imagen
20200526173139 Rapidez de escritura en archivos: "write" contra "mmap" Este es un experimento para comparar la velocidad de dos métodos para escribir archivos: mediante la función write , y mapeando el archivo en la memoria de la aplicación. La segunda podemos hacerla con alguna de las funciones para escribir en memoria (como mset , o mcpy ) sobre algún archivo mapeado en la memoria de la aplicación con ayuda de mmap . El experimento consiste en crear dos programas que escriban un archivo de un tamaño arbitrario llenos con el caracter 0x00 (caracter nulo), cada programa con uno de los dos métodos mencionados en el párrafo anterior. Los programas toman dos parámetros de entrada: el nombre del archivo que van a escribir, y la cantidad de mega-bytes que van a escribir en los archivos. La aplicación con write El listado 1 contiene nuestra aplicación que utiliza la función write para escribir el archivo. Llamamos a este archivo write_performance.c . Su pri...

Instrumentación de funciones en C

Imagen
20200526091908 Instrumentación de funciones en C No podemos mejorar aquello que no podemos medir. Y con frecuencia, los programadores tenemos dificultades en medir el desempeño de nuestros programas en tiempo de ejecución. En este apunte, exploraremos una herramienta que puede ayudarnos a medir algunas características dinámicas de nuestro programa: caracterizar el stack, recurrencia, el árbol de llamadas entre funciones, etcétera. Supongamos que tenemos una función llamada función objetivo . Y que además, para nuestro propio provecho como desarrolladores, queremos agregar dos funciones función prefijo y función sufijo que se ejecuten antes y después de la función objetivo . Hay una variedad de opciones para lograr este objetivo. En este documento nos enfocamos en las funciones de instrumentación. Otra forma de lograrlo podría ser con macros, o guardas de tipo ifdef . Las funciones de instrumentación son dos funciones que desempeñan el papel de la función prefijo y función sufijo ...