Yosemite 10.10.3 – F5 Big IP Edge VPN

So as any curious developer I installed the latest 10.10.3 beta Yosemite update. One issue from then on connecting to BigIP Edge Webclient would throw and SSL Connection Error, over and over…in FireFox, Safari, and Chrome.

So I had the IT administrator send me the F5-BigIP-Edge-Client for Mac, installing this solved my issue immediately. However, when I got home the issue changed…when I connected using the Client it would crash immediately…

Apparently there is a bug in this program with multiple monitors…to solve the issue I changed my Preferences to the following:
Screen Shot 2015-03-09 at 5.56.25 PM

Hope this helps you if you happen to be in the same unusual boat as me…

Chef what is it and why you should of been using it all along…

Configuration Management is nothing new, since the advent of System Administrators scripts have been written to stand servers up and configure them to at least a basic level.

What’s new? Chef.io and puppet

These amazing tools allow you to configure each of your systems differently or group them together to be configured in a unified manor.  This is extremely valuable because it allows for a somewhat slower startup time to a 0 time everytime after that.  And as an Systems Administrator can tell you, if you have stood up anything you’ll likely need to stand it up all over again at some point.

Look into these tools and really try to see them for the saviors they are, the god sends that shall guard your IT fortress with all the powers of Zeus behind them.

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.

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 time.apple.com" 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 http://msdn.microsoft.com/en-us/library/ms645540(VS.85).aspx.

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 http://msdn.microsoft.com/en-us/library/ms646306(VS.85).aspx function since it will make it easy. I hope this helps everyone.


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