Friday, February 6, 2015

Play by Play: Scott Allen and Dan Wahlin


- Web Essentials is good plugin available for Visual Studio.
- Boot Strap components: http://getbootstrap.com/components
- Batarang: AngularJS plugin for Chrome

Thursday, February 5, 2015

Play by Play: Triage with Ayende Rahien

- As shown below a BaseController which is used as Base class by all Controllers. BaseController overrides two methods OnActionExecuting and OnActionExecuted, which run before and after each Action. OnActionExecuting is used for initializing session (For EF it is ObjectContext) and OnActionExecuted is used for disposing session. 



- Multi Threaded application. It is very difficult to debug any bug when logging is not done.So logging is very important when you are developing Multi Threaded applications.

Introduction to ASP.NET MVC 3

Chapter 1. Introduction to ASP.NET MVC 3

- Visual Studio: Web Developer FREE Edition
- ASP.Net MVC 3 is present in "Visual Studio 2010 SP1"
- ASPX View Engine: It is a legacy view engine and is present for Backward compatibility.
MVC Design Pattern
       * Separates responsibilities of components in UI Layer.
       * Doesn't dictate which DALayer is to be used.
       * Doesn't dictate how domain layer should look like.
       * Doesn't care if your application has Layers or not.
       * It is design pattern for building UI and nothing more.
       * View is just a presentation template.
       * Controllers are responsible for responding to UI events.

Goals of ASP.Net MVC
       * Embracing WEB:
       * Runs on top of ASP.Net. Thus Modules, handlers, caching and diagnostics are reused from ASP.Net
       * Extensible
       * Testable
 
- ViewBag is dynamic object
- @ sign tells Razor engine to consider subsequent text as code.
- It is not necessary to have Models in the Models folder. They can be anywhere. Including all the projects referenced by MVC Project.


- Strongly Typed Model:  By default View treats @Model as dynamic. One can make @Model strongly typed by providing a directive which specifies type of model.




Chapter 2. Controllers

- Routing: Routing returns first matched entry.
- All public methods in Controller class are Actions. So they could be reached by client. So be careful in marking methods in Controllers as public.
- Action Results
ActionName: This attribute could be applied to a Controller method to alias it's Action Name.
AcceptVerbs: This attribute specifies Http verbs which could be used to Reach that Action.
- Action Filters: apply pre and post processing logic to Controller action and its logic.
                 : are components which contain cross cutting logic








Chapter 3. Razor Views

Difference between Response.Write and @. @ Also html encodes text.
- If Razor engine is treating piece of text as code, whereas you want it to be treated as html then there are two ways. 1. Surround the text with tags OR 2. Prefix the text with @:
- Layout views are Master pages for Razor views
- @* : Acts as comments in the Razor
- Views\_ViewStart.cshtml: This file mentions which Layout file is to be used for current application
- _ViewStart.cshtml is hierarchical.
- Individual views can alter inherited Layout.
- Code Sample: 











Partial Views: This is similar to User controls in ASP.Net Web Forms
- ChildActionOnly: This attribute for a Controller Action ensures that attributed Controller Action isn't viewable by user directly by entering URL. 




Chapter 5. Working with Data (Part 2)


- Data Validation Attributes: System.ComponentModel.DataAnnotations defines Attributes for Data Validations. Following are commonly used validation attributes.          * Required
      * StringLength
      * Regex
      * Range

Custom Validation: There are two ways
          1.  Custom Attributes deriving from ValidationAttribute.


          2.  Model class can implement IValidatableObject.


Chapter 6. Ajax and Javascript with ASP.Net MVC 3



- Putting Script tags at the bottom of the Html Page helps performance.
Razor Helpers: Reusable logic could be put in Razor Helpers.
                            : A RazorHelper in a view is available in that view only. To make this RazorHelper available across multiple Views, move this RazorHelper to Extention Method of HtmlHelper OR by making a reusable RazorView by adding that RazorView to a class in AppCode
Ajax.ActionLink: Builds an anchor tag. When user clicks on this anchor tag, a Ajax request is sent to server. This request could be linked to Actions in the Controllers.
Unobtrusive Javascript: Only rule is "Html files do not contain any javascript code. All javascript code is contained in external file marked as script file.
- If you refer other javascript files from current javascript file as follows, Visual Studio will include functions defined in other javascript file in Intellisense.
            ///
- Custom Editor Template is a partial View.  When a Template for a type T is required, MVC searches for a template named T. So when Editor for DateTime is required MVC will search for template named DateTime.




Chapter 7. Security 


- MVC 3 provides two Types of Authentication out of box.
              1. Forms Authentication :
                             * For Public websites
                             * Customizable
                             * Typically relies on Cookies
                             * SSL is required to make web site secure.                          
               2. Windows Authentication (Integrated Authentication) : 
                          Good for Intranet Apps. Gives Single Sign On experience to users. 
                          Users need to be on same Windows Domain.
- Authorize attribute (without parameter) on Controller Action tells MVC that only authenticated users should be allowed to use this Action.  A role name could be sent to Authorize attribute and then that users in that role would only be allowed to use that Action.
ASP.Net Membership : Provides functionality for User Account Management. Default Provider is SQL Server, which saves User data in SQL Server. This Provider allows to create a user, Delete a user, Change Password etc.
aspnet_regsql: This utility adds/removes Membership Providers tables to a database.
- When using Windows Authentication, Roles map to groups created on server or Active Directory.
- Forms Authentication on Plain HTTP: Username password entered by user will be sent to Server as plain text. So if somebody is sniffing the network or capturing network traffic, he will be able to capture username and password. Solution to this is to use HTTPS, which encrypts username and password.
- This blog explains how to work with SSL at development time.
http://www.hanselman.com/blog/WorkingWithSSLAtDevelopmentTimeIsEasierWithIISExpress.aspx
XSS (Cross Site Scripting): Malicious user will use website to load malicious script or ActiveX Control or Html into user's browser. They will try to do this by getting to your site and trying to get your site to accept some input from a form input or a query string and have your site echo back that input into a page without proper encoding. 


- Microsoft provides AntiXSS library. It has Sanitizer.GetSafeHtmlFragment (body) method in it. This method has white list of allowed html tags. If input body contains any tag which is not part of this white list will be filtered by this method.




Chapter 8. ASP.Net Infrastructure for MVC


- Output Caching : Allows to store (cache) output of Controller Action in memory.
OutputCache attribute of Action : Use this attribute to Output cache result of Action.
- Best Practice : Do not enable Output Caching unless performance is monitored.
Localization : Two setting impact how application behaves under different cultures
        * Thread.CurrentCulture property impacts formatting (e.g. DateTime.Now.ToString())
        * Thread.CurrentUICulture impacts resource loading
 ASP.Net can set cultures according to HTTP headers
        * Http Header: Accept-Language
        * Use globalization section in web.config
- Logging Options
        * ASP.Net Health Monitoring
        * Log4Net
        * Microsoft Application Block: Logging
        * elmah (code.google.com/p/elmah)
- Machine wide web.config file contains section. Which tells how various health monitoring events should be treated. It contains following sections.
        * Where can a event be written.
        * Categories of Events


        * Specifies what events go to what event providers. Maps EventMapping to Providers.




Chapter 9. TDD and Unit Testing

TDD Cycle
        * Red: Write a Failing Test
        * Green: Write Code to Pass test
        * Refactor : Refactor code to improve design


- StrucutreMap-Mvc is IoC (Inversion of Control) Container for MVC.



Chapter 10. Configuration and Deployment

- The Views folders has local web.config
HandleErrorAttribute this filter ensures that Custom Error page is shown. This filter respects setting in web.config.
aspnet_regiis : utility registers ASP.Net with IIS. Exact command is "aspnet_regiis.exe -i". Working folder for this command needs to be .Net Folder.

Wednesday, December 3, 2014

AngularJS Fundamentals In 60-ish Minutes

AngularJS Fundamentals In 60-ish Minutes



- $Scope : Glue between Controller and View.
         : $Scope is ViewModel

- ViewModel : Data for the View or Model for View

- Controllers (in MVC) should not know about View as this makes it depend on View. This allows Controllers to be testable and Multiple Views are possible this way.

- Modules : are containers

- Routes : Maps View and Controller

Tuesday, December 2, 2014

Dependency Injection ( and Dependency Injection Container)

Video : http://www.youtube.com/watch?v=IKD2-MAkXyQ

Dependency : Dependency is has a relationship. Class A has class B. Class Cycle has Tyre.

Injecting Dependency : Dependency is pushed from outside to the class. So in above example Class Cycle instead of instantiating instance of class Tyre, gets an instance of Tyre from outside.

Principal Behind Dependency Injection : We should code to abstractions (interfaces).

Dependency Injection Container Pattern : Used to create dependencies for class\es.  Knows which class has which dependencies and how to instantiate those dependencies.


Tuesday, October 7, 2014

Utilizing SysteInternals (Channel 9 Course : http://channel9.msdn.com/Series/sysinternals/01)

Mod 1 : Introduction (http://channel9.msdn.com/Series/sysinternals/01)

  • Imp SysInternals tools 
  1. ProcessExplorer (Most Popular)
  2. ProcessMonitor  (Most Popular)
  3. PSTools
  4. AutoRuns

Could be used
  1. as Advance (IT Pro) version of Task Manager.
  2. to see all Threads associated with a Process
  3. to see Stack Trace, Number of Context Switches of a Thread
  4. to check which Process is having handle for a File.
  5. to check if a Process has open TCP-IP connections. Shows to which IP addresses current Process is connected to.
  6. Process Explorer (like many other SysInternals tools) can connect to a remote machine and show Process information for that machine.
  7. Process Explorer could be configured so that whenever user sees Process Explorer instead of System Task Manager.
  8. When an error message is shown and its source is not known. Bullet Eye functionality could be used  could be used to see which Process is associated with that message.
  9. SvcHost.exe is service host process. Process Explorer shows additional tab called Services in Properties window for Process Explorer. Process Explorer could be used to see which services are hosted by given instance of SvcHost.exe
  10. Good practice to Add columns Version, Integrity and Virtualized to Process Explorer.
  11. Microsoft doesn't Test Windows with disabling IPv6. So do not disable it without thorough testing.
  1. This tool is combination of FileMon (File Monitor) and RegMon(Registry Monitor).
  2. When to use Process Monitor : DLL corruptions, Configuration issues, Performance Diagnostics,
  3. By default Process Monitor displays Activities in Registry,File System, Processes (Process, Thread, DLL and Device Driver load operations) and Profiling (User and Kernal CPU time consumed, Number of context switches).  Networking (TCP and UDP network activity including source and destination address).
  4. 'Boot Monitoring' : Enabling this start Process Monitor on boot. Process Monitor will collect Trace since boot. 
  5. Process Activity Summary : 
"PSExec.exe \\RemotePC cmd" This command will start command prompt on remote machine named RemotePC. Subsequent commands entered in command propmt will actually be run against RemotePC.
  • PSInfo : Gives information of the system. Could be run remotely.
  • PSFile :
  • PSKill : Enables killing process on remote machines 
  • PSService : Displays Configuration,Dependencies and Status of Windows services.
  1. Very useful application to run automatically running application. Shows Applications which run on Logon, Services which run on Startup, Scheduled Tasks and many more.

Wednesday, August 6, 2014

Channel9 Podcast : Entity Framework Tips and Tricks


  • Video URL
  • Entity Framework PowerTools : Shows conceptual model used by DBContext (Which is very relevant for Code-First Model).
  • DBContext API simplified wrapper around ObjectContext API. ObjectContext being detailed one.
  • Explore (in QucikWatch window) ObjectContext.ObjectStateManager to see what all changes have happened so far.

     Important methods in EF (Not covered in above Video)
  • AsNoTracking() : Fetches entities from database in Non- Tracking mode. So changes to the entities won't be tracked.
  • ToTraceString() : This method could be used to find out corresponding SQL statement which would be executed by given Entity Framework query.
  • Translate() : Converts result in DataReader (or DataTable) into Entities. Entities are not added to context by this method call. If you some code in pure ADO.NET and you don't have time or resources to redo it in EF (or it's way easier old way) you can rewire the result into existing objects.