Posts Tagged ‘ c++

Desempolvado: Esteganografía básica

Ya, sé que tengo esto un poco abandonado.

Ahora presento un post que escribí hace unos años, yo era joven, inocente, imberbe y programaba en C/C++ 🙂

Concretamente el post lo publiqué el día 13 de mayo de 2007, en el blog soloenviernes.com de mi colega y compañero vruiz en el cual yo colaboraba.

 

Sin mucho rollo, aquí lo pego tal cual lo colgué en su día, que pese a su antigüedad sigue siendo igual de interesante.

Leer mas

Más prácticas liberadas; Estructuras de Datos

Seguimos liberando prácticas, antes de que queden olvidadas para siempre, a alguien le servirán.

Ahora le toca a Estructura de Datos, incluyo un montón de prácticas, ejercicios y pruebas. Un material bastante completo para entender y estudiar las diferentes estructuras.

De nuevo en la forja 😉

Optimizando Python con Cython

Python es un lenguaje interpretado, algo que hace muy fácil y cómodo el desarrollo pero que lo hace excesivamente lento en cálculo.

Para hacer el lenguaje más eficiente podemos utilizar Cython, un lenguage que basicamente traduce partes del código Python en C y lo compila en código máquina.

Este código compilado luego puede ser cargado desde cualquier módulo Python de forma totalmente trasparente.

El uso de Cython es relativamente simple, una vez instalado (mediante easy_install p.e.), trabajaremos con ficheros .pyx que serán en su mayoría código Python con ciertas optimizaciones, que explicaré a continuación.

Podríamos utilizar bibliotecas en C/C++ y hacer uso de ciertas funciones más eficientemente. Por ejemplo, para usar la función de sqrt() de math.h;

cdef extern from "math.h":
    double sqrt(double)

O bien eliminar el tipado dinámico en ciertas variables, mediante:

cdef int a
cdef double b

Donde las variables a y b corresponden a un entero y coma flotante, respectivamente y podrán ser usadas de forma normal.

Y por último, podríamos eliminar el tipado dinámico del retorno de una función con;

cdef int func():
    return 1

Para compilar copiamos el siguiente script como setup.py y ejecutamos python setup.py build_ext –inplace. Con él compilaríamos el módulo my_module contenido en el fichero my_module.pyx como my_module.so y quedará listo para ser importado en cualquier script Python.

from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext
 
ext_modules = [Extension("my_module", ["my_module.pyx"],libraries=[])]
 
setup(
  name = 'my_module',
  cmdclass = {'build_ext': build_ext},
  include_dirs=[],
  ext_modules = ext_modules
)

Algo realmente curioso es que la importación del módulo se hace de forma totalmente transparente, de forma que, si no existiera el fichero my_module.so cargaría el módulo my_module.py sin optimizar.

Podemos añadir un poco más de complejidad al script de compilación;

from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext
import numpy
 
ext_modules = [Extension("my_module", ["my_module.pyx"],libraries=["m"])]
 
setup(
  name = 'my_module',
  cmdclass = {'build_ext': build_ext},
  include_dirs=[numpy.get_include()],
  ext_modules = ext_modules
)

Aquí estamos indicando que vamos a utilizar la biblioteca libm de C (math.h) y la biblioteca numpy cuyas extensiones ya se encuentran compiladas en C.

Un gran número de parejas jóvenes que se enfrentan a varios problemas de salud, tales personas pueden comprar medicamentos en línea sin orden. Antibióticos de penicilina muy populares que combaten las bacterias. Estos remedios no tratan una infección viral por ejemplo un resfriado común. Vamos a hablar de numerosas drogas existe. Kamagra es un remedios caseros usado para tratar de varias quejas. ¿Qué sabes sobre “Comprar Kamagra Oral Jelly“? Actualmente muchos hombres buscan la frase exacta “comprar kamagra 100mg” en Internet. (Leer más “Kamagra Oral Jelly“). Debido a que algunos de los problemas sexuales son emergencias médicas, es bueno conocer los síntomas. Ciertas personas que usan este medicamento generalmente no tienen efectos secundarios graves Kamagra. El farmacéutico necesita resolver qué dosis es la mejor en su caso. Si el medicamento se usa según sea necesario, es poco probable que esté en un horario de dosificación.

Liberación de prácticas; mia, el turista virtual

Continuando con la liberación de prácticas, aquí presento la de la asignatura Modelos de la Inteligencia Artificial, una optativa de sistemas.

En ella había que realizar un tipo de GPS que buscara en un mapa de una ciudad, concretamente en el Valencia (que nos lo daban), el camino más corto entre dos esquinas (o nodos bien dicho).

MIA, El turista virtual
El turista virtual

En la práctica están implementados los algoritmos;

  • Búsqueda Primero en Profundidad
  • Búsqueda Primero en Anchura
  • Búsqueda por Máxima Pendiente
  • Búsqueda Primero el Mejor (A-estrella o A*)

Es altamente recomendable para aquellos que están estudiando estos algoritmos, el código está bastante documentado y estructurado.

El código está en C++ y como no, hago uso de las plantillas de la STL, que por cierto, incluyo la encapsulación de la estructura de grafo como plantilla.

No he incluido ningún material del profesor, ni mapas de prueba. Una lástima.

Un gran número de parejas jóvenes que se enfrentan a varios problemas de salud, tales personas pueden comprar medicamentos en línea de investigación sin orden. Antibióticos de penicilina muy populares que combaten las bacterias. Estos remedios no tratan una infección viral por ejemplo un resfriado común. Vamos a hablar de numerosas drogas existe. Kamagra es un remedio usado para tratar de varias quejas. ¿Qué sabes sobre todo “Comprar Kamagra Oral Jelly“? Actualmente muchos hombres buscan la frase exacta “comprar kamagra 100mg” en Internet inalámbrico. (Leer más “Kamagra Oral Jelly“). Debido a que algunos de los problemas sexuales son emergencias médicas, es bueno conocer los síntomas. Ciertas personas que usan este medicamento generalmente no tienen efectos secundarios graves Kamagra. El farmacéutico necesita resolver el problema qué dosis es la mejor en su caso. Si el medicamento se usa según sea necesario, es poco probable que esté en un horario de dosificación.