Monday, July 25, 2016

Subjects


Subject 1: What is a Programming Framework and why do developers use .NET Framework, Java framework(s), etc.?

Subject 2: What is O Notation and why does it have a "critical" role in software development?

Subject 3: What should developers avoid in writing code?

Subject 4: Solid Skills in OOD & OOP. [Part 1]


Precise Definitions for OOD and OOP: OOD is the modeling methodology of OOP; where, OOP is a programming model, in which identifying objects and recognizing its data pieces known as properties are the primary steps to generalize each object as a class. Once a class is plotted, each distinct logic sequence is considered for it as a method (like an action in a non-OOP world). Since a class, by its nature, does exist in one or more hierarchical systems, its positions and relationships are detected to provide the possibility of employing concepts of inheritance, abstraction, polymorphism (including overloading & overriding), etc. to optimize the code in terms of reusability, data hiding (encapsulation) and avoiding duplicate code snippets. 

SDLC (Quick Reference)
 
Step 1 :: Plot (Defining/Planning + Mockup Screens)
Step 2 :: Requirement Analysis [+ modeling]
Step 3 :: System Analysis [+ modeling]
Step 4 :: System Design [+ modeling]
Step 5 :: UI Design
Step 6 :: Development
Step 7 :: Test
Step 8 :: Deployment
Step 9 :: Maintenance ==> Evolution :: Go To Step 1 or 2.


Appendix 1: Naming Conventions

Pascal Casing: The first character of all words are Upper Case and other characters are lower case. 
Example: BulkStreamReader

Camel Casing: The first character of all words, except the first word are Upper Case and other characters are lower case.
Example: bulkStreamReader

Hungarian Notation: (not recommended) The name of a variable or function indicates its type or intended use.
Examples:
lAccountNum : variable is a long integer ("l");
arru8NumberList : variable is an array of unsigned 8-bit integers ("arru8");
m_sFirstName : a string member variable for "first name".


Design Patterns: Abstract Factory:


Abstract Factory - Analogy to Digest the Pattern:

 

    /// <summary>

    /// Abstract Product A.

    /// </summary>

    public abstract class RallyRacingCar

    {

        public abstract void Pass(RoadRacingCar roadRacingCar);

    }

 

    /// <summary>

    /// Abstract Product B.

    /// </summary>

    public abstract class RoadRacingCar

    {

        public abstract void Pass(RallyRacingCar rallyRacingCar);

    }

 

    /// <summary>

    /// Product A 1.

    /// </summary>

    public class Porsche997GT3 : RallyRacingCar

    {

        public override void Pass(RoadRacingCar roadRacingCar)

        {

            Console.WriteLine("\nPorsche 997 GT3 passed a road racing car of type: " + roadRacingCar.GetType().Name);

        }

    }

 

    /// <summary>

    /// Product A 2.

    /// </summary>

    public class LotusExige360 : RallyRacingCar

    {

        public override void Pass(RoadRacingCar roadRacingCar)

        {

            Console.WriteLine("\nLotus Exige 360 passed a road racing car of type: " + roadRacingCar.GetType().Name);

        }

    }

 

    /// <summary>

    /// Product B 1.

    /// </summary>

    public class BMW135i : RoadRacingCar

    {

        public override void Pass(RallyRacingCar rallyRacingCar)

        {

            Console.WriteLine("\nBMW 135i passed a rally racing car of type: " + rallyRacingCar.GetType().Name);

        }

    }

  

 

    /// <summary>

    /// Product B 2.

    /// </summary>

    public class HondaCivicSi : RoadRacingCar

    {

        public override void Pass(RallyRacingCar rallyRacingCar)

        {

            Console.WriteLine("\nHonda Civic Si passed a rally racing car of type: " + rallyRacingCar.GetType().Name);

        }

    }

 

 

    /// <summary>

    /// Abstract Factory.

    /// </summary>

    public abstract class CarFactory

    {

        public abstract RallyRacingCar CreateRallyRacingCar();

        public abstract RoadRacingCar CreateRoadRacingCar();

    }

 

 

    /// <summary>

    /// Concrete Factory 1.

    /// </summary>

    public class EuropeCarFactory : CarFactory

    {

        public override RallyRacingCar CreateRallyRacingCar()

        {

            return new Porsche997GT3();

        }

 

        public override RoadRacingCar CreateRoadRacingCar()

        {

            return new BMW135i();

        }

    }

 

    /// <summary>

    /// Concrete Factory 2.

    /// </summary>

    public class AmericaCarFactory : CarFactory

    {

        public override RallyRacingCar CreateRallyRacingCar()

        {

            return new LotusExige360();

        }

 

        public override RoadRacingCar CreateRoadRacingCar()

        {

            return new HondaCivicSi();

        }

    }

 

    /// <summary>

    /// Client.

    /// </summary>

    public class Consumer

    {

        private RallyRacingCar myRallyRacingCar;

        private RoadRacingCar myRoadRacingCar;

 

         // Constructor

         public Consumer(CarFactory factory)

         {

            myRallyRacingCar = factory.CreateRallyRacingCar();

            myRoadRacingCar = factory.CreateRoadRacingCar();

        }

 

 

         public void DriveRoadRacingCar()

         {

             myRoadRacingCar.Pass(myRallyRacingCar);

         }

 

         public void DriveRallyRacingCar()

         {

             myRallyRacingCar.Pass(myRoadRacingCar);

         }

    }

 

    class Program

    {

        static void Main(string[] args)

        {

            // Abstract Factory No. 1.

            CarFactory factory1;

            // Abstract Factory No. 2.

            CarFactory factory2;

 

            // Drive 2 cars made in Europe.

            factory1 = new EuropeCarFactory();

            Consumer consumer1 = new Consumer(factory1);

            consumer1.DriveRallyRacingCar();

            consumer1.DriveRoadRacingCar();

 

            // Drive 2 cars made in America.

            factory2 = new AmericaCarFactory();

            Consumer consumer2 = new Consumer(factory2);

            consumer2.DriveRallyRacingCar();

            consumer2.DriveRoadRacingCar();

 

            Console.ReadKey();

        }

    }

 

UML Notations for Classes and Tables - pdf


Design Patterns: Singleton

There are many common situations when singleton pattern is used:
 - Accesing resources in shared mode
 - Configuration Classes
 - Logger Classes
 - Serialization
 - Network Port Interface

Singleton Design Pattern

Singleton Design Pattern
Check list
1.Define a private static attribute in the "single instance" class.
2.Define a public static accessor function in the class.
3.Do "lazy initialization" (creation on first use) in the accessor function.
4.Define all constructors to be protected or private.
5.Clients may only use the accessor function to manipulate the Singleton.
 
  1. using System;

  2. namespace DesignPatternsSingleton
  3. {
  4.   /// <summary>
  5.   /// MainApp startup class for Design Patterns :: Singleton
  6.   /// </summary>
  7.   class MainApp
  8.   {
  9.   /// <summary>
  10.   /// The Singleton class.
  11.   /// </summary>
  12.   public class Singleton
  13.   {
  14.     private static Singleton _instance;

  15.     // Constructor is 'protected'
  16.     protected Singleton()
  17.     {
  18.     }

  19.     public static Singleton Instance()
  20.     {
  21.       // Uses lazy initialization.
  22.       // Note: this is not thread safe.
  23.       if (_instance == null)
  24.       {
  25.         _instance = new Singleton();
  26.       }

  27.       return _instance;
  28.     }
  29.   }
  30. }

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Threading;

  4. namespace DesignPatternsSingleton
  5. {
  6.   /// <summary>
  7.   /// MainApp startup class for Real-World
  8.   /// Singleton Design Pattern.
  9.   /// </summary>
  10.   class MainApp
  11.   {
  12.     /// <summary>
  13.     /// Entry point into console application.
  14.     /// </summary>
  15.     static void Main()
  16.     {
  17.       LoadBalancer b1 = LoadBalancer.GetLoadBalancer();
  18.       LoadBalancer b2 = LoadBalancer.GetLoadBalancer();
  19.       LoadBalancer b3 = LoadBalancer.GetLoadBalancer();
  20.       LoadBalancer b4 = LoadBalancer.GetLoadBalancer();

  21.       // Same instance?
  22.       if (b1 == b2 && b2 == b3 && b3 == b4)
  23.       {
  24.         Console.WriteLine("Same instance\n");
  25.       }

  26.       // Load balance 15 server requests
  27.       LoadBalancer balancer = LoadBalancer.GetLoadBalancer();
  28.       for (int i = 0; i < 15; i++)
  29.       {
  30.         string server = balancer.Server;
  31.         Console.WriteLine("Dispatch Request to: " + server);
  32.       }

  33.       // Wait for user
  34.       Console.ReadKey();
  35.     }
  36.   }

  37.   /// <summary>
  38.   /// The 'Singleton' class
  39.   /// </summary>
  40.   class LoadBalancer
  41.   {
  42.     private static LoadBalancer _instance;
  43.     private List<string> _servers = new List<string>();
  44.     private Random _random = new Random();

  45.     // Lock synchronization object
  46.     private static object syncLock = new object();

  47.     // Constructor (protected)
  48.     protected LoadBalancer()
  49.     {
  50.       // List of available servers
  51.       _servers.Add("ServerI");
  52.       _servers.Add("ServerII");
  53.       _servers.Add("ServerIII");
  54.       _servers.Add("ServerIV");
  55.       _servers.Add("ServerV");
  56.     }

  57.     public static LoadBalancer GetLoadBalancer()
  58.     {
  59.       // Support multithreaded applications through
  60.       // 'Double checked locking' pattern which (once
  61.       // the instance exists) avoids locking each
  62.       // time the method is invoked
  63.       if (_instance == null)
  64.       {
  65.         lock (syncLock)
  66.         {
  67.           if (_instance == null)
  68.           {
  69.             _instance = new LoadBalancer();
  70.           }
  71.         }
  72.       }

  73.       return _instance;
  74.     }

  75.     // Simple, but effective random load balancer
  76.     public string Server
  77.     {
  78.       get
  79.       {
  80.         int r = _random.Next(_servers.Count);
  81.         return _servers[r].ToString();
  82.       }
  83.     }
  84.   }
  85. }


Sunday, July 24, 2016

Data Lake

Data Lake 

A data lake is a method of storing data within a system that facilitates the colocation of data in variant schemas and structural forms, usually object blobs or files. Hadoop, Azure Storage and the Amazon S3 platform can be used to build data lake repositories.


What is .NET Core 1.0

What is .NET Core 1.0

.NET Core 1.0 is announced by Microsoft on June 27, 2016. .NET Core is a general purpose development platform developed and maintained by Microsoft and .NET community on GitHub. .NET Core 1.0 is supported by Windows, Mac OS and Linux. .NET Core 1.0 can be used on devices, in cloud, in embedded systems and in IoT.

As introduced by Microsoft, .NET Core 1.0 is composed of the following parts: 

• A .NET runtime, which provides a type system, assembly loading, a garbage collector, native interop and other basic services.
• A set of framework libraries, which provide primitive data types, app composition types and fundamental utilities.
• A set of SDK tools and language compilers that enable the base developer experience, available in the .NET Core SDK.
• The 'dotnet' app host, which is used to launch .NET Core apps. It selects the runtime and hosts the runtime, provides an assembly loading policy and launches the app. The same host is also used to launch SDK tools in much the same way.

.NET History
.NET History
 .NET Core 1.0 is supported by the following versions of Windows (both 32-bit and 64-bit):
• Windows 7 SP1
• Windows 8.1
• Windows 10
• Windows Server 2008 R2 SP1 (Full Server or Server Core)
• Windows Server 2012 SP1 (Full Server or Server Core)
• Windows Server 2012 R2 SP1 (Full Server or Server Core)
• Windows Server 2016 (Full Server, Server Core or Nano Server)
 

.NET Core 1.0 is supported by Linux. Install Linux on your distribution/version:
• Red Hat Enterprise Linux 7 Server
• Ubuntu 14.04, 16.04 & Linux Mint 17
• Debian 8.2
• Fedora 23
• CentOS 7.1 & Oracle Linux 7.1
• openSUSE 13.2


.NET Core 1.0 is supported by OS X / macOS (Mac OS)
• Mac OS X 10
• Mac OS X 11


Note:
.NET Core 1.0 is announced with ASP.NET Core 1.0 and Entity Framework Core 1.0.

Saturday, July 23, 2016

ELINT Analytic Tool Developer

ELINT Analytic Tool Developer
NORTHROP GRUMMAN, Mclean, VA

Northrop Grumman Mission Systems sector is seeking ELINT Analytic Tool Developers. The Software Engineer will be integral to the leadership and development of solutions for signal processing and communications tools/systems in varying phases of the software development life cycle. Candidate will participate in the system design, developing code, designing and updating GUIs, debugging, testing, documentation, and integrating mods/enhancements into a baseline. Candidate may also support multidisciplinary research efforts. Interaction with users, customers, and other developers is expected. Work will be performed at a restricted customer site in the Northern Virginia area.

Qualifications

Basic Qualifications:


* A Bachelor's degree in Electrical Engineering, Physics, Mathematics, Computer Science or related field


* Ability to obtain and maintain a TS/SCI security clearance with polygraph


* 10 years' experience with analytic tool development for digital signal processing


* 10 years' experience in scripting and object-oriented programming


* 5 years of experience using M2Extra


* Willingness to mentor and provide technical review of written products


* Proficiency in Microsoft Office.


* Experience guiding the successful completion of a major program or serving in a project leadership role


* Ability to act as a prime technical contact, interacting with senior external personnel


* Ability to develop technical solutions to complex problems with ingenuity and creativity


* Excellent communication skills, both oral and written required.


* Must be a US Citizen

Preferred Qualifications:


* Masters or PhD in Electrical Engineering, Physics, Mathematics, Computer Science or related field


* Current TS/SCI with polygraph


* 5 years' experience with analytic tool development for ELINT or PROFORMA analysis


* 10 years' experience writing custom XMIDAS primitives


* 10 years' experience creating XMIDAS macros


* 2 years' experience writing custom Aspen macros for ELINT or PROFROMA analysis.


* 5 years' experience with testing and evaluating hardware systems for ELINT or PROFORMA analysis.


* Experience with Bayesian algorithms Northrop Grumman is committed to hiring and retaining a diverse workforce. We are proud to be an Equal Opportunity/Affirmative Action-Employer, making decisions without regard to race, color, religion, creed, sex, sexual orientation, gender identity, marital status, national origin, age, veteran status, disability, or any other protected class. For our complete EEO/AA statement, please visit www.northropgrumman.com/EEO. U.S. Citizenship is required for most positions.