Shawn

Shawn Wildermuth

The Blog

My Rants and Raves about technology, programming, everything else...


My First Week With Nokia Lumia 1020

imageA week ago I splurged and upgraded my Lumia 920 to the Lumia 1020. So to those of you who were expecting me to switch over the Android or an iDevice; I'm still entrenched in the Windows Phone world. And this phone cements my opinion to stay.  Let's talk about the good and the bad.

I like the weight. I was worried that with the camera bulge that this would feel like a much bigger device but if anything it feels smaller than the 920. I haven't looked up the weight but it feels really nice. I actually find the camera bulge useful as a pivot point to hold the phone.

As no one should be surprised, the camera is that good on the new phone. It's an amazing experience. But you might wonder why you would need 41 megapixels (ok, 38 megapixels since the lens is round)? You don't actually…

Read...


JavaScript Promises

pinky-promiseNo I am not talking the promise that JavaScript will fix everything if you use it. I don't even believe that ;) I am talking about the concept of a promise object that several JavaScript libraries use (including AngularJS, jQuery, Dojo and WinJS).

A promise is a pattern for handling asynchronous operations. The problem is that essentially when you start an asynchronous operation, you need to execute some code as the operation is completed. Asynchronous code is so common that most libraries have found a solution for passing in callbacks. But there is little commonality to how each libraries does this. Let's take jQuery as an example:

Read...


750 Windows Phone Apps?

1020Today I picked up a Lumia 1020. I am impressed with the camera as you'd expect but I am also loving the size. It's about the same size as the 920 except for the extra camera bump. It feels lighter than I expected. The AMOLED screen with Gorilla Glass 3 looks great too.

While I was setting up the new phone, I headed over to Windows Phone's website to install my apps. The website has a feature called "purchase history" that allows you to look at what apps you've purchased and re-install them on your phone with a single click. What is interesting is that it seems I've installed over 750 apps over the time I've had with Windows phone. Yeah…750. I was surprised too.

The list includes trial apps, apps that are no longer available, duplicate entries for apps with full and trial versions, and a handful that were never certified for Windows Phone 8. So realistically there were probably over 400 apps I could have installed from my prior I used this tool to reinstall the apps I wanted (and no, I didn't install them all ;) After chatting on Twitter, I was asked if I would list my favorite 50 apps. Instead of that I am going to list all the apps I actually used (as of today) in no particular order (with description if necessary):

Read...


Forcing Orientation in WinRT

7d703de7-03a1-4a9b-8425-841ae065c30fI am working with a client on an enterprise Win8 app that is for order taking. They have a specific page that they require to be only in Portrait mode while the rest of the app can support any orientation. Since I've done so much Windows Phone 7/8 work I thought this would be simple. Just specify the value on the Page. But this didn't work…

Digging through the docs I found a probable solution: DisplayProperties.AutoRotationPreferences (in the Windows.Graphics.Display namespace). The docs specify that this property can be set with the DisplayOrientations enumeration to specify which of the four orientations to support. The enumeration is a flag so you can combine them too:

// All orientations
DisplayProperties.AutoRotationPreferences = DisplayOrientations.None;

// Portrait only
DisplayProperties.AutoRotationPreferences = DisplayOrientations.Portrait;

// Landscape only
DisplayProperties.AutoRotationPreferences = DisplayOrientations.Landscape;

// Landscape and upside down landscape only
DisplayProperties.AutoRotationPreferences = DisplayOrientations.Landscape | 
                                            DisplayOrientations.LandscapeFlipped;

Using these options should work, right? I tested it in a bunch of different places in my code and it didn't seem to have any effect. I was baffled.

Read...


Designing APIs for the Web

Ever get perplexed when designing your API for the web? My new course is now available on PluralSight that helps you design your API. The course covers:

You can view the course here:

http://pluralsight.com/Courses/web-api-design

Read...


Building Atlanta Code Camp Website

I recently helped the Atlanta Code Camp effort by building them a new website. You can see it here: Atlanta Code Camp.  I am pretty proud of what I was able to accomplish in the scant number of hours I had to build it. It's not done as we need to improve it when we have the speakers chosen and set up the schedule, but so far I am pretty happy with it.

I had a number of goals for the project:

My first thought was to start with a Mobile-First template and just build the site but as #4 was going to stymie that as PluralSight would really like me to finish my courses ;) So I started with a Bootstrap template (that I got from https://wrapbootstrap.com). This provided a good basis for the shell of the website. Before I did real color skinning of the site, I needed to wait for our logo. Dennis Estanislao did an amazing job on the logo. With that I was able to use the color scheme to change the template to match the logo and overall theme. But that was just the HTML part of the story.

Read...


Speak at the Atlanta Code Camp 2013

logo-verticalI've been honored to help put together the Atlanta Code Camp this year. This year's event is happening on August 24th here in Atlanta and we're expecting to have eight tracks covering a mix of developer, designer and some IT professional talks. I've attended this event the past eight or so years and it's always a good time. I decided it was time to help out.

We've now opening our Call for Speakers. If you're an experienced speaker or want to do your first talk – we want you to submit talks to the Atlanta Code Camp. This event has done a great job in helping first time speakers get started with their first talk.

Submit your talks here:

Read...


Evolving Your Development Skills

TeachingOnGlassIn the last couple of years, I've been adding the HTML/JS/CSS skillset to my stack of required skills and my talks and courses have reflected that change. To my readers who are deep in the XAML stack, this change seems to have come at somewhat a shock to many. I've even been accused by some of abandoning the Silverlight, WPF, Win8, WinPhone folks. This has caused me a lot of frustration because I don't believe that developers can or should only know one possible stack. To reach the full breadth of users, sometimes you need to be able to develop across the ecosystems. In this same time, I've also done quite a number of HTML/JS/CSS talks where I didn't use Visual Studio. Some have conjectured whether I am moving away from the Microsoft stack as a result of the lessened use of Visual Studio in my demos. The frank answer is: nope.

So what is really happening here? I believe the development world is evolving. In fact, this isn't new…in the past 26 years everything has continued to change my entire career. And I expect (and hope) it continues. Software development is unlike many other similar professions. We think of ourselves as engineers but many engineering professions the rules don't change all that often. In civil and mechanical engineering, it can be somewhat stagnant. The requirements change, but torque and setbacks are similar to what they've been for years (AFAIK). But in software everything changes.

I received an email today from a developer who has been a Microsoft developer for a long time and now feels as if he is effectively unemployable because his skills are out of date. I don't' quite agree with his assessment as he knows ASP.NET, JavaScript and C#. These aren't out of date skills. But his consternation about the fight to keep his skills up to date is one I hear all the time. I struggle with an answer as my job is to learn, not deliver products. Because of this I have time to learn…I still get frustrated learning a new tech. In fact, this is the way that I cycle through a new technology:

Read...


An Engagement

IMG_0008I try to keep this blog relatively technology focused but sometimes something happens in my life that requires an announcement. I am also mentioning it here because I think it makes a good story:

I just got back from SDP13 in Israel and spent 10 days in that lovely country. With this trip planned, I thought it a perfect time to ask my girlfriend to marry me. I'm 44 and I've never been married so it's about time, right? Unfortunately we had a minor argument and in my haste I texted "Maybe I'm not getting married…" This text was meant for a friend of mine who I'd been confiding in about the whole diamond buying experience.  But this text went to my lovely girlfriend instead. Foiled by technology again. So the cat was out of the bag and I didn't think I could surprise her with the ring in Israel.

I was perplexed as I wanted it to be a surprise even though she now knew it was coming. If I were to take her out to a nice dinner or maybe to watch the sunset, she'd know what I was up to. At the same time I considered how to be romantic and unique. I really wanted her to say "yes" (though she knew I was going to ask, she didn't let on with what her answer would be) so making it memorable was important to me. But what could I do that others haven't done before. I thought of writing her a song (I am a musician) but it felt trite and over-done. Then I remembered I am a software developer (ok, I didn't forget, but I am trying to build some tension). I'd write her an App for her tablet.

Read...


Debugging PhoneGap with the Android Console

facepalm4If you build PhoneGap apps and test with the browser, moving to phones sometimes causes a boatload of problems. Because there isn't a great debugging story, being able to see the console window would be of great help.

My particular problem was that my JavaScript and CSS links weren't cased correctly. And it seems that the Android implementation is case sensitive (like most Linux implementations) but I couldn't even see what was wrong. Unfortunately the PhoneGap Build tools let's you use the console and interrogate the DOM but console log messages are lost. So I simply dropped down to the Android SDK.

I don't use the Android SDK for development of my PhoneGap apps. I have it installed because I did some early investigation into Android back about two years ago and it was still there. One great thing to say about Eclipse and the Android SDK is that they are simply file-based so when I pave, it still works (still on that drive taking up space). For me this was a lucky break as I needed it to access the console. So how does it work?

Read...