one or more parts of this message could not be displayed Results


Sponsored Links:



In a fast paced world, three years after Windows 7, Microsoft’s upcoming successor OS, Windows 8 remains a hard sell. Does that mean it is not worthy of the buzz and hype?

Browse a tech magazine lately? Check out a news site about technology? Chances are, you will read something about Windows 8. Just two weeks ago, Microsoft released the Consumer Preview for Windows 8. It hasn’t even hit store shelves yet, and people are already complaining. This is nothing new in tech circles: Everyone is resistant to change. Sometimes, that resistance to change can be helpful, and even good feedback for developers. Other times, it can result in a shouting match that just remains unwinnable. But like many things, thinking in absolutes is often deconstructive, and seldom objective. Business men and women will judge Windows 8 with business acumen; savoring each bit of financial data and sales indicators to prove a point about the new system. Decision-makers in IT circles will look at security and reliability before weighing in with a more structured cost-benefit analysis that deals in infrastructure. Home users are likely to place more value on aesthetics, performance, and ease-of-use as major factors in the upgrade model.

It is the middle of the month: March 15, 2012 to be precise. It is hard to believe that already three years have gone by since the release of Windows 7. Many IT business people, including server administrators, are just starting to become acclimated with the Windows 7 client environment, its off-shoot productivity software, and the Windows Server 2008 family of products, including Windows Server 2008 R2. In one worldview, short and steady wins the race. While more tech savvy companies clearly saw the benefit of migrating quickly upon release, many SMBs, mid-range companies, and home users remain in a Windows XP limbo – either due to the economic mess that most of the world is dealing with, budgetary constraints, or simply a lack of knowledge about how to port all of their important data over to a Windows 7-based network. But as time has gone on, these groups are a minority, for as much as is known. While much of the third world may still be using Windows XP, and even older systems, it is difficult for that data to be chomped up and read by skeptics and true-believers. In agrarian, rural, and largely undeveloped lands, Internet access still remains a commodity that is seldom traded, and where mobile phone companies continue to make inroads.

Back here in the west, the difference is noticeable in how a company conducts its business, especially when you walk into one running Windows XP and Server 2003. It is not uncommon to see pending Windows Updates on every workstation, versus an up-to-date Windows 7 network. If the IT tasks are outsourced, how that time is spent, and for what purpose, will likely face scrutiny and prioritization. For instance, the administration of an important database may take precedence over the application of client operating system updates. Many system administrators may simply ignore, or be unaware of, the capability of domain controllers and file servers to push out updates across the internal network using WSUS. In many offices, however, you will be likely to find a hybrid network. With a lack of EOL policy and strategy, many businesses end up with certain departments stuck between Windows XP and Windows 7, and that difference takes place when they purchase new hardware – not due to a timetable, but out of necessity. A hybrid network of these systems is not exactly the best medicine for either a business or group of home users who rely on their Windows computer systems day-to-day activities, but it may be better than nothing.

A Trip to Seattle: Home to 90’s Alternative Music, Starbucks Coffee, and Microsoft
On April 1, 2011, I received the Microsoft MVP award for Windows Expert – Consumer. It was a real treat to know that Microsoft had recognized my contributions in the form of setting up forum websites and participating in them. I was certainly very thankful for the award, and presumably happy to know that I could continue to do what I do best, as that is why I received it. I wasn’t the first to be recognized by Microsoft for my contributions to my own website: Ross Cameron (handle: kemical) became one of our first Microsoft MVP’s. One of our former members, Greg (handle: cybercore), had contributed thousands of helpful posts on Windows7Forums.com and was nominated. As time went by, we were fortunate enough to see other MVP’s join our website, including Shyam (handle: Captain Jack), Pat Cooke (handle: patcooke), Bill Bright (handle: Digerati), and Ken Johnston (handle: zigzag3143). These people are experts in their field and genuinely reflect an attitude of altruism towards people. Such traits are hard to find, especially over the Internet, and in a field that is driven by individual competitiveness that forces group cohesion as a necessity. I started communicating with one MVP as a result of a disagreement, but have since gained an enormous amount of respect for her: Corrine Chorney, the owner of SecurityGarden. When I made a video that contained an error or two, about ESET Smart Security, I was suddenly contacted by a fellow MVP: Aryeh Goretsky. These types of people live and breathe technology, and thus, even having a brief e-mail exchange can be a breath of fresh air. It becomes recognizable and clear to me that Microsoft’s selection process and choices for those who receive this award is hardly based on pure number crunching, but on gauging a person’s enthusiasm and demonstrated expertise in a field. Understanding how that translates to a much broader audience is compelling. To me, this is a good thing, as it shows that even one of the world’s most successful corporations, in this case Microsoft, perhaps in one of the few acts of selflessness that one could expect from a multi-national corporation, finds customers who have made a mark in information technology and celebrates that. I become hopeful that they recognize the countless others who make contributions on a day-to-day basis. With half a dozen certifications under my belt, and nearly a decade and a half of experience, I am but one person. And for every Microsoft MVP I have met, their dialogue always translated into real energy and enthusiasm. How many countless others have not received an award, or merit, for helping someone “fix their box”? I suspect that number is in the millions. This in no way belittles the award, because to me, such an award really is about helping others.

Often times helping others is giving someone your opinion: even if your opinion runs contrary to running a system consisting purely of Microsoft software. One example is Windows Live: I have a fundamental disagreement about how I chose to use Windows Live, and whether or not I want Windows Live Services embedded into my operating system experience: something that home users with Microsoft-connected accounts will notice almost immediately upon starting the OS. I do not, in any way, undervalue the development of these services, or their potential market value to consumers. I simply have a difference of opinion. And this should no way diminish someone’s ability to receive an award. I am not an employee or pitch man for Microsoft products, but someone who conveys his own thoughts and expertise in that area. To me, the award would have little value if I was expected to tout the benefits of using Microsoft Security Essentials over a paid anti-malware suite. I think that even the developers of the software themselves would take exception to misinformation. And to Microsoft’s credit, they have asked me nothing of the sort. To me, that is a fundamental sign of an award that encourages community participation and expertise in a given area of technology, from a company that is now expected to set standards on the world stage.

Not everyone made it to this summit: For many of them Redmond, WA is far, far away. For me, living in New York, that also rings true. But it sure are the people who make it worthwhile – even when you’ve never met them in person, the way they behave and conduct themselves, towards you, speaks volumes. And so I’ve learned a lot from every Microsoft MVP that I have met – both online and off; in a five minute conversation, or a fifteen hundred word e-mail.

During the Microsoft MVP Global Summit in the Seattle-Bellevue-Redmond area, I had the opportunity to meet some of the most interesting and eclectic groups of people in information technology that I’ve encountered in years. Truly, the revolution taking place around technology in Seattle, and its famous campus grounds located at 1 Microsoft Way in Redmond, is in no way limited to laboratories that are seldom, if ever, open to the public. Quite to the contrary, acclimating with Microsoft’s extensive community of worldwide supporters and individual contributors doesn’t just result in hearing success story after success story (although that is fun too). Of the thousands of people invited to the event, from all over the world, including Japan, Asia, Indochina, North America, Brazil, and the world at large, I found myself welcomed by a remarkable group of individuals. These men and women were of no traditional demographic one would think of – in fact quite the opposite was at hand. At 29 years old, I met kids younger and more successful than myself, who had generated their own start-up firms. I also met much older men and women, who witnessed the transformative nature of technology and got involved, one way or the other. These men and women came from all walks of life, but I am reminded, in particular, of a few of them I met who had a real impact on me. As someone who had come so far to be a part of this event, I did feel uneasy knowing that I was there alone. The individuals I met at the summit were polite, courteous, helpful, and informative. It was not difficult to see why they are considered experts in their field.

Whether the issue for them was something simple, like MP3 players like Zune, the Xbox, MS SQL, or the Microsoft Windows family of client and server products, this entire network of community supporters really outlined why Microsoft continues to have far-reaching success around the world. The level of enthusiasm for their technologies is clear, concise, and breaks down the traditional barriers of race, color, nationality, and gender inequality.

At that summit, I was witnessing not just what technology would be capable of doing in the future, but as a first timer, I got to see with my own eyes what it had done for just about every participant I was able to strike up a conversation with. Having been severely jet-lagged and exhausted from my trip, I travelled all the way from New York City to Seattle-Tacoma airport in a few hours. Having travelled, for the first time, outside of my own time zone, suspended at 38,000 feet in the air, I found myself dizzy, drowsy, and often times downright sick once I got off the airplane. It was something really unfamiliar to me, but in a way, strange thoughts began to fill my head. I realized that in Seattle, it nearly almost always rains once per day. There is certainly less sunlight there than in New York. Perhaps this lack of sunlight had inadvertently made people more likely to turn on a computer and create some kind of innovative programming. It was a silly thought, but staring at the horizon in the distance, I could not help but think about Mount Rainier, Lake Washington, and the land I was now interconnected with. In many cases a landmark home to science fiction, Seattle’s own Space Needle is a national treasure. A marvel of all aerodynamic ingenuity west of the Mississippi River valley, the Space Needle is essentially a giant UFO-shaped tower that is capable of housing restaurants, sight-seeing tours, and shines a giant beam of light that was part of the original design, but was only recently added.

Perhaps, I thought to myself, this is how the term “cloud computing” had caught on. With a lack of major sunlight ever permeating this area, to my knowledge, and with rain and humidity always on the horizon in a constant lake effect, it suddenly made sense to me how the area had become famous for its murky alternative rock grunge music in the 1990’s, the Jimi Hendrix Experience, the evangelical computer programmers, and a number of activities, like concerts and music performances, that are usually held in-doors! In a way, it all made sense to me now, and I spent a great majority of my time taking in the sights, sounds, and hospitality of an entirely different area of the country. The most populous city in the northern United States is also home and origin to Starbucks. It all began to make sense to me that it would be here, more than anywhere else in the USA, that they would need fresh coffee beans from Jamaica available at a moment’s notice. And as humorous and sophomoric as that may read, I still think there is some truth to this.

This summit was my first experience with my Microsoft MVP award for Windows IT Expert – Consumer on the road. It was certainly a bumpy ride, and I did not take advantage of all of the event activities I could have. Windows product group experts and Microsoft employees were available, nearly from the break of dawn to the dark hours of night, to provide on and off-campus sessions to enthusiastic individuals. Looking back, the path was worthwhile. While most of the people I met had embedded themselves in this event for many years, I was certainly a newcomer. Determined to act the part, I tried my best to overcome the massive jetlag I had encountered, and vowed to myself to never eat sushi after getting off of a six hour flight again. Who could not be anxious when arriving in such a foreign place compared to the east coast of the USA? I have certainly flown and driven up and down that area most of my life, visiting nearly all of the north and south, but I had no idea what to expect near Redmond. An acquaintance of mine from Los Angeles was able to help me deal with the insomnia and time difference that comes with this type of travel, and she probably helped me in a way that she still doesn’t know – all from a few text messages. I am constantly reminded that technology itself has made us all interconnected, no matter where we are. At the Microsoft MVP Global Summit, what I did find were individuals, many of whom who had a certain selflessness about them, and a desire, above all things, to learn more, experience more, and help even more.

Upon immediately striking up a conversation with anyone at the event, it was absolutely easy to see how these men and women achieved recognition of excellence from Microsoft. While many young people who attended the event had created innovative ways to help others by setting up websites or studying the inner-workings of the Microsoft entertainment platform, others had been part of the commercial information technology circles and big businesses that have changed the environment of the Internet. I even caught a glimpse of two individuals who appeared to be working for a former web host that one of my websites was hosted on. These businesses, powered by ingenious individuals, have swept the Internet. And while many people appeared to be there as part of a corporately backed package, it was clear to me that most others had made a name for themselves by creating their own platform for innovation and success. Most important, and pronounced to me, was that each and every person there reached that point through acts of selflessness -- for helping others. In each and every instance, you could go around the area and know that you were surrounded by people who could speak your language: whether that be ASPX, XML, C, PHP, JavaScript, or BBCode. While a person there from Asia may not have had any comprehension of what I was talking about if he did not speak English, if I showed him Process Monitor in Windows, I could probably communicate with him on some technical level.

To contrast that, I came home to an environment back in New York where the Windows 8 Consumer Preview had just been released. It was no surprise to me that Windows 8 had been getting some slag for replacing the Windows Start Orb and Start Menu with the Metro User Interface (Metro UI). Windows 8 still has some major feature improvements going for it. This early in the game, there is no question that many of these features have likely gone undocumented, exist under-the-hood, or simply have not reached a stage in development that was acceptable for the Consumer Preview. First, it is important to note that the Consumer Preview is as much of a beta release for public testing as it is a marketing tool for Microsoft. When we examine how this has been released to the public, it is not hard for me to conclude that it is also a way to gauge public reaction to the first serious and inherent differences to the way the Microsoft Windows GUI has been presented – ever. Other operating system releases have taken the idea of the Start Menu and added search capabilities and refined a core concept. Slowly, but surely, we see an improvement that has occurred over time, with the look and feel of Windows remaining consistent over the ages.

The Consumer Preview Was Released To Test Your Reaction; Not Just The OS

In fact, this is a public release of Microsoft Windows to appear in limelight, in what is essentially a beta (and presumably near release candidate stage), with some features either completely omitted or broken. But not all is lost for Windows 8. There are some under-the-hood changes that show promise. I am not a Windows developer or programmer (most of my tinkering involves Linux, C, HTML, PHP, and JavaScript), but I can start to appreciate the level of changes that are being made on a core level as I get more time to become acquainted with this system and allow various whitepapers and documents to enter my lexicon.

Those looking to upgrade, or who will receive the upgrade already as part of a plan, like Microsoft VLK Software Assurance, will reap some benefits by making the upgrade to Windows 8. Businesses that have been around long enough will be familiar with creating and following a comprehensive End of Life (EOL) cycle plan. Such plans are usually coordinated between an enterprise administrative team that manages the day-to-day changes of internal certificate authorities, domain controllers, and mail servers. This group usually (and hopefully) has the training and forethought necessary to look at the official Microsoft release timetable, as well as the support for commonly used hardware and software. Assessments can be made to better understand how, where, when, and why this software and hardware is deployed, and under what conditions it is upgraded or phased out entirely. Not only does this level of planning bring clarity to what could otherwise become a source of enormous administrative overhead, but it also helps to mitigate the risk associated with allowing systems to continue running under-the-radar and without proper security auditing. Under such a scenario, businesses may choose to have their internal IT department perform network-wide audits of all systems. It is an affordable alternative to bringing in an outside specialist, and comparisons with Microsoft’s official support timetable can help make the transition to new hardware and software – as well as what comes with that -- such as training and significant infrastructure investment -- a more conceivable possibility.

Home users can depend on a much more simple approach, and that is to monitor requirements needed for tasks like school, work, and entertainment, while keeping up-to-date with Microsoft’s in-band and out-of-band security patches. As mentioned previously, Microsoft already publishes a roadmap to indicate when mainstream support, and even updates, will be terminated for their operating systems. Combining all of these ideas together, it is not unreasonable to come to a conclusion that one can continue using Windows 7 for a few more years without much difficulty. When the time comes, an upgrade will be made easy, as the large system manufacturers and independent system builders will, no doubt, bundle OEM copies of the system after RTM (“release-to-manufacturer”). On the side, one could begin to upgrade a small office or a home network with new computers when the need arises, in order to take advantage of the new feature set that is sure to be setting a precedent going forward.

Very large enterprise networks usually already make use of proprietary, custom software and hardware. Those businesses can begin the transition planning in phases, and will have access to fully licensed Microsoft support personnel who work in the corporate sales division of the company. Those resources can be accessed by standard enterprises (approx. 200 clients systems) and by mid-range offices (approx. 50-200 client systems) using Microsoft Gold Certified Partner program members that also specialize in employee training, resource management, and all-inclusive maintenance plans. Even a few well-trained and certified IT consultants and managers could handle a migration and post-migration scenario with the right level of planning and funding.

Stay positive, here is some deductive reasoning as to why not all is lost, and how the feature improvements that Windows 8 customers will benefit from may actually start to appear after the OS hits store shelves. (The kind of stuff that may not be readily apparent in the incomplete Consumer Preview version):

Virtualization Scores A Win

Hyper-V Virtualization included in Windows 8 will allow you to take your computing experience to the next level. If you are not entirely enticed by the prospect of running Windows 8, or still have a co-dependent relationship with legacy applications, Hyper-V will be sure to help you in that area; much like Microsoft Virtual PC brought Windows XP onto the desktop for many Windows 7 users. While Hyper-V isn’t about to take the throne away from VMWare’s line of virtualization products just yet, especially Workstation and ThinApp, expect to see the inclusion of Hyper-V as an experience that has the potential to compartmentalize the installation of applications – even really old ones. With Hyper-V and Metro as platforms likely to be directly controllable and manageable from Windows Server 8, IT admins can rejoice at the concept of virtualizing what is left of the desktop – and preventing inappropriate use of computer system resources at work. With full control of Metro and Hyper-V under Active Directory, system management is about to get a whole lot easier. Windows 8 fits as the one OS that office managers can control directly from Windows Server 8 without remorse. Limiting access to the desktop will reduce headaches for employees who may only be obligated to launch specific company-approved Metro apps.

Metro: The User Interface Revolution
Metro UI will not be alien to anyone who is old enough to remember Microsoft Encarta, or to any youngster who has already owned a Windows Phone. I still remember using Microsoft Encarta’s slick navigation system to look up John F. Kennedy’s 1961 inaugural address. This was one of the first times I saw decent video footage in an encyclopedia. Back in those days, everyone was on dial-up, and an encyclopedia like Encarta was the be-all and end-all of factoid finding for non-academics and kids still in grade school. So expect Metro-powered applications, programmed in C++, C#, HTML, JavaScript, and even VisualBasic. This programming platform, dubbed, Windows Runtime or WindowsRT for short, is object-oriented and just getting started. With enough knowledge of HTML and JavaScript, many people out there with limited knowledge of C++ could create some pretty snazzy object-oriented apps that make use of jQuery and YUI hosted over the web. With the launch of the Windows App Store, don’t be surprised to see some amazing third party apps put long-time industry staples to shame. Once you start looking into the development platform for Metro, then you start to realize that it isn’t just a gimmick for touch screen users. Ostensibly, a great deal of time developing the .NET Framework is about to pay off, in bundles, for everyone who starts using Metro.

Gamers Not Doomed; HID Development Pushed Forward by Windows 8 OS
Gamers likely won’t be left out of the picture. Metro apps are designed to run in full screen, and as all hardcore gamers know, most high intensity games actually throw you into full-screen mode any way. The difference is likely to be negligible, but who wouldn’t like a concise way to manage all entertainment software and keep it running in the background every once in a while? Single player games that enter the market as instant classics like TES: Skyrim could suddenly appear more interactive in the future. Don’t be surprised to see some form of Windows 8 incorporated into the next version of Xbox (Xbox 720?) with DirectX 11 support. It would be nice to see cross-compatibility with the Xbox and Windows PC. Imagine if you could run any console game on a PC and vice versa: Now that kind of unification would prevent a lot of people from buying all those Media Center extenders and going wild on home entertainment systems. Only time will tell how far Microsoft will take us down the rabbit hole. For gamers, that is a great thing.

Multi-monitor and multi-touch support will bring Windows 8 to tablets and phones like never before with certified Metro applications that are programmed for Windows Runtime (WindowsRT). Expect a lot to happen in how we use our desktop and laptop systems. While major advancements in human interface devices are years away, it appears to be one of the major cornerstones of IBM Research and Microsoft Research. Unification across platforms is a recipe for redundancy, but in the case of sensitive data, redundancy is a very good thing. We want to be able to access our office files from home and our home files from the office, without necessarily having to do cartwheels with third party software. The integration of SkyDrive, and ultimately, shell extensions for third-party apps like Dropbox, is a given. Microsoft is never going to take over the cloud-hosted backup market, but they could pull off a pretty neat way of sharing, updating, and collaborating on projects between tablets, phones, desktops, laptops, game consoles, and more. Kinect for Windows is going to be scoffed at in the beginning, but once everyone has such a device linked up to their monitor, moving your hand around to change the active Window on your computer isn’t going to be that bad of a trade-off. In 2009, I gave a speech to a number of people in the public sector about what I saw as the cornerstone for future technology. That presentation included the fact that a device like the SmartBoard would be obsolete within five years’ time, due to the decreasing price of touch screen computers, and the ability for computing devices to detect human movement. While it didn’t go over well with the locals, it is happening, right now. That is something to be excited about. Whatever touch screen advancements Microsoft introduces with Windows 8 will once again push the hardware market to accommodate the software. This means all sorts of new human interface devices are already in development, even from third parties (see: Google Goggles/Google Glasses as one superlative example).

A New World for Software and Hardware Development

It’s not just a Microsoft world: Software companies, game studios, and all sorts of IT companies depend on the reliability and performance of Microsoft products and services, even when their customers aren’t in Microsoft Windows. This happens whenever an e-mail passes through an Exchange server, or a large database is designed for interoperability between a metadata retrieval system and Microsoft Access. Companies that specialize in document management, database administration, and even brand marketing will reap massive benefit from an interface that contains a display mechanism that has the potential to plot and chart raw data into something visually understandable. For example, if I tell you we ordered a hundred pizzas, each consisting of eight slices, and we only have 10 minutes to finish 25 slices, you’re going to wonder how many pizzas we have left. Once data entry software, even stuff that was initially designed with a Mac in mind, is designed for Metro, we’re not just going to be able to see how many pizza slices we have left – we may have the option to order some extras, or watch other people eat the ones left in 10 minutes. It’s that kind of world we’re delving into. We don’t see how great Metro can be: Only because software companies known for their great innovative capabilities like Google and Apple are just getting started on WindowsRT and Metro. This stuff is not going away, and when all the great innovator’s in the world get involved, we’re going to see sparks fly off the third rail.

Negativity Bias
Many people who try the Windows Consumer Preview may be inexperienced with running beta software. And when your whole operating system is a big chunk of bugs, in many cases unbranded, and in some cases feature incomplete, there is going to be a heck of a lot to complain about. I admit that I’m one of them. Take a look at my post about Windows 8 being a platform to sell Windows Live connected services. Well, of course that is what Windows 8 is, but it has the potential to be much more. Studies show us that, on average, people tend to remember a negative outcome 2.5x more than they do a good one. That means you’re 2.5 times more likely to remember when you got a bad haircut then when you got a good one. You’re 2.5 times more likely to dwell on the day you lost your job, than you are to remember the years you spent at the very same job when you contributed an enormous amount of productivity to the company’s bottom line. You’re 2.5 times more likely to remember that turbulence on the airplane. It was unbearable for ten minutes, and now you’re 2.5 times less likely to remember the time you struck up a great conversation with someone on that long flight. You’re 2.5x more likely to remember that woman or man who rejected you on that first date then you are to remember the laughs you shared going into the restaurant. This negativity bias is something we usually learn about in the first or second year of undergraduate psychology, but very few of us even remember or know what it is. In general, your body is trained to remember when bad things happened more than good things, and actually dwell on it. It is truly a response from the Stone Age, and is a very healthy response. It keeps you in balance. But in today’s high tech and demanding world, it can be taken too far.
So yes, we can look at Windows 8 and positively say, “Maybe this thing won’t be so bad. Maybe I can learn it, and enjoy it.”

The True Test: Greater Than The Sum of Its Parts?

Don’t forget that Windows 8 will include a Start on Demand model for all system-related services. For years, I found myself sending Windows XP, Windows Vista, and Windows 7 customers to a web page called Black Viper (BlackViper.com). This site contained detailed guides on how to configure your Windows operating system to use as few services as absolutely necessary. That site became especially popular during the Windows Vista release. Essentially, the site goes through every single service running on your system and will tell you, not only what the default start setting is for it, but how best to optimize it to suit your needs. If you were trying to squeeze every last drop of performance out of the operating system, without much care for its ability to perform certain operations, you could always use BlackViper’s “Service Configurations” lists to decide whether or not it was safe to make sure that something like the Distributed Link Tracking Client service or the World Wide Web Publishing Service could be completely disabled or not. If I haven’t lost you on this one, Microsoft has come up with a novel solution that is sure to improve your experience with Windows 8, and that is by using “Start on Demand”. Under Start on Demand, when Windows 8 needs a service, it launches it – only when. So that, in and of itself, will save resources. And when we look at what is coming up with memory deduplication, we are looking at true advancement in operating system performance at its most basic level.

Yes, the Consumer Preview is flawed, but for all its flaws, let us all think about these things and realize that the best is yet to come for an operating system ahead of its time.




The person below originally posted this question. I too am having the
same issue on my XP machine, where I have several APPS open and a
bunch of explorer windows, and at some point I try to open another
explorer or IE and it wont load or it will load but be blank, until I
close something else (with only 350mb out of 1024 mb used on physical
side!)

I also tried killing every process in taskmanager that I could but
this didnt fix the issue.

I dont know what could be causing the leak, I also watched the sizes
in the meter, but nothing was too obvious (some had used up 54mb of
memory or 2000 GDI's though).

Any quick fixes for this?

Thanks

=====================
From: msnews.microsoft.com )
Subject: Available resources/memory problem in XP?
View: Complete Thread (8 articles)
Original Format
Newsgroups: microsoft.public.windowsxp.general
Date: 2003-07-29 11:39:14 PST

Hi, I have been encountering a problem with Windows XP that looks much
like
the problems that are well documented about Windows 9x, in that after
heavy
use, it appears that I run out of system resources to open up new
windows,etc.

I have done searches, and see that this problem supposedly can't
happen in
Windows
XP because of how it manages the resource pool. I will describe what
is
happening on my machine.

I have a Dell 8250, 2.4Ghz, 80GB HD, 512MB RAM
On the Windows drive (C) I have over 3 GB free space. My virtual
memory
setting is set to allow windows to manage it, and the pagefile is
about
800mb.

I do a LOT of window opening and closing during the day. Opening and
closing 100's of chart windows in IE. At max, I have about 20
windows
open, about 12 in IE. I have an Ameritrade ticker running, giving me
streaming stock quotes. I also tend to have AOL 8.0 open, and
sometimes
Quicken. While this is a lot of activity, I am NOT running anything
requiring very heavy resources like photo editing software for
example.

Eventually whether its in AOL or IE, or anywhere in windows, I get to
the
point where additional windows won't open. When it happens inside
AOL, I
get a message, "The operation cannot be completed due to low memory or
hard
drive space. Please close one or more windows and try again". If I
then
close a window or two, I can proceed for a while, eventually having to
close
more windows. In IE, I'll click on a link to open in new window, and
the
window just refuses to open, unless I close other windows first. In
control
panel, clicking on System refuses to bring up that window. Yesterday
I
opened Quicken and resources were so low that all the Quicken icons
weren't
even able to display.

When I bring up Windows task manager, it shows physical memory 523K,
available 121K, System cache 236K. Kernel memory, total 45K, 33K
paged,
12K nonpaged.

So you see, these symptoms look to me exactly like the Windows 9x
world of
insufficient system resources, a problem which supposedly can't happen
in
XP.

Can anyone explain what is happening here that is keeping me from
opening
new windows?




In this article, we will give an overview of the technical side of Project Detroit, the Microsoft-West Coast Custom Mustang creation. If you're not already familiar with this project, you can find more information here.
Key Design Decisions

It’s important to keep in mind that this car was built for a TV show with a set schedule. As a result, there are a number of unique design decisions that came into play.

Schedule

Working backwards, the reveal for the car was set for Monday November 28, 2011 at the Microsoft Store in Bellevue, Washington. We started the project in early August, which gave us approximately 12 weeks for research, development, vehicle assembly, and testing. This was by far the #1 design decision as any ideas or features for the car had to be implemented by the reveal date.
Off the Shelf Parts

Another key design decision was to, where possible, use off-the-shelf hardware and software in order to allow interested developers to build and reuse some of the subsystems for their own car (at least the ones that don’t require welding). For example, instead of buying pricey custom sized displays for the instrument cluster or passenger display, we used stock Samsung Series 7 Slate PCs and had West Coast Customs do the hard work of building a custom dash to hold the PC.

Hardware and Networking

The car is packed with a variety of computers and networking hardware.

Instrument Cluster Slate – This slate is on the driver's side and manages the instrument cluster application and the On-Board Diagnostic (OBD) connection to read telemetry data from the car.Passenger Slate – This slate, which is built into the passenger's side, runs a custom Windows 8 application (see Passenger slate below).
Laptop 1 – This laptop runs the REST service to control different parts of the car, the Kinect socket service for the front Kinect, and the user message service to display messages on the rear glass while driving.Laptop 2 – This laptop runs the Heads Up Display (HUD) service, the Kinect socket service for the back Kinect, the OBD-II database, and Azure services.Windows Phone – A Nokia Lumia 800 connects via WiFi and a custom Windows Phone 7 application (See Windows Phone application below).Xbox 360 – The Xbox 360 displays on either the passenger HUD or the rear glass display.Networking – A NETGEAR N600/WNDR3700 wireless router provides wired and wireless access for everything in the car, which is used in conjunction with a Verizon USB network card plugged into a Cradle Point MBR900 to provide an always-on 3G/4G LTE internet connection. The slates, laptops, and Xbox 360 are connected via CAT5e cable, while the Windows Phone 7 connects via WiFi.
Note: One of the limitations of the Kinect SDK is that if you have multiple Kinects plugged into one PC, only one of those Kinects can do skeletal tracking at a time (color/depth data works just fine). Because of this, we decided to have a dedicated laptop plugged into the front Kinect and another laptop plugged into the back Kinect in order to allow front and back skeletal tracking at the same time. If we'd not used simultaneous skeletal tracking, we could have combined all of the systems onto a single laptop.
Architecture

Here is a quick overview of the application architecture.

REST Service Layer

The REST Service Layer allowed different systems talk to one another. More importantly, it allowed different services to control hardware they normally wouldn't be able to access.

Thin client approach
The solution we chose was to have all the services that control different parts of the car reside on the laptops and have client applications like the Windows Phone application send REST commands to execute an action so the service layer would execute the request.REST-enable hardware
Controlling hardware should be invisible to the consuming clients. For example, hardware that requires USB communication would be impossible to control with a Windows Phone. The service layer allowed us to control hardware in a way that was invisible to the end user.Helper Libraries
To simplify communication with the service layer, we built a set of helper classes to abstract out repetitive tasks like JSON serialization/deserialization, URI building, etc. For example, to get the list of car horn “ringtones”, the client application can call HornClient.List() to get back a list of available ringtone filenames. To set the car horn, the client calls HornClient.Set(filename), and to play the car horn, it then calls HornClient.Play(filename). The Helper libraries were built to work on Windows 7, Windows 8, and Windows Phone 7.
OBD-II

We have already released an article and library on the OBD-II portion of the car. In short, OBD-II stands for On-Board Diagnostics. Hooking into this port allows one to query for different types of data from the car, which we use to get the current speed, RPMs, fuel level, etc. for display in the Instrument Cluster and other locations. OBD can do far more than this, but it's all we needed for our project. Please see the linked articles for further details on the OBD-II library itself.
For the car, because only one application can open and communicate with a serial port at one time, we created a WCF service that polls the OBD-II data from the car and GPS data from a Microsoft Streets & Trips GPS locator, and returns it to any application that queries the service.
For the OBD library, we used a manual connection to poll different values at different intervals. For values critical to driving the car—like RPM, speed, etc.—we polled for the values as quickly as the car could return them. With other values that weren’t critical to driving the car—like the fuel level, engine coolant temperature, etc.—we polled at a 1-2 second interval. For GPS, we subscribed to the LocationChanged event, which would fire when the GPS values changed.
Rather than creating a new serial port connection for every WCF request for OBD data, we created a singleton service that is instantiated when the service first runs. Accordingly, there is only one object in the WCF service that represents the last OBD and GPS data returned, which is obtained by the continual reading of the latest OBD data using the OBD library as described above. This means that calls to the WCF service ReadMeasurement method didn’t actually compute anything, but instead serialized the last saved data and returned it via the WCF service.
Since WCF supports multiple protocols, we implemented HTTP and TCP and ensured that any WCF service options we chose worked on Windows Phone, which, for example, can only use basic HTTP bindings.
To enable the ability to change the programming model later and to simplify the polling of the service, we built a helper library for Windows and Windows Phone that abstracts all the WCF calls.
The code below creates a new ObdService class and signs up for an event when the measurement has changed. The Start method does a couple of things: it lets you set the interval that you want to poll the ObdService, in this case every second (while the instrument cluster needs fast polling, the database logger can poll once a second). It also determines what IP address the service is hosted at (localhost), the protocol (HTTP or TCP), and whether to send “demo mode” data. Since one of the main ways the car is showcased is when it’s stopped on display, “demo mode” sends fake data, instead of always returning 0's for MPH, RPM, etc., so people can see what the instrument cluster would look like in action.

_service = new ObdService(); _service.ObdMeasurementChanged += service_ObdMeasurementChanged; _service.Start(new TimeSpan(0, 0, 0, 0, 1000), localhost, Protocol.Http, false); void service_ObdMeasurementChanged(object sender, ObdMeasurementChangedEventArgs e) { Debug.Writeline("MPH=” + e.Measurement.MilesPerHour); } OBD-II Database & Azure Services

To record and capture the car telemetry data like MPH, RPM, engine load, and throttle (accelerator) position, as well as location data (latitude, longitude, altitude, and course), we used a SQL Server Express database with a simple, flat Entity Framework model, shown below. The primary key, the ObdMeasurementID is a GUID that is returned via the ObdService. Just like above, the database logger subscribes to the ObdMeasurementChanged event and receives a new reading at the time interval set in the Start() method.

The Windows Azure data model uses Azure Table Services instead of SQL Server. The data mapping is essentially the same since both have a flat schema.
For Azure Table Storage, in addition to the schema above, you also need a partition key and a row key. For the partition key, we used a custom TripID (GUID) to represent a Trip. When the car is turned on/off a new TripID is created. That way we could group all measurements for that particular trip and do calculations based on that trip, like the average miles per gallon, distance traveled, fastest speed, etc. For the row key, we used a DateTimeOffset and a custom extension method, ToEndOfDays() that provides a unique numerical string (since Azure's row key is a string type) that subtracts the time from the DateTime.Max value. The result is that the earlier a DateTime value, the larger the number.
Example:
Time=5/11/2012 9:14:09 AM, EndOfDays=2520655479509478223 //larger
Time=5/11/2012 9:14:11 AM, EndOfDays=2520655479482804811 //smaller
Since they are ordered in reverse order, with the most recent date/time being the first row, we can write an efficient query to pull just the first row to get the current latitude/longitude without needing to scan the entire table for the last measurment.

public override string RowKey { get { return new DateTimeOffset(TimeStamp).ToEndOfDays(); } set { //do nothing } } public static class DateTimeExtensions { public static string ToEndOfDays(this DateTimeOffset source) { TimeSpan timeUntilTheEnd = DateTimeOffset.MaxValue.Subtract(source); return timeUntilTheEnd.Ticks.ToString(); } public static DateTimeOffset FromEndOfDays(this String daysToEnd) { TimeSpan timeFromTheEnd = newTimeSpan(Int64.Parse(daysToEnd)); DateTimeOffset source = DateTimeOffset.MaxValue.Date.Subtract(timeFromTheEnd); return source; } }

To upload data to Azure, we used a timer-based background uploader that would check to see if there was an internet connection, and then filter and upload all of the local SQL Express rows that had not been submitted to Azure using the Submitted boolean database field. On the Azure side, we used an ASP.NET MVC controller to submit data. The controller deserializes the data into a List type, it adds the data to a blob, and adds the blob to a queue as shown below.
A worker role (or many) will then read items off the queue and the new OBD measurement rows are placed into Azure Table Storage.

public ActionResult PostData() { try { StreamReader incomingData = new StreamReader(HttpContext.Request.InputStream); string data = incomingData.ReadToEnd(); JavaScriptSerializer oSerializer = new JavaScriptSerializer(); List measurements; measurements = oSerializer.Deserialize(data, typeof(List)) as List; if (measurements != null) { CloudBlob blob = _blob.UploadStringToIncoming(data); _queue.PushMessageToPostQueue(blob.Uri.ToString()); return new HttpStatusCodeResult(200); } ... } }

Instrument Cluster

Much of this is also covered in our previously released OBD-II library where the instrument cluster application is included as a sample. This is a WPF application that runs on a Windows 7 slate. It contains three different skins designed by 352 Media—a 2012 Mustang dashboard, a 1967 Mustang dashboard, and a Metro-style dashboard—each of which can be "swiped" through. This application queries the OBD-II WCF service described above as quickly as it can to retrieve speed, RPM, fuel level, and other data for display to the driver. The gauges are updated in real-time just as a real dashboard instrument cluster would behave.

HUD

The HUD (or Heads Up Display) application runs on one of the two Windows 7 computers in the car. This is a full-screen application that is output via a projector to a series of mirrors and a projection screen. This is then reflected onto the front glass of the windshield of the car. To install these, we altered the physical car's body and created brackets to mount mirrors and the projectors. In the picture on the left, you can see the dashboard's structural member pivoted outward. You can see the 12" section we removed and added in the base plate to allow light to be reflected through to the windshield. Bill Steele helped design and implement the physical HUD aspect into the car.

The HUD application has several different modes. The mode is selected from the Windows Phone application.

POI / Mapping – This uses Bing Maps services. The phone or Windows 8 passenger application can choose one of a select group of categories (Eat, Entertain, Shop, Gas). Once selected, the REST service layer is contacted and the current choice is persisted. The HUD is constantly polling the service to know what the current category is, and when it changes, the HUD switches to an overhead map display with the closest locations of that category displayed, along with your always updated current GPS position and direction. The list of closest items in the category is requested every few seconds from the Bing Maps API and the map is updated appropriately.
Car telemetry - In the car telemetry mode, the OBD data from the WCF service described above is queried and displayed on the screen. This can be though of as an overall car "status" display with the speed, RPMs, real-time MPG, time, and weather information.Weather – We use the World Weather Online API to get weather data for display on the HUD. This API allows queries for weather based on a latitude and longitude, which we have at all times. A quick call to the service gives us the current temperature and a general weather forecast, which we display as an icon next to the temperature in the lower-left portion of the screen.
Kinect – Using our Kinect Service, with the standard WPF client code, we can display the rear camera on the HUD to help the driver when backing up. See the Kinect Service project for more information on how this works and to use the service in an application of your own.
Windows Phone Application

One of the main ways to control the vehicle is through the Windows Phone application.

The first pivot of the app allows the user to lock, unlock, start the car, and set off the alarm. This is done through the Viper product from Directed Electronics.

The second pivot contains the remaining ways that a user can interact with the car.

Kinect – This uses the Kinect service much in the way the HUD does. It can display both the front and rear cameras as well as allow the user to listen to an audio clip and send it up to the car while applying a voice changing effect.
Voice Effect – When the Talk button is pressed, the user can record their voice via the microphone. When released, the audio data is packaged in a simple WAV file and uploaded to the REST service. The user can select from several voice effects, such as Chipmunk and Deep. On the service side, that WAV file is modified with the selected effect and then played through the PA system. The code in this section of the app is very similar to the Coding4Fun Skype Voice Changer. We use NAudio and several pre-made effects to process the WAV file for play.Lighting – This controls the external lighting for the car. The user can select a zone, an animation, and a color to apply. Once selected, this is communicated through the REST service to the lighting controller.
Messaging – This presents a list of known pictures and videos for the user. The selection is sent to the car through the REST service and displayed on the projector that is pointed at the rear window, allowing following drivers to see the image, video, or message.Point Of Interest – As described earlier, this is the way the user can turn on the Point of Interest map on the HUD. Selecting one of the four items sends the selection to the REST service where it is persisted. The polling HUD will know when the selection is changed and display the map interface as shown above.Telemetry – This is a replica of the instrument cluster that runs on the Windows 7 slate. OBD data is queried via the WCF service, just like the slate, and displayed on the gauges, just like the slate.
Projection Screen – This will raise and lower the projection screen on the rear of the car.Horn – This displays a list of known horn sound effects that live on the REST service layer. Selecting any of the items will send a command through the REST to play that sound file on the external sound system of the car. This selected audio file would play when the horn was pressed in the car.Settings – Internal settings for setting up hardware and software for the car.
Passenger Application

The passenger interface runs on a Samsung Series 7 slate running the Windows 8 Consumer Preview. This interface has a subset of the functionality provided by the Windows Phone application, but communicates through the same REST service. From this interface, the passenger can set the car horn sound effect, view the front and back Kinect cameras, select a Point of Interest category to be displayed on the HUD, and select the image, video or message that will be displayed on the rear window.

External Car Lighting

The external lighting system was controlled by a web server running on a Netduino Plus using a Sparkfun protoshield board to simplify wiring, and allow for another shield to be used. The actual lights were Digital Addressable RGB LED w/ PWM. We'll also have a more in-depth article on this system on Coding4Fun shortly.
The car is broken down into different zones—grill, wheels, vents, etc. It also has a bunch of pre-defined procedural animation patterns that have a few adjustable parameters that allow for things like a snake effect, a sensor sweep, or even a police pattern. Each zone has its own thread which provides the ability to have multiple animation patterns going at the same time. When a command is received, the color, pattern, zone, and other data is then processed.
Here is a basic animation loop pattern.

private static void RandomAnimationWorker() { var leds = GetLedsToIlluminate(); var dataCopy = _data; var r = new Random(); while (IsThreadSignaledToBeAlive(dataCopy.LightingZone)) { for (var i = 0; i < leds.Length; i++) SetLed(leds[i], r.Next(255), r.Next(255), r.Next(255)); LedRefresh(); Thread.Sleep(dataCopy.TickDuration); } } Rear Projection Window

The rear projection system consists of two 4” linear actuators, a linear actual controller, the NETMF web server from above, a Seeed Studio Relay Shield, the back glass of a 1967 Ford Mustang, some rear projection film, a low profile yet insanely bright projector that accepts serial port commands, and a standard USB to serial adapter.
The REST service layer toggles the input of the projector based on the selected state. This would allow us to go from the HDMI output of an Xbox 360 to the VGA output of the laptop. While doing this, the REST layer sends a command to the NETMF web server to either raise or lower the actuators.
Here is the code for the NETMF to control the raising and lowering the glass:

public static class Relay { // code for for Electronic Brick Relay Shield static readonly OutputPort RaisePort = new OutputPort(Pins.GPIO_PIN_D5, false); static readonly OutputPort LowerPort = new OutputPort(Pins.GPIO_PIN_D4, false); const int OpenCloseDelay = 1000; public static bool Raise() { return ExecuteRelay(RaisePort); } public static bool Lower() { return ExecuteRelay(LowerPort); } private static bool ExecuteRelay(OutputPort port) { port.Write(true); Thread.Sleep(OpenCloseDelay); port.Write(false); return true; } } Messaging System

This is a WPF application that leveraged the file system on the computer to communicate between the REST service layer and itself. Visually, it shows the message/image/video in the rear view mirror but it actually does two other tasks, it operates our car horn system and plays the recorded audio output from the phone.

Displaying Messages
To display images, we poll the REST service every second for an update. Depending on the return type, we either display a TextBlock element or a MediaElement.Detecting and Playing Car Horn
When someone presses the horn in the car, it is detected by a Phidget 8/8/8 wired into a Digital Input. In-between the car horn and the Phidget, there is a relay as well. This isolates the voltage coming from the horn and solves a grounding issue. We then feed back two wires from that relay and put one into the ground and the other into one of the digital inputs. In the application, we listen to the InputChange event on the Phidget and play / stop the audio based on the state.Detecting new recorded audio from the phone and car horn changes
When someone talks into the phone or selects a new car horn, the REST service layer places that audio file into a predetermined directory. The Messaging service then uses a FileSystemWatcher to detect when this file is added. The difference between the car horn detection and recorded audio is the recorded audio will play once it is done writing to the file system.
External PA System

To interact with people, we installed an external audio PA or Public Address system. This system is hooked into the laptop that is connected to the car horn, and can play audio data from the phone. Having a PA system that is as simple as an audio jack that plugs into a PC enabled us to have different ringtones for the car horn and to talk through the car using Windows Phone.
Conclusion

After months of planning and building, the Project Detroit car was shown to the world on an episode of Inside West Coast Customs. Though it was a ton of work, the end product is something we are all proud of. We hope that this project inspires other developers to think outside the box and realize what can be done with some off-the-shelf hardware, software, and passion.

More...




When web development reached critical mass in the early-mid 2000's, there was a lot of discussion about what it all meant for native development and apps that are optimized for devices, but developers' penchant for exploiting what devices can do has persisted through all of that, and it keeps getting more interesting with every passing year: devices are smarter, faster, and more packed with features than ever before. Gone are the days when developers had to wait patiently for hardware to catch up to software. Now it's the other way around, and it's great for developers, who just can't seem to get enough of cameras, accelerometers, location sensors, touch screens, gesture inputs, voice inputs, and a bevy of other previously-unheard-of coolness. Even Steve Jobs got an education in this undercurrent as Apple brought the iPhone to market ... if you've read Walter Issacson's book, you know the story: Jobs was of course maniacal about user experience, and was adamantly opposed to the idea of third-party developers messing things up with native apps. Subsequently, the iPhone comes to market with a lot of fanfare about Safari and web mobility, but once developers understood what the device could do, it began a mini-standoff that resulted in a November 2007 capitulation blog post, promising developers an SDK for iPhone and iPod Touch. The rest, of course, is history.
Since then, we've seen the term "device" take on all sorts of different meanings ... most people think of it as a smartphone, or a PC, or a tablet, or a game console to name a few form factors, not to mention the embedded world of ATMs, traffic lights, and sensor networks. But anything with a microprocessor can run software, and as things get smaller and more modular, the sky's the limit in terms of developer creativity and imagination, which brings us to today's post. Jeff Sandquist and the Channel 9 team have been busy with a project that we've talked about since September, and for lots of folks, it will reshape how you think about what a device is, where it goes, how it gets integrated into things you use today, and (in this case) how amazing it can be when it's done right .
Thanks – Tim

Those of you who attended or watched BUILD last September may recall a project that Dan, Clint and I have been working on with the guys at West Coast Customs. Against the odds, and perhaps against our better judgment in terms of sleeping hours, we set out to see what was possible when you combine some of the world's most innovative technology, the latest in cloud connectivity and raw American auto muscle. What would it look like if you could take Windows, Windows Phone, Windows Azure, Xbox, Kinect, Bing - you name it - and put it all together into one iconic car? Well, we're excited to announce that the experiment is complete and "Project Detroit" will be unveiled to the world this Sunday, March 25 at 9:00 p.m. PT/ET on Discovery's Velocity Network.
To say that this has been a labor of love is an understatement. To do this right we knew that we needed to work with the best and the only option was West Coast Customs. Along with Ryan Friedlinghaus and his crew, we started with a 2012 Mustang, retrofitted it with Dynacorn's 1967 Mustang fastback replica body. From there, we piled on Microsoft's latest technologies, many of which have never been used in automotive applications. We created heads-up displays with augmented reality in the windshield. We put a Kinect on the front and a Kinect in the rear for skeletal tracking and live streaming video feeds. We added swipe-able touchscreen dashboard displays and then we tied it all together with Windows Azure in the cloud and Windows Phone applications to control it all. And that's just the beginning.

(want a really big version of this picture? It makes a great desktop background )
To really understand how it all came together, you have to watch the episode, but to give you just a taste, here are some of the things you can expect to see:

Windows Phone Integration: Although the Mustang's design makes the car easy to spot, you can keep tabs on the car's location even when it is out of sight. Locate, unlock, and start the car all from the Viper SmartStart app for Windows Phone.
Built-in WIFI: To help ensure the Mustang is always online and connected to the cloud, the vehicle has a built-in 4G wireless network that supports multiple devices.Digital Instrument Cluster: Swipe the touch-screen instrument cluster and toggle between different dashboard skins including a 1967 Mustang, a 2012 Mustang and a Windows 8 Metro design style version.
Heads Up Display: Similar to what's found in fighter jets, the windshield contains a driver side and passenger side heads-up display (HUD) highlighting telemetry and Bing Maps information directly on the windshield. View nearby restaurants, shopping centers and gas stations all without taking an eye off the road. A passenger can play Xbox on his/her side of the windshield without distracting the driver.Ford SYNC: Up-to-the-minute traffic information, hands-free communication and even voice control applications are part of the standard Ford SYNC system that is available in Project Detroit.Entertainment System: The entertainment system comes with an Xbox 360 and a Kinect. When parked, the rear windshield can actuate up to serve as a projector screen for playing movies or video games from behind the car.External Audio System: The audio system acts as a public address system so you can speak into your phone and have the audio played through the car's external speakers. Using this system, the car also has customizable car horn "ringtones" that enable you to change what sound plays when the horn is honked.Kinect Integration: Front and rear Kinect cameras provide a live video feed of surrounding pedestrians and objects. You can even watch and listen to the live audio and video stream from the Kinects remotely using a Windows Phone and send a message (see below) to the external audio system like "Hey skateboarders: stay away from my car."
Cloud Powered: Using the built-in wireless network, the Mustang is able to communicate with cloud services including Bing Maps, Viper's Smart Start system as well as store real-time telemetry data such as speed, location, RPM and fuel level in Windows Azure.Customizable Rear Windshield: While driving, the rear windshield can serve as a customizable display system that can play video, show images and display custom messages, like "Stop tailgating me please" or something more, umm, colorful.
As a community of developers you might be saying, "that's great, but what does this mean for me?" We started this project because we knew it would be a challenging and fun way to show what all of these technologies can do in an environment like a car. So now we not only have an incredible Mustang "device" to showcase what we have done, we will be making source code for the major components of the project available on CodePlex in the coming weeks.
We want you to think BIG about the types of scenarios you can create. Think bigger – beyond the devices we hold in our hands, those that sit on our desks and the things that mount to our walls. We are so incredibly proud of this car, but we're even more proud of what it represents – ingenuity, creativity and some great demonstrations of Microsoft technologies in cool applied scenarios. Make sure you tune in Sunday, but in the meantime check out some photos and let us know what you think. As you know, Channel 9 is all about community and Project Detroit is only as successful as you make it. Get excited, download the code and create your own device powered by hardware and software.
– Jeff

More...




Not sure if it's in the right spot, or if it's been done.

Internet Explorer 9 Preview

At the Professional Developers Conference (PDC) 2009 day two keynote (see my PDC coverage), [COLOR=blue ! important][COLOR=blue ! important]Microsoft[/COLOR][/COLOR] president Steven Sinofsky showed off a very, very early version of Internet Explorer (IE) 9, the next major version of Microsoft's now-venerable web browser. This was an unexpected development, given that Internet Explorer 8 (see my review) shipped earlier this year and was just included with Windows 7 (see my review), which shipped last month. But Microsoft clearly wanted to demonstrate that it would continue advancing IE at a rapid pace, meeting criticisms of the current product and--the real surprise--delivering on some unexpected functionality.
What we don't know about IE 9 is a much broader discussion than that about what we do know. It's early yet, so that's OK, but I do want to set some expectations: The very early IE 9 preview build we saw this week at PDC did not contain any hint at all about the future user interface or other functional aspects of the browser. In fact, the build used in the keynote, and the one I saw separately in a meeting, lacked any kind of user interface at all. It's just a bare window frame that's designed to let the rendering engine do its thing and show off the few bits of functionality Microsoft is now publicly committing to.
"This is just a preview, an early look at where we are with IE 9 for developers," IE general manager Dean Hachamovitch told me during a briefing. "We're focusing on three very specific areas: Performance, interoperability standards, and hardware acceleration."

Anyone hoping that Microsoft would do something radical like adopt a competing web rendering engine (like WebKit) or even more radical, like dropping IE all together (and yes, those people are out there) will likely be confused by this early focus. And judging from what I've seen from people's reactions to the keynote demonstration online, there's further confusion about what was announced. I'd like to take this time to try and communicate what's really happening.
Performance

With IE 8, Microsoft argued that browser performance wasn't something that could be easily measured with benchmarks because overall performance is more holistic. The company's success at communicating that message is debatable, and while Microsoft's own published performance results were pretty favorable, IE 8 tends to get pummeled in independent comparisons with Mozilla [COLOR=blue ! important][COLOR=blue ! important]Firefox[/COLOR][/COLOR] and Google Chrome.
For IE 9, Microsoft appears to be addressing IE performance issues head-on. The company explained this week that it examined how similar sites actually tax browsers in different ways--some are script-heavy, for example, while others are not--and its architecting IE 9 to handle these different needs properly.
In my briefing with Hachamovitch this week, he told me that scripting performance was typically an area in which competing browsers appeared to work more quickly in benchmark tests. So they looked into that and have already made big improvements in very early alpha builds when compared to IE 8.
"We're looking at the performance characteristics of all the browser sub-systems as real-world sites use them," Hachamovitch wrote in a blog post this week. "Our goal is to deliver better performance across the board for real-world sites, not just benchmarks."
To me, performance is straightforward: It either performs well or it doesn't. There's no way to say whether IE 9 will be as faster, or even faster than, competing browsers. But let's just say that Microsoft's decision to focus on this is wise.
Interoperability standards

Microsoft has taken a lot of flak for its lackluster adherence to web standards, but the company appears ready to reverse that reputation in IE 9. "The focus here is on the stuff that developers use to build the web," Hachamovitch told me. "We're lining up a bunch of platform work. Our [web standards test] scores will go up."
More specifically, this means adhering to the latest web standards, such as HTML 5 and CSS3 Selectors. At the keynote, there was a demo with CSS-based rounded corners in an element border. That's very specific, of course, but it's something that IE 8 doesn't do properly today. The current, very early IE 9 version correctly utilizes 41 of the 43 [COLOR=blue ! important][COLOR=blue ! important]CSS[/COLOR][/COLOR] Selectors and scores 574 out of 578 in its CSS3 Selectors test, a big improvement over IE8, which scored 330 out of 578.
Right now, what we have is a promise here. Microsoft also met very specific standards needs in IE 8, but it failed to deliver on far more. Hopefully as IE 9 evolves over the next year, we'll discover that the browser is not just another evolutionary step towards standards compliance but is instead the version that puts IE over the top. Otherwise, I expect an exodus of users to more compatible browsers.
Hardware acceleration

Working hand-in-hand with Microsoft's performance aspirations for IE 9 is a surprising browser capability: GPU-backed [COLOR=blue ! important][COLOR=blue ! important]hardware [COLOR=blue ! important]acceleration[/COLOR][/COLOR][/COLOR]. "This is the coolest but least understood aspect of IE 9 we announced," Hachamovitch said. "We've moved the IE rendering engine from GDI to DirectX."
There are two benefits to this approach. First, the web doesn't have to be rewritten to take advantage of this functionality, as it's just provided by using IE 9. And second, web developers can now seamlessly take advantage of all of the benefits associated with PC hardware advancements that have happened over the past few years. The GPU is no longer just used for games, 3D user interfaces, and other graphics-intensive applications.
The confusion here relates to expectations about hardware-accelerated graphics. When some people hear such a thing, they automatically think about gaming. But IE 9's hardware acceleration has nothing to do with gaming. Instead, it's all about performance and fidelity. The browser just performs better, of course. But it also makes everything--especially text--look better.
The performance stuff is pretty obvious: Navigating around a Bing map, for example, you can readily see that IE 9 renders far more quickly--and with much less [COLOR=blue ! important][COLOR=blue ! important]CPU[/COLOR][/COLOR] overhead--when GPU acceleration is enabled. But the overall fidelity improvements were, to me at least, unexpected. Text rendered through the GPU with Direct2D exhibits none of the jaggies you see with standard, GDI-rendered text. And the effect is especially impressive when you zoom in and out of textual displays. It's like the difference between ClearType- and non-ClearType-based text, except this time, sub-pixel rendering is just the starting point.
"Direct2D finds more pixels on the edges and smoothes out jaggies," Hachamovitch told me. "It provides smoother animations as well. The performance is amazing. Web sites get better in IE on Windows."
Some have also confused this functionality with WebGL or other standards-based rendering schemes. These people are missing the point, Hachamovitch said. "It's just a subsystem. This means that whatever others do on top of the browser will have better performance and clarity as well."
Hachamovitch also noted that other browser makers have only done some minimal, edgy work around hardware acceleration. The reason is simple: Its hard work. "Games utilize this technology, of course, but let's face it, games don't print. We have to make sure IE works as before with hardware accelerated rendering. You want your boarding pass to just print. You want ActiveX controls and Flash video to just work. That's what we're working on."
Final thoughts

Having spent a grand total of about 60 second tooling around with a very early IE 9 build I'm obviously not qualified to offer any sweeping statements about how the finished product will work. But I'm heartened by Microsoft decision to move quickly in improving IE and release a major out-of-band version of the product that is not tied to any Windows version. My expectation--which is based purely on speculation--is that Microsoft will deliver a beta version of IE9 the MIX conference in March and then deliver the final version sometime around October 2010, which is the same time I expect the company to ship Windows 7 Service Pack 1 (SP1). (I suppose there is a small chance that IE 9 could be shipped as part of SP1, but that seems unlikely to me.) In any event, we should know a lot more about IE 9 in March.
--Paul Thurrott
November 18, 2009

http://www.winsupersite.com/live/ie9_preview.asp

Enjoy. VI :-)




BSOD error message

0x0000007f (ox0000000000000008, 0x0000000080031, ox00000000000006f8, oxfffff800028dabd0)

Just curious what the stuff in the parenthesis means? i believe ox7f is hardware/driver issue, but i'm not a doctor. i don't know.

This has been happening it seems almost randomly. I have been working my computer pretty hard but i expect the best. I was pondering replacing some parts because I realize machines get old. shouldn't be, but the first thing i'm addressing is heat. new computer case in the mail for more fan room, and the first building block when i build a new system

OS Name Microsoft Windows 7 Home Premium
Version 6.1.7601 Service Pack 1 Build 7601
Other OS Description Not Available
OS Manufacturer Microsoft Corporation
System Name TIMMY-PC
System Manufacturer BIOSTAR Group
System Model TA790GX 128M
System Type x64-based PC
Processor AMD Phenom(tm) II X4 940 Processor, 3000 Mhz, 4 Core(s), 4 Logical Processor(s)
BIOS Version/Date American Megatrends Inc. 080014, 1/13/2009
SMBIOS Version 2.5
Windows Directory C:Windows
System Directory C:Windowssystem32
Boot Device DeviceHarddiskVolume2
Locale United States
Hardware Abstraction Layer Version = "6.1.7601.17514"
User Name Timmy-PCTimmy
Time Zone US Mountain Standard Time
Installed Physical Memory (RAM) 6.00 GB
Total Physical Memory 6.00 GB
Available Physical Memory 4.51 GB
Total Virtual Memory 12.0 GB
Available Virtual Memory 10.3 GB
Page File Space 6.00 GB
Page File C:pagefile.sys

Just in case you need that.

Thanks for your help! Attached Files W7F_13-04-2013.rar (287.1 KB, 21 views) Share Share this post on Digg Del.icio.us Technorati Twitter
Reply With Quote .postbitlegacy .postfoot .textcontrols a.post_info_button, .postbit .postfoot .textcontrols a.post_info_button { background: url(/images/post_infobox.png) no-repeat transparent left; padding-left: 20px; } .postbitlegacy .postfoot .textcontrols a.post_info_button:hover, .postbit .postfoot .textcontrols a.post_info_button:hover { background: url(/images/post_infobox-hover.png) no-repeat transparent left;   JavaScript must be enabled 04-14-2013 #2 usasma Microsoft Community Contributor This member is a certified Microsoft Community Contributor at Windows 7 Forums. Click here for more information from Microsoft. Microsoft MVP - Windows Expert
- Consumer  
Join Date Mar 2010 Posts 1,333 Re: BSOD - w7f and error codes attached Info on the STOP 0x7F error: BSOD Index
Please note the "Usual Causes" section up near the top of that section
Also, you'll have to scroll down to see what the stuff in the parentheses means:
Code: WinDbg Help File Entry: The UNEXPECTED_KERNEL_MODE_TRAP bug check has a value of 0x0000007F. This bug check indicates that the Intel CPU generated a trap and the kernel failed to catch this trap. This trap could be a bound trap (a trap the kernel is not permitted to catch) or a double fault (a fault that occurred while processing an earlier fault, which always results in a system failure).Parameters The first parameter that appears on the blue screen specifies the trap number. The most common trap codes include the following: 0x00000000, or Divide by Zero Error, indicates that a DIV instruction is executed and the divisor is zero. Memory corruption, other hardware problems, or software failures can cause this error.0x00000004, or Overflow, occurs when the processor executes a call to an interrupt handler when the overflow (OF) flag is set.0x00000005, or Bounds Check Fault, indicates that the processor, while executing a BOUND instruction, finds that the operand exceeds the specified limits. A BOUND instruction ensures that a signed array index is within a certain range.0x00000006, or Invalid Opcode, indicates that the processor tries to execute an invalid instruction. This error typically occurs when the instruction pointer has become corrupted and is pointing to the wrong location. The most common cause of this error is hardware memory corruption.0x00000008, or Double Fault, indicates that an exception occurs during a call to the handler for a prior exception. Typically, the two exceptions are handled serially. However, there are several exceptions that cannot be handled serially, and in this situation the processor signals a double fault. There are two common causes of a double fault: A kernel stack overflow. This overflow occurs when a guard page is hit, and the kernel tries to push a trap frame. Because there is no stack left, a stack overflow results, causing the double fault. If you think this overview has occurred, use !thread to determine the stack limits, and then use kb (Display Stack Backtrace) with a large parameter (for example, kb 100) to display the full stack.A hardware problem. The less-common trap codes include the following: 0x00000001 — A system-debugger call0x00000003 — A debugger breakpoint0x00000007 — A hardware coprocessor instruction with no coprocessor present0x0000000A — A corrupted Task State Segment0x0000000B — An access to a memory segment that was not present0x0000000C — An access to memory beyond the limits of a stack0x0000000D — An exception not covered by some other exception; a protection fault that pertains to access violations for applications For other trap numbers, see an Intel architecture manual.Cause Bug check 0x7F typically occurs after you install a faulty or mismatched hardware (especially memory) or if installed hardware fails. A double fault can occur when the kernel stack overflows. This overflow occurs if multiple drivers are attached to the same stack. For example, if two file system filter drivers are attached to the same stack and then the file system recurses back in, the stack overflows.Resolving the Problem Debugging: Always begin with the !analyze extension. If this extension is not sufficient, use the kv (Display Stack Backtrace) debugger command. If kv shows a taskGate, use the .tss (Display Task State Segment) command on the part before the colon.If kv shows a trap frame, use the .trap (Display Trap Frame) command to format the frame.Otherwise, use the .trap (Display Trap Frame) command on the appropriate frame. (On x86-based platforms, this frame is associated with the procedure NT!KiTrap.) After using one of these commands, use kv again to display the new stack. Troubleshooting: If you recently added hardware to the computer, remove it to see if the error recurs. If existing hardware has failed, remove or replace the faulty component. Run hardware diagnostics that the system manufacturer supplies to determine which hardware component failed. The memory scanner is especially important. Faulty or mismatched memory can cause this bug check. For more informaiton about these procedures, see the owner's manual for your computer. Check that all adapter cards in the computer are properly seated. Use an ink eraser or an electrical contact treatment, available at electronics supply stores, to ensure adapter card contacts are clean. If the error appears on a newly installed system, check the availability of updates for the BIOS, the SCSI controller, or network cards. These kind of updates are typically available on the Web site or BBS of the hardware manufacturer. Confirm that all hard disk drives, hard disk controllers, and SCSI adapters are listed in the Microsoft Windows Marketplace Tested Products List. If the error occurred after the installation of a new or updated device driver, you should remove or replace the driver. If, under this circumstance, the error occurs during the startup sequence and the system partition is formatted with NTFS, you might be able to use Safe Mode to rename or delete the faulty driver. If the driver is used as part of the system startup process in Safe Mode, you have to start the computer by using the Recovery Console in order to access the file. Also restart your computer, and then press F8 at the character-based menu that displays the operating system choices. At the Advanced Options menu, select the Last Known Good Configuration option. This option is most effective when you add only one driver or service at a time. Overclocking (setting the CPU to run at speeds above the rated specification) can cause this error. If you have overclocked the computer that is experiencing the error, return the CPU to the default clock speed setting. Check the System Log in Event Viewer for additional error messages that might help identify the device or driver that is causing the error. You can also disable memory caching of the BIOS to try to resolve the problem. If you encountered this error while upgrading to a new version of the Windows operating system, the error might be caused by a device driver, a system service, a virus scanner, or a backup tool that is incompatible with the new version. If possible, remove all third-party device drivers and system services and disable any virus scanners before you upgrade. Contact the software manufacturer to obtain updates of these tools. Also make sure that you have installed the latest Windows Service Pack. Finally, if all the above steps do not resolve the error, take the system motherboard to a repair facility for diagnostic testing. A crack, a scratched trace, or a defective component on the motherboard can also cause this error. WinDbg Output Example: UNEXPECTED_KERNEL_MODE_TRAP (7f) This means a trap occurred in kernel mode, and it's a trap of a kind that the kernel isn't allowed to have/catch (bound trap) or that is always instant death (double fault). The first number in the bugcheck params is the number of the trap (8 = double fault, etc) Consult an Intel x86 family manual to learn more about what these traps are. Here is a *portion* of those codes: If kv shows a taskGate use .tss on the part before the colon, then kv. Else if kv shows a trapframe use .trap on that value Else .trap on the appropriate frame will show where the trap was taken (on x86, this will be the ebp that goes with the procedure KiTrap) Endif kb will then show the corrected stack. Arguments: Arg1: 0000000000000008, EXCEPTION_DOUBLE_FAULT Arg2: 0000000080050031 Arg3: 00000000000006f8 Arg4: fffff80002af243d There are no memory dumps included in the uploaded files, please zip up the contents of the C:WindowsMinidump folder and upload it with your next post. Please check this page to ensure the system is set to save minidumps: Set MiniDump Finally, don't use disk cleaning programs (such as CCleaner) while we're troubleshooting (they delete the files that we need).

Only 118 Windows Updates installed. Most systems have 150 or more. Please visit Windows Update and get ALL available updates (it may take several trips to get them all).

As there's no evidence of BSOD's in the WER section of MSINFO32, I'd have to suspect that this might be a hardware problem. Please start with these free hardware diagnostics: Hardware Diagnostics

Good luck!




When you have a Ferrari you might want to test drive it on a circuit, where there are none of the limitations of a town street. Well, when you have Internet Explorer 9 Beta you need a “circuit” on which to test it, something more than just your average Internet websites, applications and services.

Somewhere where you could really go “pedal to the metal” on IE9. Where the browser will show just what it is capable of.

Fortunately enough, a wide range of such sites designed for Internet Explorer 9 already exist, with a plethora of Microsoft partners introducing new IE9-related web projects with the launch of the Beta on September 15th, 2010.

The Beauty of the Web launch event for IE9 Beta earlier this week was a real show of force from Microsoft partners.

At the bottom of the screen I included a range of photos from the partner section of the event. Below you will also be able to find a list of links with some amazing IE9 websites from the software giant’s Beauty of the Web event.

“Richer Web experiences can blend into the consumer's desktop experience comfortably and consistently. So, today we have an A to Z, literally, of Web sites, partners, live with Web experiences that take advantage of IE9, even more than the A to Z of the Web,” revealed Dean Hachamovitch, Corporate Vice President, Internet Explorer, Microsoft earlier this week.

Users will be able to easily notice that IE9 can enhance the experiences associated with social networks such as Facebook, Twitter, and Netlog.

But there is additional bleeding edge content from various web design firms, and new perspectives on entertainment and news from BBC, CNN, Hulu, Vimeo, and Daily Motion.

Over 50 projects were on display in total, many of them built in very short time, just a matter of weeks, in preparation for the event.

But all of them extremely impressive, and all of them already live on the web, and available to testers around the world.

It’s important to underline that although the Redmond company catalyzed the creation of the projects, it made sure to have them work not only across Internet Explorer 9, but also across rival browsers.

Superb projects such as Endless Mural will function in IE9, as well as any other browser that supports HTML5.

All the websites featured at the Beauty of the web event in fact, are set up to take advantage of modern web standards, such as HTML5, CSS3, SVG, etc.

And usage is in no way restricted to IE9, which is a brilliant move from Microsoft, showing its commitment to users, developers and partners alike, and a strong focus on driving the web forward by making the same markup vision a reality.

“Today partners around the Internet join us in releasing new experiences for the Web. Over 70 top sites and brands that reach over two-thirds of active Internet users. Together that's over 800 million visitors whose Web experience just got better on Windows with IE9,” Hachamovitch added on September 15th.

Here is the list of IE9 websites, with short descriptions from Microsoft:

“1. Amazon - Amazon.com, Inc. seeks to be Earth's most customer-centric company.

By integrating the pinning and Jump List features enabled by Internet Explorer 9, Amazon continues to enhance the on-line shopping experience for customers by giving them easy access to Amazon.com favorites such as Gold Box Deals and Best Sellers as well as enabling customers to manage their accounts and check the status of orders quickly and effortlessly.

2. Agent 008 Ball by Pixel Lab - Agent 008 Ball is an addictive game that combines billiards with the high stakes world of international espionage. Cutting edge HTML5 features (like Audio and Canvas) supported by Internet Explorer 9, combined with stunning graphics draw you in as you attempt to beat a timer and avoid the nefarious tricks of the terrorist organization CHALK.

3. Always Beautiful by Big Spaceship - Using the new features included in Internet Explorer 9, Big Spaceship created Always Beautiful, an interactive visualization set to music.

Users manipulate colors and objects that adapt to the song's rhythm and structure. At the end of the song, the user is shown the high-resolution artwork they've created using the powerful SVG capabilities and improved JavaScript performance of Internet Explorer 9.

4. AP News Reader by Vectorform - The AP News Lab "Timeline Reader" is a collaboration between Vectorform and The Associated Press (AP) exploring new ways of visualizing and reading online news.

We sought out to create a fully featured online reader application that showcases the beautiful high-res imagery from the AP side-by-side with a full article reading experience.

Users can browse through all of their favorite news categories simultaneously in a timeline visualization that frames the day’s events in a complete chronological sequence. The site is also a showcase of the latest advances in HTML5 and CSS3 supported in modern web browsers.

Some of the new technologies utilized were the HTML5 canvas tag to create a fast loading and snappy intro animation/splash screen, HTML5 local storage to keep track of read articles and a reading queue, and CSS3 support for embedding web fonts.

5. AMD Space Command - AMD Space Command is a fun game that shows the graphics acceleration of Direct2D technology in the Internet Explorer 9 browser.

Shoot as many space attackers possible, and use the “GPU capacitor” to adjust the intensity of the game. AMD Space Command is built in HTML5, leveraging the GPU in your PC to improve graphics.

You can see this first hand by keeping track of the Frames Per Second (FPS) as you adjust your GPU capacitor!

6. BeatKeep by Archetype - Community and creativity are the driving forces behind Archetype’s BeatKeep application.

BeatKeep allows drummers, musicians, and music enthusiasts to discover, create, and share beats of any genre. Through intuitive interactions and the power of HTML5 on Internet Explorer 9, BeatKeep allows users to create unique audio tracks and share them on social networks like Facebook.

7. Beautiful Explorer by Soleil Noir - Web is beautiful, spontaneous, ephemeral and so creative. The beauty of the web is the creative contents produced by everyday people. This website is a design trends daily overview. We hope you'll enjoy it.

8. BMW Vision by EMC - EMC Consulting and BMW have a created the BMW Car Configurator, a ground-breaking tool that shows off the extraordinary BMW Vision EfficientDynamics concept car.

The experience relies on the high performance of Internet Explorer 9, bringing together the awesome power of Chakra, its new JavaScript engine, and GPU acceleration to enable car enthusiasts to manipulate both the car and its environment with a fluid three-dimensional feel.

9. Brain Power by R2Integrated and Scientific America - R2integrated developed Brain Power, a website and interactive learning tool to introduce users to the many parts of the human brain and its functionality.

Brain Power uses HTML5, SVG, CSS3, and JavaScript. An animation layer produces real-time interactions with elements drawn within the HTML5 canvas.

The HTML5/CSS3 engine within Internet Explorer 9 makes full rich interactive applications practical for all new websites. In short, HTML5 and Internet Explorer 9 introduce end users to new levels of flexibility, capability, and expression.

10. Chinese Shadow Play by RedSAFI - Chinese Shadow Play is a traditional form of Chinese art. This demo lets users choose an iconic Chinese shadow puppets, play with puppets individually and organize the puppets in formations.

This demo shows off the power of the Internet Explorer 9 Canvas by featuring a physics engine and a bones system, as well as beautiful bitmap art to create an engaging viewing experience.

11. Also by RedSAFI: Chinese Kite Experiment - In this demo, a user can select a kite and choose a flight pattern.

The user can also add fans to the stage and add collision detection to alter the kite’s flight. This demo shows off Internet Explorer 9 Canvas performance by featuring a physics engine to create the flying environment.

12. Comicx Parallax by Steaw Design - As web technologies continue to evolve, we prepare to enter the age of HTML5. Created for Beauty of The Web in honor of the Internet Explorer 9 launch, “Never Mind the Bullets” offers the traditional comic strip experience enriched by parallax.

With a simple movement of the mouse, the strip is animated and the story comes to life. It unfolds at LongHorn Gush, a quiet town troubled by a band of outlaws, The Red Bandanas.

However, with the arrival of the famous Bill “One Shot” Collins, things are about to change.

13. Cracked.com by Demand Media - Pinning Cracked.com to your task bar allows you easier access to one of the fastest growing humor sites in the world.

Now all of Cracked’s award-winning content is only one click away – no matter where you are online!

14. DailyMotion - Dailymotion is pleased to announce the release of its new HTML5 Player Beta and Demo.

This development takes advantage of the latest web standards, and permits streaming video playback without the need for plugins," said Olivier Poitrey, CTO and Co-Founder.

"We are excited to partner with Microsoft for this announcement as the new Internet Explorer 9 shows commitment to both web standards and innovation. Internet Explorer 9 sets itself apart by supporting hardware accelerated graphics and offering users a more app-like experience with their new Site Mode.

15. Digital News Archive (DNA) by Nave - The web site provides Korean newspapers from various publishers dates starting from 1960's to 1990's.

Users can easily browse through the newspapers using simple UI. To maximize the user experience, the Canvas element was heavily utilized. With the Canvas, we could make zoom, page navigation and other transitions smooth and enjoyable for the users.

16. Discovery - As the world’s number one nonfiction media company, Discovery Communications is always looking for new ways to engage with our passionate fans.

By building new Internet Explorer 9 functionality into Discovery.com, TLC.com and AnimalPlanet.com, we are able to give audiences even more ways to interact with and learn from their favorite TV shows and personalities.

17. EBay

18. eHow by Demand Media - eHow offers more than 2 million articles and videos, providing visitors with trusted solutions for completing life’s daily tasks or larger projects.

With Internet Explorer 9, users enjoy an optimized and more dynamic eHow, a faster loading and immersive video experience - without the need for 3rd party software - plus new tools to bring relevant eHow content straight to our user’s fingertips.

19. Facebook - More than 500 million people actively engage with their friends on Facebook each month.

With IE9, Facebook users will be able to more quickly access and manage their social activities through the browser and get back to their friends via a seamless and rich experience.

20. Flixster - Flixster is the largest online movie community and the leading movie application for mobile devices.

Flixster is using Internet Explorer 9’s new features to give users quick and easy access to great movie content right from the desktop.

21. Floweroscope by LA Surprise - Floweroscope provides users with a kaleidoscope-like online artistic experience that explores the new capacities of Internet Explorer 9 to create a unique animation experience.

Floweroscope provides symmetrical effects and randomly generated shapes, and the user controls the shape colors and sizes.

An HTML5-supported volume effect and the new Chakra JavaScript engine immerse the user into the experience. The Internet Explorer 9 Canvas element provides an innovative way to draw hardware-accelerated animations without plugins.

22. Gorillaz - Gorillaz.com has been optimised for Internet Explorer 9 to take advantage of some great new integration features with Windows 7.

Fans can now drag the Gorillaz favicon to their taskbar and access it like an app. Right-clicking on the Gorillaz icon in the taskbar provides access to site features like News or the G Player.

Gorillaz fans can even personalise this list by clicking the star to save any page. Powered by HTML5, Murdoc’s Reading Room is turned into an interactive space.

He'll talk you through it as you zoom up to the gallery wall and listen to tracks, bring up the Story So Far book off his coffee table with stunning pictures, html5 video and audio, and have a nosey look through the contents of his laptop. Click on the video to play an HTML5 video!

23. Hulu - Hulu on Internet Explorer 9 and Windows 7 will allow users to customize their Jump List menu with the most popular destinations on the site.

To customize, users simply select the menu items in their profile page and they become accessible whenever/wherever you are on Hulu.com.

The site will also enable contextual menus on Show Pages and Watch Pages allowing users to Subscribe to shows or control their video watching experience during content playback.

24. IMDb - More than 100 million unique visitors per month turn to IMDb to discover which movies are coming out and decide what to watch.

IMDb’s new HD Trailer Gallery utilizes HTML5 and Internet Explorer 9 hardware acceleration to dramatically enhance the trailer viewing and movie discovery experience on IMDb.

25. Jack & the Beanstalk, an Animated, Interactive Storybook by Clarity Consulting - The site blends fantasy and realism in custom illustrations animated by physics-based JavaScript.

The GPU acceleration in Internet Explorer 9 allows for smooth rendering of animations, even when leveraging heavy physics libraries. Coupled with SVG graphics and embedded audio most are surprised to hear the entire site has been created using HTML5, CSS, and JavaScript.

The newly supported features of Internet Explorer 9 allows for rich interactivity without the overhead of the traditional plug-in based model.

26. JitterBug by Cynergy - JitterBug is a fast, fun game built exclusively in HTML5. Showing off the rich media and rendering power of Internet Explorer 9, the game challenges the player to draw lassos around fast moving bugs to unlock the Band and start the show before the time runs out.

Relying heavily on Internet Explorer 9’s impressive Canvas abilities, this rich playing experience redefines what’s possible in HTML based game play.

27. Kaboodle - Kaboodle is the Internet’s largest social website for passionate shoppers. Kaboodle’s shopping tools allow users to add products from anywhere online to their Kaboodle lists and to share those products with others.

The site’s integration with Internet Explorer 9 will provide Kaboodle community members with easy access to their personalized shopping content via a custom Jump List, ensuring that it is always just one click away.

28. LinkedIn - LinkedIn is an Internet platform company focused on connecting the world's professionals.

The company is privately held and has a diversified business model with revenues driven from user subscriptions, advertising sales and enterprise software licensing.

The LinkedIn Web site launched in 2003 and is the largest professional networking site in the world with more than 75 million members, representing 200 countries and executives from every Fortune 500 company.

LinkedIn’s integration with Internet Explorer 9 will provide its members with one-click access to their professional network and business insights via a custom Jump List.

29. Live Strong by Demand Media - LIVESTRONG.COM inspires and empowers people to achieve their daily goals around living healthy.

With Internet Explorer 9, users enjoy a more dynamic experience including an expanded HD video browsing and improved recipe discovery.

A newly optimized experience of the popular MyPlate food and fitness tracking application keeps users engaged in real-time.

30. Lost World’s Fairs by Friends of Mighty - To celebrate Internet Explorer 9’s support for the Web Open Font Format (WOFF) Jason Santa Maria, Frank Chimero, Naz Hamid, and Trent Walton have teamed up to create a series of web broadsheets for World’s Fairs that never were.

Each piece uses fully live text (with some HTML5 and CSS3) to showcase what’s typographically possible on the web.

31. MONA (Museum Of Neverending Art) by groupeReflect - At the MONA, users work together to create the biggest online artwork ever.

Everyone can create, draw, write, upload pictures, and add and alter things on the canvas. It’s a user-generated piece of art, which is constantly in motion.

Using Internet Explorer 9 technologies such as HTML5 / CSS3, WebFonts, Canvas and the new Internet Explorer 9 JavaScript Engine, MONA makes you rediscover the beauty of the web, as well as recreate it.

32. MySpace - MySpace Video offers music videos, full episodes of TV shows, and user generated content and creates a social environment for users to view, create and share videos with friends.

In Internet Explorer 9, MySpace Video serves over 200,000 videos and UGC video clips in state of the art high-def H.264 in full compliance with HTML5. Jump Lists in Internet Explorer 9 offer quick content discovery and easy navigation.

33. National Museum Gallery China by NX - One of the most famous museums in China, National Museum of China (NMC) now allows visitors to explore the galleries on their feet or on the web.

Internet Explorer 9’s HTML5 support is just right for this scenario: easy to develop with great flexibility, smooth video and audio playback and a fast experience with the new JavaScript engine.

34. Netlog - Netlog is an online platform where users can keep in touch with and extend their social network and is currently available in 37 languages and has more than 69 million members throughout Europe, and this number increases every day.

Netlog is taking advantage of pinning site to the taskbar and thereby making sure users get to the activities within Netlog they care about via the Jump List.

35. One Day in Beijing by Toujie - One Day in Beijing provides a virtual tour of famous Beijing sites, including the Great Wall, Temple of Heaven, Beihai Park, Tian An Men, and National Stadium China (Bird Nest).

These are the must-go places for anyone touring Beijing. By harnessing the power of Internet Explorer 9 and HTML5 along with the Internet Explorer 9 Canvas 2D API, we created a multitude of interactive scenarios.

Users can experience flying clouds and mouse sensitive navigation, as well as other HTML 5 demos like flying kites, and piyingxi.

36. Photobucket - Photobucket is the premier destination for saving, sharing, searching, and creating images and video on the Web.

With Internet Explorer 9, Photobucket is using Jump List, which will allow users to access both their own content and content from topical “Find Stuff” categories directly from their desktop.

37. Quiksilver

38. Red Bull by Archetype - Archetype has created a next generation global media and social experience for Red Bull.

This interactive application allows users to browse Red Bull’s rich set of photos and video, dynamically surfacing content based on its popularity in social networking sites and on users' interests.

It takes advantage of HTML 5, SVG, CSS3, Jump Lists, Scaling, Audio/Video tags and custom font features and functionality offered by Internet Explorer 9 to raise the bar for interactivity and design in standards based websites.

39. Rough Guides by Metia - Members of this interactive community use an animated compass to navigate a map of the world; view geo-located photographs pulled from the Flickr database; and explore 200 travel experiences selected by Rough Guides.

Members can also submit their own images to the community, and share favourite experiences from their online travels using Facebook, Twitter and email.

40. RTL - RTL Group is a house of excellent content and powerful brands, which is able to deliver its content to all media platforms worldwide and to repeat its broadcasting success story in every country while fulfilling its obligation to society.

By combining pinning, Jump List and previews into the RTL experience, Internet Explorer 9 users get convenient access to the most popular RTL content.

41. Sohu NBA by Digital Hall nbadata.sports.sohu.com - Sohu Sports is one of the most popular interactive sports information network among sport enthusiasts.

Being the NBA-licensed live video broadcast site for NBA events in China, NBA fans can access team schedules, game videos and team/player data, photos, chat rooms, voting and other interactive features. Internet Explorer 9 plus HTML 5 gives an unparalleled high performance hardware accelerated graphics and video experience.

42. t-online.de - This showcase is a sneak peek at the future of t-online.de.

Core features are new picture and video galleries, a 360 degree view of consumer products and a fun and challenging online game, all completely realized in HTML 5.

This, as well as the implementation of the Internet Explorer’s Jump List feature, offers the user a glimpse of what a modern news website could be like when fully implementing the power and simplicity of HTML 5 in combination with the Internet Explorer’s unique way to surf the web.

43. The Doll Parade by Freetouch - The Doll Parade allows its users to assemble a wide variety of dolls by customizing their arms, legs, faces and apparel.

Once the doll is assembled the users doll along with other creations march smoothly via an HTML5 Canvas. The experiences takes advantage of HTML 5 (Canvas), SVG and CSS3.

44. The Killers by SparKart - The Killers' website chronicles the band's career, and offers users a seamless browsing experience of the band’s music and video content.

The website takes advantage of HTML5, Canvas & SVG across the site's panoramic landscape & internal sections, leveling the playing field in displaying content to users across multiple platforms & devices.

45. The Shodo by Business Architects - The Kanji Calligraphy website takes advantage of powerful new Internet Explorer 9 features to introduce users to the beautiful Japanese calligraphy known as Shodo.

Even better, Kanji Calligraphy allows users to create their own calligraphy-based art work and share it on Twitter and Facebook.

This site is based on several of the features supported by Internet Explorer 9 HTML5 (canvas, video element, audio element), SVG, and WOFF.

46. The Wall Street Journal - WSJ.com offers breaking news coverage, real time quotes, and in-depth analysis and commentary to the business elite.

Its high-end magazine, WSJ., emphasizes luxury and discerning lifestyle content. To make it easier for users to find and enjoy the content, WSJ is implementing favicons, pinning and the Jump List functionality of Internet Explorer 9 and employing HTML5 features for the visually enriched magazine.

Users can more quickly and easily access Journal content on their faster Internet Explorer 9 browsers.

47. TopGear.com by BBC - TopGear.com is the award-winning website of the world famous motoring entertainment brand, Top Gear.

Top Gear presenters, producers, magazine team, and contributors regularly post on TopGear.com. The Cool Wall leverages the HTML5 and hardware accelerated graphics support in Internet Explorer 9 to provide amazingly smooth transitions, Deep Zoom functionality and slick video playback.

48. Twitter - Twitter lets you share and discover what's happening in your world. The Twitter pinned app in Internet Explorer 9 makes it easy to jump into your Twitter timeline, read and send direct messages, and more, so it's never more than a click away.

49. USA Today - As a part of the fifth anniversary of Hurricane Katrina, USA TODAY built a multimedia project examining where things now stand in New Orleans and the Gulf Coast.

To build the site, we used a variety of web standards, including HTML5 video tag and several CSS3 features, that take advantage of the capabilities of cutting-edge web technologies in Internet Explorer 9.

50. Vodpod - Vodpod makes it easy to build your own video channel with your favorite videos from the Web, and to tune in to channels by other members who share your tastes and interests.

By pinning Vodpod to the taskbar in Internet Explorer 9, users will be able to jump right to their real-time Vodpod feed, to their video collection, or to their favorite channels.

51. WebVizBench by Stimulant and KEXP - WebVizBench lets fans of Seattle’s non-profit radio station KEXP explore historical airplay data, while putting HTML 5's new features to the test. Sift and sort through 6+ years of music, or use the benchmark mode to see how your browser, CPU and GPU stack up against a thorough battery of DOM, canvas, typographic, SVG and video rendering tests.

52. XING - XING is a social network for business professionals with more than 9.6 million members worldwide.

Using Internet Explorer 9 technology such as Jump Lists, XING members can perform tasks like sending messages faster than ever and also receive real-time updates about their network. This supports our XING Anywhere strategy and our efforts to provide our members with great usability.

53. Yahoo! Japan - Through Jump Lists in Internet Explorer 9, users of Yahoo! can enjoy the ‘People’, 'TV', 'Game/Animation', and 'Sports' categories of search ranking, and further enjoy it by switching to Yahoo! Auction, and Yahoo! Answer to see what is actively traded or discussed related to popular queries.

54. ZKM - “Exhibition and Archive” presents a historic online exhibition and a new experience of archival survey.

The side is driven by HTML5, CANVAS, CSS3, SVG and Jump List, which allow graphically rich, standard conform applications and avoids plugins. The pure implementation supports the modern claim of “form follows function” and adds sustainability.”

54 Amazing IE9 Websites You Have to Try - Softpedia




In a race to optimize everything, developers often go to extremes to build software that performs routine tasks. MissionControl is a system that allows users to program a control center that stores interfaces with attached hardware sensors, allowing the users to control any other devices that can be activated via the underlying protocol. For demo purposes, the MissionControl build at this point is compatible with the Phidgets IR hybrid sensor.
The system has two core components:

A server application, which is a Win32 console application that handles incoming queries and returns data to the connected clients. This application runs on the desktop machine with the connected sensor.The Windows Phone application that sends requests to the target server and can trigger a variety of pre-programmed commands.
The Basics

Hardware and Communication Infrastructure

One of the most important parts of the project is the signal capture and replication hardware. For the purposes of this project, I decided to use a dual-mode Phidgets IR sensor. It supports both IR code capture and subsequent replication. From a user’s perspective, this device also eliminates a substantial code-learning overhead as well as the potential error rate. Instead of searching for a device-specific hexadecimal sequence that later has to be transformed in a working IR code, the user simply has to point his remote control at the sensor and press the button that he wants accessible from a mobile device. Given that the capturing software is running on the target machine, once the sensor detects that a code can be repeated within an acceptable precision range, it will be automatically captured and stored, with all required transformations worked out in the backend using the free Phidgets SDK.

Even though I can, I don’t have to handle the binary code content received through the sensor—the Phidgets .NET libraries carry built-in types that contain all the processed metadata that I will discuss later in this article.
This sensor is connected through a USB port to a machine that acts as a communication gateway. This server should have port 6169 open for inbound connections.
NOTE: The port number can be changed, but you have to keep it consistent between your server and client applications.
The communication between the phone and the computer running the client is performed via a TCP channel—sockets are used to perform the initial connections and serialized data transfer. You can see the generalized data flow between the devices that are involved in the procedure in the graphic below:

The server (desktop client) handles the local storage and release of all incoming IR codes. The mobile client has to know the location of the server—once specified and confirmed, it can send one of the pre-defined commands to it and either query the server for existing command groups (sets) or invoke one of the stored IR codes. When I pass data between devices, I use JSON for the serializable components. The data is also processed before being sent in order to speed-up the process—for example, on the server side the sets are serialized together with the associated codes. Like this:

[
{
"Name":"batman",
"IsList":false,
"Commands":[
{
"Name":"test command",
"Code":{
"Mask":{
"BitSize":12,
"CodeData":"AAA="
},
"BitSize":12,
"Encoding":2,
"CarrierFrequency":38000,
"DutyCycle":50,
"Gap":44761,
"Header":[
2374,
606
],
"CodeData":"DJA=",
"MinRepeat":5,
"One":[
1189,
606
],
"Repeat":null,
"Trail":0,
"Zero":[
582,
606
]
}
},
{
"Name":"turn off",
"Code":{
"Mask":{
"BitSize":12,
"CodeData":"AAA="
},
"BitSize":12,
"Encoding":2,
"CarrierFrequency":38000,
"DutyCycle":50,
"Gap":44770,
"Header":[
2360,
613
],
"CodeData":"DJA=",
"MinRepeat":5,
"One":[
1169,
613
],
"Repeat":null,
"Trail":0,
"Zero":[
585,
613
]
}
}
]
}
]

The inherent problem with the JSON data above is the fact that the phone client does not need the information related to the code binary sequence and all the metadata that goes with it. So it is effectively stripped down and reduced to the names of the sets (when a list of sets is requested) and commands (when a list of commands is requested).
The Data Model

As you saw from the description above, the server organizes individual infrared codes in sets. A single set is a bundle of codes that may or may not be related to each other—ultimately, this is the user’s decision. A good example of using sets is organizing IR commands by rooms, devices or code types. Each set has a unique name on the server, therefore eliminating the possibility of a request conflict.
Each set stores individual commands built around the Command model:

namespace Coding4Fun.MissionControl.API.Models
{
public class Command
{
public Command()
{
}

public string Name { get; set; }
public SerializableIRCode Code { get; set; }
}
}

Despite the obvious Name property, you can see that I am using a SerializableIRCode instance that is specific to each model. Before going any further, I need to mention that the Phidgets SDK offers the IRLearnedCode model to store code contents. I could have used it instead, but there is an issue that prevents me from doing that—there is no public constructor defined for IRLearnedCode, therefore there is no way to serialize it, either with the built-in .NET serialization capabilities or JSON.NET, which I am using in the context of the project.
Instead, I have this:

using Phidgets;
namespace Coding4Fun.MissionControl.API.Models
{
public class SerializableIRCode
{
public SerializableIRCode()
{

}

IRLearnedCode code;
public ToggleMask Mask { get; set; }
public int BitSize { get; set; }
public Phidgets.IRCodeInfo.IREncoding Encoding { get; set; }
public int CarrierFrequency { get; set; }
public int DutyCycle { get; set; }
public int Gap { get; set; }
public int[] Header { get; set; }
public byte[] CodeData { get; set; }
public int MinRepeat { get; set; }
public int[] One { get; set; }
public int[] Repeat { get; set; }
public int Trail { get; set; }
public int[] Zero { get; set; }
}
}

It is an almost identical 1:1 copy of the original class, storing both the layout of the IR code and additional information related to its replication mechanism. You can learn more about each property listed in the model above by reading the official document on the topic.
ToggleMask, the identity bit carrier that helps marking the code as repeated or not, is also implemented through a built-in Phidgets SDK model, and it has the same problem as IRLearnedCode. I implemented this model to replace it in the serializable code:

namespace Coding4Fun.MissionControl.API.Models
{
public class ToggleMask
{
public ToggleMask()
{

}

public int BitSize { get; set; }
public byte[] CodeData { get; set; }
}
}

I also needed an easy way to store all sets at once and carry all associated codes in a single instance retrieved from the storage. Here is the Set class:

namespace Coding4Fun.MissionControl.API.Models
{
public class Set
{
public Set()
{
Commands = new List();
}

public string Name { get; set; }
public bool IsList { get; set; }
public List Commands { get; set; }
}
}

Notice that there is an IsList flag that allows me to specify how to display this specific list on the connecting device. This adds some level of flexibility for situations where the user wants to build a virtual remote for closely-related keys, such as digits. With that in mind, displaying those as a list might be inconvenient, wasting visual space on the client. But if the flag is set to false, the list can be displayed as a pad.
Also, when the server performs the data exchange, it provides a single “envelope” that allows the connecting device to easily understand what the server is trying to do:

namespace Coding4Fun.MissionControl.API.Models
{
public class ServerResponse
{
public string Identifier { get; set; }
public string Marker { get; set; }
public string Content { get; set; }
}
}

The Identifier property carries the server IP address. That way, when a device receives a response, it is able to either accept it, because it knows that a response is requested from a target location, or discard it because the user is no longer using the specific server.
Marker carries the command type of the sent command, therefore giving the Windows Phone application a hint as to what to do with the data. The server can send the following commands:

SET_LIST – returns the list of sets that are currently available on the server.SET_COMMANDS:SET_NAME:IS_LIST – returns the list of commands that are associated with a given set that is currently stored on the server.NOTIFICATION – send a simple notification to the client; no further action is required.
Last but not least, Content is used to push the necessary data that is associated with the given Marker. It can be either a JSON-based string that lists the sets or commands, or a plain-text message that is used as an alert for the end-user.
Server Architecture

The server is the only component of this entire system that does all the heavy lifting. It learns commands, stores them and then generates new IR signal requests, as controlled from any of the connected clients. Let’s take a closer look at what happens behind the scenes—to start, I am going to document the network infrastructure.
The Network Layer

In order to be a reliable system, the server needs to be always ready to accept an incoming connection. For that purpose, it is possible to use the TcpListener class—an “always on” receiver that can handle incoming TCP connections. I integrated it in my CoreStarter class that is used to start the listener when the application is launched:

namespace Coding4Fun.MissionControl.API
{
public class CoreStarter
{
static TcpListener listener;

public static void LaunchSocket()
{
Console.WriteLine("Starting socket server on port {0}...", Constants.DEFAULT_PORT);
listener = new TcpListener(NetworkHelper.GetLocalIPAddress(), Constants.DEFAULT_PORT);
listener.Start();

for (int i = 0; i < Constants.MAX_CONCURRENT_CLIENTS; i++)
{
Thread socketThread = new Thread(new ThreadStart(ListenForData));
socketThread.Start();
}
}

private static void ListenForData()
{
Console.WriteLine("Listener thread started.");

while (true)
{
Socket acceptedSocket = listener.AcceptSocket();
using (MemoryStream coreStream = new MemoryStream())
{
try
{
Console.WriteLine("Incoming connection: {0}", acceptedSocket.RemoteEndPoint);

using (Stream sourceStream = new NetworkStream(acceptedSocket))
{
sourceStream.ReadTimeout = Constants.SOCKET_READ_TIMEOUT;

byte[] buffer = new byte[Constants.DEFAULT_BUFFER_SIZE];
int i;

while ((i = sourceStream.Read(buffer, 0, buffer.Length)) != 0)
{
coreStream.Write(buffer, 0, i);
}
}
}
catch
{
string data = Encoding.ASCII.GetString(coreStream.ToArray());

CommandHelper.InterpretCommand(data, acceptedSocket.RemoteEndPoint.ToString());
}
}
}
}
}
}

When LaunchSocket is called, the listener is activated on the current machine. As I mentioned above, the port number can be arbitrarily assigned, but has to be consistent between connecting apps in order for the TCP links to be established. Because I expect that more than one device will be connecting to the service at a time, the listener is set as active across a constant number of threads.
NOTE: By default, a there is a maximum limit of 5 simultaneous clients. Although this number can be adjusted, be aware of the requirements of each environment in which a limited number of potential devices can connect. Even though the performance footprint of each thread is minimal, it can have a negative effect if used in unnecessarily large instances.
ListenForData is used to read the incoming stream. When an inbound connection is accepted, the data is read with the help of a fixed content buffer. Then a read timeout is specified to prevent situations where the stream was completely read but the application still waits to pull non-existent data. Once the timeout milestone is hit, an exception is thrown, which marks the end of the stream—at this point, the plain text data that was received (remember that both the server and client exchange text data only) is passed to the command interpreter—CommandHelper, with a reference to the source of the command.
The commands from the device are passed as serialized key-value pairs (KeyValuePair), the key being the command with any possible suffixes, and the value being the contents of the command itself that helps the server identify the specific item in the local storage.
InterpretCommand,in this case, does three things sequentially:

Deserialize the incoming string and create a KeyValuePair instance.Process the command and check whether it is recognizable.Send a response to the client, if deemed necessary by the command type.
The serialization and deserialization is done via JSON.NET. You can install this package in your console managed Win32 project and the Windows Phone application project via NuGet:

The deserialization step is as simple as one line of C# code:

KeyValuePair result = JsonConvert.DeserializeObject(rawCommand.Remove(0, rawCommand.IndexOf('{')));

The string is sanitized to ensure that only JSON content is being passed to the serializer.
Because of a relatively limited command set, I can put together the entire interpretation stack like this:

// Get the initial list of sets on the target server
if (result.Key == Constants.COMMAND_INIT)
{
SendSets(sourceLocation);
}
// Create a new set on the target server
else if (result.Key.Contains(Constants.COMMAND_CREATE_SET))
{
CreateSet(result, sourceLocation);
SendSets(sourceLocation);
}
// Get the commands that are associated with a given set.
else if (result.Key == Constants.COMMAND_GET_COMMANDS)
{
SendCommands(result.Value, sourceLocation);
}
// The client requested the server to learn a new command.
else if (result.Key.Contains(Constants.COMMAND_LEARN_COMMAND))
{
LearnCommand(result, sourceLocation);
}
// The client requested one of the commands to be executed on the
// target server.
else if (result.Key.Contains(Constants.COMMAND_EXECUTE))
{
ExecuteCommand(result);
}
// The client has requested a set to be deleted from the target server.
else if (result.Key == Constants.COMMAND_DELETE_SET)
{
DeleteSet(result.Value);
SendSets(sourceLocation);
}
// The client has requested a set to be deleted from the target server.
else if (result.Key.Contains(Constants.COMMAND_DELETE_COMMAND))
{
DeleteCommand(result);
SendCommands(result.Key.Split(new char[] { ':' })[1], sourceLocation);
}

All commands are constants, declared in the local helper class:

public const string COMMAND_INIT = "INIT";

public const string COMMAND_CREATE_SET = "CREATE_SET";

public const string COMMAND_GET_COMMANDS = "GET_COMMANDS";

public const string COMMAND_LEARN_COMMAND = "LEARN_COMMAND";

public const string COMMAND_EXECUTE = "EXECUTE";

public const string COMMAND_DELETE_SET = "DELETE_SET";
public const string COMMAND_DELETE_COMMAND = "DELETE_COMMAND";

Notice that these are not the commands that the server sends back, but rather the commands it receives from connecting Windows Phone devices.
Let’s now take a look at the breakdown for each command.
SendSets:

///
/// Send the list of sets to the client that requested those.
///
///
The location of the requesting client.
private static void SendSets(string sourceLocation)
{
Console.WriteLine("Received an initial set query from {0}", sourceLocation);
ServerResponse response = new ServerResponse();
response.Marker = "SET_LIST";
response.Content = JsonConvert.SerializeObject(StorageHelper.GetRawSetNames());
response.Identifier = NetworkHelper.GetLocalIPAddress().ToString();
NetworkHelper.SendData(sourceLocation, JsonConvert.SerializeObject(response));
Console.WriteLine("Sent the set list to {0}", sourceLocation);
}
When this command is received, the server does not have to do much processing. It is only invoked when the client establishes the initiating link and needs to know what possible sets it can get from the target machine. The request is logged in the console and a server response is prepared that contains a serialized list of set names, which is later serialized as well and sent back to the source machine location.
StorageHelper and NetworkHelper will be documented later in this article.
CreateSet:

///
/// Create a new set and store it on the local server.
///
///
The original deserialized command.
///
The location of the requesting client.
private static void CreateSet(KeyValuePair result, string sourceLocation)
{
bool isSuccessful = false;
string[] data = result.Key.Split(new char[] { ':' });

Console.WriteLine("There is an attempt to create the {0} set from {1}.", result.Value, sourceLocation);

if (data[1].ToLower() == "list")
isSuccessful = StorageHelper.AddSet(result.Value);
else
isSuccessful = StorageHelper.AddSet(result.Value, false);

if (isSuccessful)
Console.WriteLine("The {0} set was successfully created.", result.Value);
else
Console.WriteLine("Something happened and the {0} set was not created.", result.Value);
}
When a mobile device attempts to create a new set on the server, it sends a command in the following format:
CREATE_SET:list/pad, SET_NAME
CreateSet will get the type of the set that was created, will check whether a set with the same name already exists and will either create it or ignore the command altogether. No notification is sent to the connecting device, but either the failure or the success of the command is registered in the local console.
SendCommands:

///
/// Send a list of commands that are associated with the pushed set.
///
///
The original deserialized command.
///
The location of the requesting client.
private static void SendCommands(string setName, string sourceLocation)
{
Console.WriteLine("There was a request to get the commands for the {0} set from {1}.", setName, sourceLocation);

bool isList = StorageHelper.IsSetAList(setName);

ServerResponse response = new ServerResponse();
response.Marker = string.Format("SET_COMMANDS:{0}:{1}", setName, isList);
response.Identifier = NetworkHelper.GetLocalIPAddress().ToString();
response.Content = JsonConvert.SerializeObject(StorageHelper.GetRawCommandNames(setName));

NetworkHelper.SendData(sourceLocation, JsonConvert.SerializeObject(response));

Console.WriteLine("Command list for the {0} set were sent to {1}.", setName, sourceLocation);
}
Commands are sent in the same manner as sets—once the set is recognized, the names of the associated commands are retrieved and serialized inside a ServerResponse instance and then pushed back to the requesting device.
LearnCommand:

///
/// Learn a new command and store it on the target server.
///
///
The original deserialized command.
///
The location of the requesting client.
private static void LearnCommand(KeyValuePair result, string sourceLocation)
{
Console.WriteLine("[!] Server in COMMAND LEARNING MODE! Point the remote towards the sensor and send a command.");

string[] data = result.Key.Split(new char[] { ':' });
var set = StorageHelper.GetSingleSet(StorageHelper.GetSets(), data[1]);

if (set != null)
{
if ((from c in set.Commands where c.Name == result.Value select c).FirstOrDefault() != null)
{
Console.WriteLine("Cannot learn command {0} for the following set: {1}. Command already exists.", data[1], result.Value);

ServerResponse response = new ServerResponse();
response.Marker = "NOTIFICATION";
response.Identifier = NetworkHelper.GetLocalIPAddress().ToString();
response.Content = "We could not save the following command - " + result.Value + ". It already exists in the set.";

NetworkHelper.SendData(sourceLocation, JsonConvert.SerializeObject(response));
}
else
{
if (sensor == null)
sensor = new IR();

sensor.open(-1);

sensor.waitForAttachment();

sensor.Learn += (sender, args) =>
{
Console.WriteLine("[!] Server learned the command and is no longer in COMMAND LEARNING MODE.");
IRLearnedCode code = args.LearnedCode;
code.CodeInfo.MinRepeat = 5;

Command command = new Command();
command.Name = result.Value;
command.Code = IRCodeWorker.GetSerializableIRCode(code);

StorageHelper.AddCommand(command, set.Name);

ServerResponse response = new ServerResponse();
response.Marker = "NOTIFICATION";
response.Identifier = NetworkHelper.GetLocalIPAddress().ToString();
response.Content = "The following command has been stored: " + result.Value;

NetworkHelper.SendData(sourceLocation, JsonConvert.SerializeObject(response));
};
}
}
}
Once a request was received that the server needs to learn a new command, an initial verification is done to make sure that the requested command name and set are not already taken. If neither the command nor the set exist, both will be created.
After the basic setup is complete, the IR sensor is activated and will be waiting for the command to be learned. The way it works is quite simple – the sensor will remain in learning mode until the point where it recognizes a command without error, being 100% sure that it can be reproduced internally. You will need to point your remote towards the sensor and hold the button you want captured for one or two seconds in order for the command to be learned.
NOTE: To ensure that a proper transmission is done, I manually set the minimal repeat value to 5. This is the number of times the sensor will fire the same code towards the target. That is the optimal value for a target device to receive the code if the remote is pointed directly at it without necessarily triggering the same command twice or more.
After the command is learned, the code is processed and transformed into a serializable instance. The connecting client is then notified about whether the command was learned.
ExecuteCommand:

///
/// Execute one of the commands currently stored on the local server.
///
///
The original deserialized command.
private static void ExecuteCommand(KeyValuePair result)
{
string[] data = result.Key.Split(new char[] { ':' });

var set = StorageHelper.GetSingleSet(StorageHelper.GetSets(), data[1]);

if (set != null)
{
var command = StorageHelper.GetSingleCommand(StorageHelper.GetCommands(set.Name), result.Value);

IRLearnedCode code = IRCodeWorker.GetLearnedCode(command.Code);

if (sensor == null)
sensor = new IR();

sensor.open(-1);
sensor.waitForAttachment();
sensor.transmit(code.Code, code.CodeInfo);
sensor.close();
}
}
Command execution relies on the hardware sensor. The phone sends a command execution request in the following format:
EXECUTE:SET_NAME, COMMAND_NAME
Once the command is parsed out and found in the local storage, the IR code is transformed back to a model that is recognizable by the Phidgets SDK and transmitted towards the location where the sensor is pointed at the time of the execution.
DeleteSet:

///
/// Delete a single set and all the associated commands
///
///
The name of the set.
private static void DeleteSet(string target)
{
var sets = StorageHelper.GetSets();
var targetSet = StorageHelper.GetSingleSet(sets, target);

if (targetSet != null)
{
StorageHelper.RemoveSet(sets, targetSet);
}
}
When deleting a set, only the name of the set should be specified. The user will get a warning on the client side that requires a confirmation of the deletion. The server will blindly execute the command.
DeleteCommand:

private static void DeleteCommand(KeyValuePair result)
{
var sets = StorageHelper.GetSets();
string setName = result.Key.Split(new char[] {':'})[1];
var targetSet = StorageHelper.GetSingleSet(sets, setName);
var command = (from c in targetSet.Commands where c.Name == result.Value select c).FirstOrDefault();

if (command != null)
{
targetSet.Commands.Remove(command);
StorageHelper.SerializeSets(sets);
}
}

Not only can the user remove entire sets, but he can also target specific commands from a given set. Once a DELETE_COMMAND directive is recognized, the set name is parsed out from the original string, that follows the DELETE_COMMAND:SET_NAME, COMMAND_NAME format, and a simple LINQ query extracts the command instance, removes it and stores the set content on the local hard drive.
Notice that for some commands, particularly for set creation, deletion and command deletion, the server will return a list of the remaining items. The contents will be automatically updated on the devices, which will be waiting for that response. This measure was deliberately introduced to minimize the chances of a user triggering a command that was already deleted or trying to query a previously removed set.
Transforming Codes

You might have noticed that I am using IRCodeWorker.GetSerializableCodeType to transform a Phidgets SDK native IR code model into a serializable one. This is a helper function that performs a field copy of the existing object. Because of the differences in the model structure, it has to be done manually:

public static SerializableIRCode GetSerializableIRCode(IRLearnedCode code)
{
SerializableIRCode sCode = new SerializableIRCode();
sCode.BitSize = code.Code.BitCount;
sCode.Encoding = code.CodeInfo.Encoding;
sCode.CarrierFrequency = code.CodeInfo.CarrierFrequency;
sCode.CodeData = code.Code.Data;
sCode.DutyCycle = code.CodeInfo.DutyCycle;
sCode.Gap = code.CodeInfo.Gap;
sCode.Header = code.CodeInfo.Header;
sCode.MinRepeat = 5;
sCode.One = code.CodeInfo.One;
sCode.Repeat = code.CodeInfo.Repeat;
sCode.Trail = code.CodeInfo.Trail;
sCode.Zero = code.CodeInfo.Zero;
sCode.Mask = new ToggleMask()
{
BitSize = code.CodeInfo.ToggleMask.BitCount,
CodeData = code.CodeInfo.ToggleMask.Data
};

return sCode;
}

The reverse process is easier because I can pass each of the existing properties to the IRCodeInfo constructor. The only difference is the fact that I need to use Reflection to create an instance of IRLearnedCode because there is no public constructor defined and a dynamic object has to be created:

internal static IRLearnedCode GetLearnedCode(SerializableIRCode serializableIRCode)
{
IRCode code = new IRCode(serializableIRCode.CodeData, serializableIRCode.BitSize);
IRCodeInfo info = new IRCodeInfo(serializableIRCode.Encoding, serializableIRCode.BitSize, serializableIRCode.Header,
serializableIRCode.Zero, serializableIRCode.One, serializableIRCode.Trail, serializableIRCode.Gap, serializableIRCode.Repeat,
serializableIRCode.MinRepeat, serializableIRCode.Mask.CodeData, IRCodeInfo.IRCodeLength.Constant,
serializableIRCode.CarrierFrequency, serializableIRCode.DutyCycle);

object[] parameters = new object[] { code, info };

BindingFlags flags = BindingFlags.NonPublic | BindingFlags.Instance;
object instantType = Activator.CreateInstance(typeof(IRLearnedCode), flags, null, parameters, null);

return (IRLearnedCode)instantType;
}

Command and Set Management

Looking back at the code that I put together for the command interpreter, there is one class that does all local content manipulation—StorageHelper. This is a simple class that performs LINQ queries on set as well as command collections, and makes sure that all the changes are preserved in the sets.xml file in the application folder that is used as the only storage place for all the content that is being manipulated by the server.

namespace Coding4Fun.MissionControl.API.Helpers
{
public class StorageHelper
{

///
/// Lists all available sets that are currently stored on the server.
///
/// List of sets on the machine.
internal static List GetSets()
{
List sets = null;

string rawContent = GetRawSets();
sets = JsonConvert.DeserializeObject(rawContent);

return sets;
}

///
/// Returns the list of commands that are associated with the given set.
///
///
The name of the target set.
/// List of commands associated with the given set.
internal static List GetCommands(string setName)
{
List commandList = null;

var sets = GetSets();

Set singleSet = null;
if (sets != null)
singleSet = (from c in sets where c.Name == setName select c).FirstOrDefault();

if (singleSet != null)
{
commandList = singleSet.Commands;
}

return commandList;
}

///
/// Gets the list of names for the commands in the requested set.
///
///
The name of the target set.
/// List of commands associated with the given set.
internal static List GetRawCommandNames(string setName)
{
List commandList = GetCommands(setName);

List stringSet = null;

if (commandList != null)
{
stringSet = commandList.Select(x => x.Name).ToList();
}

return stringSet;
}

///
/// Get the list of names for all sets on the local server.
///
/// List of sets on the machine.
internal static List GetRawSetNames()
{
List sets = GetSets();

List stringSet = null;

if (sets != null)
{
stringSet = sets.Select(x => x.Name).ToList();
}

return stringSet;
}

///
/// Get the raw string contents of sets.xml. Should only be used in the
/// context of this class.
///
/// JSON string representing stored sets and commands.
internal static string GetRawSets()
{
string sets = string.Empty;

if (File.Exists("sets"))
{
using (StreamReader reader = new StreamReader(File.OpenRead("sets")))
{
sets = reader.ReadToEnd();
}
}
else
{
FileStream stream = File.Create("sets.xml");

stream.Close();
}

return sets;
}

///
/// Check whether a set is marked with a IsList flag.
///
///
The name of the target set.
/// TRUE - set is a list. FALSE - set is not a list.
internal static bool IsSetAList(string setName)
{
bool isList = true;
var sets = GetSets();
Set set = null;

if (sets != null)
set = (from c in sets where c.Name == setName select c).FirstOrDefault();

if (set != null)
isList = set.IsList;

return isList;
}

///
/// Serialize the set collection to sets.xml
///
///
Collection to be serialized.
/// true if sets are serialized.
private static bool SerializeSets(List sets)
{
try
{
using (StreamWriter writer = new StreamWriter("sets.xml", false))
{
string data = JsonConvert.SerializeObject(sets);

writer.Write(data);
}

return true;
}
catch
{
return false;
}
}

///
/// Add a new set to the existing global set collection.
///
///
Set name.
/// true if successfully added set.
internal static bool AddSet(string name, bool isList = true)
{
var sets = GetSets();

if (sets == null)
sets = new List();

var singleSet = GetSingleSet(sets, name);

if (singleSet == null)
sets.Add(new Set { Name = name, IsList = isList });

if (SerializeSets(sets))
return true;
else
return false;
}

///
/// Retrieves a single set from a collection that has a specific name.
///
///
The source collection from which to extract the set.
///
The name of the set to get.
/// An instance of the found set, if any.
internal static Set GetSingleSet(List sets, string name)
{
if (sets != null)
return (from c in sets where c.Name == name select c).FirstOrDefault();
else
return null;
}

///
/// Add a IR command to an existing set. If the set is not found, it will be created.
///
///
The command instance to be added.
///
The name of the target set.
/// true if the command was successfully added.
internal static bool AddCommand(Command command, string targetSet)
{
var sets = GetSets();

if (sets == null)
sets = new List();

var singleSet = GetSingleSet(sets, targetSet);

if (singleSet == null)
singleSet = new Set { Name = targetSet };

var singleCommand = (from c in singleSet.Commands where c.Name == command.Name select c).FirstOrDefault();

if (singleCommand == null)
{
singleSet.Commands.Add(command);

if (SerializeSets(sets))
return true;
else
return false;
}
else
return false;
}

///
/// Retrieve a single command instance from one of the sets on the local server.
///
///
Original list of commands.
///
Name of the command to be retrieved.
/// An instance of the command, if found. NULL if not.
internal static Command GetSingleCommand(List commands, string name)
{
if (commands != null)
return (from c in commands where c.Name == name select c).FirstOrDefault();
else
return null;
}

///
/// Remove a set from a local machine.
///
///
Original list of sets.
///
Name of the set to remove.
internal static void RemoveSet(List sets, Set targetSet)
{
sets.Remove(targetSet);

SerializeSets(sets);
}
}
}
Sending Data Back to the Client

SendData in the NetworkHelper class handles all outbound connections. Here is its structure:

///
/// Send data to the target network machine.
///
///
The target machine IP.
///
Data to be sent, in string format.
///
Determines whether to remove the port from the given IP string.
public static void SendData(string destination, string data, bool sanitizeIp = true)
{
using (Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp))
{
string completeIp = string.Empty;

if (sanitizeIp)
completeIp = destination.Remove(destination.IndexOf(":"), destination.Length - destination.IndexOf(":"));

client.Connect(completeIp, 6169);
client.Send(Encoding.UTF8.GetBytes(data));
}
}
A new stream socket is created in order to connect to the target machine over the TCP pipe. If IP sanitization is enabled, the port is stripped from the address in order to pass a valid IP. A Socket instance cannot directly handle IPs of the format:
255.255.255.0:PORT_NUMBER
Later, in a synchronous manner, a connection is established and the data is sent.
At this point, you can see that the barebones service offers a flexible way to manage content. It can be accessed by any application type as long as the server can be accessed and the application can send commands in the pre-defined format and the content requested is actually located on the target server. This allows for high levels of extensibility and interoperability, as the server usage is not limited to a single platform. If I decide to create a Windows Store application that would allow me to control my TV, I simply need to add socket connection layer that will send plain strings to the machine where the IR sensor is connected.
Similarly, if some functionality needs to be added, it is possible to do so without ever touching the client applications. A modification in the endpoint will be reflected with no direct effect on all connection applications as long as all handled returned and requested values are preserved. The only additional requirement is that if the client applications want to take advantage of newly introduced capabilities, they need to have an updated command transmission layer for the new command types.
In Program.cs, I simply need to start the server through the CoreStarter class:

namespace Coding4Fun.MissionControl.API
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Coding4Fun MissionControl Server");
CoreStarter.LaunchSocket();
}
}
}

Mobile client overview

The mobile client does not have the capability to send commands directly to the IR sensor. Instead, it connects to a remote machine that has the IR sensor plugged in and attempts to invoke a command from the list returned by the service. A single mobile client can support control over multiple servers.
NOTE: Make sure that at the time of working with the Windows Phone client, the server is actually running on your local machine. To make it easier to test, also open port 6169 for incoming connections in Windows Firewall.
When building a Windows Phone application, make sure you have the proper version of the SDK installed, as well as a SLAT-compatible machine if you plan on testing the application in the emulator.
Networking Infrastructure

The Windows Phone application also relies on a network infrastructure somewhat similar to that of the server. There is a TCP listener that is created when the application is started:

// Code to execute when the application is launching (eg, from Start)
// This code will not execute when the application is reactivated
private void Application_Launching(object sender, LaunchingEventArgs e)
{
ServiceSerializer.DeserializeServices();

listener.OnClientConnected += listener_OnClientConnected;
listener.Start(6169);
}

Here, listener is an instance of TcpSocketListener—a custom class designed to handle incoming network connections:

namespace Coding4Fun.MissionControl.WP.Network
{
public class TcpSocketListener : SocketConnectorBase
{
StreamSocketListener coreSocket;

public async void Start(int port)
{
coreSocket = new StreamSocketListener();
coreSocket.ConnectionReceived += coreSocket_ConnectionReceived;

try
{
await coreSocket.BindServiceNameAsync(port.ToString());
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);

coreSocket.Dispose();
coreSocket = null;
OnConnectionCompleted(new ConnectionEventArgs { IsSuccessful = false, DeviceID = string.Empty });
}
}

async void coreSocket_ConnectionReceived(StreamSocketListener sender, StreamSocketListenerConnectionReceivedEventArgs args)
{
Debug.WriteLine("Connection received!");

DataReader reader = new DataReader(args.Socket.InputStream);

try
{
while (true)
{
StringBuilder builder = new StringBuilder();

uint actualLength = 1;

while (actualLength > 0)
{
actualLength = await reader.LoadAsync(256);
builder.Append(reader.ReadString(actualLength));
}

OnConnectionCompleted(new ConnectionEventArgs
{
Socket = args.Socket,
IsSuccessful = true,
DeviceID = args.Socket.Information.RemoteHostName.DisplayName,
Token = builder.ToString()
});
break;
}
}
catch (Exception exception)
{
Debug.WriteLine(exception.Message);

OnConnectionCompleted(new ConnectionEventArgs { IsSuccessful = false });
}
}
}
}

A StreamSocketListener is used for the connection core. When a connection is received, a continuous loop reads the entire contents of the incoming stream. OnConnectionCompleted is declared in the base class—SocketConnectorBase.

namespace Coding4Fun.MissionControl.WP.Network
{
public class SocketConnectorBase
{
public event EventHandler OnClientConnected;
public virtual void OnConnectionCompleted(ConnectionEventArgs connectionArgs)
{
if (OnClientConnected != null)
{
OnClientConnected(this, connectionArgs);
}
}

public event EventHandler OnSendCompletedEvent;
public virtual void OnSendCompleted(bool succeeded)
{
if (OnSendCompletedEvent != null)
{
OnSendCompletedEvent(this, succeeded);
}
}
}

public class ConnectionEventArgs : EventArgs
{
public StreamSocket Socket { get; set; }
public string DeviceID { get; set; }
public string Token { get; set; }
public bool IsSuccessful { get; set; }
}
}

ConnectionEventArgs here is used to identify the content that is passed to the client. DeviceID gives access to the source IP, IsSuccessful tells the developer whether the established connection is active and the Token carries the raw string if any was received.
Sending data is simplified to the maximum with the help of the SocketClient class, which relies on a StreamSocket instance that handles outbound connections and writing to the output stream:

namespace Coding4Fun.MissionControl.WP.Network
{
public class SocketClient : SocketConnectorBase
{
StreamSocket _socket;

public SocketClient()
{
_socket = new StreamSocket();
}

public SocketClient(StreamSocket socket)
{
_socket = socket;
}

public async void Connect(string hostName, int portNumber)
{
try
{
await _socket.ConnectAsync(new HostName(hostName), portNumber.ToString(), SocketProtectionLevel.PlainSocket);

OnConnectionCompleted(new ConnectionEventArgs { IsSuccessful = true });
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);

OnConnectionCompleted(new ConnectionEventArgs { IsSuccessful = false });
}
}

public async void Send(string dataToSend)
{
try
{
using (DataWriter writer = new DataWriter(_socket.OutputStream))
{
// Write the length of the binary data that is being
// sent to the client.
writer.WriteUInt32((UInt32)dataToSend.Length);

writer.WriteString(dataToSend);

// Send the actual data.
await writer.StoreAsync();

writer.DetachStream();

OnSendCompleted(true);
}
}
catch
{
_socket.Dispose();
_socket = null;
OnSendCompleted(false);
}
}
}
}

As with the listener class, SocketClient supports OnConnectionCompleted to notify the application that the connection attempt completed.
Back in App.xaml.cs, the data from the incoming connection captured by the TcpSocketListener instance is passed to the ResponseHelper class:

void listener_OnClientConnected(object sender, ConnectionEventArgs e)
{
ResponseHelper.HandleIncomingResponse(e.Token);
}

This class reads the possible three commands sent by the server and interprets them, creating internal collections from the raw data if the current server IP matches the one obtained in the ServerResponse (the same model in the desktop application):

using Coding4Fun.MissionControl.WP.Models;
using Coding4Fun.MissionControl.WP.ViewModels;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Windows;

namespace Coding4Fun.MissionControl.WP.Misc
{
public class ResponseHelper
{
public static void HandleIncomingResponse(string rawResponse)
{
if (rawResponse != null)
{
ServerResponse response = JsonConvert.DeserializeObject(rawResponse);

if (response.Marker == Constants.COMMAND_SERVER_NOTIFICATION)
{
Deployment.Current.Dispatcher.BeginInvoke(() =>
{
MessageBox.Show(response.Content, "Server Response", MessageBoxButton.OK);
});
}
else
{
if (CommonViewModel.Instance.IsWaiting)
{
if (response.Identifier == CommonViewModel.Instance.CurrentServer.Location)
{
// returns the list of sets that are associated with the current server.
if (response.Marker == Constants.COMMAND_SERVER_SET_LIST)
{

List items = JsonConvert.DeserializeObject(response.Content);

if (items != null)
{
List groupedItems = Group.CreateGroups(items,
CultureInfo.CurrentCulture, (string s) => { return s[0].ToString(); }, true);
SetsPageViewModel.Instance.Sets = groupedItems;
}
else
{
SetsPageViewModel.Instance.Sets = new List();
}

Deployment.Current.Dispatcher.BeginInvoke(() =>
{
CommonViewModel.Instance.IsWaiting = false;

if (!App.RootFrame.CurrentSource.ToString().Contains("SetsPage"))
{
App.RootFrame.Navigate(new Uri("/Views/SetsPage.xaml", UriKind.Relative));
}
});

}
// returns the list of commands associated with a given set.
else if (response.Marker.Contains(Constants.COMMAND_SERVER_SET_COMMANDS))
{
string[] data = response.Marker.Split(new char[] { ':' });
if (data[1] == CommonViewModel.Instance.CurrentSet)
{
bool isList = false;
bool.TryParse(data[2].ToLower(), out isList);

if (isList)
{
CommonViewModel.Instance.CurrentSetType = "list";
}
else
{
CommonViewModel.Instance.CurrentSetType = "pad";
}

CommandsPageViewModel.Instance.Commands = new System.Collections.ObjectModel.ObservableCollection(JsonConvert.DeserializeObject(response.Content));

Deployment.Current.Dispatcher.BeginInvoke(() =>
{
CommonViewModel.Instance.IsWaiting = false;
App.RootFrame.Navigate(new Uri("/Views/CommandsPage.xaml", UriKind.Relative));
});
}
}
}
}
}
}
}
}
}

If the response comes from a server that is different than the one that is currently active, the data is discarded as the user no longer needs it. Also, for specific commands, the mobile application will be on standby, waiting for a response (unless the user decides to cancel the request) – the IsWaiting flag is an application-wide indicator that a pending server action is in the queue.
Same as with the server, the commands in the Windows Phone application are represented through pre-defined constants:

public const string COMMAND_SERVER_SET_LIST = "SET_LIST";

public const string COMMAND_SERVER_SET_COMMANDS = "SET_COMMANDS";

public const string COMMAND_SERVER_NOTIFICATION = "NOTIFICATION";

Let’s now take a closer look at how it is handled internally to build the visual layer.
Handling the Data

The first thing users will see when the application is launched is the list of registered servers:

This is ServiceListPage.xaml





Windows 7 Forums recommends Auslogics BoostSpeed to repair Windows errors. Get it now.
May 1st, 2012: 25% off. Use coupon code: WINDOWS7FORUMS

Optimize every aspect of Windows 7 with the System Advisor or manually.Repair corrupt registry entries and defragment the registry.Disable and enable services based on how you are using your computer.Adjust and edit hundreds of settings to fix your computer in a few easy clicks.Includes File Recovery (undelete) free of charge.

Other Auslogics software:

Auslogics Antivirus
Auslogics File Recovery
Auslogics Disk Defrag Pro

Auslogics BoostSpeed 5 is quite possibly the best overall system maintenance tool of the year. Having received 5 stars from CNET, they also receive a 10/10 full endorsement from Windows7Forums.com. BoostSpeed isn't just about making your computer fast: It's about making preventative maintenance manageable through one application. While the market calls for a typical system scan to attract buyers, that scan is entirely legitimate, and does correct serious registry problems in a way that far exceeds industry expectations. CCleaner, for example, can hardly hold a candle to this utility.

Looking closer at the System Advisor, we can determine whether or not the Internet connection can be automatically optimized. This is done with BoostSpeed through a manual or automatic setting in the Auslogics Internet Optimizer. Auslogics Registry Defrag will let you know that you can reduce registry access time and increase overall system performance by running this tool. This is a very delicate task that most freeware applications will not take on. Defragmenting the registry involves significant risk if there is a failure and that is why Auslogics BoostSpeed 5 comes with a Rescue Center, which can literally allow you to backup the changes that have been made within the program. The program will even automatically create these restore points before adjusting your system for perfect fine tuning.

If the Disk and Registry Maintenance options weren't enough, Auslogics BoostSpeed 5 comes with in-depth ways to determine and modify your System Status and Privacy. If that weren't enough, the System Tweaks area allows you to optimize your Windows services around how you use your computer. This can be so useful in a work environment, as most system services continue running unabated, even when they will never be used!

Control over startup items and installed software has never been easier. Needless duplicate files found on a system can be deleted and disks can be explored to discover what is eating up all of that storage space. The System tweaks area is where Auslogics BoostSpeed really shines. It contains management options for the User Interface, Start Menu, Taskbar, Windows Explorer, System Security, Startup and Shutdown, System, Internet Explorer, Microsoft Office, and numerous additional Software Tweaks.

"Hi, I’m Jessica Dolcourt from CNET Download and this is a first look at Auslogics BoostSpeed. This is a top rated program that attempts to defrag, tweak, and otherwise optimize the computer where its most likely to get bogged down. Looking at the clean launch interface, you might never guess that there are 18 tools bundled into one app. The main pane is dominated by shortcuts for testing the health of the system. One Button Checkup will scan for issues and attempt to fix them. For instance, Disk Cleaner’s job is to find and remove junk files. With most scans you run, you’ll have the opportunity to take a closer look at the files, and to back them up before you change anything. Since the goal of the program is to optimize performance, BoostSpeed often frames problems in terms of how much space you would free if you deleted the loose files. On the left, the system tools are organized by activity: Computer, Cleanup, Optimization, Privacy, Settings, and so on. When you click the task category, you’ll see the available tools and a brief description of what they do. Clicking the tools launches it in a separate window, so that you can return to this main interface at any time. Most tools are easy to work their way around, and most changes can be undone in Auslogics Rescue Center, which you can get to from individual tool interfaces or from the settings on the BoostSpeed panel interface. In the Rescue Center, you’ll see a list of the changes you’ve made. You’ll be able to see full details for each entry and view archive backups as well. Which system files BoostSpeed will back up, and which it will leave alone, are things you can specify in the program settings, under the tab that says Rescue Center. We’re fans of Auslogics BoostSpeed for its comprehensive system maintenance and nicely packaged interface. Some of the app’s component parts are offered as stand-alone freeware products, such as the Disk Defrag…" - Courtesy CNET Review of Auslogics BoostSpeed

Under User Interface:
Disable AeroMake menu bars and window frames opaque instead of translucentDo not animate windows when minimizing and maximizingSlow the window animations when holding Shift keyDisable 3D Window SwitchingAdd context menu to activate Flip 3DTurn off Aero PeekTurn off Aero SnapTurn off Aero Shake
Under Visual Effects:
Hide window contents while draggingDo not drop shadows under icons on the desktopDo not use translucent selection rectangleShow Windows version in the desktop bottom right cornerSelect how you want the arrows displayed on shortcuts
Under Animation:
Do not allow window animationDo not use smooth scrolling for list boxesDo not animate drop-down listsSelect tooltip animation types
Menu:
Do not use menu fading animation effectsHide shadows under menusHide underlined letters for keybaord navigation until ALT is pressedMenu animation effects optionsDelay before displaying submenus (in milliseconds!)Full font smoothing optionsExtended ClearType and Standard font smoothing options
Start Menu:
Hide "Log Off" from the Start MenuHide the "Run itemHide "Set Program Access And Defaults" ("Default Programs" in Vista)Hide the "Help and Support" itemHide the "All Programs" menuHide "Administrative Tools"Hide the list of frequently used programsHide the list of pinned programsHide the "See more results" link
Under Folder options determine whether to hide individual items, show them as a link, or show them as a menu easily

Effects:
Do not highlight recently installed programsDo not show partially installed programs in grayDo not sort the "All Programs" menu by nameDisable the context menu and drag itemsDisable the "Start" button tooltipExpand menu when you hover the mouse pointer over an itemEnable small icons in the Start menu
Taskbar:
Show notification areaDo not display tooltips in the notification areaDo not hide unused icons in the notification areaDo not display the network activity icon in the notification areaDo not display the sound settings icon in the notification areaDo not display the battery icon in the notifications areaAuto-hide taskbarDo not slide taskbar buttonsAllow moving or rearranging taskbar itemsGroup similar buttons: Do not group, Group when full, Always group and hide tagsButtons: Configure advanced settings for taskbar application buttons
Explorer:
Show hidden filesShow file extensionsuse Windows classic foldersDisplay checkboxes to help select multiple filesAlways show the menu bar in Windows ExplorerDisable file and folder pop-up descriptionsDisplay folder size in the folder tooltip
Thumbnails:
Disable thumbnail cache creationDo not display thumbnails in network foldersThumbnail quality - 0-100%Thumbnail size in pixelsShow address bar folder path autocompleteShow address bar folder path autosuggestShow address bar maximized as a drop-down listInclude variable "PATH" into search pathDisable automatic replacement of a blackslash to a forward slash
Context Menu:
Show "Open Command Prompt"Show "Send To"Show "Copy to Folder..."Show "Move to Folder..."Show "Run as administrator"Show "Take ownership"Show "Search..."
Options:
Restore open Explorer windows when you restartDisable CD burning functions in Windows ExplorerRun Desktop and Explorer tasks as seperate processesRun each Explorer window as a seperate processAutomatically restart the shell if a shell error occursDisable the option to search the Internet when you open a file with unknown extension
Explorer items:
Display encrypted and compressed files and folders in a different colorDrive letter is displayed after disk labelDrive letter is displayed before disk labelDrive letter is displayed before disk label for network driveDrive letter is not displayed!
Autoplay:

Disable autorun for:
Removable drives (Floppy, flash-drive, etc)Non-removable drives (hard disk, etc)Optical disk drives (CD, DVD, etc)Temporary memory disk (RAM-disk)Network drivesUnknown drive types
Command Prompt:
Enable advanced modeEnable delayed expansion of environmental variablesEnable quick editingFile names autocomplete hotkeyFolder names autocomplete hotkey
System Security:
Disable User Acount ControlSet all UAC options including advanced options only found in registry
Privacy Policy:
Wipe page file on computer shutdownClear the "Recent documents" list on logoffDo not create the "Recent Documents" listDo not store your logon password on the diskDisable hidden sharesDisable user trackingEnable encrypt/decrypt options in ExplorerDisable Faster User Switching
For anonymous users:
Access is allowed with the default settingsTransfer of accounts and SAM names is prohibitedAccess is denied if permits are not specified
Windows Defender:
Disable Windows DefenderDisable heuristic scanningDisable archive scansDisable removable media scansDisable e-mail scansDisable real-time protectionDisable real-time protection promptsDisable downloads checkupDisable executable files checkupDisable definition updates through alternate download locationsCheck for new signatures before scheduled scansDo not log unknown detectionsDo not log known good detections
Startup and Shutdown:
Disable Windows startup soundDisable parsing AUTOEXEC.BATDisplay information about previous logons during user logonDisable Ctrl-Alt-Del before logonRun logon scripts simultaneouslyOptimize system files placement on the diskSpecify time to wait before running Check Disk (chkdsK) in seconds
Event Logging:
Do not log any eventsLog standard events onlyLog all startup and shutdown events
Legal Notice:
Write any legal notice you want during startup of Microsoft Windows
Automatic login:
Use autologin and set credentials, including username, password, and domain
System:

OEM Info:

Configure Windows OEM attributes, such as the manufacturer's logo and support information that appears in the System Properties window.

This includes:
ManufacturerModelSupport URLWorking HoursPhone120x120 pixel logo
Application Start:
Disable "Program Compatibility Assistant"Disable "Program Compatibility Wizard"Disable running 16-bit applicationsRun 16-bit programs as a separate processAdd checkbox "Run in seperate memory space" for 16-bit applications
Error Handling:
Disable sound when errors occurAutomatic restart in case of a critical errorSend error reportsShow error notification in windowDon't save reports on your computerDon't send additional information in a reportDon't write error information into system log
If an error occurs:
Ask user consent to send a reportAutomatically include only basic information in the reportAutomatically include all but personal data in the reportAutomatically include all data in the report
Internet Explorer:

Interface:
Disable visual-styled controls in Internet Explorer pagesDisable page transitionsDisable Clear Type fontsDisable smooth scrollingDisable autoamtic updatesAlways show menusDo not show extended error messagesDo not show the welcome text for new opened tabsDo not show warning messages when closing tabsDo not send bug reports via the InternetAlways ask before downloading filesPlace the menu above the address bar
Behavior:
Let Internet Explorer decide how pop-ups should openAlways open pop-ups in a new windowAlways open pop-ups in a new tab
Specify how Internet Explorer displays a web page when it's launched from another program:
Opens in a new windowOpens in a new tab in the current windowOpens in the current tab or window
Connections
Speed up web browsing in IE by using more concurrent Internet connectionsIncludes anywhere from 1-20 connections (Default is 4)
Options:
Default file download directoryHome PageCaption string that is displayed after the page title
Microsoft Office:
Do not track document editing timeBlock updates from the Office Update SiteDisable Customer Experience Improvement programDisable error reportingDisable logging Microsoft Office activityDisable Office DiagnosticsDisable clipboard dialog boxPrevent Office Help from resizing the application window
Microsoft Word:
Do not check spelling as you typeDo not check grammar as you typeDo not use background printingDo not auto-save background printingDo not auto-save documents in the backgroundDo not use translucent selectionDo not check if MS Word is the default HTML editor
Microsoft Excel:
Show Formula bar in Full ViewCache spreadsheetsCache PivotTable reportsUndo steps: Set from 0 to 100
Software tweaks (The ones we can see so far)

Skype:
Disable file transferDisable loading language filesDisable publishing Skype status on the WebDisable Skype Public APIDisable checking for updatesDisable listening for TCP connectionsDisable UDP communications
Windows Media Player
Disable auto-updatesDisable automatic codec downloadsDisable Windows Media Digital Rights Management (DRM)Disable video smoothingDisable CD and DVD Media information retrievalDisable music file media information retrievalDisable media file sharingDisable script handling in media filesHide the "Privacy" tab in the settingsHide the "Security" tab in the settingsHide the "Network" tab in the settings
Adobe Reader:
Disable splash screenDisplay PDF in the browser windowDisable Purchase Acrobat item in the menu
Firefox:
Disable link prefetchingDo not reduce memory when minimizedDo not download favorite icons (favicons)Disable blinking elementsForce frames to be reesizableUse old style for opening tabsShow all images / Block all images / Load images from the requird site only and block images from othersClose Tab Button full range of optionsHow long Firefox waits for the web page data before it displays the page (From 0 to 1 sec)
System Information includes everything:
OverviewGeneralHardwareCPUMotherbaordMemory ModulesVideoStorageIO DevicesInput DevicesModemsNetwork AdaptersResourcesProblem DevicesOperating SystemProgramsNetworkApplication ErrorsDevice ManagerMemory UsagePerformance
Tasks show Applications, processes, services, and locked files. You can unlock locked files, change the status of services, end processes, and modify application data.

Auslogics Disk Explorer will show what folders are taking up the most space and allow you to delete empty folders on your system.

File Recovery allows you to undelete files.

Speed Up Internet includes:
Automatic tuningAuto HeuristicsDefault TTLGlobal Max TCP WindowMax MTUTCP Window SizeMax Connections Per 1_0 ServerMax Simultaneous HTTP ConnectionsFirefox Max ConnectionsFirefix Max Connections Per Server
TCP/IP
1323 OptsACK FrequencyARP Cache LifeARP Cache Min Reference LifeARP Cache SizeAuto HeuristicsAuto TuningCongestion ControlDefault TTLDel ACK TicksDisable Task OffloadECN CapabilityEnable PMTU BH DetectEnable PMTU DiscoveryFin Wait DelayGlobal Max TCP Window SizeInitial RTTIPv6 over IPv4Keep Alive InternalKeep Alive TimeMax Connect RetriesMax Data RetransmissionsMax Dup ACKsMax MTUNum ConnectionsReceive-side ScalingSACK EnabledTCP Window SizeSYN Attack ProtectTimed Wait DelayUse RFC1122 Urgent Pointer
Winsock:
Default Receive WindowDefault Send WindowLarge Buffer SizeMedium Buffer SizeNon Blocking Send Special bufferingSmall Buffer SizeTransmit Worker
Workstation:
Request Buffer SizeUse Raw ReadUse Raw WriteUse Write Raw Data
Dns Cache:
Adapter Timeout TimeHash Table Bucket SizeHash Table SizeMax Entry TTL LimitMax SOA Entry TTL LimitNegative SOA TimeNegative TimeNet Failure Time
Internet Explorer:
DNS Cache EnabledDNS Cache TimeoutKeepAlive TimeoutMax Connections Per 1_0 ServerMax Connections Per ServerReceive TimeoutServer Info TimeoutSocket Receive Buffer LengthSocket Send Buffer LengthTCP Autotuning
Firefox:
Disable IPv6DNS Cache EntriesDNS Cache ExpirationHTTP Connect TimeoutKeepAlive TimeoutMax ConnectionsMax Connections Per ServerMax Persistent Connections Per ServerMax Persistent Connections Per ProxyPipeliningPipelining Max RequestsPrefetch NextProxy PipeliningUse KeepAliveUsing Proxy KeepAlive
(Auto-optimization is based on Over 1Mbps / 1Mbps or lower (default that Windows assumes) / or 128kbps or lower)

The built-in System Advisor determines (THESE ARE JUST SOME):
Can the Internet connection be optimized?Is the registry fragmented?Can Windows shutdown be sped up?Can incorrect drivers be updated? (It updates them in Auslogics Device Manager)
Quick Tasks allow you to:
Erase browser historyErase Windows historyCleanupt emporary filesOptimize memory
Privacy allows you to shred files and wippe entire disks.

Let's check that one again:
Disk MaintenanceFree Up SpaceRemove DuplicatesExplore diskDisk cleanupDisk defragmentDisk repairSoftware ControlSystem TweaksService OptimizationDisaster RecoveryFile RecoveryRescue CenterRegistry MaintenanceRegistry RepairRegistry DefragmentSystem StatusSystem InformationSystem TasksSystem ServicesLocked FilesComputer PrivacyErase Computer HistoryShred FilesWipe disksSpeed Up InternetInternet OptimizationMemory Optimization
It is quite probable that Auslogics BoostSpeed is the best program on the market for system repair and optimization EVER. Even if you don't know how to use the options listed above, that is why this program is great. It really DOES it for you. It really does repair your registry, with money behind it that went into big time research and development.

Their previous freeware products have been used regularly by IT professionals, but this product includes absolutely everything. There is nothing missing in this program, and updates are absolutely frequent. It is the one application I would recommend to every member of Windows7Forums.com without hesitation. Even if you do not know what these settings mean, this program will optimize and repair your system without any doubt. Today, there are so many programs that "claim" to do this and do that. When we saw Auslogics offering a commercial solution I had to start offering it on my website after I saw what it could do. I had to make a video about it. I had to find a way to provide a discount to members.

I have recommended it to my mother, my grandparents, and I will bring it up to a client I am currently working with tomorrow who is asking for Windows XP. This is the program that you need to automatically manage your system and keep it up-to-date, speedy, and performing in top condition.

Windows 7 Forums Rating: 10/10 Stars

Don't take my word for it. CNET gave them 5/5 stars too!

Watch our YouTube video for an exclusive discount offer.