Part 3-a – Dynamic CRM Series – Fetch some data using FetchXML in C#

LINK TO PART 1 – Connection

LINK TO PART 2 – Authentication

LINK TO PART 3 – Fetch Data through Fetch XML

LINK TO PART 4 – Fetch Data through CRM SDK

FetchXML is a proprietary query language that is used in Microsoft Dynamics 365 (online & on-premises). It’s based on a schema that describes the capabilities of the language.

Based on our previous two posts, let us say now we have our organization service proxy, and we need to fetch the list of accounts in our CRM SDK, here is what we can do.

Below is a simple method to fetch the names of accounts from accounts entity in dynamics crm.

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
30
31
32
33
34
35
36
37
38
39
40
41
 
public class BasicAccountInfo
    {
        public string code { get; set; }
        public string name { get; set; }
    }
 
        /// <summary>
        /// Get all user accounts in CRM
        /// </summary>
        /// <param name="email"></param>
        /// <param name="password"></param>
        /// <param name="searchphrase"></param>
        /// <returns></returns>
        public List<BasicAccountInfo> GetUserAccountsWeb(string email, string password)
        {
            var finalResult = new List<BasicAccountInfo>();
            var crmService = GetCRMService(email, password);
            string fetchXml = "";
 
 
                fetchXml = @"<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'>
 			<entity name='account'>
    			<attribute name='name' />
    			<attribute name='accountid' />
    			<order attribute='name' descending='false' />
  			</entity>
			</fetch>";
            }
 
            EntityCollection result = crmService.RetrieveMultiple(new FetchExpression(fetchXml));
            var finalResult = (from data in result.Entities
                                       select new
                                       {
                                           code = ((Microsoft.Xrm.Sdk.Entity)(data)).Attributes["accountid"].ToString(),
                                           name = ((Microsoft.Xrm.Sdk.Entity)(data)).Attributes["name"].ToString()
                                       }).ToList();
 
 
            return finalResult;
        }

Part 2 – Dynamic CRM Series : User Authentication using C#

LINK TO PART 1 – Connection

LINK TO PART 2 – Authentication

LINK TO PART 3 – Fetch Data through Fetch XML

LINK TO PART 4 – Fetch Data through CRM SDK

In our last part of series we made a connection to Dynamic CRM through the CRM SDK.

In this part, we will see how we can authenticate a user using Dynamics CRM.

The following method obtains discovery/organization service proxy for Federated, LiveId and OnlineFederated environments.

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
 
        private TProxy GetProxy<TService, TProxy>(
            IServiceManagement<TService> serviceManagement,
            AuthenticationCredentials authCredentials)
            where TService : class
            where TProxy : ServiceProxy<TService>
        {
            Type classType = typeof(TProxy);
 
            if (serviceManagement.AuthenticationType !=
                AuthenticationProviderType.ActiveDirectory)
            {
                AuthenticationCredentials tokenCredentials =
                    serviceManagement.Authenticate(authCredentials);
                // Obtain discovery/organization service proxy for Federated, LiveId and OnlineFederated environments. 
                // Instantiate a new class of type using the 2 parameter constructor of type IServiceManagement and SecurityTokenResponse.
                return (TProxy) classType
                    .GetConstructor(new Type[] {typeof(IServiceManagement<TService>), typeof(SecurityTokenResponse)})
                    .Invoke(new object[] {serviceManagement, tokenCredentials.SecurityTokenResponse});
            }
 
            // Obtain discovery/organization service proxy for ActiveDirectory environment.
            // Instantiate a new class of type using the 2 parameter constructor of type IServiceManagement and ClientCredentials.
            return (TProxy) classType
                .GetConstructor(new Type[] {typeof(IServiceManagement<TService>), typeof(ClientCredentials)})
                .Invoke(new object[] {serviceManagement, authCredentials.ClientCredentials});
        }

Following method retrieves the Authentication Credentials from CRM SDK based on authentication provider.

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
30
31
32
33
34
35
36
 
	private AuthenticationCredentials GetCredentials<TService>(IServiceManagement<TService> service,
            AuthenticationProviderType endpointType, string _userName, string _password)
        {
            AuthenticationCredentials authCredentials = new AuthenticationCredentials();
 
            switch (endpointType)
            {
                case AuthenticationProviderType.ActiveDirectory:
                    authCredentials.ClientCredentials.Windows.ClientCredential =
                        new System.Net.NetworkCredential(_userName,
                            _password,
                            _domain);
                    break;
                case AuthenticationProviderType.LiveId:
                    authCredentials.ClientCredentials.UserName.UserName = _userName;
                    authCredentials.ClientCredentials.UserName.Password = _password;
                    break;
                default: // For Federated and OnlineFederated environments.                    
                    authCredentials.ClientCredentials.UserName.UserName = _userName;
                    authCredentials.ClientCredentials.UserName.Password = _password;
                    if (endpointType == AuthenticationProviderType.OnlineFederation)
                    {
                        IdentityProvider provider =
                            service.GetIdentityProvider(authCredentials.ClientCredentials.UserName.UserName);
                        if (provider != null && provider.IdentityProviderType == IdentityProviderType.LiveId)
                        {
                            authCredentials.SupportingCredentials = new AuthenticationCredentials();
                        }
                    }
 
                    break;
            }
 
            return authCredentials;
        }

And finally, our login method, it returns true if user is authenticated, and false if it is not.

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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
 
public bool Login(string Email, string Password)
        {
            OrganizationService orgService;
            bool isValidUser=false;
            IServiceManagement<IDiscoveryService> serviceManagement =
                ServiceConfigurationFactory.CreateManagement<IDiscoveryService>(
                    new Uri(_discoveryServiceAddress));
            AuthenticationProviderType endpointType = serviceManagement.AuthenticationType;
 
            // Set the credentials.
 
            String organizationUri = String.Empty;
            // Get the discovery service proxy.
 
            bool result = false;
            try
            {
                AuthenticationCredentials authCredentials = GetCredentials(serviceManagement, endpointType, Email,
                    Password);
                var response = GetProxy<IDiscoveryService, DiscoveryServiceProxy>(serviceManagement, authCredentials);
                result = response != null;
            }
            catch (Exception er)
            {
                result = false;
            }
 
            if (result)
            {
		//Although, our job is done here and we can return true, but if we need to get more user details regarding this logged in user then we can now execute the following calls. Specially the WhoAmIRequest() method of CRM SDK
                orgService = GetCRMService(Email, Password);
                Guid userid = ((WhoAmIResponse) orgService.Execute(new WhoAmIRequest())).UserId;
                dynamic systemUser = orgService.Retrieve("systemuser", userid, new ColumnSet(new string[] {"firstname", "lastname"}));
 
                string UserId = userid.ToString();
 
                string UserName = ((Microsoft.Xrm.Sdk.Entity) systemUser).Attributes["firstname"] + " " +
                                     ((Microsoft.Xrm.Sdk.Entity) systemUser).Attributes["lastname"];                
                isValidUser=true;
            }
            else
            {
                string UserId = "";
 
                string UserName = "";
            }
 
            return isValidUser;
 
        }

I really hope the code was helpful in kick starting your project in dynamics CRM, as authenticating a user from dynamics crm would be the first step if we want to start an application user dynamics CRM

Connect to Dynamics CRM through CRM SDK using C#

There are many ways to connect to and access the database of Dynamics CRM database.

a- If you are creating plug-ins, custom workflow activities, or custom XAML workflows, use Dynamics 365 SDK assemblies

https://msdn.microsoft.com/en-us/library/jj602917.aspx?f=255&MSPPError=-2147217396#SDKAssemblies

b- If you are creating Windows applications for Dynamics 365, use XRM tooling assemblies. More information: .NET Development: Use XRM Tooling assemblies

https://msdn.microsoft.com/en-us/library/jj602917.aspx?f=255&MSPPError=-2147217396#XrmTooling

c- If you are creating non-Windows applications for Dynamics 365, use Web API. More information: Use the Microsoft Dynamics 365 Web API

https://msdn.microsoft.com/en-us/library/mt593051.aspx

The way we will see in this article is to connect through CRM SDK and get the connection Service Proxy object.

In web.config file, add the following entry that carrys the connection string for CRM.

<add key=”XrmConnection” value=”Url=https://crm.domainname.com; Username={0}; password={1}” />

Add reference to following Dll’s

CRM SDK Reference

/// <summary>
/// Method globally used to return a CRM Service Proxy Object, which will be used to make futher calls to CRM.
/// </summary>
/// <param name=”userName”></param>
/// <param name=”password”></param>
/// <returns></returns>
private OrganizationService GetCRMService(string userName, string password)
{
try
{
CrmConnection connection =
CrmConnection.Parse(string.Format(ConfigurationManager.AppSettings[“XrmConnection”], userName, password));
OrganizationService orgService = new OrganizationService(connection);
return orgService;
}
catch (Exception ex)
{
return null;
}
}

This method will return the OrganizationService Proxy object that we can use later to fetch the data from Dynamics CRM Entities.

But before doing this we need to Authenticate and Authorise the user. There are two cases, one in which our application does not require the user to see his personalised content, instead the application is a reporting app, or a generic application for all the users of the organisation. In that case, we can fix the username and password for the master user account in web.config file. Make sure that user have enough previledges requried for the application to run.

In other case, if each user has to login into the application and perform his own activities, in that case above method of connection string and accessing through the metho

Productivity Tips for Visual Studio 2017

Visual Studio 2017 is a productivity powerhouse, It is loaded with tons of features that are really awesome and to talk about.

NuGet Package Suggestion for Unrecognized Types

automatically import from nuget

In my opinion, one of the most useful additions to Visual Studio 2017 was the Nuget-based Using Suggestion feature. This feature will recommend installing a specific NuGet package to handle resolving an unrecognized type that is encountered within the editor.

It can be enabled via:

  • Tools > Options > Text Editor > C# > Advanced > Suggest Usings for Types in Nuget Packages

Again – a great feature to speed up your productivity and it sure beats wandering around NuGet or running off to manually download the packages.

Query Syntax in Go To All (Ctrl+T)

filtering query syntax

Another incredibly useful tool introduced within Visual Studio 2017 was query searching within the Go To All (Ctrl+T) search area. This allows you to now quickly search for any file / type / member / or symbol by prefacing your search using the following prefixes:

  • f {file}
  • t {type}
  • m {member}
  • # {symbol}

This can allow you to easily narrow your search within your solution and find exactly what you need fast.

Full Solution Analysis

errors, messages, and warnings for the entire solution

The Full Solution Analysis feature is one that could be helpful to see every error, message, and warning throughout your entire solution (and not just the files that are currently open).

This feature can be enabled via:

  • Tools > Options > Text Editor > C# > Advanced > Enable Full Solution Analysis

If you are a stickler that can’t stand seeing a non-empty Error List, then this is for you.

Lightweight Solution Load

loading projects on demand

Another great feature that can add quite a bit of zing to Visual Studio 2017 is Lightweight Solution Load. This feature will initially load the minimal amount necessary for each project to have them functional within Visual Studio. Individual project files and dependencies will not be loaded or expanded until requested, so you only load what you will need.

This feature can be enabled in two ways; locally:

  • Right-click Project > Enable Lightweight Solution Load

Or globally (for all projects):

  • Tools > Options > Projects and Solutions > General > Lightweight Solution Load

It’s great for large solutions with multiple projects that maybe aren’t all going to be touched for most scenarios or just if you just want Visual Studio to open up a project faster than normal.

Live Unit Testing

Live Unit Testing was one of the features that was touted during the release of Visual Studio 2017, but it isn’t actually enabled by default. This feature will figure out which unit tests are affected by any code changes and the tests will be automatically run. Additionally, it will decorate your code using icons to indicate which code is covered and the status of the test covering that code.

This feature can be enabled in two ways; locally:

  • Test > Live Unit Testing > Start

Or globally (for all projects):

  • Options > Live Unit Testing

Live Unit Testing is super handy for not only seeing what tests are passing and failing, but for examining code coverage as well. This feature is also highly configurable and will allow you to include / exclude specific tests, define the number of threads you want to dedicate to it, configure when the tests are run, and much more.

EditorConfig Style Enforcement

update-editor-styles

Visual Studio 2017 adds support for .editorconfig files within projects to help provide coding style recommendations, which can be useful for large development teams looking to maintain a consistent style across their code base.

You may notice that the ellipses can be incredibly difficult to notice, especially if you are on the dark side. This can easily be adjusted within the IDE to make them far more visible from:

  • Tools > Options > Environment > Fonts and Colors > Suggestion Ellipsis

You can then configure the color to make it “pop” out a bit more :

styled suggestions

While this feature is enabled by default (if an .editorconfig file is present), you can make the process of editing it much easier through Mads Kristensen’s EditorConfig extension, which can be downloaded and will provide full autocompletion, syntax highlighting, and much more.

Keyboard Shortcuts

With many of the new additions and features that were added to Visual Studio 2017, you might be inclined to consider dropping support for the heavyweight Resharper extension to see how vanilla Visual Studio works at this point. Or if you are a developer coming from another editor such as IntelliJ, Eclipse, you are probably pretty accustomed to the keyboard shortcuts from those tools. Well, there’s an extension that has you covered.

Justin Clarebert, a member of the Visual Studio team released the HotKeys Keyboard Shortcuts extension, which allows you to easily configure Visual Studio 2017 to use the keyboard shortcuts from those other popular editors and tools, giving you the productivity you are accustomed to within a new environment.

Okay. So this is another feature that isn’t directly built in to Visual Studio 2017, but it’s too big of a productivity enhancer to leave off this list (and since it’s not built it, I suppose it still qualifies as a “secret”).

ASP.NET Core 2 Preview 1

ASP.NET Core 2.0.0-preview1

The next full version of ASP.NET Core is on its way, and developers who have been following along on the ASP.NET GitHub repositories have been very vocal about their interest in the new features in this version.  Some of these new features include:

  • A new ASP.NET Core meta-package that includes all features that you need to build an application. No longer do you need to pick and choose individual ASP.NET Core features in separate packages as all features are now included in a Microsoft.AspNetCore.All package in the default templates. If there are features you don’t need in your application, our new package trimming features will exclude those binaries in your published application output by default.
  • A new default Web Host configuration, codifying the typical defaults of the web host with the WebHost.CreateDefaultBuilder() API. This adds Kestrel, IIS configuration, default configuration sources, logging providers, and the content root.
  • Updated configuration and simplified logging. We have enhanced the LoggerFactory object to easily support a Dictionary<string, LogLevel> that defines log filters instead of a FilterLoggerSettings object, making it simpler to control the source and level of logs that get propagated from your application to your configured log providers.
  • Create pages without controllers in ASP.NET Core with the new RazorPages capabilities.  Just create a Pages folder and drop in a cshtml file with the new @page directive to get started.
  • Debugging your application in the cloud is easier than ever with integrated Azure Application Insights and diagnostics when debugging in Visual Studio and after deploying to Azure App Service.
  • A newly revamped authentication model that makes it easy to configure authentication for your application using DI.
  • New templates for configuring authentication for your web apps and web APIs using Azure AD B2C
  • New support in ASP.NET Core Identity for providing identity as a service. Updated templates decouple your apps from their identity concerns standard protocols (OpenID Connect, OAuth 2.0). Easily migrate apps using ASP.NET Core Identity for authentication to use Azure AD B2C or any other OpenID Connect compliant identity provider.
  • Build secure web APIs using ASP.NET Core Identity. Acquire access tokens for accessing your web APIs using the Microsoft Authentication Library (MSAL)
  • NET Core has always helped HTMLEncode your content by default, but with the new version we’re taking an extra step to help prevent cross-site request forgery (XSRF) attacks: ASP.NET Core will now emit anti-forgery tokens by default and validate them on form POST actions and pages without extra configuration.

For a full list of changes see the release notes.

C#- Performance of code – For loop vs For each Loop

I had a small experiment to prove the point under discussion, I have a table accounts in SQL Server database, I added  20000 rows into the table with 9 columns and approximately 1 Kilobyte of data per record. After loading into my Business layer i am converting it back to a DTO, and returning to my web service. Just to test the performance I added two performance counters, one for “for each” loop and one for “for loop”, The results are obvious, foreach loop took 107 milliseconds to execute the same process, while classic for loop took 14 milliseconds.

forloop-blog-1

Now why does this happen, lets get a bit deeper.

The for loop version uses enough stack space for only two local variables (counter and i). The Foreach version uses stack space for four locals (item, AccountList object, and two compiler-generated temporaries).

When a method is called in the CLR, all of the memory required for the locals is allocated upon the stack. As this takes place on the stack, this process is fast, but it is not free. That is why the foreach-loop will incur a small cost due to its extra two local variables.

WAIT !!!

There is something else, which changes the effect.

If we use the local variable multiple times in for loop and foreach loop, see what happens.

forloop-blog-2

The game is reversed, that means that if we have to access the local variable value multiple times in the for loop, in that case the performance will decrease.

Deductions

a- This for-each loop is faster because the local variable that stores the value of the element in the array is faster to access than an element in the array.

b- The for-loop is faster than the foreach-loop if the array must only be accessed once per iteration.

CodeTrigger – One of the best .net Code generator

What is Code Trigger:

Code Trigger is a code Generation tool For C#, WPF, WCF, SQL SERVER/ORACLE/MYSQL and Visual Studio 2013-2017.

One can buy the tool from Link. 14 days Trial is also available after which one can purchase the full software.

https://www.codetrigger.com

splash_vs2013

My Experience:

Now a days life of a software engineer hangs around productivity, quality and efficiency. Delivering under tight deadlines with quality is a challenge for most of us.

Consider a client asks you to build a software under in 2 weeks, which includes web front end, backend with SQL server, and rest API’s for android and IOS platforms. It compose of let us say 4 entities, user, product, orders and sale. Sounds like a tough plan.

As a project manager one would think of following things:

a- Setup code base.
b- Graphics Design Resources availability.
c- Design and architecture.
d- Meeting deadlines.

As a developer I would think of following:

a- Which design pattern to follow.
b- 4 entities. Each entitiy should provide atleast basic CRUD (Create, read, Update and Delete) operations in Data Access Layer.
c- Performance of code
d- Bug free code
e- Web Service Layer
f- Dependency Injection in code? Ninject, Unity, Autofac?
g- Repository Pattern.
h- Writing the access layer.

Approximately i assume this should take around 4-5 days if a developer works for 40 hours a week.

A similar scenario came to me, but with a twist, i had 30+ entities, performance of code specially web services had a demand of 2-3 seconds per request, code quality should be top notch, clean code.

I was look around for difference code generator tools like LLBLgen Pro, SalarDB, and many more. But I choose code trigger for some reasons.

a- It plays directly with ado.net, and ado.net is the fastest. Clearly my choice is not Entity framework as it is slow for obvious reasons.

Dapper could be the second best choice, but it is slightly slower than core ado.net. Else i might have choose LLBLgenpro.

Few benchmark links that supports my argument.

https://www.exceptionnotfound.net/dapper-vs-entity-framework-vs-ado-net-performance-benchmarking/
http://ppanyukov.github.io/2015/05/20/entity-framework-7-performance.html

I could have gone for SalarDB generator but that was too plain simple code. Could be good for very small project.

For a medium to large scale project i must say CodeTrigger is the best code generator tool ever.

Best Features:

a- Clean & quality code
b- Bug free code
c- Performance
d- Easily manage changes during sprints, one click and you get your code changes
e- Visual Studio integration
f- Nice Criteria query API
g- Nice Repository pattern implementation
h- Generate SQL Stored procedures.
i- Support for logging
j- Exception handling support
k- Unit of work pattern
l- Dependency injection pattern using either Unity or ninject
m- Generates interface definitions.

On a recent project i did some measurements for code metrices, and they are as below:

For users who want to know more of the below stats should visit URL below:
https://msdn.microsoft.com/en-us/library/bb385914.aspx

blog-codetrigger-1

You can see the high maintainability index, low depth of inheritance and nice numbers for class coupling. And around 9000+ lines of code generated in under 15 minutes by clicks of few minutes. This is really a great tool and it increases productivity and efficiency of the developers to the highest level possible.

I would recommend this tool to all the developers fellows who are missing there deadlines, or needs to code with quality and good patterns, this is a nice tool to go for.

“Open Source PostgreSQL on Microsoft Azure” meetup in Islamabad

Microsoft has partnered up with the PostgreSQL Special Interest Group in Islamabad to bring you “Open Source PostgreSQL on the Cloud” on 23rd September, 2016! The session has been delivered by Mr. Ali Sufyan Butt, a Microsoft Most Valuable Professional on Visual Studio and Development Technologies.

Agenda

  • Introduction to Azure & its features
  • Deploy a Ubuntu Linux VM on Azure
  • Install and configure PostgreSQL on Ubuntu Linux Server hosted on Azure
  • Build a quick demo Asp.net app and connect it through the database using EF 6.0 drivers for PostgreSQL
  • Deploy the website on Azure

Extension method for IEnumerable to get a deep copy cloned object.

When we assign a List object to another it does a shallow copy, and making a change into copied object reflects in source object as well. This does not serves the purpose, thus finding a ways is through extension methods.

Code Snippet
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Net;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7.  
  8. namespace Csharp
  9. {
  10.  
  11.     public static class Program
  12.     {
  13.  
  14.  
  15.         static void Main(string[] args)
  16.         {
  17.             List<string> abc = new List<string>();
  18.             abc.Add("a");
  19.  
  20.             var newList = AddAlphabet(abc);
  21.  
  22.             Console.WriteLine(abc.Count);
  23.             Console.WriteLine(newList.Count);
  24.             Console.ReadLine();
  25.         }
  26.  
  27.         private static List<string> AddAlphabet(List<string> abc)
  28.         {
  29.             List<string> _abc = abc;
  30.             _abc.Add("d");
  31.             _abc.Add("e");
  32.             return _abc;
  33.         }
  34.  
  35.  
  36.         
  37.     }
  38. }

This produces following result in output

3

3

Changing the code and added an extension method will result in proper result that I expected earlier.

Code Snippet
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Net;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7.  
  8. namespace Csharp
  9. {
  10.  
  11.     public static class Program
  12.     {
  13.         public static IEnumerable<T> Clone<T>(this IEnumerable<T> collection) where T : ICloneable
  14.         {
  15.             return collection.Select(item => (T)item.Clone());
  16.         }
  17.  
  18.         static void Main(string[] args)
  19.         {
  20.             List<string> abc = new List<string>();
  21.             abc.Add("a");
  22.  
  23.             var newList = AddAlphabet(abc.Clone<string>().ToList());
  24.  
  25.             Console.WriteLine(abc.Count);
  26.             Console.WriteLine(newList.Count);
  27.             Console.ReadLine();
  28.         }
  29.  
  30.         private static List<string> AddAlphabet(List<string> abc)
  31.         {
  32.             List<string> _abc = abc;
  33.             _abc.Add("d");
  34.             _abc.Add("e");
  35.             return _abc;
  36.         }
  37.  
  38.  
  39.         
  40.     }
  41. }

This produces following result in output

1
3

We notice that it does not change the original value of source.

Mr. Corton Privacy Policy

Personal information

This application does not collect or transmit any user’s personally identifiable information. No personal information is used, stored, secured or disclosed by services this application works with.

Technical information

No technical information is sent (such as IP addresses included in the HTTP calls the application makes) neither of that is used or stored.

Communication

  • The communication made with the app in either text or voice is not stored anywhere in any form, all speech processing is done locally, only send the message to server to send back the response.

Third parties

If the app makes use of third party services, their usage of information is excluded from this privacy policy. You will be clearly made aware of the third parties involved in the app and we will ensure the very minimal set of data is set to those third parties. The third party is our AI engine which processes the sound and sends back the text.

Report violations or get more information

If you would like to report any violations of this policy or get more information on any app, please contact us by emailing at alisufyanbutt@hotmail.com.

This is just a virtual friend, any association or personal attachment to it is not our responsibility, please do not take the responses seriously, it might be not what you like, but we made sure they would be not vulgar, offensive and indecent.

NDepend is something we can depend on

Ndepend is a tool which I am really excited to review at last. I had a long time commitment with NDepend team but I for some reasons I had been too busy in other stuff that I really missed it, But I have not forgotten it at all and been using the tool and had great benefits which I want to share with you guys.

After downloading the tool, it is fairly easy to configure the extension with Visual Studio as well as we can also use Visual NDepend tool to visually analyze the solution or assemblies.

For first timers, this link can help to install and configure http://www.ndepend.com/docs/getting-started-with-ndepend

After running this tool for the first time, I scanned my project and viola, I was in deep trouble, just kidding, I mean I got a detail report of issue with my code, code metrics, dependency graphs, Dependency Matrix and a long list of rules violated in the code. This was really a great thing to see and I immediately started to work on making the mistakes right.

NDepend is giving me insights into my code that we normally ignore, but keep following through the standards and after a few iterations with NDepend, it was all sweet code. All thanks to NDepend tooling and support.

 

Privacy Policy

Privacy Statement

In this document, “we” refers to Technocrux respects your privacy and is committed to protecting your personal information. This privacy policy details how we manage your personal information and safeguard your privacy.

This privacy policy sets out how we uses and protects any information that you give us when you use this website.

We may change this policy from time to time by updating this page. You should check this page from time to time to ensure that you are happy with any changes. This policy is effective from 01 Jan 2014.

What we collect

Personal Information is that information or opinion (including information or an opinion forming part of a database), whether true or not, and whether recorded in a material form or not, about an individual whose identity is apparent, or can reasonably ascertained. As such personal information can include your name, address and contact details.

We may collect the following information:

  • real name
  • contact information including email address
  • geographic information including country of residence
  • publically accessible Twitter information such as published tweets and profile
  • technical computer and network information such as IP address, device specification and usage metrics

What we do with the information we gather:

We use this information to understand our customers’ needs and provide them with a better product and service. In particular for the following reasons:

  • identify usage trends to improve the product experience
  • analyze error and crash reports to improve application reliability
  • gather feedback on the product’s user experience for future enhancements
  • provide cross-device services without user configuration

We also collect some information from you when you use our website www.thtslink.com. Your use of services available through our website will determine the amount and type of information which we collect about you.

The only personal information we collect about you when you use our website is what you tell us about yourself, eg. by completing an online form or information you provide us when you send us an e-mail.

We use cookies

When you visit our website, our server attaches a small data file called a “cookie” to your computer’s memory.

Cookies are pieces of information that may be transferred to your computer’s memory when you visit a website for record keeping purposes. Most web browsers are set to accept cookies. However, if you do not wish to receive any cookies you may set your web browser to refuse cookies. We use cookies to provide is with anonymous information on the use of our website and to know what you find interesting on our website. We do not link this information back to your identity or other information that you have provided to us. We do not store any information that identifies you inside cookies.

Security

We are committed to ensuring that your information is secure. In order to prevent unauthorized access or disclosure, we employ industry-standard physical, electronic and managerial procedures to safeguard and secure the information we collect online.

Supplying your information to third parties

We may disclose your personal information when we contract out some of our functions to an external service provider. This information is disclosed for the express purpose of the service that we have contracted out to them. It may not be used for any other purpose by the external service provider.

If you have any concerns about our privacy policy, the information we have recorded or believe that any information we are holding on you is incorrect, please feel free to contact us.

Worms Invasion

http://apps.microsoft.com/windows/app/worms-invasion/13b975ee-8bc5-423a-b9de-e719ed5247ea

This winter save the world from invasion of worms in this very addictive and fun shooter. Compete with the world by showing off how best you can shoot and score more than them, so lets pick the gun and start shooting in this superb game.

Play with keyboard mouse, or gamepads, choice is yours. Play as solo or in co-operative mode, again your choice. Playing with friends always adds a fun factor.   Features

•Up to 4 Players coop

•Support to Gamepads(4 players) or same-keyboard play(2 players).

•Melee, Ranged and Exploding Enemies, with several variables for easy behavior adjustment.

•Score Collectables.

•Healing collectables.

•Weapon Inventory system. Pickup, Swap and Drop weapons.

•Mobile controls will come in next update with windows phone 8 app launch.

•Procedural Level Generation giving you infinite levels.

•More updates coming soon.

Worms Invasion – Privacy policy

This Application does not collect any personal information.

This Application does not contain any other features that could allow users to unintentionally share their personal information.

This application does requires internet connection to work properly, for submission of leaderboard score.

IIS and Skype (Fighting for the port)

During development if you stop the iis and forgot to start it. And later on restart Skype it will take over port 80 / 443, which will later on cause us an Error 0x80070020 when we try to start the website from IIS manager console.

The error code 0x80070020 translates to ERROR_SHARING_VIOLATION (The process cannot access the file because it is being used by another process.)

This issue may occur if TCP port 80 and/or 443 is grabbed by a different service.

Solution is to close Skype, and start website and start Skype again.

This might happen with other software which want to take over these ports but being a windows developer Skype is most commonly the cause of this issue.

Confirmed: Windows Phone 8.1 Developer Preview coming next week

Microsoft has officially announced Windows Phone 8.1, but is yet to release it to the general public. That said, the developer preview of Windows Phone 8.1 will be made available to registered developers soon and developers will be the first to get their hands on the final RTM version of the mobile OS once it is released by Microsoft.

If you want to try your hands onto the developer preview of Windows Phone 8.1 and want to be the first one to get the finished version of Windows Phone 8.1 when it does get released, here are the steps you need to follow.

Register as a developer

You need to first register as a developer with the Microsoft developer program. This process is free and you will not be required to pay a single cent / penny for it. Also you need not be a developer to actually register as a developer with Microsoft.

The trick is to register using the free App Studio that Microsoft released recently. Use the same email address as you have used on your Windows Phone handset and register as a developer.

Download Preview for Developers app

Preview for Developers app is basically an app that configures your phone to receive developer previews of software updates that are yet to be released by Microsoft.

Download the app from this location and install it on your Windows Phone handset.

Once installed, run the app and agree to the Terms and Conditions, sign-in using the Microsoft account using which you registered as a developer. Then agree to enable Preview for Developers and click done to complete the process.

Check for phone updates

Navigate to Settings -> Phone Update and tap on check for updates. This will connect through to Microsoft servers and check for Windows Phone 8.1 developer preview.

Your Windows Phone handset should find the developer preview update once available and begin downloading it.

General Application Policy

This Application does not collect any personal information.

This Application does not contain any other features that could allow users to unintentionally share their personal information.

This application does not requires internet connection to work properly, like authentication, loading of content.