Hola gente!!! Encantado de comenzar a conocerlos.
Antes que nada, quería contarles que soy novato tanto en lo que tiene que ver con el foro como en la programación, aunque vengo siguiéndolos desde hace un tiempo. Así que porfa, tengan paciencia si meto la pata, y no duden en señalarlo cuando pase que estamos para aprender.
Mi problema:
Hace mucho que vengo "coqueteando" con la programación, leyendo kilómetros de manuales e intentando descifrar cómo funcionan exactamente los programas, yendo línea por línea. El punto es que me he dado cuenta que a menos que empiece a poner en práctica algo de toda esa teoría, jamás voy a aprender bien. Mucho menos tratándose de c/c++.
Así que me decidí a hacer algo: quiero aprender haciendo, escribiendo algo con lo que me sienta realmente a gusto, un proyecto que me fascine, pero que a su vez sea útil y devuelva algo a la comunidad Open Source. Es aquí donde me pongo en pesado y pido ayuda
Proyecto: https://github.com/schnaader/precomp-cpp/commits/master (La compresión de datos es lo mío)
Precomp es una pieza de software excepcional. Básicamente, hace posible lo imposible: comprimir información que ya se encuentra comprimida. ¿Cómo lo hace? En pocas palabras, deshace el proceso de compresión (métodos viejos y débiles como LZW, deflate o bzip2) y vuelve a empaquetar los datos con un algoritmo más nuevo y potente como LZMA. A su vez, utiliza librerías ajenas para recomprimir imágenes JPG y MP3, que de otro modo tampoco podrían comprimirse demasiado. La trampa consiste en hace todo eso de manera tal que al revertir el proceso, los datos obtenidos sean exactamente iguales a los originales (https://es.wikipedia.org/wiki/Algoritmo_de_compresi%C3%B3n_sin_p%C3%A9rdida). Sólo un pequeño número de programas hacen eso actualmente, de los cuales todos son experimentales y el más completo es este. (PowerArchiver está planeando incluir una funcionalidad de recompresión en su siguiente version)
Tarea: Francamente, precomp está en una etapa temprana de desarrollo (0.4.6) y le vendrían bien muchas mejoras. Tengo varias ideas en mente, y todas ellas son feasibles, pero creo que la más fácil de implementar es esta: Conseguir que direccione los datos procesados hacia la salida estándar, y pueda leer, al menos cuando "descomprime" o restaura, desde la entrada estándar. Para eso habría que redireccionar la interfaz hacia stderr y modificar el parser de la línea de comandos para que admita algo así como:
en lugar de la opción actual que es:
Esto es necesario porque la principal utilidad de esta herramienta no es comprimir con LZMA sino "preparar" los datos para utilizar otra herramienta después. Esa herramienta puede ser cualquier compresor en línea de comandos.
Ayuda???
Quiero comprender cómo es el flujo de datos en un programa c++. La estructura interna de precomp es demasiado compleja para estudiarla en detalle por ahora, porque analiza el fichero de entrada en varios niveles o "recursion depth" y utiliza librerías de terceros, pero por ahora me conformaría con entender cómo se transforma la salida de todo ese proceso en un fichero de disco rígido, y cómo lo podemos redirigir hacia stdin/out. Es decir, la última parte del proceso.
¿Por dónde empiezo a mirar? ¿Existe una función común a todo programa que se encargue de manejar su salida de datos? ¿O es cuestión de recorrer todo el código y modificar una a una las funciones? Cualquier ayudita será agradecida. Aunque sea apuntarme en la dirección correcta.
Muchas gracias desde ya! Y si pueden poner algún código de ejemplo tanto mejor
Antes que nada, quería contarles que soy novato tanto en lo que tiene que ver con el foro como en la programación, aunque vengo siguiéndolos desde hace un tiempo. Así que porfa, tengan paciencia si meto la pata, y no duden en señalarlo cuando pase que estamos para aprender.
Mi problema:
Hace mucho que vengo "coqueteando" con la programación, leyendo kilómetros de manuales e intentando descifrar cómo funcionan exactamente los programas, yendo línea por línea. El punto es que me he dado cuenta que a menos que empiece a poner en práctica algo de toda esa teoría, jamás voy a aprender bien. Mucho menos tratándose de c/c++.
Así que me decidí a hacer algo: quiero aprender haciendo, escribiendo algo con lo que me sienta realmente a gusto, un proyecto que me fascine, pero que a su vez sea útil y devuelva algo a la comunidad Open Source. Es aquí donde me pongo en pesado y pido ayuda
Proyecto: https://github.com/schnaader/precomp-cpp/commits/master (La compresión de datos es lo mío)
Precomp es una pieza de software excepcional. Básicamente, hace posible lo imposible: comprimir información que ya se encuentra comprimida. ¿Cómo lo hace? En pocas palabras, deshace el proceso de compresión (métodos viejos y débiles como LZW, deflate o bzip2) y vuelve a empaquetar los datos con un algoritmo más nuevo y potente como LZMA. A su vez, utiliza librerías ajenas para recomprimir imágenes JPG y MP3, que de otro modo tampoco podrían comprimirse demasiado. La trampa consiste en hace todo eso de manera tal que al revertir el proceso, los datos obtenidos sean exactamente iguales a los originales (https://es.wikipedia.org/wiki/Algoritmo_de_compresi%C3%B3n_sin_p%C3%A9rdida). Sólo un pequeño número de programas hacen eso actualmente, de los cuales todos son experimentales y el más completo es este. (PowerArchiver está planeando incluir una funcionalidad de recompresión en su siguiente version)
Tarea: Francamente, precomp está en una etapa temprana de desarrollo (0.4.6) y le vendrían bien muchas mejoras. Tengo varias ideas en mente, y todas ellas son feasibles, pero creo que la más fácil de implementar es esta: Conseguir que direccione los datos procesados hacia la salida estándar, y pueda leer, al menos cuando "descomprime" o restaura, desde la entrada estándar. Para eso habría que redireccionar la interfaz hacia stderr y modificar el parser de la línea de comandos para que admita algo así como:
Código [Seleccionar]
programa entrada -
programa - salida
en lugar de la opción actual que es:
Código [Seleccionar]
programa entrada
programa -osalida entrada
Esto es necesario porque la principal utilidad de esta herramienta no es comprimir con LZMA sino "preparar" los datos para utilizar otra herramienta después. Esa herramienta puede ser cualquier compresor en línea de comandos.
Ayuda???
Quiero comprender cómo es el flujo de datos en un programa c++. La estructura interna de precomp es demasiado compleja para estudiarla en detalle por ahora, porque analiza el fichero de entrada en varios niveles o "recursion depth" y utiliza librerías de terceros, pero por ahora me conformaría con entender cómo se transforma la salida de todo ese proceso en un fichero de disco rígido, y cómo lo podemos redirigir hacia stdin/out. Es decir, la última parte del proceso.
¿Por dónde empiezo a mirar? ¿Existe una función común a todo programa que se encargue de manejar su salida de datos? ¿O es cuestión de recorrer todo el código y modificar una a una las funciones? Cualquier ayudita será agradecida. Aunque sea apuntarme en la dirección correcta.
Muchas gracias desde ya! Y si pueden poner algún código de ejemplo tanto mejor