09/17 - Mantequilla Monday!

Status
Not open for further replies.

C to the J

Outlaw Turker
Contributor
Master Pleaser
Crowd Pleaser
HIT Poster
Joined
Jan 12, 2016
Messages
52,855
Reaction score
163,462
Points
3,238
Age
37
Gender
Male
Title: Your preferential treatment experience - please share your opinion! | Accept
Requester: Alexandra [A13QRH17BZ096M] Contact
TV: No Reviews
TO: [Pay=3.63] [Fast=5.00] [Comm=5.00] [Fair=5.00] [Reviews=9] [ToS=0]
Reward: 0.60
Duration: 3600
Available: 1
Description: In this study we are interested in your experience of receiving preferential treatment from a company. You will be asked to provide a detailed description of that experience. THOSE WITHOUT PREFERENTIAL TREATMENT EXPERIENCE ARE NOT ELIGIBLE FOR THIS STUDY
Qualifications: HIT approval rate (%) GreaterThan 95; Location EqualTo US
[tr][td]
HIT exported from Mturk Suite v2.3.11
[/td][/tr]
[tr][td]
x[/td][/tr]
 
  • Like
Reactions: TwilightMashery

masterx1234

Well-Known Member
Contributor
Joined
Oct 10, 2017
Messages
1,470
Reaction score
2,968
Points
588
Age
34
Gender
Male
SMH looks like the Guy Voichek HIT is broken, no next button to proceed. waited 2 minutes now. throwing it back.
 
  • Like
Reactions: CrazyCatLady

Cara

ad space now available
Contributor
Joined
Jan 12, 2016
Messages
6,685
Reaction score
12,921
Points
1,163
Location
Mass.
Gender
Female
Challenge accepted.

"There was a writing section AFTER THE DEMOGRAPHICS PAGE of this $2 five minute survey."
ohh i thought he meant the uer.
 
  • Like
Reactions: Jaded

CrazyCatLady

..
Contributor
Crowd Pleaser
Joined
Jan 15, 2018
Messages
7,403
Reaction score
20,832
Points
1,363
Location
Arkansas
Gender
Female
Code:
// ==UserScript==
// @name         mTurk Slow or Just Me?
// @namespace    salembeats
// @version      1.55
// @description  UPDATE: More timezone-fixing stuff. NOTE: Requires Kadauchi's "MTurk Dashboard Enhancer" script to function properly.
// @author       Cuyler Stuwe (salembeats)
// @include      https://worker.mturk.com/dashboard*
// ==/UserScript==

const globals = {
    CLIENT_VERSION: "synchronicity",
    API_BASE: "https://ne26dv9hq6.execute-api.us-west-2.amazonaws.com/dev"
};

// Minified, synchronous SHA-256 transform function copied from: http://geraintluff.github.io/sha256/
var sha256=function a(b){function c(a,b){return a>>>b|a<<32-b}for(var d,e,f=Math.pow,g=f(2,32),h="length",i="",j=[],k=8*b[h],l=a.h=a.h||[],m=a.k=a.k||[],n=m[h],o={},p=2;64>n;p++)if(!o[p]){for(d=0;313>d;d+=p)o[d]=p;l[n]=f(p,.5)*g|0,m[n++]=f(p,1/3)*g|0}for(b+="\x80";b[h]%64-56;)b+="\x00";for(d=0;d<b[h];d++){if(e=b.charCodeAt(d),e>>8)return;j[d>>2]|=e<<(3-d)%4*8}for(j[j[h]]=k/g|0,j[j[h]]=k,e=0;e<j[h];){var q=j.slice(e,e+=16),r=l;for(l=l.slice(0,8),d=0;64>d;d++){var s=q[d-15],t=q[d-2],u=l[0],v=l[4],w=l[7]+(c(v,6)^c(v,11)^c(v,25))+(v&l[5]^~v&l[6])+m[d]+(q[d]=16>d?q[d]:q[d-16]+(c(s,7)^c(s,18)^s>>>3)+q[d-7]+(c(t,17)^c(t,19)^t>>>10)|0),x=(c(u,2)^c(u,13)^c(u,22))+(u&l[1]^u&l[2]^l[1]&l[2]);l=[w+x|0].concat(l),l[4]=l[4]+w|0}for(d=0;8>d;d++)l[d]=l[d]+r[d]|0}for(d=0;8>d;d++)for(e=3;e+1;e--){var y=l[d]>>8*e&255;i+=(16>y?0:"")+y.toString(16)}return i};

function exists(thing) {
    return thing !== undefined && thing !== null;
}

function amazonDate() {
    return new Date(Date.now() + (new Date().getTimezoneOffset()*60*1000) - (420*60*1000));
}

function medianOfSortedValues(sortedValuesArray) {

    const middlePosition = Math.floor(sortedValuesArray.length/2);

    if(sortedValuesArray.length % 2) {
        return sortedValuesArray[middlePosition];
    }
    else {
        return (sortedValuesArray[middlePosition-1] + sortedValuesArray[middlePosition]) / 2.0;
    }

}

function sidesOfMedian(sortedValuesArray) {

    const hasEvenNumberOfItems = ( sortedValuesArray.length % 2 === 0 );

    if(hasEvenNumberOfItems) {
        return [
            sortedValuesArray.slice(0, (sortedValuesArray.length / 2)),
            sortedValuesArray.slice((sortedValuesArray.length / 2), sortedValuesArray.length)
        ];
    }
    else {
        const indexToSplitOn = ((sortedValuesArray.length + 1) / 2) - 1;

        return [
            sortedValuesArray.slice(0, indexToSplitOn),
            sortedValuesArray.slice(indexToSplitOn + 1, sortedValuesArray.length)
        ];
    }
}


function hitLogTotalUsd() {

    const hitLog = JSON.parse(localStorage.getItem("WMTD_hitLog"));

    return Object.keys(hitLog).reduce((acc, currentHitLogKey) => {

        return (acc + hitLog[currentHitLogKey].reward.amount_in_dollars);

    }, 0);

}

function dateYYYYMMDD(date) {

    const now = date;
    const [year, month, day] = [now.getFullYear(), now.getMonth() + 1, now.getDate()].map(num => num.toLocaleString("en-US", {minimumIntegerDigits: 2, useGrouping: false}));
    const todaysDateStr = `${year}-${month}-${day}`;
    return todaysDateStr;

}

function todaysDateYYYYMMDD() {
    return dateYYYYMMDD(new Date());
}

function amazonDateYYYYMMDD() {
    return dateYYYYMMDD(amazonDate());
}

function lastWorkLoggedDateYYYYMMDD() {
    return localStorage.getItem("WMTD_date");
}

function todaysTotal() {

    const lastRecordedDate = lastWorkLoggedDateYYYYMMDD();

    if(lastRecordedDate === amazonDateYYYYMMDD()) {

        return hitLogTotalUsd();

    }
    else {

        return null;

    }

}

function todaysTotalMTS() {
  const mtsProjectedEarnings = document.getElementById('mts-ht-earnings').textContent;
  return Number(mtsProjectedEarnings.replace(/[^0-9.]/g, ''));
}

function workerId() {

    const workerIdCopyElement = document.querySelector(`[data-react-class="require('reactComponents/common/CopyText')['default']"]`);
    return JSON.parse(workerIdCopyElement.dataset.reactProps).textToCopy;

}

function workerIdHash() {

    return sha256(workerId());

}

function userEarningsPayload() {

    const payload = JSON.stringify({
        idHash: workerIdHash(),
        date: lastWorkLoggedDateYYYYMMDD(),
        total: todaysTotal() || todaysTotalMTS(),
        clientVersion: globals.CLIENT_VERSION
    });

    return payload;

}

async function submitUserEarnings() {

    const apiEndpoint = `${globals.API_BASE}/store`;

    const responseStream = await fetch(apiEndpoint, {
        method: "POST",
        body: userEarningsPayload(),
        headers: {
            "Content-Type": "application/json"
        }
    });

    const response = await responseStream.json();
    return response;

}

function injectAveragePERow() {
    const el = document.getElementById("TodaysActivityAdditionalInfo") || document.getElementById('dashboard-available-earnings').querySelector('.border-gray-lightest').children[0];

    el.insertAdjacentHTML("beforebegin", `
        <div class="row m-b-sm">
            <div class="col-xs-7 col-sm-6 col-lg-7">
                <strong>Today's Community Average</strong>
            </div>
            <div class="col-xs-5 col-sm-6 col-lg-5 text-xs-right">
                <a id="retrieveCommunityAverage" href="javascript:void(0);">Retrieve Community Average</a>
            </div>
        </div>
        <div class="row m-b-sm">
            <div class="col-xs-7 col-sm-6 col-lg-7">
                <strong>TC Low, Med, High</strong>
            </div>
            <div class="col-xs-5 col-sm-6 col-lg-5 text-xs-right">
                <div id="tcLowMedHigh">&nbsp;</div>
            </div>
        </div>
        <div class="row m-b-sm">
            <div class="col-xs-7 col-sm-6 col-lg-7">
                <strong>Box+Whisker Plot</strong>
            </div>
            <div style="text-align: center;">
                <img id="boxplotImage" style="max-width: 270px;" src="">
            </div>
        </div>
        <div class="row m-b-sm">
            <div class="col-xs-7 col-sm-6 col-lg-7">
                <strong>TC Rank</strong>
            </div>
            <div class="col-xs-5 col-sm-6 col-lg-5 text-xs-right">
                <div id="rank"></div>
            </div>
        </div>
        <div class="row m-b-sm">
            <div class="col-xs-7 col-sm-6 col-lg-7">
                <strong>Nearest Competitor</strong>
            </div>
            <div class="col-xs-5 col-sm-6 col-lg-5 text-xs-right">
                <div id="nearestCompetitor"></div>
            </div>
        </div>
        <div class="row m-b-sm">
            <div class="col-xs-7 col-sm-6 col-lg-7">
                <strong>Leaderboard</strong>
            </div>
            <div class="col-xs-5 col-sm-6 col-lg-5 text-xs-right">
                <select id="leaderboard"></div>
            </div>
        </div>
    `);
}

function boxplotRenderUrl(params = {
    low: undefined,
    high: undefined,
    median: undefined,
    firstQuartile: undefined,
    thirdQuartile: undefined
}) {
    return (`http://www.imathas.com/stattools/boxplot.php?n=1&showlabels=0&title0=&ds0q0=${params.low.replace("$", "")}&ds0q1=${params.firstQuartile.replace("$", "")}&ds0q2=${params.median.replace("$", "")}&ds0q3=${params.thirdQuartile.replace("$", "")}&ds0q4=${params.high.replace("$", "")}&title1=&ds1q0=&ds1q1=&ds1q2=&ds1q3=&ds1q4=&title2=&ds2q0=&ds2q1=&ds2q2=&ds2q3=&ds2q4=&xmin=0&xmax=${Math.floor((+params.high.replace("$", "")) + 5)}&ticks=5&axistitle=&imgwidth=300&imgheight=120`);
}

function embedBoxAndWhiskerData(params = {
    low: undefined,
    high: undefined,
    median: undefined,
    firstQuartile: undefined,
    thirdQuartile: undefined}) {
    document.getElementById("tcLowMedHigh").dataset.boxAndWhiskerPoints = JSON.stringify(params);
    document.getElementById("boxplotImage").setAttribute("src", boxplotRenderUrl(params));
}

function rank(userEarnings, allUsersAscendingSortedEarnings) {

    return ( [...allUsersAscendingSortedEarnings].reverse().indexOf(userEarnings) + 1 );

}

function nearestCompetitorTotalAndGapTuple(userEarnings, allUsersAscendingSortedEarnings) {

    const hasCompetitors = ( allUsersAscendingSortedEarnings.length > 1 );
    if(!hasCompetitors) { return [userEarnings, 0]; }

    const userEarningsIndex = allUsersAscendingSortedEarnings.indexOf(userEarnings);

    const isLeader = ( userEarningsIndex === allUsersAscendingSortedEarnings.length - 1 );

    const tiedEarningsErrorFactor = 0.01;

    let nearestCompetitorEarnings;
    if(isLeader) {
        nearestCompetitorEarnings = [...allUsersAscendingSortedEarnings].reverse().find(earnings => {
            return earnings < ( userEarnings - tiedEarningsErrorFactor );
        });
    }
    else {
        nearestCompetitorEarnings = allUsersAscendingSortedEarnings.find(earnings => {
            return earnings > ( userEarnings + tiedEarningsErrorFactor );
        });
    }

    const nearestCompetitorGap = nearestCompetitorEarnings - userEarnings;

    return [nearestCompetitorEarnings, nearestCompetitorGap];
}

function displayRank(rank, numberOfPositions) {

    const relativeThresholdAtWhichToDisplayTopPercentile = 0.5;

    const topPercentileZeroToOne = ( 1 - ( (numberOfPositions - rank) / numberOfPositions ) );

    const formattedTopPercentile = topPercentileZeroToOne.toLocaleString("en-US", {style: "percent"});

    document.getElementById("rank").innerHTML = `# <strong>${rank}</strong> / ${numberOfPositions} ${topPercentileZeroToOne <= relativeThresholdAtWhichToDisplayTopPercentile ? `( Top <strong>${formattedTopPercentile}</strong> )` : ""}`;
}

function displayNearestCompetitorInfo(nearestCompetitorTotalAndGapTuple) {

    const [nearestCompetitorTotal, nearestCompetitorGap] = nearestCompetitorTotalAndGapTuple;

    const sign = ( nearestCompetitorGap >= 0 ? "+" : "-" );
    const color = ( sign === "+" ? "green" : "red" );
    const absoluteGap = Math.abs(nearestCompetitorGap);

    const [nearestCompetitorTotalFormatted, absoluteGapFormatted] = [nearestCompetitorTotal, absoluteGap].map(val => val.toLocaleString("en-US", {style: "currency", currency: "USD"}));

    document.getElementById("nearestCompetitor").innerHTML = `${nearestCompetitorTotalFormatted} ( <span style="color: ${color};">${sign} ${absoluteGapFormatted}</span> )`;

}

function leaderboardOptionElementsFrom(allUsersAscendingSortedEarnings) {
    const descendingEarnings = [...allUsersAscendingSortedEarnings].reverse();

    return descendingEarnings.map((earnings, index) => {
        return (`
            <option>[#${index+1}]: ${earnings.toLocaleString("en-US", {style: "currency", currency: "USD"})}</option>
        `);
    }).join("");
}

function displayLeaderboard(allUsersAscendingSortedEarnings) {
    document.getElementById("leaderboard").innerHTML = leaderboardOptionElementsFrom(allUsersAscendingSortedEarnings);
}

async function main() {

    injectAveragePERow();

    document.getElementById("retrieveCommunityAverage").addEventListener("click", async e => {

        const earningsApiResponse = await submitUserEarnings();

        if(exists(earningsApiResponse.averageEarningsForToday)) {

            const sortedIndividualEarnings = [...earningsApiResponse.individualEarningsForToday].sort((a,b) => a-b);

            const lowestIndividualEarnings = sortedIndividualEarnings[0].toLocaleString("en-US", {style: "currency", currency: "USD"});
            const medianIndividualEarnings = medianOfSortedValues(sortedIndividualEarnings).toLocaleString("en-US", {style: "currency", currency: "USD"});
            const highestIndividualEarnings = sortedIndividualEarnings[sortedIndividualEarnings.length-1].toLocaleString("en-US", {style: "currency", currency: "USD"});

            const [firstQuartile, thirdQuartile] = sidesOfMedian(sortedIndividualEarnings).map(side => medianOfSortedValues(side).toLocaleString("en-US", {style: "currency", currency: "USD"}));

            embedBoxAndWhiskerData({low: lowestIndividualEarnings,
                                    high: highestIndividualEarnings,
                                    median: medianIndividualEarnings,
                                    firstQuartile,
                                    thirdQuartile});

            document.getElementById("tcLowMedHigh").innerHTML = `
                <span style='color: red;'>${lowestIndividualEarnings}</span>,
                <span style='color: orange;'>${medianIndividualEarnings}</span>,
                <span style='color: green;'>${highestIndividualEarnings}</span>`;

            e.target.innerText = earningsApiResponse.averageEarningsForToday.toLocaleString("en-US", {style: "currency", currency: "USD"});

            const total = ( todaysTotal() || todaysTotalMTS() );

            displayRank( rank(total, sortedIndividualEarnings), sortedIndividualEarnings.length );
            displayNearestCompetitorInfo( nearestCompetitorTotalAndGapTuple(total, sortedIndividualEarnings) );
            displayLeaderboard( sortedIndividualEarnings );

        }
        else if(["Your request is missing fields: total", "Your report is outdated"].includes(earningsApiResponse.errorMessage)) {
            e.target.innerText = "Work before comparing!";
        }
        else {
            e.target.innerText = earningsApiResponse.errorMessage;
        }

    });
}

main();
This isn't my script. Kad said it was safe.

That's really cool! I'd just get depressed seeing how amazing everyone else does, lol.
 

Minx2121

Well-Known Member
Joined
Jul 9, 2018
Messages
2,778
Reaction score
5,816
Points
763
Age
34
Gender
Female
I was starting to get behind but I have coffee and m&m's now and I will be having a kid free afternoon here in a bit so yay :D
 
  • Like
Reactions: CrazyCatLady

Trucker

Well-Known Member
Contributor
Crowd Pleaser
Joined
Sep 13, 2016
Messages
6,391
Reaction score
26,650
Points
1,213
Gender
Male
Greetings from Amazon Mechanical Turk,

You've received a bonus from Paul Williamson for work related to 3LB1BGHFL2XZ1DSFGMJ2L69OIJJTYE.
The value of your bonus is: $3.75 USD

The Requester included this note:
Thank-you again for your participation!

Thanks for being a Worker on Mechanical Turk!


Greetings from Amazon Mechanical Turk,

You've received a bonus from PBJ Manager for work related to 3G3AJKPCXKR03RXBPUAF7JBFANSY4M.
The value of your bonus is: $1.00 USD

The Requester included this note:
Thank you for your careful work on our HIT.

Thanks for being a Worker on Mechanical Turk!
 
Last edited:

charlie

Well-Known Member
Joined
Nov 3, 2016
Messages
6,676
Reaction score
10,742
Points
938
Age
49
Gender
Male
Title: Twitter analysis post survey | Accept
Requester: BUAIEM [A25UCIDQW5JSAM] Contact
TV: No Reviews
TO: [Pay=5.00] [Fast=5.00] [Comm=3.00] [Fair=5.00] [Reviews=2] [ToS=0]
TO2: [Hrly=26.40] [Pen=null] [Res=null] [Rec=0%] [Rej=0] [ToS=0] [Brk=0]
Reward: 1.00
Duration: 3600
Available: 1
Description: A 5-minute post survey to understand your Twitter annotation results
Qualifications: Survey EqualTo 1
[tr][td]
HIT exported from Mturk Suite v2.3.12
[/td][/tr]
[tr][td]
if you haven't done this one yet and you did the quick hits last week this one's nice and quick[/td][/tr]
 

mboone73

The Last Hit Poster
Contributor
Crowd Pleaser
HIT Poster
Half-Ass
Joined
May 9, 2017
Messages
20,565
Reaction score
54,719
Points
1,738
Location
Houston, TX
Gender
Male
Title: 500 words original article about Kamagra oral jelly in Australia | Accept
Requester: Alexey Kuznetsov [A2IO2MM262K6ZZ] Contact
TV: No Reviews
TO: [Pay=2.60] [Fast=3.77] [Comm=2.83] [Fair=4.00] [Reviews=23] [ToS=1]
TO2: [Hrly=null] [Pen=null] [Res=null] [Rec=0%] [Rej=0] [ToS=0] [Brk=0]
Reward: 3.00
Duration: 172800
Available: 1
Description: I need you to write unique article about Kamagra oral jelly in Australia. Only unique text will be accepted
Qualifications: Location NotIn AF, AL, BD, BF, CD, CF, CG, CM, DZ, ER, ET, GA, GH, GM, IN, LR, NA, NE, NG, PK, TD, UG, ZM, ZW; HIT approval rate (%) GreaterThan 82
[tr][td]
HIT exported from Mturk Suite v2.3.12
[/td][/tr]
[tr][td]
Wut?[/td][/tr]
 
  • Like
Reactions: CrazyCatLady

masterx1234

Well-Known Member
Contributor
Joined
Oct 10, 2017
Messages
1,470
Reaction score
2,968
Points
588
Age
34
Gender
Male
cant tell if its just me but is this morning dry of any HIT's popping up? I cant tell if hit finder is broken..
 
  • Like
Reactions: CrazyCatLady
Status
Not open for further replies.