My Blog
ASUS EEE Pad gives APPLE IPAD a bloody nose
Ipad to go with the Market leader? Android to go with the new contender? Windows device to see what happens with the big and powerful Microsoft?
I think it depends on what you want to use it for. I personally wanted a device that was as easy and convenient to use as my TV. One that I could carry for email access, web use, and occasional games/music/videos/books etc. I wanted good selection of apps and a (relatively) virus proof OS. For me that came down to the Asus EE Pad.
Using QUICK MENU and ADMIN MENU in DRUPAL7
Installing ADMIN MENU gives us the most excellent admin menu black menu bar at the top of our website when performing administration functions in Drupal (currently playing with Drupal 7). But we also want to display a User menu, in a similar style, for our website surfers and anonymous users out there. Obviously we dont want to grant anonymous users ADMIN rights to use ADMIN MENU so lets do it like this:
1-Create a Menu to hold our links.
http://www.your-domain-here.com/admin/structure/menu/add

Add a menu (I called mine TOPMENU) and then we will add all our required menu options to it. Once these options are added it might look something like this:

2 - Activate the Module to display this menu to the user
Quickbar Module is a a simple administration toolbar. It allows you to take any menu and assign it to a role. This menu will be displayed at the top of your page as an administration toolbar.
So Now we just activate the QUICKBAR MENU Module - http://www.your-domain-here.com/admin/modules
add a simple drupal menu at top of screen
It's April 2012 and Spring has sprung out here in the Nevada Desert (it was 99 degrees Fahrenheit yesterday - can you believe that?).
This warm weather always gets me a bit frisky. So after taking Muttley for his Sunday Morning walk and I decided to settle in with a cuppa Char for a bit of website spring cleaning, a new theme and some jolly good tidyup work. As usual, this evolved into a whole day spent tinkering with the projex.com menu system. My aim was to get a 'admin menu' style menu to appear at the top of the page without any theme modifications. I considered editting the PHP of the theme and insert something up there but as I seem to be changing themes every few months I decided a slicker soft-coded approach was the way to go.
I had to jump through some hoops to get my desired result (which is hopefully showing a menu at the top of this very page) so heres the Shady Tale of a Sunday Morning deep in the depths of Drupal Menus:
I played with a few different options before coming up with my final solution:
Annoying Drupal Error - Notice: unserialize() [function.unserialize]: Error at offset 1066 of 1068 bytes in variable_initialize()
So, for the last several months I've been getting this very annoying drupal error message on virtually every page on the website:
Notice: unserialize() [function.unserialize]: Error at offset 1066 of 1068 bytes in variable_initialize() (line 943 of /home/projex/www/www/includes/bootstrap.inc).
I had researched it... tried hacking some little PHP snippets... tried cleaning up the SQL database... all to no avail. But today is a cause for celebration and dancing in the streets. Because its gone! Huzzah! All thanks to a couple of smart drupal chappies and chappettes on various websites who have probably forgotten more about the Drupal Database than I will ever know.
This error is caused by a corruption in the database it self... mainly in a variable called 'variable' which contains an invalid value. So, all we have to do is to find that duff variable and kill it. I chose the method of hitting it with a stick until it ran screaming from the room and straight off a cliff outside the door... falling two miles and landing in quicksand... inhabited by a special breed of quicksand loving Piranha. They made short work of this cheeky little error... I can tell you.
Location of iSeries Access Installation Software
Where can I get the AS/400 Client Access Express for Windows software?
In the olden days before the IBM System i... in fact wind back a few years earlier until you get to the old IBM iSeries hardware... dont stop... keep going back into history until you get to the venerable IBM AS400 system... The software that was initially launched to allow PC's to connect to the AS400 was called CLIENT ACCESS. An installable image of Client Access (now called IBM i Access for Windows) can usually be found on the system in the IFS path "/QIBM/ProdData/Access/Windows/Install/Image" or "/QIBM/ProdData/CA400/Express/Install/Image".
So - just for my reference:
For operating system versions prior to version 6:
- /qibm/proddata/CA400/Express/Install/Image
For operating system version 6 and later (i6.1, i6.2. i7.1)
- 32-bit: /QIBM/ProdData/Access/Windows/Image32
- 64-bit AMD: /QIBM/ProdData/Access/Windows/Image64a
- 64-bit Itanium: /QIBM/ProdData/Access/Windows/Image64i
Softlanding Turnover Consultant - will change-manage for food
"will change-manage for food" - is that a verb?
I guess it could be - in this crazy world of IT acronyms and dilbert cubical terminology.
Anyway, I'm in the last couple of weeks of this freelance role helping my customer to configure TURNOVER and promoting a major LMS7.1 Hotel application across 4 seperate IBM Power Systems running IBMi (or AS400's in 1990's speak). It's been a fun contract working with some great people. The downside of doing my job is that if I do it right... then everything will work... and if everything works... then I'm not needed anymore ;)
So, hopefully this weeks major implementaion will flow smoothly and I will be looking for a new contract in a couple of weeks.
These were the questions I was asked at my interview for this role - maybe they will help some folks thinking about embarking on a role as a 'change management consultant'
Change Control Backup - Contractor Position
Interview Questions – Turnover Technical
sql is much faster than cpyf
For the longest time I've heard about the performance difference between a true SQL INDEX and a DDS generated index in IBMi... or 'on the AS400' as the old timers like to say. But is it true? I know that SQL creates its own special access path... and have heard vague rumblings about how it just does things different... and really all of us programmers should be creating files using DDL rather than the old DDS.
So, as part of the project I'm working on we have to copy data from a bunch of rather large files... so I did some real time comparisons and got some fascinating results.
Timings for the big Fight:
Using a physical file with 141,988,325 records in it I issed a batch copy into a DDS version of the file using both CPYF and SQL INSERT and then created a SQL/DDL version of the file and repeated the exercise. Both times running in a single thread job queue when the machine was quiet.
Copy file with 142 million records on an IBMi DDS compiled physical file:
- DDS –> DDS using CPYF took 19 minutes (it used 99 seconds processing unit time)
- DDS –> DDS using SQL INSERT took 18 minutes (it used 93 seconds processing unit time)
Then deleted and recreated the file using DDL (SQL) source code:
Doing Loop the Loops in RPG3 and RPG /Free
So, whenever possible, if I'm editing some old RPG3 or RPG400 code I spend a coffee* cleaning the code up to a more readable form:
- Use CVTRPGSRC if its old RPG3 stuff
- Change '1' to *ON
- Change '0' to *OFF
- Change Z-ADD to EVAL
- Insert comments where applicable
- put some spaces between subroutines and blocks of functionally similar code
- Then its into WDSC7 and convert to /FREE
Websphere is old technology but I'm not going to spend over $800 on IBM's Ratinal Developer for i version... cmon IBM come up witha sensible price for a source code editor. Obviously, the most sensible is FREE.
DO LOOPS are something that always make me scratch my head when uplifting to RPG4. So just for my reference here is an example of the exact same code in RPG3, RPG400 and RPG4.
RPG3
DO SAVRRN X
X IFGT 10
some clever code here
END
END
RPG400
DO SAVRRN X
X IFGT 10
some clever code here
ENDIF
ENDDO
RPG4
for x = 1 to SAVRRN by 1;
if x > 10;
some clever code here
endif;
endfor;
/me loves some RPG Free format :)
IBMI not AS400
So, as usual... today I was scratching my head with a problem that was kind of outside my realms of expertise. These realms are many, I hasten to add the ones outside are the many ones and the ones inside are rapidly diminishing with my braincells exploding in a puff of logic and old age.
Searching the esteemed searchword engine of High Lord Bing and the mighty Goddess Google I found some interesting stuff about stored procedures.... and as I sit here... late at night... deep into my second bottle of red wine... spool *hich* spellchecking this for the fifteenth time... I realise that this is not the time to type this stuff.
Besides trying t otype technical stuff while playing Facebook Poker is losing me loads of chips.
so... *cough*... its time to sideline this for tomorrow...
and... errm... I will...
What are the best places to eat in Charleston South Carolina
Loads of choices and a terrific range of great places to eat in Charleston so here's my personal favorites - trying to cover a broad spectrum.
Downtown
My favorite *steak* restaurant is called Peninsular Grill and its smack in the middle of downtown. Just park at the old market on, surprisingly enough, market street and walk to it. http://www.peninsulagrill.com/ is a little up market but with a great intimate feel. The staff are very helpful and it has a superb wine list. After dinner stroll around the area.
I would recommend getting a carriage tour for two (assuming it is just two of you) its a fun way of spending an hour and listening to your carriage driver tell you all the history of Charleston.
Another of my favorites is BASIL. A simply excellent Thai restaurant... if you go... try their famous Basil Duck. That's all I'm going to say. http://eatatbasil.com/
Make sure you visit the Pavilion Rooftop bar downtown (at the bottom end of the market) for cocktails or a lunch drink. Good views and cool all around. http://www.marketpavilion.com/index.cfm?page=pavilion
Camp Bow Wow - a brilliant day care for dogs
A big *THANKS* to all the crew at Camp Bow Wow... yesterday was interview day with Bailey (my 6month old English Springer) and based on the fact that he returned wagging like a loon, grinning, happy and promptly fell asleep right through to this morning... it must have been fun! One new regular customer is sold on your services. Thanks from me and from Bailey Litten ;)
Here is the live video feed from Camp Bow Wow - Can you find Bailey?
Bailey the Flying Dog
Me and my wing man (Bailey Version 2.0 - the Springer Spaniel) arrived in Las Vegas on Sunday night after a smooth flight courtesy of Delta Airlines. Shipping pets around domestic USA is remarkably easy and pain free:
- Make sure dog is all up to date with vaccinations and get a certificate from Vet saying just that
- Get a nice crate that Muttley can comfortably sit and lay down in
- Put a nice fluffy comfy bed in there
- Take Muttley to airport and pay your $fee (it was $200 from Charleston SC to Vegas NV)
- He gets checked for drugs, guns and copies of the Quran by the TSA folks and loaded into a special pressurised and heated section of the cargo hold
- Fly your flight, disembark and he is brought to the luggage belt
- Extract puppy and get covered in canine kisses.
Bailey handled it incredibly well… I think he was more comfortable in his travel cage than I was crammed into the economy cabin (yes I am cheap) watching crappy TV on the headset unit and trying not to torture myself by continually looking at my watch.
All in all a decent experience. The folks at Delta were very helpful and accommodating.
Gets a thumbs up from me and paw up from Bailey.
Turnover and External Procedures is twisting my melon, Man!
I've been having problem promoting Stored Procedures today. After an hour of looking at two different Applications defined in Turnover - where one works fine and the other... *cough.... doesnt. I'm still none the wiser. Grrrrr
So this little cheat sheet may come in handy for me (and for you!)
Possible reasons why Turnover can't delete existing stored procedure
For TurnOver to properly promote your routine's catalog entries, you must do the following:
- Create a source member that uses the CREATE PROCEDURE or CREATE FUNCTION statements, to be run with the RUNSQLSTM or TRUNSQLSTM commands.
- Give your source member the same name as the program that it references.
- Use the SPECIFIC statement to give the routine's catalog entries the same name as the source member name.
The *MOVOBJ method is used during archiving of existing catalog entries, during distribution, and during recovery processing, as follows:
JBA Commands
Randomly surfing around this morning - I stumbled across this comment tucked away in some obscure pre-1990's forum in glorious Times New Roman font. Written back in the days when terminals clunked, mainframes were the size of a room, men were men and women were pleased.
Disclaimer - I'm not responsible for any damage caused by anything you do to your computer - use these commands at your own risk... That being said, let's continue...
If you have them installed on your system you should see a list like this one:
TOOLS/UTILITIES - Run command TOOLS from any command line in System 21
XAT000 Administration Functions System: HQ140002
Type option(s), press Enter. Position to.....
1=Execute Command
Opt Command Description
TUR3333 - No local Turnover system Defined
This week I mainly been playing with Turnover V100....
Preparing TURNOVER V100 (Software Change Management tool for IBMi Systems) for a major application upgrade, adding the ability to use Turnover Forms for specifically deleting and/or moving objects from one environment (library) to another. In this case its because we are un-merging a custom program library and breaking it out into application base objects, custom vendor objects and custom internal objects. Yes, its a nice bit of tidy up that puts a smile on my soul.
Configuring Turnover to make it do this however... does not... put a smile on my soul. It sometimes makes it quite grumpy in fact.
Especially when you get an annoying error on the TARGET system saying that it isn't defined to itself.
A TURNOVER distribution was received but no local system is defined. Unexpected results may occur.
No Shit Sherlock!
You can do it the clumsy way, or you can do it the easy, straightforward way.
I stumbled across this article with some really neat RPG tricks... I'm using one at moment so am cut/pasting it here for quick reference for myself. I've met the author (Mr Bob Cozzi) at the RPGWORLD conference back in 2009. Very smart cookie. I can tell you:
How Do I Left-Justify Text Within a Character Field?
Clumsy Solution 1:
D Start S 5U 0
D End S 5U 0
D Len S 5U 0
D MyValue S 300A Inz(' 01234567')
C ' ' Check myValue Start
C ' ' CheckR myValue End
C eval Len = (End - Start) + 1
C eval myValue = %subst(myValue:Start:Len)
This solution uses a typical application of the %SUBST built-in function to extract just the data within the original MYVALUE field and move it, left-justified, into itself via the EVAL opcode.
Clumsy Solution 2:
D Start S 5U 0
D MyValue S 300A Inz(' 01234567')
C ' ' Check myValue Start
C eval myValue = %subst(myValue:Start)
Recommended create command defaults from AS400 to iSeries
This weekend I upgraded an old Turnover 5.4 Change Management installation to the newer V100 version across several LPAR's of a customers IBMi intallation.
As part of the mission to tidy up the Software Change process – I see a lot of objects that are routinely created with various parameters being over-ridden because the defaults don’t fit my customers software development model. Now, the problem with this is that a standard is set and then followed, sometimes blindly, for years. Obviously, any step in a compilation where the programmer has to remember to over-ride the default creation parms is time consuming and error prone.
So, wonder why IBM havent changed the defaults for these commands since the good old AS/400 days:
Could we use CHGCMDDFT to set the following parameters as new defaults:
CRTSRCPF RCDLEN(132)
Increase from old RPG3 standard 92 rcdlen, thru RPGLE standard of 112 to new RPG4/Free standard of 132
CRTPF SIZE(1000000 10000 10) REUSEDLT(*YES)
This size is routinely overridden to *NOMAX (not a good idea) so setting a more realistic default size might be appropriate? 1m records?
Set Source view in *DEBUG mode to *SOURCE allows developers to debug code and see the code it was compiled with:
CRTRPGMOD DBGVIEW(*SOURCE)
CRTCLMOD DBGVIEW(*SOURCE)
CRTBNDRPG DBGVIEW(*SOURCE)
roo biks
I've been fascinated by the Rubiks cube since it defeated me, repeatedly, during my youth.
Bloody confusing thing and I refused to read all the books on how to solve it. This was decades before Youtube and the video guides on how to solve it.
But... bloody hell.... new technology has kicked us humans up the bum. LOL

I managed it once, Peeling the stickers off helps ;)
How can I learn Microsoft MS Project 2010
Microsoft Project 2010 is arguably the best project management application out there. Do the guys at Microsoft do anything by halves?
What causes the 'changed outside of turnover' iSeries error message
I'm currently working with IBMi (iSeries) Turnover change management system. It's the best SCM (Software Change Management) application in IBMi land and has a great balance between being easy to use and very powerful.
I know the product fairly well, but it still grins and kicks me in the shins occasionally. This week I've been seeing a lot of "this program has been changed outside of turnover" warning message when checking Turnover Forms to promote code changes. But, when I use DSPOBJD to compare object differences, the only thing different is the last used and the change date. Maybe its a system authority change on the object? Or something deeper and trickier...
The trouble is... what exactly is Turnover checking when it compares the old and new objects?
I've frequently scratched my head over this so it's time to submit the following question to SOFTLANDING SUPPORT
What exactly is the cause of "program has been changed outside of turnover" messages...










![Notice: unserialize() [function.unserialize]: Error at offset 1066 of 1068 bytes in variable_initialize() (line 943 of /home/projex/www/www/includes/bootstrap.inc). annoying drupal error message](http://www.projex.com/files/styles/blog_header_sixseventy/public/unserialize_error_-_big.png)
















