Java 8 Permanent Generation and Metaspace

In Java 8, the JVM’s Permanent Generation has been replaced. But with what? Turns out it is called the Metaspace. It serves the same purpose as the Permanent Generation, but it is not a fixed sized. It is stored in the native heap, so you are only limited by the amount of memory on your system. This should eliminate any of those nasty out of memory errors generated by the Perm gen.

Here are a few good links to read up further on the subject.

Ruby Bundler Throws an Encoding::CompatibilityError

When you run bundle install to store the ruby gems for your application bundler throws the following error message:

bundle install Encoding::CompatibilityError: incompatible encodings: UTF-8 and ASCII-8BIT

This is a really weird error and seemed to come out of nowhere for me.

Solution: Delete your Gemfile and retype it. Apparently an illegal character got pasted into my Gemfile. After creating a new file, the error message disappeared.

Install Cygwin Packages from the Command Line Using Setup

Cygwin is program that lets you run Linux/Unix utilties on windows. One problem with Cygwin is you always forget to install something. What are you options? There are a couple of package managers for Cygwin with confusing names: apt-cyg and cyg-apt. One of this works well, but I can never remember which one.

Turns out there is an easier option. Do the following:

  1. Copy the Cygwin setup program to your Cygwin directory.
    • For 32 bit, copy setup-x86.exe to C:\cygwin.
    • For 64 bit, copy setup-x86_64.exe to C:\cygwin64.
  2. Use the setup program to install new packages from the command line. Just navigate to your cygwin directory and type (use 32 bit or 64 bit command depending on your Windows version):

     setup-x86.exe -q -P Package1,Package2,Package3

This launches the setup program which downloads the package and any required dependencies. No packaging software required.

You can get a complete list of available Cygwin packages at:

Links added to the Right Column

I updated the home page so that my recommended list of links appears at the top of the page. They were at the bottom before, but I guess most folks were not able to see them. This list is updated more often than the main blog.

Upgrading to Windows 10 Facts

Over the last couple of weeks I have tried to upgrade a few systems to Windows 10. In the process I learned a few things that are worth sharing.

  1. If you request an update through the normal process, it take about 2 days to for the download and upgrade to start. Not bad, but I don’t like to wait.
  2. You can download the Windows 10 ISO from Microsoft and upgrade that way. No waiting at all. Just put the image on a thumb drive and start the upgrade from the mounted image.

Note: If you need to make a bootable ISO, you can do that using the Rufus ISO utility for Windows.

What about a Clean Install?

I use a number of virtual machines for testing and I wanted a couple to be Windows 10. It seems like I read or heard from multiple places that you could do a clean install from the ISO as long as you had a Windows 7 or Windows 8 license key. Wrong!!!!

You cannot do a clean install with just a license key from Windows 7 or 8. In fact, here is the word direct from Microsoft.

Can I perform a clean install using the Free upgrade?
No, it will require that you are running a previous qualifying version and start the upgrade from within the qualifying version. You can initiate a clean install after completing the Upgrade.
Source: Windows 10 FAQ

Translation, if you are using a VM, you have to install the old version first. Then upgrade it. I can confirm the upgrade works if you use this method. Just install the old version. Patch it. Then run the install from the Windows 10 ISO. Windows 10 installs just fine.

I have not tested if I can do a clean install after upgrading from a license key. In other words, after I have upgraded a version of Windows with a particular license key, can I do a clean install of Windows 10 with that license key? I don’t know yet. I will give this a try this week and let you know.

Suppressing Output from a Linux Command

After executing a Linux command have you ever wanted to suppress all of the output? I have and I finally found the answer. Turns out the answer is pretty straightforward.

Here is a typical example. I execute gedit and send the output to the bit bucket.

gedit > /dev/null

The command sends standard output to the null device. However, any output that would be sent to standard error still appears in the terminal window.

To turn off standard error, you can pass a modifier to the expression. Here is the list of options.

  • > /dev/null redirects stout to the null device
  • 1> /dev/null same result as the previous command
  • 2> /dev/null redirects sterr to the null device
  • &> /dev/null redirects sterr and stout to the null device

So to prevent any output in the terminal window the following command would be used:

gedit &> /dev/null

So to start the command as a background process would be:

gedit &> /dev/null &

And finally, to execute a command in the background without making it a child process of the terminal use this.

(gedit &> /dev/null &)

This command will launch gedit in its own process and prevent any output from appearing in the terminal.

Resizing Windows on Xubuntu 14.04

Resizing Windows on Xubuntu Linux 14.04 can be really difficult as the default theme sets the window border to 1px. This is very difficult to grab with a mouse. So how to fix this? There are two easy solutions.

  1. Go to Settings –> Windows Manager and select Daloa. This theme looks good and has thicker borders.
  2. When grabbing a border hold down the Alt key and right click the corner. This should make it easy to grab.

Creating a Basic REST Web Service using Grizzly, Jersey, and Maven

My latest Java tutorial is now up on This tutorial covers how to make a basic REST application using Grizzly, Jersey, and Maven. If you are new to any if these tools, this tutorial is a great way to try them out. You can launch the tutorial from here:

Java SE 8: Creating a Basic REST Web Service using Grizzly, Jersey, and Maven

In the tutorial you create an application using the open source Grizzly web server and the Apache Jersey library to create a RESTful web service. The Jersey library is the reference implementation of the JAX-RS Java REST web service API. Jersey makes creating RESTful web services really easy and the tutorial takes you through the process step by step.

Finally, Apache Maven is a Java build tool that makes it really easy to create and manage projects. It also allows you to create new projects using well known tools and templates and automates the process of downloading required libraries. Finally, you use Maven to create create an uber jar file which stores all the required libraries for an application in a single file.

Windows 10 Update in 2 days

My Windows 10 upgrades have shown up 2 days after I requested them. Yay! That is not too bad, but I still thing there must be some way Microsoft could be more definitive on when your update will show up.

Also, I need to point out you can download a Windows 10 ISO from here. You just need a valid Windows license key to install. The only caveat is the image only does clean installs. So if you are ok with wiping your disk, you can install right away. So I hope you saved your old boxes or wrote down the numbers someplace, because now they become very useful.

Windows 10 is Available Today! But its not...

Microsoft has released Windows 10 today! All users rejoice!

But is it released? I got out my windows laptops and started the regular Windows patching process. On my Lenovo, I finally figured out how you request an update (it is a Windows icon on the right side of your start menu). Well, when you click on the little app and fill out the form Windows starts updating right? Wrong! lol.

All you do when you “request” an update is put your machine in a queue for Windows 10 updates. There is no ETA of when you might get your update. Could be hours, days, weeks, heck who knows. This is, of course, a feature to ensure you have a “good” upgrade experience.

What? lol. If I have can’t update today, I am already having a “bad upgrade experience”. Somehow I think giving the folks an indeterminate upgrade date is probably not going to go over well.

Anyway, I will update you again when I finally win the Windows lottery. :)

Java 8 Lambda MOOC is Live

Are you interested in learning more about Java 8 lambda expressions and streams? If so, our free 3 week MOOC is live. Taught by Java Evangelist Simon Ritter, this course is just what you need to learn how to use lambda expressions and streams.

To sign up, go to this URL and enroll.

Getting RSS Feed Dates with Ruby

How do you get a rfc 3339 or rfc822 date in Ruby? Why do you want either one? lol. Well, you need these specially formatted dates for Atom or RSS2 syndication feeds. To get the properly formatted dates for current time, use:

Or if you have a date object named dateVar you can use:


Chaining/Multiplexing an SSH Connection

Ever want to run multiple SSH scripts but get annoyed by having to authenticate for each one? Well it turns out you can configure SSH to accept multiple commands over a period of time. The name I found on the net for this is SSH multiplexing. Command chaining would be a better name in my opinion. Anyway, this technique allows you to call several commands that use SSH but you only authenticate once! That’s right, authentication happens on the first command, no long waits for each step.

For example, I need to execute 2 rsync commmands to copy files to different parts of my web site. Here are the two commands.

rsync -vaz --rsh="ssh -l username"  --exclude=bin/  --exclude=*.DS_Store /Users/username/www/blog/
rsync -vaz --rsh="ssh -l username" /Users/username/www/index.html

For each command I would need to authenticate with SSH and each step would have to wait a few seconds for that to happen. So now I can replace this with a series of commands, but before I do that, a little configuration and explanation.

To get this to work, you need to create two things in your .ssh directory.

  1. An empty file named config
  2. An empty directory named sockets

For you config file, enter the following:

host *
ControlMaster auto
ControlPath ~/.ssh/sockets/%r@%h-%p
ControlPersist 600

The first line tells SSH that any host can use this command chaining feature. If you want to limit it to certain hosts it can be changed to just *

The second line enables the multi command feature. It tells SSH that if an SSH socket alread exists for a host, it is ok to reuse it.

The third line tells SSH where to store the socket information. This is why we created a sockets directory. The string %r@%h-%p tells SSH to name the socket file username@hostname-port. If the username you log in with is different then your login username, then you will need to change the name so it matches the remote host. For example: remote-username@host-port

Finally, the fourth line tells SSH how long to leave the socket open if the open socket is not closed. In this case a value of 600 seconds (10m) is specified. You can also use minutes: 60m as a unit of measure for this option.

With everything setup, let’s take a look at our rsync commands. This time, we will wrap them in special SSH commands.

ssh -l remote-username -Nf
rsync -vaz --rsh="ssh -l username"  --exclude=bin/  --exclude=*.DS_Store /Users/username/www/blog/
rsync -vaz --rsh="ssh -l username" /Users/username/www/index.html
ssh -O exit

The first command sets up the shared socket. The -l option specifies the login name. The -N option tells SSH not execute a remote command. The -f option tell SSH to wait in the background.

The last command closes the open socket for that host. The -O option passes a command for SSH to execute on the open socket. In this case, exit tells SSH to close the connection.

Well that is the short version, though not very short. If you need more information on this topic please take a look at the resources linked below from which this post was built.


Rackspace Developer Blog - Speeding up SSH Creation
Stack Exchange: Executing Multiple Rsync Commands

Ex Machina Quick Review (1/5)

Ex Machina is a scifi thriller about AI and androids (the robot kind, not the phone kind). The basic premise is a brilliant, but reclusive, genius founder of a Google like company lives in a remote place in Alaska or Canada. He invites his top developer out to his estate to help him with a top secret project which turns out to be a female android. The developer dude tests out the android and drama ensues when the android tells him the evil genius is an evil genius.

This review does contain spoilers so if that is an issue, stop reading now.

Spoiler Alert

So as you may have guessed I have a few issues with this film.

Most of the elements for the movie were just not believable for me.

First, I didn’t buy the whole evil genius lair in the woods. It just comes off as silly to me. Too hard to build. Too remote to be useful. The shear logistics are just dumb.

The evil genius dude seems more like a drunken hipster than some sort of software/hardware genius. At no point do I think the character is capable of making the female androids.

Finally, the female androids are over the top. This dude’s first attempt at an AI results in Blade Runner type androids? Please…

Blog Back up but still under Construction

The blog is back. It is still under construction, but basic functionality has been restored. The main difference is we now have full SSL support. Will be adding Atom and RSS feeds soon. The UI probably needs an update too. Anyway, more to come. :)