Gracefully shutting down Firefox, to avoid the crash/session dialog

I normally have several Firefox profiles open, and when I log out without closing the Firefox windows I get the “session restore” dialog on my next login.

This is because of Bug 336193 which says that Firefox should shut down gracefully when it receives a SIGTERM signal, which is what happens when I log out (in Ubuntu MATE anyway). At the moment, it shuts down ungracefully, meaning it is treated as if Firefox crashed when it restarts.

So, instead of my normal shutdown button, I have one that launches a script that closes all my Firefoxes first, like this:

#!/bin/bash

# Prerequisites:
# sudo apt-get install sysvinit-utils xdotool

set -x
set -u

function close_firefoxes()
{
    local PID
    local WID

    PID=$(pidof -s firefox)
    FOUND=$?

    while [ $FOUND ]; do
    {
        WID=$(xdotool search --pid "$PID" | tail -1)
        xdotool windowactivate --sync "$WID"
        xdotool key --clearmodifiers 'ctrl+q'
        sleep 1
        PID=$(pidof firefox)
        FOUND=$?
    }; done
}

close_firefoxes

mate-session-save --shutdown-dialog

Snake in Python 3 + Qt 5

Series: Groovy, Ruby, BASIC, Dart, Elm, Python3+Qt5

I’m writing the game Snake in lots of programming languages, for fun, and to try out new languages.

Python 3 broke compatibility to fix some mistakes – was it worth it? Qt 5 continues to offer more and more features – can it win me over?

Slides: Snake in Python 3 + Qt 5

If you want to, you can Support me on Patreon.

Elm Basics Video

Series: Snake in Elm, Elm makes me happy, Elm Basics

A lot of the documentation about the new language I am really excited about, Elm focusses on the Elm Architecture and the ideas of Functional Reactive Programming, and while those are the fundamental reasons I am interested in Elm, I found myself stuck on the syntax quite often.

So, in this video I review almost all the syntax and basic ideas you need to be able to read and write Elm code, treating it as a general programming language.

Update: forgot to add the slides – here they are:
Slides: Elm Basics

How to analyse a .phd heap dump from an IBM JVM

If you have been handed a .phd file which is a dump of the heap of an IBM Java virtual machine, you can analyse it using the Eclipse Memory Analyzer Tool (MAT), but you must install the IBM Monitoring and Diagnostic Tools first.

Download MAT from eclipse.org/mat/downloads.php. I suggest the Standalone version.

Unzip it and run the MemoryAnalyzer executable inside the zip. Add an argument to control how much memory it gets e.g. to give it 4GB:

./MemoryAnalyzer -vmargs -Xmx4g

Once it’s started, go to Help -> Install new software.

Next to “Work with” paste in the URL for the IBM Developer Toolkit update site: http://public.dhe.ibm.com/ibmdl/export/pub/software/websphere/runtimes/tools/dtfj/

Click Add…

Type in a name like “IBM Monitoring and Diagnostic Tools” and click OK.

In the list below, an item should appear called IBM Monitoring and Diagnostic Tools. Tick the box next to it, click Next, and follow the wizard to accept the license agreements and install the toolkit.

Restart Eclipse when prompted.

Choose File -> Open Heap Dump and choose your .phd file. It should open in MAT and allow you to figure out who is using all that memory.