Slides from today’s talk on leveraging RPG with the PHP Toolkit and XMLSERVICE

I’ve posted the updated slides from a talk I just presented about the PHP for IBM i Toolkit. The talk was given at a free virtual conference presented by the COMMON user group and was sponsored by BCD.

The slides are available on my “past presentations” page.

I’d like to hear how you are using the toolkit. Post comments here.

IBM i performance tools are for developers, too

At last Friday’s OCEAN conference in Costa Mesa, Calif., IBM’s Dawn May and I presented “The Art of Performance Diagnostics,” showing how we’ve used tools that are free (Performance Data Investigator) and low-cost (Job Watcher) and included with IBM i to identify and resolve performance bottlenecks that would have been difficult using traditional green-screen tools alone.

One audience member said, “Developers should know about these tools! They aren’t just for system administrators.” With these tools and with documentation such as the IBM i Performance FAQ, performance expertise is within reach of developers as well as sysadmins.

How do IBM i performance tools help developers to be more effective? Developers can:

  • Respond to any reported slowdowns by looking at recent performance data. IBM i captures performance statistics transparently, enabling developers or admins to “go back in time” to look at past performance.
  • Even better, identify and resolve problems proactively during testing, rather than waiting for users to report problems.
Speakers Alan Seiden and Dawn May presenting The Art of Performance Diagnostics for IBM i at the OCEAN conference, July 17, 2015. Photo by Matthew Murtha

Alan Seiden and Dawn May presenting The Art of Performance Diagnostics for IBM i at the OCEAN conference, July 17, 2015. Photo by Matthew Murtha

Determining the proper procedure name in toolkit calls

Exact name is required when calling a service program’s procedure

Some developers make a common mistake when calling a procedure in a service program using the PHP Toolkit for IBM i or any toolkit based on XMLSERVICE. It’s easy to supply the wrong procedure name, or the right name in the wrong case (upper/lower/mixed). Using this example of calling a procedure using the toolkit, we find the following (correct) program/procedure call:

$result = $conn->PgmCall('MYPGM', 'MYLIB', $params, $retParam, 
                         array('func'=>'myproc'));

The procedure name ‘myproc’ must be given exactly as it is, not ‘MYPROC’ or ‘MyProc’, because under some circumstances the name may be case-sensitive.

How to determine the correct procedure name

Run the DSPSRVPGM command, using your desired library and program names as parameters:

DSPSRVPGM SRVPGM(MYLIB/MYPGM) DETAIL(*PROCEXP)

The above command will return service program information, including the names of all procedure exports. For example:

        Display Service Program Information                       
                                                    
Service program  . . . . . . . . . . . . :   MYPGM                           
  Library  . . . . . . . . . . . . . . . :     MYLIB                          
Owner  . . . . . . . . . . . . . . . . . :   PROGRAMMER                        
Service program attribute  . . . . . . . :   RPGLE                             
Detail . . . . . . . . . . . . . . . . . :   *PROCEXP                          
                                                                               
                              Procedure Exports:                               
                                                                               
Procedure Name                                       ARGOPT 
myproc                                               *NO    
orderHeader                                          *NO

This service program contains two procedures: ‘myproc’ and ‘orderHeader’. Thus, to call the former, we’d supply array(‘func’=>’myproc’) in the PgmCall method. If we wanted to call the second procedure, we’d use array(‘func’=>’orderHeader’), observing case sensitivity, which often matters (a topic for another day).

OCEAN conference July 17-18, 2015, Costa Mesa, Calif.

Join me and 23 other speakers for this unique west-coast conference. Get a jump-start on your challenges and opportunities by talking to experts in the world of IBM i and Power Systems. SQL, DB2, RPG, PHP, Ruby, more, more, more… http://ocean400.org

PHP performance webinar, June 11, 2015

Update: a recording of the webinar is available to all registrants. See the link below to register.

——–

I’ll be presenting a free webinar, “How to ensure speedy PHP applications on IBM i,” on Thursday, June 11, 2015, at 1pm Eastern/New York time. The webinar is sponsored by BCD. Registration and more information: http://www.bcdsoftware.com/bcdtracks/webinars/ondemand/php-performance-alan.htm

“Our process now runs 30-50% faster, thanks to one tip from Alan’s presentation.”
— Mike Meszaros, Software Developer, Specialty Pipe & Tube

Collaboration at COMMON

The 2015 COMMON annual meeting and expo, now in its first day, is helping speakers and attendees create innovation through IBM i integration: open source, closed source, IBM and vendor solutions. For example, of my six presentations during this conference, two are collaborations:

The Art of Performance Diagnostics, with IBM’s Dawn May, allows us to show, among other topics, how IBM i’s integrated performance tools complement green-screen tools and third-party tools (in this case, Zend Server) to pinpoint and solve performance issues (here, PHP-and DB2-based applications).

PHP Tricks for RPG Developers, a talk jointly created by RPG and SQL expert Birgitta Hauser and me, combines RPG, PHP, and DB2, allowing RPG to achieve graphical (charts and graphs, PDF and Excel files) and internet (json-based web services, flexible email) functionality using native functions.

Conferences such as COMMON serve a need that’s difficult to replicate back at the office—brainstorming and sharing possibilities among interdisciplinary peers, or sitting side-by-side with like-minded colleagues who work for different employers, to try something new. This week, for example, some of us plan to share knowledge on compiling binaries in PASE and to further the potential of open source on IBM i. I’m looking forward to presenting my talks (both joint and solo) and helping to realize new ideas with forward-looking colleagues during the conference.

Birgitta Hauser and Alan Seiden collaborate on their talk at COMMON 2015

Birgitta Hauser and Alan Seiden collaborate on their talk at COMMON 2015

Video promo for WMCPA IBM i conference: March 10-12, 2015

Join me and 20 other speakers at the Wisconsin Midrange Computer Professional Association (WMCPA) spring technical conference, March 10-12, 2015, at the Lake Lawn Resort on the shores of Delavan Lake.

Speakers: Aaron Bartell, Rob Bestgen, Larry Bolhuis, Tom Cremieux, Floyd Del Muro, Raymond Everhart, Margaret Fenlon, Susan Gantner, Charles Guarino, Scott Klement, Chris Koppe, Jon Paris, Mike Pavlak, Jim Ritchhart, Debbie Saugen, Alan Seiden, Dr. Frank Soltis, Robert Swanson, Robin Tatam, Jeff Tickner, Steve Will

Details: http://wmcpa.org/index.php/conference-2015/ibmi-conference-2015

Zend Framework 2 performance optimization: it works

Zend Framework 2 (ZF2) provides optimization techniques that are often overlooked by published performance tests. One excellent source for such techniques is a presentation by Gary Hockin. I was thrilled when my client and friend King Harrison IV of K3S began testing the effect of these techniques on his ZF2 application running on IBM i.

King’s initial tests produced a 600ms reduction in load time, obtaining respectable performance for his database-heavy application. He plans to update his blog post with further speed improvements as he implements them.

Read King Harrison IV’s blog post about ZF2 performance improvements.

Save your fingers when using PHP-CLI

In Batch PHP I showed how to call PHP from a command line. For example, with Zend Server 6 or 7 on IBM i, one would launch a PASE command line using the command CALL QP2TERM, or launch QShell using QSH, then type a command such as this:

/usr/local/zendsvr6/bin/php-cli myscript.php

For those of us who use PHP-CLI often, the above command can be a finger-buster. Let’s shorten the path by creating a symbolic link:

cd /usr/bin
ln -s /usr/local/zendsvr6/bin/php-cli phpc

I created the symbolic link in /usr/bin, a directory that is likely to be in any user’s path.

Now try the shortened command:

phpc myscript.php

To test the shortcut without a PHP script, use the -v switch, which requests version information (‘v’ for version) about your PHP installation.

phpc -v

The above command will return version information that starts out something like this:

PHP 5.3.6 (cli) (built: Apr  7 2011 09:37:14)                                
Copyright (c) 1997-2011 The PHP Group                                        
Zend Engine v2.3.0, Copyright (c) 1998-2011 Zend Technologies                
    with Zend Extension Manager v5.1, Copyright (c) 2003-2010, by Zend Techno
logies                                                                       
    - with Zend Data Cache v4.0, Copyright (c) 2004-2010, by Zend Technologie
s [loaded] [licensed] [disabled]                                             
    - with Zend Guard Loader v3.3, Copyright (c) 1998-2010, by Zend Technolog
ies [loaded] [licensed] [enabled]                                            
    - with Zend Job Queue v4.0, Copyright (c) 2004-2010, by Zend Technologies
 [loaded] [not licensed] [disabled]

By creating a symbolic link to the PHP-CLI binary, practitioners of PHP can speed their work while saving their fingers.

For more about symbolic links, see my article Link up with QShell.