What are you actually comparing? (an extended Twitter rant)

I had a bit of a rant on a Twitter thread yesterday about this post.

The Transition to Trunk-Based Development

I’m going to repeat that rant here, then expand on it below.

The Rant

This kind-of gets on my tits.

It reads like, “we were doing everything badly and blamed it on GitFlow. Then we switched to trunk-based development and started to do everything properly. Trunk-based dev rules.”

You went from:

  • No automation to automated delivery.
  • Manual testing to automated testing.
  • Huge, long-lived feature branches to deploying smaller units of work.

None of this is about GitFlow vs trunk-based. It’s all about doing modern development properly.

This is such a lazy argument. I would be interested to see you fix all that stuff in GitFlow, then move to trunk-based and see what the difference/improvement was. That is a better comparison.

Now I realise sometimes you have to have a big step-change project to get people to do something different, and maybe trunk-based development was that trigger for your company, and if so, that’s good for you, but as I said, this is not GitFlow vs. trunk-based.

So once again. I’m not saying one method is better than the other. I’m just saying be honest about the major factors that contributed to your increased velocity.

None of the factors listed were specific to these styles of development. They are basic Agile and DevOps things.

Expanding

I see this sort of thing all the time.

I remember being in a session about Exadata when it was first released, and being told about 1000x performance when one project was moved from old conventional kit to Exadata. Someone much brighter than me asked the question about what code changes were implemented as part of the migration. It turned out a bunch of row-by-row (slow-by-slow) procedural data loads were ripped out and replaced by parallel DML operations using external tables. So as well as moving from old crappy kit to Exadata, they switched from crappy procedural code to set-based data loads. Relatively speaking, relational databases tend to be pretty crap at procedural work, and amazing at set-based processing. There was of course no comparison of how well the new data load approach worked on the old kit, so who knows where the biggest performance gains were made?

This isn’t about me slagging off trunk-based development, or Exadata. It’s about people making flawed comparisons. Imagine what you would say if I said advanced driving courses are amazing and here’s the proof. I did a lap of the track in a Ford Fiesta and it took 5 minutes. I then did an advanced driving course and was able to improve my time to 3 minutes in a Ferrari. I credit the advanced driving course for all the performance improvements! It’s clearly a terrible comparison and a misleading conclusion.

Wrapping It Up

Going back to the post that initiated this rant, I don’t think they were purposely trying to be misleading. Please don’t send any hate, but I feel like the real conclusion was not about GitFlow verses trunk-based development. It was about two things.

  • Manual process verses automation.
  • A cultural shift to encourage large, long-lived enhancements to be broken down into smaller user stories and story points, and being willing to ship small sprints of work to production, rather than waiting for the entire enhancement to be complete before deploying.

The first point is very much what “The Principle of Flow” in Devops focusses on. The second point is common to discussions about DevOps and Agile in general. This is what resulted in the increased velocity IMHO.

So when you are reading stuff, try to engage your brain and read between the lines.

Cheers

Tim…

How will my content change?

I was on a call a few weeks ago and the subject of technical content came up. As someone who produces a certain type of content, I had some thoughts related to cloud services. Specifically how cloud services make my style of content less meaningful these days.

A large part of my content could be described as “traditional” DBA content. As we move more systems to the cloud, and start to use increasingly automated database services, the “traditional” DBA is becoming less relevant, and therefore a certain proportion of my content is becoming less relevant with it. We are due to get an on-prem release of Oracle database 21c soon, and I’ll certainly be doing some installation articles for that, but how many more releases after that will need installation articles? How many more releases will require traditional DBA content? At some point we’ll be using cloud-based data services, so people like me won’t be installing or patching stuff anymore. What does that mean for my content?

Of course, if I’m still working I will still be producing content. As followers of the blog know, writing stuff is part of my learning process, so every time I’m learning something new, you are likely to see some articles appear on that subject. The issue is, if the traditional DBA content stops being necessary, or I’m just not doing DBA work anymore, what sort of content will I be producing?

The short answer is I don’t really know. I don’t think any DBA knows what they will be doing in five years. I suspect I will be some form of developer, but I don’t really know what type of developer. I would imagine it would be data-related, but who knows…

If this post raises any questions in your mind, I’m afraid I’m not the person to answer them. It’s just a really odd time…

Cheers

Tim…

VirtualBox 6.1.20 & Vagrant 2.2.15

VirtualBox 6.1.20 has been released.

The downloads and changelog are in the usual locations.

While I was playing around with VirtualBox I noticed Vagrant 2.2.15 has been released. You can download it here.

I’ve installed both of those on Windows 10, macOS Big Sur and Oracle Linux 7 hosts. So far so good.

With the release of the Oracle patches I’ll be doing a lot of Vagrant and Docker builds in the coming days, so I should get to exercise this pretty well.

I’ll also do the Packer builds of my Vagrant boxes with the new versions of the guest additions. They take a while to upload, so they should appear on Vagrant Cloud in the next couple of days.

Happy upgrading!

Cheers

Tim…

Learning new stuff is good, even if you don’t use it…

I mentioned on Twitter, I was on a training course last week for a non-Oracle cloud-based database engine.

I went into the week feeling quite nervous about things, because I like to learn things at my own pace. Having to work at the same pace as others doesn’t work well for me. I’m quick at some things, and slow at others. That said, it was a really fun week. It flew by, which is always a good sign.

The main point of this post is not about the product or the course itself. It’s a more general point. I think it’s important to expose yourself to new bits of tech all the time. I have no idea how involved I will be in the project using this product, but it’s still good to learn more about it. When you learn something new it makes you question how you approach your existing role, and how you use your existing tech.

Of course, the Oracle database is what I’ve invested most of my time into, and it’s the thing I know the most about, but it’s far from the only thing I do on a day to day basis. I often say people should try the latest version of the Oracle database, because it might make them alter their approach to the older versions. This is true of different technology stacks too. Over the last few years I’ve spent a lot of time using and writing about things that are not core Oracle database tech, but that has had a positive influence on my approach to the database.

So going back to the title of the post, it’s important you learn new things, even if you don’t use them often, as they will change you and give you a broader understanding of your goal.

Cheers

Tim…

PS. How you approach learning new stuff depends on you. I wrote a series of posts about Learning New Things.

PPS. It’s not all about tech. You should also expose yourself to different elements of projects, so you better understand where other people are coming from.

You don’t need to be an expert to be useful!

I come from a time when you could be an expert at one thing and be really useful to a company, but I think that time is long gone. If you only have one skill, no matter how good you are at it, you probably can’t achieve anything in tech without waiting weeks to get people to help you with all the stuff you don’t understand. In recent years, being a tech allrounder seems to be much more useful than being an expert. Maybe it always was.

Of course, this poses its own set of problems. How do you learn all this stuff? That’s the hard part and there aren’t any short cuts. There isn’t a “full stack developer course” that will teach you. You’ve just got to work on your Google-Fu and start getting your hands dirty. On the positive side, there is a lot of good information out there to get you started. Blog posts and videos that will get you from zero to adequate in a short amount of time if you put in the effort.

Over the last few years I’ve played with a lot of different technology, and I still find new stuff interesting, but it’s taken me a long time to deal with the fact I’m crap at most of it. Good enough to get the job done and fool people into thinking I know what I’m doing, but ultimately only one weekend of playing with the tech and a couple of Google searches ahead of some other people.

So my advice to people in tech is:

  • Try and get involved in as many aspects of tech as possible.
  • Forget trying to be an expert in any of them. Just try to get good enough to be useful.
  • Be humble enough to realise that what you say and do today may change tomorrow when you’ve Googled a bit more.
  • Try to understand the big picture. How things fit together and how processes work. Programming languages and services change all the time, but understanding the goal and the processes to get there don’t change as much as you might think.

Remember, it’s just my opinion!

Cheers

Tim…

VirtualBox 6.1.18

VirtualBox 6.1.18 has been released.

The downloads and changelog are in the usual places.

I’ve installed it on Windows 10, macOS Big Sur and Oracle Linux 7 hosts with no problems.

I’ll be running new Packer builds for the oraclebase/oracle-7 and oraclebase/oracle-8 vagrant boxes, so they should appear with the new version of the guest additions over the next day or so.

Cheers

Tim…

Links:

A layered approach to product design

Some time ago I wrote this post.

The Problem With Oracle : If a developer/user can’t do it, it doesn’t exist.

As a result of that post I was invited to speak to a bunch of product managers at Oracle. In that session I spoke about the contents of that post and also about my thoughts regarding a layered approach to product design. I thought I would briefly outline the latter here.

I used to be an Oracle specialist, back in the days when it was possible to have a normal job as an Oracle specialist. Nowadays I find myself doing a really wide range of things. That inevitably means I am Googling my way to solutions a lot of the time. If I had stayed completely in the Oracle world I think my attitude to technology would be very different. There’s something about going outside your comfort zone that helps you gain perspective. In my previous post I said,

“I’m just a generalist that uses a whole bunch of products from a whole bunch of companies, and most of them are too damn hard to use, even with the assistance of Uncle Google.”

In my head, the solution to this issue is for companies to take a layered approach to every aspect of their products. They should be asking themselves.

  1. Who is the audience for this product today?
  2. Who do we expect the audience for this product to be in the future?
  3. Does the product we’ve created meet the needs of these audiences?

Let’s use the Oracle database as an example of this. We could use many other database and non-database products.

  1. There are aspects of the Oracle database that are focused on the developer audience, but there are also aspects of the database that are focused heavily on the administrator audience. So the audience for this product is split.
  2. Over time I expect the DBA role to completely disappear. We have already seen the beginning of this with cloud-based databases. I expect this trend to continue. As a result, I would suggest the future audience of the Oracle database will be solely developers.
  3. Since the product currently has a split audience, and we expect one of those roles to go, I don’t think the database is targeting the correct audience. Anything that is currently a DBA task needs to be automated out of existence. Anything where the DBA is a gatekeeper needs some redesign.

So how do we achieve this? My suggestion would be to take a layered approach. I’ve discussed a similar idea of a layered approach to documentation.

  • Layer 1: Simple how-to.
  • Layer 2: Give me some details, but don’t make my head hurt.
  • Layer 3: I’ve taken some paracetamol. Do your worst!

This time I’m thinking about how the product itself works.

  • Layer 1: The product works out of the box. A developer with no experience of administering this engine can start doing something useful with it immediately. There are no commonly used features that are out of their realm of control. A company or person may choose to stay within this layer for the lifetime of a project and see no ill effects.
  • Layer 2: If the company have some skills in the product, or a specific aspect of the product, they may choose to dip down into this layer. Here they can perform some actions that are not directly covered in layer 1, but this doesn’t mean they lose all the benefits of layer 1. They are not switching off all automations just because they want to deviate from one bit of default functionality.
  • Layer 3: The company have some people with God-mode skills and want to do almost everything by hand. They want to take full control of the system.

The important point is, people want work in the layer(s) they are comfortable in, and still do an effective job. This makes the product accessible to everyone, but doesn’t discriminate against those that want to no-life the product, if they can see a benefit in doing so.

I know there will be objections to this approach, and believe me I can make counter-arguments to it myself, but I don’t see a way forward without taking this sort of approach. I’ll go back to a quote by Jacob Duval where he was comparing MySQL and PostgreSQL.

simply put: mysql has a superior developer experience. postgres has a superior DBA experience. DBA is not really a job anymore, so I pick the developer experience every time.

Jacob Duval

The developer experience has to be the #1 focus from now on!

I’m not underestimating the impact of that statement. It is a massive job for a huge and mature product such as the Oracle database, but not doing so is a death sentence IMHO.

I know some people will see this as a cloud sales pitch, but actually it’s not. I think the on-prem products need to live up to these ideals too. Why? Because I see the future as multi-cloud. If Oracle focus entirely on their cloud offerings, people who decide not to pick Oracle Cloud will be left with a sub-par experience when running Oracle products on other clouds. The result of that is they will pick non-Oracle solutions. I don’t think this is a road Oracle should go down.

Cheers

Tim…

PS. I’ve kept this post purposely vague, because I think focussing on individual features will make the post huge, and detract from the overall message…

Update. Akiva Lichtner raised an interesting point. I thought I would add it here, in case someone else is using their own interpretation of what I am suggesting.

“You can see from Tesla’s speed of change that vertical integration which is the opposite of a layered approach is a superior approach. Also reminds me of Bryan Cantrill’s old DTrace talk where he says that the layers conspire to make the whole system impossible to troubleshoot”

Akiva Lichtner

My response.

“It depends what your interpretation of the layers are. Sounds like you are interpreting it as something different to me. The Tesla interface has layers. It can self-drive, or you can drive for yourself. Just like what I’m talking about…”

Me

I’m not suggested we should just keep stacking layer-upon-layer on the existing products. My focus is very much on the potential for a layered audience. As I mentioned above, a Tesla can use autopilot or be driven by a human. Same car. Two modes of operation. We could consider them two audiences.

Vagrant & Docker Builds : APEX 20.2 and other updates

The recent release of APEX 20.2 has triggered a build frenzy.

Vagrant

All my GitHub Vagrant builds that include APEX have been updated to APEX 20.2. The builds themselves are unchanged. This was literally an update to the environment files, so it took longer to test the builds than it did to make the changes.

While I was at it, I did a couple of extra updates. I updated Tomcat to version 9.0.39 on all relevant builds, and updated the optional patch script for the single instance database 19c on OL8 build to use the October 2020 bundle patch. The GI bundle isn’t available yet, so I’ve not altered the OL8 19c RAC build. That will happen soon.

Update: I’ve got the GI bundle patch now, and the OL8 19c RAC build has been updated to use it.

There will of course be more updates to the builds once we get the new versions of AdoptOpenJDK, ORDS and SQLcl, that are probably coming soon.

Packer

I mentioned in my VirtualBox 6.1.16 post I would be updating the oraclebase/oracle-7 and oraclebase/oracle-8 vagrant boxes to include the VirtualBox 6.1.16 guest additions. Those are done now.

Docker

This is pretty much the same as the Vagrant story.

The relevant GitHub Docker builds for Oracle database and ORDS containers have been updated to include APEX 20.2.

I’ve also added Tomcat 9.0.39 to the ORDS builds, and updated the optional patch script for the database 19c on OL8 build to use the October 2020 bundle patch.

Once again, more changes will appear as the new versions of AdoptOpenJDK, ORDS and SQLcl appear.

Conclusion

Automation is awesome! A few minutes and we are bang up to date!

Cheers

Tim…

Video Conference Equipment Breakdown

Buying equipment can be really confusing because the reviews are very inconsistent, with a mix of 5 star and 1 star ratings. Also a lot depends on your experience level. If you are a beginner, simplicity is probably your number one priority. As you get more experienced, people often want greater levels of control (not me). So I thought I would give out a breakdown of what I use at the moment, just in case it helps anyone who is a bit confused.

I’ve given links to Amazon where possible.

Microphone Stuff

I tried several USB microphones before I got to this setup. I think this was the cheapest I’ve used and it seems to be the most consistent for my voice. I’m sure I could get better quality with an XLR mic and a mixer, but I really don’t need the extra hassle. I just plug this in and start.

I use a wind screen and a pop filter, yet I still get plosive noises all the time. I used to use a separate adjustable pop filter, but I was constantly readjusting it, which drove me mad, so I changed to one attached to the mic.

Backdrop (Green Screen)

Every frame and backdrop I looked at has extremely varied reviews. Most of the frames were described as flimsy in the reviews, so I spent more and got something that was really solid, which is both height adjustable and can adjust from 4 feet (121 cm) to 10 feet (305 cm) in width. The green screen is thick, and is so wide I have it folded double when I’m using the 6 feet width I’m currently using.

  • 3.6Mx2.8M Heavy Duty Backdrop Studio Support System Kit Tripod Adjustable W/Bag : (amazon.co.uk)
  • Neewer 6-Pack Set Heavy Duty Muslin Spring Clamps : (amazon.co.uk)
  • Neewer 9 x 13 feet/2.8 x 4 meters Photography Background Photo Video Studio Fabric Backdrop Background Screen (Green) : (amazon.com) (amazon.co.uk)

It’s early days, but I’m really happy with the result.

I only bought the following brick background because there was a delay with the above green screen, but then the green screen came the next day.

  • Allenjoy White Brick Wall with Gray Wooden Floor Photography Background : (amazon.co.uk)

Lighting

I tried using normal lighting with the green screen and it was OK, but there were green screen artefacts, especially at the creases on the green screen. As a result I decided to get some lights. As soon as these were on and pointing to the green screen, not me, all the artefacts disappeared, even on the heavy creases. These are the lights I got.

WebCam

I checked out the reviews and this webcam seemed to have a good mix of price and features. There are loads to choose from. You could of course use a proper camera if that is your thing, but it’s far too much work for me, so a webcam is fine.

Nothing to complain about here. The quality is fine. It would be even better if I had some reasonable lighting. 🙂

Software

  • Open Broadcaster Software (OBS) Studio : I use this for green screen with my live conference sessions. You can see my basic instructions here. I could use it to put my face into my YouTube videos, but I hate seeing my face in videos.
  • Camtasia : I use this for all my video production for my YouTube channel. I started life on macOS, but later switched to Windows. It works well on both. It is a lot simpler to use than most of the other video editors I tried.

So that’s it. If you’re involved in the video world you will notice it’s all really basic, and most of all really easy to use. Nothing fancy going on here.

Cheers

Tim…

PS. If you only use Zoom or Teams for conferencing, I would suggest using the virtual backgrounds to hide your messy life behind you. You get artefacts on screen, but why would you spend money on all this crap if you can use them for free? 🙂

Open Broadcaster Software (OBS) Studio : First Time Using Green Screen

I’m not sure if you know this, but a lot of people are using video conferencing, and not all video conference tools allow you to use virtual backgrounds. 😱 That’s a bit of a problem if your washing is permanently on display in the background.

I finally took the plunge and ordered a green screen, but how do you go about using it? Fortunately Samuel Nitsche mentioned Open Broadcaster Software (OBS) Studio, so like the obedient sheep that I am, I gave it a go. This post contains some quick notes to get you up and running if you want to try it.

You can download the software from here.

Add Your Camera

  • Open OBS Studio.
  • Click “+” in the “Sources” panel.
  • Pick “Video Capture Device” from the popup menu.
  • Type in the name you want for your device. Using all the powers of my imagination, I decided on “WebCam”.
  • Click the “OK” button.
  • Your face should be on screen now. If you have multiple cameras connected, select your camera in the “Device” dropdown.
  • Click “OK”, and your camera will be in the “Sources” list.

Enable Green Screen (Chroma Key)

  • Right-click on your Source (WebCam) and select the “Filters” option from the popup menu.
  • Click the “+” under the “Effect Filters” panel.
  • Pick the “Chroma Key” option, and on the subsequent dialog click the “OK” button.
  • Select the background colour under the “Key Color Type”. The default is green. It will also allow you to set a specific colour using a colour picker from the background. The default “Green” option worked for me.
  • Adjust the settings until the background is all grey, and you still look clear. The “Similarity” setting seems to make the most difference for me.
  • Once you are happy with the look, click the “Close” button.
  • You should now see yourself on screen with a black background.
  • Position and stretch your image as required. For things like Teams/Zoom meetings, you probably want to make yourself full screen. You can zoom in a little if the edges of your background are showing.

Green Screen Tips:

  • Try to remove big creases from your green screen. Small creases won’t make a big difference.
  • Try to have even lighting on your green screen. Shadows, including any caused by you, will make the green screen less effective. Another tip from Samuel Nitsche.
  • The background images can have a big impact on how good the green screen effect works.
  • Play around until your are happy. It doesn’t have to be perfect!

Add Background Images

  • Click the “+” in the “Sources” panel.
  • Select the “Image” option from the popup menu.
  • Enter a meaningful name for the background image, and click the “OK” button.
  • Click the “Browse” button and pick a background image from your file system.
  • Click the “OK” button.
  • The image will be in the “Sources” list, and it will be higher in the list than your camera.
  • Use the up and down arrows in the source panel to move the image below the camera.
  • You should now be in front of the image of your choice.
  • Add multiple images and use the “eye” icon next to them to switch between them.

Start Using It

  • Click the “Start Virtual Camera” button.
  • In your conference tool (Team, Zoom etc.) select the “OSB Virtual Camera” device as your video input.
  • Everyone will now see your studio quality green screen. 😉

As the title says, this is my first time using this, so my suggestions and advice are probably not worth much. 🙂

Cheers

Tim…

PS. I’ve posted a quick breakdown of the equipment I’m currently using here.