Skip to content

Instantly share code, notes, and snippets.

@Ogaday
Ogaday / deployment_data.py
Last active October 19, 2023 16:51
Get Prefect Deployment Summary
from typing import Optional
import pandas as pd
from prefect.client.orchestration import get_client
from pydantic import BaseModel
columns = {
"flow_name": "Flow",
"deployment_name": "Deployment",
"schedule": "Schedule",
@Ogaday
Ogaday / delete.py
Created October 2, 2023 07:52
Delete flow runs
# In IPython:
from prefect.client.orchestration import get_client
from prefect.server.schemas.filters import FlowRunFilter, FlowRunFilterState, FlowRunFilterStateName, FlowRunFilterStartTime, FlowFilterName, FlowFilter, FlowFilterId
async with get_client() as client:
flow = await client.read_flow_by_name("flow-name")
async with get_client() as client:
flow_runs = await client.read_flow_runs(
@Ogaday
Ogaday / README.md
Last active July 13, 2023 13:24
FizzBuzz implementations

FizzBuzz

The classic programming puzzle, tackled a few different ways.

Test and lint:

pip install -r requirements.txt
black --check .
flake8 *.py
@Ogaday
Ogaday / garminxwahoo.md
Created June 3, 2023 16:57
Pairing Garmin watches with Wahoo headunits
@Ogaday
Ogaday / bump.sh
Created April 6, 2023 13:55
Bump git tag
#!/bin/bash
function log_error() {
msg=$1
echo $msg >&2
}
function bump() {
target_version=$1
@Ogaday
Ogaday / hash_paths.py
Last active August 11, 2023 09:43
Hash paths
#!/usr/bin/env python3
"""Utility to produce the hash of a collection of file and directory paths.
Usage::
./hash_paths.py --help
"""
import argparse
import hashlib
import io
@Ogaday
Ogaday / azure_token.py
Created February 24, 2023 09:40
Azure credential helper
"""
"""
from argparse import ArgumentParser
from artifacts_keyring import CredentialProvider # type: ignore
def get_artifact_token(organization: str, feed: str) -> str:
"""Get credentials for an azure artifacts feed."""
provider = CredentialProvider()
@Ogaday
Ogaday / weighted_mean.py
Created February 10, 2023 17:37
Weighted mean for Pandas dataframes
"""
Utilities for weighted means on DataFrames.
"""
from functools import partial
from typing import Callable
import pandas as pd
def weighted_mean(frame: pd.DataFrame, value_col: str, weight_col: str) -> float:
@Ogaday
Ogaday / reflection.py
Created February 9, 2023 08:52
Example of reflection in SQLAlchemy
"""An example of table reflection with SQLAlchemy.
Test with Python 3.10 & SQLAlchemy 2.0.
See: https://stackoverflow.com/a/75389730/4244912
"""
from sqlalchemy import Table, create_engine, text
from sqlalchemy.orm import DeclarativeBase, Session
# Create a SQLAlchemy engine connected to an in-memory SQLite3 DB:

Upgrading Into the Breach (GOG - for Linux)

I bought Into the Breach on Galaxy of Gaming for linux on release. In July 2022, Subset games released Into the Breach Advanced Edition, [(1)][1] a free expansion of the original. This article details how I upgraded and moved my save game files across to the latest version of the game.

Game save data is stored in files with the names in the foramt: profile_{Name}. [(2)][2]

The first version I installed was GOG v1.0.10 (2-28-2018). This version was run via wine [(3)][3], and installed to ~/.wine/dosdevices/c:/GOG Games/Into the Breach/. The save game files (eg. profile_Alpha) were saved in the top level of this directory.

I installed the latest version of Into the Breach from GOG as of Feb 2023: v. 1.2.86 (10-10-2022). The installer prompted for an install location, with a default of ~/GOG Games/Into the Breach. I chose the default location and let the intaller create a desktop file etc. On install, it was clearly quite different to the old version