Unpacking Logitech G35 Gaming headset

WP_000482_thumb2_thumbA broken tooth, a missed flight to Seattle as a result of it, I decided to treat myself today. As the geek I am that really means buying Tech. Since my headset for the last weeks has been a borrowed Lync headset from Magnus Lindkvist, a new gaming pair was a suitable choice.

My local tech shop at Kungsholmen (within walking distance that is) suggested I’d try out Logitech. In the past I’ve only used Steel Series and Razor but he insisted that it was a good choice.

-"I use it myself", he argued, "and I will never go back".

With a review like that I’d ought to try it at least.

 

Form factor

It’s a classic headset in shape and form with a couple of quirks that I’ll talk a little bit about.

The connection is USB which I like. For me it means I can just plug it in and out conveniently in the front USB ports on my computer. This enables Windows to automatically disable the external speaker system I have plugged in.

Other headsets have had really fragile cables but the Logitech G35 has a strongly enhanced cable that I feel won’t break anytime soon:

WP_000486_thumb4_thumb

Covered in a strong fabric fishnet “sock” I am certain the cable won’t be what breaks first on this set.

I really like that Logitech has gone for a shedable microphone instead of the clip on they, and Steel Series, usually have. It’s just so much better and I’ll never buy anything else from now on.

The fitting of the headset is highly customizable, the box contains two extra cushions for the head strap. So your strange head shape will get the best support, a nice touch. The headphones are adjustable both in height and in angle as the below pictures show. All in all, they are a very good fit for my head.

WP_000483_thumb1_thumb WP_000487_thumb_thumb

Functionality

The headset was easily installed. Windows found the drivers automatically when plugged in but the CD came with configuration software. The software makes it easy to configure volume, treble, bass and microphone levels and to bind the three functionality buttons. There is predefined mappings to Ventrilo but not Team Speak, which was a bit disappointing. But might only be a web search away to get to it though.

There is also options for morphing the voice, a really unnecessary feature in my opinion. But I guess someone likes it.

image_thumb2_thumbWP_000485_thumb_thumb

In addition to the three functionality buttons (G1-3) there is also an analogue volume control and a mute button. Not sure I will use the volume control, I have one on my keyboard that my right hand is used to reach for, but the mute button can be really useful when on team speak.

Sound

WP_000491_thumb_thumbThe headphones closes of your ears really well from outside sounds and there is good bass and treble distinctions. I am not really found of the virtual surround, it makes the sound bleak, but it might be something I have to get used to.

Playing Tïesto – “Carpe Noctum” that has a real deep bass gives me the heavy club feeling I like. Loreen’s – “Euphoria” (Sweden just kicked your asses in the Eurovision ;), I can hear her voice as sharp as it should (not in surround mode though). So overall, very happy with the sound.

Summary

First few hours with the headset and I am really happy so far. It was a good recommendation I got. Keep an eye on my twitter for updates after I’ve done some raiding and action packed games.

2012-06-18-15-34-11.131_thumb_thumb

Logitech official product page

Logitch G35 @ Pricerunner

Developers: Innovate or get outsourced

“Nothing endures but change”

The phrase is accredited to the philosopher Heraclitus on of Plato’s influences. In our industry, the quote is o’ so true and there is a new change at the horizon we need to embrace.

You have probably heard that to be a successful solution developer you need to understand the business. This is true; to deliver a solution you need to understand more then just technology. However, in a very near future this will not be enough. In a very near future you will need innovate solutions not only develop them. In the same very near future you will need to understand how to innovate business using technology not only apply the technology to the business.

In that future, to stay relevant in your on-shore locations, you need to turn into a solution innovator and move away from being a solution developer. If you can’t take on this shift; you WILL be outsourced.

The outsourcing paradigm has really evolved the last couple of years. It is moving away from being “IT on tap” into strategic partnership. I only need to go as far as the company I work for, Avanade, to see how we build centers that are client specific. Centers that capture knowledge of our clients business and already today deliver the solutions and value they need with very little or no on-shore assistance.

While I am looking back at the last 12-13 years that I have been developing solutions for clients, I see a pattern. It used to be enough to be a skilled programmer, then that got moved into outsourcing factories. It used to be enough to be skilled at designing solutions, then that got moved into outsourcing factories. At the moment it might be enough to understand the business, but I am certain that will move into outsourcing factories as well. Following this path we need to take that next step to be significant.

Deploying that last bits of code into production and seeing your client silently nodding and agreeing that you delivered as promised; creates a rewarding feeling that I am sure we all have felt.

Deploying the last bits of code on a solution that delivers business innovation which you brought to the client; rewarding is not a big enough of a word to describe what you will be feeling.

Of course the difference in time zones and cultures as well as the distance between countries is making this transition a bit slower, but it will come. Services like Lync, Skype and other collaboration tools is closing the gaps and gives us unique insight in each others cultures.

After working a couple of years in a truly global company, I really feel I can understand and collaborate with people across the globe a lot easier then before and I have peers in other locations I feel as close to as the colleague sitting at the desk next to me.

The transition will come.

Understanding the business will very soon not be enough. You will need to start innovating, you will need to be proactive to your clients needs, being reactive won’t cut it. Personally I turned to “Innovation: The Five Disciplines for Creating What Customers wants” to start my transition and am really looking forward to reading “Where Good Ideas Come From: The Natural History of Innovation” and “Democratizing Innovation” during my summer vacation.

I suggest you do too, and fast before your job has moved to another shore.

Some useful links:
TED Talks: Charles Leadbeter on Innovation
Slide Share: Thinking about innovation

Has Microsoft killed Silverlight?

The reports of my death are greatly exaggerated – Mark Twain

 

The internet is currently full of rumors and reports that Microsoft no longer will develop Silverlight after version 5 is deployed. This could not be a bigger exaggeration.

Silverlight consists of a couple of different components;

  • XAML for describing UI
  • C# for writing the code
  • A framework with built classes and controls to speed up development
  • A runtime to execute the executable
  • Development tools

One of these will go away “A runtime to execute the executable” and one will be updated “A framework with … “.

A new runtime

The Silverlight runtime will go away. Microsoft doesn’t support plugins in their Windows 8 Metro-style browser and here the rumors have some validity. But what is in the runtime? There is a memory model, an execution environment, a type system, threading model and a lot of things needed to get your application to run. In Silverlight you seldom interact directly with this runtime, you interact with the libraries on top of it.

But there is a big difference between being killed and being replaced. In Windows 8 they Silverlight model has been embraced and pull down on top of the kernel itself. In Windows 8 the runtime is called the “WinRT”. It will execute your C# code and XAML but native to the platform instead of in a virtual machine.

Does this change stuff? Yes, will you have to care? Barely. If you don’t count the fact that your apps will be able to run on XBox, Devices and PC’s.

The framework

Here you as a developer will be mostly affected. A few things will change. A couple of namespaces are moved to better reflect the native model of WinRT,  the type system has change a little bit and your reflection code will have to be updated (minor update, adding a method call to all typeof and gettype). For the most part, all the classes, methods and other artifacts will be the same as the ones that you use for Silverlight / WP7 development today.

The big difference here isn’t any changes to existing code, it’s that Silverlight applications now get access to so much more functionality that it was restricted from before. Silverlight becomes native.

C# and XAML

… will stay the same (with the obvious version upgrades). You will not have to create COM-objects or call any Win32 api’s. From C#; the programming model of WinRT is pretty much the same as that of the CLR / DLR.

Final words

So yes, Silverlight in its current form could probably be considered dead. But is the technology dead? I’d argue it isn’t. It is evolving into a native model, it’s going to be the engine for applications on the next version of Windows, both on desktop and other devices.

So even if the runtime dies, it’s essence and tools are still there.

 

More reading:

Silverlight isnt dead its the heart of WP8, Windows 8 and XBOX

Silverlight is dead, long live XAML

What is WinRT and is Silverlight dead?

Cell phone operators: the next extinct species

I firmly believe that most cell phone operators have lost the initiative in their own market. There are more and more technology breakthroughs and events that further marginalizes their role in providing communication services.

With Microsoft buying Skype, putting their PBX replacement Lync in the cloud and pushing hard for device independence for all your information; they start to become a big competitor on the communication services market.

Consider the following scenario:

Your company decides to rent Lync from Microsoft in the cloud, by then Microsoft has connected Skype’s dialing out capabilities with Lync in Office 365 and rolled out the Lync/Skype clients for their windows phone 7 and IPhone.

Now ask yourself this:

"Will you ever have to use the voice service of the cell phone operator again?”

The answer is simply no.

Another interesting example is the WhatsApp phone app. A simple SMS replacement with additional value add like sending your exact location using GPS-coordinates. This without the additional cost for sending sms.

The cellphone operator are getting marginalized to merely providing the infrastructure for 1’s and 0’s.  

How did this happen? They are protecting their own investments more then they think about innovation.

So in the end they only have themselves to blame, after all, they could have invented Skype, they could have created PBX’s in the cloud, they could’ve anticipated that IP packages will be the communication going forward.

Instead they choose conservatism over innovation, bad choice. Services is the high-margin business, infrastructure the low-margin.

HTML5 will chop more then Flash and Silverlight, next up: Apps

In response to Apple adding a 30% “Tax” on anything bought inside apps and subscriptions, Amazon has released a HTML5 version of Kindle (source).

This is an interesting turn of events and one I’ve been waiting for. The capability leap of HTML5 seems to create a little bit of sanity in this space. Much like everything was a desktop app before WWW matured, everything on a mobile device is an app today. Even company contact info it seems.

But as HTML5 matures and get’s more widely spread on mobile devices, I’m expecting more and more apps being converted to web pages. In a similar fashion that more and more desktop apps was converted to HTML4 / Javascript pages when that technology matured and evolved.

Just because everything can be an app, doesn’t mean it should. Now we have other very strong alternatives as Amazon just showed.

Microsoft buying Skype – The vision

So Microsoft bought Skype. Interesting. Looking at the tech that Microsoft is now owning in this space, Live Messenger, Lync and Skype you don’t have to be a rocket scientist to see where this can go.

Let’s put up a couple of stand alone facts.

  • Microsoft is addressing IP-Telephones and video conferencing using Lync for the business.
  • Skype is addressing IP-Telephones and video conferencing for the consumer space.
  • Lync could be delivered in the cloud (parts of it is already is in Office 365).
  • Skype is delivered using the cloud.
  • Microsoft announced Skype clients to your Windows Phone 7
  • Microsoft announced Skype clients to Microsoft XBox.

Now do you see what I see?

Bring up your phone, call your friend. He/She will be able to answer where ever he/she is. Sitting at the computer with a skype-lync client, the mobile phone or from the couch in front of the Kinect. Some of these options will be with video, some wont.

All of this options will run through the Microsoft IP-telephony network. Some of this will be paid for by the consumer, some won’t. All in all, Microsoft is becoming a carrier for chat, voice and video.

I think this is cool, thinking about the integration possibilities. On-premises Lync server with all the apps that can hook in, and the ability to call other networks.

What do you think?

In the face of frustration.

I love to write code. I’ve written code in one form or another for the past 25 years and I’ll probably still write code for the upcoming 25. I love the pure power of creation and freedom to let creativity flow that code gives me. But like in any love story there is times when it just frustrates the hell out of me.

I have a confession. I’m not proud of this, I know it’s morally wrong and I would never do this in any other setting; I’ve taken on a mistress.

My mistress is business value. Not that code can’t be business value, but sometimes other options can more quickly satisfy business values and in the face of frustration I’ve started to indulge in those options.

In the past I’ve easily accepted blame for throwing code at most problems and tried to deliver features at a rapid agile pace. Often and early. Sometimes code is just not as rapid as I want.

Now if just the platforms I choose to install to meet business needs quickly wasn’t so frustrating to code for…

Standard products – Can’t live without them, can’t live with them.

The benefits of minimizing the centralization of IT

One of the lesser known ideas and practices behind what has come to known as SOA was the physical organization of teams into service areas. The basic idea is that there shouldn’t be a centralized “IT-Department” that manages the systems they need, but every department should have their own dedicated IT that help them conduct their business as effective as possible.

At a first glimpse this seems like someone didn’t think this through. After all, why should the finance department handle it’s own IT? They should focus on finances! This is true, but digging past the first shallow glimpse there is actually really interesting benefits here, none of the technical in nature.

It’s all about understanding the core

Centralized IT-departments are often very good at performing their core-business; IT. But if IT isn’t the organizations core business there is a lot to be learned, there is a gap to be bridged and you really need dedicated IT-staff that understands exactly what your departments function is in the the whole. This often leads to IT-departments dividing into subgroups with staff specialized in servicing a separate department. The collective knowledge collected over years a group like this will often represent a full understanding of what the department actually does. This leads to shorter cycles, quicker feedback loops and more to-the-point implementations.

If you understand the finance department, it will be a lot quicker to understand new requirements. This is a first step into making IT part of the business and not only a cost of performing it. It also comes a long way to becoming more cost effective then general development departments ever can be.

It’s all about money streams

As business has evolved, a lot of organizations today can’t conduct it without IT-support. Often you hear that cost of IT is the cost of doing business. In a sense it is (though I’d say that cost of IT is an investment that will pay it’s own weight done right, but that’s another discussion).

Add to this that all head of departments have their own budget that they need to maintain and fulfill. All IT-projects with a centralized IT-department will quickly come to the same discussion, who will pay for this? If there is an investment that need to be done that the finance department will reap the benefits of, should the cost end up on the IT-departments bottom line?

A lot of organizations try to solve this by charging the departments for new projects and taking a fixed fee for maintenance. This solves part of the problem but creates new grounds for discussions.

When is the project done and when do we go into maintenance mode? Is maintenance just about bug-fixes and what if that is the case, what is a bug? Endless discussions. All based on the fact that the managers of each department have to report their budgets.

Much like some discussions between clients and consultants.

If managing the budget was entirely up to the department itself, this would not be an issue. It would be up to the department to do investments that bring their business forward. All costs associated with their IT-support would be visible in their own budgets. Manageable in their own budgets. There will never be a discussion about investing X to get benefit Y, it will all boil down to the same bottom line and ROI will be the responsibility of the same manager.

There are some IT functions that might not be feasible for this, like desktop maintenance. Maybe the BizTalk server should be maintained centralized for all departments, etc. But for the system support you need, for any customization or development you need. This is a smooth way to go.

 

Conclusion

Organizing your development into areas of service might not be for everyone. But there are great benefits for those who does. Shorter feedback loops for requirements, shorter decision paths and visualization of actual cost / benefits in the right place; the bottom line for the department actually using the service.

Reflections of Visual Basic 6, when the end is near

Very soon Visual Basic 6 will go out of commission, Microsoft will cease all support and will officially bury a language, tool and platform that has been argued to carry their success with their platform penetration through the 90’s.

In the backwater of this I can’t help but wonder. Was Visual Basic an expensive detour or did it actually help bring our industry forward? The goal with Visual Basic was simple, bring a tool that makes it easier to build LOB type of applications. Lower the threshold and make the Microsoft platform dominant on delivering software. There will be arguments for success and failure but a simple fact remains, there is a lot of Visual Basic systems out there, there where million and millions of VB6 devs working everyday with the platform before .NET.

But did it backfire? Did the rapid growth of Visual Basic developers contribute to the mistrust in the Microsoft platform for mission critical applications? The fact is, there was a lot of really poorly written VB systems deployed. Enough to create serious doubt in the Microsoft platform. Was it VB’s fault?

I would say that with Visual Basic, Microsoft got it’s wish fulfilled. With an army of devs there where apps flying onto their platform. But was it the right devs?

Maybe, no matter the tool, people who can’t write software won’t be able to write software?

Maybe, with a really bad tool, people who can’t write software will write insanely bad software?

Maybe Microsoft should be careful what they whish for?

It might not be a tooling problem that people can’t write software, it might be a people problem.

With that in mind, I look very skeptical at things like LightSwitch. I don’t see any problems in making solid developers more productive. There is one thing that VB has taught us though; not every person with a keyboard makes a solid developer, and a tool won’t change that.

The dreaded “Save(Foo bar)”

For the last year or so my biggest antagonist has been “Save(Foo bar)”. There is usually a lot of things going wrong when that method turns up. I’m not saying that saving stuff to the persistence storage is a bad thing, but I’m arguing that the only place it should exist is in actually saving data in the persistence/data layer. Don’t put it in your services, don’t put it in your business logic, and for crying out loud; do not base entire behavior around it.

The source of the ill behavior

When developing software a user will quite often tell you that she wants a button that will save the current changes she’s done to the current work. As a good developer we implement this button and make the user happy. After all, their happiness is our salary. In a pure data-entry application this is all good, but as soon as we add just a little bit of behavior we need to start pushing the actual saving far, far away. Consider this screen:

image

In this setting the Save button makes perfect sense. The user changes a couple of things and then commits those changes to the system. Now start to think about more then just storing the values in a database, think about adding behavior to the changes.

Do not throw away the users intent!

When a user makes a change to any of these fields, they do so with an intention. Changing the address might mean that the receiving end of an order has changed. Changing logistics provider might mean that a new one need to be notified. With a save method, the only way for our business logic to know what to do, is to figure it out;

public void Save(Order changedOrder) { if (changedOrder.Address != existingOrder.Address) OrderAddressChanged(existingOrder, changedOrder); if (changedOrder.Status != existingOrder.Status) OrderStatusChanged(existingOrder, changedOrder); if (changedOrder.LogisticServiceProvider != existingOrder.LogisticServiceProvider) LogisticServiceProviderChanged(existingOrder, changedOrder); }

And even worse;

public void OrderStatusChanged(Order existingOrder, Order changedOrder) { if(changedOrder.Status == Status.Cancelled) ......

Basically what we’ve done is throwing away the users intent and capturing of the actual work the user has done. I see this happening a lot in service interfaces (WCF Service contracts with a single Save method), in “Managers” (Let’s not even go there) and in local services.

The code this will generate a couple of releases down the road will smell in so many scents it’s not even funny to joke about. But to get you started, read up on Open/Closed (A SOLID principle).

 

Enough with the bashing, what’s the solution?

The idea that a user can commit their work in a single push of a button is a good one. But that doesn’t mean that the save need to anything else then a button. The actual work under the covers should reflect what the user really wants to happen. Changing a service provider on an order that’s packed should probably issue a message to the old provider not to pick the package up and a message to new to actually do. This kind of behavior is best captured with commands.

Let’s revisit the order form:

image

In this scenario every red box here is actually a intended command form the user. Identified as;

ChangeOrderAddress

ChangeOrderLogisticServiceProvider

ChangeOrderStatus (or actually, CancelOrder, ShipOrder, etc)

Implementing this could either be using the command pattern or methods on the order class. “It all depends” on your scenario on preferences.

So what am I really suggesting?

Make sure that your code reflects the intention of the user. Not the technical details of how the data is persisted. You will save a lot of pain, grief and hard work by just identifying what the user intends, capture that in commands or something similar and execute them in order when the user hit’s save. And most importantly SAVE IS A METHOD ON THE PERSISTENCE LAYER, NOT A BUSSINESS FUNCTION.