- (void)scheduleLife
{
xpc_object_t criteria = xpc_dictionary_create(nil, nil, 0);
xpc_dictionary_set_bool(criteria, XPC_ACTIVITY_REPEATING, true);
xpc_dictionary_set_int64(criteria, XPC_ACTIVITY_DELAY, XPC_ACTIVITY_INTERVAL_1_MIN);
xpc_dictionary_set_int64(criteria, XPC_ACTIVITY_INTERVAL, XPC_ACTIVITY_INTERVAL_1_DAY);
xpc_dictionary_set_string(criteria, XPC_ACTIVITY_PRIORITY, XPC_ACTIVITY_PRIORITY_UTILITY);
xpc_activity_register("checkInWithLife", criteria, ^(xpc_activity_t activity)
{
// Always in an unsafe area when working
if (![self inSafeArea])
{
// It is only a one time use bottle, and you
// haven't really practiced with it before so
// there's a chance of spraying yourself or at
// least getting it in your eyes, not sure if
// you should look away while sticking your
// hand out as far away from you as possible
// –google says don't do that because the
// assailant can knock it out of your hands.
// Still, you're supposed to observe the
// reactions of the assailant in case you need
// another shot. Even though it's a one time
// use bottle. Maybe just run away.
[self feelPocketForPepperSpray];
// This DoorDash thing doesn't seem very
// reliable but what other option is there?
// Just deliver the food. This function does
// not account for the time and effort it
// takes to get out of the car and walk up to
// the porch with a cleanly cut lawn and
// political signs stuck in the earth and a
// tiny US flag waving from the mailbox–and
// oh, you haven't eaten in 48 hours; you're
// a bit light-headed today. This method is
// also prone to crashing.
@try {
[self deliverFood];
} @catch (NSException *exception) {
// Just log. What else can you do?
NSLog(@"Caught exception delivering food, %@", exception);
}
// An unnecessary task, but doesn't hurt to do this.
[self hopeForTip];
// Bail early
return;
}
for (KnownPerson *member in self.familyMembers)
{
if (member.proneToOverreact)
{
if (member.livingDistanceAwayFromMeInMiles.intValue > 1000)
{
// Preferably the image with all the fruit trees
[member sendImageWithFilePath:@"RandomImageOfGardenedBackyard.jpg"];
[member sendTextWithMessage:@"^Just another day"];
}
else
{
// Can also use last last year's dinner, which
// might actually be better since you could
// afford seafood then, and you still had the
// birthday present sous-vide. It didn't sell
// for much. Actually, last last year's dinner
// photo might've been deleted–ran out of
// space, didn't want to pay for cloud
// storage, figured food photography could be
// the first to go. Who needs to be reminded
// of last last year's dinner anyway, of the
// taste of steamed lobsters and buttered
// brussel sprouts. It's all about pinto beans
// and rice these days.
[member sendImageWithFilePath:@"LastYearsDinner.jpg"];
[member sendTextWithMessage:@"^made this for dinner"];
}
}
else
{
// Careful not to sound too enthusiastic. This
// is what happens when you are not a
// critical, irreplaceable asset to the
// company: you end up folding and unfolding a
// futon mattress on the ground of your
// friend's living room every morning careful
// to erase your existence before leaving to
// "work". This is what happens when you fail
// to climb the corporate ladder and instead
// fall on your ankle...make that both ankles
// if possible, but it's simpler now, only a
// few things to think about: shelter, food,
// the annoying wad of gum stuck to the bottom
// of this shoe–so thick you feel the uneven
// surface against your foot with every step.
// Maybe everyone is replaceable.
[member sendTextWithMessage:@"Do you have any friends who know about any job openings?"];
}
}
// TODO: if there's enough time before the next invocation of this xpc activity, try getting back into poetry, don't let all the angst go to waste
});
}