Loss of Smell in Coronavirus - The seduction of numbers

Yesterday caught a brief moment of Professor Van-Tam at great pains to explain that loss of smell as a symptom made only a teeny-teeny-teeny-tiny difference to the number of those who could be predicted with #coronavirus.

Now, the thing is, studies have shown this sort of thing:


"For example, a British study released last week collected COVID-19 symptom data from patients through an online app. The data show that almost 60 percent of the 579 users who reported testing positive for the coronavirus said they’d lost their sense of smell and taste. But a significant portion of patients who tested negative for the virus—18 percent of 1,123 people—also reported olfactory and taste troubles."

itchy.png

At first glance this is very confusing - surely if 60% of coronavirus patients report loss of smell, it HAS to be a good predictor even if/especially since that number is much lower (18%) in general (for other conditions & non-conditions)?

Van-Tam seemed to be so adamant about the small predictive qualities of loss of smell, I figured I would think it through carefully and run some numbers.

I decided to imagine that "itchiness" was a new observation and plugged in some numbers to calculate how diagnosis plays out. On the left is a very simple Excel spreadsheet which calculates how many people are in each group based on general percentages. I've used some representative percentages that are in the right ballpark to help make the thing (hopefully) more realistic.

It turns out that even if 60% of covid sufferers report itchiness, it is still a lousy predictor of them having the disease.

So what's going on here?

This is in the same realm as Simpson's paradox, which I discussed the other day:

In this case: A high percentage of small number (itchy with covid) can end up being much more diminutive than a small percentage of a high number (itchy without covid).

When the above observations are taken as individual groups, already KNOWING which group a person belongs to, it's certainly intuitive to draw the conclusion that you have a good predictor in the itchy-with-covid group.

But that's only AFTER the fact.

In reality, to start with, you don't have these groups, you are looking for a predictor in order to actually form them amongst a general population. And that is a different problem.

In total many, many more people who are itchy will actually belong to the itchy-without-covid group, simply because the proportion who do genuinely have covid is a much smaller part of the population. (At least for now).

In my demonstration model, if someone reports being itchy, they are 5.7 times more likely to have something else than #covid19 even though 60% of those who have #covid19 report being itchy!

Notes

It doesn't matter what value to start the population at, it all works out the same. So you can treat "population" as "the number of people who report itchiness that day, or week, or who have done so in the last month" etc.

quote source at: https://www.nationalgeographic.co.uk/science-and-technology/2020/04/lost-your-sense-of-smell-it-may-not-be-coronavirus

also see https://www.the-scientist.com/news-opinion/loss-of-smell-taste-may-be-reliable-predictor-of-covid-19-study-67528

Occupational Risk in Relation to Coronavirus COVID-19

I written a fair bit (and analysed a whole lot more) of the COVID19 situation and data but not published here because, frankly, the minute it’s published it’s out of date. Moreover, even using official data sources such as John Hopkins University, there’s a kind of “data entropy” at work, where data volume increases over time, but quality reduces. I could do a whole post on that topic alone, but that’s for another day.

Meanwhile, the Office for National Statistics (ONS) published an intriguing data set that quantified the nearly 400 occupations in the UK and, amongst other things, classified the type of contact with other people that workers had:

  • proximity (ranging from touching to close distance to no close contact with people at all),

  • and exposure ranging from many times a day to weekly/monthly/yearly to never.

This data can be explored interactively on the ONS website but I’ve also tried to produce some static readouts here, although it’s quite a challenge to compress this amount of data into a one-page visualisation! So, you will see a number of variations.

As the debate intensifies over whether to start schools up or not, it’s interesting to note that teachers and classroom assistants are basically in the next tranche of most-at-risk workers, behind the healthcare, police, cleaning and delivery key-workers that have kept critical services running. Many questions still remain (at the time of writing) as to the level of risk posed by the children they will mix with. Children, although seen to be less susceptible themselves to the disease, are certainly not immune.

HOw does pay compare for those potentially most-exposed. Redder, larger, more-to-right = more at risk. Lower down = lower pay.

Coloured by risk and size by percentile (% figure means x% of workers have this risk or higher)

coloured and ordered by risk, Sized by number of workers in sector.

OccuPations sized, sorted and coloured by risk

Occupations sized and sorted by sector size, coloured by risk

Some cautionary notes come with this data:

  • Risk profiles were actually collated from American workers, so difference in process and work-style could mean UK workers have a different profile.

  • The risk profile was devised prior to COVID19 and doesn’t take account of any potential social distances or other safety approaches (e.g PPE) that may be applied to a given occupation. So, in some sense, the risk score indicates what degree of protection could be needed.

Sending smartphone notifications from Ubiquiti EdgeRouter Lite

Following on from my success of getting my Edge Router Lite to successfully run multiple load-balancing schemes for dual-WAN, and more importantly, assign different devices to different load balancing schemes, the next natural evolution was to send iPhone alerts when any of the links went down.

In principle it is quite easy, because the ERL already makes provision to run an arbitrary script when a link transitions (from active to inactive and vice versa). So, it's really just a question of having the right script. 

If you Google, you'll find examples for sending email, but I wanted something more immediate (and less configuration effort - i.e. to not have to set up sendmail).  Based on another example I considered using the pushover.net service, but wondered if I could use IFTTT to do the same, as I am already a user. (Saves me signing up to something new). 

Turns out you can, by using their "webhooks" service; and turns out it's so simple, it's almost untrue. 

IFTTT Webhooks allows you to generate simple triggers from a single web request

IFTTT Webhooks allows you to generate simple triggers from a single web request

Step 1

First go to your IFTTT account and add the "webhooks" service. This will generate a unique key for you, which you need to make a note of. Annoyingly this is done in a font which does not distinguish between capital I and lowercase l, but you can regenerate the key, or paste into something where you can change the font. 

 

Step 2

Next, log in to your Edge Router and navigate to /config/scripts and create the following script (I called mine failover-notify) :

A script to generate IFTTT phone notifications. Obviously use your own key.

A script to generate IFTTT phone notifications. Obviously use your own key.

Don't forget to make the script executable with the command chmod +x failover-notify

Step 3

Return to IFTTT and create an applet which uses the webhooks service as a trigger and the notifications service as the action:

Note how I have called the event "bb_failover". It is crucial this matches the name in your script (it comes in the URL after /trigger/ ). It is this name that allows you to configure many different triggers on IFTTT to do different things. Obviously you could use a different name, providing it matches in both places. 

Value1 will be populated with the Load-Balance group name; Value2 will be the Port (eth0, eth1 etc.) and Value3 will be the status (either active or inactive). 

Also, you will need the IFTTT app installed on your iPhone, to generate the notifications at the device end. (The app doesn't have to be running though).

Step 4

Return to the edge router for the final bit of configuration.  You might want to test your script at this stage. If you type ./failover-notify A B C the script should run and give a success message, and shortly after you should get a notification on your phone. There's not much point proceeding until you can get this to work.

Once it does work, you can come out of the command line and go to the config tree. Here you choose the load-balance group you want the script to apply to.

Now, if you only have one group configured, you will apply it to that group. If, like me, you have more than one group, you might want to only apply it to one of the group to prevent duplicate alerts. This will depend on what your groups do and what alerts you want to get.  

In my case, for example, both my load-balance group balance across both my only WAN links, so in fact I only need to apply it to one load-balance group, as both WAN links will be covered, and it doesn't matter which group I choose. I wouldn't apply it to both groups, as then I'd get double notifications - i.e. one from each. 

Choose the Config-Tree tab and navigate to the load-balance group you want to monitor

Choose the Config-Tree tab and navigate to the load-balance group you want to monitor

After deciding which group(s) to receive notifications from, navigate to it, and put the full path to the script in the transition-script box, then click preview and save. 

And that's it. Test it by disconnecting one of your WAN links, and see what happens!

Configure Ubiquiti Edge Router Lite with Preferential Load Balancing for different devices via dual link WAN

Snappy title, huh?

Introduction and Purpose

In this article I give the steps to configure an Edge Router Lite so that it can apply different load balancing rules to different devices on your home/local network. There might be a few use cases for this type of configuration, but here's mine:

I live in a rural area with slow ADSL broadband (around 2Mbps) and no imminent prospect of fibre. I am also a home worker, and that speed is practically unworkable. Thankfully in December 2016, Vodafone expanded 4G coverage, such that I can now receive it via an aerial on my house. So, at the time of writing, I have a 50Gb per month data plan on 4G, and can get speeds of around 40Mbps.  I need both links, because not only is their variability in the services, due to things like weather, but 50Gb is simply not enough. So, I need to split my traffic over the networks so that my work activity gets priority on the high speed link, and other stuff (such as music streaming) favour the slower - but uncapped - ADSL link. 

Using the edge router, this configuration does exactly that. The inspiration and configuration schema itself was provided at https://community.ubnt.com/t5/EdgeMAX/Dual-WAN-with-some-hosts-using-only-one-WAN/m-p/703493#M22093 but without instructions. As a novice to networking, my eyes glaze over at all that config and the prospect of recreating it at the command line. So I set out to configure it via the UI (and succeeded). This article shows the steps. 

Objectives

I have several media streaming devices in the house, e.g. SONOS, Amazon Echo Dot. The reality is, for playing music they do not need 4G speeds, and up until now have been unnecessarily consuming 4G data allowance on my existing load balancing set up. That set up is just one load balance group with a 75:25 split ADSL:4G, which in itself is not ideal because it favours the slow link, but is necessary to keep my 4G usage within the necessary limits.  The SONOS in particular is a culprit because it is in my child's room and plays a playlist of about 3 hours' duration each night: it really doesn't need to use 4G at all (except perhaps for fail over) - so the plan is to "pin" that device to the ADSL link.

The same goes for the Amazon Echo Dot in my office, and the Echo Dot in our living area, which is hooked up to a soundbar. 

The plan with the configuration is to have these 3 devices belong to their own load balance group, and balance that group so that it is almost 100% supplied by the ADSL link. In actual fact I am going to start off with 90-something percent, so that when the ADSL link is being heavily used (child watching iplayer for example), there is some availability of additional bandwidth from the 4G side.  Failover will be left in place so that there are no interruptions in the event of ADSL failure (or me tripping over the hub). 

Remaining devices, for now, will all belong to a different load balance group which is more equitable, allowing them a greater share of the 4G. I need to run the system for a while to establish the right level within my data cap, and indeed plan to introduce a further load balance group which tips the balance the other way; thus allowing, for example, my work PC to have a 90:10 balance 4G:ADSL. For the purposes of this article, however, all these remaining devices will stay in the default load balance group, which was created using the Edge Router wizard. 

Part 1 - Static IP's

This whole set up relies on creating a group of devices you can assign to a load balance rule, and applying that rule to the firewall prior to the default rule. In order to create the group of devices, they need to have static IP's rather than the default dynamic. That way they can always be identified.  Knowing that I plan to expand the number of devices that I might do this with, I decided to reserve a larger-than-default range of IP's for this exercise, and future use.

So, i reduced the existing dynamic IP range to stop at 192.168.2.230 on the basis I would reserve 192.168.2.231 - 239 for my "ADSL-pinned" devices. This can be done in the DHCP Server menu.

next step is to create the static mappings for the SONOS and Amazon Echo devices. One way to do this is from the DHCP Server -> Static MAC/IP mapping tab. 

I have set my SONOS to the first address in my "reserved" static range: xxx.231

There's also another (quicker/easier) way to create these mappings: from the Leases screen. Just find your device in the list.

Note that I didn't change the name of anything, just the IP address to something in my static range. Note too, that the existing IP leases hold good even after this change, so the devices do not take on their new IP until you reboot them, which we can do at the end. 

So, I mapped my Office Echo dot to static IP 192.168.2.232 and Kitchen dot to xxx.233

The above steps complete part 1, which accomplishes this configuration step of the original solution:

Part 2 - Firewall Group

Now we need an "Address Group" with those static addresses, as per the original solution:

This can be done from the Firewall/NAT controls - I created a group called A nice

A nice feature is the ability to add a range of IP's, not just individual devices (choose "Actions -> Config"). I chose to add the whole of my 192.168.2.23x range so that any device mapped into that static range in future will automatically adopt the ADSL load-balancing scheme. 

Part 3 - Load Balancing rules

The original solution requires creation of an additional load balance rule:

So, to begin with, I am going to create a load balancing group, using a 90/10 rule, called LB-ASDL-primary. This can be done from the Config Tree pane. (Navigate to the branch shown in the bold breadcrumb trail, and choose ADD)

Since I am running on fairly default configuration, this new group just needs to mimic the existing master group (G), so that means adding the right interfaces (eth0 and eth1 in my case)

Once done, we need to work down the configuration for LB-ADSL-primary, replicating what we see in "G".

Again, if like me you are running on default config, in reality most settings can be left alone, and it's just the weight that needs amending. Once, that's done, click "PREVIEW" - which is essentially a "check and save" function - at the bottom of the screen.

With this configuration, my SONOS/Echo devices are still going to use 10% of the 4G link. It will be trivial at a later date to make it 100% ADSL and 0% 4G, and set the 4G as failover-only, if desired.  That's this step done. 

Part 4 - Amend Firewall "Modify" group

Referring back to the original solution - we need to change the firewall "modify" rule to add a new "modify" rule, which will reference our new load balance group. Thus our new group of devices will get their special load-balance treatment before the remaining devices get the default treatment. 

Note that in the new rule we have to reference our new load balance group and then also the devices (address group) that are the source. As a reminder:

  • Our Firewall/Address group is called ADSL_link_devices
  • Our Load balance rule is called: LB-ADSL-primary

In the config tree (see below), the existing config built by the wizard looks like this, with rule 100 set as the load balancing rule, and the default load balancing group called "G".

We will add a new rule and reference to the group. It will be before rule 100, and use our new load balance group, and assign our new address group (i.e. target devices) to it. 

Add a rule 90, then change the "source" to reference the new address group. 

Now we need to define the actual rule. It's a "modify" rule, so navigate to the modify branch under rule 90, then reference our new load balance group in the lb-group slot. 

And Save ("Preview")

That's this step done.

Finally - Apply to Interface

A firewall rule is nothing unless it is actually applied to an interface, as per the original solution:

As you might have suspected, following this method you don't have to perform this step, because we have modified the existing rules "live" (called "balance" by default) and all our changes are already in place on the interface they originally applied to (eth2 in my case).  (shown below for completeness)

Testing

Before we change anything else or try our devices, check what is currently happening: our new group has no traffic (as we expect)

20 test 1 before.png

Now we play something on the SONOS / Amazon Echo, to see which WAN link the media comes down. Since the IP addresses of the devices have not yet changed, nothing new happens, and (happily for this test) the data comes over the 4G link (eth1): exactly what I am trying to prevent.

And another check from the command line (i did sneakily change the weightings to 91/9 in the meantime, for those with a beady eye). 

Now we reboot the devices so that they acquire their new static IP's. (Seems you can't ask Alexa just to reboot, which is a shame :) ). We can confirm that the devices (e.g. Echo) have picked up their new IP in the .23x range, which they have:

So,let's play some music again and re-examine the interfaces. Look at all that lovely red = eth0 = ADSL...  just what I wanted.

 

And finally, confirm the stats from the command line, we see LB-ADSL-primary load balance group is now pulling data in the right proportions:

Very happy. Case closed!

How to set up iMessage sharing across multiple devices (especially after 2 factor authentication)

I recently set up 2-factor authentication on my apple account to provide stronger protection of my account. 

Around about the same time I noticed that iMessages and calls were not being shared across my multiple apple devices as they had been. I went into settings -> icloud -> <your apple id> -> where there are settings for:

  • contact information
  • password & security
  • devices
  • payment

I made sure that in "devices" all my devices were showing up (they are listed automatically if signed in against your apple id) - which they were

In password and security I made sure that both my mobile phones were "trusted phone numbers"

I figured that should now do the trick.. 

It didn't

After googling a bit, turns out you also have to go into settings -> messages -> Send & Receive and in there make sure that all your devices and email addresses are listed. You can also define which number/email messages appear to come from when you compose them; which means each device can initiate from its own number, or if you like, they can all initiate from the same ID. 
 

After I'd done that it all worked :) 

by the way, you can also go into facetime settings and do the same.. 

A Scientific Study of the distribution of Halloween Monkey Nuts within their shells

Some things are too important not to research. This year I saw numerous pictures in my Facebook feed of Halloween hauls (unanimously sweets) organised by type. That got me thinking, because I'd bought a whole bag of 'monkey nuts' to hand out on Halloween-  that we never used. Seems like they've gone out of fashion since I was a kid. 

I decided to go one better and measure the distribution of nuts within their shells. Typically a shell has one or two nuts, occasionally a prize of even more! The chart shows my results.  

Distribution frequency of monkey nuts within their shells.  

Distribution frequency of monkey nuts within their shells.  

At this time I have no way of knowing if this distribution applies to nuts growing in the wild or whether different supermarkets specify their own particular 'mix' :)  Perhaps that's for next year :) 

Make of it what you will.  

Controlling room temperature with Netatmo "occupancy detection" and IFTTT

Thanks to the addition of Heatmiser range to the online automation service IF (formerly IFTTT - "if this then that") it's now possible to control room temperature using inputs from your other IFTTT-friendly IOT devices. In my case, Netatmo weather station. 

In my house, heating for every room is individually controlled by a Heatmiser Neo thermostat, each running an individualised programme of temperature gradients throughout the day, tailored to each room. During the summer most of these are just on standby, meaning in practice unless the room drops below 12 degrees C, the heating will never come on.  

My child's room is the exception, because we don't want him to ever get too cold, and some days he naps in the afternoon; so his thermostat is always active. So far so good. Except when you open the windows, perhaps for fresh air during the day, and it turns cloudy, the temperature drops and the heating comes on and heats the great outdoors. 

Finally, I have a solution which does not involve adding sensors to the Windows.  

The first step is to use Netatmo indoor station as an occupancy detector. Over the last year I've charted the correlation between occupancy and CO2 levels and in general found that an occupied room tends to read >500ppm CO2 and unoccupied room is below that. Of course if you open the window the CO2 level drops to almost zero very rapidly. So, this basic threshold measure can be used as a simple detection of empty room and/or wIndows open.  

IFTTT recipes to control Heatmiser thermostats based on occupancy (CO2)&nbsp;

IFTTT recipes to control Heatmiser thermostats based on occupancy (CO2) 

 

Of course, you might ask what happens if the windows are open while the room is occupied. Good question - but in our case it never happens; our child is young, so for safety when he is using the room we always have the widows locked shut. 

This simple trigger forms the basis of the input to an IFTTT recipe which controls the Heatmiser thermostat in the same room. If the CO2 levels drop (room empty or Windows open) then the thermostat is set to 'standby' (this stops it following its daily program) and if CO2 rises again ( = occupied) the standby mode is deactivated and the normal program continues to run. 

This way we hope to avoid those costly mistakes where we have opened the windows and forgotten to adjust the thermostat; or unnecessarily heated an unoccupied room.  

For the future we can explore whether outdoor temperature, wind speed and rainfall can be used to optimise performance of the indoor heating.   

More Sugru projects

I use Sugru around the home and car a lot, both indoors and outdoors.  

So here's a few more simple improvements made around the house. 

First up, the classic charging cable strengthening (iPad 2) - no mystery here. 

With a 2 year old about, the iPad cable needs a bit of strengthening  

With a 2 year old about, the iPad cable needs a bit of strengthening  

Next up, finger grips for a small remote control to help stop it sliding out of the hand. 

Sugru finger grips  

Sugru finger grips  

Finally, the ultimate tool you can never find: a pointy sticky sharpish thing to perform resets and extract SIM cards. This wee metal pin came as the on/off control with my solar lights - but a paper clip would do the same job. ​

Device reset tool

Device reset tool

Add a Sugru handle - voila! ​

Not sure I could live without Twitter any more

If I ever needed reminding that the world of social media has introduced so many new opportunities to communicate and collaborate (and I don't need reminding) and make connections that never used to be possible, then monday was it. 

Three things happened. 

First, it was nice to wake up to a nice tweet from Dragonfli, who are the suppliers of our beepol lodge and beepol bumblebee colonies. They were very complimentary of the modifications I'd made to their lodge and tweeted that out to their followers, which has driven some extra visitors to our bumblebee project information - which obviously makes me happy. 

That's an amazing customised Beepol Lodge Nik!! Love the idea of temperature display as well!

Great to get such a ringing endorsement from the manufacturer. You never know, maybe they'll make the temperature display a standard feature? ☺

Next, I was contacted by the Richard at waspinator - this was a result of a couple of tweets in a combined conversation with Martha Kearney (radio 4 presenter) who keeps honey bees. She appeared on Simon Mayo's radio show in an interesting segment on beekeeping, and after when I checked her tweet stream I noticed she'd been in contact with waspinator due to some lack of success with the product at keeping wasps from hives.

I added to this thread, as we too had tried the waspinator but not managed to keep wasps from raiding our bumeblebee nest for precious honey at the end of the season, and Richard got in touch. Following some discussion with him, he gave some advice and offered to send us half-a-dozen waspinators to trial around the garden - to basically create a "ring of defence" around our bumblebee hive.

This is great news, as not only can we hopefully keep the wasps at bay this year, but we can also trial the waspinator in a bumblebee-inhabited environment and provide this data to the company and generally improve the understanding of how to use the product with bumblebee colonies.

Finally, I was honoured to be selected by The Tiffen Company to provide the cover photo for their facebook page. Tiffen is the leading movie and photographic effects accessory company and I use their software extensively as part of my workflow. The desktop software mimics their vast range of photographic filters and accessories and I love being able to take an "analogue" approach in the digital domain. This is the picture they chose:

A big thanks to Tiffen! 

So, all in all, busy day with my new found social media contacts. Not sure I could live without twitter anymore!

I'm in love with Lightroom

Adobe Lightroom. I remember trying it many many years ago in pre-version 1 form. It was disappointing. My overworked PC ground to a halt. I didn't really see the point of it - it seemed liked a bloated photo organiser. 

Half a decade or more on, my photo collection of some 30,000 images was languishing, unloved and closeted on a humming server in the corner of my underworked recording studio. The mere thought of sifting and organising my photo portfolio had become an insurmountable brick wall - too much to handle in one go; too much, even, to divide and conquer by hand. 

So, in summer 2011 invested in Lightroom version 3 - if for no other reason than all my photographer friends and acquaintances use or mention it, or its Mac "equivalent" Aperture. Lightroom has moved on hugely - now a superbly powerful workflow and editing tool, not just a photo organiser. I didn't even realise quite how powerful when I invested in it, but day by day I'm discovering more and getting increasing value and utility from it. Now I'm kicking myself: how did I manage so long without it

In the first instance, the major achievement Lightroom delivered for me was access to my photos again. That sounds like a bizarre thing to say, but the ability to browse, sort, filter, move, organise images with trivial ease and barely a click has made discovering what was in my collection a pretty straightforward task. This had previously become impossible - despite the superior abilities of Windows 7 to search and display files, I could still not easily get the 30,000 ft view, the 10,000ft, 1000ft and move with ease between them. In this respect, Lightroom totally delivers - working my way round 30,000 images is trivial. Identifiying those I like, those I hate and those I will decide on later is simply done. 

One of the other stresses I faced in the pre-LR era was the organisation and naming of my files. Was my folder hierarchy right? Should I have source and production images together? If not, how do I track forwards and backwards between them? How do I keep multiple exposures (e.g. for HDR photography) together? How do I know which are published and which are not? Keep them in a special folder? Move them? Copy them?

So, file organisation, naming and proliferation had become a total headache. That worry has gone now. And I mean totally gone. I let lightroom do pretty much what it wants. I know that I can move files around if I want to organise them physically, but by tagging them appropriately I can collate any group of pictures according to any criteria I want. Collections of images can be pulled together dynamically based on almost any criteria you can imagine. So, forget where they are on disk, they are always just one click away from you in Lightroom anyway.

These two benefits delivered what I wanted, but Lightroom had/has more to give: Publishing

This incredibly powerful feature allows you to set up connections between your photo library and online photo publishing on sites such as facebook, flickr, 500px, zenfolio. The king of this feature is a wonderful gent called Jeffrey Freidl, who has written a large number of plugins that enhance existing and add new functionality for a raft of photo hosting locations; including in some cases the ability to two-way sync between your online pics and your local library. Wow

At first I ignored this feature, thinking I wouldn't use it; that was until I started tagging my photos more effectively. I quickly realised that I could develop a tagging system and a set of smart collections that pull photos together and automatically publish them to multiple sites effortlessly. And keep everything in step. So, you want 5 star rated pictures, that are a final production version, containing buildings, taken at sunset, outdoors, not indoors, and you want them dropped into a collection on facebook? No problem - totally automated with one click in fact. Oh, and you want those same images dropped onto 500px and Flickr too? Yep, that's one click. Oh, and you want those Flickr photos cross posted out to 10 or 50 or 100 buildings and architecture groups? Well, that's no clicks - the plugin will do it all for you.  Of course if you need some resizing, watermarking, renaming and so on while you go about it, that just all happens for you to. 

For me, this has truly become one of the most powerful and time saving aspects of Lightroom. I've encoded my workflow using tags; I've classified my pictures by topic. Lightroom now decides if they should be published and where. I just push the button to say yes, make it happen.  I honestly cannot tell you how something that took hours to do (and thus rarely got done) now takes seconds, and I really mean seconds. It's almost insane. 

I've not even talked about editing lightroom - which is not only powerful, but non-destructive (i.e. applied virtually, totally reversible and modifiable at any time). It took me a while for the penny to drop how powerful this was; perhaps because my first experience of this many years ago was Google Picasa, which is lame in comparison. It was some sort of unhappy hybrid between destructive and non-destructive editing and limited in functionality. In contrast, Lightroom has wonderful and precision editing capability and hooks into external applications. I don't even have photoshop installed. 

There are a couple of features I really love. 1) Stacking - which allows you to virtually group images together like a stack of cards. Perfect if you are an HDR shooter and want to keep your bracketed RAWs together. Or if you want to produce a few versions of an image with different looks. Talking of which, number 2) Virtual Copies - without making a copy on disk, you can simply make a virtual copy of an image, and then edit that, leaving the original untouched. It's a wonderful way to play with and compare mutliple different looks for an image. I love this feature.

Which actually brings me back to the start - I love the whole thing. Lightroom as a tool has totally transformed my workflow, brought life back to a neglected photo collection and provided a platform to take my photography to the next level, without having to worry about underlying administrative issues about file systems and folder hierarchies, about multiple copies for multiple purposes and trying to keep track of every single picture and where it has been used.

This baby is awesome and I know it has even more to give. It's worth every penny and I love it.