Simple remote support software, remote access and presentations.
Follow SimpleHelpLtd on Twitter SimpleHelp Ltd RSS Feed

February 1, 2013
by George
16 Comments

SimpleHelp 4.1 – We’ve got something to show you.

It isn’t often that a software company gets to rework the foundations of its products. Development is often iterative with new features attracting new sales. There often isn’t enough time to go back and rework things, and drastic foundational changes are often painful to complete.

We took the tough decision 8 months ago to defer future feature work and focus on reworking how SimpleHelp is deployed. Our design goals were:

  • Simplicity – software should be easy to start using. No painful installers, browser plugins, or other complexity.
  • Robustnessindependent from any system or environment dependencies. It shouldn’t care whether you’ve upgraded this or uninstalled that.
  • Updating – software that can manage itself, update when it needs to, recover when it fails.

The great news is that we believe we have achieved them. We’re so happy with what we have produced that we are in the process of bundling it up as its own product so others can enjoy these benefits too.

What does this mean for SimpleHelp?

Good things and we think you will love it. SimpleHelp 4.1 is completely reworked to take advantage of these new foundations. It means trouble free on-demand support sessions: no fiddling with browsers, plugins, Java or anything else. It means robust remote access sessions: no dependencies on anything!

For example, here is a screenshot of our new customer application launch page below. One button – click and run. That is it.

SimpleHelp 4.1 is in an early beta, but it is public here:

(EDIT – SimpleHelp 4.1 is now fully released and available here)

We’d love to hear what you think! Contact us at contact@simple-help.com.

Why is this important?

It isn’t just about remote support. With stability comes the opportunity to implement some very interesting features:

  • Wouldn’t it be great to design tasks to execute on the machines?
  • What if these tasks could be simple scripts, or complicated workflows?
  • What about monitoring results? Gathering metrics? Reporting? Alerting.

All of these are now not only achievable, but dare we say it, almost done! With good foundations we can easily build great software in the future. For now, we’d love to hear what you think.

March 23, 2012
by Antony
56 Comments

Free EC2 Scheduler

Update (22 July 2012): 1.3 now available (see download links)

Amazon EC2 is a great platform for self managed hosting.  We’ve had AMIs (Amazon Machine Images – template machines with the SimpleHelp server ready to go) available on EC2 for a good while now and quite a few of our customers have opted to go this route.

Its easy to see why, just following a the steps in our guide lets them set up their own SimpleHelp server and get remote support sessions going in minutes.  Its no more difficult than signing up for an online service.

One thing we have been asked many times is how to schedule your instance (your virtual machine on Amazon) so that it starts up ready for the working day but then shuts down after it, saving you money (since you pay per hour on Amazon).

Until now we haven’t been able to point them at anything that can help. There are some command line tools but they aren’t for the faint of heart and they are a far cry from the simplicity of setting up the instance.  The instances are very cheap as it is but we can all do with a bit of extra beer/coffee money.

Thats why we’ve written a free EC2 Scheduler.  Its an app that you can run on Windows or MacOS (so you could run it on an Amazon instance if you have a tons of them to schedule or you can run it from a machine in your office or home).  It does all of the complicated stuff under the covers and gives you a nice clean simple interface to schedule the starting and stopping of your instances.

Freeware EC2 Scheduler

SimpleHelp Free EC2 Scheduler

Features

  • Start and Stop Amazon EC2 Instances in all regions.
  • Daily, Weekly and Monthly events.
  • Multiple schedules.
  • Multiple events of any type (start/stop/daily/weekly/monthly) in one schedule.
  • Multiple instance groups to apply schedules to.
  • Star (*) matching to group instances and apply a schedule across them (means you can easily schedule thousands of instances and automatically include instances which you spin up in the future).
  • Matching applied across all regions (so you can match and schedule instances within a region or across all regions).
How to use it
  • In the Schedules tab you can click ‘New Schedule’ to create a new schedule.  You can then add events and configure them to start or stop instances and set when they occur.
  • In the EC2 Instances tab you can click ‘New Group’ to create a new Instance group.  You can then give it a name and schedule.  You can then either:
    • A) select individual instances from the list and click ‘Add Instances’ or
    • B) match multiple instances by using a filter.
  • Filters can use star (*) to match anything, comma (,) to require another match (AND) and bar (|) to start an additional filter (OR).  This is actually very easy, for example, lets say you want to match instances called ‘Alice’ and ‘Charlie’, but not ‘Bob’, you can do “Alice|Charlie” and if an instance has ‘Alice’ or ‘Charlie’ in it it will be scheduled.
  • When you’ve got it all done click ‘Apply’ and the schedule will start running.  You can switch to the Log tab and click ‘Update’ to see whats happening.  Events will happen within about 5 minutes of the time you set.
  • If you want to stop scheduling just close the app.
Download (Windows, MacOS)

22 July 2012 – Version 1.3

  • New events to save all elastic IPs mapped to the instance group and restore them meaning you can do the following sequence; Store EIPs, Stop Instances, Start Instances, Restore saved EIPs.  Allows you to preserve EIPs across schedules on a large scale but also allows you to modify them as you like (any changes you make will be stored on the next ‘Store EIPs’ event.
  • New event to terminate an instance
  • Button to set the timezone you want the scheduler to work in (fixes issues people have had with the timezone being incorrectly detected)
  • Fixes an issue where instances from groups other than the scheduled one would be included in the events

15 May 2012 – Version 1.2

  • Fixes an issue where if the local computer was in a certain set of timezones the schedules would not run

Some more filter examples

  • * – match all instances
  • *Virginia* – match all containing ‘Virginia’ (all in Virginia region)
  • Virginia – same as above (stars are automatically added to the beginning and end)
  • Office|Home – match all containing ‘Office’ or ‘Home’
  • Virginia,Office – match all containing ‘Virginia’ and ’Office’
  • one*two – match all containing ‘one’ then ‘two’ further in (e.g. ‘one blah blah two’)
  • Virginia,Office|Ireland,Home – match all containing ‘Virginia’ and ‘Office, or, ‘Ireland’ and ‘Home’

 

 

March 20, 2012
by George
3 Comments

Speed in Remote Desktop Applications

The speed and responsiveness of a remote access session is often the factor that determines whether potential customers choose to purchase SimpleHelp or not. Yet optimising SimpleHelp purely for speed has a detrimental effect on other aspects of the software, including bandwidth usage and security. For instance, avoiding data compression results in a more responsive session on high bandwidth connections, but a poor experience on low bandwidth, or high latency ones.

SimpleHelp strongly encrypts and compresses all data transferred, yet is still able to capture, process and transmit millions of pixels per second. On my test machine, which has over two millions pixels, SimpleHelp is able to capture and process the entire screen in 20 milliseconds, supporting up to 50 frames per second! How can it then be that we recently received the following comment from a long-time customer:

For some reason, when I connect to a Win2003 Server machine on my LAN it takes two seconds to receive each screen update. All of my other machines are very responsive. What can I do to improve performance?

Further investigation showed an interesting diagnostic: CPU usage during the faulty session never reached 20%, indicating that for 800ms of each second the CPU was idle. What they could be causing such long capture times?

The answer lay in the server’s video hardware. The operating system was composing the visible screen contents by amalgamating them together, on the card itself, issuing updates to the card and having the card render the contents to the monitor. The traditional data path, from CPU to video card, was highly optimised by the card’s device drivers, but the reverse from card to CPU was not. The result was incredibly slow back transfer of screen data, and subsequently a lag-filled session.

“What can I do to improve performance?” In this case, disabling hardware acceleration reduced capture times from seconds to 30 milliseconds, increasing the frame rate from 1/2 per second, to 15 frames per second.

March 14, 2012
by Antony
0 comments

New SimpleHelp Logo

We’ve had it for a good number of years now and it’s served us well, but finally it’s time to retire our old logo.

Old SimpleHelp Logo

Old SimpleHelp Logo

Fare-thee-well old s-shape thingy.

We had pretty clear ideas about what we wanted in our new logo, the main thing being that it should be pretty strongly related to the product whereas the old s-shape we felt was too abstract.

To get a new one we used LogoDesignGuru.com.  It was an interesting experience, the idea being you set a ‘prize’ for the winning design and then multiple designers submit ideas.  It has to be said there were quite a lot of submissions from people that didn’t seem to read our brief but once we found a few that were clearly listening to our feedback we were able to steer things in the direction we wanted and ultimately we’re very happy with the result:

SimpleHelp New Logo

New SimpleHelp Logo

The new logo will be part of the v3.12 release and should also turn up on the website soon after.

 

January 30, 2012
by Antony
2 Comments

How do big bugs ever creep into software?

We’ve all had the experience of upgrading to a new version of some software or even trying some entirely new software only to find that it seems to fail in the most obvious and critical way, leading us to wonder in amazement “How can this be?  Who would release this without even testing it for this basic case?”

But even as that thought pops into our heads it doesn’t feel quite right.  We know that this is the real world – clearly someone wouldn’t put this much effort into writing an app, creating a website, publicising it without ever testing to make sure that it does actually do what it says on the tin.

Sure there are software companies that write better or worse code than others and there are differences in testing methodology and scope but its hard to imagine that anyone ever puts a product out there that they know isn’t going to work.

There’s a disconnect somewhere, but there’s also a pattern.

Where these elusive bugs come from

If you’re a seasoned support engineer then you may have worked through a few of these cases (or lots and lots of them).  You contact the company, report the issue, they can’t seem to reproduce it but (hopefully) everyone persists and eventually its tracked down to some bug in the code somewhere and patched.  If you’re a software developer then you’ve very likely been through this process yourself from the other end scratching your head wondering what it is you’re missing.

Recently when we re-released our 3.12 beta we found a few people reporting that they couldn’t connect to SimpleGateway machines.  Now, I should say – before we ever send anyone beta links we make sure they know that although we test the beta it could still have bugs but this must have seemed like a big one to have missed!  We had tested everything before the beta went out and we re-tested but couldn’t reproduce it – the connections went through fine for us.  After some more digging we got a log file (thanks Adam :) ) that showed where we’d gone wrong:

InetAddress.getLocalHost()

Its a Java call to get the local machine’s IP address.  It could hardly be more simple, even the documentation for the call is a one-liner, but it turns out rather than just getting the IP address from the network interface (would make sense right?) its doing some kind of lookup for the local host’s name (what kind of lookup depends on your OS).

So on our networks it turns out the lookup works, but on some of our customers’ networks it fails.  The fix is just to replace it with a call that works so we haven’t invested time to find out why (my best guess is its something to do with domains and Active Directory) but it does highlight the big reason why bugs can occasionally creep into software to everyone’s surprise – environments.

Making good software; why we love our Beta testers

No software product works completely in isolation.  Its always part of an environment – the OS, all the other apps installed, the little changes here and there that a user and admin has made over time, subtle little differences where if Jupiter is aligned with Uranus they can make juuust the right kind of tiny spanner to break something.

Part of doing good testing means trying to simulate different environments, picking out software and configurations that your customers have and that you think might cause issues and testing thoroughly on them.  But you can never recreate an environment perfectly and you can certainly never even hope to recreate all the possible mixes of environments out there.

So your testing environments don’t have the difference that triggers the failure it doesn’t matter how much you test – you can test all day long every day and never hit it.

What do you do about this then?  How do you make stable software?

You need more environments, environments set up by people that think differently to you, that do things differently to you and that end up with environments that are just a little or a lot different to yours – even when you try and guess how ‘other people’ would set them up (because when you do you’ll make a hundred subconscious assumptions that ‘obviously this is the right/only way to do that…’).

If you do test thoroughly then these types of issues are rare, but they are also going to crop up no matter how much you test in-house.  The only way you can really deal with them is to make sure that your software is tested on a range of environments that you didn’t have anything to do with.

Doesn’t sound like much fun for the people doing the testing but luckily there are some of you out there that like to get your hands on all the new stuff and maybe influence its direction.

For new companies and products starting out that don’t have existing customers to turn to it can be a challenge – life might be really quite rough and ready for a while.  Thankfully over the years we’ve built up a good sized list of treasured active beta testers but if there are any more of you crazy people out there then we always have room for one more…

 

 

December 14, 2011
by Antony
12 Comments

Ports vs Protocols, 80 and 443

When people are running their own server (like SimpleHelp) they inevitably need to understand ports in some sense.  At a minimum they need to understand that:

  • ‘Ports’ exist
  • They are a number
  • Servers run on them

Most of the time thats really all that is necessary.  You launch the server, it turns up on a port and you use that port when you are connecting to it.  If you’re using Amazon EC2 then things are even simpler – you just fire it up and it is ready to go like a website.

There are however some caveats, with complications arising around ports 80 and 443, and around HTTP and HTTPS.  Some common points of confusion are:

  • If its running on port 80 and its serving web pages, I can run it forwarded from another web server, right?
  • If its running on port 443, why can’t I access it over HTTPS?
  • If its going to do SSL/HTTPS then surely I need to run it on port 443?
  • Its running HTTP, but where do I set the HTTPS port?

All of these are perfectly valid assumptions and stem (I think anyway) from the fact that HTTP and HTTPS are well known protocols that run on well known ports: HTTP is synonymous with 80 and HTTPS is equally synonymous with 443.  It’s not very often that you come into contact with any web page that isn’t running on port 80 or any HTTPS website that isn’t running on port 443.

There is even a very good reason why you don’t come into contact with many websites running on non-standard ports too – because if you did your browser wouldn’t know where to find it.

If you already know all about TCP, HTTP, UDP, ports and protocols then you can skip to the end section to find out why this matters to SimpleHelp and what we’re trying to do about it (‘How we make it simpler, and more confusing’) but if you don’t then I’ve tried to pick out the crucial bits, condense it and go through it here to fill in the blanks.

IPs and Ports

If you’re not already clear on it all then this is likely all getting a bit confusing, so I’ll backtrack a bit.

Ports exist.  HTTP exists. HTTP runs on port 80.  Simple… but not entirely true.

Ports exist and are part of TCP and UDP.  TCP and UDP are layered on top of IP (Internet Protocol) – a medium for sending messages between computers.  That means that when your computer needs to speak to another computer it can (amongst other methods) either open a TCP connection or start sending UDP packets.  In both of these cases it needs two things:

  1. an IP address, and
  2. a port.

The IP address tells TCP and  UDP where to send the packets.  All the intermediaries in the network layer, like routers, need that IP address to know where to send your data.  A good analogy here is a phone number.  Knowing the IP address is like knowing somebody elses phone number – you can dial it and start talking.

But if computers had only one phone line they would only be able to talk to one computer at a time.  That wouldn’t be much use and here is where ports come to the rescue.  Along with your IP address you also always need to specify a port.

This is like dialling the phone number for a company but also having to dial an extension.  You don’t just get to speak to one person now, you can speak to hundreds or thousands, even though they are all at the same place. Applications running on a computer can listen for connections or messages coming in on any port from 1 to 65535 or they can make outgoing connections or send data to other computers on any port from 1 to 65535.

As you’re probably aware, to make life simpler for humans, there is a service called DNS where, if you know the DNS server’s IP address (like its phone number), you can ask for a particular website by name (e.g. www.simple-help.com) and it will give you the IP address so you can talk direct to it.  Now we can enter in the website name into the browser instead of an IP address. DNS though doesn’t tell you the port, and this is where protocols and default ports come in.

Protocols

When computers communicate, they send each other data – blocks of ones and zeroes that both sides know how to turn into something else – numbers, text, pictures, etc. They know how to do this because they are based on agreed upon standards. ASCII text for example explains how bytes map to letters.

Computers are capable of transmitting text and numbers, but need a way to know how they should communicate so that they don’t get into a mess.  This is where protocols and HTTP comes in.  HTTP is in reality pretty simple, James Marshall’s page HTTP Made Really Easy is a great in depth explanation but essentially it goes like this:

Your browser says (“Get me the root page or folder for www.simple-help.com, I am using HTTP version 1.1), like this:

GET / HTTP/1.1
Host: www.simple-help.com

The web browser reads that and responds with (“OK (code 200 means OK), its a web page, its 1020 bytes long, here it is”):

HTTP/1.1 200 OK
Content-type: text/html
Content-length: 1020
<html>...(1020 bytes of HTML)

Now your browser can speak to the web server and communicate with it, asking for pages, showing them to you, asking for other pages when  you click on links and hey presto – the web is here.

Now your browser can speak to the web server and communicate with it, asking for pages, showing them to you, asking for other pages when you click on links and hey presto – the web is here.

But there is one last thing missing.  We know the IP address of the computer because DNS told us where to find it, we know how to talk to the web server to get pages and images, but we don’t know its extension – we don’t know what port it is going to be on on the remote computer.  Except we do, because the HTTP specification specifies a default port: port 80.

Magically disappearing ports – 80 and 443

This is really the last piece in the puzzle and if we think back to the original issue it becomes clear why you hardly ever see websites on non-standard ports.  DNS can’t tell you what port a web server is on, only the IP address, so  your browser always has to assume that the web browser is going to be there on port 80.  When  you have another protocol like HTTPS, it specifies its own default port (443) so that means when you use HTTPS to connect to a website your browser is again always going to have to just assume its going to be there on port 443.

This also explains why you can’t run more than one web server on port 80 and 443.  If a connection or packet comes in – who does it go to? the first web server? or the second?

If you’re running multiple web sites from one computer they have to all be served from one web server application (like Apache or IIS), because then all connections go to that one application, and it can look for the website domain being asked for (e.g. www.simple-help.com) in the HTTP request and it knows which website the request is for.

It also explains why you never see any port when you look in a browser address bar.  Instead you see:

http://www.simple-help.com/

No port? But thats just because  your browser doesn’t want to complicate life for you by sticking “:80″ on the end:

http://www.simple-help.com:80/

or in the case of HTTPS, “:443″

https://www.simple-help.com:443/

How we make it simpler, and more confusing

But port 80 is just a default port.  There is no reason why you can’t talk HTTP over port 81, or talk HTTP over port 443, or talk HTTPS over port 9999, it is just that if you did, most browsers wouldn’t know where to find it.  In fact, browsers and web servers are perfectly happy talking over other ports, they just need to be told what port it is to use.  If you had a web server on port 1234 that could somehow speak HTTP and HTTPS then your browser could easily cope with either of those:

http://www.simple-help.com:1234/
https://www.simple-help.com:1234/

When a connection came in it would just be up to the web server to figure out whether the browser was trying to start a conversation with HTTP or HTTPS.

In fact, if the web server could distinguish between the protocols, you could speak all kinds of different protocols over the one port.  You could do file transfers, HTTP, HTTPS, remote desktop, TCP and UDP at the same time, all over the one port.

Just like SimpleHelp…

Yes.  This is why it can get a bit confusing when about why you don’t need to open up port 443 for SimpleHelp to enable HTTPS and SSL and why even though you can point your browser at SimpleHelp and get a web page, it’s not a good idea to set up a reverse proxy. Or why you don’t even need to specify an ‘HTTPS port’ separately from the ‘HTTP’ port, because normally, if you run a web server on port 80 thats what you get and all you get – a web server.  Its speaking HTTP, maybe HTTPS and that is it, and it doesn’t try to distinguish between the protocols because it doesn’t have to, it knows HTTPS connections are coming in on 443 and HTTP on 80.  When you run SimpleHelp on port 80 though, its doing a lot lot more than just that over the one port.

It makes it easier for SimpleHelp users to get through firewalls and NAT and it means SimpleHelp can serve up web pages, serve up secure SSL web pages, do secure SSL connections, get through HTTP proxies in a number of different ways, do UDP connections do other kinds of  uncluttered, faster TCP connections all with the user just having to think about one port.

There is no concept of an HTTP port in SimpleHelp, or a HTTPS port – we do everything over all the ports.  If you want to use HTTPS, no problem. In fact its already there on whatever port you have already congiured.  You don’t need to specify a particular port for it and it doesn’t need to use port 443 but I think it unnerves some people when you tell them either they can add port 443 and do:

https://yourwebsite.com

or they can just leave it as it is and do:

https://yourwebsite.com:80

because the server will usually be linked to from your website or embedded in it anyway, so the link will tell the browser what port to use and the customer / technician doesn’t have to.

It also means that occasionally someone assumes that because SimpleHelp is a web server, it can be reverse-proxied to from some other web server instead of just running it on another port.  In reality though, when the connection comes in to Apache or IIS before it is forwarded on, the servers will understand HTTP, but all the other protocols we do over that port is going to be lost on them.  It will work because we can do everything over HTTP if necessary, but it is a restriction that slows things down quite a bit it.

These aren’t the common case. Most people get set up fine and never come into contact with any of this, but when we get a question like “where do I set the HTTPS port?” or “how can I set Apache/IIS up to forward connections to SH?” we know we are probably in for a few more emails.

Like everything we do though, we want to make it simpler and better, so in SimpleHelp 3.12 we’ll be adding UDP support which, amongst other things, will allow us to often get a better connection even where we are being forwarded through another web server, and we have also replaced the session graph with a connection info button that gives you the lowdown on how you got connected and what you can do to tweak it and make it better.

Session Info (Connection Tuning)

Session Info (Connection Tuning)

This blog post is more than long enough though, time for a cup of tea.

October 21, 2011
by Colin
4 Comments

Logging Framework

Answers on a Postcard please…

Now that v3.11 has been released, and with a maintenance build just out, our thoughts have inevitably turned to our next release. Although it is early in the planning process, there is one thing that we want to improve in the next version and that is our logging framework.

Logging in SimpleHelp

Currently you can record technician and customer events including:

  •  Technicians logging in and out
  • Customers joining and leaving the queue
  • Technician joining and leaving remote support sessions

and at the moment you can choose to save the recorded information by either writing to file or sending an e-mail.

What would you like to log?

The reason I am telling you this, is that we want your suggestions for what you would like to be able to log. We have had several suggestions from customers already and we are building a large set of events we are looking to log, including:

  • When a remote machine is available
  • When a remote machine is off-line
  • Display username of logged on user on a remote machine

We are also looking into recording extra information about these events, such as logging the IP address of the remote machine and adding notes to a SimpleGateway service.

Another option we are looking to add in respect of logging the recorded information is having it posted to a website. If you have any other suggestions on where to log this information, we would love to hear them.

We want to make sure we have as comprehensive a list as possible to work with so we would love to hear from you what you would like SimpleHelp to log and how you would like the information to be saved. There is no need to send your answers in on a postcard of course, although you can if you want to. Alternatively, you can send me an e-mail at colin@simple-help.com.

October 11, 2011
by George
9 Comments

SimpleHelp iOS Mobile App

iPhone and iPad SimpleHelp
SimpleHelp Mobile is a great way to connect to customers and remote machines from any device with just a web browser. SimpleHelp comes with mobile support as standard and it can easily be accessed through the /mobile page on your server.

Customers who use SimpleHelp Mobile frequently will have their server address bookmarked, yet those with iOS devices (iPhones, iPads and iPods) can also easily add SimpleHelp Mobile to their device’s Home Screen.

To do this, navigate to the /mobile page on your server , press  and choose Add to Home Screen. Enter a name for this shortcut and press Done. The result is a SimpleHelp Mobile app on your home screen.