Solution to GoToMeeting video conferencing quality

In a previous post, I spoke about a problem with GoToMeeting when video feeds are enabled.  The problem manifests as audio AND video degrading to the point of unusability.  Throughout this time, we as a company evaluated many other options for online meetings that include video.  This is very important to us since our clients are busy, and we have staff in Austin, Dallas, and the Toronto area.  Also, using video allows us to create a more personal relationship with out clients.  In my experience, you naturally build trust quicker with people you can see.  And adding video to conference calls is a great tool.

There were two issues we were experiencing with G2M video meeting quality. 

    1. Intel speed-step interference. 
      First, Running three screens and video conferencing is a big tax to the CPU.  It works fine initially, and then 15 minutes into the meeting, the CPU gets hotter, and if not cooled enough, the CPU steps down in speed, sometimes to 0.79 Mhz.  When this happens, there just isn’t enough horsepower for G2M to do what it needs to do.  The first solution was to ensure proper airflow to the machines running the software so that the CPU stays cool.
    2. Lower the CPU priority of the g2mvideoconference.exe process
      IF the CPU is going to be starved for any reason, we wanted the video feed to be the thing that suffered.  Currently, the audio cuts out to the point of unusability.  The fix for this is to change the CPU priority to “Low”.  The picture below shows how to do this using the Task Manager windows (you can get to task manager by pressing CTRL+SHIFT+ESC all at the same time.

image

I want to figure out a way to have this process launch with Low CPU priority every time it launches.  If anyone knows a registry setting or some other way to have this be automated, I would be grateful. 

Onion Architecture: Part 4 – After Four Years

 In 2008, I coined a new pattern name called Onion Architecture.  You can read the previous parts here: part 1, part 2, part 3.  Over these four years, I’ve spoken about this pattern at user groups, conferences, and it’s even published in one of the chapters of ASP.NET MVC in Action from Manning.

I’ve been overwhelmed by the traction this pattern name has enjoyed.  Folks from all over the country have written about and have talked about the pattern.  Some of the ones I’ve noticed are here (please comment with more – I welcome it).

 

Back in 2008, I defined four tenets of Onion Architecture:

  • The application is built around an independent object model
  • Inner layers define interfaces.  Outer layers implement interfaces
  • Direction of coupling is toward the center
  • All application core code can be compiled and run separate from infrastructure

 

Although there has been significant adoption of this pattern, I have received countless questions about how to implement it in various environments.  I mostly get asked about how it relates to domain-driven design.  First, onion architecture works well with and without DDD patterns.  It works well with CQRS, forms over data, and DDD.  It is merely an architectural pattern where the core object model is represented in a way that does not accept dependencies on less stable code.

CodeCampServer was an original sample of onion architecture, but it also grew as a sample of how to do ASP.NET MVC in various ways, how to use Portable Areas, and how to use MvcContrib features like input builders.  If you are just looking for onion architecture, it has too much going on.  I have pushed a much simpler solution that represents onion architecture concepts.  I have intentionally not included a UI input form or an IoC container, which most people associate with onion architecture.  Onion architecture works just fine without the likes of StructureMap or Castle Windsor.  Please check out the code here and let me know if this presents a simple approach – that is the goal.

When there is enough interest, I will continue this series with more parts.  CQRS definitely deserves some addressing within this architecture, and so do object models that support task-based UIs.

Get the code here at my BitBucket repository.