On this page...
Archive
| July, 2011 (4) |
| September, 2010 (1) |
| May, 2010 (2) |
| April, 2010 (2) |
| March, 2010 (3) |
| February, 2010 (5) |
| November, 2009 (4) |
| October, 2009 (2) |
| October, 2008 (2) |
| July, 2008 (3) |
| June, 2008 (4) |
| April, 2008 (1) |
| January, 2007 (3) |
| December, 2006 (2) |
| October, 2006 (1) |
| September, 2006 (1) |
| August, 2006 (4) |
| July, 2006 (2) |
Categories
Archives
| | Sun | Mon | Tue | Wed | Thu | Fri | Sat |
|---|
| 29 | 30 | 31 | 1 | 2 | 3 | 4 | | 5 | 6 | 7 | 8 | 9 | 10 | 11 | | 12 | 13 | 14 | 15 | 16 | 17 | 18 | | 19 | 20 | 21 | 22 | 23 | 24 | 25 | | 26 | 27 | 28 | 29 | 1 | 2 | 3 | | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
Links
|
Our goal During the Microsoft SharePoint 2010 Social Fest, 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. Why did we choose Amazon? 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. 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. 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. How to start using Amazon Web Services Getting to Amazon’s cloud is simple. You have to go to http://aws.amazon.com/ec2 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:  After passing several steps, you will get new instances in the console:  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. Our results 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. 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. 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. 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.  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. Benefits of using Amazon 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. Also, we find that Amazon EC2 is very convenient if you need to increase the quantity of servers very quickly. 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. 
By Alex, a Senior .NET Developer on Murano Software’s team Murano Software is becoming a permanent participant in the Microsoft Incubation Week events. Last week (Jan 25-29), our company participated as a development partner in Microsoft SharePoint 2010 Social Fest 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. . 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. 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.  Huddle 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. Calinda Software 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. GetConfer 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. Cortex Intelligence 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. Leverage Software 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. Liaise 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. Loqu8 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.
By Vladimir, a .NET developer on Muranosoft’s team. The new Microsoft Visual Studio 2010 raises the development of SharePoint projects 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. So let’s take a look at the new SharePoint development features that Visual Studio 2010 offers. New Project Templates First of all, the VS 2010 supports many different templates for the SharePoint projects, such as: • Blank Site Definition • Content Type • List Definition • State Machine Workflow • WSP Import • Business Data Catalog Model • Deployment Module • Event Receiver • Sequential Workflow • Web Part After selecting any of these templates, you have to go through some steps to configure your development environment, of course. SharePoint Solution Architecture Any project type will include two key nodes that you can’t remove, relocate or rename. There are Features and Package nodes. These ones will be available in a project, even if your project doesn’t contain any feature or package definition. 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. 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. 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. Changes in the Server Explorer 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. Development 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.” - Client Object Model allows us to have direct access to the object model by using JavaScript, Silverlight or .NET code without calling Web Services.
- LINQ to SharePoint 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.
- Sandboxed Solutions 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.
- External Lists (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.
Debug and Deploy Process 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. 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? 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! Resources If you want to get more information, you can watch this video or follow this link to read the official documentation. There is another great article 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 short training courses provided by Channel 9. Enjoy!
By Sergey and Maxim, a Quality Assurance Manager and a .NET Developer on Murano Software’s team. If you have ever worked with Selenium, 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. 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. <table class="style"> <tr class="somestyle"> <td>SomeName1</td> <td> <input type="submit" value="Edit" class="btn" /> </td> </tr> <tr class="gvAlternatingRowH35"> <td>SomeName2</td> <td> <input type="submit" value="Edit" class="btn" /> </td> </tr> </table>
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: selenium.click("//td[text()='SomeName2']/../td/input[@value='Edit']")
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. 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 selenium.getEval(someJS) if you need the return value, or selenium.runScript(someJS) if you don’t. 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. 1. Add Jquery’s library to Selenium server. 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. 2. Add script reference to JQuery library. Add script reference to ‘jquery.min.js’ to the ‘<head>’ section of the RemoteRunner.html (‘selenium-server.jar\core\’). <head> ... <script language="JavaScript" type="text/javascript" src="scripts/jquery.min.js" /> ... <\head>
3. Add new JQuery locator to Selenium core. You can add a new JQuery locator to the Selenium core in the runSeleniumTest() function of the selenium-remoterunner.js file. All you need to do is to add a call of selenium.doAddLocationStrategy() method before Selenium property initialization of the window object. See the sample below for more details. function runSeleniumTest() { ... selenium.doAddLocationStrategy("jquery", " var loc = locator; var attr = null; var isattr = false; var inx = locator.lastIndexOf('@'); if (inx != -1) { loc = locator.substring(0, inx); attr = locator.substring(inx + 1); isattr = true } var selectors = loc.split('<'); var found = $(inDocument); for (var i = 0; i < selectors.length; i++) { if (i > 0) {found = $(found.parents()[0]); } if (jQuery.trim(selectors[i]) != '') found = found.find(selectors[i]); } if (found.length > 0) { if (isattr) { return found[0].getAttributeNode(attr); } else { return found[0]; } } else { return null; } "); ... }
The first parameter of the selenium.doAddLocationStrategy 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 '<' custom symbol . Finally, let’s take a look at how you can use the new JQuery locators, instead of the XPath ones. XPath locators: • xpath=//a[contains(@href,'#id1')] • xpath=(//table[@class='stylee'])//th[text()='theHeaderText']/../td • xpath=//input[@name='name2' and @value='yes'] JQuery locators: • jquery= a[href*='#id1'] • jquery= table[class='stylee'] th:contains('theHeaderText')<td • jquery= input[name='name2'][value='yes'] We hope you’ll find our experience useful to you. Also, we’d be happy to answer your questions if you have any!
October 27, 2009 has become a significant date in the cloud battle. Amazon released its answer to SQL Azure offered by Microsoft. Amazon Web Services is out with a relational database service, the Amazon RDS (Amazon Relational Database). Amazon RDS is a fully MySQL 5.1-compatible database as a service offering and now in beta. Amazon RDS allows users to select from 5GB to 1TB of associated storage capacity and supports five DB instance classes: • Small DB Instance: 1.7 GB memory, 1 ECU (1 virtual core with 1 ECU*) • Large DB Instance: 7.5 GB memory, 4 ECUs (2 virtual cores with 2 ECUs each) • Extra Large DB Instance: 15 GB of memory, 8 ECUs (4 virtual cores with 2 ECUs each) • Double Extra Large DB Instance: 34 GB of memory, 13 ECUs (4 virtual cores with 3,25 ECUs each) • Quadruple Extra Large DB Instance: 68 GB of memory, 26 ECUs (8 virtual cores with 3.25 ECUs each) * One ECU provides the equivalent CPU capacity of a 1.0-1.2 GHz 2007 Opteron or 2007 Xeon processor. Now let’s look at each of them closer and examine them by feature: | | Amazon RDS | SQL Azure | | Based on DBMS | MySQL 5.1 | SQL Server 2008 | | Scalability | Limited by DB Instance Classes (see above). | Pay-as-you-grow, multi-tenant, scalable service model. | | Minimum Database Size | 5 GB | 1 GB | | Maximum Database Size | 1 TB | 10 GB | | High Availability | RDS backs up a database, storing the backups for a user-defined retention period. | 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. | | Management | Support for MySQL application and tools, simple set of Web services APIs and command-line tools. | Support for SQL Server Management Studio, SQL Server PowerShell™ and programmatic access via SQL Server Management Objects (SMO). | | DB Instance Pricing | ~$79 - $2,200 / month, depending on DB instance classes: | DB Instance Class | Per Hr | | Small DB | $0.11 | | Large DB | $0.44 | | Extra Large DB | $0.88 | | Double Extra Large DB | $1.55 | | Quadruple Extra Large DB | $3.10 | | $9.99 - $99.99* / month, depending on DB edition: | DB Edition | Per month | | Web Edition, up to 1 GB | $9.99 | | Business Edition, up to 10 GB | $99.99 | | | Data Transfer Pricing | $0.10 in / $0.10 - $0.17 out / GB | $0.10 in / $0.15 out / GB | | Database Storage Pricing | $0.10 per GB-month of provisioned storage. | Included in DB Instance Pricing. | | I/O Request Pricing | $0.10 per 1 million I/O requests. | Included in DB instance pricing. | * Windows Azure is currently in Community Technology Preview (CTP), and the services are free to evaluate through January 2010.
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 software development outsourcing, the problem needs a different solution. Let’s take a deeper look at the problem. 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.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.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.There is a set of tools for defining the list of additional opportunities for registered users, made available to the ASP.NET developer:- Configuration file (web.config) allows you to limit access at the level of subdirectories and files by using the configuration sections <authorization> and <location>;
- PrincipalPermissionAttribute allows you to limit access at the level of the method call or properties of classes;
- PrincipalPermission class allows you to limit access at the level of code snippets within a method or a property;
- IPrincipal interface allows you to limit access to code snippets by using the IPrincipal.IsInRole method call.
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. 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.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 software development outsourcing, it is very difficult or even impossible to make changes in the initial module code. 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:- 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.
- 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.
- Have a unique namespace for a specific module of the content management system of the Web site.
- Have backward compatibility with the existing role model for authorization.
- Ensure an opportunity for a declarative programming style.
In the next blog post, a solution where the permission-based model is used will be presented.
|