This post was originally published February 19, 2019 on AbleBlue.
In my former life as a consultant, I was constantly aware of the impact that the pace of cloud technology evolution has on IT professionals. Recently, while moderating a panel at Office and SharePoint Live! 360 in Orlando, I asked the question: “IT Pro vs. Developers, is it time to bury the hatchet?” The panel consisted of four great friends of mine, Eric Shupps and Ben Curry, representing the IT Pro side of the house; and Rob Windsor and Paul Schaeflein, representing the Developers.
As I watched, listened, cajoled and questioned, the general consensus from the developers was that IT still struggles with understanding “modern development and development tools.” While IT insists on Developers following a standard of practice, the IT pros themselves still use haphazard and sometimes risky procedures for themselves, and do not hold their IT teams to the higher standards development uses.
The general consensus from the attendees was they supported that contention. We heard story after story from the IT pros in the audience about how they are not supported with the right tools to become better, that the IT organizations are not investing in them and their future, that they are too busy fighting fires to take the time to learn something new.
While I do understand the reality that we are all busy, as a trainer in my previous life I recognize that organizations have to train their people and allow them the time to “Level Up” their skills. I think it is necessary for the employees’ well being, their organizations’ longevity, and ultimately the supportability of the systems they manage.
Microsoft makes it easier than ever for IT pros to get up and running with the necessary tooling to dip their toes in development waters, while making their job easier and providing a better process for the companies they support. IT pros may start by initially switching from PowerShell ISE to VSCode with the PowerShell Extension. If you are “just writing scripts,” step up and try writing PowerShell Modules instead.
Here are four ideas to get you started.
I am always thinking about how repetitive a task is. If I have to do it more than 2 times I’ll try to figure out how to be more efficient. For example, if you have ever written the same script over and over, start thinking about creating PowerShell Modules for the functions that you use repeatedly. These could be anything from routine maintenance tasks, to heroic data restoration tasks. By thinking about the tasks that would have to be executed in an emergency before the emergency happens, your stress level will be much lower when the day comes that you need the module.
Another idea to save time is using snippets when writing your code. There is a fantastic community project for Visual Studio Code (VSCode) called Awesome Snippets that will get you started. I have some customers that have created their own snippets that they share as a team.
On a recent project, I was concerned about the number of folks that were going to be messing with the module I was writing. I noticed a few individuals were not providing documentation, examples, or full sentences in the help text. Now this may not seem important, but if they are failing to properly document the code, how much attention are they paying to the code itself?
Back in November I had the pleasure to hear Thomas Vochten, MVP speak at SharePoint and Azure Connect in Haarlem, Netherlands. He demonstrated an approach to testing PowerShell using a module called Pester. This module ships with Windows 10 and there are updates available from the community. There are two reasons I really like this approach.
There is a “tax” associated with creating tests, however — it takes time that does not directly impact the delivery of your PowerShell code. I admit, I am not “writing the test first and then writing the code,” in true TDD fashion. In fact, the first module I used Pester to test was a module I thought was nearly complete. That is where the PesterHelpers module can bootstrap a bunch of tests for you by reading your existing module and generating tests for you.
I use version control for nearly everything I write. My documents are in OneDrive, not a version control system per se, but it is backed up to the cloud on every save. My blog posts are written in markdown, and version controlled in Azure DevOps (aka VisualStudio.com). All of my PowerShell modules and scripts are in separate projects by Customer and/or Project and stored in Azure DevOps. It doesn’t matter if it’s Azure DevOps or Github.com or any other system you are familiar with, most of these systems use a flavor of Git for version control. I think that every technical person should have a grasp of the basics of Git. You need to be able to Fork, Checkout, Branch, Add, Commit, and Merge with confidence.
I am pretty comfortable with this process because I use it every day. Do I NEED to? No, could I use OneDrive for my module files, sure. But by forcing myself to implement these practices, I can talk to a developer about Git and the issues they face with a shared understanding. I can transition from working on my Surface on the couch with my dog Ruby, to my home office, to the Mac at my downtown Austin office, with ease and confidence. It makes me comfortable knowing I have all the versions of my edits stored safely somewhere other than one hard drive. Further, as soon as you add a team, it becomes significantly easier to share your stuff.
Azure DevOps – Project Management, Version Control, Build Management, and Continuous Integration
I like to think of DevOps as thinking end to end, or holistically, in terms of the lifecycle of the work. From defining the problem to writing the first line of code to delivery to applying updates, “lifecycle” DevOps thinking will help your work be portable. For example, that cool module that you built that may, someday, need to be updated — are you the only person who has the code? Can your team update it confidently or update it without you? Can they change the code without erasing your farm, locking you out of the tenant, or causing other issues? Do they have to call you on your vacation…just in case?
DevOps is about supporting the enterprise and managing the lifecycle of your code whether you are a Developer an IT pro or a combination of the two. By creating testable code, you can configure your version control system to reject check-ins that do not pass the tests. You can configure the build server to automatically deploy your runbooks when they do pass the tests, so that they enter production as efficiently as possible.
In other words, I like to enjoy my vacations, and I assume you do, too
What items are on your shortlist for “The Next Thing” you want to learn to level up for your role?
|Update your feed preferences|
The MDX Toolkit supports:
- Android and iOS apps developed on the Xamarin platform
- Apps developed by using the PhoneGap (Apache Cordova) framework
These are the third-party frameworks tested and supported by Citrix to work with the MDX Toolkit.
Other third-party frameworks, such as Swift, are not guaranteed to work unless explicitly stated.
Note: The steps in this technical note apply to both IBM and VT terminals, however the example code refers to an IBM terminal. The event names are slightly different for VT terminals.
Reflection VBA macro code is stored in Reflection settings files (.rd3x, .rd5x, .rdox), along with other necessary configuration details for each host session. If you provide a group of users with a settings file that includes custom macro code, then it later becomes necessary to update this macro code, you could simply provide updated settings files to everyone, however, any personal settings that have been saved by individual users would be lost.
To avoid the problem of losing personal settings, and to simplify administration of Reflection VBA macro code among groups of users, Microsoft Visual Basic for Applications Extensibility can be used to enable everyone to receive updates automatically on a regular basis; for example, each time a session is opened. Code can be added to the IbmTerminal.BeforeConnect event in VBA that will update the local VBA project with new code from a central location each time a settings file is opened.
How It Works
- Create and test the VBA macro code that will be distributed to end users. Place all code that needs to be centrally managed in a single VBA module. Name the module something other than Module1. The example in this technical note uses SharedMacroCode.
- When custom code for this module is complete, export it to a separate text file by clicking File > Export in the VBA Editor. Accept the default file name SharedMacroCode.bas.
- Copy SharedMacroCode.bas to a central location accessible to all users who will need it, for example, Z:remotelocationSharedMacroCode.bas.
- Create a new settings file (.rd3x, .rd5x, .rdox) for distribution to end users that will include the VBA Extensibility code necessary to dynamically import this remotely located macro code. Open the Visual Basic Editor, click Tools > References, and select the Microsoft Visual Basic for Applications Extensibility check box:
- In the Project pane of the Visual Basic Editor, under Reflection Objects, double-click ThisIbmTerminal (or ThisTerminal for VT sessions) to open the associated module for the Terminal object.
- Select the IbmTerminal object from the drop-down object list above the Editor pane, then select its BeforeConnect event from the drop-down event list. Visual Basic will automatically add the stub of an event-handler subroutine, as shown:
- Add code to the event-handler subroutine created in step 6 to import code from SharedMacroCode.bas into the local VBA project. Follow this example:
- The settings file containing this code can now be distributed to end users, and each time it is opened, this BeforeConnect event will automatically update the local VBA project’s SharedMacroCode module with a new version retrieved from Z:remotelocationSharedMacroCode.bas.
Note the following:
- All users who need to access dynamically updated VBA code in this manner will need to have the same drive mapped to the same folder, as in the example, Z:remotelocation....
- Exported modules from VBA (.bas files) are plain text. You can make edits to the file without re-importing it into Visual Basic.
- Event names are slightly different for VT terminals than the IBM terminal example in this technical note. For VT sessions, the “Terminal_Connected” event is recommended.
- The example shows how to dynamically import a single standard module into a VBA project, however, it is also possible to import user forms and VBA classes as well. For more information about working with the VBA Extensibility library, search the Microsoft Visual Basic Reference Help index for "VBProject object."
In XenMobile, when we wrap the iOS app with MDX toolkit, deploy it to the device, and then try to debug the app in Xcode, we find that the debugger will not stop at the breakpoint line. The default build settings in Xcode does not allow the code to stop when breakpoints are hit. This article lists the changes to the Build settings that will allow you to debug the iOS app that is wrapped with MDX toolkit.
What’s New in Version 7.6?
This release includes the previous 7.5 SP1 updates (described in Technical Note 10147), plus the following new updates:
- Design Tool visual style updated: The Design Tool application has new toolbar icons and controls, new fonts, and standard Open and Save As dialogs.
- Support for 64-bit UNIX/Linux: Host Integrator now runs as pure 64-bit programs on non-Windows platforms (in addition to 64-bit Windows support introduced in version 7.5).
- Command line rebuild for Web Builder projects: You can rebuild your Web Builder project using a command line utility instead of the Web Builder application. For instructions, see http://docs2.attachmate.com/verastream/vhi/7.6/en/topic/com.attachmate.vhi.webbuilder.help/html/reference/h_dlg_build_project.xhtml.
- Session server security vulnerability has been addressed. For additional information, see Technical Note 2700.
- Java 7 Update 45 is installed which addresses multiple Java security issues. For more information, see Technical Note 2700.
- Cryptographic library version 3.2 has been introduced for all platforms, which meets FIPS 140-2 standards on Windows, Solaris, and Linux. For more information, see Technical Note 2400.
- In the management server, stronger password hash algorithms have been implemented.
- In Web Builder project properties, “Require encrypted connection to VHI server” (previously “Require secure connection”) is enabled by default. This option affects the communication between the client connector (called by web application or data object) and session server. Note: Encryption processing can adversely impact performance, especially in heavy load scenarios.
- On UNIX/Linux platforms, the installer sets more appropriate directory and file permissions.
Session Server Updates
- Resolved truncated pointer issues on 64-bit Windows platforms. In versions 7.5.70 through 7.5.1030, crashes can occur on 64-bit Windows due to access violations (for example, Windows Event Viewer may report “Host Integrator component Verastream Host Integrator Session Server restarting. Reason: Exit code = -1073741819”).
- Resolved an issue with pooled sessions when session server is running on a multi-processor core system. In earlier 7.x versions, after a session disconnection, subsequent clients may fail to connect.
- Message ID 3070 “No current entity” has changed from an error to a warning. This message will no longer be repetitively logged when using the built-in Terminal3270 to Terminal5250 web applications (with the session server default logging configuration, errors only).
Web Builder and Web Application Updates
- Performance and usability improvements in the built-in “zero footprint emulator” Terminal3270 or Terminal5250 applications, and HTML5 Web Application projects generated by Web Builder:
- Login form is automatically repopulated with user input if unable to proceed: When an error message displays, the fields are not cleared (except password) so values don’t have to be re-entered.
- On an iPad, when accessing a web application that displays terminal screens with operation buttons, you no longer have to scroll down to see all the buttons.
- If a screen operation takes longer than 2 seconds, a loading indicator appears in the top left.
- Tap response time is improved on iPad by eliminating a 300ms click event delay.
- Performance is improved with less calls between the web application and session server.
- You can toggle a light pen checkbox state or move the cursor by clicking or tapping its associated text hotspot (rather than the checkbox control itself).
- Project properties can be configured to enable table procedure output data to be returned as JSON. For more information, contact Support http://support.attachmate.com/contact.
- Web Builder no longer fails to build a legacy Java web application when the LOCALAPPDATA environment variable contains international characters.
- If your Web Builder web application project properties are configured to disconnect on error, the HTTP session is now properly cleared. In versions 7.5.x, unexpected errors could display at runtime if a user reconnected after the disconnect.
- In the Terminal3270 web application, the National Character Set drop-down list includes “Swedish (1143 Euro).”
- If you have a legacy .NET Web Application generated by Web Builder that displays terminal screens, the displayed or hidden state of the aid keys is now maintained through screen transitions.
Design Tool Updates
- After using Design Tool to deploy a model as a session pool, the minimum idle host sessions and initial idle host sessions are configured in the session server (in addition to the minimum total sessions). These settings were introduced in Administrative Console in version 7.0 and are supported in deployment descriptors in version 7.1 and higher, but are not directly configurable in Design Tool Deployment Options.
- In Design Tool, after deploying a model as a session pool, the Test button will start Web Services Explorer with a session pool WSDL URL. In previous versions 7.1 through 7.5 SP1, the Test button always used the non-pooled WSDL.
- In Design Tool, after deploying a model that contains no table procedures, the Test button is no longer displayed. In versions 7.1 through 7.5 SP1, clicking the Test button would cause Web Services Explorer to call a non-existent WSDL (and display an error “WSDL Exception: faultCode=OTHER_ERROR: Server returned HTTP response code: 500”) since SOAP web services are not generated for models without procedures.
- Design Tool successfully displays host screens when a connection is negotiated as “Basic TN3270E.”
- You can open multiple Design Tool instances with models that have Java event handlers. In version 7.5, after attempting to open a second model that uses Java event handlers, the Design Tool application would close.
- In Design Tool, if you create a new model entity by right clicking in Model Debug Messages, the snapshot is properly saved. In previous versions, when you re-open the model and work offline, you would see an error “ Snapshot not found for entity ‘entity name’.”
Administrative Console Fixes
- In Administrative Console, the Sessions view no longer displays Last Used dates of 31-Dec-1969 or 01-Jan-1970 under certain circumstances (such as terminating sessions after creating a new pool with idle sessions).
- In Administrative Console, resolved a java.lang.ClassCastException that could occur when changing logging configuration during execution of a log query.
- In Administrative Console, if you are monitoring multiple active sessions, the correct host screens are displayed. In previous 7.x versions, after host session activity, all session monitor views would display the same host session.
- Resolved a null pointer exception that could occur when disconnecting Administrative Console when a Session Monitor view is active.
- When installing VHI on UNIX/Linux systems, if the temporary directory (typically /tmp) does not have sufficient space available to unpack files, an appropriate error message is displayed. Also, a new --tmpdir command line argument is now supported to specify a different temporary directory. Typically at least 330 MB of temporary space is required.
Obtaining Your Product Update
Customers with a current maintenance plan are eligible to download Verastream Host Integrator 7.6 from the Attachmate Download Library at http://download.attachmate.com/Upgrades/.
For more information on using the Download Library, see Technical Note 0200.
Note: The product download is a full product package that can be used for new installations or to upgrade existing installations.
Installing Your Product Update
For more information about installing the update on an existing installation, refer to the appropriate Technical Note:
- From version 7.x on Windows: 10121
- From version 6.x on Windows: 10095
- From version 7.1.x on Linux or Solaris: 10129
- From version 7.0 on Linux, Solaris, or AIX: 10122
- From version 6.x on Linux, Solaris, or AIX: 10094
Known Issues with Upgrades
- On AIX, installing version 7.6 over a previous version may result in session server core dumps (caused by management cluster certificates originally generated by version 7.1.x).
To avoid this issue, uninstall the previous version before installing version 7.6 on AIX.
To resolve this issue after upgrading, reset the management server as described in Technical Note 10114.
- After upgrading your server, users accessing web applications should clear web browser caches to avoid unexpected issues. (This recommendation especially applies to users running Microsoft Internet Explorer or Mozilla Firefox to access the built-in Terminal3270 or Terminal5250 web applications, or an HTML5 Web Application generated by Web Builder that displays terminal screens.)
For instance, this is the list of the specific prerequisites that SolidWorks was installing in the app layer:
Required system components will be installed (217 MB): Check For Updates, Microsoft C++ 2005 Redistributable (x64), Microsoft C++ 2005 Redistributable, Microsoft C++ 2008 Redistributable, Microsoft C++ 2010 Redistributable (x64), Microsoft C++ 2010 Redistributable, Microsoft Office 2003 Web Components, Visual Studio Tools, VBA 7.1, VBA 7.1 (English), VBA 7.1 (KB 2783832), Bonjour, Microsoft SQL Native Client, swactwiz and Visual Studio Remote Debugger.
All those Redistributable packages really need to be in the OS layer, not the app layer. So install them in the OS, and then create a new app layer based on the new OS, and it should work. OS-like software installations are a problem in app layers, especially if there might be conflicting versions in multiple layers. Make sure all OS-like software is installed in the OS before creating the app layer.