El Shaddai

“GAME THEORETICAL ANALYSIS OF RESOURCE ALLOCATION IN THE INTERPLANETARY FILE SYSTEM” has been accepted

ETD Administrator <etdadministrator@proquest.com> Tue, 27 July 2021, 8:26 PM to me

Dear David,

Congratulations. Your submission, 12224 has cleared all of the necessary checks and will soon be delivered to ProQuest for publishing.

Regards, Colorado School of Mines Administrator

was it worth it?

absolutely. but it took a long time to come to that conclusion


Josiah was actually the one to find IPFS in the first place. I sent him email-rants detailing my plans for a shared music server. See, we wanted a system where a group of us could share music on a Linux server (read: an old, sad, broken laptop that I plugged in at home and kept on the Internet at all times). It’d be especially cool if our computers could directly exchange music, rather than having to go through my abused laptop. Something like a torrent. But a torrent is a static set of files – you can’t add, remove, or change the shared data without creating a new torrent. So I wanted something like BitTorrent, but with a dynamic set of files.

He responded to one such email-rant with:

9 July 2016, 12:42 PM

Love your emails David. They always have a lot of personality.

So I changed the copy location, but my home directory just has “~/queue”. I’m not sure that this is the case for everyone, but something I thought I would mention. With the search functionality, there are some permission problems with trying to search music_admins library. I found a couple plugins for beets that might be helpful for our purposes: Chromaprint/Acoustid Plugin and IPFS Plugin. Check em out. Let me know if you have anything else.

-Josie

Not long after, I found Juan’s now-classic Stanford Seminar talk entitled IPFS and the Permanent Web. I was immediately excited by the project; signed on with my graduate professor DJ Yang, whose research group focused on Game Theory and Networks; and emailed Juan about contributiong via my masters research. My first semester in DJ’s group would be the Fall semester of 2018.

My thesis proposal was accepted in May of 2018. The focus would be on implementing incentive systems into Bitswap, the block exchange engine of IPFS, and analyzing those incentives through a game-theoretic lens. I proposed an ambitious combination of theoretical analysis, numerical simulations, and real-world implementation.

Before and during all of this, my mom and I had been sifting through the wreckage that my dad had left of our lives. Growing up, my parents had always promised to pay for my school as long as I lived to my potential. As much as my mom wanted to follow through with the agreement, there was simply no way after the destruction he caused. I needed to find a way to support myself.

Tue, 3 April, 2018, 11:53 PM

You applied for the Cryptoeconomics Research Intern or Master Thesis position 5 days ago and Clément Lesaege from Kleros responded with interest.

I was offered a research internship in Portugal, to work with Kleros on a decentralized arbitration system. Kleros existed in the same sphere as IPFS, which made it an amazing opportunity in so many ways.

But I had to pay my way there; to get my visa, I had to pay off my tuition so I could obtain my transcript; I had no money.

I applied for Lyft, because Uber had an application fee. To pass the car inspection with Lyft, I dug out just enough change to buy a replacement taillight bulb for my car. On 6 July 2018, I gave my first Lyft ride.

Thu, 21 March 2019, 2:19 AM

Hi Clément,

I wanted to email you regarding my research internship that’s been pending for awhile now. First off, I want to you know that my time has been dedicated to getting to Portugal to work with Kleros – I never wanted to take this long to get out there, and have been trying my best to make it happen over the past year. However, about a year before the internship my life/financial situation took a pretty drastic turn. Because of this, it’s not as easy to take advantage of opportunities like this one as it used to be.

I think, at this point, I need to focus on acquiring the skills and resources to rebuild these financial parts of my life. As such, I’m afraid I have to respectfully decline the position as a research intern with Kleros. I sincerely apologize for this taking so long – I had every intention of making this happen, but it’s become clear to me that my circumstances require a different approach.

I appreciate the time you put into helping me through the process to get there. I hope that I didn’t set you back too far with all of this. I wish you and Kleros all the best, I think the work you guys are doing is exciting and important!

Regards,

David Grisham

I started my first real job, as a software engineer with Inspire Fitness, in April of 2019.

Zach threw me into the fire immediately. I had to learn how to write real-world code, and fast. I hadn’t really done that before. I’d been too busy perfecting every detail of my development environment and obsessing over the ‘right way’ to program. The former was a blast and I’d never take that back. The latter was my biggest hindrance in becoming marketable. I thought Haskell was The Way, despite it being rarely used in production and generally impractical. Now I was working in Go. Very minimal, simple, practical language.

I worked with Zach and our small team to rewrite the fully automated live exercise class broadcast system. Once Zach stepped into a less technical role, I was the primary maintainer of the entire system.

I realized that being a software engineer wasn’t just for people who couldn’t cut it in the research world. Implementing sensible, maintainable code that solves a specific problem is a skill that takes a lot of time and experience to build.

Throughout all of this, I was still “working on my masters”. I’d start getting momentum, do a couple of calls with DJ, then fizzle out.

I’m going to finish this thesis.

Jesus, this costs how much per semester?

I already have a job, do I really need to do this?

Yes, I do. But man, this is hard.

Am I even doing anything valuable?

I haven’t had consistent communication with anyone at Protocol Labs in so long.

I take so long to update DJ that he consistently needs to be reminded what exactly we’re working on.

Will DJ just stop taking my calls at some point?

How many times am I going to have to rewrite these damn simulations to keep updated with Protocol Labs’s testbeds?

I’d rather work on The Attic, it’s so much more fun.

How many people will I have to admit to that I didn’t finish this thing?

In April 2021, I set an insane goal to finish the thesis by the spring semester deadline. I had two weeks.


Ayin Tovah

Routine is important, but finding it is hard.

Virtue is the golden mean between two vices, the one of excess and the other of deficiency.

In this bold attempt to finish something I hadn’t in years, I realized I would have to largely destroy the structure and routine of my life. I had been working on the thesis, but this would be a complete overhaul. It would be a dynamic process of discovery. I’d have to figure out what worked, and what didn’t, all among the fluctuating factors of mood, life, etc. What worked on one day, might not work the next. There would be core aspects of course. The constantly shifting building blocks that I’d use to structure my life during the thesis included:

Exercise. I did my best to establish a habit of swimming when I could. Sometimes I’d go at 6 am, sometimes at 8 pm. I swam over lifting with my friends because it was more time-flexible, and I always felt amazing after a good swim, almost without exception.

Ranting to…anyone. Josiah over email or online Melee sessions, the one or two friends who’d stop by my Twitch streams where I’d work on my Bitswap experiments.

Being productive at work, during work hours. This allowed me to focus on something else during the day and never (or, rarely) feel the need to make up for a lack of productivity by working in the evenings.

Regular calls with DJ. This was useful for both accountability and direction. DJ had a keen ability for taking in my scattered confusion and asking just the right questions to guide me to the next step.

How do I put these blocks into place? I should swim every morning, but I also find some of my most productive times late at night. I want to have a consistent sleep schedule, and my late night productivity can spiral into an unhealthy habit of wasting time. (I ended up breaking my no-pornography streak for the first time in a year, and almost broke my year long no-masturbation record.)

I haven’t worked this hard for so long.

I used to be able to stay up so late, and really delve into complex problems…

Logan and I had a great dynamic, we were literally just always working.

But can I get into that flow again?

Am I too old for this?

During the Twitch stream sessions, I’d work on my experiments or any code-related problems. Normally, at least one of my friends would stop by. That was immensely motivating, even if they didn’t understand what I was working on. As my work shifted primarily into writing the thesis itself, Twitch streams made less sense.

I’ve been talking about finishing this thing for years. Do I trust myself enough to actually do it this time?

Predictably, the two week goal was overly-ambitious. I continued all of this on into the summer semester. More time and flexibility, less immediate pressure, more fear that I’d squander this whole thing.

Salience

Talk about successes, not plans.

“Yeah! I got accepted to a research internship in Portugal. I’ll be working on [my elevator pitch]."

“I should be leaving in about 3 months, I just have to take care of [x, y, and z].”

I’d repeat that conversation with the same people for over a year. Eventually it became a meme.

What I took away from all of this was to share news about an accomplishment after actually accomplishing the thing. Or, at least, only when I’m in a place where all that could stop it from happening is a catastrophe.

Really, though, it’s more that I’d share news with increasingly exclusive people in my life depending on its volatility.

Affirmations

If you’ve ever read A Dilbert Future, or you grew up with my mom, you’ve heard of affirmations.

I got into the habit of repeating this affirmation to myself:

I, David Grisham, will graduate with my master’s thesis this semester.

I started that in the spring semester. When I spilled over into summer, it became:

I, David Grisham, will graduate with my master’s thesis this summer.

I liked the idea of an affirmation without a time constraint. But school is expensive.

I was very particular with that wording. I didn’t want it to be past-tense, i.e. I, David Grisham, have finished my masters thesis., because that makes me feel like I’m lying. I chose the word ‘graduate’ because it includes not only finishing the thesis, but also fulfilling all formalities required to graduate by their deadlines.

I’d repeat in my head while taking deep breaths before starting a swim. Eventually I started varying which words I emphasized, changing my inflection, etc.

I, David Grisham, will graduate with my master’s thesis this summer.

I, David Grisham, will graduate with my master’s thesis this summer.

I, David Grisham, will graduate, with my master’s thesis, this summer.

Those words help me cut through the rest of whatever thoughts would otherwise flood my mind.

I didn’t tell anyone about the affirmation at first. I had to at least have solid momentum toward the degree, or be done.

`* * *`

Maybe I’m just not cut out for research.

Maybe I’ll be that guy who just never finished his degree.

But I’m so stubborn that I’ll probably keep paying Mines semester after semester until I finish it.

I’m a software engineer now, will I really benefit from this degree?


Shaddai

The humps don’t get smaller, you just get better at surmounting them.

I ask not for a lighter burden, but for broader shoulders.

At first, I tried to keep my code up to date with Protocol Labs’s changes. I figured they were fixing bugs all of the time, so whenever I pulled in their updates I’d be improving the chance that my tests wouldn’t be interrupted by issues I didn’t introduce.

Keeping all of this up to date became a giant pain in the ass, and was mostly a waste of time. My implementation wasn’t so complicated that I wouldn’t be able to implement it on top of a later go-ipfs version if I really wanted to, and that part of the codebase was rarely changing for most of my thesis.

The more important piece was the testbed Protocol Labs had been developing. They deprecated the testing software I’d built my original tests on in favor of a much more abstract but not-yet-feature-rich testbed.

While figuring out how to write relatively basic tests under this new framework, I also had to ensure that the tests I was building toward were actually answering the relevant game theoretic questions.

I’d get stuck writing a test, do my best to get creative in fixing it, find a way to at least somewhat verify that things were working as expected, then try to wrap my head around the core research questions to ensure the tests were answering them.

All of this was a massively overwhelming cycle between implementation and theoretical modeling.

Only a few Protocol Labs devs understood the testbed itself, and their time was limited. DJ only understood IPFS insofar as I had explained it to him, but was great at highlighting the relevant game theory. It was often that I’d have a problem to solve, spend hours trying to get somewhere, and come out even more confused than when I went in. Problems constantly felt insurmountable. And for many problems, surmounting them left me wondering whether they’d really been worth solving in the first place. It wasn’t until the last month or so that a few of the problems started to feel achievable.

I learned to set goals of a reasonable size, not paint myself into a corner by trying to generalize and over-engineer solutions, and accept that it would never be perfect.

`* * *`

I recently started working on writing a Battlesnake in Jai. Jai is a programming language that’s in beta, so a lot of common libraries aren’t available in it yet. I decided early on to build as much of the codebase as I could ‘from scratch’.

First, I used Beej’s Guide to Network Programming to establish a basic TCP server. The guide is written in C, which wasn’t too difficult to port to Jai.

Then I had to parse the HTTP requests I was getting. I’d never done this before, and it sounded annoying. But after a bit of investigation I realized it might not be so bad. I did a simple, poorly-written-but-working implementation, then rode off of that momentum to write a substantially cleaner and more resilient version. I didn’t have to write a fully-fledged HTTP server; I just had to handle Battlesnake requests.

All of these problems, while feeling substantial in their own way, felt very achievable when put into context with the overcome thesis problems. Hills next to mountains.


I am El Shaddai. I am the One who told the heavens and earth, “Enough!” Because if not, they would have continued growing until now.



Moad

No one else is going to do it.

28 May 2021: My 28th birthday.

Why didn’t my dad impart on me the importance of building and maintaining things?

He’d worked so hard, learned so much. I would just play Pokemon over helping him work on the car.

I guess he did impart an appreciation for the aesthetic of taking things apart and DIY on me.

It just took a long time for that to blossom in a meaningful way for me.


Working on IPFS has been interesting, because it’s very cutting-edge technology.

But I had at least some ability to add to it, experiment with it….to possibly contribute to it. Most of the PL devs were busy with other work. The parts of Bitswap I worked on were rarely updated for the entirety of my thesis. I always thought that someone would implement what I was working on before me, and do it much better. To be clear, that probably would’ve been the case if someone had been around to do it. But by the end of the process, I at least understood the relevant problems and could reasonably contribute to a discussion about alternative implementations.

By the time of my defense, I’d probably practiced the presentation 3 or 4 times. During the masters proces I was rarely confident that I’d done any real work, but was finally starting to feel like I had.

Then I gave the presentation.

Oh no.

I haven’t done anything useful.

They’re going to see right through this.

They’ll tear me apart with questions.

I’d taken an undergraduate class with one of my committee members, and had been a terrible student. I often wouldn’t show up to class in those days, and his wasn’t one I could simply not attend and still do well in.

A few semesters later, I brought him a slip to sign to let me into a graduate level class. He told me he’d sign it, but I’d have to be a much better student than I had been. I was a significantly better student in my CS graduate classes. Unfortunately, he didn’t actually teach the class – a graduate student did.

Dinesh knows I’m full of shit.

He didn’t get to see me improve as a student, and this research isn’t good.

When you really talk through it, I did so little…

My committee had very few questions for me. They congregated without me, then brought me back into the call to congratulate me. Dinesh stayed on after with a few more questions, and told me I’d done a good job.


I thought I would want a bit of a break from intense work upon finishing the thesis. I was wrong. It was much more fun and rewarding to keep building my skills, but without the crazy pressure. I go to lifts again, because I want to contribute to that social group + environment. And I already mentioned the Jai Battlesnake Twitch streams.

Toward the end of the thesis, a company I’d been following since they were founded 6 months ago, Capsule Social, posted a job for a backend Node JS IPFS engineer. The description seemed perfect for me. I kept delaying my application because I was working on the thesis. I finally got it in, and a day later the job posting was taken down.

They put up another position, for a ‘Token Specialist’. Basically, someone who would design and implement a platform-specific cryptocurrency. The skillset would require a crossover between game theory, distributed systems, and software engineering.

I’m glad I got my application in for the backend engineer position.

I’m not cut out to be a token specialist, there’s someone more experienced out there for that.

The game theory I used for my thesis was incredibly simple, and wouldn’t be helpful here.

Your application to Capsule Social

Mon, 26 July 2021, 1:14 AM to me

Dear David,

Thank you for your interest in Capsule Social, Inc. and the NodeJS Backend Engineer role we published.

[…]

Many thanks,

Marco Barulli

The interview went well. They sent a follow up email asking if I’d be interested in taking on some of the responsibility for the Token Specialist position.

They don’t understand, I’m not ready for this sort of thing.

Though I suppose cryptocurrencies have only been a thing for 13 years, it’s not like there are a ton of experts in this field…

Hell, I don’t even trust ‘experts’ in general.

They wouldn’t have offered me this if they didn’t see something in me.

It would be fun to do…

I’ll be honest with them, make sure we’re on the same page. If they’ll pay me to try, I’ll do it.

I made it clear that I wasn’t experienced in the area, but I could do my best to learn.

On 13 August 2021, I accepted a position as Software Engineer and Token Specialist at Capsule Social.