I use a dual monitor setup. For each monitor I have a panel, and each panel has
a whisker menu. I found that the favourites section of each of these panels
is not synchronised. To fix this, I wrote a simple script.
First, you have to decide which whisker config to keep.
The favourites menu is stored at the top of each file, like this:
Find the one you want to keep. From this point on,
replace whiskermenu-1.rc with the config you want to keep and
whiskermenu-9.rc with the one you want to ditch.
The script is as simple as this:
If you save that to /usr/local/bin/syncwhisker, then you can use “syncwhisker”
in the terminal to keep your menus the same.
I recently successfully dual booted Ubuntu on an ASUS X555LA laptop,
the X555LAB variety. This guide will work on most Ubuntu derivatives,
I installed Xubuntu using these steps. The only things that are different
between them are window managers and preinstalled software.
This article will show you how to verify a user’s identity by letting them
associate their account with an external third party phpBB account.
I used Python and Flask to achieve this, however any language and framework
should work, and shouldn’t be too hard to port to.
I was contacted by a client to create a system which calculates the workload
for employees based on their assignment to tasks and appointments.
The system needs to solve two problems:
Firstly, different staff members work different numbers of hours, which
makes it hard to allocate tasks fairly and proportionally.
Secondly, the client wanted to use the system to analyse past workloads
and to anticipate future workload, in order to improve her system of work.
The solution contains an algorithm to suggest new employees to tasks, based on
the type of tasks they are currently assigned to, how many hours they should
work a week, and how what they are doing at the time.
The solution was written as a web application, using Python, Flask and SQLAlchemy.
Originally I created the graphs using a HTML5 canvas. However, during the
first client feedback sesson, I found out they used Internet Explorer with
rendering to the server. I used the Python Imaging Library (PIL) to do this.
One of the areas in computer science that interests me is artificial
intelligence. I’ve done some projects experimenting in this area:
ESME, a pattern matching AI similar to Eliza
ESME is a very old project which uses simple pattern matching
to do things like “my name is foo bar” → “Hello foo bar”.
As one of my computer science projects, I created an implementation of
the minimax algorithm.
Unfortunately, due to time restraints, I was unable to implement
optimisations such as composition tables and position hashing.
This caused the Chess AI to be limited to only looked 5/6 moves ahead,
any more caused minutes worth of processing time.
This lack of depth caused it to make bad choices.
Here is a shell script specific for GNU/Linux based operating systems to use.
On different operating systems the convert commands will be the same, but
the for loop will be different due to a different batch file syntax.
Today I’ve been doing some work on a flying simulator I’m calling
“Flying Pro II”.
Five or six years ago, I created my first ever 3D video game.
It was called “Flying Pro”, and it was part of a set of simple 3D video games
I called “Pro Series”, for some reason.
The games were made using a demo version of a propietary 3D game engine.
My blog uses the Jekyll static site generator. This blog post will show you how I implemented the tag system on this blog, without installing any modifications or plugins. My blog is hosted on GitHub pages, so this is a requirement.
Hello 2015! Recently I have created an implementation of the
3D projection algorithm.
It is just wireframe models. It works pretty well, except it doesn’t do frustum culling.
You still see things that are behind you, but upside down.
The source code of this implementation is available under the WTFPL or CC0 licenses -
you can choose which one you want to use.
Use WASD to move, arrow keys to rotate, space to ascend and shift to descend.
Just a short post this time - I have created some widgets for the chess website Lichess.
I was quite surprised that these did not exist yet, in any form.
Luckily Lichess exposes an API to use.
You can have a look at them by clicking the link below.
Lichess is an online chess game and community.
It is free and open source, ad-free and subscription-free.
You can play against your friends, random strangers and the computer.
You can create teams to compete in tournaments.
There are tournaments going on all the time.
There are different game modes available, but I don’t really touch these.
Chess960, King of the Hill, Three-check, From position.
You can request that your game is analysed by a chess engine, it gives you
suggestions on what you should have done.
I like how it shows a graph of how much of an advantage one player has over
Lichess is also good for becoming better at chess.
Chess puzzles are available in the training section,
where you have to choose the best move in a given situation,
and follow it through to checkmate.
Players can create their own puzzles.
It is truly better than the alternatives.
Chess.com is cluttered with ads and has an uglier design - minimalism is the way forward.
Lichess is free and open source, and always will be.
Recently I have been looking at languages and compilation:
VMs, parse trees, lexers, and interpreters.
Nand to tetris is a pretty awesome guide to
how the CPU executes programs - from logic gates to high level languages.
Assembler and Bytecode VM
I created an assembler and Virtual Machine to run assembly style instructions.
I haven’t released it as it isn’t as complete as I want it yet.
Parse Trees and Reverse Polish Notation (RPN)
Turns a string such as “( 0 - (6) + ( 6 ^ 2 - 4 * 1 * 5 ) ^ (1 / 2) ) / ( 2 * 1)”
into a binary syntax tree, and then into Reverse Polish Notation, and then executes it.
I have also experimented with a simple Lexical Analysisor, however it’s not at a state
that I’d like to release.
Befunge is an esoteric programming language -
a language which isn’t meant for pratical use, but rather to test programming use.
The language consists of a two dimensional grid of characters.
Each character is an individual instruction.
I was disappointed that the authors didn’t take it seriously enough, and didn’t add input and output to it.
So, I created my own!
I called it ‘Rufunge’.
It’s not finished yet, but can currently run most Befunge programs.
Mesecode is a language which compiles to Lua. It’s purpose it to make
definitions in Minetest easier to read.
You can write:
is ground, cracky=3, stone