Use Java 6u65-apple with SKDMan on Mojave/High Sierra/Sierra/El Capitan

If you work in and around the world of Java, Groovy, Spring MVC, Grails, or Gradle you are bound to use a tool like sdkman when juggling multiple versions of these applications. If you haven’t used it before it’s worth taking for a spin. You can run simple commands like sdk install grails or sdk use java 8.0.181-zulu. This is great except that Java 6 isn’t really supported in sdkman for Mac. Queue the simple workaround!

Install SDK Man if you are not already using it, link is here

Go to the Apple Download page for Java 6 here

Next you will want to open terminal and do the following:

 cd ~/.sdkman/candidates/java/ 

Next you will create the following symlink:

 ln -s /Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/ 6u65-apple 

If this is successful you should be able to see it in the list when running sdk list java. Next we can verify that this worked successfully:

sdk use java 6u65-apple

You should now see a green print statement that reads “Using java version 6u65-apple in this shell. You can further validate that its working by running java -version. Your output should resemble the below:

java -version
java version "1.6.0_65"
Java(TM) SE Runtime Environment (build 1.6.0_65-b14-468)
Java HotSpot(TM) 64-Bit Server VM (build 20.65-b04-468, mixed mode)

Nginx Requests Not Being Gzipped on CDN Pass-Through

A couple months ago I ran into a curious situation. Requests from Nginx were being gzipped as expected and requests from CDN were being gzipped. My Nginx settings for compression looked like this:


gzip on;
gzip_comp_level 6;
gzip_http_version 1.1;
gzip_min_length 0;
gzip_types application/json application/x-javascript application/javascript text/plain text/css text/javascript text/xml;
gzip_vary on;
gzip_disable "MSIE [1-6]\."; 

Reproducing the behavior was simple enough. If you hit the URI at CDN and append a cache busting string to the end of the URI such as \?2342343243 the headers would return without the Content-Encoding: gzip header. Another test to confirm this was to use a curl statement passing the via header with any value such as below

 

curl -v -H “Accept-Encoding: gzip” -H “Via: 1.1 akamai.net(ghost) (AkamaiGHost)”  "http://youruri.com” 

A simple explanation of this issue is that when request hits the CDN and the object is not cached, the request is then passed to origin using the via header. Unless the Nginx gzip directive of gzip_proxied any; is included this request will always be sent uncompressed. To resolve add this line to your nginx.conf file. Below is the same example shown earlier but including this directive:


gzip  on;
gzip_comp_level 6;
gzip_http_version 1.1;
gzip_min_length 0;
gzip_types application/json application/x-javascript application/javascript text/plain text/css text/javascript text/xml;
gzip_proxied any;
gzip_vary on;
gzip_disable "MSIE [1-6]\.";

Enabling and Disabling Trim for 3rd Party SSDs in OSX

A few years ago I purchased a 2012 Mac mini that came with the super slow 5400 RPM 1TB disk. The cost of purchasing the system with an SSD was what I considered to be outrageous so I opted to install a 3rd party SSD (Samsung EVO drive) with great success using Carbon Copy Cloner. What I soon realizes is that OSX does not support trim for 3rd party SSDs by default.

What is Trim? Trim is the process by which the OS performs garbage collection of space that is no longer in use on the SSD to keep space available and the drive performant. There is a way within OSX to enable trim for 3rd party SSDs, however before enabling it be advised that it will enable it for all drives attached and taking a backup or using time machine would be a reasonable step just in case something goes sideways. Also worth noting is that enabling or disabling trim will require a reboot.

To enable trim on 3rd party SSDs in 10.11 and newer run the following command in terminal:

sudo trimforce enable

If you no longer want to have trim enabled you can simply run this command to disable it:

sudo trimforce disable