Attention RPG Programmers: PHP Spoken Here
Date Posted: January 01, 2009 12:00 AM
Author: Jon Paris

Anyone who has ever studied a foreign language knows that to truly feel at home in it, you can't just mentally translate everything — you have to think in it. The same is often true of computer languages, particularly when it comes to learning object-oriented (OO) languages such as Java. RPG has been a part of my programming life for most of my career. I have also used Cobol and many other languages, including OO languages such as Java. I turned to PHP after finally accepting that Java and I just weren't destined to get along. After playing with PHP for a few months, I considered installing the open-source port from i5php.net when I heard the joint announcement from Zend and IBM that they would bring PHP to IBM i.

Knowing that an official port containing i-specific features was in the offing made me even more determined to take a long, hard look at PHP to see where it might fit into my RPG-centric universe. To make a long story short, I fell in love with the language and have been working with it ever since. Not to say that I've spent as much time with it as I would like — RPG still dominates my working world — but PHP has been occupying more and more of my time as my customers become aware of what the language offers.

To me, one of the most exciting aspects of PHP is the widespread availability of free and low-cost application software written in the language. This is not to say there aren't many excellent commercial products available in the marketplace. Rather, it's a statement of the fact that a great many IBM i shops are unwilling — or simply cannot justify the cost — to purchase software for certain business tasks. Help desk software is one that comes to mind; CRM is another. Free or low-cost access to quality packages such as SugarCRM and Mantis Help Desk software is a complete game changer. Select the software you want that is available gratis and then pick the level of support you can afford, whether that is free help from the user community or one of a variety of purchasable support options.

Having explained how I came to be interested in PHP, I'd like to review the four Ws of PHP: What is PHP, Who uses PHP, Why use PHP, and Where can you use PHP. In the accompanying sidebar, "A Few of My Favorite PHP Things," below, I compare some RPG and PHP constructs and present a few of my favorite features of the PHP language.

What Is PHP?

So, what is PHP? For reasons that will be obvious shortly, I begin with Wikipedia. It defines PHP this way: "PHP is a computer scripting language. Originally designed for producing dynamic web pages, it has evolved to include a command-line interface capability and can be used in standalone graphical applications." The acronym PHP originally stood for Personal Home Page, and the language served as a vehicle for adding dynamic content to the web pages of its inventor, Rasmus Lerdorf. Just like RPG, which stands for Report Program Generator, PHP has ventured a long way from its roots. Unlike RPG, however, PHP has been rebranded with a new meaning. The official version is now the self-referential PHP Hypertext Processor. Why "self-referential"? Because the first letter "P" stands for PHP! Some time ago a group of RPG stalwarts tried to come up with a new name for RPG based on the same principle, but sadly we were unable to do so.

The first step toward modern PHP occurred in 1997. At that time, PHP users Zeev Suraski and Andi Gutmans offered to participate in a project to write a new parsing engine for the language. The result of the project was PHP 3, and the rest is history. Suraski and Gutmans went on to found Zend Technologies, which supplies the version of PHP that we now use on the IBM i platform. If you would like to know more about the history of PHP, read the excellent article by Rasmus Lerdorf on Oracle's website (Click Here). Yes — that Oracle — just one of many major companies with a strong commitment to PHP.

The number of people using the language has grown through subsequent versions. At the time of publication, PHP was at version 5.2 with version 6 waiting in the wings. PHP is a full-fledged language capable of doing just about anything that any other language on the planet (from Java to Python and Perl to . . .) can do.

One criticism often leveled at PHP concerns security. While there was some justification for this disapproval in the early days, the vast majority of flaws that opened PHP to such criticism have long since been fixed. Security is a major consideration in all enhancements made to PHP, reflecting its status as a "grown-up" language.

Who Uses PHP?

In some respects, it's easier to say who doesn't use it. Among major users, the names most likely to be known by ordinary folks are Lufthansa, Sony, Nokia, and Yahoo!. For the web literate, Facebook and Wikipedia are among the most easily recognized names. I've already mentioned Oracle, and even IBM has been getting in on the PHP act lately. Although IBM's primary focus remains on Java, more and more PHP content can be found on IBM's developer pages, including some excellent introductory articles, evidence of the growing industry recognition that PHP is indeed a mainstream player. As if any more proof were needed, recent statistics from Alexa.com indicate that PHP is the power behind four of the top 10 Internet sites based on traffic volume — a strong indication that PHP can indeed scale to handle the big jobs.

From an IBM i perspective, a number of customers have successfully deployed PHP-based solutions. These include Cabel (a supplier of banking systems and services in Italy) and Cremer (a manufacturer of medical materials in Brazil), as well as Parts Depot (a distributor of automotive parts and paint) and Icon Fitness (better known by its brand names NordicTrack, HealthRider, and Reebok, among others) in the U.S. Expect to see news of a number of other major PHP deployments on IBM i in the coming months.

Why Use PHP?

I've already alluded to one major reason: the widespread availability of high-quality, free/low-cost PHP-based software. Let's consider a couple of examples. In recent years, I have met many customers who know they need a good help desk application but are simply unable to justify the cost. Thanks to the folks at Curbstone Corp., one of the leading PHP help desk applications, Mantis Bug Tracker, is now available in a native DB2 for i version called Mantis/400 (mantis400.com). Curbstone has been using the original Mantis Bug Tracker (mantisbt.org) to run its own support system for many years, and the company's way of paying back the PHP community was to produce a native DB2 for i port of the software for the IBM i market. The PHP application is free — as is support. That's hard to beat for a comprehensive and well-supported package.

One customer I met recently is like many of us in that he was facing a battle to keep the IBM i as an active development platform in his shop. The customer won the latest round in that battle by meeting the need for a new application in record time. Not with RPG mind you, but with a relatively low-cost (approximately $1,000) PHP-based solution. A team of four developers with no prior PHP knowledge launched a customized version of the new application in a matter of weeks. Because the developers used Zend Core, the application was readily extended to access native functionality by using Zend's IBM i toolkit that comes standard with the IBM i version of PHP.

Another reason to use PHP relates to programmer availability. Simply put, there are far more PHP programmers in the world than there are RPG programmers. You also will find that PHP programmers tend to be pragmatic in their approach to programming — just like RPG programmers. PHP programmers want to get the job done, not argue endlessly about the relative purity of architecture A versus architecture B.

If you hire PHP programmers, you will find that many of them quickly come to appreciate the benefits of IBM i for just that reason. Let them use free-form RPG, and they will grow to love RPG too. Just don't ask them to code in fixed format, or you'll have to repair the person-shaped hole they make in the wall as they hurriedly leave the building!

Want to grow your own PHP programmers? As much as I would love for everyone who needs training to attend one of my classes, the reality is that many shops lack the budget or time for such training. In such cases, the more education available to them at their desks, the better. The widespread availability of excellent PHP tutorials and code samples — not to mention a multitude of books and online courses — makes desktop training relatively easy.

Did I mention the manual? How many times have you wished IBM manuals would include meaningful examples and commentary from people who use the language in the real world? Welcome to PHP.net, the home of PHP and specifically online documentation (php.net/manual/en) for the language. In a word, it is mind-blowing. This PHP manual is wiki based, and almost every page features contributions from PHP programmers around the world. If only the RPG manual were done like that! Figure 1 lists a plethora of PHP resources on the web to help get you started exploring the language.

For me, however, the biggest reason to choose PHP to extend my RPG application set can be summed up in one word: achievability. I say this from the perspective of someone who considers himself a failed Java programmer. I learned Java some years ago. I can program in Java when I have to, and I can read and understand others' code. But I don't think in Java, and I doubt I ever will. Life has not afforded me the three to six months that I would need to devote to Java to feel as natural coding in it as I do when writing RPG or Cobol.

When I have made comments of this nature in the past, I have been jumped on for "insulting the intelligence of RPG programmers." So let's be clear about this: I'm talking about me — my experience — and that at nearly 60 years of age, I just don't learn as fast as I once did. If you recognize aspects of yourself in these statements and haven't yet tried PHP, give it a shot. I suspect you will soon become as big a convert as I have.

The biggest difference for me between PHP and Java is that when I code in Java, I need to think in an object-oriented fashion from the outset. Even if, at the end of the day, I've used many procedural techniques in my code, I need a comprehensive understanding of Java and its object-oriented nature before I can know when and how to "break the rules." PHP, with its origins as a procedural language, is far easier for an RPG and Cobol hack like me to get his head around. Why? Because I can code in a familiar style and yet can introduce OO concepts into my PHP code when they make sense.

I'm convinced that as I use more and more objects in PHP, I will begin to think in a more object-oriented fashion and evolve my coding into a full-blown object-oriented style. But I haven't had to use OO design concepts to exploit the power of the PHP classes that others have developed.

Another thing that most RPGers will like about PHP is that its error-handling model is much closer to RPG's than to Java's. PHP doesn't force you to handle errors. It lets you make the decisions and, just like RPG, issues appropriate runtime messages when you fail to handle errors as you should.

Where Can You Use PHP?

Well, certainly one can use PHP in the area of packaged applications as I have already mentioned. I would also consider it a prime candidate for refacing projects. Although one must still consider it a collection of possibilities rather than a full-blown solution, the Zend 5250 Bridge (Click Here) is rightly attracting a considerable amount of attention and has been successfully deployed in a number of major refacing projects. We can expect to see much more in this area over the next 12 months or so. Zend is due to make significant announcements soon; indeed, it may have already by the time you read this. Third-party software houses are also considering offering their own extensions and tools in this area.

PHP also should be considered when designing new web development projects. Its ability to simply call into IBM i commands and programs and directly access the database at both the record level and SQL level is a major benefit. Why not hire PHP programmers to design and build the web side of the application, and let the RPG programmers continue to build the business logic that is their core skill?

Many tools are also available for building new PHP applications. These range from low-level "point me at a database table and I'll build you a simple CRUD (create, read, update, and delete) application" scripts to full-blown tools such as BCD's WebSmart PHP (Click Here). I recently was introduced to a tool — the ATK Framework (atk-framework.com) — that I think holds great promise. It's an open-source application framework designed to facilitate the building of business applications with minimal code. The current version is not DB2 enabled, but the folks at ibuildings, who are the heart of the project, recently have become enamored with our favorite system to the extent that they are producing an i-specific version. If you can read Dutch, then you can find more information about it online (i7.nl). The rest of us will have to wait for the English version, although you can glean a little more information from a slide presentation on the web (Click Here). In the meantime, check out the demos on the ATK website, and you'll get a good idea of just what can be achieved with 20 or so lines of code.

Another area in which PHP should be considered is filling gaps left by RPG programs. By that I mean things such as supplying and consuming web services, sending emails, generating and parsing XML, and generating and modifying PDFs and Excel spreadsheets. Don't misunderstand me; many or all of these tasks can be done from RPG with the right set of service programs. Indeed, System iNetwork's own Scott Klement has been at the forefront of developing utility software that enables RPG programmers to fill such gaps. But useful and powerful as these utilities are, they are generally a lot harder to use than their PHP equivalents.

So Check It Out

PHP is fast becoming a vital and important part of the IBM i application development world, and I'm convinced it will only continue to grow in importance. Simply put, it just "fits."

Take the time to see what it can do for your shop and career. You won't be wasting your time — I guarantee it.

Jon Paris has been involved in IT for 40 years, his experience covering the spectrum from operations to compiler design. Jon joined the languages group in IBM’s Toronto Lab in 1987, where he was involved in the launch of the AS/400. In early 1989, Jon was assigned to the architecture and planning group with responsibility for the Cobol and RPG languages. He was one of the "fathers" of RPG IV and played a major role in its design. Jon left IBM in 1998, and with his partner Susan Gantner now runs Partner400, a company focused on developing and delivering application modernization education in the IBM i world. Jon is a frequent speaker at user group meetings and conferences around the world, and has a number of speaker excellence awards from COMMON.


A Few of My Favorite PHP Things

by Jon Paris

I was asked to create a list of the things I like most about PHP. For some reason I heard the words "favorite things," and of course visions of Julie Andrews sprang into my mind. The resulting short list should be sung aloud to the tune of — I don't need to tell you that.

Associative arrays and easy web services,
Application packages with no heavy charges,
Ease into OO without the brain pains.
These are a few of my favorite thaings.

Hmmm, perhaps I should stick to programming. Regardless, I'll take a look at associative arrays later in my comparisons between PHP and RPG.

Before we get into the code, however, let's go over some differences between the two languages: RPG requires a semicolon (;) at the end of every free-form line. PHP has one or two exceptions that I'll cover in the discussion on conditional expressions.

All variables in PHP must start with a dollar ($) sign. PHP uses the period (.) as the concatenation operator, not the plus (+) sign of RPG. When performing comparisons, PHP requires double equal (==) sign ; a single equal (=) sign is used for assignment.

In PHP variable names, case matters. This is the one that will most often trip up RPG programmers when they first get into PHP. The variable $myVar is not the same as $MYVAR, as it would be in RPG. They are two different PHP variables. Luckily, the auto-completion feature of the Zend Studio editor helps keep things straight.

In the sense that RPG defines data (i.e., the D‑specs), there really is no PHP equivalent. PHP defines variables simply by using them. So in the example in Figure B, there is an equivalent only when the RPG variables are initialized at the point of definition. Another major difference between RPG and PHP in this regard is that PHP variables do not have a fixed data type. PHP is a dynamically typed language, and a variable's type is determined by what is placed in it. Based on this fact, it might occur to you that it's possible for a variable to change its type during the currency of a program, and this is indeed the case. It is not likely to promote suicidal tendencies, though. As you begin to appreciate the power and simplicity that dynamic typing can bring to your applications, you may find yourself longing for the same capability in RPG. Certainly it takes some getting used to after having worked with such a strictly typed language as RPG for many years. Your concerns also will be alleviated as you study the PHP language and realize that functions are available to test the current type of a variable and determine in advance whether its content can successfully make the transition from one type to another.

Figure B shows the PHP code that matches — as best it can — the RPG example in Figure A. Remember, array indexes in PHP start at 0, so all the index values in the PHP example are one lower than the RPG equivalent. Also note that the two programs will not produce identical output. It is easy to load values in the multidimensional array (multiDim) in the PHP version, but it would have cluttered the code too much in the RPG version, so I omitted it.

Mathematical Operations

Mathematical operations in PHP and RPG are similar. The only differences relate to the variable types, in that PHP supports only two numeric types — float and integer. Consequently, some numeric operations that we take for granted in RPG require the use of PHP's rich library of decimal functions to achieve. One such example is rounding a result field. However, the most operations you are likely to perform within the context of a PHP web application can be accomplished by much the same kind of code that you would expect to see in an RPG program. And as I noted in the article, it's likely developers will call RPG routines to perform some business operations.

Arrays

When dealing with single-level arrays, which until recently is all RPG had, the only real differences between the two languages are

  • PHP indexes start from 0 and RPG from 1.
  • RPG uses parentheses — ( and ) — whereas PHP uses square brackets — [ and ].
  • The number of elements must be defined in advance in RPG, whereas PHP doesn't care. The language will just change the size as needed.

When it comes to the contents of arrays, however, the two languages could not be more different. RPG insists that the definition of every element in the array be identical (i.e., if the first element in the array is a five-digit number, then so too must the second, the third, the fourth, and so on). PHP, in keeping with its dynamic nature, lets any element contain any type of data — and I really do mean any type of data. In fact, a PHP array element can contain another array, and that array in turn can contain other arrays and so on. This is how PHP achieves multidimensional arrays.

PHP arrays have many other features that RPG doesn't have. For example, if I assign a value to an array but leave the brackets empty, PHP automatically assigns the value to the first unused entry for me. I can, of course, be specific about which element I want to receive a particular value, as in Figure B. You'll also note in the PHP examples that the array() function assigns initial values to an array, much like the RPG example in Figure A uses a compile time array. But I think you'll appreciate that it's a lot more obvious in the case of PHP what is being assigned where. I've also tried to illustrate how a simple, two-dimensional array in RPG (Figure A) might be represented in PHP (Figure B). Look at the definition of $multiDim, and you'll see what I mean.

I noted earlier that one thing I like about PHP is associative arrays. Figure C shows an example of one such array. The primary difference here is that instead of having a numeric index, there is a character "key" that can be assigned when the array is built. This key provides the means by which programmers can look up values in the array. In addition, functions are available to sort the array by key or element values. You can even switch the keys and their values. In brief, the rich set of functions available in PHP to process arrays enables you to treat them like miniature databases!

Figure C shows an example of an associative array so that you can get an idea of why I like them so much. In the array definition for $languageData, there are pairs of values rather than single values. I tend to think of the "=>" syntax as meaning "points to." In other words, the index "Java" points to the value "just not me."

Figure C also demonstrates PHP's very useful foreach construct. Foreach automatically iterates through an array, assigning the value of each element in turn to the specified variables. In the Figure C sample, I set the construct to assign the key for the element to the variable $language and the associated value to the variable $opinion. There is no need for concern about empty array elements because they are automatically skipped. The foreach construct is a versatile capability that is widely used in PHP. In fact, it's rare to come across a script that doesn't use it.

Conditional Expressions

The RPG sample in Figure A starts with a FOR loop, and the PHP equivalent in Figure B uses syntax that closely corresponds to RPG. One difference between RPG and PHP that may cause you to trip up at first is that PHP requires the conditioning expression be within parentheses. Although that is good practice for RPG programs, it isn't compulsory. The second difference is that the semicolon (; ) at the end of the FOR operation in the RPG sample is replaced by a colon (:) in PHP. The colon is an alternative syntax supported by PHP for a number of control structures such as if/elseif/else and while. I used the colon here because it is the closest match to the syntax used by RPG.

The more standard PHP syntax, however, mirrors that of Java and C in that PHP uses a curly bracket ({) to introduce the beginning of the executable block and another (}) to close it. So the PHP syntax in Figure D would be more familiar to PHP programmers than that used in Figure B. Also note that the use of the colon or curly brackets in conditional expressions is where PHP differs from RPG's use of the semicolon at the end of every statement.

PHP also offers the standard set of control constructs, such as while loops, DO/while loops, and switch/case (similar in nature to RPG select/when operations). You can find more information about these structures in the many sources of PHP information on the web and the countless number of textbooks available in bookstores.

Functions

RPG IV 6.1 contains approximately 80 built-in functions; PHP's standard function library contains almost that many for the handling of arrays alone! The range of PHP functions covers the spectrum from sending email to parsing and generating XML, creating and updating Excel spreadsheets, generating PDFs, and more. And these are just the ones so commonly used that they're considered part of the standard PHP language. There are so many more functions in other PHP libraries, for example, the PHP Extension and Application Repository (PEAR) collection (pear.php.net), that it almost defies belief for those of us who have grown up with the RPG/400 language, which wouldn't have recognized a function if it was bitten by one.

Just as RPG does, PHP lets you design your own functions. The principal difference between the two languages is that PHP functions are far easier to write than RPG functions because they don't require prototyping. PHP functions also have one other major feature that I like, which is that you can supply a default value for any missing parameter. This significantly simplifies the logic in cases in which, for example, you want to use today's date if the user doesn't supply a date as a parameter.

Using OO

Of course we can't write object-oriented (OO) programs in RPG, but we can take advantage of RPG's built-in interfaces to Java to call Java methods and create Java objects. PHP provides similar support in the form of a Java bridge. However, because PHP includes OO constructs, many PHP programmers simply take advantage of methods in existing PHP classes within the context of an otherwise procedural piece of code. This is not to say that pure OO programming isn't widely practiced in the PHP community; it is. But since I am drawing comparisons with RPG, I won't dwell on that aspect of PHP.

You can see an example of what I mean in Figure E, which uses the SoapClient class to access the Google spelling suggestion web service. Yup — with just these few lines of code, I am calling a web service, passing it the required parameters (in this case the search phrase and my Google ID), and checking and displaying the results. At first glance, you might not be able to spot where the objects are used in Figure E. But if you are familiar with another OO language, you'll have spotted the operation new that creates the web service client object based on the contents of the Web Services Description Language file that Google supplied. The only other spot in Figure E where OO notation comes into play is the invocation of the web service and the assignment of the response to $result. Notice the "->", which tells us that we are going to use the "doSpellingSuggestion" method in the $google object created earlier in the sample. Couldn't really get much easier, could it?


Want to use this article? Click here for options!
Want to subscribe? Click here!
  • rsanders
    3 years ago
    Feb 18, 2009

    We've received several comments, as well as a reply from author Jon Paris, since this article was published in the January issue:



    Thanks for the great article, "Attention RPG Programmers: PHP Spoken Here," January 2009. PHP has been in my awareness for some time now, but I haven't taken the time to learn anything about it. Thanks for the foundation. Now, if I did want to start playing around with it, do I have to buy something first? We're on 5.4.

    Donna Goldman, via email



    My boss and peers are abuzz about your PHP article in the January System iNEWS. While I have started doing PHP research (and it's nice to know that your list of references match up to many I have already found), it would be nice to have a simple "to do" list of getting PHP up and loaded on a System i box for little (or preferably no) cost. The Zend products both appear to be for-cost, which is impossible for me at this point (our company put a freeze on all capital expenditures), and while it would not be the first time I loaded non-IBM products on our development box, I would rather know that I am going with the right ones. Thanks for any help/direction you can provide!

    David R. Sager, via email



    I read with interest your article(s) about PHP in the January 2009 issue. One thing I could not find in your articles (and maybe this was not your objective) was how to run or execute a PHP script. I think that PHP needs to be embedded in an HTML page (correct), so this means that the page must be served out of somewhere. Have you written any articles about the set up, configuration, or the minimum things that a System i shop must have to execute PHP pages?

    Antonio Mira, via email



    Author Jon Paris replies: Thanks for the kind words. Glad to hear that the article stirred up some interest. Fear not--installing PHP is not only easy but free! There's nothing you have to buy, and there are a number of options you can pursue. As you have surmised, it was not the intention of this piece to show "how" to run PHP. Other articles previously published in System iNEWS and elsewhere have covered that territory as well as the details of how to obtain and install PHP.



    The Zend Core is free to IBM i users, courtesy of a deal between Zend and IBM that gives Zend a fee for each copy of Zend Core for i5/OS that is downloaded. The original deal was for three years (which is up in April, I think), but my understanding is that the contract is being renewed for another three years, so you need have no fear. You can download Zend Core from zend.com/downloads. You need to register and supply your system's serial number, but that is all. There are pre-reqs you need to install before loading Zend Core, but they too are all free, and you probably have most installed already.



    Not only is Zend Core free, but Zend Studio is also free to IBM i users and you can download it from the same page. Only Zend Platform (a high-performance version that you might consider in the future if running a large, heavily utilized site) has a fee associated with it. The only other fees are if you want Zend maintenance support beyond the free web-based support that comes with the basic package. The Zend forums are pretty good, though, and provide a lot of information on how to install the most popular of the open-source applications.



    When you download Zend Core, I would suggest that you pick the version that includes an install of MySQL—you will need it for much of the open-source software you are likely to want to use. The other choice is whether to use the automated PC installer. I have found this works well but only if the PC in question is on the same network as the IBM i. When you use it over (say) a DSL connection, it doesn't handle the inevitable timeouts very well.



    Use the other option if, for example, installing over a slower remote connection such as a DSL connection from home. You need to register with Zend and supply the serial number of your system—this is how Zend can determine that your authorization. Make sure to check the list of pre-reqs and install any missing items before you attempt to install Zend Core.



    From the same site you can download and install Zend Studio (free of charge for IBM i users). Use this for all your PHP coding regardless of how you end up running it. If you want, you can use this just to "play" with PHP—but the only database support will be for SQLite.



    If you do want to play with PHP, you can load it on a PC. The two distributions that I am most familiar with are XAMPP (apachefriends.org) for Windows/Linux and MAMP for Mac (mamp.info). These install an Apache web server, MySQL, PHP, and a bunch of useful tools. I personally use MAMP but have used XAMPP in the past. Both are good packages that save you having to collect all the "bits." Zend also offers a similar package of its IBM version for PCs—it includes DB2 support, which is nice, but I have not used it extensively.

  • rsanders
    3 years ago
    Jan 07, 2009

    Hi readers,


    If you're wondering how to install Zend and some of the other PHP goodies available, check out these helpful articles on our website:



    "Open-Source Web Dev Stack in i5/OS"



    "PHP Installation, Configuration, and Setup"



    And let us know what you think!



    ?Rita-Lyn Sanders, senior industry editor


  • You must log on before posting a comment.

    Are you a new visitor? Register Here
     

    around the forums

    PASE - HTMLDOC (Scott's binary version) Error: please Help!
    Forum Name: RPG
    16 May 2012 01:58 PM | Replies: 3
    IFS directory structure
    Forum Name: Systems Management
    16 May 2012 11:52 AM | Replies: 2
    IFS folder/file authority
    Forum Name: Communications/Networking
    16 May 2012 08:45 AM | Replies: 6

    ProVIP Sponsors

    BCD

    Join Our Community!

    Subscribe today to iPro Developer! iPro Developer is packed with technical know-how for developers of IBM i, iSeries, AS400 and System i. Sign up now to get your full subscriber benefits including:

    • Code available for download
    • Full access to the online article archive (including all System iNEWS ProVIP content)
    • Downloadable ebook with past 6 months of articles
    • Discounts on eLearning classes, self-paced training, in-person events, and more!
    iPro Developer Newsletters
    • Get the Latest News
    • Product Updates
    • Helpful Tricks
    • Productivity Tips