Modern HTML and CSS are awesome tools on their own, and are able to do so much without needing to rely on massive JavaScript bundles, but you still end up with component libraries that are <div><div><div><div> all the way down.
874 karma · joined April 11, 2012
I write code, and design systems that work.
You can find my website behind this link: http://www.samuellevy.com/
Modern HTML and CSS are awesome tools on their own, and are able to do so much without needing to rely on massive JavaScript bundles, but you still end up with component libraries that are <div><div><div><div> all the way down.
> Because a VPN in this sense is just a glorified proxy.
Are these ACTUALLY the keys to this house? Are they the only set? The original set? Were the locks changed, and this set in the contract is no longer valid?
Then putting aside all of that... How do you ENFORCE a "smart contract"? Probably through... Existing contract law. Because that's what it's there for. Smart contracts are just more convoluted paper, and we can do that already with DocuSign or any number of other digital contract options - all of which provide, so far as I can tell, precisely the same level of verification that a smart contract does. The only "advantage" of a smart contract over those platforms is that the history of the "document" is more or less baked into the chain, instead of trusting that the third party platform hasn't modified it... Which they will never have any motivation to do...
People have been initialing pages to mark them as read/accepted for more years than I've been alive. In the event of a contract dispute, smart contract or not, it's going to be up to a third party (mediator, judge, etc.) to decide on resolution anyway... At which point even the exact wording of the contract may well be discarded as being unenforceable because _contracts are not above the law_.
It's just a really strange thing to ping as a "big problem to solve", and such a bizarrely expensive solution to the problem, too. I think that a much better solution would be improving development and access to antivenin
But the thing that they're blaming smartphones for is nothing new. Communication has always been a difficult thing, and before people had their heads buried in smartphones, they had their heads buried in TV, or newspapers/magazines/books, or they just simply went to bars/pubs.
The whole article seems like a vague, "hot take", nothing. It's an opinion backed up with zero research or evidence other than "I'm a couples therapist, trust me, I know."
Their free plan will let you hammer in 5 nails per month into a single piece of wood, but you can't use a different piece of wood each month. For $30/month you get 50 nails, and up to 5 pieces of wood, or for $60/month you can get 120 nails and unlimited pieces of wood, and two-factor (they'll call you before they hammer in the nails, and ask where you actually want the nails hammered). If you want to have unlimited nails, you have to contact them for enterprise pricing.
They will also sell the measurements of your wood and the nail positions to other carpenters.
I don't like React.
I've had a few relatively popular posts over the years:
https://blog.samuellevy.com/post/41-php-is-the-right-tool-fo... A kind of response to a certain post about PHP that still makes the rounds...
https://blog.samuellevy.com/post/46-do-i-look-like-i-give-a-... "Do I Look Like I Give A Shit Public Licence" an alternative to the WTFPL
The problem is that LLMs aren't alive, and they _don't think_. The speaking is arguable.
GPT isn't making true or false outputs. It's just making outputs. The truthiness or falseness of any output is irrelevant because it has no concept of true or false. We're assigning those values to the outputs ourselves, but like... it doesn't know the difference.
It's like blaming a die for a high or a low roll - it's just doing rolls. It has no knowledge of a good or a bad roll. GPT is like a Rube Goldberg machine for rolling dice that's _more likely_ to roll the number that you want, but really it's just rolling dice.
It doesn't matter if the output is correct or not, the process for producing it is identical, and the model has the exact same amount of knowledge about what it's saying... which is to say "none".
This isn't a case of "it's intelligent, but it gets muddled up sometimes". It's more of the case that it's _always_ muddled up, but it's accidentally correct a lot of the time.
"Hallucination" is a term that works well for actual intelligence - when you "know" something that isn't true, and has no path of reasoning, you might have hallucinated the base "knowledge".
But that doesn't really work for LLMs, because there's no knowledge at all. All they're doing is picking the next most likely token based on the probabilities. If you interrogate something that the training data covers thoroughly, you'll get something that is "correct", and that's to be expected because there's a lot of probabilities pointing to the "next token" being the right one... but as you get to the edge of the training data, the "next token" is less likely to be correct.
As a thought experiment, imagine that you're given a book with every possible or likely sequence of coloured circles, triangles, and squares. None of them have meaning to you, they're just colours and shapes that are in random seeming sequences, but there's a frequency to them. "Red circle, blue square, gren triangle" is a much more common sequence than "red circle, blue square, black triangle", so if someone hands you a piece of paper with "red circle, blue square", you can reasonably guess that what they want back is a green triangle.
Expand the model a bit more, and you notice that "rc bs gt" is pretty common, but if there's a yellow square a few symbols before with anything in between, then the triangle is usually black. Thus the response to the sequence "red circle, blue square" is usually "green triangle", but "black circle, yellow square, grey circle, red circle, blue square" is modified by the yellow square, and the response is "black triangle"... but you still don't know what any of these things _mean_.
When you get to a sequence that isn't covered directly by the training data, you just follow the process with the information that you _do_ have. You get "red triangle, blue square" and while you've not encountered that sequence before, "green" _usually_ comes after "red, blue", and "circle" is _usually_ grouped with "triangle, square", so a reasonable response is "green circle"... but we don't know, we're just guessing based on what we've seen.
That's the thing... the process is exactly the same whether the sequence has been seen before or not. You're not _hallucinating_ the green circle, you're just picking based on probabilities. LLMs are doing effectively this, but at massive scale with an unthinkably large dataset as training data. Because there's so much data of _humans talking to other humans_, ChatGPT has a lot of probabilities that make human-sounding responses...
It's not an easy concept to get across, but there's a fundamental difference between "knowing a thing and being able to discuss it" and "picking the next token based on the probabilities gleaned from inspecting terabytes of text, without understanding what any single token means"
ChatGPT made some waves at the end of last year. My in-laws were wanting to talk to (at) me about it at Christmas. There's plenty of awareness outside of the tech circles, but most of the discussion (both out and in of the tech world) seems to miss what LLMs actually _are_.
The reason why ChatGPT was impressive to me wasn't the "realism" of the responses... It was how quickly it could classify and chain inputs/outputs. It's super impressive tech, but like... It's not AI. As accurate as it may ever seem, it's simply not actually aware of what it's saying. "Hallucinations" is a fun term, but it's not hallucinating information, it's just guessing at the next token to write because that's all it ever does.
If it was "intelligent" it would be able to recognise a limitation in its knowledge and _not_ hallucinate information. But it can't. Because it doesn't know anything. Correct answers are just as hallucinatory as incorrect answers because it's the exact same mechanism that produces them - there's just better probabilities.
> Don't listen to people who just got very lucky. Taylor Swift telling you to "follow your dreams" is like a lottery winner saying "liquidise your assets, buy Powerball tickets. It works!"
And that's the thing. Skill and talent are important, but there's a certain amount of success that's only achievable through luck, or through starting from _so far ahead_ that it's just genuinely out of reach for us mere mortals.
Is the experience of those people irrelevant? No, but it's also not actually applicable to most other people.
There's so much low-hanging fruit there that's so easy to fix _right now_. No version control? Good news! `git init` is free! PHPCS/PHP-CS-fixer can normalise a lot, and is generally pretty safe (especially when you have git now). Yeah, it's overwhelming, but OP said that the software is already making millions - you don't wanna fuck with that.
I've done it, I've written about it, I've given conference talks about it. The real bonus for OP is that the team is small, so there's only a few people to fight over it. It's pretty easy to show how things will be better, but remember that the team are going to resist deleting code not because that they're unaware that it's bad, but because they are afraid to jeporadise whatever stability that they've found.
Oh, so you _haven't_ used any of the recent versions of PHP, then. You're just talking shit with no actual recent experience. Gotcha. Well, thanks for your input.
* An empty cell has a chance to breed if there are two or more neighbours of breeding age (10-65).
* The chance of breeding slightly decreases for every neighbouring cell that's over 35 (the older they are over that age, the lower the chance of breeding).
* All cells have a small chance of dying on any turn.
* Cells that are "children" (under 6) or "elderly" (over 65) have an increased chance of dying, depending on how young or old they are.
* Young and old cells have an increased chance of dying from loneliness (less than 2 neighbours), which increases based on how lonely they are.
* "Adult" cells (6-65) have an increased chance of dying from overcrowding (4+ neighbours), which increases based on how crowded they are.
Unlike the original game, there's an element of randomness in the ability for a cell to breed or die, which means that it's not a repeatable simulation in the same way that regular GoL is.
I started the rules relatively close to societal norms (breeding from 16-45), and found that nothing could breed enough to sustain the population for long. I thrn tweaked the rules to their current set just to get populations to at least hold. You can get some more interesting patterns if you play with the death limits, but I haven't spent too much time looking for the perfect rules yet.
Pretty much all the limits are changable through the constants at the top of board.js.
As a non-American, currently living in America, these ads are the strangest thing I've seen on TV.
In Australia, my company gets taxed at a flat 30% on all profits in a year. If I want to take cash out of the company after that tax has been taken, I pay "top-up" tax that brings the total tax paid to the level of my income tax rate.
For example, if the company earned $10000, after all expenses, then it would pay $3000 in tax, leaving $7000 left that I can take out. If I earned no money in the year, my income tax rate is 0%, so the top-up tax is -$3000 (I.e. I get a tax refund for $3000). If I earned $50000 in the year, then my income tax rate is 32.5%, so I would have to pay top-up tax of $250 (I.e. 2.5% of the original $10000, which has already been taxed 30%).
Double taxation shouldn't happen, and while my company was set up for tax minimisation purposes, international corporations are able to do an insane level of fuckery to avoid almost all taxation.
That's why I didn't look at them - there are hardly any games played on them (at least not enough to pick up any statistical relevance)
I haven't written a post mortem yet, partly because I'm still building it, and partly because I hadn't seen it under heavy load (although I woke to emails from linode screaming at me about high CPU usage)
* The idea is one that I've been toying with for years. I've made other experiments that got some notice here a few years ago, too.
* There are some extra features that I still want to add at some point ('formations' for pre-building shapes, as an example. The database table is there, but no functionality.)
* Nothing given up on entirely yet.
* The only rearchitecting that happened was replacing the board UI with a canvas implementation. The initial version used a table and was painfully slow. From past experience I knew that wouldn't cut it, but it was an easy starting point.
* the initial commit was... October 2nd, but I didn't start working on it till a week later. All in all, I've just grabbed time between other (paying) projects.