<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" version="2.0">
  <channel>
    <title>Muranosoft Blog - ASP.NET</title>
    <link>http://www.muranosoft.com/Outsourcingblog/</link>
    <description>Coding etc</description>
    <language>en-us</language>
    <copyright>Murano Software</copyright>
    <lastBuildDate>Fri, 19 Mar 2010 14:45:00 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 2.3.9074.18820</generator>
    <managingEditor>valerie.sinitskaya@muranosoft.com</managingEditor>
    <webMaster>valerie.sinitskaya@muranosoft.com</webMaster>
    <item>
      <trackback:ping>http://www.muranosoft.com/Outsourcingblog/Trackback.aspx?guid=3ee4540e-0202-4502-abc9-f4cd5319402d</trackback:ping>
      <pingback:server>http://www.muranosoft.com/Outsourcingblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.muranosoft.com/Outsourcingblog/PermaLink,guid,3ee4540e-0202-4502-abc9-f4cd5319402d.aspx</pingback:target>
      <dc:creator>Muranosoft admin</dc:creator>
      <wfw:comment>http://www.muranosoft.com/Outsourcingblog/CommentView,guid,3ee4540e-0202-4502-abc9-f4cd5319402d.aspx</wfw:comment>
      <wfw:commentRss>http://www.muranosoft.com/Outsourcingblog/SyndicationService.asmx/GetEntryCommentsRss?guid=3ee4540e-0202-4502-abc9-f4cd5319402d</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <h3>Our goal
</h3>
        <p>
During the <a href="http://www.muranosoft.com/Outsourcingblog/Murano-Software-At-Microsoft-SharePoint-2010-Social-Fest.aspx">Microsoft
SharePoint 2010 Social Fest</a>, Murano’s programmers had to create seven applications
for the new SharePoint Server 2010. This article will show how Amazon Web Services
helped us to get results in just seven days.
</p>
        <h3>Why did we choose Amazon?
</h3>
        <p>
We had few days before the Microsoft SharePoint 2010 Social Fest to test the new SharePoint
server. Microsoft’s SharePoint Server 2010 is in beta status and has strict hardware
requirements. You must have 4GB of RAM to start working with it. Also, the best way
to use SharePoint Server 2010 is to install it on a Windows Server 2008 or Windows
Server 2008 R2 operating system. 
</p>
        <p>
So we had to upgrade some of the developers’ PC hardware and OS or find another solution.
There also was another problem – how to prepare the environment for the new developers
on SharePoint Social Fest’s team very quickly. We decided to check Amazon services. 
</p>
        <p>
Amazon Elastic Compute Cloud (Amazon EC2) is a Web-based service that provides compute
capacity in the cloud. Amazon EC2 presents a virtual computing environment, allowing
you to use Web service interfaces to launch instances with selected operating systems.
Fortunately, MS Windows Server 2008 is available to use on Amazon. We chose “Large
Instance” with 8GB RAM and 4 EC2 Compute Units to handle our tasks.
</p>
        <h3>How to start using Amazon Web Services
</h3>
        <p>
Getting to Amazon’s cloud is simple. You have to go to <a href="http://aws.amazon.com/ec2/">http://aws.amazon.com/ec2</a> and
register a new account if you don’t have one. After registering for service and filling
out your card data, you can create a new instance by wizard in EC2 AWS console:
</p>
        <p>
          <a href="http://www.muranosoft.com/Outsourcingblog/content/binary/WindowsLiveWriter/UsingAmazontospeedupdevelopment_8873/clip_image002_2.gif">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image002" border="0" alt="clip_image002" src="http://www.muranosoft.com/Outsourcingblog/content/binary/WindowsLiveWriter/UsingAmazontospeedupdevelopment_8873/clip_image002_thumb.gif" width="468" height="305" />
          </a>
        </p>
        <p>
After passing several steps, you will get new instances in the console:
</p>
        <p>
          <a href="http://www.muranosoft.com/Outsourcingblog/content/binary/WindowsLiveWriter/UsingAmazontospeedupdevelopment_8873/clip_image004_2.gif">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image004" border="0" alt="clip_image004" src="http://www.muranosoft.com/Outsourcingblog/content/binary/WindowsLiveWriter/UsingAmazontospeedupdevelopment_8873/clip_image004_thumb.gif" width="648" height="180" />
          </a>
        </p>
        <p>
Now instances on Amazon EC2 use ELASTIC BLOCK STORE (EBS) to store data volumes. This
is good news because your data will stay alive after instance shutdown. 
</p>
        <h3>Our results
</h3>
        <p>
Virtual servers on Amazon have a good performance level. We used Visual Studio 2010
on it with hosted SharePoint 2010 sites, and the machines worked very promptly.
</p>
        <p>
As we selected Amazon EC2 as our platform for the SharePoint 2010 Social Fest, we
had to find out how to multiply the development environment in a short time. 
</p>
        <p>
The “Snapshot” function could help. It will take a snapshot from the selected data
volume. Then you can create a new volume from the snapshot and attach it to the instance.
But I found that instance’s Amazon Machine Image (AMI) creation is more applicable
for our task. 
</p>
        <p>
You can install any software you need, make your changes to the system configuration
and then create an image of your instance. Then you can use this image for creating
new instances. Using AMIs instead of snapshots gives you an advantage in time because
you will already get a configured instance right after the launch.
</p>
        <p>
          <a href="http://www.muranosoft.com/Outsourcingblog/content/binary/WindowsLiveWriter/UsingAmazontospeedupdevelopment_8873/clip_image006_2.gif">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image006" border="0" alt="clip_image006" src="http://www.muranosoft.com/Outsourcingblog/content/binary/WindowsLiveWriter/UsingAmazontospeedupdevelopment_8873/clip_image006_thumb.gif" width="428" height="298" />
          </a>
        </p>
        <p>
Thus we prepared AMI with Visual Studio 2010 beta and SharePoint Server 2010 beta
installed on it, and we used it any time our developer needed a new environment.
</p>
        <h3>Benefits of using Amazon
</h3>
        <p>
Using Amazon Elastic Compute Cloud gives all our programmers the possibility of working
with the demanding SharePoint Server 2010 without OS reinstallation and hardware upgrade.
</p>
        <p>
Also, we find that Amazon EC2 is very convenient if you need to increase the quantity
of servers very quickly.
</p>
        <p>
You could use Command Line Tools to automate some tasks with EC2 instances. We used
it to enable programmers to shut down and start their instances.
</p>
        <p>
          <a href="http://www.muranosoft.com/Outsourcingblog/content/binary/WindowsLiveWriter/UsingAmazontospeedupdevelopment_8873/clip_image008_2.gif">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image008" border="0" alt="clip_image008" src="http://www.muranosoft.com/Outsourcingblog/content/binary/WindowsLiveWriter/UsingAmazontospeedupdevelopment_8873/clip_image008_thumb.gif" width="650" height="457" />
          </a>
        </p>
        <img width="0" height="0" src="http://www.muranosoft.com/Outsourcingblog/aggbug.ashx?id=3ee4540e-0202-4502-abc9-f4cd5319402d" />
      </body>
      <title>Using Amazon to speed-up development</title>
      <guid isPermaLink="false">http://www.muranosoft.com/Outsourcingblog/PermaLink,guid,3ee4540e-0202-4502-abc9-f4cd5319402d.aspx</guid>
      <link>http://www.muranosoft.com/Outsourcingblog/Using-Amazon-To-Speedup-Development.aspx</link>
      <pubDate>Fri, 19 Mar 2010 14:45:00 GMT</pubDate>
      <description>&lt;h3&gt;Our goal
&lt;/h3&gt;
&lt;p&gt;
During the &lt;a href="http://www.muranosoft.com/Outsourcingblog/Murano-Software-At-Microsoft-SharePoint-2010-Social-Fest.aspx"&gt;Microsoft
SharePoint 2010 Social Fest&lt;/a&gt;, Murano’s programmers had to create seven applications
for the new SharePoint Server 2010. This article will show how Amazon Web Services
helped us to get results in just seven days.
&lt;/p&gt;
&lt;h3&gt;Why did we choose Amazon?
&lt;/h3&gt;
&lt;p&gt;
We had few days before the Microsoft SharePoint 2010 Social Fest to test the new SharePoint
server. Microsoft’s SharePoint Server 2010 is in beta status and has strict hardware
requirements. You must have 4GB of RAM to start working with it. Also, the best way
to use SharePoint Server 2010 is to install it on a Windows Server 2008 or Windows
Server 2008 R2 operating system. 
&lt;/p&gt;
&lt;p&gt;
So we had to upgrade some of the developers’ PC hardware and OS or find another solution.
There also was another problem – how to prepare the environment for the new developers
on SharePoint Social Fest’s team very quickly. We decided to check Amazon services. 
&lt;/p&gt;
&lt;p&gt;
Amazon Elastic Compute Cloud (Amazon EC2) is a Web-based service that provides compute
capacity in the cloud. Amazon EC2 presents a virtual computing environment, allowing
you to use Web service interfaces to launch instances with selected operating systems.
Fortunately, MS Windows Server 2008 is available to use on Amazon. We chose “Large
Instance” with 8GB RAM and 4 EC2 Compute Units to handle our tasks.
&lt;/p&gt;
&lt;h3&gt;How to start using Amazon Web Services
&lt;/h3&gt;
&lt;p&gt;
Getting to Amazon’s cloud is simple. You have to go to &lt;a href="http://aws.amazon.com/ec2/"&gt;http://aws.amazon.com/ec2&lt;/a&gt; and
register a new account if you don’t have one. After registering for service and filling
out your card data, you can create a new instance by wizard in EC2 AWS console:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.muranosoft.com/Outsourcingblog/content/binary/WindowsLiveWriter/UsingAmazontospeedupdevelopment_8873/clip_image002_2.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image002" border="0" alt="clip_image002" src="http://www.muranosoft.com/Outsourcingblog/content/binary/WindowsLiveWriter/UsingAmazontospeedupdevelopment_8873/clip_image002_thumb.gif" width="468" height="305" /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
After passing several steps, you will get new instances in the console:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.muranosoft.com/Outsourcingblog/content/binary/WindowsLiveWriter/UsingAmazontospeedupdevelopment_8873/clip_image004_2.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image004" border="0" alt="clip_image004" src="http://www.muranosoft.com/Outsourcingblog/content/binary/WindowsLiveWriter/UsingAmazontospeedupdevelopment_8873/clip_image004_thumb.gif" width="648" height="180" /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Now instances on Amazon EC2 use ELASTIC BLOCK STORE (EBS) to store data volumes. This
is good news because your data will stay alive after instance shutdown. 
&lt;/p&gt;
&lt;h3&gt;Our results
&lt;/h3&gt;
&lt;p&gt;
Virtual servers on Amazon have a good performance level. We used Visual Studio 2010
on it with hosted SharePoint 2010 sites, and the machines worked very promptly.
&lt;/p&gt;
&lt;p&gt;
As we selected Amazon EC2 as our platform for the SharePoint 2010 Social Fest, we
had to find out how to multiply the development environment in a short time. 
&lt;/p&gt;
&lt;p&gt;
The “Snapshot” function could help. It will take a snapshot from the selected data
volume. Then you can create a new volume from the snapshot and attach it to the instance.
But I found that instance’s Amazon Machine Image (AMI) creation is more applicable
for our task. 
&lt;/p&gt;
&lt;p&gt;
You can install any software you need, make your changes to the system configuration
and then create an image of your instance. Then you can use this image for creating
new instances. Using AMIs instead of snapshots gives you an advantage in time because
you will already get a configured instance right after the launch.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.muranosoft.com/Outsourcingblog/content/binary/WindowsLiveWriter/UsingAmazontospeedupdevelopment_8873/clip_image006_2.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image006" border="0" alt="clip_image006" src="http://www.muranosoft.com/Outsourcingblog/content/binary/WindowsLiveWriter/UsingAmazontospeedupdevelopment_8873/clip_image006_thumb.gif" width="428" height="298" /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Thus we prepared AMI with Visual Studio 2010 beta and SharePoint Server 2010 beta
installed on it, and we used it any time our developer needed a new environment.
&lt;/p&gt;
&lt;h3&gt;Benefits of using Amazon
&lt;/h3&gt;
&lt;p&gt;
Using Amazon Elastic Compute Cloud gives all our programmers the possibility of working
with the demanding SharePoint Server 2010 without OS reinstallation and hardware upgrade.
&lt;/p&gt;
&lt;p&gt;
Also, we find that Amazon EC2 is very convenient if you need to increase the quantity
of servers very quickly.
&lt;/p&gt;
&lt;p&gt;
You could use Command Line Tools to automate some tasks with EC2 instances. We used
it to enable programmers to shut down and start their instances.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.muranosoft.com/Outsourcingblog/content/binary/WindowsLiveWriter/UsingAmazontospeedupdevelopment_8873/clip_image008_2.gif"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image008" border="0" alt="clip_image008" src="http://www.muranosoft.com/Outsourcingblog/content/binary/WindowsLiveWriter/UsingAmazontospeedupdevelopment_8873/clip_image008_thumb.gif" width="650" height="457" /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.muranosoft.com/Outsourcingblog/aggbug.ashx?id=3ee4540e-0202-4502-abc9-f4cd5319402d" /&gt;</description>
      <comments>http://www.muranosoft.com/Outsourcingblog/CommentView,guid,3ee4540e-0202-4502-abc9-f4cd5319402d.aspx</comments>
      <category>ASP.NET</category>
      <category>Microsoft SharePoint</category>
      <category>Software Development</category>
      <category>Virtual</category>
    </item>
    <item>
      <trackback:ping>http://www.muranosoft.com/Outsourcingblog/Trackback.aspx?guid=4ee15e80-2020-4d42-a0f4-a114aaf3ff19</trackback:ping>
      <pingback:server>http://www.muranosoft.com/Outsourcingblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.muranosoft.com/Outsourcingblog/PermaLink,guid,4ee15e80-2020-4d42-a0f4-a114aaf3ff19.aspx</pingback:target>
      <dc:creator>Muranosoft admin</dc:creator>
      <wfw:comment>http://www.muranosoft.com/Outsourcingblog/CommentView,guid,4ee15e80-2020-4d42-a0f4-a114aaf3ff19.aspx</wfw:comment>
      <wfw:commentRss>http://www.muranosoft.com/Outsourcingblog/SyndicationService.asmx/GetEntryCommentsRss?guid=4ee15e80-2020-4d42-a0f4-a114aaf3ff19</wfw:commentRss>
      <slash:comments>3</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <em>By Alex, a</em>
          <i>
          </i>
          <em>
            <a href="http://www.muranosoft.com/services/microsoftnet.aspx">Senior
.NET Developer</a>
          </em>
          <i>
          </i>
          <em>on Murano Software’s team</em>
        </p>
        <p>
Murano Software is becoming a <a href="http://www.muranosoft.com/Outsourcingblog/Murano-Software-At-The-Microsoft-Mobile-Incubation-Week-In-Washington-DC.aspx">permanent
participant in the Microsoft Incubation Week events</a>. Last week (Jan 25-29), our
company participated as a development partner in <a href="http://www.microsoftstartupzone.com/SharepointSocialFest/Pages/default.aspx">Microsoft
SharePoint 2010 Social Fest</a> at Microsoft’s Silicon Valley campus. We provided
seven top Microsoft BizSpark startups with outsource development support, SharePoint
expertise and advice. Just as it was during other Microsoft Incubation Weeks, the
mission of our team, led by Dimitri Nikouline, this year was to create working solutions
for our clients in the shortest terms of the event. Our developers and startup representatives
were working day and night, in a warm and competitive atmosphere, being eager to try
the new features and implement their ideas. .
</p>
        <p>
This was even more challenging, since the products - Microsoft Visual Studio 2010
and Microsoft SharePoint 2010 - are Betas now, and there was no strong knowledge base,
except samples in Microsoft blogs and related Internet resources. But our company,
always being on the cutting edge of the development technologies, successfully defeated
all of these challenges. In addition to the true interest in the newest technologies
and software development passion, we got through these challenges because of intensive
communication and team spirit. Working with the different startup clients, we established
a single workspace for all involved to resolve issues faster and exchange tips, ideas,
and links.
</p>
        <p>
Although these startups work in different areas of business intelligence and communications,
they all are looking forward to the integration with SharePoint as an opportunity
to upgrade their working and beneficial products to the enterprise-level applications.
This wide range of interests resulted in a large variety of integration tasks successfully
resolved by our guys during that week, from the UI widgets customization to search,
synchronization and user profile management.
</p>
        <p>
          <a href="http://www.muranosoft.com/Outsourcingblog/content/binary/WindowsLiveWriter/MuranoSoftwareatMicrosoftSharePoint2010S_EA28/clip_image002_2.jpg">
            <img style="border-right-width: 0px; margin: 0px 0px 0px 10px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Huddle" border="0" hspace="12" alt="Huddle" align="right" src="http://www.muranosoft.com/Outsourcingblog/content/binary/WindowsLiveWriter/MuranoSoftwareatMicrosoftSharePoint2010S_EA28/clip_image002_thumb.jpg" width="155" height="171" />
          </a>
        </p>
        <p>
          <b>
            <a href="http://www.huddle.net/">Huddle</a>
          </b>
          <br />
The winning project, Huddle, is helping businesses across the world to work online
in a common workspace, share and edit the documents, involving the external users
in their workflows. Our guys did a great job using Silverlight and SharePoint 2010
features, customizing the UI and the back-end logic by means of timer jobs. 
</p>
        <p>
          <a href="http://www.calindasoftware.com/">
            <b>Calinda Software</b>
          </a>
          <br />
Calinda Software, the second winner with their MindUp product, are focused on making
e-mail communications structured and easy, so no attachment gets lost, and the history
of sent and received messages can be seen on a visual map. With SharePoint 2010, the
e-mail environment transparently becomes integrated with document libraries and lists
in MOSS. Our commitment to their success was a service, allowing users to search for
people with specific skills and give the relevancy estimates for these search results.    
</p>
        <p>
          <b>
            <a href="http://www.getconfer.com/">GetConfer</a>
          </b>
          <br />
Confer is a company that offers a microblogging Web application to simplify communications
between employees of a big company. In order to extend its functionality on the enterprise
SharePoint installation, we worked together on mechanisms to map Confer's users to
SharePoint users.
</p>
        <p>
          <b>
            <a href="http://www.cortex-intelligence.com/">Cortex Intelligence</a>
          </b>
          <br />
Cortex Intelligence provides a market intelligence service for Microsoft SharePoint
2010 users, letting them access external data, such as market data, news and so on.
During the event, our guys worked on integrating the microblog functionality of SharePoint
with external data providers, allowing them to post blog articles and put links to
external articles into the user's microblog.
</p>
        <p>
          <b>
            <a href="http://www.leveragesoftware.com/">Leverage Software</a>
          </b>
          <br />
LeverageSoftware's DesignSpace platform transforms sets of e-mail threads into a social
workspace that the users can share with other colleagues in their company. We helped
them to integrate with the people search functionality of SharePoint 2010.
</p>
        <p>
          <b>
            <a href="http://www.liaise.com/">Liaise</a>
          </b>
          <br />
Liaise allows SharePoint 2010 users to transparently update their SharePoint items
(tasks, lists and so on) with the information parsed from the e-mail messages they
send, save attachments in document libraries and so on. We made a prototype solution,
putting task summary information in the calendar, automatically updating any change
to the task list.
</p>
        <p>
          <b>
            <a href="http://www.loqu8.com/">Loqu8</a>
          </b>
          <br />
Loqu8 Prelude is a tool that’s integrated into Microsoft applications (Office, Media
Player, Control Panel, etc.), showing users contextually relevant information when
they are hovering a word. During Microsoft Incubation Week, we worked on the integration
of their tool with SharePoint’s platform.
</p>
        <img width="0" height="0" src="http://www.muranosoft.com/Outsourcingblog/aggbug.ashx?id=4ee15e80-2020-4d42-a0f4-a114aaf3ff19" />
      </body>
      <title>Murano Software at Microsoft SharePoint 2010 Social Fest</title>
      <guid isPermaLink="false">http://www.muranosoft.com/Outsourcingblog/PermaLink,guid,4ee15e80-2020-4d42-a0f4-a114aaf3ff19.aspx</guid>
      <link>http://www.muranosoft.com/Outsourcingblog/Murano-Software-At-Microsoft-SharePoint-2010-Social-Fest.aspx</link>
      <pubDate>Wed, 10 Feb 2010 14:39:09 GMT</pubDate>
      <description>&lt;p&gt;
&lt;em&gt;By Alex, a&lt;/em&gt;&lt;i&gt; &lt;/i&gt;&lt;em&gt;&lt;a href="http://www.muranosoft.com/services/microsoftnet.aspx"&gt;Senior
.NET Developer&lt;/a&gt;&lt;/em&gt;&lt;i&gt; &lt;/i&gt;&lt;em&gt;on Murano Software’s team&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
Murano Software is becoming a &lt;a href="http://www.muranosoft.com/Outsourcingblog/Murano-Software-At-The-Microsoft-Mobile-Incubation-Week-In-Washington-DC.aspx"&gt;permanent
participant in the Microsoft Incubation Week events&lt;/a&gt;. Last week (Jan 25-29), our
company participated as a development partner in &lt;a href="http://www.microsoftstartupzone.com/SharepointSocialFest/Pages/default.aspx"&gt;Microsoft
SharePoint 2010 Social Fest&lt;/a&gt; at Microsoft’s Silicon Valley campus. We provided
seven top Microsoft BizSpark startups with outsource development support, SharePoint
expertise and advice. Just as it was during other Microsoft Incubation Weeks, the
mission of our team, led by Dimitri Nikouline, this year was to create working solutions
for our clients in the shortest terms of the event. Our developers and startup representatives
were working day and night, in a warm and competitive atmosphere, being eager to try
the new features and implement their ideas. .
&lt;/p&gt;
&lt;p&gt;
This was even more challenging, since the products - Microsoft Visual Studio 2010
and Microsoft SharePoint 2010 - are Betas now, and there was no strong knowledge base,
except samples in Microsoft blogs and related Internet resources. But our company,
always being on the cutting edge of the development technologies, successfully defeated
all of these challenges. In addition to the true interest in the newest technologies
and software development passion, we got through these challenges because of intensive
communication and team spirit. Working with the different startup clients, we established
a single workspace for all involved to resolve issues faster and exchange tips, ideas,
and links.
&lt;/p&gt;
&lt;p&gt;
Although these startups work in different areas of business intelligence and communications,
they all are looking forward to the integration with SharePoint as an opportunity
to upgrade their working and beneficial products to the enterprise-level applications.
This wide range of interests resulted in a large variety of integration tasks successfully
resolved by our guys during that week, from the UI widgets customization to search,
synchronization and user profile management.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.muranosoft.com/Outsourcingblog/content/binary/WindowsLiveWriter/MuranoSoftwareatMicrosoftSharePoint2010S_EA28/clip_image002_2.jpg"&gt;&lt;img style="border-right-width: 0px; margin: 0px 0px 0px 10px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Huddle" border="0" hspace="12" alt="Huddle" align="right" src="http://www.muranosoft.com/Outsourcingblog/content/binary/WindowsLiveWriter/MuranoSoftwareatMicrosoftSharePoint2010S_EA28/clip_image002_thumb.jpg" width="155" height="171" /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;&lt;a href="http://www.huddle.net/"&gt;Huddle&lt;/a&gt;&lt;/b&gt; 
&lt;br /&gt;
The winning project, Huddle, is helping businesses across the world to work online
in a common workspace, share and edit the documents, involving the external users
in their workflows. Our guys did a great job using Silverlight and SharePoint 2010
features, customizing the UI and the back-end logic by means of timer jobs. 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.calindasoftware.com/"&gt;&lt;b&gt;Calinda Software&lt;/b&gt;&lt;/a&gt; 
&lt;br /&gt;
Calinda Software, the second winner with their MindUp product, are focused on making
e-mail communications structured and easy, so no attachment gets lost, and the history
of sent and received messages can be seen on a visual map. With SharePoint 2010, the
e-mail environment transparently becomes integrated with document libraries and lists
in MOSS. Our commitment to their success was a service, allowing users to search for
people with specific skills and give the relevancy estimates for these search results.&amp;#160;&amp;#160;&amp;#160; 
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;&lt;a href="http://www.getconfer.com/"&gt;GetConfer&lt;/a&gt;&lt;/b&gt; 
&lt;br /&gt;
Confer is a company that offers a microblogging Web application to simplify communications
between employees of a big company. In order to extend its functionality on the enterprise
SharePoint installation, we worked together on mechanisms to map Confer's users to
SharePoint users.
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;&lt;a href="http://www.cortex-intelligence.com/"&gt;Cortex Intelligence&lt;/a&gt;&lt;/b&gt; 
&lt;br /&gt;
Cortex Intelligence provides a market intelligence service for Microsoft SharePoint
2010 users, letting them access external data, such as market data, news and so on.
During the event, our guys worked on integrating the microblog functionality of SharePoint
with external data providers, allowing them to post blog articles and put links to
external articles into the user's microblog.
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;&lt;a href="http://www.leveragesoftware.com/"&gt;Leverage Software&lt;/a&gt;&lt;/b&gt; 
&lt;br /&gt;
LeverageSoftware's DesignSpace platform transforms sets of e-mail threads into a social
workspace that the users can share with other colleagues in their company. We helped
them to integrate with the people search functionality of SharePoint 2010.
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;&lt;a href="http://www.liaise.com/"&gt;Liaise&lt;/a&gt;&lt;/b&gt; 
&lt;br /&gt;
Liaise allows SharePoint 2010 users to transparently update their SharePoint items
(tasks, lists and so on) with the information parsed from the e-mail messages they
send, save attachments in document libraries and so on. We made a prototype solution,
putting task summary information in the calendar, automatically updating any change
to the task list.
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;&lt;a href="http://www.loqu8.com/"&gt;Loqu8&lt;/a&gt;&lt;/b&gt; 
&lt;br /&gt;
Loqu8 Prelude is a tool that’s integrated into Microsoft applications (Office, Media
Player, Control Panel, etc.), showing users contextually relevant information when
they are hovering a word. During Microsoft Incubation Week, we worked on the integration
of their tool with SharePoint’s platform.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.muranosoft.com/Outsourcingblog/aggbug.ashx?id=4ee15e80-2020-4d42-a0f4-a114aaf3ff19" /&gt;</description>
      <comments>http://www.muranosoft.com/Outsourcingblog/CommentView,guid,4ee15e80-2020-4d42-a0f4-a114aaf3ff19.aspx</comments>
      <category>ASP.NET</category>
      <category>Microsoft SharePoint</category>
      <category>Software Development</category>
      <category>Visual Studio</category>
    </item>
    <item>
      <trackback:ping>http://www.muranosoft.com/Outsourcingblog/Trackback.aspx?guid=514215b3-7010-4978-9311-e513fc478254</trackback:ping>
      <pingback:server>http://www.muranosoft.com/Outsourcingblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.muranosoft.com/Outsourcingblog/PermaLink,guid,514215b3-7010-4978-9311-e513fc478254.aspx</pingback:target>
      <dc:creator>Muranosoft admin</dc:creator>
      <wfw:comment>http://www.muranosoft.com/Outsourcingblog/CommentView,guid,514215b3-7010-4978-9311-e513fc478254.aspx</wfw:comment>
      <wfw:commentRss>http://www.muranosoft.com/Outsourcingblog/SyndicationService.asmx/GetEntryCommentsRss?guid=514215b3-7010-4978-9311-e513fc478254</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <em>By Vladimir, a <a href="/services/microsoftnet.aspx">.NET developer</a> on Muranosoft’s
team.</em>
        </p>
        <p>
The new Microsoft Visual Studio 2010 raises the <a href="/services/sharepoint.aspx">development
of SharePoint projects</a> to an absolutely new level. You won’t need to install any
special extensions like those in Visual Studio 2008. Visual Studio 2010 supports all
the necessary tools, which really help to improve the development process. 
</p>
        <p>
So let’s take a look at the new SharePoint development features that Visual Studio
2010 offers. 
</p>
        <p>
 
</p>
        <p>
          <strong>
            <font size="3">New Project Templates</font>
          </strong>
        </p>
        <p>
First of all, the VS 2010 supports many different templates for the SharePoint projects,
such as: 
<br />
•    Blank Site Definition 
<br />
•    Content Type 
<br />
•    List Definition 
<br />
•    State Machine Workflow 
<br />
•    WSP Import 
<br />
•    Business Data Catalog Model 
<br />
•    Deployment Module 
<br />
•    Event Receiver 
<br />
•    Sequential Workflow 
<br />
•    Web Part 
</p>
        <p>
After selecting any of these templates, you have to go through some steps to configure
your development environment, of course. 
</p>
        <p>
 
</p>
        <p>
          <strong>
            <font size="3">SharePoint Solution Architecture </font>
          </strong>
        </p>
        <p>
Any project type will include two key nodes that you can’t remove, relocate or rename.
There are <a href="http://blogs.msdn.com/vssharepointtoolsblog/archive/2009/11/02/getting-started-with-the-sharepoint-packaging-designers.aspx">Features
and Package nodes</a>. These ones will be available in a project, even if your project
doesn’t contain any feature or package definition. 
</p>
        <p>
The “Features” node contains all your project features. If you want to add a new feature,
just right click on this node and select “Add Feature.” You can use the new Feature
Designer tool to manage a corresponding feature. 
</p>
        <p>
The “Package” node contains only one *.WSP file, which describes the deployment rules
of your SharePoint project. Double clicking on this file affects the Package Designer
tool, which allows you to configure all deployment aspects. 
</p>
        <p>
In addition to these nodes, the VS 2010 contains the package explorer, which also
allows you to manage your SharePoint items. For example, you can group files into
features or packages, raise the Features/Packages designer, or move files from one
feature or package to another. 
</p>
        <p>
 
</p>
        <p>
          <strong>
            <font size="3">Changes in the Server Explorer</font>
          </strong>
        </p>
        <p>
Now the Server Explorer supports a new node called SharePoint Connections. This node
contains the URL to all your SharePoint sites. You can add the new site by clicking
on the SharePoint Connections node, clicking “Add Connection” and entering the URL
to the SharePoint site. This will allow you to browse the contents (such as features,
lists and sites) and configure the SharePoint server settings. 
</p>
        <p>
 
</p>
        <p>
          <strong>
            <font size="3">Development </font>
          </strong>
        </p>
        <p>
Some few features are directly linked with a development process.  These include
the new Client Object Model, LINQ to SharePoint, Sandboxed Solutions and “External
Data Lists.”
</p>
        <ul>
          <li>
            <a href="http://blogs.msdn.com/ericwhite/archive/2009/11/20/using-the-sharepoint-2010-managed-client-object-model.aspx">Client
Object Model</a> allows us to have direct access to the object model by using JavaScript,
Silverlight or .NET code without calling Web Services. 
</li>
          <li>
            <a href="http://www.chakkaradeep.com/post/SharePoint-2010-e28093-LINQ-for-SharePoint.aspx">LINQ
to SharePoint</a> provides  an ability to use usual LINQ-queries to manipulate
with SharePoint lists. Now we can forget about foreach’es and other redundant code
in many cases. 
</li>
          <li>
            <a href="http://community.bamboosolutions.com/blogs/sharepoint-2010/archive/2009/10/29/sharepoint-2010-sandbox-solution-an-overview.aspx">Sandboxed
Solutions</a> allow us to deploy our Web Parts without having an administrative privilege.
It was one of the biggest problems in previous versions of the SharePoint environment.
This is achieved by running solutions in a separate process that is restricted by
.Net CAS policy. So the framework can control solutions and shut down any of them
automatically. 
</li>
          <li>
            <a href="http://blogs.pointbridge.com/Blogs/monnette_jeff/Pages/Post.aspx?_ID=23">External
Lists</a> (formerly known as the Business Data Catalog) is a powerful mechanism to
organize collaboration your SharePoint project with other applications or data sources.
You should describe an entities structure and link with a data source. After that,
you can use received data in your SharePoint project. 
</li>
        </ul>
        <p>
 
</p>
        <p>
          <strong>
            <font size="3">Debug and Deploy Process</font>
          </strong>
        </p>
        <p>
As you may know, the debug and deploy processes were quite difficult in the previous
versions of Visual Studio. The newest one dramatically changes this work, offering
us an absolutely new way. Now you shouldn’t deploy your package on the server, deactivate
and uninstall all features, retract the solution manually, etc. You shouldn’t install
an additional Visual Studio on your SharePoint server, either, just to debug your
code. 
</p>
        <p>
After configuring your SharePoint solution, you just press the F5 button and the installation
of your package will be done automatically, even if an old solution has been installed
on the server. All work (deactivating, retracting, etc.) will be done automatically.
Amazing, isn’t it? 
</p>
        <p>
After installing the new package, the Visual Studio’s debugger will be attached to
the Windows SharePoint services process. To enable this, you should run you project
in the debug mode (when you first debug, VS suggests to modify your web.config file
accordingly). Please note, you could use it on your development side, not on the SharePoint
server side! 
</p>
        <p>
 
</p>
        <p>
          <strong>
            <font size="3">Resources </font>
          </strong>
        </p>
        <p>
If you want to get more information, you can watch <a href="http://channel9.msdn.com/posts/funkyonex/Overview-of-SharePoint-Development-in-Visual-Studio-2010/">this
video</a> or follow <a href="http://msdn.microsoft.com/en-us/library/ee330921(VS.100).aspx">this
link</a> to read the official documentation. There is another <a href="http://msdn.microsoft.com/en-us/magazine/ee309510.aspx">great
article</a> about new tools for SharePoint development in the VS 2010, written by
Steve Fox, senior technical evangelist. Also, I suggest you take a look at the <a href="http://channel9.msdn.com/learn/courses/SharePoint2010Developer/">short
training courses</a> provided by Channel 9. 
</p>
        <p>
Enjoy!
</p>
        <img width="0" height="0" src="http://www.muranosoft.com/Outsourcingblog/aggbug.ashx?id=514215b3-7010-4978-9311-e513fc478254" />
      </body>
      <title>SharePoint Development with Visual Studio 2010</title>
      <guid isPermaLink="false">http://www.muranosoft.com/Outsourcingblog/PermaLink,guid,514215b3-7010-4978-9311-e513fc478254.aspx</guid>
      <link>http://www.muranosoft.com/Outsourcingblog/SharePoint-Development-With-Visual-Studio-2010.aspx</link>
      <pubDate>Mon, 30 Nov 2009 15:00:57 GMT</pubDate>
      <description>&lt;p&gt;
&lt;em&gt;By Vladimir, a &lt;a href="/services/microsoftnet.aspx"&gt;.NET developer&lt;/a&gt; on Muranosoft’s
team.&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
The new Microsoft Visual Studio 2010 raises the &lt;a href="/services/sharepoint.aspx"&gt;development
of SharePoint projects&lt;/a&gt; to an absolutely new level. You won’t need to install any
special extensions like those in Visual Studio 2008. Visual Studio 2010 supports all
the necessary tools, which really help to improve the development process. 
&lt;/p&gt;
&lt;p&gt;
So let’s take a look at the new SharePoint development features that Visual Studio
2010 offers. 
&lt;/p&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;font size="3"&gt;New Project Templates&lt;/font&gt;&lt;/strong&gt; 
&lt;/p&gt;
&lt;p&gt;
First of all, the VS 2010 supports many different templates for the SharePoint projects,
such as: 
&lt;br /&gt;
•&amp;#160;&amp;#160;&amp;#160; Blank Site Definition 
&lt;br /&gt;
•&amp;#160;&amp;#160;&amp;#160; Content Type 
&lt;br /&gt;
•&amp;#160;&amp;#160;&amp;#160; List Definition 
&lt;br /&gt;
•&amp;#160;&amp;#160;&amp;#160; State Machine Workflow 
&lt;br /&gt;
•&amp;#160;&amp;#160;&amp;#160; WSP Import 
&lt;br /&gt;
•&amp;#160;&amp;#160;&amp;#160; Business Data Catalog Model 
&lt;br /&gt;
•&amp;#160;&amp;#160;&amp;#160; Deployment Module 
&lt;br /&gt;
•&amp;#160;&amp;#160;&amp;#160; Event Receiver 
&lt;br /&gt;
•&amp;#160;&amp;#160;&amp;#160; Sequential Workflow 
&lt;br /&gt;
•&amp;#160;&amp;#160;&amp;#160; Web Part 
&lt;/p&gt;
&lt;p&gt;
After selecting any of these templates, you have to go through some steps to configure
your development environment, of course. 
&lt;/p&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;font size="3"&gt;SharePoint Solution Architecture &lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Any project type will include two key nodes that you can’t remove, relocate or rename.
There are &lt;a href="http://blogs.msdn.com/vssharepointtoolsblog/archive/2009/11/02/getting-started-with-the-sharepoint-packaging-designers.aspx"&gt;Features
and Package nodes&lt;/a&gt;. These ones will be available in a project, even if your project
doesn’t contain any feature or package definition. 
&lt;/p&gt;
&lt;p&gt;
The “Features” node contains all your project features. If you want to add a new feature,
just right click on this node and select “Add Feature.” You can use the new Feature
Designer tool to manage a corresponding feature. 
&lt;/p&gt;
&lt;p&gt;
The “Package” node contains only one *.WSP file, which describes the deployment rules
of your SharePoint project. Double clicking on this file affects the Package Designer
tool, which allows you to configure all deployment aspects. 
&lt;/p&gt;
&lt;p&gt;
In addition to these nodes, the VS 2010 contains the package explorer, which also
allows you to manage your SharePoint items. For example, you can group files into
features or packages, raise the Features/Packages designer, or move files from one
feature or package to another. 
&lt;/p&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;font size="3"&gt;Changes in the Server Explorer&lt;/font&gt;&lt;/strong&gt; 
&lt;/p&gt;
&lt;p&gt;
Now the Server Explorer supports a new node called SharePoint Connections. This node
contains the URL to all your SharePoint sites. You can add the new site by clicking
on the SharePoint Connections node, clicking “Add Connection” and entering the URL
to the SharePoint site. This will allow you to browse the contents (such as features,
lists and sites) and configure the SharePoint server settings. 
&lt;/p&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;font size="3"&gt;Development &lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Some few features are directly linked with a development process.&amp;#160; These include
the new Client Object Model, LINQ to SharePoint, Sandboxed Solutions and “External
Data Lists.”
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://blogs.msdn.com/ericwhite/archive/2009/11/20/using-the-sharepoint-2010-managed-client-object-model.aspx"&gt;Client
Object Model&lt;/a&gt; allows us to have direct access to the object model by using JavaScript,
Silverlight or .NET code without calling Web Services. 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.chakkaradeep.com/post/SharePoint-2010-e28093-LINQ-for-SharePoint.aspx"&gt;LINQ
to SharePoint&lt;/a&gt; provides&amp;#160; an ability to use usual LINQ-queries to manipulate
with SharePoint lists. Now we can forget about foreach’es and other redundant code
in many cases. 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://community.bamboosolutions.com/blogs/sharepoint-2010/archive/2009/10/29/sharepoint-2010-sandbox-solution-an-overview.aspx"&gt;Sandboxed
Solutions&lt;/a&gt; allow us to deploy our Web Parts without having an administrative privilege.
It was one of the biggest problems in previous versions of the SharePoint environment.
This is achieved by running solutions in a separate process that is restricted by
.Net CAS policy. So the framework can control solutions and shut down any of them
automatically. 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://blogs.pointbridge.com/Blogs/monnette_jeff/Pages/Post.aspx?_ID=23"&gt;External
Lists&lt;/a&gt; (formerly known as the Business Data Catalog) is a powerful mechanism to
organize collaboration your SharePoint project with other applications or data sources.
You should describe an entities structure and link with a data source. After that,
you can use received data in your SharePoint project. 
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;font size="3"&gt;Debug and Deploy Process&lt;/font&gt;&lt;/strong&gt; 
&lt;/p&gt;
&lt;p&gt;
As you may know, the debug and deploy processes were quite difficult in the previous
versions of Visual Studio. The newest one dramatically changes this work, offering
us an absolutely new way. Now you shouldn’t deploy your package on the server, deactivate
and uninstall all features, retract the solution manually, etc. You shouldn’t install
an additional Visual Studio on your SharePoint server, either, just to debug your
code. 
&lt;/p&gt;
&lt;p&gt;
After configuring your SharePoint solution, you just press the F5 button and the installation
of your package will be done automatically, even if an old solution has been installed
on the server. All work (deactivating, retracting, etc.) will be done automatically.
Amazing, isn’t it? 
&lt;/p&gt;
&lt;p&gt;
After installing the new package, the Visual Studio’s debugger will be attached to
the Windows SharePoint services process. To enable this, you should run you project
in the debug mode (when you first debug, VS suggests to modify your web.config file
accordingly). Please note, you could use it on your development side, not on the SharePoint
server side! 
&lt;/p&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;font size="3"&gt;Resources &lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
If you want to get more information, you can watch &lt;a href="http://channel9.msdn.com/posts/funkyonex/Overview-of-SharePoint-Development-in-Visual-Studio-2010/"&gt;this
video&lt;/a&gt; or follow &lt;a href="http://msdn.microsoft.com/en-us/library/ee330921(VS.100).aspx"&gt;this
link&lt;/a&gt; to read the official documentation. There is another &lt;a href="http://msdn.microsoft.com/en-us/magazine/ee309510.aspx"&gt;great
article&lt;/a&gt; about new tools for SharePoint development in the VS 2010, written by
Steve Fox, senior technical evangelist. Also, I suggest you take a look at the &lt;a href="http://channel9.msdn.com/learn/courses/SharePoint2010Developer/"&gt;short
training courses&lt;/a&gt; provided by Channel 9. 
&lt;/p&gt;
&lt;p&gt;
Enjoy!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.muranosoft.com/Outsourcingblog/aggbug.ashx?id=514215b3-7010-4978-9311-e513fc478254" /&gt;</description>
      <comments>http://www.muranosoft.com/Outsourcingblog/CommentView,guid,514215b3-7010-4978-9311-e513fc478254.aspx</comments>
      <category>ASP.NET</category>
      <category>Microsoft SharePoint</category>
      <category>Software Development</category>
      <category>Visual Studio</category>
    </item>
    <item>
      <trackback:ping>http://www.muranosoft.com/Outsourcingblog/Trackback.aspx?guid=6e91891a-20eb-4db1-8bd2-0342f82c4041</trackback:ping>
      <pingback:server>http://www.muranosoft.com/Outsourcingblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.muranosoft.com/Outsourcingblog/PermaLink,guid,6e91891a-20eb-4db1-8bd2-0342f82c4041.aspx</pingback:target>
      <dc:creator>Muranosoft admin</dc:creator>
      <wfw:comment>http://www.muranosoft.com/Outsourcingblog/CommentView,guid,6e91891a-20eb-4db1-8bd2-0342f82c4041.aspx</wfw:comment>
      <wfw:commentRss>http://www.muranosoft.com/Outsourcingblog/SyndicationService.asmx/GetEntryCommentsRss?guid=6e91891a-20eb-4db1-8bd2-0342f82c4041</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <em>By Sergey and Maxim, a Quality Assurance Manager and a <a href="/services/microsoftnet.aspx">.NET
Developer</a> on Murano Software’s team.</em>
        </p>
        <p>
If you have ever worked with <a href="http://en.wikipedia.org/wiki/Selenium_%28software%29">Selenium</a>,
you may find XPath a convenient alternative to walking through document trees. In
case you are using Firefox, XPath remains an opportune and fast way to find specific
elements without walking the DOM manually. Unfortunately, it works tremendously slowly
in IE 6 and IE 7. Recently, we faced this problem, and now we’re happy to share our
elegant solution with you. 
</p>
        <p>
To solve the speed problem in IE, we tried to replace XPath selectors with CSS ones.
It gave us a 10x speed up in IE. Impressive, but by using CSS, we lost a very useful
feature that XPath offers. In Xpath, we can use the ‘..’ expression to select the
parent of the current node. This feature is necessary when you need to click a button
next to the element having a particular name in the list of elements. See the sample
below. 
</p>
        <blockquote>
          <code>
            <font color="#000000" size="2" face="Courier New">
              <font color="#0000ff">&lt;</font>
              <font color="#800000">table</font>
              <font color="#ff0000">class</font>
              <font color="#0000ff">="style"</font>
              <font color="#0000ff">&gt;</font>
              <br />
    <font color="#0000ff">&lt;</font><font color="#800000">tr</font><font color="#ff0000">class</font><font color="#0000ff">="somestyle"</font><font color="#0000ff">&gt;</font><br />
        <font color="#0000ff">&lt;</font><font color="#800000">td</font><font color="#0000ff">&gt;</font>SomeName1<font color="#0000ff">&lt;/</font><font color="#800000">td</font><font color="#0000ff">&gt;</font><br />
        <font color="#0000ff">&lt;</font><font color="#800000">td</font><font color="#0000ff">&gt;</font><br />
            <font color="#0000ff">&lt;</font><font color="#800000">input</font><font color="#ff0000">type</font><font color="#0000ff">="submit"</font><font color="#ff0000">value</font><font color="#0000ff">="Edit"</font><font color="#ff0000">class</font><font color="#0000ff">="btn"</font><font color="#0000ff">/&gt;</font><br />
        <font color="#0000ff">&lt;/</font><font color="#800000">td</font><font color="#0000ff">&gt;</font><br />
    <font color="#0000ff">&lt;/</font><font color="#800000">tr</font><font color="#0000ff">&gt;</font><br />
    <font color="#0000ff">&lt;</font><font color="#800000">tr</font><font color="#ff0000">class</font><font color="#0000ff">="gvAlternatingRowH35"</font><font color="#0000ff">&gt;</font><br />
        <font color="#0000ff">&lt;</font><font color="#800000">td</font><font color="#0000ff">&gt;</font>SomeName2<font color="#0000ff">&lt;/</font><font color="#800000">td</font><font color="#0000ff">&gt;</font><br />
        <font color="#0000ff">&lt;</font><font color="#800000">td</font><font color="#0000ff">&gt;</font><br />
            <font color="#0000ff">&lt;</font><font color="#800000">input</font><font color="#ff0000">type</font><font color="#0000ff">="submit"</font><font color="#ff0000">value</font><font color="#0000ff">="Edit"</font> <font color="#ff0000">class</font><font color="#0000ff">="btn"</font><font color="#0000ff">/&gt;</font><br />
        <font color="#0000ff">&lt;/</font><font color="#800000">td</font><font color="#0000ff">&gt;</font><br />
    <font color="#0000ff">&lt;/</font><font color="#800000">tr</font><font color="#0000ff">&gt;</font><br /><font color="#0000ff">&lt;/</font><font color="#800000">table</font><font color="#0000ff">&gt;</font><br /></font>
            <br />
          </code>
        </blockquote>
        <p>
All the buttons have the same attributes.  If you want to click the “Edit” button
next to SomeName2, you can easily complete this task in selenium by using XPath and
its parent feature:
</p>
        <blockquote>
          <code>
            <font color="#000000" size="2" face="Courier New">selenium.click(<font color="#a31515">"//td[text()='SomeName2']/../td/input[@value='Edit']"</font>)</font>
            <br />
            <br />
          </code>
        </blockquote>
        <p>
As we mentioned above, this won’t be that easy to do with CSS because it doesn’t have
the appropriate feature. So, we used the JQuery parent() function to have the ability
to select the parent of the current node. It works really fast in all browsers, since
JQuery uses CSS.  
</p>
        <p>
We added  Jquery’s library to the Selenium server (see steps 1 and 2 below) and
executed JQuery script directly from Selenium. To execute JQuery script, you can use <strong>selenium.getEval(someJS)</strong> if
you need the return value, or <strong>selenium.runScript(someJS)</strong> if you don’t. 
</p>
        <p>
But that was not enough for us. We wanted to select the parent element by using the
easy syntaxes of CSS locators. To use them, we had to add a new custom locator to
Selenium. Below, find the three easy steps that we took to add a custom locator. 
</p>
        <p>
          <strong>
            <font size="3">1. Add Jquery’s library to Selenium server.</font>
          </strong>
        </p>
        <p>
Add JQuery’s library (‘jquery.min.js’) to your selenium-server.jar (‘selenium-server.jar\core\scripts\’
folder). To do that, open ‘selenium-server.jar’ by using one of the archives — for
example, 7-Zip — and drag-and-drop ‘jquery.min.js’ in the mentioned folder. 
</p>
        <p>
          <strong>
          </strong>
        </p>
        <p>
          <strong>
            <font size="3">2. Add script reference to JQuery library.</font>
          </strong>
        </p>
        <p>
Add script reference to ‘jquery.min.js’ to the ‘&lt;head&gt;’ section of the RemoteRunner.html
(‘selenium-server.jar\core\’).
</p>
        <blockquote>
          <code>
            <font color="#000000" size="2" face="Courier New">
              <font color="#0000ff">&lt;</font>
              <font color="#800000">head</font>
              <font color="#0000ff">&gt;</font>
              <br />
... 
<br /><font color="#0000ff">&lt;</font><font color="#800000">script</font><font color="#ff0000">language</font><font color="#0000ff">="JavaScript"</font><font color="#ff0000">type</font><font color="#0000ff">="text/javascript" </font><font color="#ff0000">src</font><font color="#0000ff">="scripts/jquery.min.js"</font><font color="#0000ff">/&gt;</font><br />
... 
<br /><font color="#0000ff">&lt;\</font><font color="#800000">head</font><font color="#0000ff">&gt;</font><br /></font>
            <br />
          </code>
        </blockquote>
        <p>
          <strong>
            <font size="3">3. Add new JQuery locator to Selenium core.</font>
          </strong>
        </p>
        <p>
You can add a new JQuery locator to the Selenium core in the <strong>runSeleniumTest()</strong> function
of the selenium-remoterunner.js file. All you need to do is to add a call of <strong>selenium.doAddLocationStrategy()</strong> method
before Selenium property initialization of the window object. See the sample below
for more details. 
</p>
        <blockquote>
          <code>
            <font color="#000000" size="2" face="Courier New">
              <font color="#0000ff">function</font> runSeleniumTest()
{ 
<br />
    ... 
<br />
    selenium.doAddLocationStrategy("jquery", " 
<br />
var loc = <font color="#0000ff">locator</font>; 
<br />
var attr = <font color="#0000ff">null</font>; 
<br />
var isattr = <font color="#0000ff">false</font>; 
<br />
var inx = <font color="#0000ff">locator</font>.lastIndexOf(<font color="#a31515">'@'</font>); 
<br /><br /><font color="#0000ff">if</font> (inx != -1) { 
<br />
    loc = <font color="#0000ff">locator</font>.<font color="#0000ff">substring</font>(0,
inx); 
<br />
    attr = <font color="#0000ff">locator</font>.<font color="#0000ff">substring</font>(inx
+ 1); 
<br />
    isattr = <font color="#0000ff">true</font><br />
} 
<br /><br />
var selectors = loc.split(<font color="#a31515">'&lt;'</font>); 
<br />
var <font color="#0000ff">found</font> = $(inDocument); 
<br /><br /><font color="#0000ff">for</font> (var i = 0; i &lt; selectors.length; i++) { 
<br />
    <font color="#0000ff">if</font> (i &gt; 0) {<font color="#0000ff">found</font> =
$(<font color="#0000ff">found</font>.parents()[0]); 
<br />
} 
<br /><br /><font color="#0000ff">if</font> (jQuery.<font color="#0000ff">trim</font>(selectors[i])
!= <font color="#a31515">''</font>) 
<br />
    <font color="#0000ff">found</font> = <font color="#0000ff">found</font>.find(selectors[i]); 
<br />
} 
<br /><br /><font color="#0000ff">if</font> (<font color="#0000ff">found</font>.length &gt; 0)
{ 
<br />
    <font color="#0000ff">if</font> (isattr) { 
<br />
        <font color="#0000ff">return</font><font color="#0000ff">found</font>[0].getAttributeNode(attr); 
<br />
    } 
<br />
    <font color="#0000ff">else</font> { 
<br />
        <font color="#0000ff">return</font><font color="#0000ff">found</font>[0]; 
<br />
    } 
<br />
} 
<br /><font color="#0000ff">else</font> { 
<br />
    <font color="#0000ff">return</font><font color="#0000ff">null</font>; 
<br />
} 
<br />
    "); 
<br />
    ... 
<br />
} 
<br /></font>
            <br />
          </code>
        </blockquote>
        <p>
The first parameter of the <strong>selenium.doAddLocationStrategy</strong> method
(“JQuery”) is the new Selenium locator’s name. The second one (“var loc = locator…”)
is the new custom Selenium locator. If you want to, you can write your own implementation
for the locator. To call the JQuery parent() function, we used the '&lt;' custom symbol
.  
</p>
        <p>
Finally, let’s take a look at how you can use the new JQuery locators, instead of
the XPath ones. 
</p>
        <p>
XPath locators: 
<br />
•    xpath=//a[contains(@href,'#id1')] 
<br />
•    xpath=(//table[@class='stylee'])//th[text()='theHeaderText']/../td 
<br />
•    xpath=//input[@name='name2' and @value='yes'] 
</p>
        <p>
JQuery locators: 
<br />
•    jquery= a[href*='#id1'] 
<br />
•    jquery= table[class='stylee'] th:contains('theHeaderText')&lt;td 
<br />
•    jquery= input[name='name2'][value='yes'] 
</p>
        <p>
We hope you’ll find our experience useful to you. Also, we’d be happy to answer your
questions if you have any!
</p>
        <img width="0" height="0" src="http://www.muranosoft.com/Outsourcingblog/aggbug.ashx?id=6e91891a-20eb-4db1-8bd2-0342f82c4041" />
      </body>
      <title>How to Use JQuery Instead of XPath Locators in Selenium Testing Framework</title>
      <guid isPermaLink="false">http://www.muranosoft.com/Outsourcingblog/PermaLink,guid,6e91891a-20eb-4db1-8bd2-0342f82c4041.aspx</guid>
      <link>http://www.muranosoft.com/Outsourcingblog/How-To-Use-JQuery-Instead-Of-XPath-Locators-In-Selenium-Testing-Framework.aspx</link>
      <pubDate>Wed, 18 Nov 2009 11:29:25 GMT</pubDate>
      <description>&lt;p&gt;
&lt;em&gt;By Sergey and Maxim, a Quality Assurance Manager and a &lt;a href="/services/microsoftnet.aspx"&gt;.NET
Developer&lt;/a&gt; on Murano Software’s team.&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
If you have ever worked with &lt;a href="http://en.wikipedia.org/wiki/Selenium_%28software%29"&gt;Selenium&lt;/a&gt;,
you may find XPath a convenient alternative to walking through document trees. In
case you are using Firefox, XPath remains an opportune and fast way to find specific
elements without walking the DOM manually. Unfortunately, it works tremendously slowly
in IE 6 and IE 7. Recently, we faced this problem, and now we’re happy to share our
elegant solution with you. 
&lt;/p&gt;
&lt;p&gt;
To solve the speed problem in IE, we tried to replace XPath selectors with CSS ones.
It gave us a 10x speed up in IE. Impressive, but by using CSS, we lost a very useful
feature that XPath offers. In Xpath, we can use the ‘..’ expression to select the
parent of the current node. This feature is necessary when you need to click a button
next to the element having a particular name in the list of elements. See the sample
below. 
&lt;/p&gt;
&lt;blockquote&gt;&lt;code&gt;&lt;font color="#000000" size="2" face="Courier New"&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#800000"&gt;table&lt;/font&gt; &lt;font color="#ff0000"&gt;class&lt;/font&gt;&lt;font color="#0000ff"&gt;=&amp;quot;style&amp;quot;&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt; 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#800000"&gt;tr&lt;/font&gt; &lt;font color="#ff0000"&gt;class&lt;/font&gt;&lt;font color="#0000ff"&gt;=&amp;quot;somestyle&amp;quot;&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt; 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#800000"&gt;td&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;SomeName1&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#800000"&gt;td&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt; 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#800000"&gt;td&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt; 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#800000"&gt;input&lt;/font&gt; &lt;font color="#ff0000"&gt;type&lt;/font&gt;&lt;font color="#0000ff"&gt;=&amp;quot;submit&amp;quot;&lt;/font&gt; &lt;font color="#ff0000"&gt;value&lt;/font&gt;&lt;font color="#0000ff"&gt;=&amp;quot;Edit&amp;quot;&lt;/font&gt; &lt;font color="#ff0000"&gt;class&lt;/font&gt;&lt;font color="#0000ff"&gt;=&amp;quot;btn&amp;quot;&lt;/font&gt; &lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt; 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#800000"&gt;td&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt; 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#800000"&gt;tr&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt; 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#800000"&gt;tr&lt;/font&gt; &lt;font color="#ff0000"&gt;class&lt;/font&gt;&lt;font color="#0000ff"&gt;=&amp;quot;gvAlternatingRowH35&amp;quot;&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt; 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#800000"&gt;td&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;SomeName2&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#800000"&gt;td&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt; 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#800000"&gt;td&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt; 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#800000"&gt;input&lt;/font&gt; &lt;font color="#ff0000"&gt;type&lt;/font&gt;&lt;font color="#0000ff"&gt;=&amp;quot;submit&amp;quot;&lt;/font&gt; &lt;font color="#ff0000"&gt;value&lt;/font&gt;&lt;font color="#0000ff"&gt;=&amp;quot;Edit&amp;quot;&lt;/font&gt;&amp;#160;&lt;font color="#ff0000"&gt;class&lt;/font&gt;&lt;font color="#0000ff"&gt;=&amp;quot;btn&amp;quot;&lt;/font&gt; &lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt; 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#800000"&gt;td&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt; 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#800000"&gt;tr&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt; 
&lt;br /&gt;
&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#800000"&gt;table&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt; 
&lt;br /&gt;
&lt;/font&gt; 
&lt;br /&gt;
&gt;&lt;/code&gt;&lt;/blockquote&gt; 
&lt;p&gt;
All the buttons have the same attributes.&amp;#160; If you want to click the “Edit” button
next to SomeName2, you can easily complete this task in selenium by using XPath and
its parent feature:
&lt;/p&gt;
&lt;blockquote&gt;&lt;code&gt;&lt;font color="#000000" size="2" face="Courier New"&gt;selenium.click(&lt;font color="#a31515"&gt;&amp;quot;//td[text()='SomeName2']/../td/input[@value='Edit']&amp;quot;&lt;/font&gt;)&lt;/font&gt; 
&lt;br /&gt;
&lt;br /&gt;
&gt;&lt;/code&gt;&lt;/blockquote&gt; 
&lt;p&gt;
As we mentioned above, this won’t be that easy to do with CSS because it doesn’t have
the appropriate feature. So, we used the JQuery parent() function to have the ability
to select the parent of the current node. It works really fast in all browsers, since
JQuery uses CSS.&amp;#160; 
&lt;/p&gt;
&lt;p&gt;
We added&amp;#160; Jquery’s library to the Selenium server (see steps 1 and 2 below) and
executed JQuery script directly from Selenium. To execute JQuery script, you can use &lt;strong&gt;selenium.getEval(someJS)&lt;/strong&gt; if
you need the return value, or &lt;strong&gt;selenium.runScript(someJS)&lt;/strong&gt; if you don’t. 
&lt;/p&gt;
&lt;p&gt;
But that was not enough for us. We wanted to select the parent element by using the
easy syntaxes of CSS locators. To use them, we had to add a new custom locator to
Selenium. Below, find the three easy steps that we took to add a custom locator. 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;font size="3"&gt;1. Add Jquery’s library to Selenium server.&lt;/font&gt; &lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Add JQuery’s library (‘jquery.min.js’) to your selenium-server.jar (‘selenium-server.jar\core\scripts\’
folder). To do that, open ‘selenium-server.jar’ by using one of the archives — for
example, 7-Zip — and drag-and-drop ‘jquery.min.js’ in the mentioned folder. 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;font size="3"&gt;2. Add script reference to JQuery library.&lt;/font&gt; &lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Add script reference to ‘jquery.min.js’ to the ‘&amp;lt;head&amp;gt;’ section of the RemoteRunner.html
(‘selenium-server.jar\core\’).
&lt;/p&gt;
&lt;blockquote&gt;&lt;code&gt;&lt;font color="#000000" size="2" face="Courier New"&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#800000"&gt;head&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt; 
&lt;br /&gt;
... 
&lt;br /&gt;
&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#800000"&gt;script&lt;/font&gt; &lt;font color="#ff0000"&gt;language&lt;/font&gt;&lt;font color="#0000ff"&gt;=&amp;quot;JavaScript&amp;quot;&lt;/font&gt; &lt;font color="#ff0000"&gt;type&lt;/font&gt;&lt;font color="#0000ff"&gt;=&amp;quot;text/javascript&amp;quot; &lt;/font&gt;&lt;font color="#ff0000"&gt;src&lt;/font&gt;&lt;font color="#0000ff"&gt;=&amp;quot;scripts/jquery.min.js&amp;quot;&lt;/font&gt; &lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt; 
&lt;br /&gt;
... 
&lt;br /&gt;
&lt;font color="#0000ff"&gt;&amp;lt;\&lt;/font&gt;&lt;font color="#800000"&gt;head&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt; 
&lt;br /&gt;
&lt;/font&gt; 
&lt;br /&gt;
&gt;&lt;/code&gt;&lt;/blockquote&gt; 
&lt;p&gt;
&lt;strong&gt;&lt;font size="3"&gt;3. Add new JQuery locator to Selenium core.&lt;/font&gt;&lt;/strong&gt; 
&lt;/p&gt;
&lt;p&gt;
You can add a new JQuery locator to the Selenium core in the &lt;strong&gt;runSeleniumTest()&lt;/strong&gt; function
of the selenium-remoterunner.js file. All you need to do is to add a call of &lt;strong&gt;selenium.doAddLocationStrategy()&lt;/strong&gt; method
before Selenium property initialization of the window object. See the sample below
for more details. 
&lt;/p&gt;
&lt;blockquote&gt;&lt;code&gt;&lt;font color="#000000" size="2" face="Courier New"&gt;&lt;font color="#0000ff"&gt;function&lt;/font&gt; runSeleniumTest()
{ 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; ... 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; selenium.doAddLocationStrategy(&amp;quot;jquery&amp;quot;, &amp;quot; 
&lt;br /&gt;
var loc = &lt;font color="#0000ff"&gt;locator&lt;/font&gt;; 
&lt;br /&gt;
var attr = &lt;font color="#0000ff"&gt;null&lt;/font&gt;; 
&lt;br /&gt;
var isattr = &lt;font color="#0000ff"&gt;false&lt;/font&gt;; 
&lt;br /&gt;
var inx = &lt;font color="#0000ff"&gt;locator&lt;/font&gt;.lastIndexOf(&lt;font color="#a31515"&gt;'@'&lt;/font&gt;); 
&lt;br /&gt;
&lt;br /&gt;
&lt;font color="#0000ff"&gt;if&lt;/font&gt; (inx != -1) { 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; loc = &lt;font color="#0000ff"&gt;locator&lt;/font&gt;.&lt;font color="#0000ff"&gt;substring&lt;/font&gt;(0,
inx); 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; attr = &lt;font color="#0000ff"&gt;locator&lt;/font&gt;.&lt;font color="#0000ff"&gt;substring&lt;/font&gt;(inx
+ 1); 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; isattr = &lt;font color="#0000ff"&gt;true&lt;/font&gt; 
&lt;br /&gt;
} 
&lt;br /&gt;
&lt;br /&gt;
var selectors = loc.split(&lt;font color="#a31515"&gt;'&amp;lt;'&lt;/font&gt;); 
&lt;br /&gt;
var &lt;font color="#0000ff"&gt;found&lt;/font&gt; = $(inDocument); 
&lt;br /&gt;
&lt;br /&gt;
&lt;font color="#0000ff"&gt;for&lt;/font&gt; (var i = 0; i &amp;lt; selectors.length; i++) { 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;if&lt;/font&gt; (i &amp;gt; 0) {&lt;font color="#0000ff"&gt;found&lt;/font&gt; =
$(&lt;font color="#0000ff"&gt;found&lt;/font&gt;.parents()[0]); 
&lt;br /&gt;
} 
&lt;br /&gt;
&lt;br /&gt;
&lt;font color="#0000ff"&gt;if&lt;/font&gt; (jQuery.&lt;font color="#0000ff"&gt;trim&lt;/font&gt;(selectors[i])
!= &lt;font color="#a31515"&gt;''&lt;/font&gt;) 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;found&lt;/font&gt; = &lt;font color="#0000ff"&gt;found&lt;/font&gt;.find(selectors[i]); 
&lt;br /&gt;
} 
&lt;br /&gt;
&lt;br /&gt;
&lt;font color="#0000ff"&gt;if&lt;/font&gt; (&lt;font color="#0000ff"&gt;found&lt;/font&gt;.length &amp;gt; 0)
{ 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;if&lt;/font&gt; (isattr) { 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;return&lt;/font&gt; &lt;font color="#0000ff"&gt;found&lt;/font&gt;[0].getAttributeNode(attr); 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; } 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;else&lt;/font&gt; { 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;return&lt;/font&gt; &lt;font color="#0000ff"&gt;found&lt;/font&gt;[0]; 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; } 
&lt;br /&gt;
} 
&lt;br /&gt;
&lt;font color="#0000ff"&gt;else&lt;/font&gt; { 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;return&lt;/font&gt; &lt;font color="#0000ff"&gt;null&lt;/font&gt;; 
&lt;br /&gt;
} 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; &amp;quot;); 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; ... 
&lt;br /&gt;
} 
&lt;br /&gt;
&lt;/font&gt; 
&lt;br /&gt;
&gt;&lt;/code&gt;&lt;/blockquote&gt; 
&lt;p&gt;
The first parameter of the &lt;strong&gt;selenium.doAddLocationStrategy&lt;/strong&gt; method
(“JQuery”) is the new Selenium locator’s name. The second one (“var loc = locator…”)
is the new custom Selenium locator. If you want to, you can write your own implementation
for the locator. To call the JQuery parent() function, we used the '&amp;lt;' custom symbol
.&amp;#160; 
&lt;/p&gt;
&lt;p&gt;
Finally, let’s take a look at how you can use the new JQuery locators, instead of
the XPath ones. 
&lt;/p&gt;
&lt;p&gt;
XPath locators: 
&lt;br /&gt;
•&amp;#160;&amp;#160;&amp;#160; xpath=//a[contains(@href,'#id1')] 
&lt;br /&gt;
•&amp;#160;&amp;#160;&amp;#160; xpath=(//table[@class='stylee'])//th[text()='theHeaderText']/../td 
&lt;br /&gt;
•&amp;#160;&amp;#160;&amp;#160; xpath=//input[@name='name2' and @value='yes'] 
&lt;/p&gt;
&lt;p&gt;
JQuery locators: 
&lt;br /&gt;
•&amp;#160;&amp;#160;&amp;#160; jquery= a[href*='#id1'] 
&lt;br /&gt;
•&amp;#160;&amp;#160;&amp;#160; jquery= table[class='stylee'] th:contains('theHeaderText')&amp;lt;td 
&lt;br /&gt;
•&amp;#160;&amp;#160;&amp;#160; jquery= input[name='name2'][value='yes'] 
&lt;/p&gt;
&lt;p&gt;
We hope you’ll find our experience useful to you. Also, we’d be happy to answer your
questions if you have any!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.muranosoft.com/Outsourcingblog/aggbug.ashx?id=6e91891a-20eb-4db1-8bd2-0342f82c4041" /&gt;</description>
      <comments>http://www.muranosoft.com/Outsourcingblog/CommentView,guid,6e91891a-20eb-4db1-8bd2-0342f82c4041.aspx</comments>
      <category>ASP.NET</category>
      <category>Quality Assurance</category>
      <category>Software Development</category>
    </item>
    <item>
      <trackback:ping>http://www.muranosoft.com/Outsourcingblog/Trackback.aspx?guid=656f9ee2-43df-4c7e-a400-e03e546a1bbc</trackback:ping>
      <pingback:server>http://www.muranosoft.com/Outsourcingblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.muranosoft.com/Outsourcingblog/PermaLink,guid,656f9ee2-43df-4c7e-a400-e03e546a1bbc.aspx</pingback:target>
      <dc:creator>Muranosoft admin</dc:creator>
      <wfw:comment>http://www.muranosoft.com/Outsourcingblog/CommentView,guid,656f9ee2-43df-4c7e-a400-e03e546a1bbc.aspx</wfw:comment>
      <wfw:commentRss>http://www.muranosoft.com/Outsourcingblog/SyndicationService.asmx/GetEntryCommentsRss?guid=656f9ee2-43df-4c7e-a400-e03e546a1bbc</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
October 27, 2009 has become a significant date in the cloud battle. Amazon released
its answer to <a href="http://www.microsoft.com/windowsazure/sqlazure/">SQL Azure</a> offered
by Microsoft.  Amazon Web Services is out with a relational database service,
the <a href="http://aws.amazon.com/rds/">Amazon RDS</a> (Amazon Relational Database).
Amazon RDS is a fully MySQL 5.1-compatible database as a service offering and now
in beta. 
</p>
        <p>
Amazon RDS allows users to select from 5GB to 1TB of associated storage capacity and
supports five DB instance classes: 
<br />
•    Small DB Instance: 1.7 GB memory, 1 ECU (1 virtual core with 1
ECU*) 
<br />
•    Large DB Instance: 7.5 GB memory, 4 ECUs (2 virtual cores with
2 ECUs each) 
<br />
•    Extra Large DB Instance: 15 GB of memory, 8 ECUs (4 virtual cores
with 2 ECUs each) 
<br />
•    Double Extra Large DB Instance: 34 GB of memory, 13 ECUs (4 virtual
cores with 3,25 ECUs each) 
<br />
•    Quadruple Extra Large DB Instance: 68 GB of memory, 26 ECUs (8
virtual cores with 3.25 ECUs each) 
</p>
        <p>
          <em>* One ECU provides the equivalent CPU capacity of a 1.0-1.2 GHz 2007 Opteron or
2007 Xeon processor. </em>
        </p>
        <p>
Now let’s look at each of them closer and examine them by feature:
</p>
        <table border="1" cellspacing="0" cellpadding="1" width="698">
          <tbody>
            <tr>
              <td valign="top" width="159">
 </td>
              <td valign="top" width="268">
                <p>
                  <strong>Amazon RDS</strong>
                </p>
              </td>
              <td valign="top" width="269">
                <p>
                  <strong>SQL Azure</strong>
                </p>
              </td>
            </tr>
            <tr>
              <td valign="top" width="161">
Based on DBMS</td>
              <td valign="top" width="267">
MySQL 5.1</td>
              <td valign="top" width="269">
SQL Server 2008</td>
            </tr>
            <tr>
              <td valign="top" width="162">
Scalability</td>
              <td valign="top" width="267">
Limited by DB Instance Classes (see above). 
</td>
              <td valign="top" width="268">
Pay-as-you-grow, multi-tenant, scalable service model.</td>
            </tr>
            <tr>
              <td valign="top" width="163">
Minimum Database Size</td>
              <td valign="top" width="266">
5 GB</td>
              <td valign="top" width="268">
1 GB</td>
            </tr>
            <tr>
              <td valign="top" width="164">
Maximum Database Size</td>
              <td valign="top" width="266">
1 TB</td>
              <td valign="top" width="268">
10 GB</td>
            </tr>
            <tr>
              <td valign="top" width="165">
High Availability</td>
              <td valign="top" width="265">
RDS backs up a database, storing the backups for a user-defined retention period.</td>
              <td valign="top" width="267">
                <p>
Multiple redundant copies of user databases for fast failover and high availability
in case of failures, and automatic load balancing for optimal resource utilization
and performance.
</p>
              </td>
            </tr>
            <tr>
              <td valign="top" width="165">
Management</td>
              <td valign="top" width="265">
Support for MySQL application and <a href="http://dev.mysql.com/downloads/gui-tools/5.0.html">tools</a>,
simple set of Web services <a href="http://aws.amazon.com/rds/#details">APIs</a> and <a href="http://aws.typepad.com/aws/2009/10/introducing-rds-the-amazon-relational-database-service-.html">command-line
tools</a>.</td>
              <td valign="top" width="267">
                <p>
Support for SQL Server Management Studio, SQL Server PowerShell™ and programmatic
access via SQL Server Management Objects (SMO).
</p>
              </td>
            </tr>
            <tr>
              <td valign="top" width="165">
DB Instance Pricing</td>
              <td valign="top" width="265">
                <p>
~$79 - $2,200 / month, depending on DB instance classes:
</p>
                <table border="1" cellspacing="0" cellpadding="0">
                  <tbody>
                    <tr>
                      <td valign="top" width="178">
                        <p>
                          <b>DB Instance Class</b>
                        </p>
                      </td>
                      <td valign="top" width="56">
                        <p>
                          <b>Per Hr</b>
                        </p>
                      </td>
                    </tr>
                    <tr>
                      <td valign="top" width="178">
                        <p>
Small DB
</p>
                      </td>
                      <td valign="top" width="56">
                        <p>
$0.11
</p>
                      </td>
                    </tr>
                    <tr>
                      <td valign="top" width="178">
                        <p>
Large DB 
</p>
                      </td>
                      <td valign="top" width="56">
                        <p>
$0.44
</p>
                      </td>
                    </tr>
                    <tr>
                      <td valign="top" width="178">
                        <p>
Extra Large DB 
</p>
                      </td>
                      <td valign="top" width="56">
                        <p>
$0.88
</p>
                      </td>
                    </tr>
                    <tr>
                      <td valign="top" width="178">
                        <p>
Double Extra Large DB 
</p>
                      </td>
                      <td valign="top" width="56">
                        <p>
$1.55
</p>
                      </td>
                    </tr>
                    <tr>
                      <td valign="top" width="178">
                        <p>
Quadruple Extra Large DB
</p>
                      </td>
                      <td valign="top" width="56">
                        <p>
$3.10
</p>
                      </td>
                    </tr>
                  </tbody>
                </table>
              </td>
              <td valign="top" width="267">
                <p>
$9.99 - $99.99* / month, depending on DB edition:
</p>
                <table border="1" cellspacing="0" cellpadding="0" width="238">
                  <tbody>
                    <tr>
                      <td valign="top" width="172">
                        <p>
                          <b>DB Edition</b>
                        </p>
                      </td>
                      <td valign="top" width="64">
                        <p>
                          <b>Per month</b>
                        </p>
                      </td>
                    </tr>
                    <tr>
                      <td valign="top" width="172">
                        <p>
Web Edition, up to 1 GB
</p>
                      </td>
                      <td valign="top" width="64">
                        <p>
$9.99
</p>
                      </td>
                    </tr>
                    <tr>
                      <td valign="top" width="172">
                        <p>
Business Edition, up to 10 GB
</p>
                      </td>
                      <td valign="top" width="64">
                        <p>
$99.99
</p>
                      </td>
                    </tr>
                  </tbody>
                </table>
              </td>
            </tr>
            <tr>
              <td valign="top" width="165">
Data Transfer Pricing</td>
              <td valign="top" width="265">
$0.10 in / $0.10 - $0.17 out / GB</td>
              <td valign="top" width="267">
$0.10 in / $0.15 out / GB</td>
            </tr>
            <tr>
              <td valign="top" width="165">
Database Storage Pricing</td>
              <td valign="top" width="265">
$0.10 per GB-month of provisioned storage.</td>
              <td valign="top" width="267">
Included in DB Instance Pricing.</td>
            </tr>
            <tr>
              <td valign="top" width="165">
I/O Request Pricing</td>
              <td valign="top" width="265">
$0.10 per 1 million I/O requests.</td>
              <td valign="top" width="268">
Included in DB instance pricing.</td>
            </tr>
          </tbody>
        </table>
        <p>
          <em>* Windows Azure is currently in Community Technology Preview (CTP), and the services
are free to evaluate through January 2010.</em>
        </p>
        <img width="0" height="0" src="http://www.muranosoft.com/Outsourcingblog/aggbug.ashx?id=656f9ee2-43df-4c7e-a400-e03e546a1bbc" />
      </body>
      <title>SQL Azure vs. Amazon RDS</title>
      <guid isPermaLink="false">http://www.muranosoft.com/Outsourcingblog/PermaLink,guid,656f9ee2-43df-4c7e-a400-e03e546a1bbc.aspx</guid>
      <link>http://www.muranosoft.com/Outsourcingblog/SQL-Azure-Vs-Amazon-RDS.aspx</link>
      <pubDate>Tue, 17 Nov 2009 10:10:55 GMT</pubDate>
      <description>&lt;p&gt;
October 27, 2009 has become a significant date in the cloud battle. Amazon released
its answer to &lt;a href="http://www.microsoft.com/windowsazure/sqlazure/"&gt;SQL Azure&lt;/a&gt; offered
by Microsoft.&amp;#160; Amazon Web Services is out with a relational database service,
the &lt;a href="http://aws.amazon.com/rds/"&gt;Amazon RDS&lt;/a&gt; (Amazon Relational Database).
Amazon RDS is a fully MySQL 5.1-compatible database as a service offering and now
in beta. 
&lt;/p&gt;
&lt;p&gt;
Amazon RDS allows users to select from 5GB to 1TB of associated storage capacity and
supports five DB instance classes: 
&lt;br /&gt;
•&amp;#160;&amp;#160;&amp;#160; Small DB Instance: 1.7 GB memory, 1 ECU (1 virtual core with 1
ECU*) 
&lt;br /&gt;
•&amp;#160;&amp;#160;&amp;#160; Large DB Instance: 7.5 GB memory, 4 ECUs (2 virtual cores with
2 ECUs each) 
&lt;br /&gt;
•&amp;#160;&amp;#160;&amp;#160; Extra Large DB Instance: 15 GB of memory, 8 ECUs (4 virtual cores
with 2 ECUs each) 
&lt;br /&gt;
•&amp;#160;&amp;#160;&amp;#160; Double Extra Large DB Instance: 34 GB of memory, 13 ECUs (4 virtual
cores with 3,25 ECUs each) 
&lt;br /&gt;
•&amp;#160;&amp;#160;&amp;#160; Quadruple Extra Large DB Instance: 68 GB of memory, 26 ECUs (8
virtual cores with 3.25 ECUs each) 
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;* One ECU provides the equivalent CPU capacity of a 1.0-1.2 GHz 2007 Opteron or
2007 Xeon processor. &lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
Now let’s look at each of them closer and examine them by feature:
&lt;/p&gt;
&lt;table border="1" cellspacing="0" cellpadding="1" width="698"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top" width="159"&gt;
&amp;#160;&lt;/td&gt;
&lt;td valign="top" width="268"&gt;
&lt;p&gt;
&lt;strong&gt;Amazon RDS&lt;/strong&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="269"&gt;
&lt;p&gt;
&lt;strong&gt;SQL Azure&lt;/strong&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="161"&gt;
Based on DBMS&lt;/td&gt;
&lt;td valign="top" width="267"&gt;
MySQL 5.1&lt;/td&gt;
&lt;td valign="top" width="269"&gt;
SQL Server 2008&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="162"&gt;
Scalability&lt;/td&gt;
&lt;td valign="top" width="267"&gt;
Limited by DB Instance Classes (see above). 
&lt;/td&gt;
&lt;td valign="top" width="268"&gt;
Pay-as-you-grow, multi-tenant, scalable service model.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="163"&gt;
Minimum Database Size&lt;/td&gt;
&lt;td valign="top" width="266"&gt;
5 GB&lt;/td&gt;
&lt;td valign="top" width="268"&gt;
1 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="164"&gt;
Maximum Database Size&lt;/td&gt;
&lt;td valign="top" width="266"&gt;
1 TB&lt;/td&gt;
&lt;td valign="top" width="268"&gt;
10 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="165"&gt;
High Availability&lt;/td&gt;
&lt;td valign="top" width="265"&gt;
RDS backs up a database, storing the backups for a user-defined retention period.&lt;/td&gt;
&lt;td valign="top" width="267"&gt;
&lt;p&gt;
Multiple redundant copies of user databases for fast failover and high availability
in case of failures, and automatic load balancing for optimal resource utilization
and performance.
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="165"&gt;
Management&lt;/td&gt;
&lt;td valign="top" width="265"&gt;
Support for MySQL application and &lt;a href="http://dev.mysql.com/downloads/gui-tools/5.0.html"&gt;tools&lt;/a&gt;,
simple set of Web services &lt;a href="http://aws.amazon.com/rds/#details"&gt;APIs&lt;/a&gt; and &lt;a href="http://aws.typepad.com/aws/2009/10/introducing-rds-the-amazon-relational-database-service-.html"&gt;command-line
tools&lt;/a&gt;.&lt;/td&gt;
&lt;td valign="top" width="267"&gt;
&lt;p&gt;
Support for SQL Server Management Studio, SQL Server PowerShell™ and programmatic
access via SQL Server Management Objects (SMO).
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="165"&gt;
DB Instance Pricing&lt;/td&gt;
&lt;td valign="top" width="265"&gt;
&lt;p&gt;
~$79 - $2,200 / month, depending on DB instance classes:
&lt;/p&gt;
&lt;table border="1" cellspacing="0" cellpadding="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top" width="178"&gt;
&lt;p&gt;
&lt;b&gt;DB Instance Class&lt;/b&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="56"&gt;
&lt;p&gt;
&lt;b&gt;Per Hr&lt;/b&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="178"&gt;
&lt;p&gt;
Small DB
&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="56"&gt;
&lt;p&gt;
$0.11
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="178"&gt;
&lt;p&gt;
Large DB 
&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="56"&gt;
&lt;p&gt;
$0.44
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="178"&gt;
&lt;p&gt;
Extra Large DB 
&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="56"&gt;
&lt;p&gt;
$0.88
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="178"&gt;
&lt;p&gt;
Double Extra Large DB 
&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="56"&gt;
&lt;p&gt;
$1.55
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="178"&gt;
&lt;p&gt;
Quadruple Extra Large DB
&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="56"&gt;
&lt;p&gt;
$3.10
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/td&gt;
&lt;td valign="top" width="267"&gt;
&lt;p&gt;
$9.99 - $99.99* / month, depending on DB edition:
&lt;/p&gt;
&lt;table border="1" cellspacing="0" cellpadding="0" width="238"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top" width="172"&gt;
&lt;p&gt;
&lt;b&gt;DB Edition&lt;/b&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="64"&gt;
&lt;p&gt;
&lt;b&gt;Per month&lt;/b&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="172"&gt;
&lt;p&gt;
Web Edition, up to 1 GB
&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="64"&gt;
&lt;p&gt;
$9.99
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="172"&gt;
&lt;p&gt;
Business Edition, up to 10 GB
&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="64"&gt;
&lt;p&gt;
$99.99
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="165"&gt;
Data Transfer Pricing&lt;/td&gt;
&lt;td valign="top" width="265"&gt;
$0.10 in / $0.10 - $0.17 out / GB&lt;/td&gt;
&lt;td valign="top" width="267"&gt;
$0.10 in / $0.15 out / GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="165"&gt;
Database Storage Pricing&lt;/td&gt;
&lt;td valign="top" width="265"&gt;
$0.10 per GB-month of provisioned storage.&lt;/td&gt;
&lt;td valign="top" width="267"&gt;
Included in DB Instance Pricing.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="165"&gt;
I/O Request Pricing&lt;/td&gt;
&lt;td valign="top" width="265"&gt;
$0.10 per 1 million I/O requests.&lt;/td&gt;
&lt;td valign="top" width="268"&gt;
Included in DB instance pricing.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;
&lt;em&gt;* Windows Azure is currently in Community Technology Preview (CTP), and the services
are free to evaluate through January 2010.&lt;/em&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.muranosoft.com/Outsourcingblog/aggbug.ashx?id=656f9ee2-43df-4c7e-a400-e03e546a1bbc" /&gt;</description>
      <comments>http://www.muranosoft.com/Outsourcingblog/CommentView,guid,656f9ee2-43df-4c7e-a400-e03e546a1bbc.aspx</comments>
      <category>ASP.NET</category>
      <category>Azure</category>
      <category>Cloud Computing</category>
      <category>Software Development</category>
    </item>
    <item>
      <trackback:ping>http://www.muranosoft.com/Outsourcingblog/Trackback.aspx?guid=701d69ed-3f28-4fa4-9675-32d01fc75da9</trackback:ping>
      <pingback:server>http://www.muranosoft.com/Outsourcingblog/pingback.aspx</pingback:server>
      <pingback:target>http://www.muranosoft.com/Outsourcingblog/PermaLink,guid,701d69ed-3f28-4fa4-9675-32d01fc75da9.aspx</pingback:target>
      <dc:creator>Muranosoft admin</dc:creator>
      <wfw:comment>http://www.muranosoft.com/Outsourcingblog/CommentView,guid,701d69ed-3f28-4fa4-9675-32d01fc75da9.aspx</wfw:comment>
      <wfw:commentRss>http://www.muranosoft.com/Outsourcingblog/SyndicationService.asmx/GetEntryCommentsRss?guid=701d69ed-3f28-4fa4-9675-32d01fc75da9</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <div align="justify">
          <font color="#000000" face="Verdana" size="2">There are limitations
in the role model of ASP.NET authorization for content management systems. The problem
lies in defining the critical set of roles. Both ways that are available to developers
have their own drawback that can be easily avoided when the security system administrator
and the developer are the same person, or they work in the same office. However, if
they are spread around the world, as in the case of <a href="http://www.muranosoft.com/services/dedicatedteam.aspx">software
development outsourcing</a>, the problem needs a different solution. Let’s take a
deeper look at the problem.  </font>
          <br />
          <br />
          <font color="#000000" face="Verdana" size="2">When a user registers on a Web site,
he or she gets identification data – a login and password - that gives access to additional
benefits provided by the Web site.</font>
          <br />
          <br />
          <font color="#000000" face="Verdana" size="2">From the standpoint of developer, the
process of giving benefits to registered users is divided into two sequential steps:
authentication and authorization. During the authentication process, the system verifies
whether the user is who he claims he is. During the authorization process, the system
gives the user permission to do something or have something. The effectiveness of
the implementation of these steps is essential for the effectiveness of the entire
security system of the Web site. Let’s examine authorization in more detail.</font>
          <br />
          <br />
          <font color="#000000" face="Verdana" size="2">During the authorization process, the
system matches the user name with a subset of opportunities available to this user
on the Web site. This is done with the help of a particular entity that allows you
to match the subset of opportunities with several users at once, uniting users on
the basis of equal rights. The entity is called a role or a group of users.</font>
          <br />
          <br />
          <font color="#000000" face="Verdana" size="2">There is a set of tools for defining
the list of additional opportunities for registered users, made available to the ASP.NET
developer:</font>
          <br />
          <ul>
            <li>
              <font color="#000000" face="Verdana" size="2">Configuration file (web.config) allows
you to limit access at the level of subdirectories and files by using the configuration
sections &lt;authorization&gt; and &lt;location&gt;;</font>
            </li>
            <li>
              <font color="#000000" face="Verdana" size="2">PrincipalPermissionAttribute allows
you to limit access at the level of the method call or properties of classes;</font>
            </li>
            <li>
              <font color="#000000" face="Verdana" size="2">PrincipalPermission class allows you
to limit access at the level of code snippets within a method or a property;</font>
            </li>
            <li>
              <font color="#000000" face="Verdana" size="2">IPrincipal interface allows you to limit
access to code snippets by using the IPrincipal.IsInRole method call.</font>
            </li>
          </ul>
          <br />
          <font color="#000000" face="Verdana" size="2">Using a variety of tools, the developer
places method and attribute calls within a configuration file and Web page code. Names
of roles with a defined action are used as the input parameters. It is also necessary
to have a list of all the roles supported by the system for running a security system.
The type of repository does not matter in this case. </font>
          <br />
          <font color="#000000" face="Verdana" size="2">Here is the problem. Which of the two
sets of roles is critical? The one that is scattered in the code as the input parameters,
or the one that is in the repository of roles? In the first case, the security system
administrator has to scan the code before filling in the repository of roles to catch
the names of all roles used as the input parameters. In the second case, developer
must be sure that the names of roles are consistent throughout the lifetime of the
system because, otherwise, it will be impossible to change or delete the names of
roles.</font>
          <br />
          <br />
          <font color="#000000" face="Verdana" size="2">This is not a problem when the security
system administrator and the developer are the same person, or they work in the same
office. However, if they are spread around the world, as in the case of <a href="http://www.muranosoft.com/services/methodology.aspx">software
development outsourcing</a>, it is very difficult or even impossible to make changes
in the initial module code.</font>
          <br />
          <font color="#000000" face="Verdana" size="2">  </font>
          <br />
          <font color="#000000" face="Verdana" size="2">To solve the issue, a set of syntactic
constructions that allows you to limit access to code snippets for different groups
of users is necessary. This set should meet the following requirements:</font>
          <br />
          <ul>
            <li>
              <font color="#000000" face="Verdana" size="2">Ensure the independence of the module
developer from the security system administrator in defining the user groups with
limited access to the code snippets module.</font>
            </li>
            <li>
              <font color="#000000" face="Verdana" size="2">Have a mechanism for the export of a
set of user groups involved in the system of restrictions for a specific module. This
allows the administrator of the security system of the Web site to match the existing
set of roles with the system of restrictions for a specific module.</font>
            </li>
            <li>
              <font color="#000000" face="Verdana" size="2">Have a unique namespace for a specific
module of the content management system of the Web site.</font>
            </li>
            <li>
              <font color="#000000" face="Verdana" size="2">Have backward compatibility with the
existing role model for authorization.</font>
            </li>
            <li>
              <font color="#000000" face="Verdana" size="2">Ensure an opportunity for a declarative
programming style.</font>
            </li>
          </ul>
          <font color="#000000" face="Verdana" size="2">In the next blog post, a solution where
the permission-based model is used will be presented.</font>
          <br />
        </div>
        <br />
        <p>
        </p>
        <img width="0" height="0" src="http://www.muranosoft.com/Outsourcingblog/aggbug.ashx?id=701d69ed-3f28-4fa4-9675-32d01fc75da9" />
      </body>
      <title>ASP.NET Authorization for Content Management Systems: Limitations of the Role Model</title>
      <guid isPermaLink="false">http://www.muranosoft.com/Outsourcingblog/PermaLink,guid,701d69ed-3f28-4fa4-9675-32d01fc75da9.aspx</guid>
      <link>http://www.muranosoft.com/Outsourcingblog/ASPNET-Authorization-For-Content-Management-Systems-Limitations-Of-The-Role-Model.aspx</link>
      <pubDate>Wed, 01 Oct 2008 18:22:58 GMT</pubDate>
      <description>&lt;div align="justify"&gt;&lt;font color="#000000" face="Verdana" size="2"&gt;There are limitations
in the role model of ASP.NET authorization for content management systems. The problem
lies in defining the critical set of roles. Both ways that are available to developers
have their own drawback that can be easily avoided when the security system administrator
and the developer are the same person, or they work in the same office. However, if
they are spread around the world, as in the case of &lt;a href="http://www.muranosoft.com/services/dedicatedteam.aspx"&gt;software
development outsourcing&lt;/a&gt;, the problem needs a different solution. Let’s take a
deeper look at the problem. &amp;nbsp;&lt;/font&gt;
&lt;br&gt;
&lt;br&gt;
&lt;font color="#000000" face="Verdana" size="2"&gt;When a user registers on a Web site,
he or she gets identification data – a login and password - that gives access to additional
benefits provided by the Web site.&lt;/font&gt;
&lt;br&gt;
&lt;br&gt;
&lt;font color="#000000" face="Verdana" size="2"&gt;From the standpoint of developer, the
process of giving benefits to registered users is divided into two sequential steps:
authentication and authorization. During the authentication process, the system verifies
whether the user is who he claims he is. During the authorization process, the system
gives the user permission to do something or have something. The effectiveness of
the implementation of these steps is essential for the effectiveness of the entire
security system of the Web site. Let’s examine authorization in more detail.&lt;/font&gt;
&lt;br&gt;
&lt;br&gt;
&lt;font color="#000000" face="Verdana" size="2"&gt;During the authorization process, the
system matches the user name with a subset of opportunities available to this user
on the Web site. This is done with the help of a particular entity that allows you
to match the subset of opportunities with several users at once, uniting users on
the basis of equal rights. The entity is called a role or a group of users.&lt;/font&gt;
&lt;br&gt;
&lt;br&gt;
&lt;font color="#000000" face="Verdana" size="2"&gt;There is a set of tools for defining
the list of additional opportunities for registered users, made available to the ASP.NET
developer:&lt;/font&gt;
&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;font color="#000000" face="Verdana" size="2"&gt;Configuration file (web.config) allows
you to limit access at the level of subdirectories and files by using the configuration
sections &amp;lt;authorization&amp;gt; and &amp;lt;location&amp;gt;;&lt;/font&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;font color="#000000" face="Verdana" size="2"&gt;PrincipalPermissionAttribute allows
you to limit access at the level of the method call or properties of classes;&lt;/font&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;font color="#000000" face="Verdana" size="2"&gt;PrincipalPermission class allows you
to limit access at the level of code snippets within a method or a property;&lt;/font&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;font color="#000000" face="Verdana" size="2"&gt;IPrincipal interface allows you to limit
access to code snippets by using the IPrincipal.IsInRole method call.&lt;/font&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;br&gt;
&lt;font color="#000000" face="Verdana" size="2"&gt;Using a variety of tools, the developer
places method and attribute calls within a configuration file and Web page code. Names
of roles with a defined action are used as the input parameters. It is also necessary
to have a list of all the roles supported by the system for running a security system.
The type of repository does not matter in this case. &lt;/font&gt;
&lt;br&gt;
&lt;font color="#000000" face="Verdana" size="2"&gt;Here is the problem. Which of the two
sets of roles is critical? The one that is scattered in the code as the input parameters,
or the one that is in the repository of roles? In the first case, the security system
administrator has to scan the code before filling in the repository of roles to catch
the names of all roles used as the input parameters. In the second case, developer
must be sure that the names of roles are consistent throughout the lifetime of the
system because, otherwise, it will be impossible to change or delete the names of
roles.&lt;/font&gt;
&lt;br&gt;
&lt;br&gt;
&lt;font color="#000000" face="Verdana" size="2"&gt;This is not a problem when the security
system administrator and the developer are the same person, or they work in the same
office. However, if they are spread around the world, as in the case of &lt;a href="http://www.muranosoft.com/services/methodology.aspx"&gt;software
development outsourcing&lt;/a&gt;, it is very difficult or even impossible to make changes
in the initial module code.&lt;/font&gt;
&lt;br&gt;
&lt;font color="#000000" face="Verdana" size="2"&gt;&amp;nbsp; &lt;/font&gt;
&lt;br&gt;
&lt;font color="#000000" face="Verdana" size="2"&gt;To solve the issue, a set of syntactic
constructions that allows you to limit access to code snippets for different groups
of users is necessary. This set should meet the following requirements:&lt;/font&gt;
&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;font color="#000000" face="Verdana" size="2"&gt;Ensure the independence of the module
developer from the security system administrator in defining the user groups with
limited access to the code snippets module.&lt;/font&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;font color="#000000" face="Verdana" size="2"&gt;Have a mechanism for the export of a
set of user groups involved in the system of restrictions for a specific module. This
allows the administrator of the security system of the Web site to match the existing
set of roles with the system of restrictions for a specific module.&lt;/font&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;font color="#000000" face="Verdana" size="2"&gt;Have a unique namespace for a specific
module of the content management system of the Web site.&lt;/font&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;font color="#000000" face="Verdana" size="2"&gt;Have backward compatibility with the
existing role model for authorization.&lt;/font&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;font color="#000000" face="Verdana" size="2"&gt;Ensure an opportunity for a declarative
programming style.&lt;/font&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;font color="#000000" face="Verdana" size="2"&gt;In the next blog post, a solution where
the permission-based model is used will be presented.&lt;/font&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.muranosoft.com/Outsourcingblog/aggbug.ashx?id=701d69ed-3f28-4fa4-9675-32d01fc75da9" /&gt;</description>
      <comments>http://www.muranosoft.com/Outsourcingblog/CommentView,guid,701d69ed-3f28-4fa4-9675-32d01fc75da9.aspx</comments>
      <category>ASP.NET</category>
      <category>Offshore Development</category>
      <category>Software Development</category>
    </item>
  </channel>
</rss>