Archive for Microsoft

2014 Predictions

I hope that you have all had an awesome New Year’s Eve! I’ve decided that I’ll start off 2014 by making a fool of myself by trying to make some predictions for the tech industry for the new year. This is not a what you will see list, but nor is it a what you won’t see one; in reality, I am trying to focus more on trends than anything else. Overall, 2014 is looking to be a transition year rather than a real game-changer. This is in no way a bad thing and makes sense for where we are in what is usually a twenty year tech cycle; it is important to remember that the mobile revolution is not even half way done and there are still a lot of incremental advancements that need to be made in that area before it can be considered complete. Still, this article will not focus on mobile exclusively but will rather jump around with no other aim than what I find interesting.

Docker: Docker is the darling of the developer community right now and for good reason — it solves a problem that (outside of the BSD community) hasn’t really been properly addressed. There is however a risk of certain segments of the community drinking a little too much of the Koop-Aide and using Docker in ways that it wasn’t intended to be used; just think about what we saw with Rails a few years ago and the hype surrounding that and you will have a good idea of what I am concerned with. Still, at the end of the day Dockery is going to be a major tool in a lot developers’ (including this one’s) toolboxes for 2014 and probably beyond.

Windows 8: In the consumer market, Windows 8′s RT offering is in a lot of trouble — that is undeniable at this point. Windows Phone suffers much the same fate as Windows RT, though Windows Phone does enjoy a good holding in South America and some other parts of the world. Microsoft has already hinted strongly that they plan to merge WinRT and Windows Phone into one mobile operating system alla iOS. This is a great Idea but is several years too late. It also undermines the “one Windows” pitch that Microsoft has been making for Windows 8 over the last few years. In 2014, Microsoft will still be dealing with the fallout of their bumbling launch and marketing of Windows 8.

Azure: Azure has grown far beyond Windows in the cloud and at the close of 2013 is a rival to Amazon Web Services and pretty much every other cloud offering. I’ve used Azure several times myself over the year and am pretty impressed on the whole; there were some bumps in the beginning and middle of the year, but these have largely been addressed and it looks like Microsoft has some ambitious plans for Azure in 2014. Over the last month or so something called Midori has been leaking out of Microsoft and, though the pundits seem to think it is something to do with Windows on the client-side, my bet is that this is some sort of evolution of Microsoft’s cloud offerings. Either way, 2014 is going to be a good year for Microsoft in the cloud and for Azure.

Mac OS X: Twelve months ago it looked like OS X was veering dangerously toward an iOSification that would have proven intolerable for professional users. With Mavericks however Apple has found a good balance between their desire for control and the reality that the pro-market has been driven to OS X due to its being a UNIX system that has a late vendor for support and an attractive user interface. Despite the apparent back peddling, it is important to note that Apple has gotten one major change in the OS and managed to implement it in a way that is both useful to the average consumer and acceptable to the pro users — this feature is called Gatekeeper. In Mavericks, Gatekeeper does not allowed unsigned applications (to sign an application one needs to be an approved Apple developer) to be installed on the system by default. The key is that this is a default that any sophisticated user can change. However, I must admit that I have kept this default. Going forward, Apple’s belief in signed applications (or perhaps some slightly watered-down version of it) makes a lot for sense for the future of computing and I actively support refusing to install unsigned applications from untrusted sources. If the current path holds, Apple will be balancing making OS X simpler for average users and new users who came over due to the halo effect of iOS while balancing the needs of the professional user market.

Ubuntu / Linux: Canonical has done an amazing job of sullying the Ubuntu name over the 2013 and has done little more than make a fool of themselves with their naïve attempt at breaking into the mobile space. Ubuntu will still be a very popular desktop Linux operating system among new Linux users and will continue to be a major player on the server-side. Canonical the company however will fail to monetize their offerings in any significant way. The only ray of hope would be some sort of re-focusing of the company to be an enterprise focused organization much like Red Hat. Even in that case, Canonical will not be able to be a true challenger to Red Hat in 2014 and it is unlikely that they will even decide to try. The continued flailing of Canonical will contribute to a “brain drain” of passionate and talented Linux enthusiasts out of the Ubuntu community and into other Linux communities. Another side of effect this is that desktop Linux will continue to be the proverbial tempest in a teapot that it has always been. This internal discord will guarantee that 2014 will not be the year of the Linux desktop in any significant way.

That’s it! Those are my foolish predictions for 2014 — foolish as they may be, I am pretty confident that most of them will be, if not correct, then on the right track. I know they are not earth shattering and basically boil down to 2014 will more or less maintain the status quo. In a way, that’s a good thing. If we are constantly reinventing new technologies and never refining the technologies we are already have, then we will always be using unstable and half baked first generation technology. Have a happy new year and feel free to comment on Twitter.

Programming Pitfalls: Windows 8 & VS 13

PitfallIt will come as no surprise to anyone who has been following this site for a while that I’ve been doing a bit of Windows 8 development. Like many developers moving over from another platform, I have some concerns about XAML and the development philosophy that it seems to promote, but that’s not the pitfall I hit this time. No, the trap I fell into is far more sinister….

You see I had opened Visual Studio 12 and got a notification that there was a new version of Visual Studio coming out and if I wanted to take advantage of all of the new goodness in Windows 8.1, I’d need to download it via MSDN. Like a good little code monkey, I did just that and made a fussy coffee while I waited for download and install to finish.

Once the install had finished I opened Visual Studio 13 and created a C# / XAML metro app. So far so good. No errors or warnings of any kind where displayed. On the whole, I am pretty happy with the workflow in 13 and got the app done in just about a week — it was just a proof of concept.

Now comes the tricky part: deployment. After going through the ridiculous proces of explaining to a non-tech person that they have to run a PowerShell script to run the archive Visual Studio produces, all seemed to go well — the first stakeholder was happy and passed it on to someone else. Then came the issues. For some reason the app would run on some devices and not others.

After a few frantic hours of search-fu, Stack Overflow browsing, and digging through the chaos that is the MSDN developer forums, I had a theory. Was it possible that all the devices that the app ran on had been updated to 8.1 and the ones it didn’t work on were still on 8? If so, there surely would be a menu or XML attribute in the App Manifest that I could change the minimum version to 8.

I was right on the first point and kind of right on the second. It turns out that the app could not be run on 8.0 devices as built and there is an option in the manifest to change the version. Unfortunately, in VS 13, you can’t change the version number. My suspicion was confirmed — Visual Studio 13 did not support building for Windows 8.0. Well, that’s not exactly right either. It turns out that Visual Studio 13 will build a Windows 8.0 app but will not create one — that means that you’d need to create the project in VS 12 but could move over to VS 13 later. I ended up having to create a new project in VS 12 and copying the code over into that new project. The bottom line is that this feels like a ham-fisted attempt on Microsoft’s part to force adoption of the 8.1 APIs and left me with a bad taste in my mouth. At this point, I am sticking with VS 12 until all of my projects no longer require 8.0 support but, frankly, this problem just shouldn’t exist.

Questions? Comments? Find me on Twitter.

Xbox One Review

xbox one leadAlthough, I have never waited until midnight for a console lunch before, I waited at the Freehold, NJ Microsoft Store for the launch of the Xbox One. Like most of the people in the line, I had previously pre-ordered my system and was promised a “Day One Edition” that I was happy to receive as promised. One might wonder why I am waiting to post a review of the system now, so many weeks after the launch of the system, especially when so many others had posted their reviews on our around launch night. The answer is simple — I did not get the console early and wanted to make sure that I had ample time to use the system before writing my review.

The Good: In a lot of ways, the Xbox One is a console designed with me in mind. I like gaming but I don’t have the time that I used to have to game all the time. In fact, like the majority of Xbox 360 owners, my 360 was mostly used for watching Netflix and other multimedia experiences rather than gaming. So far the gaming experience delivers and the Kinect-powered voice recognition seems to work at least seventy-five percent of the time — a figure that I would like to see higher but is better than anything else of its ilk on the market currently including Apple’s Siri. In terms of gaming, the system delivers and, as was the case with the 360, Xbox Live is clearly the killer gaming feature of the system. Being able to suspend a game, do something else like take a Skype call, and still have my game’s state saved is a killer feature and probably my favorite feature of the system.

The Bad: Still not all is well in the state (err city) of Redmond. The indie game story is currently non-existent. In fact, the AA and AAA game story is not much better and there is not killer title that represents “Xbox” on the market right now — this is something that the PS4 lacks as well and I feel that this is a mistake of the generation — that is the platform vendors are relying on third-party publishers far too much when they ought to be supporting smaller studios in exchange for exclusives.

The Ugly: The 1980′s called and would like their VCR back. Yes, the system itself looks pretty ugly from a hardware perspective and this is not a shocker when you consider that Microsoft is a software company and does not have a pedigree of industrial design. I’ve also noticed that I can occasionally hear the fan running while playing games; it should be noted that I often mute games in order to listen to podcasts. The sound isn’t too bad, but on the verge of 2014, these systems should be silent; for instance, if the One ran an SSD rather that a spinning drive, there would be a reduction in heat generated.

Conclusion: All in all, I like the One and it is a great 1.0 product. Despite Microsoft’s bumbling PR, the system itself has a great story to tell and I recommend it to all but the most “hardcore” (read immature) gamer — that of course is not to say that all PS4 owners are immature, but, sadly, there is a pretty vocal minority of “hardcore gamers” that behave worse than your average five year old after having his lolly stolen.

Questions? Comments? Please feel free to reach out to me Google+ or Twitter.

Review: Surface Pro 2

surfaceproBeing in the market for a Windows based laptop and having some potential WinRT projects in the pipeline, purchasing a Surface Pro 2 seemed like a great way to kill two birds with one stone and I happy to report that it was. Like just about any device on the market there are of course flaws but overall the experience of using the Pro 2 is pretty good. Before we begin, the model we are talking about here is the 256GB SSD / 8GB RAM one. Please do keep that in mind when reading the rest of this review, as your mileage could easily vary if you are use lower specced model.

The Good: Right of the bat the screen is beautiful. In fact, it is probably one of the best screens (in terms of resolution and color representation) that I have seen on a touch-enabled Windows device. I tend to not be a huge fan of using a stylus with my touch devices, but the one packaged in with the Pro 2 is a joy to use and more useful than I thought it would be. One of the main uses I have for the Pro 2 is of course to run Visual Studio, which it does flawlessly; the sad truth is that it has better specs than my normal development machine, my Macbook Air. Typing on the Type Keyboard feels as natural as typing on a full desktop keyboard or a good laptop keyboard. All in all, the Pro 2 is definitely the tablet to buy if you don’t mind spending a little more money and want to be productive.

The Bad: Thought the battery life is sufficient for most users, I’d like to see a little more than what I am currently getting in my day to day usage. On average, I am getting about five hours to a charge. Of course the Achille’s Heel of Windows 8 is that the app selection in the Windows Store leaves a lot to be desired. One would hope that this problem would be solved by time, but it really hasn’t. Thankfully, this issue is somewhat mitigated by the Pro 2 to being able to run traditional Windows software

The Ugly: To me, the value proposition of the Surface Pro 2 is that it is a production device rather than just another consumption device. However, this falls down pretty quickly when you realize that the tablet does not come with either keyboard option. Additionally, the Touch Cover is pretty much worthless for me and in my very unscientific study it seems to be problematic for a lot of people. The Type Cover is a must have for the Pro and frankly should be in the box.

Conclusion: The Pro 2 is the device Microsoft should have made as their first tablet. In a lot of ways, this reminds me of the original iMac’s release — Apple was down on their luck and industry pundits were predicting their imminent demise, but they pulled something special off with the iMac. Is that what we are talking about with the Pro 2? Maybe. Maybe not. The ball is in their court. Questions? Comments? Please feel free to reach out to me Google+ or Twitter.

Better Dead than Public

imagesDell has a big problem and it’s not the one you might think. Although it is true that the PC market has weakened or perhaps more accurately evolved into the tablet market, that is not the primary cause of Dell’s current situation. Dell’s troubles began in 1988 well before Apple’s iPad. In 1988, Dell changed the driving force of its company from innovation and customer-centricness to predictable and stable profits by IPOing.

As you may know, most companies, including private ones, have stock, but private companies do not have to publish the same level of figures regarding short-term finances and are therefore less susceptible to shareholder panic brought on by “professional” analysis of these short-term figures.  Michael Dell is trying to take Dell private again in an effort to remove this element from the equation, since he understands what many of Dell’s investors seem not to — that Dell needs to spend a good deal of money to develop more compelling products that differentiate it from its competitors. Put another way, Dell is going to need to take some risks and short term expenditures that are very difficult for a public company, since the press and market tends to be extremely risk averse; of course, finance journalists are quick to blame a lack of innovation yet are even quicker to burry a company that loses money (even for a short time) in an attempt to innovate a new product.

Maybe there is a need for reform of the public corporation system, but that’s just not going to happen; though the recent hoopla with Carl Icahn and Michael Dell makes me wish we could outlaw “activist investors” — in truth, these “activists” are little more than entitled nouveau riche predators who care little for the long-term success of the companies they invest in, let alone the well-being of those companies’ staff.

Needless to say what is possible, however, is to create a generation of CEOs and Presidents that are not beholden to the rat-race of the public market — of course, this can only be achieved if our most promising startups stay out of the IPO game which often means spurning the vast majority of venture capitalists. This path is hard but is necessary if we want to create products and services that are actually worth something, rather than just the next buzzword bingo app.

In the case of Microsoft, little will change either for good or ill as long as the current board remains and keeps active oversight over whatever executive replaces Ballmer. Does this mean that Microsoft is doomed? Hardly, but it does mean that the next world-changing  product is unlikely to come from Redmond.

Truth be told, I hope I am wrong and the Microsoft can come back full steam and that Michael Dell will be able to rescue Dell from the vulture that preys on it. Returning to reality, however, it seems that Dell will whither and Microsoft will have no choice but to retreat to the profitable and less risky enterprise market, as its old rival IBM has already done.

Pallet Town: Intro to the Repository Pattern MVC4 pt 2

Pallet TownWelcome to Pallet Town! Pallet town is going to be an ongoing bi-weekly look at various development technologies and techniques from the perspective of someone new to that technology. For those who might know or (God forbid) are too young to get the reference, Pallet Town is the first town in the original Pokemon games for the Nintendo Gameboy.

This week we are carrying on with our introduction to the repository pattern in ASP.Net MVC4. We’ve done well so far if I can be allowed to say so myself, but we left one glaring issue in our application: we forgot to persist our data.

Let’s start by adding a database context to our existing Pokemon class:

namespace PokeSample.Models
{
  public class Pokemon
  {
     public int Id { get; set; }
     public String Name { get; set; }
  }

  public class PokemonContext
  {
     public DbSet PocketMonsters { get; set; }
  }

}

Now let’s actually use out PokeContext in our repository:

namespace PokeSample.Models
{
  public class PokeRepository : IPokeRepository
  {
    private PokemonContext db = new PokemonContext()
    private List pokemon = new List();
    private int nextId = 0;

    public PokeRepository()
    {
       this.pokemon = db.PocketMonsters.ToList();
    }

    public Pokemon Add(Pokemon somePokemon)
    {
        if (somePokemon == null)
        {
           throw new ArgumentNullException("somePokemon is null");
        }

        somePokemon.Id = nextId++;
        pokemon.Add(somePokemon);
        db.PocketMonsters.Add(somePokemon);
        db.SaveChanges();

        return somePokemon;
    }

    public Pokemon Get(int id)
    {
       return pokemon.Find(p => p.Id == id);
    } 
  }
}

That’s it! If you are running on localhost with Visual Studio 2012, the data will be saved to a .mdf file on your App_Data directory. If you are running on Azure and publishing with a publisher profile, then it should all be set up for you, assuming you have properly set up a Azure site with a corresponding SQL database on the Azure web portal.

Pallet Town: Intro to the Repository Pattern MVC4

Pallet TownWelcome to Pallet Town! Pallet town is going to be an ongoing bi-weekly look at various development technologies and techniques from the perspective of someone new to that technology. For those who might know or (God forbid) are too young to get the reference, Pallet Town is the first town in the original Pokemon games for the Nintendo Gameboy.

I’ve been having a great time with Windows Azure  or more specifically ASP.Net MVC4. .Net developers will be familiar with the repository pattern, since it is a common pattern used in that community. Let’s take a look at a simple repository example using everyone’s favorite objects: Pokemon. To start we need a simple Pokemon class.

namespace PokeSample.Models
{
  public class Pokemon
  {
     public int Id { get; set; }
     public String Name { get; set; }
  }
}

We now need to create an interface:

namespace PokeSample.Models
{
  interface IPokeRepository
  {
    Pokemon Add(Pokemon pokemon);
    Pokemon Get(int id);
  }
}

And now it’s time for the repository itself:

namespace PokeSample.Models
{
  public class PokeRepository : IPokeRepository
  {
    private List pokemon = new List();
    private int nextId = 0;

    public PokeRepository()
    {
       // adding some test data
       Add(new Pokemon { Name = "Charmander"});
    }

    public Pokemon Add(Pokemon somePokemon)
    {
        if (somePokemon == null)
        {
           throw new ArgumentNullException("somePokemon is null");
        }

        somePokemon.Id = nextId++;
        pokemon.Add(somePokemon);

        return somePokemon;
    }

    public Pokemon Get(int id)
    {
       return pokemon.Find(p => p.Id == id);
    } 
  }
}

You’ll notice that we are seeding the ‘pokemon’ List and have creates some simple CRUD methods. The idea here is that you could call these methods in response to HTTP requests from the PokemonController. Assuming you’ve setup your dev environment correctly this should all work just fine on localhost.

However, there is one pretty obvious glaring issue with this implementation — the data is not persisted. Stay tuned for the part 2 of this series that will show how you can use the common DBContext (ok that’s my term but it’s catchy) pattern to persist your data using MSSQL or some other datastore.

Hope you enjoyed this first entry in Pallet Town and I would appreciate any feedback you might have to offer. Please feel free to contact me on Twitter or Google+.

Time to Divide the Empire

Last week I mentioned that Microsoft is in danger of becoming IBM. This got a good deal of response from the Microsoft fans on Twitter and it was of course not meant to be provocative; in fact, I was just stating the fact that the recent releases of Windows RT and Windows 8 have been less than phenomenal.  IBM faced a similar situation in the early PC days when, after having been beset by clone makers who were able to sell compatible machines without the albatross of Big Blue’s substantial R&D investment, they tried to continue to compete in an already saturated and frankly lost market.

With that said, not all of Microsoft’s recent releases have been so poorly received — Windows Azure seems to be doing extremely well. In fact, their recent addition of Oracle’s software (Java included) to the Azure platform is likely to contribute to the platform’s continued growth. Also, it is important to remember that a lot of enterprises run their business on Sharepoint, Microsoft Exchange,  and Windows Server.

The success of the Xbox business is debatable, since Microsoft has been loathe to break down how much that division takes to run and how much revenue it has generated for the larger company; in fact, the lack of corporate boasting suggests that any profits generated by the Xbox business are modest when compared to the company’s other divisions.

What’s not debatable is the abject failure of Windows RT. When you think about it, WinRT is a strange bird. In a lot of ways it is designed to solve a problem (battery life) that Intel has largely solved with its upcoming Haswell line of processors but makes a number of trade-offs, such as not being able to run traditional Windows software, that the market has been unwilling to accept. Given the time in which WinRT was developed and when it was released it is understandable why those concessions were made but the market was confused by the constant drum beating of “it’s just Windows” — an assertion that in reality was dubious. Worse still, the existence of WinRT has not stopped enterprises (Microsoft’s primary customers) from deploying iPad’s and Android tablets.

Windows Phone suffers from the same issues in the enterprise that WinRT does and, like WinRT, is desperate need of developer support. The install base for Windows Phone is nothing to brag about. Ironically, Windows Phone is one of the most innovative and frankly one of the best products that Microsoft has released on the consumer / client side; to clarify, we are talking about Windows Phone 8 here not Windows Phone 7 and certainly not Windows Mobile. Unfortunately, it was just too late to the market and the delay allowed iOS and Android to become entrenched.

One business Microsoft still dominates is the desktop OS business, but that has more to do with the other major players not being terribly interested in that market,  consumer inertia, and of course being the standard desktop OS for enterprises. It hardly seems wise to boast about winning a race that was won decades ago; especially, when the trajectory of technology looks to be making your choice of desktop OS less and less relevant.

Looking at all of these business, there seems to be a clear pattern: Microsoft does well in enterprise and backend markets, but is increasingly weak in the consumer market. At this point, would it not make sense for them to just dump or split off the consumer side of things and focus on their competency? Imagine and Xbox company that didn’t need to worry about the priorities of the other divisions; doesn’t the recent refusal to allow self publishing by independent developers and the response given by Microsoft (which boils down to “look at Windows 8 / WinRT” first) make it look like the Xbox business is being held back for the benefit (or perceived benefit) of the Windows division? I have a sinking suspicion that if we took a look at other decisions Microsoft has made in other divisions, we’d find that a lof of sacrifices are being made to keep the Windows client (Windows 8 / WinRT) safe — Office for iPad anyone?

 

Blue == IBM

azure-logoMicrosoft has been having a bad time in the consumer face for the last few years — they’ve failed to jump on the mobile train in any significant way and have tried to modernize Windows but face a lot of resistance from users and pundits. Personally, I like Windows 8; the changes in 8 were bold and necessary to bring Windows into the current day, though it does still feel a bit stodgy. Windows 8’s next update (Blue) is, however, a step in the wrong direction.

Sure the (relevant) changes in Blue are relatively small — bringing back the start button and allowing boot to desktop — but these changes show the core problem with Windows ever being a successful consumer brand — the enterprise market. Microsoft makes a ton of money in the enterprise space and (naturally) they do not want to upset some of their best customers. Though those changes might sound small, they are made with the sole purpose of placating enterprise customers who fear having to “train” their users; as an aside, I have personally seen enterprise office workers pretend to not how to do something in Office to avoid doing a task or delay other work functions and, in general, it has been my experience that many IT departments provide far too much “training” when a simple video course would suffice.

Even if the changes, somehow magically avoid the mythical training IT departments keep crying about, this move sense the wrong message to the consumer market and any developers who might have supported Windows 8 in that space; if Microsoft made these concessions will they make any more? given the sales numbers of WinRT it seems like a matter of time?

Unfortunately, in this age of iDevices the bar for a consumer product is significantly higher and users seem to want something a bit flashier to use on their off time. Meaning that developers need the platform to shed the legacy and be something new something flashy something other than Windows. Put a bit more simply, Microsoft has to learn how to say “no” to the enterprise. Unfortunately, Microsoft has shown its priorities and maybe it is time for it to just become the IBM knock-off that we all know it will.

Questions? Comments? Dogmatic rage? Find me on Twitter and Google+. This post was brought to you by Code Journal and Fingertip Tech, INC.

 

Programming Pitfalls: WinRT MediaElement URL Scheme

I’ve been doing a good deal of C# WinRT development recently and for the most part it hasn’t been bad. This week, however, I found a pitfall that is not only so simple it’s silly but also managed to waste an hour or so of my time. WinRT has a class called MediaElement that allows you to play different types of media using Window’s built in media engine.

As you might expect, instances of MediaElement take Uri’s for their source media.  So, let’s say you want to play a video from your app’s bundle — perhaps an introductory video or something like that. You might try:

// I am assuming you created a MediaElement called "player" in your XAML
player.Source = new Uri("/Appname/Assets/Media/Video.wmv" UriKind.Absolute);
player.Play();

Sadly, that will crash every-time. The good news is that your logic is fine, but the bad news is that you are missing a silly implementation detail of how Microsoft has decided to refer to in bundle URL’s.  To make that code work, you simply need to make one small change:

// I am assuming you created a MediaElement called "player" in your XAML
player.Source = new Uri("ms-appx:/Appname/Assets/Media/Video.wmv" UriKind.Absolute);
player.Play();

That’s it. Clearly, there is a little bit of magic here… hence the need for the prefix, but it works and is the prescribed way to do this according to MSDN. Hope that helps someone. Questions? Comments? Find me on Twitter and Google+. This post was brought to you by Code Journal and Fingertip Tech, INC.