bazzargh
https://en.wikipedia.org/wiki/The_Invention_of_Morel mentioned here https://news.ycombinator.com/item?id=28779266 I'd have expected it to come up as one step removed from Borges, and it did.
https://en.wikipedia.org/wiki/Why%27s_(poignant)_Guide_to_Ru... mentioned many times, eg https://news.ycombinator.com/item?id=36632010 - a surprising omission, tho I guess it's not in print.
The AI talks about the movies like they are familiar with Singer's work. But if they were... they would known he was up-and-coming in the 90s, a decade too late to have helmed a blockbuster whose flop would have killed his career? They would have known that Singer made superhero movies _before_ Nolan not just after like the conversation suggests?
Even bringing up Superman IV is weird; it was such a dud it never gets shown, so unless they old enough to see it at the time -like me- (so would notice the 20 year gap!) or were an avid fan (so would know more about the movies!) it wouldn't come up.
On the other hand, for machines all things are equally obscure, they all happened yesterday, and are relevant if cosine similarity says they are.
The hallucination in the second sample - that Bryan Singer was involved in Superman IV: The Quest for Peace - would have rung alarm bells. It just seemed to be free associating on words in the conversation.
There was a regular alarm test, so we knew where to go. Then one day there was a REAL alarm, we all trotted off in our designated directions, but as we came down that back stairwell, it was full of smoke (not thick, but clearly something going on...) then at the bottom we saw why: TGIF had been stacking cardboard waste in there, plus their employees had been taking cigarette breaks in there, beside the no smoking sign... and you'll never guess what happened. Yep, fire in the fire escape.
The fire marshall was getting very stabby pointy fingering at some sheepish looking people as we went by to our muster points.
(it was just a stack of cardboard and there was nothing else flammable in the stairwell, it wasn't life threatening, just reckless)
15. If the game is controlled with the keyboard, use "O" for left, "P" for right, "E" for up and "D" for down if possible; this takes into account the most important keyboard layouts (no disadvantages for emulator users with QWERTZ, QWERTY or AZERTY keyboards)
While that'd be useful for things like telling someone else what buses they can get, planning a trip, etc, what I actually tried to do was to link to the Killermont Street bus station in Glasgow; Aztec Camera had a sentimental song about late night departures from there - leaving your friends and heading south to look for work - that runs:
As the ships and the steel
Slip away to the cry of "Compete"
There's a message for us
We can get there by bus
From Killermont Street
And indeed you can...buses all over the place. But I can't link to it :)We have both Claude and Cursor here, as well as agents running GPT, things in AWS Bedrock, etc and its my team handle the bills...when people use Cursor on auto, costs are under control, but there's always a dozen or so whale users who'll switch models manually and blow through the budget like it's not there.
Another thing: "better cost controls". There was for example no way for us to disable Fable in Claude, but we could in Cursor. Again, the opposite experience.
When we went we got the priority tickets (can't remember the exact name of the deal) because there were no normal slots left that day; that does get you discounts on stuff but awkwardly the discount is at the gift shop _outside_ and it wasn't clear whether there were things at the fake supermarket checkout _inside_ that you couldn't get outside. It also gets you the card you boop for the scavenger hunt which makes you more involved in the whole thing. So yeah, they got us for some extra cash but it wasn't so bad as a one-off.
You can shorten the candidates list quite a bit: https://oeis.org/search?q=author%3A%22Chai+Wah+Wu%22+2015+Pr...
The article says "Spring 2015" but in fact the magazine was published December 29, 2015. In the text it mentions https://oeis.org/history?seq=A250001 so the interview could not have been earlier than October 2015; Wu's sequence is "recent".
There's a few sequences that jump out, this one, and the prime palindromes of 0's and 1s whose squares are palindromes; but that was August and seems too early.
Instead of just stroking with the average colour, I chose to only connect points that were similar in colour (because of the fauvist thing, I was mainly interested in hue; the paints are all intense). By doing this, I was trying to be edge preserving, without explicitly calculation, eg of the Sobel operator.
It kinda worked in that the edges came out clearly; the resulting painting was messy tho; the thick brushstrokes and the colours are intentional, but the brushstrokes going in random directions is not https://media.hachyderm.io/media_attachments/files/115/894/8... compare to an actual fauvist work, https://en.wikipedia.org/wiki/Robert_Delaunay#/media/File:Ro... which still has the 'dithered' look to the face but the strokes are deliberately aligned, I'd fix that if I try again. (Delaunay also uses small strokes for detail, a thing I wasn't going to try in a throwaway program)
An earlier attempt at generating pencil sketches from photos - again, keeping the number of strokes small, and using parallel strokes for hatching - worked much better https://media.hachyderm.io/media_attachments/files/112/767/4... (it's just sobel to find edges and a bit of sampling with a filter to decide where to shade)
Things don't happen all of a sudden, and being able to see all the scientific papers of the era its possible those could have fallen out of the synthesis.
But again it's not useful in practice for very sparse sets: if you have say a million players, with at most 10 at the same poker table, setting 10 bits of a million-bit binary number is super wasteful. Even representing the players as fixed size 20-bit numbers (1 million in binary is 20 bits long), and appending the 10 sorted numbers, means you don't need more than 200 bits to represent this set.
And you can go much smaller if all you want is to label a _bucket_ that includes this particular set; just hash the 10 numbers to get a short id. Then to query faster for a specific combination of players you construct the hash of that group, query to get everything in that bucket (which may include false positives), then filter this much smaller set of answers.
But to lay it out: every positive integer is a sum of powers of 2. (this is obvious, since every number is a sum of 1s, ie 2^0). But also every number is a sum of _distinct_ powers of 2: if there are 2 identical powers 2^a+2^a in the sum, then they are replaced by 2^(a+1), this happens recursively until there are no more duplicated powers of 2.
It remains to show that each number has a unique binary representation, ie that there are no two numbers x=2^x1+2^x2+... and y=2^y1+2^y2+... that have the same sum, x=y, but from different powers. Suppose we have a smallest such number, and x1 y1 are the largest powers in each set. Then x1 != y1 because then we can subtract it from both numbers and get an _even smaller_ number that has distinct representations, a contradiction. Then either x1 < y1 or y1 < x1. Suppose without loss of generality that it's the first (we can just swap labels). then x<=2^(x1+1)-1 (just summing all powers of 2 from 1..x1) but y>=2^y1>=2^(x1+1)>x, a contradiction.
... z = (x+y+1)(x+y)/2 + y - but you have to sort x,y first to get the order independence you wanted. This function is famously used in the argument that the set of integers and the set of rationals have the same cardinality.
`2^x & 2^y ...is the & a bitwise operator...???? That would produce a unique ID? That would be very interesting, is that provable?`
Yes, & is bitwise and. It's just treating your players as a bit vector. It's not so much provable as a tautology, it is exactly the property that players x and y are present. It's not _useful_ tho because the field size you'd need to hold the bit vector is enormous.
As for the problem...it sounds bloom-filter adjacent (a bloom filter of players in a hand would give a single id with a low probability of collision for a set of players; you'd use this to accelerate exact checks), but also like an indexed many-to-many table might have done the job, but all depends on what the actual queries you needed to run were, I'm just idly speculating.
Also, if f(x,y) = x^2+y^2+( (x/y) / (x^2+y^2) ) then f(2,1) is 5.2 and f(1,2) is 5.1? - this is how I noticed the mistake. (the other reduction gives the same answer, 5.4, for both, by symmetry, as you suggest)
There's a simpler solution which produces integer ids (though they are large): 2^x & 2^y. Another solution is to multiply the xth and yth primes.
I only looked because I was curious how you proved it unique!
In no particular order:
- the original boids code didn't cap the magnitude of acceleration after adding all the contributions; it added the contributions _by priority_, starting with separation, and if the max acceleration was exceeded it didn't add the others
- the max acceleration was decided by adding the _magnitudes_ not vectors of components, so the cohesion vector and the separation vector wouldn't cancel out - separation would win. I think this is why both this and the p5js one form very tight clumps which later "explode". That's this bit of the code (from https://www.red3d.com/cwr/code/boids.lisp):
;;
;; Available-acceleration should probably be 1.0, but I've set it a little higher to
;; avoid have to readjust the weighting factors for all of the acceleration requests.
;;
(vlet* ((composite-acceleration (prioritized-acceleration-allocation 1.3 ;; 1.0
avoid-obstacles
avoid-flockmates
velocity-matching
centering-urge
migratory-urge
course-leveling
course-damping))
- this implementation, unlike the p5js version it's based on, caps the acceleration _twice_ - before adding the contributions and after https://github.com/LauJensen/practical-quadtree/blob/7f5bdea... (this is the 'after' bit)- the original had different radii for different components (the separation threshold was 4, the cohesion, alignment thresholds were 5)
- both the clojure and p5js versions use the same strength for cohesion, separation, and alignment. In the original, separation is much stronger (1, vs 0.3 for cohesion and 0.23 for alignment). Again this might explain the tight clumps.
I've not yet mucked with the rules to see if the behaviour recovers, but the p5js version makes it easy to hack on https://editor.p5js.org/pattvira/sketches/v_tmN-BC5 - as a first change, in draw() in sketch.js change the print statement to this:
print(frameRate(), boids.length);
if (frameRate()>50) {
boids.push(new Boid(random(width), random(height)));
} else if (frameRate() < 40) {
boids.pop()
}
... and the two loops below it to use 'boids.length' not 'num'. Then the thing will dynamically adjust the number of boids to give you an acceptable framerate.Aside: both the p5 and clojure versions do preserve the typo of 'seperation' from the Craig Reynold's code tho ;) ... I have to wonder if that's like 'referer' and now we have to spell it that way in a boids context.
https://gist.github.com/bazzargh/e1d2e2718af575a03206114a291...
So a couple of hours later I'd written a script that does transcription based editing: on the first pass it grabs a timestamped transcript and a plain text transcript for editing; you edit the words into any order you like and a second pass reassembles the video (it's just a couple of hundred lines of python wrapping whisper and ffmpeg). It also speeds up 4x any silences detected that sit within retained sequences in the video.
Matching up transcripts turns out to be not that hard; I normalise the text, split it, and then compare to the sequence of normalised words from the timestamped transcript. I find the longest common sequence, keep that, then recurse on the before/after sections (there's a little more detail, but not much). I also sent the transcription to ffmpeg to burn in as captions, because sometimes it makes the audio choppy and the captions make it easier to follow.
I know, tools have been doing this for years now. I just didn't have one to hand, and now I do, and I couldn't have done this without whisper.
https://www.youtube.com/watch?v=8YeXyUNCnhM
I'd imagine that the 3d-printable models could be imported into blender, so it's 'just' adding balls and motion to the lift.
That's the kind of thing I use dithering on BBC Micro because it's such a cheap technique, here in a thread directly comparing to Bayer-like dithering https://hachyderm.io/@[email protected]/11200546490... or here faking the Windows XP desktop https://hachyderm.io/@[email protected]/11288651013...
But in case _I'm_ messing up here, I'll bow to your expertise: libuuid uses /dev/random, which uses a CSPRNG (ChaCha20) with entropy ingested via Blake2 from whatever sources the system can get, right?
We did actually do a bunch of before/after testing showing the collision rates (zero after), and I believe the cookie in question has been replaced with a third party identity system in the intervening years - but if we did it wrong, I'd like to know.
Whenever we deployed new nginx configs, those servers would roll out and restart, getting _similar_ time() results in the seed. But the individual nginx workers? Their seeds were nearly identical. Not every call to the PRNG was meant for UUIDs, but enough were that disaster was inevitable.
The solution is to use a library that leverages libuuid (via ffi or otherwise). A "native lua" implementation is always going to miss the entropy sources available in your server and generate clashes if it's seeded with time(). (eg https://github.com/Kong/lua-uuid, https://github.com/bungle/lua-resty-uuid)