• mina86.com

  • Categories
  • Code
  • Contact
  • Generating random reals

    A well known way of generating random floating-point numbers in the presence of a pseudo-random number generator (PRNG) is to divide output of the latter by one plus its maximum possible return value.

    extern uint64_t random_uint64(void);
    
    double random_double(void) {
    	return random_uint64() / (UINT64_MAX + 1.0);
    }

    This method is simple, effective, inefficient and wrong on a few levels.

    Strach

    English version available on The Codeless Code.

    Niedawno przyjęty do świątyni mnich zbliżył się do mistrza.

    — Otrzymałem zadanie dodania kilku nowych funkcji do systemu obsługi zamówień Cesarskiego Szewca, ale nie jestem w stanie zrozumieć, jak on działa. Logika jest rozproszona pomiędzy wiele aplikacji zaimplementowanych przy użyciu najróżniejszych technologii. Zamiast stworzyć wspólne biblioteki, autorzy najzwyklej skopiowali fragmenty kodu pomiędzy różnymi miejscami, często wprowadzając subtelne rozbieżności. Zadania pracujące w tle wyszukują i modyfikują rekordy w bazie danych bez żadnego udokumentowanego powodu. Sama baza danych wydaje się spiskować przeciwko mnie: prosta modyfikacja jednej tabeli może wyzwolić kaskadę zmian w wielu innych.

    Python tips and tricks

    Python! My old nemesis, we meet again. Actually, we meet all the time, but despite that there are always things which I cannot quite remember how to do and need to look them up. To help with the searching, here there are collected in one post:

    TLS is a yes

    An image of Hollywood’s idea of ‘hacking’
    (still from movie Swordfish)

    Let’s Encrypt has left beta and to celebrate, this blog gained TLS support. \o/ If all goes well it’ll become the default including an HSTS header so everyone can benefit from improved privacy.1

    Website move

    Photo of a truck on a road.
    (photo by Ikiwaner)

    Some regular visitors of the web site may be aware that the page used to run on Jogger.pl platform. Some will also be aware that the service closes shop, an act which forced me to move to another hosting.

    In moving the page, I’ve tried to keep old URLs work so even though canonical locations for posts have changed, the old links should result in a correct redirect.

    This is also true for feeds but while Jogger provided customisation options (RSS and Atom, excerpts only, no HTML and posts count), currently only full-content HTML Atom feeds limited to newest ten entries are provided.

    If anything broke for you, please do let me know at mina86@mina86.com.

    I have not yet figured out what to do with comments which is why commenting is currently unavailable. Since I want my whole page to be completely static, I’m planning on using a third-party widget. So far I’ve narrowed the choice down to HTML Comment Box and the new hotness, Spot.IM. Any suggestions are also welcome.

    Graph showing drop in response time from 300 ms to 60 ms

    On the bright side, the page now loads five times faster! Jogger.pl took its sweet time when generating responses. A static page and better optimised infrastructure of my current provider allows to drop response time from 300 to 60 ms.

    Contiguous Memory Allocator resources

    Below is a list of materials about Contiguous Memory Allocator (CMA) and topics relating to it which may be of interest.

    Michał Nazarewicz and Marek Szyprowski. 2012. Continuous Memory Allocator, version 24.
    The final patchset that was merged in Linux 3.5.
    Michał Nazarewicz. 2013. Alokacja ciągłych fizycznie obszarów pamięci w systemie Linux. Bachelor’s thesis. WEiTI/ISE, PW, Warsaw.
    🇵🇱 Diploma thesis in Polish on the Continuous Memory Allocator.
    Michał Nazarewicz. 2012. A Deep Dive into CMA. Linux Weekly News (March 2012).
    A description of the way to integrate CMA with an architecture as well as short summary of how exactly CMA works.
    Michał Nazarewicz. 2012. Deep Dive into Contiguous Memory Allocator.
    A description of how to use and integrate CMA with an architecture. It is a first part of an extended version of the above LWN article and as such it includes much more details.
    Michał Nazarewicz. 2012. Contiguous Memory Allocator: Allocating Big Chunks of Physically Contiguous Memory. LinuxCon Europe, Barcelona, Spain.
    The presentation from the LinuxCon Europe (LCE) 2012 about CMA.
    Barry Song. 2012. A Simple Kernel Module as a Helper to Test CMA, vrsien 4.
    A short and simple driver that can be used to test CMA as well as see how it is used.
    Jonathan Corbet. 2011. A Reworked Contiguous Memory Allocator. Linux Weekly News (June 2011).
    An overwiev of the Contiguous Memory Allocator.
    Jonathan Corbet. 2011. CMA and ARM. Linux Weekly News (June 2011).
    An overview of the linear mapping problems CMA had on ARM platforms, and why the early fixups are required.
    Laura Abbott. 2012. Revoke LRU when trying to drop buffers.
    Patch which tries to improve CMA’s performance by removing buffer from LRU prior to migration. The thread also mentiones problem with ext4 not supporting migration of journal pages.
    Jonathan Corbet. 2010. Memory Compaction. Linux Weekly News (January 2010).
    An overview of Mel Gorman’s compaction patches. Compaction code is used by CMA for scanning for and migrating non-free pages.
    Jonathan Corbet. 2009. Transcendent memory. Linux Weekly News (July 2009).
    Overwiev of an idea behind and implementation of the transcendent memory. Such memory can be marked ‘ephemeral’ which means that kernel can discard it if it wishes to.
    Jonathan Corbet. 2011. POSIX_FADV_VOLATILE. Linux Weekly News (November 2011).
    An overwiev of John Stultz’s POSIX_FADV_VOLATILE implementation which is one of the things that CMA work with nicely.
    Minchan Kim. 2012. Discard clean pages during contiguous allocation instead of migration.
    Patch changing CMA so that clean pages are discarded instead of migrating which improves CMA’s performance.