Managing multiple remote desktop connections

In my day-to-day work, I typically connect to over a dozen servers via Remote Desktop Protocol(RDP). While I don’t connect to every one on a daily basis, there are days that I connect to nearly a dozen, and there isn’t a day that goes by that I don’t connect to at least 2-3. Up until now, I’ve been using Windows 7 jump lists. This is OK, but I ran into a limitation, in that Win7 limits the ‘most recently used’ items– so all my servers don’t always show up.

Well, I recently found a solution. The “RDCMan”, or “Remote Desktop Connection Manager” tool, directly from Microsoft. This is a free tool that lets you manage multiple connections, configure groups, sub groups, etc. You can also define settings at the group or server level, which makes things very quick to setup(i.e. many of my servers use the same credentials, so I can set the credentials at the group level, instead of the server level).

The GUI is a little dated, but still fully functional. I can connect to the desktops within the RDCMan frame, or I can ‘undock’, and have the RDP connection free-floating– this is particularly good for a specific RDP connection that I leave open all day, and need quick and easy access to.

Here’s a screenshot, and an associated link to more information:

http://blogs.technet.com/b/exchange/archive/2010/06/11/3410093.aspx

Download link:

http://www.microsoft.com/en-us/download/details.aspx?id=21101

 

How to always run applications as administrator in Windows 8

I recently got a new laptop with Windows 8. I’ve been trying to not hate the removal of my start menu too much. One of the changes they also made, is that User-Account-Control can’t really be disabled without a registry change– and if you make that registry change, most of the Metro/Modern UI apps will no longer work! Having certain applications not run as administrator can really be a problem, however… Visual Studio needs admin access to create IIS web applications, for instance. Additionally, shelling out to cmd.exe for doing a multitude of different things will be very frustrating when you don’t have those admin privileges that are rightfully required to do administrative things…

Unfortunately, there’s no easy GUI way to tell Windows 8 to always launch applications as an administrator. You can right click on a shortcut and select ‘run as admin’ each time– or even define a shortcut and set ‘run as administrator’ on the compatibility tab– but this doesn’t work if you use start->run->’cmd.exe’, such as I do… It also doesn’t work if you’ve pinned solutions to your task bar, such as I do for Visual Studio.

Thankfully, after some searching, I found a solution. You can have any executable on your computer run as admin(assuming you have permission to do so), by adding entries to this registry key:

HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\

Simply add a new string value, paste the full path to the executable(such as c:\windows\system32\cmd.exe), and then edit the value to say ‘RUNASADMIN’. Next time you start that executable– through a shortcut, by going to start->run, through entries pinned to your taskbar, or double-clicking on an associated file in explorer, Windows 8 will actually run it as an admin, as you require.

Windows 7 not saving RDP credentials when connecting to servers

In my line of work, I connect to many servers daily. I have these pinned to the Windows 7 taskbar, enabling me to easily connect to a server by simply right clicking on the taskbar icon and selecting the server. One thing that has annoyed me with Windows 7, is that when connecting to a server, I am always prompted for credentials– even if I’ve selected the option to save the credentials.

Well, I finally looked into it, and found a way to fix this. I’m sure Microsoft would claim there’s a “security” reason that it’s not enabled by default– but IMO, the checkbox to save credentials shouldn’t be there if it’s not configured to work…

To enable Windows 7 to save RDP credentials when connecting to Windows 2008 R2 servers, you must complete these steps on your client computer:

  1. Start->Run->gpedit.msc
  2. Navigate to Local Computer Policy -> Computer Configuration -> Administrative Templates -> System -> Credentials Delegation
  3. On the right, double click ‘Allow Delegating Default Credentials with NTLM-only Server Authentication’. Set the setting to ‘ Enabled’, click ‘Show’, and enter ‘*’ for the Value. Click ‘OK’ when done.
  4. Do the same with ‘Allow Delegating saved Credential with NTLM-only Server Authentication’

Now, the Remote Desktop client will remember your credentials– including ones you’ve previously saved. This may seem like a minor thing, but shaving seconds here and there will turn into hours saved later– plus any frustration/annoyance/distraction from fat-fingering passwords when connecting.

EventLogSession/EventLogReader error remotely accessing Windows XP/W2K3 machines

Sometimes, when searching Google it takes all of 30 seconds to find an answer to a question. Other times, it can take minutes, or even hours. I’m writing this blog post, because I was just researching an issue that took me hours to figure out– and in the end, it was so simple, yet disappointing at the same time…

For the new version of Overseer, the network monitoring software I write, I was adding support for extended event logs– these are the “Applications and Services Logs” event logs below the regular ones in W2K8’s event viewer. I found I had to use the new EventLogSession/EventLogReader API. I found it required .NET 3.5, so I upgraded my software to require .NET 3.5(it was v2 compatible up to this point).

I got things working, and I was able to monitor event logs(new and old style) using the code remotely accessing Windows 2008 and Windows 7 computers. I got an error when accessing Windows XP machines(and I’m sure W2K3 machines, but I didn’t have any to test with at the time). The error was “UnauthorizedAccessException – Attempted to perform an unauthorized operation.”  To most, including myself, this seems like a permissions issue– so I looked into all sorts of potential impersonation problems, etc. I scoured the web looking for anyone even having the same problem, but didn’t find it.

Eventually, I found a reference buried in some forum reply, that one of the API calls that the new EventLogSession/EventLogReader calls is Vista/W2K8+ only. That’s just great– the whole API is now Vista/W2K8+ only… Why Microsoft wouldn’t add a compatibility layer for Windows XP and Windows 2003 is beyond me… But once I found this, I at least was able to move on, realizing that I had to detect the version of Windows running on the remote machine and use the different API’s accordingly… If only Microsoft had included proper documentation clearly specifying this new API was Vista/W2K8+ only, had an error message indicating something of that sorts, or actually did the right thing and wrote a compatibility layer into it, I wouldn’t have wasted so much time on such an unproductive search.

 

 

Perfectionism can be a major roadblock to productivity

I often look back at my younger years, and see all that I was able to accomplish in a small amount of time. Applications or websites I was able to create, etc. Everything seemed so easy, and I was able to just get things done. I wonder why that isn’t the case today. I tell myself it’s because I’m seasoned and what I write is simply better today– fewer bugs, fewer problems, better design, etc… And that may be true, but how much of that is holding me back from really being productive? Is it better to create it and then perfect it, or create it perfectly the first time?  There’s a balance to be found, but I think I’ve been leaning far too much towards ‘perfection the first time’…

I just read this article about Perfectionism vs. Success, and it strongly resonated with me. I often try to make things perfect the first time. Often times, I get so obsessed with doing something the ‘right way’, that it keeps me from doing it at all! This is particularly difficult when I don’t have an external force driving me to get something done– such as a client or customer request with a deadline(implicit or not). Recently, I’ve been acknowledging to myself that I have a problem, but I’ve incorrectly identified it as a lack of organization– which has led me to creating organizational tools and processes to “get organized”. While helpful, it doesn’t address my core problem of trying to be perfect.  Interestingly enough, creating my organizational tools went far quicker than expected, as I went into it with a “good is good-enough” attitude– as I know the tools won’t be customer-facing.

So, from here on out, I’m going to try to make a conscious effort to “just do it”, remembering “it doesn’t have to be perfect”– the first time, or potentially ever.

Always have a software schedule

As some of you may know, I spend a large portion of my time contracting with a specific client. The rest of my time, I spend doing operations things, and trying to develop and promote my products, Overseer Network Monitor and Employee Scheduling Pro. The time demands of my primary contract, along with personal time demands, sometimes leaves me very little time to develop and/or promote my products. It can be quite frustrating at times. In the past 6 months or so, I’ve been doing my best to force myself to do a little bit every week. I created a whiteboard that tracks how many days it has been since my last release, blog post, sale, etc. for each of the products. As I see this number go up, I get more motivated to do something with the product so I can make a release, and therefore a blog entry, and hopefully all this will spur sales(or potentially do some marketing to make the sales # move)…

While this has been helpful to keep me from being totally idle on my products, I’ve found it’s caused a different problem. I’ll notice late in the week that a number is high, and be motivated to make a release to bring that number down to 0. So, I’ll search my feature database for something I can bang out in a couple hours or maybe a day– tops… If I have a bit more time, I’ll do a couple to make it a more substantial release… The problem with this, is I’m always pressed for time in a week– so only small enhancements get done… The exception to this rule, is when I have a customer specifically asking for features– then I focus all my development efforts on getting the list of features implemented that the specific [potential] customer requests. I feel I get a lot done in this manner, but it often spans multiple periods of my non-contract time. This is good, because I stay focused.

After noticing this pattern and doing some research online, I’ve come to the realization that I can’t continue without a little more structure. I need to start planning software releases– to create a simple schedule. I need to take some time, sit down, and choose a certain few features(big and small) to be included in a release. I then have to schedule out how long that’ll take, and get it done– accepting upfront that this will take numerous sessions– I can’t bang out a substantial release in an afternoon as I’ve been doing…

Visual Foxpro– I need a drink!

This week I had a project for a client that involved writing code in Visual Foxpro. For those unfamiliar, this is a language/development platform that goes back multiple decades, and is based on DBase– a ‘data basic’ type of language… I started my professional career using VFP, and wrote a lot of code. I went beyond what most VFP developers ever do with it, by using extensive graphics for touchscreens, creating and maintaining complex web services, etc. Contrary to public opinion, the development platform is very capable…

Regardless, it’s also a major pain to work with. The IDE crashes constantly, the ‘compiler’ can’t catch even the simplest of mistakes, etc… I dread the projects that require me to work directly with VFP(more than tweaking a few lines of code, anyways)… It’s frustrating and slow to get anything done. Speed and efficiency is picked up if you develop with it daily, but if you take a hiatus for a while to develop in a contemporary language(such as C#), coming back to it will just be very frustrating…

While VFP is a pain for me to work with as a developer, I have to respect the fact that a lot of solid programs are written in VFP. Programs that have been around multiple decades, and still work on modern hardware without tweaking. Many businesses run on software written in VFP, even if they don’t know it. The question for many of the companies with these products is when/if to convert to a modern development environment such as C#/.NET… While every business has to weigh the pros and cons of this, I personally see the Windows operating system support for VFP waning, and it may not run very well 5-10 years from now… Personally, I’m curious about the .NET Compiler for Visual Foxpro, which lets you compile VFP code to run on the .NET development platform. This might ease the pain for some software companies looking to make a transition. For the others, they’ll likely have to work into their schedules time to port their VFP code to .NET.

Multiple monitor RDP connections

I typically work with 4 1080p LCD monitors on Ergotron arms. I have the same setup and layout at work as I do at home. When I remote in from home, I’ve found in Windows 7, I can check ‘use all my monitors’, and the remote desktop actually uses all the monitors, even in my non-square and non-linear layout(my monitors are roughly in a + shaped pattern).

The one negative of this, is that the speed wasn’t great. Flipping windows and such, there’d be a noticeable lag. It was usable, but not comfortable. I figured this was due to my 1Mbps upload speed at the office. I watched a bandwidth meter on the router, and I noticed it wasn’t maxing out the 1Mbps upload speed… I have noticed, however, that when I do a speed test, the upload always starts slow, and doesn’t reach full speed for a couple seconds… I was thinking, “maybe the RDP packets are always in the start of that incline and can never reach full speed”…

Well, recently I found that Time Warner Business Class in my city just added ‘Wide band’ service. I was able to upgrade for a reasonable price to 35/5 service– that’s 5Mbps upload speed! I can use the bandwidth for other purposes as well, but I was particularly excited about having a faster RDP experience when I do work from home, trying to be fully productive with all 4 screens…

Well, I just tried the connection, and the RDP experience is MUCH better! I don’t see a constant lag when working. I looked at the same router bandwidth meter, and it was often spiking to 2Mbps or so– definitely above the 1Mbps it wasn’t reaching before… So I think my hunch about the upload connection starting slow was definitely the issue… To prove how awesome the connection was, I played a video someone posted on facebook, and it was actually watchable over RDP! Sure, it maxed the 5Mbps bandwidth meter, but it was watchable! I did try to put it full screen to see how I could push it, and that didn’t fair so well… But I’m certainly not watching video through an RDP connection for any real purposes…

Internally used, custom software

I’ve considered writing some internal software for managing license fulfillment, customer support requests, enhancement/bug tracking, time tracking, and a bunch of other things as they come up. I previously wrote such a system at a former employer/current client, and it’s paid dividends for their business, many times over– far more than a canned off-the-shelf solution could ever do.

I’ve put this off for so long, as it means time away from client work that directly pays, and product work that indirectly pays later. I’ve used a bunch of  different sub-optimal solutions up until now(Excel spreadsheets, a simple license-generator, etc.). I was looking at a canned solution called FogBugz, and realized although it is kinda nice, it can’t offer me the benefits of a custom solution…

While reading on FogBugz site, I read “Good software is not an accident. It is a result of a process designed to produce good software.”  That really rung true– having a unified system to manage feature requests, bugs, support incidents, time tracking, license generation, etc. is very important for me to be able to run my business– primarily to create excellent software. The splintered approach I’ve been using is inefficient and easy to ignore and forget about– a unified system will force me to use it for one aspect of my business, which will remind me to use it constantly for the other parts.

So, I’ve started working this week on “SMS”– the ‘Sensible Management System’. This name is a clear knock-off of the system I developed for my former employer, which was called TMS(Ticket Management System)– but I really wanted a good acronym for the system, and something that was beyond ‘tickets’, as this system will do so much more. I have no plans to release this as a public product, due to its very custom nature, but I think the time I put into it should pay dividends someday in being more organized, and saving time by shortening iterations in business processes.

New releases, busy week

This has been a busy week involving multiple new releases– one for Overseer, my network monitoring software, and the other for Employee Scheduling Pro, my employee scheduling software. In addition to this, I’ve had more hours than usual for a regular client of mine… Overall, it’s been a very busy week.

I’ve also been looking at adding support to Overseer for USB temperature sensing units. I ordered a few for prototypes/development units, and hope to add a budget alternative to the extremely expensive Sensatronics EM1 option that Overseer currently supports.

New office, new child, etc.

Well, I haven’t written in a while as things have been quite busy. I moved into a new office in early May, and my wife gave birth to our first child, Lily, in mid-May. I recently got back to work, and I’ve been playing catch up with a new release of my Employee Scheduling Software and client work.

Things have been going well– our baby is sleeping decently at night, and it’s really awesome to be a dad. The office outside the house was clearly a good decision– it helps me separate business and personal and gives me the quiet time needed to be productive during work hours.

Office Space

Well, after 3 years of working from my home office, I’ve decided to lease office space. With the impending birth of my first born child, and our decision for my wife to be a stay-at-home Mom, continuing to work from home would likely make me far less productive than I have been. Additionally, I have a friend that also is looking for office space that will use an office in the suite I lease and pay some reimbursement to me to offset the cost. This friend is also a salesman who may be able to work for me on a commissioned basis to help expand Sensible Software and open new doors.

Overall, I’m very excited about this move, and I’ve been spending a decent amount of time in the past 2-3 weeks looking at office suites, managing related things(insurance, internet connection, computer/infrastructure changes, etc.). If all goes well, I should be entering into a lease shortly, which should start May 1st– with move-in commencing soon thereafter.

Shorten iterations for increased productivity

I’ve been a software developer for over 10 years. I’ve worked using multiple design paradigms– Waterfall, Cowboy, and something like Agile. I personally prefer an Agile software development method– many regular releases as customers need them, versus huge planned releases. One of the keys behind successful and efficient Agile development is shortening iterations.

Iterations are all over. Every time I check in source code, build on my build machine, and run it on a QA machine(and potentially go back to change more code to fix/enhance something), is an iteration. Other iterations exist when shipping changes to a website, processes for fulfilling license keys, etc. Each step in the process takes time– being able to eliminate/streamline that process will pay dividends time and time again, in exchange for a little time upfront to automate it.

Even better yet, is being able to automate iterations so they’re triggered and performed automatically. One of these, is automatic fulfillment of license keys. I sell two of my products, Overseer Network Monitor and Employee Scheduling Pro, online. When someone purchases a key, they expect that license immediately. While it may take time to write the appropriate code to integrate with the shopping cart, doing so pays off two fold– one, in that I don’t have to spend the time manually generating the key and sending it to the customer, and the other is that the customer gets it immediately, which makes them happy(happy customers are good customers).

It’s important not to lose site of this… With everything you do, think about how many times you do those steps, and think if you can automate the process– and potentially even the triggering of that process. You’ll thank yourself later.