By Rob Woolley
With the COVID-19 global crisis, 2020 has suddenly become the year of the remote worker. Across many industries employees are trying to learn new technologies and discover ways to be productive in a very difficult environment. And working from home comes with many new challenges. Your VPN connection may slow to a crawl as your kids start watching Frozen 2 on Disney+ or your Wi-Fi connection may drop as someone in your building turns on their microwave.
Fortunately, software developers have successfully worked from home for decades. There are many useful tools that you can use to overcome problems with flaky network connections, connecting remotely to embedded devices, and getting access to your development tools.
You could have network connectivity problems.
If you have a company-issued laptop that you were able to take home, then you may already have access to all your applications and development tools. However, you likely still need access to your build servers and targets in the lab to get your work done. Alternatively, if you normally work on an engineering workstation you may now be working on your home computer and trying to get back into your development environment.
The most common technologies for accessing remote desktops include Virtual Network Computing (VNC), Microsoft Remote Desktop, and TeamViewer. If you need to use applications installed on your work computer, this may be your only option. These technologies have improved greatly over the past 2 decades by adding compression techniques and algorithms that reduce bandwidth and make using the graphical user interface smoother. If you are encountering problems you may want to try adjusting these settings or trying alternatives like TightVNC or NoMachine.
Playing the shell game
Using a remote desktop tool is useful when you need to access a desktop to use an IDE, however for many developers the command-line is king. Using Secure Shell (SSH) to get terminal requires less bandwidth and is particularly useful for accessing build servers that may not even have a desktop.
Most Linux desktops come pre-packaged with OpenSSH, but on Microsoft Windows you will need to download and install it yourself. The classic favorite is PuTTY with over two decades of maturity behind it. More recently Microsoft has started offering OpenSSH in Windows. All three solutions offer features like SSH key management and SSH port forwarding and which offer big productivity boosts.
The SSH key management lets you create keys for accessing remote machines. After generating a public and private key pair you may copy the public key to the remote machine. Then you may store your private key locally in a key ring. This private key may be used instead of a password anytime you try to connect. This can save you from repeatedly entering your password many times a day. As an added bonus this can also integrate with tools like git, Wind River Workbench, and Visual Studio Code to save you time when committing code.
The SSH port forwarding allows you to set up an SSH connection and redirect other applications over a tunnel. This is particularly useful if you need to connect a debugger running on your local machine to your target in the lab. You may not be able to make a direct connection to your target, but you can use SSH port forwarding to connect to another server in the lab and then redirect the debugger to the debug port on the target. Another useful trick is to connect to your target and use port forwarding to access services that don’t accept connections from outside devices. An example of this includes using web interfaces used by system administrators that only listen on the loopback (lo) interface.
The big downside of SSH is that most applications you run on the terminal will terminate if the connection is dropped. This is especially frustrating if you kick off a long build and lose your connection halfway through.
For situations like this the venerable GNU Screen or its modern counter-part tmux are excellent at saving you time and effort. They can be used to keep your terminal shells running between SSH connections. They also provide the ability to multiplex your terminal which means you can have multiple shells available just like tabs in a web browser. You may even split your terminal screen vertically or horizontally to show these shells in a tiled view. For developers that need to work in multiple locations or build environments this is a boon to be able to multi-task and preserve your environment. New users may also wish to check out Byobu, which provides enhanced profiles and convenient keybindings for GNU Screen and tmux to make it easier and convenient to use.
Intelligent connected systems
Our VxWorks real-time operating system comes with a tool, wrenv, to help set up a command-line build environment. We also provide Wind River Workbench, which is based on the Eclipse IDE and and provides a GUI environment. In both environment the compilers are build tools will be accessible and ready to build VxWorks projects. Our vxprj and wrtool command-line tools can create new VxWorks projects and help you configure parameters and select which components you wish to include. Using these commands developers using the CLI and GUI can collaborate together while preserving any project metadata. A developer may even use the command-line to automate building and deploying their application, then download the trace logs and visualize the trace logs it in our graphical System Viewer tool.
Our Wind River Linux platform also supports both the CLI and the GUI. Platform builds naturally take longer and lend themselves well towards the command-line. Many of the Linux runtime tools that we support like gdb, ftrace, uprobes, valgrind, perf, et cetera are command-line oriented. However, application development can take advantage of rapid development cycles and lends itself well to using an IDE. From within Workbench, developers can create new projects, build the application, and debug it in a graphical environment. We even provide the ability to gather trace information and visualize it in the LTTng System Viewer.
Our Wind River Workbench IDE even supports connecting to remote targets over a network connection. Using the Target Communication Framework (TCF) you may get a remote shell prompt, download and execute applications, debug applications remotely, and even access files in your development environment using our host filesystem. You may use a wizard in the IDE to help you set up your connection or you may run the agents yourself from the command-line.
If you can’t connect directly to your target from your desktop workstation, that’s not a problem. The Wind River proxy (wrproxy) allows you to access targets that are not directly accessible to the machine running Workbench. For example, you might run the proxy server on a gateway or firewall and use it to access multiple targets on the other network.
You can count on Wind River
These are just some of the available technologies that you may use to stay productive. To find out more information about these tools please check out our documentation and other resources on the Wind River Support Network (https://support2.windriver.com/).
Additionally, for a limited time, Wind River is offering access to tools, software, and services, which will be especially critical given the drastically increased number of you working at home under pressure to design, develop, and deploy systems. The actions we’re taking will address the significant challenges created by the pandemic that many of you are facing, such as limited access to labs with appropriate hardware for development and testing, delays in the supply chains that put development timelines at risk, the need for technical upskilling, and barriers to innovation. The offering is intended to enable remote work, accelerate developer capability to continue building next-generation mission-critical systems, and support you as this moment compels you to transform. For more information visit: www.windriver.com/covid19