duncanlock.net

Compressing Limited Colour PNG images

Most of the .PNG files on this site are the ‘blueprint’ style diagrams, like this one:

Blueprint style diagram showing an optical microscope. The sample inside is magnified in a bubble to 2500 times
Figure 1. This illustration is a large 5.6MB SVG file, mostly because of the very detailed paisley pattern that I used. Exported to PNG - and then compressed using the process below, you can get this down to 118.5kB.

I create these in Inkscape as vector .SVG files & export them to bitmap .PNG files. I then re-compress them, to ensure that the image files that are used on the live website are as small & quick to load as possible.

As these diagrams have a fairly limited colour palette, I can get lots of extra compression by reducing the colour depth of the final .PNG files from the default 32bit (millions of colours) to 8bit (256 colours) - without any …

Read More

Thunar's icon

Thunar - XFCE & XUbuntu’s small but perfectly formed file manager - has a simple mechanism that allows you to easily add new commands to the right click menu of files and folders. These are called Custom Actions and are easy to create…​ here’s how to do it.

Click the Edit menu, then click ‘Configure custom actions…​‘. This will take you to the Custom Actions Manager, where you can create, edit or delete your custom actions.

You can enter anything into the command box, including complex bash scripts, names of scripts or executables on the PATH, or the full path and filename of the command you want to run.

thunar custom actions edit 1

On the ‘Appearance Conditions‘ tab, you tell Thunar when you want your item to appear in the right click menu:

thunar custom actions edit 3
Figure 1. Now, when I right click on a text file, I …
Read More

This is a Pelican plugin to calculate various statistics about a post and store them in an article.stats dictionary. You can see this in action in the sidebar on the left of this site.

Nice touch from medium.com - now available in Pelican.

I wanted to implement the nice little “X min read” thing from Medium - and it turned out that it was easy to provide a few other interesting stats at the same time, for people to use in their templates.

The returned article.stats dictionary contains the following:

  • wc: how many words
  • read_mins: how many minutes would it take to read this article, based on 250 wpm
  • word_counts: frequency count of all the words in the article; can be used for tag/word clouds
  • fi: Flesch-kincaid Index/ Reading Ease
  • fk: Flesch-kincaid Grade Level

For example:

{
    'wc': 2760,
    'fi': '65.94',
    'fk': '7.65',
    'word_counts': Counter({u …
Read More

reddit bots diagram
Figure 1. How much does a software bot weigh, anyway? Heavily modified & adapted from the original public domain robot on openclipart, posted by johnny_automatic.

reddit, the insanely popular internet community, had 71,435,935 unique visitors last month, with over 2,360,783 people logged in [1].

I say people - but it turns out that not all the denizens of reddit are human. There are also bots. Lots and lots of bots. How many? No-one really knows. [2]

This is an interesting and somewhat shadowy facet of the otherwise very public reddit community, so I thought I’d take a closer look…​

What is a reddit bot?

A reddit bot is no different from any other user, as far as reddit is concerned. The only difference is that rather than a human logging in to upvote cat pictures and post …

Read More

stackoverflow logo is made of people diagram
Figure 1. StackOverflow is made of people - lots and lots and lots of people.

Seemingly like everything else in the world, Stack Overflow is getting more & more competitive as time passes. Gaining a good reputation - and even finding good questions to answer - is becoming harder and harder, as more and more people compete for less and less unanswered questions.

This is fantastic if you want to find an answer - but makes it much harder for newcomers to get started and build a reputation on the site.

This guide will help you jump-start your reputation on StackOverflow and help you get more out of the site.

How to find questions you can answer

Ignored & Favourite Tags

Screenshot of part of my (very long) ignored tags list from Stack Overflow
Figure 2. I don’t know jack: Screenshot of part of my (long) ignored tags list from Stack Overflow

Use the no answers page, the …

Read More

I switched my XFCE machines over to use Compton for window compositing today - and it’s a noticeable improvement.

A compositor glues your stacks of windows together to form the final image that you see on screen. It’s responsible for any fancy effects like drop-shadows, as well drawing windows while dragging, resizing and minimizing or maximizing them. [1]

Compton does this beautifully. It does one thing and it does it well. It provides glassy smooth, tear free compositing and supports a few tasteful effects - drop shadows, fades and transparency.

I stumbled across this while searching for something else and found a great guide in the NeoWin forums [2], where most of this info comes from, so thanks ViperAFK.

Switch off the existing compositor

Screenshot of the XFCE Applications menu

You’ll need to switch of any existing compositing you’ve got running, otherwise this won …

Read More

Schmatic diagram showing two phones
Figure 1. In an ideal world, I’d like something like this - and vice versa, please.

My wife and I currently live in Canada, and our families are back in the UK. We’d been using Skype to chat with people in the UK, but I was getting frustrated with Skype’s limitations: it either ties you to a computer and WiFi, or running a battery hungry app which slows down your phone. It doesn’t work very well over the 3G phone network here and while it’s free to make Skype to Skype calls, it’s fairly expensive calling real phones. I didn’t really want to buy a dedicated Skype phone - we both already have mobile/cell phones. And, to top it all off, the Skype software for Linux is the poor cousin of the Windows one …

Read More

How Figures & Images work in Pelican, by default

By default Pelican does a great job with figures and images, thanks to built-in support in ReStructuredText [1][1] . Pelican will turn this rst input:

.. figure:: {static}/images/better-figures-images-plugin-for-pelican/dummy-200x200.png
    :align: right

    This is the caption of the figure.

    The legend consists of all elements after the caption. In this case, the legend consists of this paragraph.

into this HTML output:

<div class="figure align-right">
    <img alt="/static/images/dummy-200x200.png" src="/static/images/dummy-200x200.png" />
    <p class="caption">This is the caption of the figure.</p>
    <div class="legend">The legend consists of all elements after the caption. In this case, the legend consists of this paragraph</div>
</div>

Which, given this CSS:

/* Styles for Figures & Images */

img {
    border: 1px solid #bbb;
    border-radius: 3px;
    padding: 4px;
    float: left;
    margin: 1em …
Read More

As I mentioned previously, this site was put together using Pelican - a static site generator, written in Python.

Blueprint style diagram showing a brown Pelican
Figure 1. Pelecanus Occidentalis - the Brown Pelican. Original clipart Flying Pelican from OpenClipart, by molumen, Public Domain. More on Pelican, the bird.

Static site generators take your content, pour it into your templates and output the result as static pre-generated HTML, CSS, JS & image files. You can then just upload the resulting folder of output to your server and you’re done. All you need on the server is a web server of some sort, like Apache or Nginx - anything really - all it’s doing is serving static pages.

The huge advantage of this setup is simplicity:

  1. You can write your content in Markdown [1], reStructuredText [2] or AsciiDoc [3] - all simple text formats, designed to facilitate writing and get out of …
Read More

Ever tried to copy something onto a USB flash drive, only to discover that the file was too big to copy?

This is because most USB Flash drives are formatted using the FAT32[1] filesystem - which only supports individual files up to 4 GB in size, no matter how much free space you’ve got. It also only supports drives up to 2 TB, can’t store symbolic links, can’t store files with these characters in the name: "*/:<>?\| – and is generally pretty crappy.

The solution is to use a better filesystem

There are many filesystems to choose from - but there are a few criteria that a good USB flash drive filesystem needs to meet which cut down the choices quite a bit:

  • Compatible with every computer - just plug it in, and it should work
  • Has no permissions, or optional …
Read More