Eddie Amos launches the Microsoft GISV Team Blog
07 August 07 08:36 PM | NagiBabu | 1 Comments   

External blogging inside Microsoft is a ritual, a great channel for us to reach out to our partners and customers on various things latest going on at Microsoft.  If you're reading this posting, you probably are already aware of how various Microsoft divisions are reaching out to our end-users via blogs. 

As of a few minutes ago, Eddie Amos, General Manager (of our), Microsoft Global ISV team, has launched our team's blog site. The objective of this site is to reach out to our partners, developers and customers community, and provide corporate guidance, latest updates on various Microsoft partner focussed initiatives; this includes mission critical events such as our (now) annual, Platform Strategy Review (PSR), Partner 101, How to Partner with Microsoft, etc.  And, most importantly, how can we help our customers lower TCO, and increase ROI and help increase their revenues.

It is a vehicle for us to establishing a  communication channel with our communities - on a regular basis.

Please do visit the blog (above link). If you're a Microsoft Partner or are looking to becoming a Microsoft Partner, or have questions on why you must become a Microsoft Partner, you should visit our blog. And, please do ping me directly via my blog, tell us about you, your interests, what is it that you want us to work with you on and how we can jointly help our mutual customers, whatever...  provide your insight. Our team is greatly focussed on making our customers successful - if you're a partner, we want to hear from you. Depending on what you're seeking, I may be able to help answer or will point you to Eddie.

Microsoft-GISV Team Rocks!

ciao

Nagi

 

[The WhereAmI Project]
08 July 07 07:48 AM | NagiBabu | 3 Comments   

The WhereAmI Project  (formely The "WhereIs" Project) is all about GPS Location of oneself. It is a mechanism for me to transmit my GPS location to a central server and for my family, friends and colleagues to figure out where in the world I'm at, - "Where Is <nagi>". The project is in BETA- and, currently just me in the dogfooding chain.

I must note to the reader, that there's a BIG DISABLE button in my transmission end point application where I can choose to NOT transmit my position.You know that whole "Privacy" :)

So, how does this work?
There are essentially THREE pieces of moving parts. ONE, an application that I will have running on my GPS ENABLED Mobile device (Windows Pocket PC Phone) or a similar equipped Laptop that has a pre-established Internet Connection. TWO, a Web Service that is hosted on my server at home that gets call by the #ONE with my GPS data.  And, THREE, an ASP.NET AJAX Enabled web page hosting Microsoft Virtual Earth Mapping Control that knows how to plot my position on the world map.

If you have a Laptop or a Pocket PC Phone that is internet connection aware and has GPS data stream, you're all set to go to leverage this project.

If you're interested in giving this a shot, you will need to ping me to get a PROFILE ID.  Once you have that, you can download either the Laptop rev or the Pocket PC Phone rev of the application and install it. Configure the application with the PROFILE ID I provide you with. And, as long as you have a GPS receiver connectivity to either of these (either via built-in or via Bluetooth, or direct cabled), you are set to go.

As indicated earlier, I am looking forward to adding more features to this. A couple of areas come to mind;  a) Adding a Windows-Vista Sidebar Gadget that allows one to keep track of where his/her buddies/family is at. b) Exposing #THREE (above) via Microsoft-SilverLight for enriched UI and c) Enhanced "InfoBox" UI for "as of date.time" weather, POI info, news info, etc; are among a few.

Click on the screen shot image here to jump to the web page that plots my location. 

 

ciao

Nagi

 

 

 

 

 

The new Microsoft Office Interactive Developer Map is NOW AVAILABLE!
31 May 07 06:33 AM | NagiBabu | 0 Comments   

The Microsoft Office Interactive Developer Map is a Windows Presentation Foundation (WPF) application that helps developers visualize the different programs, servers, services, and tools that will help them build solutions. It allows them to drill down to each product and technology and learn about new features, objects, Web services, namespaces, and schemas required to extend Microsoft Office and build custom Office Business Applications (OBAs).

Project Overview

Some time ago, we published two Office development posters as downloads and they have been quite successful. October 2006 we released a new poster:  the “Developer Map for the 2007 Microsoft Office system” and PMG distributes printed copies of the poster at different developer conferences and events.

The Developer Map for the 2007 Microsoft Office system helps developers visualize the different programs, servers, services and tools that will help them build solutions. You can drill down to each product and technology and learn about new features, objects, Web services, namespaces and schemas required to extend Office. There are more than 50 persons who worked to make this possible with the motivation of building a cool tool to evangelize Office. Based on the fact that Office 2007 is more than you think, we thought this was a great way to help developers understand the bigger picture and learn how Office products and technologies relate to each other.

We wanted to take the poster to the next level, and with the help from LUX Worldwide, we built an online version of a developer poster. We know our customers are eager to get more than a static PDF with tons of information, so we built an online version of this map that provides links to MSDN portal pages, technical articles, and key pointers to SDK and reference documentation topics.

Goals of the Map

·         Help developers to better understand Office as a development platform

·         Allow users to drill-down to different Office products and technologies

·         Help promote key content items and portal pages on MSDN

·         Show developers how to find content in the MSDN Library (Office Solutions Development node)

·         Build a better sense of product specific developer communities

·         Provide an interactive experience using rich media (WPF)

How it Works

Each time you drill down to a product or technology we provide links to:

1.       Key namespace documentation on MSDN

2.       Resources: Product portals on MSDN and Office Online + Key pointers to MSDN Library node, technical articles and Visual How-Tos.

3.       Features: Most relevant developer features

4.       Reference documentation: Key objects or Web services

5.       Community resources: MSDN Community portal, product MVPs, and product team blog

6.       Latest News:  RSS feed with latest news about a product

 

ciao

Nagi

Professional Developer's Conference (PDC) 2007 - will be rescheduled
24 May 07 03:15 PM | NagiBabu | 0 Comments   

On Thursday, May 24, Microsoft announced that it will reschedule this fall’s Professional Developers Conference (PDC) 2007, originally planned for October 2-5, 2007 in Los Angeles.

 

The PDC is the definitive developer event focused on the future of the Microsoft platform and is designed to offer developers valuable insight into new and future Microsoft technologies.  Given that major platform deliverables, such as Windows Server 2008, SQL Server codenamed “Katmai”, Visual Studio codenamed “Orcas” and Silverlight, will already be in developers’ hands, the company will reschedule the PDC in order to showcase new and future platform deliverables.

 

Microsoft will have a presence at several events this fall to provide deep technical training for developers on the latest wave of software technologies, including at:

VSLive! in New York – September 16-19, 2007

VSLive! in Las Vegas – October 16-19, 2007

DevConnections in Las Vegas – November 5-8, 2007

TechEd Developer in Barcelona, Spain – November 5-9, 2007

 

 

ciao

Nagi

 

 

 

 

 

 

 

 

 

 

 

 

 

Microsoft partners with the Clinton Foundation initiating Climate Preservation program.
22 May 07 04:09 AM | NagiBabu | 0 Comments   

On May 17th 2007, a very important milestone took place between Microsoft and the Clinton Foundation. We announced a partnership with the Clinton Foundation to help the world’s 40 largest cities reduce their greenhouse gas emissions.  This is a KEY step forward in our effort to demonstrate the power of software in enabling solutions to pressing societal problems, in this case the issue of climate change and environmental sustainability. 

 

In conjunction with software company Infosys, Microsoft will build a showcase Software + Services (S+S) solution which the cities will use to inventory their current emissions, run “what-if scenarios” to determine which programs might yield the most reductions, track progress of those programs, and share best practices with counterparts in other cities.   

 

The announcement of this important partnership was made by the former President Clinton at the Large Cities Climate Summit in NYC, New York, which was hosted by Mayor Michael Bloomberg and was attended by more than 45 Mayors representing over 400 million citizens.  These cities are working together to accelerate action on the issue of climate change, with focused programs in the areas of Energy Efficiency, Waste Management, Water Supply and Purification, Transportation etc...   The identified cities desperately need a common set of tools to help in this effort and are very excited about our joint effort with the President Clinton Foundation.  By being involved at the early stage, Microsoft will be trusted advisors in that discussion or taking this important project from Inception through to Completion.    The following provide coverage of this news to date:

 

Microsoft, Clinton Target City Emissions, Associated Press

Microsoft, Clinton Foundation to Build Carbon Emissions Monitor, Bloomberg

Microsoft, Clinton group form green partnership, Reuters

 

This project is being led by Michael Rawding (Vice President, Microsoft), Robert Bernard (General Manager, Microsoft) and Jean Paoli (General Manager, Microsoft) and with support from Craig Mundie’s (Chief Research and Strategy Officer, Microsoft) organization.   In addition to the software to be built by Microsoft, we are looking to build a consortium of private sector partners to insure that the solution will be sustained and enhanced in an ongoing fashion.  

 

Rob Bernard and other executives believe that this project will seed the standards and guidelines for 1,000’s of cities around the world to manage their commitment to reduce greenhouse gas emissions. And, that this is a significant step in showing both technical leadership in providing an OBA and S+S application to the world’s major cities, as well as an opportunity for us to show thought leadership on this extremely important initiative. 

 

During his speech (can be heard from here) the former President made a compelling case for the powerful need for companies and governments to invest in this global challenge. Both Rob Bernard and Michael Rawding attended this eventful Presidential speech. The President had asked the crowd a simple question that If we do nothing different tomorrow than what we have been doing up until today, do we think that 25 years or 50 years from now that our children and grandchildren would be able to enjoy the quality of life that we have been able to enjoy?  He also noted that in the past 100 years, we have seen more species extinction than at any time in the past 500 million years. He drew on historic data, the uniqueness of the human species on earth and in the universe, and our obligation as stewards for the globe. His speech (as Rob puts it), “was a powerful case for change”.

 

As the President appealed to the crowd of Mayors, large corporate CEO’s, governmental agencies and private companies to think about the importance of the issue of climate change, he announced that Microsoft would be partnering with the Clinton Foundation to help build out the software for the cities to use in helping monitor their pollution levels and progress.  A number of Mayor’s and CEO’s of large companies at the event expressed great enthusiasm and thanks for our involvement in this project. It makes us all at Microsoft feel extremely proud to hear that Microsoft received such a warm response.  There are huge inefficiencies in the way we build, manage and use buildings. We can all think of our own patterns of our home and office experiences to realize that there are many simple changes that we can make to reduce our overall energy use. 

 

For those who would like to read more about this event and the role that banks, construction partners and Mayors of many of the world’s largest cities are doing, please visit the Clinton Foundation site and C40Cities.org.

 

At Microsoft, we are all very excited about this very important initiative and milestone. We are looking forward by this close partnership with the Clinton Foundation, to help bring a change to the betterment of the Climatic quality of our planet.

 

ciao

Nagi

 

Microsoft at the [CA World 2007], Las Vegas, Nevada
14 May 07 07:05 PM | NagiBabu | 1 Comments   

I normally do not single out my Global ISVs and blog about them and their solutions on top of Microsoft Platform or about their conferences and events, All of my and Microsoft Global ISVs are important to me and Microsoft. They all add ton of value to our platform and bring Enterprise solutions to our mutual customers.

In this blog, I am going to sligjhtly deviate from my natural behavioral patterns and talk about a conference that took place recently and cover a few exciting things in and around that event.

Last month April 22-27 2007, one of my and Microsoft's Global ISVs, CA (formerly Computer Associates), held their largest Conferences called, "CA World 2007" in Las Vegas, Nevada. "CA World" boasts over 7,000 attendees spanning across CxOs, IT-Pros, Architects, Developers and Analysts. And, of course there's tons of Press folks "drinking IT through the fire-hose". It was a very important event to CA and all of their partners and customers. It was a very important event for us, Microsoft.

Microsoft had a HUGE presence in "CA World 2007" - a much bigger presence than the last year's "CA World". We had a large booth with theatre style floor and staging; where we delivered content on our latest technologies and platforms. Such as Exchange Server 2007, Windows Vista, upcoming Windows Server codenamed "Longhorn", and many more. And covered extensively on how CA are building solutions on top of our platforms to bringing strong robust Enterprise IT solutions to our mutual customers.

There were many highlights of this event. Let me start talking about them a bit and describe how partners such as CA are very important to Microsoft and why we love our partners.

As with any Microsoft (developer focused) conferences such as PDC, TechEd, etc., "CA World 2007" had a few pre-conference sessions. And, of couse Microsoft had a few speakers representing a couple of these pre-con sessions. These sessions included, "Windows-PowerShell" and "Web Application Development on Windows Platform and Technologies". Both of these events were very well received with great post-sessions survey results. Each of these sessions was 3.5 hrs long - not as long as Microsoft Pre-Con sessions (which usually last all day and they close the doors and you can't really leave - just kidding).

One of the other highlights of the "CA World 2007" was all the action at the Microsoft booth. We had Microsoft speakers speak on our latest platforms and technologies covering the latest-and-greatest stuff so the customers could get it all in one-single half-hour slots per technology. And, this was the best part, we handed out FREE Full version of Microsoft-Office 2007 to those who attended any of these sessions. This was an awesome experience, as we got to give away our coolest and latest Office product to our customers - just for sitting in on these sessions and listening to the latest technology dump. It was a lot of fun. We had a HUGE turn out - they came in to both listen in and get their free copy of Office 2007. While a session would go on, the next line of of audience would form. It was simply packed up. I was very impressed by the amount of interest our customers have to want to use our latest products. OK, how much did it cost to give away these free Microsoft-Office 2007 full version DVDs ? - without giving away the real figure - I will say this, "A LOT!". It was well worth it to get our latest products out to our customers free of cost to them - thanks to our Business Development Group Manager, this was a grand success and was a very customer impactful event. He knows how to find the funds for the right reason.

I am saving this for the last - this was one of the best highlights of "CA World 2007". Over the last 4 years or so, Microsoft has been working heavily on a new model of Infrastructure Maturity model under the Microsoft brand name titled, "Dynamic Systems Initiative - DSI". This area is now evolved and matured enough to talk about to our customers. One of the events of "CA World 2007" was a very closed door event titled, "Business Management Symposium - BMS". This one day long event is specifically designed for customers' CxO level audience and was limited only to a total of 250 of them. In addition to the CxO level audience, there were 200 more Analysts and Press staff in the room. The BMS event was a very important corner-stone of the "CA World 2007" event. The event kicked off with a speech by John Swainson, CEO and President of CA. Toward the end of his speech, he introduced our Microsoft Division's, General Manager, Eddie Amos. Eddie's Keynote session was titled, "Microsoft Platform and Technology and Futures Roadmap". The essence of Eddie's keynote was about giving the audience the "state-of-the-union-address" of Microsoft Platforms and Technologies and how those technologies help our customers in strengthening their Enterprise IT world; and, how our platforms and our partners' solutons help our customers in increasing the ROI with lowered TCO. Eddie in his keynote, covered many areas. One of the areas he presented was around, "Microsoft Promises to our Customers". About 18months ago, Microsoft made a few promises to our customers - a set of promises that would deliver solutions which will help them cutting down costs of owning their Enterpise IT. He spoke about where Microsoft is today on delivering those promises. It was great to deliver that update to these audience. In additon to "where we're today with those promises", Eddie also spoke about, "Where Microsoft is going in the next 12-18 months" and "how Microsoft and partners' solutions will help further our customers Enterprise IT". He spoke about our DSI; covering the threee pillars of DSI - Virtualized Infrastructure, Design for Operations, and, Knowledge-driven Management - the three pillars of DSI. He thereafter, talked about the Microsoft Infrastructure Optimization (IO) Model. If you have been catching up on the latest Microsoft Vision during the last year or so, you would very well recognize the "IO Model". IO model is a roadmap of how our customers' Enterprise IT is maturing and evolving as THEIR demands are maturing and evolving - "Dynamic" in nature. The IO model prescribes a 4 level maturity model. Basic, Standardized, Rationalized, and, Dynamic. Basic being the first level and Dynamic being the most "matured" level of their IT environment. So, as a company begins its IT journey, they start out in the Basic level, equip their IT with the required tools, solutions. And, as they start growing and evolving and servicing their customers, their requirements change and with the change, comes the need to evolve their IT enviroment and thus start to "mature" into the next levels of the IO Model. The idea is, that as they evolve, their IT becomes that much more "Dynamic" in nature, being in a position to respond to and deliver to their customers' demands and needs. Eddie's keynote delivered that key message and helped the audience understand how our platforms, technologies and our vision can help solve their IT demands and needs that are of "Dynamic" in nature. Eddie talked about how our partners and Microsoft work hand-in-hand to deliver valuable and tangible solutions to our customers. And, how they can benefit from the joint solutions. It was as full rounded keynote and I along with a couple of Microsoft staff, thoroughly enjoyed it.

Our customers, partners and the event audience as a whole enjoyed the "CA World 2007" event and it was a very successful event for all of us.

I am waiting on a few pictures and videos from "CA World 2007" - I  will update this entry with those once they become available to me.

ciao

Nagi

Microsoft Acquisition of Tellme Networks Will Bring the Power of Voice Technology to Everyday Life
14 May 07 02:47 PM | NagiBabu | 0 Comments   

Tellme Networks has officially joined the Microsoft family.

On May 3rd, Microsoft announced that it has completed its acquisition of Tellme, the Mountain View, Calif.-based provider of voice services for everyday life, including nationwide directory assistance, enterprise customer service and voice-enabled mobile search.

Tellme will operate as a wholly owned subsidiary of Microsoft from its Mountain View, Calif., offices. Tellme CEO, Mike McCue, is remaining Tellme’s senior leader. He and the amazing group of talented and creative employees will be joining the Microsoft Business Division.

As we announced in March, Tellme and Microsoft share a common vision around the limitless potential of voice as a way to find information, connect with people and enhance business processes, any time and from any device. We are already working closely with our customers and partners to make this vision a reality across many complementary areas including natural interfaces, unified communications and mobile search.

More details here

Nagi

Filed under:
Silverlight Resources
14 May 07 12:14 PM | NagiBabu | 1 Comments   

Silverlight Resources

bits & bytes

·         Get silverlight

·         Telerik RadControls – 3d virtual rooms using control based framework

·         DLR & IronPython           

·         Silverlight developer reference “poster”

·         Forums – installation, troubleshooting

·         Electric rain harmony (coming summer 2007) – flash to silverlight converter

·         Silverlight 1.0 Beta QuickStarts

·         Silverlight 1.1 Alpha QuickStarts

 

sites

·         Main Microsoft site

·         Community site

·         Mix conference

 

experiences & demos

·         Getting started with silverlight - Scott Guthrie demos how to build an app from scratch

·         "How Do I?" with Silverlight 1.0

·         "How Do I?" with Silverlight 1.1

·         Using Blend with Silverlight 1.0

·         Community gallery

·         Top 3 samples in community gallery

o    Silverlight Pad

o    Page Turn

o    Video Library

·         Beijing Olympics Use Silverlight

·         Channel 9 screencasts

·         Watch movie trailers & videos via Silverlight

·         How to do Rich media advertising - example using eyeblaster

 

blogs

·         Scott Guthrie – no intro needed

·         Jim Hugunin - chief architect of the DLR

·         Mike Harsh – silverlight team

·         Lutz Roeder – Expression Blend team

·         Delay  of silverlight airlines demo

·         Ironpython

 

tech talks

·          All recorded mix07 sessions

·         ScottGu’s mix keynote and great overview

·         ScottGu’s Channel9 interview

·         Building Rich Web Experiences using Silverlight and Javascript for Developers

·         Deep Dive on Silverlight Media Integration

·         Developing ASP.NET AJAX Controls with Silverlight

·         Creating and Delivering Rich Media and Video on the Web with Silverlight, Expression Studio, and Windows Server

·         Building Silverlight Applications using .NET (Part 1)

·         Building Silverlight Applications using .NET (Part 2) 

·         Extending the Browser Programming Model with Silverlight

·         Just Glue It! Ruby and the DLR in Silverlight

 

papers

·         Getting started whitepaper

·         Silverlight Architecture Overview

Filed under: ,
Are you on IIS 7.0 yet ? - Tell us about your site - IIS7OnTour.com
05 May 07 04:09 AM | NagiBabu | 0 Comments   

IIS7OnTour site is live. Is your website living on IIS 7.0? If so, tell us about it by registering it at iis7ontour.com. My site was recently upgraded and migrated over to IIS 7 and is registered there.  Go on, make your site visible on this blog.

more details on how to register, navigate the site, etc can be found here.

ciao

Nagi

 

 

 

 

 

 

 

 

 

Simple Speech Samples == S3
01 May 07 02:01 PM | NagiBabu | 0 Comments   

As I was saying in my sometime ago entry, Speech is taking center stage along side many other platforms at Microsoft. To help spread our speech technology in relation to developing with .Net 3.0, I have recently started a new project under my projects site, titled, "Simple Speech Samples" S3. The goal of this site is to provide simple to understand and stand alone samples to learn speech programming with .net 3.0.  The project has just been kicked off and my goal is to add samples as I plough thru.

The projects site can be found here

ciao

Nagi

Filed under: , ,
MS Robotics Studio (MSRS) 1.5 CTP May 2007 Released
01 May 07 01:38 PM | NagiBabu | 0 Comments   

Our MSRS team has just wrapped up the May CTP

 

A Letter from Tandy Trower, General Manager, Microsoft Robotics Group

Time to provide an update with information about the latest preview of our upcoming 1.5 release.

As noted in my last “Welcome” post, the 1.5 release includes not only general improvements and enhancements throughout the toolkit, but also support for Windows CE and Windows Mobile devices.

Full compilation of services for Microsoft Visual Programming Language – While not fully integrated yet, we want to give you an opportunity to try out the new support in VPL for compiling services. In 1.0 release of VPL, services you build run interpreted, but with this preview they can be compiled.

Visual Studio Templates for VB.Net and C# - Tired of having to run DSSNewService separately? Now from the Visual Studio IDE you can select templates to create VB.Net and C# service projects.

DSS binary serialization – We have added a new option for serialization of data that improves data transfer 2 to 4 times between nodes. For compatibility with existing applications you can still use HTTP and TCP serialization.

DSS user guide – You asked for it and we deliver it! A fresh new introduction and user guide for getting started with DSS.

Updated Soccer Simulation Package – Available separately, but concurrent with this release is the latest update to our Soccer Simulation competition. Tired of competing with wheeled robots? Want a new challenge? With this update we also announce the release of a new simulated robot player called RobuDog from Robosoft. To use this, install our latest CTP software, the Soccer Simulation update, and then go download Robosoft’s new model and services.

Updated Robot Sumo Simulation - Support for CE is certain to get a good workout at the upcoming MEDC 2007 robot sumo competition. But as mentioned in my update last month, even if you can’t come to this event, you can stage your competitions using our new Robot Sumo simulation, or try building your own sumo robots using the same components that the MEDC players.

Few useful links

http://msdn2.microsoft.com/robotics

http://msdn2.microsoft.com/en-us/robotics/bb432177.aspx

http://forums.microsoft.com/MSDN/default.aspx?ForumGroupID=383&SiteID=1

ciao

Nagi

Filed under: , ,
Windows Server [Longhorn] Beta 3 is out!!
28 April 07 05:10 AM | NagiBabu | 1 Comments   

This Thursday, April 26th 2007, Microsoft released the Beta 3 bits of the Windows Server codenamed "Longhorn' for public evaluation.  The following links provides a few resources for our partner and developer communities.  We are especially happy to announce also the resources for E-Learning.

Please download these bits, install them, Eval them and provide us your feedback.

Beta 3 Executive Chats and Webcasts


Please join us and help promote the upcoming Webcast and Executive Chat series on “What’s New in Windows Server “Longhorn” in May.

In the Webcast series, we will cover:

TechNet Webcast: What Is New in Windows Server "Longhorn" (Level 300)

TechNet Webcast: Overview of Server Manager  and PowerShell in Windows Server "Longhorn" (Level 300)

TechNet Webcast: Cluster Validation in Windows Server "Longhorn" (Level 300)  

TechNet Webcast: Internet Information Services 7.0 in Windows Server "Longhorn" (Level 300) 

TechNet Webcast: Windows Server "Longhorn": Advancing Network Security (Level 300) 

TechNet Webcast: Windows Server "Longhorn": Server Virtualization Solution Scenario (Level 300)

TechNet Webcast: Windows Server "Longhorn": Branch Office Solution Scenario (Level 300) 

TechNet Webcast: Windows Server "Longhorn": Centralizing Application Access with Terminal Services (Level 300)

For more details about these events, visit http://www.microsoft.com/windowsserver/longhorn/webcasts.mspx or contact Katherine Casey for more information.

 

Beta 3 – Free E-Learning


Microsoft Learning will be releasing four e-learning clinics on April 25 to coincide with the release of Beta 3. Each of these clinics provides two hours of self-paced, interactive, multimedia-based training that gives customers an introduction to the new and enhanced features of Windows Server “Longhorn”. And best of all, they’re free!

The following four clinics will be available at http://www.microsoft.com/learning/longhorn/:

·          Introducing Security and Policy Management in Microsoft® Windows Server® Codename "Longhorn" (Beta 3)

·          Introducing Branch Office Management in Microsoft® Windows Server® Codename "Longhorn" (Beta 3)

·          Introducing Centralized Application Access in Microsoft® Windows Server® Codename "Longhorn" (Beta 3)

·          Introducing Server Management in Microsoft® Windows Server® Codename "Longhorn" (Beta 3)

 

New Developer, Meet Server Webcast available – Transactional NTFS and WCF


In this Webcast, we will dive back into Transactional NTFS and look at how you can use it with WCF to build powerful transactional capabilities into a service-based system..

The Webcast can be found in one of the main tubes on the Intarw3b known as the ever-lovely Channel 9: http://channel9.msdn.com/ShowPost.aspx?PostID=296861.  

So sit back and enjoy this Webcast. For questions on Windows Server “Longhorn” Touchdown please contact your local ISV DE in DPE or Steve DiMarco.

 

ciao

Nagi

Implementing Constants in Cascading Style Sheets in ASP.Net 2.0 using HTTPHandlers
27 April 07 04:39 AM | NagiBabu | 0 Comments   

Implementing Constants in Cascading Style Sheets in ASP.Net 2.0 using HTTPHandlers

By Nagi Punyamurthula (nagibabu@microsoft.com)

 

Many times I have found myself messing with my CSS files where I usually have anywhere between 50-120 different elements and each with many attributes that define things like colors, fonts, etc.. Predominantly, elements’ attributes within my CSS files have repetitive values that follow a certain theme or style; that warrant that these values are applied across to many elements . If you're like me, you'd hate spending your time on the mundane task of tweaking these settings every time you decide to change the preferences. Many times, I find myself spending hours together figuring out my "new" preferences and then re-applying those to the many elements’ attributes in my CSS files. What a waste of time and resource!

As I was finalizing my photo blogging engine fstop (fstop.crosscity.com), I was all the motivated to finding a solution to this problem - to making the CSS Editor's life a bit easy and So, the "HTTP Handler to CSS” was born.

In this article, I will attempt to describe what is involved in creating your own CSS Handler so you have an understanding of what it is and how you can build one yourself. Of course, you have the full access to my source code by following the link provided later on in this article.

 

Why and What?

ASP.Net 2.0 provides some very powerful development tools and artifacts to help developers with building state-of-the-art web applications.  The CSS theming and skinning developer capabilities among the many, are out of the world features that make ASP.Net 2.0 a web developers’ best friend. As with many product cycles, a few features do not make it to the platform feature considerations.  CSS  Constants happens to be just one among those.

Imagine having the ability in your CSS file to define "constants"; You'd apply “values” to the constants. The attributes within the class names, IDs, will thereafter, 'reference' these constants (not the values, only the name of the constants).  Later on, when you decide to change your preferences, simply change the value of the constants, and you're all set to go. That would save me some serious time!

So how my constant declarations in my CSS will be recognized by my browser?

Now, that’s a very good question. This article is all about answering that and more. In a nutshell, at runtime, the CSSHandler that we’re going to build, will intercept calls to the CSS file, pick it up and process the constants and references to it and finally render a CSS content that looks like a regular CSS content.  In other words, our CSS Handler will replace all references to constants with the corresponding defined values.

 


 

Let’s get started

Here's a 50K foot plan:

1.      Build an HTTPHandler to intercept .CSS extension

2.      Our handler will look for the custom block of content within the CSS – let’s call it “Constants Definitions Region” (CDR).  We will determine later on, what the syntax will be to defining these constants within this region.

3.      Our handler will look for the references to the constants and replaces those with the actual value that constant was assigned (in the CDR above).

4.      The processed CSS file content is rendered back to the calling client or browser

5.      To save the CPU from re-processing the same CSS file and to save the disk I/O, we will store the processed CSS file content into the Server Cache for later re-use. This will save the latency on subsequent calls to the CSS file and to the overall web pages rendering experience.  Once we complete our handler, we will enable it in our sample project by editing the web.config file.

 

Before we kick the pedals...

There's a link to my fully functioning example project at the very end of this article; please feel free to play with it, modify per your needs, or whatever you need to do with it. It is yours, it is free, It used to be mine alone thus far, now I’ll let you use it.

 

RESOURCES and TIPS

Before we start our project, I wanted to point out a couple of good resources that you might find useful. In our project, we will use a couple of Regular Expressions in our code. A few good resources exist today. These worked for me. They may or may not for you. But, here's my list of these resources:

·         A great online site dedicated to helping folks like us with understanding Regular Expressions : http://regexlib.com/. Has a great tool to test your Reg Exps.

·         A well written quick reference: Regular Expressions with .NET, by Dan Appleman (ISBN: B0000632ZU)

 

Now let’s dive into the details:

First things first. I briefly mentioned that our CSS file will contain a “special” block of content called, “Constant Definition Region” (CDR). CDR will contain a list of Constants and the assigned values. We are at a point where we will need to determine what the syntax is for this CDR.

1.      Create a default.css file using your favorite editor (I use Microsoft-Visual Studio 2005).

a.      Add the <CDR> tag to the top of the CSS file as follows:

 

<CDR>

      /* Define your constants here */

      BodyBGColor          :#696969;

      BodyFGColor          :#FFFFFF;

      DefaultFont          :verdana;

      DefaultFontSize      :7pt;

</CDR>

 

 

This section defines our constants and the assigned values . A couple of things to note here. The opening and closing <CDR> tags are important to enclose the CDR block. The constant name followed by a colon “:” and the assigning value. The constant name is not case sensitive, at least the one that we’re going to be building.

 

 

/* Body */

Body{

       background-color    : @BodyBGColor;

       color                : @BodyFGColor;

       margin-top           : 10px;

       margin-bottom        : 10px;

       padding              : 0px;

       text-align           : center;

       font-family          : @DefaultFont;

       font-size            : @DefaultFontSize;

}

 

b.     

 

 

 

 

 

 

 

 

 

 

 

 

 

Now that we have our CSS Constants defined as above, let’s add style to our Body by adding the follow. Note how we’re referencing the constants in place of the actual values to the attributes.  Note the “@” symbol to prefix the constant name.

 This is going to be our syntax of 1) defining the CDR and 2) referencing those constants in the remaining of the CSS element/attributes.

 Our default.css file is now ready to be processed. Now let’s jump on to step 2 in our 50K foot plan.

 

2.      In this step, we will be building an ASP.Net 2.0 HttpHandler class that knows how to intercept calls to our default.css and how to process it. Now that our default.css is available with its <CDR> block, we’re now ready to create our CSS Handler that will do just that.

a.      Open Visual Studio 2005 and add a new class called, "CSSHandler.cs”

Since we need to intercept calls to and process our default.css  file, we need to implement what is called an “HttpHandler”.

 

 

What is an “Handler” and What is an “HttpHandler” ?

ASP.Net 2.0 exposes a mechanism for developers to build “handlers” to be able to implement their implementation of responses to resources with filename extensions. For example, suppose when you call a “default.aspx”; the call is handled by the ASP.Net 2.0’s ASPNet Worker or the ASPNet_ISAPI.dll. The call to the default.aspx is intercepted by this dll, processed and output is produced and rendered by it back to the calling client or the browser that initiated the call.

 

Note: if you want to view where this mapping is registered, open up the properties dialog in your IIS server for a web site, click on the “Home Directory” tab, click on the “Configuration” button and then onto the “Mappings” tab on the resulting configuration dialog.

 

ASP.Net 2.0, by default, does not have a mapping to process files with “.CSS”. Which means, by default, when a browser or a client calls for “default.CSS”, ASP.Net simply hands out the content “AS IS” back to the caller. No special processing is done before handing out the content to the caller.

 

In our “custom” default.css’ case however, we want to intercept that call so that we can process and treat the “CDR” segment and render the content so that all constants references are replaced with the constant-values.  To do exactly that, we need to build an “HttpHandler” based class that is mapped to handle “.CSS” files.

 

Within the CSSHandler.cs, add the following to ensure you’re implementing the IHttpHandler Interface. Doing this will be one of the steps to enable your class to intercept calls to the “.CSS” GET requests.

 

As you add the following, pay extra attention to the Namespace; we will come back to that later on in this article.

/* Pay extra attention to this namespace. We will come back to this later. */

namespace Utils{

 

  public class CSSHandler : IHttpHandler    {

   // ::IsReusable is not applicable to our application. However, we

   // will do due diligence to our coding best practices.

   public bool IsReusable{

       get { return true; }

   }

 

  // ::ProcessRequest() is the work-horse of our handler.

  // He gets called everytime someone or page or server component

  // requests

  // the default.css file via HTTP GET request

  public void ProcessRequest(System.Web.HttpContext context) {

  }

 

}

 

The code block above is pretty much a standard "template" for all HTTPHandlers. The next steps will go into more specific code blocks that mean something to our CSS Handler.

 

Every HTTPHandler needs a ::ProcessRequest()

The ::ProcessRequest() method will get called by asp.net worker process every time, a HTTP GET request for “.CSS” file comes in.  It is the responsibility of this method to respond to that request, do whatever needs to be done and then respond back to the request with the content. In our case the result of the processed default.css file.

Note: We keep using the terms, "processed” default.css. It is the "final" content of the default.css file that has the replaced constant references with the actual value.

In the ::ProcessRequest() we will need to make the required additions to process the “default.css” file.  Let’s add the following code to the ::ProcessRequest() method.

 

 

try{

  // Get the fullpath to the default.css file from the REQUEST that is coming in.

  string __SourceCSSFile = context.Request.PhysicalPath;

 

  // Step : 2.1

  // To be able to process this css file, it must first exist in the file system.

  // We must ensure that it does before proceeding. If does not exist, return - we can't do much.

  if (!File.Exists(__SourceCSSFile))

    // we don’t have a a physical copy of the requested “.css” file.

    // we will simply return;

    return;

 

 // just a holder to hold our content in this proc

 string __ProcessedContent = "";

 

 

 // Per our 50K foot plan above, we are going to store the processed CSS file content in

 // the Cache. Cache (like Session) stores stuff in the "name:value" pairs.

 // To store our CSS content, we will use, "CSS_CONTENT" for name.

 const string __CACHE_TOKEN_NAME = "CSS_CONTENT";

 

 // Now check if we have stuff in the cache that we already processed.

 //

 // And, if we do, we will extract that content from the cache and spit that out as our result.

 // Step : 2.2

 if (context.Cache[__CACHE_TOKEN_NAME] != null){

   __ProcessedContent = context.Cache[__CACHE_TOKEN_NAME].ToString();

 }

 else{

   // Read the css file using the full path into the variable we defined above

   StreamReader __StreamReader = new StreamReader(__SourceCSSFile);

   __ProcessedContent = __StreamReader.ReadToEnd();

   __StreamReader.Close();

 

   // Step: 2.2.1:

   // Remove comments

   __ProcessedContent = _RemoveComments(__ProcessedContent);

 

   // Steps: 2.2.2:

   __ProcessedContent =

          _SearchReplaceConstantsWithValues(

                 __ProcessedContent, __CACHE_TOKEN_NAME, __SourceCSSFile

          );

 

   // Steps: 2.2.3:

   _StickContentIntoCache(__ProcessedContent, __CACHE_TOKEN_NAME, __SourceCSSFile);

}

 

// Step: 2.3 (We will revisit this - see below):

context.Response.Write(__ProcessedContent);

} // </EO try { } block

 

// our try { } was successful

// If on the other hand, it failed, we will simply spit out the error in our response.

catch (Exception ex){

   context.Response.Write(ex.Message);

}

 

} // </EO ProcessRequest>

 

 

There are a few things going on in this above code block. Let’s take these one step at a time and try to describe what we’re doing here.

 

Note: To better able to follow the steps, within the code block, I have commented with the step label. We will use these to help describe the inner workings.

 

Step 2.1:

Within the try block, we will first check if we have the access to the physical file that is being requested.  Suppose we get a request for “default.css”, we will use the full path to the “default.css” file and see if it exists. If it does not exist, there is no point in proceeding forward – we will simply return.

 

Step 2.2:

If you look back in our 50K foot plan above, in step 5 there, we decided that we will store the already processed default.css content in the cache so as to save of Server I/O and CPU cycles.

Note: Before we start processing the default.css file, we want to check if our cache already has the content in it. If we do, we will simply return the content from the cache to the caller. If not, we will process the default.css file, stick the processed content in the cache and then return the cached content to the caller - pretty straight forward stuff.

 

 // Now check if we have stuff in the cache that we already processed.

 //

 // And, if we do, we will extract that content from the cache and spit that out

 // as our result.

 // Step : 2.2

 if (context.Cache[__CACHE_TOKEN_NAME] != null){

   __ProcessedContent = context.Cache[__CACHE_TOKEN_NAME].ToString();

 }

     

We will use our constant, “__CACHE_TOKEN_NAME “ as a key to store and extract the content from our cache.  In this step, we will check if our cache has any preprocessed content that we can extract and send back to the caller. If it does, we will pick that up in the “__ProcessedContent” variable.  If we don’t have a preprocessed content in our cache, we will need to process the default.css file.

else{

 

   // 2.2.1

   // Read the css file using the full path into the variable we defined above

   StreamReader __StreamReader = new StreamReader(__SourceCSSFile);

   __ProcessedContent = __StreamReader.ReadToEnd();

   __StreamReader.Close();

 

   // 2.2.2

   // Remove comments

   __ProcessedContent = _RemoveComments(__ProcessedContent);

 

   // 2.2.3

   __ProcessedContent =

          _SearchReplaceConstantsWithValues(

                 __ProcessedContent, __CACHE_TOKEN_NAME, __SourceCSSFile

          );

   // Steps: 2.2.4

   _StickContentIntoCache(__ProcessedContent, __CACHE_TOKEN_NAME, __SourceCSSFile);

}

 

              We will follow these steps – use the labels in the code to follow the steps here.

2.2.1  Read the physical file into memory for processing

2.2.2  Remove the comments within the <CDR> segment in the default.css file via the call to “_RemoveComments()”.  Comments are enclosed within “/*  */” markers.

2.2.3  Now, search for references to the constant names within the remainder of the CSS file and replace those with the values of the defined constants via the call to “_SearchReplaceConstantsWithValues()”.

2.2.4  Once the default.css file is processed, we will stick the processed content into the Cache for subsequent uses via the call to – “_StickContentIntoCache()”.

            We will go into the details of each of these methods in detail in the following sections.

By the end of step 2.2.4, our processed content must be available in the cache for future use.  The next step is simply to respond back to the caller with the content from the cache file. Step 2.3 does exactly that via the call to ::Response.Write().

 

// Step: 2.3 (We will revisit this - see below):

context.Response.Write(__ProcessedContent);

} // </EO try { } block

 

Now what if the try… failed, here's the code that falls within the "catch…" block above.

 

// If our try{} block failed, we will simply spit out the error in our response.

catch (Exception ex){

   context.Response.Write(ex.Message);

}

 

That covers our main code. In the following sections, I will describe each of the methods that are called by the above code block. And, then we will be done and ready to deploy and see it work.

Let’s look at the ::_RemoveComments(). We will use the following RegEx match string and replace “/* … */” with an empty string  - so the comment markers and anything in between is removed in the final output.  That was simple enough.

 

  // What we're doing here is simplt search replace for comments and

// replace with "" using Reg Exp.

private string _RemoveComments(string __SourceCSSContent){

  // Many thanks to Regular-Expression.info site for this expression

  // to get all content btwn the "/*" and  "*/"

  return Regex.Replace(

     __SourceCSSContent, @"/\*.+?\*/", "", RegexOptions.Singleline);

}

 

 

 

 

// This where the real work is getting done. One of our modern "@define" stylesheets

// comes in this end, and goes out the other in a format that a browser will understand.

private string _SearchReplaceConstantsWithValues(

     string __SourceCSSContent,

     string __CACHE_TOKEN_NAME,

     string __FQPhysicalCSSFilePath

) {

// Many thanks to Regular-Expression.info site for this expression

// to get all content btwn the <CDR> tags

const string __REToCaptureEverythingBetweenCDRTag = "<CDR[^>]*>(.*?)</CDR>";

// Step 3.1

// Using the above expression, get the matched string

Regex __RE = new Regex(@__REToCaptureEverythingBetweenCDRTag, RegexOptions.Singleline);

            Match __REMatch = __RE.Match(__SourceCSSContent);

           

// If we did *NOT* find the <CDR> tag, we no need to proceed forward,

// simply exit

if (!__REMatch.Success)

  return __SourceCSSContent;

 

// Step 3.2

// Remove the CDR header from the css content.

// This will not be needed in the resp write

__SourceCSSContent = __SourceCSSContent.Replace(

(string)__REMatch.ToString(), (string) "").Trim();

           

// Step 3.3

// If you got this far, we must have found the CDR Tags and

// hopefully we also got some defs string in there.

// if we found more than one constant:value pairs, the return value

// from the ::Match method (above),

//

// results in a single string with all of the constant:value pairs

// - each separated by ";"

//

// To be able to individually process each of the constant:value pairs,

// we will split the mushed up Constant:Value pairs string into individual

// items using the split against ";"

string[] __CDRDefs = __REMatch.Groups[1].Value.Split(new char[] { ';' });

// at the end of this, we will get an array of individual array items

// representing "<constant>:<value>" string

//

// just a holder to help w/ search/replace

StringBuilder __SB = new StringBuilder(__SourceCSSContent);

 

// Step 3.4

// We will now start searching for each of the constants in the __CDRDefs in the

// default.css content and replace with the value defined for the

// constant in question

foreach (string __CDRDef in __CDRDefs){

   // proceed only if we have a valid non-empty <constant:value> pair

   if (__CDRDef.Trim() != string.Empty) {

     // __CDRDef will contain text in the format of "<ConstantName>:<Value>" pair

     //

     // We will split that into a Name:Value pair array as follows using split

     // against ":" so we can address the name and value separately.

     string[] __ConstantValuePair = __CDRDef.Trim().Split(new char[] { ':' });

 

     // Now search in the css content for "@<ConstantReference>" and replace it

     // with the 'Value' component found in the "Name:Value" pair

     __SB.Replace("@" + __ConstantValuePair[0].Trim(), __ConstantValuePair[1].Trim());

    } // repeat for loop for the next <constant>:<value> pair element in the __CDRDefs array.

 }

 // Step 3.5

 // at this stage, all of the constant references found in the <CDR>

 // block must have been serviced. simply return the "post-processed" string content.

 return __SB.ToString();

 

} // </EO: _SearchReplaceConstantsWithValues>

Now that that’s out of the way, let’s spend some time understanding the next method _SearchReplaceConstantWithValues().  Off all the other methods, this method is the most meatiest. I have again, labeled individual code blocks to help us follow through.

 

Before we begin, let’s ensure we understand the purpose of this method.  Its sole purpose in life is to look for references to constants in the body of the CSS file and replace those references with the actual values that are defined in the CDR segment.

 

So, let’s get rolling.

 

Step 3.1

Our first step here is to get all of the CDR content segment from the default.css file. That is, all constants/values  - name/value pairs. We are able to do this by leveraging the RegEx again w/ the pattern - "<CDR[^>]*>(.*?)</CDR>".

 

Step 3.2

If we did not find any content, simply return. We don’t have anything to process – it is as simple as that.  If on the other hand, we find something, we can now remove the CDR opening and closing tags from the found segment. A simple ::Replace() will do that trick.

 

Step 3.3

If you look in the CDR segment above, each of the constant/value pairs are separated by a “;”. We will now split those constant/value pairs into individual array elements. A simple call to the ::Split() should do that trick.  It is worth noting that we are calling ::Split() against the __REMatch object that we populated earlier on in step 3.2 above. This object was populated when we called the ::Match() method.

 

 

// To be able to individually process each of the constant:value pairs,

// we will split the mushed up Constant:Value pairs string into individual

// items using the split against ";"

string[] __CDRDefs = __REMatch.Groups[1].Value.Split(new char[] { ';' });

 

 

 

 

 

 

 

Step 3.4

This is the fun part of this method.  It start out by separating the “constant” from the “value” using “:” as the separator does a full text search/replace for each of the constant name occurrences. The following code does this.

 

foreach (string __CDRDef in __CDRDefs){

  // proceed only if we have a valid non-empty <constant:value> pair

  if (__CDRDef.Trim() != string.Empty) {

    // __CDRDef will contain text in the format of "<ConstantName>:<Value>" pair

    // We will split that into a Name:Value pair array as follows using split

    // against ":" so we can address the name and value separately.

    string[] __ConstantValuePair = __CDRDef.Trim().Split(new char[] { ':' });

 

    // Now search in the css content for "@<ConstantReference>" and replace it

    // with the 'Value' component found in the "Name:Value" pair

    __SB.Replace("@" + __ConstantValuePair[0].Trim(),  \

                          __ConstantValuePair[1].Trim());

   }

   // repeat for loop for the next <constant>:<value> pair element

   // in the __CDRDefs array.

}

 

 

The resulting string is a fully processed CSS content string that we can return back to the caller – Step 3.5.

 

We are almost done with running down our methods. Here’s the last one - _StickContentIntoCache(). It does exactly that – it takes the fully processed CSS content string and persists into the cache for future use.  Since Cache is volatile, it will be gone when the server is rebooted or IIS is restarted – I’m sure you’re aware of that already. So, the default.css file will be processed every time the cache is empty.

 

The key to understand here is, we have a processed css content that we want to remember for future incoming requests. We want to keep this content in the cache up to date with the latest default.css file. What does that mean?  It means that if you happen to modify the default.css file with any changes, we want our handler to be able to reprocess the file and create a new image of the processed css content in the cache. Makes sense?

 

So how are we going to check if the default.css file changed and have us process the file again. It is very simple – fortunately, we have ASP.Net 2.0’s CacheDependency() object. CacheDependency object allows us to bind the cache content with a certain physical file. So that when the file happens to change, the cache is automatically tagged as invalid or null’ed. Pretty cool – huh?! 

 

Note: It is important to note that we are passing the CacheDependency object to the Cache::Insert() method. That’s the glue that binds the cache content with the physical file (in our case default.css).

 

 

// this method sticks the fully post-processed css content into

// the cache file so, we don't need to redo what we did above

// for every single request to default.css that comes in.

// It saves a good quality server cycles.

private void _StickContentIntoCache(

  string __PostProcessedCSSContent,

  string __CACHE_TOKEN_NAME,

  string __FQPhysicalCSSFilePath){

   // we will use the .Net 2.0's ::CacheDependency object.

   // We will establish a dependency btwn the cached post css content

   // and the default.css physical file.

   //

   // The benefit to that?

   // Yes, if the you decide to change the file and save it, the dependency tells us

   // that the "post-processed" content in the ::ProcessRequest method does NOT exist.

   // Thereby allowing us to re-proc and re-gen the new content.

   //

   // Very cool ASP.Net feature!

   //

   CacheDependency __CD = new CacheDependency(__FQPhysicalCSSFilePath);

   // Save into Cache using the above CD and cache token name

   HttpContext.Current.Cache.Insert(__CACHE_TOKEN_NAME, __PostProcessedCSSContent, __CD);

} // </ EO ::_StickIntoCache>

 

 

 

 

We’re now done with our coding. Compile the code and generate the resulting DLL. 

Recall, when we were writing our handler, we paid extra attention to the namespace of the class. Keep an eye on that namespace name. We will be using that now.

 

Now, let’s Enable our HttpHandler

Step 1:

Open your web.config file and add the below:

 

 <pages styleSheetTheme="A"/>

  

Step 2:

add a new entry into the <httphandlers> node as follows. If you don’t have an existing <httphandlers> section, create one:

 

   <httpHandlers>

     <add verb="GET" path="default.css" type="Utils.CSSHandler"/>

   </httpHandlers>

  

In the above httpHandlers entry, pay attention to the

·         “verb” attribute.

·         We are asking the ASP.Net worker to intercept and process all HTTP GET calls to the “default.css” file.  We are not asking it to intercept the PUT verb, but, ONLY the GET verb.  In your application, you can build a behavior for PUT if that need exists. In ours, it simply does not exist.

·         “path” attribute.

o   We are asking our ASP.Net worker that our handler will ONLY process "DEFAULT.CSS" file (so, if you had a TEST.CSS, we won’t bother picking it up). In these cases, the text is rendered back as-is.

·         “type” attribute

o   We are asking our ASP.Net worker that our handler where to look for the handler. This is the FULLY QUALIFIED namespace.class name (in our case, it is “Utils.CSSHandler”) .  THIS IS IMPORTANT. IF THIS IS NOT SET PROPERLY, ASP.NET WILL FAIL TO LOAD.

 

 Once you have done the above, we are good to go. Run any page in your project that uses the default.css file.

 

I have attached the fully working project here. You can unzip the attached project and run it.

 

Summary:

Hope this article was helpful to you. I have attempted to explain how to enable "constants" in CSS behavior. Constants or variables are NOT inherent to CSS. But, our handler will extend that cool feature to your web applications.

 

ciao, Nagi

My "Projects Workspace" site is launched
20 January 07 11:48 AM | NagiBabu | 0 Comments   

Over the last few years, I have been spending some quality personal time in working on various home-brewed hobby projects. Projects such as FStop, The-Brain, iHome, iCar, ALIBE; etc are a few of my favorites; I tend to spend more time on these more than the other hobby projects. Over the last many weekends, I have been working on getting FStop ready for public redist for their own foto blogs. FStop is a user and admin friendly foto blogging engine. Considering where I'm at, I have launched a new project workspace for FStop. My hope is that this site will be a vehicle for me to track and make progress - and others can monitor and gain access to the latest bits.

If you're into digital photography and love showcasing your cool photographs, you must check this out.

looking forward to seeing you there

ciao

Nagi

Yahoo next gen Messenger on WPF - show cased at CES 2007
08 January 07 04:24 AM | NagiBabu | 1 Comments   

At the Consumer Electronics Show this week, BillG delivered his 10th CES keynote. Many new Microsoft products were showed-off including IPTV on XBox, Microsoft-Windows Home Server (for homes w/ multiple PCs).

At this event, Yahoo show cased a few demos with their next gen messenger client built completely ground up using Windows Presentation Foundation (WPF) and the .NET Framework 3.0.

We are seeing a lot of partners and Enterprise customers building rich UI driven apps and solns on top of WPF - a growing yet powerful platform.

ciao

Nagi

More Posts Next page »

Search

This Blog

Syndication

Page view tracker