skip to main content - accessibility menu - dyslexic font - mobile - text - print

Hacker Public Radio

Your ideas, projects, opinions - podcasted.

New episodes Monday through Friday.



Host ID: 215

A dork that likes Minecraft, web development, and coffee. Not in that order.

episodes: 5

hpr1838 :: Waking up with Windigo

Released on 2015-08-19 under a CC-BY-SA license.
This is a quick summary of my alarm clock system, written in bash and highly unreliable.


My preferred hardware platform is a Dell Mini 9.


My alarm clock is an embarrassing combination of bash scripts and Audacious, my favorite media player. Any media player will do, as long as it's scriptable.

How It Works

There are currently two bash scripts in my crappy alarm setup. One script is called "wakeup" and the other is called "wakeup-at".

wakeup is simply a wrapper that adds some error handling around audacious. It launches audacious if it can't find an instance running already, waits five seconds for it to get itself together, and then causes it to play. It is also currently broken, so the 'launching audacious' part doesn't work. I have to manually start audacious myself. FAILURE.

wakeup script:

audacious &

sleep 5s

audacious -p &

You've noticed that the "wakeup" script doesn't actually have any timing involved; If you want to use it as an alarm, you get to combine it with the bash "sleep" command. This is not a failure, this is by design! An example alarm:

sleep 8h; wakeup

One problem with this methodology is that it requires math, and is prone to errors. If I'm going to sleep at 10:46:33 PM and need to wake up at 7:00 AM, I need to chain sleep commands together for each unit of time:

sleep 7h; sleep 14m; sleep 27s; wakeup

Get some of that math wrong, and you wake up at the wrong time. FAILURE.

"wakeup-at" is a wrapper around "wakeup" that uses the "at" utility to schedule the wakeup script. So, instead of using multiple sleep commands, it accepts any of the time formats that at accepts:

wakeup-at 7:00 AM
wakeup-at 6:00AM 2018-02-02
wakeup-at teatime

Here is the wakeup-at script:


## Make sure we have enough arguments
if [ $# -lt 1 ]
  echo "Usage: `basename $0` <time>"
  exit 1

echo "$@"

## Add custom time keywords
case "$1" in
	echo wakeup | at 3:33 AM

## Catch-all; send all arguments to at
	echo wakeup | at $@

If you make a syntax error, "at" tells you about it immediately. Its only failings are what it inherits from the original "wakeup" script.

hpr1813 :: Apt Spelunking: surf, lightyears, and fbterm

Released on 2015-07-15 under a CC-BY-SA license.

"Apt spelunking" is a silly term I made up for the act of searching through the Debian package repositories with vague terms, and trying out random applications therein.

Today, we will be covering three packages: surf, lightyears, fbterm


Surf is a lightweight, graphical browser. It uses the webkit rendering engine, and is a GTK-based application (not that you can tell). It is extremely spartan. Part of the suckless project, surf takes the Unix philosophy to it's extreme.

Essentially, you only get a single browser window. No tabs, bookmarks, or other interface to speak of. Any navigation is accomplished through links on the page, or some very rudimentary keyboard shortcuts. Ctrl+H goes forward in history, and Ctrl+L goes backwards. If you want to visit a URL, you can either send it as a command-line argument, or use Ctrl+G to bring up a drun-like text input. It is perfect for lightweight system configurations, surf does the bear minimum to qualify as a web browser.

If you're looking for zen simplicity, or want an easy way to embed a web app in its own window without a lot of overhead, surf is an excellent option.


20,000 light years into space bills itself as a "single player real-time strategy game with steampunk sci-fi". In it, you are given a square of alien landscape, dotted with steam vents, and a small settlement at the center. This settlement runs on the steam so abundant on this alien world, and it's your job to keep the steam flowing.

The game consists of building steam nodes, which capture steam from the vents, and connecting them back to your settlement. Of course, you can't simply build a straight pipe back to your settlement; the length of the pipe is taken into account, and the longer the pipe, the harder it is to get steam to travel through it. You can get around this by daisy chaining nodes together in a web, and providing multiple routes back to your settlement. Running a steam-powered base on this alien planet isn't without its share of dangers, however! There are aliens, inclement weather, and seismic instability that can all damage your network of steam pipes and nodes. If your steam pressure falls below a certain threshold, you lose.

This game has an eerie similarity to network engineering, and I've always enjoyed it a lot. It can get very frustrating, though, and the difficulty levels are steep steps. If you're interested in strategy games, I'd highly recommend giving this one a try.


Another in the lightweight category, fbterm is a terminal emulator that's designed to be run with a framebuffer. A framebuffer is a low-level method for displaying text and/or graphics on a monitor, and is often used to run GUI applications without the overhead of an X server.

You can use fbterm to get an antialiased terminal, with freetype font support. That means you can use bitmap and vector fonts, just like most full-featured terminal emulators, without the extra weight of running an X session and window manager.

If you like window managers, you could also use fbterm as a replacement for one of your consoles, using a program called "rungetty". Here's the instructions: I don't mind having fbterm as a backup terminal, in case I need to debug an X session or my window manager has locked up. Having an option that is more graphically pleasing than a bare getty TTY can be a lifesaver.

hpr1638 :: Surviving A Roadtrip: Food

Released on 2014-11-12 under a CC-BY-SA license.

As we are all human to some degree, we require sustenance. When on a roadtrip, this can prove to be challenging - but it is also an opportunity to save money and enjoy yourself!

Bringing Food

- Buying all your food on the road is a good way to empty your pockets
- Convenience stores do not have your health in mind; their food is generally
  over-salty or over-sugary
- Stopping for snacks can add lots of extra time to a trip
- A quick stop at the grocery store before your trip is not a bad idea
        - Stock up on non-perishable snacks
        - Nuts and trail mix are a classic for a reason. They're full of protein and
          fiber, and easy to munch on in a vehicle
        - Fruit are sweet, healthy, and also usually easy to eat in a vehicle.
          Apples and grapes are super easy, bananas less so, and oranges are tricky.
          You can pre-peel fruit to make it more accessible, but it won't last as long.
- Water is important. Make sure to have a gallon jug with you, and refill as
  necessary. I don't mind tap water, but if you're picky, there are water
  filters designed for camping that are compact and quick. Keep yourself
- Your options for variety of food increase a lot with a cooler
        - Things like cheese and sandwich meats should do fine
        - Make sure to fill it with ice or freezer packs when you set out in the
          morning, and maybe during the afternoon depending on weather
        - Check to see if your lodgings have refrigeration; your cooler will be
          useless if you don't have something more substantial to use in-between
          legs of your journey.

Stopping To Eat

- Saving money and being efficient is all well and good, but roadtrips are not
  all about getting from point A to point B.
- A great way to experience an area is by ingesting a small part of it
- Add an hour or two to your travel time for a meal stop
- Pick lunch or dinner
        - Lunch may suit your timetable better if you are an early riser
        - Lunch menus often offer slightly less food for a reduced price
        - Restaurants may be less crowded for lunches
        - Dinner might be a better choice if you like waking and driving late
        - Dinner menus are more comprehensive, but often more on the expensive side
- Avoid chain restaurants all the time, but especially on a roadtrip
- Local restaurants and eateries are usually found in downtown areas, away from
  highways. They are well worth the diversion.
- Different areas have vastly different cuisines, and trying new things can be
  very rewarding. Crawfish: who knew?
- Find something on the menu that you don't recognize, and eat it.
- If you are a picky eater, try not to let your preconceptions stop you from
  trying something. For instance, coconut soup is surprisingly unlike any other
  coconut dishes that I've had.
- Be polite, be patient. Many tourists are rude, and there is a chance that
  the person helping you gets to deal with those tourists frequently.
- Do not be afraid to ask questions. Figure out what you can, but ask for
  clarification if something on the menu is unusual.
- If you have food-based allergies or special dietary requirements, these might
  not be accommodated in all areas. If you are a vegetarian or vegan, or are 
  allergic to gluten, peanuts, or dairy, your options may change drastically
  depending on the region you are in.
  - A little research into local restaurants  could help you determine which
        places you can eat without stopping at each restaurant in town.
- Overall, try to enjoy yourself. Roadtrips can be high-stress affairs, and a
  meal break can do wonders to relieve some of the stress that's built up over
  the day. Relax, and give yourself plenty of time to eat

hpr1527 :: Surviving A Roadtrip: GPS

Released on 2014-06-10 under a CC-BY-SA license.

I have spent many, many hours in a vehicle driving around. While travelling, I've found a GPS to be one indispensable tool. These are some of the GPS-related tips that I have discovered:

  • Having a "navigator" - someone else to help operate the GPS - can be very helpful in stressful driving situations. If you have someone that can help, let them handle GPS programming.
  • Know how to operate your GPS. Planning routes are just the beginning; know how to get your GPS to find food and lodging nearby, and how to change a route to avoid trouble (road closures, traffic jams, detours).
  • Update your maps! Old map data can drive you into construction zones or route you into congested areas that new map data would have let you avoid.
  • Be aware of tolls! The Northeast loves road tolls, and they can quickly add up. My GPS has the option to route around toll roads; so you can use that, or make sure you are prepared for that expense.
  • You can also use your GPS as a normal map, except it's a map automatically centered on your exact position. In certain situations, this can be more useful than having your GPS provide you with directions.
  • My GPS tells me the local speed limit, in addition to how fast I'm going. This is an excellent way to avoid getting a ticket.
  • Mount your GPS somewhere. Looking down into your lap is a good way to find yourself in a gutter.
  • GPS are not 100% accurate! Don't believe their lies! If the directions they are giving you sound bogus, use your better judgement.
  • BONUS: Cameras! If you want to take pictures while on the road, try leaving your camera set to the "Landscape" macro if you have that option. It will prevent focus issues when taking quick shots. Also, keep your camera easily accessible to avoid extra distraction. If you have a navigator, they might be the best photographers.

hpr1008 :: Fix the "Sticky Keys" Bug in Minecraft

Released on 2012-06-12 under a CC-BY-SA license.

A quickie episode by Windigo that covers a fix for the "Sticky Keys" bug in Minecraft on Linux.

The "Sticky Keys" bug causes the Minecraft client to act as if a button hasn't been released when it has - which causes your character, Steve, to suffer some awful consequences as a result (depending on what situation you are in when the bug occurs).

Upgrading the LWJGL libraries/drivers that come with Minecraft usually fixes this bug. To upgrade the drivers, do the following:

  • Download an updated version of the LWJGL libraries
    • LWJGL 2.8.0 - Not the latest release, but worked great for me
  • Copy the following files from lwjgl-2.8.0/jar/ in the zip file you downloaded to /home/[youruser]/.minecraft/bin/, replacing the existing files there:
    • jinput.jar
    • lwjgl.jar
    • lwjgl_util.jar
  • Copy all of the files from lwjgl-2.8.0/natives/ in the zip file you downloaded to /home/[youruser]/.minecraft/bin/natives/, again replacing the existing files there

If you still encounter issues with the new versions of the libraries, try a newer or older version until you find one that works with your system. 2.8.0 happens to work for my setup (Debian Stable w. Sun Java), but YMMV - your Minecraft may vary.



Become a Correspondent