All posts by Craig Murphy

Cleaning up after the WordPresz 2.6.4 incident

As many of you are probably aware, earlier this week I noticed that my trusty WordPress blog was duping me into downloading and installing an essential security upgrade to version 2.6.4. At the time, I was running version 2.5.1. You’re possibly wondering why I had not already upgraded to an authentic WordPress 2.6.x release…I am after all, supposed to be setting an example. Well, a number of factors delayed the upgrade – most notably lots of travel and a few time-consuming home-life issues meant the upgrade was back-burner-ed. Via The Register, Sophos picked up on hack, classifying it as Troj/WPHack-A. I managed to record a short video of the dashboard hack, notice that I’m at WordPress 2.6.3…

That being said, a small part of me always prefers to wait a while before upgrading, i.e. I don’t like to upgrade immediately. If memory serves me, I recall a WordPress upgrade that caused me a few minor problems because I upgraded the moment it came out – it was soon followed by a further release. Anyway, I’m digressing.

Since Monday, I have upgraded to WordPress 2.6.3, twice. Naturally I used the definitive link for getting my hands on the 2.6.3 zip file. On both occasions the WordPresz 2.6.4 upgrade advice was still appearing in my dashboard. I’ve also been liaising with the good folks over at WordPress and have followed as much of their advice as I can at this stage. Huge thanks to the WordPress chaps for picking up on this issue – whilst it hasn’t affected me, I’m sure some folks have accidentally installed the fake 2.6.4 release.

My second install of 2.6.3 saw me cleaning out the various wp-admin, wp-includes, folders and then FTPing a fresh 2.6.3 set of files. I then started poking around in the WordPress database – table wp_options caught my attention. Themes tend to leave a lot of fingerprints in wp_options, as do a number of plug-ins. I cleaned out around about 40% of the wp_options records that were related to themes I no longer have installed.

After further searching, I found the field dashboard_widget_options:

As you can see, the WordPresz 2.6.4 injection text, or at least part of it, is in there. In order to remove it from my dashboard, I simply removed the entire contents of the dashboard_widget_options field, i.e. its content is empty – I did not delete the entire record. WordPress was kind enough to recreate the contents of this record.

Further poking around in wp_options revealed an RSS record: rss_412e29f6467d015b137ccc293b42bdff. Its contents were familiar:

O:9:”MagpieRSS”:17:{s:6:”parser”;i:0;s:12:”current_item”;a:0:{}s:5:”items”;a:1:{i:0;a:4:{s:5:”title”;s:43:”High risk vulnerability for WordPress users”;s:11:”description”;s:132:”High risk vulnerability for WordPress users, we wanted to get an update out immediately. 2.6.4 is available for download right now.”;s:4:”link”;s:21:””;s:7:”summary”;s:132:”High risk vulnerability for WordPress users, we wanted to get an update out immediately. 2.6.4 is available for download right now.”;}}s:7:”channel”;a:7:{s:5:”title”;s:43:”High risk vulnerability for WordPress users”;s:4:”link”;s:21:””;s:11:”description”;s:29:”Just another WordPress weblog”;s:13:”lastbuilddate”;s:31:”Thu, 30 Oct 2008 02:29:53 +0000″;s:4:”docs”;s:34:”″;s:8:”language”;s:2:”en”;s:7:”tagline”;s:29:”Just another WordPress weblog”;}s:9:”textinput”;a:0:{}s:5:”image”;a:0:{}s:9:”feed_type”;s:3:”RSS”;s:12:”feed_version”;s:4:”0.92″;s:5:”stack”;a:0:{}s:9:”inchannel”;b:0;s:6:”initem”;b:0;s:9:”incontent”;b:0;s:11:”intextinput”;b:0;s:7:”inimage”;b:0;s:13:”current_field”;s:0:””;s:17:”current_namespace”;b:0;s:19:”_CONTENT_CONSTRUCTS”;a:6:{i:0;s:7:”content”;i:1;s:7:”summary”;i:2;s:4:”info”;i:3;s:5:”title”;i:4;s:7:”tagline”;i:5;s:9:”copyright”;}}

I elected to remove (delete) that record (rss_412e29f6467d015b137ccc293b42bdff and rss_412e29f6467d015b137ccc293b42bdff_ts – I would imagine your field names might look a little different to mine).

My WordPress 2.6.3 install is now looking a little healthier. However there are still a number of unanswered questions. How did the 2.6.4 information make its way into the wp_options table? Was it a WordPress or a MySQL exploit or was it something else? Has my MySQL database password been comprised in some way? What about my FTP password? Was a malicious theme responsible for this compromise? I am very close to developing a theme myself, hopefully that learning curve will help me find answers to some of these questions. Who knows the answers to these questions? Hopefully over time the truth will out, I would certainly like to know.

Whatever the case, my blog hasn’t been visibly owned as yet…I suppose time will tell. In the meantime, password changes are aplenty!

Vista, ReadyBoost – compability chart

ReadyBoost, one of Vista’s performance enhancing features, allows us to plug in flash memory (USB drives, SD cards, etc.)

The Lexar 512MB 40x Compact Flash card that I purchased for another purpose wasn’t fast enough, even when connected to my internal card reader (which may also be slowing things down a tad). So that led me to wonder just what is “fast enough” for ReadyBoost…and then I discovered that Grant Gibson has a great post covering ReadyBoost compatible devices.

More information can be found here.

Technorati Tags: , ,

Windows Vista – first impressions…

So that’s Windows Vista Ultimate installed, I’m dual-booting alongside my existing Windows XP SP2 installation. This install started at 2225 and ran on until 2248 when the second re-boot had taken place. A little bit of configuration and some automatic updates, and at 2255 I was ready to go – an end-to-end installation time of 30 minutes.

It seems that my 2.8GHz Dual Core Pentium with 2GB of RAM is enjoying a Windows Experience Index of 3.6. I reckon that a decent graphics card should improve that score – something for 2007 I think.


The first thing I needed to sort out was the boot order. Prior to this Vista install, I had Windows XP SP2 installed. Also prior to this install, I had stuck a 250GB IDE drive in the machine and installed Vista there – hence I already had the Windows Vista “new” boot manager interface already installed (on the same drive as Windows XP). So I found myself reading the BCDEdit FAQ. Incidentally, I’ve since removed the IDE drive in favour of a 250GB Western Digital SATA-2 drive.

BCDEdit is a command-line tool, so you’ll need to be a little more careful with it that you would with a Windows application. You’ll also need to run BCDEdit using the Command Prompt and you’ll need to do this whilst running as an Administrator. To do this, just right-click on the Command Prompt icon and choose Run as administrator as shown below.


Simply running BCDEdit from the Command Prompt window reveals the three operating systems in the boot order:


Windows Boot Manager
identifier {bootmgr}
device partition=D:
description Windows Boot Manager
locale en-US
inherit {globalsettings}
default {current}
displayorder {ntldr}
toolsdisplayorder {memdiag}
timeout 30

Windows Legacy OS Loader
identifier {ntldr}
device partition=D:
path \ntldr
description Earlier Version of Windows

Windows Boot Loader
identifier {current}
device partition=C:
path \Windows\system32\winload.exe
description Microsoft Windows Vista
locale en-US
inherit {bootloadersettings}
osdevice partition=C:
systemroot \Windows
resumeobject {de2efb5f-97d0-11db-bdf0-b386e7cc6f53}
nx OptIn

Windows Boot Loader
identifier {6c55cb61-8829-11db-bcb7-82d3be135651}
device unknown
path \Windows\system32\winload.exe
description Microsoft Windows Vista
locale en-US
inherit {bootloadersettings}
osdevice unknown
systemroot \Windows
resumeobject {6c55cb62-8829-11db-bcb7-82d3be135651}
nx OptIn

The entry for Windows Legacy OS Loader is for the existing Windows XP SP2 install, I need to keep that. The entry for Windows Boot Loader with the {current} identifier is the, perhaps obviously, the current Windows Vista install, i.e. the one I’m using – again, I need to keep that! I happen to know that the offending Windows Vista installation is the last one, so we’ll ask BCDEdit to remove it for us. Be sure to remember to include the trailing /f to force the deletion of the entry, as shown below:

C:\Windows\system32>BCDEDIT /delete {6c55cb62-8829-11db-bcb7-82d3be135651} /f
The operation completed successfully.

The next thing I sorted out was the SoundBlaster Live 24 driver. As luck would have it, Creative released new Vista drivers today of all days! So I downloaded those and all was well.

However, I was a little surprised to see this:


I been using a Microsoft Fingerprint Keyboard for the last 12 months, it’s great; it has a very fluid feel about it. It has been on the market for at least a year, I would have thought that Vista drivers would have been part of the install or automatic update that takes place after the installation. Anyway, a little bit of hunting around the said drivers were found here.

That’s all for this post, I’ll write more as I move my line of business applications over to Windows Vista and to Microsoft Office 2007. Fortunately, all my data lives on another SATA drive, so there’s nothing to move there.

I’m just about to publish this post and I notice that a certain [non-Microsoft] vendor’s toolbar isn’t present, so I can’t spell-check this post without a little bit of cut’n’paste. Now, wouldn’t it be nice if I could just right-click the mouse on this Internet Explorer text box and have the recently installed Microsoft Word 2007 spell-check kick in for this blog post? Time for some more updates!

Technorati Tags: , , , , , , , ,

DeveloperDeveloperDeveloper – the return

Saturday 22nd October 2005 – Save the date!

The second DeveloperDeveloperDeveloper day is coming!

Like the first event, it will be held at Thames Valley Park (TVP), Reading, UK.

Call for speakers: If you are interested in delivering a 60-75 minute session or even a 30 minute session, please let me know:

We’re open to your choice of topics, but given the close proximity to the Visual Studio 2005, SQL Server 2005 and Biztalk Server 2006 launch on the 7th of November, we’re happy to take topics for those products too. This is a Community Community Community event, so product plugs/marketing sessions might not go down too well.

We going to cater for all levels: if you are a “wanna-be” speaker, this is your chance to shine, we can guarantee an informal, relaxed environment, and will give you all the support you need to promote yourself to the next level. If you’ve never spoken at a developer event in the past, this is your chance! 30 minutes is very easy to fill! We’d love to hear from you!

There is a good chance that the sessions will be put to the community for selection/voting, i.e. the sessions will be Chosen By Developers, chosen by you.

Watch this blog, amongst others, for further announcements!

Can’t wait!

TechEd 2005 – Being more productive in .NET

Juval Lowy – some session!

We kicked off with a look at the under-used WinCV.exe class viewer (something that Delphi has enjoyed for some time now…). Juval compared a search for ‘object’ using the WinCV class viewer and a search on the MSDN. He referred to the class viewer as “intellisense on steroids”.

WinCV at work – it has incremental search too

WinCV is available today, you can find it here:
C:\Program Files\Microsoft Visual Studio .NET 2003\SDK\v1.1\Bin

However, if you are looking at Visual Studio 2005 betas, you’ll find it’s built in to the product. Take a look at the View –> Code Definition Window menu option:

Code Definition Window

Tied in with this, Visual Studio 2005 has a right-click menu option “Go To Definition”. This works very much like Delphi’s ability to turn methods and properties into URLs when the control key is pressed…in which case it has been a Delphi feature for a long time now!

Conditionals via the System.Diagnostics namespace

// I must change my WordPress theme such that it respects code a little better :-(
#define MySpecialCondition //usually DEBUG

public class MyClass
public MyClass()
public void MyMethod()

//Client side code
MyClass obj = new MyClass();

//This line is conditional

Link File
Interestingly, and this is something that I’ve preached about during my TDD presentations, Juval went on to remind us about the little drop-down menu that is attached to the Open menu:

unlucky for some
Open –> Link File is useful

If you’re anything like me, you’ll hate having to copy classes/files between projects. Indeed if you download any of the TDD examples, you’ll see I make copious use of the Link File option to share a class between more than one project. In Juval’s words: [Link File] “References the file for compilation purpose, but does not copy it”.

Starting more than one project
One thing that did catch my eye was Juval demonstrating “multiple start up projects”. It’s tiresome when building client/server applications that we find ourselves starting the server, then running the client. The screenshot below can be reached via right-clicking on the Solution item inside the Solution Explorer, then choose Properties (Visual Studio 2003/2005):

multiple startup projects
Multiple startup projects…very handy

Beware of the false Finds!
Personally, I love Visual Studio’s folding editor: the ability to mark sections or regions of code and hide them away is long overdue! However, when a piece of code is folded away, pressing Control-F to perform a Find operation can lead to surprising results. Code that is folded can be included or excluded from the Find dialog’s operation, i.e. Find operations that you expect to be successful, aren’t. By default in Visual Studio 2003, the Find dialog ‘Search hidden text’ check box is unchecked…therefore you may not find what you are looking for, even though you know it’s there! In Visual Studio 2005, the checkbox is checked.

Name those threads!
Presented as being useful during debugging, naming threads is remarkably simple (apologies for the VB code):

Imports System.Threading

Dim currentThread As Thread = Thread.CurrentThread

Dim threadName As String = "Main UI Thread"
currentThread.Name = threadName

Peculiar Selections
Oh, and rectangular text/code selections? You need to hold the ALT key down whilst dragging (works in both Visual Studio 2003 and 2005). This is a feature you either love or hate, but as Juval says: “Very useful in removing namespaces and repeated definitions “.

This and That
Visual Basic has been blessed with the My class that provides access to a multitude of things, such as Audio, Keyboard, Mouse, Network, etc. Perhaps because C# developers are deemed smarter than Visual Basic programmers (I’m already ducking!), C# doesn’t have the My class. Until now at least. Juval has spent some time working on an implementation and he was keen to demonstrate it to us. So, given that Visual Basic has “Me” and “My”, C# now has “This and That“, I jest you not:

This and That

Download this and that.

And finally…
This was a really good session that presented a lot of the differences between Visual Studio 2003 and 2005 and did so by means of lots of demonstrations. Juval was a little quick at flicking between the PowerPoint slides and the Visual Studio IDEs for my liking, something I found he did in another session too – don’t let that put you off, he’s a good speaker and won’t let you down technically. You’ll find Juval blogging about Lornhorn.

Juval left us with a pointer to his coding standard, available via

He also mentioned that his book is undergoing a revision and should be with us this month, Programming .NET components, 2nd Edition, Juval Lowy, O’Reilly 2005:

TechEd 2005 – IT Blogging

Microsoft’s Betsy Aoki and Eileen Brown gave an excellent Chalk’n’Talk session that was well attended and enjoyed a moderate amount of interaction. This session was preceeded by Betsy’s session about MS IT Microsoft’s Blogging Engine – Construction and Delivery, blogged about here.

Being a Chalk’n’Talk, slide content was limited and was required merely to spark discussion.

Here are some of the things we discussed, with my notes underneath:

What’s a Blog/Why Blog?

Inside/Outside Reach

Customers talk back
Blogs are a great way for your customer to talk to you – but make sure that you don’t become their personal support specialist!

Remember no “Flogs”
This made me chuckle: the guys over at use flogs instead of blogs!

Present yourself as resource and aggregator

How do blogs differ from forums/newsgroups/chats?
I’m not sure if we discussed this to completion, I’ll need to check the audio. However, for me, I blog because:

  1. RSS/Atom feed creation is free.
  2. RSS/Atom provides an easy subscription mechanism for my readers
  3. I can access my blog from anywhere, as TechEd’s wireless connectivity demonstrated
  4. no FTP is required, which means I could blog from behind a firewall
  5. it [the blog] pushes content out
  6. content keywords add Google fodder that promotes ranking and facilitates easier searching
  7. content can be short and focussed
  8. there’s much less noise than nntp

Does blog platform matter: yes and no

Consider small audiences and Steve Ballmer: who do YOU want to reach?
“Leverage the power of the small audience”, Betsy Aoki – good quote: you may only have 20 folks reading your blog, but if they are your 20 best customers…

What to Post

Consider “ego searches,” post longevity

X-casting and alternative delivery mechanisms

Link generosity and becoming a human Aggregator

Corporate credibility
This topic reminded me of this and this.

Fighting comment spam

Gaining readers: promotion/tagging/search discoverability
Eileen noted that a simple spelling mistake in one of her posts resulted in a huge number of hits.

Spiders and Bugs

An audio recording of this session can be found here: .

Further information:
IT learns to tune out blogging’s white noise
Blogcasts: Coming soon to a computer near you
Microsoft uses blogs to reach out to IT community

How To Blog And Not Lose Your Job

TechEd 2005 – MS IT Microsoft s Blogging Engine – Construction and Delivery

Microsoft’s Betsy Aoki gave us a great session explaining all about “blogging at Microsoft”. Initially, during 2003/4 there were only 5 bloggers using BlogX, after PDC a further 200 signed up and within a year there were over 1000…mainly using .Text. Currently, Betsy manages of 1600 Microsoft bloggers split between and (and a handful of other employee-specific sites).

Those of you who are avid bloggers and follow Microsoft blogging closely, will know that Microsoft have gone through a few blogging engines in their time so far. Initially, some Microsoft bloggers used BlogX. This was followed by .Text and now by Community Server 1.0 (written by Scott Watermasysk and Telligent Systems who are lucky enough to be able to say: “Writing blogging software is our day job now!” I’m only jealous!)

Betsy played a pivitol role in the migration to .Text and the subsequent migration to Community Server 1.0. When migrating from one engine to another, it’s worth considering how refferals might work: consider setting up 304 redirects for the RSS feeds. Raymond Chen‘s blog took over 30 minutes to port from .Text to Community Server…mainly due to the vast number of referrers!

Betsy noted some of the problems peculiar to a blog site. Particularly:

  1. Skins are absurdly important. You would think content was the important thing, no, it’s the look’n’feel. How long did you spend looking out the theme/skin for your blog?
  2. Microsoft employees want to blog: Wherever, whenever. Initially, Microsoft bloggers were a little reluctant to blog, stating “you want me to blog and do my day job”. Now, and this was evident in this session and Betsy and Eileen’s session (more later), Microsoft bloggers can’t get enough of it. Folks are on the ‘phone complaining when they can’t get to their blog…it’s an addiction (a soft one luckily!)

I was interested to learn that Microsoft don’t have an official blogging policy, but they do offer advice on “how to blog” and particularly, “how to blog smart”. Robert Scoble is noted as “setting the scene” and “driving it forward”. Betsy explained that Microsoft don’t have a blogging policy because they don’t want their employees to feel constrained, nor do they want blog readers to believe that employees are being told what to write…i.e. blog posts become a marketing device. So it seems that good stuff doesn’t always need policy.

I enjoyed this session, it was delivered well and gave me an insight into something most of us take for granted…I mean, just appeared…did it not?

There is a recording of the session here:
and a related news item at the portal can be found here:

TechEd 2005 – Viruses, Rootkits, Spyware and Malware

Mark is one of the guys behind SysInternals.

His session was littered with demo’s of spyware and malware at work – all running inside a virtual machine, so no harm done. Mark also demo’d rootkits and explained how they work – the concept isn’t new, but it’s only now we’re starting to see these things surface (and since rootkits are meant not to be seen, no pun intended, this might not be a surprise!)

The key takeaway was: “use more than one anti-spyware product”.

And if you’re using Windows XP SP2, always enable DEP (Data Execution Prevention). Here’s how.

I picked up some excellent tips and “fodder” for my soon to be completed and inaccurately named “The Seven Habits of Securing and Protecting Your PC” article…

TechEd 2005 – What’s new in .NET 2.0

David Platt is some guy. Even after a lengthy session on the beers last night (it was hard not to, TechEd UK folks were here for a huge social gathering!), this session kept my attention right to the end…in fact, there could have been more of it and we’d all have been happy!

David talked about the BCL, performance, security, the garbage collector, generics, “out of band” (I forget what this was about, when I remember I’ll update this post), debugging, clickonce. He made a good job of this, the demo’s were short and sweet.

Given the title of this session and this blog post, you’d think I’d write more about what’s new in .NET 2.0…however some of David’s surrounding comments are worthy of being written about!

Cool quotes
David made reference to Moore’s Law:

Moore’s law is the empirical observation that at our rate of technological development, the complexity of an integrated circuit, with respect to minimum component cost will double in about 24 months.

He then went on to tell us about Platt’s Law:

It doesn’t matter how fast the hardware gets, the software guys will piss it away

David’s a great believer in “lowering the friction of the process, take software to the next level, write better code…make it easier to do it right and harder to do it wrong”, .NET 2.0 helps us realise this quote. “Laziness trumphs everything” – make it easy to do the good/required stuff, like security, and folks will do it. “The bar needs to be raised” All good stuff.

I found this next quote rather appealing:

Crap is conserved

Consider two piles of crap (think of crap code if that helps). Even if you reduce the amount of crap in one pile, it has to go somewhere, thus you simply move it to the other pile (or a new pile). The total amount of crap remains the same. Less crap “here”, means more crap somewhere else.

In a quick poll of the audience, “what language are you folks using?”, 85% percent replied with C#, the remainder using Visual or another language. That’s a lot of C# developers…

TechEd 2005 – SQL Server 2005 end-to-end development

Euan Garden and Brian Randall formed a double-act to make this an interactive session with some comedy to help things along.

Stealing from the session’s summary slide, this is what we got to see:

Less code
Client – Async Execution -great for creating more responsive user interfaces. This was demo’d using two grids with delays introduced using T-SQL’s WAITFOR – 5 seconds and 7 seconds respectively. Brian coded the example almost from scratch, demonstrating that without async queries the grids took 12 seconds to populate completely. With async queries, the grids were populated with a wait time equal to the longest query, i.e. 7 seconds. The demo’s were shown in a WinForms application and a WebForm application.

Client – UDTs
Server – Paging – SQL Server 2005 introduces row_number() which allows us to write queries that return specific ranges, e.g. 30 thru 40: a great boon for paging those large result sets.

Server – Recursive Query

More Productive
Server – Error Handling– SQL Server 2005 offers structured exception handling.

New Capabilities
Server – DML with OUTPUT
This was really cool. SQL Server 2005 lets us write something like: delete top(1) from table_foo output deleted.* – the result set containing the one record that was deleted. And it works with inserted.* and updated.* too. Neat.

Server – XML Schema File Loading

TechEd 2005 – Keynote (Tuesday)

Opening with a huge puff of smoke, the sounds of a fire extinguisher operated by a stressed out IT Pro, this keynote took a new approach and an approach that we all could relate to. Hot on the heels of the IT Pro, well, not hot on the heels per say, the Developer was woken from his slumber grumbling about not having slept for days because he’s too busy developing applications. Naturally an argument between the IT Pro and the Developer raged…the IT Pro moaning that the Developer didn’t test enough and didn’t write enough documentation…the Developer arguing that he doesn’t have time for all of that: “the code compiles, what more do you want?”

Enter the Information Worker. This outspoken young lady complained about them both, citing the fact that she has to visit six applications in order to learn about her customer’s recent order…contact system, stock control, despatch system, invoice system, credit control system, etc. “Oh, IT Pro, I need you to fix my problem now, it’ll take you a minute”, she suddenly interjected.

These actors were the personification of many typical problems – the keynote was aimed at how SQL Server 2005 and Visual Studio 2005 can get the IT Pro, the Developer and the Information Worker talking to each other and how it can make them more productive.

SQL Server 2005 performance
The keynote had to be viewed by some 6500 attendees so naturally it was broadcast via video. Three screens (in the main keynote area) – the middle, we saw the presenter, the left screen and right screen were setup to view two different but identical machines: one that was running SQL Server 2000, the other running SQL Server 2005. Both we running 64-bit Windows. A really cool graphical view of PerfMon presented the CPU usage, disk usage, query throughput, etc. – it was awesome. The demonstration was clear, cranking up SQL Server 2000 by a factor of 2, then 4 caused it to bottom out very quickly. The same example over on SQL Server 2005 was night’n’day.

The speaker then went on to highlight the monetary differences between ownership of SQL Server 2005, Oracle 10 and IBM DB2. I suspect that there may well have been some jiggery-pokery with the numbers, but basically the TCO of SQL Server is cheaper than Oracle and IBM…a fellow attendee caught whilst I was manning the Ask The Experts (ATE) stand, he was from Oracle and felt a little hard done to. OK, I can sympathise, but hey, this is a Microsoft conference, if they want to bash Oracle (who won’t entertain mention of SQL Server at their conferences!) then so be it! So what if Microsoft used seven slides to perform the Oracle bashing?!

I was surprised to see a mallet being used to destroy a network device. This was, however, a rather excellent way of demonstrating SQL Server 2005’s mirroring capabilities. Going back to the “two screen” view mentioned earlier, now both screens were displaying two identical computers running SQL Server 2005…one of them has *2 the load the other *4. However, after the mallet incident, the machine on the left took over from the machine on the right…thus doing it’s own work and that of the other machine. The fancy performance monitor flinched only ever so slightly and then levelled out – it was still “just ticking over”!

So, the result of the keynote: SQL Server 2005 and Visual Studio 2005 are going to improve not just physical performance, but employee performance…I had to leave the keynote sharp, but I’m guessing that our three actors made up and are now the best of friends!