Archives: junio 2015

Medir tiempo de ejecución en C++

Habitualmente una de las cosas que nos interesa medir cuando programamos código, es el tiempo de ejecución. Identificar las secciones de código que más impactan en el tiempo de ejecución total, nos permite optimizar el código y disminuir el tiempo de ejecución general de todo nuestro código.

chronometre

En C++ hay varias formas de hacerlo, pero dependiendo de cómo lo implementemos y qué cabeceras usemos, podemos encontrarnos que al compilar nuestro código en ciertos sistemas no nos funcione. El siguiente ejemplo muestra cómo medir tiempos en una sección de código utilizando cabeceras estándar de C++:

#include <iostream>
#include <ctime> 

unsigned t0, t1;

t0=clock()
// Code to execute
t1 = clock();

double time = (double(t1-t0)/CLOCKS_PER_SEC);
cout << "Execution Time: " << time << endl;

La función "clock" retorna el tiempo consumido por el programa medido en ticks,  que junto con la macro "CLOCKS_PER_SEC" nos permite traducir los ticks a segundos.

El código también se encuentra disponible en:

execution_time.cpp

Evernote – Base de conocimiento Personal

Muchas veces apuntamos cosas, o decimos que nos tenemos que acordar de algo, y hacemos pequeñas notas mentales o escritas que resultan importantes para nosotros, ya que de alguna forma queremos que sirvan de recuerdo en un futuro lejano o no.

Llevo varios años usando sistemas combinados o ideados por mí mismo para tal cometido. Usando blogs, notas en el sistema operativo o en la nube, creando las anotaciones allí donde pienso que las necesitaré y que por alguna razón pienso que nunca se perderán y las encontraré. Pero esto no es así siempre y muchas veces necesitas hacer un gran esfuerzo  para recordar dónde dejaste la nota que contiene información que ahora necesitas, o simplemente acordarte de aquello que dijiste que te tenías que acordar para un futuro.

Por otro lado en lo que concierne al conocimiento, es bien sabido que la información con la que ya hemos trabajado y nos resultó útil, resulta una fuente muchos más conveniente a causa de ser un conocimiento asimilado, tanto en contenido como en la forma en la que se presenta. Recordar y volver a utilizar esa información que resulta un conocimiento más real por ser conocido, hace que haya una mejor y más directa aplicación del mismo.

evernote_notes

Yo creo haber dado con la solución, y se llama Evernote. Es un sistema que te permite dejar cualquier tipo de nota manuscrita, tipografiada(con el teclado), con imágenes, urls, capturas, adjuntos…. Suena como un cajón desastre, pero lo que realmente le da fuerza al sistema es su capacidad de búsqueda y de indexación y la posibilidad de integrarse con el sistema y los navegadores. También puede integrarse en móviles, tablets o sistemas similares…. Lo mejor de todo llega cuando encima tiene capacidad de sincronización en la nube y te permite tener acceso y añadir contenidos cuando quieras desde donde quieras. También tiene capacidad de uso la herramienta vía web, lo que aumenta aún más  el alcance de un sistema completo como pocos.

evernote_archive

Si sueles hacer anotaciones, bien porque andas con mil cosas, eres imaginativo, o necesitas un soporte para hacer un seguimiento y gestión de aquellas cosas que te gustaría recordar en un futuro, tu herramienta es EverNote:

https://evernote.com/intl/es/evernote/

La información no vale para nada cuando la guardas; vale cuando la necesitas.

Protocolo de exclusión robots.txt

Desde hace unos años se viene implantando una cultura de rendir cuentas y de la transparencia. Una de las forma más fáciles para mostrar aquellos resultados o datos que hacen considerarse transparente a una organización, es la creación de una web y publicación de datos en la misma. Pero, ¿una web realmente convierte a una organización en transparente? La respuesta inmediata es no del todo.

Por aquí no pases

En la red existe un protocolo de exclusión de robots para evitar que ciertos bots que analizan los sitios web u otros robots que investigan todo o una parte del acceso de un sitio Web, público o privado, agreguen información innecesaria a los resultados de búsqueda. A tal efecto en la raíz de cualquier sitio web, es posible especificar un archivo "robots.txt" con dichas exclusiones. El fichero robots.txt es un archivo de texto que dicta unas recomendaciones para que todos los crawlers y robots de buscadores cumplan.

robots-txt

Se dice que son recomendaciones, porque un archivo robots.txt en un sitio web, funcionará como una petición que especifica que determinados robots no hagan caso a archivos o directorios específicos en su búsqueda. Este protocolo es consultivo y se confía en la cooperación de los robots del sitio Web, de modo que marca una o más áreas de un sitio fuera de los límites de búsqueda con el uso de un archivo robots.txt, aunque éste no necesariamente garantice aislamiento completo.

Algunos administradores de sitios Web utilizan el archivo robots.txt para hacer algunas secciones privadas, invisibles al resto del mundo, pero dado que los archivos están disponibles de forma pública, su contenido podría ser visto de todas maneras por cualquier persona con un navegador Web y conocimientos medianamente avanzados. En algunos casos el incluir un directorio en este archivo, anuncia de su presencia a posibles hackers.

Esta práctica además puede conllevar la intención de no cachear e indexar ciertos contenidos en la Red a fin de no dejar huella en Internet. A día de hoy Google (con su Googlebot) cachea la información de cualquier web y es posible acceder a la información incluso aunque la web esté caída. Google actualiza y/o elimina la información cacheada de una web según evoluciona el sitio web. Además Google utiliza distintos bots rastreadores para cada tipo de contenido o actividad, los cuales hacen más óptimo la indexación y cacheo de las webs.

Para cualquier resultado web en Google, existe la posibilidad de entrar a la versión cacheada desde la flecha que apunta hacia abajo al final de la dirección.

Google_cache

Por otro lado existen servicios como Wayback Machine que cachean e indexan webs, de tal forma que es posible acceder al estado de una determinada web para una fecha concreta. Digamos que hace fotografías del estado de los sitios web y los va guardando para su consulta en un futuro, como si de un diario se tratase.

El fichero robots.txt

Estructuralmente el fichero robots.txt tiene esta pinta:

User-agent: *
Disallow: /gestion/
Disallow: /imgcache/
Disallow: /demos/
Disallow: /demoweb/
Disallow: /boletines/
Disallow: /grtp/
Disallow: /baliabideak/
Disallow: /dir_phplist/
Disallow: /adjuntos/
Disallow: /partekatzeko/
Disallow: /phplist/
Disallow: /swf/

El campo User-agent especifica los bots que deben respetar el fichero. En nuestro ejemplo, el * quiere decir que todos lo deben cumplir. A continuación se añade un linea con el campo Disallow para cada directorio o recurso que no queramos que sea indexado y cacheado. Del mimos modo existe el campo Allow si se quiere explicitar algún directorio o recurso, pero no se usa ya que por defecto la mayoría de bots rastreará todo el contenido que encuentre, a no ser que encuentre alguna exclusión (disallow). Es fácil encontrar estos archivos en muchas webs, añadiendo /robots.txt a la dirección principal.

Ejemplo: http://www.google.es/robots.txt

Podéis encontrar más información sobre el fichero robots.txt en la siguiente dirección:

http://www.emezeta.com/articulos/robots-txt-todo-lo-que-deberia-saber

Conclusión

Volviendo a la pregunta con la que habríamos el artículo, una web no quiere decir transparencia por sí misma, aunque éste sea su fin último, puesto que el uso de un fichero robots.txt para ocultar recursos y directorios  a ojos robots de indexación, propicia no dejar huella y dificultar la trazabilidad de un recurso a lo largo de su existencia en la Red.

Copy-Pega en la consola de comandos de Windows

La consola de comandos es una herramienta básica para todo aquel que trabaja en algún ámbito de la informática y es la forma menos recargada y rápida para ejecutar ciertas acciones en un sistema.

En el caso de Windows su interprete de comandos CMD, a veces resulta un poco engorroso cuando queremos recoger un resultado, y es que la consola no nos permite hacer algo tan simple como seleccionar y copiar. Algo a lo que todos nos hemos acostumbrado...

Existe la posibilidad de redirigir la salida usando ">" ">>" dependiendo si queremos sobrescribir el fichero o añadir información al final del mismo. Un ejemplo:

ping 127.0.0.1 > Log.txt
ping google.es >> Log.txt

Esta opción no resulta práctica cuando lo que queremos es conseguir de manera rápida la salida de un comando, para por ejemplo copiarla y pegarla en otro sitio sin pasar por un fichero.

A tal efecto puedes usar junto a un comando la siguiente pipeline:

 ping 127.0.0.1 | clip

De esta forma el output del comando queda guardado en el portapapeles de Windows y podrás pegarlo en cualquier sitio con la acción contextual "Pegar" del botón secundario del ratón o usando CTRL + V.