• Activity
  • Votes
  • Comments
  • New
  • All activity
  • Showing only topics with the tag "user created". Back to normal view
    1. I made a little CLI app for backing up my Tildes comments

      I made a little CLI app for backing up my tildes comments / topics. $ pip install xklb $ library tildes -h usage: library tildes DATABASE USER Backup tildes.net user comments and topics library...

      I made a little CLI app for backing up my tildes comments / topics.

      $ pip install xklb
      $ library tildes -h
      usage: library tildes DATABASE USER
      
          Backup tildes.net user comments and topics
      
              library tildes tildes.net.db xk3
      
          Without cookies you are limited to the first page. You can use cookies like this:
              https://github.com/rotemdan/ExportCookies
              library tildes tildes.net.db xk3 --cookies ~/Downloads/cookies-tildes-net.txt
      

      It creates a SQLITE file with HTML text in one of the columns. Nothing super fancy. Let me know what you think?

      9 votes
    2. Tilweaks: A user style I made to "clean up" Tildes' interface

      This was originally made just for personal use, but I decided to clean it up and share it. Should support all built-in themes (Themes other than Dracula were afterthoughts and might not be as...

      This was originally made just for personal use, but I decided to clean it up and share it.

      • Should support all built-in themes (Themes other than Dracula were afterthoughts and might not be as polished. Especially light themes)
      • All changes are toggle-able

      Changes

      • Configurable font size
      • Remove sidebar background
        • Make the sidebar primary button clear (border only)
      • Add a border to the "main" element
      • Add extra spacing to various elements
        • Remove the alternating background from thread colors
      • Remove comment borders
        • Add depth indicators (dotted left border for children only)
        • Add comment backgrounds (to separate comments without borders)
      • Hide votes (disabled by default)

      Installation

      Configuration under Stylus

      1. Open the extension popup in when in tildes.net
      2. Click the cog next to Tilweaks
      3. Edit to your liking
      20 votes
    3. Introducing Backtick API: An open-source, unofficial Tildes API

      Hi everyone! Today I am releasing Backtick API, an unofficial Tildes API. I originally wrote it to power Backtick but quickly realized that it could be useful for other clients and projects that...

      Hi everyone! Today I am releasing Backtick API, an unofficial Tildes API. I originally wrote it to power Backtick but quickly realized that it could be useful for other clients and projects that require Tildes data. The project is open-sourced, both because I would love community contributions and because I want to make the project as transparent as possible.

      Q: Does it require or store any user credentials?

      No. All the endpoints that are implemented scrape publicly available data that do not require any user credentials.

      Q: Will this overload Tildes?

      To prevent Backtick API from being a nuisance to Tildes, the code caches calls to Tildes for a short period of time. Depending on usage, it should reduce the number of calls to Tildes (vs a client querying Tildes directly).

      Q: How can I use it?

      A hosted version of the code is available through RapidAPI here: https://rapidapi.com/asnewman/api/backtick-api

      Q: Are there any limitations?

      To prevent the project from being abused and becoming a financial burden on myself, I'm using RapidAPI to manage usage. There is a generous free tier and a reasonably priced paid tier which will be used to cover server costs. In addition, I will be donating a portion of the paid plan revenue (my goal is 50% but will depend on load and subscription count) directly to Tildes via Github Sponsors. It's really important to me to keep this project and Tildes as sustainable as possible. I really would love to provide everything for free, but unfortunately, there are countless examples where that doesn't work out down the road.

      Of course, if you do not want to use the hosted version, you are welcome to deploy the code yourself!

      Q: Isn't scraping prone to breaking?

      Yes! Users beware! Obviously, I will try my best to fix things if the Tildes code changes in a way that breaks Backtick API, but it's definitely a possibility.

      Q: Why not just work on and contribute to creating an official Tildes API?

      An official Tildes API will always be better than something like this and I look forward to when/if it gets implemented. That being said, I'm choosing the route that would be the quickest to continue the development of the Backtick mobile app. In addition, it's also the choice that is most fun for me. To work on a Tildes API, if the powers that be even want to have one, would require lots of coordination and codebase learning, something that will take a lot of time. I highly commend anyone who chooses to take on that task, but I do too much of that kind of work for my real job 😂


      Please report any issues or feature requests through Github, this post, or the Backtick Discord server. Finally, I just want to thank everyone in the community for all the great conversations I've had, for providing helpful feedback for Backtick, and for creating a place on the internet that I very much enjoy being a part of 😊

      59 votes
    4. Tildes Userscript: Tildezy

      Updated: June 29th 2023 Hello folks, Like many of the other people that have been around lately, I'm new to Tildes, I've been browsing it without an account since last Monday or so while waiting...

      Updated: June 29th 2023

      Hello folks,

      Like many of the other people that have been around lately, I'm new to Tildes, I've been browsing it without an account since last Monday or so while waiting for an email response (thanks @Deimos), and in that time I've been working on a little tool to add some QOL features I thought would make my experiences with the site feel better.

      I didn't plan on sharing it initially, because I didn't think I'd be able to get the javascript into a usable state, and I'm not fond of sharing my code in general, as I always get a big wave of impostor syndrome whenever I do, "What if they look at my messy code and see how silly I do some things", that sort of thing. But with Tildes I want to try to correct some of my internet behaviours, for years I've generally stayed as a lurker, never commenting or sharing content of my own, so, hello there, hopefully, I stick to my guns and you see more of me.

      Onto the script itself, currently, I've built five main features into it all of them being rather minor on their own, I did do bug testing on everything and couldn't find anything else, but if you notice anything please feel free to report it to me or post an issue on the repo. It's easy to miss bugs when you've only got one set of eyes.

      Tildezy Github

      The GitHub contains installation instructions if you've never used a userscript before, and contains some images showing off each feature described below.

      Comment Collapser The comment collapser was built because, with my shakey hands, I had a few times when I would click someone's name instead of the [-] beside it. With this feature *Triple* clicking anywhere on a comment, be it text or header, will collapse it as if you used the [-] button. It's set to 3 clicks as sometimes I double-click to begin copying a line and didn't want the conflict, but it can be changed to any amount of clicks on line 132

      https://github.com/TeJayH/Tildezy/blob/main/Tildezy.user.js#L132

      Group Stars/Favourites Allows you to click a ☆ beside each ~group on the Tildes homepage to *favourite* it, moving it to the top of the list. Supports as many or as few favourites as you'd wish.
      Scroll to Top Button Adds a button pinned in the top right of every Tildes thread that sends you back to the top of the page. No more scrolling or reaching for the home key
      Open Comments in New Tab Replaces the default function of a posts "x comments" to open the page in a new tab instead of the current tab
      User Colors This one is the thing that I made the entire script for, an entirely useless feature but one I love for silly reasons. Replaces the stock username color with a randomized one based on a hash made from the user's username. So everyone gets assigned their own color which will always be their color anywhere you see them. This one helps multi-person conversations flow better in my head
      New Comment Traveller Gives you navigation buttons either beside the Collapse Replies/Expand all buttons when scrolled up, or pinned in the top right when scrolled past those buttons. Navigation buttons jump quickly between each new comment in a thread.
      Markdown Buttons Adds a selection of various buttons under every comment box that automatically insert markdown for you. No more forgetting which bracket style goes first for a clickable URL.
      Settings Not really a *feature* on its own, but it exists. Adds a "Tildezy Settings" beside the Log In/Username button in the top right of the header, which opens a settings window to enable/disable any and all features of the script. Features can also be disabled by modifying lines 26-41 in the script, allowing you to hard toggle everything *including the settings itself* off should you wish.

      https://github.com/TeJayH/Tildezy/blob/main/Tildezy.user.js#L26-L41

      Hopefully, someone gets some use out of this with me, I look forward to chatting with you all.

      EDIT
      Refactored the code and added a new comment traveller feature based on some of the comments below.

      EDIT 2
      Up to 1.3.0, we've got markdown buttons now, see comment explaining the change or check out the github readme

      120 votes
    5. Lazy userscript

      Just a hack job, but I'd seen some comment about it being inconvenient to ignore posts so I made a quick userscript (tested with Tampermonkey on Firefox) that adds hotkeys for...

      Just a hack job, but I'd seen some comment about it being inconvenient to ignore posts so I made a quick userscript (tested with Tampermonkey on Firefox) that adds hotkeys for bookmarking/ignoring/voting on a post. It can also navigate to the link or comments or prev/next pages (/). Only implemented for posts 1-9 at the moment.

      Ex:

      i+2 ignores and hides the 2nd post (or restores, if ignored)

      ? shows a summary of hotkeys

      // ==UserScript==
      // @name         Tildes
      // @namespace    http://tampermonkey.net/
      // @version      0.1
      // @description  Quickie convenience hotkeys for tildes.net
      // @author       TT
      // @match        *://tildes.net/*
      // @icon         https://www.google.com/s2/favicons?sz=64&domain=tildes.net
      // @grant        none
      // @require      https://unpkg.com/hotkeys-js/dist/hotkeys.min.js
      // ==/UserScript==
      (function () {
          "use strict";
          let Action;
          (function (Action) {
              Action[Action["Invalid"] = 0] = "Invalid";
              Action[Action["Bookmark"] = 1] = "Bookmark";
              Action[Action["Comments"] = 2] = "Comments";
              Action[Action["Ignore"] = 3] = "Ignore";
              Action[Action["Open"] = 4] = "Open";
              Action[Action["Vote"] = 5] = "Vote";
          })(Action || (Action = {}));
          const regex = /tildes\.net(\/~(?<group>\w+))?/gi;
          let match = regex.exec(document.location);
          //In a group if I wanted to support hotkeys there?
          if (match.groups.group) {
              //alert(match.groups.group);
          }
          else {
              addArticleNumbers();
              addMainHotkeys();
          }
          //Route
          function routeAction(action, event, handler) {
              event.preventDefault();
              //Grab index.  Zero-index?
              let indexText = handler.key.substring(2);
              let index = parseInt(indexText) - 1;
              if (isNaN(index))
                  return;
              actOnArticle(action, index);
          }
          function actOnArticle(action, index) {
              //Get article for index
              let article = document.querySelector(".topic-listing").children[index].children[0];
              //Do the thing
              switch (action) {
                  case Action.Bookmark:
                      if (article.style.borderStyle === 'solid')
                          article.style.borderStyle = 'none';
                      else
                          article.style.borderStyle = 'solid';
                      article.querySelector('button[data-ic-put-to$="bookmark"]').click();
                      break;
                  case Action.Comments:
                      article.querySelector(".topic-info-comments a").click();
                      break;
                  case Action.Ignore:
                      //Hide vs blank?
                      if (article.style.visibility === "hidden")
                          article.style.visibility = "visible";
                      else
                          article.style.visibility = "hidden";
                      // article.style.display = 'none';
                      article.querySelector('button[data-ic-put-to$="ignore"]').click();
                      break;
                  case Action.Open:
                      article.querySelector(".topic-title a").click();
                      break;
                  case Action.Vote:
                      article.querySelector(".topic-voting").click();
                      break;
              }
          }
          function addArticleNumbers() {
              let titles = Array.from(document.querySelectorAll(".topic-title a"));
              for (let i = 1; i <= titles.length; i++) {
                  let title = titles[i - 1];
                  title.text = i + " - " + title.text;
              }
          }
          function addMainHotkeys() {
              //Set up handlers
              const handleBookmark = (event, handler) => routeAction(Action.Bookmark, event, handler);
              const handleComments = (event, handler) => routeAction(Action.Comments, event, handler);
              const handleIgnore = (event, handler) => routeAction(Action.Ignore, event, handler);
              const handleOpen = (event, handler) => routeAction(Action.Open, event, handler);
              const handleVote = (event, handler) => routeAction(Action.Vote, event, handler);
              hotkeys("shift+/", (e, h) => alert(getHelpText()));
              //Page nav
              hotkeys("left", (e, h) => Array.from(document.querySelectorAll(".pagination a")).find((e) => e.textContent == "Prev").click());
              hotkeys("right", (e, h) => Array.from(document.querySelectorAll(".pagination a")).find((e) => e.textContent == "Next").click());
              for (let i = 1; i <= 9; i++) {
                  hotkeys("b+" + i, handleBookmark);
                  hotkeys("c+" + i, handleComments);
                  hotkeys("i+" + i, handleIgnore);
                  hotkeys("o+" + i, handleOpen);
                  hotkeys("v+" + i, handleVote);
              }
          }
          function getHelpText() {
              return `
          ←/→ = navigation
          b = Bookmark, i = Ignore, v = Vote,
          c = Open comments, o = Open link,
      
          Action+[1-9] calls that action on the corresponding article`;
          }
      })();
      
      13 votes
    6. I wanna hear your music!

      I was told by the overlords that this was the way to ask permission to hear you! I wanna share, discover, and enjoy your personal music. I’ll add myself and some other projects to the bottom of...

      I was told by the overlords that this was the way to ask permission to hear you! I wanna share, discover, and enjoy your personal music. I’ll add myself and some other projects to the bottom of this post, but I truly only want to hear you.

      https://jlawson.bandcamp.com/album/visions

      https://jeakams.bandcamp.com/

      https://on.soundcloud.com/VkPckGcot1Xt9mjA7

      Much love,
      Jeakams

      30 votes
    7. My own dry rub for meats

      Sweet Smokey Rub Ingredients 1 Cup Brown Sugar 1 Package Onion Soup Mix 1/3 Cup Smoked Paprika Method Place in the blender and blend on high until all of the onion bits are fully powderized. Using...

      Sweet Smokey Rub

      Ingredients

      • 1 Cup Brown Sugar
      • 1 Package Onion Soup Mix
      • 1/3 Cup Smoked Paprika

      Method

      Place in the blender and blend on high until all of the onion bits are fully powderized.

      Using

      Dip your meat in oil then in the dry rub.
      As it cooks the sugar melts and creates a nice crispy coating.

      18 votes
    8. Finished project: 32L Hiking backpack

      In my infinite wisdom I posted this to r/myog yesterday, just before the blackout started. I'm going to repost it here as a way to gauge how well it fits in on Tildes – this type of post is pretty...

      In my infinite wisdom I posted this to r/myog yesterday, just before the blackout started. I'm going to repost it here as a way to gauge how well it fits in on Tildes – this type of post is pretty central to the r/myog community and I am hoping some of us can migrate here.
       

      Goldilocks Pack

       
          In April of 2021, lo these many years ago, Reddit user savvlo posted in the r/myog Swap Thread that he was placing a wholesale order for Ecopak Ultra EPL200 and was wondering if anyone wanted a few yards. I had heard of this material and was eager to get my hands on some; none of the major UL pack manufacturers had started offering it yet and the only way to have an Ultra backpack was to build it yourself. I had the skills (4 or 5 packs already under my belt) and I aimed to be one of the first.
       
          Well, so much for that. I fell out of love with MYOG for a year or so, and by then the project seemed so insurmountable that I didn't even know where to start. I did plenty of designing and redesigning (because that's the fun part) but the truth was that I just didn't really need another backpack, so there was no motivation to start a project that would consume dozens of hours. And then finally, this spring, my trusty old Hyperlite started showing its 4000+ miles and gave me the kick I needed to actually make this damn thing.
       
          You can guess from the title that this pack fills a hole in my lineup – for years my two pack options were my 40L Windrider and my 27L summer pack, and most often I found myself wishing I had an in-between option in the 33L range. The MLD Burn fits right in that pocket and after seeing one in action on a high route trip with a friend I knew that was going to be my model. The overall dimensions of my pack match the Burn exactly; the main modifications I've made are to the pockets, straps, and components. The comments in the Imgur album go over the specifics.
       

      Specs Imperial Metric
      Weight 13.3 oz 376 g
      Internal Volume* 2000 in^3 32 L
      Width 10 in 254 mm
      Depth 6 in 152 mm
      Height 29 in 737 mm
      Torso 19 in 483 mm

      *this is just my best guess, I don't have a good way to measure volume
       

      Thoughts

          I'm from the Midwest and I hate tooting my own horn so you'll know I speak truth when I say that this is, undoubtedly, my finest work. Other than a few trivial mistakes everything pretty much fell together perfectly. This is not normally the case with my projects and naturally it makes me quite nervous.

          The one thing I can't get over is this fabric! I can't believe this stuff only weighs in at 3.5 osy. It feels so much tougher than the Hybrid DCF I'm used to working with; it's so hard to cut through even with my sharp sewing scissors. Only time will tell if this pack really is as tough as it feels, but my hopes are sky high. Thanks for reading and looking at my pictures!

      24 votes
    9. Came up with some cocktails to represent my D&D party :)

      Was a fun little project. I worked on the drinks myself first, then gave them to my roommate for a blind taste test, and asked her to describe the kind of character she thought the drink was...

      Was a fun little project. I worked on the drinks myself first, then gave them to my roommate for a blind taste test, and asked her to describe the kind of character she thought the drink was about. If she wasn't at least mostly right, then I'd have to try again - but they somehow ended up a lot more accurate than I expected to be, despite the fact that she knows nothing about this D&D game, haha. I guess we're just really on the same wavelength?

      Anyway, without further ado, here are the recipes! If there are any other mixologists on here, I'd love to hear what you think - and you want to try (something like) any of these drinks but are missing an ingredient or two, let me know and I'm happy to try to suggest a few possible substitutions.

      Avery

      • 0.75 oz chartreuse
      • 0.5 oz montenegro
      • 0.5 oz black walnut liqueur
      • 0.5 oz distilled water

      Liz

      • 0.75 oz peated gin
      • 0.75 oz crème de violette
      • 10 drops lemon juice
      • yuzu bitters

      Matoya

      • 1 oz mezcal
      • 1.5 oz lemon tonic
      • cardamom bitters

      Morgana

      • 1 oz plum gin
      • 1 oz white rye
      • 1 oz distilled water
      • lavender lemon bitters

      Sylvaire

      • 0.75 oz cognac
      • 0.25 oz pomegranate liqueur
      • 0.25 oz grand marnier
      • 0.75 oz peach juice
      • peychaud’s bitters

      V

      • 0.75 oz peated gin
      • 0.25 oz galliano vanilla
      • 0.25 oz absinthe
      • 1 oz peach juice
      • hibiscus rosehip bitters
      • cucumber twist (i.e. take a thin lengthwise slice of a baby cucumber and curl around the inside of the glass)
      10 votes
    10. The Great Wave off Kanagawa cross-stitched!

      There was quite a bit of interest in last week's thread and I'm happy to say that I'm finally done with this project! It has taken about a month and a half, it's full coverage 100 stitches in...

      There was quite a bit of interest in last week's thread and I'm happy to say that I'm finally done with this project!

      It has taken about a month and a half, it's full coverage 100 stitches in diameter - 18 cm using 14 count aida - and thankfully fit perfectly into my grandmother's hoop! The pattern is by Sarah Baumann (NeedleMinderLair on Etsy)

      Anyway, here's The Kawaii Wave off Kanagawa!

      54 votes
    11. Vegan recipe log

      Hi all. I cook as often as I can and thought it might be fun to chat about any recipes you’ve tried or would like to try! I’m vegan so anything I post in this thread will be too. Maybe even share...

      Hi all. I cook as often as I can and thought it might be fun to chat about any recipes you’ve tried or would like to try! I’m vegan so anything I post in this thread will be too. Maybe even share snacks or restaurants that are you’ve tried that you’ve liked!

      To start is a simple sauce/stir fry recipe I make when I’m pretty tired after a long day:

      Spicy salty sweet sauce:

      1-2 tbsp gochugaru
      1 tbsp white or black rice vinegar
      1 tbsp mirin
      1 tbsp soy sauce
      1 tbsp agave or maple syrup
      1 tsp corn starch

      I usually put all of the ingredients together except for the corn starch and then set aside as I do the rest of the prep.

      The rest of the recipe is a bit more variable as I have certain ingredients but looks like this:

      1 cup cooked white rice OR hand pulled noodles

      Noodle recipe:
      250g all purpose flour
      125 ml water
      1/4-1/2 tsp salt
      Canola oil

      I add the flour, water, and salt to a bowl, mixing with my fingers. It starts to form pretty quickly into a mass. I knead the mass of dough into a ball until uniform. With the large, smooth dough ball I cut it into 8 pieces with a knife, roll them into a sort of prolate spheroid shape, and coat with canola oil. Put the oiled dough shapes into a bowl and cover with a damp towel. Let them rest for about an hour or so.

      Heat a pot of water. Flatten the dough pieces into rectangles with a rolling pin. Use the rolling pin (if it’s a thin one, otherwise I use large chopsticks), to press the dough lengthways to create a sort of seam. Hold each end of the dough and slowly pull to stretch. Slap on counter as you pull a few times. Stretch it as long or short as you’d like. On the seam you made with the rolling pin, split the noodle apart so that the noodle is now a large loop. Put into the boiling water and wait roughly a minute /or until it’s floating. Can cook a few noodles at a time, though I usually do one or two and roll/pull while they boil.

      With the noodles or rice done or going and the sauce almost ready, start to chop vegetables, maybe a cup or so of 2-3 types. I like Napa cabbage, squash, green onions, bell pepper, and carrots but really get whatever you’d like or have on hand at the time. Sauté the vegetables in a tbsp or so of oil (I use canola or olive), starting with onions/garlic and then adding others as you see fit. Once the vegetables are done to your liking, add the noodles or rice, then the sauce (adding in the corn starch to the sauce at this point) and stir.

      Often I’ll actually fry a half block or block of tofu I’ve cubed before adding vegetables into the oil. I usually do this as the noodles (or if I’m doing a pot of rice, as it begins to cook) are about done resting, maybe with 15-20 mins to go, since frying tofu can take awhile.

      I like to serve in bowls, topping with a dash of sesame oil, black sesame seeds, and fresh green onion.

      I’ll post more recipes in the thread as I make them but this is probably the most frequent thing I make in a given week. Feel free to share your own!

      28 votes