• 0 Posts
  • 83 Comments
Joined 2 years ago
cake
Cake day: June 10th, 2023

help-circle


  • It’s not though, but people have used it to promote pyramid schemes so it gets the bad faith. It’s almost like considering e-mail to be spam, it’s not, even though a large chunk of emails are spam the rest is very useful.

    Ethereum can be used to represent ownership in a way that’s non-transferable by anyone other than the owner, this can have real life applications such as deeds for houses or car registrations. Someone noticed that another excellent application for this is art ownership, for example a token that represents a painting could be used by art collectors as a proof of authenticity, since only one person could be the owner of the token, and that person can prove that he owns the token, if the painting were to be stolen there’s a way to prove you’re the rightful owner. Someone heard that and convinced artists to sell art using those tokens without fully understanding what they were selling, and a bunch of people bought them without understanding what they were buying. Then they noticed that this would only work if others were onboard, so they tried to push it to other people, and eventually you had people who didn’t understand a thing paying thousands of dollars for a drawing of a monkey…

    Ethereum could be used for so many awesome things, but obviously we live in the awful reality where the biggest and most known application for it was used to scam people.



  • Not aware of any, but I’ll do my best on my own.

    Let’s abstract money to its bare minimum, in the most basic form money is an abstract fungible (i.e. 1 of it is the same as another one, they’re interchangeable) token that can be sent or received, and the most basic way to keep track of this is with a ledger. A ledger is in its most basic form a lot of entries saying stuff like “Alice earned 5 coins” and “Alice paid Bob 3 coins”, by looking at these 2 (and assuming they’re the only ones in our ledger) we know that Alice now has 2 coins and Bob 3. Therefore if now Alice tries to send 3 coins to someone else we know this is invalid because she doesn’t have that amount of coins.

    Ok, so that’s the basic of what money is, but as a general rule the ledgers for most coins are centralized, e.g. your bank has that ledger for your account. For years people tried to have a way to create a decentralized ledger, so anyone could have a copy of the ledger and validate it on their own, that way this currency on that ledger could not be controlled by anyone. There are two big problems with that, first you need a way to ensure that only the owner of an account can give away those coins, and secondly we need a way to ensure no one cheats the system, for instance in the example above if Alice could remove her previous transaction from the ledger and input a new one she could convince Bob she paid him, but actually send the money to someone else.

    Problem 1, ownership. This is a slightly difficult answer, so I’ll not explain this fully, if you’re interested read about public and private keys. Essentially in cryptography there’s a way to sign a message in a way that you can verify who signed it without being able to reproduce the signature, in practice this means each account/wallet has 2 numbers, one is the private one used to sign messages (anyone who knows this number can spend the coins) and the other is a public number used to verify who coins are sent to and that the spending of coins was properly signed. This has been a solved problem for decades and it’s a very secure and acceptable solution, we use it on things like ssh, SSL and the likes.

    Problem 2, consensus. This is the hardest problem to solve, and this is the brilliance of Bitcoin. The way Bitcoin solved this issue is: A block is several entries in the ledger; The entries can be arranged in multiple ways, each way yielding a different hash for that block; Each block has a reference to the hash of the block that came before; Only certain hashes are acceptable (e.g. hashes that end with 0, or with 00), and this hash cannot be predicted, so it needs to be brute forced; Whoever creates a block can insert a transaction giving themselves some amount of coins. Phew, that’s a lot, but what does it all mean? It means that everyone sees every transaction in the network and try to build a block that will be accepted, the first person who does shows their block to the world, and everyone tries to find the next block after that. For Bitcoin the largest chain is the valid one, so if someone found a block it’s in your best interest to start to try to find the next one, it’s also in your best interest to show the world your block as soon as possible so others will build on top of it, the more blocks on top of yours the more unlikely it is that someone will be able to overwrite it (they would need to find more blocks that what has been built on top of yours, and even finding one block is hard because of the specific hash that needs to be generated). The difficulty (i.e. rules for which hashes are acceptable) are adjusted in order to make sure that on average one block is found every 10 minutes by the entire amount of people trying to find blocks.

    All together now: Currently Alice has 10 coins, she uses her private key to sign a transaction giving Bob 6 coins. This transaction gets picked by several miners. One of them finds the next block and includes this transaction there. Now all miners are trying to find the next block from that one, and when they do this transaction will have been validated by 2 blocks so it’s way more likely to keep being validated. After 6 blocks it would take the entire mining network 1 hour to undo that block, and unless 51% of the random strangers mining Bitcoin decide to cooperate, the rest of the miners will keep adding blocks on top making this transaction impossible to be reverted. If after that Alice now tries to spend 5 coins no miner will include that transaction, because it would create an invalid block that other miners would just ignore.

    There’s a bit more to Blockchains, for example each transaction also pays some amount to the miners as an incentive, so you can have a transaction be more priority than another by paying more to the miners.

    What about other coins? There are lots of them out there, I’ll only mention one, Ethereum. Ethereum takes this concept to the next level, instead of a ledger storing transaction it stores programs, so one can have a program that if you pay it X coins it gives you Y other tokens, or any other number of complicated stuff. Also recently Ethereum changed from the proof of work (i.e. finding the hash) to proof of stake, in which people pay some amount of coins to be allowed to validate transactions, but if they generate an invalid transaction they lose those coins.

    I strongly recommend you read the Bitcoin white paper, it’s not as difficult as you would think, and it will go into a lot more details on how things work.


  • In that sense it is a bit of scripting, it’s a templating language similar to Jinja, so you put things you want to display between {{ }}, for example {{name}} will get rendered as the content of the name variable. [[ ]] is the way Silverbullet habgles links, so [[Something]] is a link to the file Something.md, so [[ {{ name }} ]] is a link to the file with the name from the variable.

    Also that’s because I wanted a custom view, a very similar thing could be done with:

    \```query
    recipe
    \```
    

    BTW, you can have a table of contents on Silverbullet by just putting a block named toc, i.e. ```toc and closing it on the next line.



  • Let me give you an example, I have a page with this:

     ```template
     | Name | Keywords |
     |-----------|-----------------|
     {{#each {recipe}}}
     | [[{{name}}]] | {{keywords}} |
     {{/each}}
    \ ```
    

    Then each recipe page has a header, so for example if I have a file named Recipes/Steak.md with the content:

    ---
    tags: recipe
    keywords: beef easy
    ---
    
    # Ingredients 
    
    Yadda yadda yadda...
    
    

    So that table gets populated with all of the recipes wherever they are and I can add other columns or info there. It’s very neat and customizable.


  • Silverbullet is open source and has a very simple architecture with slightly extended markdown files which are easy to sync using whatever you use for syncing files. Plus it syncs files locally and allows you to edit offline and sync later (with a basic sync conflict resolution to avoid losing changes) and a very cool feature is that it allows you to write your own scripts to get whatever feature you want.


  • Another vote for Silverbullet, I’ve been using it for a while and it’s great. There is a tree view plugin that’s very easy to install, however I disabled it after a short while because I realized that, because of the way I take notes, that is a lot less useful than other features.

    For example, I have a folder with all my cooking recipes, at first I thought having a Tree view would be good there, but actually if I use the querying mechanism I can have tables that give me more information than just the name, e.g. tags, difficulty, etc. also this works regardless of where the recipes are, so if I want to create a subfolder structure or scrap recipes from elsewhere in the whole space it would work (granted, not very useful for recipes, but I also have a table for work tools, some of which are embebed on another page, some of which are a page of their own, and I have a table that lists all of the tools to give me an overview)





  • Different things. Bash/Zsh/Fish/Nu are shells, i.e. a low level CLI interface with the computer. On systems with graphics you need a graphical program to display the shell, e.g Konsole/Gnome-shell/Alacritty. Also there’s a third (optional) program to render the line where you type commands differently, this is called a prompt and there are several different ones, e.g. Powerlevel10k/oh-my-posh/Starship.




  • It depends on the game and how they handle steam, if they see steam as a requirement then the game is choosing to use steam as a very rudimentary (and easily bypassed) DRM. But this is more about lazy development than DRM, essentially they’re not expecting the steam APIs to fail, which is ridiculous considering they have non-steam versions, so a simple if statement would solve this issue. Also this paints those games in a very bad light to me, because if they’re doing that with some API call on steam they might be doing it with another and now the game needs to be online always.

    There are plenty of multiplayer games that don’t require steam, iirc all of the paradox games you can just copy the folder to a different computer without steam and run the binaries.

    And while not ideal, someone else pointed in another comment that there’s an open source implementation of the steam API, so worst case scenario you just replace the library in your backup and you’re done.