Author Archives: robbsadler

Dear Google

Google Account Disabled


I have been locked out and not even told why.

For people like me who drank the KoolAid, this is a huge disappointment. That you would lock up my account (read: Phone, Email, Text / Hangouts, PlayStore, Google Docs) and not give me a way to get involved and make it right. It’s terribly frustrating.

Tomorrow I am headed out on a holiday when I was going to work on my writing (all on google drive / docs).

I have Gmail (and have told all of my contacts that I prefer it). I have hundreds of files committed to Google drive (including three novels), that I thought were backed up because I have a local Google drive, but the Google Docs files are only links unlike every other file (my bad for not checking this I suppose). But these files represent 100’s of hours of work and I was entrusting them to your cloud.

I have Google Voice and almost bought the Google cell phone plan.

Not anymore. My cell won’t receive or call out on my Google voice number. You locked up everything and won’t tell me why.

Up til now I have been telling everyone that Google products are the way to go, and that they work great. But this lockdown of my work and communications has me rethinking it all. Time to diversify.

I was going to blog about how integrated it all is, and easy to use. I will now instead be blogging about how fast you can lose it all with no way to communicate with the people who locked it down. Getting a person on the phone is impossible so far.

Is this true for any other phone service?

No phone number. Not even a small indication of why it’s locked out. What am I to do? You have monopolized my everyday workflow and given me no recourse.

This is no good. I will tell all of my friends. You had an evangelist. You still have one.

Very disappointed. I would share on Google+ , but I can’t get there.

People need to diversify – have their email with one provider, their cell service with another, their website, yet another, and their important files should not be trusted to the cloud. Keep a local copy. Back up every time.

Don’t trust Google. Your data will be held hostage.

You’ve been warned.

A former Google user.

MORE INFO: This apparently happens to people all the time. Sometimes their account gets unlocked magically after some time has passed. As far as I can tell, it’s rare to be told why your account was locked, and even more rare to get to speak with a person.

Why You Should use Nano – Right Now.

If you have ever stood up a web service, you know that there can be many obstacles to success. In the Microsoft stack, we went from leveraging the TCP/IP transport layer, to WCF (gotta love that XML config, and WSDL / SOAP), to WebAPI under MVC. I have spent days getting WCF working. I have spent hours getting WebAPI running. It’s all been some amount of good, as we got the job done, and it kept getting better. But it was never really easy, although WebAPI is not bad…

But Randy Burden and David Whitlark at Ambit Energy Labs have just released a spectacular little project called nano (it’s not at v.1.00, but we are using it now). I was told it would be easy to set up a web service. I expected given a day I could probably wrap my head around it and have something running.

I knew from reading about it that I would need a public class that had static methods that Nano would then turn into a web service. So I worked on my class and got a reasonable set of methods together to test with.

Ok, time to wire it up.

I downloaded the nuget package for Nano at, and then set up my little console app using the approach they had published in a sample. I replaced the name of the class and a few words on the program.cs code.

One minute later; yes one minute – I had a page up and running that enumerated the public static parameters, and would run my methods from a test page.

This is a slick little tool that you should definitely try. It can be extended in many ways – serving up data or web pages, making custom responses, etc.

But don’t take my word for it, give it a shot!

Getting Installed Browsers and Version C#

I ran into a few posts that solved the problem of getting the installed browsers on a Windows machine and getting the version that were very helpful.

Getting Chrome and Firefox version locally, C#

Finding All Installed Browsers in Windows XP and Vista – beware 64bit!

These snippets were very helpful. So now I will hand it combined to you on a silver platter as a downloadable Console App.

using System;
using System.Collections.Generic;
using System.Diagnostics;
using Microsoft.Win32;

namespace GetAllInstalledBrowsers
class Program
static void Main(string[] args)
foreach (Browser browser in GetBrowsers())
Console.WriteLine(string.Format("{0}: \n\tPath: {1} \n\tVersion: {2} \n\tIcon: {3}", browser.Name, browser.Path, browser.Version, browser.IconPath));

public static List<Browser> GetBrowsers()
RegistryKey browserKeys;
//on 64bit the browsers are in a different location
browserKeys = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\WOW6432Node\Clients\StartMenuInternet");
if (browserKeys == null)
browserKeys = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Clients\StartMenuInternet");
string[] browserNames = browserKeys.GetSubKeyNames();
var browsers = new List<Browser>();
for (int i = 0; i < browserNames.Length; i++)
Browser browser = new Browser();
RegistryKey browserKey = browserKeys.OpenSubKey(browserNames[i]);
browser.Name = (string)browserKey.GetValue(null);
RegistryKey browserKeyPath = browserKey.OpenSubKey(@"shell\open\command");
browser.Path = (string)browserKeyPath.GetValue(null).ToString().StripQuotes();
RegistryKey browserIconPath = browserKey.OpenSubKey(@"DefaultIcon");
browser.IconPath = (string)browserIconPath.GetValue(null).ToString().StripQuotes();
if (browser.Path != null)
browser.Version = FileVersionInfo.GetVersionInfo(browser.Path).FileVersion;
browser.Version = "unknown";
return browsers;

internal static class Extensions
/// if string begins and ends with quotes, they are removed
internal static String StripQuotes(this String s)
if (s.EndsWith("\"") && s.StartsWith("\""))
return s.Substring(1, s.Length - 2);
return s;

class Browser
public string Name { get; set; }
public string Path { get; set; }
public string IconPath { get; set; }
public string Version { get; set; }

If you run this code you will get results that resemble this:

Mozilla Firefox:
Path: C:\Program Files (x86)\Mozilla Firefox\firefox.exe
Version: 31.0
Icon: C:\Program Files (x86)\Mozilla Firefox\firefox.exe,0
Google Chrome:
Path: C:\Program Files (x86)\Google\Chrome\Application\chrome.exe
Version: 37.0.2062.124
Icon: C:\Program Files (x86)\Google\Chrome\Application\chrome.exe,0
Internet Explorer:
Path: C:\Program Files\Internet Explorer\iexplore.exe
Version: 10.00.9200.16521 (win8_gdr_soc_ie.130216-2100)
Icon: C:\Program Files\Internet Explorer\iexplore.exe,-9

Happy coding!

This article: HowToConfigureXDebug – NetBeans Wiki  is helpful, but you may need a bit of help to get over the top, so I have put a few hints in here in hopes to save others some hours I already spent.

I have now installed WAMP (Windows / Apache / MySql / PHP) and Netbeans several times dues to several laptop and hard drive failures, and kept getting stuck on this issue, forgetting the solution. The web pages I could find mostly show the correct information, however, some are old, and refer to old configurations, and none I found were completely correct.

I have found the fastest way to get up and running if you are going to program PHP under apache on Windows is to use the WAMP stack, which goes in smoothly.

Getting debug running is another story. Once you have installed WAMP, you need to do several things in order to get XDebug running. I am going to take you through the process (let me know if I have missed something – I am not an expert, just sharing scars so other can avoid!).

(This tutorial assumes that you have already downloaded WAMP from Bitnami’s site and run the install.)

1. Change the port to the one you wish to use. Quite often in a windows environment you will want to use a port other than 80 for PHP debugging (I am using localhost 80 for .Net and Visual Studio debugging). If you open the Apache configuration (which the Bitnami WAMP management program will open for you with a click):


you will find the port in this configuration in two places – here:


and here:


2. You then need to edit the php.ini file (for me, located at C:\BitNami\wampstack-5.4.21-0\php) to include the xdebug dll – there are lots of places out there that tell you things like there being a php.ini in the bin folder (which there isn’t), and old versions of the editing that are required – these have been taken care of since then and changed.

One great thing about WAMP is that the correct xdebug file is already installed and ready to enable.

You will also find a great little tool out there that helps you determine if XDebug is properly installed. But you do not need it if you use Bitnami WAMP. Setting the config as follows below (you have to match your install – I used the default which I highly recommend). If you are using the version of WAMP I am using, you will find this code near the bottom of the file commented out (using semicolons) and need to uncomment it and correct the dll file reference. The dll should already be in there ready to go. The full path and forward slashes are required.

;; Only Zend OR (!) XDebug

This will then activate XDebug. There are other helpful settings in this file for development purposes (like logging and caching), which are outside of the scope of this post, but are easily Googled.

3. Restart the Apache server:


4. Verify that your website works by navigating to:


You should get the default index.html file’s output saying

It Works!

in large type. This means Apache is serving up an html file from the htdocs directory (C:\BitNami\wampstack-5.4.21-0\apache2\htdocs by default).

5. Now create and edit an index.php file in the same apache htdocs directory and type


and then save it in that same directory.

4. When you now navigate to:


The php engine will echo out it configuration info. XDebug should show up in the output in two places.

here (near the top):


and here (near the bottom):


I decided to post after the fourth time of getting stuck on this because the information is not all in one place and the most complete info is not current.

Happy PHPing!


My Jess’s senior dance. TAFA Graduation

My Jess’s senior dance. TAFA Graduation 2013 3 ‘Like An Avalanche’ – YouTube Thanks for an awesome vid, Joey!

Selling my Harley Sportster 1200XL Custo

Selling my Harley Sportster 1200XL Custom ’97 low miles – Good Condition Great reliable fun bike.

#robbsadler loves #elmah

#robbsadler loves #elmah Happy to find this. Make sure that you consider security:

Master Page DataBind() will clear data on your page – remember!

I was working on a problem with a drop down list getting un-initialized and had run across this page:

c# – .Net Webform losing data – Stack Overflow.

This simple post is about a coder who was getting their ddl control reset every time a postback occurred. They had not yet learned about putting the initialization inside an if statement that only runs when the page is first loaded.

I had done this, and had not changed the code on this page for days and yet it stopped working.

Then I realized — I had been fighting with the links on the site.master.cs page that were causing the link to come up blank. I learned that when you have a reference in your head element on the master page like so:

<script src='<%# Helper.ResolveMyUrl(“/Scripts/libs/jquery-1.7.1.min.js”) %>’ type=”text/javascript”></script>

You need this:

Page.DataBind(); // (yes, but not quite…)

in your Page_Load so that the function call will be resolved. I added that line and my links all started working — and my drop down list started clearing on a postback. But there were enough hours between these discoveries, that I hadn’t made the connection.

What I really needed was:

if (! Page.IsPostBack)  // (better, but not yet done…)

since the DataBind affects all of the data bound controls on all of the pages that use it as a master page.

But wait, there’s more!

I thought this had cleared up my issue, but then I found that another control that I initialized lost its value. It turns out that this DataBind on the entire page is not a good idea. Instead you need to be specific about the stuff on the master page. So I did this:

if (! Page.IsPostBack)
  Page.Header.DataBind(); // initializes the script references
  LoginView1.DataBind(); // initializes a link inside LoginView1

Ok, I think that does it. I feel better about a more qualified / constrained approach too.

With this qualification, I got the initialization on the links I needed, and didn’t interfere with the drop down lists that were initialized once and then needed to remain populated. I didn’t find this anywhere, and so I am hoping that it will save someone the couple hours I spent.

Happy coding!

Sql Server remote connection troubleshooting

Resolving could not open a connection to SQL Server errors.

Really helpful link for troubleshooting through the issues for why you may not be able to connect to a Sql Server remotely. It steps through several possible issues. I had to google how to fix them, once I identified them, but this was a great help in discovering some of the issues.

For me, in short it was the following:

1. Make sure you have only one firewall running (I had Norton and Windows firewalls running).

Go to Windows Firewall settings and select “Advanced settings”


Then ensure that all of the firewalls are set to off (WARNING: don’t turn off Windows firewalls unless you have another firewall running, and don’t configure firewalls unless you know what you are doing or you could lose data, your identity information, etc. If you have any doubts, get someone to help you!)


This is how it will look after those second, redundant firewalls have been turned off.

2. Make sure the SQL Server services are enabled (SQL Server, SQL Server Browser minimally in order to see the Server on another box).

3. Enable the communication protocol that you are using (typically TCP or Named Pipes)

4. Allow port 1433 and possibly port 1434 through the firewall and limit the connection to your local subnet, or the IPs that will be connecting to the server.

5. This was the kicker for me – go into the configuration for the TCP and enable the ip addresses that you need. For me, since this server is behind a firewall, I allowed all connections.

Hope this saves someone the extra hours I spent finding out the final steps.

WIndows 8, VPN, Error 942

Windows 8 VPN error 942 « Codes from the field.

if You are having problem with Windows 8 and VPN, this may be the issue. The security protocol is not set at all!