(or... How I got MinGW to work with Notepad++)

A few days ago, I decided to finally start learning C++. Until now I've only used a rather restricted version of C for robotics. However, I faced a problem: I never do all my work on a single PC. Sometimes I work in school, sometimes at home on my desktop, and sometimes at my grandparents' house on my laptop.
I usually use a portable version of Notepad++ for coding, but then again, most of my code is either web development or batch scripting - stuff that doesn't need a compiler.

Getting g++ to work with proper Notepad++ installations is easy, but this method doesn't work with portable versions since you cannot rely on environment variables. So I spent some time thinking about this issue, and came up with the following solution to integrate a portable version of Notepad++, my favorite editor, with MinGW:

  • Download Notepad++ Portable
  • Add the NppExec plugin from the Plugin Manager.
  • Download MinGW for Windows.
  • Extract the contents of the archive you downloaded.
  • Copy both to a portable drive.
  • Download this small utility I made: r-launch. This basically allows you to run MinGW commands from the Notepad++ directory.
  • Save r-launch.exe to the Notepad++Portable\App\Notepad++ folder of your portable installation.
  • Create a text file called r-launch.txt in the same directory and store the path of the MinGW installation in it. My MinGW installation was in G:\Coding\MinGW and my Notepad++ executable was in G:\Software\Notepad++Portable\App\Notepad++, so my text file read:
  • Open the NppExec windows in Notepad++ and type your MinGW commands like you normally would, only with r-launch.exe in front of them.
  • You're Done!

Here's the code I use in the NppExec window:

Saves and compiles in the same directory with the same name


Run in NppExec Console:
Runs the compiled version of the program.


Run in cmd:
Runs the compiled version of the program.


Compile and Run in NppExec Console:


Compile and Run in cmd:


These commands use g++, but you can use any of the utilities that comes with MinGW.


The source code of r-launch (licensed under the MIT License):

@echo off
Title r-launch: Rahul's MinGW Launcher
if [%1]==[] goto :help
goto :launch

echo r-launch: Rahul's MinGW Launcher for Notepad++
echo http://rahul2001.com/
echo ----------------------------------------------
echo This file lets you add the MinGW utilities to
echo Notepad++.
echo Instructions:
echo 1. Save this executable to the same folder as
echo    the Notepad++.
echo 2. Save the path of the MinGW folder in a text
echo    file named 'r-launch.txt' in the same 
echo    folder as this executable.
echo 3. Run your commands with 'r-launch' in front
echo    of them from the NppExec plugin for
echo    Notepad++.
if %0 == "%~0" pause
goto :eof

set /p path=

if not exist r-launch.txt goto error1
if not exist notepad++.exe goto error2
if not exist %path% goto error3
if not exist %path%\set_distro_paths.bat goto error4

call %path%\set_distro_paths.bat
goto :eof

echo ERROR: 'r-launch.txt' doesn't exist in the same directory as this executable.
goto :eof
echo ERROR: 'notepad++.exe' doesn't exist in the same directory as this executable.
goto :eof
echo ERROR: The directory specified in r-launch.txt doesn't exist.
goto :eof
echo ERROR: 'set_distro_paths.bat' doesn't exist at in the directory specified in r-launch.txt.
goto :eof

Hi! This is a simple databaseless script to save form data to a file. The code is split into four parts:
- The HTML form
- The PHP code
- The data file
- The .htaccess file

Your document should contain a similar form:

<form novalidate="" method="post" action="submit.php" id="SchoolDetails">
<label for="School">School School:</label>
<input id="School" name="School" type="text" placeholder="School" value="" spellcheck="false" class="">
<br />
<label for="TeamSchool">Team Name:</label>
<input id="Team" name="Team" type="text" placeholder="Team" value="" spellcheck="false" class="">
<input id="submit" name="submit" type="submit" value="Submit!">

Every Input must have the 'name' attribute. Remember to change submit.php according to the name of your PHP file

The PHP:
This is the PHP code that does the actual work:

    header("Location: thanks.html"); //This is the page to which the user will be redirected...
    $handle = fopen("userdata.txt", "a"); //this is the name of the text file in which all the data will get stored...
    $post = $_POST;
    $post['----------=User Information'] = '----------';
    $post['User IP'] = $_SERVER['REMOTE_ADDR']; //Saves the IP Address
    $post['Browser/UserAgent'] = $_SERVER['HTTP_USER_AGENT']; //Saves the User Agent
    $post['Referrer'] = $_SERVER['HTTP_REFERER']; //Saves the URL of the page which contains the form
    $post['HTTPS'] = $_SERVER['HTTPS']; //Is the script queried through a secure HTTP protocol?   
    $post['Date&Time'] = date("l jS \of F Y h:i:s A"); //Saves the date and time at which the form was submitted
    //add more global variables here
    $post['========================END'] = '=======================';
    //Save all the form data as Input_Name=Input_Value
    foreach($post as $variable => $value) 
        fwrite($handle, $variable);
        fwrite($handle, "=");
        fwrite($handle, $value);
        fwrite($handle, PHP_EOL);
    fwrite($handle, PHP_EOL);

You can add many more PHP global variables. Change thanks.html to point to the webpage to which the users are redirected once they submit the form. userdata.txt is the file to which everything is stored. You can name it anything, but be sure to change the file name everywhere in the code.

The data file:
Just create an empty file called userdata.txt or whatever you want to call it and everything will be saved to it.
Note: It doesn't have to be a .txt file, it can be any format, just make sure it isn't .php because that can be a big security vulnerability.

The .htaccess file:
Now, you have to make a decision. Do you want to be able to see the result on the go without logging in every time? If so, rename your data file to something guessable like MyUserData5566789334.txt so that only you know the URL. After this, just visit the file in your web browser to see the entries. However, if you want something more secure, edit the .htaccess file in the directory in which your file is stored to contain the following:

<Files "userdata.txt">
Order Allow,Deny
Deny from all

The downside of this is that you will have to use FTP or your server's web-based administration system to view the file every time.

That's it! Enjoy your new submission form!

Just enabled Disqus on my blog... Comment away!

Yet another one of my little projects...


Note: this post was inspired by this. This article deals mostly with Windows.

  1. I am a computer hobbyist who wants to experience what computers were like two decades ago.
  2. I want to play retro games and get the real experience.
  3. I have some really old hardware which I would like to get working again just for the nostalgic feeling.
  4. I want my kids to see what operating systems were like before they were born.
  5. My Grandmother can't use anything newer than Windows 98.
  6. Because Metro is just sh*t.
  7. Because my PC won't run anything newer than ME.
  8. Because I'm in love with the 3D maze screensaver.
  9. Because LindowsOS is the best.
  10. Because I want to set up a telnet server in DOS.
  11. I wanna try linux 1.0.
  12. etc, etc...

Here's a handy script to check the installation of Java:

REM get javaw.exe from the registry entry
for /f tokens^=2^ delims^=^" %%i in ('reg query HKEY_CLASSES_ROOT\jarfile\shell\open\command /ve') do set JAVAW_PATH=%%i

REM if reg entry is not found, java is not installed
if "%JAVAW_PATH%"=="" ( goto java_error ) else ( goto java_installed )

If java doesn't exist, java_error is called. If it exists, java_installed is called

UPDATE: 3rd June 2016 - Fixed typo

Another project that I have been working on for the past few days...


A simple Windows command line utility I coded a few days ago.

I meant to put it up earlier, but I was busy planning my fifteenth birthday :)


Many of our users say the accuracy of our spam filter is one of the key reasons they love Gmail

The above is a quote from a blog post that Ela Czajka, a software engineer at Google blogged about a few years ago. And I'm forced to agree... Or at least would have, two years ago.

Over the past several months, I have observed the Google spam filters become either worse, or unable to keep up.

Now I am not someone who just says stuff without reason. In fact, I used to be a really big Google fanboy (and still am, to some extent).

Here's my reasoning: Over the past year and a half, I have seen legitimate mail end up in the spam folder and spam end up in my inbox.

Spam, to me, is simply mail I did not ask and which is of no use to me. If I clicked the 'Send me regular updates' option during the sign up process, it means that I want the mail and don't want it to go to the spam folder. Similarly, when services send me updates about me account, I don't want it to go to the spam folder (as you can see in the screenshot below, some emails regarding my domains ended up in the spam folder - this should NOT happen). However, if companies start sending me mail regarding products that I didn't ask for, it SHOULD end up in the spam folder.

Screenshots (I haven't set any custom filters of any sort):

The following is a capture of my spam folder. Notice how a large number of the e-mails are actually legit but still in the spam folder. Spam filter fail [hmm... Jeremy & Simon seems to be some sort of service I signed up for a long time ago... at least the provide an 'opt out' option]

Spam that was in my inbox but shouldn't have been: useless marketing

What about other Google services? As far as I can tell, Google doesn't have spam filters for other services. Chrome Webstore: Chrome Webstore spam Youtube : Youtube spam


As it is, I have moved away from GMail onto my website email id for most important email. I really think that Google should improve it's (once awesome) spam filters in order to prevent losing more users like me.


I have just set up my blog and will (hopefully) start blogging soon.