Netduma R1 Review

The Netduma R1 router isn’t snake oil, they’ve done a lot of hard work to allow for a much more enjoyable gaming experience (purely from a lag point of view). The router is really nice and is made by gamers for gamers. The community around the router seems strong, and the support behind the router are actual developers.


  • QoS (Congestion Control)
    • This is made extremely easy, especially in comparison to OpenWRT/DD-WRT/Stock Firmware
    • Even if someone is downloading using torrenting or UseNet and saturating your network you don’t have any lag in-game.
      Host Filtering/Geo-Filter
    • This is made extremely easy, makes gaming much better because it limits the range that you are connecting to other players.
    • Connecting to a VPN is much more simple and pretty than OpenWRT/DD-WRT/Stock Firmware(if they even support it).
    • More importantly you can VPN only certain attached devices instead of the whole network (every device on the router) this is perfect for gamers because you can attach only your console to the VPN.
  • Responsive UI
    • Similar to Luci but it appears they hired a graphic designer
    • Network Monitor
      • Real Time graphs
      • More modern UI then competitors
    • Support
      • This is the biggest PRO, the developers are actively working with customers to fix issues and make this router everything that gamers want.
      • They have been providing support even during the Christmas holiday (night and day)
      • They have used Skype and TeamViewer to help users that have complex network issues

    In the Middle

    • Hardware
    • 600MHz single core CPU
    • 128MB Ram
    • Wireless N only no AC


    • Bugs that are being “addressed”
      • As this list is constantly changing go here
    • No SSH/Telnet only a web manager (missing multiple settings)
    • Wifi:
    • netduma-r1-wifi

      • Only 20MHz channel width no option for 40MHz option
      • Low Tx Rate for wireless N should be around 300Mbps as with other routers
      • UI for WiFi isn’t perfect and is somewhat confusing if you don’t know what you are doing.

    If you are a gamer on a console or on PC, this router is worth the money [PERIOD]. However, if you are looking for a top of the line amazing hardware/wireless experience this isn’t the router for you.

    Let me clear that up, because this router is running OpenWRT as the backbone 600MHz is more than enough to handle anything you throw at it. There really aren’t any better (hardware wise) routers out there if you are looking for real OpenWRT support.

    Routers I’ve owned recently:

    • Netgear R7000 “Nighthawk”
      • Dual core 1GHz CPU
      • Only DD-WRT support
      • Wireless AC
    • Linksys (“Belkin”) WRT1900AC
      • Dual core 1.4GHz CPU
      • Only McWRT support (and a bad wifi driver even in Stock Firmware)
      • Wireless AC

Remove Transfer List in Unison

Every time I launch unison2 I am getting a list of saved items…but they are invalid.

To fix this simply delete the following file with the application closed then relaunch the app:

rm -f ~/Library/Application\ Support/com.panic.Unison2/transfers.db

Reset your AD password back to original

For the below code to work you’ll need to install in Windows Features all items under Remote Server Administration Tools:
Screen Shot 2014-04-21 at 9.37.29 AM

The parameters to call this are as follows:
-user [Your AD username]
-current [Your current AD password]
-new [The new AD password you want, can be the current AD password]

Import-Module ac*
param ( [string] $user, [string] $current, [string] $new)
if($user -eq "") {
    $user=Read-Host "Enter the username"

if($current -eq "") {
    $current=Read-Host "Enter the current password"

if($new -eq "") {
    $new=Read-Host "Enter the new password"

for ($i=1; $i -le 6; $i++)
    $temppass = "p0A#s4s4" + [string]$i
    if($i -eq 1) {
        Set-ADAccountPassword $user -OldPassword (ConvertTo-SecureString -AsPlainText $current -Force) -NewPassword (ConvertTo-SecureString -AsPlainText $temppass -Force)
    else {
        $previous = "p0A#s4s4" + [string]($i - 1)
        Set-ADAccountPassword $user -OldPassword (ConvertTo-SecureString -AsPlainText $previous -Force) -NewPassword (ConvertTo-SecureString -AsPlainText $temppass -Force)

Set-ADAccountPassword $user -OldPassword (ConvertTo-SecureString -AsPlainText $temppass -Force) -NewPassword (ConvertTo-SecureString -AsPlainText $new -Force)

Cool loading/progress bar for websites using ajax/post/submit methods

So the other day, my friend was logging into his Magic The Gathering account and I noticed that they had incorporated their progress/loading bar into the text-boxes that he was typing into. This immediately caught my eye, since it could be used for any ajax call (validation, form submitting, loading bar) so I dug deeper and couldn’t find any open source solutions out there.

So I made one: Textbox-Progress-Bar
this uses the MIT license and is thereby free and open. Enjoy, it really did provide a really nice UX feeling and I like my result as well.


iTextSharp remove text from static PDF document C#

The following code makes a white image over the text i want to hide from the user, it then makes the user not able to copy or paste into the pdf so they cannot select the hidden text and copy the value.

//Path to where you want the file to output
string outputFilePath = "C:\\test.pdf";
//Path to where the pdf you want to modify is
string inputFilePath = "C:\\input.pdf";
	using (Stream inputPdfStream = new FileStream(inputFilePath, FileMode.Open, FileAccess.Read, FileShare.Read))
	using (Stream outputPdfStream = new FileStream(outputFilePath, FileMode.Create, FileAccess.Write, FileShare.ReadWrite))
	using (Stream outputPdfStream2 = new FileStream(outputFilePath, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite))
		//Opens the unmodified PDF for reading
		var reader = new PdfReader(inputPdfStream);
		//Creates a stamper to put an image on the original pdf
		var stamper = new PdfStamper(reader, outputPdfStream) { FormFlattening = true, FreeTextFlattening = true };
		//Creates an image that is the size i need to hide the text i'm interested in removing
		iTextSharp.text.Image image = iTextSharp.text.Image.GetInstance(new Bitmap(120, 20), BaseColor.WHITE);
		//Sets the position that the image needs to be placed (ie the location of the text to be removed)
		image.SetAbsolutePosition(245, 462);
		//Adds the image to the output pdf
		stamper.GetOverContent(1).AddImage(image, true);
		//Creates the first copy of the outputted pdf

		//Opens our outputted file for reading
		var reader2 = new PdfReader(outputPdfStream2);

		//Encrypts the outputted PDF to make it not allow Copy or Pasting
		//Creates the outputted final file
catch (Exception ex)

If you have any questions like why you have to do it this ridiculous way let me know.

Insightbb Internet

So…Last night my internet went to completely unusable. As always I went through the motions, I called insightbb…I pressed 0 twice to get past their ads. Then I pressed 1, my phone number, the last four of my social number, then 3 then 2…Finally all i have to press is 0. A PERSON! finally a PERSON…he says my signals are all messed up and a tech will come out…

One day later…

A Tech comes out and says all my stuff looks great…except my upstream signals which are all way low and failing. He calls his Supervisor and finds out it is an issue in my whole neighborhood (Louisville KY Story AVE area) with the 30.0-50.0 services…And a maintenance truck will come within 24-48 hours to resolve the issue.

So here is the question INSIGHTBB….if you know my neighborhood is having critical issues with 30.0-50.0 you need to call all the inflicted customers and switch them to 20.0 automatically DO NOT MAKE ME CALL YOU! My time is valuable. If you want my loyalty you need to work for me. Not make me work for you….I know more about my neighborhood’s network than most of the techs you send to my house…STOP WASTING MY TIME.

Especially when I think of the others who don’t know why their internet is messed up and are just stuck hating you’ll… BE MEN NOT MICE.

Minecraft Speedhack Mac OS X (Clock Control Alternative)

Hello All,
I played minecraft tonight and wanted to test my mac os x coding skills.  I made a quick applescript that is a complete undetected speedhack for minecraft multiplayer. This was tested on Mac OS X 10.6.7 but should work on any 10.5-10.6 Mac OS X computer.

Attached is the application it runs at something like 100x speed I can easily slow this down since 100x is a little ridiculous but it is 1:45AM and i’m sleepy.   Perhaps if asked nicely i’ll upload the script in editable form.

EDIT: I apparently cannot upload a .app so here is the Script.  Don’t go stealing it and claiming it for your own…because that’s just rude you 14 year old little kid.

(* Written by Justin Schuhmann on Thu May 26th 1:47 *)
(* Loop forever!!! the only way to quit is to stop or to kill process *)
(* Gets the time *)
set {year:y, month:m, day:d, hours:h, minutes:k, seconds:s} to (current date)

(* Adds a second *)
set s to s + 1
(* Zero pads the times so it can run the next command *)
set secs to text -2 thru -1 of ("00" & s)
set hrs to text -2 thru -1 of ("00" & h)
set mins to text -2 thru -1 of ("00" & k)

(* Runs date command as admin (requires password) this updates the system clock *)
do shell script "sudo date " & {hrs, mins} & "." & secs with administrator privileges
end try

(* This is the only editable number, If you want to make this speedhack slower this is the number you change.
2x speed hack = delay 1
3x Speed hack = delay 0.5
delay 0.01
end repeat

This re-syncs the time....I didn't finish this because you can never get down here
do shell script "sudo ntpdate" with administrator privileges
end try

PostMessage and SendMessage

How to send background keypresses.

Hello, This I feel is something that is completely misunderstood by most people so i thought i’d drop a knowledge bomb.

PostMessage and SendMessage are two c/c++ functions that allow for a programmer to access Win32 API messaging.

The parameters required for these messages are hWnd, wMsg, wParam, lParam.


hWnd: This is the handle to the window that you wish to send a message to in this case that will be the aion.bin mainwindowhandle.

wMsg: This is the message that you plan on sending, generally to impersonate key presses you’ll need to send multiple messages, below is a simple list.

KEY_DOWN = (0x0100),

KEY_UP = (0x0101),

VM_CHAR = (0x0102),

SYSKEYDOWN = (0x0104),

 SYSKEYUP = (0x0105),

 SYSCHAR = (0x0106),

LBUTTONDOWN = (0x201), //Left mousebutton down

 LBUTTONUP = (0x202),  //Left mousebutton up

 LBUTTONDBLCLK = (0x203), //Left mousebutton doubleclick

 RBUTTONDOWN = (0x204), //Right mousebutton down

  RBUTTONUP = (0x205),   //Right mousebutton up

 RBUTTONDBLCLK = (0x206) //Right mousebutton doubleclick


wParam: Quite simply this for key pressing is the Virtual Key Code of the key you want to press. A list can be found

KEY_0 = 0x30,   //0 key  KEY_1 = 0x31,   //1 key  KEY_2 = 0x32,   //2 key  KEY_3 = 0x33,   //3 key  KEY_4 = 0x34,   //4 key  KEY_5 = 0x35,   //5 key  KEY_6 = 0x36,    //6 key  KEY_7 = 0x37,    //7 key  KEY_8 = 0x38,   //8 key  KEY_9 = 0x39,    //9 key KEY_MINUS = 0xBD, // - key KEY_PLUS = 0xBB, // + key KEY_A = 0x41,   //A key  KEY_B = 0x42,   //B key  KEY_C = 0x43,   //C key  KEY_D = 0x44,   //D key  KEY_E = 0x45,   //E key  KEY_F = 0x46,   //F key  KEY_G = 0x47,   //G key  KEY_H = 0x48,   //H key  KEY_I = 0x49,    //I key  KEY_J = 0x4A,   //J key  KEY_K = 0x4B,   //K key  KEY_L = 0x4C,   //L key  KEY_M = 0x4D,   //M key  KEY_N = 0x4E,    //N key  KEY_O = 0x4F,   //O key  KEY_P = 0x50,    //P key  KEY_Q = 0x51,   //Q key  KEY_R = 0x52,   //R key  KEY_S = 0x53,   //S key  KEY_T = 0x54,   //T key  KEY_U = 0x55,   //U key  KEY_V = 0x56,   //V key  KEY_W = 0x57,   //W key  KEY_X = 0x58,   //X key  KEY_Y = 0x59,   //Y key  KEY_Z = 0x5A,    //Z key  KEY_LBUTTON = 0x01,   //Left mouse button  KEY_RBUTTON = 0x02,   //Right mouse button  KEY_CANCEL = 0x03,   //Control-break processing  KEY_MBUTTON = 0x04,   //Middle mouse button (three-button mouse)  KEY_BACK = 0x08,   //BACKSPACE key  KEY_TAB = 0x09,   //TAB key  KEY_CLEAR = 0x0C,   //CLEAR key  KEY_RETURN = 0x0D,   //ENTER key  KEY_SHIFT = 0x10,   //SHIFT key  KEY_CONTROL = 0x11,   //CTRL key  KEY_MENU = 0x12,   //ALT key  KEY_PAUSE = 0x13,   //PAUSE key  KEY_CAPITAL = 0x14,   //CAPS LOCK key  KEY_ESCAPE = 0x1B,   //ESC key  KEY_SPACE = 0x20,   //SPACEBAR  KEY_PRIOR = 0x21,   //PAGE UP key  KEY_NEXT = 0x22,   //PAGE DOWN key  KEY_END = 0x23,   //END key  KEY_HOME = 0x24,   //HOME key  KEY_LEFT = 0x25,   //LEFT ARROW key  KEY_UP = 0x26,   //UP ARROW key  KEY_RIGHT = 0x27,   //RIGHT ARROW key  KEY_DOWN = 0x28,   //DOWN ARROW key  KEY_SELECT = 0x29,   //SELECT key  KEY_PRINT = 0x2A,   //PRINT key  KEY_EXECUTE = 0x2B,   //EXECUTE key  KEY_SNAPSHOT = 0x2C,   //PRINT SCREEN key  KEY_INSERT = 0x2D,   //INS key  KEY_DELETE = 0x2E,   //DEL key  KEY_HELP = 0x2F,   //HELP key  KEY_NUMPAD0 = 0x60,   //Numeric keypad 0 key  KEY_NUMPAD1 = 0x61,   //Numeric keypad 1 key  KEY_NUMPAD2 = 0x62,   //Numeric keypad 2 key  KEY_NUMPAD3 = 0x63,   //Numeric keypad 3 key  KEY_NUMPAD4 = 0x64,   //Numeric keypad 4 key  KEY_NUMPAD5 = 0x65,   //Numeric keypad 5 key  KEY_NUMPAD6 = 0x66,   //Numeric keypad 6 key  KEY_NUMPAD7 = 0x67,   //Numeric keypad 7 key  KEY_NUMPAD8 = 0x68,   //Numeric keypad 8 key  KEY_NUMPAD9 = 0x69,   //Numeric keypad 9 key  KEY_SEPARATOR = 0x6C,   //Separator key  KEY_SUBTRACT = 0x6D,   //Subtract key  KEY_DECIMAL = 0x6E,   //Decimal key  KEY_DIVIDE = 0x6F,   //Divide key  KEY_F1 = 0x70,   //F1 key  KEY_F2 = 0x71,   //F2 key  KEY_F3 = 0x72,   //F3 key  KEY_F4 = 0x73,   //F4 key  KEY_F5 = 0x74,   //F5 key  KEY_F6 = 0x75,   //F6 key  KEY_F7 = 0x76,   //F7 key  KEY_F8 = 0x77,   //F8 key  KEY_F9 = 0x78,   //F9 key  KEY_F10 = 0x79,   //F10 key  KEY_F11 = 0x7A,   //F11 key  KEY_F12 = 0x7B,   //F12 key  KEY_SCROLL = 0x91,   //SCROLL LOCK key  KEY_LSHIFT = 0xA0,   //Left SHIFT key  KEY_RSHIFT = 0xA1,   //Right SHIFT key  KEY_LCONTROL = 0xA2,   //Left CONTROL key  KEY_RCONTROL = 0xA3,    //Right CONTROL key  KEY_LMENU = 0xA4,      //Left MENU key  KEY_RMENU = 0xA5,   //Right MENU key  KEY_COMMA = 0xBC,	//, key KEY_PERIOD = 0xBE,	//. key KEY_PLAY = 0xFA,   //Play key  KEY_ZOOM = 0xFB, //Zoom key  NULL = 0x0,


lParam: This is a structure and is quite complex. Since we are simply dealing with keypresses messaging this simplifies the lParam quite a bit.

Here is the bit mapping for the 32-bit

lParam: 0-15

Specifies the repeat count. The value is the number of times the keystroke is repeated as a result of the user holding down the key. The repeat count is always one for a WM_KEYUP message.

16-23 Specifies the scan code. The value depends on the original equipment manufacturer (OEM).

24 Specifies whether the key is an extended key, such as the right-hand ALT and CTRL keys that appear on an enhanced 101- or 102-key keyboard. The value is 1 if it is an extended key; otherwise, it is 0.

25-28 Reserved; do not use.

29 Specifies the context code. The value is always 0 for a WM_KEYUP message.

30 Specifies the previous key state. The value is always 1 for a WM_KEYUP message.

31 Specifies the transition state. The value is always 1 for a WM_KEYUP message. Return Value

const uint MAPVK_VK_TO_VSC = 0x00;

const uint MAPVK_VSC_TO_VK = 0x01;

const uint MAPVK_VK_TO_CHAR = 0x02;

const uint MAPVK_VSC_TO_VK_EX = 0x03;

const uint MAPVK_VK_TO_VSC_EX = 0x04;

uint lParam = (uint)repeatCount;

uint scanCode = MapVirtualKey((uint)[One of the VM_KEYS], MAPVK_VK_TO_VSC_EX);

lParam += (uint)(scanCode * 0x10000);

lParam += (uint)((extended) * 0x1000000);

lParam += (uint)((contextCode * 2) * 0x10000000);

lParam += (uint)((previousState * 4) * 0x10000000);

lParam += (uint)((transitionState * 8) * 0x10000000);

 return lParam;


Since you will need the Scan Code for the virtual key i recommend using function since it will make it easy. I hope this helps everyone.


Use Spy++ it comes with visual studio and enjoy.

iPhone 2G/3G/3GS connection timeout issue

On monday i had a very strange occurence, no matter how long i waited nothing involving data would load.  Safari would just spin my data connection and nothing was coming.  Maps would never load images and directions, well you can forget those.  Basically i couldn’t do anything using my iPhones connection (including twitter, FML, facebook, etc.).  Today one of my friends had the same issue…so here is the solution.

Go to Settings > General > Reset > Reset Network

Let it reboot and enjoy.

No high five there AT&T