Hacker Newsnew | past | comments | ask | show | jobs | submit | stevelosh's commentslogin

If you were around in the 80's and 90's you might have already memorized the prime 8675309 (https://en.wikipedia.org/wiki/867-5309/Jenny). It's also a twin prime, so you can add 2 to get another prime (8675311).


My other favorite fun fact about this number (other than this new prime info which I am excited to have learned) is that in almost every store I’ve tried it, someone has used that (along with a local area code) as the phone number for a store loyalty card.

I’m a Bay Area guy, so if you’re ever at Safeway and need to get the discount without giving up your personal info, 415-867-5309 has got ya covered ;)


> someone has used that (along with a local area code) as the phone number for a store loyalty card.

Usually because for far too long, noisy retailers wanted a "phone number" upon checkout (even if one was paying cash -- Radio Shack was an especially bad one back in the day). For those who didn't want to get yet more telemarketing calls, repeating "Jenny's number" [1] from the song was a way to "just buy" whatever it was you wanted. The minimum wage cashier didn't care, but the cash register demanded "a number". So giving the cashier Jenny's number worked.

This has largely faded now that they can track everyone via one's credit card numbers.

[1] https://en.wikipedia.org/wiki/867-5309/Jenny


Does contactless payment help at all? I know it uses a different card number, but I’m not sure if it’s a rotating number.


There's a conceptually linked concept called the PAR (Payment Account Reference) which some payment systems return.

You can't transact with it directly, but theoretically it refers to the same payment instrument whether you accessed it by the 16-digit PAN on the card, a mobile wallet that generates a new dPAN each time, or a token that corresponds to a secure vault platform.

It's useful for things like transit payments where someone might tap their card when entering the train and their phone when exiting, and they need to treat them as equivalent for "fares for a single traveller/card can be no more than $x per day"


If a given retailer gets the same number off your card each time you do contactless, then that retailer /could/ track you via that number.

If all retailers get the same number, then they can each track you, and correlate your purchases between themselves.

Note, there just needs to be /some/ constant number from whatever comes through via contactless, the number does not have to be the magic numbers that post the sale to the card.


It doesn't rotate. Also it looks like if you use the contactless method built into the actual card it doesn't use a different number.


You can use the number with your local area code just about anywhere at the pump to get a gas discount as well (a common loyalty reward program benefit).


I was around in the 80s, but this is awesome new information!


lol i didnt realize this was a prime number but i re-use this number any time i need a fake phone number in some sample/example data (im pretty certain nobody gets the reference, or takes the time to read it)


I do the same thing! Downside is every time I read my tests I get that song stuck in my head. Upside is it's a joy for some people when they discover it in the test


That quote is from https://berthub.eu/articles/posts/immune-system/

Could have also seen it via https://jsomers.net/i-should-have-loved-biology/ which quotes it directly


Thanks!


I've been using it during the beta and plan on paying for it once they start charging. Previously I had tried switching to DuckDuckGo, but found myself using !g half the time because I knew the DDG results would be garbage compared to the Google results.

I haven't found Kagi's results to be significantly better than Google's results, but unlike DDG they're not hugely worse than Google. It's all the extra stuff that makes me want to use Kagi instead of Google:

* Ability to banish sites from results forever. E.g. I never want to see the Concordia Lutheran High School's website when I search for things in the Common Lisp HyperSpec with clhs.

* Ability to weight sites higher. E.g. there are two mirrors of the Common Lisp HyperSpec that appear in results, one at http://clhs.lisp.se and one at http://www.lispworks.com/documentation/HyperSpec/. The lisp.se mirror is hilariously slow for me (5-10 seconds to load) while the lispworks one is instant. Google always ranks lisp.se first which tricks me into clicking it and wasting my time. Kagi lets me weight that site lower so the lispworks site comes first. Banishing lisp.se would also work, but just upweighting it means I can still find it if the other mirror ever goes down or something.

* I reported a minor bug to Kagi and they fixed it within a few days. I doubt that would happen with Google.

* Supports DDG-style bang queries, which I use occasionally.

* No goddamn ads/tracking (I use uBlock Origin, but it's the principle of the thing). I've almost entirely de-Googled my life at this point (Youtube is the only holdout for me).

So it's not that it gives better results than Google, it's that the results aren't any worse and the extra quality-of-life features are really nice.


Basically everything you wrote above is what I'd say - except I haven't submitted a bug report or feedback to Kagi...

Basically, when I used DDG, I found myself frequently using !g to search Google instead. For Kagi, I haven't really found myself doing that anywhere near as often.

So yeah, you have to fill out a survey (took a couple of minutes and I got an invite the same/next day), so it's not the easiest to recommend right now. Two weeks and they go free+premium according to an email today.

I think it's just that I, like a lot of HN, have been getting super disillusioned with Google lately - and most importantly the preponderance of obviously machine-generated zero-value spam pages for everything I search for - so I was desperately trying to find something better. DDG constantly disappointed for my searching. Kagi doesn't do that. So I'm happy. $10/month happy? I'm not sure.

Generally, there's a growing group of people who are feeling about Google the way a lot of us felt about Facebook 10+ years ago - it's time to stop relying on it and maybe cut it out entirely (and yes, I know there are plenty of people who felt this way about Google for years already). So I pay for Fastmail now. I guess I'll likely be paying for Kagi now. Quality is getting expensive, but at least I'm paying with my money rather than my data.


>* Ability to banish sites from results forever.

And for this I will HAPPILY pay $10 a month. It's the most freaking annoying thing about Google. Obvious link farm sites with zero way to remove them.


Alternate source, with fixed formatting: https://gist.github.com/mjdominus/3841427


Common Lisp isn't that esoteric!

    (defun fun-reader (stream arg)
      (declare (ignore arg))
      (read-delimited-list #\⸨ stream t))
    
    (set-macro-character #\⸨ (get-macro-character #\) nil))
    (set-macro-character #\( #'fun-reader)
    
    (defun square (x⸨
      (* x x⸨⸨
    
    (square 10⸨
    ; => 100


NES tetris and modern tetris are VERY different games. NES tetris didn't have hard drop, hold, SRS, 7-bag randomizer, or multiple piece previews, all of which are in all modern guideline tetris games and can help you go faster. Tetr.io and Jstris go even further than guideline tetris: there's no line clear delay and you can set DAS/ARR[1] to anything you want, which lets you go even faster.

The bottleneck isn't the keyboard input. Pretty much all top players use ARR 0 and 2-step finesse[2] (or something close to it), which means you can position any piece where you want in 2 keystrokes at most, plus 1 more to hard drop it. And certain stacking styles (e.g. 6-3 stacking[3]) lend themselves well to not requiring the full 2 keystrokes pretty often, so in practice you end up with ~2.6 keys per piece instead of 3. A typical DAS for a pro player (e.g. someone like Firestorm) might be somewhere around 70ms. So if we roughly estimate 100ms average per piece (70ms to DAS, with some extra for the sometimes-needed rotation and hard drop), that would be ~10 pieces per second, which is well over the ~6.5 PPS in the record sprints.

The physical pressing of the keys also isn't really a bottleneck. Keys per second in the top sprints is ~16. I just mashed my movement/rotation keys into `time | wc -c` and got ~35 KPS after 2 beers, and I don't even have a particularly gaming-focused keyboard.

The bottleneck also isn't reaction times. Someone might trot out a hastily-googled 250ms as a typical human reaction time and claim 100ms per piece isn't possible, but good players aren't reacting to each piece as it comes -- they're using the previews (and hold) to react to the piece that's coming 4-5 steps in the future, which is closer to a second away.

It's really just about how fast you can process the upcoming queue and still stack cleanly.

[1]: https://harddrop.com/wiki/DAS [2]: https://four.lol/mid-game/finesse [3]: https://harddrop.com/forums/index.php?showtopic=2985


Wow, thank you for this very thorough response. I also had to look up SRS [0] as a key concept. Really impressive the way that all the different piece and placement combinations have been broken down in a comprehensive way.

I can see now how this becomes a much more organized and deterministic game with these changes, allowing players to plan their moves and inputs precisely so that they are barely need any visual feedback to confirm the state of the board, allowing them to queue up multiple moves in rapid succession.

Of course I’m sure it takes a lot of training and practice as well!

0: https://tetris.fandom.com/wiki/SRS


WR for 40L is 14.9 by Reset[1] last I heard. 15 is definitely humanly possible.

[1]: https://twitter.com/jstrisgame/status/1424548438096683011


If your goal is to force a touch to decrypt passwords, https://www.palkeo.com/en/blog/perfect-password-manager.html works. You can keep the GPG private key on a Yubikey and require a touch to decrypt.


The user might copy a block of text with multiple URLs, all of which get pulled out by the grep.


The golang one also silently drops rows.Err() on the floor.

https://golang.org/pkg/database/sql/#Rows


Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: