'Most effective' ways might be subjective. I do prefer the Friend Safari because of the guaranteed 31 IVs in at least 2 stats; which can't be easily obatined otherwise unless you search thoroughly.

Usually you can trade; friend, GTS, acquaintance and people sometimes put pokemon with 31 IVs in particular stats in GTS (you can identify them with their description, for example 31 HS usually means 31 IVs in HP and Speed).

You could say that this one's a lot faster, but it really depends on when you check GTS out. For instance, starters would be easily obtained early after the release, and I haven't been there lately but I think that the GTS activity might have died down a bit when compared to before.

For the fossils, again you can use the GTS if you don't have someone willing or able to trade you one. Another option though is to check out the Glittering Cave and Rock Smash boulders again and again (just exit the main cave and come back in to have the boulders appear again) though you might consider this as taking a long time. Took me a few days to be able to get at least one of each fossil (of course I didn't just look for fossils)

possible different ways to get the kanto starters and ways to get fossils in x and y
I'm getting the following error stating this is no field HasOptedOutOfFax for the Contact object, updating a contact using Javascript Remoting, I checked and that appears to be the correct field name:

[Error] Visualforce Remoting Exception: No such column 'HasOptedOutOfFax' on sobject of type Contact Object
    (anonymous function) (cordova, line 5180)
    error (VFRemote.js, line 116)
    (anonymous function) (VFRemote.js, line 132)
    fire (VFRemote.js, line 52)
    fireEvent (VFRemote.js, line 47)
    onProviderData (VFRemote.js, line 86)
    fire (VFRemote.js, line 52)
    fireEvent (VFRemote.js, line 47)
    onData (VFRemote.js, line 94)
    handleResponse (VFRemote.js, line 75)
    a (VFRemote.js, line 39)
    (anonymous function) (VFRemote.js, line 40)


EDIT: got this error again, seems to not be a one time random occurance.Here's the contact being saved from the javascript console:

AccountId: "001i000000Viql2AAB"
Birthdate: "1407456000000"
CreatedById: "005i0000001xZVvAAM"
CreatedDate: 1407334537000
Department: "Dept"
Description: "Some desc"
DoNotCall: true
Email: "aa@aa.com"
FirstName: "test"
HasOptedOutOfEmail: false
HasOptedOutOfFax: false
HomePhone: "4444444444"
Id: "003i000001B0DssAAF"
IsDeleted: false
LastModifiedById: "005i0000001xZVvAAM"
LastModifiedDate: 1407335320000
LastName: "iphone1"
LastReferencedDate: 1407354811000
LastViewedDate: 1407354811000
MailingStreet: "123 my street"
Name: "iphone1"
OwnerId: "005i0000001xZVvAAM"
RecordTypeId: "012i00000019wOfAAI"
SystemModstamp: 1407335320000

