[HN Gopher] Show HN: I Made a Magic Trick
       ___________________________________________________________________
        
       Show HN: I Made a Magic Trick
        
       Author : croshan
       Score  : 103 points
       Date   : 2022-04-25 16:26 UTC (6 hours ago)
        
 (HTM) web link (cyrusroshan.com)
 (TXT) w3m dump (cyrusroshan.com)
        
       | acomjean wrote:
       | I tried it. Even though a magician never shares (excepting Penn &
       | Teller) want an explanation though..
       | 
       | It seems to be pasting different things all over the place. I'm
       | not sure how the "google doc card" past to just pasting a url
       | thing happened..
        
         | croshan wrote:
         | Haha, now that part is just sleight-of-hand. When you click
         | (technically, mousedown) on the google doc link, we copy a new
         | item to the pasteboard, so now instead of {"html": joker_image,
         | "plaintext": card_you_picked}, it's {"html":
         | joker_image_with_url_paste_hint, "plaintext": twitter_url}.
         | 
         | For how you can save multiple mime types in the same paste
         | entry from javascript, the w3c draft is:
         | https://w3c.github.io/clipboard-apis/#clipboarditem
        
           | acomjean wrote:
           | Thanks. So its loaded and ready to go by the time you click
           | the google doc link.
        
       | thedg wrote:
       | IT'S GENIUS
        
       | mdb31 wrote:
       | I guess this is supposed to be some Jabbascript trickery, but for
       | me, a 'paste' action in the second text field just yields...
       | blankness...
       | 
       | Which is a pretty good trick, I have to admit, exposing the
       | nothingness of life. Kudos!
        
         | binwiederhier wrote:
         | Yeah sadly it was the same for me (Firefox). I was hoping for a
         | cool trick.
        
         | [deleted]
        
         | klyrs wrote:
         | I got                   y+dy, x+dx
         | 
         | which... um... was the contents of my clipboard before I
         | attempted the trick. Probably firefox doing the right thing in
         | a private session.
        
         | drewzero1 wrote:
         | Me too. Attempting to paste anywhere else does the same, as a
         | reflection of the inescapable futility of existence.
         | 
         | Or it could just be that I'm using Firefox? Seems to work for
         | me in Chrome. :)
        
         | postalrat wrote:
         | I use firefox and when I pasted my previous clipboard I figured
         | the "trick" was getting my clipboard.
        
           | noduerme wrote:
           | Just checked... nothing goes over the wire when you paste, at
           | least.
           | 
           | Seems the error is:
           | 
           | *Uncaught (in promise) ReferenceError: ClipboardItem is not
           | defined*
        
       | gus_massa wrote:
       | Now way I'm opening a new Google Doc. I'm just too paranoid!
       | 
       | I tried pasting the text in notepad anyway. :)
       | 
       | Also, in the last page, the emoji in the middle looks like a
       | square with a question mark in my (old) computer.
        
         | croshan wrote:
         | Fair enough! If you have a Mac, you can try the TextEdit tool
         | (which also supports rich text), as an alternative to Google
         | Docs.
        
       | TehShrike wrote:
       | doesn't seem to work in Firefox :-x
        
         | domh wrote:
         | Seems like the ClipboardItem API is currently behind a flag on
         | Firefox: https://developer.mozilla.org/en-
         | US/docs/Web/API/ClipboardIt...
        
           | smegsicle wrote:
           | reading from clipboard should be one of those per-page
           | permissions like grabbing video
        
       | MPSimmons wrote:
       | Doesn't work on Mac Firefox, FWIW
        
       | kamilm wrote:
       | A clever way to get a Twitter follower :) You win!
       | 
       | BTW we use a similar mechanism at websktop.com (online bookmarks
       | manager), when you copy icons:
       | 
       | - if pasted into our app, all bookmark properties are preserved
       | (text/html + "data- " attribute)
       | 
       | - if pasted into web app like Slack, you get a nice HTML-
       | formatted unordered list of URLs with titles (text/html)
       | 
       | - if pasted into text editor, you get a simple bullet-point list
       | (text/plain)
       | 
       | Unfortunately handling other MIME types gets troublesome. Still,
       | you can do a lot of cool stuff with just text/plain & text/html.
        
       | mproud wrote:
       | Underwhelming for me.
       | 
       | On my iPhone I opened Google Docs and started a new document, per
       | the instructions, and pasted. It pasted a link to their Twitter.
       | 
       | Maybe Desktop works better?
        
       | alekratz wrote:
       | This doesn't seem to work in Firefox, tale as old as time.
        
         | Terry_Roll wrote:
         | This (https://www.d52.io) is a variation which does work in
         | Firefox. Trust me!
        
           | shabier wrote:
           | I'm so disappointed, you win.
        
       | croshan wrote:
       | Hi HN! This weekend, I made a magic trick that you can try out in
       | your browser.
       | 
       | Works best on desktop. Also, for those who don't like it, Google
       | Docs not required--JIRA comments or most other WYSIWYG editors
       | will also work.
       | 
       | Hope you enjoy it!
        
         | rasengan wrote:
         | It worked, and I thought this was cool. To save people time, it
         | would be great if you gave an explainer on how it works xD
        
           | croshan wrote:
           | Fair point!
           | 
           | The way it work is this: you can copy multiple filetypes to
           | the clipboard. So here, I copy a "text/html" and a
           | "text/plain". When you paste to Google docs, it reads
           | "text/html", and outputs a div that I've reconstructed to
           | look like a joker card. When you paste to most other places
           | (your address bar, a `<textarea>` element, terminal, etc.,),
           | you get the plaintext fallback. So you can have two entirely
           | different outputs, based on where you paste!
           | 
           | MDN surprisingly has no examples/API on this (the only time
           | I've found it to be the case), so I instead link you w3c for
           | reference: https://w3c.github.io/clipboard-
           | apis/#clipboarditem
        
             | captn3m0 wrote:
             | Could do something with a text/image flip as well?
        
             | rasengan wrote:
             | That's really cool - I did not know that; and thank you for
             | sharing!
        
             | byecomputer wrote:
             | Here you go: https://developer.mozilla.org/en-
             | US/docs/Web/API/ClipboardIt...
             | 
             | Also note that the ClipboardItem API doesn't work in
             | Firefox unless specifically enabled :^(
             | 
             | I guess I'm okay with that, considering the API could be
             | used for things way less fun than your magic trick
        
               | croshan wrote:
               | Thanks! After I wrote that, I was thinking "more likely I
               | missed it, than that this is the _one_ example where it
               | doesn't exist" :P
        
             | uziiuzair wrote:
             | This explanation just made things so much cooler. I wasn't
             | aware of the clipboard api. (Since I never needed to use
             | it)
             | 
             | In my experiment, I assumed that you did another "copy" at
             | some point which printed the twitter URL. I came to this
             | assumption when I pasted into Sublime Text and still saw my
             | card, but pasting into the Address field changed the output
             | to the twitter URL.
             | 
             | Kudos! This was pretty cool!
        
             | kaveet wrote:
             | Clever! I thought I recognized that name from somewhere
             | :wave:
        
         | [deleted]
        
         | justusthane wrote:
         | MS Word also works :)
        
       | j_leboulanger wrote:
       | Not sure what it is supposed to do
        
         | dvh wrote:
         | 0. You visit a webpage with expectation to see a magic trick.
         | 
         | 1. When you click on a card, there is no copying involved. But
         | it knows on what card you clicked.
         | 
         | 2. Pages asks you to paste the card you think you have in
         | clipboard. You press Ctrl+V, page receives content of your
         | clipboard and instantly replaces textarea content with card you
         | clicked on. This makes you think that you have that card in
         | your clipboard. Your real clipboard with your bank password you
         | used 10 minutes ago is sent to the server.
         | 
         | 3. Your clipboard is replaced with different card (adding text
         | to clipboard is allowed and easy in javascript, it's reading
         | clipboard what is forbidden).
         | 
         | 4. Pages asks you to open some text editor (e.g. google doc)
         | where you paste the card, seeing new card. This makes you thing
         | that your card was replaced with joker card and it is some kind
         | of lame magic trick.
        
           | Kiro wrote:
           | You missed step 5 where it replaces it with the Twitter URL
           | only when you paste it in the URL bar from Google Docs (but
           | continues to be the card when you paste it in the doc). How
           | does that work?
        
       | rosmax_1337 wrote:
       | Good trick, had me fooled and feeling very paranoid! :D
       | 
       | I appreciate that you took the time to explain how it works in
       | another comment in this thread.
        
         | croshan wrote:
         | Thank you! Had to implement something related to this at work,
         | and thought "huh... what else can I do with this?" :P
         | 
         | I think the real magic is in the last step, when you're on a
         | generally-trusted 3rd party website (Google docs), and your
         | paste output is different in the doc from the URL.
        
       | jbverschoor wrote:
       | Before I pasted my clipboard, I checked what I was gonna paste,
       | as this magic trick could be something to steal you clipboard..
       | 
       | It's funny.. I pasted it in a new Pages document.
        
       | 0des wrote:
       | Is the magic trick that after clicking the card to copy, when I
       | go to paste it has magically disappeared? Because I dont get
       | anything.
       | 
       | Edit: copied manually, dont have a Google account, so can't go
       | further.
        
         | [deleted]
        
       | freeCandy wrote:
       | Nice! I had no idea about the doc.new URL
        
       | ColinWright wrote:
       | I click on a card, hit "paste" in the window, and get text I've
       | previously copied.
       | 
       | I'm guessing it's not working ... it's certainly not doing what I
       | expect, even at that stage.
        
         | croshan wrote:
         | Hmm. Guessing you're trying it on Android? It's relying on the
         | navigator.clipboard API, and generally the experience is not
         | good on mobile
        
           | echeese wrote:
           | I have the same issue, Firefox 99 on Windows
        
           | ColinWright wrote:
           | Nope
           | 
           | Firefox 99.0 (64-bit) for Ubuntu canonical - 1.0
           | $ lsb_release -d         Description: Ubuntu 20.04.4 LTS
           | $ cat /etc/debian_version          bullseye/sid
        
           | aidenn0 wrote:
           | I'm having the same issue on Firefox 99 on Linux (NixOS).
        
             | croshan wrote:
             | Agh. Turns out Firefox doesn't support it, my bad! Safari
             | and Chrome work fine, but I'm guessing that's not an option
             | for many Linux users. Sorry!
        
               | daveloyall wrote:
               | Firefox 101.0a1 (2022-04-22) (64-bit) says:
               | 
               | > Uncaught (in promise) ReferenceError: ClipboardItem is
               | not defined
        
         | scintill76 wrote:
         | Demonstrating how easy it is to get someone to disclose their
         | clipboard contents to any web page that asks? ;) Not working
         | for me either, but it was surprising to see my previous copied
         | text.
        
         | bally0241 wrote:
         | Same...was just browsing stack overflow for positive mod, so I
         | got
         | 
         | "return (i % n + n) % n;"
         | 
         | heh
        
         | [deleted]
        
         | notRobot wrote:
         | Same, doesn't work for me on both Firefox on Desktop (Windows)
         | and Android.
        
         | motoboi wrote:
         | Didnt work for me. Firefox on MacOS
        
       | [deleted]
        
       | bks wrote:
       | brilliant and i gave you a twitter follow.
        
         | croshan wrote:
         | Thank you :)
        
       | magicseth wrote:
       | Very fun! If you wanted to add one more level of misdirection,
       | the first cards could be textarea that you have to select with
       | your mouse and hit ctrl-c to copy ;-)
       | 
       | This would hide a bit of the method for the twitter reveal.
       | 
       | -Seth
       | 
       | (I also make online magic tricks magicseth.com/animal )
        
         | magicseth wrote:
         | And this may not be the effect you are going for, but you could
         | make the final twitter link go to a specific tweet, where you
         | say "I was hoping you would copy the 3 of diamonds!" and it
         | would be right :-)
        
       ___________________________________________________________________
       (page generated 2022-04-25 23:01 UTC)