Firefox Account: bad design, bad user experience

Contents

Bad email design

I decided I’d sign up for a Firefox account. After setting up a unique email for the account and giving it my details, I was greeted with a dialogue asking me to enter in a validation code snet by email.

The code expired in five minutes.

This is terrible design, because there is no guarantee any given peice of email can be delivered and read within five minutes. For example, as an anti-spam measure my email provider implements graylisting. For previously unseen senders it soft-rejects the initial connection, asking the sender to retry in a few minutes. Properly implemeted mail programs will wait and re-send; spammers are unlikely to do so.

Read more (15 paragraphs) …



bdb-tool, a program for working with the Berkeley database

Contents

After noticing that GNU dbm perfomance, at least for inserts, drops off after about 75 million records, I decided to see how well Berkeley DB did. So I signed up for an Oracle account (using a unique email address) and downloaded a copy of the latest version.

It’s distributed as source code; compiling and installing it was quite straighforward:

dist/configure --prefix=/opt/bdb-18.1.32
make && sudo make install

Then came a surprise. GNU dbm ships with a handy command-line program (gdbmtool) to perform ad-hoc database operations, but no such program is distributed with the Berkeley database.

So I immediately set about adapting the GNU program for the Berkeley database.

Read more (19 paragraphs) …



Adding Ghostery to Firefox

Contents

The numbers in the tables below show the number of requests blocked by each Firefox add-on when visiting the listed page.

Without Ghostery

Site Noscript uBlock Privacy Badger Total
Daily Mail 15 6 4 25
The Independent 19 31 11 61
CBC News 11 23 6 40
Universe today 6 23 6 35

With Ghostery

Site Noscript uBlock Privacy Badger Ghostery Total
Daily Mail 5 16 4 4 29
The Independent 19 19 11 18 67
CBC News 10 20 5 9 44
Universe today 7 23 6 4 40

Read more (7 paragraphs) …



How well does a GNU dbm database scale?

While working with linked lists to mimic Brtieve keys for QRetail, I idly thought, “how well does a Berkeley or GNU database scale?” I’m not talking a little database with a few thousand keys in it; I’m thinking up in the hundreds of millions. For example, a database of citizens of a large country or group of countries; or a year’s worth of call detail records for a large telephone company with eight million subscribers, each of whom could make any number of calls each day; or a year’s worth of credit card transactions for a major credit supplier.

Read more (15 paragraphs) …



Blog progress: QRetail blog review completed

On Friday 18 October I finished reviewing all the QRetail entries in this year’s and last year’s noetbook files, fixing them up and annotating them as needed, and adding tags. It was a significant amount work, for at the time the blog had about 80,000 words in some 280 entries. And those were mostly my words, which is the word count outside or fenced code blocks and <pre> blocks, which typically contain text generated from other sources (even I wrote them, like programs.) When those are included, the word count jumps to almost 107,000.

The work also included adding two new sections to the home page:

  • Testing and Developing QRetail on Linux
  • The QRetail Menus

Blogging work

Contents

Split the QRetail content out to its own blog

My main project this week was splitting the QRetail content in my notebook files out to a separate blog. Recall that the source data for this blog comes from a large Markdown-style notebook file I maintain, with a program (mk-blog-content) identifying blog entries and splitting them out to individual files that the nikola software uses to build the blog.

Not only did I have to update mk-blog-content to split content out to two different blog directories (the main one and the QRetail one,) I also had to re-work how the time for each entry was assigned. Due to the way I structure the notebook file with one major section for each week, individual entries don’t necessarily have a date on them, let alone a time. mk-blog-content assigns more or less arbitrary timestamps to entries, but they need to be sequential. If they aren’t, reading the QRetail blog is even more confusing than it already is because the entries are ordered haphazardly.

Read more (10 paragraphs) …



Blog content: tagging my notebook files

Contents

Notebook files

The source material for this blog comes from my notebook files, a series of large markdown files that I’ve kept since 2010, one file for each year. In them I record things I’ve done, people I’ve met, places visited, and the like. Since I prefer to keep my private life private, I don’t want to include all of the notebook entries in the blog.

On Wednesday 11 September I went though my 2019 notebook. For every entry that I wanted in the blog, I added a line like the following:

% Nikola: tags=tag1, tag2, etc; date=YYYY-MM-DD

The leading % on the line is a comment, which is stripped out by the percent_comments extension for Python Markdown. (If you go looking for this extension on the web, you won’t find it. I wrote it primarily for my own use and haven’t yet posted it to GitHub.)

Read more (10 paragraphs) …



Static site generator candidate software: Nikola

Contents

Nikola has this to say about itself on its [web page][N]:

  • Host anywhere. Static websites are safer, use fewer resources, and avoid vendor and platform lock-in. You can host a Nikola website on any web server, big or small. It’s just a bunch of HTML files and assets.
  • Fast rebuilds. Nikola is fast. We use doit, which provides incremental rebuilds—in other words, we rebuild only the pages that need rebuilding, saving CPU time, wall clock time and upload bandwidth.
  • Multiple input formats. Nikola will take input in many formats. Out of the box, we support reStructuredText, Markdown, IPython (Jupyter) Notebooks and HTML, and have plugins for many other formats.
  • Batteries included. Nikola comes with everything you need to build a modern website: blogs (with comments, tags, categories, archives, RSS/Atom feeds), multilingual support, easy image galleries, and code listings.
  • Easily extensible. Nikola is extensible. You can write a plugin to add any feature you want in a few lines of Python, or write your own theme in Mako or Jinja2. Or find something in the Plugin and Theme Indexes.
  • User-friendly CLI. Nikola has a friendly user interface that gets you up and running quickly and simplifies your work. You do not need to memorize headers just to create a post — we’ll write them for you.

Read more (11 paragraphs) …