Sunday, January 25, 2015

Introducing BodhiBuilder

If you follow me on GitHub then you likely noticed I have added a few projects in the last few days. One of these projects has been on my TODO list for awhile - cleaning up the old remastersys script I have always used to create the Bodhi Linux ISO images for the last few years. Today I am pleased to announce you can find my fork of remastersys dubbed "BodhiBuider" on GitHub here.

The couple of notable changes I have made so far are:

  • XZ compression to decrease image size
  • Starting support for UEFI booting
  • Default Bodhi branding
If you take the time to peruse the code and have any suggestions for improvement please feel free to share.

~Jeff Hoogland

Monday, January 19, 2015

Bodhi Linux 3.0.0 RC2 Reloaded

Just over four months ago I announced that I was stepping down from the active role I had maintained in the Bodhi Linux project since it started a little over four years ago. Today I am happy to share that I am returning in my full capacity as project manager/lead developer and I come bearing gifts!

Over the past couple of weeks I have re-familiarized myself with what has been going on in the land of Enlightenment and cleaning up the Bodhi build scripts (which you can find on my GitHub). Today I am pleased to share what I have been referring to as a "Reloaded" version of work on this third major release. To cut right to the chase I would like to share download links for the "Bodhi Linux 3.0.0 RC2 Reloaded" release.

Download Links

Technical Details
  • Enlightenment 19.2 Desktop
  • EFL/Elementary 1.12.2
  • Linux Kernel 3.16
  • Ubuntu 14.04 LTS Core
  • Midori Webrowser 0.5.9
  • Terminology Terminal Emulator 0.7.0
  • nm-applet connection manager 0.9.8
The "Legacy" ISO image is a special disc tailored for older hardware. It contains the same core software as the 32/64bit releases with the following exceptions:
  • Non-PAE Linux Kernel 3.2 with i486 support
  • Enlightenment 17.6 Desktop


Unlike previous Bodhi Linux releases, the 3.0.0 release will have a more uniform look, instead of requiring the user to choose what the system looks like when it first starts up. This makes setup easier for new users, while Enlightenment still allows power users the configuration options they crave.

Live Image Splash

Boot Splash

Login Screen

Default Desktop


Wrapping Up

While I am not calling this a stable release, there is a good chance these images strongly resemble what our stable release will look like when it comes out next month. 

You can get support installing/using Bodhi Linux 3.0.0 RC2 Reloaded in the Bodhi Linux 3 section of our user forums. I would ask that you please do not post requests for support on this blog post as the comments section here is not designed for troubleshooting.

Thanks for giving Bodhi Linux and Enlightenment a try.

~Jeff Hoogland

Tuesday, January 13, 2015

HOWTO: Fix Client Distortion on Ubuntu 14.04

Late last year an update to the game launcher exposed a bug in in the Mesa library. This caused the launcher to look something like this while running under Wine on Ubuntu 14.04 with some graphics cards:

You can find the opened and closed bug report here. Sadly this patch has yet to make its way into the default Ubuntu 14.04 repositories (and who knows if it ever will) so to resolve the issue you need to update your Mesa packages. You can do this via the Xorg Edgers PPA with the following commands:

sudo add-apt-repository ppa:xorg-edgers/ppa
sudo apt-get update
sudo apt-get dist-upgrade
You might need to restart your X server for the changes to take effect. This fix should work with all Wine variants such as Play on Linux and Crossover. If you are using a non-Ubuntu based distro, you will want to install Mesa version 10.4 or newer. Enjoy your gaming!

~Jeff Hoogland

Tuesday, January 6, 2015

Weather Trek - Weather planning for Trips

New year, more new projects! I do a good bit of traveling for work and this time of year traveling in the Midwest the weather is a constant battle. After loading up four different zipcodes on twice a day for a few days in a row trying to get an idea of what the weather would be like while traveling on the upcoming weekend, I decided to make a simple tool to look up the information for me.

Introducing my simple tool I'm calling Weather Trek:

Like my other projects this one is written in Python and utilizes the Qt toolkit for the GUI. You can find the source code and Debian/Windows packages on the GitHub page here.

After launching the application, simply post two locations into the entries at the top and click the "Get Weather" button. Weather Trek then uses Google Maps to find the optimal route between these two cities and then looks up the five day forecast along this route on To get more detailed information for a particular point, you can click on the city name on any day.

The GUI and functionality is currently very simple and I am open to ideas for improvements. You can post about bugs/ideas on the GitHub page.

~Jeff Hoogland

Monday, November 17, 2014

Qute UI revamp and Deck Stats

A little over a week ago I posted about the first draft of my Qute MTG Stats tool. This past weekend I had some time between matches of magic to implement some new ideas I had for the project. These include:

  • Adding notes to events such as deck played and decks played against
  • See stats by deck for decks you've added to the event list
  • Export event/opponent lists to CSV files
  • Export full stats to clipboard/text file
  • Save edited data to a .qute file
  • Load data from a selected .qute file
  • Added prompts to let the user know when actions complete successfully
  • Added in application help prompt

I've also moved away from the original tabbed setup I started with to separate to allow the user to view information side by side:

For a full set of screenshots check here.

For those interested in giving this a try yourself, you can always download the latest Windows binary form here. For those using a superior operating system, simply install pyside, download the latest snapshot, and run the

If you have any suggestions or feature ideas let me know with a comment below.

~Jeff Hoogland

Friday, November 7, 2014

Qute MTG Stats Tool

Late last year I wrote an Excel workbook that you could use to analyze your Magic the Gathering match history using VBA. While it was functional, being contained in an Excel workbook meant my tool was tied to closed source software and was limited by the bounds of Excel.

Today I would like to share the first draft of a new project of mine - Qute, a stand alone MTG Stats Tool:

For those interested in giving my tool a try, you can find install and usage instructions here.

The main thing I am looking for is suggestions on how to improve this tool. What information would be useful to provide that can be scrapped from the data provided in our DCI history? If you have any ideas or find any bugs drop a comment below or open up a ticket on GitHub!

~Jeff Hoogland

Wednesday, November 5, 2014

PyPair: A Python Library for Pairing Swiss Tournaments

Something I've spent a few hours on in the last month is a small python library, that I am calling PyPair, that allows you to easily manage a Swiss-System Tournament. For those unfamiliar with this concept:

"A Swiss-system tournament is a non-elimination tournament format. There are several rounds of competition, but considerably fewer rounds than in a round-robin tournament, so each competitor (team or individual) does not play every other competitor. Competitors meet one-to-one in each round and are paired using a predetermined set of rules designed to ensure that as far as possible a competitor plays competitors with the same current score, subject to not playing the same opponent more than once. The winner is the competitor with the highest aggregate points earned in all rounds."

A short example of using PyPair:
from pypair import Tournament

Players = { 1:"Tim",

to = Tournament()

for player in Players:
    to.addPlayer( player, Players[player] )

pairings1 = to.pairRound()

print pairings1
Yields the output:

{1: [1, 7], 2: [2, 6], 3: [3, 5]}

Which is a simple python dictionary where each key is a table number that corresponds to a list of the players playing at that table.

If you would like to see a more complex example see here.

If you are interested in the math behind the pairings, PyPair essentially does the following when you call the pairRound() function:

Group players by point totals
Starting with the group who has the most points:

  • Create a graph with all players in current point total
  • Connect players in the graph that have not played yet
  • Use a Blossom based algorithm to compute a maximal matching of the graph
  • Take any unpaired players and add them to the group with the next highest point total
Repeat until there are one/none unpaired players
If there is one unpaired player, assign a bye
Return a python dictionary of the pairings

The networks created by PyPair are implemented using the NetworkX library.

If you have any suggestions for improvement or find an issue feel free to open a ticket on GitHub or leave a comment below.

~Jeff Hoogland