Author: jf

IOS to PC/Steam Deck – Final Fantasy Pixel Remaster Save Game Transfer

The Final Fantasy Pixel Remaster series of games are a paradox. Nearly perfect pixel recreations of the OG games but infuriating control options for mobile phones. From the beginning, they’ve never supported controllers such as Backbone. This will guide you how to migrate your saves from an IOS version of the remasters to PC/Steam Deck.

This is high level, you’ll need to fill in the obvious gaps. There might be other software that can accomplish this, however this guide requires a Mac.

Download and install iMazing – the free trial will allow you to export your data.

Once installed and the phone is connected to iMazing, select “Manage Apps”.

From the list, click on the app you wish to export.

On the bottom right, click on the arrow and select “Back Up App Data”.

Select a folder to save the export to and select “Back Up and Extract App Data” and click “Next”.

Click OK on the next screen. It can take 15-20 minutes for the process to complete.

Open Terminal and move to the directory containing the .imazingapp backup file. Run “unzip” on the file.

unzip FF2.imazingapp

The save files are held within Container/Documents/Save/ from the files that were extracted.

These files can now be copied to either:

  • PC: ~/Documents/My Games/Final Fantasy {num} PR/Steam/{user_id}/
  • Steam Deck: ~/.steam/steam/steamapps/compatdata/{steam game id}/pfx/drive_c/users/steamuser/My Documents/My Games/Final Fantasy {num} PR/Steam/{user_id}/

num will be one of the following {, II, III, IV, V, VI}

user_id will be some kind of integer ID

steam_game_id will be some kind of integer ID that can be found in the URL of the Steam Store page for the game

If you have a Windows machine or Virtual Machine on your Mac, it may just be easier to copy your files to Windows and let the Steam Cloud sync things for you for the Deck.

Endorsing 2020 Candidates for Erlanger City Council – Updated 10/09/2020

Every year, I am stopped by neighbors, friends and strangers asking me who they should vote for in the upcoming election for Erlanger City Council. In years past, I’ve privately shared my choices but I’ll make this available to anyone that’s interested in reading. I strongly recommend that you only vote for the individuals that you have researched or know. You can vote for up to 12 people but that does not mean you must use the remainder of your votes on other candidates.

Tyson Hermes

Tyson dramatically changed the future of Erlanger when he first became Mayor in 2015. His original campaign promise was “Building a Better Tomorrow” and he has lived up to that promise. There have been 6 consecutive property tax decreases, new tax incentives and grants have been created to stimulate new and existing businesses (Edge Incentive, Legacy Incentive, Demo Grant) and a multitude of new businesses have arrived in the city that fuel improved services while still lowering the tax burden on the citizens. I’m excited to see what he will be able to accomplish with another two years on council.

Ryan Elmore

Ryan is the definition of servant leader. She has volunteered with the Boy Scouts for many years and has served as a den leader in Cub Scouts. She took the leadership training program Wood Badge and was inspired by the experience that she served on staff for last year’s session. She currently works as the librarian at Miles Elementary and previously worked as a corrections officer with a background in criminal justice. It’s through these experiences she’s become an ardent supporter of our first responders. She has expressed to me with a vibrant passion her plans to improve parks and infrastructure of the city. I’ve heard many candidates say these words, but she’s been the first that has impressed me by seeing that she has big plans and can articulate how she will affect change. I strongly believe there is a bright future for Ryan in Erlanger.

Gary Meyer

Gary possesses an incredible encyclopedic knowledge of Kentucky State Law as well as a deep understanding of managing and tightening budgets. He has never been afraid to voice his concern about city expenditures and propose ways to reduce these inefficiencies. It’s because of this, he was appointed as Erlanger’s representative to the management board of the Planning and Development Services (PDS) of Kenton County where he serves as Treasurer. Erlanger needs someone like Gary to push for aggressive examination of city and county budgeting.

Diana Niceley

Diana has been a long time Erlanger resident who understands the culture and history of the city. She shows her dedication to the community by serving on the Lloyd High School Alumni Association which raises money for scholarships for graduating Lloyd Seniors. Running for council shows me she has more that she wants to give to her city and I look forward to what she can do.

Stephen Knipper

As a former member of the Erlanger City Council, the Kenton County Board of Adjustments and as the Chief of Staff of the former Lieutenant Governor of the Commonwealth of Kentucky, Stephen brings a wealth of experience in state, county and local government. In 2019, he ran for Kentucky Secretary of State and he focused on modernizing and protecting the voter rolls. He is forwarding thinking and has a talent for analyzing massive amounts of data to solve problems. His skillset and experience would be an asset for Erlanger.

Victoria Kyle

I’ve known Mrs. Kyle for 22 years from when she was my Latin teacher throughout my time at Saint Henry District High School. I fondly remember how she gave her heart to her students and how much pride she had for being on Erlanger’s City Council. She would often share with her students the things she was working on as a council member.

I was extremely impressed by Mrs. Kyle’s answers during NKY1’s Erlanger City Council Forum on Wednesday night. Many tough questions were asked to all candidates and Mrs. Kyle gave strong and very open minded answers to all that were asked to her. During dire times of pension, economic and pandemic crises, our city needs leaders who are open minded to what may seem to be difficult proposals. Mrs. Kyle has seen a number of crises during her time on council and with her experience and open mindedness – I fully endorse her for another term on Erlanger City Council.

Upgrade Untangle – Fixing Broken Auto-Updates

Untangle is a firewall product that I use to manage my network and prevent my kids from accessing certain sites or categories of content. I also use it to shut off internet access to certain devices past certain hours or when I’m given attitude.

Unfortunately, the Home Version of Untangle does not get any support and updates are often promised as “they’ll be pushed out soon.” After rolling with version 12.1 for multiple years, I investigated the upgrade process and have documented the steps I followed to get to the most recent version.

Note: Upgrades MUST be in sequential order. Breaking changes may have been made between versions. Upgrading sequentially will ensure that your current Untangle server and all of its configurations will remain intact. Upgrading out of order may cause you to lose config or worse.

Enable SSH

Please refer to the Untangle Wiki to enable SSH – This is required to edit the apt lists.

Upgrade Path

This is the order in which the Untangle server must be upgraded. Jessie->Jessie and Stretch->Stretch upgrades do not require a restart. The upgrade from Debian Jessie to Debian Stretch will require a reboot.


  • stihl-2
  • beat
  • beat-1
  • jims
  • jims-1
  • 13.2.0
  • 13.2.1


  • 14.0.0
  • 14.0.1
  • 14.1.0
  • 14.1.1
  • 14.1.2
  • 14.2.0
  • 14.2.1
  • 14.2.2
  • 15.0.0


  • 15.1.0
  • 15.1.1
  • 15.1.2
  • 16.0.0
  • 16.0.1
  • 16.1.0
  • 16.1.1
  • 16.2.0
  • 16.2.1
    • See below for issues relating to this version
  • 16.2.2
  • 16.3.0
  • 16.3.1
  • 16.3.2

Edit Apt Sources

Untangle Only Upgrade Steps

  1. sed -i “s/$current_version/$next_version/g” /etc/apt/sources.list.d/untangle.list and bump release code name (or number) to next release
    • IE. stihl-2 would be $current_version and beat would be $next_version.
  2. Log into the Untangle UI.
  3. Select Config -> Upgrade and wait for the system to finish checking upgrades. It should have found a new version and you can click the “Upgrade Now” button.

Distribution Upgrades

Certain upgrade paths require an distro upgrade along with the Untangle upgrade.

  • 13.2.1 to 14.0.0 requires upgrading Debian Jessie to Debian Stretch
  • 15.0.0 to 15.1.0 requires upgrading Debian Stretch to Debian Buster

Please follow these steps for this one time upgrade and return to the steps above for subsequent upgrades until you hit the next distro upgrade requirement.

  1. sed -i “s/$current_version/$next_version/g” /etc/apt/sources.list.d/untangle.list and bump release code name (or number) to next release.
    • IE. 13.2.1 would be $current_version and 14.0.0 would be $next_version.
    • For Jessie to Stretch: sed -i “s/jessie/stretch/g” /etc/apt/sources.list.d/untangle.list
    • For Stretch to Buster: sed -i “s/stretch/buster/g” /etc/apt/sources.list.d/untangle.list
  2. I’m not sure if this is necessary, but I did it anyways and it did not hinder the upgrades.
    • For Jessie to Stretch: sed -i “s/jessie/stretch/g” /etc/apt/preferences.d/00default-debian.pref
    • For Stretch to Buster: sed -i “s/stretch/buster/g” /etc/apt/preferences.d/00default-debian.pref
  3. Return to Untangle Only Upgrade Steps to finish upgrading through the versions


I’ve seen many times during the upgrade process a page that continually refreshes that says “Upgrade in progress…. Do not reboot.” Please verify that the upgrade is complete before attempting the steps below. You can verify the upgrade by via tail -f /var/log/uvm/upgrade.log.

Stop the Splash Screen

/usr/share/untangle/bin/ut-show-upgrade-splash stop

If this does not fix the issue, continue to the next step.

Restart Untangle VM

/etc/init.d/untangle-vm restart

14.2.2 -> 15.0.0 Upgrade – Can’t log into Untangle Admin

This is caused by stale cached JS. Reload the page without the cache.

  • Windows/Linux: Refresh with SHIFT + F5
  • Mac: Refresh with SHIFT + CMD + R

16.2.0 -> 16.2.1 Upgrade – FreeRadius breaks – breaking Untangle

FreeRadius broke for me, default rules are destroyed during this upgrade. I solved this by upgrading to 16.2.2 by updating the untangle repo to that version and running apt-get update ; apt-get upgrade .

This was enough to have untangle start back up outside the “normal” upgrade UI process. It was running as expected and was showing the correct version in the UI.

Suricata Looping

Another issue I saw in 16.3.0 -> 16.3.1 was the following message looping in /var/log/uvm/uvm.log

Jul 1 11:07:16 localhost [ExecManagerImpl] INFO ExecManager.exec(systemctl show suricata) = 0 took 9 ms.
Jul 1 11:07:46 localhost [ExecManagerImpl] INFO ExecManager.exec(systemctl show suricata)
Jul 1 11:07:46 localhost [ExecManagerImpl] INFO ExecManager.exec(systemctl show suricata) = 0 took 9 ms.
Jul 1 11:08:16 localhost [ExecManagerImpl] INFO ExecManager.exec(systemctl show suricata)
Jul 1 11:08:16 localhost [ExecManagerImpl] INFO ExecManager.exec(systemctl show suricata) = 0 took 8 ms.
This went on for much longer than it should. I ran systemctl restart untangle-vm and this got things unwedged and Untangle came back up just fine.

Buster Notes

These are notes – not really instructions. Not liable for terrible things that may happen.

I couldn’t get the uvm to start at all. Found errors in /var/log/uvm/console.log that stated the new uvm was compiled in Java 55 and not Java 52. JDK 11 vs JDK 8.

I ran the following.

apt-get install openjdk-11-jre-headless
update-alternatives --config java

I set the java version to point to the jdk11 that was just installed.

Recovering Splunk Passwords

Splunk’s passwords can be decrypted.

Splunk provides the means to decrypt the passwords.

Splunk Versions 7.2.2+

Use the show-decrypted CLI command to get the password value.

/opt/splunk/bin/splunk show-decrypted --value $hash

You can also use the show-encrypted CLI command to do the reverse if a need arose.

/opt/splunk/bin/splunk show-encrypted --value changeme

Splunk Versions 6.3.0 – 7.2.1

This trick is useful for times where your old admin didn’t share the pass4SymmKey or other “encrypted” fields in the config. This method became possible after 6.3.0 when passwords.conf was introduced.

Splunk Password Basics

Splunk provides a nice write up of how secrets are stored within configuration files on the file system. It’s important to note that when a clear-text password is detected in a “secret” field, the next restart of Splunk will cause this value to become encrypted using the splunk.secret value. This value is generated upon first install and is normally different between Splunk installations, meaning that your encrypted values would be different even if the original clear-text value was identical.


Add a passwords.conf file in your favorite config directory, ie. /opt/splunk/etc/apps/search/local/passwords.conf, with the following contents.


The example from my test instance.

Debug Refresh

Perform a debug refresh to force Splunk to load this new file into active config. Perhaps a restart if you’re getting a Forbidden on this link. (Free users)


Splunk API for Clear Text

Use the Splunk API to view all the passwords (the one you just added) managed by Splunk via passwords.conf.


You’ll find the clear-text in the clear_password field.

Hope this helps with recovering an unknown password.

PrivateBin Instance

When the insurance company asks you to email your policy information and driver’s license information, what do?  I’d recommend not sending it.  I set up this instance of PrivateBin for myself so that when information needs to be securely sent, I now have a method to share those items.

PrivateBin allows the following:

  • Password protection of the content
  • Automatic deletion of the content after a certain time
  • Burn after reading (the content can only be opened once)
  • Encrypted storage (and encryption in transit)
  • Support for plaintext, source code and Markdown
  • Discussion

This instance can be accessed here: