<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Vinoth</title>
    <description>The latest articles on DEV Community by Vinoth (@realvino).</description>
    <link>https://dev.to/realvino</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F120514%2F05e832bc-01b6-4e10-a7ad-5014fefe0da7.jpg</url>
      <title>DEV Community: Vinoth</title>
      <link>https://dev.to/realvino</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/realvino"/>
    <language>en</language>
    <item>
      <title>Principles of Lean Development</title>
      <dc:creator>Vinoth</dc:creator>
      <pubDate>Tue, 28 Apr 2020 14:24:45 +0000</pubDate>
      <link>https://dev.to/realvino/principles-of-lean-development-2d4</link>
      <guid>https://dev.to/realvino/principles-of-lean-development-2d4</guid>
      <description>&lt;p class="MsoNormal"&gt;&lt;span&gt;The quest for perfection in the business world is a
never-ending journey. While it might be impossible to achieve perfection in
your workflow, it is possible to get closer to it every day with a
well-structured system in place. This is what lean development has to offer
companies that would love to perfect their craft.&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span&gt;An efficient business process not only means
reduced losses but also increased customer satisfaction rates. To best reduce
flaws, you ought to concentrate on eliminating waste while refining the
intricate details that make your business tick. Having a firm grasp of how lean
development works can easily make this possible.&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span&gt;Here’s how to use the core principles of lean
development to your advantage.&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span&gt;Understand Value&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span&gt;To what level does your customer value your product
or services? Understanding your product’s value from the customer’s perspective
is the initial step to determining how much they are willing to pay for your
best products. You can then focus on eliminating the waste produced during the
manufacturing process to meet the expected price.&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span&gt;Some of the few ways to reduce waste, include
avoiding to produce products when they are least needed, eliminating
unnecessary transport, and steering away from the cost of holding inventory
whereas it adds no value to the customer. Additionally, factors such as over
processing or using superior tools to create a product while a simpler way
would suffice should also be avoided.&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span&gt;Map the Value Stream&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span&gt;The
value stream is a set of activities that need to take place within the workflow
to produce the product in the expected value. To make sense of the value
stream, visualizing it using a Kanban task board can help identify
any loophole. Once you have an elaborate value stream map, pay attention to the
intricate details of the workflow processes.&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span&gt;Not only will the map help in identifying and
eliminating waste, but it will also help in determining the effectiveness of an
alternative measure that the business can take. Ensure that your value stream
starts from the onset of production and ends once the required product value is
produced for effective analysis.&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span&gt;Ensure That the Value Stream Flows&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span&gt;The
aim of the value stream is to ensure that every aspect of the manufacturing
process happens with little friction. While you might have employed a strong
value stream, it is possible that there are a few setbacks within the workflow.
According to Small Business insights, other than looking at the waste producing
parts of your workflow processes, pay attention to anything that can act
as a bottleneck.&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span&gt;The sooner you can eliminate production
bottlenecks, the better the quality of your products will be. Once you identify
a task that has a negative influence on the flow of the value stream, either
directly or indirectly find a way to eliminate it from the process. What you
want to achieve is a streamlined workflow delivery process with minimal
implementation issues.&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span&gt;Pursue Continuous Improvement&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span&gt;As
mentioned earlier, achieving a perfect business environment that is waste-free
is almost impossible. By eliminating one wasteful part of the business, you
will be exposing it to yet another one. Indulging in kaizen, the Japanese
business practice of continuous improvement, will bring your business processes
as close to perfection as they can get.&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span&gt;Once your staff gets a hang on recent changes you
made, take a look into the existing business processes and refine them further.
With time and the accumulation of these minor changes, your business will enjoy
increased efficiency and reduced losses.&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span&gt;Conclusion&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span&gt;Delivering quality to your customers is a sure way
to stay ahead of competitors. Since every other business understands this, then
continuous improvement will further increase the competitive edge that you
bring to the table. Follow the above steps to increase your customer
satisfaction rates.&lt;/span&gt;&lt;/p&gt;


&lt;p&gt; &lt;/p&gt;

</description>
      <category>realvino</category>
      <category>leandevelopment</category>
    </item>
    <item>
      <title>ASP.NET MVC 5 Internationalization</title>
      <dc:creator>Vinoth</dc:creator>
      <pubDate>Tue, 27 Aug 2019 10:05:41 +0000</pubDate>
      <link>https://dev.to/realvino/asp-net-mvc-5-internationalization-29oh</link>
      <guid>https://dev.to/realvino/asp-net-mvc-5-internationalization-29oh</guid>
      <description>&lt;p&gt;Introduction&lt;br&gt;
If your website targets users from different parts of the world, these users might like to see your website content in their own language. Creating a multilingual website is not an easy task, but it will certainly allow your site to reach more audience. Fortunately, the .NET Framework already has components that support different languages and cultures.&lt;/p&gt;

&lt;p&gt;We will build an ASP.NET MVC 5 web application that contains the following features:&lt;/p&gt;

&lt;p&gt;It can display contents in different languages.&lt;br&gt;
It auto detects the language from the user’s browser.&lt;br&gt;
It allows the user to override the language of their browser.&lt;br&gt;
Globalization and Localization in ASP.NET&lt;br&gt;
Internationalization involves Globalization and Localization. Globalization is the process of designing applications that support different cultures. Localization is the process of customizing an application for a given culture.&lt;/p&gt;

&lt;p&gt;The format for the culture name is -, where  is the language code and  is the subculture code. Examples include es-CL for Spanish (Chile) and en-US for English (United States).&lt;/p&gt;

&lt;p&gt;Anyway, Internationalization is often abbreviated to “I18N”. The abbreviation takes the first and last letters and the number of letters between them, so 18 stands for the number of letters between the first “I” and the last “N”. The same applies to Globalization (G11N), and Localization (L10N).&lt;/p&gt;

&lt;p&gt;ASP.NET keeps track of two culture values, the Culture and UICulture. The culture value determines the results of culture-dependent functions, such as the date, number, and currency formatting. The UICulture determines which resources are to be loaded for the page by the ResourceManager. The ResourceManager simply looks up culture-specific resources that is determined by CurrentUICulture. Every thread in .NET has CurrentCulture and CurrentUICulture objects. So ASP.NET inspects these values when rendering culture-dependent functions. For example, if current thread’s culture (CurrentCulture) is set to “en-US” (English, United States), DateTime.Now.ToLongDateString() shows “Saturday, January 08, 2011”, but if CurrentCulture is set to “es-CL” (Spanish, Chile) the result will be “sábado, 08 de enero de 2011”.&lt;/p&gt;

&lt;p&gt;Now, let’s review the terms used so far:&lt;/p&gt;

&lt;p&gt;Globalization (G11N): The process of making an application support different languages and regions.&lt;br&gt;
Localization (L10N): The process of customizing an application for a given language and region.&lt;br&gt;
Internationalization (I18N): Describes both globalization and localization.&lt;br&gt;
Culture: It is a language and, optionally, a region.&lt;br&gt;
Locale: A locale is the same as a culture.&lt;br&gt;
Neutral culture: A culture that has a specified language, but not a region. (e.g. “en”, “es”)&lt;br&gt;
Specific culture: A culture that has a specified language and region. (e.g. “en-US”, “en-GB”, “es-CL”)&lt;br&gt;
Why do we need a region? Isn’t a language alone enough?&lt;br&gt;
You might not need a region at all. It is true that English in the United States is not the same as English in the United Kingdom but if your application just shows English text readable to people from these English-speaking countries, you will not need a region. The problem arises when you need to deal with numbers, dates, and currencies. For example, compare the following output for two different Spanish-speaking regions (Chile, Mexico):&lt;/p&gt;

&lt;p&gt;int value = 5600;&lt;/p&gt;

&lt;p&gt;Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("es-CL");&lt;br&gt;
Console.WriteLine(DateTime.Now.ToShortDateString());&lt;br&gt;
Console.WriteLine(value.ToString("c"));&lt;/p&gt;

&lt;p&gt;Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("es-MX");&lt;br&gt;
Console.WriteLine(DateTime.Now.ToShortDateString());&lt;br&gt;
Console.WriteLine(value.ToString("c"));&lt;/p&gt;

&lt;p&gt;// Output&lt;br&gt;
26-07-2011 // Date in es-CL, Spanish (Chile)&lt;br&gt;
$5.600,00 // Currency in es-CL, Spanish (Chile)&lt;/p&gt;

&lt;p&gt;26/07/2011 // Date in es-MX, Spanish (Mexico)&lt;br&gt;
$5,600.00 // Currency in es-MX, Spanish (Mexico)&lt;br&gt;
You can notice the difference in date and currency format. The decimal separator in each region is different and can confuse people in the other region. If a Mexican user types one thousand in their culture “1,000”, it will be interpreted as 1 (one) in a Chilean culture website. We mainly need regions for this type of reasons and not much for the language itself.&lt;/p&gt;

&lt;p&gt;How to Support Different Languages in ASP.NET MVC&lt;br&gt;
There are two ways to incorporate different languages and cultures in ASP.NET MVC:&lt;/p&gt;

&lt;p&gt;By using resource strings in all our site views.&lt;br&gt;
By using different set of views for every language and locale.&lt;br&gt;
By mixing between 1 and 2&lt;/p&gt;

&lt;p&gt;Which one is the best?&lt;br&gt;
It is a matter of convenience. Some people prefer to use a single view for all languages because it is more maintainable. While others think replacing views content with code like “@Resources.Something” might clutter the views and will become unreadable. Some project requirements force developers to implement different views per language. But sometimes you have no choice where layout has to be different like right-to-left languages. Even if you set dir=”rtl”, this may not be enough in real applications unless the project’s UI layout is really simple. Perhaps, a mix of the two is the best. Anyway, for this example, it makes sense to use resources since we won’t have any issue with the layout for the Spanish, English, and Arabic languages that we will use.&lt;/p&gt;

&lt;p&gt;How can ASP.NET guess the user’s language?&lt;br&gt;
On each HTTP request, there is a header field called Accept-Language which determines which languages the user’s browser supports:&lt;/p&gt;

&lt;p&gt;Accept-Language: en-us,en;q=0.5&lt;br&gt;
This means that my browser prefers English (United States), but it can accept other types of English. The “q” parameter indicates an estimate of the user’s preference for that language. You can control the list of languages using your web browser.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Why Do We Use Abstract Class?</title>
      <dc:creator>Vinoth</dc:creator>
      <pubDate>Mon, 05 Aug 2019 10:50:40 +0000</pubDate>
      <link>https://dev.to/realvino/why-do-we-use-abstract-class-4o1a</link>
      <guid>https://dev.to/realvino/why-do-we-use-abstract-class-4o1a</guid>
      <description>&lt;p&gt;Abstract class and Interface Difference&lt;/p&gt;

&lt;p&gt;Abstract Class  Interface&lt;br&gt;
We cannot create an instance of the this class. Interface can be only variable type and not instance.&lt;br&gt;
It can have constructor.    It cannot have constructor.&lt;br&gt;
It can be derived to some other class.  It is created to be derived by other class.&lt;br&gt;
It can have implementation(non abstract) of one or more methods.    It cannot have function definition.&lt;br&gt;
Concrete class can implement only one abstract class    Concrete class can implement many interfaces&lt;br&gt;
It can or cannot contain the abstract methods   It should only have the method signatures.&lt;br&gt;
It can have private, protected, internal data members.  All the members are public by default.&lt;br&gt;
It cannot be derived to a structure.    It can be derived by a structure.&lt;br&gt;
Practical Implementation Of Abstract Class&lt;/p&gt;

&lt;p&gt;Lets talk about the practical implementation of the abstract class. Most people are very much aware about the theory of the these classes but as far as implementation is concerned, they are not sure about it.&lt;/p&gt;

&lt;p&gt;Abstract class implementation&lt;br&gt;
public abstract class DataSource&lt;br&gt;&lt;br&gt;
{&lt;br&gt;&lt;br&gt;
    protected string dataSourceName;&lt;br&gt;&lt;br&gt;
    private string environment;&lt;br&gt;&lt;br&gt;
    protected DataSource(string environment, string dsName) {&lt;br&gt;&lt;br&gt;
        this.environment = environment;&lt;br&gt;&lt;br&gt;
        this.dataSourceName = dsName;&lt;br&gt;&lt;br&gt;
        GetDataSourceCredentials();&lt;br&gt;&lt;br&gt;
    }&lt;br&gt;&lt;br&gt;
    private void GetDataSourceCredentials() {&lt;br&gt;&lt;br&gt;
        Console.WriteLine(string.Format("Get {0}'s connection setting for {1} environment from config file", dataSourceName, environment));&lt;br&gt;&lt;br&gt;
    }&lt;br&gt;&lt;br&gt;
    public abstract void OpenAndReturnConnection();&lt;br&gt;&lt;br&gt;
}&lt;br&gt;&lt;br&gt;
public class MsSqlDataSource: DataSource {&lt;br&gt;&lt;br&gt;
    public MsSqlDataSource(string environment): base(environment, "MsSQL") {}&lt;br&gt;&lt;br&gt;
    public override void OpenAndReturnConnection() {&lt;br&gt;&lt;br&gt;
        Console.WriteLine(string.Format("Create and return Connection for {0} dataSource", dataSourceName));&lt;br&gt;&lt;br&gt;
    }&lt;br&gt;&lt;br&gt;
}&lt;br&gt;&lt;br&gt;
public class OracleDataSource: DataSource {&lt;br&gt;&lt;br&gt;
    public OracleDataSource(string environment): base(environment, "Oracle") {}&lt;br&gt;&lt;br&gt;
    public override void OpenAndReturnConnection() {&lt;br&gt;&lt;br&gt;
        Console.WriteLine(string.Format("Create and return Connection for {0} dataSource", dataSourceName));&lt;br&gt;&lt;br&gt;
    }&lt;br&gt;&lt;br&gt;
}&lt;br&gt;&lt;br&gt;
We should be aware that an abstract class can have its implementation for the methods. In the code, given above, I have created an abstract base class, named DataSource. This class is derived to the concrete classes i.e. sSqlDataSource and OracleDataSource. &lt;br&gt;
The concrete class will have its way to open the connection. There should be a common way to get the connection string for config file.&lt;/p&gt;

&lt;p&gt;In our Application, there can be a chance that we have to use different data sources like Ms SQL server, Oracle server or maybe MS Excel file. In the code, mentioned above, I have a private method for getting the datasource connection string from the config file, based on the data source name and environment (e.g. DEV, QA or PROD).&lt;/p&gt;

&lt;p&gt;Now, if you execute the code, given below:&lt;/p&gt;

&lt;p&gt;DataSource sqlDS = new MsSqlDataSource("DEV");&lt;br&gt;&lt;br&gt;
sqlDS.OpenAndReturnConnection();&lt;br&gt;&lt;br&gt;
I will get the following output:&lt;/p&gt;

&lt;p&gt;output&lt;br&gt;
Here, I am getting the connection string for DEV environment. This functionality is common for all the classes derived from DataSource class. The creation of connection is specific to the derived class. Therefore, we have an abstract method in abstract base class.&lt;br&gt;
Though, it is a very basic and small example but it can help you to understand the use of an abstract class.&lt;/p&gt;

</description>
      <category>realvino</category>
      <category>programmers</category>
      <category>csharp</category>
    </item>
    <item>
      <title>Extension method</title>
      <dc:creator>Vinoth</dc:creator>
      <pubDate>Fri, 02 Aug 2019 07:58:31 +0000</pubDate>
      <link>https://dev.to/realvino/extension-method-3f23</link>
      <guid>https://dev.to/realvino/extension-method-3f23</guid>
      <description>&lt;p&gt;In C#, the extension method concept allows you to add new methods in the existing class or in the structure without modifying the source code of the original type and you do not require any kind of special permission from the original type and there is no need to re-compile the original type. It is introduced in C# 3.0.&lt;br&gt;
Let us discuss this concept with the help of an example. Suppose you have a class or a structure which contains three methods and you want to add two new methods in this class or structure, you did not have the source code of the class/structure, or do not have permissions from the class/structure, or the class is a sealed class, but you still want to add new methods in it, then you can use the concept extension method to add the new method in the existing class/structure. Now you create a new class which is static and contain the two methods which you want to add in the existing class, now bind this class with the existing class. After binding you will see the existing class can access the two new added methods. As shown in the below program.&lt;/p&gt;

&lt;p&gt;Example: First we create a class named as TestClass in Program1.cs file. It contains three methods that is M1(), M2(), and M3().&lt;/p&gt;

&lt;p&gt;// C# program to illustrate the concept&lt;br&gt;&lt;br&gt;
// of the extension methods &lt;/p&gt;

&lt;p&gt;using System;&lt;br&gt;&lt;br&gt;
namespace ExtensionMethod { &lt;br&gt;
// Here TestClass class contains three methods &lt;br&gt;
// Now we want to add two more new methods in it&lt;br&gt;&lt;br&gt;
// Without re-compiling this class &lt;br&gt;
class TestClass { &lt;/p&gt;

&lt;p&gt;// Method 1 &lt;br&gt;
  public void M1()&lt;br&gt;&lt;br&gt;
  { &lt;br&gt;
      Console.WriteLine("Method Name: M1"); &lt;br&gt;
  } &lt;br&gt;
  // Method 2 &lt;br&gt;
  public void M2() &lt;br&gt;
  { &lt;br&gt;
      Console.WriteLine("Method Name: M2"); &lt;br&gt;
  } &lt;br&gt;
  // Method 3 &lt;br&gt;
  public void M3() &lt;br&gt;
  { &lt;br&gt;
      Console.WriteLine("Method Name: M3"); &lt;br&gt;
  }    &lt;/p&gt;

&lt;p&gt;}&lt;br&gt;&lt;br&gt;
} &lt;/p&gt;

&lt;p&gt;Now we create a static class named as NewMethodClass in Program2.cs file. It contains two methods that are M4() and M5(). Now we want to add these methods in TestClass class, so we use the binding parameter to bind these methods with TestClass class. After that, we create another named as GFG in which TestClass class access all the five methods.&lt;/p&gt;

&lt;p&gt;// C# program to illustrate the concept &lt;br&gt;
// of the extension methods &lt;/p&gt;

&lt;p&gt;using System;&lt;br&gt;&lt;br&gt;
namespace ExtensionMethod { &lt;br&gt;
// This class contains M4 and M5 method &lt;br&gt;
// Which we want to add in TestClass class. &lt;br&gt;
// NewMethodClass is a static class &lt;br&gt;
static class NewMethodClass { &lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// Method 4 
public static void M4(this TestClass g) 
{ 
    Console.WriteLine("Method Name: M4"); 
} 

// Method 5 
public static void M5(this TestClass g, string str) 
{ 
    Console.WriteLine(str); 
} 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;}&lt;br&gt;&lt;br&gt;
// Now we create a new class in which &lt;br&gt;
// TestClass class access all the five methods &lt;/p&gt;

&lt;p&gt;public class GFG { &lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// Main Method 
public static void Main(string[] args) 
{ 
    TestClass g = new TestClass(); 
    g.M1(); 
    g.M2(); 
    g.M3(); 
    g.M4(); 
    g.M5("Method Name: M5"); 
} 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;} &lt;br&gt;
} &lt;br&gt;
Output:&lt;br&gt;
Method Name: M1&lt;br&gt;
Method Name: M2&lt;br&gt;
Method Name: M3&lt;br&gt;
Method Name: M4&lt;br&gt;
Method Name: M5&lt;br&gt;
Important Points:&lt;br&gt;
• Here, Binding parameters are those parameters which are used to bind the new method with the existing class or structure. It does not take any value when you are calling the extension method because they are used only for binding not for any other use. In the parameter list of the extension method binding parameter is always present at the first place if you write binding parameter to second, or third, or any other place rather than first place then the compiler will give an error. The binding parameter is created using this keyword followed by the name of the class in which you want to add a new method and the parameter name. For example:&lt;/p&gt;

&lt;p&gt;Here, this keyword is used for binding, TestClass is the class name in which you want to bind, and g is the parameter name.&lt;br&gt;
• Extension methods are always defined as a static method, but when they are bound with any class or structure they will convert into non-static methods.&lt;br&gt;
• When an extension method is defined with the same name and the signature of the existing method, then the compiler will print the existing method, not the extension method. Or in other words, the extension method does not support method over riding.&lt;br&gt;
• You can also add new methods in the sealed classes also using an extension method concept.&lt;br&gt;
• It cannot apply to fields, properties, or events.&lt;br&gt;
• It must be defined in top-level static class.&lt;br&gt;
• Multiple binding parameters are not allowed means an extension method only contains a single binding parameter. But you can define one or more normal parameter in the extension method.&lt;br&gt;
Advantages:&lt;br&gt;
• The main advantage of the extension method is to add new methods in the existing class without using inheritance.&lt;br&gt;
• You can add new methods in the existing class without modifying the source code of the existing class.&lt;br&gt;
• It can also work with sealed classes.&lt;/p&gt;

</description>
      <category>realvino</category>
      <category>csharp</category>
      <category>developement</category>
    </item>
  </channel>
</rss>
