What I am most excited about after attending Microsoft Build 2017

I was lucky enough to attend Microsoft Build 2017 this year. A ton of great products were announced and released at Build. And I want to list out some of the ones that got me the most excited while at the conference.

Microsoft Visual Studio for Mac

This is a big deal as I am using a Mac every day for development. Previously we had been using Xamarin Studio for Mac but with Visual Studio (VS) coming out for Mac we will definitely be switching over. Even though I do want to switch over it is not entirely a choice. Now that VS for Mac is released it seems that Xamarin Studio will be phased out. This is not a bad thing as VS for Mac is supposed to have all the Xamarin Studio features and more.

Having all the power of Visual Studio while doing Xamarin development on Mac is very exciting.

What’s New in Visual Studio for Mac | Visual Studio

Xamarin Live Player

Xamarin Live Player is an app for Android and iOS that allows you to pair your Visual Studio (VS) instance on Windows or Mac to your phone. To pair your phone to VS you simply scan a QR code and now you can build your app, push it to the phone, and test all wirelessly. It is even capable of showing your changes in VS live on the phone.

I have not had a chance to try this yet but I am really excited to give it a shot in the next few days. Note that the VS 2017 preview is required to use this feature. The app is available now in your phone’s app marketplace. As of now, it is still in beta, so give your feedback if you see anything buggy or difficult.


Visual Studio Mobile Center

This is Microsofts all in one build, test, and deploy engine. It is in preview right now and estimated to be GA in Fall of this year. For mobile development, mobile center sounds perfect. It can connect directly to Github, TFS, and vsts to start builds, tests, and deployments on every push.

There are plenty of other services available like this but the features included and ease of integration are intriguing. One thing my team like is the ability to notify specific users via push notifications when successful deployment happens. This lets us easily notify users with release notes included of new things they can try and test.

Mobile Center | Mobile App Development | Visual Studio

Story Remix Video Editor

This one will not be out until the Fall creators update of Windows 10 but still, I am excited about it. From the demo, during the keynote of Build, it looks like it should make my GoPro video editing streamlined. It can take a series of videos and utilize artificial intelligence to determine how to organize the videos. It makes cuts and transitions all on its own. It can even recognize faces in the videos so if you want the video to feature a particular person it’s as easy as selecting them as the main focus in settings.

I am really looking forward to seeing what Story Remix can do for me and my GoPro footage.


Microsoft Build 2017 was an eye opening experience. The conference had a few main focuses two of which were cross platform development and utilizing artificial intelligence. I look forward to what the future of these two things means for myself as a developer and all other developers in the Microsoft sphere.

Mob Programming: Moving from a Multi-Mob Project to a Single Mob Project and the Sense of Accomplishment

I just hit my one year anniversary at my organization as a mob programming software engineer. I wanted to share one of the experiences I have had over the course of that year.

My first 9 months at Hunter I worked with the same team. The team consisted of eight developers. This team generally had two mobs going. So, I would be switching mobs on roughly a weekly basis. This meant I was changing tasks being worked on and not always seeing tasks to completion since I would switch to the second mob. This all sounds great sharing knowledge and changing mobs being worked with.

The big change came in February. I changed projects. I moved to a team of just three developers including me, so a much smaller team. With just three developers this means we are a single mob all the time, every day. The biggest difference is no more switching between mobs, no more switching between tasks. I am seeing all our tasks from start to finish. It might seem difficult to work with the same two other people every day but honestly, they are great!

This no more switching of mobs, no more switching of tasks has led me to have a much greater sense of accomplishment when it comes to programming. Something I have heard from more than one developer has been their feelings of lack of accomplishment. They think they are just a tiny piece of a much larger project. Or simply the fact that they cannot physically see or hold their project makes them feel less accomplished. Putting your code on a flash drive and waving it around saying, “look at what I made”, is not all that fulfilling.

The fact that all three of us on the team work together always, all three of us complete tasks to the end together, and all three of us struggle through the hard problems makes for a strong accomplished team.

Numerous times while working on my old team of eight, one mob would be struggling on a challenging problem while the other was working on a different problem less challenging. One mob would be having a bad day trudging through a problem while the other was moving forward at a normal pace. The pain was not always shared but due to having two mobs it could not be shared, that is just how it was.

Now, it is never fun to have painful programming days but at least if the whole team shares the pain it can be more of a team building experience rather than team dividing. When a problem is solved by the whole team together a greater sense of ability is shared and most importantly if the same problem comes up again later we can crush it!

I mentioned above the task switching problem and that was a major hindrance to the feeling of accomplishment. At times, I would be working on a problem all week and just when we were about to get to the light at the end of the tunnel I would switch mobs. I felt almost robbed of the accomplishment. I know I was a major player in the completion of the task, but damn, it hurt just a little to be taken away before seeing it to the end.

Do not get me wrong, one of the strongest points of mob programming is the switching of mobs within a team to ensure no knowledge silos are formed. But it is important to see the other impacts that switching teams has. I felt somewhat cheated of getting to complete something I had worked a long time on, but also I felt I lost some learning because I did not get to participate in the final steps to solving the problem.

Overall on my new smaller team, I feel more accomplished. I am seeing all our tasks to completion, I am struggling through the difficult parts altogether as a team, and I get the fullest sense of learning because I was not taken away at any point from the problem. Again, I had plenty of feelings of accomplishment and achievement while on the larger mob, but now I get to experience every accomplishment and achievement with the smaller team.

Expect more post and experience reports about switching from a large mob to small.

Programming Better and Easier With The Happy Path

When I start down a new solution or looking at how to solve a problem one of the first things to jump into my head are all the crazy edge cases that may or may not ever occur. I see it as a blessing in disguise because, in the long run, it helps out tons to be able to think about the crazy things a user may do. But when just trying to get a proof of concept together it can make the work that much more daunting.

When putting together a proof of concept stick with the happy path. Hard code values, expect perfect reproducible input, and for the proof of concept even lower the security levels a bit. Make sure if using lowered security settings you are in some sort of development environment. Do not go lowering your security on production.

But the key is to make it as easy on yourself as possible. What if you took the happy path and find out your solution did not even work anyway? You do not want to have wasted your time making your ability to accept input the most robust known the man if your strategy to submit the code is

A more real world time when the happy path saved me much time and effort was when the team and I at work were attempting to setup up a cloud solution using AWS. We had a couple different strategies in our minds as to how to build out our cloud solution. It involved security, databases, IoT, Lambda functions. It was going to be an extensive cloud system.

First thing we did was throw security out the door. We knew it needed to be done but would only complicate things. We did not set up a database because again takes time and we had a lot of database knowledge on our team so that did not pose too much of a risk. We just hard coded the data we would receive back when we did end up making the database.

Now we could take a look at the happy path for our proof of concept. Perfect user input, interaction, no confusing security. We found that our first model would not scale well so we threw it out the door. Our second model was not easily supported due to library limitations imposed on us. Our third solution found a happy medium of ability to scale, performance, and ease of implementation. This all did not happen overnight it actually took a few weeks. But imagine if we had added the extra complexity of security or the database. It would have taken months.

Taking the happy path saved us time and frustration. The process of making application development as easy for you as possible. Ignore the edge cases, ignore security, hard code values. Made us more productive and let us explore multiple solution strategies in a shorter amount of time.


How to test your EventWaitHandle C#

What is EventWaitHandle

“The EventWaitHandle class allows threads to communicate with each other by signaling and by waiting for signals.”

Problem faced

How do I go about testing an EventWaitHandle. Events are being published threads are flying around the application and I want to test my WaitOn() and Set() calls on my EventWaitHandle.

Why I am using EventWaitHandle

I have a function that displays user data, let’s call it DisplayUserData. But I need to make sure I have all the latest customer data before presenting it. I publish an Event that makes API calls in order to gather all the user data, called GetUserDataEvent, in the beginning of DisplayUserData. I need to make sure that my GetUserDataEvent has fully completed before displaying any data. I have a GetUserDataEventCompleted that I am waiting for. EventWaitHandle is the solution I have to pause inside of DisplayUserData until GetUserDataEventCompleted has been received. Below is a simple sample of what I have currently going on in my code, that needs to be tested.

How to test your EventWaitHandle

Now how can I test this? How can I ensure that the code WaitOne() is working and code is not attempting to access user data before the Set() is called? We will use some threading in our test!

We will put our function call on its own thread. This allows the GetUserDataEvent.Publish() and the WaitForUserData.WaitOne() to occur on their own thread. Our test code can continue and verify what is happening.

Directly after the call to start our thread we want to assert or verify that our code for displaying user data is not being called. This can be tested in a couple ways. It is up to you. But for me, I had a mock of my DisplayUserData and was able to verify that it had not been called yet. For a less advanced approach, you can set input a thread delay and ensure that certain values are still null. Such that they have not been populated with the user data yet.

After we have verified our display code has not been called we can populate our user data with simple test data. This is where the mock comes in because since I had mocked out my actually API call no data was coming back. I simply need to input my own test data. I am not trying to test my API calls at this time I have other tests for that, I only want to be testing my EventWaitHandle.

With our test user data generated we can call, GetUserDataEventCompleted. The subscription for this event calls our WaitForUserData.Set().  We expect that once the Set() is called our Display for the user data will be called once. Below is a layout of our entire test created for EventWaitHandle. This now tests that the Display call on user data does not occur until we explicitly get our Set call on WaitForUserData.

The above works due to mocking using moq library. If you are not familiar with mocking I highly encourage you to look into tutorials on how to use the differen mocking libraries available to you.

For help writing your own EventWaitHandle test leave a comment!


What is going right: Mob Programming Benefits (Part 1)

I want to call this blog post What is going right: Mob Programming Benefits (Part 1) because I know there are and will be more things going right because of Mob Programming. As of right now, I have been mob programming for just under a year. So for part one, I wanted to explain two of the major factors that are going right in mob programming.

  1. Idea sharing leading to learning
  2. Building strong teams

There is so much more that comes with mob programming, but I want to stick to just two for now. I plan to expand this list greatly but just want short and sweet post for now.

Idea sharing leading to learning

If you are not learning, you are falling behind. Learning should never be undervalued.

With mob programming, you are learning daily. You have the brains of 3, 4, 5 or more developers all being shared. Woody Zuill’s one sentence explanation of mob programming describes the learning perfectly, “All the brilliant people working on the same thing, at the same time, in the same space, and on the same computer.”

All the brilliant minds are developing ideas, they are sharing those ideas with everyone. Even if an idea is not entirely thought out it is shared. With all the other skilled developers around you, something great can be built out of your idea. Sharing ideas to boost learning is one of the biggest things going right with mob programming.

A great feeling I have gotten many times while mob programming has been stating an idea to a solution I had that did not solve the whole solution but only part. As soon as I described the idea to the team other members jumped in being able to solve the pieces I had struggled to solve. I learned how to solve the full solution by presenting my partial idea.

Sharing ideas to boost learning is one of the biggest things going right with mob programming.

Building  Strong Teams

I have had some of the strongest and most cohesive work teams due to mob programming. The idea of working with the same people 8 hours a day every day may scare some people. But the safe environment we create at work where ideas, even bad ones, are accepted and thoroughly thought through makes a good team.

By spending so much time with the same people, I learned a lot about them. I was able to learn what specialties they have so I knew where I could get specific knowledge if needed. I have even able to pick up on the idiosyncrasies of individuals, so I knew when the right time to coerce ideas out of them in a safe way was or when to be quiet and let them process ideas in their own head.

Spending so much time with everyone on a team built strong work and even personal relationships. We easily learned about each other and with each other. I know I was nervous in the beginning about spending day after day working with together in a team, but it really has been an amazing experience so far that I look forward to every day.


Stay tuned for more short “What is going right” posts.


The Basics of the Alexa Skill IntentSchema

In this post, I will describe the basics of designing and working with the IntentSchema for an Amazon Alexa skill. To provide some context, an Alexa skill can have multiple intents. Each intent is a specific action within the skill.

Imagine we have a calculator skill. The user can ask Alexa to add or subtract two numbers. The skill would be the calculator and the two intents would be adding and subtracting. The intent schema comes into play because we are allowing the user to add or subtract any two numbers. We use the IntentSchema.json to prepare Alexa to accept those two arguments. Note: The programming idea of an argument is referred to as a slot in the Alexa world, I will refer to them as slots for rest of post.

For our addition and subtraction intents, we would need to define two slots for both of them the first number and second number in the calculation. See below the intentSchema.json currently with only the AddIntent slots defined in it.


You can see in the json that we have two individual slots (firstNumber & secondNumber). Each has a name and a type attribute these are required for every slot that you define.

	"intents": [{
		"intent": "AddIntent",
		"slots": [{
			"name": "firstnum",
			"type": "AMAZON.NUMBER"
		}, {
			"name": "secondnum",
			"type": "AMAZON.NUMBER"
	}, {
		"intent": "SubtractIntent",
		"slots": [{
			"name": "firstnum",
			"type": "AMAZON.NUMBER"
		}, {
			"name": "secondnum",
			"type": "AMAZON.NUMBER"

Above is an example with both of our intents defined inside of the intentSchema.json Notice slots within the same intent must have unique names but slots inside of a different intent are within a new scope.

All slots must have a defined types. Amazon has some default types that you can use for your apps. These types are the most common:

 Slot Type  Description
 AMAZON.NUMBER  Able to recognize numbers and convert then to integers. Example: Two converts to 2
 AMAZON.TIME  Converts times into programmable values. Example: “Set alarm for seven pm”. Converts to 7:00 or 18:00 depending on settings
 AMAZON.DURATION  Able to change durations into usable values Example: “Set alarm for 45 minutes”. Converts to PT45M
 AMAZON.FOUR_DIGIT_NUMBER  Recognizes 4 digit number sequences like years and converts them. Example: “Wikipedia war of eighteen twelve” converts to 1812.
 AMAZON.DATE  Converts dates into usable formats. Example: “What is the weather today” converts to what is the weather for 2017-3-2

If you find yourself struggling with understanding what the above types do and how they handle user input. Make sample apps and look at what Alexa returns as the data. It is useful to see the real world conversions that Alexa does.

The intentSchema makes Alexa powerful because it can make your skills more dynamic, in that you can accept all types of input from the user. It is possible to build custom slots as well as lists to really build out your skill. I will make a post in the future about these advanced topics.

The Components that Make Up an Alexa Skill

This post will give the big picture on the components that make up an Amazon Alexa Skill. It will contain next to no code. But will introduce you to the pieces and terminology used in the Alexa world.

First, let us start what an Alexa skill is. The skill is essentially an action or function that your Amazon Echo device will perform. A skill is invoked by asking Alexa a specific phrase.

Examples of skills would be

  • Alexa, what is the weather today?
  • Alexa, where is my stuff?
  • Alexa, will it rain today?

At a very high level, each of these phrases invokes a skill where Alexa will parse the words. The words are then sent to a predetermined function (set of code) in the cloud based on what the phrase was, the function performs a series of actions, then a result is returned back to your Echo device. This high-level flow is the same for all skills. Let’s dive in and get into the details of how this process works.


The main components that make up Alexa Skill:

  • Utterances
  • Intent Schema
  • AWSLambda

Utterances (text)

As I said above you have to speak a specific phrase to your Echo device in order to invoke the skill. These phrases are called utterances. Utterances are contained in a simple text file. They are the phrases that Alexa is on the lookout for and if she recognizes a user’s phrase as an utterance she knows what action to perform.

AddIntent what is 2 plus 2
AddIntent add 2 and 2

SubtractIntent what is 5 minus 2
SubtractIntent subtract 5 and 2

The first words you see AddIntent and SubtractIntent are individual intents within a skill. Skills can have more than one intent. And in the case above it has two intents. Essentially an add and subtract. Right now the skill is extremely basic and only capable of recognizing the above hard-codes phrases.

So that is very basic and we want our users to be able to add and subtract any whole numbers. For that, we need to tell Alexa to expect any number. We do that by still using our utterances but also combining that with and intentSchema file. Here is an example of an utterances file allowing for the addition of any two whole numbers.

AddIntent what is {firstNumber} plus {secondNumber}
AddIntent add {firstNumber} and {secondNumber}

SubtractIntent what is {firstNumber} minus {secondNumber}
SubtractIntent subtract {firstNumber} and {secondNumber}

Our utterances text file now contains placeholders instead of hard coded values, great! But how is Alexa supposed to make sense of {firstNumber} and {secondNumber}? That is where the intentSchema json file comes in.

Intent Schema (JSON)

The intentSchema provides meaning to our variables. Instead of variables, amazon calls them slots so I will refer to them as such. Each slot is filled by whatever the user says. If the user asked, “What is 10 plus 5”. Alexa would know that 10 refers to firstNumber and 5 refers to secondNumber.

Here is an example intentSchema.json file.

    "intents": [{
		"intent": "AddIntent",
		"slots": [{
			"name": "firstNumber",
			"type": "AMAZON.NUMBER"
		}, {
			"name": "secondNumber",
			"type": "AMAZON.NUMBER"
	}, {
		"intent": "SubtractIntent",
		"slots": [{
			"name": "firstNumber",
			"type": "AMAZON.NUMBER"
		}, {
			"name": "secondNumber",
			"type": "AMAZON.NUMBER"

By using the utterances.txt and intentSchema.json together our Echo device is capable of understanding whatever number a user says. Alexa knows to expect any potential number in our slot firstNumber and secondNumber because we match the same name and give it an Amazon.Number type.

I do not want to get too detailed right now into the intentSchema files but they are a powerful method for gathering dynamic user input for your skill. Expect more posts in the future getting into the more powerful aspects of the intentSchema file.

Amazon AWS Lambda

Now that we have Alexa understanding what a user says. We need to tie that together with our function in the cloud to actually do some processing based on what the user said. We create an AWS Lambda function for this.


“AWS Lambda is an event-driven, serverless computing platform provided by Amazon as a part of the Amazon Web Services. It is a compute service that runs code in response to events and automatically manages the compute resources required by that code.”

The lambda function is connected to our particular skill so the event that causes it to fire is the user says a specific utterance that Alexa was expecting. Alexa creates a json object based on the users phrase, the lambda function performs actions on data inside of the json object, and last it creates a json object of its own to send back to Alexa as a response. It is your responsibility as the developer to write a lambda function to do the processing and creation of json object to send back to Alexa.

This json object sent back to Alexa will contain the response for Alexa to repeat back to the user. This whole process happens very quickly. As long as your lambda function is efficient and does not need to do a lot of computing you should be able to get your response back within a second.

Currently, functions for AWS Lambda can be written in Node.js (JavaScript), Python, and Java (Java 8 compatible), as well as C#. Also, it is very noteworthy to know that as of right now Alexa skills can only be hosted on US East (N. Virginia) and EU (Ireland) regions. Lambda functions for other purposes can be hosted in many other regions but if you are creating one to be used with an Alexa skill it must be hosted in one of the mentioned regions.

To bring it all together there are three major pieces that make up an Alexa skill. We have the utterances, intentSchema, and the AWS Lambda function. Expect a more technical guide very soon on how to create your own Alexa Skill. If anything confused you in this article feel free to leave a comment and I can clarify.



Palomar Mountain Snow Hiking

Friday at work and no plans for Saturday. So I started asking around and seeing what coworkers were planning. I honed in on plans with Tom, snowshoeing up at Palomar Mountain! It had been pouring rain by Southern California standards for the past few days, so we were hoping for a good bit of snow on Palomar Mountain.

Palomar Mountain peak sits at 6138 feet. It is one of the closest mountains to San Diego that has the potential for real snow in the Winter months. Weather reports expected snow above 5000 feet, so we had ideas of lots of snow in our minds.

We set off early Saturday morning in Tom’s Subaru up towards Palomar Mountain. The drive out was amazingly green. With all the rain we had been having the valleys and hills were green with life. Yes, it was mostly shrubs and grass, but for Southern California, this is some of the greenest I have seen the valleys in a while.

We pressed on and made our way towards Palomar Mountain. We were a little disappointed at first as we came up the mountain road because we barely started to see patches of snow at 5000 feet and only solid snow around 5500 feet. Even then the snow may have only been 2 to 6 inches deep. We pressed on though and went all the way to the gates in front of the public parking area for the observatory. The observatory parking lot was gated off so there really was nowhere to park. We got out of the car anyway and enjoyed the crisp cold air on Palomar mountain for the first time that day.

From end of South Grade Road before observatory parking lot

The air was frigid, and the clothes I had on were from when it was still 60 degrees earlier that day back at home. I quickly put on my warmer clothes and began to romp around in the snow. This spot we were at was highest elevation point that is most readily available by a car. And even here the snow was not too much more than 6 inches thick. The second sad part was we were not even allowed to park here so we would have to go down in elevation before we could park. Which only meant less snow.

Still, we went down the mountain and ended up parking at the entrance to Fry Creek Campground. The campground is closed during the Winter months but still is a fun spot to explore. It is almost like a winter ghost town filled with camping sites. The snow just shallow enough where snowshoes would be a burden and just thick enough where it made it mildly difficult to walk without them. We decided to do our hike without the snowshoes and not even bring them with us.

We started walking up the snow-covered road into the campground. Our first stop was the sign designating all the camping spot locations, and we noticed a trail that went around the entire campground. We headed out the find the trail. It was a snow covered trail but ultimately not too difficult to find. The snow fell in a pattern where the snow was flat where the trail should have been. We followed the flattened snow around the camp.

Trail sign in Fry Creek Campground

It was a little serene to be hiking a snowed over a trail that had no previous footprints on it. We were almost blazing the trail for ourselves. The fresh crunch of snow under each footstep was great. It became apparent that this trail was not meant to be used during the snow or rainy season as it went right through multiple waterways. We found ourselves hopping and jumping through a few water covered areas.

Stream crossing along the trail

A very surprising thing we noticed were ladybugs. Yes, ladybugs. I saw a large clump of red stuff on a tree. I had not seen anything like it before, so I went in for a closer inspection. The red stuff were dozens of ladybugs. They must be hunkering down for the winter trying to hold out through the cold temperatures waiting for spring. I never would have expected to see lady bugs up here this time of year especially so open to all the elements. They must hibernate this time of the year.

Ladybugs bunched up on a pine tree

After about a mile of walking on the trail and losing the trail a few times, we found ourselves at the very end of the campgrounds. It was a great spot to take a break and enjoy the solitude of having the entire campground to ourselves.

We had some great conversations together talking about work, politics, and even a bit of the future of technology. This definitely was a great thought provoking setting. As we rested and talked, it began to rain. Or so we thought it did. We had been standing under the trees and drops of water were falling on us. I walked around a little to enjoy the rain, and to my surprise, in the open areas with no trees, there was no rain. So it was not actually raining, but the snow stuck on the branches of the trees was melting, and it came down as if it was raining.

After a good rest and good conversation, we headed back. We did not head back the same way we came but decided to parallel a stream. We did not have a good idea of where it would lead us but if all else failed we would just follow it back up. Surprisingly though it led us to a road covered in snow. We followed the road assuming it would take us back to the campsites.

Indeed it did. We were actually back very close the entrance of the camping area in no time. We decided we did not need to hike too much more so headed back towards the car. It was an enjoyable hike walking on snow with no tracks and blazing our own trail at times. There was plenty of snow around to be fun and get your boots soaked and feet cold. There was even enough snow for some decorated snowmen that someone had made earlier in the day.

Snowman in Fry Creek Campground

That ended our exploration of a snow covered Palomar Mountain. It was a satisfying trip. There was plenty of snow to make the trip fun. And some good company never hurts.

Arroyo Tapiado Mud Caves Borrego Springs

Part two of the Winter 2016 camping trip was the Arroyo Tapiado Mud Caves in Anza Borrego State Park. This is one of my favorite spots to explore in Anza Borrego. One of the main reasons for that is you can really get some solitude. Only street legal vehicles are allowed in this part of the park, so you do not have to worry about dirt bikes or quads tearing through the area.


  • Get yourself to the S2 either from the 78, 76, or 79 depending on where you are coming from.
  • Take the S2 until right about mile marker 43
  • Take the dirt road on your left named Vallecito Creek for 4.5 miles
  • You will see a small sign for Arroyo Tapiado Wash you will make a hard left here
  • Follow the wash, and you will begin to see signs of caves and canyons shortly

Note: Putting Arroyo Tapiado Mud Caves into Google maps and having it route you works perfectly. It even navigates you very well on the dirt road portions. Also, the trail is sandy and has some spots where high clearance vehicles are preferred. We drove out there in two F-150s and a Subaru Crosstrek with no difficulty. We saw a Honda Oddessy on the trail as well. We were very surprised by that and would not recommend that, but hey someone did it.

When we made it to the Arroyo Tapiado, wash and saw our first sign of a cave we parked the truck and ran for it. We were at Bat Canyon looking to find Cool Cave. Before leaving for the trip, I loaded my GPS up with the routes of all the caves. I found the GPS download here http://ropewiki.com/Mud_Caves_(Arroyo_Tapiado). Some of the caves are much easier to see than other from the main wash so having them on GPS made them easier to find, and also we were able to put a name to the canyons and caves we were exploring.

As we made our way through Bat Canyon, we quickly spotted the cool cave. When I hear the word cave what often comes to mind is a big pitch black open space. For some reason, I think it is big opens spaces. Cool Cave is the exact opposite. It is a cave that you must basically shuffle your entire way, though. I have never been a fan of tight spaces, and this one was on the smaller side. I went back probably only 40 feet while Charlie went about 60 feet back into the cave. He did not see an end.


Entrance to Cool Cave in Bat Canyon


I know I was at the mud caves so I should be prepared to go in some small caves but damn this one was just a little too tight. The first thing I noticed though upon entering the cave was the drop in temperature. The caves are much cooler than outside in the open desert. It makes for a nice escape from the direct sun beating on you in the desert.


Inside Cool Cave


After making it back to the cars, we decided we would set up camp before exploring anymore. The last time we made a trip to the mud caves in 2013 we chose a camping spot far down the wash away from most of the caves. We had chosen that spot last time because it was a busy time and most other good spots had been taken. This time there was almost no one on the wash, but we still decided to camp ways down. We liked the idea of being away from everyone and having a spot all to ourselves.


Our campsite just before sunset


After setting up camp our friend who we were waiting for quickly joined us. It was getting into late afternoon at this point, and sunset was just about 2 hours away. We had to make a decision if we wanted to quickly jump back into our vehicles and explore some caves or finalize camp set up and play some games around camp. We opted for the later and begin finished setting up camp.

The first thing I decided to do was set up the model rockets to be launched. No one else in the group has had much experience with model rockets so when I said I would get this tiny balsa wood rocket up 1000 feet in the sky everyone looked at me like that would never happen. I loaded up the rocket and strapped in the biggest engine I had with me a C6-7. So 6 seconds of thrust then 7 seconds of delay before the pop and parachute comes out.

This was our first rocket launch of the day, and it did not seem too windy well at least no wind on the ground. So we pointed the launchpad straight in the air and hoped for the best. Bummer the darn battery launchers were dead. Seems old batteries were left in the launchers and had created some nasty corrosion. After a little bit of moping around camp, I got to thinking we would not be able to launch any rockets. I thought to myself “we don’t need the launcher, all it does is send electricity down the wires.” So I ripped the wires out of the “safe” battery launcher stripped the ends of the wires and grabbed a 9-volt battery I had brought along.

WOOOOOOSHHHH!!!! That rocket took off well like a rocket. It kept going, going, then went some more and then….gone. The faint black speck in the sky seemed to have disappeared. There is no way of telling but that rocket must have gone at least a 1000 feet up if not more. Our calculations on pointing the launch pad were a little bit off. It went FAR towards the West. There was no way that rocket was going to be found.

I brought a handful of rockets, so we still had plenty to play with. We some of the heavier cardboard and plastic rockets. Still with big engines but because they were so much heavier they did not go as high meaning we actually could see them float back down to earth and retrieve them. I think our best idea though was nighttime rocket launches. We strapped a few glow stick bracelets to one of the larger rockets and let it fly. It landed surprisingly close to camp and was retrieved in minutes.


Sunset in Anza Borrego State Park, Mud Caves


Evenings and nighttime in the desert are some of the best. As the sun goes down everything gets much quieter then the night comes to life! It gets so much darker in the desert bringing the night sky to life. Night time also means big fires and hanging out talking with good friends. We spent our night warming up next to the campfire exchanging stories and looking up at the night sky enjoying the stars. I had purchased this great used washing machine drum off someone who had welded legs to it. Above ground campfires are required in Anza Borrego State Park, and this was perfect. A large number of holes in the drum meant high airflow for the fire.


Our campfire blazing!


At nightfall we decided to go for a night offroading trip. We had not gone any further into the wash than our campsite. We decided a trip further up the wash was in order. We hopped in our trucks and made our way up. Our buddy with a light bar in front made for easy riding. We went at maybe 2 or 3 miles further up the wash until it got a little tight for the trucks. Maneuvering the turns and corners was possible but getting back out if we went too far was a little bit of a mystery. We decided to head back and get back to our warm fire.

Once it came time for bed I was excited. I got to sleep on my cot out in the open. All I had to do was open my eyes and I had the milky way shining above me. Little scary when I would hear rustling sounds around me but I made it through the night. Having a 5F degree sleeping bag kept me more than toasty throughout the night.

We all woke up early and well rested. The clean desert air makes for great sleep. Weather reports had stated it may rain today so we wanted an early start to hopefully be able to explore at bit before any major rain started. Nothing worse than being in a cave formed by rain while it is raining.

We headed down the wash and found Blind Cave. We did not know what to expect but started our way though. This cave was a little wider than Cool Cave but not by much. We pressed on. We pushed forward to what felt like maybe 150 to 200 feet into the cave. It is very difficult to determine how far you have gone in when you have no perspective of anything else. But after not too long we saw a light at the end of the cave. We crawled out the hole and found ourselves in a low point surrounded by 30 foot mud hills. All the water must collect in this spot and go down the hole forming the cave. We crawled back in the hole and made our way back. Seemed shorter on the way back, that always seems to be the case though.

We were able to do a little more exploring that day. Going down a few canyons. We went through Big Mud Cave which seemed to be more of a canyon rather than cave. The canyon had some covered wall spots but still nothing too cave like. While hiking through Big Mud Cave though it began to rain. Our trip was cut a little short due to the rain. We were in canyons and caves where rain runs and camped in a wash where the rain runs. All signs pointed to we should get the hell out of here.

We had not torn down camp before leaving to explore the caves so in the rain we quickly dismantled everything and threw it all into our vehicles. It was a little saddening having to leave so quickly and rush to get out of there. It was a beutiful park with tons of exploring left undone.

We will be going back to the mud caves again!


  • Never go in the caves alone, always bring a buddy, and even better have someone who is not going in caves know where you are going
  • Never go in the caves while it is raining or after their has recently been rain

Things to bring/plan for when going to the mud caves

  • GPS with routes of caves loaded onto it
    • http://ropewiki.com/Mud_Caves_(Arroyo_Tapiado)
  • Headlamps so you have two hands to stabilize you while in caves
    • Emphasis on plural, if one light goes out you do not want to be stuck without one in the cave
  • Bandana or Neck Wrap – it gets dusty in the caves
  • Lots of water – Bring too much water
  • Gas in vehicle – there are no gas stations out there


Palm Canyon Backpacking Trip

Charlie was coming into town so you know what that means, a camping trip needed to be planned! We decided we wanted to do a combination backpacking and car camping trip. Being late December we knew this is one of the best times of years to be camping in the desert. We ended up deciding on going to two different desert spots that we had ventured to before but it had been at least 3 years since we had last visited either of them.

Our trip would start with a one night backpacking trip into Palm Canyon just outside of Borrego Springs. This had been our usual backpacking spot in previous years that we had taken on new years so we felt this was very fitting.

We arrived at the trailhead; roughly 9 o’clock AM. The parking lot was just about empty. We did some last minute packing, got our packs situated, and made sure we had plenty of water. One of our favorite parts of this hike is the stream that flows through the canyon. We have in the past and would end up filtering water from the stream this time but it is always important especially in the desert to carry too much water.

Final check of packs before hitting the trail

The hike we were about to embark on should not be too bad 1.5 miles to the oasis, our plan after that was to follow the canyon up a bit more till we found a good spot to camp. We were each carrying roughly 35 pounds on our backs so we were not expecting too much difficulty.Following a defined trail through a wash and eventually into the canyon we set off on our adventure. Along the trail, you will find posted markers with numbers on them. These numbers correlate with descriptions found in the trail guide. They provide insights into what you are looking at and describe some of the history of the canyon and the Indians that lived in the area in the past.

Following a defined trail through a wash and eventually into the canyon. Along the trail, you will find posted markers with numbers on them. These numbers correlate with descriptions found in the trail guide. They provide insights into what you are looking at and describe some of the history of the canyon and the Indians that lived in the area in the past.

You will also find many cacti and loose rocks on the trail. Make sure to keep a sure footing and keep an eye out for the cholla cactus. Chollas are also known as “teddy bear” cactus. If you rub up against them the different limbs like to break off and hug your legs. So make sure to give them plenty of space.

Cholla (Teddy Bear) Cactus


Continuing up the trail we got to see big horned sheep. These animals can be quite elusive. This was my third time on this trail but the first time seeing sheep. The sheep are near impossible to see when they are not moving. Luckily one caught the corner of my eye as it was coming down the mountain. The only part that really stands out from the rest of the desert rocks is the white rumps of the big horned sheep. They do not seem to be scared of us at all. For good reason too their horns are huge. They were coming down from the steep mountains to graze.

After watching the sheep for 15 minutes we decided to continue our way up the trail. It was also about here that we had our first stream crossing. We were amazed at the amount of water flowing through the stream. This was definitely more than previous years. We had received a substantial amount of rain the previous week, this definitely contributed to the higher water levels.

The water never gets too deep but the rocks can be very slippery or even move under your feet when you step on them. It is best to wear waterproof boots when doing this hike because walking across the stream is required. Due to the higher water levels, we also found ourselves at times walking through the stream itself. After the first stream crossing is also when the trail starts to become less defined. Immediately after the stream crossing is fine but about another 250 meters ahead and you may be scratching your head as to where to go.

The first creek crossing

Luckily the palm oasis should be in your sights now so all you need is some determination to get to the palms and you will find your own way there. It is worth it to make it into the palm tree grove. Make sure to look up and get a spectacular view. It is amazing to think that a desert could support a palm tree grove and that you would find so much fresh water.

It is here that we stopped for lunch. This is where a majority of the day hikers turn around. There are miles of canyon left but this first big palm oasis and the main attraction. It is also where the main trail stops. If you want to continue you are essentially blazing your own trail. You will be on your own trying to figure out which way is easiest and will get you over all the boulders. This increases the difficulty of the hike 10 fold over the previous section.

Looking up at the palm trees

Make sure the stop and enjoy the many waterfalls around the oasis. They are fun to dunk your head in or just listen to the rush of water. Enjoy the views too, looking east will give you a great view of Borrego Springs. I also thought it was fun to see how unkempt palm trees look. The palm trees are kept natural and none of the old brown fronds are sawed off. It gives them a very interesting bushy like feel. It helps to support many different forms of wildlife such as birds and insects to keep the fronds on the tree.

Charlie enjoying the views

We hiked further probably only about a 1/4 of a mile from the oasis but we found a nice spot close to the stream where we could pitch our two tents relatively close to one another. We figured why hike too much further with our heavy packs on. Let’s set up camp and explore the area while we still have some sun. Note: Being in a canyon means the sun goes behind the mountains early. A little after 2 o’clock and the canyon is now in permanent shade. Nice on a desert day but also means it starts to get cold earlier than you expect. Make sure to dry any wet shoes or clothing while you can.

After getting camp set up we began to explore a bit. Jumping from rock to rock and getting up high for some good views. Now it is tons of fun jumping around the rocks and trying to get up high on the canyon. Just be very careful. It is steep and all the rocks are loose. Plenty of cacti to get in the way as well.

Above our campsite looking down on oasis

It got dark and cold quick in the canyon. Luckily for us, the low was only mid 40’s previous years it has gotten into the 30’s and damn that is difficult to deal with when you have no fire. I believe fires are allowed but they must be above ground in some sort of container. Also no wood gathering. All these things combined do not work well with backpacking. One of our past years we actually carried dura flame logs and had a fire in a big coffee tin but lots of extra weight for not a huge reward. We figured if we got too cold we would just huddle in our sleeping bags and call it a night.

Once it began to get dark we sat around camping talking and sharing stories. We essentially had the canyon to ourselves. The sky began to fill with stars. Looking up provided an incredible amount of stars. Living in a city I never get to see the true magnitude of the night sky. We saw shooting stars, satellites, the milky way, and a few unidentified objects. Still wondering what those were…

Hanging out at camp enjoying the canyon

Before heading to bed we decided we wanted to go on a night exploration up the canyon. We strapped on our head lamps and set off up the canyon. We tried to follow the stream as much as possible on our way up, crawling over boulders and getting our feet wet again in the stream. The night brought out some new critters that we would have never seen during the day. Our first encounter was a frog. I thought Charlie had just kicked a rocked and that why it moved away from his feet. Then it started to jump and jump. This could not be a rock but a frog!

Soon after the frog encounter we crossed the stream and I saw something dart around in the corner of my eye. It darted under a rock, so we began to investigate. It was a desert mouse. We had spooked the poor guy, he scurried away and was never to be seen again. Our night hike was a success. We saw some critters and got to explore more parts of the canyon. One of the most notable things we saw in the canyon was the narrowing walls. As we went further up the canyon the walls became steeper and steeper.

Frog found in Palm Canyon


We woke up early, before the sunrise the next morning. We wanted to catch the sunrise and see the canyon light up. It was a spectacular sight seeing the red rocks burst with an orange light from the early morning sun.

After our early wake-up, we made breakfast and started to take down camp. We knew we did not have too far of a hike back to our cars but we wanted to get an early start so we could start part 2 of our camping trip. The Arroyo Tapiado mud caves in Anza Borrego State Park.

On our hike down to our surprise, we saw even more big horned sheep. This time we saw a herd of four. I am not sure but it seems they like to travel in groups. The day before we say two together and now we saw a group of four. The group of four was in almost the same spot as the two we had seen the previous day. It must be a popular spot for the sheep. If you are crossing the stream for the first time about a quarter mile from the oasis and you turn to face north. This is where we saw sheep both days. Our palm canyon trip was truely great getting to see sheep both days. I could not have asked for a better trip or a better group of people to go on it with me.

The oasis is a spectacular spot.It provides an amazing look at the southern California desert. Wildlife, cacti, rocks, palm tree, water all tucked away in a beautiful canyon. If you find yourself in the area or are looking for an easy day hike or entry level backpacking trip this is a great choice.