Thursday, October 3, 2013

Install KeePassHTTP on Ubuntu

First, of course, we need keepass, and we'll grab git while we are at it. Git is optional here, it just allows for easier updating.
sudo apt-get install keepass2 git-core
Where to put KeePass plugins is non-obvious, but fortunately some Googling reveals it to be at /usr/lib/keepass/plugins. Lets go there and create a directory for KeePassHTTP.
cd /usr/lib/keepass2/
sudo mkdir plugins
cd plugins
Great, now we just need to download the plugin. As I alluded to at the beginning we can grab the plugin via git for easier updating. The project is maintained at https://github.com/pfn/keepasshttp, but we can just grab the one plugin file we need. In fact, if we checkout the entire repository then KeePass will throw some errors as the plugin is there twice in two different formats and it can only load the plugin one time.
sudo git clone -n https://github.com/pfn/keepasshttp.git --depth 1
cd keepasshttp
sudo git checkout HEAD KeePassHttp.plgx
Now you can update the plugin at any time by running the following from the /usr/lib/keepass/plugins/keepasshttp directory.
git pull
If you are only interested in downloading the file once and not worrying about updates you can simply download the extension file.
wget https://raw.github.com/pfn/keepasshttp/master/KeePassHttp.plgx
Now you can restart KeePass2 and the plugin will be loaded.

Congress Shall Make No Law

It seems that a lot of people are very confused about the Bill of Rights and what it legally affords the citizens of the United States. I'm not referring to confusions what the right to bear arms mean, or what speech is free speech. I am referring to who the Bill of Rights is designed to protect citizens from. This misunderstanding became prominent in both the Chick-Fil-A brouhaha over marriage equality, and Starbucks and their policies about guns in their stores.

So in these debates people are referencing the constitution to make it known what their rights are, accusing those who disagree with them of denying them their rights. This would be laughably wrong if the accusations where not so widespread, large in numbers, and coming from every side of the issue.

Here is what the Constitution says about your rights in these situations. If I own a business, and it is truly MY business, I can use the money made from that business and spend it on any political, social, or ethical type of causes within the limits of the laws that govern such things.

So I have the right to do that with my business. But it is a two-way street, consumers can choose to not shop at my store for any reason they want. It could be the color or fashion of my tie. It could be my race, gender, ethnicity, socio-economic upbringing. Oh yeah, it can also be for my politics or the way I use the profits generated from my business. And in response I can do nothing, pretend to do something, or actually change my practices. That is my right. But the constitution does not restrict how I can run my business, and it does not say that anyone has to ever purchase my products, ever. This is how things work in a free society. In fact, this is how capitalism is supposed to work. People boycotting CFA over the gay rights issue is capitalism in action. CFA can change their behavior in response to the boycotts, do nothing, or choose any other option they want.

So this takes us to Starbucks where the coin is flipped over a little bit. Gun rights activists took Starbucks establishments by storm in states that have open-carry laws, buying coffee at Starbucks while carrying a weapon on their person. Shortly after Starbucks changed their policy to "ask" customers carrying a weapon in an open-carry state to leave their weapon in their car. Customers where still allowed to actually carry a weapon on them, the new policy just stated that they would be asked not to. This got gun-rights activists upset so they started boycotting Starbucks. To be clear there where some very uncivil responses leaving some Starbucks cafes with smashed windows. However, the boycott alone is just capitalism at work in a free society. It is the right of Starbucks to have whatever policy they want regarding weapons in their store, and it is the right of open-carry supporter to note buy a Starbucks. Neither the policy nor the boycott are a violation of anyone's rights.

I ran into this same issue again when someone on Facebook posted "Will someone just take one for the team already and shoot Obama???" I decided to take this person to task on their remark and received the response "Freedom of speech. If you don't like it delete me" Putting aside the issue of whether or not saying someone should be murdered really is freedom of speech, there is a more important issue here. If I disagree with something you say, that is not a violation of your freedom of speech. It is in fact a dialogue. It seems that many believe anything outside of an echo chamber is a violation of their freedom of speech.

We need to stop muddying the waters of freedom. You don't get to do and say anything you like and expect nobody to respond with dissent. Dissent is how we get stuff done. It is how we grow us both individuals and collectively as a society. We disagree, we make our disagreements known, we work them out with those that we are disagreeing with. We move on and grow. People need to get over themselves and their opinions and realize if you have something you care about there is someone out there who is going to disagree with them. Get over it. If you can't think of a better argument than hiding behind rights you don't have then it may be a good time to reexamine your values.

The freedoms granted to us in the constitution, freedom of speech and religion, "the right of the people to keep and bear Arms", etc. are there to keep congress from passing laws infringing on those rights. They are not there to keep other citizens from disagreeing with you, and taking actions against your point of view.


Sunday, September 29, 2013

Compiling Snes9x on Ubuntu

After looking into the various SNES emulators available for Linux it looks like Snes9x is the only one that is of high quality and currently maintained. ZSNES seems to work pretty well, but it won't compile on 64-bit, giving you a very old emulator running as a 32-bit binary for the foreseeable future.

I used these instructions on a 64-bit Ubuntu 12.04 machine and a 32-bit Ubuntu 13.10 machine. There are two sets of instructions here. One is for compiling the Unix version of Snes9x and the other is for install the GTK3 version. Theses instructions worked perfectly on 12.04 but on 13.10 the GTK3 version segfaults. I don't know if the issue is with 13.10 or perhaps an incompatibility with my laptop's hardware and Snes9x GTK.

The currently maintained codebase of Snes9x is hosted up on github so we will need to install git. We'll get all the tools required to build the source code while we are at it.
sudo apt-get install git build-essential
Now we can check out the codebase.
git clone https://github.com/snes9xgit/snes9x.git
cd snes9x

Part 1 - Building the Unix version of Snes9x
The Unix version does not contain any sort of interface save for the running game itself. It supports a number of command-line switches. Unfortunately it does not seem to provide any way of running in fullscreen mode.

First we need the dependent libraries.
sudo apt-get install zlib1g-dev libpng12-dev xorg-dev
Now we can compile.
cd unix
autoconf
./configure --enable-netplay
make
sudo cp snes9x /usr/bin/
sudo chown root:root /usr/bin/snes9x
Now we have an executable binary named snes9x. You can go ahead and execute it passing in a SNES rom as the first argument or with no arguments for a list of acceptable options.

To create an entry in our desktop menu create the following file and save it as /usr/share/applications/snes9x.desktop
[Desktop Entry]
Version=1.0
Name=Snes9x
Comment=A portable, freeware Super Nintendo Entertainment System (SNES) emulator.
GenericName=Snes9x
Keywords=Games
Exec=snes9x
Terminal=false
X-MultipleArgs=false
Type=Application
Icon=/usr/share/pixmaps/snes9x.png
Categories=Game
StartupWMClass=Snes9x
StartupNotify=true
Finally, find an icon you want to use and save it as /usr/share/pixmaps/snes9x.png You can get a good icon to use here.
sudo wget http://maxolasersquad.com/snes9x.png -O /usr/share/pixmaps/snes9x.png

Part 2 - Building the GTK3 version of Snes9x
The GTK3 version includes a nice GTK interface with all sorts of configurable options, including fullscreen.

First we need to get the dependent libraries.
sudo apt-get install intltool autoconf automake libglib2.0-dev gawk libgtk-3-dev libxml2-dev libxv-dev libsdl1.2-dev libpulse-dev libportaudio-dev 
As of Ubuntu 15.10, instead of libportaudio-dev you need to install portaudio19-dev.
If you want a GTK2 build then install libgtk2.0-dev and you can leave out libgtk-3-dev.
Now we can generate the install scripts and compile.
cd gtk
./autogen.sh
./configure --with-gtk3
make

sudo cp snes9x-gtk /usr/bin/
sudo chown root:root /usr/bin/snes9x-gtk
You can leave out --with-gtk3 if you want a gtk2 build instead.

Now we have an executable binary named snes9x-gtk.

To create an entry in our desktop menu create the following file and save it as /usr/share/applications/snes9x.desktop
[Desktop Entry]
Version=1.0
Name=Snes9x GTK
Comment=A portable, freeware Super Nintendo Entertainment System (SNES) emulator.
GenericName=Snes9x GTK
Keywords=Games
Exec=snes9x-gtk
Terminal=false
X-MultipleArgs=false
Type=Application
Icon=/usr/share/pixmaps/snes9x.png
Categories=Game
StartupWMClass=Snes9x
StartupNotify=true
Finally, find an icon you want to use and save it as /usr/share/pixmaps/snes9x.png You can get a good icon to use here.
sudo wget http://maxolasersquad.com/snes9x.png -O /usr/share/pixmaps/snes9x.png

Thursday, September 5, 2013

How to flush your swap on Unix machines

After your computer has been running for some time you may find that some memory is stuck living in swap while your RAM has space readily available. The data in your swap will be accessed much slower than if it was living in proper RAM space and it may be to your advantage to force it to RAM. I use the following to clean out the swap on my Ubuntu 12.04 workstation.
sudo swapoff -a && sudo swapon -a
Of course, if you are running as root you can omit sudo from the above command.

Plenty of room to move the swap in to.


Swap has been flushed to RAM.

Sunday, August 18, 2013

Using Rom Collection Browser to play NES games on XBMC 12 with Ubuntu

XBMC is by far my favorite IPTV software. I run it in my living room and use it to play my music collection and easily watch my entire DVD collection without ever needing to pop in CDs or DVDs. All my media is stored in a hard drive on my home server.

I had toyed around with using the Rom Collection Browser plugin to play Nintendo games, but getting it working right is not a trivial task. After a lot of messing around I finally have it working right. These instructions are using XBMC 12 on Ubuntu 13.10 and fceux for the emulator.

First things first. Never run with the version of XBMC packaged for Ubuntu. Team XBMC keeps an up to date version in their ppa at https://launchpad.net/~team-xbmc/+archive/ppa. You can set it up with the following commands.
sudo add-apt-repository ppa:team-xbmc/ppa
sudo apt-get update
sudo apt-get install xbmc
Next we need fceux to act as our NES emulator. You could install fceux with the following command.
sudo apt-get install fceux
However, I wanted to have the latest version of fceux. Since a ppa does not seem to be available I figured out how to compile it from source. It is not very hard and I have full instructions here. Whether you choose to use the version from apt or compile it should not affect it working with the following instructions. If you do install it from apt and have issues let me know in the comment section and I will look in to it for you.

Now that our system is setup we need to fire up XBMC. Choose Programs from the strip and then "Get More..." select "Rom Collection Browser and install it.

The first time you launch it you will get a menu asking you to create a config file. Choose Yes. Next choose "Scrape game info and artwork online." For the platform select NES.

Now it needs to know where the emulator is located at. Select "Root filesystem". Next choose the usr directory, followed by the bin directory. In here scroll down until you find fceux. Select it and click OK.

Your emulator params should be as follows.
-f 1 -x 1440 -y 900 "%ROM%"
You will need to change the 1440 and 900 to match your screen resolution. It can be any resolution your monitor/TV supports. The best way to get it is to either go to the Displays section in the Ubuntu Settings screen, or in XBMC under SYSTEM→Settings→System→Video output→Resolution.

Finally it ask you to tell it where you save your game roms. Usually it will be somewhere in your home folder so select "Home Folder" and browse down from there. When asked for the file mask type use *.nes, unless you keep all of your roms in a zip file, in which case choose *.zip. Theoretically you could use *.zip, *.nes but I had problems getting this to work. YMMV. I choose to just keep all my roms uncompressed since they are so small anyways.

The next question asks you about where to store artwork. You can create a separate directory for the artwork if you like. I chose the same directory as the roms. It creates subdirectories to store the art anyways. How you want to handle this is up to you.

Lastly, answer No when asked if we want to add another rom collection.

With all of our parameters setup click the Import Games button leaving all the settings in tact. Depending on the size of your rom collection this could take a while as it looks up each rom and downloads the metadata for each rom.

There is one last setting we need to make for convenience. Go to the main XBMC page and navigate to System→Settings→Appearance→Skin→Settings→Add-on. Under Home Page Programs Submenu choose Add-on 1 and then select Rom Collection Browser. Now the rom list can be loaded from the home screen.

Now you should be ready to play your favorite Nintendo games straight in XBMC. There are a few gotchas you should be aware of.

The default fceux keys are as follows.
Start: Enter
Select: s
A: f
B: d
Reset: F11

The next one that bit me is that fceux doesn't seem to support batteries so game saves are lost after you exit. Instead use F5 to save your game and F7 to restore from the save.

The delete key shuts down the emulator and takes you back to XBMC.

It is a good idea to log into the regular Ubuntu desktop and play with the fceux settings directly in fceux. My personal favorite is to go under Options→Video Config and set the special scalar to hq3x. This plays with the 8-bit graphics to make them look less blocky. You can also configure a gamepad, set hotkey bindings, etc. The changes you make here will be reflected when it is ran from XBMC.

Compiling fceux on Ubuntu

The following instructions are what I used to install fceux 2.2.1 on Ubuntu 13.10.

First you need to download the source. You can get it from http://www.fceux.com/web/download.html. Download the FCEUX src.

The rest of the instructions will assume that you are at the command line in the directory where you downloaded the file. Replace the file name in the instructions with the name of the file, which will be different if you downloaded a version different from 2.2.1.
sudo apt-get install libsdl1.2-dev scons libgtk-3-dev liblua5.1-0-dev libgd-dev
tar xzvf fceux-2.2.1.src.tar.gz
cd fceux-2.2.1
At this point you will need to open the file named SConstruct
vi SConstruct
Change lines 27 and 28 to look like this.
  BoolVariable('GTK', 'Enable GTK2 GUI (SDL only)', 0),
  BoolVariable('GTK3', 'Enable GTK3 GUI (SDL only)', 1),
This will give us a modern GTK3 interface instead of using the now outdated GTK2 toolkit. Feel free to change any of the other settings if you wish. I turned off the debug symbols. Now we are ready to compile our binary.
scons
This took about 10 - 15 minutes on my Dell 1420. Once it is done we can install it to the system.
sudo scons --prefix=/usr install
The last step is optional but provides a little more desktop integration. You can get a better fceux icon here.
sudo cp fceux.desktop /usr/share/applications
sudo cp fceux.png /usr/share/pixmaps
If you use Unity for your desktop you can change the contents of fceux.desktop in the /usr/share/applications directory to append the following to get some additional benefits when you right-click on the launcher icon.
Actions=Fullscreen;DefaultConfig;
[Desktop Action Fullscreen]
Name=Open in Fullscreen
Exec=fceux -f 1
OnlyShowIn=Unity
[Desktop Action DefaultConfig]
Name=Start With the Default Configuration
Exec=fceux --no-config 1
OnlyShowIn=Unity

Monday, July 1, 2013

Installing Minecraft 1.6 on Ubuntu

I had previously blogged about Installing Minecraft on Ubuntu. As of Minecraft version 1.6 these instructions no longer work because of a newly introduced launcher. The following is updates instructions for version of Minecraft 1.6 and above.

First we need to install Java. The website claims it needs Oracle Java, but the open source Java in the Ubuntu repos works just fine in my experience.
sudo apt-get install openjdk-7-jre
Now we need the launcher
sudo wget https://s3.amazonaws.com/Minecraft.Download/launcher/Minecraft.jar -O /usr/games/Minecraft.jar
sudo chown root:games /usr/games/Minecraft.jar
sudo chmod 755 /usr/games/Minecraft.jar
Change the vi part in the next section to gedit if you want a graphical text editor.
sudo vi /usr/games/minecraft
The file contents should be as follows.
#!/bin/bash
java -jar /usr/games/Minecraft.jar
And then set the proper permissions on the file
sudo chown root:games /usr/games/minecraft
sudo chmod 755 /usr/games/minecraft
Again, change vi with something else if that is easier for you.
sudo vi /usr/share/applications/minecraft.desktop
And put this in the file.
[Desktop Entry]
Name=Minecraft
Comment=Build your own world
Exec=minecraft
Icon=minecraft
Terminal=false
Type=Application
Categories=GNOME;Applications;Game
Keywords=minecraft;Game
StartupNotify=true
The last piece we need is an icon. There are many good Minecraft icons at http://www.rw-designer.com/icon-detail/5547 I like http://www.rw-designer.com/icon-image/5547-256x256x32.png as it gives us the highest resolution available. Replace the URL of the icon you prefer to use in the following command.
sudo wget http://www.rw-designer.com/icon-image/5547-256x256x32.png -O /usr/share/pixmaps/minecraft.png
Now you should be able to play Minecraft by simply typing minecraft in the command-line, in the Unity dash, the KDE prompt, or by browsing to the games menu in the applications menu in your desktop environment of choice. It is also available to all users of your desktop.

You also do not need to do anything to update. Minecraft updates itself each time you start it.

BONUS

I've got one more neat trick up my sleeve. If a CraftBuntu spin sounds good to you, here's how you can setup Ubuntu to just run Minecraft when you sign in. It assumes you have already done the above.
sudo cp /usr/share/applications/minecraft.desktop /usr/share/xsessions/
Now Minecraft is an available option when you select your desktop environment. This works best if you set Fullscreen in the Minecraft options.

You could do a number of things with this setup. You could setup a minimal Ubuntu installation that has no desktop environment, or other desktop-related software installed. You could also allow guests to play Minecraft without touching any of your stuff by them selecting the Ubuntu guest account and setting Minecraft for the login. I have even found that on my struggling laptop this setup allows Minecraft to run more smoothly as there is no other desktop cruft running in the background.


UPGRADING FROM 1.5

If you had already followed my instructions back in the days before 1.6, the following will get you updated to 1.6
sudo rm /usr/games/minecraft.jar
sudo wget 
https://s3.amazonaws.com/Minecraft.Download/launcher/Minecraft.jar -O /usr/games/Minecraft.jar
sudo chown root:games /usr/games/Minecraft.jar
sudo chmod 755 /usr/games/Minecraft.jar
Change the vi part in the next section to gedit if you want a graphical text editor.
sudo vi /usr/games/minecraft

The file contents should be as follows.

#!/bin/bash
java -jar /usr/games/Minecraft.jar

Monday, June 17, 2013

Summer Vacation 2013 - Day 3

The day started out warm, a sign of things to come. This morning breakfast was scheduled for some simple Rice Crispies. Athena declared she didn't like Rice Crispies and was in fact not hungry anyways. Realizing

(Unfortunately this is all I have of that day's log.)

Sunday, June 16, 2013

Summer Vacation 2013 - Day 2

Our second day of vacation happens to fall on Father's Day. For this reason we had planned that we would not be on the road, but would stay in Charleston and do fun family things. As Kim says, we get to do whatever I want to do.

I was awoken by Aurora and Athena saying "Happy Fathers Day!" in unison, which they had apparently planned the night before. The camp was holding a Father's Day Pancake breakfast so when we all got up and reasonably ready we headed off to breakfast. The breakfast was frozen sausage patties cooked on a griddle and pancakes from a box mix. The kids readily noticed the difference between this breakfast and one we where likely to make from home with real sausage and pancakes from scratch. Nonetheless we where all happy to have a hot cooked breakfast that did not include any cleaning up from our part.
After breakfast we took showers, brushed out teeth, and took care of all the other morning business before heading out.

Our first order of business was finding a place to paddle on some water. We discovered that the park we are staying in has kayak and paddle-boat rentals. We took out a one hour rental on a single kayak for Aurora and two double kayaks. Athena paddled with me while Arianna rode with Kim. The lake provided a barely adequate kayaking experience. The water is a mud brown and did not look very appealing. On our trip we kayaked next to dogs having balls thrown in the water by their owners to retrieve and RC sail boats that where participating in a local RC sail boat race. With little shade on the water and a river that didn't match the Wakulla River we are used to enjoying we found ourselves back on shore ten minutes earlier than necessary. After driving around the grounds a little we headed back to camp for lunch.

At camp we discussed our next destination. The park has a climbing wall that Aurora was very interested in and a water park that Athena was wanting to visit. With Arianna as the tie-breaker she kept switching from wanting to go to the water park to not having an opinion. Kim and I both concluded that the climbing wall would probably leave Arianna out and that the water park would be best for making sure everyone was able to participate. With Aurora making her objections well known we went to the water park.

We knew that after 3:00 the tickets where about half priced and we had a little under an hour before we could get the discount so we headed over to a fishing and crabbing dock listed on the park map.

As a teenager docks where always a favourite place to hangout when camping. I clearly remember my brothers and sister spending hours on the docks of the various campgrounds we visit. At the dock we could watch people fish, be surprised by jumping fish, see boats pass by, meet strangers, and generally just relax and talk away from the eyes of our parents. I have always enjoyed the company that a dock has to offer. At this dock I quickly found my serenity. A man was using chicken to catch crabs in a trap. A few other people had brought their fishing poles and the kids enjoyed watching the people cast their lines out and reel them back in. I found a place by the water to enjoy the scenery of the marshes and swamps that filled the far expanse of the water system.

Kim, as it turns out, just found herself getting hot and uncomfortable, so we only ended up at the dock for about thirty minutes. We purchased water park tickets at the campground HQ as they where cheaper purchased there by registered guests, giving us a slight additional discount.

At the park Athena and Aurora buddied up, Arianna and I buddied up, and Kim was given a rare chance to relax doing whatever she wanted alone. The two big sisters quickly found the two water slides and started making their rounds going up the steps, down the chutes, and then back up for more fun. Arianna and I drifted from the pool, to the kiddie water playground and back. Eventually I was able to coax Arianna in to trying the water slides with the promise of smores at night. Her confidence waxed and waned as we made our way up the steps, but she found the courage to finally go down with me. At the bottom she was giddy with excitement at the thrill of riding a tube down a water slide. I thought she would definitely make another go of it, but she was content at first and guided me back to the pool area.

Next I got her to take the lazy river with me. She did not let it be so lazy for me. She demanded we go this way, or that way, and laughed as the waterfalls and water sprays doused us as we passed through. One go through the lazy river and she was done. It wasn't long before she guided me back to the slides where we tried both the original open-air white slide and the enclosed green slide. We kept switching back and forth and then Kim got my phone to snap a picture of us coming down. As we reached the end, instead of grabbing Arianna and making sure she was secure with me I raised a hand in the air for a pose. While it did make for a nice picture that Kim caught very well, it also left us vulnerable as I lost my balance when we hit the water and our raft flipped, leaving Arianna in the water.

One very nice thing about this water parked is that they are fully staffed with attentive life guards. Before I had a chance the life guard at the bottom pulled Arianna out of the pool. The experience shook her up very good and she was done with the slides. So Arianna and I found ourselves back in the pool for a while. A little while later Aurora and Athena where having a hard time agreeing about what to do so Kim took Athena and left Aurora to her own will.

About an hour before closing Arianna got her nerve back up for the slides where we spent almost the rest of the time. Arianna had which slides we would do down in advanced, with a plan on which slide we where going to do now, and what the next three slides we where going to do already scheduled. This gave her great fun, and a few times she went down with Aurora and let me take some solo trips.

At the end even Aurora agreed that this was a better idea than a climbing wall. If nothing else, the cool water made us feel like the otherwise hot day was actually cool. It wasn't until we where back at camp and our bodies had time to readjust that we came back to realizing the heat the day was providing.

Afterwards we found a local Bi-Lo. Aurora and I went in and purchased goods for making smores and I even treated everyone with a drink. A Coca-Cola for Kim and I to share, a Mountain Dew for Aurora, a Dr. Pepper for Athena, and a lemonade Gatorade for Arianna. This was the first time we had anything but water since leaving our house.

For dinner I cooked chicken breasts, new potatoes, and corn. Aurora cut up the potatoes and wrapped them in tin foil. Athena and Arianna shucked the corn and Kim wrapped it up in tin foil. I started the fire, which took me longer than usual, and cooked it all over the grill. The corn turned out the best of all. It was very sweet and juicy. We all ate our fill and had some left over.

Our second night camping proved to be a little on the warm side and it took a while before the night brought the cool air necessary to make us comfortable. Even with our tent being in a wooded area shaded from sunlight, it was no escape from the muggy summer swamp air.

All-in-all a very good Father's Day even though we where far away from home with little leeway for where to go and what to do.

Saturday, June 15, 2013

Summer Vacation 2013 - Day 1

Kim and I spent most of Thursday and Friday afternoon getting everything packed and loaded into the car so we would be ready to go Saturday morning. We left the house a little after 9 o'clock and dropped off the dogs. Kim had already dropped of the cat with Katie earlier that morning. We where on the Interstate a little after 10.

We quickly discovered that the electric outlets in the car where not working. This was not good as Kim's phone was dead, and we where relying on the GPS on our phones to get us to our destination. I was also hoping to let the kids tether to my phone's Internet for entertainment along the way. In town we made a few stops to find a replacement fuse, and also stopped at the truck stop in Lloyd, but didn't find any. At the truck stop I remembered I might have bought fuses and put them in the glove compartment box, which is where we did in fact find replacement fuses.

I drove the first stretch until we stopped a little after noon at a rest stop and ate sandwiches. The girls did a great job running around the grassy area and playing with each other while Kim and I rested and enjoyed some time at the picnic table.

Kim drove after lunch and we only stopped for the occasional bathroom break. As I sat passenger the kids where good enough that I was able to take a nap that I wasn't expecting I needed. After Kim manned the helm for a few more hours on the road I took over driving the final part of the trip.

As Kim's luck would have it, the kids where very needy while I was driving. Arianna was especially needy as she wanted to do crossword puzzles and use these little sewing kits that Kim bought, but found she needed a lot of help that Kim was unable to provide from the passenger's seat, so Arianna through her share of fits and cried a lot.

By the time we where nearing Charleston the kids where very ready to be at our destination. After we exited the Interstate we still had over an hour of driving ahead of us before we where actually in Charleston. The trip consisted of lots of swamps, rivers, marshes, and wooded areas that where very pretty and was almost relaxing over the constant "are we there yet?"s.

Our destination in Charleston is John Island Park, which is a very large park. It has a full water park, climbing wall, camp grounds, primitive camping, conference halls, fishing dock, kayaking river, and more. We had reserved a spot in the primitive camping grounds.

As soon as we arrived I began scoping out a spot for us to camp, leaving the rest of the family in the car and AC. The primitive camping grounds is a large open grassy area surrounded by trees. I noticed one tent had taken advantage of a little clearing in the trees and soon I found another clearing in the trees where we could have 24-hour shade. I quickly went back to the car and retrieved Aurora to stand in the area to prevent anyone else from grabbing our spot.

We made quick work of unloaded our van. On the last trip back Kim locked up the car and we began setting up camp. It did not take long before we realized we didn't know where the keys are. I had left them in the care when I left so everyone could stay cool, and Kim did not see them anywhere when she was emptying out the care. After a little inspection I found them sitting in the ignition. This was a little odd as the car is programmed to not let the doors lock if the keys are in the ignition and any of the doors are open. None-the-less, there they where locked in the van in the ignition and with the headlights on. We have AAA so Kim called them and put is in the queue to get our car open.

After the trip driving here, having the keys locked in the car put me on edge. It took a lot of will to stay pleasant with Kim as I was very annoyed, but I understood that it was also frustrating for her and it was an accident.

While we a waited on AAA I set up the tent and Kim prepared dinner. Dinner was sauteed zucchini and squash with Ramen noodles. As Kim and I stayed very quiet with each other, the girls ran around, played, and generally had a good time. AAA finally came and got our care open and jumped, as by this time the headlights had rendered the battery dead. Athena and I took a twenty minute drive around the park while Kim and the other two girls got everything set up for bed.

When we where back at the camp we got everything else washed, put away, and organized. Arianna was too scared to sleep with her sisters in the complete dark, so Kim traded places with her so I was sleeping with Arianna and Kim with the other two girls.

Always on the look-out for a chance to do some cartography for OpenStreetMap, I took to mapping the park on my laptop, using my phone's Internet. The existing map was very incomplete, not even connecting the mapped roads in the park to anything, so the roads where completely inaccessible according to the map. I got most of the main roads mapped out as well as the road in the campground and then yielding the laptop to Kim so she could do her blogging. While Kim wrote I fell asleep with Arianna snuggling up against me.

Sunday, April 28, 2013

No Easy Day


I'm presently reading No Easy Day by Mark Owen and Kevin Maurer. It is written by one of the Navy Seals that was involved in the raid that killed Osama Bin Laden.

I find the following really inspiring.

  1. He is part of the DEVGRU group within the Navy Seals. The Navy Seals are widely respected as the best-of-the-best in the US military. The DEVGRU group is the best of the Navy Seals. The non-ending life devotion to be the best at your craft, and even be the elite group within that best-of-the-best is very inspiring.
  2. To direct that goal of perfection in a manner that is completely selfless. The use of your skills to better your tribe is something that seems very sadly lost in today's society. If you are only working for yourself you are working for nobody and your life is pointless. PERIOD.


Here's two things I could never do.

  1. Devote myself to killing others. The goal of bettering society by killing those deemed needing to die is a snake eating itself. This has continued to bring impermanent peace, but it is never sustaining. It also necessarily means many innocents will die in your goal.
  2. The inability to say no. I'm not interested in being a tool to be used at the whim of someone else. I could never completely give myself up, my body, life, and actions to someone else. If I can't say "No" then I'm not a human. I am a puppet. That doesn't interest me. In fact, I find it absolutely abhorrent.
It would be nice if there where other organizations that worked like the Navy Seals, but accomplished the betterment of society through other means.

In my its own way my current job does provide some of that. I work as a government contractor writing applications for the state. I feel very strongly that what I do is building a better state government. I believe that I bring real value to the tax payers in the state of Florida. Given how completely backwards the government can be in its implementation of technology I feel our group is relatively progressive. 

However, there is absolutely no feeling of being part of the best. And I am certainly not the best of the best even in my group of mostly average coders.

Most of my self-betterment is done in my limited spare time. My free time is often directionless and shifts too fast for me to ever actually get really good at any one thing.

Thursday, January 17, 2013

Installing Minecraft on Ubuntu

UPDATE: As of Minecraft 1.6 these instructions no longer work. I have posted updated instructions at Installing Minecraft 1.6 on Ubuntu.

This post is for anyone who wants to install Minecraft on Ubuntu and have it feel like any other game installed via the Ubuntu Software Center. It assumes you have already purchased Minecraft and provides full Unity integration, though Unity is not needed for this to work. In fact, I suspect it should work for any Linux distribution that has a desktop environment.

We are going to do this via the command-line because copy-and-pasting commands from this tutorial is easier and more fool-proof than following a long list of screen shots. It's also easier for me to write it that way as there are fewer steps.

First we need to install Java. The website claims it needs Sun Java, but the open source Java in the Ubuntu repos works just fine in my experience.
sudo apt-get install openjdk-7-jre
Now we need the actual game
sudo wget https://s3.amazonaws.com/MinecraftDownload/launcher/minecraft.jar -o /usr/games/minecraft.jar
sudo chown root:games /usr/games/minecraft.jar
sudo chmod 755 /usr/games/minecraft.jar
Change the vi part in the next section to gedit if you want a graphical text editor.
sudo vi /usr/games/minecraft
The file contents should be as follows.
java -Xmx1024M -Xms512M -cp /usr/games/minecraft.jar net.minecraft.LauncherFrame
And then set the proper permissions on the file
sudo chown root:games /usr/games/minecraft
sudo chmod 755 minecraft
Again, change vi with something else if that is easier for you.
sudo vi /usr/share/applications/minecraft.desktop
And put this in the file.
[Desktop Entry]
Name=Minecraft
Comment=Build your own world
Exec=minecraft
Icon=minecraft
Terminal=false
Type=Application
Categories=GNOME;Applications;Game
Keywords=minecraft;Game
StartupNotify=true
The last piece we need is an icon. There are many good Minecraft icons at http://www.rw-designer.com/icon-detail/5547 I like http://www.rw-designer.com/icon-image/5547-256x256x32.png as it gives us the highest resolution available. Replace the URL of the icon you prefer to use in the following command.
sudo wget http://www.rw-designer.com/icon-image/5547-256x256x32.png -o /usr/share/pixmaps/minecraft.png
Now you should be able to play Minecraft by simply typing minecraft in the command-line, in the Unity dash, the KDE prompt, or by browsing to the games menu in the applications menu in your desktop environment of choice. It is also available to all users of your desktop.

You also do not need to do anything to update. Minecraft updates itself each time you start it.

BONUS

I've got one more neat trick up my sleeve. If a CraftBuntu spin sounds good to you, here's how you can setup Ubuntu to just run Minecraft when you sign in. It assumes you have already done the above.
sudo cp /usr/share/applications/minecraft.desktop /usr/share/xsessions/
Now Minecraft is an available option when you select your desktop environment. This works best if you set Fullscreen in the Minecraft options.

You could do a number of things with this setup. You could setup a minimal Ubuntu installation that has no desktop environment, or other desktop-related software installed. You could also allow guests to play Minecraft without touching any of your stuff by them selecting the Ubuntu guest account and setting Minecraft for the login. I have even found that on my struggling laptop this setup allows Minecraft to run more smoothly as there is no other desktop cruft running in the background.