rodarmor
I came up with the idea a while ago[0], but it turns out that they were actually independently invented much earlier. With [this paper](https://www.microsoft.com/en-us/research/wp-content/uploads/...) being the canonical origin of the idea.
The idea is that you create a new tab in your spreadsheet, mark some cells as inputs, some cells as outputs, and use existing spreadsheet functionality to derive the output value cells from the inputs. You can use arbitrary formulas, as well as define intermediate values in other cells.
I thought it would be fun to make a demo of sheet functions using IronCalc, which you can try out here:
https://casey.github.io/IronCalc/
The demo was written by an LLM, so I have no idea if the code is any good or not, but it seems to work!
I like the name "sheet functions", since it's a bit less verbose.
The spreadsheet contains a bunch of demo sheet functions, all called in the first `Demo` tab, with the rest of the tabs being the function definitions.
Sheet functions use the first column for input, the first cell of the second column for output, and any spreadsheet can be made into a sheet function by selection the `Function sheet` option in the spreadsheet tab drop down, which makes it callable in formulas by its name.
Hopefully it illustrates the power of sheet functions. If you scroll through the tabs all the way to the right, you can see the `Fractal` spreadsheet, which renders the Mandelbrot set using a sheet function.
This is just a demo, the code is probably horrible, and I'm slammed working on other stuff, so I probably won't take it further myself, but I wanted to share. So far, sheet functions haven't made it into any spreadsheet program intended for actual use, and it's something could be an interesting differentiator for IronCalc.
[0] And made a video: https://www.youtube.com/watch?v=1WkMpa5zfTA
Ten Years of Just (and Lists)
I made my first commit to `just`, a command-runner written in Rust, ten years ago with the auspicious commit message "Initial commit. Broken."Thanks to everyone that has used `just` over the years, the authors of the huge variety of useful crates that `just` uses as dependencies. I'm especially grateful to all the feedback, design help, and issue reports I've gotten. `just` is largely a solo...
Show HN: Filepack: a fast SHASUM/SFV/PGP alternative using BLAKE3
https://github.com/casey/filepack
I've been working on filepack, a command-line tool for file verification on and off for a while, and it's finally in a state where it's ready for feedback, review, and initial testing.GitHub repo here: https://github.com/casey/filepack/It uses a JSON manifest named `filepack.json` containing BLAKE3 file hashes and file lengths.To create a manifest in the current directory: filepack create To...
Lol: Vibe Scripting
> The tz database predicts future timestamps, and current predictions will be incorrect after future governments change the rules.
Where does the Rust '\n' character come from?
As far as unseating Make as a command runner, I think that might just take Just being available in more places, since one of the main advantages of Make that many users cite is that it's available everywhere. Just is already available in a lot of package repos, but not all of them. Finally packaging Just for Debian[0] would help a lot.
What are examples of programmers disregarding aesthetics for productivity?
I really enjoy it when I see programmers with a deranged disregard for aesthetics in the name of efficiency or productivity. Some of my favorited examples from my own experience:- An extremely productive, like, 100x senior engineer I know works on a stock Ubuntu box with the default desktop wallpaper and an un-customized IntelliJ IDE and when he opens an IDE window he doesn't even full screen...
https://academic.oup.com/ajcn/advance-article/doi/10.1093/aj...
Smartphone makers don't sell new phones with a higher price tag and the guarantee of 7 years of software updates, likely because consumers would prefer a lower price and no guarantee.
Thus, the law would effectively force people to buy something that they don't want.
Liquidity management is one of the most complicated aspects of the Lightning Network, and certainly one of the most counter-intuitive.
The basic primitive that makes up the Lightning Network is a "channel". A channel is between two nodes, has a fixed capacity, is opened by making a on-chain Bitcoin transaction, and is closed by making an on-chain Bitcoin transaction.
While the channel is open, the two parties to the channel can make payments between themselves, but do not have to publish a Bitcoin transaction for each one of these payments. They only have to publish a Bitcoin transaction when they want to close the channel, which nets-out the intermediate transactions made since it was opened.
As a concrete example, let's say Alice and Bob open a channel, with Alice contributing 1 BTC when the channel is opened, and Bob contributing 0 BTC. Initially, their balances on the channel are:
Alice: 1 BTC
Bob: 0 BTC
In this state, Alice can send a 0.1 BTC payment to bob, and the channel balances will be: Alice: 0.9 BTC
Bob: 0.1 BTC
Alice and Bob can send each other money, but only up to the amount that they have in the channel. So at this point, Alice can send Bob up to 0.9 BTC, and Bob can send Alice up to 0.1 BTC.However, at the very beginning, when Bob's balance was 0 BTC, he could not have sent money to Alice. Due to a lack of inbound liquidity, which is, quite simply, money on the other side of a channel, which can be sent to you.
This is an aspect of the Lightning Network that is very different from other payment systems, and from on-chain Bitcoin payments. You must arrange to have sufficient inbound liquidity to receive payments.
You ask a good question: What if I just want to assume that the customer is good for the money and queue it up myself for settlement once I have the liquidity to spare?
Let's imagine that we were in the initial state, Alice had 1 BTC in the channel, Bob 0 BTC, and Alice let Bob make a payment to her of 1 BTC. The new balance would be:
Alice: 2 BTC
Bob: -1 BTC
However! When a Lightning Network channel is closed, you divide up the funds from the funding transaction between the parties to the channel. The channel was funded with an on-chain Bitcoin transaction of 1 BTC, so there would be no way to pay out Alice 2 BTC from that initial transaction. Since both parties to a payment channel can close the channel at any time, Alice would be trusting Bob to keep the channel open until he no longer had a negative balance, and avoiding the need for trust is the whole purpose of the Lightning Network in the first place, otherwise we could just trade unenforceable IOUs back and forth.