September 27, 2012 07:26 by
Scott
Visual Studio over the years has provided very good support for the core application development languages like C#, VB, etc. But when it comes to web development languages like javascript and CSS, Visual Studio lacked some main support such as intellisense, debugging, etc. This article discusses some key features introduced in Visual Studio 11 with respect to Javascript and CSS.
Javascript
In this section we will look at some important and useful features that the Visual Studio 11 JavaScript editor provides.
Intellisense, Type Inference & Documentation
Prior versions of Visual Studio were a pain for Javascript developers due to the lack of intellisense for Javascript. The intellisense provided was very basic; developers had to be very sure of the method and class names, including the casing. Now Visual Studio 11 provides complete intellisense support for all the javascript objects and its methods. Fig below is a sample intellisense menu and you can see the number of options.
Visual Studio 11 also provides rich intellisense support for popular third party Javascript libraries like JQuery. Since Jquery is used by almost all web developers this will be of tremendous help to them. Fig below shows a sample intellisense available for JQuery in the Visual Studio 11 IDE.
In the above screenshot you would have noticed documentation for the method in the intellisense window like C# code. You could provide the documentation for your Javascript method as shown in the below example.
< script type="text/javascript">
function DoSummation(a, b) {
/// <summary>
/// Returns the sum of the variables a and b
/// </summary>
/// <param name="a" type="int">Integer variable 1</param>
/// <param name="b" type="int">Integer variable 2</param>
return a + b;
}
</script>
The Javascript editor also performs type inference, for example if a Javascript variable is assigned with a string value and later when the variable is used then the intellisense displays only the string related methods.
Curly Brace and Bracket Matching
When I use to write a large amount of Javascript code, especially with object oriented Javascript or jQuery, I used to get confused with the brackets and curly braces on their scopes. It may sometimes be a nightmare for developers to fix a brace mismatch on a huge Javascript code file. Fig below shows how the bracket scopes are highlighted by Visual Studio 11.
Go to Definition Feature
Like the C# Visual Studio editor of Visual Studio, now the Javascript editor also provides the Go to definition feature, which will be very useful in going through the code flow or to debug a Javascript issue especially when there are a lot of files involved and the method calls are scattered. In order to make this feature work you need to add the reference path of the .js file containing the method implementation onto the caller .js file. Below is a sample.
/// <reference path="File1HavingImplementation.js" />
A generic approach to provide the reference path is to add them to the _references.js file.
Debugging
There is a new window added to Visual Studio 11 called the Javascript Console, which provides various features in terms of debuggingJjavascript code. I will cover this topic in a separate article.
CSS
In this article we will take a look at two important features on the CSS front.
Code Snippets and Writing Vendor Specific CSS
One of the most repetitive and boring tasks for the UI developer is to write the vendor specific styles in a CSS file. Vendor specific CSS is nothing but writing the same style with different names as supported by different browsers in order to get the style working on multiple browser combinations. Now Visual Studio 11 provides CSS code snippets, for example type transform and hitting tab would create the different vendor specific properties for transform in a CSS class. Below is the generated CSS class.
.MyClass
{
-ms-transform: rotate(-90deg);
-moz-transform: rotate(-90deg);
-o-transform: rotate(-90deg);
-webkit-transform: rotate(-90deg);
transform: rotate(-90deg);
}
Color Picker
One thing that bothered me while writing CSS classes is providing the color code. I had to use some external utility to figure out the color code of the color being used, which I was trying to create a style for. Now with Visual Studio 11 the UI designer doesn’t have to move away from the CSS editor to pick the color, the editor itself has the color picker integrated. Fig below shows the screenshot of the color picker on a CSS file.
I hope these features have simplified and provided solutions for some long lasting issues faced by web developers.
Happy reading!
September 18, 2012 08:43 by
Scott
September 11, 2012 10:22 by
Scott
With Windows Server 2012 (formerly “Windows Server 8”) on the horizon and many IT shops mulling upgrades, it’s more likely upgrades to Server 2012 will be incremental rather than all-at-once. It’s likely that those with infrastructure built on top of Windows Server will have both Server 2012 and older versions of Server running side-by-side for some time.
Given that, here are a few answers to common questions in this area how the new and older versions of Windows Server might have coexistence issues.
Can I run Windows Server 2012 systems in a cluster with earlier versions of Windows Server?
The small answer is “no.” There are several reasons for this, not least of which are the major improvements in the way clustering is managed and deployed across servers in Windows Server 2012. The new clustering features aren’t backward-compatible with earlier versions of Windows Server, so clusters can’t be upgraded in a “rolling” fashion; each node in a cluster has to be evicted from the cluster, upgraded to Windows Server 2012 and added to a total new cluster of 2012-only servers.
Here are some of the key new clustering features in Windows Server 2012, which will not be supported by earlier versions of the operating system:
Storage migration . This allows cluster-managed VMs to be live-migrated to a new place while the VM is up and running, in much the same manner as VMware’s vMotion.
Clustered shared volumes . This feature is not new to Server 2012 — it was introduced in Windows Server 2008 R2 — but it’s been revised and expanded, and the expanded functionality is not available for previous versions of Server. Multiple nodes in the same cluster can share the same file system, which allows a VM hosted on any node in that cluster to be migrated to any other node on that cluster.
Cluster-aware updating (CAU) . Updates to machines in a Windows Server 2012 cluster can be applied automatically in a rolling fashion. This way, the total cluster remains online during the process. Plugins that talk to an API expand CAU’s behavior.
There are many other new features, but to use them uniformly across a cluster requires a cluster-wide upgrade to Windows Server 2012.
What do I need to know in this area using file shares between Windows Server 2012 and earlier versions of Windows Server?
Windows Server 2012 uses the new SMB 3.0 protocol (originally SMB 2.2) for establishing file shares between Windows systems.
SMB 3.0 clients will always attempt to negotiate the highest possible level of the protocol with any peer it connects with, so if you establish a share between Windows Server 2012 and earlier versions of Windows Server, the connection will be negotiated according to whatever level of SMB is available on the other server. Microsoft TechNet blogger Jose Barreto has a post with a chart that spells out the highest grade of SMB available to a connection negotiated between any two editions of Windows.
SMB 3.0′s new features are only available to other Windows Server 2012 or Windows 8 systems. Some of the new features include:
Scale-out. The same folder can be shared from multiple nodes in a cluster for the sake of failover, surpass use of bandwidth, dynamic capacity scaling, load balancing and fault tolerance.
Multichannel help. Any multiple, redundant network associations between SMB peers can be used to accelerate the connection.
End-to-end encryption. Data sent between SMB 3.0 peers is encrypted by default.
VSS help. SMB shares are now covered by volume shadow copies as well, so data on file shares can also be backed up and restored owing to any VSS-aware software.
SMB Direct. Servers that use RDMA-capable network adapters can delight in high-speed memory-to-memory data transfers with far less CPU usage and latency than conventional copy operations.
SMB index leasing. This feature reduces latency for documents accessed via the Branch Cache feature, by locally caching more of the metadata associated with the document and reducing the amount of roundtrips to the original server.
Note that if you have a mixed infrastructure where all the clients and servers use SMB 2 or surpass — Windows Vista on the client side, Windows Server 2008 on the server side — disable the use of SMB 1.x with the PowerShell command Set-SmbServerConfiguration –EnableSMB1Protocol $fake. Disabling SMB 1.x reduces the potential attack surface for the server. If the protocol isn’t in use, it’s best to disable it to preclude a possible future exploit from being used on it.
What Windows Server features are being deprecated in Windows Server 2012?
Some features in Windows Server are no longer supported as of Windows Server 2012, or are in the process of being removed. Most of these deprecations only occupy code or applications that run directly on the new OS, rather than interoperations with other editions. That said, there are exceptions especially if, for instance, you have an older application that expects the same behavior when it tries to interoperate with the newer version of Server.
Here’s a list of some of the major deprecations and feature removals in Windows Server 2012 (with more listed at TechNet), which may impact cross-server compatibility or applications running on other servers:
Clustering. 32-bit cluster resource DLLs are being deprecated and must be replaced with their 64-bit counterparts whenever possible. Also, if you have any programs that use the Cluster Automation Server (MSClus) COM API, be aware that this API is now only available via an optional component named FailoverCluster-AutomationServer, which isn’t installed by default.
Databases. 16- and 32-bit ODBC help has been removed, as have ODBC and OLEDB drivers for Oracle and Jet Red databases. (Use vendor-supplied database connectors.) ODBC/OLEDB help is also being canned for any versions of SQL Server beyond 2000; for those editions of SQL Server and higher, use SQL Native Client instead. Finally, no version of SQL Server earlier than 7.0 is supported at all. It’s unlikely that anyone is still running SQL Server 6.5 or earlier, but any attempts to connect to a SQL Server 6.5 (or earlier) instance from Windows Server 2012 will breed an error.
Committed Index. Help for resource groups and using Committed Index Lightweight Index Services as an certification store have been deprecated.
UNIX. Many UNIX subsystem features are being deprecated or removed. Microsoft entire SUA POSIX subsystem is being deprecated, along with the line printer daemon protocol that is often used by UNIX clients. As a general replacement for Microsoft’s UNIX features consider using the Cygwin or MinGW, open source tools and APIs that are maintained entirely apart from Windows’s own evolution.
WMI. Many individual WMI providers are being removed or deprecated: SNMP (because SNMP itself is deprecated); the WMI provider for Committed Index (eclipsed by PowerShell), and the Win32_ServerFeature API.
Finally, the Windows Help application (winhlp32.exe) has also been removed although it has not shipped with Windows Server since Windows Server 2008. What’s more, no add-on version of the Windows Help program is being supplied owing to Microsoft as a download, as it did with previous versions of Windows that mislaid Windows Help. (Even if, a Windows Help journal for the client journal of Windows 8 will be made available later, which must do the job.)
September 10, 2012 07:35 by
Scott
If you ever had the need to add a clear / reset button to your standard SQL Server Reporting Services report viewer, here’s a way to do it. Normally when reports are displayed, they are piped through the ReportViewer.aspx page that comes with SSRS. This page hosts the Reporting Server host component, and adds text boxes, radio buttton etc. based on the number of parameters you have in your report.
Something like this:
You can’t simply replace this file with your own custom page, because SSRS has HTTP handlers installed that prevents any other file to be rendered except the ReportViewer.aspx page.
So how to add a clear button to clear the text boxes? One way to do it is to modify the OOB ReportViewer.aspx page by injecting some javascript that does this for us. Initially I wanted to use jQuery, but again, the HTTP handler prohibits us from accessing the external .js file. Back to plain old Javascript it is.
Essentially, we just need to find the container that holds the View Report button, and add our custom button.
In the body tag, add a page onload event handler:
<body style="margin: 0px; overflow: auto" onload="addClearButton();">
and then add some javascript code:
<script type="text/javascript">
document.getElementsByClassName = function(cl) {
var retnode = [];
var myclass = new RegExp('\\b'+cl+'\\b');
var elem = this.getElementsByTagName('*');
for (var i = 0; i < elem.length; i++) {
var classes = elem[i].className;
if (myclass.test(classes)) retnode.push(elem[i]);
}
return retnode;
};
function addClearButton(){
var inputs = document.getElementsByClassName('SubmitButtonCell');
// can't find the cell, return
if (inputs.length<1)
return;
// create a button
var clearButton = document.createElement("input");
clearButton.type = "button";
clearButton.value = "Clear";
clearButton.name = "btnClear";
clearButton.style.width = "100%";
// add clear text boxes functionality to the onclick event
clearButton.onclick = function (){
var textBoxes = document.getElementsByTagName("input");
for (var i=0;i<textBoxes.length;i++){
if (textBoxes[i].getAttribute("type")=="text"){
textBoxes[i].value ="";
}
}
};
// find the relevant cells
var tdSubmitButtonCell = inputs[0];
// find the child table
var table = tdSubmitButtonCell.childNodes[0];
var lastRow = table.rows.length;
var row = table.insertRow(lastRow);
var cellLeft = row.insertCell(0);
// add the clear button
cellLeft.appendChild(clearButton);
}
</script>
The final result will look something like this:
September 8, 2012 05:48 by
Scott
Authentication mechanism to login to SQL Server database engine is either Windows authentication or SQL Server account. Sometimes you will face authentication issues with database portability, example when you migrate a database from one SQL Server instance to another SQL Server instance, DBA has to ensure that all logins in Source SQL Server instance is existed on the target SQL Server instance. Organisations often experience these problems during failover when using database mirroring.
SQL Server 2012 addresses these authentication and login dependency challenges by introducing Contained Database authentication to enhance authorization and portability of user databases.
What is Contained Database Authentication?
Contained Database Authentication allows users to be authenticate directly into a user database without logins that reside in database engine. It allows authentication without logins for both SQL users with passwords and windows authentication without login. It is a great feature when you want to implement AlwaysOn Availability Groups.
Enabling Contained Databases
Contained Databases is a property which you can enable or disable via the Advanced Properties page in SQL Server Management Studio or with T-SQL
Enable Contained Database Authentication using SQL server Management Studio
1. In Object explorer, right-click a SQL Server instance, and then click properties
2. Select the Advanced page, and in the Containment section , set the property Contained Database to true and then click OK.
Enable Contained Database Authentication using T-SQL
1: sp_configure 'show advanced options' 1,
2: Go
3: sp_configure 'Contained database authentication', 1;
4: Go
5: RECONFIGURE;
6: GO
Creating Users
If user does not have a login in master database, the connection string must include the contained database as initial catalog. The below T-SQL can be used to create a contained database user with a password.
1: CREATE User KennyB
2: WITH PASSWORD = '2e4ZK933'
3: ,DEFAULT_LANGUAGE = [ENGLISH]
4: ,DEFAULT_SCHEMA = [dbo]
5: GO
To migrate the SQL Server authentication login to contained database user with a password then you can use below T-SQL
1: sp_migrate_user_to_contained
2: @username = N '<User Name>',
3: @rename = N 'keep_name',
4: @disablelogin = N 'do_not_disable_login';
5: GO
Contained Database Authentication Security Concerns
Without knowledge of DBA, user can create and grant database users in contained database if user has ALTER ANY USER permission.If user gains the access to a database via contained database authentication then user has potential to access other databases within the database engine if these databases has the guest account enabled.
September 4, 2012 07:28 by
Scott