Windows Command Prompt Alternative - Cmder

Cmder - Console Emulator

Till Microsoft releases its new Windows Terminal, there is not much option for a decent command prompt tool in Windows. Forget about having a color theme and or multiple tabs in command windows; you won’t find the essential feature even things like copy/paste. Windows stuck with the same feature sets for command windows which they built more than 20 years back and not much enhancement made to it afterward. There is always a room for basic terminal windows with few more functionalities which match with those pimp terminals in MaxOS or Linux. I believe Cmder fills that room as I find every feature I expect from a terminal window. It has multiple tabs, can split the screen into multiple panels, can run many Unix commands, comes with Git setup, and much more.

Cmder is a self-contained console emulator for Windows without any dependencies. Being a portable application, Cmder offers to run without any need to install on the machine. It is based on ConEmu with the major config overhaul, comes with many color schemes, fantastic clink, and a custom prompt layout. If you are looking for a replacement for existing command windows with features like multiple tabs, custom color scheme, minimize to the system tray, etc. then you will love Cmder. Pick your shell you want to work with like Cmd, PowerShell, Bash, or Mintty, and run it using Cmder emulator as standard terminal experience.

If disk space is not the constraint, make sure you download full version (108 MB) which also has Git for Windows.

Cmder - VIM Editor

Link:
Cmder

randr - Rename And Replace

I thought spending this weekend to kickstart learning Go. As a committed .NET/C# developer for 15 years, working with the Go syntax is a different kind of experience. I am still trying to well verse myself with Go syntax and development

Once I got the hang of Go basic syntax, I thought why not build a small and useful tool in Go which could resolve a daily annoyance. Folk, this is what I come up with, randr.

randr is a command line tool which recursively searches files content for source string and replaces it with the target string. With that, randr will also recursively rename files or folders name which matches source string to target string. You can also specify a command flag, if you want to rename or replace based on case sensitive or case insensitive search. And that is all!

randr - Help

randr - Help

To illustrate the usage of randr, consider you have a project folder with the following structure:

// Project Folder: c:\Projects\Payroll\

// c:\Projects\Payroll\Models\Worker.cs
public class Worker {}

// c:\Projects\Payroll\Services\WorkerService.cs
public class WorkerService {}

// c:\{rojects\Payroll\Repositories\WorkerRepository.cs
public class WorkerRepository {}

// c:\Projects\Payroll\Helpers\Worker\Extensions.cs
public static class Extensions {}

Let’s refactor above project using randr and change Worker entities to Employee. randr command to refactor will look like following which will replace any files text which contains Worker to Employee as well as will rename any file or folder with contains Worker to Employee.

randr.exe -find=Worker -replace=Employee -match=true -location=c:\Projects\Payroll\
randr - Example

randr - Example

After running randr successfully, our example project folder will look like following:

// Project Folder: c:\Projects\Payroll\

// c:\Projects\Payroll\Models\Employee.cs
public class Employee {}

// c:\Projects\Payroll\Services\EmployeeService.cs
public class EmployeeService {}

// c:\Projects\Payroll\Repositories\EmployeeRepository.cs
public class EmployeeRepository {}

// c:\Projects\Payroll\Helpers\Employee\Extensions.cs
public static class Extensions {}

Please go over README.md in the project repository for parameter usage details.

Project Repository: randr

randr is currently a bare minimum tool and it does require some more polishing. I hope you will find randr useful.

Chrome Extension - DIV Glance

I am so happy to see my first Chrome extension published on the Chrome Web Store. The whole intension of this releasing the extension was to understand Chrome extension development workflow and extension publishing process. The whole process to upload my extension was simple and straight forward even for beginners like me.

Now about the DIV Glance Chrome extension itself. This extension will give you a visual glance of the DIV tags in the page. Just hover your mouse pointer over the page and extension will highlight DIV under the pointer with the Red background color. The intensity of Red background color signifies the depth of highlighted DIV related with regards to its parent DIV layers. You no more have to dig through Chrome DevTools to inspect DIV layout in the page.

DIV Glance

DIV Glance Extension Page: DIV Glance

As I mentioned above, I created this extension just for the sake of learning Chrome extension development. As I saw the practical usage of this extension later, I tried to polish it a bit to make it more presentable. At the core of this extension, it simply injects following CSS style to the page — nothing fancy.

1
2
3
4
5
6
7
<style type="text/css">
  div:hover
  {
    outline:1px solid red;
    background-color:#ff000010;
  }
</style>

Making WCF service request using Postman

You don’t need another WCF client to test WCF services if you already have fantastic Postman installed on your machine. But requesting WCF service using Postman needs little more than just providing a Service Url and a Xml body to the SOAP request. One issue developers always stumble upon first time when using Postman to call a Wcf service is this cryptic error message: The message with Action '' cannot be processed at the receiver, due to a ContractFilter mismatch at the EndpointDispatcher..

Following is an example ActionNotSupported fault response raised by the Wcf Service:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
  <s:Body>
  <s:Fault>
    <faultcode xmlns:a="http://schemas.microsoft.com/ws/2005/05/addressing/none">
      a:ActionNotSupported
    </faultcode>
    <faultstring xml:lang="en-US">
      The message with Action '' cannot be processed at the receiver, due to a ContractFilter mismatch at the
      EndpointDispatcher. This may be because of either a contract mismatch (mismatched Actions between sender and
      receiver) or a binding/security mismatch between the sender and the receiver. Check that sender and receiver
      have the same contract and the same binding (including security requirements, e.g. Message, Transport, None).
    </faultstring>
  </s:Fault>
  </s:Body>
</s:Envelope>
ActionNotSupported Soap Fault Code raised by Wcf Service

Inspecting the exception fault string more carefully, you will surely realize that the exception has something to do with Action “. Postman is apparently not sending any Action contract with the SOAP request, and Wcf service is treating it as empty Action. With the empty received Action, service trying to match it with its own Action contract which result as mismatch. And this is what is causing the exception.

To resolve the issue, you need to explicitly provide a SOAPAction to the header with your SOAP request to the service. You can get the SOAPAction of the web method from the WSDL document of your Wcf service. Just navigate to the WSDL Uri, which usually your Wcf service Url appended with “?wsdl”, and look for soap:operation node of the web method you want to call. Copy the value of soapAction attribute which will be something like http://tempuri.org/I<Your Service Name>/<Method Name> and use this value as SOAPAction of your service call.

Get the SOAPAction value from WSDL document of your Wcf Service

Adding SOAPAction header in Postman is simple. You have to goto Headers tab of the Postman for the Wcf service, add a New key, provide Key as “SOAPAction” and the Value whatever you copied in above step.

Configure SOAPAction

With the SOAPAction configured for your Wcf service, hit Send button in Postman to make service call and voila! You should receive proper SOAP response from the service. Save the Service request in the Postman so that you don’t have to do the same SOAPAction configuration again for the service.

Wcf service call using Postman

My automatized workflow to setup Postman to call Wcf service is following:

  1. Make GET call of the service Url with appended “?wsdl”.
  2. Copy the value of soapAction attribute of your SOAP method.
  3. Change Http method to POST and remove “?wsdl”
  4. Provide header with key “SOAPAction” and value copied soapAction attribute.
  5. Set “Content-Type” header as “text/xml”
  6. Provide SOAP Envelop in Body
  7. Hit Send (and Save for the future task).

How to go back to previous directory in DOS command prompt?

If you shuffle a lot between Linux/Mac and Windows OS, you surely miss many Linux shell commands in Windows Command Prompt and you definitely wish if you can replicate or have some kind of workaround of those commands in Windows to make life bit easier. One of those commands is navigating back to the previous directory. In Linux, you can just type: cd - and voila, you go back to your previous directory. No need to check paths of previously entered directories. That’s one handy command. As usually happen with most productive shell commands, there is no equivalent command parameter in DOS.

I was looking for some kind of workaround to achieve same in DOS but when I couldn’t find any solution online so I decided to devise and build my own solution. It started with a very basic DOS batch file which just simulates Linux cd – command but slowly and gradually it grows over the period of time as I added more and more features.

So how does it work? To implement this solution, you will need two batch files: ccd.bat and dos_init.cmd. ccd.bat will have actual batch commands which take care of redirecting command to appropriate branch and keeping the history of visited directories whereas dos_init.cmd will create DOSKEY aliases for cd command. You should create both files in one of your PATH directories (for example C:\Windows) so that DOS will able to locate these in Command Windows.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
@echo off
if '%*'=='' goto show_current_directory
if '%*'=='~' goto home_directory
if '%*'=='-d' goto my_documents_directory
if '%*'=='-p' goto program_files_directory
if '%*'=='-w' goto windows_directory
if '%*'=='--' goto previous_directory
if '%*'=='-' goto toggle_directory
goto change_directory

:show_current_directory
    cd
    goto batch_end

:home_directory
    call:GotoDirectory %HOMEPATH%
    goto batch_end

:my_documents_directory
    call:GotoDirectory %HOMEPATH%\Documents
    goto batch_end

:program_files_directory
    call:GotoDirectory "%PROGRAMFILES%"
    goto batch_end

:windows_directory
    call:GotoDirectory %WINDIR%
    goto batch_end

:previous_directory
    set current_dir=%cd%
    popd
    goto batch_end

:toggle_directory
    set current_dir=%cd%
    cd %previous_dir%
    set previous_dir=%current_dir%
    goto batch_end

:change_directory
    call:GotoDirectory %*
    goto batch_end

:GotoDirectory
    pushd .
    set previous_dir=%cd%
    cd %~1
    goto:eof

:batch_end
1
2
3
4
5
6
@echo off
doskey cd=ccd $*
doskey cd..=ccd ..
doskey cd--=ccd --
doskey cd-=ccd -
doskey cd\=ccd

You always require running dos_init.cmd before using ccd.bat so that assign aliases are available for ccd batch file. To automate that, you can simply add an entry in Windows Registry which will automatically run dos_init.cmd command every time you open Command Windows.

1
2
[HKEY_CURRENT_USER\Software\Microsoft\Command Processor]
AutoRun=C:\Windows\dos_init.cmd

Following are steps to create above Registry entry. Be careful when editing the registry and make sure you know what you’re doing.

  1. Open Windows Registry.
  2. Go to registry path: [HKEY_CURRENT_USER\Software\Microsoft\Command Processor]
  3. Create a registry entry with key as “AutoRun” and value as complete path of your dos_init.cmd

And that’s all we need.

Let’s go through the usage of this batch file:

Type cd- to toggle between last and current directory.
Type cd-- to go back to previous directories.
Few more examples to changing directory to system folders using this solution.

I hope you will find this hack useful. So how you want to further enhance this batch file? Please do share your changes and improvements here so that others can also benefit.