IPv6 Canvas

I abused the IPv6 address space by making every IP a pixel on a canvas and a color.
Run ping -c 1 2a01:4f8:1c1e:85cd:XXXX:YYYY:RRGG:BBAA to draw a pixel on the canvas. View the canvas here:
https://canvas.zipdox.net

Mike Stoklasa's Worst Fan Shirt $21.68

The Kind of Tired That Sleep Won’t Fix Shirt $21.68

Mike Stoklasa's Worst Fan Shirt $21.68

  1. 3 weeks ago
    Anonymous

    IP farm

    • 3 weeks ago
      Anonymous

      >zipdox.net

      I ain't clicking that shit

    • 3 weeks ago
      Anonymous

      >he isn't under vpns hosted in kuwait and afghanistan
      Sounds like a (You) problem.

  2. 3 weeks ago
    Anonymous

    i don't get it

    • 3 weeks ago
      Anonymous

      Are you familiar with IPv6?

      • 3 weeks ago
        Anonymous

        okay i dont get it either
        do you own 2a01:4f8:1c1e:85cd:*? do all those ip belong to the same machine? how does this work

        • 3 weeks ago
          Anonymous

          It's a /64 subnet, so yeah, he "owns" all of those IPs. Pretty standard even for cheap vHosts to give you such a large subnet.

        • 3 weeks ago
          Anonymous

          The designers of IPv6 were morons who thought every machine on a LAN should have a unique public IP. So the common practice is to assign entire subnets to customers instead of a single IP.

          • 3 weeks ago
            Anonymous

            kek
            and here i thought its worst feature was the hard to remember addresses

          • 3 weeks ago
            Anonymous

            kek
            and here i thought its worst feature was the hard to remember addresses

            I envy midwits

          • 3 weeks ago
            Anonymous

            It's true though. Everyone uses IPv4 NAT as implicit firewall. With IPv6 you suddenly need a real firewall and network configuration gets harder.

    • 3 weeks ago
      Anonymous

      OP wants you to dox yourself by giving him your you his IP

      • 3 weeks ago
        Anonymous

        ESL

        • 3 weeks ago
          Anonymous

          You are severely mentally ill.

          • 3 weeks ago
            Anonymous

            SIR

      • 3 weeks ago
        Anonymous

        What could he do with it?

        • 3 weeks ago
          Anonymous

          ipv6 addresses are unique. It is unique as your finger print and it doesn't change even if you reset your router. You're fricked if you gave him your ipv6.

          • 3 weeks ago
            Anonymous

            You got a good laugh out of me

          • 3 weeks ago
            Anonymous

            I hope he's trolling and not actually this fricking moronic.

          • 3 weeks ago
            Anonymous

            sounds like a problem to take up with your isp
            >t. hasnt had an ipv4 change in over a year

    • 3 weeks ago
      Anonymous

      OP wants you to dox yourself by giving him your you his IP

      ESL

      You are severely mentally ill.

      you're fricking moronic holy shit

  3. 3 weeks ago
    Anonymous

    ping: connect: Network is unreachable

    thanks ipv6, you really made the internet more connected!

    • 3 weeks ago
      Anonymous

      >Be a cuckold without IPv6
      >this is OP's network's fault and not your own and your substandard ISP / peering network

  4. 3 weeks ago
    Anonymous

    what's the point of alpha if you don't store it and force it to 255

  5. 3 weeks ago
    Anonymous

    now draw her playing bad apple

    • 3 weeks ago
      Anonymous

      doing

  6. 3 weeks ago
    Anonymous

    >6 seconds per 3000px wide line
    >5550 lines
    this is gonna take 10 hours to dump

    • 3 weeks ago
      Anonymous

      Are you the moron drawing the massive image with the Chinese characters?

      • 3 weeks ago
        Anonymous

        i'm not moronic

  7. 3 weeks ago
    Anonymous

    zooming kills the website
    cool idea albeit

    • 3 weeks ago
      Anonymous

      >Noa
      >naked
      Oh my god.

    • 3 weeks ago
      Anonymous

      >albeit
      It is illegal to use this word the way that you did, and at the end of a sentence no less. Please take AT LEAST 100 more hours of ESL classes before posting here again. Thank you in advance for your compliance.

      • 3 weeks ago
        Anonymous

        I do it on purpose to trigger people like you thoughever

      • 3 weeks ago
        Anonymous

        Eventhoughbeit

      • 3 weeks ago
        Anonymous

        this aint it, you could of said something different

    • 3 weeks ago
      Anonymous

      Where is the Noa? Can't find it.

      • 3 weeks ago
        Anonymous

        you have to make her yourself

      • 3 weeks ago
        Anonymous

        I guess she got overwritten early on.

  8. 3 weeks ago
    Anonymous

    Do you just send the entire canvas for redraws?

    • 3 weeks ago
      Anonymous

      wow that's fricking moronic

    • 3 weeks ago
      Zip

      No, look at the URL, it's /tile/X/Y.

  9. 3 weeks ago
    Anonymous

    [...]

    No, what's moronic is that the data is purged from the browser just by going slightly out of the window bounds.
    Deltas are already being sent through the websocket.

  10. 3 weeks ago
    Anonymous

    [...]

    >that would require constant communication between clients and server
    it's called a websocket
    >it would be somewhat easy to DDOS the server with calculations going for every single client
    rate limit it and send only whatever is in the screen

    anon have you ever fricking programmed in your life

    • 3 weeks ago
      Anonymous

      Not webdev, I am just making shit up from what I know about qt and gtk.

    • 3 weeks ago
      Anonymous

      You don't know what you're talking about. Quiet.

  11. 3 weeks ago
    Anonymous

    I don't want to get doxxed. I refuse to access your website. Yes I'm from India.

  12. 3 weeks ago
    Anonymous

    what am i doing wrong?

    • 3 weeks ago
      Anonymous

      windows and/or not having an ipv6 address yourself

      • 3 weeks ago
        Anonymous

        is it possible to add an ipv6 here?

        • 3 weeks ago
          Anonymous

          Yes, if you want your internet connection to stop working.

    • 3 weeks ago
      Anonymous

      living in wrong country

    • 3 weeks ago
      Anonymous

      https://www.majorgeeks.com/content/page/how_to_enable_or_disable_ipv6_in_windows.html
      https://test-ipv6.com/

    • 3 weeks ago
      Anonymous

      living in wrong country

      https://tunnelbroker.net can fix that for you

    • 3 weeks ago
      Anonymous

      Alex is a gay name.

  13. 3 weeks ago
    Anonymous

    Neat

  14. 3 weeks ago
    Anonymous

    You should monitor it while it's up. You just know that some fricker will try to put pizza on it.

  15. 3 weeks ago
    Anonymous

    my router died or crashed from flooding with icmp packets

  16. 3 weeks ago
    Anonymous

    can you make it so it remembers the camera coordinates between refresh, the site is badly lagging it's a pain

    • 3 weeks ago
      Zip

      I never wrote a movable canvas before so I didn't really know how to approach it. I'll write the coord storage down.

      • 3 weeks ago
        Anonymous

        Also performance is atrocious because you're forcing draw commands on every pixel set, batch them so they're all drawn only on requestAnimationFrame, your socket message handler shouldn't trigger draws you triple fricking moron

        • 3 weeks ago
          Zip

          I know, I'm trying to think of a better way to do it.

          • 3 weeks ago
            Anonymous

            >each tile a separate offscreen canvas 2d drawing onto a bigger canvas 2d
            holy mother of moronation

          • 3 weeks ago
            Anonymous

            also allow zoom out to less than 1x. hard to navigate that bigBlack person space.
            i hope someone will write some stable diffusion bot to randomly inpaint parts of the picture, or multiple bots fighting each, and we'll be able to watch it transform live all the time.
            how long do you plan on keeping this running?

          • 3 weeks ago
            Anonymous

            >allow zoom out to less than 1x. hard to navigate that bigBlack person space.
            try

            Zip can you apply compression when loading not downloaded chunks and zoomed out a lot?

            no, im not talking about the e-girl
            [...]
            self snitched lol

            if you wanna zoom out to see if anons put something off screen, paste it in the console.
            document.onwheel = function(evt){ const zM = 1 + -evt.deltaY / 1000; let nS = scale * zM; const cX = evt.clientX / scale + x; const cY = evt.clientY / scale + y; const nCX = evt.clientX / nS + x; const nCY = evt.clientY / nS + y; x += cX - nCX; y += cY - nCY; normalizeCoords(); scale = nS; setZoomLabel(); updateTiles(); redrawTiles(); updateCoords();}

            then realize how big a mistake it is to want this when there's not proper optimization

          • 3 weeks ago
            Anonymous

            I never wrote a movable canvas before so I didn't really know how to approach it. I'll write the coord storage down.

            The canvas is stored as one massive 12.9GB file mmap'd into memory. Not much would happen really.

            OP I am BEGGING please ban the homosexual thats constantly spamming that huge image of a e-girl with a penis

            nobody this autistic deserves to get their way

          • 3 weeks ago
            Anonymous

            how does this qualify as spamming? I'm just protecting what I drew from vandalism, you have 95% of black space to fill, why are you b***hing.

    • 3 weeks ago
      Zip

      >Also set up requestAnimationFrame.
      Good, now you can go on to using abort so my browser/ram/bandwidth doesn't get raped when i'm trying to scroll to my region because you still haven't implemented persistent for the screen position between refreshes, which is the most likely reason we're stuck in the top left corner of this canvas
      https://developer.mozilla.org/en-US/docs/Web/API/AbortController/abort

      Implemented position saving. Clear your browser cache and it should work.

  17. 3 weeks ago
    Anonymous

    how did people even get entire pictures on it

    • 3 weeks ago
      Anonymous

      Enjoy:
      from os import system
      from sys import argv
      #The file should be a raw RGB888 file.
      file=open(argv[5], "rb")
      frame=file.read()
      width=int(argv[3])
      height=int(argv[4])
      x=int(argv[1])
      y=int(argv[2])
      for i in range(height):
      for j in range(width):
      print("ping -c 1 2a01:4f8:1c1e:85cd:"+hex(j+x)[2:].zfill(4)+":"+hex(i+y)[2:].zfill(4)+":"+hex(frame[3*(i*width+j)])[2:].zfill(2)+hex(frame[3*(i*width+j)+1])[2:].zfill(2)+":"+hex(frame[3*(i*width+j)+2])[2:].zfill(2)+"ff")

      • 3 weeks ago
        Anonymous

        Frick
        from os import system
        from sys import argv
        #The file should be a raw RGB888 file.
        file=open(argv[5], "rb")
        frame=file.read()
        width=int(argv[3])
        height=int(argv[4])
        x=int(argv[1])
        y=int(argv[2])
        for i in range(height):
        for j in range(width):
        system("ping -c 1 2a01:4f8:1c1e:85cd:"+hex(j+x)[2:].zfill(4)+":"+hex(i+y)[2:].zfill(4)+":"+hex(frame[3*(i*width+j)])[2:].zfill(2)+hex(frame[3*(i*width+j)+1])[2:].zfill(2)+":"+hex(frame[3*(i*width+j)+2])[2:].zfill(2)+"ff")

        Use this to convert your pictures:
        ffmpeg -i input.png -f rawvideo -pix_fmt rgb24 output.raw

        • 3 weeks ago
          Anonymous

          >system("ping...")
          ngmi

          • 3 weeks ago
            Anonymous

            Yeah, Popen is faster, I know.

        • 3 weeks ago
          Anonymous

          Died while I was using script to draw scott tibbs
          I don't code, so I was trying to get GPT to do a C/C++ version with parallelism.
          no success

          • 3 weeks ago
            Anonymous

            Frick it, just managed to
            #include <iostream>
            #include <cstdlib>
            #include <string>
            #include <sstream> // for std::ostringstream
            #include <iomanip>
            using namespace std;

            void pingCell(int x, int y, int width, int height, const unsigned char* frame) {
            for (int i = 0; i < height; ++i) {
            for (int j = 0; j < width; ++j) {
            ostringstream command;
            // Construct the ping command for each cell
            command << "ping -c 1 2a01:4f8:1c1e:85cd:"
            << hex << uppercase << setw(4) << setfill('0') << (j + x) << ":"
            << hex << uppercase << setw(4) << setfill('0') << (i + y)
            << ":" << setw(2) << setfill('0') << static_cast<int>(frame[3 * (i * width + j)])
            << setw(2) << setfill('0') << static_cast<int>(frame[3 * (i * width + j) + 1]) << ":"
            << setw(2) << setfill('0') << static_cast<int>(frame[3 * (i * width + j) + 2]) << "ff";
            // Execute the ping command
            system(command.str().c_str());
            }
            }
            }

            int main(int argc, char* argv[]) {
            if (argc < 6) {
            cerr << "Usage: " << argv[0] << " x y width height filename" << endl;
            return 1;
            }

            int x = atoi(argv[1]);
            int y = atoi(argv[2]);
            int width = atoi(argv[3]);
            int height = atoi(argv[4]);
            const char* filename = argv[5];

            FILE* file = fopen(filename, "rb");
            if (!file) {
            cerr << "Error opening file: " << filename << endl;
            return 1;
            }

            unsigned char* frame = new unsigned char[3 * width * height];
            fread(frame, sizeof(unsigned char), 3 * width * height, file);
            fclose(file);

            pingCell(x, y, width, height, frame);

            delete[] frame;

            return 0;
            }

            I know this can be done better (like using multiple workers to ping faster). But again, I don't code.

      • 3 weeks ago
        Anonymous

        Frick
        from os import system
        from sys import argv
        #The file should be a raw RGB888 file.
        file=open(argv[5], "rb")
        frame=file.read()
        width=int(argv[3])
        height=int(argv[4])
        x=int(argv[1])
        y=int(argv[2])
        for i in range(height):
        for j in range(width):
        system("ping -c 1 2a01:4f8:1c1e:85cd:"+hex(j+x)[2:].zfill(4)+":"+hex(i+y)[2:].zfill(4)+":"+hex(frame[3*(i*width+j)])[2:].zfill(2)+hex(frame[3*(i*width+j)+1])[2:].zfill(2)+":"+hex(frame[3*(i*width+j)+2])[2:].zfill(2)+"ff")

        Use this to convert your pictures:
        ffmpeg -i input.png -f rawvideo -pix_fmt rgb24 output.raw

        Is that the best you can do? I bet you can get ChudGPT to shit out C code for sending raw packets.

      • 3 weeks ago
        Zip

        Frick
        from os import system
        from sys import argv
        #The file should be a raw RGB888 file.
        file=open(argv[5], "rb")
        frame=file.read()
        width=int(argv[3])
        height=int(argv[4])
        x=int(argv[1])
        y=int(argv[2])
        for i in range(height):
        for j in range(width):
        system("ping -c 1 2a01:4f8:1c1e:85cd:"+hex(j+x)[2:].zfill(4)+":"+hex(i+y)[2:].zfill(4)+":"+hex(frame[3*(i*width+j)])[2:].zfill(2)+hex(frame[3*(i*width+j)+1])[2:].zfill(2)+":"+hex(frame[3*(i*width+j)+2])[2:].zfill(2)+"ff")

        Use this to convert your pictures:
        ffmpeg -i input.png -f rawvideo -pix_fmt rgb24 output.raw

        Frick it, just managed to
        #include <iostream>
        #include <cstdlib>
        #include <string>
        #include <sstream> // for std::ostringstream
        #include <iomanip>
        using namespace std;

        void pingCell(int x, int y, int width, int height, const unsigned char* frame) {
        for (int i = 0; i < height; ++i) {
        for (int j = 0; j < width; ++j) {
        ostringstream command;
        // Construct the ping command for each cell
        command << "ping -c 1 2a01:4f8:1c1e:85cd:"
        << hex << uppercase << setw(4) << setfill('0') << (j + x) << ":"
        << hex << uppercase << setw(4) << setfill('0') << (i + y)
        << ":" << setw(2) << setfill('0') << static_cast<int>(frame[3 * (i * width + j)])
        << setw(2) << setfill('0') << static_cast<int>(frame[3 * (i * width + j) + 1]) << ":"
        << setw(2) << setfill('0') << static_cast<int>(frame[3 * (i * width + j) + 2]) << "ff";
        // Execute the ping command
        system(command.str().c_str());
        }
        }
        }

        int main(int argc, char* argv[]) {
        if (argc < 6) {
        cerr << "Usage: " << argv[0] << " x y width height filename" << endl;
        return 1;
        }

        int x = atoi(argv[1]);
        int y = atoi(argv[2]);
        int width = atoi(argv[3]);
        int height = atoi(argv[4]);
        const char* filename = argv[5];

        FILE* file = fopen(filename, "rb");
        if (!file) {
        cerr << "Error opening file: " << filename << endl;
        return 1;
        }

        unsigned char* frame = new unsigned char[3 * width * height];
        fread(frame, sizeof(unsigned char), 3 * width * height, file);
        fclose(file);

        pingCell(x, y, width, height, frame);

        delete[] frame;

        return 0;
        }

        I know this can be done better (like using multiple workers to ping faster). But again, I don't code.

        Here
        #include <iostream>
        #include <cstdlib>
        #include <string>
        #include <sstream> // for std::ostringstream
        #include <iomanip>
        #include <thread>
        #include <vector>
        using namespace std;

        void pingCell(int x, int y, int width, int height, const unsigned char* frame, int xi) {
        for (int i = xi; i < height; ++i) {
        for (int j = 0; j < width; ++j) {
        // Create a new ostringstream for each ping command
        ostringstream command;
        // Construct the ping command for each cell
        command << "ping -q -c 1 2a01:4f8:1c1e:85cd:"
        << hex << uppercase << setw(4) << setfill('0') << (j + x) << ":"
        << hex << uppercase << setw(4) << setfill('0') << (i + y)
        << ":" << setw(2) << setfill('0') << static_cast<int>(frame[3 * (i * width + j)])
        << setw(2) << setfill('0') << static_cast<int>(frame[3 * (i * width + j) + 1]) << ":"
        << setw(2) << setfill('0') << static_cast<int>(frame[3 * (i * width + j) + 2]) << "ff";
        // Execute the ping command in a separate thread
        thread pingThread([commandStr = command.str()]() {
        system(commandStr.c_str());
        });
        pingThread.detach(); // Detach the thread to run independently
        }
        }
        }

        int main(int argc, char* argv[]) {
        if (argc < 6) {
        cerr << "Usage: " << argv[0] << " x y width height filename xoff" << endl;
        return 1;
        }

        1/2

        int x = atoi(argv[1]);
        int y = atoi(argv[2]);
        int width = atoi(argv[3]);
        int height = atoi(argv[4]);
        const char* filename = argv[5];
        int xi;
        if (!argv[6]){
        xi = 0;
        } else {
        xi = atoi(argv[6]);
        }

        FILE* file = fopen(filename, "rb");
        if (!file) {
        cerr << "Error opening file: " << filename << endl;
        return 1;
        }

        unsigned char* frame = new unsigned char[3 * width * height];
        fread(frame, sizeof(unsigned char), 3 * width * height, file);
        fclose(file);

        pingCell(x, y, width, height, frame, xi);

        delete[] frame;

        return 0;
        }

        Isn't better than [...] [...] tho

        You guys are writing in C/C++ only to call the ping command rather than sending an ICMP packet directly. Step up your game.

        • 3 weeks ago
          Anonymous

          idk how to make a ICMP packet sender with retransmission, OP.

          • 3 weeks ago
            Anonymous

            https://datatracker.ietf.org/doc/html/rfc792
            I love RFC. Ignore that this one is for IPV4 not IPv6.

          • 3 weeks ago
            Anonymous

            OK bothered with a second search.
            https://datatracker.ietf.org/doc/html/rfc4443
            Trivial header.

          • 3 weeks ago
            Zip

            Just proompt

          • 3 weeks ago
            Kalifag

            As I expected, GPT 3.5 isn't good enough to do a ICMP packet sender, I'm giving up.

          • 3 weeks ago
            Anonymous

            Just use Claude.

          • 3 weeks ago
            Kalifag

            Is it free? I'll check it

          • 3 weeks ago
            Kalifag

            >Claude is available in a bunch of african poor countries
            >But isn't in Brazil
            Is available in Israel as well too, if it matters

          • 3 weeks ago
            Anonymous

            >with retransmission
            Pointless, I've noticed that even when my packets get a response, they still don't appear on the canvas. So I've given up on that approach.

          • 3 weeks ago
            Anonymous

            I've been doing this and grabbing the canvas to skip existing pixels.
            But when the site shits the bed it takes forever to get the canvas. It's faster to just crap everything out again.

  18. 3 weeks ago
    Anonymous

    wtf she has a bepis

  19. 3 weeks ago
    Anonymous

    hypothetically, considering there are 256x256 tiles of 256x256 pixels, and the storage is 24bpp (maybe even 32bpp?) what would happen if someone (not me :^) ) drew one pixel in the middle of every tile

    • 3 weeks ago
      Zip

      The canvas is stored as one massive 12.9GB file mmap'd into memory. Not much would happen really.

      • 3 weeks ago
        Anonymous

        >12.9GB file mmap'd into memory
        Does it mean that we are currently killing your SSD?

        [...]
        but yeah, it was unbearable just a few moments ago

        Looks like it's gone back to being unbearable. I have a hard time getting Lorie on the canvas.

        • 3 weeks ago
          Kalifag

          Sorry for printing Kali over Lorie yesterday. I tried putting her next to Lorie without calculating the dimensions (I'm lazy) and messed up.

          • 3 weeks ago
            Anonymous

            No problem, dude, I overwrote incestanon's message at some point so I'm guilty too. Also, are you using my shitty Python script or the C++ thing that someone else posted?

          • 3 weeks ago
            Kalifag

            The C++ script, that was me who sent.
            I'm outside home now, but I'll send you my new one when I arrive home (Doesn't change much in code, but parallelism makes it way faster)

          • 3 weeks ago
            Anonymous

            Here
            #include <iostream>
            #include <cstdlib>
            #include <string>
            #include <sstream> // for std::ostringstream
            #include <iomanip>
            #include <thread>
            #include <vector>
            using namespace std;

            void pingCell(int x, int y, int width, int height, const unsigned char* frame, int xi) {
            for (int i = xi; i < height; ++i) {
            for (int j = 0; j < width; ++j) {
            // Create a new ostringstream for each ping command
            ostringstream command;
            // Construct the ping command for each cell
            command << "ping -q -c 1 2a01:4f8:1c1e:85cd:"
            << hex << uppercase << setw(4) << setfill('0') << (j + x) << ":"
            << hex << uppercase << setw(4) << setfill('0') << (i + y)
            << ":" << setw(2) << setfill('0') << static_cast<int>(frame[3 * (i * width + j)])
            << setw(2) << setfill('0') << static_cast<int>(frame[3 * (i * width + j) + 1]) << ":"
            << setw(2) << setfill('0') << static_cast<int>(frame[3 * (i * width + j) + 2]) << "ff";
            // Execute the ping command in a separate thread
            thread pingThread([commandStr = command.str()]() {
            system(commandStr.c_str());
            });
            pingThread.detach(); // Detach the thread to run independently
            }
            }
            }

            int main(int argc, char* argv[]) {
            if (argc < 6) {
            cerr << "Usage: " << argv[0] << " x y width height filename xoff" << endl;
            return 1;
            }

            1/2

          • 3 weeks ago
            Anonymous

            int x = atoi(argv[1]);
            int y = atoi(argv[2]);
            int width = atoi(argv[3]);
            int height = atoi(argv[4]);
            const char* filename = argv[5];
            int xi;
            if (!argv[6]){
            xi = 0;
            } else {
            xi = atoi(argv[6]);
            }

            FILE* file = fopen(filename, "rb");
            if (!file) {
            cerr << "Error opening file: " << filename << endl;
            return 1;
            }

            unsigned char* frame = new unsigned char[3 * width * height];
            fread(frame, sizeof(unsigned char), 3 * width * height, file);
            fclose(file);

            pingCell(x, y, width, height, frame, xi);

            delete[] frame;

            return 0;
            }

            Isn't better than

            #include <opencv2/opencv.hpp>
            #include <boost/asio.hpp>
            #include <boost/asio/ip/icmp.hpp>
            #include <iostream>
            #include <vector>
            #include <iomanip>
            #include <sstream>
            #include <cstring>

            using namespace cv;
            using namespace boost::asio;
            using namespace std;

            string formatIPv6Address(const string& base, int x, int y, int r, int g, int b) {
            stringstream ss;
            ss << hex << base << ":"
            << setw(4) << setfill('0') << x << ":"
            << setw(4) << setfill('0') << y << ":"
            << setw(2) << setfill('0') << r
            << setw(2) << setfill('0') << g << ":"
            << setw(2) << setfill('0') << b << "ff";

            return ss.str();
            }

            struct icmpv6_header {
            uint8_t type;
            uint8_t code;
            uint16_t checksum;
            uint16_t identifier;
            uint16_t sequence_number;
            };

            void send_icmp_echo_request(io_context& io_context, const string& target_address) {
            static ip::icmp::socket socket(io_context, ip::icmp::v6());
            try {
            if (!socket.is_open()) {
            socket.open(ip::icmp::v6());
            }
            socket.set_option(ip::unicast::hops(128));

            ip::icmp::resolver resolver(io_context);
            ip::icmp::endpoint destination = *resolver.resolve(ip::icmp::v6(), target_address, "").begin();

            icmpv6_header echo_req{};
            echo_req.type = 128; // Echo Request
            echo_req.code = 0;
            echo_req.checksum = 0;
            echo_req.identifier = htons(12345);
            echo_req.sequence_number = htons(1);

            char send_buf[sizeof(echo_req)];
            std::memcpy(send_buf, &echo_req, sizeof(echo_req));

            socket.send_to(buffer(send_buf, sizeof(send_buf)), destination);
            }
            catch (const std::exception& e) {
            cerr << "Error sending ICMPv6 echo request: " << e.what() << endl;
            socket.close();
            throw;
            }
            }

            int main(int argc, char** argv) {
            if (argc != 5) {
            cout << "Usage: ./image_packet_sender <image_path> <ipv6_base> <offset_x> <offset_y>" << endl;
            return 1;
            }

            string imagePath = argv[1];
            string ipv6Base = argv[2];
            int offsetX = stoi(argv[3]);
            int offsetY = stoi(argv[4]);

            // Load the image
            cout << "Attempting to load image from: " << imagePath << endl;
            Mat image = imread(imagePath, IMREAD_COLOR);
            if (image.empty()) {
            cout << "Could not open or find the image" << endl;
            return -1;
            }

            printf("Image size: %d x %dn", image.cols, image.rows);

            io_context io_context;

            // Iterate over each pixel
            for (int y = 0; y < image.rows; y++) {
            for (int x = 0; x < image.cols; x++) {
            Vec3b color = image.at<Vec3b>(Point(x, y));
            int red = (int)color[2];
            int green = (int)color[1];
            int blue = (int)color[0];

            string formattedAddress = formatIPv6Address(ipv6Base, x + offsetX, y + offsetY, red, green, blue);

            cout << "Sending to address: " << formattedAddress << endl;
            send_icmp_echo_request(io_context, formattedAddress);
            }
            }

            cout << "Done." << endl;

            return 0;
            }

            Very fast, but maybe too fast. lots of dropped packets but I am halfway around the world.

            tho

          • 3 weeks ago
            Anonymous

            yours may be better, mine doesnt retransmit, which means that it is at the mercy of packet lose, I believe that calling the ping command is good for this, but much slower. I will try to refactor to include some kind of retransmit.

      • 3 weeks ago
        Anonymous

        >13gb
        why do you need so much for a raw image?

        • 3 weeks ago
          Zip

          The canvas is 65536x65536

        • 3 weeks ago
          Anonymous

          do the math, moron

  20. 3 weeks ago
    Anonymous

    is that ebussi

  21. 3 weeks ago
    Anonymous

    anon really wasn't joking around when he said he would paint dicky

    • 3 weeks ago
      Anonymous

      That's just by some jap artist.

  22. 3 weeks ago
    Anonymous

    cool site
    what does the network traffic look like?

  23. 3 weeks ago
    Anonymous

    What is that qr code?

  24. 3 weeks ago
    Anonymous

    please optimize the renderer, it's absolute dogshit the likes i've never seen before, it's like sisyphus in code shape

  25. 3 weeks ago
    Anonymous

    my ISP doesn't support ipv6 and probably never will

  26. 3 weeks ago
    Anonymous

    Why are there so many footgays here suddenly?

    • 3 weeks ago
      Anonymous

      >suddenly

  27. 3 weeks ago
    Anonymous

    its dead

    • 3 weeks ago
      Zip

      I disable system ICMPv6 responses and made it respond in my code, to improve echo response accuracy.

      • 3 weeks ago
        Anonymous

        great so now I have to ignore timeouts and assume shit has properly been received, nice idea
        could have spent that time writing a non-garbo renderer instead, homosexual

        • 3 weeks ago
          Zip

          Found a problem. It's not sending the replies from the right address.

          • 3 weeks ago
            Anonymous

            dont bother sending replies please; who cares, fire and forget

  28. 3 weeks ago
    Anonymous

    What is Chito doing with cancerfrogs?

  29. 3 weeks ago
    Anonymous

    I can't get my script to work

    I don't know how you get yours to send the images so quickly, are you flooding it?

    I'm giving up and going to bed

    • 3 weeks ago
      Anonymous

      keep trying anon. I want to know what you have to show us

  30. 3 weeks ago
    Anonymous

    reminds me of https://www.youtube.com/watch?v=JcJSW7Rprio

  31. 3 weeks ago
    Anonymous

    How exactly do you record the ping packets? A naive way might be just using pcap and parsing the output stream or something.

    • 3 weeks ago
      Anonymous

      if u snoop around they have it on gitlab

  32. 3 weeks ago
    Anonymous

    '''
    from PIL import Image
    from concurrent.futures import ThreadPoolExecutor
    from scapy.all import *

    def send_packet(target_ip):
    packet = IPv6(dst=target_ip)/ICMPv6EchoRequest()
    send(packet)

    def process_image(image_path, max_threads=1000):

    img = Image.open(image_path)
    img = img.convert('RGBA')

    width, height = img.size

    with ThreadPoolExecutor(max_workers=max_threads) as executor:
    for x in range(width):
    for y in range(height):
    r, g, b, a = img.getpixel((x, y))
    target_ip = f"2a01:4f8:1c1e:85cd:{x+0:04X}:{y+0:04X}:{r:02X}{g:02X}:{b:02X}{a:02X}"
    executor.submit(send_packet, target_ip)

    process_image("frickyou.png")
    '''

    • 3 weeks ago
      Anonymous

      from PIL import Image
      from concurrent.futures import ThreadPoolExecutor
      from scapy.all import *

      def send_packet(target_ip):
      packet = IPv6(dst=target_ip)/ICMPv6EchoRequest()
      send(packet)

      def process_image(image_path, max_threads=1000):

      img = Image.open(image_path)
      img = img.convert('RGBA')

      width, height = img.size

      with ThreadPoolExecutor(max_workers=max_threads) as executor:
      for x in range(width):
      for y in range(height):
      r, g, b, a = img.getpixel((x, y))
      target_ip = f"2a01:4f8:1c1e:85cd:{x+0:04X}:{y+0:04X}:{r:02X}{g:02X}:{b:02X}{a:02X}"
      executor.submit(send_packet, target_ip)

      process_image("frickyou.png")

      forgot how the codeblock worked here

  33. 3 weeks ago
    Anonymous

    based /misc/ schizo covering up that disgusting cartoon

  34. 3 weeks ago
    Anonymous

    >python
    I thought this was IQfy not scratch mit edu

    • 3 weeks ago
      Anonymous

      Given sending icmp packets is privileged by default, shelling out with python is basically perfectly normal.

  35. 3 weeks ago
    Anonymous

    Very cool. Fun idea.

  36. 3 weeks ago
    Anonymous

    How is the futae-girl homosexual script so fast? It's so fricking quick

    • 3 weeks ago
      Anonymous

      not quick enough

    • 3 weeks ago
      Anonymous

      that's a boy

      • 3 weeks ago
        Anonymous

        I'm not hentroon enjoyer, therefore Idc.

        • 3 weeks ago
          Anonymous

          >i'm not one of them
          >uses terms exclusive to them instead of the normal term "boy"
          yeah right, 41% yourself, closet homosexual

          • 3 weeks ago
            Anonymous

            Where tf futae-girl is exclusive.
            Futae-girl, boy, glowie, whatever, doesn't change the fact that this homosexual script is fast

  37. 3 weeks ago
    Anonymous

    >the only intact and largest image is an naked boy
    confirmed that every ipv6 homosexual is a boy molesting fruit

    • 3 weeks ago
      Anonymous

      The kalis are also intact tho.
      This shows that every ipv6 homosexual is also a sar

  38. 3 weeks ago
    Anonymous

    my script is just typescript, it's just fast because I'm running it from a VPS on the same continent as the OP's server, same code on my home machine is 6 times slower, even though I technically have a better fiber bandwidth (though router's my ISP's, and is quite shit)

    Could probably get much faster speeds buying a VPS in the same datacenter as OP, they seem to be using hetzner, in germany

    I think location is more important than the actual code.
    Unless you're a moron spawning system commands.

    • 3 weeks ago
      Anonymous

      makes sense. I'm far away from op (Brazil, hue hue hue, thurd world) so it takes a while until I finish the images

  39. 3 weeks ago
    Anonymous

    >websocket closed
    >404
    >502
    when will it stop

    • 3 weeks ago
      Zip

      When I figure out how to calculate an ICMPv6 checksum.

      • 3 weeks ago
        Anonymous

        What's your opinion in the progress of the canvas, OP?

      • 3 weeks ago
        Anonymous

        Yeah idk what the frick is with the checksum shit
        I'm trying to use raw sockets to send data and the checksum calculation is not explained in nearly enough detail. I'm like 1 off somehow in the checksum calculation, but it moves up/down slightly when I modify the data.

      • 3 weeks ago
        Anonymous

        Yeah idk what the frick is with the checksum shit
        I'm trying to use raw sockets to send data and the checksum calculation is not explained in nearly enough detail. I'm like 1 off somehow in the checksum calculation, but it moves up/down slightly when I modify the data.

        I was just using a 16 bit accumulator somewhere I should have been using a 32 bit accumulator
        site's dead now though 🙁

  40. 3 weeks ago
    Anonymous

    packet loss visualizer

  41. 3 weeks ago
    Anonymous

    Is it just my impression or the top is inscreasing?
    Both the Kali and the other image have started at y=0 as well I remember, now there's a big gap between both images and the border

  42. 3 weeks ago
    Kalifag

    That's it anons, I'm going to sleep now, sars.
    I wanted to say that I had fun, even with this shit socket disconnecting everytime. Thanks very much everyone who participated in OP's IP farm.

  43. 3 weeks ago
    Anonymous

    >that 3d homosexual that looks like he's disintegrating into dust
    top kek

  44. 3 weeks ago
    Anonymous

    something tells me these black boxes aren't actually someone, and are most likely the server dying.

  45. 3 weeks ago
    Anonymous

    #include <opencv2/opencv.hpp>
    #include <boost/asio.hpp>
    #include <boost/asio/ip/icmp.hpp>
    #include <iostream>
    #include <vector>
    #include <iomanip>
    #include <sstream>
    #include <cstring>

    using namespace cv;
    using namespace boost::asio;
    using namespace std;

    string formatIPv6Address(const string& base, int x, int y, int r, int g, int b) {
    stringstream ss;
    ss << hex << base << ":"
    << setw(4) << setfill('0') << x << ":"
    << setw(4) << setfill('0') << y << ":"
    << setw(2) << setfill('0') << r
    << setw(2) << setfill('0') << g << ":"
    << setw(2) << setfill('0') << b << "ff";

    return ss.str();
    }

    struct icmpv6_header {
    uint8_t type;
    uint8_t code;
    uint16_t checksum;
    uint16_t identifier;
    uint16_t sequence_number;
    };

    void send_icmp_echo_request(io_context& io_context, const string& target_address) {
    static ip::icmp::socket socket(io_context, ip::icmp::v6());
    try {
    if (!socket.is_open()) {
    socket.open(ip::icmp::v6());
    }
    socket.set_option(ip::unicast::hops(128));

    ip::icmp::resolver resolver(io_context);
    ip::icmp::endpoint destination = *resolver.resolve(ip::icmp::v6(), target_address, "").begin();

    icmpv6_header echo_req{};
    echo_req.type = 128; // Echo Request
    echo_req.code = 0;
    echo_req.checksum = 0;
    echo_req.identifier = htons(12345);
    echo_req.sequence_number = htons(1);

    char send_buf[sizeof(echo_req)];
    std::memcpy(send_buf, &echo_req, sizeof(echo_req));

    socket.send_to(buffer(send_buf, sizeof(send_buf)), destination);
    }
    catch (const std::exception& e) {
    cerr << "Error sending ICMPv6 echo request: " << e.what() << endl;
    socket.close();
    throw;
    }
    }

    • 3 weeks ago
      Anonymous

      int main(int argc, char** argv) {
      if (argc != 5) {
      cout << "Usage: ./image_packet_sender <image_path> <ipv6_base> <offset_x> <offset_y>" << endl;
      return 1;
      }

      string imagePath = argv[1];
      string ipv6Base = argv[2];
      int offsetX = stoi(argv[3]);
      int offsetY = stoi(argv[4]);

      // Load the image
      cout << "Attempting to load image from: " << imagePath << endl;
      Mat image = imread(imagePath, IMREAD_COLOR);
      if (image.empty()) {
      cout << "Could not open or find the image" << endl;
      return -1;
      }

      printf("Image size: %d x %dn", image.cols, image.rows);

      io_context io_context;

      // Iterate over each pixel
      for (int y = 0; y < image.rows; y++) {
      for (int x = 0; x < image.cols; x++) {
      Vec3b color = image.at<Vec3b>(Point(x, y));
      int red = (int)color[2];
      int green = (int)color[1];
      int blue = (int)color[0];

      string formattedAddress = formatIPv6Address(ipv6Base, x + offsetX, y + offsetY, red, green, blue);

      cout << "Sending to address: " << formattedAddress << endl;
      send_icmp_echo_request(io_context, formattedAddress);
      }
      }

      cout << "Done." << endl;

      return 0;
      }

      Very fast, but maybe too fast. lots of dropped packets but I am halfway around the world.

  46. 3 weeks ago
    Anonymous

    So we can send dicky unnoticed now?

  47. 3 weeks ago
    Anonymous

    what a slow piece of shit site

  48. 3 weeks ago
    Anonymous

    Frick (You)! Also, why (You) need my IP ???

  49. 3 weeks ago
    Anonymous

    >broken for mobilegays
    Reeeee fix your shit OP

  50. 3 weeks ago
    Anonymous

    I hope anon manages to frick his sister one day.

  51. 3 weeks ago
    Anonymous

    sorry, I have IPv6 disabled for my network, I only work with static ipv4 non cgnat.

  52. 3 weeks ago
    Anonymous

    anime DoS

  53. 3 weeks ago
    Anonymous

    >troony DoS
    Way to ruin it.

  54. 3 weeks ago
    Anonymous

    OP Plz ipban the trap homosexuals

    • 3 weeks ago
      Anonymous

      OP please keep them I love the delicious wieners

      • 3 weeks ago
        Anonymous

        i love girl dicks too

        • 3 weeks ago
          Anonymous

          drawing a literal satan at 6666,6666

          dick = boy
          you like boys

          • 3 weeks ago
            Anonymous

            Zip can you apply compression when loading not downloaded chunks and zoomed out a lot?

            no, im not talking about the e-girl

            >dox people
            very unsurprising from zipDOX

            self snitched lol

            if you wanna zoom out to see if anons put something off screen, paste it in the console.
            document.onwheel = function(evt){ const zM = 1 + -evt.deltaY / 1000; let nS = scale * zM; const cX = evt.clientX / scale + x; const cY = evt.clientY / scale + y; const nCX = evt.clientX / nS + x; const nCY = evt.clientY / nS + y; x += cX - nCX; y += cY - nCY; normalizeCoords(); scale = nS; setZoomLabel(); updateTiles(); redrawTiles(); updateCoords();}

  55. 3 weeks ago
    Anonymous

    >IQfy of the 00s and early 10s: goatse and CP
    >IQfy of the 20s: trump and troony porn

  56. 3 weeks ago
    Anonymous

    Is the packet loss bad today or something? Same code as yesterday but eveything I try to draw just looks like a bunch of black specks

    • 3 weeks ago
      Anonymous

      packet loss just dropped to 0 when you posted that, lel

      • 3 weeks ago
        Anonymous

        Is the packet loss bad today or something? Same code as yesterday but eveything I try to draw just looks like a bunch of black specks

        but yeah, it was unbearable just a few moments ago

  57. 3 weeks ago
    Anonymous

    Someone erase that not-valid "person" already.

  58. 3 weeks ago
    Anonymous

    why don't you guys draw your shit somewhere else, we have a 64k*64k canvas ffs
    what's so funny about defacing other's images, or are you really that envious people like things at all that you have to just deface with noise that's as sparse and nuanced as your personality, you have really nothing to show?

    • 3 weeks ago
      Anonymous

      go back

      [...]

    • 3 weeks ago
      Anonymous

      It's the survival of the mighty.

  59. 3 weeks ago
    Anonymous

    who's the pornstar behind trump?

    • 3 weeks ago
      Anonymous

      Just for your information, said pornstar has a dick. I think it's Taftaj.

  60. 3 weeks ago
    Anonymous

    noise chads wwa
    https://pastebin.com/k1bExqt2

  61. 3 weeks ago
    Anonymous

    >bad apple at 0.5 fps
    Is this the power of python? Or is it the server's or website's fault?

    • 3 weeks ago
      Anonymous

      It's both

    • 3 weeks ago
      Anonymous

      Looks like the power of autism.

  62. 3 weeks ago
    Anonymous

    ffs op just replace setInterval with requestAnimationFrame, it's not that hard holy shit.

  63. 3 weeks ago
    Anonymous

    OP compute mipmaps of the image so you can zoom out without requesting the full image

    • 3 weeks ago
      Anonymous

      Also this anon is right. It's the only way to zoom out and see the whole thing without requiring gigabytes of bandwidth.

  64. 3 weeks ago
    Anonymous

    thankfully, variables aren't in closures so I can just do

    requestAnimationFrame(function aa(){
    for(tileName in drawQueue){
    const tile = storedTiles[tileName];
    if(!tile) continue;
    const queuedTile = drawQueue[tileName];

    for(let drawCommand of queuedTile){
    const xPixel = drawCommand[1];
    const yPixel = drawCommand[3];
    tile.data.data.set(drawCommand.slice(4), (yPixel * 256 + xPixel) * 4);
    }

    const tileX = queuedTile[0][0];
    const tileY = queuedTile[0][2];
    tile.ctx.putImageData(tile.data, 0, 0);
    drawTile(tileX, tileY);
    }
    drawQueue = {};
    requestAnimationFrame(aa);
    });

    in the console and it refreshes decently

    • 3 weeks ago
      Anonymous

      Thanks very much, anon. I'll need those

  65. 3 weeks ago
    Anonymous

    dumping more dicky, bottom right of nahida

  66. 3 weeks ago
    Zip

    Okay so making my own ICMP responses was too difficult. Instead I made the socket more reliable by reading in a while loop in the callback until it returns -1. Also set up requestAnimationFrame.

    • 3 weeks ago
      Anonymous

      >ICMP
      >difficult

      • 3 weeks ago
        Zip

        Calculating the checksum is a PITA. I tried several times but it's always off by a bit. Granted it was like 5AM and I was exhausted. If the need arises I might try again.

        • 3 weeks ago
          Anonymous

          >but it's always off by a bit
          Maybe you just need to add a bit, lul.
          Pretty neat stuff, OP.

    • 3 weeks ago
      Anonymous

      >Also set up requestAnimationFrame.
      Good, now you can go on to using abort so my browser/ram/bandwidth doesn't get raped when i'm trying to scroll to my region because you still haven't implemented persistent for the screen position between refreshes, which is the most likely reason we're stuck in the top left corner of this canvas
      https://developer.mozilla.org/en-US/docs/Web/API/AbortController/abort

    • 3 weeks ago
      Anonymous

      I can help, I posted code that works correctly with raw sockets

      noise chads wwa
      https://pastebin.com/k1bExqt2

      . You probably need to use a 32 bit accumulator and do a final pass to roll the top bits back into the lower 16. Ones complement sum works differently than a normal sum, if you're only off by a bit that's probably what's happening, or at least was the issue in my case.

  67. 3 weeks ago
    Anonymous

    >you can scroll and zoom
    oh

    • 3 weeks ago
      Zip

      You didn't know? Holy fricking moron.

      Also can you guys stop warring in the top left corner and start moving outward?

      • 3 weeks ago
        Anonymous

        No scrollbar, no indication that it's possible.
        How do I zoom lower than 1x?

        • 3 weeks ago
          Zip

          Currently not possible (disable it cause it makes your browser shit itself). I'll try to make moving use requestAnimationFrame in a bit.

      • 3 weeks ago
        Anonymous

        >stop warring in the top left corner and start moving outward?
        no we can't, read

        >Also set up requestAnimationFrame.
        Good, now you can go on to using abort so my browser/ram/bandwidth doesn't get raped when i'm trying to scroll to my region because you still haven't implemented persistent for the screen position between refreshes, which is the most likely reason we're stuck in the top left corner of this canvas
        https://developer.mozilla.org/en-US/docs/Web/API/AbortController/abort

        scrolling consumes a ton of bandwidth, even for black tiles and the requests aren't aborted when the tiles go offscreen so the later tiles take even longer to load, fix your shit
        Even if you go outward, one little refresh and you have to make your way there again.
        2/10

        • 3 weeks ago
          Anonymous

          Also it's not possible to see where you are intuitively. Holy shit if the full thing is really 64x64k big.

      • 3 weeks ago
        Anonymous

        we can't zoom out. so we can't move away from top-left at comfortable speed and knowing where we're going.

  68. 3 weeks ago
    Anonymous

    Are the noisy tiles a bug?

    • 3 weeks ago
      Anonymous

      no its morons who are spamming it intentionally and also the result of packet loss

      • 3 weeks ago
        Anonymous

        the packet loss and missing line are what make it so cool though

        it has sovl

  69. 3 weeks ago
    Zip

    I just confirmed the homosexual drawing the genshin e-girl kid with the wiener is in fact French (very unsurprising).

    • 3 weeks ago
      Anonymous

      The wiener was a disappointment. Nationalities of the other e-girl posters?
      Also the canvas is black now.

      • 3 weeks ago
        Anonymous

        >Also the canvas is black now.
        Nevermind, saved position in a black area.

      • 3 weeks ago
        Anonymous

        >Nationalities of the other e-girl posters?
        all me

    • 3 weeks ago
      Anonymous

      >dox people
      very unsurprising from zipDOX

    • 3 weeks ago
      Anonymous

      rude thing to do when i bumped your thread multiple times when it was about to die, and drew a large provocative image to bait activity

      • 3 weeks ago
        Kalifag

        That's true, I spent at least an hour censoring that.
        I found that Kali is beautiful elsewhere instead of censoring a e-girlpenis

    • 3 weeks ago
      Anonymous

      please ban france

      • 3 weeks ago
        Anonymous

        nahida won
        i won

        >nooooooo i have inferior technology and can't compete with baguette superiority, it's unfair!

    • 3 weeks ago
      Anonymous

      Nice. Xiao is best girl (male).

  70. 3 weeks ago
    Anonymous

    Dumb frog at 9000,12000.

  71. 3 weeks ago
    Anonymous

    been messing with it since last night
    it's kinda shit that spamming hard enough causes packets to drop, since it incentivizes spamming until it's unusable
    you can of course send more like the other guy, and 'win' but that ends up making it worse
    so people end up in territory wars and crash the site
    one anon last night was sending his image over and over non stop, you could tell anyone putting pixels in that space was instantly wiped away and the server was unusable, but when he stopped everything was fine

    also what's the issue? cpu? getting 1gb/s of pings? complete mystery?

    • 3 weeks ago
      Anonymous

      >also what's the issue? cpu?
      meme code that's compiled without optimizations doing meme casts and not understanding that if you have 256 pixel wide tiles and 256 tiles then separating the two bytes is the same as directly using the short word as a global coordinate

      • 3 weeks ago
        Anonymous

        I can't imagine that's a bottleneck.

        • 3 weeks ago
          Anonymous

          Well the bottleneck is most obviously the random access on an mmapped file.
          And that it would become worse if he implemented mipmaps on top of that as each pixel set could pull 10 different pages into memory instead of one.

          I don't know what he's working on atm, but abortable fetch requests look more feasible currently, I believe mipmaps would bring their lot of trouble.

          Using double for alpha compositing is overkill when you're going back to 8 bit, should use float or just get rid of alpha imo

          >get rid of alpha
          yeah this, nobody uses this, you have to deal with spammer spamming random noise so you have to fetch the tile state all the time anyway, if you want color mixing just compute it client side

          • 3 weeks ago
            Anonymous

            >Well the bottleneck is most obviously the random access on an mmapped file.
            Is it? The whole thing should fit into your server's RAM. RAM bandwidth is fast.

          • 3 weeks ago
            Anonymous

            It's 12GB, 16 with mipmap, those aren't exactly cheap... well, actually I think oracle can give you a 24gb ram arm server for free.

            But I think OP most likely has the cheapest hetzner option, with 4 gigs

          • 3 weeks ago
            Anonymous

            My desktop machine has 32GB and I feel like ti's too little. If it's only 3-4GB you get awful worst cases, sure. Maybe he should just have made the canvas smaller.

          • 3 weeks ago
            Anonymous

            Even if it's fully in RAM you basically pay a cache miss on every access. You need some swizzling to avoid this penalty. E.g. if cache line size is 64 bytes and 3 bytes per pixel, you can store 21 pixels in a single cache line. Ideally, cache lines would correspond to some square sub region of the image, but 21 isn't a perfect square so you can do 3x7 (wastes 1 byte per 21 pixels) or 5x4 (wastes 4 bytes per 20 pixels) size tiles. Multiple writes/reads would be more likely to hit the same cache line. Really, you don't want to waste bytes so you need some packing that divides 512 bits better, e.g. RGB565, then you can have perfectly dividing 4x8 tiles, or RGB332 which gets you 8x8 tiles.

          • 3 weeks ago
            Anonymous

            Cache refilling is pretty fast compared to pushing packets through the network stack and parsing them. Tiling the image may help, because people likely do localized accesses when writing to images, but even then they tend to write scanline by scanline so the penalty isn't that bad.

          • 3 weeks ago
            Anonymous

            Idk how well multithreaded OP's server is, but it shouldn't spend much time waiting on the network, should just be epolling for most of it. I was looking at how GMainLoop works and it might not be great, seems like they're taking locks in some places which isn't great if you want to do multithreaded dispatch (removing alpha makes this easier since you don't need to read and blend, can just blindly write and you don't really care about the image view being coherent if you don't blend). His server might need some tweaking of how much buffering the kernel is doing, but I'm not familiar with that stuff. io_uring or using an eBPF might be faster, but it might not matter if OP is saturating his download/upload.

          • 3 weeks ago
            Anonymous

            >DMA from ethernet MAC to RAM
            >waking up the CPU
            >walking the MAC buffer
            >handling the cache misses and transfering the packet data to the CPU's cache
            >picking out packets
            >parsing the packet headers
            >dispatching them to the network subsystems
            >waking up the user process waiting for the raw buffer
            >copying it to userspace (more cache misses)
            >parsing the packet again
            There's probably a lot going on.

          • 3 weeks ago
            Zip

            >Idk how well multithreaded OP's server is
            Not. Except for NGINX, the entire thing runs in a single event loop. I wrote this in like 2 days.

          • 3 weeks ago
            Anonymous

            enable gz compression in nginx for the love of god

      • 3 weeks ago
        Anonymous

        Using double for alpha compositing is overkill when you're going back to 8 bit, should use float or just get rid of alpha imo

      • 3 weeks ago
        Zip

        The image is not stored line by line, which you'd know if you read the rest of code. It's stored tile by tile, so facilitate sending to the clients.

    • 3 weeks ago
      Anonymous

      From testing on my end, you're not terribly incentivized to spam it as hard as you can, although I can hit my max upload of 40Mbit, doing so results in most of the packets being dropped somewhere between me and the server, throttling to ~7Mbit has much better delivery rates.

      • 3 weeks ago
        Anonymous

        when there is spam, doing even one pixel at a time, they show up as noise since most of them were dropped somewhere
        if it's dying enough, there are long blank segments

  72. 3 weeks ago
    Anonymous

    I think my ISP is disconnecting me for sending too much ICMP traffic lol. Some automated system probably thinks I'm part of a botnet in a DDoS.

    • 3 weeks ago
      Anonymous

      Didn't they used to use ping floods to DDoS servers? I recall /b/ trying this a bunch of times.

  73. 3 weeks ago
    Anonymous

    Before mipmaps, he should send downsampled images compressed with jpg while scrolling.

  74. 3 weeks ago
    Anonymous

    >bad apple is already running in the corner
    basde

  75. 3 weeks ago
    Anonymous

    >no keyboard controls
    This is probably why I didn't get that you can scroll and zoom.

  76. 3 weeks ago
    Anonymous

    >someone trying to censor the genshin dick
    Thanks, I don't want to turn gay.

    • 3 weeks ago
      Anonymous

      thanks for telling me :^)

      • 3 weeks ago
        Anonymous
  77. 3 weeks ago
    Anonymous

    >anons shit optimized censor
    >chads lightning fast dicky dick(feminine)
    give up bro, boy dicky won

    • 3 weeks ago
      Anonymous

      the dicky fricker has geographic advantage, plus is handling retransmission. My C code is much faster but like 30 percent of my packets even make it because it's too fast.

      • 3 weeks ago
        Anonymous

        cope
        >geographic advantage
        kek, it'd only take a few cents to rent out a vps for a few hours in the same datacenter as OP's vps
        >handling retransmission
        maybe using c wasn't that smart a choice, huh

        To optimally draw pixels you probably need to figure out the maximum rate at which you can send pings without packet drops.

        In my testing, pinging without waiting for a reply was consistently slower than waiting for replies, even taking into account retransmission and high transmission rates.
        Causing congestion is more harmful than raw throughput.
        The loss isn't caused by the inherent "unreliable" nature of the protocol, but because you're congesting your network path.

        • 3 weeks ago
          Anonymous

          >The loss isn't caused by the inherent "unreliable" nature of the protocol, but because you're congesting your network path.
          Same thing. Routers and switches can't possibly buffer all traffic until it's been relayed.

  78. 3 weeks ago
    Anonymous

    Remove alpha, change bit depth to 16 bit, you save half the bandwidth and memory.

    • 3 weeks ago
      Anonymous

      alpha isn't stored, it's only used for compositing so it's only 33% savings

    • 3 weeks ago
      Zip

      The image isn't stored in RAM, it's mapped to disk. It doesn't even consume 200MB of RAM.

      • 3 weeks ago
        Anonymous

        Do you know how mmap actually works?

      • 3 weeks ago
        Anonymous

        >It doesn't even consume 200MB of RAM.
        lol do you have vm.swappiness set to 90 or something

      • 3 weeks ago
        Anonymous

        mmap'd memory doesn't show as occupied in htop for whatever moronic reason. probably same moronic conclusion as the troony who claimed she had halved llama.cpp's memory usage a year ago. of course whatever is being used at any given time is in ram. and if you have a lot of traffic all over the place and your system isn't moronic as frick it will keep that in memory as long as there is enough memory.

        • 3 weeks ago
          Anonymous

          >mmap'd memory doesn't show as occupied in htop for whatever moronic reason.
          doesn't it show as cache (yellow bars)?

        • 3 weeks ago
          Anonymous

          mmap'd memory is the same as memory in the kernel's page cache, or whatever it's called. The whole point of mmap is that pages can be added ore removed from RAM as needed. Writing to mmap'd memory is much like doing a write(), except that the latter requires kernel entry and a memcpy.

  79. 3 weeks ago
    Anonymous

    adding a noa at 7455 7995

    • 3 weeks ago
      Anonymous
    • 3 weeks ago
      Anonymous

      4K noa complete

      const obs = new MutationObserver(c => {
      if (coords.textContent.includes('|'))
      return;
      const [x, y ] = coords.textContent.split(',').map(e => +e);
      coords.textContent = `${x}, ${y} | (${x>>8}, ${y>>8})`
      })
      obs.observe(coords)

      paste this in console if you want tile coordinates next to your pixel coordinate

  80. 3 weeks ago
    Anonymous

    To optimally draw pixels you probably need to figure out the maximum rate at which you can send pings without packet drops.

  81. 3 weeks ago
    Anonymous

    Also, does the ping utility even send a minimum ping packet size? Since the ping payload isn't used, it would be better to reduce the packet size.

    • 3 weeks ago
      Anonymous

      my code in

      #include <opencv2/opencv.hpp>
      #include <boost/asio.hpp>
      #include <boost/asio/ip/icmp.hpp>
      #include <iostream>
      #include <vector>
      #include <iomanip>
      #include <sstream>
      #include <cstring>

      using namespace cv;
      using namespace boost::asio;
      using namespace std;

      string formatIPv6Address(const string& base, int x, int y, int r, int g, int b) {
      stringstream ss;
      ss << hex << base << ":"
      << setw(4) << setfill('0') << x << ":"
      << setw(4) << setfill('0') << y << ":"
      << setw(2) << setfill('0') << r
      << setw(2) << setfill('0') << g << ":"
      << setw(2) << setfill('0') << b << "ff";

      return ss.str();
      }

      struct icmpv6_header {
      uint8_t type;
      uint8_t code;
      uint16_t checksum;
      uint16_t identifier;
      uint16_t sequence_number;
      };

      void send_icmp_echo_request(io_context& io_context, const string& target_address) {
      static ip::icmp::socket socket(io_context, ip::icmp::v6());
      try {
      if (!socket.is_open()) {
      socket.open(ip::icmp::v6());
      }
      socket.set_option(ip::unicast::hops(128));

      ip::icmp::resolver resolver(io_context);
      ip::icmp::endpoint destination = *resolver.resolve(ip::icmp::v6(), target_address, "").begin();

      icmpv6_header echo_req{};
      echo_req.type = 128; // Echo Request
      echo_req.code = 0;
      echo_req.checksum = 0;
      echo_req.identifier = htons(12345);
      echo_req.sequence_number = htons(1);

      char send_buf[sizeof(echo_req)];
      std::memcpy(send_buf, &echo_req, sizeof(echo_req));

      socket.send_to(buffer(send_buf, sizeof(send_buf)), destination);
      }
      catch (const std::exception& e) {
      cerr << "Error sending ICMPv6 echo request: " << e.what() << endl;
      socket.close();
      throw;
      }
      }

      does not include a payload and the packet sizes are something like 30 to 50 percent less large.

    • 3 weeks ago
      Kalifag (forgor to namefag)

      That's true. I thought about that, but I was phoneposting at college at the moment.

      To optimally draw pixels you probably need to figure out the maximum rate at which you can send pings without packet drops.

      Probably. I just don't know how to do it. (The code was mostly done through ChatGPT.) The furthest I can manage to think is setting a std::this_thread::sleep_for(std::chrono::nanoseconds(time))
      and I'm not sure if it's the most efficient way.

      yours may be better, mine doesnt retransmit, which means that it is at the mercy of packet lose, I believe that calling the ping command is good for this, but much slower. I will try to refactor to include some kind of retransmit.

      Thanks (even tho it's just chatgpt code), the ping command is good for retransmitting, but I was trying to send the packets through the code itself because of the speed, like you did.

  82. 3 weeks ago
    Anonymous

    >Pixel coordinates (hexadecimal)
    FRICK. No wonder I've been shitting pixel vomit onto the canvas.

  83. 3 weeks ago
    Anonymous

    How can we export the whole canvas to jpg?

    • 3 weeks ago
      Anonymous

      idk how you would download the whole canvas. but here is
      ffmpeg -f rawvideo -pixel_format rgba -video_size (width)x(height) -i input.raw output.png

  84. 3 weeks ago
    Anonymous

    Waiting for that Noa pic to complete.

  85. 3 weeks ago
    Anonymous

    Very nice.
    This is definitely the coolest thing I saw this year on IQfy. Thanks OP.
    Do you mind sharing the code for the backend?

    • 3 weeks ago
      Anonymous

      https://gitlab.com/zipdox/ipv6-canvas

      • 3 weeks ago
        Anonymous

        cool shit you're the same guy maintaining the librecord
        though i still think it is an useless effort just because the whole discord is a shitshow

    • 3 weeks ago
      Zip

      https://gitlab.com/zipdox/ipv6-canvas/

  86. 3 weeks ago
    Anonymous

    make so you can refetch/refresh a tile by double clicking, enough of having desyncs and having to refresh the whole page or scroll around and reload fricking everything

  87. 3 weeks ago
    Anonymous

    when I remove the censor off his penis, I like to pretend i'm licking it off, kinda hot

  88. 3 weeks ago
    Anonymous

    0,0 bad apple mogging 99,99 bad apple

  89. 3 weeks ago
    Anonymous

    putting some dicky archive at 1142 7282

  90. 3 weeks ago
    Anonymous

    we gaan
    it may not be C but it does send actual homemade icmp packets

    • 3 weeks ago
      Anonymous

      already done here

      #include <opencv2/opencv.hpp>
      #include <boost/asio.hpp>
      #include <boost/asio/ip/icmp.hpp>
      #include <iostream>
      #include <vector>
      #include <iomanip>
      #include <sstream>
      #include <cstring>

      using namespace cv;
      using namespace boost::asio;
      using namespace std;

      string formatIPv6Address(const string& base, int x, int y, int r, int g, int b) {
      stringstream ss;
      ss << hex << base << ":"
      << setw(4) << setfill('0') << x << ":"
      << setw(4) << setfill('0') << y << ":"
      << setw(2) << setfill('0') << r
      << setw(2) << setfill('0') << g << ":"
      << setw(2) << setfill('0') << b << "ff";

      return ss.str();
      }

      struct icmpv6_header {
      uint8_t type;
      uint8_t code;
      uint16_t checksum;
      uint16_t identifier;
      uint16_t sequence_number;
      };

      void send_icmp_echo_request(io_context& io_context, const string& target_address) {
      static ip::icmp::socket socket(io_context, ip::icmp::v6());
      try {
      if (!socket.is_open()) {
      socket.open(ip::icmp::v6());
      }
      socket.set_option(ip::unicast::hops(128));

      ip::icmp::resolver resolver(io_context);
      ip::icmp::endpoint destination = *resolver.resolve(ip::icmp::v6(), target_address, "").begin();

      icmpv6_header echo_req{};
      echo_req.type = 128; // Echo Request
      echo_req.code = 0;
      echo_req.checksum = 0;
      echo_req.identifier = htons(12345);
      echo_req.sequence_number = htons(1);

      char send_buf[sizeof(echo_req)];
      std::memcpy(send_buf, &echo_req, sizeof(echo_req));

      socket.send_to(buffer(send_buf, sizeof(send_buf)), destination);
      }
      catch (const std::exception& e) {
      cerr << "Error sending ICMPv6 echo request: " << e.what() << endl;
      socket.close();
      throw;
      }
      }

      • 3 weeks ago
        Anonymous

        More fun to do it yourself

  91. 3 weeks ago
    Anonymous

    can we not do porn? is that possible?
    come on

  92. 3 weeks ago
    Anonymous

    music i'm listening to atm

    you can see it at 0,8960, it's a webm audio file ripped from yt-dlp

    apparently cloudflare doesn't like this...

    • 3 weeks ago
      Anonymous

      frick, it's two periods, not three

    • 3 weeks ago
      Anonymous

      kinda works but the server is shitting itself

  93. 3 weeks ago
    Anonymous

    This is a cool idea, encoding instructions or data into IPv6 isn't a novel idea (segmemt routing v6 compressed/micro header) but this specifically I have not seen. This has given me an idea, thank you OP.

  94. 3 weeks ago
    Anonymous

    Even though this will permanently contain dicky or CP (or both), it is a nice and creative project.
    Congrats OP for not being a homosexual today.

  95. 3 weeks ago
    Anonymous

    Site seems to be struggling, OP. Is one of the e-girlBlack folk spamming too much?

  96. 3 weeks ago
    Anonymous

    >guy hammering server
    >522
    >523
    >blank canvas
    >dropped packets
    >pixels not sticking

  97. 3 weeks ago
    Anonymous

    dicky bros at 500,0, post the pic you're trying to draw, I'll help you

  98. 3 weeks ago
    Anonymous

    What's the global adoption rate of IPv6 again? I mean for v6 only, no tunneling or dual IPs

    • 3 weeks ago
      Anonymous

      >v6 only
      Will never happen.

      • 3 weeks ago
        Anonymous

        They exist, but are very few and far between.

      • 3 weeks ago
        Anonymous

        A lot of mobile carriers have switched to v6-only without anyone noticing.

    • 3 weeks ago
      Anonymous

      How do you set up tunneling? I wanted to see how fast I could spam but unfortunately I don't have a v6 public address

  99. 3 weeks ago
    Anonymous

    I had to open this up on my server because it was threatening to crash my desktop with 99% memory usage fully zoomed out on a 21:9 display

  100. 3 weeks ago
    Anonymous

    yeah I'm either crashing my modem or my ISP is disconnecting me lol

  101. 3 weeks ago
    Zip

    I might have to implement threading soon.

    • 3 weeks ago
      Anonymous

      Sorry for the spam, OP. Trying my best to purge the e-girlBlack folk and shotaBlack folk from the site.

      • 3 weeks ago
        Anonymous

        kys

        • 3 weeks ago
          Anonymous

          Go back to your honeypot containment altchan, Black person

          • 3 weeks ago
            Anonymous

            dilate, homosexual

          • 3 weeks ago
            Anonymous

            >go on IQfy for the first time yesterday
            >see drawings
            >get erect at drawings
            >get upset about it
            >"YOU PEOPLE ARE BAD AND YOU SHOULD FEEL BAD"
            lol
            you're the dangerous one here if you see children here

          • 3 weeks ago
            Anonymous

            are you moronic? or just a pedophile in denial
            either way have a nice day homosexual

          • 3 weeks ago
            Anonymous

            >are you moronic
            I'm not the one being upset about drawings, thougheverbeit.

          • 3 weeks ago
            Anonymous

            looks like he struck a nerve

          • 3 weeks ago
            Anonymous

            [...]

    • 3 weeks ago
      Anonymous

      implement mipmaps first Black person cattle

    • 3 weeks ago
      Anonymous

      Ask gpt4 to do it for you.

    • 3 weeks ago
      Anonymous

      In my opinion you should send compressed, downsampled images for faster scrolling.

  102. 3 weeks ago
    Anonymous

    Pro tip for whoever's doing the "have a nice day YOU DIRTY PEDOPHILE" text. Don't place your pixels sequentially, it makes it easy for the pedoBlack person's bot to nuke your work. Place them randomly instead.

  103. 3 weeks ago
    Anonymous

    >le bad drawings
    >le pedo
    >le troony
    God I hate nu-4cucks.

  104. 3 weeks ago
    Anonymous

    it's funny how the image of a real naked man doesn't seem to phase them but the drawing is somehow going too far

    • 3 weeks ago
      Anonymous

      >the image of a real naked man doesn't seem to phase them but the drawing is somehow going too far
      must be a coincidence...

    • 3 weeks ago
      Anonymous

      >b-but there is image of real naked man!!
      >why do you only complain about the image of a sexualized child??

      • 3 weeks ago
        Anonymous

        holy mother of gays

  105. 3 weeks ago
    Kalifag

    OP, do you intend to get a better server after? We need to shitping more at your canvas, but the server is always acking

    • 3 weeks ago
      Zip

      Yeah I want to implement threading, so more than 2 threads would be nice.

      • 3 weeks ago
        Anonymous

        have you even profiled your code to know if it'd help

  106. 3 weeks ago
    Anonymous

    OP here,
    Experiment is beyond over. You guys failed hard.
    Posting this on HN instead.

    • 3 weeks ago
      Anonymous

      >Didn't tripgayged
      The experiment is going as intended. We made OP proud.
      OP will be posting this here again tomorrow.

  107. 3 weeks ago
    Anonymous

    OP's system can be trivially optimized: just partition the canvas into several huge stripes, and assign each stripe to a separate server. This can be done by simple routing. The web server requires slightly more advanced load balancing, but since the tiles will align with the stripes, it can be done by URL. Or just make the JS request from separate user-visible servers depending on the stripe a tile is located in.

    • 3 weeks ago
      Anonymous

      load balancing isn't an optimization

      • 3 weeks ago
        Anonymous

        No, but balancing the load onto multiple servers when it was only a single one before is.

        • 3 weeks ago
          Anonymous

          >using more resources is optimization
          lol

          • 3 weeks ago
            Anonymous

            If shit gets faster, it's an optimization. Optimizations can trade one resource for another, like you can trade speed for memory use or the other way around. Stop being a dumb gay.

          • 3 weeks ago
            Anonymous

            You're a fricking moron.
            Load balancing is about solving the problem of scaling, it has little to do with performance, it just generally achieves it as a side product, but it's not a goal. Things don't get faster by virtue of using load balancing.
            >If shit gets faster, it's an optimization.
            No, you fricking moron.
            Optimization has to do with program design.
            Would your program be faster if load-balanced on two machines that are half the specs of the current one? I doubt. Do you call upgrading your pc, "optimizing your programs"?
            Spoke like a true webdev.

          • 3 weeks ago
            Anonymous

            moron take.

          • 3 weeks ago
            Anonymous

            moron

  108. 3 weeks ago
    Anonymous

    clear on draw is a welcome addition but now you can't tell if a tile is black because it hasn't loaded or if it has loaded and just was never used

  109. 3 weeks ago
    Anonymous
    • 3 weeks ago
      Anonymous

      refresh the page until it appaers
      OP hosted it on Haiti, so it's always falling down

      • 3 weeks ago
        Anonymous

        I finally got through but the actual canvas seems to be loading poorly compared to yesterday

        • 3 weeks ago
          Anonymous

          And it is. OP made some changes to render it better (which I wouldn't say helped much), and the site got more traffic (more pings) compared to yesterday

      • 3 weeks ago
        Anonymous

        >OP hosted it on Haiti, so it's always falling down
        Probably got stolen by our fellow lovable people of colour.

  110. 3 weeks ago
    Anonymous

    I imagine that compressing the data in transit between the client and server would help a lot.
    Browsers have built-in transparent compression support via Accept-Encoding and Content-Encoding, and you can enable it both on your own web server as well as at CloudFlare, so bot. Might be worth looking into.
    With gzip, for instance, a blank all-black-pixels tile is going to get bumped from 196608 bytes all the way down to 225. And a tile with a bit more going on is still going to see big savings. Currently, tile 0/0 is going to be something like 39499 bytes, which is still ~20% of the uncompressed size.

    The readme does suggest compression at the web server level, so maybe you do have it and it's just not enabled between CloudFlare and the client? Check to make sure that it's a compression algorithm that CloudFlare supports too, it doesn't seem like they like deflate.

    • 3 weeks ago
      Anonymous

      What are you using to serve the image?
      Probably FCGI or something, right?
      I needed to link zlib to make compression work with FCGI.
      Shit was blazing fast (compared to PHP), but just a hobby project three years ago.
      Me idiot did all the HTML stuff client-side, instead of serving data from a database and using JS to do all the front-end crap.

  111. 3 weeks ago
    Anonymous

    >Try out my improvised pinger
    >Site 502s

  112. 3 weeks ago
    Zip

    I'm shutting it down for the night.

    • 3 weeks ago
      Anonymous
    • 3 weeks ago
      Anonymous

      ETA for the site's return?

  113. 3 weeks ago
    Anonymous

    >blocklist
    total e-girlBlack folk death

    AHAHAHA

    • 3 weeks ago
      Anonymous

      >blocklist on icmp
      ahahahaha

      I'm shutting it down for the night.

      Should probably just use iptables, no?

  114. 3 weeks ago
    Anonymous

    >blocklist on icmp
    ahahahaha

  115. 3 weeks ago
    Anonymous

    aaaaaaaand ruined.
    so you intend to ban people for breaking rules you never gave?
    that's gay

  116. 3 weeks ago
    Anonymous

    What blocklist? I don't see that anywhere

  117. 3 weeks ago
    Anonymous

    OP said he's shutting the whole thing down for the night. I don't understand what all the whining is about.

    • 3 weeks ago
      Anonymous

      What blocklist? I don't see that anywhere

      latest commit on repo implemented a "blocklist" which filters incoming icmp packets, which is moronic because it's based on the source field which can be falsified if you don't care about properly waiting for a response, which will in turn encourage "infringing user" (what did they infringe on exactly, no one knows) to just spam with fake source ips, and possibly exacerbate any problem they could have caused in the first place.
      That's also an additional server load that's easily bypassed.

Your email address will not be published. Required fields are marked *