May 17, 2008

Seeing how others do it - PHP training

We're always keeping an eye open for "how others do it" - we're quite happy to learn from others in the training business. But more often than not, we'll spot something and say "I would never do THAT" or "that wouldn't work for us". Here are some I found on a single site this morning.

"All of our courses are have a strong practical bias, with exercises that will help trainees grasp the essentials of what they're trying to learn, preparing them for the sorts of tasks they'll encounter when they start developing real-world applications. Therefore, as a matter of course, we will always cover essential aspects like security and best practices."

I agree with that. Completely. I could have written exactly the same thing about our courses, although I would probably have written learning rather than trying to learn as I know you WILL learn with us!

"Scheduled Courses ... if you are to be the only attendee on a particular day, it'll cost slightly more.".

Cheeky! If the company running the public course has only managed to sell one seat, they'll charge you slightly more - their definition of "slightly" being about 90 pounds

"The beginners PHP training course (30th June to 4th July) looks like it'll be going ahead."

Ah - so you can register for a course and they'll decide later whether it's worth their while to run it.

"if you want a ... cheap way of learning how to program ..."

My view is that quality is more important than price - yet I note that their daily rate if they've only managed to sell one seat is exactly the same as ours.

"Working with databases may be covered subject to delegate progress"

If you are held back because there are some slow people on the course, you'll miss out on this important subject.

"Each course will run from 10am to 4pm, with lunch provided."

That's a mighty short day - about five hours after breaks.

"Delegates have access to our training notes for a year after the course."

And after a year, tough!

"Generally this implies small groups (<10) at one time."

The word "generally" worries me, and my definition of small is a couple lower. The chances are that in a group of 10 there will be one or two slower ones, and (see above) subjects will be left out.

"If you would like to attend, phone or email us, so we can reserve your place"

What - no online booking system? When PHP is used as a shopping cart application ;-) ?


Here's my contrast: - About Well House Consultants PHP courses

At Well House Consultants, you can book a place on our public course and the booking will be your assurance that it WILL run - even if you're the only delegate - and at the good price you signed up to pay too. We will cover all subjects that are listed on the course description - the only exception being that we may skip a non-key subject which is not required by any delegate on the course. Delegates have access to the equipment and training room around the clock, the tutor is available from 8 a.m. to 6 p.m. at least, and the course runs from 9 a.m. to 5 p.m.

We provide printed training notes which are yours to keep for ever, and all of our examples are available for you to run (exception - scripts that illustrate security holes) and also copy and paste our source from our server - with no time limit. We limit the number of delegates on a public course to just eight so that there's plenty of time for each individual to cover his / her own specific questions and concerns. Each of our training modules is accompanied by practical exercises and additional examples, so that everyone gets a chance to practise what they have just learned during the course. There is plenty of optional material so that faster delegates can study, with the tutors help, to a greater depth until slower delegates have completed a minimum practical.

We welcome phone calls and emails as many delegate want to talk through their requirements and ensure they have the right course - but you're welcome to book online too - the choice is yours.

And yes, we provide lunch too.

Sound a bit like an advert? Perhaps I had better give you some URLs:
PHP Programming - 4 days
PHP Technique Workshop - 2 days
Object Orientation in PHP - 1 day
and tell you of our many years of experience, regularly revised notes, new laptops for each delegate to use during the course, associated accommodation for delegates who travel a distance, library of over 600 books ... and wicked real coffee machine!

Posted by gje at 09:43 AM | Comments (0)

More about Graham Ellis of Well House Consultants
Useful link: PHP training

Using a utility method to construct objects of different types - Python

When you call an object's constructor method, you'll be allocating memory to hold the information about that object and the method will return an instance variable - a reference with which you can later refer back to the object.

That's good as far as it goes - but there are times when you'll have data from which you want to construct an object but the object type is hidden within the data. For example, I could have a file of data record like
Estate Agent, 01380 724040, 2500
and
Graham, 600
where the lines with three comma separated fields are customers, and the lines with two comma separate fields are team members. And you want to construct two different types of object, depending on the data.

The first possible answer is to have your application program work out from each data line which particular object type you need to build for each piece of data but that is messy as it means that the data-specific code that should be common to all uses of the class has to migrate outside the class to the application, with serious issues about code duplication, reuse and maintainability.

The preferable alternative is for you to provide a utility method within(Java, etc) or in association with (Python, etc) the class coding which takes the data record and constructs either a "customer" or a "team member" record, and returns whichever instance variable type it finds to be appropriate.

I have an example of this principle in the Intermediate Objects in Python module from our Python Programming Course.

The "control case" - the example which shows the decision made in the application code without the utility method reads as follows:
operation.append(customer("Local Council","01225 776655",10000))
operation.append(customer("Estate Agent","01380 724040",2500))
operation.append(employee("Charlie",20))
operation.append(employee("Graham",600))

which is modified to read as follows when you use utility method calls:
operation.append(fing("Local Council, 01225 776655, 10000"))
operation.append(fing("Estate Agent, 01380 724040, 2500"))
operation.append(fing("Charlie, 20"))
operation.append(fing("Graham, 600"))

Which looks a subtle enough change when the data is a simple example, but becomes significant when the number of object types increases and the data is read from file.

Here's the code of the utility method, which will be stored and maintained with the classes:
def fing(about):
  bits = about.split(", ")
  if len(bits) == 3:
    return customer(bits[0],bits[1],int(bits[2]))
  return employee(bits[0],int(bits[1]))

See control example - source and example with utility method - source

Posted by gje at 06:50 AM | Comments (0)
Useful link: Python training

May 16, 2008

A lack of technical content

There were two emails in my inbox on Thursday, receive within a few minutes of each other> "Going mad here" says one as its subject line; "boom or bust - is the training industry on the verge of a recession" asks the other. The first was from Lisa, reporting that the enquiries and admin were flowing in quicker than she could deal with them (but then Thursday is our busiest day of the week!) and the second was a spam looking to sell us some service or other to keep our heads above the water. How little do they realise!

Looking back through my blog for this week, I note a lack of technical content - that's a bit odd really considering that I've given a Python course and a PHP course, both with plentiful examples written "on the fly" for receptive and questioning audiences that were both a little different form the norm - the sort of course that I love top give, but leaves me happily drained. Fear not, geeks amongst you - I have bothe Python and PHP items off to the side and the will follow. But for now, 6 p.m. on Friday, I'm going to clock off. It's been a long day - was it really over 12 hours ago that Lisa and I were down at Tesco in Trowbridge buying Loo brushes ...

Posted by gje at 05:46 PM | Comments (0)

May 15, 2008

Summer!

Summer came at the start of this week ... here are Monday, Tuesday and Wednesday pictures - at the Barge at Seend, with the Chamber of Commerce meeting in the garden at Well House Manor, and at lunch on the Python course on Wednesday when we couldn't resist grabbing a picnic and going and seeing the locks on the local canal.

Today the weather's cold and nsty. Looks like Summer's over!

Posted by gje at 06:07 PM | Comments (0)

May 13, 2008

Tektronix 4010 series / Python Tuples

The Tektronix Storage Tube was a cathode ray screen across which a beam of electrons could be swept directed, leaving a trail behind it rather like the plume behind an aircraft (technology note). The technology was developed further to allow the picture generated to be held on the screen for quite a long period, and with various electronics, an RS232 interface and a keyboard, the whole combination formed the major product range in Tek's IDG (Information Display Group) / IDD (Information Display Division) in the 1970s. In those days, fast computer memory was very expensive and products such as the 4014 gave the first practical graphics terminals, addressable to a very high 4000 x 3000 resolution.

One of the problems, though, was how to get rid of the image ... and it had to be done by erasing the entire image and recreating a new one - a "redraw". For some applications this was a big issue (comment here), but not for others where a series of pages being displayed one after another worked very well indeed.

I was reminded of this yesterday with a parallel being drawn between Python's Tuples (which have to be rebuilt from scratch if they need modification) and the storage tube, contrasting to Python's lists, which can be modified element by element like a modern raster scan device refreshed from memory 30 or 60 times a second. And like the storage tube, the tuple does have its ideal uses but (let's be frank!) we do need more dynamic devices and lists too.

I joined Tektronix in 1976 as the UK's Technical support specialist for these devices, and formed a fondness for them. Built like tanks, priced at a level where they weren't exactly a consumer product (over 10000 pounds for some terminals!) , they were an ideal solution for many interesting research and development projects ranging from the geothermal energy project through to nuclear research, defense, and the design of the stopping patterns for lifts!

Researching last night to find information about the old "tek" products online I found very little and found myself recalling numbers and models. So for no particular reason (other than that other Tektronix oldtimers may be here too!) I give you the list of some that I recall

The early models (superseded before I joined)
4002
4002A

The main product range

4010 11" Storage tube terminal
4010-1 11" Storage tube terminal with ability to read back screen for printed copy
4012 12" Storage tube, with readback for print
4013 12" Storage tube, with APL keyboard and readback for print
4014 19" storage rube terminal
4014-1 19" Storage tube terminal with ability to read back screen for printed copy
4015 19", APL keyboard
4015-1 19", APL keyboard, readback
4016 25" storage tube terminal

also the 4006 - a desktop version of the 4010 introduced a little later as electronic shrunk and got lower cost

The 4112 and 4114 were a next generation storage tube terminal with much enhanced electronics - didn't do very well in the market which had moved on with cheap memory for raster devices and PCs

The 4020 series were (hiss, hiss!) raster graphics terminals.
4023 early Alpha terminal
4024 and 4025 introduced after the hayday of the 4010 series (4024 alpha, 4025 graphics)
4027 Colour Raster Graphics - the first such product from Tektronix

Graphic Computers

4051 11" Screen with a basic interpreter, tape drive and motorola 6800 chip
4052 11" Screen with a basic interpreter, tape drive and bit slice processors - MUCH faster!
4054 19" Screen, basic, tape, bit slice.

The 4050 series was 8k up to 32k (4051) and 32k up to 54k (4052 and 4054) and you could add an 8" disc drive, model 4907.

4081 Fortran based 19" storage tube workstation.

Peripherals

4601, 4631, 4611 Printers - three generations - for copying storage tubes. The 4601 and 4631 were photographic and the 4611 was thermal

4632, 4634, 4612 Also printers - for video screens via a video out, NOT for the storage tubes

4662 A3 flatbed plotter
4663 A2 (? A1) flatbed plotter
4923 and 4924 Cartridge tape drives with RS232 (4923) and GPIB (IEEE 488) interfaces (4924)
4953 and 4954 Digitisers (graphics tablets) for use with 4010 series
4956 graphics tablet for use with 4050 series
4911 and 4912 - Paper Tape and Cassette tape

Software

These were the pieces of code that it was my role to get running on any computer from a Perkin Elmer to a PDP 11, via a Norsk Data box, a system running RSX11M and an ICL 1905.

Plot 10 TCS (Terminal Control System) Fortran Driver Routines
Plot 10 AGII (Advanced Graphing II) Additional Fortran routines to add graphing capability
Other Plot-10 software (utimities mainly) and Plot-50 software for the 4050 series

Where are YOU now? ... former colleagues such as Brock Wadsley, Allen Mathhews, George Wreford, Brian Burke, Steve Boniwell, John Thomspon, Lorraine Perrott, Colin Eddy, Alan Mawdsley, Peter Wilde, Val Hill, Bob Shaw, Jim Rew, Paula Lumby, Mike Crowley, Dave Brackenbridge, Bob Wakefield, Bob Wainwright, Nigel Payne ...

And does anyone have ... a copy of the source of TCS.

Posted by gje at 09:53 AM | Comments (0)
Useful link: Python training

May 12, 2008

Walking on The Wiltshire Downs

Summer is here! A lovely walk yesterday - on Roundway Hill Covert which is only about 6 miles from Melksham

The Marlborough Downs fall away at Roundway Hill, where a battle was fought (1643) in the English Civil War. The next hill across is known as "Olivers Castle" after Oliver Cromwell.

Behind the hill, the Marlborough Downs are a carpet of yellow at the moment.

Posted by gje at 12:27 PM | Comments (0)

May 11, 2008

Minehead Marauder

A lovely day out in Minehead yesterday ... an excursion by train from Westbury, organised by The Railway Children Charity, on a train loaned free of charge by First Great Western for the day, track access costs waived by Network Rail and by the West Somerset Railway, time given for free by all the staff concerned, sponsorship of the buffet and raffles by various people / companies - meant that all the money taken goes to the charity without an initial admin layer.

Minehead is a lovely town to choose as the destination for such an excursion, and I have returned with too many lovely pictures to do them all justice, and so many happy memories that I'm looking to record just a few of them here and on other pages before I hit this week's Python and PHP courses.

"Minehead Marauder" - ah - the name of the special train! I have posted some slightly more rail related pictures here

Posted by gje at 08:36 AM | Comments (0)

Well House Consultants Ltd. Copyright 2008