- proliferation: tools generator, life calendar (ics ? everydayfocus)

- tubeupdate, redditupdate, playlist update frequency. daily, weekly, monthly, quarterly, yearly

- CLI EDA tool eda.py, sqlite-preview

    /home/xk/d/22_Vector/pleiades_gis_data

- CLI incremental diff (SQLITE, NDJSON, CSV)

    compare 100 rows at a time using primary key

    show the differences between files

- czkawka-dup-compare

- artsearch

https://artsandculture.google.com/search?q=august+macke
https://dezoomify.ophir.dev/#https://artsandculture.google.com/asset/sitting-nude-with-pillow-august-macke/fAE1aabGehCMSw

"August Macke Colourfull shapes 2"
Large size Google similar image search
Wikimedia commons

- automatic photo essay generator

- organize util functions by data type

- globalnamespace py package to scan function names and search in github, print frequency of use in project, world, and namealikes, search function name, diff function body

- scan bpm and key sig

    https://github.com/aubio/aubio
    https://github.com/tyiannak/pyAudioAnalysis

 - cluster images

    https://github.com/rhsimplex/image-match/blob/master/image_match/goldberg.py
    https://github.com/HughKu/Im2txt
    https://github.com/immich-app/immich/tree/main/machine-learning/app

- todo recursive todo management, fortune cookie style

    https://github.com/VladimirMarkelov/ttdl

- CLI recursive financial planner (nano budget)

- CLI incremental book reading

- CLI reverse flight search

- CLI city abacus

- CLI UNLI Neighborhoods
https://indigo.re/feed.xml

- POIs CLI -- save your trip plans and see places to go with automated day trip itineraries, geopandas buffer

places lookup
places plan
places add

# compare speed with sjoin
def intersect_using_spatial_index(source_gdf, intersecting_gdf):
    source_sindex = source_gdf.sindex
    possible_matches_index = []

    for other in intersecting_gdf.itertuples():
        bounds = other.geometry.bounds
        c = list(source_sindex.intersection(bounds))
        possible_matches_index += c

    unique_candidate_matches = list(set(possible_matches_index))
    possible_matches = source_gdf.iloc[unique_candidate_matches]

    result = possible_matches.loc[possible_matches.intersects(intersecting_gdf.unary_union)]
    return result

- upscale command -- download higher quality videos; use webpath, PURL, comment to get URL

- dogsheep RSS feed rssadd rssupdate
