In-Depth

.NET Survival Guide

Eight essential skills and technologies for Windows developers.

If you're a .NET developer today, the landscape has to be looking pretty murky. On the one hand, Microsoft's dominance has clearly eroded, thanks to key rivals whose market penetration has come at Redmond's expense, open source alternatives and the remarkable growth in the power and reach of Web-based programming.

A recent Evans Data Corp. survey validates the challenges facing the .NET community, revealing that the portion of developers targeting Windows continued to decline, to 64.8 percent this year from 74 percent in 2006.

Despite these shifts, .NET- and Windows-based development remains the dominant programming platform for user-facing clients, Web applications and business-critical systems. Microsoft Visual Studio (VS) is unrivaled among integrated development environments (IDEs), and is on track to grow even stronger when VS 2008 ships early next year.


Meanwhile, there's a tremendous amount of new technologies and disciplines outside of or linked to the .NET Framework that developers must master. The good news is that RDN has done some of the spadework for you with this, our first .NET Survival Guide.

Through research and interviews with a wide range of the industry's leading developers and most-respected analysts, RDN has identified key technologies, trends and tools as being critical for most Microsoft-aligned development shops to master. If you haven't started digging into these topics already, now is a good time.

Covered technologies include must-know Web services standards, key rich Internet application (RIA) technologies, new ways of working with data, parallel programming for multi-core computers and more.


Rich Internet Applications

RIA
Urgency: High
Risk: Low
Maturity: Moderate
Recommendation: Deploy
This is shaping up as the year of the rich Internet application (RIA). Thanks to Adobe Systems Inc.'s Flash and an explosion of AJAX-based Web programming, a new flank has opened in corporate development. According to a survey conducted by Forrester Research Inc. and RDN sister publication Visual Studio Magazine, nearly one in three .NET-based dev shops are building RIAs today.

Organizations that opt to take advantage of RIA development face a growing host of choices, many of which are still nascent. Tooling for AJAX-based development has improved significantly with the release of the ASP.NET AJAX Toolkit, while Adobe boasts a robust and mature set of tools around Flash/Flex. But the most intriguing option for .NET-aligned shops, Microsoft Silverlight 1.1, remains very much in progress, says Jeffrey Hammond, senior analyst at Forrester. Microsoft hasn't revealed when the final version of Silverlight 1.1 will ship, but it's possible the date could roll into the end of this year or early next.

According to Forrester, different RIA approaches reflect the competitive position of vendors' platforms. Figure 1 shows AJAX-based development -- rooted in HTML, XML and JavaScript -- as being closest to traditional HTML development and offering many of its benefits, including minimal tooling and broadest potential reach. At the other end of the spectrum, JavaFX and Adobe Integrated Runtime (AIR) -- both in formative stages -- employ client-integrated runtimes that offer the most "desktop-like" experience, with local storage and seamless, drag-and-drop interfaces.

RIA Deployment Tips
  1. Get started now, but proceed cautiously: The technology is mature enough to build real-world applications, but don't go overboard -- target your deployments and craft applications and interfaces with care.
  2. Take RIA mainstream: Consider RIAs as an extension of traditional client development, eventually replacing the former code model.
  3. Test and monitor: Involve users and get measurable feedback on your efforts.
  4. Become familiar with Windows Presentation Foundation: It's the future of the Windows-based RIA experience.

In between are Adobe Flash and Microsoft Silverlight 1.1, which both use cross-platform, browser-based players to enable running of media and code. Silverlight 1.1 encapsulates a version of the .NET Framework and includes the Dynamic Language Runtime to provide a highly flexible development target. Programmers can transition existing .NET apps or build new Silverlight apps in Visual Studio, using familiar .NET languages like C# or Visual Basic, as well as dynamic languages like Python and Ruby. Hammond says Silverlight 1.1 offers the best roadmap for .NET shops, but until it's ready, he recommends that these organizations work with AJAX and, where necessary, Flash.

"You really kind of have to ask yourself, what, exactly, are you trying to build?" asks Hammond, who says AJAX is a good option for incremental development on short deadlines, whereas Silverlight involves a lot more preparation. "It's not necessarily a bad thing. But it's just going to require developers to take a couple steps further down the RIA path than they may have the luxury to do, than if they were on a project with a tight timeline."

Code-Focused vs. Domain Specific
[click image for larger view]
Rich Internet Application Platform Landscape

For companies unready to jump into the RIA fray, says Hammond, AJAX offers a welcome target. In the meantime, dev shops should tune their applications to separate the UI layer from business and core logic. That will put them in position to adopt RIA development down the road.

Ultimately, Hammond says companies need to stay agile and see how the various RIA options evolve, rather than placing an early bet on one approach over the other: "I think it's too early to put all your eggs into one basket right now. I really do."

-- Michael Desmond



SOA and Web Services

SOA and Web Services
Urgency: High
Risk: High
Maturity: Moderate
Recommendation: Study
Service-Oriented architecture (SOA) and Web services often get lumped together, but they really aren't the same thing. SOA is a set of design concepts, a philosophy for building connected and modular systems meant to better serve an enterprise. Web services provide an important way to stitch together a SOA, as Forrester analyst Randy Heffner stresses.

Microsoft itself has assembled its Windows Communication Foundation (WCF) Web services stack for building connected systems, and it and other major software players have assembled product stacks aimed at SOA. WCF provides a service-oriented programming model designed to ease the creation of distributed applications, and ships as part of the .NET Framework 3.0. As such, it stands to be a major part of Microsoft-focused dev shops moving forward.

But SOA is intrinsically not about one vendor's technology, says Jason Bloomberg, an analyst with ZapThink LLC.

"One of the core challenges that .NET folks have in the enterprise is the single-platform tunnel vision," says Bloomberg.

"If an organization lives and breathes the Microsoft environment, that's fine, but in that case what passes for SOA really amounts to Web services-based integration," he adds. ".NET need not work in isolation, and incorporating .NET into true SOA initiatives means moving beyond the framework's Web services capabilities to think in terms of issues like loose coupling, and SOA governance, quality and management in a platform-neutral manner."

There are also some crucial standards for lead developers and architects to learn. Heffner says shops focused on .NET should know the ins and out of specs like WS-I Basic Profile, WS-I Basic Security Profile, WS-I Reliable Secure Profile, WS-ReliableExchange, WS-SecureExchange, WS-Trust, WS-Policy and WS-MetadataExchange.

Of these, the most important is WS-I Basic Profile, as well as the WS-BPEL standard for business process activities, Heffner says.

Beyond the specs, Heffner urges developers to get familiar with SOA-centric technologies, including repositories, enterprise service busses and business-process management software.

Ultimately, Heffner echoes Bloomberg in stressing philosophy over technology. "It is most critical to get good skills for business design, business-process design, ability to interact with the business, ability to envision and manage a portfolio of SOA-based business services."

-- Chris Kanaracus



Data-Driven Development

Data-Driven Development
Urgency: High
Risk: Moderate
Maturity: Low
Recommendation: Study
When it comes to developing applications that connect to databases, development managers have a lot to consider. Not only are there numerous database platforms in many organizations, developers must understand a wave of emerging options for data access.

One that's getting increasing visibility these days is Microsoft's new Language Integrated Query, or LINQ, which was the subject of a recent cover story ("Looking to LINQ," April 1, 2007). Microsoft technical fellow Anders Hejlsberg has argued the case for LINQ as a data-query protocol that will ultimately bind data querying into programming. "It's my hope that in five to 10 years, programming languages simply will have queries as a concept built in, because that's just a must," Hejlsberg told RDN during an interview this spring.

Database developers, especially .NET-aligned ones, are chomping at the bit for the advances in data query promised by LINQ. But not everyone's convinced yet.

Kent Tegels, database curriculum lead at Los Angeles-based DevelopMento, believes that while LINQ raises the bar in modernizing data-query programming, he questions the impact it will have in the big picture of database development. "I think they're making LINQ out to be more than it really is," Tegels says. "It's a convenient way for certain programmers to write certain code, but I think when it comes right down to it, when you're trying to optimize for performance, and you're trying to build a real industrial-strength application, LINQ is going to get pushed out of the way."

Also, while LINQ will be useful for connecting to SQL Server, Tegels and others don't expect Oracle to support it or for it to show up on other database platforms such as mySQL, though it could find its way onto IBM Corp.'s DB2. "IBM needs the sales," Tegels argues.

Those questions notwithstanding, Tegels does believe developers need to understand LINQ and its strengths and weaknesses. "Its obvious strength is it's going to make it easier for some people to write certain types of programs," he says. "They're going to have to pay really close attention to performance and abstraction. It will be a lot easier to write silo applications and then it will be a lot harder to work with a data warehouse in my opinion, but we will see where they go with it."

In the meantime, database developers should look to develop against multiple distributed databases on a single platform or multiple databases against multiple platforms, and start understanding object relational databases, says Josh Jones, a database administrator with IntrinsiQ Research Inc. and author of the forthcoming book "Architecting Database Models for SQL Server" (Pearson Education, 2008).

"From more and more DBAs and database developers that I talk to, the whole concept of abstraction layers on top of the database and between that abstraction layer and, say, another layer at the middle-tier level is becoming more and more prevalent," Jones says. The trend toward distributed databases and platforms means developers must learn to develop against an object model on top of relational databases, he adds.

Another key requirement, Jones says, is to understand relational data models and how to design a database, a skill many .NET developers lack, Jones says. This is important, he warns, as companies move away from hiring a developer who is specifically a data modeler, and instead expect the application developer or DBA to perform the task.

"I think we should be motivating people to look toward the .NET 3.0 Framework stuff, sooner than later."
Josh Jones, Author, "Architecting Database Models for SQL Server"
Josh Jones

Dev shops must also keep pace with Microsoft's rapid evolution of the .NET Framework, which is currently in version 3.0. Most dev shops now on. NET Framework 1.1 are moving to Visual Studio 2005 and SQL Server 2005. Meanwhile Microsoft's .NET 3.5 is expected to emerge late this year or early next, adding data-centric features like LINQ and key ADO.NET improvements. Upgrades to Visual Studio and SQL Server are expected in the same time frame.

Jones argues that the flexibility of. NET 3.0 makes it well suited for dealing with database objects and connectivity. "I think we should be motivating people to look toward the .NET 3.0 Framework stuff, sooner than later," he says.

Database Design Checklist
  • Understand LINQ but don't expect it to become pervasive
  • Learn how to develop against an object model on top of relational databases
  • Master relational data models and how to design a database, a skill many lack
  • Align data query methodologies with new reporting services and BI capabilities
  • Don't presume relational databases are going away
  • Consider how unstructured and geospatial data may fit into data-management scenarios
  • Don't forget the role of storage, and requirements for data retention and availability
  • Make sure policy management and security are baked into the infrastructure

-- Jeffrey Schwartz



Dynamic Languages in Managed Code
Dynamic Languages
Urgency: High
Risk: Low
Maturity: Low
Recommendation: Study
When Microsoft officially introduced Silverlight at its MIX07 conference in May, the news included the first public discussions of a Dynamic Language Runtime (DLR) that would include a dynamic-type system and hosting API for next version of the .NET CLR, expected in about a year.

Dynamically typed languages have been around for years, but as Microsoft introduces services to integrate its own dynamic language implementations with .NET languages, .NET developers have the option to use more than 30 languages, according to the company.

"The DLR enables you to use .NET (including ASP.NET) from other languages besides the core VB and C# languages that most .NET developers use," notes Microsoft Developer Division General Manager Scott Guthrie in response to a blog question about who the DLR was targeted at. "If you like VB and C#, then it probably doesn't make sense to consider any changes."

The ASP.NET Futures developer preview, released in July, includes the DLR and two Microsoft dynamic languages -- IronPython 2.0 and Managed Jscript, which is based on ECMAScript 3.0. Developers shouldn't confuse Managed Jscript with JScript.NET, however, which is not fully dynamic -- these are two different language implementations.

The DLR will also host two additional implementations, underway at Microsoft-IronRuby and Dynamic Visual Basic (VB 10). Microsoft Program Manager John Lam, who created RubyCLR, an open source bridge for .NET, is heading up the IronRuby effort in Redmond. Last month, his team was planning to post the IronRuby source code on RubyForge, in an attempt to get the Ruby community to contribute to the IronRuby libraries.

"With IronPython and IronRuby and even the Java implementations, Jython and JRuby, you are now allowing these dynamic languages to leverage ecosystems that are much larger than the original languages have," says Burton Group senior analyst Richard Monson-Haefel, who points to the .NET ecosystem.

Dynamic languages are object-oriented, but the semantics of the language are different, so a lot of assumptions are made upfront, he explains. They also allow dynamic generation of new classes, and have a much more flexible programming model.

"What we found with dynamic languages in general is that they seem to be more productive on a line for line basis than conventional languages like C# and Visual Basic, Java, that sort of thing ..." he says. "As a metric for measuring productivity, that's debatable," he continues, "But what we see happening is it's anywhere from about a 2-1 to a 5-1 difference in the amount of code you need to write to accomplish a task in a dynamic language compared to a conventional language." Less code also makes the codebase a lot easier to maintain.

Dynamic languages also offer flexibility to developers, who can extend them by adding new syntax and creating domain-specific languages. A notable example is Ruby on Rails, which is an extension of Ruby. "Instead of having to use APIs all the time to accomplish a task, you can add capabilities yourself as an application developer," says Monson-Haefel.

"If you want to have a skill set for the future, then learning a dynamic language is really important," he says. "For a few more years, it will be OK to use conventional programming, but just as in the '90s -- where you couldn't really survive unless you knew object-oriented programming -- so it will be for dynamic languages. You really won't survive unless you know how to use dynamic languages and there are certain qualities that are common to dynamic languages that are not found in conventional languages."
Ruby on Rails is a rapid Web development framework that is based loosely on a Model View Controller (MVC) architecture. Microsoft is working on an MVC architecture for a future version of ASP.NET.

Monson-Haefel believes MVC architectures are much ballyhooed, but the architecture is only a small factor in the usefulness of a Web dev framework. "The advantage of that architecture is really in terms of maintenance, in general, because you are separating the view of the presentation from the model and the thing that coordinates that action between the view and the model, which is called the controller," he says. "It's easier to evolve them." If the architecture is done well, and a new presentation technology like AJAX comes out, developers could in theory evolve the presentation technology without worrying about the other parts.

"What actually ends up happening is a lot of frameworks create Model View Controller architectures, but they are so heavily integrated into the framework that it's impractical to evolve one piece without evolving the other, so you lose a lot of that advantage," explains Monson-Haefel. "I'm skeptical about any Web framework that's going to be Model View Controller, yet they're providing all the pieces."

Another pitfall is when these frameworks get so complicated that they're difficult to use, which is what happened with JavaServer Faces.

Developers interested in checking out what's coming from Microsoft should take a look at the ASP.NET Futures (July 2007) developer preview. It includes additional tooling for ASP.NET AJAX, Silverlight 1.0 (Java programming model), the Dynamic Language Runtime and two dynamic language implementations.

-- Kathleen Richards



Office Development Platform
Office Development
Urgency: Moderate
Risk: Low
Maturity: Moderate Recommendation: Deploy
Despite challenges from stubborn competitors like Google Inc., which launched a deal with Sun Microsystems Inc. to distribute the StarOffice suite, the reign of Microsoft Office as the king of productivity suites continues to thrive. In fact, Office's potential as a full-fledged application development platform is only now beginning to surface.

"I think Office 2007 will be very important for corporate IT managers, especially because Microsoft has replaced the earlier VBA [Visual Basic for Applications] programming model with Visual Studio Tools for Office [VSTO]," says Burton Group analyst Peter O'Kelly. "VSTO is a vast improvement in terms of developer productivity and application security, as it builds on the .NET Framework."

While many enterprises lag one or more Office versions behind Microsoft's release schedule, within two or three years Office 2007 should become a real point of interest, says Gartner Inc. analyst David Mitchell Smith.

"This would be the second or third time Microsoft has tried to promote the idea of Office as a platform," Smith notes. "It hasn't quite stuck yet. But they've made some progress in demonstrating how it can be done by doing it themselves."

Smith points to Microsoft's major push behind Office Business Application development.

"This discussion of Office as something you build on? This is something to connect it to, rather than the amorphous, use-your-imagination type of thing," Smith says.

Smith particularly singles out Office Communications Server (OCS) 2007, which Microsoft is positioning as a one-stop hub for an enterprise's messaging and voice needs. "There's a lot of potentially winning scenarios there for a lot of organizations," he says.

Burton Group analyst Mike Gotta warns there are open questions surrounding OCS as a development target.

Gotta says the wealth of APIs and building blocks for OCS developers may overwhelm some shops, but he praises the OCS back-end architecture. "So perhaps it's just a case of development requirements lagging a bit behind the architectural evolution, since we're all still on the learning curve for communication-enabled business processes and real-time collaborative applications."

To that end, Gotta suggests the new breed of apps built on OCS will require new skills as well. "Most developers are application or infrastructure focused -- not really up to speed on issues related to voice, telephony, speech and such," he says. "The people who have those skills are not familiar with the nuances of application development. So cross-functional teams, mentoring and skill/training tactics will need to be planned ahead of time."

It will be some time before enterprises go whole-hog with Unified Communications applications, Gotta predicts. Meanwhile, it's time for dev outfits to start studying up and preparing for those future Office-based deployments.

-- Chris Kanaracus



Mad About Multi-Core
Multi-Core
Urgency: Moderate
Risk: Moderate
Maturity: Low
Recommendation: Study
The shift from ever-faster single-core processors to chips powered by four or more separate cores is well underway, and while there will be new tools and coding techniques to learn in the coming years, experts say the best way for developers to be ready for the multi-core era is to start changing their mindsets today.

"The No. 1 thing which does need to be on all of our minds is this: What am I doing so that I'm 'thinking parallel,'" says James Reinders, software evangelist and director of Intel Software Development Products. "I'm positive that failure to do this will make us less employable, because the market needs all of us developers to be able to understand the world for which we program."

With both Intel Corp. and rival Advanced Micro Devices Inc. introducing new quad-core processors, Microsoft and other software and tool makers must optimize their software for the hardware. Starting right now, Reinders says, parallelism must be intuitive for developers.

Forrester analyst Hammond likens the necessary change in mindset to the one that occurred 20 years ago with the advent of object-oriented programming. While tools will help, successful developers in the coming years will spend much more time thinking about shared resources than in the past, he says.

"Languages will either need to abstract multi-core development, or a lot more developers will have to learn about thread-safe, or core-safe in this case, code," Hammond predicts. "If you look at the high-performance computing shops and what they do today, you'll get a pretty good idea of what will become more common."

Reinders urges developers to begin playing around with parallelism now: Start checking out abstraction tools or try writing a "Hello World" app in parallel. He urges C and C++ developers to learn OpenMP -- an API defined by major hardware and software vendors for developing parallel apps. Intel has also open sourced its Threading Building Blocks abstraction tool.

"Unfortunately, the support in Java and C# is still not abstract enough to deploy in large quantities, and other languages like Haskel and Erlang are niche solutions, which are very interesting," Reinders says, later adding, "You should always start with libraries and auto-parallelism from compilers to see how much you can get easily. Again, for most of us, we'll need to continue on and look at abstractions."

In terms of traditional dev tools, Forrester's Hammond expects the rise of multi-core to also require a new generation of debuggers. "How do you debug across parallel execution on multiple cores? It's a knotty problem," he says. "Some of the tools I've seen include work that Rogue Wave has done with Hydra and Software Pipelines and the Eclipse Parallel Tools project."

Hammond says most developers can afford to wait for more and better tools to appear before making the switch to a truly multi-core dev style. But they should at least be thinking about parallelism today.

-- Thomas Caywood



Development Testing
Testing
Urgency: Moderate
Risk: Low
Maturity: Moderate
Recommendation: Deploy
Developers increasingly will be expected to test as they code and to work more closely with their organization's dedicated testers, so they should be moving in that direction already, experts say.

Responsibility for certain aspects of testing likely will shift to dev shops as agile development becomes the standard, predicts Gartner analyst Thomas Murphy. "I see an evolution in the way we do things. There are more opportunities upstream, so that developers can do more around the quality of their code in the first place," Murphy says.

Forrester analyst Carey Schwaber has a similar vision.

"Developers should absolutely be integrating testing into their efforts," Schwaber says. "In addition, they should be working really closely with the testers on their teams. This is how agile development works, and it's one of the reasons why agile teams have seen such great quality gains."

No matter what development methodology a shop subscribes to today, she says, development and testing should overlap to the point where both tasks are nearly concurrent. The main factor preventing that in most shops, she adds, is an artificial corporate structure that segregates the two functions and causes what she calls "that interminable test-fix cycle."

In the meantime, Murphy says developers should be embracing unit testing, source-code scanning tools and code reviews right now.

"Yeah, they are changes to the way you work and maybe there's some busy work in there, but what has been shown many times over and over is that if you use these types of technologies, your productivity increases. And in addition to that, your value is going to increase to the company," Murphy says.

He figures roughly half of .NET dev shops are performing unit tests today. "Fewer are using source code analysis at this point, and even fewer companies do code review. Part of the problem is they think there's a very large overhead and they have to be very formal, but we've seen some good results from ad hoc code reviews," says Murphy, who mentions SmartBear Inc.'s Code Collaborator as a good tool for ad hoc code reviews.

In terms of emerging testing schemes, Murphy says developers should be aware of the pairwise, or all-pairs, test-case generation technique. This methodology tests input parameters in pairs, working through possible combinations of the two parameters, based on the theory that most software faults are a result of two factors interacting.

"Pairwise testing helps me understand the minimal set that will give me complete coverage. More and more, what you're going to see are tools developed that will help people understand better what to test," says Murphy, who also expects the field to evolve to a tighter coupling between business requirements and test results. "We're going to see more end-to-end flow in testing."

In terms of Visual Studio 2008 tooling, Schwaber points to the forthcoming IDE's improved support for manual testing, especially a new feature that attaches to the test results a screen shot of the app at the time of the fault. "I think this is a really good example of how you can use tools to make manual testing more efficient without automating everything," Schwaber says.

What's less clear, but important for developers to be thinking about, is how the spread of SOA will affect application testing in the years to come. Rich Internet applications and core enterprise mash-ups that tap outside services present a similar problem.

"It's not quite clear yet how testers are supposed to approach applications that are more dynamic than they used to be," Schwaber says. "You can't say this is the expected input and the expected output anymore. It's not that simple."

-- Thomas Caywood



Web Development
Web Development
Urgency: High
Risk: Low
Maturity: Moderate
Recommendation: Study
Later this year, Microsoft is expecting to release the .NET 3.5 Framework, which will integrate Asynchronous JavaScript and XML (AJAX), Language Integrated Query (LINQ) and new features such as nested Web pages into ASP.NET 3.5. Visual Studio 2008, expected to ship at the same time, offers ASP.NET AJAX tooling, support for CSS integration and a split-screen Web Designer that shows HTML code and layout. The Web Designer is based on the same engine as the tooling in Microsoft Expression Web.

Moving forward, basic Web building blocks such as HTML, CSS and JavaScript, as well as newer technologies like XAML and WPF will be pivotal, according to Microsoft Developer Division Product Manager Sanjoy Sarkar. These skills are universal, he points out, as they can be applied to multiple platforms.

Silverlight itself is compatible with other back-end servers and applications, but as Burton Group senior analyst Monson-Haefel notes, "When you use it with Microsoft, it's probably going to be pretty tight binding between Silverlight and other back-end services."

"Microsoft is such a different animal," he continues. "For Java, and the rest of the world, I'd say you want to focus on REST rather than SOAP for back-end services, which seems the direction the industry is going instead of SOAP, which turns out to be more complicated than necessary." Microsoft, however, is knee deep in SOAP and WS-* standards. "They probably will support REST in their communications network," says Monson-Haefel.

-- Kathleen Richards


This story was reported and written by the editors of RDN. Do you have any .NET survival tips? Let Founding Editor Michael Desmond know at mdesmond@reddevnews.com .

Reader Comments:

Tue, Feb 3, 2009 Anonymous Anonymous

out.txt;3;3

Tue, Feb 3, 2009 Anonymous Anonymous

out.txt;3;3

Tue, Feb 3, 2009 Anonymous Anonymous

out.txt;3;3

Sat, Jan 10, 2009 Anonymous Anonymous

hi
21dn6glr2bs9n9id
good luck

Fri, Jan 9, 2009 Anonymous Anonymous

hi
21dn6glr2bs9n9id
good luck

Mon, Jan 5, 2009 Anonymous Anonymous

Hi, good site,

Mon, Jan 5, 2009 Anonymous Anonymous

Hi, visit my link please,

Sun, Jan 4, 2009 Anonymous Anonymous

My site is great,

Sat, Jan 3, 2009 Anonymous Anonymous

Sorry for my post,

Sat, Jan 3, 2009 Anonymous Anonymous

Sorry for my post,

Sat, Jan 3, 2009 Anonymous Anonymous

Visit,

Sat, Jan 3, 2009 Anonymous Anonymous

Hi, good site,

Fri, Dec 26, 2008 Anonymous Anonymous

My site is great,

Thu, Nov 20, 2008 Anonymous Anonymous

comment6,

Tue, Aug 26, 2008 Anonymous Anonymous

comment2,

Add Your Comment:

Your Name:(optional)
Your Email:(optional)
Your Location:(optional)
Comment:
Please type the letters/numbers you see above