Laguna Beach Trip Report

Just got back from a week a Laguna Beach Resort in Utila and wanted to put a quick trip report up here for anyone who is thinking about visiting.

Resort:

Laguna Beach Resort

Where:

Utila, Bay Islands, Honduras

Website:

http://www.lagunabeachresort.info/

Resort Rating:

9/10

Dive Rating:

8/10

Photos:

Utila Underwater

Included in Package:

  • 7 Nights Accommodation, dbl. occ
  • Charter Flight to Utila
  • 3 Meals Daily
  • 3 Boat Dives, 1 Dropoff Dive Daily (Sun-Fri, 2 Boat Dives Only on Fri Morning)
  • 2 Night Dives Weekly
  • Unlimited Shore Diving

Additional Costs:

  • Nitrox - $125 / week
  • Soda - $2
  • Beer - $3 - $4
  • Liquor Drinks - $5 - $8
  • Large Bottled Water - $2

Getting There and Back

We flew from on Delta from Atlanta into Roatan. Once in Roatan we disembarked the plane (through the rear steps since the Airport since have any stairs that fit our plane) and proceeded inside. Once inside you will take a right and clear Immigration. Directly behind Immigration you will pick up your luggage off the carousel and run in through the X-Ray machine, giving your Customs slip to the person working the machine. You will then head out into the main terminal. From here, you will have to check in with your Charter flight to Utila. In our case, we were booked on Lansha. Their Check in kiosk was one of the small kiosks immediately to the right of the front door, or on the far left of the terminal after coming from Customs. After checking in there, they will take your luggage and you will go through Security back in to the Terminal to wait for your flight. In the terminal there is a small cafe/bar and 2 gift shops.

When we landed in Roatan, our sheet from the resort said to look for someone in a Laguna Beach shirt, however we did not see anyone. There is a company called Roatan Tours (or something like that, they are in blue shirts) that was working inside the terminal. We asked one of them where we should go, and upon telling them we were going to Laguna Beach, they looked us up on their cell, and had all of our information. They then helped us through Customs and get checked in with our charter flight. It is also worth mentioning that the Utila Aggressor and Laguna Beach are operated by the same group, so anyone in an Aggressor Fleet shirt would also be able to help you get to the resort, since the Aggressor and the Resorts pick up boat, leave from the same pier in town.

Once you make it to Utila on your tiny plane, you will be shuttled away by taxi to a pier in town, where you will be picked up by one of the boats from Laguna Beach and taken over to the resort.

Accommodations

All of the Bungalows have A/C, Private Bathroom/Shower, and either 2 Full Beds, or one King Bed. The "Duplex" Rooms have 2 Full Beds, have 2 rooms under the same roof, and share a private dock/pier. The King Cabins have a King Bed, and a Private Dock/Pier. Most of the King Cabins also had a hammock on their dock. The beds were typical hotel style beds, and the pillows were comfortable. Each room had a Raid Citronella Plugin in it, and the maids left a stack of refills for you so that you could change it daily. Rooms also came with a large water jug that you could take to the restaurant and fill up with Fresh Drinking water for your room. It was not recommended to drink the water from the faucet. There were only 4 Usable outlets in our room, 2 in the main room, and 2 in the bathroom. If you have lots of things that need to be plugged in, it is recommended that you bring a small power strip. Plus and voltage are the same as the US.

Resort Amenities

The resort includes a Large Pool (about 5ft deep), Free Wireless Internet (When it works), and Free Kayaking. We used the pool once or twice and it was fairly well kept. The water was cloudier on some days more than others, it just depended on when they put in the chlorine and other chemicals. The internet worked the first 2 days we were there, and while it wasn't blazing fast, it was certainly usable. Our second day at the resort we had a bad storm that evening and the Internet went out. It was out the rest of the week. Internet is only available in the Main House, Dive Shop, and Gift Shop areas. If you are staying in Bungalow A or B, you can pick up a weak signal from the Main House. None of the other rooms have internet. There is a guest computer infront of the Dive Shop Office for guests to use, but the mouse was broken when I was there. I used the computer several times to move photos from my SD Card (it has a multi-card reader built in) to my Flash Drive, since my Laptop was having issues. Alt and Tab are your friends when you have no mouse :-) We never took the Kayaks out.

Dinning

The resort included 3 meals a day. Breakfast, Lunch, and Dinner. Breakfast was server at 7am every morning, and generally consisted of an Egg dish, some type of carb(Pancakes/Waffles), and either Bacon or Sausage. There was always Toast, Cereal, and Fresh Fruit. Lunch/Dinner generally consisted of one meat, one or two starches, a soup, salad, rolls, fresh fruit, and a desert. Lunch was server 20-30 minutes after the last boat returned from the morning dives (Typically around 12:30) and Dinner was served at 6:30 or 7 each night. All of the food that I had taste excellent, however, there was not a large variety at any given meal, so if you are a picky eater, this may be a problem. The kitchen staff however was very accommodating, so they may be able to make you something special upon request, but we never asked.

One afternoon we grilled out at the pool bar by the pool for lunch. The pool bar is normally closed, so this was a treat. On Friday evening we also had a Beach BBQ at the pool bar.

Dive Facilities

The dive facilities are very well kept and all of the rental gear was well maintained. There are fresh water showers and drying racks on the dock next to the boats, as well as a Gear and separate Camera rinse tank for each dive boat. The gear locker is immediately next to the dock, and no more than 30ft from the boats. Nobody had any issues with gear being lost or stolen. All of my Nitrox fills for the week were 32%. They use a membrane system for their Nitrox, so I occasionally got a 31.9% or a 32.1%, but it was almost always exact. Tanks were always filled to 3000psi.

Dive Boats

Boats were standard Newton dive boats. We were on the Showtime, witch has the platform on top, but the other three boats were only one level. Dive platform was very wide and easy to jump off from, and the latter was easy to get back on board.

Dive Staff

All of the dive was excellent and very knowledgeable. Some of the staff was fairly new, and some of the staff has been at the resort for several years. All of the briefings that we received at the resort were accurate and very informative. All of the staff was eager to help in any way that they could. At the beginning of the week you were asked to place all of your gear in your dive locker, and before every dive, the dive masters on your boat would setup your gear for you. At the end of the day, they would then break it down, wash it, and store it. During the week you only had to worry about your Fins/Mask/Wetsuit, everything else was taken care of.

Diving

The Diving was excellent. The Haliburton Wreck and the Black Coral Wall were two of my favorite sites. The dives were guided, with one DM leading, and one DM following, however you were not required to follow them, and if you decided to lag behind, go deeper, or stay shallower, they had no problems with that. They were primarily in the water to point stuff out for the group and to make sure everyone was safe. The DM's stayed in the water for 40-45mins each dive, and asked that you came back to the boat with 500psi. In general we stuck with the group, but we did stray off on a few dives. Navigation was very easy (its a wall, you go down and come back) so we never lost anybody. The water temp was a steady 82F all week. The water was a little choppy most afternoons due to a series of rain storms, but it wasnt too bad. Viz was 60-100ft all week, depending on the site.

Dropoff / Shore Dives

The dropoff / shore dive are at the same site. The site starts directly in front of the Beach house at the resort, and the proceeds towards the Channel. It is a wall dive that drops to around 65-70ft. When you start approaching the channel, there are some bottles/jugs attached to a rope signaling for you to head up the wall into the shallows. Once back on top of the wall, you turn Due North and swim in to shore. It is a fairly long shore, in about 6ft of water. The one day that we did the dropoff dive, it was a 45min dive, with approximately 10mins of it being the swim in to shore.

We never did the site as a shore dive, but our understanding was that you told the shop you wanted to do a dive and they would take Tanks over to the shore entry point for you. You would then go over, gear up, walk off the pier, and swim out to the buoy. Once at the buoy you would drop down on to the wall and continue on. In either case, at the end of the dive, you exited at the pier, left your tanks/weights there, and took your gear back to your gear locker.

The dive itself was nothing spectacular, but it was still a nice dive. My only complaint about the Dropoff dive is that of the 5 days you have the chance to do the dropoff dive, Our boat was only allowed to do it once. One two of the days we were told we could not do it because there was a night dive, and 5 dives a day would be too many, one the other two days, we were told it was too rough. In all 4 cases we were told we could not do the Dropoff dive, the other boat was permitted to do it. I found this highly annoying, but it is the only complaint I have for the week.

Tipping

Tipping is 100% at your discretion, but envelopes are provided at the end of the week for tips, and any instructions written on the envelopes are followed. You can also hand your tips directly to the staff. There were 4 areas that they asked you leave tips for. Boat Crew (DM's & Captain), Barstaff, Resort Staff (Housekeeping, Kitchen, Maintenance, Security, Etc..), Office Staff (Dive Manager, Activity Manager).

Utila Town

If you wanted to go to town, you could let the office know and they would arrange for a small boat to take you in to town and come back and pick you up later. The town is very small (one road) and doesn't have much to do or see, so if you do not make it in to town, you havent missed anything. There is one gift shop, a few small grocery stores, a bank, and about 7 bazillion DM/Instructor schools. We pretty much decided that Utila is where DM's come from. If you do make it in to town, the Jade Seahorse is worth taking a walk through, it is a very interesting place.

On Friday, a large group of us went in to town and walked around for a little bit. We were in town for about 3 hours, and spent 2 of them drinking at Tranquilla Bar next to Parrot Dive Center. Most of the resorts Dive staff was there as well, and our boat back to the resort picked us up at the end of their dock.

Conlcusion

All in all, we really enjoyed our trip to Utila and to Laguna Beach Resort. If I return to Utila, I will stay at Laguna Beach resort, and h4ly suggest anyone who is considering Utila, consider this resort. I am sure there are some things that I left out, so if anyone has any questions, feel free to ask or send me a PM.

Read More...


Code Coverage with Cobertura in Maven 3

Code Coverage

Code coverage is a metric used to determine how much of your code is executed by your automated test suite. It is typically only applied to unit & integration tests, but it can be applied to all automated tests. There are several different code coverage tools on the market. The two most well known for Java are Cobertura and EclEmma/JaCoCo.

Cobertura

Cobertura is a free Java tool that calculates the percentage of code accessed by tests. It can be used to identify which parts of your Java program are lacking test coverage. Cobertura is generally a stand-alone application, however it can also be executed from Ant tasks, IDE Plugins, or Maven Plugins. When Cobertura is executed, it will generate a series of reports that show each line of code, and how many times it was executed. It will also show things like line coverage, branch coverage, & package coverage.

Configuring Maven 3

The following code will configure Maven 3 to execute the Cobertura plugin during the package phase of the build lifecycle. If the code has line rate of less that 85%, or any single file has a line rate of less than 75%, then the build will fail.

<plugin>
	<groupid>org.codehaus.mojo</groupid>
	<artifactid>cobertura-maven-plugin</artifactid>
	<version>2.5.1</version>
	<configuration>
		<instrumentation>
			<includes></includes>
			<excludes>
				<exclude>net/bryansaunders/**/*Test.class</exclude>
			</excludes>
		</instrumentation>
		<check>
			<linerate>75</linerate>
			<totallinerate>85</totallinerate>
			<haltonfailure>true</haltonfailure>
		</check>
	</configuration>
	<executions>
		<execution>
			<id>clean</id>
			<phase>clean</phase>
			<goals>
				<goal>clean</goal>
			</goals>
		</execution>
		<execution>
			<id>package</id>
			<phase>package</phase>
			<goals>
				<goal>check</goal>
			</goals>
		</execution>
	</executions>
</plugin>
Along with lineRate and totalLineRate properties, there are four other that you can set as well, they are:

  • branchRate - Specify the minimum acceptable branch coverage rate needed by each class
  • totalBranchRate - Specify the minimum acceptable average branch coverage rate needed by the project as a whole
  • packageBranchRate - Specify the minimum acceptable average branch coverage rate needed by each package
  • packageLineRate - Specify the minimum acceptable average line coverage rate needed by each package

Read More...


Generating Self-signed Certificates for Mutual Authentication in Java

This post is a follow up to my previous post on Generating Self-Signed Certificate for use in Java. This post will follow many of the same steps, but will show you how to generate both server and client certificates for use with mutual authentication (Two-Way SSL). Once again we will be using OpenSSL and Java Keytool.

Update If you need to create self signed certificates for use in Java and are running Linux, I have developed a Shell Script you can use. You can find the source and instructions on GitHub.

1) Create private keys using OpenSSL

openssl genrsa -out server-private.pem 2048
openssl genrsa -out client-private.pem 2048
The private keys are 2048 bits long and generated using the RSA algorithm. They are not protected with an additional pass phrase.

2) Create self-signed X509 certificates

openssl req -new -x509 -key server-private.pem -out server-certificate.pem -days 365
openssl req -new -x509 -key client-private.pem -out client-certificate.pem -days 365
For each command you will be prompted to enter a few pieces of information, use “.” if you wish to leave the field blank.
Country Name (2 letter code) []: US
State or Province Name (full name) []: South Carolina
Locality Name (eg, city) []: Charleston
Organization Name (eg, company) []: Red Hat
Organizational Unit Name (eg, section) []: Consulting
Common Name (eg, YOUR name) []: HOSTNAME
Email Address []:.
NOTE: The field Common Name is quite important here. It is the hostname of the machine you are trying to certify with the certificate, which is the name in the DNS entry corresponding to your machine IP.

If you want to avoid having to manually enter all of this information each time, you can use the subj argument and pass all of the relevant information in to OpenSSL. If you use the subj argument, the command will look like this:

openssl req -new -x509 -key server-private.pem -out server-certificate.pem -days 365 -subj "/C=US/ST=South Carolina/L=Charleston/O=Red Hat/OU=Consulting/CN=localhost"
Obviously you will need to replace my information with yours.

3) Create JKS trust stores

In order to use our keys and certificates in Java applications we need to import them into keystores.

keytool -importcert -trustcacerts -keystore  server_truststore.jks -storetype jks -storepass <server_truststore_password> -file client-certificate.pem
keytool -importcert -trustcacerts -keystore  client_truststore.jks -storetype jks -storepass <client_truststore_password> -file server-certificate.pem

4) Create PKCS12 keystores and import the certificates

Java's keytool application will not let us import an existing private key into a keystore. The workaround to this problem is to combine the private key with the certificate into a pkcs12 file and then import this pkcs12 keystore into a regular keystore.

openssl pkcs12 -export -inkey server_private.pem -in server-certificate.pem -out server.p12
openssl pkcs12 -export -inkey client_private.pem -in client-certificate.pem -out client.p12

5) Convert the PKCS12 keystores to Java keystores using Java keytool

keytool -importkeystore -srckeystore server.p12 -srcstoretype pkcs12 -destkeystore server.jks –deststoretype jks
keytool -importkeystore -srckeystore client.p12 -srcstoretype pkcs12 -destkeystore client.jks –deststoretype jks
Keytool will first ask you for the new password for the JKS keystore twice, and it will also ask you for the password you set for the PKCS12 keystore created earlier.
Enter destination keystore password:<br />
Re-enter new password:<br />
Enter source keystore password:<br />
Entry for alias 1 successfully imported.<br />
Import command completed: 1 entries successfully imported, 0 entries failed or cancelled
It will output the number of entries successfully imported, failed, and cancelled.

If nothing went wrong, you should have 2 new keystore files: server.jks & client.jks.

6) Configure server

Depending on how you are using your keys, you will now need to configure your server. The file server.jks contains your servers self signed certificate, and the file server_truststore.jks contains your servers trust store that trusts your client certificate.

For an example of how to configure SSL using an Embedded Jetty server, see Using SSL with Embedded Jetty

7) Configure client

Depending on how you are using your keys, you will now need to configure the client. The file client.jks contains your servers self signed certificate, and the file client_truststore.jks contains your clients trust store that trusts your server certificate.

If your are going to be using a browser as the client, then you will want to import the client.p12 file into your browser.

References

Read More...


Setting Environment Variables

As a Software Engineer you will eventually have to set environment variables to use some tool or library properly, yet it amazes me how few people actually know how to do this. Below are quick steps for setting environment varialbes in both Windows 7 and Linux.

Windows 7

  1. Click Start, Right Click My Computer, Select Properties
  2. In the System window click on Advanced system settings in the left pane
  3. In the System Properties window select Advanced tab and click on Environment Variables… button given at the bottom of the window
  4. In the Environment Variables window you will notice two columns User variables for a username and System variables
  5. To add a new User variable click on New… button. In the New User Variable dialog box type the Variable name and Variable value and click OK button
  6. To remove a User variable click on the required User variable and then click on Delete button
  7. To edit a User variable click on Edit… button. In the Edit User Variable dialog box edit the Variable name and Variable value and click OK button
    1. If Editing the PATH Variable, Seperate multiple entries with a semi-colon ";". You can reference other variables using the following format "%VAR_NAME%".
  8. Click OK button in the Environment Variables dialog window
  9. Click OK on System Properties window
  10. Close System window
  11. Close then reopen any command propmts you have open in order for the changes to take effect

Linux

In linux you can set environment variables temporarily, so they only exist within your shell session, or permanently, so they stay set.

Setting Environment Variables Temporarily

  1. Open a Terminal Window
  2. Execute the following command: export VAR_NAME=VALUE

Setting Environment Variables Permanently

  1. Open a Terminal Window
  2. Execute the following command: vi ~/.bash_proflle
  3. Append the following to the end of the file: export VAR_NAME=VALUE
    1. If Editing the PATH Variable, Seperate multiple entries with a colon ":". You can reference other variables using the following format "{VAR_NAME}".
  4. Save & Close the file
  5. Execute the following command: source ~/.bash_proflle
    1. you will need to execute this command in all open terminal windows, or logoff completly then log back in, for changes to take effect

Note: To set System Wide environment varialbes, use the same steps as above, but modify the file "/etc/profile".

Read More...


Generating Self-signed Certificates for use in Java

There are different ways of creating a self-signed certificate, such as using Java keytool. I prefer openSSL because the keys and certificates generated this way are more standardized and can be used for other purposes. Follow the steps below to generate a self-signed SSL certificate for use when testing SSL applications and servers.

Update If you need to create self signed certificates for use in Java and are running Linux, I have developed a Shell Script you can use. You can find the source and instructions on GitHub.
Update If you need self-signed certificates for Mutual Authentication, please see my follow-up article.

1) Create a host private key using openSSL

openssl genrsa -out HOSTNAME-private.pem 2048
This private key is 2048 bits long, generated using the RSA algorithm, and we choose not to protect it with an additional passphrase because the key will be used with a server certificate. The name of the private key is HOSTNAME-private.pem where HOSTNAME should be replaced by the name of the machine you intend to use the certificate.

1.1) Derive the public key using openSSL

openssl rsa -in HOSTNAME-private.pem -pubout  > HOSTNAME-public.pem
This step is not necessary, unless you want to distribute the public key to others.

2) Create a self-signed X509 certificate

openssl req -new -x509 -key HOSTNAME-private.pem -out HOSTNAME-certificate.pem -days 365
Then you will be prompted to enter a few pieces of information, use “.” if you wish to leave the field blank.
Country Name (2 letter code) []: US
State or Province Name (full name) []: South Carolina
Locality Name (eg, city) []: Charleston
Organization Name (eg, company) []: Red Hat
Organizational Unit Name (eg, section) []: Consulting
Common Name (eg, YOUR name) []: HOSTNAME
Email Address []:.
NOTE: The field Common Name is quite important here. It is the hostname of the machine you are trying to certify with the certificate, which is the name in the DNS entry corresponding to your machine IP.

3) Create a PKCS12 keystore and import the host certificate

openssl pkcs12 -export -out keystore.pkcs12 -in HOSTNAME-certificate.pem -inkey HOSTNAME-private.pem
Provide a password when prompted.

4) Convert the PKCS12 keystore to Java keystore using Java keytool

keytool -importkeystore -srckeystore keystore.pkcs12 -srcstoretype PKCS12 -destkeystore keystore.jks -deststoretype JKS
Keytool will first ask you for the new password for the JKS keystore twice, and it will also ask you for the password you set for the PKCS12 keystore created earlier.
Enter destination keystore password:
Re-enter new password:
Enter source keystore password:
Entry for alias 1 successfully imported.
Import command completed: 1 entries successfully imported, 0 entries failed or cancelled
It will output the number of entries successfully imported, failed, and cancelled. If nothing went wrong, you should have another keystore file: keystore.jks.

keystore.jks is the file that you will want to use in your java applications and servers.

References

Read More...