Suggestion: Show where people post

  • Want to keep track of this thread?
    Accounts can bookmark posts, watch threads for updates, and jump back to where you stopped reading.
    Create account

MS Paint Gigachad

kiwifarms.net
Joined
Aug 6, 2022
I was thinking it'd be interesting and/or useful to have something like a bar chart showing what percentage of a user's posts go to each forum (and/or profile posts, tts etc).

This was inspired by a message at the top of a post shaming the user for making several thousand posts in A&H
 
Why? It's not exactly difficult to find a persons main interests here - takes all of two clicks and a minute or so skimming.
Maybe I am autistic but in that moment I felt that a few pages of post history might not be a sufficient sample size; and while I may be autistic enough to want the exact percentage of a user's posts which go to each forum, I am not autistic or hardworking enough to calculate it

Good point nonetheless
 
On one hand, I don't wanna be the "Nothing to fear, nothing to hide." guy who uses that to justify some Orwellian surveillance state.
On the other hand:
1. What I am proposing (or a rough approximation thereof) can be derived from publicly available info with a bit of effort and autism.
2. I don't see why this thing might be embarrassing unless you do, in fact, have several thousand posts in the thunderdome - no other forum seems to have such a stigma attached to it. Even then, see point 1, it would become quickly apparent even in the status quo.

As for the mod message, sure it might be faggotry, but what I propose would be applied to everyone (not singling anyone out) and completely neutral (not singling out activity in any particular forum)
 
I would be interesting to see the cliques and groups of users and where the congregate. The pure Lolcowboys, the gossip ladies, the hobbyist, specific lolcow followers, A&Niggers and so on.
 
A flag of shame for single-thread posters would be really, really funny. Not sure it's a good idea. But funny.
 
If that was a mod, that's Reddit tier faggotry. Wow.
It was Null, I’m pretty sure he’s talking about @Omen_Sulk ‘s ban message.

It would be kinda funny (and answer the question “why is this retard arguing with me so much?”) but I don’t think it’s a good idea because it would just cause even more meta-infighting which isn’t the point of the site.
 
It was Null, I’m pretty sure he’s talking about @Omen_Sulk ‘s ban message.
Yeah, page 97, "Official Kiwifarms Woman-Hate Thread". 1697166273882.png
That being said, even this had the qualifier "in 3 months" - roughly 100 days, for 25+posts/day - so not only would proportion make the retard, but so would raw volume
 
I agree that the site should lean heavily into data about its posts and users. As a user I mostly use the site by reading the OP and first few pages, then the thread backwards until I get bored. Chart.js graphs are easy if you can get anything into a key value format. Placing graphs under the OP such as a thread's stats vs. its category vs. the whole forum, and at the top of the last few pages about its stats over time, would underscore the forum's unique strength, as would generally replacing tables of numbers with other simple graphs.

KF is so hated because it trades in internet drama and many of the lolcows here have a financial interest to receive flattering attention. By observing and sometimes cruelly documenting, we encourage non-participation in the attention economy and decrease social media engagement as the the forum grows. This pisses off big internet companies too. It'd be cool if the forum visually expressed what it was infamous for and showed original data about itself, a wellspring of curated knowledge about some of humanity's worst impulses displayed for attention and viciously analyzed here.

It's also a warning to read the privacy checkup and this thread about politeness, because the site's nature ensures it's one of the more likely places where you could be identified through your posts and have your dead internet history revived. I personally assume that (1) my entire internet history can be revealed at any moment, and (2) at any moment the KF database could be compromised and exposed to the full resources of the big tech companies whose ire we draw. Here on an unmonetizable site, key spaces otherwise devoted to ads could be graphs.
 
Last edited:
Useful how? Just a data nerd thing?
lol yeah, kinda of. It was also mentioned that an approximation of this can be found by looking at their profile, but as I said before, this suggestion comes from being too much of a nerd to settle for that level of imprecision, but too lazy to manually calculate it precisely

It'd also be a quick answer to questions like "why does this idiot keep coming into threads and slapfighting?" - "oh wait, he's got several thousand posts in A&N"
 
I am writing a TamperMonkey user script that does exactly that. It will iterate through the user's posts and generate a pie chart of which subforums they post in:

This is still a work in progress but I will have it done soon:
JavaScript:
// ==UserScript==
// @name         Kiwifarms subforum post counter
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  Tally user posts in each kf subforum and generate a pie chart
// @author       n
// @match        *://kiwifarms.st/search*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    let currentPage = getCurrentPageNumber(); // the current page number
    const maxPages = 8; // how many pages there are until "view older discussion"
    let olderResultsClicks = 0; // older results click
    const maxOlderResultsClicks = 1; // this is the "view older discussion button" which will reset the loop
    const subforumTally = JSON.parse(localStorage.getItem('subforumTally')) || {};
    const nWordCounter  = 0;
    const trannyCounter = 0;
    function getCurrentPageNumber() {
        const pageParam = new URLSearchParams(window.location.search).get('page');
        return pageParam ? parseInt(pageParam, 10) : 1;
    }

    function tallyPosts() {
        const rows = document.querySelectorAll('.contentRow');
        rows.forEach(row => {
            const forumElem = row.querySelector('div.contentRow-minor li:last-child a');
            if (forumElem) {
                const forumName = forumElem.textContent.trim();
                subforumTally[forumName] = (subforumTally[forumName] || 0) + 1;
            }
        });

        localStorage.setItem('subforumTally', JSON.stringify(subforumTally));
        console.log('Current Tally:', subforumTally);
        navigateToNextPageOrClickOlder();
    }

    function navigateToNextPageOrClickOlder() {
        if (currentPage < maxPages) {
            currentPage++;
            window.location.search = `?page=${currentPage}`;
        } else if (olderResultsClicks < maxOlderResultsClicks) {
            const olderResultsButton = document.querySelector('.button--link.button');
            if (olderResultsButton) {
                olderResultsClicks++;
                olderResultsButton.click();
            }
        } else {
            console.log('Final Tally:', subforumTally);
            localStorage.removeItem('subforumTally');
        }
    }

    function displayPieChart() {
        const ctx = document.getElementById('tallyChart').getContext('2d');
        const labels = Object.keys(subforumTally);
        const data = Object.values(subforumTally);

        new Chart(ctx, {
            type: 'pie',
            data: {
                labels: labels,
                datasets: [{
                    data: data,
                    backgroundColor: labels.map(() => '#' + (Math.random() * 0xFFFFFF << 0).toString(16))
                }]
            }
        });

        setTimeout(saveChartAsImage(), 2500);

    }

    function addSaveImageButton() {
        const saveImageButton = document.createElement('button');
        saveImageButton.textContent = 'Save Chart as Image';
        saveImageButton.style.display = 'block';
        saveImageButton.style.marginTop = '20px';
        saveImageButton.onclick = saveChartAsImage;
        document.body.insertBefore(saveImageButton, document.getElementById('tallyChart').nextSibling);
    }

    function saveChartAsImage() {
    const canvas = document.getElementById('tallyChart');
    const imgURL = canvas.toDataURL('image/png');

    const link = document.createElement('a');
    link.download = 'chart.png'; // todo get username for filename
    link.href = imgURL;
    document.body.appendChild(link);
    setTimeout(link.click(), 1000); // wait for 1.0s so page can load before downloading chart
    document.body.removeChild(link);
    }



    function resetLocalStorageData() {
        localStorage.removeItem('subforumTally');
        location.reload();
    }
    function stopTallying() {
        localStorage.removeItem('isRunning');
        console.log('Tallying stopped. Current Tally:', subforumTally);

        const canvas = document.createElement('canvas');
        canvas.id = 'tallyChart';
        canvas.width = 400;
        canvas.height = 400;
        document.body.insertBefore(canvas, document.body.firstChild);

        // Load Chart.js externally
        const script = document.createElement('script');
        script.src = 'https://cdn.jsdelivr.net/npm/chart.js';
        script.onload = displayPieChart;
        document.head.appendChild(script);
    }

    function startTallying() {
        localStorage.setItem('isRunning', 'true');
        tallyPosts();
    }

    // Add control buttons
    const startButton = document.createElement('button');
    startButton.textContent = 'Start Tally';
    startButton.onclick = startTallying;

    const stopButton = document.createElement('button');
    stopButton.textContent = 'Stop Tally';
    stopButton.onclick = stopTallying;

    const resetStorageButton = document.createElement('button');
    resetStorageButton.textContent = 'Reset';
    resetStorageButton.onclick = resetLocalStorageData;

    const buttonContainer = document.createElement('div');
    buttonContainer.style.position = 'fixed';
    buttonContainer.style.top = '10px';
    buttonContainer.style.right = '10px';
    buttonContainer.style.zIndex = '9999';

    buttonContainer.appendChild(startButton);
    buttonContainer.appendChild(stopButton);
    buttonContainer.appendChild(resetStorageButton);
    document.body.appendChild(buttonContainer);

    // Automatically start tallying
    if (localStorage.getItem('isRunning') === 'true') {
        setTimeout(startTallying, 2000);
    }
    // subforum list minimized TODO --- lolcow_cults | lolcow_salon | lolcow_farms | off_topic | autistic_thunderdome | lounges
   const lolcow_cults=["Lolcows","Internationale Clique","Christian Weston Chandler","Ethan Ralph / #Killstream","Phil Burnell / DarkSydePhil",],lolcow_salon=["Beauty Parlour","Deathfats","Stinkditch","Off-Topic",],lolcow_farms=["Community Watch","Animal Control","Catboy Deconversion Therapy","Internet Famous","Internet Tough Guys","Rat Kings","Weeb Wars",],off_topic=["General Discussion","Art & Literature","The Bidness","Food","Games","Health & Fitness","Internet & Technology","Multimedia","Music","Q&A"],autistic_thunderdome=["Articles & News","Deep Thoughts","Happenings","Mass Debates",],lounges=["Top-Secret Inner Circle","Supporters",];
})();

Here is your subforum breakdown @Corporate Gigachad

canvas.png

JavaScript:
Animal Control: 2
Beauty Parlour: 4
Community Watch": 92
Deathfats: 12
Food: 4
Forum Discussion: 9
Games: 4
General Discussion: 20
Happenings: 78
Health & Fitness: 39
Internet Tough Guys: 3
Lolcows: 118
Mass Debates: 19
Music: 7
Off-Topic: 3
Prospering Grounds: 8
Q&A: 5
Top-Secret Inner Circle: 29
(first 30 pages)
let me know what other users you want to see and I will run the script
 
Last edited:
Back
Top Bottom