jump to navigation

Really Simple Naming Standard To Simplify Everything November 29, 2022

Posted by mwidlake in Architecture, database design, development, PL/SQL, SQL.
Tags: , , ,
5 comments

Many years ago I came up with a way of naming indexes, variables, table aliases, and several other things that is incredibly simple and, for me at least, Just Works. This might not sound like a big deal but it’s one of the things that has really helped me create readable & easily understandable code, consistent naming for objects, and database designs that make a lot of sense just by looking at them.

Not only that, but this naming convention also saves me a lot of time & mental effort and allows me to apply most of my limited brain capacity on making my SQL & PL/SQL code work, and not on stuff that ultimately should not matter – like what to call a variable.

The Starting Point

We generally name our tables after the objects or data they hold, so they are called PERSON, ORDER, ORDER LINE, ADDRESS, INPATIENT_STAY, and for intersection entities they are called things like PERSON_NAME, EMPLOYEE_ROLE. Anyone looking at a database like this will get the general idea of what ii in each table and how some tables relate to each other. That’s all good.

Naming columns is generally easy too. FIRST_NAME, LAST_NAME, HOUSE_NUMBER, HOUSE_NAME, ORDER_DATE but some columns are more generic like ID or UNIQUE_ID for a system generated primary key. START_DATE & END_DATE, CREATED_DATE, STATUS all generally makes sense within the table. A lot of places have some simple standards for column names, such as name DATE columns so that you indicate if it has a time element (ADMITTED_DATETIME), or that if it is an inherited key from a parent table, that is indicated in the name (CUSTOMER_ID, CUST_ID, CTSMR_ID… hmm, maybe this is where issues start occurring).

Table and column names are generally defined once, mostly when the application is first designed (please tell me you at least design you schema at the start) and then groups of new ones are introduced when new functionality is added.

But then you need to come up with thinks like index names or what your variable names will be in code and often there are no standards for that. This can also be true of those columns inherited from a the other end of a foreign key. So try this:

Naming Secondary Objects

You use a short (general 4 letter) acronym or alias based on the leading letters of the words in the parent object name.

If name of the parent object is one word, like PERSON then the alias is the first four letters – PERS

If the name of the parent object is two words like PESON_NAME then the alias is the first two letters of the two words – PENA

If the name of the parent object has more than two words like PATIENT_CASENOTES_FRONTSHEET then the alias is the first letter of each word – PCF. A long table like REGIONAL_SALES_SUMMARY_BY_MONTH would be RSSBM (these are true acronyms)

Apply this naming convention takes no thought and no decision making in 99% of cases. And, especially once you have been looking at the system for a couple of hours, the aliases make total sense:

You get the idea.

You might have wanted to use ORD as the alias for ORDER, as it reads better or you are used to it being reduced to ORD, but stick to the rules. As soon as you break the rules you start losing the benefit as you have to remember the exceptions and mistakes are likely to happen “further down” the naming hierarchy. Over the years I have been using this method it is when I am less firm about applying them rigorously that I get less benefit. But see the end of this post for what you do when you are forced to make exceptions.

Using The Alias

The first thing you do with the alias is use it in column names. I don’t like having a column called simply “ID” for a system generated unique identifier. It means you have loads of columns in the data dictionary called ID and it makes looking up information on the column a bit more clunky. In many systems I’ve seen a real mix of using full_table_name_id, whitespaceremoved_id, part_of_nme_id. Not any more, now you can have a rule that it is always tablealias_id. Similarly the primary key created on a table is tablealias_pk.

Foreign keys? It’s tablealiasfrom_tablaliasto_fk so the foreign key from the PERSON table to their current ADDRESS is PERS_ADDR_FK. If things are a little more complex such as having links from a CUSTOMER table to a business’s head office address and delivery address you might amend the relevant column names to include a brief descriptor of the address type, and then use the alias rules for that descriptor too, as I show below:

The name of the sequence for generating a unique identifier for the CATALOGUE table? CATA_SEQ { I don’t know why people insist on putting SEQ or similar in the name of sequences, it just seems almost universal…}

I also use this naming convention for my indexes. What do you think the below index is on?

PERS_SENA_FINA_DOB

Yes, SECOND_NAME, FIRST_NAME, DOB on the person table. If I see that index name in an explain plan I know immediately what columns are involved on what table. Now, if I was being lazy that index would be SN_FN_DOB and in some ways it is easier to read – but once you start breaking the standard then you have to make a decision when adding indexes if you stick to the rule or not, you get more situations where you might not be sure which column SN really is for (OK, maybe not in this case).

Simplification Of Code

Where this all really comes into it’s own is naming variables and table aliases in code. I strongly believe any production-quality SQL should always use table alias and the use of A,B,C etc for them should be punishable with chilli juice in the left eye. With the naming method I describe here you no longer have to think about variable names at all and it makes the code incredibly readable.

I did not have to think about the table alias when I wrote the below. I did not have to check what I had set them to when I used them in the code. Anyone looking at the code can see that the table aliases mean something and it makes it clear what each column is, what table it is from, even if the actual column name is a little ambiguous. With alias of A, B, C or T2134, T3341 etc you endlessly have to keep check which table (or subquery) is being referenced.

(please don’t critique the code or tell me about bugs or *anything*, it’s just a stupid example I knocked up in a text editor to make the point, OK?)

I use the same alias method for naming variables in PL/SQL too, as then I don’t need to think much about the names of many of them. The below is a sample of some PL/SQL code, using a lot of variables. I have a standard batch processing architecture using the tables PROCESS_MASTER, PROCESS_RUN and PROCESS_LOG. What to call the package level record variables derived from them? I prefix all package variables “PV” and record variable are suffixed with “REC” (not RECO, it’s not derived from an object name is my excuse) so they are PV_PRRU_REC & PV_PRMA_REC, no thought needed. And once you spot the other three table names referenced in the code, the other variables make sense. For as long as you look at the code you’ll know what TONA, RONA and ROTY are referring to:

Pesky Issues

The most common drawback of the “four letter alias” (as I inaccurately think of it) is alias clashes. This tends to happen most with table names that are two words long. CONSULTATION_DEPENDENCIES and COUNTRY_DETAILS would both have an alias of CODE. So you pick one and make the alias first letter of the first work, three letter of the second, so COUNTRY_DETAILS gets an alias of CDET. In my experience of using this naming convention for, oh, 25 years I’ve only had a few clashes and the 1:3 change in the letter pattern has worked.

The other drawback is getting an alias that is not, let us say, acceptable in polite company. AREA_SERVICES was an early one. SOFTWARE_HARDWARE_INTEGRATION_TESTS was another, but I strongly suspect that was an aimed-for alias by someone who was not happy in their role. Again, the swapping to a 1:3 letter derivation cures the problem.

There are usually so few exceptions that you are forced to introduce that everyone involved on the system gets to know them very easily.

When I was working on a very, very large project for an energy company I got them to start using this naming convention and people did get really quite worked up about the potential for alias clashes so they introduced a reference table that you populated with all the table names and it would generate the alias and, if it clashed with an existing one it would swap to 1:3 then 3:1 then raise an error for manual intervention. I always felt they had taken things a little too far.

SUMMARY

Generate a short alias for all objects by taking the first letter(s) of the object name.

Use that in column, constraint, index, and sequence names.

Now uses the alias in your code for table aliases and variables.

Greatly reduce both the time you spend coming up with names for these things, and the potential for code confusion.

Spend that time and brain effort on making the actual code do what it is supposed to do and go home early.

Chained Rows, Migrated Rows, Row Pieces – The Basics October 11, 2022

Posted by mwidlake in Architecture.
Tags: , ,
add a comment

For #JoelKallmanDay I wanted to go back to basics and remind people what Chained & Migrated rows are, and something about row pieces.

A simple overview of block structure

First, let’s review how an oracle block is structured. All tables and indexes are made of blocks and they are (by default) all the same size in a given database and the size is stated when you create the database. Blocks are usually 8K (the default), less often 16K and rarely can also be 2K, 4K, or 32K in size. If you want to use a block size other than 8K or 16K, please have a very good, proven reason why before doing so. You can create tablespaces with a block size different to the one stated at database creation, but again you should only do this if you have a very good, proven reason. And I mean a VERY good reason for this one!

(If you have gone the whole CDB/PDB route then PDBs have the same block size as the CDB. You *can* plug in PDBs with different block sizes but check out Mike Deitrich’s post on this first).

At the “top” of the block is the block header, which includes information and access control structures for the rows in the block. Unless you are using Direct Insert, rows are actually inserted from the bottom of the block” upwards, until there is only PCTFREE space available. This is the free space left to cope with row updates and defaults to 10%. PCTFREE is hardly changed these days, which is a shame as it can be very useful to change it for some tables – but that is a different topic.

Why would you use 16K rather than the default of 8K? it is usually used for Data Warehouse database or other database holding long rows. You will generally waste less space within the blocks and avoid row chaining (see later) by having larger blocks, but if you have short rows and an OLTP type database (where you read lots of individual rows) then 16K will be more wasteful of your buffer cache in the SGA and make less efficient use of that memory.

Updating a row, when there is space for it in the block

In the above, row 103 is updated, making the row longer. All the rows are packed together so to do this Oracle can do one of two things. In (1) there is enough space at the “top” of the block to hold the whole row, so it is simply moved there and the pointers in the header updated. If there is not enough space in the “top” of the block but there is within the whole block (2), then Oracle moves Row 3 to the “top” of the block and shuffles the rest.

When a Migrated row is created

However, if you update a row and there is not enough frees space in the block, what does Oracle do? It Migrates the row. It leaves the row header in the original location but that simply holds a pointer (a ROWID) to the new location of the row – which could be in a block a long way away from the original row, even in a different file of the tablespace. All the columns for the row are moved to this new location. As you are changing two blocks there will be even more REDO generated than if the updated row was contained in the PCTFREE area.

Why does Oracle leave the header in place and simply point to the new row location? Well, if the ROWID for the row changes (as it would if the block it is in changes) then if there any indexes referencing that column, those index entries would need to be changed. Also any internal-to-oracle use of ROWIDs would need to be managed. That is extra work for the database to do and it will take more time. Usually people want updates to happen as quickly as possible.

The impact of this is that if you select that row via eg an index, Oracle will find the row header and have to do a second single block read to get the actual row. That’s more (possibly physical) IO and two blocks in the buffer cache not one. So it is slower. Lot s and lots of row migration can slow down eg index ranges scans considerably.

The impact on full table scans of a simple Migrated row is pretty much zero. Oracle is scanning the full table, the actual row will be found in due course no matter where it is in the table (or partition). The header is simply thrown away.

(Note, if you have enabled ROW MOVEMENT for the table then the whole row may be moved and the relevant indexes/internal rowid references updated – but that’s an advanced topic).

Traditional Row Chaining

Row chaining is where a row is to wide to fit into a single block. In this case Oracle has no choice but to create several ROW PIECES. In reality every row consists of a header and ROW PIECE but there is only one and it is the ROW PIECE that is migrated with migrate rows. If the row is larger than the block then the row header and the first piece is put in the first available block. If the row is being created large then the next piece(s) are usually put in the following blocks.

Of course, the row could be absolutely massive and chained over many, many blocks. This is generally an indication that the table design and the physical implementation of the database has not been thought about enough and you should either learn enough to sort it out yourself or find someone who can help you with that, it could well help make your database run more efficiently. I’m retired, don’t come and ask me.

You can easily see that if you are reading this single row, for example via an index lookup, then Oracle is going to have to read as many blocks as the row spans. That’s more IO. This won’t happen if all the columns you want are in the first row piece though – Oracle will stop working through the row pieces once it has all the columns it needs.

This sort of row chaining where the row pieces are in contiguous blocks is not much of an issue during FTS as Oracle will stitch the pieces together in memory.

Of course, if you have updated the row to make it too large to fit in a block, your row may not only be chained but migrated, and the row pieces may not be contiguous, especially if you updated the row over several statements/period of time.

What HAVE you done to this poor row

There can be even worse issues that come with tables with over 255 columns, but that would be for another blog.

Birthday Cake Bake October 6, 2022

Posted by mwidlake in Baking, humour, off-topic.
Tags: , ,
3 comments

A week or so ago Mrs W and I were watching a TV program called “The Great British Bake Off” – I believe it is also shown in many other countries or they have their own version? Anyway, Mrs W looked at me and said “you better be baking me a cake for my birthday! I want a hedgehog!!!” She was joking, Mrs W knows that cake baking is not one of my skills and the last one I did resulted in something more like a rubber biscuit than a soft, moist sponge cake.

However, I am up for a challenge. How hard could it be? Well…

First, boys and girls, bake your cake!

I knew we had most of the ingredients for baking a basic Victoria Sponge and I picked up the extra bits I thought I might need to do the decoration when I went shopping, so I was good to go. I lined my tins with baking paper, which took almost as much time as making the actual cakes, and I made the sponge mixture. The reason I chose a Victoria sponge is it is almost (but not impossible) to mess up – and it is about the only cake I have cooked before, other than a fruit cake (which I did not have time or inclination to do). The big issue with a Victoria sponge is whether it rises as you cook it.

When I saw it growing in the oven I was very relieved, the last cake I made for Mrs W utterly failed to do that!

I baked two cakes, I wanted one slightly wider than the other and the narrower one higher. This was to make it easier to carve the shape I had in mind. This did mean the cakes cooked at slightly different rates and although I did not open the door until I felt the first one would be ready, I mis-judged and got a little sinkage on both. I could live with that, I knew when I shaped the cakes I would have cut-offs I could fill those dips with.

Carve the general shape.

Now I had to carve the cake into the general shape of a hedgehog. I mixed up some chocolate glaze icing (icing sugar, cocoa powder, much less water than you think) and used that to glue the two cakes together and then stick the chunks I carved for the head together. It’s messy but once I had moved the finished shape onto a clean cake board, it looked good to me and my confidence rose like a fountain of joy. Tell me that does not look like the shape of a hedgehog? (One without feet, admittedly…)

Now, just decorate it!

I had a supply of piping bags and Mrs W’s extensive set of piping nozzles. I’ve even done a bit of icing piping in the past when helping Mrs W or my mum decorate cakes. I’m not bad at it, I say with pride and no modesty at all.

I now mixed up a load of glaze icing and, as I am (well, was) a zoologist, I knew I needed a light brown for the head & shoulders and darker brown for the body. I made both. But because I am (well, was) a zoologist and not in any way a cake baker, I made glaze icing. The clue is in the name. Glaze icing is intend to flow smooth and give a glazed, shiny finish. Any of you who know anything at all about decorating cakes is now shouting at the screen “you need Royal icing for piping you idiot!”. I looked at this gloop, I knew it was NOT what had been in the piping bags I had used in the past. This stuff I had was liquid. I mixed it thicker. It was thicker liquid. This was as likely to pipe into firms shapes as honey is!

A minute of google revealed my mistake. A look at the clock and it told me I had about 30 minutes to get this cake done. I did not have time to whip up egg whites, incorporate the sugar and cocoa, get it wrong at least once and re-make it to provide the royal icing I needed and do the actual decoration. I’ll just see what I could do with the very thick glaze icing I had…

As you can see, it did not go well! I put on some of the glaze icing – and it slid down the cake and puddled on the board. And it dripped everywhere. And the thicker stuff? as I tried to spread it, the icing stuck to the cake and then pulled it apart as I tried to spread the thick blobs wider. The picture on the left is actually after I had scraped off about half a pint of icing from the board and wiped it down. That fountain of joy had splashed down to a become a swamp of despair.

OK, I had Emergency Flakes I had bought. I’ve always regarded the use of flakes or chocolate fingers to make a hedgehog cake a bit of a cheat. I now realised I love cheating.

I cut up some flakes and stuck them on the cake out of desperation.

It was at this point Mrs W came into the kitchen to see what all the clattering & swearing was about. She took one look at the flesh-running zombie hedgehog I had created and laughed in a way I thought was dangerous for her underwear. “What… IS it?” It’s a hedgehog cake. “It’s not!” It’s your birthday, I’m making you a hedgehog cake. She tried to not laugh anymore but it was impossible for her. Oh well…

She took a photo. I knew why. There is a section in the follow-up program to The Great British Bake Off where people send in both their baking masterpieces… and their disasters.

I told her to leave it with me, I had a cunning plan. Sadly I did not have time to get to the shops and buy a cake, but maybe if I just really *believed* I could do this, it might work!

Back from the Brink?

I had lots of flakes. I had about 15 minutes until I would need to take the actual birthday meal I was cooking in the oven (at the same time as creating a zombie horror hedgehog cake) out. I cut and broke up the flakes, slapped on more glaze as glue where needed, picked off bits of cake and gloop, and I got the cake covered.

OK, it was less awful, but I was now out of flakes.

Well, I did what I could to tidy up the glaze icing. I used some final bits of Flake to fill in gaps and re-set some bits. I scraped off the (now fairly set) puddles and wiped off the debris and washed down the board as best I could. And I made some eyes and nostrils out of black fondant.

I have to confess, the final cake (finished as the oven beeped at me to tell me to take the main course out) looked OK – at least to me. What do you think?

By the way (and apologies to John Beresniewicz who had already asked this 2 days ago and was shocked I did let you know the name the hedgehog) – He’s called Harry.

The Fall and Rise of the ACE Program August 26, 2022

Posted by mwidlake in ACED, Perceptions, User Groups.
Tags: , , , ,
5 comments

As the title of this post indicates, something bad happened to Oracle’s ACE program. Really quite bad.

But it is now being fixed – and the fact that Oracle admitted it had made a miss-step and is correcting it can only be applauded. In my experience Corporations tend to be quite poor at admitting they messed something up.

I’ve intended to write something about the whole sorry mess for a while but I held off as it felt like kicking a friend when they were down. But the ACE program is now coming back and I think there are some interesting things to learn, or at least think about, in respect of what happened (and is happening). And I wanted to record it as my own reminder of what happened.

First of all, if you do not know what Oracle’s ACE program is, there is a summary to the left. Fundamentally, it is Oracle’s program to recognise skilled people who communicate about Oracle.

The ACE program has had it’s ups and downs and it has evolved over the years, but basically it exists to recognise and, in some ways support, non-Oracle-employees who try to show the community how to get the best out of Oracle. It is a community outreach program with the inevitable taint of marketing that comes with any vendor-sponsored program.

So What Happened?

When the Covid-19 pandemic hit in the spring of 2020 it had a massive impact on everything, including the Oracle community. A key part of the community has always been User Groups, conferences & meet-ups – and Covid-19 meant we were not doing those anymore. (For example see this Post about UKOUG postponing the Irish conference in March 2020). The ACE program did what it could to help the community continue and basically pivot their events to being on-line & remote. Webinars via Zoom & Teams replaced in-person events.

Maybe it was this Covid-19 change that prompted something, I don’t know, but in the spring of 2021 it was announced by Oracle that the ACE program was being overhauled – and the Mother Hen of the program was no longer in charge. A lot of us long-term ACE members were not too happy about losing our Mother Hen, especially the way Oracle went about it (Oracle, like many US companies, really can be utterly awful when it comes to their staff. Do you know how much holiday US employees don’t get?). Someone I will refer to as Crazy-Beard man was taking over. I did not know this initially but Crazy-Beard man had the ear of someone powerful in Oracle and Crazy-Beard man had apparently made a bid for the ACE program. This was an aggressive takeover of the program.

Well, OK, the ACE program was moving and being put under the DevRel community and we ACEs could do nothing substantial about the shoddy treatment of one member of staff (though some of us made our feelings known). Maybe the ACE program would now get the staffing and financial levels it needed to boost its impact? (It had been clear to many of us for years that the ACE program never had the resources it really needed to manage several hundred members, especially given what hard work some of us presenter Prima Donna types can be). Maybe this change would be good for the program? Let’s wait and see.

It wasn’t.

Everything stopped. The news letters, the communication, the interaction. We just got the same webinar month after month… after month – “It’s all going to change! And it’s going to be really cool!! And it’s going to be exciting!!!!! Whoooop!!!!!!!” And the tone was as I just indicated, it was like watching a pop-culture Tik-Tok program for teenagers.

After a few months of nothing but “It’s going to be cool!” ACEs started asking what was actually going on. When would any of this new stuff happen? Or, even, any of the old stuff? When would outstanding ACE nominations be processed? When would we hear about new Oracle offerings? What was the rest of the community doing? But all we got were more occasional webinars where we were told again how “cool” it was going to be. And how exciting… And, well… whooop. Yeah, whooop. But nothing really concrete was offered. Except for the odd thing, like anyone was going to be able to be an ACE. Huh? What the hell is the point of a program to recognise significant contribution if everyone can be a member? What you are proposing is a chat channel, not a recognition program.

ACE members asked “when will you have something, anything, actually happening? Some real, tangible part of this cool, exciting, whoop you keep selling to us?”. The reply was just empty blather about working really, really hard to get things ready. I’m sorry, most ACEs recognise bullshit when we smell it. Working “really, really hard” generally means floundering about desperately looking for quick wins.

This new DevRel team had also totally misjudged the tone to use with the ACE program. Most ACEs have been IT professionals for a couple of decades – or more. We like fun, we like social interaction, most of us like a few beers at a conference bar. But jokey job titles and blatant efforts to fake “cool” that might be OK with the sub-30’s are not going to mesh with us. OK, we could maybe live with that naïve method of communication . But what was far worse was that the new people running the ACE program clearly had no clue what the ACE program was, who we are, what we do. Crazy-Beard man seemed to think we were all DBAs. Some of us are, most of us are not. C-B man did not even recognise the “Oracle Names”, the people who are famous in our little world for talking about Performance,APEX, Security, SQL.

So it seems the new people had done virtually nothing to get to know anything about us ACEs. If they had sat down with Mother Hen for a couple of days and talked with her about the program they would have improved the situation hugely, but they seemed to regard everything that had gone before as wrong and to be burnt to the ground. This was brought into sharp focus when an ACE and well known member of the European Oracle community (she chairs the European Oracle User Community for goodness sake) tried to contact C-B man and got no response, at all, from several attempts. Eventually a bunch of other people prodded him and asked him what the hell he was playing at.

In the Pit Of Nothing.

So there we were. All ACE program activity was on hold, the only communication was empty posturing, the tone was wrong, the new people in charge knew nothing about us. Nothing was happening.

Only something was happening… ACEs talk to each other. We gripe, we complain, many of us act like the old men in the box on The Muppets, but that is just the world-weary cynicism we use to hide that we really care about the Oracle community. And we hated what was happening. And most of us were detaching from the ACE world. I took ACE off all my social media and I even wrote an “I resign” letter. Most of us present and talk and blog and teach because we want to do those things. We became ACEs as almost an accident of that. We don’t need the ACE program. It was nice to be ACE, it was a badge of honour and some of the things the program had done were helpful. But fundamentally we were active in the community as we wanted to be. Being recognised as ACE was just a nice pat on the back really.

Another thing that was happening was that some of the more engaged Oracle Product Managers and community-centric people in Oracle, especially around the core database tech, had also become very uncomfortable about what was happening with the ACE program. These people within Oracle could see this palpable shift by the ACE community towards antagonism. I’m friends with several of these people (as are a lot of the people in my world of EU/US speakers & conference organisers) and these PMs were talking with us and echoing back into Oracle the growing alarm bells.

We ACEs were not happy and our friends in Oracle were not happy. But at least we knew things could not get much worse with the ACE program.

Oh boy, were we wrong.

The Meeting From Hell.

Oracle brought a new person into the DevRel team to look after the ACE program. I guess he had other duties too but the side we saw was he was to be the main person for our community. I’m going to call him “Tony Wheeler” as he came from the automotive industry and his whole attitude was that of a second hand car salesman – someone who thinks he’s nailed sounding sincere but actually he can’t fake it. What we call in the UK a “Wheeler Dealer”.

{Note, I had to correct this bit, I originally said the person who organised this meeting was from DevRel, my bad}

A senior lady from the database area realised this whole situation was now an utter mess (she also stepped in to make sure Mother Hen was done right by). She organised a meeting between the new ACE program owners in DevRel and the ACE community, so we could have a frank discussion. It was brave and I think it was totally the right thing to do. But I don’t think anyone predicted how badly the meeting would go…

The meeting started OK. We had some more of the blah blah about how things were “going to change and be cool and be great, and Whoop!” – but unlike all the prior one-way traffic of earlier webinars, this was a proper two-way discussion and the ACEs were allowed to speak. The ACES quickly made the point, calmly but with a tone of considerable frustration, that this “it’s going to be great” had been the case for ages now, but nothing was actually happening. And, frankly, what was so wrong with what the ACE program had been doing before it all stopped in early 2021? And this total lack of any activity by the ACE program was a real hinderance to our communities.

Tony Wheeler said this is what he wanted, he wanted to hear our passion and what it was we felt was wrong. So some of the ACEs (myself included) told him what was wrong. It boiled down to “It wasn’t broken, but you broke it anyway, and then promised cool/great stuff – none of which has materialised. Please just put back what worked and then plan the New World Order.

Tony did not like that.

When he said he wanted to know what we felt it turns out he did not like what we felt. Tony had lied.

Tony went on the offensive. He told us we were afraid of change and everything the ACE program had been was shit (he literally said “shit” or “crap”, I can’t remember which) and he was tearing down the shit and making it better.

He told a bunch of 200+ people who have made their careers on constantly learning the latest stuff in technology that we were afraid of change.

He told 200+ evangelists for Oracle, many of whom explain Oracle’s cloud offerings, that we were stuck in the past.

He told 200+ people that the program we’d known for years and were pretty happy with was trash and we had no clue how shit it was. His Oracle employee badge was barely dry but he was happy to burn the whole past down to the ground.

Wow. This guy was a badge-wearing psychopath.

Our social media groups flared. It was bad enough on the official meeting chat channel but in our twitter groups, DMs etc the scorn was heaped high. Yes, we were angered, but the main reaction was derision. This buffoon Tony Wheeler, with no idea who we were, had rocked up and tried to insult us for not being willing to accept what was new. Friend, most of us got onto this program exactly because we work on, fundamentally understand, and described what was new.

And he also told us the ACE Program we liked was shit and the people organising it in the past were shit. He was brand new to Oracle Corp but he “knew” what had been before was shit. He also thought we were all DBAs (*sigh*). When it was pointed out we wanted the “shit” back and he could take his promised new world order and shove it he basically lost the plot. And the argument. And any respect. I’ve never seen someone burn bridges so fast in my life as he pretty much insulted everyone on the call.

To make it worse Mother Hen was on that call. I can tell you, whilst Tony Wheeler was bad mouthing the old program there were dozens of us on Twitter, the meeting chat channel, DM’s to her, everything, expressing our outrage at this and our support for Mother Hen.

I can only assume this tactic of bad-mouthing the existing way of doing things had worked for Tony Wheeler in the past. Tell people who oppose him that they are scared “of change” and can’t move forward and attempt to burn everything in the past. It’s like a dictator running a scorched earth policy in a war. It never ends well.

I missed the very end of the meeting (I had a family commitment that took priority) but I’m told it was pretty much closed down by the senior database lady who called it, in shock.

I have only one last thing to add in respect of the Meeting From Hell.

Tony Wheeler asked me early on to feed back to him personally what they were doing wrong, what they should start doing again, how they could undo some of the damage. And I agreed to do so. People who know me well know I can fly off the handle and be very negative in-the-moment. But, if I have the opportunity to sit down and gather my thoughts, I’ll do my best to put together something honest but positive. I had said to him I would do this thing so, despite my real anger about him and the whole situation, I put down on paper (well, virtual paper) some thoughts on how things could be improved and sent it off.

I never even got an acknowledgement. The spineless bastard asked me to put my effort in to helping him save what he had messed up and he never even said “thanks”. He might think he knows people but, man , he does not.

So I forwarded a copy to a couple of other people at Oracle – people with a better attitude, just as a record.

The Positive Outcome

That bonfire of a meeting sent shock waves bouncing up and down the management structure in Oracle. It’s one of the very few events I am aware of when the community reaction had an impact on Oracle, though I also know that the internal backlash by Oracle PMs and others to the meeting was also fierce.

Tony Wheeler’s behaviour had been totally unacceptable. His lack of professionalism and his ability to alienate pretty much everyone else involved sealed his fate. He went. I know nothing of the details but it’s like he was sent “swimming with the fishes”. If I ever come across him again I will point-blank refuse to engage with him. He is on a very special list of only about 5 people in my whole career who I will simply not tolerate.

Crazy-Beard man is now out of the DevRel group, but still in Oracle. Maybe I missed it but I never saw anything from C-B man admitting he messed up, let alone apologising, which is a shame . I continued to follow him for a while on Twitter (keep your friends close, keep your not friends closer and all that) and whenever he appeared I wondered what he had taken away from this. I won’t say I’ll never respect him, but he’s going to have to do something pretty bloody high-end awesome for me to see him as a positive force now. Maybe saving baby kittens in Ukraine would do it for me.

Mother Hen, who had been snapped up by the core database group, has been given back the ACE program. It’s a work in progress, so much damage to fix and also there were already things she knew needed improving. I’ve had some nice chats with her, I really hope she gets the support she needs to get the ACE program back on track.

The head of DevRel admitted it had gone badly wrong and needed to be fixed, and committed to making that happen. That admission of fuck-up is, in my experience, almost unheard of in the business community, I hope Mother Hen got a bloody good pay rise out of this.

And in the last week or two the Oracle ACE program has re-launched. It is mostly as it was but with a few changes, and I think more changes will take place while also keeping things working.

Lessons To Learn

This post is already too long but I promised we could learn from this.

The first thing is Communication. It is *vital*! I think it is the absolute key thing to any community at all, be it tech, work, personal, anything. Empty or lying communication is poison, you will be found out and it will erode your community like acid.

The second is “do not make a bid for something you do not understand”. You will kill it. C-B man made a play for a group he did not appear to understand, he certainly did not know the key players and how the ACE program worked, and he (or people working for him) killed it. It remains to be seen if dedicated people who were badly treated can resurrect it.

Third is tailor your communication to your audience. Don’t try and be Tik-Tok & youth to a bunch of people who are mostly parents to those who might appreciate your naïve attempt, and would rather you all just acted your age. No one likes the Corporate Executive who tries to use teenager slang to appear cool, all the teenagers know it is fake – and they are using last year’s slang anyway.

Fourth is do not hire bullshitting arseholes. And if you do, never let them run free in a meeting with external people.

Fifth is, if as a corporation with an outreach program you mess up, your only real workable option is to apologise and step back. I’ve never really seen a corporation do that as they are invested in never admitting a mistake. In this case Oracle did admit the mistake with the ACE program and reset. I’m going to give them some kudos for that.

Friday Philosophy – Solving Simple Problems By Asking The One Key Question. June 17, 2022

Posted by mwidlake in Friday Philosophy, performance.
Tags: ,
add a comment

For many of us solving problems is a large part of our working life in IT. This is especially true when it comes to getting features of a product to do what it is supposed to do or even making a bit of hardware work the way it should. And, if it is a printer, work in any way at all! Often the solution is simple but we ask ourselves the wrong question. I’m going to use this pair of garden secateurs as an example of this. Trust me, go with me on this.

My trusty secateurs as a metaphor for almost all IT problems

I’ve had these secateurs for many years. For the first few years these secateurs worked wonderfully, but in the last 2 years they have not been working so well. They just don’t cut all the way through stems & small branches, you have to almost pull the piece off that you want to smoothly cut away. I was having to squeeze the handles harder and harder to complete the cut. And now it seemed to make no difference how hard I squeezed, they would not cut cleanly. This is like steadily increasing the size of the SGA to improve query performance, getting some initial gains and then nothing more.

The trick with any such cutting device is to keep the blade sharp, and I do. A few strokes with a needle file every few months keeps the blade sharp. The other issue with an anvil-type pair of secateurs like this is to keep the anvil, the flat area the blade comes down onto, clean and the little central gap clear. The blade closes down on the anvil and the thin gap allows the blade to *just* drop below the main face of the anvil and cleanly cut the stem. This is like the regular maintenance you do on a computer system, like cycling out redundant data or ensuring there are no accounts for staff who have left or rebuilding all your indexes ( 😀 ).

Only, no matter how much I sharpened the blade or cleaned out the anvil the secateurs would not make a clean cut. Ahh, I know. If you look at the above pictures you will see on the blade that the area closest in to the pivot is silver, it is where most of the wear is. Had the blade worn back into a curve so that the key part of the blade was not cutting all the way through? I used a flat piece of metal and checked the blade. Well, the far end was a little proud so I worked on it with the file and got the whole blade totally flat and sharp along the whole length. It was sharp enough so that when I pulled garden twine over the blade it cut straight through with ease.

But they still would not cleanly cut through a stem. I oiled the pivot, for no reason other than blind hope (just like changing configuration parameters for something when you really know those parameters have nothing to do with the problem). I sharpened the blade again (I rebuilt my indexes again). The blade was wickedly sharp, it was flat, the anvil was clean, these secateurs had always worked so well. So I asked the question. Or, more accurately, shouted it at the offending thing:

Why wasn’t *IT* working?!?!!

And that is the wrong question. But it’s usually our attitude to any piece of software or hardware that is not doing what it should. We beat the desk and swear and shout “why won’t you work you piece of crap!!!”

At this point you need to stop and ask a subtly different question:

What is it I don’t understand?!???

The two questions are similar but the key thing is they come from different directions. When you are screaming at the unresponsive printer or swearing about the SQL hint having no effect, your mind-set is that the thing is broken or has a bug or is in some other way not doing what it should. It’s the printer’s fault. The manual is wrong on setting up the feature. This thing is not doing what it should.

Well, yes it is not doing the required thing – but given other people can get the feature to work or the printer was working last week, the problem is unlikely to be there. The problem is actually that I am not understanding something. And it could be very fundamental, so ask the most basic things first. For the printer to print something it needs to be on and I need to send the file to it. Is it on! OK, maybe not that basic, but are you sending the file to the right printer?

Getting back to my example hardware, the blade is sharp enough to cut, the face it is cutting onto is clean, there is no issue with the pivot. What does it need to *do* to cut? The blade needs to come down on the anvil. I closed the secateurs and held them up to the light.

Note, I slightly emphasised the gap for the sake of the photograph

Ahhh, there is a gap! If I squeezed really hard the gap would shrink, but not completely close. The problem is not the blade, it is not the anvil, it is something else that is stopping the two coming together. The problem is elsewhere. And it is simple. And this is often how it is with software & computers. Yes, sometime the problems are very complex or have several confounding factors, but when you are trying to get something to just work, the problem is usually one of missing something obvious, which is usually being impacted by a component you are not currently swearing at.

This is just like last time my printer would not respond to requests to print from my laptop. I’d checked “everything”, swore at the printer, turned it off and on a few times, kicked the cat, sacrificed a small child to the printer Gods. I stopped and I did the “what do I not understand” thing. It turned out that due to a brief power outage a few days earlier my laptop was connecting to the internet via my neighbour’s router not mine (we have a mutual agreement to share due to the connection issues of living in a field and that we use different service providers). The printer and the laptop were not on the same network.

If you look at the secateurs in full you will notice that between the handles there are two plastic lugs that come together. I’m guessing they stop you squeezing the blade deep into the anvil, potentially damaging both blade and anvil. Over the years of sharpening I had worn away the blade enough that these plastic lugs were now preventing the blade and anvil coming together. Especially as, due to my frustration, I had given the blade a really thorough sharpening. That’s why I had been having to squeeze the handles harder & harder until eventually no effort would get a clean cut. I got that needle file out and reduced those lugs by a millimetre or so. The blade now closes on the anvil and, being about as sharp as it has ever been, they cut wonderfully. The solution was wonderfully simple and it took me all of 2 minutes to implement once I had worked it out.

With my first “increasing SGA” example, I was squeezing hard/giving the database a larger buffer cache, and that helped, but the real issue was the sorts were spilling to disc. I needed to increase the PGA (or process less data).

beautifully closed secateurs

You see, it was not that the secateurs were maliciously working against me or that the components that usually needs some maintenance needed it. It was that I was not understanding something – something very simple & fundamental it turns out. Rather than repeatedly doing the maintenance steps that had worked before but now were not, I needed to stop doing what was no longer working and ask what had changed.

When you are solving problems and it’s got to the swearing stage, it’s time to walk away for 5 minutes, have a cup of tea, and then come back and ask yourself “what do I not understand?”. Best still, do this right at the start. Though to be fair I’m not very good at that, I always get to the swearing stage before I decided to question my understanding.

Especially with printers. I bloody hate printers. Printers are sentient and out to get you.

Friday Philosophy – When Not To Tune! Or Maybe You Should? May 20, 2022

Posted by mwidlake in Friday Philosophy, performance.
Tags:
add a comment

This week there was an interesting discussion on Twitter between myself, Andy Sayer, Peter Nosko, and several others, on when you do performance tuning. It was started by Andy tweeting the below.

As a general rule, I am absolutely in agreement with this statement and it is something I have been saying in presentations and courses for years. You tune when there is a business need to do so. As Andy says, if a batch process is running to completion in the timeframe available to it, then spending your effort on tuning it up is of no real benefit to the company. The company pays your salary and you have other things to do, so you are in fact wasting their money doing so.

Please note – I said “as a general rule“. There are caveats, exceptions to this rule as I alluded to in my reply-in-agreement tweet:

I cite “Compulsive Tuning Disorder” in my tweet. This is a phrase that has been kicking about for many years, I think it was coined by Gaja Krishna Vaidyanatha. It means someone who, once they have sped up some SQL or code, cannot let it lie and has to keep trying and trying and trying to make it faster. I think anyone who has done a fair bit of performance tuning has suffered from CTD at some point, I know I have. I remember being asked to get a management report that took over an hour to run down to a few minutes, so they could get the output when asked. I got it down to a couple of minutes. But I *knew* I could make it faster to I worked on it and worked on it and I got it down to under 5 seconds.

The business did not need it to run in 5 seconds, they just needed to be able to send the report to the requester within a few minutes of the request (they were not hanging on the phone desperate for this, the manager just wanted it before they forgot they had asked for it). All that the added effort I spent resulted in was a personal sense of achievement and my ability to humble-brag about how much I had sped it up. And my boss being really, very annoyed I had wasted time on it (which is why it sticks out in my mind).

However, there are some very valid reasons for tuning beyond what I’ll call the First Order requirement of satisfying an immediate business need of getting whatever needs to run to run in the time window required. And a couple of these I had not really thought about until the twitter discussion. So here are some of the Second Order reasons for tuning.

1 Freeing Up Resource

All the time that batch job is running for hours it is almost certainly using up resources. If parallel processing is being used (and on any Exadata or similar system it almost certainly is, unless you took steps to prevent it) that could be a lot of CPU, Memory, IO bandwidth, even network. The job might be holding locks or latches. The chances are very high that the 4 hour batch process you are looking at is not the only thing running on the system.

If there other are things running at the same time where there would be a business benefit to them running quicker or they are being impacted by those locks, it could be that tuning those other things would take more effort (or even not be possible) compared to the 4 hour job. So tuning the four hour job releases resource or removes contention.

I had an extreme example of this when some id… IT manager decided to shift another database application on to our server, but the other application was so badly designed it took up all available resource. The quick win was to add some critical indexes to the other application whilst we “negotiated” about it’s removal.

2 Future Proofing

Sometimes something needs tuning to complete in line with a Service Level Agreement, say complete in 10 seconds. You get it done, only to have to repeat the exercise in a few months as the piece of code in question has slowed down again. And you realise that as (for example) data volumes increase this is likely to be a recurring task.

It may well be worth putting in the extra effort to not only get the code to sub-10-seconds but significantly less than that. Better still, spend extra effort to solve the issue causing the code to slow down as more data is present. After all, if you get the code down to 1 second and it goes up to 5, even though it is meeting the SLA the user may well still be unhappy – “Why does this screen get slow, then speeds up for a few months, only to slow down again! At the start of the year it was appearing immediately, now it takes forevvveeeeer!”. End users MUCH prefer stable, average performance than toggling between very fast and simply fast.

3 Impacting Other Time Zones

This is sort-of the first point about resource, but it can be missed as the people being impacted by your overnight batch are in a different part of the globe. When you and the rest of your office are asleep – in America let’s say – Other users are in Asia, having a rubbish time with the system being dog slow. Depending on the culture or structure of your organisation, you may not hear the complaints from people in other countries or parts of the wider company.

4 Pre-emptive Tuning

I’m not so convinced by this one. The idea is that you look for the “most demanding” code (be it long-running, resource usage, or execution rate) and tune it up, so that you prevent any issues occurring in the future. This is not the earlier Freeing Up Resources argument, nothing is really slow at the time you do this. I think it is more pandering to someone’s CTD. I think any such effort would be far better spent trying to design in performance to a new part of the application.

5 Restart/Recovery

I’d not really thought clearly about this one until Peter Nosko highlighted it. If that four hour batch that was causing no issues fails and has to be re-run, then the extra four house could have a serious business impact.

Is this a performance issue or is it a Disaster Recovery consideration? Actually it does not matter what you label it, it is a potential threat to the business. The solution to it is far more complex and depends on several things, one of which is can the batch be partially recovered or not?

When I design long running processes I always consider recovery/restart. If it is a one-off job such as initial data take-on I don’t put much effort into it. It works or it fails and your recovery is to go back to the original system or something. If it a regular data load of 100’s of GB of critical data, that process has to be gold plated.

I design such systems so that they load data in batches in loops. The data is marked with the loop ID and ascending primary key values are logged, and the instrumentation records which stage it has got to. If someone kicks the plug out the server or the batch hits a critical error, you can restart it, it will clean up any partially completed loops and then start from after the last completed batch. It takes a lot more effort to develop but the pay-back can be huge. I worked on one project that was so out of control that the structure of the data was not really known and would change over time, so the batch would fail all the bloody time, and I would have to re-run it once someone had fixed the latest issue . The ability to restart with little lost time was a god-send to me – and the business, not that they really noticed.

Simply tuning up the batch run to complete more quickly, as Peter suggests, so it can be blown away and repeated several times is a pragmatic alternative. NB Peter also said he does something similar to what I describe above.

6 Freeing Up Cloud Resource

Again, I had not thought of this before but Thomas Teske made the point that if your system is living in the cloud and you are charged by resource usage, you may save money by tuning up anything that uses a lot of resource. You are not satisfying a First Order business need of getting things done in time but you are satisfying a First Order business need of reducing cost

7 Learning How To Tune

I think this is greatly under-rated as a reason to tune something, and even indulge in a little CTD even when the First Order business need has been met. It does not matter how much you read stuff by tuning experts, you are only going to properly learn how to performance tune, and especially tune in your specific environment, by practice. By doing it. The philosophy of performance tuning is of course a massive topic, but by looking at why things take time to run, coming up with potential solutions, and testing them, you will become really pretty good at it. And thus better at your job and more useful to your employer.

Of course, this increase in your skills may not be a First, Second, or even Third Order business need of your employer, but it could well help you change employer 😀 .

8 Integration Testing

Again highlighted by Peter Nosko, we should all be doing integrated, continuous testing, or at least something as close to that as possible. Testing a four hour batch run takes, err, more time than a 15 minute batch run. For the sake of integration testing you want to get that time down.

But, as I point out..

{joke – don’t take this tweet seriously}

As I think you can see, there are many reasons why it might be beneficial to tune up something where the First Order business need is being met, but the Second Order benefits are significant. I am sure there are some other benefits to speeding up that batch job that finishes at 4am.

I’ll finish with one observation, made by a couple of other people on the Twitter discussion (such as Nenad Noveljic). If you fix the First Order issue, when management is screaming and cry and offering a bonus to whoever does it (like that ever happens) you get noticed. Fixing Second Order issues they did not see, especially as they now may not even occur, is going to get you no reward at all.

Rescuing An Almost Dead Lawnmower May 3, 2022

Posted by mwidlake in off-topic, Private Life.
Tags: ,
3 comments

As I slowly slip into something like proper retirement I thought I’d do some more blogs on “retired” topics. And as I know some of my Twitter followers have shown a strange fascination with my lawnmower and wheelbarrow “collection”, I thought I’d show you how I saved my old Honda Izy lawnmower from it’s imminent demise.

I’d had my old Honda Izy since 2007 and, though it had served me well, I had not been as good at cleaning if after use as I should. And it was often used on rough ground or ground with lots of stones on it, so the inside of the deck (the grey body that the engine, wheels, and other parts are mounted on) had got a lot of abuse and rusted badly. Grass mulch is quite corrosive. Looking on the net the rusting of the deck is a common problem with the Honda Izy. If I’d taken more care of it I am sure the Izy would have lasted many years longer. Anyway, the deck was splitting all the way around the engine mount and the engine & cutting blades were wobbling, causing the blades to catch the inside of the deck whenever it got jolted. In time the whole engine/blade unit was going to come away, probably when at full spin. That could be nasty! As you can see, I had used duct tape to keep the mower going until I got it fixed or replaced it, but this was my third or so duct tape repair and the whole machine just felt dangerous.

I did enquire about getting a new deck for the mower but the person who maintains if for me, a garden machinery mechanic, refused to do it. “The deck is not cheap, well over £100, I have to take the whole lawnmower apart which can be a right swine, re-build it on the new deck and then sort out all the little issues found doing it. It would take me a whole day or more. I’d charge you almost as much as a new mower costs”. So, as you can see from the above, I did buy a new Honda Izy. I have to say, the engine is a little quieter and smoother on the new one.

I looked at a couple of videos online about replacing the deck myself, but it did look very fiddly and that is with all the tools you need. However, I resented throwing away a perfectly good lawnmower and cracking little engine just because the deck was knackered. How about a car body repair kit? Hmmmm. I’d used one 32 years ago on my Mark 1 Golf, I could do this…

To prepare the lawnmower I emptied the oil (it needed replacing anyway), removed the blades, took off the petrol tank & fuel filter and gave them a thorough washing. There was a fair bit of sediment in the tank and fuel filter so it was good get rid of that, it had been causing some running issues. I then scraped away most of the caked on dirt, grass, rust, washed away most of the remainder and rubbed it down with wire wool. I did try a wire brush but that was pretty ineffective, wire wool was much better. Finally, I gave it a rub over with some rough glass paper, a final wash, and I left it 24 hours to dry out. This was last summer, it was about 30C during the day so it dried quickly. It might not look that clean in the pictures but that’s due to the remaining specs of paint and pits with a little rust in. I could see the metal was scoured and ready to be a good surface to bond to.

If you have never used fibreglass body repair kits before, it is very simple. You have a sheet or two of glass fibre (the white stuff) that folds out like fabric, a pot of resin, and a little packet of hardener. And a pretty useless pot and stirring stick, plus a crap brush. I’d advise getting another pot (a yoghurt pot will do at a pinch), a second little brush, and some spare sticks. My brother keeps lolly sticks (like you get with a Magnum ice-cream) for such purposes, I use literally a little stick off the ground!

WEAR GLOVES! The fibres of glass can get into your skin and irritate like crazy and if you get the resin on your skin it is not coming off until the skin does. Most kits come with a crap pair of thin plastic gloves but you can buy a pack of 100 disposable gloves for a few quid and you will need more than one pair probably. Put on the gloves and then cut the fibre glass sheet up into patches that will cover the area you want to repair. Normal scissors will be fine for this. 32 years ago I tried to cut just one piece to fit the whole repair, it was not ideal. And in this case I am fitting the sheet to a curved, circular surface. I cut several smaller pieces, about 5, and put them in place to make sure all looked OK. Now remove the fibreglass pieces.

Still with the gloves on, put some of the resin in the pot, I used about a third of the tin. Add the hardener as described. Actually, don’t, I made that mistake. Add about half the hardener as described, especially if it is warm like it was this day, and mix quickly and thoroughly with the stick, do this in 30 seconds if you can. Generously paint the edges of the area you are fixing with a little of the mixture, covering all the area the fibreglass is going on, and then put the fibreglass patches over it. The mixture should make them stick in place. Now put the rest of the mixture over the fibreglass and work it in with the brush. If the fibreglass patches shift or you ruck it or in any other way make the fibreglass patches do something you don’t want, fix it ASAP. This stuff goes tacky and then gloopy very quickly, which is why I say only put half the hardener in. The aim is to soak all the fibreglass with the resin and get it worked into the fabric before it turns to treacle. If you have time, scrape any residue out the pot with the stick and either try and get it on the repair or use some scrap of waste fabric, piece of card or whatever to get the gloop off. This way you might be able to use the pot and stick again. The brush is probably history.

I left the first layer for about 4 hours, then I cut a second set of smaller pieces to cover the weakest areas (where, basically, there was no metal anymore), mixed up some more resin and (less) hardener and used it to apply this second layer.

I left it to cure overnight, then gave the repair a sand with glass paper and washed it down. I then painted the repair with a tough paint designed to go on rusty metal (“Hammerite” in my case) and once it was dry, a second layer over the whole area. Be generous, it fills little pits and missed bits in fibreglass that somehow did not get enough resin in it.

I should mention I took care not to get any resin or paint on the nuts holding the engine onto the deck, just in case I ever want to remove the engine.

I now had a workable repair and it looked OK from the inside. If I did it again I would uses less hardener from the start and take a little more care over applying the fibreglass.

I turned the mower right way up and I could see the fibreglass through the holes in the metal. I used wire wool to prepare the surfaces arounds the holes, pushed any proud metal firmly down onto the fibreglass repair, mixed up the last of my resin/hardener mix and used the scraps of fibreglass matt I still had to patch the top and smothered the repair and surrounding metal in resin.

Once it was dry it was Hammer(ite) time again and I painted the repairs and some other areas of scratched paintwork and mild rust.

The engine now felt rock solid and the deck was not flexing at all. I counted this as Job Done.

I gave the blade a damn good clean and sharpen (though it could have done with grinding back another 5mm to be fair), put that back on, put the cleaned fuel tank and engine cover back on, replaced the air filter & spark plug and put in the oil (standard servicing kit) and then finally a bit of fuel. Only a bit in case I needed to empty it again…

I set the choke, pulled the starter cord, and the engine fired straight up in a couple of pulls. I did a couple of swipes along the rough grass near the castle mound and it cut beautifully. The engine was a lot smoother now too, due to the clean fuel system and new air filter. I now filled the fuel tank.

I’m the first to admit it is not the cleanest, most professional looking repair in the world, but it has proven to be effective. I did this repair last year and I’ve used the repaired machine many times since.

I use the old Honda Izy on rough terrain and anywhere I think there may be stones or similar that might damage the new Izy. And I am cleaning off the new lawnmower more conscientiously as, though I now know I can patch a knackered mower deck, it took me a few days and I’d rather not have to do it again through sheer laziness.

The old lady is now a useful member of my lawnmowing family again…

(BTW the below is not the full set, there is the petrol strimmer. And the hover mower. And the hand-held trimmer for small areas around plants…)

Friday Philosophy – Are Good IT People Just Lucky Starters? April 22, 2022

Posted by mwidlake in database design, Friday Philosophy.
Tags: ,
4 comments

There is a tradition in IT that older members of the community complain that “the youngsters of today” don’t really understand how to design systems, develop code, and test applications properly. It was like this in the late 80’s when I started. It was a common theme of discussion at the end of the 90’s. The 2000’s seemed to me to be endless carping about development frameworks that simplified things to the lowest common (poorly performing) denominators. And it seems to be a big part of what us oldies do on the likes of twitter or at conferences now – or at least did when we had proper conferences pre-plague.

One aspect of IT certainly has changed over the decades and that has been a shift in the layer(s) where most professional IT people need to concentrate to get the best out of a system. Back in the late 80’s the oldsters were saying you had to understand registers, memory pointers, the physical constraints of the hardware to get decent performance, and use a low-level programming language like C or even assembler. As time has gone on the move has been up the technology stack, leaving the lower levels like memory management and how interpreters work as either solved or looked after by a tiny set of people.

By the end of the 90’s it was all Middleware and application servers took most systems and thus development off the database servers or mainframes. software architecture and frameworks were supposed to remove the need to worry about *how* the data was got, and more modern languages meant you did not have to worry about memory maintenance, freeing resources etc.

One thing that has not changed (IMHO) but is now often overlooked is the physical placement of data, data structures, and how the storage works. I can often vastly improve the performance of applications or specific pieces of SQL by doing what we used to do in the 1990’s – storing data in a manner that makes accessing it require less IO, putting related data together. Some of us old database types moan endlessly about places not doing proper database design anymore.

But sometimes I wonder if the actual areas of focus moaned about by the old guard are not that significant. The thing they (and now I and many of my friends) also complain about is actually more significant – and that is our attitude towards the process of designing and building systems.

I was not trained in IT at college, I studied biology. But I was trained when I came into the industry, in SSADM, database design, structured testing methodologies, even logical problem solving. And I was lucky to work with people, mostly those bitter old people, who spent as much time teaching me why you do things in a certain way and not just the syntax of a language or which framework to use or which source control repository was flavour of the year.

Looking back over my whole career I’ve encountered a huge number of very average or even poor developers/DBAs/analysts/system designers. And yet some people from every generation are much better than their compatriots, even though they have similar backgrounds and experience. And often these very good people are not apparently any more generally intelligent than the not good ones. Thinking of those good people, I believe a common trait across them is that they listened to the old people complaining and, though they ignored a lot of it, they learnt to ask why things work the way they do and to try and understand the overall technical architecture of computer systems – and not just their little bit. They learnt to consider the whole system, even if some of it was only understood at a simplistic level.

I’m not sure that this curiosity about how things work and the need to look at the wider picture is taught at college (and these days most people coming into IT have come from a college course that either focuses on computing or is a main component of it). If it was taught, wouldn’t it be more common?

I think we learn how to solve problems and design systems from those around us who have done it for real, many times. And that’s those moaning old buggers. But it’s not understanding a layer of technology that is important but actually the total opposite – understanding the wider picture.

I think most people who are good at IT, no matter what their age, were blessed by early exposure to talented (but miserable, complaining) people who simply did things in a sensible, holistic way and asked “why?” a lot. We were lucky.

If you think this whole article is just a plea to listen to me when I complain about the youth of today, you may have a point. But, if you do listen, I might (probably by accident) teach you something that helps your career for years to come. It’s not so much how smart you are but your attitude which makes what you work on a success.

Friday Philosophy – On The Return To Physical Gatherings December 3, 2021

Posted by mwidlake in Uncategorized.
Tags: , ,
2 comments

In my last post I talked about why I had decided to return to attending physical events, even while having reservations about it. The event, UKOUG’s annual conference at the Oval cricket ground in London (a wonderful premises to spend time in), happened at the start of the week. So, how was it? Did I feel safe? How did they look after us?

The Event

Sorting out a few technical AV issues before a cracking session on hacking

I’ll just start with a couple of paragraphs on the actual event and then move on to how I found it all.

The conference itself was very, very good. It covered both Tech and Apps over 2 full days, with a speaker/volunteer evening event the day before the conference. The Oval was generally a nice venue but the number of issues I saw with AV… Boy they need to sort that out! As for the evening event on the roof terrace – great for Covid security, terrible for avoiding hypothermia! I heard a few people who said there could have been a bit more technical content and there were some slots where there were too many “Oracle Names” at the same time or two talks on the same topic, but unless you have helped organise the schedule for a large, complex event like this, you have no idea how hard it is! This was not helped this year by a larger-than-usual drop-out of speakers just before the event due to the new Omicron covid-19 variant. The variant itself was not the problem (there are very few cases outside Southern Africa yet), it was how countries were changing their travel and isolation rules. Coming to speak at a conference than then having to spend 10 days locked down when you get back to Switzerland is a big ask. I used to take complaints about there being too many good session clashing as almost a complement – there was just too much good stuff to see.

I have to take my hat off to the board, office, and volunteers who put the conference together. It’s always been a challenge and that was with an office of over a dozen people and a small army of volunteers, with the board having oversight. To survive Covid-19 and the massive drop in revenue, UKOUG has had to par right down to 3 staff and the board have been very, very hands-on. The conference this year was nothing to do with me, I had to step down from the board last year. For the first time in over 10 years I had nothing to do with the event at all, I was there purely as a delegate. I hope I made this clear to all the people who thanked me for the event! It was strange being just a delegate after over 18 years of either presenting, hosting, planning, or fronting.

Being With People Again

As anyone who regularly reads my sporadic blog output or follows me on social media knows, I’ve been very cautious about Covid-19 from the outset. I’ve kept away from people, followed all the guidance, and actually gone beyond the official rules as I’ve kept abreast of what professional epidemiologists, medics, and virologists have to say. But as I covered in my previous blog I had made the decision to go to the conference despite my general caution. I’m double vaccinated, had my ‘flu jab, I know the majority transmission is via aerosol droplets so I can do some things to reduce the risks. I love the community and conferences, it’s pretty much what I have focused on for 5 or 6 years, so for me I decided it was worth the risk. I utterly respect anyone who comes to the opposite conclusion.

As I said in that post, the part of attending the conference I was most anxious about was getting there. I ended up travelling into London with a friend, Erik van Roon. He had been amazed at how few people on the London Underground were wearing masks, often sat under signs saying it was mandatory. That’s what happens when you have a government that does not lead by example, ignores their own rules, and no one enforces any restrictions. I hate being on UK public transport at the moment. We both wore our masks. The trip in on the train was OK as it had come from the airport. Most of the other people were from other countries and were happy to wear masks. None of them passed out or spontaneously died… On the London Underground is was about 50/50 mask wearing but, thank goodness, it was remarkably quiet and quick. I’ve never done that route so quickly and quietly except at 10pm at night. Despite the pleasant company I had, I really disliked the trip and I was glad when it was over.

We had a gentle introduction to “crowds” on Sunday night when we had a speaker/volunteer gathering at a club in central London, just off Leicester Square. I have to confess that for the first few minutes, as more people arrived, I got a little anxious and had to concentrate on not showing it {standing in a room screaming “get away from me you plague-ridden vermin!!!!” is likely to dent the atmosphere}.

However, the room was waaaay bigger than it needed to be for the numbers there and there was a wide open doorway out onto an outside balcony. I would have preferred more mask wearing but I noticed people were standing in looser circles than normal. Most people avoided physical contact. After the first half hour I found the experience easier than I thought I might, partly I think as I knew most of these people and (utterly wrongly) thus unconsciously felt they were “safe”. That’s an oddity of human behaviour, we tend to treat people we know as safer than strangers, even when logically we know it is not true. Also, of the people I actually knew, I was sure they were vaccinated. I don’t personally know many people who are Covid-19 denialists. One thing I did do is not go for food when it came out. It was platers of stuff with people crowed around them. No thanks. But later on more food came out and people had wandered off, so I had some of that. This might sounds a bit “off” but I’m probably at more risk from Covid-19 than most. If I get a bad spell of it, it’s probably hospital time again and I don’t like the idea…

As the evening wore on and alcohol was consumed, people did relax more and distances shrank, but then so did the number of people there. I confess that when, at the end of the night we moved on to shorts, I totally stopped worrying about how many SARS-CoV-2 particles there might be. The lesson there is that increasing alcohol consumption decreases bio security. Who knew? (sarcasm).

The Big Crowd

Next day came the real test. Would I find being in crowds worth it for the event?

Martin Klier explaining why PDBs can impact each other

I should say at this juncture that everyone at the event was double vaccinated or had had a negative test prior to the event (or at least should have) and I know checks were made. I could not guarantee to you that everyone was checked, but that was the intent. {update – see the comment by Neil Chandler for more details on the steps taken to keep us all safe}. I had personally also taken lateral flow tests for 2 days before attending and did more during the event. I didn’t want to be Typhoid Mary All foreign speakers/attendees had had to do tests as part of their trip here (though ask me some time how well all of that was handled!!!) so I knew I was safest with my overseas friends.

Even so, walking into the keynote talk I found unnerving. But also really welcome. People, “my” community, lots of men and women with a shared interest and a desire to learn or teach. And not via (excuse my French) bloody Zoom or MS Teams or some other sodding screen.

I noticed that the crowd was spread out far more than normal, people were sat with spare seats by them or between their little group and the next one. The windows were open. The turnout for the conference had been higher than the organisers had feared, especially given the hype of Omicron variant for the prior 2 or 3 days, but we were well below 50% capacity for the venue, I would say 30%. It helped that, unlike most conference venues, all the rooms were in a long row with windows/doors outside on at least one side. Thinking back, it was also nice to be at a conference where there was natural light in every room.

As the conference progressed it remained the case that people kept a little extra distance (though I moved away from some people who got too close) and everyone seemed relieved to be having a fairly normal conference experience. We had coloured badges on to indicate how hands-on we wanted to be. Green was “touch me if you want”, yellow was “I’m happy to be in your presence but no tongues” and red “Keep the hell away from me!”. I can’t remember meeting any reds (well, they should have been keeping the hell away from me) and I was yellow. A few people said they were surprised I was yellow – they can’t know me that well! I hope the colours were different enough for anyone colour blind to work it out as there was no text on the button (kiss me quick/I’m terribly British so no touching/bugger off).

The only times when there were a lot of people together where breaks and the evening event. All the catering staff were masked & gloved, generally they were putting your food on a plate and giving it to you at the end, no finger food or standing coughing over sandwiches. Even the tea/coffee was prepared for you and handed over. Having said that, on the first day I decided not to join in (helped by the fact it was all dry, brown food) and I went out and got something. Again, my lungs are shot so I take extra precautions.

The evening event was, as I said above, in the open air and with lots of space. I did not feel anxious about it at all. The venue was originally booked for June when the terrace would have been stunning. At the very end of November during a cold snap, you were in more danger from the cold than any virus.

The final thing I’ll cover is masks. Very few people wore masks. It’s the one aspect of the whole experience I was not happy with – and yet I was not wearing my mask. Trying to talk with people when you have a mask on is harder. I also personally find wearing a mask for long difficult. I was strapped to ventilation machines for a week, unable to breath enough on my own to keep me alive, and as a result I sometimes get very anxious wearing a mask. I’ve still got poor lung function and, though I am generally OK wandering around or going for a walk on the flat, any incline is a challenge and forget trotting or running at the moment. A set of stairs can leave me gasping on a bad day. A mask makes me breath that little bit harder so it’s tiring. But I always wear one on public transport or in shops. I find people who claim masks “poison you” farcical, given how many people in medical or dirty jobs wear them all day just fine. If I can wear one with my problems, they can. But at the conference I didn’t wear a mask and I am not really sure why.

Something a friends said to me during the conference was that if he heard of someone going off to a big party, especially now with the new variant in everyone’s mind, he’d think they were mad. But we came to this conference. It’s called cognitive dissonance, hold two opposing opinions at once. OK, it was not a party, it was something we do as part of our careers (or in my case my hobby), but really it was something we did not NEED to do.

Was I glad I went? Yes. Was it sensible? Probably not. Would I do it again next week? Absolutely not. For one thing, I count myself as a risk to others for the next week or so. Would I do it next Spring? Depending on unknowns with the pandemic and whether I can manage the flight (or go by land) probably.

I love conferences and other meetings. I don’t take part in the community for my career anymore as my career is over, I do it as I like many of the people I meet in the Oracle sphere and I love the sharing of knowledge. It’s important to me and I will take some risk, if I feel that those around me are going to also be sensible. I would not go on a holiday to the costa del sol at the moment as I know what the average UK tourist over there is like, and I would not go to a night club (but then, I don’t like them!). But another conference? Yeah….

All rooms opened out onto the famous Oval cricket grounds. Don’t ask me to explain the rules of cricket.

Friday Philosophy – To Physically Meet Or Not? October 29, 2021

Posted by mwidlake in Uncategorized.
Tags: , ,
1 comment so far

We are seeing a slow return to user groups having physical events, or hybrid ones where some people stay at home and use zoom (other remote networking solutions are available) and other people physically come along along to the venue. Some people are now happy to meet physically, some would like to but their company will not support it, and some people don’t want to come within spitting distance (quite literally, given it is now pretty much established that SARS_CoV_2 is primarily spread in airborne droplets of saliva) of other humans.

I miss this

Most of us have taken part in virtual conferences or meet-ups since Covid-19 first arose. Let’s face it, though they are better than nothing, remote events are not exactly a proper replacement for being in the same place, chatting with old friends, making new contacts, and seeing people talk about topics in the flesh. And presenting remotely is a very different experience (as I covered in this post on training remotely) and takes a different skill set to live presenting, and many presenters really do not enjoy. I’ll do it but I am not keen and I have mostly stopped presenting remotely at user group events. I know some people prefer virtual events but the majority don’t – which is fine, we are all different.

So what to do? Keep home and keep safer but continue to miss out on what a physical event brings, or take an increased risk of contracting or spreading Covid-19 and go? It’s a difficult choice for many people.

I’m returning to physical events. But I fully understand anyone who does not want to, especially if they live with (or are themselves) at higher risk, such as having a relative who cannot be vaccinated.

For a different opinion you can go look at this post by Brent Ozar. He sums up a few reasons for still keeping away from physical events.

I really miss this

I’m double vaccinated, I have a good understanding of Covid-19 (as anyone who was reading my blog last year will know), both how it is transmitted and what it does to you. I’m going to return to going to physical events but I am going to take precautions – not just to protect me from the infected hordes but also to help prevent me from infecting the hordes. I will be attending the UKOUG tech 21 conference at the end of November and I am really, really looking forward to it.

The UKOUG Tech 21 conference organisers will be taking many precautions themselves over ventilation, number of attendees etc. I was still on the board of UKOUG in the spring of 2020 and we were the first user group to deem physical events too risky and cancel one, the first I think to make a solid call of having no physical events in 2020 at all, one of the first (if not the first) to organise a proper multi-stream virtual conference. UKOUG have demonstrated a real focus on the safety of it’s membership and yet try to keep the oracle community breathing (see what I did there). I was really proud that UKOUG listened to myself & Neil Chandler, looked at the science, and made decisions that protected the membership to the cost of the user group itself.

I’ll be wearing my mask when I travel to the event. I know, in some countries it would be deemed madness to not wear a mask on public transport but, despite all the signs saying it is mandatory, the UK government have not attempted to enforce such rules at all. And when they sit in parliament in a crowded room, not a mask is to be seen usually. They have failed to govern or lead effectively on Covid-19 since day one. I was not a fan of masks initially, if you asked me 2 years ago I would have laughed at the general public using them as viruses & bacteria are massively smaller than the pores in non-medical-grade masks, most people have not been shown how to wear them (and still don’t know), are useless at not touching the mask or keeping them clean, and often just wear them as a pointless chin warmer. But it’s been demonstrated that masks are very good at catching the droplets of saliva that we expel and so greatly reduce the wearer transmitting SARS-CoV-2, and somewhat mitigate against breathing in tainted droplets. They help.

Once I am there I am staying at a local hotel (I could have done the trip in and out from home each day), walking to the event, basically minimising my public transport usage.

If there is any finger or buffet food offered, I ain’t touching it. It only takes one infected person coughing when serving themselves to massively increase risk.

I won’t be shaking hands (or bumping elbows, a practice I have always thought was bloody ludicrous, especially when we were told to cough into our arm to contain it – “Hey, touch my plague infested arm!!!”) or hugging people unless it seems very important to them. So pretty much no one I know in the IT sphere. Licking other delegates and wild sex is definitely out this year

If anyone is coughing, spluttering, looking flushed, complaining they feel hot but “it’s just a cold” I am not staying near them. If Covid-19 taught us anything it is that we should not regard people who go to work/meet people even when they are ill as heroes but as lunatics. And employers who encourage or force such behaviour are not only abusive but mad. You want all your staff to get ‘flu?.

I’ll probably wear a mask quite a lot as I cough a lot these days, as a result of having crappy lungs. I don’t want to make people feel unsafe and there is always a chance I could be carrying SARS-CoV-2 and not realise.

I’ll be taking a lateral flow test every day and for a few days before the event. They are not desperately good at detecting the virus when you first have it but it’s some indication. If one says you DO have Covid-19 you almost certainly do. If I can I’ll get a proper PCR test a few days before.

I would have already started going to physical events if I felt safe to fly. This is nothing to do with Covid-19 though. I was supposed to be at POUG2021 last September (they had much lower Covid-19 levels than the UK so I would have been safer there than the UK!) but my lungs have never really recovered from my fun with ‘flu a couple of years ago and any demands on them above a steady walk and I can’t do it for long. I might be fine in a plane, but taking a four hour flight and finding out I’m not is not a clever idea. I could get tested to see how I would cope with the reduced pressure and O2 levels of a flight but the UK NHS has been under extreme pressure for most of this year and I see my getting the test as a frivolous waste of their resources, even if they would agree to do it.

Another aspect of remote events is a lot of them have been put on free to the delegates or considerably cheaper than a physical event. This makes physical events look expensive and introduces the complexity of do the organisers have two fee structures, for physical and virtual attendance. You can reduce the costs of your venue by having fewer people actually there but it’s not really proportional. Many user groups, especially those that have any sort of organisation behind them (like most of the big ones such as DOAG, UKOUG, POUG) incur costs just by existing and the drop in income caused by Covid-19 has been crippling. Conferences that delegates pay for, and membership fees for user groups, keep these groups going and if people (or more often companies) stop paying for them… You are going to lose your user groups.

A final consideration is how the UK is doing Covid-19 wise. The UK is doing bloody awfully and has done so for most of the year. The one thing we did, that the government pretty much left our National Health Service to sort out, was immunising everyone who would and could do so. Our case rates are, excuse my language but I am a little vexed by this, fucking awful, about the worst in the world compared to our population size (poor Ukraine and Romania win there as the moment). The vaccines and steadily improving treatment methods are keeping death rates at only terrible. But if we get another large spike, UKOUG will cancel and I would not go anyway.

I MISS THIS!!!!