Shower Thought: Can I Resurrect and Old Failed Decentralized Exchange Arbitrage Bot I’d built, sell it as SaaS?

View this blog in it’s original form on Jare.cloud!

Awhile ago I wrote this:

const io = require('socket.io-client');
const request = require('request');
var socket = io.connect("https://socket.etherdelta.com", {
    transports: ['websocket']
});

//starting bal 0.329945342678081181 Ether






socket.on("connect", function() {
    socket.emit("getMarket", {
        user: "0x8ebA329784974b96EC6293DD83bf462651BB75E6"
    })
});
const xpath = require('xpath');
const parse5 = require('parse5');
const xmlser = require('xmlserializer');
const dom = require('xmldom').DOMParser;

var Web3 = require('web3');
var web3 = new Web3();
web3.setProvider(new web3.providers.HttpProvider("http://localhost:8545"));
var totleabi = JSON.parse('[{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"handler","type":"address"},{"name":"allowed","type":"bool"}],"name":"setHandler","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"tokenAddresses","type":"address[]"},{"name":"buyOrSell","type":"bool[]"},{"name":"amountToObtain","type":"uint256[]"},{"name":"amountToGive","type":"uint256[]"},{"name":"tokenForOrder","type":"address[]"},{"name":"exchanges","type":"address[]"},{"name":"orderAddresses","type":"address[8][]"},{"name":"orderValues","type":"uint256[6][]"},{"name":"exchangeFees","type":"uint256[]"},{"name":"v","type":"uint8[]"},{"name":"r","type":"bytes32[]"},{"name":"s","type":"bytes32[]"}],"name":"executeOrders","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"handlerWhitelist","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"MAX_EXCHANGE_FEE_PERCENTAGE","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"proxy","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]')

var totle = web3.eth.contract(totleabi).at("0xd94c60e2793ad587400d86e4d6fd9c874f0f79ef");
web3.eth.defaultAccount = web3.eth.accounts[5];

socket.on("market", function(data) {

    setInterval(function() {
        console.log('lala');
        for (var d in data['returnTicker']) {
            fun(data['returnTicker'][d], data['returnTicker'].length)
        }
    }, 60000);
    setInterval(function() {
        console.log('lala arbbing');

        arbbing = false;
    }, 500000);
    console.log('lala');
    for (var d in data['returnTicker']) {
        fun(data['returnTicker'][d], data['returnTicker'].length)
    }
});
var arbbing = false;
var aTotal;
var bTotal;
var total = [];
var total2;
async function fun(d, t) {
    setTimeout(function() {
        var req = {
            "operationName": null,
            "variables": {
                "address": d.tokenAddr
            },
            "query": "query ($address: String) {\n  token(address: $address) {\n    address\n    name\n    price\n    priceChange {\n      change1h\n      change24h\n      change7d\n    }\n    bestPrice {\n      bid\n      ask\n    }\n    orders {\n      asks {\n        price\n        volume\n        exchangeId\n      }\n      bids {\n        price\n        volume\n        exchangeId\n      }\n    }\n    exchanges\n  }\n}\n"
        }

        request.post({
            url: 'https://services.totlesystem.com/graph',
            body: req,
            json: true
        }, function(error, response, body) {
            if (!error && response.statusCode == 200) {
                if (body.data.token != null) {
                    //console.log(body.data.token.bestPrice);
                    if (body.data.token.bestPrice.bid > (1.03 * body.data.token.bestPrice.ask)) {
                        //console.log(body.data.token.name + ' arb!');
                        //console.log(body.data.token.bestPrice.ask / body.data.token.bestPrice.bid);
                        aTotal = 0;
                        var aPrice;
                        var acount = 0;
                        for (var o in body.data.token.orders.asks) {

                            if (body.data.token.orders.asks[o].price <= body.data.token.bestPrice.bid) {
                                aTotal += parseFloat(body.data.token.orders.asks[o].volume)
                                aPrice = parseFloat(body.data.token.orders.asks[o].price)
                            }
                        }
                        bTotal = 0;
                        var bPrice;
                        var bcount = 0;
                        for (var o in body.data.token.orders.bids) {

                            if (body.data.token.orders.bids[o].price >= body.data.token.bestPrice.ask) {
                                bTotal += parseFloat(body.data.token.orders.bids[o].volume)
                                bPrice = parseFloat(body.data.token.orders.bids[o].price)
                            }

                        }
                        total2 = 0;
                        if (aTotal > bTotal) {
                            total2 = aTotal
                        } else {
                            total2 = bTotal
                        }
                        var token = body.data.token.address;
                        var name = body.data.token.name
                        total[token] = totaled(total2, bPrice);
                        if ((total[token] * bPrice) > (0.01 * Math.pow(10, 18))) { //100000000000000000
                            if (arbbing == false) {
                                console.log('arb!')

                                arbbing = true;
                                //console.log(body.data);;
                                console.log(token);
                                console.log(name);
                                request("https://etherscan.io/address/" + token + "#code", function(err, response, body) {
                                    if (err) {
                                        console.log('err');
                                        console.log(err);
                                    } else {
                                        // do stuff with body
                                        const html = body;
                                        //console.log(html);
                                        const document = parse5.parse(html.toString());
                                        const xhtml = xmlser.serializeToString(document);
                                        const doc = new dom().parseFromString(xhtml);
                                        const select = xpath.useNamespaces({
                                            "x": "http://www.w3.org/1999/xhtml"
                                        });
                                        const nodes = select('//*[@id="js-copytextarea2"]/text()', doc);
                                        //console.log(nodes);
                                        var contractABI = JSON.parse(nodes);
                                        var contract = web3.eth.contract(contractABI).at(token);
                                        if (contract.stopped) {
                                            var stopped = contract.stopped.call();
                                            if (stopped != true) {
                                                console.log(body.data.token.name + ' arb! ');

                                                buy(token, total[token], contract);
                                            } else {
                                                arbbing = false
                                                console.log('stopped! eos?')
                                            }
                                        } else {
                                            console.log(name + ' arb! ');

                                            buy(token, total[token], contract);
                                        }
                                    }
                                });

                            }
                        }
                    }
                }
            }
        })


    }, Math.random() * t * 200);
}
async function buy(token, total, contract) {

    var reqbuy = {
        "buys": [{
            "token": token,
            "amount": total
        }],
        "address": "0x8ebA329784974b96EC6293DD83bf462651BB75E6"
    }
    request.post({
        url: 'https://services.totlesystem.com/suggester',
        body: reqbuy,
        json: true
    }, function(error, response, body) {
        if (!error && response.statusCode == 200) {
            console.log(body);
            var tx = totle.executeOrders(
                body.response.orders[0],
                body.response.orders[1],
                body.response.orders[2],
                body.response.orders[3],
                body.response.orders[4],
                body.response.orders[5],
                body.response.orders[6],
                body.response.orders[7],
                body.response.orders[8],
                body.response.orders[9],
                body.response.orders[10],
                body.response.orders[11], {
                    value: (body.response.ethValue),
                    from: "0x8ebA329784974b96EC6293DD83bf462651BB75E6",
                    gas: 400000,
                    gasPrice: "6000000000"
                })
            console.log(tx);
            approve(tx, token, total, contract);
        }
    })


}

function totaled(total, price) {
    if ((parseFloat(total) * parseFloat(price)) > (1.05 * parseFloat(web3.eth.getBalance("0x8ebA329784974b96EC6293DD83bf462651BB75E6")))) {
        var atotal = total / 1.3
        totaled(parseFloat(atotal), parseFloat(price))
    }
    return parseFloat(total)

}
async function approve(tx, token, total, contract) {
    web3.eth.getTransaction(tx, function(err, receipt) {
        if (err) {
            console.log(err);
        }
        console.log(receipt.blockNumber);
        if (receipt.blockNumber == null) {
            setTimeout(function() {
                approve(tx, token, total, contract);
            }, 30000);
        } else {
            var approve2 = contract.approve("0xd94c60e2793ad587400d86e4d6fd9c874f0f79ef", (total), {
                from: "0x8ebA329784974b96EC6293DD83bf462651BB75E6",
                gas: 250000,
                gasPrice: "6000000000"
            })
            sell(approve2, token, total, contract);
        }
    })
}
async function sell(tx, token, total, contract) {
    console.log(tx);
    web3.eth.getTransaction(tx, function(err, receipt) {
        if (err) {
            console.log(err);
        }
        console.log(receipt.blockNumber);
        if (receipt.blockNumber == null) {
            setTimeout(function() {
                sell(tx, token, total, contract);
            }, 30000);
        } else {
            arbbing = false;
            var reqbuy2 = {
                "sells": [{
                    "token": token,
                    "amount": total
                }],
                "address": "0x8ebA329784974b96EC6293DD83bf462651BB75E6"
            }
            request.post({
                url: 'https://services.totlesystem.com/suggester',
                body: reqbuy2,
                json: true
            }, function(error, response, body) {
                if (!error && response.statusCode == 200) {

                    console.log(body);
                    totle.executeOrders(
                        body.response.orders[0],
                        body.response.orders[1],
                        body.response.orders[2],
                        body.response.orders[3],
                        body.response.orders[4],
                        body.response.orders[5],
                        body.response.orders[6],
                        body.response.orders[7],
                        body.response.orders[8],
                        body.response.orders[9],
                        body.response.orders[10],
                        body.response.orders[11], {
                            value: (body.response.ethValue),
                            from: "0x8ebA329784974b96EC6293DD83bf462651BB75E6",
                            gas: 4000000,
                            gasPrice: "6000000000"
                        })
                }
            });
        }
    })
}

This code is now defunct as Totle removed some of the functionality on their GraphQL endpoint, so gathering the best bid best ask out of all their constituent Dexes – they have dozens! – is not possible.

I tried to find a competitor dex aggregator to come up with this information, and a lo and behold stumbled on 0x’s API docs. Now, I can combine some of the Totle API docs and 0x Radar Relay API docs to built something genius. First, let’s grab all of the tokens from each of their API endpoints we want to check for arbitrage opportunities.

    r = requests.get('https://api.totle.com/tokens').json()
    print(len(r['tokens']))
    
    r2 = requests.get('https://api.0x.org/swap/v0/tokens').json()
    print(len(r2['records']))

We’re then going to start a new thread for each of these tokens, and run a multithreaded Python script so that it can check in on more then a few tokens in the timeframe it would have been slowly moving through the list for my original code in nodejs.

   for token in r2['records']:
        time.sleep(0.8)
        
        thread.start_new_thread( print_time2, (token['symbol'], token, ) )
    
    
    
    for token in r['tokens']:
        time.sleep(0.8)
        thread.start_new_thread( print_time, (token['name'], token, ) )

Next, we’ll check our 0x threaded function.

In a forever while loop, we sleep for a random amount of time. This helps from getting 502 or 503 errors from the API endpoints. We’ll calculate the Math.pow(10,18) in decimal notation for grabbing our token swap info, and then make these two requests:

        r1 = requests.get('https://api.0x.org/swap/v0/quote?sellToken=WETH&buyToken=' + token['address'] + '&buyAmount=' +str(one)).json()
        r2 = requests.get('https://api.0x.org/swap/v0/quote?sellToken=WETH&buyToken=' + token['address'] + '&sellAmount=100000000000000000').json()
        

we want to buy 1 worth of a token or sell 1 worth of an ETH for that token. That gets us two very different prices, like:

0.001045214514088444
956.69872684175248674

If we take the inverse of the first price, and compare, we’d see

956.7418729561602

956.6987268417524

If the 2nd price here were higher (after we figure in fees for the transactions), we’d be able buy for the lower price and sell for the higher price and earn a % in difference.

Alas, there are any number of arbitrage opportunities that exist almost all the time, when you don’t count the fees in every case – some of these are for whopping 20, 30, 1200% return on equity if you can be the ‘first in and first out’ on these arbitrage trades.

My claim to fame will be to see if I can index the coins that existed in the program’s first runtime. We can assume each of these opportunities have already been acted on, and that there’s no more volume for us to pick up as an arbitrage trade. When I tried running the above fully-built end-to-end decentralized exchanges arbitrage script, I was constantly running into errors as the orders in the books had already been executed against. Using my new python threaded application I can keep a close eye on what these trading pairs are doing and I might well be in first on an opportunity!

Another opportunity exists within Totle’s partner program. Should I be able to build an SaaS that allows others to arbitrage for a small fee or subscribe monthly for my cut of the fees reduced, I can offer this arbitraging experience at more people – #Build, and people will come for free-money sure-bets.

Given that I’m also looking for opportunities within 0x relays, there could be a few different offerings for an SaaS arbitrageur’s marketplace.

See how the big boys are making $100s $1000s with decentralized arbitrage: https://stat.bloxy.info/superset/dashboard/arbitrage/?standalone=true

Revenue Models (for Crypto Trading Bots) Compared: Crowdfund, FOSS, Referral Fees, Subscription, Profit Share

View this article in it’s original form on https://jare.cloud!

Introduction

During my ages-long hobby of creating bots to offer to the general public, I’ve ran into a question that most entrepreneurs will face at some point: What sort of revenue model will I employ? Let’s look at some common ones in my niche and compare.

Crowdfund

Probably my favorite on paper is crowdsourcing the money to run a bot. It has some distinct advantages: if you have more and more capital on one account, exchanges like Binance have less and less fees.

For a lot of my bots, the edge over the market comes from incremental increases in the amount of profit each trading cycle brings in – and, for instance, the market maker bot’s incomes are almost entirely dependent on the fee rebates (where applicable) and the % between bid and ask. Having even less fees when trading with this much vitality is important – and can create significant boosts to yield.

The detriments are, of course, that you then become an extra single point of failure and people don’t tend to trust their funds to these sorts of operations. ‘Do Your Own Research’ is in full swing in the crypto community – also putting a heavy weight on your shoulders – and I commend it! It leaves crowdfunding as an option best kept among a small circle of friends, though.

Free and Open Source Software

Also helpful is free and open source software – as it helps drive your traffic and credibility. My Github boasts over 100 distinct FOSS repositories, driving quality and qualified traffic to my chat rooms and email.

The drawback, of course, is that there is no direct income from this method.

Referral Fees

Another one of my favorites are referral fees – when someone uses your referral link, for instance for Binance, and you receive a cut of their fees. Sometimes this can be for a year or for the lifetime of the member’s use of that exchange.

This gives a certain vested interest in the bot – if your customers succeed, you succeed. However – if they fail, you succeed then, too 😛 All in all, if they continue using the software over a period of time and have continued success, then it drives your revenues.

The drawback here is that referral fees are only at max 3/10 of 1/10 of a % of the trade’s value – d’oh!

Subscription

A subscription model is sometimes where I land for projects I’m confident about. It allows there to be a trustless relationship and allows you the benefit of having the subscription funds for the first interval of time upfront – where in others, you might have to wait (or never see revenue, at that).

The drawbacks are that people are hesitant to spend money where there might be a conceivable scam going on to separate them from their money – or, in a  more general sense, have a problem trusting other people. That’s ok, really! Crypto was invented so we could have trustless, decentralized systems.

Profit Share

Maybe the ultimate solution from these models is the profit share. If someone realizes gains of 10% in a month, I take 3% of the total (30% of the gains) and everyone’s winning.

If they lose, some people are looking for a guarantee – that is, having me or the organization at large pay for the losses as a kind of insurance. This doesn’t really make a whole lot of business sense, as you need to limit your downside potential. A profit share without insurance really does increase the upwards potential over subscription fee, though!

Conclusion

I’ve found that people don’t really take FOSS or Referral Fee revenue models all that seriously. There’s an insane correlation between price and quality that all these years of growing up in capitalist corporotacracy have left us with.

A mix of Subscription and Referral Fees or Profit Share and Referral Fees is probably best, in most cases – or offering both. If someone has a large amount of capital they wouldn’t want to sacrifice 30% in a profit share, and if someone only had a fraction of a ETH they wouldn’t want to pay 0.75 ETH a month in a subscription.

Bonus

Look for new and upcoming bots, like this Sentiment Analysis (Name TBD) bot… the last two graphs are after implementing a trailing take profit and guessing at values for trigger and stop! These would need to be optimized by the use based on their aversion to risk.

Free Proxy Rotator – Complete with Code Tutorial and Working Product

freeProxyRotator

The code lives here, git clone this directory or use GitHub interface to download .zip: https://github.com/DunnCreativeSS/freeProxyRotator/

See video of me detailing how to write this app from start to finish here: https://lbry.tv/Free_Proxy_Rotator

Use

  1. npm i proxy-lists request-promise socks-proxy-agent
  2. Change this text: /home/jarettrsdunn/testnet-inter-exchange-volume-sma-crosses-trader-on-bitmex-/ to your webserver root WWW directory (usually /var/www/html on Linux).
  3. node proxies.js – this cannot be run as root. It also needs access to your webserver or a directory on it.
  4. Wait a little while, until there’s output from the node file into terminal.
  5. DuckDuckGo search how to load a .PAC file into your favorite browser to rotate your proxies for you according to PAC rules. Otherwise, watch the video! I go over how to configure it in Chrome/Brave without need for an extension.
  6. Your PAC address is (ipOrDomainOrLocalhost)/proxies.PAC.
  7. So long as the node app is running, your free proxies will update in realtime. It’ll keep testing them to see which are working, and should (for the most part) work to secure your browsing via SOCKS4/SOCKS5.

Check

This probably won’t update all that often, but it’s a good sample of what a PAC would look like:

http://jare.cloud/proxies/proxies.PAC

Troubleshooting

  1. sudo mkdir /var/www/html/proxies
  2. sudo chmod 777 /var/www/html/proxies
  3. change the path at the bottom of the proxies.js to /var/www/html/proxies/proxies.PAC
  4. your PAC now lives on (ipOrDomainOrLocalhost)/proxies/proxies.PAC.

Two Sides of Free Money on Compound.Finance – and Opportunities for Staked.us

Introduction

DeFi or Decentralized Finance is changing the ways people interact with money. Check this CoinTelegraph article on ‘decentralized finance, explained.’ DeFi empowers people across borders to bank in ways that only the underlying trustless, immutable tech that is Blockchain could allow. 

In this article, we’ll look at two new and novel ways to approach lending and borrowing to achieve previously unheard of situations. Traditional lenders and institutions would cringe if they knew more people were aware of how to use their funds wisely. We can both avoid unnecessary fees and middlemen by using DeFi.

The difference among DeFi and centralized finance is that with DeFi you hold your keys and nobody else has access to your funds – only your wallet, interacting directly with the platform or protocol. There’s no middlemen and no counter-party risk. You can read more about the risks involved with handing over your cash to a middleman in this other article I wrote.

Free Money #1: 0% APR Secured Loans

I coded a small script that checks the borrow and lend rates on compound.finance. I then calculated which of the coins backed by USD (stablecoins) I could borrow for the least amount of annually compounding interest. Next, I got the average of lending interest rates for all the other coins on the platform. Dividing the two into a quotient, I can get an amount I can borrow as a secured loan against my capital – while lending to an index of the other coins on the platform – to effect $0 per year in accrued interest on my loan.

If someone were to build a platform on top of this, they could include other DeFi solutions like torque.loans and fulcrum.trade to net even more beneficial rates of yield and interest on amounts borrowed – meaning you could index more coins and generate a higher $0 and 0% borrowing amount. The platform would show your gains/losses for the tokens on next login – and there’s a chance your BTC or ETH (or any other token) have appreciated 10x since your last login, allowing you to borrow more at $0 or 0%. During that time, your holdings would have appreciated based on the difference of lend/borrow rates. In the case some tokens depreciate in face value, your interface would present you with a ‘rebalance’ option. It would allow you to deposit (and then index) more to all the tokens or whichever you’re most comfortable with. If you decide to lend DAI and borrow USDC, another interesting idea pops up…

If you have equity and want a cotterilizied, on-chain solution to it, you can borrow risk-free by doing 0% loans.That would bring a bunch of interesting endeavors. I do have some friends that would pounce on  capital secure, fully liquid (withdraw your capital at any time, less the fees into locked, secured accounts that you can trust- trustlesly.

Look, more DeFi is more eggs in more baskets (in a risk-averse sense), and even finds more competitive rates to use against USDC so you can have more than half your money back while hodling a cross-selection of Eth and Ether tokens (like Wrapped Bitcoin) that might potentially explode in value.

We can index and figure out which are non-custodial, then launch a service.

Free Money #2: Interest Rate Arbitrage: Borrow to Yield

Now, 0.73% difference doesn’t sound like much. Let’s keep in mind that a new platform with a new smartcontract might for instance copy what staked.us does for RAY contract and get even higher yields by indexing more DeFis, where the yields are sometimes higher. For the purpose of this doc we’ll say the solution in place uses compound’s smart contracts. I’d already figured out the web3 magic in the past to deposit and withdraw from compound.. This means our funds will remain liquide and we can ‘double down’ our proceeds in the same interface.

Now, on Compound we can deposit anything and get our capital out without a lockup. If I lean on Compound I still earn interest on the asset I borrow. I start off with $100 000, and I can get $75 000 USDC by completing that loan. Now, I’m paying 8.08% APR on the $75 000.  My portfolio size is now $175 000. Now, I repeat. First, I go to uniswap and transfer USDC for DAI. I take the maximum loan I can from $75 000, and I can increase my portfolio size to $400 000. It’ll look something like this:

Remember that you can only ‘bite off more than you can chew’ in situations like these, where you earn more from lending another like asset (meaning the value would be or remain around the same).

Now, it’s important to think that if you’re risk-averse to speculative to coins rises or sudden falls, it’s possible to exclude the speculative coins from the list of coins they’re considering – say, only hold DAI and SAI, never Eth or WBTC.

Conclusion

I’m daring the fine folks at staked.us to build these into fully functionable marketable products – or by streamlessly linking them to their current Robo Advisor for Ray, have a look:

https://github.com/Stakedllc/robo-advisor-yield/issues/11

https://github.com/Stakedllc/robo-advisor-yield/issues/12

EDIT: Turns out Great Minds Think Alike (or Simple Ones Seldom Differ): https://github.com/Stakedllc/YIPs/issues/8

Growth Hacking YouTube For Views Funneling Into Clicks and Referrals

Note that this is a case study that paints a picture and then shows specific results. To emulate these results, you’d need to find your own niche and add new value to some other community – this is a very specific instance of a community I’m very familiar with, and already invested in.

>> Pique your interest about Brave, and $BAT? Download the browser here – and start earning on your own terms, with a more private and secure browsing experience! <<

YouTube is an playing field for alternative monetization techniques. Awhile ago, I started diving into the world of being a publisher on the Brave browser’s $BAT Ecosystem. Being an avid fan of Karl Pilkington’s radio shows, podcasts, and TV shows on YouTube, I wrote a brief note to some of his more prominent publishers there on YouTube:

I immediately thought to myself that I might capitalize on that:

And so – an idea was born. I’d take originally reposted content and repost that content back onto YouTube, after removing watermarks and creating a net-new piece of content to add value to the community of The Ricky Gervais Show followers, while planting a seed for my referral link for Brave. This would allow people to download the Brave browser and increment my Brave referrals (paying up to $7.50 if some geographies keep the browser installed 30 days), and people who kept viewing my new content with their new browser would also trickle down some of their new earnings they get by viewing ads in Brave back to me as I own part of their ‘attention.’ It is, after all, the Basic Attention Token.

Look – since the inception of this project, 35% of my attention has been focused on myself. Look, too, I renamed my YouTube channel from a boring and non-branded ‘Jarett Dunn’ to a TRGS quote – as most other publishers in this space have done with channel names like PilkBoys or Bald Manc.

Anyhow, I downloaded a YouTube video bulk download tool for Windows from GitHub. It allowed me to enter in a playlist and it would scrape the video file from each constituent member of that playlist. Afterwards, I used my extensive knowledge of the subject matter to retitle the episodes creatively so that my content sources might not be aware of the plot being executed. In this particular case, this isn’t terrible nefarious as they’d all ripped the content from BBC and old English radio stations – they’re all perpetrators of the same means and ends!

Opensource!

I then replaced the video track of the file with a static .png image I created in MS Paint.

I Googled until I combined a few different Windows batch (.bat) scripts to automate this process to loop through all of the files in the directory, and run the video manipulation program ffmpeg to edit the files. This outputs it in a codec and filetype that YouTube likes and contains the tags and metadata where it likes in order to process the files as quickly as little YouTube encoders can!

Here’s what that code looks like:

@ECHO OFF

setlocal enabledelayedexpansion

for %%f in (.\*.mp4) do (

  set /p val=<%%f

c:\users\jarettrsdunn\Downloads\yt\ffmpeg.exe -loop 1 -framerate 2 -i c:\users\jarettrsdunn\Pictures\lands.png -i “%%f” -c:v libx264 -preset ultrafast -tune stillimage -crf 18 -c:a copy -shortest -pix_fmt yuv420p “%%~nf For YOU!.mkv”

  echo “fullname: %%f”

)

At one point, I found it prudent to cut 4m30s from the beginning of some of the video files – listening to the same intro countless thousands times myself, I thought I’d save my viewers from the same issue.

Here’s what that other piece of code looks like:

@ECHO OFF

setlocal enabledelayedexpansion

for %%f in (.\*.mkv) do (

  set /p val=<%%f

c:\users\jarettrsdunn\Downloads\yt\ffmpeg.exe -ss 270 -i “%%f” -c copy -y “%%~nf-!.mkv”

  echo “fullname: %%f”

)

Next, we use YouTube’s horrible uploading tool (albeit, when we can we can do 15 files at once instead of 1 by using the classic tool instead of the brand-spanking-new one), label the videos and give them a description. Here’s where the magic comes in, here’s a boilerplate description:


Read all my articles in the Head Like a {Messin’} Orange category all about Karl, Ricky and Steve here on my blog: https://jare.cloud/category/head-like…

!! https://brave.com/laz390 !!

Support this channel and many countless hundreds thousands others for FREE while also earning yourself for browsing with a safer, more privacy-protecting experience using Brave – paying YOU for viewing ads while also removing annoying, long and boring third-party ads across the web!

!! Download Brave now and earn $BAT! https://brave.com/laz390 !!


Now, for the juicy bits – 24 hours and 2 sets of ~100 uploads later, let’s look at some stats!

I think the above charts speak for themselves!

Conversationally (and no, I haven’t been uploading smut – I promise!) the three most viewed new videos in this experiment mention ‘SEX,’ ‘boobs’ and ‘masturbation’ – a sad commentary on the state of YouTube searches.

All in all, I’ve managed to create myself a new (evergreen, residual…) revenue stream – it might not seem like all that many views, but as I’m fighting for every email signup and cent of ad revenue on the blog, it’s a good start in the right direction. What it really means more than anything is that anyone can achieve some very strange or unprecedented growth hacks by applying some ingenuity and a touch of automation to save on the sweat equity. This has bigger implications for people with loftier goals or – dare I suggest – a marketing budget.

ANNNNDDDD… Three days after the first YouTube post, we have our first successful Brave referral download! While it didn’t yet convert to an install, it is in the highest yielding tier for geos (USA).


No I Will Not Attend Your Event: As Prospect, Prospector or Media. Here’s A Piece Detailing Symptomatically Why I Will Not

Quite often, as I’m a voice in Blockchain and tech, I’ll receive a nice and friendly invite to an event – sometimes as I open discourse in another vein or sometimes as an opening gambit. This has been more and more prevalent as time goes on – and it’s a sense of sadness for me, as I’d really like to be more engaged with the larger community, and going to these events would allow for that, but I’m symptomatically unable to do so. I’d also like to travel more, see more, and do more, but it’s a safer bet to stay close to home where it’s warm, cozy and safe.

Unfortunately – I’m realistically unable to handle large amounts of people at once, or people in any sense of the term. I’d also be unrealistic to think I’d get away from my circle of support for any extended period.

While hallucinations and delusions are a thing of the past, I still have the overarching threat of these positive symptoms – being in the presence of people I don’t know will bring on memories of hearing their thoughts inbetween their spoken word, which triggers a panic cycle I’m all too familiar with – having also a concurrent diagnosis for panic disorder – even without the stimuli of an actual hallucination.

Moreover, I’m simply anxious and unwieldy in groups. I can assess a sense of an undertone or vibe and all of a sudden I’m lost in a train of introspective thought: do they know what they’re implying? Do other people hear the words between their spoken words? Am I losing my mind again? Should I say xyz, or abc? Which will add to the tension more than alleviate it?

What’s more is that the negative symptoms of schizophrenia – or, rather, aspects or abilities I’ve lost since the neurological imbalances set in, rather than things I’ve ‘gained’ (like hallucinations or delusions) – have a huge impact, as well. What I mean to say, specifically, is that things like a lack of motivation or even awareness of my own self-care and cleanliness would be damaging to my image should I attend an event. Even with the outside forces motivating me to dress or smell better than I normally do, 12 years of too much caffeine, nicotine and not enough brushing have left my teeth in a dismal state – to the point where I don’t smile with an open mouth.

My mental health keeps me within the confines of my own humble abode more often than not. This is particularly damaging for my social relationships with friends and other people, but it’s good news for my ability to concentrate on the things I task my time with – like pushing out content.

I’m hoping other people with social anxiety and a pension for being homebodies will find a use in this article. It can be a crippling affliction but should you frame expectations properly it can be overcome.

The Things He’s Said in Gobbledegook, But It’s True

We’re all probably familiar with some of the more obvious times Karl Pilkington was right about one of the things he’s said or theorized about, although with a touch of creativity applied – like someone giving their baby to their new husband’s gorilla for a week, or the leech-nosed man creating looks of frightenedness after drinking water from a muddy stream.

Some less-obvious examples that aren’t immediately identifiable by people reproaching Ricky and Steve on the show are things like the guy with the bad cancer that came out of his throat to eat the meat that his wife had prepared. He’d choked to death, indeed – but rather than on a ‘bad cancer,’ the actual story reports a tapeworm that had grown out-of-control.

What’s important to consider here is whether or not some of Karl’s weirder thoughts – what would a world where octopuses have two heads be like? – have some roots in plausibility. He’s considered some strange scenarios and gotten to some stranger resolutions that might be a light of shining glory when his little round head is uncovered in millennia to come.

Image result for karl pilkington orange

Once, Steve reads a synopsis of a story written about a post-apocalyptic future where different breeds of grazing rats and predator rats emerge as the victorious species, and posits whether or not a race of super-intelligent rats would evolve from the barren waste – and while Karl listened, he’d probably thought to himself that’s just as likely as any of the scenarios I dream up. The difference is that one is a respected author whose written it and immortalized nonsense in a book, where Karl is painted for the world to see as a nonsense man not to be taken seriously.

What are the implications? I think that a university degree whose subject is the life and times – and theories – of Karl would indeed be an interesting diversion. It’d enthrall both the person studying and reporting, as well as countless thousands of us bald Manc supporters around the world. It’d be fun to see an itemized list of all the times Karl had a story just a little embellished vs. completely wrong…

All in all, we can learn a lot from the ramblings of a maniac – from Karl’s musings and contemplation. I think that he has – as Ricky often says – a child-like and innocent, inoffensive view of the world and everyone in it (aside from maybe, sometimes, Steve). I think that most people can take a page from Karl’s book and instead of hating that which they cannot understand, we can look to try to conceive it in our own little perspective – in awe and wonder, like Karl does.

Subscribe to Lazy Nonsense, Badly Organized & Believe in Ghosts on YouTube!

Interested in reading more of what I have to say? Brilliant! You can have a look over some of the stuff I’ve written about new & novel business ideas here, or some of the motivational and self-help ramblings I’ve gone on here.

I think I’ll truly enjoy writing more and more about my understanding of Karl’s wealth of knowledge – in his ignorance, there’s a lot to be reflected on and learned. You’re welcome to join me on this journey 🙂

Just remember when you’re feeling down that the three of them had no idea what they call the leader of China for a good 2 weeks…

Take a Paradigm or Assumption: Is It Necessary? A Methodology

View this article in it’s original form on jare.cloud!

When God was making Eve, did a deer take notice?

When Man was making Machine, did the deer understand the implication?

When Biology created Man’s brain, was there a deer who thought about it – considered it, beheld it?

When Man devised the origin of the Universes, The Big Bang Theory, and String Theory, and when Physics combined Carbon and Hydrogen and invented Biology – was there a deer who was impacted, in a way that the deer took pause?

Interested in a browser – built on Chrome, with all your favorite features – that rewards you to browse while protecting your data and privacy by default? Check out my non-technical description of Brave Browser’s power over controlling your personally identifiable information here!

When Machine invented Memes, do deer find them necessary?

This is the methodology I apply to paradigms and assumptions. If we take a theory of piece of propaganda as gospel, is it required to function as a being on the Earth? Even less so than the deer, does an ant have currency – or do they deal in the requirements for life? Do bees barter with honey?

This is a simple concept with huge implications. Most people don’t question these assumptions and paradigms, and most people don’t see a world that revolves without the ideas pushed on us from a very small age. The lessons our parents and societies teach us define the ways in which we think, the ways we frame our thoughts and how we communicate.

Image result for what I say what people understand

In 1984, George Orwell proposed a dumbed down version of English called Newspeak – the theory was that people who can’t think of a word let alone effect it in speech will not be able to express or feel dissent and discontent. Our society has this same war on language, without ever expressing their goals: short-hand leaked emails among the world’s most powerful people illustrate this in grave detail. Think how Trump’s Twitter being the official communication from the White House has further effected this outcome…

The logotype for [Ingsoc](/wiki/lang_en/Ingsoc) from the film *[Nineteen Eighty-Four](/wiki/lang_en/Nineteen_Eighty-Four_(1984_film))* (1984), directed by Michael Radford. Main Image

When we can’t contest what is forced on us, will we become more and more the deer? Oblivious and ignorant, just like Orwell’s warnings about the future us would have us chant:

war is peace
freedom is slavery
ignorance is strength

What endgame does having currency as an ingrained and indisputable concept – a necessity to function – truly serve? Whose agenda pushes this envelope on newborns? In the same light – and not meaning to drive argument here, just pointing it out – how does financial objectives play a factor in whether or not every child is vaccinated? Wouldn’t the big money put big money into ensuring they get greater returns, regardless of medical implications? Why is car insurance a legal requirement to operate a vehicle? Why are licenses a legal requirement to do anything?

Think.

For other senseless drivel about the plights of people with mental health disorders, and how some overcome these throes, check this other article of mine – Schizophrenia, Death Sentence or Gift?

Want to learn about new articles in tech and being a madman? Subscribe to my mailing list here: http://eepurl.com/gIykNL

A Social Experiment In Influential Linguistics: #KoalaNation

View this post in it’s original form on Jare.cloud!

Since 2016 I’ve been planting a seed in common colloquial: I mention koalas, pandas, dolphins (or dolfins, dolfinians) or any other number of cute and cuddly animals — even mentioning ‘thundercat’ more than a few times.

Since then, on my Facebook I have some conversations with 172, 188 results for ‘Koala,’ with instances in 98 conversations total. The most affected of the users in the experiment have been affectionately nicknamed after koalas, or another animal.

Notice it’s a play on Tim, my geekiness he doesn’t quite ‘get’ and also Pandas
A theme?

Looking for a more general guide on achieving goals and surviving the existential crisis of day-to-day life? Read this article on the only two pieces of advice you’d need!

The intended effect was to see if I could imprint and have an effect on people’s language through nonsensical verbiage. I pressured myself into this exercise as I saw the backlash — and violence — surrounding the LGBTQ+ community’s desire to have some people referred to by their invented pronouns. The issue with people wanting to be called by ‘zhim’ or ‘zher’ in the larger sense is that it encroaches on free speech — forcing people to use words that aren’t in their vernacular because it’s personal preference is a bone of contention for many, causing actual riots and abuse of all kinds. This has seen both sides of the debate in arms and hurting people.

Note that I’m not implying support or detraction from either side of the argument. I understand wholeheartedly people going through the struggle of re-identifying themselves according to what makes them happier or more whole: having even housed and supported a friend of mine going through a transformation and a divorce, once. I also completely understand that no one person institution or government should influence the way I talk, the way I frame my thoughts or the way I express them. It’s a #dangerzone topic.

If people can cause all sorts of mayhem by insisting they influence people’s linguistics, could I have a seemingly better approach? Could I influence language by inception and ‘planting the seed’ — even if it’s for far less of a consequence or goal? Could I create a new trend, even if it’s among a select few individuals?

Case in point aka. QED, #1
Planting the seed aka. Inception, #1
Case in point, aka. QED #2

QED: Quod Erat Demonstrandum

Literally ‘what was to be shown,’ mathematicians and philosophers write QED as they prove a thesis or hypothesis. As such, I think that after 4 years of this experiment I can wholly say I’ve proved what was to be shown. I draw your attention back to the original photo in this article: a friend of mine, of her own will, decided to draw up a Venn Diagram comparing #KoalaNation to the Manson House.

Other implications aside, it’s a clear and concise victory over the thought and speech patterns of her and countless dozens — nearly 100 — other people. She’s identified in her own mind an association between random nonsensical speech she’s heard over and over again, and applied it to greater allegories in her mind. This trend shows itself again and again with the people who’ve been introduced to this inception — growing into a real, live, breathing metaphor for who we are and what we represent.

What does this mean for transgender pronouns? Probably not too much — but I think that anyone looking to influence people and affect minds can take a page out of this book. Simply drop the thought into someone’s mind, plant that seed and effect that inception — if you’re subliminal about it, and without a clear and concise selfish outcome — you’ll change the way people behave.

Interested in other methods (supported by the mind of a maniac) for influencing people and winning friends — and how we can apply Maslow’s Hierarchy of Needs to those goals? Read this other article I wrote!

Want to learn about new articles in tech and being a madman? Subscribe to my mailing list here: http://eepurl.com/gIykNL

Now ANYONE can Make Money Online with My FREE Retail Arbitrage Tool!

For anyone who doesn’t know, #Retail #Arbitrage is #buying #low and #selling #high from different retail outlets or #platforms. I created an #aggregator that gets items via search and compares them for similar titles and shows the % and $ #gains, from #aliexpress to #ebay, for the top 300 results on each site.

This tool is #free!

Tool: http://arb.jare.cloud/

Backstory: https://jare.cloud/2020/01/16/amazon-ebay-aliexpress-retail-arbitrage-as-a-service/

Youtube of it in development: https://www.youtube.com/watch?v=f7Pj7q3hXsU

Opensource Github repository: https://github.com/DunnCreativeSS/arb.jare.cloud

arb.jare.cloud

http://arb.jare.cloud

Changelog:

0.01.01: initial commit. Live. Works with Aliexpress and Ebay. Earns thru affiliate $.

0.01.02: Changed the logic so that ebay and ali objects are unique to sessions. This increases performance if there is more than one concurrent user from an unusable platform.

0.01.03: Added Git link to result page. Added Google Analytics tracking.

Todo:

  1. Get Amazon affiliate sales.
  2. Implement Amazon affiliate API for third aggregate source.

The Pitch

You can secure surebet, arbitrage income by searching whatever floats your boat and seeing how similar the titles match for these goods on Ebay and Aliexpress, For free! See those links there? Those are affiliate links – meaning that if you do find a way to earn big money buying low and selling high from one marketplace to another, I earn a percent of those sales. Want to sell hundreds of these items? Buy hundreds, then! Want to wait until your sale has gone through on Ebay, then buy the item with the proceeds and ship it directly to the customer? Chances are you’ll be doing it through my same referral link.. and we all win!

Next Steps

I want to include Amazon Affiliate API results to compare against these two. There’s a chance for more ways for people to arbitrage – buy on ebay, sell on Amazon? Alas, Amazon’s Affiliate API is only open for business after you sell three items on their affiliate platform. Boo!

How Does It Compare?

Other retail arbitrage tools will charge you hundreds a month for membership. They also have fancy tools to help you bulk import selections, but my revenue model comes from those little affiliate links – so the bulk import tools aren’t necessarily conducive. Some people might prefer paying a subscription to get access to these premium tools – others would prefer cut costs and use a free tool to find their sure-fire winning merchandise!