• 0 Posts
  • 11 Comments
Joined 1 year ago
cake
Cake day: July 3rd, 2023

help-circle

  • Read through the Readme and it’s definitely a good tool to know about. It doesn’t fit the needs of my current problem, but I’m certain I’ll use it in the future for context sensitive searching, since grep/awk/sed/tr have definitely fallen flat for me in the past. I might also be able to study how they utilized tree-sitter CLI when I explore my own implementation.

    For my purposes, I want to take a group of similar-yet-different YAML file sets (though file type should be arbitrary), and feed them through a tool that will spit out a YAML template containing everything that is shared between multiple sets.

    Then, I want it to create a file for each YAML which defines which parts to pull from the template file and a list of variables to be inserted into holes in the templates. Basically creating a madlib that can recreate any file in the original group given the right list of variables to insert.

    For example, if I have a hundred YAML files that are mostly similar but contain different project names, have different server types provisioned, and are pulling different product versions, I would want this script to parse all hundred files and spit out a template that could be used as the basis to build any of the hundred files. The template would be combined with a hundred variable trees that would insert each unique part of each file into the right place.

    In effect, I could have a small variables file that gives only the unique portions of the equivalent YAML - in this case, it would contain only the project name, the server type, the product version. Then, these small files could be combined with the universal template to recreate the original hundred YAML files. But unlike using a simple override mechanism, I would be able to change elements of the template YAML including broad structural changes, and after some processing, the change would affect all one hundred output YAMLs.

    One could track things like environment variables that are specific to a certain project version and require that whenever a project version has a particular value to insert a particular environment variable into the output YAML. Or a centralized file could be made specifying which product versions correspond to which projects, allowing the engineer to change all product versions for a given set of projects in one go. Or one could create a universal template of IaC code that’s applicable to a broad swath of use cases and quickly build out a full set of YAML manifests and Terraform files using a small file that specifies what components will be needed and where to authenticate to the server.

    I’m not aware of any tool that does this, but I think tree-sitter gets me much of the way there. If I can use it to parse any given file into a context aware tree, I would then need to make a script that combines the shared features of many context trees and splits the unique features out into small variable files. Then a script to merge them back together as needed. And something to manage file system structure, such as whether to parse every file individually or to strategically merge some sets so you have one variable file that produces multiple output YAML.

    Sorry I’m brainstorming at you, just trying to figure out if the tool I’m envisioning is even feasible. Seems like it is, but I’ll have to figure out how to use tree-sitter CLI before I begin.


  • This is super cool. Watched the talks from Max Brunsfeld, surprised this has been around since 2018 and I haven’t heard of it.

    I actually tried some complex parsing myself lately. I had a bunch of YAML I needed to maintain for various deployments in a CI/CD system. I really wanted to have one YAML template to generate the files, plus a file for each project with unique elements to be injected into that project’s generated YAML.

    Probably was more of an indication that we needed to clean up the overrides we were putting on top of our Helm charts, but I wanted a way to generate our lengthy override files without having to manually keep track of where the differences were between projects. And maybe even stage changes to deployment files for when new product versions are released.

    This is exciting. I’m going to look into Tree Sitter more and maybe try to contact the dev. It seems like it does everything I’m looking for, just for an entirely different use case.










  • My favorite games on Android:

    1. Shattered Pixel Dungeon
    • [Endlessly replayable roguelike. Clear each floor, identify potions, drink the right one to level up so you can use better weapons and armor, keep your health high and see how deep you can get in the dungeon. Game time only advances when you move.]
    1. Slay the Spire
    • [Deck building game. Use attack, skill, and power cards to beat enemies and earn new cards, use your choice of cards, relics, potions, and card upgrades to create synergies in your deck and make it past all three acts to win the game. Deck resets when you lose (or win).]
    1. Infinitode 2
    • [Tower defense game. Stop enemy shapes from advancing to earn gold, use gold to buy new towers, upgrade your towers, and swap out various types of tower to maximize your efficiency. Keep an eye on how close enemies are getting to your base or it will be overrun before you notice.]
    1. Super Auto Pets
    • [Pocket monster-style battling game. Use a limited amount of resources each turn to buy new bitmoji animals and watch your team face off against a random opponent at the same stage of the game, keep hearts if you win, lose hearts if you lose, get better quality pets each round you progress. See if you can win ten rounds to claim victory.]
    1. Tomb of the Mask
    • [Classic-style 2D arcade game. Use the four directional controls to zip past moving obstacles, collect all the dots on your way to the exit if you can, enjoy the snappy movements and fun retro sound effects. Very reflex-driven.]
    1. Antiyoy
    • [Turn-based hexagon-tiled conquest game. Buy houses to get more income, buy soldiers and towers to protect your land, upgrade soldiers and towers to face off against enemy assets, careful you don’t upgrade them more than your income supports, enjoy the many hundreds of user-submitted maps. Single player by default, or get Antiyoy Online to compete against other players.]
    1. Mindustry
    • [Realtime strategy. Research new technologies, build mining drills, create weapons, face off against enemy forces to control the map. Steep learning curve.]
    1. Dungeon Cards
    • [Tile-based strategy game. Pick a card, help your card survive on a 3x3 grid by using the four directional controls to swap places with any adjacent card, while being careful not to pick fights you can’t win, be strategic about when you pick up weapons and potions. Don’t get caught surrounded by poisons, explosives, or enemies at the wrong moment.]
    1. Atomas
    • [Science-themed matching game. Distribute atoms around a ring, watch atoms merge and transform into larger atoms when they match, set up chain reactions of many atoms each finding their mates at the same time, careful not to fill the ring beyond its capacity. Learn the periodic table in the process.]
    1. I Love Hue
    • [Relaxing color matching game. Get a mess of jumbled tiles on a grid and swap tiles around until they form pleasing gradients along both the y and x axes. Breathe in. Hold… Breathe out.]

    Honorable classic game mentions:

    • Chess [It’s chess.]
    • Rummikub [“Rummy-cube”, compete against other players, using tiles from your hand to form “runs” (red3, red4, red5) and “sets” (red3, blue3, black3) in the playing area until a player wins by using all their tiles. At least 3 tiles per set/run, must play 30 points from your own hand on the same turn before manipulating tiles played by others.]
    • Rommy’s Gauntlet [Level-for-level remake of the Windows 95 “Best of Windows Entertainment Pack” classic, Chip’s Challenge. Tile-based puzzle game.]