Archive for December, 2007

Christmas is Coming FAST!

December 19th, 2007

As with most IT shops we have a rush of activity towards the end of the year, this year is no different and we are struggling to find time to keep the Blog updated with content we want to write about. Its not that we dont want to write but the wolves need to be fed or we get eaten!

We hope to have a bit more time in the New Year to catch up on some of the projects we have already started to comment on plus we have a lot of others to develop and produce the content for. Hopefully next year will give us a bit more time to publish more articles on how we use ‘C’ and probably extend some of the code we have already published to make the utilities more user friendly. Another task will be getting more PHP code out there, showing how how we have used that on our website and what we are doing with it for application modernization. First trials have not been as sucessful as we would want simply because of the model we need for our existing products but we will try to show where it does provide a lot of functionality and benefit.

We hope you all have a very Happy Holidays and look forward to catching up again next year!


Main Category

LAMP Server on hold for a while

December 13th, 2007

As usual we are very busy trying to get everything closed up ready for the Christmas break. This has meant some of our work on non revenue generating projects has to take a back seat! So we expect to get back onto the LAMP server project as soon as we see a bit of daylight!

One thing we are going to be looking closely at is MySQL DB synchronization across systems, we feel that will fit in very nicely with our skills!


LAMPS Server, MySql

i5, iSeries, AS400, AS/400,System i! What do you search for?

December 13th, 2007

I was looking at the rankings of our websites and how people have actually found us on the web. You will see from the content we have served that we have called it the i5 in the majority of posts, and only occasionally referred to it as one of its other names.

In the webstats we have access to you are presented with a list of the search words used to find your site so we thought it would be a good indicator of how people are coming to find our site and blog. We were very surprised to find that most who came through the site from a search engine had used the i5 keyword? In fact we could not find any of the above names in the search keywords that brought the user to the site!

Does that mean most users are only using i5 as the name of the system? I doubt it! I think because we have concentrated only on the i5 name we are probably missing a lot of internet traffic that should have found the site if the search engine had actually linked one of the other names with our web pages. This can easily be overcome by adding content to the pages which mentions the above names, but having to mention all of the above names each time I refer to the system will certainly make a lot of the content unreadable. I could use meta tags which contain all of the names possible, but the search engines now rank using complex algorithms to determine if the content being served is actually associated with the names contained in the meta tags!

Fact is because we have a number of names that people use, some refuse to stop calling it the AS/400 (as400, AS400,as/400 etc etc) you can see how the meta tags can be very convoluted. Is this a problem? Only if you use the internet to find the information you need, if you search for DR software using AS/400 in your search words you will not find our site, however use DR i5 and we are close to the top of the tree! The same goes for a lot of sites out there who have adopted a single name to reduce confusion.

If you need to find everything that pertains to the system you could add all of the names possible to the search string and see what you get, again the search engines rank the list and will place content in an order which each page contains your search string, if AS/400 is the first name you use will it return the pages with AS/400 in the page content ahead of the pages in subsequent key words!

While this is not unusual it does show the effect something as simple as a system name can affect how a company has to promote its products and how users have to consider the name when looking for content relevant to their needs.

Adding thousands of alternative keywords in meta tags and trying to hide content which has these words in them may help in some cases, but many of the search engines are now running blacklists. If you get onto one of these blacklists it doesn’t matter how relevant your content is to the users search criteria you wont be listed, so you have a fine line of ensuring your content is legitimate and you dont cause the search engine to blacklist you!


High Availability, i5 Marketing

Easycom and i5_pconnect() function

December 6th, 2007

I have been trying to get to the bottom of the i5_pconnect() function and if you read the previous posts and comments you will see that its not easy to get!

The last comment from Easycom support suggested that I should download the extension after registering, so I did!

first thing was the registration took me back to a page to download the product which is the same as the page I could get to without registering! Then I took the link to the downloads which gives a list of all the downloads they have, so I selected the one for Eascom for php 3.0.7 (note this is not This then gave me another registration screen which I had to fill in again before I could download the zip file. (Not a great advert for a site running php is it?) I also noticed that it would only give a 30 day trail not a fully functioning product? Again the note from the support group didn’t mention this.

So I accepted the information and the download started. On receipt of the file I opened it straight up and went to review the documentation, guess what no i5_pconnect() or i5_get_property() functions are described!

Here is a list of the functions available

Easycom For PHP functions and parameters list.


resource i5_connect ( string sever, string profil, string password [, array options] )

bool i5_close ([resource connection])

bool i5_adopt_authority ( string user2, string password2 [,resource connection] )

Native access

resource i5_open ( string namefile [, int mode ][,resource connection] )

bool i5_add_new ( resource result [, int mode] )

bool i5_edit ( resource result [, int mode] )

bool i5_cancel_edit ( resource result )

bool i5_setvalue ( resource result, int position, mixed value )

bool i5_setvalue ( resource result, string namefield, mixed value )

bool i5_setvalue ( resource result, mixed array values )

bool i5_update ( resource result )

bool i5_range_from ( resource result, bool include, array values )

bool i5_range_to ( resource result, bool include, array values )

bool i5_range_clear ( resource result )

bool i5_data_seek ( resource result, int num_enreg )

bool i5_seek ( resource result, string operator, array valueskey )

bool i5_seek ( resource result, int option, array valueskey )

int i5_bookmark ( resource result )

bool i5_free_file ( resource result )

bool i5_link ( resource result_master, array keys_master, resource result_detail, array keys_detail )

bool i5_nolink ( resource result_detail )

resource i5_program_prepare ( string name, [, array description )

bool i5_program_call ( resource progHdl [, array in, array out])

void i5_program_close ( resource progHdl )

bool i5_new_record ( resource fileHdl, array data )

bool i5_update_record ( resource file, array data )


resource i5_query ( string query [, resource connection] )

bool i5_free_query ( resource query )

Reading and informations

array i5_fetch_array ( resource result [, int option ] )

array i5_fetch_assoc ( resource result [, int option ] )

object i5_fetch_object ( resource result/query [, int option ] )

array i5_fetch_row(resource result [, int option] )

array i5_info ( resource result [, int position ] )

array i5_info ( resource result [, string namefield ] )

int i5_field_len ( resource result, int position )

int i5_field_len ( resource result, string namefield )

string i5_field_name ( resource result, int position )

int i5_field_scale ( resource result, int position )

int i5_field_scale ( resource result, string namefield )

string i5_field_type(resource result, int position )

string i5_field_type(resource result, string namefield )

array i5_list_fields ( resource result )

int i5_num_fields ( resource result )

int i5_affected_rows ( [resource connection] )

mixed i5_result ( resource result, int position )

mixed i5_result ( resource result, string namefield )

string i5_getblob( resource result, int position )

string i5_getblob( resource result, string namefield )

bool i5_setblob ( resource result, int position, string blob )

array i5_get_keys ( resource file )


bool i5_transaction ( int mode [, resource connection] )

bool i5_commit( [string comment] [resource connection])

bool i5_rollback ( [resource connection] )

parameterized / prepared requests

resource i5_prepare ( string query [, resource connection] )

booleen i5_execute ( resource stmt [, mixed param1] )

booleen i5_execute ( resource stmt [, array params] )

bool i5_setparam ( resource stmt, int position, mixed value)

mixed i5_getparam ( resource query, int position )

bool i5_bind_param ( resource stmt, mixed &var1 [, mixed &var2…] )

bool i5_bind_result ( resource result/query, mixed &var1 [,mixed &var2 …] )

bool i5_bind_result ( resource result/query, mixed &var, string namefield )

bool i5_next_result ( resource stmt )


bool i5_cmd ( string command [, resource connection] )

string i5_cmdget ( string namevariable [, resource connection] )

bool i5_command ( string name, array inputs, array outputs)

bool i5_remotecmd ( string commande [,resource connection] )

string i5_get_system_value ( string name)

Errors management

array i5_error ( [resource connection] )

int i5_errno ( [resource connection] )

string i5_errormsg ( [resource connection] )

bool i5_start_testfile ( string trace, int level [, bool horodatage [,resource connection] )

Data area

bool i5_data_area_create ( string name, int size )

string i5_data_area_read ( string name [, int offset, int length )

bool i5_data_area_write ( string name, string value[, int offset, int lenght] )

bool i5_data_area_delete ( string name)

Program Calls

resource i5_program_prepare ( string name, [, array description] [, resource connection] )

resource i5_program_prepare_PCML ( array description [, resource connection] )

bool i5_program_call ( resource program , array params[, array retvals])

void i5_program_close ( resource program )

System Values

string i5_get_system_value ( string name)

Data Queues

resource i5_dtaq_prepare ( string name, array description [, int key] [, resource connection] )

mixed i5_dtaq_receive ( resource queue [, string/int operator, string key ][, int timeout] )

bool i5_dtaq_send ( resource queue, string key, mixed data

bool i5_dtaq_close ( resource queue )

Object Listing

resource i5_objects_list ( string library, [ string name, string type, resource connection ] )

array i5_objetcs_list_read ( resource list )

bool i5_objects_list_close ( resource handle )

Spooled File

resource i5_spool_list ([, array description] [, resource connection] )

array i5_spool_list_read ( resource spool_list )

void i5_spool_list_close ( resource spool_list )

string i5_spool_get_data ( string spool_name, string jobname, integer job_number, string username, integer spool_id [string filename] )

Job Log List

resource i5_jobLog_list ( [array elements, resource connection] )

array i5_jobLog_list_read ( resource list )

bool i5_jobLog_list_close ( resource handle )

Active Job List

resource i5_job_list ( [, array elements, resource connection] )

array i5_job_list_read ( resource list )

bool i5_job_list_close ( resource handle )

User Spaces

resource i5_userspace_prepare ( string name, array description [, resource connection] )

bool i5_userspace_put ( resource user space, params )

bool i5_userspace_get ( resource user space, array params )

bool i5_userspace_create ( properties [, resource connection] )

It looks to me like you get a lot more functionality and again if you need it you should probably sign up for the download.
I wont be installing for a couple of reasons, firstly I dont need anything here, secondly I still have not been assured that this will not mess up the Zend install? If I do install this will it also overwrite my existing ability to run Easycom as installed by Zend??

Couple of points I would like to make clear.

1. The Easycom support team have good intentions, but they dont seem to have control over the actual content of each release.
2. The Easycom statements are misleading, you dont get free support, you get a 30 day trial of the Easycom for php.
3. The Easycom website needs a serious overhaul, why make me give my information in twice and why not go straight to the download after the initial registration.

So there is still confusion and its all at the hands of Easycom to sort out! perhaps there are no functions available and its all a mistake?


PHP, PHP Programming

The Fog of war! Perhaps we are getting closer to the truth…

December 6th, 2007

Here is a post from the Zend site which adds some information about i5_pconnect() function.

Actually you can’t download it, in the Zendcore 2.5, the version is

For documentation, we did not again finish the documentation of the new functions.

I think that this version of i5 toolkit will be in the next version of ZendCore.

I’m sorry for the announce of functions that you can’t test now.

We know Zend have the new functions due to conversations they had with us but the naming doesn’t stack up still! But clearly we cannot download the extension? Yet if you go to the Easycom site it does offer you additional functionality? You can tell when a product is catching on when you have this kind of confusion and positioning going on, everyone wants a piece of the pie!

We have ZendCore 2.5.0 which when installed shows Easycom extension to be NOT as stated? so there could be a lot of new functionality which is getting bogged down between the vendors? Doesn’t really matter what they call it though as long as we get the functionality…

Perhaps I will try to get it via the Easycom site??


PHP, PHP Programming

Could not sign into the admin pages

December 6th, 2007

Bad behaviour had a small problem which stopped us signing into the blog from our IP address. The plugin is meant to stop the bad boys out there hacking into the blog but somehow it had recognized our own IP address as a bad one and blocked us! Simple solution was to download the latest copy of Bad_Behaviour (2.0.11) install it and you can get back in…

So if you get the message and are directed to a site which says contact yourself and enter a key, this is the problem!


Wordpress tips

How many sources of php?

December 5th, 2007

I received an email this morning from Easycom-Aura about the i5 tool kit. Here is the content

Dear PHP developer,

AURA Equipments – the creator of the PHP i5 toolkit extension for PHP For i5/OS – introduces iStorage for MySQL, a new product that integrates DB2/400 databases into MySQL.
With iStorage For MySQL, data is stored on DB2/400, while it is accessible from external applications through MySQL API.

DB2/400 is now an engine that power MySQL.

iStorage For MySQL centralizes the data in one single storage, and gives access from all the interfaces.
It can move original MySQL tables to DB2/400.
Tables become accessible from MySQL applications, and OS/400 native applications as well.
iStorage For MySQL also connects existing DB2/400 tables to MySQL.

Now, when you install an existing PHP application on System i, you don’t have to change the script to use DB2 APIs. Just move the tables you want to access, from MySQL to DB2/400, and keep the MySQL API calls in PHP scripts.

Try iStorage for MySQL.
Get your trial copy from
or reply this message, describing your project and your needs in using MySQL on System i.

AURA Equipments is the creator of the PHP i5 toolkit extension for PHP For i5/OS.
Do you know you can get free support on PHP i5 toolkit, and additional features ?

Thank you.
Best regards

Now a couple of things really struck me as strange here?

Firstly I seem to remember IBM announcing via various forms that they would be providing a MySQL DB2 mapping that would allow you to store your MySQL tables as DB2 tables and still run MySQL queries against it? Is this not what this iStorage is offering us? If so why are we being offered a free trial? A free trial would indicate this will be a chargeable offering one the trial has finished?

Secondly, they are mentioning the i5 Toolkit and offering free support for it? Do we not already get this from Zend? What is the exact tie up between Zend and Easycom-Aura? The other point to note is the offer of additional features? does this mean you have to buy the additional features, if not why are they mentioning them?

I am a big supporter of the php language and I thinks its addition into the i5 collection of supported languages is a great thing, but to start creating this kind of confusion in the market is not going to help!

I am also still trying to track down the elusive i5_pconnect function, a note to the forum this morning said I should download the latest ZendCore and it is in there? Well I did that, I also ran the updater on the system to bring in the latest versions of all the extensions and while it did show its does not have any mention of the new features? I think you have to get of the easycom extension to get these features? This is not available anywhere and speaking with Zend Support R&D there have only just received a copy.

If you are reading this blog for its php content I strongly request that you get involved in the forums and blogs like this to start expressing your needs and wishes. IBM seems to be standing in the back row here and not getting involved in how this all fits together.


PHP, PHP Programming

php supprt for Persistent connections

December 4th, 2007

We wrote last week about how our product modernization efforts (putting a php GUI in front of our products) was stuck due to the php i5_connect function not being persistent. Well it looks like there is hope on the horizon. We noticed a post on the Zend Forums about a similar requirement for performance enhancement, they simply noticed the i5_connect function was taking sometime to complete and wanted a way of allowing the connection to be reused and not have to initialize it everytime. Aura support had mentioned there is a solution in version of the EasyCom extension, I checked the version shipped with the latest ZendCore and its I have spoken with Zend about how to install the newer extension (they didnt even know these guys had a persistent connection available originally?) and they have promised to check out just how viable it is to download and install a new extension to the ZendCore. As soon as they give us an answer we will post it here…

It looks like there are a number of new functions available as well? The biggest problem I have found with the i5_* functions is the lack of documentation and suitable examples on how to use them. I have been using php for sometime yet still find the function documentation lacking in detail and suitability. Again I have requested Zend get more adequate documentation out there, otherwise people will stop looking at php as a viable solution to their application modernization requirements. If you feel the same as I do I would suggest you send a note to Zend Support stating just how the documentation content is affecting your way forward with php… Perhaps we are just so used to having the IBM manuals to work with and the php documentation isnt anywhere near that detailed?

I would also suggest you start to look at the Zend Forums regularly to see what others are encountering on their php projects, it could help you understand what difficulties if any you could encounter. One particular problem is that of record locking by php not being recognized by other i5 language implementations. This means your php lock could be ignored if another application running natively on the system locks and updates the same record. I am trying to understand exactly why this is occurring and having read through the post it seems IBM doesnt want to fix the problem?

We are still intending to publish the phpMyAdmin install instructions next but other things just seem to get in the way… We are also looking at creating a LAMP install for i5 which would create a disk image (CD iso image) that could be downloaded and run to create a basic php website install. If you are interested in helping on this we would appreciate you help…


PHP, PHP Programming

Support for i5OS Version 5.3 available

December 4th, 2007

As promised we have now made a version of RAP which runs on i5OS Version 5.3 available. The only major change is the message capture technology employed. One additional feature has been added which customers had been asking for, it now repairs Record Level Errors auomatically as part of the audit process. The maximum error threshold is still honored so if there are more errors than the threshold allows and you have elect to repair those errors, on reaching the error threshold the audit will still halt even though a number of errors may have been fixed.

Download a 30 day no hassle free trial here. You still have to be a member to download the trial products but the membership requirements are simply to enter your information. The product will run for 30 days without interruption.


Disaster recovery, High Availability, Main Category, Marketing

Bad Behavior has blocked 548 access attempts in the last 7 days.