FF7: Getting a Gold Chocobo without racing

There are actually two ways to get a Gold Chocobo without competing in the Chocobo races at the Gold Saucer. One of those involves defeating Ultima WEAPON to make Ruby WEAPON appear, then defeating Ruby to get the Desert Rose, for which the Kalm Traveller will reward you with a Gold Chocobo. However, as defeating Ruby WEAPON pretty much requires you to have Knights of the Round, for which you need a Gold Chocobo, this is pretty much a non-starter.

There is another way, however. To make use of it, you’ll need to be far enough into the game to have access to the Highwind and about 100,000 gil in spare cash. I’ll include an image of the World Map below, the key areas you’ll need to visit are the Icicle Area, the Mideel Area, the Chocobo Farm and Goblin Island.

worldmap
Follow these steps to get yourself your Gold Chocobo:

  1. Head to the Chocobo Farm and rent all six stables (6 x 10,000 gil needed)
  2. Buy 70 Krakka Greens from Choco Billy (or enough to make your total up to 70, if you already have some)
  3. Buy 1 Saraha Nut (skip this if you already have one or more of these)
  4. Fly to the Icicle Inn Area and fight an enemy called Vlakorados. Steal a Carob Nut from this enemy. You may want to run away from this battle once this is done as these creatures have 33,333 HP. You’ll need to do this twice to get two Carob Nuts.steal-a-carob-nut-from-the-vlakorados-be
  5. Fly to Goblin Island and steal a Zeio Nut from the Goblins in the forests on the island.wonderful-chocobos-dwell-alongside-jumpi
  6. Return to the Icicle Area and capture a Wonderful Chocobo. You’ll be able to identify whether the chocobo that has appeared is Wonderful or not by the enemies it appears with. Wonderful Chocobos always appear with one or two Jumpings (they look like rabbits) and nothing else. If your chocobo appears with a wolf or anything else, it’s not Wonderful so let it go and try again.0127-Wonderful-Chocobo-Jumping
  7. Send your Wonderful Chocobo back to the stables.
  8. Head to the Mideel Area to capture a Great Chocobo. You can identify whether the chocobo that appears is Great or not by the enemies it appears with. Great Chocobos always appear with one or two Spiral enemies (they look like armadillos) and nothing else. If your chocobo appears with anything else, its not Great so let it go and try again.0119-Great-Chocobo-Spiral
  9. Send your Great Chocobo back to the stables and head back there yourself.
  10. Save your game right next to the farm and quit / reset. You’ll need to do this a couple of times throughout this process.
  11. Reload your game and run into the stables as fast as possible
  12. Talk to Choco Billy about Moving Chocobos and move the Great Chocobo in first. This should be female, and this rule should be followed throughout the process: ladies first!
  13. Talk to Choco Billy again and move in the Great Chocobo. This one should be male.
  14. Head out to the world map, and save and quit / reset your game again.
  15. Reload your game and run back into the stables as fast as possible and speak to Choco Billy about feeding chocobos.
  16. Feed one Krakka Green to your female Great Chocobo.
  17. Speak to Choco Billy again and mate your two chocobos together with a Carob nut, making sure you choose the female Great Chocobo first: ladies first, remember!
  18. This should give you a female River (blue) Chocobo.blue
  19. Head back to the world map and fight six random encounters.
  20. Save your game next to the ranch and save and quit / reset your game.
  21. Reload and head back into the stables as fast as possible.
  22. Talk to Choco Billy about feeding chocobos and feed 50 Krakka Greens to your female Great Chocobo.
  23. Mate the Great and the Wonderful Chocobos together with a Carob Nut, making sure you choose the lady first.
  24. This should get you a Mountain (green) Chocobo which should be male.green
  25. Head back to the world map and fight eight random encounters.
  26. Repeat the save and quit / reset ritual.
  27. Reload the game and head back in to Choco Billy as fast as possible.
  28. Feed 5 Krakka Greens to your female Great Chocobo.
  29. Mate your River and Mountain Chocobos together using a Saraha Nut, making sure you chose the female (River) Chocobo first.
  30. This should give you a Black Chocobo which should be female.black
  31. Head back to the world map and fight three random encounters.
  32. Save and quit / reset your game.
  33. Reload and head back to Choco Billy as fast as possible.
  34. Feed six Krakka Greens to your female Great Chocobo.
  35. Mate the Black Chocobo with your Wonderful Chocobo and use a Zeio Nut, again making sure you choose the female chocobo first.
  36. This should give you a female Gold Chocobo.gold

After getting your Gold Chocobo you can head out to all the Materia Caves to get the special material, including Knights of the Round from Round Island. This might seem like a complicated process, however it can be completed in about 20 minutes, whereas the racing process can take a lot longer than this to complete. Your Gold Chocobo also won’t suffer any slowdown effects from racing, which means getting to Class S should be much easier this way. Enjoy!

Share and Enjoy:
  • Digg
  • StumbleUpon
  • Technorati
  • del.icio.us
  • Twitter
  • blogmarks
  • HackerNews
  • Tumblr
  • Posterous
  • email

Exchange OU picker

It came to my attention recently that in one of the Exchange 2013 environments I look after, when creating a new object (whether that’s a mailbox, distribution group or anything else) that requires you to choose an Organizational Unit (OU) for the new object to sit in, the following screen was appearing instead of the OU picker:

ou-picker

So there are more results that can be displayed… But also no items in the view.

This is because Exchange, by default, returns the first 500 items it finds that match any given criteria. For mailboxes this just means the first 500 in the organisation, and you can search for more. If you need to populate a tree, like in the example above, all list items have to be returned so that the tree view can be drawn properly. If your Active Directory domain has more than 500 OUs you’re going to run into this problem.

Fortunately the fix is simple: on all your Exchange servers that have the Mailbox role installed open the following file:

C:\Program Files\Microsoft\Exchange Server\V15\ClientAccess\ecp\web.config

And add the following text above the </appsettings> tag:

<add key="GetListDefaultResultSize" value="x" />

Just change x for a number that is slightly higher than the number of OUs you have in your domain, then restart the MSExchangeECPAppPool application pool in IIS.

You can find the number of OUs you have by running one of the following PowerShell statements:

(Get-OrganizationalUnit –ResultSize unlimited).Count

This can be run in the Exchange Management Shell. Or you can run:

(Get-ADOrganizationalUnit -Filter *).Count

In any PowerShell session where you have imported the ActiveDirectory module.

Unfortunately as the file you need to change is a core part of Exchange, each time you install a new CU you’ll have to re-apply this fix.

Share and Enjoy:
  • Digg
  • StumbleUpon
  • Technorati
  • del.icio.us
  • Twitter
  • blogmarks
  • HackerNews
  • Tumblr
  • Posterous
  • email

ADFS: Finding when users were synced

ADFS – Active Directory Federation Services – is a great technology that allows you to synchronise your on-premises Active Directory environment with an Office365 tenancy.

Unfortunately it can sometimes be a little impenetrable in terms of querying when changes to objects are replicated to O365. While you can search for objects using the Metaverse Search tab in the GUI, this may not always give you what you’re looking for. Indeed, searching is hampered by the fact that ADFS references objects based on either their ImmutableID or Cloud DN values. And ImmutableID value might look something like this:

4sEbBR5F7oeFz3R23dtLSe==

While a Cloud DN would look something like this:

CN={635257457869502f4145365a65474e6c4166637377513d3d}

Neither of these things are recorded against any on-premises object, and ADFS PowerShell doesn’t make it easy to to find an object by one value to obtain the other. This can be frustrating when you realise that all entries in the ADSync SQL database are referenced by Cloud DN value, making querying the database tricky. Thankfully the following script (found here, credits to the author) allows you to enter either value and obtain its counterpart:

[CmdletBinding()]
param
(
[Parameter(Mandatory = $true,
HelpMessage="ImmutableID string or Azure CS DN value")]
[string]$Value
)
$done = $NULL
If ($value.EndsWith("=="))
{
$enc = [system.text.encoding]::utf8
$result = $enc.getbytes($Value)
write-host "CN={" -nonewline
$result | foreach {write-host -object ([convert]::tostring($_,16)) -NoNewline};write-host "}"
}
ElseIf ($value.ToLower().StartsWith("cn="))
{
$hexstring = $value.replace("CN={","")
$hexstring = $hexstring.replace("}","")
$array = @{}
$array = $hexstring -split "(..)" | ? {$_}
$array | FOREACH {WRITE-HOST –object ( [CHAR][BYTE]([CONVERT]::toint16($_,16))) –nonewline };write-host
}
Else
{
Write-host -fore red "You provided a value that was neither an ImmutableID (ended with ==) or a DN (started with CN=), please try again."
}

If you were interested in which synchronisation runs a user was updated in, you would find the ImmutableID value by running the following command in ADFS PowerShell after connecting to your tenant:

Get-MsolUser -UserPrincipalName user@domain.com | Select ImmutableID

This can then be passed through a run of the script above to get the Cloud DN value, which can then in turn be entered into the following SQL command which you can run against your ADSync SQL database:

select * from mms_step_object_details so where so.step_history_id in (
       select step_history_id from mms_step_history sh where sh.run_history_id in (
       select run_history_id from mms_run_history where start_date > '2018-01-13 17:00:00' and
       start_date < '2018-01-13 23:59:59')
       and sh.stage_update > 50) and cs_dn = 'CN={635257457869502f4145365a65474e6c4166637377513d3d}'

Naturally you can tailor this to extend the date range you’re searching for; the sh.stage_update criteria can also be removed if you’re interested in every run the user appeared in; running the statement as it is above will only return those batches where the update stage of the run contained more than 50 objects.

I hope this helps if you’re having trouble querying the internals of your ADFS / ADSync databases, but as ever if you have any questions please feel free to let me know and I’ll do my best to try and help.

Share and Enjoy:
  • Digg
  • StumbleUpon
  • Technorati
  • del.icio.us
  • Twitter
  • blogmarks
  • HackerNews
  • Tumblr
  • Posterous
  • email

Microsoft Bob: Really that bad?

Share and Enjoy:
  • Digg
  • StumbleUpon
  • Technorati
  • del.icio.us
  • Twitter
  • blogmarks
  • HackerNews
  • Tumblr
  • Posterous
  • email

How to cheat at Pokemon Go!

One of the things I find myself getting asked reasonably often is whether it’s possible to cheat at Pokemon Go!

The answer is, yes of course it is… It does require installing a hacked version of the app, which (depending on your phone’s operating system) may require installing third-party enterprise certificates and trusting the applications to run. This guide will show screenshots for iOS, however one imagines that Android will work a similar way:

  1. On your phone, using the Safari browser, navigate to http://www.guopan.cn/ and search for Pokemon Go!
    IMG_0573
  2. Tap the green install button and accept the security warnings, allowing the installation of the application and the store certificate
  3. After the application has installed, open Settings and browse to General > Profiles & Device Management
    IMG_0575
  4. Click the installed profile for the store, and click to trust the certificate; the cracked application will not start until this trust is in place
    IMG_0574
  5. After this, you can launch the application (it will install what will appear to be a second copy of Pokemon Go! so ensure you keep them separate so you know which is which)
  6. After launching, enter your birthday and sign in with your normal Pokemon Go! account details and configure your notification and AR settings as normal
  7. While the game is starting, click the rocket icon in the top-left corner to open the location options
    IMG_0577
  8. The first 5 options are various locations in China (I’m afraid I don’t read Chinese, so I don’t know what these are). Option 6 will cause the application to use your current real-world location as provided by your GPS sensors, while the final option will allow you to enter coordinates for any location you like. These can be obtained by dropping a pin on Google Maps and copying the coordinates:
    santa-monica-pier
  9. After choosing your option, tap the blue button to enter the game:
    IMG_0578

You can move your character around using the directional buttons in the top left. Tapping the little man symbol will allow you to change your movement speed:

  1. Man – average walking speed
  2. Bike – average cycling speed
  3. Car – average driving speed
  4. Plane – average aeroplane speed

Be careful about moving too quickly, as travelling too fast will cause the game to not count the distance moved towards your egg hatching and your buddy’s candy. The buttons added by the cracked file can moved by tapping and holding, then dragging. The rest of the game will play exactly the same as the normal game: gyms can be taken or reinforced, Pokestops can be swiped and Pokemon captured and evolved and eggs hatched exactly as normal. The only part of the hack that I haven’t seen working is the in-game store, so you’ll need to use your real version for any in-game purchases.

Again, be careful when you’re using the rocket options: Niantic may not know when you’re using this cracked version of the game, but they will know if you’re moving too quickly. Its not possible to travel from London to Adelaide in 10 minutes, so if you do that in the hacked version, you’re likely to get your account banned. Spoof your location sensibly, people!

Finally, when Niantic release an update to the genuine game, you may find that the cracked version stops working and when launched, prompts for an update. This happens because Niantic will have made running the most current version mandatory. You’ll need to wait until a new cracked version appears on the store, then re-install it. Similarly, you may need to delete and re-install the crack if the store certificate chain changes, as this will invalidate the trust.

Gotta catch em all!

Share and Enjoy:
  • Digg
  • StumbleUpon
  • Technorati
  • del.icio.us
  • Twitter
  • blogmarks
  • HackerNews
  • Tumblr
  • Posterous
  • email

Escape to the Movies: Also Showing

I’m holding off on writing my review of Star Wars: The Last Jedi for the moment. Partially to let everyone see it and avoid giving away any spoilers, but mostly because I’m lazy. Short version, though: its brilliant and you should go see it.

In the meantime, I thought I’d share these trailers for upcoming films that look quite interesting…

First up, Mortal Engines:


London must feed…

Next, The Greatest Showman:


No one ever made a difference by being like everyone else.

For the comic book fans, Black Panther looks pretty epic:

And, of course, you can’t beat some dinosaur goodness. Jurassic World: Fallen Kingdom has that covered:

And finally, if you like your Manga adaptations, Alita: Battle Angel is the one for you:


May you stay in the arms of the angels…

Share and Enjoy:
  • Digg
  • StumbleUpon
  • Technorati
  • del.icio.us
  • Twitter
  • blogmarks
  • HackerNews
  • Tumblr
  • Posterous
  • email

DPM2016 CU4 Fix

I’ve noted in other recent posts on DPM that we have been experiencing issues with the latest release of Data Protection Manager 2016 CU4. The main issue has been that when the overnight maintenance jobs run to remove expired replicas from storage, the job causes a service crash when trying to remove some disk/volume backups. SQL and Exchange data don’t cause this issue. I had raised a prem support call with Microsoft about this, and they have advised that it is a bug in 2016 CU4 which can be worked around by running this script against your DPMDB database on the SQL server. This alters the existing prc_RM_ReplicaDataset_GetValidDatasetCountOnPhysicalReplica stored procedure in the database and replaces it with a new version that accepts IncludeDatasetsWithoutSC with a default value of 1 in addition to the DatasourceId and ReplicaId GUIDs.

I expect that Microsoft will roll this fix up into a hotfix for DPM, and it will certainly be resolved in the next update release for the product. As ever, I wouldn’t recommend running this or otherwise altering the database if you’re not having this specific problem. You will be able to identify if you are as your DPM instance will crash overnight during its tidy-up processes; any manual call to the inbuilt PruneShadowCopiesDPM.ps1 script will also cause a crash when it tries to delete an expired disk/volume backup, your server will retain recovery points beyond their retention period for those data sources that haven’t been successfully pruned, and if a crash occurs, you will see the following in the application log on the DPM server itself:

Procedure or function prc_RM_ReplicaDataset_GetValidDatasetCountOnPhysicalReplica has too many arguments specified.

Hope this helps anyone out there having these problems: as ever, please let me know any thoughts, comments or suggestions.

Share and Enjoy:
  • Digg
  • StumbleUpon
  • Technorati
  • del.icio.us
  • Twitter
  • blogmarks
  • HackerNews
  • Tumblr
  • Posterous
  • email

Pruning DPM Replicas

There are times when, as a DPM administrator, you might want to prune disk-based replicas of data sources, either to save space or because of another reason entirely. As we’re currently experiencing an issue with DPM 2016 CU4 whereby replicas of filesystem data (disks/volumes/directories/shares) aren’t being pruned (the maintenance task calls a SQL procedure with too many arguments when removing these replicas resulting in a crash) I wrote this script to help delete replicas of other types of data that weren’t being cleared up because of these crashes:

Clear-Host
Import-Module DataProtectionManager

$DPMServerName = Read-Host "Enter DPM Server Name"
$Dte = Read-Host "Enter cutoff date (mm/dd/yyyy)"
$pg = Get-ProtectionGroup -DPMServerName $DPMServerName

Write-Host "Available Protection Groups:" -foreground "magenta"
for($i=0; $i-le $pg.length-1; $i++)
{
Write-host "$i - $($pg[$i].FriendlyName)"
}

$ProtectionGroup = Read-Host "Enter the number of the group to process"
$ds = Get-Datasource -ProtectionGroup $pg[$ProtectionGroup]

Clear-Host
Write-Host "Protection Group Data Sources:" -foreground "magenta"

for($i=0; $i-le $ds.length-1; $i++)
{
Write-Host "$i - $($ds[$i].Name) on $($ds[$i].Computer)"
}
Write-Host "A - Process all datasources"

$Datasource = Read-Host "Enter the Datasource ID"
if($Datasource -ne "A")
{
$recoverypoints = Get-RecoveryPoint -Datasource $ds[$Datasource]
}
else
{
$recoverypoints = @()
foreach($source in $ds)
{
$recoverypoints += Get-RecoveryPoint -Datasource $source
}
}

if($Datasource -ne "A")
{
Write-Host "Most recent recovery point: $($recoverypoints[$recoverypoints.count-1].representedpointintime)"
}
clear-host
foreach($rp in $recoverypoints)
{
$rpsize = [math]::truncate($rp.Size / 1GB)
$line = "$($rp.datasource) - $($rp.representedpointintime) ($($rpsize)GB)"
if($rp.representedpointintime -lt $Dte)
{
write-host "Removing $($line)..."
Remove-RecoveryPoint $rp -Confirm:$false -ErrorAction SilentlyContinue
}
else
{
write-host "$($line) later than cutoff, skipping..."
}
}

Simply save it to a .ps1 file on your DPM server and launch it from the DPM Management Shell. When run it will ask for the name of the DPM server to connect to, and a cut-off date. Replicas on storage earlier than the cut-off will be removed. Next the script will show all your protection groups and ask to choose one. After this will show you all the data sources in that protection group, giving you the option of processing just one item, or all items in the group.

Hope this script is helpful. Any comments or suggestions, please feel free to let me know!

Share and Enjoy:
  • Digg
  • StumbleUpon
  • Technorati
  • del.icio.us
  • Twitter
  • blogmarks
  • HackerNews
  • Tumblr
  • Posterous
  • email

Thought for the day

Shamelessly stolen from the Core Rulebook of the Elite: Dangerous RPG:

… when you’re out there in your ships, a canopy of stars above you, and not a living thing for a million miles all around, the light of a purple dwarf star glinting off the hull plates, and an unexplored galaxy stretching out in front of you … then you’ll know what it means to be alive.

Share and Enjoy:
  • Digg
  • StumbleUpon
  • Technorati
  • del.icio.us
  • Twitter
  • blogmarks
  • HackerNews
  • Tumblr
  • Posterous
  • email

Off-boarding Exchange Online users who have never had an on-prem mailbox

Wow. Sorry for the long title on this one folks, but allow me to continue.

As regular readers of my occasional tech-tips posts will know, our organisation exists in a hybrid relationship with Exchange Online. Some users are in the cloud, some are on-premises as we migrate them. Occasionally a user will need to be off-boarded from the cloud back to Exchange on-premises. This is easy enough if the user was migrate from Exchange on-premises in the first place, but what about the scenario where the user’s mailbox was created directly in the cloud? There’s no on-prem mailbox to go back to, so you might think it would be a painstaking process of PST exports, removal of licenses, being mail-enabled on-prem and then PST imports… Well, you can do it that way, or you can try the following:

  1. Log into Exchange Online PowerShell and run the following command to get the mailbox GUID:
    Get-Mailbox user@domain.com | Select ExchangeGuid
  2. Remove all the dashes from the GUID
  3. Generate a new value for the user’s legacyExchangeDN attribute. You can copy the value of an existing on-premises user, just change the CN= value at the end to the user’s sAMAccountName or name value, e.g.:
    /o=First Organization/ou=Exchange Administrative Group (FYDIBOHF23SPDLT)/cn=Recipients/cn=User1

Once you have these values, you can run the following two PowerShell commands after importing the Active Directory module to set the values:

Set-ADUser user1 –Replace @{msExchMailboxGuid=[GUID]'d2cd81e6be4a46b48bc6655cfaad86d9'}

Set-ADUser user1 –Replace @{legacyExchangeDN="/o=First Organization/ou=Exchange Administrative Group (FYDIBOHF23SPDLT)/cn=Recipients/cn=User1"}

Obviously, you’ll need to substitute the values in the examples for msExchMailboxGuid and legacyExchangeDN for the real values you generate for your own users. Once the necessary syncs have taken place and the object is up to date, you will be able to create an off-boarding migration batch to move the cloud mailbox back on-premises.

Share and Enjoy:
  • Digg
  • StumbleUpon
  • Technorati
  • del.icio.us
  • Twitter
  • blogmarks
  • HackerNews
  • Tumblr
  • Posterous
  • email