13 ms·
I Made a Self-Quoting Tweet
- pomber 6y agoI made two mutual-quoting tweets that run the toad oscillator from the Game of Life https://twitter.com/mauritscorneIis/status/1266834697256087552 https://twitter.com/mauritscorneIis/status/12668346972560875...
- OisinMoran 6y agoThis is actually much cooler in my opinion! I love your progress indicator too. How did you go about doing this one? And what are the four parts you are referring to? Do you think a 3-cycle is doable?
- pomber 6y agoAFAIK the tweet id has four moving parts, a datacenter id, a worker id, a sequence number, and a timestamp (original poster mentions three). 3-cycle is definitely doable, it may take a week posting 100 tweets per hour or something like that. The biggest problem is twitter blocking the account (even when you stay under the API rate limit). Code is here if you are interested, I ran it using GitHub Actions: https://github.com/pomber/conway https://github.com/pomber/conway
- OisinMoran 6y agoOoh that's very interesting! I've just presumably subsumed one of those into one of the others. Seems like there's a cycle-3 game of life creature called a pulsar that would be perfect for this: https://en.wikipedia.org/wiki/Conway%27s_Game_of_Life#/media/File:Game_of_life_pulsar.gif https://en.wikipedia.org/wiki/Conway%27s_Game_of_Life#/media...
- twodave 6y agoThey don't mention a datacenter id in the docs, but I wouldn't be surprised if it's changed since the docs were written: https://developer.twitter.com/en/docs/twitter-ids https://developer.twitter.com/en/docs/twitter-ids I implemented a .NET port of Snowflake where I work--being able to work with data without ever having to worry about an identity column is extremely freeing.
- karlding 6y agoThe Data Center ID has been in Snowflake IDs for a while. It's present in the original version of Snowflake that Twitter open sourced back in 2010 [0]. Looks like it was added in this commit [1] from August 2010. [0] https://github.com/twitter-archive/snowflake/blob/snowflake-2010/src/main/scala/com/twitter/service/snowflake/IdWorker.scala#L92 https://github.com/twitter-archive/snowflake/blob/snowflake-... [1] https://github.com/twitter-archive/snowflake/commit/ba2e67ea1cc3321bc57ab4fa013800df96d30f44#diff-a8e6c5c455239de42d57b7230c4657ab46740c301b89c4aece2496f05b609dcf https://github.com/twitter-archive/snowflake/commit/ba2e67ea...
- s_m 6y agoMy personal fave. https://twitter.com/SarnatsPointer/status/253602578695344128 https://twitter.com/SarnatsPointer/status/253602578695344128
- SamBam 6y agoI think I'm missing a tweet of context. I get that they quoted their own url, like in the top article, but then the account replies "Ugh, busted :(" to someone who has their tweets protected.
- yellowstuff 6y agoAs I recall, the trick is that you can post a tweet, grab the URL, then if you edit it quickly enough it won't show up as edited.
- SamBam 6y agoBut you can't edit tweets. Any apps that offer "editing" either just impose delays, or easy ways to delete-and-tweet-again in one step, no?
- s_m 6y agoIt's just Twitter engineers goofing.
- alblue 6y agoTo save people some time, here’s the tweet: https://twitter.com/quinetweet/status/1309951041321013248 https://twitter.com/quinetweet/status/1309951041321013248 In essence, the approach was: * Find out what the tweet id is of a recent tweet * Find out what a tweet is shortly after * Estimate the rate of new tweets appearing * Publish a tweet with a reference to a tweet with a now+guess id The write up is well done and interesting but a little long winded.
- MaxBarraclough 6y agoI'm seeing this: > This is not available to you
- mulmen 6y agoThat's a common Twitter bug, just try again a few times.
- chris_wot 6y agoNope, I'm assuming that's someone on Twitter noticing what he did and hiding it.
- gowld 6y agoOr the software just doesn't handle it.
- tyrust 6y agoWhy the speculation from you and the parent? You can literally click on the Tweet and see that it works fine.
- LeifCarrotson 6y agoWhen I click on the tweet, it shows the URL in the text and where the quoted inset should be it instead reads "This Tweet is unavailable." The parent and grandparent are speculating because it works for them but not for others here.
- bazzargh 6y agoPreviously (2018): https://news.ycombinator.com/item?id=16978913 https://news.ycombinator.com/item?id=16978913 Previously (2009): https://twitter.com/selfrefer/status/3128391843 https://twitter.com/selfrefer/status/3128391843 https://twitter.com/spoonhenge/status/2878871344 https://twitter.com/spoonhenge/status/2878871344 https://news.ycombinator.com/item?id=743144 https://news.ycombinator.com/item?id=743144 (last 2 were self-referential at the time, but then twitter changed the rules for linking; I recalled seeing these at the time)
- omoikane 6y agoAnother one from 2016: https://twitter.com/quine_tweet/status/777962342789152768 https://twitter.com/quine_tweet/status/777962342789152768 https://mametter.hatenablog.com/entry/20160920/p1 https://mametter.hatenablog.com/entry/20160920/p1
- OisinMoran 6y agoOh wow—I'm even less original than I thought! They even had the same name! Thanks for these omoikane and bazzargh (and the others both here and on Twitter), I'll have to add an addendum to the blog post with links to all the other fun related examples.
- clashmeifyoucan 6y agoInteresting, I wondered if the same can be done on hn. Likely easier since the IDs appear to be sequential. But one can simply edit their post to point to the URL too if they wanted, so it defeats the fun of the exercise.
- wolfgang42 6y agoOn a related note, from 2012: “Show HN: This up votes itself” https://news.ycombinator.com/item?id=3742902 https://news.ycombinator.com/item?id=3742902
- olalonde 6y agoUnfortunately, I wasn't allowed to keep the karma :(
- quickthrower2 6y agoThat surprising to me. I think you should keep it as you did something novel. At the very least as a 'bug bounty'.
- kemitche 6y agoIn a similar vein, Reddit's "self" posts were originally formed by users submitting posts linking to themselves, by guessing the URL for the next submitted post.
- showerst 6y ago> And for anyone at Twitter who was depending on the network of tweets being a Directed Acyclic Graph, I'm so terribly sorry. I love the idea that there's someone out there with code that resolves retweet chains recursively, who's about to be in for a great head scratcher of a bug.
- suprfsat 6y agoThey will have to reckon with the fifty thousand-long chain at https://twitter.com/every_peano https://twitter.com/every_peano
- OisinMoran 6y agoI actually just came across this account recently and was tempted to make some sort of reply bot on whether they were prime or not. I was also trying to find some of the "funnier" numbers to see if they had a disproportionate number of likes (certainly not to like them myself...) but gave up after realising they had almost 50k tweets.
- deleted 6y ago[deleted]
- coolgeek 6y agoSo this brings up a question I've long had, but didn't want the distraction of researching: Is there an easy way to get to some point in a user's timeline? e.g. first tweet, or November 1, 2020?
- anonytrary 6y agoRecursion isn't the problem. Not keeping track of seen tweets is the problem. Recursion can be used to detect cycles and traverse a cyclic graph in a way that doesn't blow up.
- eyelidlessness 6y agoBut you wouldn’t do that if your assumption is that the graph doesn’t cycle. Edit: child comments are correct and I regret my oversight
- MH15 6y agoCongratulations! I tried a similar approach based on the original attempt at this challenge (https://www.spinellis.gr/blog/20090805/ https://www.spinellis.gr/blog/20090805/), but gave up after running it for a few hours. Very cool that you were able to achieve this. I'd thought it was impossible while using the original method given how many more tweets there are now then in 2009.
- forgotmypw17 6y agoPosted at 4:20 PM :)
- Serious_Cheese 6y agoLooks like someone is working really hard. /s
- OisinMoran 6y agoFunny you mention that [0] as I'm actually in Ireland so it was 9:20 PM for me. I presume you're on the US East Coast? Being able to do one of these at a specified minute would be impressive though (of course you could just _only_ try during that minute every day and you'd eventually get it). [0] I had to first check that you were referring to the main tweet and not this post because I actually posted this on HN yesterday to crickets so was happily surprised to find it re-upped today and so undeservedly close to the AlphaFold news.
- nacs 6y agoI actually thought it was intentional also and I think every east-coast US person is going to think the same :) Just makes your tweet look even more "1337".
- nneonneo 6y agoFWIW, I also did this back in 2019: https://twitter.com/nneonneo/status/1177641328705851392?lang=en https://twitter.com/nneonneo/status/1177641328705851392?lang... I don't know of a better way to do this other than some analysis of the IDs + clever bruteforce. If I remember correctly, I used just over 500 tweets to do it.
- OisinMoran 6y agoThis is excellent, hats off to you! I love your creative lead-in as well, mine is bland in comparison but I'm somewhat glad to be off the hook for destroying the DAG as all these prior examples are showing.
- kyle-rb 6y agoA bit annoying that Twitter's quote tweet UI sort of breaks. Maybe two mutually recursive tweets would show up better :)
- pomber 6y agoThey also break https://twitter.com/mauritscorneIis/status/1266834697256087552 https://twitter.com/mauritscorneIis/status/12668346972560875...
- ehsankia 6y agoSpecifically, it seems like it only shows if the ID of the quoted tweet is stricted lower than that of the tweet itself, which basically solves any sort of recursion and acyclic issue, as well as trying to quote non-existing future tweets.
- User23 6y agoWriting quines is one of my favorite things to do in a new language. That it is always possible is a consequence of the recursion theorem[1], which is, in my opinion, one of the coolest results in basic computing science. I personally find it far more interesting than the halting problem. [1] https://en.wikipedia.org/wiki/Kleene%27s_recursion_theorem https://en.wikipedia.org/wiki/Kleene%27s_recursion_theorem
- progval 6y ago> I personally find it far more interesting than the halting problem. I agree. Another cool theorem related to the halting problem is the Rice theorem, because it's a really powerful thing to say that every semantic property on programs is either 1. always true 2. always false, or 3. undecidable. It's an absolutely uncompromising theorem.
- chrisshroba 6y agoIt seems like Twitter knows not to show the quoted tweet in this case, but I wonder if it would show it if it were a 2-cycle.
- jdmichal 6y agoAt first I thought a two-cycle would be incredibly hard. But I suppose you really only have to adjust the timestamp to forward-guess the next ID. You would know the ID of the first one. It would definitely help narrow down the algorithm used for preventing the recursion.
- ehsankia 6y agoHigher up someone posted an example of that and it seems like no: https://news.ycombinator.com/item?id=25259046 https://news.ycombinator.com/item?id=25259046 Only one of the two shows, as expected it only shows if the ID of the quoted tweet is smaller than that of the tweet itself. This also means that in general, you can't quote a non-existing future tweet hoping it'll be something cool in the future. Well you can but the preview won't work.
- hawktheslayer 6y agoI especially enjoyed the M.C. Escher Drawing Hands background you chose for your Twitter account.
- OisinMoran 6y agoThank you! It's quite apt isn't it? I'm a really big fan of his and have a print of his Tetrahedral Planetoid on my wall! Although the self-drawing hands are probably more apt for this even more Escher themed one that I've since been made aware of from the author in the comments here: https://twitter.com/mauritscorneIis/status/1266834697256087552 https://twitter.com/mauritscorneIis/status/12668346972560875...
- iou 6y agoWow
- 7786655 6y agoWas able to pull this off on 4chan, kinda: https://boards.4chan.org/b/thread/841284283 https://boards.4chan.org/b/thread/841284283
- Kye 6y agoThe quote tweet drag has evolved into the quote tweet airfoil.
- jere 6y agoI'm pretty impressed that it took less than 1000 attempts. It would still be feasible even it were several orders of magnitude harder. This twitter project I made (predicting celebrity deaths) took about 250k tweets over the course of a few months: https://twitter.com/ghastly_omens https://twitter.com/ghastly_omens
- OisinMoran 6y agoThis is great! That's not 250k tweets per death, right? Did you do the classic make a lot of predictions then delete the wrong ones? How did you select the celebrities? Would be interesting to do something with actuarial tables here.
- jere 6y agoYes, delete the misses. 250k total. About 700 celebrities. I was predicted the day of death too, so each required 365 tweets. I did a combination of scraping IMBD + manual selection plus filling in the details. The whole process could probably be automated and I regret not doing that. It would be wild to see this in 2020... I did consult actuarial tables mainly to decide how many of each age to include. With that few candidates, it wasn't wise to focus on people in their 20s and 30s obviously because it's very likely all of them would have survived. A few more details here: http://jere.in/i-predicted-23-celebrity-deaths-in-2017-then-my-predictions-came-true http://jere.in/i-predicted-23-celebrity-deaths-in-2017-then-...
- b0rsuk 6y agoThis is nerd humor at its best.
- kcimc 6y agowow, i did this in 2015 https://twitter.com/kcimc/status/619889224909750272 https://twitter.com/kcimc/status/619889224909750272 https://gist.github.com/kylemcdonald/da198988061dce54bae6a674a0aba450 https://gist.github.com/kylemcdonald/da198988061dce54bae6a67... it's great to see all the examples in this thread going all the way back to 2009! i had no clue this was a thing.
- OisinMoran 6y agoBelated congratulations! This is really cool and it's always interesting to see the different approaches people take, so especially valuable to share the code. I'll definitely put this one in the addendum. The hardcoded ID in your code was added after it was generated just before deleting everything else, right? Otherwise I'm stumped.
- kcimc 6y agoThanks! I think you are correct, after the successful completion I added that statement as a safety before deleting all other previous attempts. Reading this code again it really could have used the data more efficiently to predict the correct ID faster, but if I remember correctly it didn't take very long to run so I never made another attempt.
- deleted 6y ago[deleted]
- SilasX 6y ago>Fundamentally the challenge is just correctly guessing what ID a given tweet is going to get, then appending that onto the URL for our profile and tweeting it. Reminds me of that program for referring to a future git commit, which operates on the same principle: iterate through guesses of the future commit’s hash prefix until you have a (long enough prefix-)collision. https://github.com/hundt/git-time-travel https://github.com/hundt/git-time-travel
- CGamesPlay 6y agoI saw this previously here. https://news.ycombinator.com/item?id=25261515 https://news.ycombinator.com/item?id=25261515
- w_for_wumbo 6y agoTom Scott made a video about this last time this happened: https://www.youtube.com/watch?v=zv0kZKC6GAM https://www.youtube.com/watch?v=zv0kZKC6GAM
- j-james 6y agoSimilarly, a Hacker News post from 2012: https://news.ycombinator.com/item?id=3742902 https://news.ycombinator.com/item?id=3742902
- jugg1es 6y agoEntertaining read - thanks!
- deleted 6y ago[deleted]
- valauran 6y ago"shell=True"? Sloppy, mate, sloppy. Get in the habit of never doing that lest you find yourself vulnerable to a shell command injection attack one day.
- madrox 6y agoThis reminds me of when we were counting collisions in tweet IDs years ago at my old job (social media agency). We used the collision rate to estimate the total volume of tweets going through the system. We also determined ID assignment was determined by three servers in a round robin load balancer and load was distributed based on modding of a 32 bit integer, so two servers were getting more load than the other since you can’t evenly divide a 32 bit integer by 3. They fixed that bug after a couple months of observation. I forget if we let Twitter know or not. I love stuff like this.
- dumbfounder 6y agoNice. But you didn't guess someone's tweet id, the name in the url is actually not used, these three links actually all point you to the same place because they have the same tweet id: https://twitter.com/quinetweet/status/1309684114073808896 https://twitter.com/quinetweet/status/1309684114073808896 https://twitter.com/gzhdigital/status/1309684114073808896 https://twitter.com/gzhdigital/status/1309684114073808896 https://twitter.com/donkeytron200000/status/1309684114073808896 https://twitter.com/donkeytron200000/status/1309684114073808...
- nacs 6y agoThe author is aware of this and has a whole section in the blog post about it..
- dumbfounder 6y agoMy bad! I missed the one sentence where he says that. And I even read it twice... need more caffeine.
- nacs 6y agoThere’s 3 paragraphs about it :) (the whole section with the “Shit gets weird” heading is about how only tweet IDs matter).
- deleted 6y ago[deleted]
- c-c-c-c-c 6y agoThis used to be a pretty cool trick on imageboards to quote future posts. Many lulz on 4chan back in the day