One of the big news items from today’s Keynote at the Microsoft Build conference is that the Xamarin tools, which allow .NET developers to create fully native apps for the iOS, Android and Windows Universal platforms with a single code base, will in future be bundled for free with Visual Studio. Microsoft purchased Xamarin in February 2016 and since then a lot of developers have been waiting with baited breath to find out what would change, and now we know. Exciting news if you want to develop mobile applications.
Today, amongst many other things, Microsoft announced the release of Visual Studio 2015 Update 2. We wanted to let you know that if you are doing Synergy .NET development with the current Synergy 10.3.2 beta version then it’s OK to apply Update 2. But if you’re running the 10.3.1 release of Synergy (or an earlier version) you should not install Update 2 just yet. We are currently finalizing and will soon release a hotfix for Synergy 10.3.1 to that will add support for Visual Studio 2015 Update 2, but for now you should stick with Update 1.
Last year I announced that we had created a new PDF API and made it available via the CodeExchange in the Synergy/DE Resource Center. Now I am pleased to announce that we have made some enhancements to the original API, namely by adding the ability to:
- View existing PDF documents (Windows only).
- Print existing PDF documents (Windows only).
- Draw circles.
- Draw pie charts.
- Draw bar charts (with a single or multiple data series).
Here’s an example of a pie chart that was drawn with the new API:
Here’s an example of a bar chart:
And here’s an example of a multi-series bar chart:
It’s early days for the support of charts, and I plan to make several additional enhancements as time permits, but I wanted to make the work that has been done so far out into the wild, and hopefully get some feedback to help me decide what else needs to be done.
If you’re interested in learning how to use the PDF API then I’ll be presenting a session that will teach you all about it at our up-coming DevPartner conference in May. So if you haven’t already done so, head on over to http://conference.synergex.com to reserve your spot at the conference now.
I’m sometimes sceptical when somebody covers a song I know and love as I’m worried that their version may not bring with it the true spirit of the original track. If it’s not done right it just won’t be pleasing to the ear, and music should always invoke passion. When customers ask us to demonstrate how to put a new User Interface over an existing program I’m always conscious that our “cover” needs to retain the proven logic of the original program while offering the user a new and pleasing, easy to use and navigate, user experience.
In recent weeks I’ve been developing the Symphony UI Toolkit, which as the name suggests, helps you to migrate your Traditional Synergy UI Toolkit programs to a modern Windows Presentation Foundation (WPF) based UI. This new member to the Symphony ensemble provides a number of simple techniques for connecting between the WPF UI and the existing “event” driven DBL code.
One recent engagement where I utilise the whole Symphony Framework, including the new Symphony UI Toolkit, was to add a modern UI to an existing UI Toolkit program. The basic solution was to write the new UI in Synergy .NET using XAML for the UI components. Then host this in the existing Toolkit program using the DOTNET API. We started off with:
The program presented a list of items from which the user could select from. Other than the slightly dated look and feel the main problem with the application was that the user was restricted to seeing only the information on a single tab page at a time. The brief for the new UI was simple – make the pages dock-able.
Utilizing a number of core features within the Infragistics UI control set I was able to retain all the logic from the original program and bring a fresh new UI to the user:
Now as the user navigated the main list of items, while the docked panels display the relevant information. The grid provided the required filtering and grouping capabilities and selecting an item changed the fields on the input panels to edit mode so changes and additions could be made.
The Microsoft styled ribbon control replaced the traditional menu columns and button toolbar. Additional options were made available within an Outlook style navigation bar – which can be hidden with a single click.
The original program code was modified in a way that we can swap between running the traditional UI Toolkit UI and the new WPF UI by changing a single setting in the synergy.ini configuration file:
Although targeting the UI Toolkit the steps involved in migrating to a new WPF UI with the Symphony Framework will work just as well with almost any style of DBL program, and you can try it for yourself at DevPartner 2016. Join me in the recording studio for the Monday pre-conference workshop where together we’ll make a great new cover version of an old Toolkit program. The day will start relaxed as you write code to handle menu, toolbar and button commands. Then we’ll up the tempo and you’ll code event handlers to execute list load methods. Then we’ll jazz things up a little handling change methods and field validation. By the end of the day we’ll have a number 1 hit on our laptops.
It seems like since we moved CodeGen from CodePlex to GitHub there has been some confusion about how to download the latest version. The latest version will always be available at:
We have just released a CodeGen update that includes a fix for a problem that was discovered recently related to the processing of enumerated fields. If your repository includes enumerated fields and you use the field selection loop token <SELECTION_VALUE> (or the Symphony Framework custom token <SYMPHONY_SELECTION_VALUE>) then we recommend that you update to the new version and re-generate your code. As a reminder CodeGen recently moved to GitHub, you can find the new release at https://github.com/Synergex/CodeGen/releases.
Today we are announcing that we have moved the open source CodeGen project from it’s former home on CodePlex to a new home on GitHub. We made the decision to do this for several reasons, not least of which is the fact that GitHub has effectively become the de-facto standard place for hosting open source projects. Even Microsoft, who built and operate the CodePlex site using their own Team Foundation Server source control technologies seem to have lost interest in it; in the last 18 months or so they have moved pretty much all of their own considerable number of open source projects to GitHub also! GIT also has several very nice features over and above what TFS has to offer, and also has the benefit of being very considerably faster to use. Related to the move is a new version (CodeGen 5.1.1), but the only changes in the new version are related from the move from CodePlex to GitHub; there is no new functionality in the new release over the 5.1.0 version that was released a few days ago.
If you don’t already have one we encourage you to create a GitHub account and once logged in to “watch” CodeGen. If you wish to receive notifications about new CodeGen releases you can also subscribe to the CodeGen Releases Atom feed. CodeGen is still distributed under the terms of the New BSD License. For the time being we plan to leave the CodePlex environment intact, but no new changes will be checked in there and no new releases will be published there.
Here are a few useful GitHub URLs related to our new home:
|Download latest version||https://github.com/Synergex/CodeGen/releases/latest|
|Releases Atom feed||https://github.com/Synergex/CodeGen/releases.atom|
Just a quick note to announce that we have today released CodeGen 5.1. This release has but one new feature, but it does allow me to solve a challenging problem that I faced while working on a customer project recently. I have dubbed this new feature conditional processing blocks. Essentially it is the ability to conditionally include (or exclude) parts of a template file based on the presence or absence of identifiers that can be declared on the command line. It allows you to achieve the same kind of results that you would when using .DEFINE, .IFDEF and .IFNDEF in DBL source code, but within template files. For example a developer could include code like this in a template file:
The developer would then have the ability to choose whether to include or exclude the code that assigns the I/O hooks object to the channel that was opened at the time that they generate the code. By default the I/O hooks code would not be included; if it was needed the developer would define the ATTACH_IO_HOOKS identifier as they generate the code. They would do this by using a new –define command line option:
codegen –s EMPLOYEE –t FILE_IO_CLASS –r –define ATTACH_IO_HOOKS
This may seem like a very simple change, and it is, but my mind is now racing thinking about all of the new possibilities it opens up.
I recently attended the OpenVMS Boot Camp in Nashua New Hampshire. I am pleased to report (with a nod to Mark Twain) that rumors of the death of OpenVMS were greatly exaggerated! VMS Software Incorporated (VSI) has taken over the product and appears to have the situation well in hand.
There were over 100 companies in attendance at the Boot Camp, with Hewlett Packard a very visible participant. The conference was quite lively, with multiple tracks running from 8:00 to 6:00 daily, and events planned each evening. At the conference, there was an undercurrent of optimism and energy, which was no doubt tied to the future of VMS. VSI has already released OpenVMS 8.4-1H1, which provides support for HP Integrity i4 server models based on the Intel® Itanium® 9500 series processors. Moving forward, VSI presented at the Boot Camp a rolling roadmap that provides for at least one release per year for the next few years, improving and extending the software on its current HP platforms—including new versions of TCP/IP and Java, a new file system, and CLI improvements. Concurrently, they are working on VSI OpenVMS 9, which will add support for x86-64 bit processers (slated for 2018). They are planning to support select HP (Intel and AMD) servers first, then Dell and others as well. ARM support is slated to be considered after x86-64.
VSI has pledged at least 5 years of active product support per release, followed by a minimum of 2 years of prior-version support. With releases planned into 2018, this provides a viable, supported future for OpenVMS at least into 2025 and likely well beyond.
The future of OpenVMS is now being tended to by some very experienced engineers—many have come from HP and have been with the O/S throughout its various versions and ownership.
So, VMS users, the immediate takeaway is to listen to the words of the late great Douglas Adams: “Don’t Panic!“ OpenVMS is not going away anytime soon.
A few weeks ago I announced that a new API called SynPSG_PDF had been added to the code exchange. Today I am pleased to announce that the API has been updated and, in addition to Windows, is now also supported on systems running Linux (32-bit and 64-bit), OpenVMS (AXP and IA64) and Synergy .NET.
Also, as a direct result of recent customer feedback, I have added a mechanism that allows a PDF file to be easily created from an existing text file with just a few lines of code. This means that existing report programs that already produce plain text output can be easily modified to produce PDF output with a small amount of code like this:
If you would like to check out the API you can download the code from https://resourcecenter.synergex.com/devres/code-exchange-details.aspx?id=245.
Years ago I used to say to our direct corporate end-user customers, “You’re lucky. It doesn’t matter what your application(s) looks like because you’re not selling to compete for new business—all that matters is that it works well and meets your business needs.” End-users plugged merrily along, content to focus on functionality and substance, often in the form of a green-screen front end. In fact, many of those customers claimed that a character-based/green-screen application was much more efficient than using a “cumbersome mouse”—especially when it came to data entry. In the 90’s when Windows, GUI, and the like came on the scene our Independent Software Vendors (ISVs) had a different story—to be competitive, the ISVs suddenly had to worry about both how well their applications functioned AND how they looked. People and companies didn’t want to buy applications that weren’t shiny and new with a great user interface (UI)—even if a sophisticated UI didn’t always correlate with a sophisticated application under the hood. It became a game of how flashy can you make it as opposed to how well does it function.
Fast-forward a few years, and now everyone has to play on the same field—ISVs and corporate end-users. In today’s world, even corporate end-users need to make the move to modernization. If they don’t, the next generation of decision makers will. And when that happens, it’s likely the existing, time-proven solution that has been customized and fine-tuned over the past 30+ years, the one that makes the business unique and competitive, the one that has solved—and continues to solve—everyday business issues, will not survive. Yep, this new generation of decision makers will judge the book by its cover and determine the value of the application based on the way it looks and not what it does. It makes sense, because this new generation grew up knowing only great-looking applications—applications that are generally simpler and more discrete in functionality than complete, integrated solutions that touch every part of the organization but appear less shiny and sophisticated.
So, the bottom line is that if your application doesn’t look great, it will be perceived as less than great, and when that new decision maker comes in—it may be too late to save what you’ve spent so many years perfecting. Needless to say, I strongly recommend that all customers invest in modernizing their application(s) with a great looking UI and UX (user experience). As Billy Hollis affirmed at the recent Synergy DevPartner Conference, UX is equally as important. It’s not just the look and feel, but also the experience of the user that’s critical. It’s important to emphasize here too that a great UI/UX design and a high-performing/highly productive solution are not mutually exclusive. Having a well-designed GUI based application can only add to the functionality and power of your solution. So even if you feel your character-based solution is really the best one for your business, it’s rare for the look and feel to be overlooked in favor of substance. I can’t stress enough the importance of making this investment.
A significant benefit of having a Synergy-based application is that you can separate the UI from the logic and data. This means you can use future UIs without sacrificing the years of investment you have put into your business application. While the look and feel is what everyone sees, in reality the business logic is the true value. And once these two are separated, you can extend the life of your application(s) indefinitely, taking advantage of the ever evolving UI trends that come along. Although it may take some effort initially to separate the UI from the back-end, this is the course of least resistance and investment, and it will offer the largest and longest return.
At Synergex, our main focus is to develop solutions to help you advance and leverage your investment to take advantage of the latest modern technologies. In fact, with our recent release of Synergy DBL, we are venturing into the Universal Windows Platform (UWP), the latest UI experience. And while none of us can be certain what UI trends will be popular 10 years from now, just as none of us back in the ‘80s could have imagined what today’s UI would look like, I’m confident that we will be able to help you leverage your back-end and take advantage of whatever the future holds.
So Hilton’s latest thing is the “Digital Key”; while standing within 5 feet of the door to your hotel room it is now possible (in certain locations) to click a virtual button in the Hilton App on your smart phone and have the door to your hotel room unlock, as if by magic. The digital key also knows about other areas of the hotel that you have access to, such as the Executive lounge (I tried it, it works) and gymnasium (apparently) and provides access to those places too.
Last week I used the app to make my reservation. Yesterday I used the app to check in for my stay and and also to select my room. And today, having already checked in electronically, I was able to totally bypass the reception desk and proceed directly to my room.
Tomorrow morning the credit card associated with my profile will be automatically charged, and I will walk out of the front door and drive to the airport a few exits down the freeway.
If it hasn’t dawned on you what my point is here, it is that I will have booked and totally completed a stay in a hotel … without ever having the need to interact with a single other other human being; all of which seems to me to be a pretty sad state of affairs! Maybe we’re taking this whole technology thing a little too far in some areas?
For some time now the Synergy/DE Code Exchange has included an item called PDFKIT which essentially contains a set of DBL wrapper code that allows the open source Haru PDF Library to be used from DBL. The work done in PDFKIT was a great start and has been used successfully by several developers, but I don’t think that anyone would disagree with me if I were to suggest that it’s not exactly the most intuitive software to use, and it’s not exactly what you would call well documented either; just like the underlying Haru library!
So as time permitted for the last few weeks I have been working on what I hope is an improved solution. I certainly didn’t want to totally reinvent the wheel by starting from scratch, as I mentioned PDFKIT was a great start, but I did want to take a slightly different approach that I thought would be more useful to a wider number of developers, and I did want to make sure that complete documentation was included. What I came up with is called SynPSG.PDF, and it is available in Code Exchange now.
When you download and extract the zip file (SynPSG_PDF.zip) you will find that it contains these main elements:
- This is the DBL code that wraps the Haru PDF library and is taken directly from the latest version of PDFKIT.
Haru PDF Library DLL’s
- The same DLL’s that are distributed with PDFKIT. Refer to the documentation for instructions on where to place these DLL’s.
- A source file containing the new API that I have created.
- A Synergy/DE Workbench workspace that can be used to build the code, as well as build and run several sample programs that are also included (this is a Workbench 10.3.1 workspace and will not work with earlier versions of Workbench).
- A Windows help file containing documentation for the new API
You don’t need to use the Workbench configuration that I have provided, if you prefer you can simply include the pdfdbl.dbl and SynPSG.PDF.dbl files into the build for your subroutine library. But remember that both of these files contain OO code, so you will need to prototype that code with DBLPROTO.
As you will see when you refer to the documentation, most things in the API revolve around a class called PdfFile. This class lets you basically do four things:
- Create a PDF file.
- Save the PDF file to disk.
- View the PDF file by launching it in a PDF viewer application.
- Print the PDF file to a printer.
I’m not going to go into a huge amount of detail about creating PDF documents or using the API here because these topics are discussed in the documentation, but I will mention a couple of basic things.
PDF documents inherently use an X,Y coordinates system that is based on a unit called a device independent pixel. These pixels are square and are 1/72 of an inch in each direction. The coordinates system that is used within pages of a PDF document is rooted in the lower left corner of the page which is assigned the X,Y coordinate 0,0. The width and height of the page in pixels depends on the page type as well as the orientation. So for example a standard US Letter page in a portrait orientation is 8.5 x 11 inches, so in device independent pixels it has the dimensions 612 x 792.
With most PDF API’s you work directly with this coordinates system, and you can do so with this API also, but doing so can require a lot of complex calculations, and hence can be a slow process. But often times when we’re writing software it is convenient for us to work in simple “rows and columns” of characters, using a fixed-pitch font. The new API makes it very easy to do just that, meaning that results can be produced very quickly, and also meaning that existing report programs (that already work in terms of rows and columns) can be easily modified to produce PDF output.
Here is an example of a simple row / column based report that took only a few minutes to create:
Of course there are times when you need to produce more complex output, and the new API lets you do that too. To give you an idea of what it is capable of, here’s a screen shot of a mock up of a delivery ticket document that I created while working on a recent customer project:
As you can see this second example is considerably more complex; it uses multiple fonts and font sizes, line drawing, box drawing, custom line and stroke colors, etc. And although not shown on these examples, there is of course support for including images also.
The new API is currently available on Windows under traditional Synergy. It should be possible to make the code portable to other platforms in the near future, and .NET compatibility is definitely in the pipeline. The software requires the latest version of Synergy which at the time of writing is V10.3.1b. You can download the code from here:
It is early days for this new API and I have many ideas for how it can be extended and enhanced. I am looking forward to working on it some more soon, and also to receiving any feedback or suggestions that you may have.
Just a quick note to let all of you CodeGen users out there that a new version (CodeGen 5.0.5) has just been released. You can get more information about the changes and download the release from https://codegen.codeplex.com/releases.
If you would like to receive email or RSS notifications when new CodeGen versions are released then there are links on the above mentioned page to allow you to set that up, and we encourage you to do so.
“Hiring good programmers is hard.” I can’t count the number of times I’ve heard this phrase during the past 30+ years I’ve been in this business. And, from my experience and research, I agree. A few customers have also told me that good Synergy programmers are harder to find than others, but over the years I’ve found that it doesn’t matter whether you’re looking for developers experienced in Synergy DBL, C#, Java, VB.NET, or any other language… hiring good programmers is just hard. The exception, of course, is the gaming industry, where a plethora of young talented programmers are excited to spend countless hours writing games for almost no money. Sort of reminds me of the early programmers who wrote business application solutions back in the day!
So, how do you find a good Synergy developer? Well, for starters, don’t limit your pool to developers experienced in Synergy. Find a great programmer and make him/her a master in the language you use. Any good programmer can learn Synergy, or C#, or Java, etc. But not every programmer who knows Synergy or C# or Java is or will become a great programmer. Seek out developers who have current modern day developer skills such as OO, .NET, etc. If they don’t already know Synergy, they’ll pick it up quickly and will appreciate that it is a modern OO language that runs on virtually all platforms, including mobile, and is fully integrated with Visual Studio. Then, send your new developers to a Synergex class, have PSG come on-site to get them up to speed, and (of course) send them to the annual Synergy DevPartner conference.
Tip: Consider domain knowledge specific to your industry. You are much better off hiring a good developer who is knowledgeable in your particular vertical market and teaching him/her DBL than vice versa.
Also, open the door to hiring developers with programming experience (vs. just having a computer science degree). When you look back at the early years of our industry there were very few universities offering programming degrees—most of the original developers of what are now world class enterprise applications had no formal education on programming. These developers had raw talent and enthusiasm to solve problems and create solutions. (Some of you reading this blog are likely those original developers!) This too is how Synergex started. In fact, many of our top talent never received formal education in programming. That said, I’m not recommending that you seek developers without formal degrees but I am encouraging you to focus on smart, eager developers whom you can train and educate to be part of your next generation of leaders. Here at Synergex we’ve developed and use a variety of third-party tests that can help vet sharp young talent—this talent has made a big impact on our development team. We would be happy to share the tools we use.
So you’ve advertised for a talented, trainable, language-agnostic developer, interviewed your candidates to confirm a good fit with your culture, vetted out analytical aptitude, and are convinced that your candidate will be a great addition to your team… What if the candidate turns the tables on you and asks, “Why would I want to program in Synergy DBL?” What do you say?
I recommend that you have this question answered in their minds long before they have the opportunity to ask it. Make sure your candidates all understand the value of Synergy DBL and the exciting opportunities they will have to work with these modern development tools. Let them know that skills they will gain using Synergy DBL will provide a lifetime of employment opportunities any place in the world they want to live and work.
Congratulations on hiring your next great programmer!