RPG Next Genhttp://blog.rpgnextgen.comBlogSat, 03 Apr 2021 00:00:00 +0200ILEDash - First Alpha Releasehttps://blog.rpgnextgen.com/2021/04/03/iledash-first-alpha-releasehttp://blog.rpgnextgen.comhttps://blog.rpgnextgen.com/2021/04/03/iledash-first-alpha-release<![CDATA[I have been developing web services with ILEastic for some time now and the framework is really great in what it does and provides. It handles all the HTTP protocol stuff for you. It supports things like a plugin system, Basic Auth, JWT, JSON, request routing out of the box with a developer friendl]]>Sat, 03 Apr 2021 00:00:00 +0200Error Handlinghttps://blog.rpgnextgen.com/2021/02/28/error-handlinghttp://blog.rpgnextgen.comhttps://blog.rpgnextgen.com/2021/02/28/error-handling<![CDATA[I think this is a difficult topic and many people will obviously have their own solution to this problem. And this is not really an RPG only topic. This problem exists in every programming language (I have encountered so far). What to do when an error can occur? Should I catch/monitor the ]]>Sun, 28 Feb 2021 00:00:00 +0100Message Service Programhttps://blog.rpgnextgen.com/2021/02/27/message-service-programhttp://blog.rpgnextgen.comhttps://blog.rpgnextgen.com/2021/02/27/message-service-program<![CDATA[The message project has been extended by some procedures. Now you can also use messages from message files. You can get the message service program from the save file in the download section of the project or fetch the source from the git repository. The documentation has been uploaded to my ILE]]>Sat, 27 Feb 2021 00:00:00 +0100Modernizationhttps://blog.rpgnextgen.com/2021/01/01/modernizationhttp://blog.rpgnextgen.comhttps://blog.rpgnextgen.com/2021/01/01/modernization<![CDATA[I think there is not one topic in the IBM i community which has been talked so much about as modernization. And here I am also talking about it :) . The modernization drum has been beaten for as long as I can think of and every time I hear about it it is just about putting lipstick on a pig and m]]>Fri, 01 Jan 2021 00:00:00 +0100Demonstrate My Stylehttps://blog.rpgnextgen.com/2020/12/31/demonstrate-my-stylehttp://blog.rpgnextgen.comhttps://blog.rpgnextgen.com/2020/12/31/demonstrate-my-style<![CDATA[There are many web sites which discuss the technical parts of RPG covering the latest bifs and opcodes and they are great for looking up specific things about RPG. But when you are new to RPG and perhaps programming in general you actually might not know what a "good" programming style is and you ]]>Thu, 31 Dec 2020 00:00:00 +0100Thread Local Storage and ILEastichttps://blog.rpgnextgen.com/2020/12/05/thread-local-storage-and-ileastichttp://blog.rpgnextgen.comhttps://blog.rpgnextgen.com/2020/12/05/thread-local-storage-and-ileastic<![CDATA[ Thread Local Storage (TLS) is a widely used programming method that uses static  or global memory local to a thread. &mdash; Thread Local Storage on Wikipedia. So TLS is all about having a storage area per thread. This is not much of a concern for most RPG developers. Most of us are wor]]>Sat, 05 Dec 2020 00:00:00 +0100Working with Validation Listshttps://blog.rpgnextgen.com/2020/10/11/working-with-validation-listshttp://blog.rpgnextgen.comhttps://blog.rpgnextgen.com/2020/10/11/working-with-validation-lists<![CDATA[Probably not many of you have heard of validation lists on IBM i. So from the IBM Knowledge Center Validation list objects provide a method for applications to securely store user authentication information. Validation lists can store any data associated with a key. The good thing about a val]]>Sun, 11 Oct 2020 00:00:00 +0200Web Services Setup with ILEastichttps://blog.rpgnextgen.com/2020/10/04/web-services-setup-with-ileastichttp://blog.rpgnextgen.comhttps://blog.rpgnextgen.com/2020/10/04/web-services-setup-with-ileastic<![CDATA[I have written some articles about writing web services with ILEastic and it is really as simple as already shown. And most of the time it is not any easier in other languages. You have to do/check/consider the same things regardless of the programming language. But what I didn't cover so far was h]]>Sun, 04 Oct 2020 00:00:00 +0200Dynamic Configuration with ILEastichttps://blog.rpgnextgen.com/2020/07/22/dynamic-configuration-with-ileastichttp://blog.rpgnextgen.comhttps://blog.rpgnextgen.com/2020/07/22/dynamic-configuration-with-ileastic<![CDATA[My last post was about sharing configuration in an ILEastic web service. This is especially handy when you split your web service application into multiple modules. This is not necessary but may be a good idea if you have many end points / routes so that your modules don't grow too big. But sometim]]>Wed, 22 Jul 2020 00:00:00 +0200Sharing Configuration in ILEastichttps://blog.rpgnextgen.com/2020/06/20/sharing-configuration-in-ileastichttp://blog.rpgnextgen.comhttps://blog.rpgnextgen.com/2020/06/20/sharing-configuration-in-ileastic<![CDATA[I stumbled upon a little problem I first had some trouble to wrap my head around. My situation was the following: I had an ILEastic web service with multiple modules I wanted to share the configuration data with all modules So for this kind of internal sharing of data I had decided to use a glob]]>Sat, 20 Jun 2020 00:00:00 +0200I can package it all by myselfhttps://blog.rpgnextgen.com/2020/05/21/i-can-package-it-all-by-myselfhttp://blog.rpgnextgen.comhttps://blog.rpgnextgen.com/2020/05/21/i-can-package-it-all-by-myself<![CDATA[... and also provide those packages to others. But you probably know this expression much better as "I can read it all by myself". I have read those books from Dr. Seuss very often and with pleasure. Some were real tongue twisters. But what I really like about the books is that they inspire you to]]>Thu, 21 May 2020 00:00:00 +0200Streaming API for ILEhttps://blog.rpgnextgen.com/2020/05/08/streaming-api-for-ilehttp://blog.rpgnextgen.comhttps://blog.rpgnextgen.com/2020/05/08/streaming-api-for-ile<![CDATA[For those of you who cannot associate anything with streams in programming: A stream consists of an emitter (provider) of data and a sequence of one or more consumers of data whereas the consumer may pass the data further to the next consumer constructing a streaming data pipeline. Emitter The ]]>Fri, 08 May 2020 00:00:00 +0200ILEDocs on AWShttps://blog.rpgnextgen.com/2020/05/03/iledocs-on-awshttp://blog.rpgnextgen.comhttps://blog.rpgnextgen.com/2020/05/03/iledocs-on-aws<![CDATA[Hi folks, ILEDocs has moved or at least part of it. More specifically the backend of ILEDocs has moved from a private VServer to an AWS EC2 instance. And it was super easy. create an AWS account on the free tier create an EC2 instance on the free tier copy the iledocs.rest.jar to the EC2 instanc]]>Sun, 03 May 2020 00:00:00 +0200iPKG beta 2https://blog.rpgnextgen.com/2020/04/25/ipkg-beta-2http://blog.rpgnextgen.comhttps://blog.rpgnextgen.com/2020/04/25/ipkg-beta-2<![CDATA[Hi folks! The next beta is out with some new features. First a simple but important one: VERSION action. Now you can see which iPKG client version you got. Currently the version is stored in the user defined attribute of the object. But this can only store 10 characters and only one value. There]]>Sat, 25 Apr 2020 00:00:00 +0200iPKG ... package management for ILE in beta phase ... and now what?https://blog.rpgnextgen.com/2020/04/16/ipkg-package-management-for-ile-in-beta-phase-and-now-whathttp://blog.rpgnextgen.comhttps://blog.rpgnextgen.com/2020/04/16/ipkg-package-management-for-ile-in-beta-phase-and-now-what<![CDATA[Hi folks! Happy Easter! I am in the midst of developing an open source package management system for IBM i. Now many people may say: "We already have yum for managing packages on IBM i. I should get up-to-date." Yes ... and no. Yes: yum manages packages No: It does not manage packages for the who]]>Thu, 16 Apr 2020 00:00:00 +0200Creating a Unix Timestamphttps://blog.rpgnextgen.com/2020/04/15/creating-a-unix-timestamphttp://blog.rpgnextgen.comhttps://blog.rpgnextgen.com/2020/04/15/creating-a-unix-timestamp<![CDATA[As most people know the Unix timestamp is an integer value which represents the seconds from 1970-01-01. There is currently no built-in function for it but you can easily calculate it by yourself. **FREE ctl-opt dftactgrp(*no) actgrp(*caller); dcl-pr sys_getUtcOffset extproc('CEEUTCO'); offse]]>Wed, 15 Apr 2020 00:00:00 +0200iPKG: Global = Localhttps://blog.rpgnextgen.com/2020/03/07/ipkg-global-localhttp://blog.rpgnextgen.comhttps://blog.rpgnextgen.com/2020/03/07/ipkg-global-local<![CDATA[In most contexts this is not true : Global = Local But in the case of iPKG there is no difference between a global , for all users, installation of packages or a local installation (scoped to a single user) from the perspective of the package manager. Objects get restored in a library and stream]]>Sat, 07 Mar 2020 00:00:00 +0100Node.js Template Projecthttps://blog.rpgnextgen.com/2020/02/15/nodejs-template-projecthttp://blog.rpgnextgen.comhttps://blog.rpgnextgen.com/2020/02/15/nodejs-template-project<![CDATA[During my journey through the Node.js universe I have missed a good template for what I wanted to do. I searched for a simple template for a REST service on which I can build on. You can start with this by following the next couple of steps and are ready to go git clone https://m1hael@bitbucket.o]]>Sat, 15 Feb 2020 00:00:00 +0100libxlsxwriter : Date/Time and Image Supporthttps://blog.rpgnextgen.com/2019/03/15/libxlsxwriter-datetime-and-image-supporthttp://blog.rpgnextgen.comhttps://blog.rpgnextgen.com/2019/03/15/libxlsxwriter-datetime-and-image-support<![CDATA[libxlsxwriter is a great library for creating documents in the Open Document spreadsheet format. Even so its code is very strict (and good) ANSI C code some things does not work out-of-the-box for integration in RPG and must be tweaked a little bit. This was also the case for image and date/time]]>Fri, 15 Mar 2019 00:00:00 +0100Write Unicode Characters with libxlsxwriterhttps://blog.rpgnextgen.com/2019/02/27/write-unicode-characters-with-libxlsxwriterhttp://blog.rpgnextgen.comhttps://blog.rpgnextgen.com/2019/02/27/write-unicode-characters-with-libxlsxwriter<![CDATA[Hi, the project libxlsxwriter lets your programmatically create spreadsheets in the Open Document format which is also used by OpenOffice, Microsoft Office, ... . Sometimes you need to add a special sign to some cell, f. e. the Euro currency symbol. If your native codepage does not support it yo]]>Wed, 27 Feb 2019 00:00:00 +0100ILEDocs - Multiple Version Supporthttps://blog.rpgnextgen.com/2018/10/03/iledocs-multiple-version-supporthttp://blog.rpgnextgen.comhttps://blog.rpgnextgen.com/2018/10/03/iledocs-multiple-version-support<![CDATA[Hi, as some of you have definitely some programs or service programs in production in different/multiple versions it can become tricky to manage and provide the documentation for each version of the code. ILEDocs has now built-in support for multiple versions of your code. Just use the @version ]]>Wed, 03 Oct 2018 00:00:00 +0200ILEDocs - Release 2.1.0https://blog.rpgnextgen.com/2018/08/15/iledocs-release-210http://blog.rpgnextgen.comhttps://blog.rpgnextgen.com/2018/08/15/iledocs-release-210<![CDATA[Hi, at the moment I have the opportunity to work on the ILEDocs project. There has been some smaller fixes and features and some bigger ones. The biggest new feature is the search functionality. You have now an input box in the navigation bar where you can search for a specific module, procedure o]]>Wed, 15 Aug 2018 00:00:00 +0200Arraylist - Bugfixhttps://blog.rpgnextgen.com/2018/07/27/arraylist-bugfixhttp://blog.rpgnextgen.comhttps://blog.rpgnextgen.com/2018/07/27/arraylist-bugfix<![CDATA[A little memory leak has crept into the code. The arraylist_dispose() method did not deallocate all the memory which has been previously allocated. This has been fixed now in the current version. Every user of the JSON service program also needs to update the arraylist service program as it is use]]>Fri, 27 Jul 2018 00:00:00 +0200BlueDroplet - Next Stepshttps://blog.rpgnextgen.com/2018/06/21/bluedroplet-next-stepshttp://blog.rpgnextgen.comhttps://blog.rpgnextgen.com/2018/06/21/bluedroplet-next-steps<![CDATA[For those of you who don't know yet: BlueDroplet is a native REST framework for all ILE languages on IBM i. BlueDroplet consists of multiple ILE modules which are bound to an ILE program. Here is an overview of the structure of such a program. BlueDroplet is a work-in-progress. Some rudimentary t]]>Thu, 21 Jun 2018 00:00:00 +0200Linked List Release 1.4.0https://blog.rpgnextgen.com/2018/06/10/linked-list-release-140http://blog.rpgnextgen.comhttps://blog.rpgnextgen.com/2018/06/10/linked-list-release-140<![CDATA[The Linked List service program has been a very stable service program with a stable API. The only thing that was a little bit clumsy was the sort function. The API design of the function offered great flexibility. You could implement your own sorting with your own sort implementation. The base so]]>Sun, 10 Jun 2018 00:00:00 +0200ILEDocs Database is growing again!https://blog.rpgnextgen.com/2018/05/29/iledocs-database-is-growing-againhttp://blog.rpgnextgen.comhttps://blog.rpgnextgen.com/2018/05/29/iledocs-database-is-growing-again<![CDATA[ILEDocs has some fresh additions, namely the API documentation of the projects JSON Utilities, Linked List and Linked Map. We have almost all of the projects on board which are currently on the old documentation site at Sourceforge.net. If you have an open source library and would like to add it ]]>Tue, 29 May 2018 00:00:00 +0200JDBCR4 and Batch Updates and Insertshttps://blog.rpgnextgen.com/2018/04/04/jdbcr4-and-batch-updates-and-insertshttp://blog.rpgnextgen.comhttps://blog.rpgnextgen.com/2018/04/04/jdbcr4-and-batch-updates-and-inserts<![CDATA[I had to work with a remote Oracle database lately and the choice was made to use Scott&apos;s wrapper around the Java JDBC API. The solution worked. Everything is fine. Is it? No it isn&apos;t. I had to insert some thousand records into the Oracle database. What JDBCR4 supports is something lik]]>Wed, 04 Apr 2018 00:00:00 +0200ILEDocs Database is growing!https://blog.rpgnextgen.com/2018/03/26/iledocs-database-is-growinghttp://blog.rpgnextgen.comhttps://blog.rpgnextgen.com/2018/03/26/iledocs-database-is-growing<![CDATA[Slowly but steadily the ILEDocs project is growing. Today with the new version of the MESSAGE service program the API documentation has been uploaded to the ILEDocs database, making the API publicly available without having to search through any source codes. What does that mean for the ILE develop]]>Mon, 26 Mar 2018 00:00:00 +0200Java Git Client on IBM ihttps://blog.rpgnextgen.com/2018/03/25/java-git-client-on-ibm-ihttp://blog.rpgnextgen.comhttps://blog.rpgnextgen.com/2018/03/25/java-git-client-on-ibm-i<![CDATA[For sure everybody heard about the Open Source PTFs with the git client and node package, etc. But if you just want to use git to pull some code from a repository you could have had that feature for years without installing any extra PTF. Eclipse JGit project Some people may actually know that pr]]>Sun, 25 Mar 2018 00:00:00 +0100libxlsxwriter : Creating spreadsheets nativelyhttps://blog.rpgnextgen.com/2018/03/21/libxlsxwriter-creating-spreadsheets-nativelyhttp://blog.rpgnextgen.comhttps://blog.rpgnextgen.com/2018/03/21/libxlsxwriter-creating-spreadsheets-natively<![CDATA[A short while ago I stumbled over the C library libxlsxwriter from John McNamara on github. It is a C library for creating XLSX documents. More specifically it creates files in the Open Document spreadsheet format. Which can be used by Microsoft Excel but also by OpenOffice and every application wh]]>Wed, 21 Mar 2018 00:00:00 +0100RDi Hover Supporthttps://blog.rpgnextgen.com/2018/03/07/rdi-hover-supporthttp://blog.rpgnextgen.comhttps://blog.rpgnextgen.com/2018/03/07/rdi-hover-support<![CDATA[At the moment I have access to an RDi installation and use it on a daily basis (besides using MiWorkplace =) ). Some people have written about the new hover support for RDi which is quite nice (and MiWorkplace has also a nice hover support to some extent) but I haven't read or heard about a very n]]>Wed, 07 Mar 2018 00:00:00 +0100Measuring Time Spenthttps://blog.rpgnextgen.com/2018/02/12/measuring-time-spenthttp://blog.rpgnextgen.comhttps://blog.rpgnextgen.com/2018/02/12/measuring-time-spent<![CDATA[Sometimes you have a block of code and just want to know how long it took the machine to execute it. The Java developers have some really cool metric libraries like the Dropwizard subproject Metrics. But for the quick and dirty case there is always System.currentTimeMillis(); For the RPG devel]]>Mon, 12 Feb 2018 00:00:00 +0100Project CodeNoteshttps://blog.rpgnextgen.com/2018/01/27/project-codenoteshttp://blog.rpgnextgen.comhttps://blog.rpgnextgen.com/2018/01/27/project-codenotes<![CDATA[At the time I still developed the RPG Next Gen Editor I have received some requests regarding offline support. It was not as much about editing the code but more about being able to view the code (perhaps for some reviewing and later refactoring). About 10 years forward I am picking up the topic ]]>Sat, 27 Jan 2018 00:00:00 +0100Modular Programminghttps://blog.rpgnextgen.com/2017/10/28/modular-programminghttp://blog.rpgnextgen.comhttps://blog.rpgnextgen.com/2017/10/28/modular-programming<![CDATA[ Modular programming is a software design technique that emphasizes separating the functionality of a program into independent, interchangeable modules, such that each contains everything necessary to execute only one aspect of the desired functionality. --- from Wikipedia I think that i]]>Sat, 28 Oct 2017 00:00:00 +0200Processing XML Datahttps://blog.rpgnextgen.com/2017/10/10/processing-xml-datahttp://blog.rpgnextgen.comhttps://blog.rpgnextgen.com/2017/10/10/processing-xml-data<![CDATA[For some time now I had the idea to port a REST service of mine from Java to RPG. Mostly just out of curiosity because the REST service was running well enough. The REST service was about serving the geo coordinates of the boundaries of postalcode areas. Import The data source for these coordin]]>Tue, 10 Oct 2017 00:00:00 +0200Even more Integration Possibilitieshttps://blog.rpgnextgen.com/2017/08/26/even-more-integration-possibilitieshttp://blog.rpgnextgen.comhttps://blog.rpgnextgen.com/2017/08/26/even-more-integration-possibilities<![CDATA[IBM i stands for integration. But it is most of the time very troublesome to connect to and integrate anything outside the IBM family. In the open world (outside the IBM i box) there are numerous ways to integrate and communicate between systems and applications.One way to do it is to use a messagin]]>Sat, 26 Aug 2017 00:00:00 +0200Hey Socket, take a break!https://blog.rpgnextgen.com/2017/08/24/hey-socket-take-a-breakhttp://blog.rpgnextgen.comhttps://blog.rpgnextgen.com/2017/08/24/hey-socket-take-a-break<![CDATA[Ever wanted a normal (blocking) socket connection to listen for data but also wanted to check for a condition if it should stop listening? Problem is that the default BSD 4.3 version of the socket API (which is the default API to bind to) does not support setting timeouts. Trying to set a timeout]]>Thu, 24 Aug 2017 00:00:00 +0200ILEDocs - Project Infohttps://blog.rpgnextgen.com/2017/07/24/iledocs-project-infohttp://blog.rpgnextgen.comhttps://blog.rpgnextgen.com/2017/07/24/iledocs-project-info<![CDATA[Hi, as you may have already read on the MiWorkplace release info I also have been busy working on ILEDocs. First: Some REST APIs have different paths now which renders it incompatible with the previous version. The good thing is that we now also support something like a project documentation. If ]]>Mon, 24 Jul 2017 00:00:00 +0200Rant about XMLSERVICEhttps://blog.rpgnextgen.com/2017/05/21/rant-about-xmlservicehttp://blog.rpgnextgen.comhttps://blog.rpgnextgen.com/2017/05/21/rant-about-xmlservice<![CDATA[Hi, First of all I want to make it clear that I have nothing against XMLSERVICE. I think it is a nice tool though I never had to work with it due to my current job and thus have no real life experience with it. And this ranting is not really about the product itself but more about the marketing]]>Sun, 21 May 2017 00:00:00 +0200Arraylist @ Bitbuckethttps://blog.rpgnextgen.com/2017/05/14/arraylist-bitbuckethttp://blog.rpgnextgen.comhttps://blog.rpgnextgen.com/2017/05/14/arraylist-bitbucket<![CDATA[Hi, as some may have noticed I am moving some of my projects to the OSSILE project. One of those projects is Arraylist. As the OSSILE project now uses git submodules to manage sub projects I have moved the source of Arraylist to its own repository at https://bitbucket.org/m1hael/arraylist So n]]>Sun, 14 May 2017 00:00:00 +0200Continuous Integration on IBM ihttps://blog.rpgnextgen.com/2017/05/14/continuous-integration-on-ibm-ihttp://blog.rpgnextgen.comhttps://blog.rpgnextgen.com/2017/05/14/continuous-integration-on-ibm-i<![CDATA[Hi, continuous integration has been a topic on any other platform for some years now. But on IBM i I never heard that term in any discussion. There is a myriad of open source tooling support on any platform but not for IBM i ... or rather there is tooling for anything but for ILE on IBM i. The c]]>Sun, 14 May 2017 00:00:00 +0200Lists: Arraylist vs Linked Listhttps://blog.rpgnextgen.com/2017/02/19/lists-arraylist-vs-linked-listhttp://blog.rpgnextgen.comhttps://blog.rpgnextgen.com/2017/02/19/lists-arraylist-vs-linked-list<![CDATA[Hi, I am just moving my service program Linked List to the OSSILE project and I am again wondering if people know why there are two list implementations and when to use which implemenation or when to use a list at all. I am doing most of my development in the Java world and there lists are reall]]>Sun, 19 Feb 2017 00:00:00 +0100BlueDroplet at ILEDocshttps://blog.rpgnextgen.com/2017/02/10/bluedroplet-at-iledocshttp://blog.rpgnextgen.comhttps://blog.rpgnextgen.com/2017/02/10/bluedroplet-at-iledocs<![CDATA[As there is now a functioning ILEDocs site available at rpgnextgen.com I added some real content to it. The BlueDroplet project is now in an alpha stage and can already be used for some REST services. The ILEDocs documentation of the BlueDroplet gives you a nice and quick overview of the availab]]>Fri, 10 Feb 2017 00:00:00 +0100BlueDroplet and the library listhttps://blog.rpgnextgen.com/2017/02/10/bluedroplet-and-the-library-listhttp://blog.rpgnextgen.comhttps://blog.rpgnextgen.com/2017/02/10/bluedroplet-and-the-library-list<![CDATA[BlueDroplet now supports changing the library list on startup. You can either add library list entries to the user portion of the library list or replace the whole user portion of the library list. Happy RESTing! Mihael ]]>Fri, 10 Feb 2017 00:00:00 +0100ILEDocs Revivalhttps://blog.rpgnextgen.com/2017/02/09/iledocs-revivalhttp://blog.rpgnextgen.comhttps://blog.rpgnextgen.com/2017/02/09/iledocs-revival<![CDATA[Hi, creating documentation has always been a major PITA in software development. Tools try to ease the process of creating good documentation. There are different kind of documentations (mostly different by the scope and/or detail and/or perspective) and not every documentation tool is good for ]]>Thu, 09 Feb 2017 00:00:00 +0100