Question: I have started use Parse (which I downloaded using Cocoapods) in a practice iOS application and I having a little bit of trouble understanding certain concepts.

I have written this code so far:

```
- (IBAction)saveUserButtonClicked:(id)sender {
    PFObject *loginCredentials = [PFObject objectWithClassName:@"LoginCredentials"];
    loginCredentials[@"name"] = self.usernameTextField.text;
    loginCredentials[@"password"] = self.passwordTextField.text;

    [loginCredentials saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
        if(error.code == kPFErrorConnectionFailed){
            UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Error" message:@"Please check you connection" delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles: nil];
            [alertView show];
        }else if(succeeded && !error){
            UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Save" message:@"Your object saved" delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles: nil];
            [alertView show];
        }else if(error){
            NSLog(@"%@", error);
        }

    }];
}

```

My main question I have is what is the purpose of using saveInBackGroundWithBlock. Could I do the same logic by doing:

```
[loginCredentials saveInBackground];
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Save" message:@"Your object saved" delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles: nil];
[alertView show];

```

Is the block only helpful if we want to have access to the succeeded and error variables?

Answer: 
I solved this by installing Aptitude, to install build-essential:

```
sudo apt-get install aptitude
sudo aptitude install build-essentials

```

Then installing some "essentials" i found in a blog post:

```
sudo apt-get install -y unzip vim git-core curl wget python-software-properties

```

Then re-installing nginx:

```
sudo add-apt-repository -y ppa:nginx/stable
sudo apt-get update
sudo apt-get install -y nginx

```

Then finally installing HHVM:

```
wget -0 - http://dl.hhvm.com/conf/hhvm.gpg.key | sudo apt-get add -
echo deb http://dl.hhvm.com/ubuntu trusty main | sudo tee /etc/apt/sources.list.d/hhvm.list
sudo apt-get update
sudo apt-get install -y hhvm

```
This sounds very much like the wrong apt repository got added. In particular,

```
Depends: librtmp1 but it is not installable

```

The trusty version of HHVM [depends on `librtmp0`](https://github.com/hhvm/packaging/blob/1699f82635ad66f9f208cafdfa14c10693b356b4/hhvm/deb/trusty/DEBIAN/control) (which does exist for trusty).

Did you actually run the commands as indicated above, including the `$(lsb_release -sc)` call? Did you accidentally inject the one for `vivid` first, and `apt` might still be picking that up?

Can you check your apt configuration, to make sure you have the `deb` line for `trusty` and not `vivid`, and there's only the one `apt` line?