Welcome to fuzzydev Sign in | Join | Help

Latest Posts

More Posts Next page »

External News

  • Getting "SignalR-Ready" in Visual Studio 2010

    This article discusses the necessary steps to get started building SignalR Applications using Visual Studio 2010.
    8 hours, 42 minutes ago by ASP.NET Articles of the Day
  • Tracing in ASP.NET Web API

    Take a quick peek at ASP.NET Web API’s Tracing implementation and its unique features. Also see how we can enable Tracing in non-Web API template based MVC Apps that use Web API
    22 May 2013, 3:00 AM by ASP.NET Articles of the Day
  • A CKEditor File Browser For ASP.NET Web Pages

    CKEditor is one of the most popular rich text editors available. Out of the box, there is no file browser to help with selecting images, but you can purchase an add-on from them - CKFinder. Alternatively, you can build your own file browser component.
    21 May 2013, 3:00 AM by ASP.NET Articles of the Day
  • AngularJS Abstractions: Filters

    Filters in AngularJS can form a pipeline to format and adapt model data inside a view. The built-in filters for AngularJS are date (format a date), filter (select a subset of an array), currency (format a number using a currency symbol for the current locale), and many more. I say filters can form a pipeline because you place them inside expressions in a view using a pipe symbol. The canonical example of a filter is the filter filter, which in the following markup filters a list of items according to what the user types in the search input (try it live here).

    <input type="search" placeholder="Filter" ng-model="searchTerm"/>    
    
    <ul ng-repeat="item in items | filter:searchTerm | limitTo:maxItems">
        <li>{{item}}</li>
    </ul>
    
    

    Notice the output of filter is also piped to a limitTo filter, which restricts the number of items in the list to maxItems (where maxItems would need to be defined in the model).

    Custom Filters

    Custom filters only require a filter function to be registered with Angular. The filter function returns a function that will perform the actual work. For example, a plurify filter to add the letter s to the output:

    (function() {
    
        var plurify = function() {
            return function(value) {
                return value + "s";
            };
        };
    
        angular.module("patientApp.Filters")
               .filter("plurify", plurify);
    }());
    

    Now plurify is available to use in a view:

    <ul ng-repeat="item in items | filter:searchTerm | limitTo:maxItems">
        <li>{{item | plurify }}</li>
    </ul>
    

    A filter can also take one or more optional parameters.

    var plurify = function() {
        return function(value, strength) {          
           strength = strength || 1;
           return value + Array(strength + 1).join("s");
        };
    };
    

    Now we can add 5 s characters to the output:

    <li>{{item | plurify:5 }}</li>
    

    The beauty of filters is how you can package up small pieces of testable code to make the job of the model and view a bit easier, and the syntax to use a filter is easy and intuitive.

    20 May 2013, 12:12 PM by OdeToCode by K. Scott Allen
  • Splitting and Merging PDF Files using iTextSharp

    This article covers using the iTextSharp library to split and merge PDF Files in C#.
    20 May 2013, 3:00 AM by ASP.NET Articles of the Day
  • HTTP Cookies and ASP.NET Web API

    Use cookies to exchange bits of information between a Web API service and a client
    19 May 2013, 3:00 AM by ASP.NET Articles of the Day
  • Custom Validation with IValidatableObject in MVC

    In this post you will learn how to create a self validatable object using IValidatableObject to validate data in MVC.
    18 May 2013, 3:00 AM by ASP.NET Articles of the Day
  • Using system.js in MongoDB (From C#)

    The official MongoDB docs recommend that you avoid storing scripts on the server, but there are scenarios where having reusable functions available on the server can be useful. Inside a MapReduce operation, for example.

    We’ll start with some JavaScript code encapsulating statistical calculations, and place the code in a file named mathStats.js:

    function() {
    
        var stdDev = function(numbers) {
            // ...  
        };
    
        var mode = function(numbers) {
            // ...
        };
    
        var mean = function(numbers) {
            // ...
        };
    
        return {
            stdDev: stdDev,
            mode: mode,
            mean: mean
        };
    
    };
    

    Note the script must be a function. To use the methods inside, the function must live in the system.js collection. The following C# code can do this:

    var sysJs = db.GetCollection("system.js");
    var code = File.ReadAllText("pathTo\\mathStats.js");
    var codeDocument = new BsonDocument("value", new BsonJavaScript(code));
    codeDocument.Add(new BsonElement("_id", "mathStats"));
    sysJs.Insert(codeDocument);
    
    

    It is important to insert the script as the  value attribute of a document, and set the _id of the document to a friendly string name and not an ObjectID value. Failing to follow those two steps can lead to errors like “exception: name has to be a string” and “value has to be set” when you execute commands.

    Once the script is loaded, you can use the function from any map, reduce, or finalize function by invoking the function with its friendly _id name. For example:

    function(key, value){                      
        var stats = mathStats();
        value.stdDev = stats.stdDev(value.items);               
        return value;
    }
    17 May 2013, 12:12 PM by OdeToCode by K. Scott Allen
  • return View() vs return RedirectToAction() vs return Redirect() vs return RedirectToRoute()

    There are different ways to return/render a view in MVC Razor. Many developers got confused when to use return View(), return RedirectToAction(), return Redirect() and return RedirectToRoute().This articles explains the differences.
    17 May 2013, 3:00 AM by ASP.NET Articles of the Day
  • AngularJS Abstractions: Scope

    Continuing from the controllers post, the parameter to the controller function is named $scope.

    var AboutController = function($scope) {
    
        // ...    
    
    };
    

    The name $scope is important since it allows the AngularJS dependency injector to know what type of object you are asking for, in this case an object that will contain the view model. Any plain old JavaScript you attach to $scope (properties, functions, objects, arrays) is eligible to use from the expressions inside the view.

    In the last post our model was relatively “flat” in the sense that properties and functions were added directly to $scope:

    $scope.rabbitCount = 2;
    
    $scope.increase = function() {
        $scope.rabbitCount *= $scope.rabbitCount;
    };
    

    This allowed us to use rabbitCount and increase() in the markup that was inside the view scope (the div) of the AboutController:

    <div data-ng-controller="AboutController">
    
        <div>Number of rabbits in the yard: {{rabbitCount}}</div>
    
        <button ng-click="increase()">More rabbits</button>
        
    </div>
    

    You can think of $scope as the execution context for the expressions in the view. Saying ng-click=”increase” results in a call to $scope.increase. The only thing tricky to understand about $scope is that having a controller inside a controller, or a controller inside an application (which you’ll always have), will result in nested $scopes, and a nested $scope will prototypally inherit from it’s parent scope by default. This is why $scope is injected by angularJS – the framework sets up the prototype chain before giving your controller the $scope object to use as a model.

    Inheritance means a view has access to it’s own scope as well as any inherited scope. In the following example, the view inside the ChildController markup can use an expression like {{rabbitCount}}, and this expression will read the rabbitCount property of AboutController’s scope ($scope.rabbitCount will follow the prototype chain).

    <div data-ng-controller="AboutController">    
    
        <div>Number of rabbits in the yard: {{rabbitCount}}</div>
        
        <div data-ng-controller="ChildController">
            Number of rabbits in the yard: {{rabbitCount}}
            Number of squirrels in the yard: {{squirrelCount}}
        </div>
    
    </div>
    

    The one place to be careful with the inherited scope is with 2 way data binding. The way JavaScript prototypes work is that writing to the rabbitCount property of the ChildController $scope will add a rabbitCount property to the ChildController $scope and effectively hide the parent property. $scope.rabbitCount no longer needs to follow the prototype chain to find a value. More details and pictures on this scenario in “The Nuances of Scope Prototypal Inheritance”.

    16 May 2013, 12:12 PM by OdeToCode by K. Scott Allen
  • Querying Wikipedia in ASP.NET Using LINQ-to-Wiki

    Rion Williams discusses how to query Wikipedia content within ASP.NET applications through traditional LINQ queries using the LINQ-to-Wiki library.
    16 May 2013, 3:00 AM by ASP.NET Articles of the Day
  • Where Is .NET Headed?

    I watched the dotNetConf .NET Open Source Panel last week. It was a bit disappointing to hear defeatism in the voices of OSS project leaders, because .NET’s future appears to rely entirely on the success of open source software for .NET. Here are a couple reasons:

    1. The success of Windows Azure. Azure is now an amazing cloud platform for developers and is getting better every few weeks. Azure is also a business success with annual revenue topping $1 billion. That’s $1 billion with only a 20% share of a $6 billion dollar market – a market that is expected to grow to $30 billion in 4 years. As Azure continues to pick up market share it is not completely unthinkable to see it post a 15+ billion dollar year in 2018, which is getting into the same double-digit-billion-dollar-revenue neighborhood as Windows itself.

    The documentation page for Azure makes it clear where the growth will come from:

    Azure Strategy 

    To paraphrase the above graphic, Microsoft doesn’t need legions of developers building frameworks and tools for Windows developers when they can have legions of programmers building tools and a cloud platform for all developers. Hadoop, Redis, NodeJS, RoR, Django, PHP, and the list goes on. Even if it doesn’t run on Windows, you can always spin up a ready made Azure virtual machine image with Ubuntu, CentOS, or SUSE.

    I don’t think Azure needs a successful server-side .NET framework to be a success itself.

    2. The Direction of Windows 8.

    I still feel Window 8 carpet bombed .NET developers. There was secrecy and hearsay followed by the death of one XAML platform and the arrival of yet another slightly different XAML platform. People running a business based on desktop technology don’t know where to place their bets and the Windows division has always appeared hostile to the CLR. I’m not sure what this year’s Build and Windows Blue will bring, but I can only hope it offers some direction for businesses who build desktop business applications with managed code.

    I don’t think Windows wants to see a successful client-side .NET framework.

    Where Are We?

    It feels as if Microsoft has shifted focus away from .NET, and with the focus goes resources and innovation. Much of the CLR and it’s associated assemblies and languages appear to be entering maintenance or refinement mode instead of advancing in new directions. Anyone building software on Microsoft’s .NET platform should see this as cause for concern.

    Except …

    The circle of  software loosely surrounding .NET is exploding. There are more server side framework choices for C# developers than ever before, and client side web programming has advanced rapidly over the last few years with open source projects like AngularJS, Backbone, Ember, and Meteor. Document databases like MongoDB and RavenDB and key-value stores like Redis are all available to managed code, and products like Xamarin are pushing C# and mono to new platforms. What I’ve listed is a small sampling of what is happening and it is all pretty amazing when you sit back and look at the bigger picture. 

    Plus, if you already build solutions with ASP.NET MVC, Web Pages, the WebAPI, or the Entity Framework, you are already building software on top of open source projects that rely on other open source projects from the community. 

    What To Do?

    If your business or company still relies solely on components delivered to developers through an MSDN subscription, then it is past time to start looking beyond what Microsoft offers for .NET development so you won’t be left behind in 5 years. Embrace and support open source.

    At least, that’s how I see things.

    15 May 2013, 12:12 PM by OdeToCode by K. Scott Allen
  • How to Avoid Session Hijacking in Web Applications

    This article describes hijacking (theft) of a user Cookie from a browser and how to avoid it.
    15 May 2013, 3:00 AM by ASP.NET Articles of the Day
  • Responsive ASP.NET GridView With Twitter Bootstrap

    How to implement Responsive ASP.NET GridView with Twitter Bootstrap
    14 May 2013, 3:00 AM by ASP.NET Articles of the Day
  • AngularJS Abstractions: Controllers

    In MVC web programming server side controllers are responsible for reacting to an external stimulus (an HTTP request), and then building a model and possibly rendering a view in response to the stimulus. In a client app with AngularJS, the controller has an easier job.

    AngularJS is officially a Model-View-Whatever framework, meaning there is quite a bit of flexibility in the architecture of an application. But, if you follow the typical conventions, a controller is simply a function the framework will call at the appropriate time. It’s the controller’s responsibility to put together a model by any means possible, and then the controller function is complete. 

    One notable difference between a controller in server side world of Rails or ASP.NET MVC  and a controller with AngularJS is the view selection. Controllers and views are generally bound together on the client using directives (ng-controller) or in routing rules (a topic for a future post).

    As an example, the following html is setting up the AboutController to manage the primary div element in the document. The primary div also contains some data binding expressions.

    <body data-ng-app="patientApp">
                              
        <div data-ng-controller="AboutController">
            <h3>{{message}}</h3>
            <div>Number of rabbits in the yard: {{rabbitCount}}</div>
    
            <button ng-click="increase()">More rabbits</button>
            <button ng-click="decrease()">Less rabbits</button>
        </div>
    
        <script src="libs/angular.js"></script>
        <script src="scripts/myScript.js"></script>
    </body>
    

    When AngularJS takes control of the DOM it will see the ng-controller directive and go off searching for an AboutController. Here is one way to write the controller:

    (function () {
        
        var AboutController = function($scope) {
    
            $scope.message = "Hello from the AboutController!";
            
            $scope.rabbitCount = 2;
            
            $scope.increase = function() {
                $scope.rabbitCount *= $scope.rabbitCount;
            };
            
            $scope.decrease = function() {
                $scope.rabbitCount -= 1;
            };
        };
        
        // Describe dependencies for the injector
        // in a minifier friendly way.
        AboutController.$inject = ["$scope"];
    
        // Register the controller as part of a module.
        // The patientApp module will need to take a 
        // dependency on patientApp.Controllers.
        angular.module("patientApp.Controllers")
               .controller("AboutController", AboutController);
        
    }());
    

    Once AngularJS finds the controller, the framework invokes the function and injects any dependencies the controller requires. In this case the controller is simple and only requires a $scope dependency. We’ll talk about $scope in a future post, for now you can think of $scope as the model object you need to enhance for the application to work. The HTML contains data binding expressions like {{message}} and ng-click directives that will send the framework looking for functions to invoke named increase and decrease. These are all attributes the controller needs to provide on the $scope object.

    In many respects the $scope object feels like a view model in an MVVM environment like Silverlight. The data binding expressions push and pull data into properties of the view model. The command type bindings, like ng-click=increase(), invoke methods on the view model. And the view model (a.k.a $scope object) behaves in true view model like fashion in the sense that it knows nothing about the view or the DOM. The view model only needs to change values internally and data binding takes care of the rest. Clean and testable.

    13 May 2013, 12:12 PM by OdeToCode by K. Scott Allen
  • More Posts Next page »
Copyright 2010, Sachin Joshi. All rights reserved.
The content on this site represents my own personal opinions and thoughts at the time of posting, and does not reflect those of my employer's in any way.
Powered by Community Server, by Telligent Systems