# Gerrit User Summit USA 2019 - Location

## USA - Hosted by GerritForge

The User Summit is hosted by GerritForge at [The Satellite - Sunnyvale](https://goo.gl/maps/no8vCBpqi61pv2jx5).

See below the full address of the location:

```
100 S Murphy Ave Suite 200
Sunnyvale, CA 94086
USA
```

## How to reach GerritForge from the San Jose Airport

__By Taxi__

[Uber](http://www.uber.com) and [Lyft](http://www.lyft.com) are the most popular ways of moving
around in the Silicon Valley. Use them if you are concerned about not finding parking space in Sunnyvale.

__By Car__

The travelling time from the San Jose Airport to downtown Sunnyvale is typically around 20 mins. However,
traffic conditions change rapidily in the Silicon Valley and the best route changes consequently.

Under normal conditions (very early morning, late evening and week-ends), the best route is:
- Get on CA-87 N from Airport Blvd
- Take US-101 N to N Mathilda Ave in Sunnyvale. Take the exit for Mathilda Avenue S from US-101 N
- Continue on N Mathilda Ave. Drive to S Murphy Ave

## Parking

There are several options for parking in the area. See the map below.

Please note that on Saturday morning, a farmer’s market runs in Murphy Avenue, therefore this street is closed
for cars and the area can get busy with pedestrians.

![USA venue parking](images/sunnyvale-parking.jpg)

## Hotels and Places to Stay

GerritForge has agreed a discounted rate for the [**Wild Palms Hotel in Sunnyvale**](https://www.google.com/maps/place/Wild+Palms+Hotel/@37.3515259,-122.0158228,17z/data=!4m11!1m2!3m1!2sWild+Palms+Hotel!3m7!1s0x0:0x74dd551c58050b4a!5m2!4m1!1i2!8m2!3d37.3515217!4d-122.0136338),
910 E Fremont Ave, Sunnyvale, CA 94087.

Staying in the same Hotel helps __to reduce the overall carbon footprint__ of the event by leveraging Carpooling
and saving costs on the transfer via Taxi or Shuttle.
Also, allows continuing the __networking of the event with the other participants__ to the Hackathon and Summit.
Most of the Gerrit maintainers and contributors will stay at the same Hotel, so you would have more chances
to have interesting conversations.

See below the **instructions for booking using the GROUP-CODE G-GS19**:
- Open the [THIS LINK for booking using the group-code](https://www.hyatt.com/en-US/group-booking/SJCJW/G-GS19)
- Select the date of arrival and departure (earliest is 9th of November, latest is 18th of November)
- Select the number of guests
- Click on "FIND ROOMS"
- Choose the room type and click "SELECT"
- Enter your customer details and proceed with "PROCEED TO PAYMENT"

**NOTE**: The discount is valid for bookings between the 9th and 18th of November ONLY.
There are other options for Hotels and Inns around Sunnyvale as well. However, at times, availability can
be limited because of the convenient location close to the [CalTrain station](http://www.caltrain.com/stations/sunnyvalestation.html).

## Facility Resources

__Food and Drink__

Lunch will be provided at The Satellite location during the Summit.
Water and coffee will be available on-site also.

__Internet__

Wifi will be available to all attendees.

## Check-in Instructions

When you arrive at 100 S Murphy Avenue, please enter through the
[east entrance](https://goo.gl/maps/dcWVSNoytvBvTLpv8) between E Evelyn Ave and S Sunnyvale Ave
which faces the parking lot. Once entered into the building, go to the 2nd floor (for americans)
or 1st floor above ground (for europeans).

You will then find the signs of the Gerrit User Summit and GerritForge Inc. outside the door and the
welcome desk of the event.

You will receive at check-in:

- The Gerrit User Summit conference badge
- The Gerrit v3.0 celebration T-Shirt
- Stickers to remember about the event and on Gerrit Code Review