What is the difference between "activate" and "launch"?
From the Commands Reference section of the AppleScript Language Guide:


  activate Brings an application to the front, launching it if
  necessary.
  
  launch Launches an application, if it is not already running, but
  does not send it a run command.
  
  If an application is already running, sending it a launch command has
  no effect. That allows you to open an application without performing
  its usual startup procedures, such as opening a new window or, in the
  case of a script application, running its script. For example, you can
  use the launch command when you don’t want an application to open and
  close visibly. This is less useful in AppleScript 2.0, which launches
  applications as hidden by default (even with the run command).