VB.NET & C# comparision

VB.NET

Program Structure

C#

VB.NET

Program Structure

C#

Imports System

Namespace Hello
   Class HelloWorld
      Overloads Shared Sub Main(ByVal args() As String)
         Dim name As String = "VB.NET"

         'See if an argument was passed from the command line          If args.Length = 1 Then name = args(0)

          Console.WriteLine("Hello, " & name & "!")
      End Sub
   End Class
End Namespace

using System;

namespace Hello {
   public class HelloWorld {
      public static void Main(string[] args) {
         string name = "C#";

         // See if an argument was passed from the command line         if (args.Length == 1)
            name = args[0];

         Console.WriteLine("Hello, " + name + "!");
      }
   }
}

VB.NET

Comments

C#

VB.NET

Comments

C#

' Single line only_
Rem Single line only_

// Single line_
/* Multiple
    line  */
/// XML comments on single line
/** XML comments on multiple lines */_

VB.NET

Data Types

C#

VB.NET

Data Types

C#

_Value Types_Boolean
Byte
Char   _(example: "A"c)_Short, Integer, Long
Single, Double
Decimal
Date

_Reference Types_Object
String

Dim x As Integer
Console.WriteLine(x.GetType())          ' Prints System.Int32
Console.WriteLine(GetType(Integer))   ' Prints System.Int32
Console.WriteLine(TypeName(x))        ' Prints Integer

_' Type conversion_Dim d As Single = 3.5
Dim i As Integer = CType(d, Integer)   _' set to 4 (Banker's rounding)_i = CInt(d)  _' same result as CType_i = Int(d)    ' set to 3 (Int function truncates the decimal)

_Value Types_bool
byte, sbyte
char   _(example: 'A')_short, ushort, int, uint, long, ulong
float, double
decimal
DateTime   (not a built-in C# type)

_Reference Types_object
string

int x;
Console.WriteLine(x.GetType());              _// Prints System.Int32_Console.WriteLine(typeof(int));               // Prints System.Int32
Console.WriteLine(x.GetType().Name);   // prints Int32

// Type conversion
float d = 3.5f;
int i = **(int)**d;   // set to 3  (truncates decimal)

VB.NET

Constants

C#

VB.NET

Constants

C#

Const MAX_STUDENTS As Integer = 25

' Can set to a const or var; may be initialized in a constructorReadOnly MIN_DIAMETER As Single = 4.93

const int MAX_STUDENTS = 25;

// Can set to a const or var; may be initialized in a constructorreadonly float MIN_DIAMETER = 4.93f;

VB.NET

Enumerations

C#

VB.NET

Enumerations

C#

Enum Action
  Start 
  [Stop]   ' Stop is a reserved word  Rewind
  Forward
End Enum

Enum Status
  Flunk = 50
  Pass = 70
  Excel = 90
End Enum
Dim a As Action = Action.Stop
If a <> Action.Start Then _
   Console.WriteLine(a.ToString & " is " & a)     ' Prints "Stop is 1"

Console.WriteLine(Status.Pass)     ' Prints 70
Console.WriteLine(Status.Pass.ToString())     ' Prints Pass

enum Action {Start, Stop, Rewind, Forward};
enum Status {Flunk = 50, Pass = 70, Excel = 90};

Action a = Action.Stop;
if (a != Action.Start)
  Console.WriteLine(a + " is " + (int) a);    _// Prints "Stop is 1"_Console.WriteLine((int) Status.Pass);    // Prints 70
Console.WriteLine(Status.Pass);      // Prints Pass

VB.NET

Operators

C#

VB.NET

Operators

C#

Comparison=  <  >  <=  >=  <>

Arithmetic+  -  *  /
Mod
(integer division)(raise to a power)

Assignment=  +=  -=  *=  /=  \=  ^=  <<=  >>=  &=

_Bitwise_And   Or   Not   <<   >>

_Logical_AndAlso   OrElse   And   Or   Xor   Not

Note: AndAlso and OrElse perform short-circuit logical evaluations

String Concatenation&   +

Comparison==  <  >  <=  >=  !=

Arithmetic+  -  *  /
(mod)/  _(integer division if both operands are ints)_Math.Pow(x, y)

Assignment=  +=  -=  *=  /=   %=  &=  |=  ^=  <<=  >>=  ++  --

Bitwise&   |   ^   ~   <<   >>

Logical&&   ||   &   |   ^   !

Note: && and || perform short-circuit logical evaluations

String Concatenation+

VB.NET

Choices

C#

VB.NET

Choices

C#

greeting = IIf(age < 20, "What's up?", "Hello")

' One line doesn't require "End If"If age < 20 Then greeting = "What's up?"
If age < 20 Then greeting = "What's up?" Else greeting = "Hello"

' Use : to put two commands on same lineIf x <> 100 And y < 5 Then x *= 5 : y *= 2  

' PreferredIf x <> 100 And y < 5 Then
  x *= 5
  y *= 2
End If

' To break up any long single line use _If whenYouHaveAReally < longLine And _
  itNeedsToBeBrokenInto2 > Lines Then _
  UseTheUnderscore(charToBreakItUp)

'If x > 5 Then
  x *= y
ElseIf x = 5 Then
  x += y
ElseIf x < 10 Then
  x -= y
Else
  x /= y
End If

Select Case color   ' Must be a primitive data type  Case "pink", "red"
    r += 1
  Case "blue"
    b += 1
  Case "green"
    g += 1
  Case Else
    other += 1
End Select

greeting = age < 20 ? "What's up?" : "Hello";

if (age < 20)
  greeting = "What's up?";
else
  greeting = "Hello";

// Multiple statements must be enclosed in {}if (x != 100 && y < 5) {   
  x *= 5;
  y *= 2;
}

No need for _ or : since ; is used to terminate each statement.

**
if** (x > 5)
  x *= y;
else if (x == 5)
  x += y;
else if (x < 10)
  x -= y;
else
  x /= y;

// Every case must end with break or goto case
switch (color) {                          // Must be integer or string
  case "pink":
  case "red":    r++;    break;
  case "blue":   b++;   break;  case "green": g++;   break;  default:    other++;   break;       // break necessary on default}

VB.NET

Loops

C#

VB.NET

Loops

C#

Pre-test Loops:

While c < 10
  c += 1
End While

Do Until c = 10 
  c += 1
Loop

Do While c < 10
  c += 1
Loop

For c = 2 To 10 Step 2
  Console.WriteLine(c)
Next


Post-test Loops:

Do 
  c += 1
Loop While c < 10

Do 
  c += 1
Loop Until c = 10

_'  Array or collection looping_Dim names As String() = {"Fred", "Sue", "Barney"}
For Each s As String In names
  Console.WriteLine(s)
Next

_' Breaking out of loops_Dim i As Integer = 0
While (True)
  If (i = 5) Then Exit While
  i += 1
End While

_' Continue to next iteration_For i = 0 To 4
  If i < 4 Then Continue For
  Console.WriteLine(i)   _' Only prints 4_Next

Pre-test Loops:

While c < 10
  c += 1
End While

Do Until c = 10 
  c += 1
Loop

Do While c < 10
  c += 1
Loop

For c = 2 To 10 Step 2
  Console.WriteLine(c)
Next

Post-test Loops:

Do   c += 1
Loop While c < 10

Do   c += 1
Loop Until c = 10

Pre-test Loops:  

// no "until" keywordwhile (c < 10)
  c++;

for (c = 2; c <= 10; c += 2)
  Console.WriteLine(c);

Post-test Loop:do
  c++;
while (c < 10);

_// Array or collection looping_string[] names = {"Fred", "Sue", "Barney"};
foreach (string s in names)
  Console.WriteLine(s);

_// Breaking out of loops_int i = 0;
while (true) {
  if (i == 5)
    break;
  i++;
}

_// Continue to next iteration_for (i = 0; i < 5; i++) {
  if (i < 4)
    continue;
  Console.WriteLine(i);   // Only prints 4}

VB.NET

Arrays

C#

VB.NET

Arrays

C#

Dim nums**()** As Integer = {1, 2, 3} 
For i As Integer = 0 To nums.Length - 1
  Console.WriteLine(nums(i))
Next

_' 4 is the index of the last element, so it holds 5 elements_Dim names(4) As String
names(0) = "David"
names(5) = "Bobby"  ' Throws System.IndexOutOfRangeException

' Resize the array, keeping the existing values (Preserve is optional)ReDim Preserve names(6)

Dim twoD(rows-1, cols-1) As Single
twoD(2, 0) = 4.5

Dim jagged**()()** As Integer = { _
  New Integer(4) {}, New Integer(1) {}, New Integer(2) {} }
jagged(0)(4) = 5

int**[]** nums = {1, 2, 3};
for (int i = 0; i < nums.Length; i++)
  Console.WriteLine(nums[i]);

_// 5 is the size of the array_string[] names = new string[5];
names[0] = "David";
names[5] = "Bobby";   // Throws System.IndexOutOfRangeException

_// C# can't dynamically resize an array.  Just copy into new array._string[] names2 = new string[7];
Array.Copy(names, names2, names.Length);   // or names.CopyTo(names2, 0); 

float**[,]** twoD = new float[rows, cols];
twoD[2,0] = 4.5f; 

int**[][]** jagged = new int[3][] {
  new int[5], new int[2], new int[3] };
jagged[0][4] = 5;

VB.NET

Functions

C#

VB.NET

Functions

C#

' Pass by value (in, default), reference (in/out), and reference (out) Sub TestFunc(ByVal x As Integer, ByRef y As Integer, ByRef z As Integer)
  x += 1
  y += 1
  z = 5
End Sub

Dim a = 1, b = 1, c As Integer   ' c set to zero by default 
TestFunc(a, b, c)
Console.WriteLine("{0} {1} {2}", a, b, c)   ' 1 2 5

' Accept variable number of arguments
Function Sum(ByVal ParamArray nums As Integer()) As Integer
  Sum = 0 
  For Each i As Integer In nums
    Sum += i
  Next
End Function   _' Or use Return statement like C#_Dim total As Integer = Sum(4, 3, 2, 1)   ' returns 10

' Optional parameters must be listed last and must have a default value
Sub SayHello(ByVal name As String, Optional ByVal prefix As String = "")
  Console.WriteLine("Greetings, " & prefix & " " & name)
End Sub

SayHello("Strangelove", "Dr.")
SayHello("Madonna")

_// Pass by value (in, default), reference (in/out), and reference (out)_void TestFunc(int x, ref int y, out int z) {
  x++;  
  y++;
  z = 5;
}

int a = 1, b = 1, c;  // c doesn't need initializing
TestFunc(a, ref b, out c);
Console.WriteLine("{0} {1} {2}", a, b, c);  // 1 2 5

_// Accept variable number of arguments_int Sum(params int[] nums) {
  int sum = 0;
  foreach (int i in nums)
    sum += i;
  return sum;
}

int total = Sum(4, 3, 2, 1);   // returns 10

/* C# doesn't support optional arguments/parameters.  Just create two different versions of the same function. */ void SayHello(string name, string prefix) {
  Console.WriteLine("Greetings, " + prefix + " " + name);

void SayHello(string name) {
  SayHello(name, "");
}

VB.NET

Strings

C#

VB.NET

Strings

C#

_Special character constants_vbCrLf, vbCr, vbLf, vbNewLine
vbNullString
vbTab
vbBack
vbFormFeed
vbVerticalTab
""

' String concatenation (use & or +)
Dim school As String = "Harding" & vbTab
school = school & "University" ' school is "Harding (tab) University"

_' Chars_Dim letter As Char = school.Chars(0)   _' letter is H_letter = Convert.ToChar(65)                _' letter is A_letter = Chr(65)                                 _' same thing_Dim word() As Char = school.ToCharArray() ' word holds Harding

' No string literal operator Dim msg As String = "File is c:\temp\x.dat" 

_' String comparison_Dim mascot As String = "Bisons"
If (mascot = "Bisons") Then   _' true_If (mascot.Equals("Bisons")) Then   _' true_If (mascot.ToUpper().Equals("BISONS")) Then  _' true_If (mascot.CompareTo("Bisons") = 0) Then   ' true

Console.WriteLine(mascot.Substring(2, 3)) ' Prints "son"

_' String matching_If ("John 3:16" Like "Jo[Hh]? #:*") Then   'true

Imports System.Text.RegularExpressions   _' More powerful than Like_Dim r As New Regex("Jo[hH]. \d:*")
If (r.Match("John 3:16").Success) Then   'true

_' My birthday: Oct 12, 1973_Dim dt As New DateTime(1973, 10, 12)
Dim s As String = "My birthday: " & dt.ToString("MMM dd, yyyy")

_' Mutable string_Dim buffer As New System.Text.StringBuilder("two ")
buffer.Append("three ")
buffer.Insert(0, "one ")
buffer.Replace("two", "TWO")
Console.WriteLine(buffer)         ' Prints "one TWO three"

Escape sequences\n, \r
\t
\\
\"

// String concatenationstring school = "Harding\t";
school = school + "University";   // school is "Harding (tab) University"

// Charschar letter = school[0];            // letter is H
letter = Convert.ToChar(65);     // letter is A
letter = (char)65;                    // same thingchar[] word = school.ToCharArray();   // word holds Harding

// String literal
string msg = @"File is c:\temp\x.dat";
// same as
string msg = "File is c:\\temp\\x.dat";

_// String comparison_string mascot = "Bisons";
if (mascot == "Bisons")    _// true_if (mascot.Equals("Bisons"))   _// true_if (mascot.ToUpper().Equals("BISONS"))   _// true_if (mascot.CompareTo("Bisons") == 0)    // true

Console.WriteLine(mascot.Substring(2, 3));    // Prints "son"

// String matching_
// No Like equivalent - use regular expressions_

using System.Text.RegularExpressions;
Regex r = new Regex(@"Jo[hH]. \d:*");
if (r.Match("John 3:16").Success)   // true

_// My birthday: Oct 12, 1973_DateTime dt = new DateTime(1973, 10, 12);
string s = "My birthday: " + dt.ToString("MMM dd, yyyy");

// Mutable string
System.Text.StringBuilder buffer = new System.Text.StringBuilder("two ");
buffer.Append("three ");
buffer.Insert(0, "one ");
buffer.Replace("two", "TWO");
Console.WriteLine(buffer);     // Prints "one TWO three"

VB.NET

Exception Handling

C#

VB.NET

Exception Handling

C#

_' Throw an exception_Dim ex As New Exception("Something is really wrong.")
Throw  ex 

' Catch an exceptionTry   y = 0
  x = 10 / y
Catch ex As Exception When y = 0 ' Argument and When is optional  Console.WriteLine(ex.Message)
Finally
  Beep()
End Try

' Deprecated unstructured error handlingOn Error GoTo MyErrorHandler
...
MyErrorHandler: Console.WriteLine(Err.Description)

_// Throw an exception_Exception up = new Exception("Something is really wrong.");
throw up;  // ha ha

// Catch an exceptiontry
  y = 0;
  x = 10 / y;
}
catch (Exception ex) {   // Argument is optional, no "When" keyword 
  Console.WriteLine(ex.Message);
}
finally {
  // Requires reference to the Microsoft.VisualBasic.dll  // assembly (pre .NET Framework v2.0)
  Microsoft.VisualBasic.Interaction.Beep();
}

VB.NET

Namespaces

C#

VB.NET

Namespaces

C#

Namespace Harding.Compsci.Graphics 
  ...
End Namespace

' or

Namespace Harding
  Namespace Compsci
    Namespace Graphics 
      ...
    End Namespace
  End Namespace**
End Namespace**

Imports Harding.Compsci.Graphics

namespace Harding.Compsci.Graphics {
  ...
}

// or

namespace Harding {
  namespace Compsci {
    namespace Graphics {
      ...
    }
  }
}

using Harding.Compsci.Graphics;

VB.NET

Classes / Interfaces

C#

VB.NET

Classes / Interfaces

C#

Accessibility keywords
Public
Private
Friend                   
Protected
Protected Friend
Shared

' InheritanceClass FootballGame
  Inherits Competition
  ...
End Class 

' Interface definitionInterface IAlarmClock 
  ...
End Interface

// Extending an interface Interface IAlarmClock
  Inherits IClock
  ...
End Interface

// Interface implementationClass WristWatch 
  Implements IAlarmClock, ITimer 
   ...
End Class 

Accessibility keywords
public
private
internal
protected
protected internal
static

// Inheritanceclass FootballGame : Competition {
  ...
}

// Interface definition
interface IAlarmClock {
  ...
}

// Extending an interface interface IAlarmClock : IClock {
  ...
}

// Interface implementation
class WristWatch : IAlarmClock, ITimer {
   ...
}

VB.NET

Constructors / Destructors

C#

VB.NET

Constructors / Destructors

C#

Class SuperHero
  Private _powerLevel As Integer

  Public Sub New()
    _powerLevel = 0
  End Sub

  Public Sub New(ByVal powerLevel As Integer)
    Me._powerLevel = powerLevel
  End Sub

  Protected Overrides Sub Finalize() 
   ' Desctructor code to free unmanaged resources
    MyBase.Finalize()
  End Sub
End Class

class SuperHero {
  private int _powerLevel;

  public SuperHero() {
     _powerLevel = 0;
  }

  public SuperHero(int powerLevel) {
    this._powerLevel= powerLevel; 
  }

  ~SuperHero() {
    // Destructor code to free unmanaged resources.    // Implicitly creates a Finalize method  }
}

VB.NET

Using Objects

C#

VB.NET

Using Objects

C#

Dim hero As SuperHero = New SuperHero
_' or_Dim hero As New SuperHero

With hero
  .Name = "SpamMan"
  .PowerLevel = 3
End With

hero.Defend("Laura Jones")
hero.Rest()     ' Calling Shared method_
' or
_SuperHero.Rest()

Dim hero2 As SuperHero = hero  ' Both reference the same object
hero2.Name = "WormWoman"
Console.WriteLine(hero.Name)   ' Prints WormWoman

hero = Nothing    ' Free the object

If hero Is Nothing Then _
  hero = New SuperHero

Dim obj As Object = New SuperHero
If TypeOf obj Is SuperHero Then _
  Console.WriteLine("Is a SuperHero object.")

' Mark object for quick disposalUsing reader As StreamReader = File.OpenText("test.txt")
  Dim line As String = reader.ReadLine()
  While Not line Is Nothing
    Console.WriteLine(line)
    line = reader.ReadLine()
  End While
End Using

SuperHero hero = new SuperHero();

_// No "With" construct_hero.Name = "SpamMan";
hero.PowerLevel = 3;

hero.Defend("Laura Jones");
SuperHero.Rest();   // Calling static method

SuperHero hero2 = hero;   // Both reference the same object
hero2.Name = "WormWoman";
Console.WriteLine(hero.Name);   // Prints WormWoman

hero = null ;   // Free the object

if (hero == null)
  hero = new SuperHero();

Object obj = new SuperHero(); 
if (obj is SuperHero)
  Console.WriteLine("Is a SuperHero object.");

// Mark object for quick disposalusing (StreamReader reader = File.OpenText("test.txt")) {
  string line;
  while ((line = reader.ReadLine()) != null)
    Console.WriteLine(line);
}

VB.NET

Structs

C#

VB.NET

Structs

C#

Structure StudentRecord
  Public name As String
  Public gpa As Single

  Public Sub New(ByVal name As String, ByVal gpa As Single)
    Me.name = name
    Me.gpa = gpa
  End Sub
End Structure

Dim stu As StudentRecord = New StudentRecord("Bob", 3.5)
Dim stu2 As StudentRecord = stu  

stu2.name = "Sue"
Console.WriteLine(stu.name)    ' Prints Bob
Console.WriteLine(stu2.name)  ' Prints Sue

struct StudentRecord {
  public string name;
  public float gpa;

  public StudentRecord(string name, float gpa) {
    this.name = name;
    this.gpa = gpa;
  }
}

StudentRecord stu = new StudentRecord("Bob", 3.5f);
StudentRecord stu2 = stu;  

stu2.name = "Sue";
Console.WriteLine(stu.name);    _// Prints Bob_Console.WriteLine(stu2.name);   // Prints Sue

VB.NET

Properties

C#

VB.NET

Properties

C#

Private _size As Integer

Public Property Size() As Integer
  Get
    Return _size
  End Get
  Set (ByVal Value As Integer)
    If Value < 0 Then
      _size = 0
    Else
      _size = Value
    End If
  End Set
End Property

foo.Size += 1

private int _size;

public int Size {
  get {
    return _size;
  }
  set {
    if (value < 0)
      _size = 0;
    else
      _size = value;
  }
}

foo.Size++;

VB.NET

Delegates / Events

C#

VB.NET

Delegates / Events

C#

Delegate Sub MsgArrivedEventHandler(ByVal message As String)

Event MsgArrivedEvent As MsgArrivedEventHandler

' or to define an event which declares a delegate implicitlyEvent MsgArrivedEvent(ByVal message As String)

AddHandler MsgArrivedEvent, AddressOf My_MsgArrivedCallback
' Won't throw an exception if obj is NothingRaiseEvent MsgArrivedEvent("Test message")
RemoveHandler MsgArrivedEvent, AddressOf My_MsgArrivedCallback

Imports System.Windows.Forms

Dim WithEvents MyButton As Button   _' WithEvents can't be used on local variable_MyButton = New Button

Private Sub MyButton_Click(ByVal sender As System.Object, _
  ByVal e As System.EventArgs) Handles MyButton.Click
  MessageBox.Show(Me, "Button was clicked", "Info", _
    MessageBoxButtons.OK, MessageBoxIcon.Information)
End Sub

delegate void MsgArrivedEventHandler(string message);

event MsgArrivedEventHandler MsgArrivedEvent;

_// Delegates must be used with events in C#_MsgArrivedEvent += new MsgArrivedEventHandler(My_MsgArrivedEventCallback);
MsgArrivedEvent("Test message");    _// Throws exception if obj is null_MsgArrivedEvent -= new MsgArrivedEventHandler(My_MsgArrivedEventCallback);

using System.Windows.Forms;

Button MyButton = new Button(); 
MyButton.Click += new System.EventHandler(MyButton_Click);

private void MyButton_Click(object sender, System.EventArgs e) {
  MessageBox.Show(this, "Button was clicked", "Info",
    MessageBoxButtons.OK, MessageBoxIcon.Information);
}

VB.NET

Console I/O

C#

VB.NET

Console I/O

C#

Console.Write("What's your name? ")
Dim name As String = Console.ReadLine()
Console.Write("How old are you? ")
Dim age As Integer = Val(Console.ReadLine())
Console.WriteLine("{0} is {1} years old.", name, age) 
' or
Console.WriteLine(name & " is " & age & " years old.")

Dim c As Integer
c = Console.Read()    ' Read single char
Console.WriteLine(c)   ' Prints 65 if user enters "A"

Console.Write("What's your name? ");
string name = Console.ReadLine();
Console.Write("How old are you? ");
int age = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("{0} is {1} years old.", name, age);
_// or_Console.WriteLine(name + " is " + age + " years old.");

int c = Console.Read();  _// Read single char_Console.WriteLine(c);    // Prints 65 if user enters "A"

VB.NET

File I/O

C#

VB.NET

File I/O

C#

Imports System.IO

_' Write out to text file_Dim writer As StreamWriter = File.CreateText("c:\myfile.txt")
writer.WriteLine("Out to file.")
writer.Close()

_' Read all lines from text file_Dim reader As StreamReader = File.OpenText("c:\myfile.txt")
Dim line As String = reader.ReadLine()
While Not line Is Nothing
  Console.WriteLine(line)
  line = reader.ReadLine()
End While
reader.Close()

_' Write out to binary file_Dim str As String = "Text data"
Dim num As Integer = 123
Dim binWriter As New BinaryWriter(File.OpenWrite("c:\myfile.dat")) 
binWriter.Write(str) 
binWriter.Write(num) 
binWriter.Close()

_' Read from binary file_Dim binReader As New BinaryReader(File.OpenRead("c:\myfile.dat"))
str = binReader.ReadString()
num = binReader.ReadInt32()
binReader.Close()

using System.IO;

// Write out to text fileStreamWriter writer = File.CreateText("c:\\myfile.txt");
writer.WriteLine("Out to file.");
writer.Close();

// Read all lines from text fileStreamReader reader = File.OpenText("c:\\myfile.txt");
string line = reader.ReadLine();
while (line != null) {
  Console.WriteLine(line);
  line = reader.ReadLine();
}
reader.Close();

_// Write out to binary file_string str = "Text data";
int num = 123;
BinaryWriter binWriter = new BinaryWriter(File.OpenWrite("c:\\myfile.dat"));
binWriter.Write(str);
binWriter.Write(num);
binWriter.Close();

// Read from binary fileBinaryReader binReader = new BinaryReader(File.OpenRead("c:\\myfile.dat"));
str = binReader.ReadString();
num = binReader.ReadInt32();
binReader.Close();

This article is part of the GWB Archives. Original Author: Gaurav Taneja

New on Geeks with Blogs

  • We Won The One Award I Actually Care About

    Full Scale made the Inc. 5000 for the fifth year straight, the 12th listing across my three companies. Here is why the one award you cannot buy is worth stopping for.

  • Your Customers Build the Features Now

    I let a tool I liked sit dead for a year rather than build the features I wanted. An MCP server meant I never had to, and your customers can do the same to your product.

  • Get the Size of a Directory in Linux the Easy Way

    du -sh for the quick answer, ncdu for the cleanup, df for the disk itself: every command for checking directory size in Linux, plus why du and df never agree.

  • Vim Search and Replace: The Ultimate Guide

    One :%s command replaces every match in a file before a find dialog would even open. The Vim substitute patterns worth the muscle memory: flags, ranges, capture groups, and multi-file edits.