Monthly Archives: August 2013

Southwest WiFi Doesn’t Fly

Southwest BOI->LAS RTT 8/30/13I love the fact that Southwest is rolling out WiFi to their fleet.  More and more flights I am on of theirs have WiFi and is great when I am in a pinch to get some work done.

However, as the rollout has been increasing, so has packet RTT (round trip time).  I took a flight today from Boise to Las Vegas and had consistent RTT times of ~700ms.  From a flight between PHX and SFO, I had >20% packet loss and RTT between 1000ms and 5000ms.   Trace routes were blocked so I couldn’t see where the delay was taking place.  This meant web applications were pretty much unusable and email even took a long time to sync (and actually failed more times than worked).

I wrote a note to Southwest to make them aware of the issue, and they wrote a very nice and well thought out response.  They indicated that their engineers are aware of the issue and are working to resolve the problem.  As usual with Southwest, I was very impressed with their through response and they even gave me free WiFi access to use within the next year.

That said, if you are reading this post wondering if you should pay those 8 hard-earned-dollars for WiFi, you just may want to hold off a few months while they work out those kinks.  This has been an issue for me for over the last month or two, so progress appears to be slow.

DocLink: Enterprise Mobile Content Delivery

A lot of organizations out there want to make corproate-generated content living on their network available to users on their mobile devices.  DocLink makes this possible without the headache of moving data to the cloud or other servers.

Check out this quick video describing how DocLink makes this possible:

Learn more and demo the solution for free at: http://www.unwireddoclink.com

Early Impressions: Xcode 5 Bots

Today I got to sink my teeth into Xcode 5’s continuous integration (CI) capabilities on a Mac Mini running OS X Mavericks and Server Developer Previews.

Since the software is still under NDA, I can’t elaborate on any details, but I can share my experience.  In short: I got it working, but man it sucked to get there.

For the 5th Developer Preview, with the release coming around the recently confirmed iPhone 5S/6 announcement on Sept 10,  there are still a good number of bugs (many of which I reported like a good developer).  Granted this is essentially a 1.0 release of a substantial piece of software so this is to be expected, but I hope some of these get ironed out soon so the coolness of their CI solution may be fully realized.

Again, sparing details, Apple has been doing a lot to simply and automate the provisioning profile and certificate management experience – both in Xcode 5 and on the CI server – but as a result there are a lot more things that can go wrong that the developer doesn’t have much visibility into.  And as of now, a lot goes wrong with the new automated processes.

But this isn’t really a new issue: prior to this point, I have become accustomed to manually managing all provisioning profiles and developer/distribution certificates because the semi-automated systems never seemed to work right for me. However, now all of the UI for this manual management has been largely stripped in the new version. Don’t get me wrong, I think the new methodology will be great if they iron out the bugs as manual management of this stuff is not ideal for the developer community at large.

So, I bring this up because the CI server must compile and sign code, and therefore have all of the correct provisioning profiles and certificates must be downloaded and installed to do this.  In the new OS X Server tool, acquiring these components is supposed to be very straightforward (the user experience is for sure in the right direction), however execution just isn’t there yet.  I basically had to resort to performing the broken tasks myself via CLI, and only then could I get it working properly.

Once that got squared away, I did get to see how awesome and powerful Bots are going to be for developers that can benefit from CI.  We are already planning automatic deployments to TestFlight, which ensures our testers will be able to use our latest and greatest builds to test without any manual deployment steps required by a developer.

I’m really excited that Apple decided to add CI as a feature to Xcode, I just hope the final release is substantially more stable than it is now.

See more about Apple’s upcoming Xcode improvements here: https://developer.apple.com/technologies/tools/whats-new.html

Bandwidth.com -> SIParator -> Lync 2013 Conference Dial-in Issue

For our Lync 2013 infrastructure at UWR, we are using bandwidth.com SIP trunks, an inGate SIParator, and a single Lync 2013 Front End.

We are using the Lync 2013 call conferencing feature, and when an inbound call is re-directed to the Lync 2013 infrastructure (via the SIParator), the call connects just fine.  However, after the caller types in their conference ID and are about the be transferred into the conference, the call goes silent for a little, then a friendly message states “Sorry, I cannot connect you to the conference at this time”, then hangs up. Nice.

Looking at the SIP trace, the Lync 2013 is initiating a SIP reINVITE to point to some new media ports on the FrontEnd server, presumably because they correspond to the conference destination.

The reINVITE is forwarded out to bandwidth.com and the bandwidth.com returns a 200 OK, with all of the remaining SIP and SDP headers you’d expect.  The SIParator forwards this to the Lync 2013 mediation server on the FE, and….. no ACK.  From there bandwidth.com retries to send the 200 OK, and the SIParator tries to resend it to the Lync 2013 server as well, but eventually, the call is disconnected with a 481 Call Leg Doesn’t Exist.

For the sake of testing, I set up the following call flow for inbound conference bridge calls:

  1. bandwidth.com > inGate SIParator
  2. inGate SIParator -> ShoreTel PBX
  3. ShoreTel PBX -> SIParator
  4. SIParator -> Lync 2013 FE

To my surprise, everything worked perfectly.  The trace followed this path as you’d expect, although the SIParator was smart enough to act as the b2bua and relay the audio directly between the Lync 2013 server and bandwidth.com (all with only taking up 1 session license).  Clearly there is some difference between the way the reINVITE is handled between the ShoreTel PBX and Lync, vs. bandwidth.com and Lync…

So, for now I am using this “hairpin” topology to get things working.  This is not ideal because I am consuming two ShoreTel SIP Trunk licenses per conference call, instead of the much better alternative of zero ShoreTel SIP Trunk licenses per call :)

My next step to resolve this is upgrade the SIParator to the latest build to see if that fixes the issue (running 4.9.2, latest is 4.10.2).  If that doesn’t do it, I’m going to evaluate the diffs between the reINVITE dialog between the the Lync Server and ShoreTel vs. the Lync Server and bandwidth.com and see if there are any significant differences.

I’ll update this post with what I find!

Hello Internet!

Hopefully this blog won’t end up like the vast majority of those on the internet (with this being the one and only post), but I am finally starting a basic blog to share my techy experiences with the world.

I’ve been meaning to do this for years as the tech community has graciously published information and knowledge on the internet that has helped me through a countless number of challenging problems, and has ultimately helped develop my skills to where they are today.

This blog is my effort to give back to the next guy that is stumped banging their head against the desk trying to understand WHY, and as a result hopefully make the world just that much better by helping out.

I will be posting blog entries about all sorts of things, from tech musings and analysis, to product management strategies, to code and configuration-level challenges that had me stumped.

I hope it helps, and feel free to contact and comment any time!

– Matt