C++: mt19937 Example

C++11 introduces several pseudo-random number generators designed to replace the good old rand from the C standard library. I’ll show basic usage examples of std::mt19937, which provides random number generation based on the Mersenne Twister algorithm. Using the Mersenne Twister implementation that comes with C++11 has advantages over rand(), including:

  1. mt19937 has a much longer period than rand, e.g. it will take much longer for its random sequence to repeat itself.
  2. It has much better statistical behavior.
  3. Several different random number generator engines can be initialized simultaneously with different seeds, compared with the single “global” seed srand() provides.

The downside is that mt19937 is a bit less straightforward to use. However, I hope this post will help with that point :-).
Continue reading C++: mt19937 Example

Make Offline Mirror of a Site Using `wget`

Sometimes you want to create an offline copy of a site that you can take with you and view even without internet access. Using wget, you can make such a copy easily:

wget --mirror --convert-links --adjust-extension --page-requisites 
--no-parent http://example.org

Explanation of the various flags:

  • --mirror – Makes (among other things) the download recursive.
  • --convert-links – Converts all the links (also to things like CSS stylesheets) to relative links, so it will be suitable for offline viewing.
  • --adjust-extension – Adds suitable extensions to filenames (html or css) depending on their content type.
  • --page-requisites – Downloads things like CSS stylesheets and images required to properly display the page offline.
  • --no-parent – When recursing, do not ascend to the parent directory. It is useful for restricting the download to only a portion of the site.

Alternatively, the command above may be shortened:

wget -mkEpnp http://example.org

Note: The last p is part of np (--no-parent), and hence you see p twice in the flags.