John Lam's BlogSince 1997Zola2022-05-08T00:00:00+00:00https://www.iunknown.com/atom.xml2022-05-082022-05-08T00:00:00+00:002022-05-08T00:00:00+00:00https://www.iunknown.com/2022-05-08/<h2 id="episode-2-joe-binder">Episode 2: Joe Binder<a class="zola-anchor" href="#episode-2-joe-binder" aria-label="Anchor link for: episode-2-joe-binder">🔗</a></h2>
<iframe height="200px" width="100%" frameborder="no" scrolling="no" seamless src="https://player.simplecast.com/f8193396-1414-4a42-beeb-dafea8dd38a6?dark=true"></iframe>
<h2 id="summary">Summary<a class="zola-anchor" href="#summary" aria-label="Anchor link for: summary">🔗</a></h2>
<p>Joe Binder is an 18 year veteran of Microsoft and Developer Division, with
nearly all that time spent as an individual contributor. Joe's my boss today,
and we look back on his time at Microsoft and the many lessons learned along
the way.</p>
<p>This was a fun conversation about many things, including:</p>
<ul>
<li>Explaining what a Program Manager in Developer Division does to three
different audiences: his kids, a new college grad, and an industry veteran</li>
<li>Why he thinks he gets more mileage in his day job out of his English major
than his Computer Science major</li>
<li>How someone can spend three years working on memcpy</li>
<li>What working with large partners like Windows, Azure, and Office really
entails and how to be effective in that role</li>
<li>Why he really wanted to come to the Pacific Northwest 18 years ago and why
he decided to stay</li>
<li>What it was like listening to customer feedback in the early days of the
Visual Basic .NET team</li>
<li>What we should have built instead of Lightswitch</li>
<li>How his super power of not taking being yelled at personally contributed to
his career success</li>
<li>The balance and joy that he gets from living near Puget Sound and his
fishing kayak</li>
<li>Why the Azure CLI needed to be rewritten</li>
</ul>
<h2 id="transcript">Transcript<a class="zola-anchor" href="#transcript" aria-label="Anchor link for: transcript">🔗</a></h2>
<p><a href="https://share.descript.com/view/cqd8Kmqr70k">Click here for an interactive transcript.</a> </p>
<p><strong>John:</strong> So you've been at Microsoft, working in Developer Division for like
over 18 years.</p>
<p><strong>Joe:</strong> I have, yeah </p>
<p><strong>John:</strong> And almost all of that time as an individual contributor. </p>
<p><strong>Joe:</strong> Yes. </p>
<p><strong>John:</strong> And recently became a boss, like person here at Microsoft and you're
in full disclosure. You're in fact, my boss. </p>
<p>So this could be a career limiting, move on my part. But what I thought, I
like to do is focus on that time when you were in individual contributor on,
so in other words, most of your time here and I thought an interesting way of
jumping into that conversation is to have you try cause both you and I are our
fathers, we have kids.</p>
<p>And I think one of the challenges that we often have is trying to explain what
we actually do in our jobs to our children. And, so what I thought would make
this more interesting. </p>
<p>While talking about being an individual contributor is if you could explain,
imagine that I was a child here, and you're going to explain to me what you do
in your day job.</p>
<p>And then imagine that I'm a college age person. And I was thinking about
coming to Microsoft, like, how would you describe what you do to that person?
And then finally imagine you're actually like me a grumpy old veteran person
and you're in, I've worked somewhere else, not in Developer Division. How
would you explain what you do to me?</p>
<p>Yeah, that's a very provocative question. I do have this discussion with my
kids all the time. I don't know I've ever given them a satisfactory answer,
but let me try. I think of my job here as a PM at Microsoft, as building
things for users, with computers. And if you think about a phone, you tap on
the app that you're going to launch. Somebody has to decide what that app does
and what it looks like and how it behaves. And that's a big part of my job is
trying to figure out what technology should we be building to really make
users lives better or more fun. And every project I've worked on has distilled
down into that.</p>
<p>But how do you know what you need to make? What that person who is using that
thing needs? </p>
<p><strong>Joe:</strong> Yeah. I think that's actually, the thing that I love most about being
a PM is learning that is figuring out, okay, John, I just built this app. I
want to watch you use it. I want to see how you interact with it and learn
where are you struggling?</p>
<p>Where are you looking at it? This is not helpful. And. Then also looking at
data too, to see what else are people using? What are they familiar with? How
can I take some of those idioms that maybe you're used to double tapping? </p>
<p><strong>John:</strong> But Joe, what's an idiom?</p>
<p><strong>Joe:</strong> Yes. That's a very, I'm actually an English major by trade.</p>
<p>So I use arcane words. Sometimes I think what are the interactions with
technology that you really familiar with? So if you're used to swiping left
maybe my app that I'm building, should really take advantage of swiping left
because that's something that your brain already knows how to do.</p>
<p>And so I should design whatever task I'm enabling for you as a user to really
optimize for what you already know. </p>
<p>And by doing so you're learning more about me, right? As as the user of the
thing that you want. </p>
<p>Yeah. That is definitely the most interesting thing. I would say that a lot of
my work as a PM has started from what would I want.</p>
<p>And it's always really fascinating to me for products that I've worked on for
a long time, how much the product pivots away from what I wanted. And I think
for me, that's the fun part is like realizing that there's so many user needs
out there that are so different from mine that I need to go learn.</p>
<p>It keeps us honest. It keeps it's fun. I think. </p>
<p><strong>John:</strong> That's super. So let's switch gears a little bit and now pretend
that I'm this college age person and I'm thinking about working at Microsoft,
I just went to a career fair and see the logo and lots of fancy stuff about
the company.</p>
<p>How would you describe what you do to me? </p>
<p><strong>Joe:</strong> Yeah, </p>
<p><strong>John:</strong> I took computer science, let's say. </p>
<p><strong>Joe:</strong> Yeah. So for computer science student, I would describe what I do as
building tools to make developers lives easier. And specifically as a PM, it's
really figuring out what are the, what's the workflow that the developer that
developers go through today.</p>
<p>If you think about you're sitting in your computer science class, you get an
assignment, you got to go back to your dorm room or whatever and open up a
code editor. You got to write some code, test it, see if it's actually
working. What's hard about that? How could we make that even better? How could
we make the process of learning technology even easier?</p>
<p>That's really what my job is about. And because I build tools for developers.
I also have an excuse to write code a lot, to really put myself in the shoes
of our users and work like they work and see, does this feel natural to me? </p>
<p>But it's different than being a programmer in the traditional sense where I'm
spending day in and day out, actually writing the code for the tools that we
built.</p>
<p>Instead I'm writing code as our users would write it. I'm writing code to
understand how does the tool we build work. </p>
<p><strong>John:</strong> So actually using the thing and in reality, as opposed to like
theoretically. </p>
<p><strong>Joe:</strong> Yes, exactly </p>
<p>Yeah. I to have some real projects that I'm working on, either at home or
things, online courses or whatever that I'm taking, that I have to use the
stuff that I'm actually building because that's helps me understand.</p>
<p>The strengths and weaknesses, or what's hard, or what's inefficient about the
tools that we build is when I actually have to get something done, whether
it's a plant watering system for my backyard, when I go on vacation, like I've
got a goal in mind and it can't be academic. I really need the water to turn
on when the humidity goes down.</p>
<p><strong>John:</strong> Yeah. And I think that but it seems to me as a college student,
that's a bit different than, proving my professors algorithms in some paper
that he published. Like how does my education in computer science prepare me
for what a job would be like as a PM. </p>
<p><strong>Joe:</strong> I like to think of PM-ing as applied problem solving. I think about
computer science as a form of applied problem solving. I always wondered when
I was in school, Why do I have to take physics and calculus and all these
things that realistically I've never really used in a computer science ish
field. And it was all to help me understand analytical problem solving and how
to break down problems.</p>
<p>And I think that the thing that you carry forward from your academic the proof
for XYZ or whatever, write an algorithm to, traverse all cities in the United
States, it's helping you understand how to solve problems in a deterministic
way. And I think for PMs, we do the very same thing.</p>
<p>It's just the problems that we solve are actually user problems more often
than not. And those are not as well structured as the academic problems that
we often get, and that's probably the biggest difference is the ambiguity is
significantly. higher. The uncertainty of whether or not we've actually solved
the problem is similarly higher. But the core approach, the sort of mental
model that you use in school around, how do you write an algorithm to solve a
problem is really similar to how you work as a PM. You have to break down the
problem into individual steps and figure out the constraints in which you need
to solve that problem.</p>
<p>If we're we building an app for a phone that has limited compute as an example
of a constraint, are we working on something for users who have difficulty
seeing or hearing those are all constraints that we need to think about that,
that you don't really have those constraints typically in an academic setting,
but in a PMs world, that's part and parcel for what </p>
<p><strong>John:</strong> And you also mentioned that you were an English major in college
and. Do you think that was that helpful or harmful transition into working in
this very technical field? </p>
<p><strong>Joe:</strong> I think about that a lot because I got a degree in English and
computer science concurrently, and I sorta wagered with myself at the time,
which of these is actually going to be more useful.</p>
<p>And if I'm honest, I have enough technological curiosity that I think even if
I didn't have a computer science degree, I would still be coding today simply
because I find it interesting. It's a really unique way of creating things and
solving problems that I think I'd always be drawn to. But the English degree,
I think actually is probably more useful because being able to make sense of
really dense information is just critical to a PM's job.</p>
<p>And it's also really rare, I think. if I think of all the other students in
your computer science class, many of them probably would find it exhausting to
go write a paper describing to an eight year old, what a piece of software
does. Whereas I actually find that kind of energizing and I think it's really
fun to figure out how could I describe this in simple and accurate terms?</p>
<p>That's something that I learned from working in literature and I applied
pretty much every day. Like I think as a PM, you have to be excellent at
written communication, certainly as well as verbal communication. And that's
also the thing that I think helps propel PM's in their career is always trying
to get better at how can I help people understand my point of view, the
problem that I'm solving. </p>
<p><strong>John:</strong> Yeah. I think that when I was in college, I took an international
relations history class because I had to, it was one of those things that you
you had to take. And that looked as interesting as anything else. And I
remember finding my papers from that class in some box at home and I was
flipping through it.</p>
<p>And then, cause I remember when I got the papers back, I was like, ah, I gotta
B+ that's fine. Throw it in the pile. I'm like, I don't really care about this
class, but what I, for whatever reason, I started reading through the
professor's comments on my paper and I realized, wow, like all the stuff that
I got as feedback in graduate school from my thesis advisor, were exactly the
same criticisms as this undergrad history professor gave me. And I just really
wished that I had communicated better or that I had learned the lesson at the
time. I was supposed to be learning the lessons that, Hey, I don't care. </p>
<p>Yeah. </p>
<p><strong>Joe:</strong> It's fascinating. I have a funny story about that one. I was just
starting grad school and we had a small research grant, which paid for a
semester or two of school. And it was from Sun Microsystems at the time Sun
was all in on Java and then. the research grant was basically to build a test
bed for this networking library that they were building in Java.</p>
<p>And as part of going through that exercise, of writing this sort of mundane
test library, I ended up rewriting the documentation for the library because
it was really poorly written. It was really hard to understand. And so we
shared that back with Sun at the time. And they said, this is great. Forget
about the test harness why don't you go rewrite all documentation? </p>
<p>And it was financially very lucrative for me. But it also opened my eyes to </p>
<p><strong>John:</strong> so they paid even more over above the grant </p>
<p><strong>Joe:</strong> exactly Yes. And it was really eye opening for me, just how critical
it is to be able to capture and clarify exactly the work that we do. And I
still hold that near and dear to everything that I do now.</p>
<p>Like whether it's an email I write or something that I work on, it's if
somebody's really going to be able to walk away with this with a clear
understanding of what I'm trying to say. So, yeah, I think overall English has
won out as the as the more useful, </p>
<p><strong>John:</strong> the truly useful. Yeah. No, that, that's not surprising. It's funny.
I've talked to some of the new hires on our team and one of the things looking
back, so I have no idea why I took computer science, it's like none of this
stuff, I don't see myself using any of this stuff. And so why did I need to
know it in the first place outside of what you said, right?</p>
<p>Which is I needed to figure out I needed some place where I would learn
problem solving skills and computer science is probably as good of a domain as
any </p>
<p><strong>Joe:</strong> Absolutely </p>
<p>Yeah. I think it's also interesting for, I, think about this a lot, just given
how many developers we serve now that don't have computer science degrees.</p>
<p>And so in theory, it hasn't been super useful, but practically speaking,
there's certain code. If you will, certain jargon, certain even biases that we
have. For folks who don't have a computer science background that I've been
really reflecting on how do we break those down? So that really folks who are
good problem solvers can be great PMs anywhere.</p>
<p><strong>John:</strong> Yeah. That's what attracted you to the position? </p>
<p>Absolutely. Yeah. Yeah. </p>
<p>So now shifting gears one more time. So imagine that I'm now coming from
somewhere else, let's say in a different company, even and you're trying to
explain to me what a PM is in Dev Div Developer at Microsoft.</p>
<p><strong>Joe:</strong> Yeah. This is probably the hardest of the three in my mind because
PMs Dev Div are quite different from other areas of the company. Certainly
areas in the industry because Dev Div has a unique role in the company that
I've not really seen anywhere else, which is that we are really are
responsible for building developer experiences, developer tools, APIs, SDKs. </p>
<p>Chances are good if you've used a Microsoft product as a developer, you've
used a product from Dev Div and what's interesting the role as a PM here is
that we rarely actually own the platforms that we support from a experience
standpoint. And that is both really cool because it actually enables us to
work on lots of different products.</p>
<p>Like I've worked on Azure, I've worked on Office, have worked on Windows, all
kinds of from the same chair, if you will. And at the same time, it makes our
job really hard because somehow we have to both partner with those teams to
really help them understand what are the primitives that they need to go build
to help developers understand their platform and be successful.</p>
<p>And also we have to build things on top of that to actually make it
accessible, right? There's some, you can only make a, micro-controller so
accessible to a developer at some point you need tools. And and I think a lot
of, </p>
<p>A lot of what do as PMs in Dev Div is figuring out what's that ideal developer
experience?</p>
<p>Where can we actually add the most value for developers to make sure that when
a developer comes to a Microsoft platform, they have a really productive
experience. That's part of our brand as a company. And I think we've come a
long ways from the Steve Balmer jumping up stage developers, but the spirit of
that still holds true.</p>
<p>I think. We have developers who come and continue to use our platform because
of the tools. And so in Dev Div we hold that really high. I think whether it's
VS Code or Visual Studio or Azure platform services like App Service or
Functions, productivity is probably single most important aspect of the
products build.</p>
<p><strong>John:</strong> When I think about what you said earlier about how our tools and div
are really at the service of a platform owner, like an Azure, like an Office,
like a Windows and how we don't own those things. Those by PMs over in those
parts of the company. How would I think about coming here if I've been steeped
in product management through this idea that my job is to grow usage or
revenue or some other growth aspect of the product itself.</p>
<p>Now what do I do once I get here? </p>
<p><strong>Joe:</strong> Yeah. I would say that the single most important thing, if I were
coming to this job or Dev Div in general is to build great relationships first
and foremost, because everything we do is team sport, right? If I think about
I'm going to go work on Windows tools or Azure tools, it's really shared
success with the platform teams. And so building relationships to really
understand like deeply amongst the platform team I'm working with, what
scenarios are you really trying to enable and make sure I really understand.
that because, as I've reflected on my own career, a lot of times when I've had
like friction with some of these teams or just haven't jelled it's because I
haven't really understood what scenarios most important to them. And
definitely say that's the first thing is to really internalize, okay. Before
we talk about usage or revenue, what's the core scenario you're driving for
and what's the core outcome for that scenario? Sometimes it is something like
revenue, where we might be looking at a small number of customers who are just
going to pay us a lot of money, or we might be looking at, we're trying to
garner usage from millions and millions of developers, understanding what's
the business outcome.</p>
<p>What's the scenario. And what are the relationships I need to, build in order
to understand that's definitely like the first thing I always find I need to
do when I'm working on a new area. </p>
<p><strong>John:</strong> So is that understanding the growth needs of the partner team and
then figuring out what Dev Div's role is in trying to help them achieve
success?</p>
<p><strong>Joe:</strong> Absolutely. I think we often, I used to struggle with the notion of
being in service to platform teams. And I don't really anymore because I
really do think that our job is to multiply the impact of the platforms we
support, whether it's Azure Windows or so on. So yeah, certainly understanding
what does growth mean for them?</p>
<p>How do they want to grow is the most important question that we need to
answer. And certainly in Dev Div, I work on VS Code as well, which also has
its own standalone growth objectives. So we do have some things that we own
ourselves.</p>
<p>But I would say that for most products, understanding what the platform's
Growth objective is the single most important thing I do first. </p>
<p><strong>John:</strong> And then from that, all of the, what kind of follows from
understanding the why of the partner team. </p>
<p><strong>Joe:</strong> Yeah Yeah </p>
<p><strong>John:</strong> Excellent. So then switching gears again a little bit here what I
thought we would talk a little bit more about is a little bit more about you
and how you came to the company. So again you're at RIT you're an English
computer science double major. What kind of drove you to come to Microsoft in
the first place? </p>
<p><strong>Joe:</strong> Yeah. Interesting times. So I had worked ,so RIT where I went to
school Rochester Institute of Technology. They have mandatory co-op program,
like many tech schools these days.</p>
<p>And that was actually super cool because it gave me a really good sense for
the type of work I wanted to do and the type of work I didn't want to do. And
I had worked as a sys admin.</p>
<p>I worked at a company called EMC that a pretty low level, like kernel level
development.</p>
<p>Exactly. They're still going strong. And I realized after I worked for them
for couple of years during college, even, when I was in school. And the main
thing that I realized was that I loved the hardcore problem solving and like
the technical excellence, but really missed the user interaction aspect of the
job and being just a developer.</p>
<p>I worked on for the entire tenure for three years working there. I worked
essentially on memcpy operations. And I learned a lot about performance
optimization. I was the only person in the entire team that didn't have a PhD
in some operating system- like field. And I realized it actually at it came to
a head during 9/ 11 which was like the height of when I was trying to decide,
what am I going to do after undergrad?</p>
<p>that I realized that I didn't want to just live in a cave, so to speak work
down in the depths. So I really wanted serve users. That's what always drove
me to get computer science in the first place. And I wasn't quite sure if I
wanted teaching and education because I definitely enjoy that aspect of it.</p>
<p>And I teaching in grad school </p>
<p>Or if I wanted to actually just totally change gears and leave my comfort
zone. And I actually chose where I wanted to live before I chose where I
wanted to work. </p>
<p>So I had lived in upstate New York for quite a while, eight, nine years. I
lived in Boston previously and all of them have a super intense, very edgy
environment and culture work culture, the tech culture there at the time, I
don't know if it still is super intense. Everybody works 80 hours a week
drives 80 miles an hour to work like it's very edgy, </p>
<p>Very confrontational And and I needed a change of pace. And I also love my
real passion in life is outdoor activities. So I love to Mountaineer.</p>
<p>I love to fish. I love to whitewater raft and it, the Northeast is not really. </p>
<p>that, is exactly </p>
<p><strong>John:</strong> It's </p>
<p><strong>Joe:</strong> Yeah </p>
<p><strong>John:</strong> is missing. </p>
<p><strong>Joe:</strong> Totally. So I decided that I wanted to move to the west coast. I
didn't want to move to California. So somewhere in the Northwest. </p>
<p>and it just so happened that Microsoft came to campus.</p>
<p>I sorta joked because I had never, I like literally never had a Microsoft
products after </p>
<p><strong>John:</strong> Windows 95? </p>
<p><strong>Joe:</strong> I Like I think we at school one year we had a Windows 95 or 98, like
a bench of computers. But otherwise I had not really been exposed to Windows,
anything, and I was not super high on Microsoft generally, but I showed up as
a joke to my friends, and I'm going to go to this Microsoft interview and then
they will pay for your your travel to come out and stuff.</p>
<p>And then so long story short. It worked out. I really planned it as, this is a
sort of cliched story, but I really plan to just come out for a year or two
and then decide what I really want to do. When I grew up and 18 years later
here, I am </p>
<p><strong>John:</strong> You thought you'd come out here, get paid to relocate, check it out
and then find your real calling. </p>
<p><strong>Joe:</strong> Yeah How many years do I have to work here before so I don't need to
pay back my relocation fee. </p>
<p><strong>John:</strong> So I have to about the memcpy thing. How can you spend three years
working on memcpy?</p>
<p><strong>Joe:</strong> Yeah, it's interesting. So at the time Intel had all these hardware
instructions for like specific scenarios for memcpy and it's like EMC.</p>
<p>I worked in the file server division, and our job was we basically sold giant
file servers. So this is the time when you would have a giant rack of hard
drives and their big claim to fame was that they had, you could actually buy a
quarter terabyte rack at the time with lots of cache in memory cache stuff.</p>
<p>It was a fascinating computer science problem because tiny performance
improvements had huge business impact. So our primary customers were credit
card companies, air, traffic control, large governments. And so if you tell a
credit card company that, you can increase the number of transactions, like
financial transactions per second, that they can, it's like millions of
dollars per day. And we had a number high value scenarios. One of them was
transactional scenarios where literally we had all of these different
situations where we try and use hardware instructions to actually perform the
operation instead of like higher level C things like that.</p>
<p>was a case where it always really hard to detect in which fork to take,
because you often know what was in cache, what wasn't so that, </p>
<p><strong>John:</strong> Were you tuning memcpy for specific. This is the L2 cache size on
this CPU </p>
<p><strong>Joe:</strong> precisely Yeah. Because they sold standardized hardware, so we could
actually make a lot of assumptions about, and they had a fork of the file
system and everything. It was very optimized for their scenario. </p>
<p>Interestingly, I also, what led me to leave there was one of the other
scenarios that we sold, as a, as like a sales playbook was build machines and
build clusters for like really large monolithic software.</p>
<p>And I spent three months debugging a intermittent bug in when the machines
were configured as a cluster for a build cluster. We had this intermittent
storage loss problem. It was super uncommon, but it turns out like you can't
really sell something that keeps your data most of the time.</p>
<p><strong>John:</strong> For credit card companies. </p>
<p><strong>Joe:</strong> Yeah, I spent three months working on that and it turned out to be a
bug and Linux and, but, it was I remember fixing the bug and feeling no sense
of gratification whatsoever. It was just like, you know </p>
<p><strong>John:</strong> Why did I have to do this? </p>
<p><strong>Joe:</strong> I gave somebody a reason not to leave but it's that was the straw
that broke the camel's back, so to speak. And I realized that I needed to do
something different. </p>
<p><strong>John:</strong> So it convinced you no more being a software engineer working on
memcopy at the very least. </p>
<p><strong>Joe:</strong> Exactly Yeah. And kinda thought maybe moving up the stack.</p>
<p>But I also realized that I am just energized by serving users. Like I really
like this interaction it's like being a pro, a an instructor is that seeing
light bulbs go off for folks is like a very energizing thing for me. And so I
realized that working on something where I had to interact with users and
really solve their problems was what I needed.</p>
<p><strong>John:</strong> So then you arrive at Microsoft. What was your first thing here that
you had to do? </p>
<p><strong>Joe:</strong> Yeah, this is going to be an embarrassing couple of minutes here. So
I had worked on file system stuff at the time. And so my first at the time
.NET was coming out with version two. And it was still we're at this point of
indecision, I guess you could say in terms of, we have all these Visual Basic
customers who basically put Windows on the map. The ease with which you could
build apps.</p>
<p><strong>John:</strong> I was of them. </p>
<p>Yeah. It is just incredible how empowering Visual Basic as a tool for users
and certainly for the company as well. And so the team that I joined was the
Visual Basic team and our real challenge was. like how do we help this huge
population of VB classic, non .NET users adopt .NET Because that's where all
the innovation is going and overwhelmingly the canonical user of Visual Basic
really struggled with .NET because it was written for computer science types.
It's one of the first examples that I worked on was, the file API is for
VB.NET at time. And I remember going to a user study on reading a file.</p>
<p>And I remember okay, here's System.IO. You got to read a file stream. And I'm
like, yeah, this seems fine. It seems like these higher level API. is, And
we're really, I'm used to living like down an inodes and stuff like that. So
like System.IO was like, whoa, this is super easy. And. All the users were
like, I have no idea what this is.</p>
<p>I just need to read the text this file into a string so that I can present it
on a text box. Like how do I do that? And that was super illuminating for me.
And that kind of became my first job was we worked on this, this set of
wrapper, APIs called the "my" namespace. And it was loosely modeled
after in Windows, My Documents and all that sort of stuff.</p>
<p><strong>Joe:</strong> So we tried to take the mental model of the user and manifest that in
a set of APIs that were meant to be easier APIs. So an example would be
instead of getting a file reader or a file stream, you could just call a read
text method and it would just return a string that had the text from the just
Let me pass you the path to the file I want to read and return me as string.
That's really what I want. </p>
<p>Yeah. And I worked on that. For quite a while. What was really there was, this
was a kind of good, my first lesson in a way, like I learned a lot as a PM in
terms of how to do user studies, how to really understand user needs and
expectations, because we iterated on those APIs for over a year.</p>
<p>It's just, it's so hard to get the conceptual model right and I gained a deep
appreciation for that because I think I, that was the first time I really
realized that the target audience we had, they weren't trying to read and
write files. They were accountants or they were trying to solve some much
bigger problem.</p>
<p>And this was just the tool that they were using in order to solve it. And that
light bulb went off for me. And it really energized me in a way cause I'm
like, okay, cool. Like I, I'm never going to stop until you are successful. So
after the VB product, we worked on the my namespace It never really took off.
And in fact, VB.NET at the time as it was affectionately referred. We also
were at, </p>
<p>point in time where, a C# was really the brand of .NET and C# were indivisible
and we had to really make a choice at some point, of like, how deeply are we
investing in VB?</p>
<p>At the time we had a huge VB team that was working in concert. Amanda my boss
was the in charge of the compiler and the language for VB. </p>
<p>It was we had a lot of investment in that space because it was so critical to
the company. We could not lose those customers. Of course we did lose a lot of
them, </p>
<p><strong>John:</strong> yeah, exactly.</p>
<p>Those customers, I still remember in Microsoft keynotes, the Professional
Developers Conference there'd be these VB zealots, let's call them right.
Sitting in the front row. And they would count the number of times that you
had mentioned VB and the number of times you had mentioned C# and they would
say Microsoft spent three times more times talking about C# than VB.</p>
<p>We feel not heard or unseen. So how was that? </p>
<p><strong>Joe:</strong> So I learned a couple things from that. So absolutely. I remember the
very same thing, of like really having to be intentional almost to the point
of being unauthentic about parity between languages and things like that.</p>
<p>What I found was a couple of things. One was that I realized for the first
time that for a lot of folks, those folks who were sitting in the front room
of the front row, VB was a huge part of their identity. </p>
<p><strong>John:</strong> Yes.</p>
<p><strong>Joe:</strong> And we weren't messing with a product. We were messing with their
identity and that never dawned on me until, because for me personally, like my
job is just my job. It doesn't define me. </p>
<p><strong>John:</strong> You were too young, you didn't have history. </p>
<p><strong>Joe:</strong> Exactly. Whereas these folks said written seven, eight editions of,
business applications with Visual Basic and all these other things. And so I
came to understand a couple things from that. One was for me to just
personally really reflect on how much of my identity I wanted to be based in
my job, because I saw how crushing it was for them to have something intrinsic
to who they were outside their control and going in a direction they didn't
want. The other thing that I found really striking was we had these zealots as
you refer them, like really passionate folks and they occupied most of the
soundbites in the room. And I came to the realization as a PM that a lot of
what they were saying, wasn't really representative of what users who are day
in and day out using this stuff needed and were struggling with.</p>
<p>And that was a super important learning for me because it's always I think as
a PM, there's always a email coming in every day, a tweet or whatever, There's
some really emboldened customer who tends to have an outsized influence on the
team. And so that kind of taught me the checks and balances of these are the
most vocal people.</p>
<p>They aren't necessarily the most important folks. And they also aren't
necessarily representative of the overall. </p>
<p><strong>John:</strong> The squeaky wheel gets the oil. </p>
<p><strong>Joe:</strong> Absolutely </p>
<p><strong>John:</strong> And was there a lot of that back then on that team? </p>
<p><strong>Joe:</strong> Yeah, this is a funny story. I told you that, I worked in this
intense east coast environment where people would, you'd go to a code review
and it was common to get yelled at.</p>
<p>That was like a common practice. And it was about my first week on the job I
had to present to just the zealots. We had a private, I forget what we used to
call it. </p>
<p>But it was over in building 20, right across the street from where we are now. </p>
<p><strong>John:</strong> The SDRs? </p>
<p><strong>Joe:</strong> Yes, software design reviews.</p>
<p>Thank you. Yes. And had to present this, my namespace thing that I had been
working on for a total of five days, I think at the time. And it was awful. It
was just awful. It was like, designed by committee. A hundred times over where
I just got yelled at for a good two hours people I had never met had some deep
seated frustration and really frustration was displaced.</p>
<p>They weren't really frustrated with me or with the product, with this
sentiment. </p>
<p>But I also realized that was a bit of a superpower for me. It's pretty, I
realized like afterwards I was like, yeah, that's just another day. But I
realized that can be a skill that I can lean on.</p>
<p>Sometimes I don't really get ruffled very easily. </p>
<p><strong>John:</strong> So just distancing yourself from the people checking yup, still got
a job. </p>
<p><strong>Joe:</strong> Yeah Exactly </p>
<p><strong>John:</strong> Didn't get fired! </p>
<p><strong>Joe:</strong> Yes. Yeah. </p>
<p><strong>John:</strong> So then moving on from there. What led you to your next role at the
company? Like how did you transition? How did you choose? </p>
<p><strong>Joe:</strong> Yeah, it was interesting because I mentioned that VB was on the down
swing and what we realized was that, or this is my interpretation of what we
realized. We were missing the mark. We didn't really have product market fit
effectively with VB.NET. </p>
<p>So what me, Jay Schmelzer, John Rivard, both of them still in Dev Div today
and a few others.</p>
<p>We started just prototyping what we thought was actually what we would serve,
the folks that we were talking to the boots on the ground, so to speak, who
were using VB back in the day to get their job done, what they really needed,
which was like what we would call forms over data. So really simple visual
forms talking to a database, creating, transactions, querying data. </p>
<p><strong>John:</strong> We called it RAD tools or rapid Application Development tools back
in the 90s.</p>
<p><strong>Joe:</strong> Exactly Yes We prototyped for awhile. This is when I went back into a
little bit more of a dev mode. I did a lot of the prototyping myself.</p>
<p>John Rivard did a lot of it as well. There were a bunch of folks from the data
team that owned like SQL Server and all that stuff that we all just had a
skunk projects. And we ultimately chose to launch that as a product. It was
called Lightswitch. yes And it failed pretty epically and but </p>
<p>it was probably the most important thing in my career to to happen because I
had never really worked on something from the up and had to be accountable for
figuring out something like product market fit. And I realized about a year or
two in that I didn't really have this, the, tool set I needed to figure out
whether or not we were building the product we really needed to build. </p>
<p><strong>John:</strong> So that was your zero to one experience. </p>
<p><strong>Joe:</strong> Yes </p>
<p><strong>John:</strong> And then, we do like in the annals of history, there was this thing
called Lightswitch that existed at some point, it doesn't anymore. What was it
that kept you from achieving product market fit? </p>
<p><strong>Joe:</strong> There's an interesting cultural backdrop to the company at this
point. So this is during the this is pre Satya and I would say the
organizational lines in the company were a lot more pronounced at the time. </p>
<p>There are frequently these kinds of zero to one ideas, just like I am the
folks who work across the company on similar things, we put our heads
together.</p>
<p>Let's try it. That was definitely not the case at the time. And we ran into a
couple things. Like one was the classic large company problem of, if you think
you're solving a useful problem, there's probably four or five other teams in
the company who are also solving that problem. So Lightswitch definitely had
that.</p>
<p>So Access was also going through this journey of their own of like Access had
been a super popular tool. It really was the model of Access didn't scale at
all. Because you. You used to build these forms over data apps, same thing,
but you would deploy the database with your app and </p>
<p><strong>John:</strong> It was in a single file, the MDB file. </p>
<p><strong>Joe:</strong> Yeah. </p>
<p>There was FoxPro at the time and all these other things. And so everyone was
starting to think about cloud type of stuff and trying to make these pivots
Power Apps at the time was like in its infancy. So we, ha we were fighting
against a lot of folks trying to figure out product market fit in the similar
space and rightfully you know, Power, the Power Platform, essentially won.</p>
<p>And I think rightfully so they're actually, because we, what I learned from
that was that having this tool that was neither a pro dev tool, nor a citizen
developer no code tool, something in the middle. That there aren't too many of
those users that actually exist. And that was like something I, I didn't
really internalize.</p>
<p>It was like, I can go find all these people. Anytime we went to run a focus
group, I could always find them. But like in the overall population, they were
overshadowed by, effectively the users that Power Apps serves today. </p>
<p><strong>John:</strong> I see. So the low code users that aren't typing a for loop or a
simplified for loop.</p>
<p><strong>Joe:</strong> Yeah. Yeah. So that was one of the main reasons effectively, we were
building a product for a user that did exist, but didn't exist in mass. And
we're also building a product that looked from somebody outside the building.
It looked a lot like what other teams in the company were building.</p>
<p>And I think at the time the leadership team, rightfully, nipped that in the
bud. So as not to create a big product positioning snafu. </p>
<p><strong>John:</strong> So if you could go back in time, to, to Joe of that era, what advice
would you give younger Joe? </p>
<p><strong>Joe:</strong> Oh, that's a great question. The best advice I got this advice about
two years after Lightswitch and I wish I had it before.</p>
<p>And the advice came from Cindy Alvarez. She wrote the lean customer
development book. And I had the opportunity to go to Yammer at the time to
just watch how they did PM there. So Microsoft had just bought Yammer Yes
exactly. </p>
<p>Yeah. </p>
<p>And I learned a ton like how PMs work there and I remember sitting down with
Cindy, like working on like a similar type of thing. Cause we were trying to
figure out okay, that didn't work out. What should we do? Because clearly
there's still like unmet needs and she just looked at me and she said, Joe,
you have to leave the building. </p>
<p>And it's a profound thing that's always stuck with me that I realized that all
of the PM work that I was doing and user understanding and market analysis was
in the Microsoft bubble. It was essentially so heavily biased by Redmond
Washington that it was totally irrelevant to a lot of the rest of the world.
And so I think the one that one bit of guidance of like leaving the building,
leaving my bubble, leaving my comfort zone of what the problem domain.</p>
<p>I know the users. I know like we, having worked in the industry for almost 20
years now, I have a long list of folks I can call up and oh, I need somebody
in finTech who's doing I know five people But I didn't leave my own network.
And so I had a raging case of confirmation bias basically from not leaving the
building and in Cindy's words.</p>
<p><strong>John:</strong> Yeah. So you're in your ivory tower, your network were people
similar to yourself. And so you had a really hard time really empathizing
really with the needs of these users that you really weren't satisfying. </p>
<p><strong>Joe:</strong> Absolutely. And interestingly that you'll this one will come close to
your heart.</p>
<p>So at the time I had started to really realize that Lightswitch was just on a
path that wasn't a path we should really continue down. And I think all of us
were starting to realize it without really talking about it .</p>
<p>And I got a random side project to do a demo of AWS and Ruby on Rails. And and
it was for our VP of DevDiv at the time, his name was Soma, and I needed to do
something a little different anyways. So I just needed to like re-energize
myself. And I was like, okay, cool. I'll read all about this Ruby on Rails
thing. And then I realized, I was like, this is actually what we probably
should have built.</p>
<p>And because it was code centric, it took this, convention based model and it
didn't try and be magic, but it did try to be helpful and smart defaults and
all these things. But I think the other lesson beyond leaving the building
it's just be willing to adapt and willing as I take in new information,
realize that like the worst thing I can do is, continue to invest in something
that isn't worth investing in and be willing to just pivot or adapt or, just
own. that, Hey, you know what this isn't going in, the direction that I
thought it was going to go, we should </p>
<p><strong>John:</strong> Fail fast and iterate as quickly as possible as opposed to we're
going to build this perfect thing we're to get enough research so we can build
the perfect thing then we're going to go ship it .</p>
<p><strong>Joe:</strong> Exactly. Yeah. </p>
<p><strong>John:</strong> Yeah. Because certainly seems like that helps you get to a place
where you start getting feedback from real people, as opposed to your cherry
picked. </p>
<p><strong>Joe:</strong> Absolutely. Because the Rails thing really highlighted that for me,
it was that a lot of people who were VB customers had migrated to Rails.</p>
<p>And, also, like I remember interviewing in a customer interview since somebody
who was on the VB team, who now worked at a Rails shop, and I remember like,
how did this happen? Like he used to be one of us know and And, it was really
fascinating because it's I we, he was working at a startup He's we started
this startup, we just needed something up and running quick and, and it
highlighted for me that there was this whole other community that I wasn't
learning from.</p>
<p>Cause I wasn't talking to, and that, that whole leave the building thing,
leaving the comfort zone. I realized that's probably the most important way to
de-risk what I'm working on is if I'm actually talking to folks who aren't
using my products, then I'm going to learn as much, if not more than folks who
are.</p>
<p><strong>John:</strong> Yeah, absolutely. Because there's some reason why people left to go
do some other thing. And if you go through life kind of being ignorant to
those reasons then you're really not going to learn. It's really hard to grow
that way. </p>
<p><strong>Joe:</strong> Yeah. </p>
<p><strong>John:</strong> And the echo chamber here is strong in Redmond.</p>
<p>And cause it could reminds me of a long time ago with the I still remember the
very early Ruby confs. This is circuit 2005, -06 before I came here and what
was interesting about Ruby was really more that it attracted a certain kind of
person, especially in those days.</p>
<p>Rubyconf back then was a single track 200 person max conference. And when I
look back at the people who were in the room physically in that room and the
kind of value creation that they created both around Ruby itself, but mostly
let's be honest around Rails is astounding, right?</p>
<p>We had the GitHub folks. I actually wasn't quite the GitHub folks but the
people before they even thought of creating GitHub were in the room, which was
super interesting. Shopify Toby was there. He gave a talk at that conference
and it was just like, ah, I'm just trying sell snowboards online. And this
Rails thing was awesome for doing that. </p>
<p>The Twitter folks were there. </p>
<p>It was almost like the beauty or the elegance or the kind of the aesthetic
perhaps of the language. It brought people in. That alone I don't think would
have given you those pragmatic people that you saw.</p>
<p>But I think that it was really DHH and Rails that and in particular, the demo
the Rails demo is just this incredible demo is I'm just going to type some
stuff with the command line and boom, I've got this whole application and
people go, oh, how do I get more of that? </p>
<p><strong>Joe:</strong> Yeah. I think the other aspect of this, I remember seeing some demos
of real Rails apps at the time.</p>
<p><strong>John:</strong> It wasn't just a toy </p>
<p><strong>Joe:</strong> Yeah. And I think it was User Voice or some of these other web
platforms. And it stood out to me that the thing that I love most about my job
is actually seeing what people create with technology. And seeing to me, it's
we often think about as PMs, like, what should we talk about at conferences
and whatnot?</p>
<p>And the thing I realized from all of the open source communities I've engaged
with over the years is that the things that really create the energy is
sharing. This is what I built, and this what I learned. And that's such a
powerful thing. That I think it's also a bit of a now it's in my sort of
toolbox If I can always looking for, if I'm working on something, who's
actually building something cool with it?</p>
<p>It's a kind of a nebulous signal to use, but it's an important one. Like you
kinda know it when you see it and if there's a vacuum and you haven't seen
somebody, who's like wow, I built something cool with. this. That's probably a
tell and I want to drill into that, but yeah, </p>
<p><strong>John:</strong> Tim O'Reilly built an entire empire, O'Reilly publishing around what
he called the alpha geeks or what are the alpha geeks looking at right now,
because that's, that, that is an indicator where the industry is likely to go. </p>
<p><strong>Joe:</strong> Yeah. And I think it's also I worked after Lightswitch I worked on
Azure stuff pretty much until present day and that story has played out time
and time again, in terms of container orchestration, CI systems, et cetera, et
cetera. It's not really the best that wins often.</p>
<p>It's the one that folks have found the most useful and who are willing to
stand on a podium, so to speak and share how useful it's been and contribute
back to it because, oh my gosh, we rely on this. Now we need it to be better. </p>
<p>That playbook is super it just continues to repeat itself.</p>
<p>And I think Microsoft has done a better job of recognizing that over the last
several years, but at the time, way back in the early 2000s , that was not
that was not really in our wheelhouse. </p>
<p><strong>John:</strong> Yeah. And so you live through that transition, the transition from
this very kind of like inward-looking echo chamber-y kind of company that I
still remember cause he brought up Soma.</p>
<p>Before I had to give a talk at OSCON the O'Reilly open-source conference, we
wanted to announce that we were going to contribute some tests back to RSpec
or Ruby spec, which was this test suite that kind of, because there was a
proliferation of Rubys at the time and we needed, and there was no spec,
right?</p>
<p>The language, the spec was the implementation. So we needed something that
would validate whether or not something was Ruby or not. And all we want to do
is contribute some tests to this Ruby spec suite and I had to get Soma's
permission, which finally came at midnight , the night before I was going to
give my talk at 8:00 AM in the morning.</p>
<p>Oh, that's cutting it a bit close folks. And and that, that was the
environment, right? Like we're contributing tests to some tests suite and I
needed senior vice president approval in order to go get that done. So how is
it from your vantage point like that transition point from, this kind of super
inward looking company to now the number one open source contributor, I think
out there in the world.</p>
<p><strong>Joe:</strong> Yeah. It's it's really interesting. I did have a front row seat to
some of that because it's at the, contributing back to RSpec like the
precursor to that for us was when I was working on Lightswitch, we had a web
client and it required legal approval and VP approval to use jQuery. </p>
<p>And jQuery obviously at the time, it was like, you really couldn't build a
website without jQuery, practically speaking. And it was hilarious, but I
think over the, after Lightswitch my focus started to be on non .NET languages
and customers on Azure. I pivoted there. I came back from parental leave and I
was like, told my boss. I was like, I just need to work on something
different, throw me on something different and I'll go. And and it was
interesting because if you, at the time we actually had a separate
organization. MS OpenTech </p>
<p><strong>John:</strong> Sam Ramji's thing. </p>
<p><strong>Joe:</strong> Yes exactly. It was like a subsidiary of Microsoft to work on open
source.</p>
<p>And I had come back just as that was dissolved and it was really interesting
because at the time we were trying to get tools like Jenkins, Ansible, and so
on to work well with Azure. And there was still a lot of friction for a long
time of if we got Ansible to run well, is that going to erode Powershell's
share on Azure and things like that?</p>
<p>And I learned a lot from that because I also found that sometimes the open
source things ... it seems like at the time folks viewed them in an almost
binary way. They were either amazing and perfect. And we should just drop
everything and use them, or they were the bane of our existence. And, we
should wipe them off the face of the planet or whatever.</p>
<p>And what I realized is that, as I because I had this learning now, that it's I
need to see customers building something. Like when I was working on the
Jenkins stuff or the Ansible stuff or Terraform in the early days of
Terraform, it's the first thing I wanted to do is I want to really get to know
every customer who's using this so that I can learn from them.</p>
<p>That was like my big lesson learned. And it gave me a lot of insight into ...
Nothing, there is no panacea in technology, everything has limitations and
drawbacks. And I think it took us a few years as an organization to recognize
that open source had pros and cons just like everything else.</p>
<p>And so can we actually I think now we've definitely gotten to the point where
we're super objective about it. We understand the critical role it plays. But
working through those kind of growing pains was definitely challenging. I
remember being I was working on Jenkins stuff as well as we had chosen to
rewrite the Azure CLI because we had this really old node CLI which most
customers failed to actually install successfully.</p>
<p>Cause getting node on your box is super hard. It was really slow and it was
also a lot like the PowerShell interface. It just didn't feel like a POSIX
style tool. </p>
<p>And I remember going to various teams in Azure, describing Hey, we really need
to build a real command line tool for our Linux audience.</p>
<p>And yeah, for a while, I was yelled at pretty pretty frequently purple in the
face, very senior folks. And I learned a lot from that, but I think ...</p>
<p><strong>John:</strong> So your earlier thick skin thing really helped you. </p>
<p><strong>Joe:</strong> It definitely a super power of yes, I'm always willing to be yelled
at because honestly, like I've always found that I've learned from those those
moments a ton.</p>
<p>Like I remember having a discussion with Jeffrey Snover, the creator
PowerShell and he was really upset. And it took me to why he was so upset to
realize that actually there were a lot of this plan that I had put together
that I really hadn't thought through that mattered a to him and I, it was one
of those times when I I really because I ended up having dinner and we went to
a shared dinner and he happened to be there.</p>
<p>And and it this light dawned for me, because a, fact that I hadn't really or
defensive meant that I could now sit across the table from him at dinner,
without it being super awkward. I also learned a ton and it really taught me
that like in a company like Microsoft, even as big as it is, you always,
people are in your network forever.</p>
<p>And so how you respond in those moments, it's going to be the lasting memory
that person has of you. And. And it was just a good reminder because I was
pretty close to flipping the bit on that one. I'm like, you know what, I don't
really need to put up with this. And but overcoming that I think was a good,
it was a big milestone for me I'm just like realizing that wow, like actually
we ended up collaborating on something the very next month, which was like the
porting PowerShell to be cross-platform.</p>
<p>So they're building on dotnet core. And I was like, hey, I sit in the same
room as the dot net team, let's work on this together. And it really worked
well, but it's one of those things that I think, that was like the next
milestone in my career of just learning how to be patient and recognizing that
people, the the sort of permanence of one's network in a company like this. </p>
<p><strong>John:</strong> And also that ... The one thing that I've learned I think is that
people aren't, I don't know, mean or difficult or whatever it is because it's
what they are, who they are, but the rather it's almost always a mismatch in
priorities. Your priorities are different than Jeffrey's priorities.</p>
<p>And because of that, you look at the world through the lens of your
priorities. </p>
<p><strong>Joe:</strong> Absolutely Yeah. </p>
<p>I think a mismatch in priorities, and then a different point of view in terms
of what requirements we're actually trying. What's our objective that we're
really going after, because sometimes I think I've assumed a shared objective
when there really isn't one.</p>
<p><strong>John:</strong> Right </p>
<p><strong>Joe:</strong> And it's no, actually, like we just have different objectives and
it's okay, cool. Once I understand then it's actually much easier to engage. </p>
<p><strong>John:</strong> Yeah, one thing that, again, that's always really challenging is
assuming that you're on the same page when you're not actually on the same
page.</p>
<p><strong>Joe:</strong> Yeah. Yeah. I think the times when I have not been at my best are the
times where I've had those whoa, what just happened there moments it's because
I made assumptions that I didn't actually test about where we were as, two
teams working together or something, even two people. That's that's a lesson I
I continue to learn from I think it's not always it's not always roses, but I
think figuring a better system to like always check assumptions about what
problems do you think we're solving?</p>
<p>What problem do you think you're solving? What are you driving? What are we,
what's our outcome having that explicitly up front, just save so many
problems. </p>
<p><strong>John:</strong> Yeah. Because in the absence of that, everybody just makes up their
own story in their own mind. </p>
<p>And they think, yeah we're on the same wavelength here </p>
<p><strong>Joe:</strong> Yeah. Yeah And then they get upset when something different happens.</p>
<p><strong>John:</strong> It's somebody once said to me a long time ago it's impossible to
over-communicate in a professional or in a work setting. That's just hard won
experience from things like this. And I certainly seen in the past when people
have a completely different idea about something that I thought I had
explained super clearly. </p>
<p><strong>Joe:</strong> Yeah. </p>
<p><strong>John:</strong> And and that's really hard. So again, like we've few interesting
things that you've done in your career. Was there something looking back over
the entirety of it that you wish that you had said yes to, but you didn't at
the time? </p>
<p><strong>Joe:</strong> Yeah. That's a tough one. I have to say I don't... I am usually a
yes- and type of person. </p>
<p><strong>John:</strong> Improv. </p>
<p><strong>Joe:</strong> The examples of things I wish I said yes to I, I'm not sure I'm
really not. I think the only thing that I actually wish I said yes to are
things that happened outside opportunities I had outside of work that I didn't
say yes to because I committed. to work. </p>
<p>And I definitely, I think those are the most profound things for me, where
like at the end of the day, my impact at work is not predicated on whether or
not I'm here this week or next week or whatever.</p>
<p>And so. it's hard For sometimes to recognize that </p>
<p><strong>John:</strong> The place is going to fall apart if I'm not here. </p>
<p><strong>Joe:</strong> Yeah, exactly. Yeah. I think those are probably the biggest examples.
Yeah. </p>
<p>Yeah. </p>
<p><strong>John:</strong> You rarely find anyone at the end of their life looking back and I'm
like, oh, I wish I've worked that Saturday. Yeah on whenever that was Yeah.
Yeah. </p>
<p>So again, looking back at everything, what's the thing, what's something that
you're particularly proud of as an accomplishment? Not necessarily because it
had huge impact or anything but something that really changed your trajectory.</p>
<p><strong>Joe:</strong> Yeah. The thing that changed my trajectory, I think was this is a
longer answer. Most of my role, the first 10 years of my career, like working
on VB, working on Lightswitch, that kind of stuff. I worked in a pretty
isolated team. And I didn't really know how to collaborate cross team.</p>
<p>And I think a switch flipped for me when I realized that everybody that I'm
working with also has a life. They also have emotions, they have feelings that
they are just trying to get their job done and I can play a role in making
their lives better that to actually help them in some material way. </p>
<p>Okay. I tend to spend a lot of time with Kusto and telemetry and stuff. It's
you know what, maybe I can spend 20 minutes helping you write that query for
whatever. Realizing that the sort of human aspect of the work environment and
that I did have a role in like lifting people up that actually changed my
career trajectory in a pretty profound way, because it meant that I was no
longer entering problems trying to be like, I'm trying to get this outcome.</p>
<p>Like I needed a decision made and I'm going to go like beat this person over
the head until the decision is made or give them all the information, like
machine gun the information to them until there's no other answer but yes.</p>
<p>When I realized that at the end of the day, what gives me the most joy from my
job is actually seeing other people thrive and playing a role in that. Then I
realized that I was actually doing a much better job myself because it was a
natural filter, like in my career, as I've grown, it's no longer possible to
have significant impact as one person. </p>
<p>A lot of times I find that if I take, if I just pause and say okay, like how
can I lift up the people around me so that we all have impact that we have?</p>
<p>That's been like a game changer for me. It's it's made me more successful.
It's made me happier as well. Cause it turns out that's a much, much better
way to live. </p>
<p><strong>John:</strong> Yeah. And when I think think back to, folks coming in from college
oftentimes they've spent their entire life just doing things on their own.</p>
<p>I have to write this test. I have to go do this project or this assignment and
every now and then there's some group project or something that's thrown in
there. But but it's, but now all of a sudden they're in this different world
and they working on their own because they think I need to get credit for this
thing that I'm working on. So I can get the "A" and I can't do that
with other because then could be their work or something. And so overcoming
that, it's you said it took you 10 years to get to that stage. </p>
<p><strong>Joe:</strong> I think there's a certain irony of being an individual contributor as
a PM.</p>
<p>The irony is that you have to be really great at working with others, because
everything that, as an individual contributor, like everything that you do is
influence without authority, and so people have to want to work with you. And
and so that's one aspect of the individual contributor career path. </p>
<p>I would not have been able to continue growing in my career if I hadn't
learned that lesson of actually, this is really a team sport, I'm here to
actually lift others up because it's actually, they're the ones who are
largely going to do the work that I'm trying to make sense of here. And I've
actually found that as I've shifted to a manager that has served me super well
because it's actually possible to go down the manager path and just own your
own team and not really have to work with others, but that can be limiting to. </p>
<p><strong>John:</strong> Yeah. And so now you're in this role where your job really is to
help grow your team and help those individuals succeed. In addition to the
people that perhaps you talk less to, now that you're your manager person that
you used to talk to in as an individual contributor person. </p>
<p><strong>Joe:</strong> Yeah. Yeah. It's it's it's a really fun journey, it's kinda, I made
the switch largely to be honest, because I realized that actually that was
what brought me more joy than like the hardcore technical stuff.</p>
<p>As I enjoyed the technical stuff, but after 20 years or so going from memcopy
similar types of like down in the weeds things, it was actually the helping
the folks around me grow that was actually what was bringing me the most joy.
And that's why I made the explicit switch. </p>
<p><strong>John:</strong> Yeah. I remember some sage words from an old boss of mine was
software engineering is a social science. That was Steven Sinofsky and that,
that really stuck with me. Cause that's the hard stuff, in lots of years of
observing Microsoft I have no doubt about our ability to execute on some
technical thing. That's not hard it's executing on the right technical thing,
that's the really hard part. And that's where all the squishy messy people's
stuff shows up. </p>
<p><strong>Joe:</strong> Absolutely Yeah. It's like how can you bring out the very best in
everybody so that you more commonly do find the most important thing to work
on. </p>
<p><strong>John:</strong> So to wrap things up, I thought I'd just ask a couple of fun
questions. Like what's something that you purchased or got, or acquired were
given to you recently that brought you like an outsized amount of joy that you
would have never predicted. </p>
<p><strong>Joe:</strong> Yeah. I have to say, so I, I love to fish. Fishing is like always
been a big thing. I grew up working on a farm and stuff, so I've always been
outside and during COVID I bought a kayak specifically for fishing and I have
friends who have boats I have a whitewater raft and other things </p>
<p>But the kayak has been just like this great source of joy because I can throw
it on my car. I live 10 minutes from Puget Sound. Be on the water at 5 and
still make it to work by 8:30 no problem. That has just been a really awesome. </p>
<p><strong>John:</strong> So what's the Zen of fishing for you? </p>
<p><strong>Joe:</strong> Yeah, it's it's really about observation for me. So I like to take in
all of the signals, so like I fly fish a lot and It's like understanding what
the fish are doing, understanding what insects are hatching, what temperature
do the insects hatch at, that sort of stuff I think is it's really fascinating
for me because I have to immerse myself in it. And I think leaving work,
leaving, the stresses and challenges of being a parent and all that stuff for
a period of time and immersing myself to just observe everything is that's the
Zen.</p>
<p><strong>John:</strong> So fishing is like a solo activity for you. It's not a ... </p>
<p><strong>Joe:</strong> I have, I one good friend that we usually go together, but yeah, we
it, there's not a lot of talking a lot. </p>
<p><strong>John:</strong> And so you're out there, you're in your... what's a fishing kayak
what's different from a regular kayak?</p>
<p><strong>Joe:</strong> main difference is that they have pedals instead of using a paddle.
And the reason for that is so that you can fish with your hands while you're
moving. </p>
<p><strong>John:</strong> Oh, so you can move forward by like my, like a bicycle pedal or,
yeah. Interesting </p>
<p><strong>Joe:</strong> They're a little bit stable also than a sea kayak, which, are very
long and skinny, but also very tippy. </p>
<p><strong>John:</strong> Very tippy. </p>
<p>Yeah. </p>
<p><strong>Joe:</strong> Yeah </p>
<p><strong>John:</strong> So how does that work. Is it like they're outriggers or is it ...</p>
<p><strong>Joe:</strong> There are no outriggers, they're just bit wider.</p>
<p><strong>John:</strong> And then what's a a story that you've shared with others and in
particular, and what was it about that story that kind of made it compelling
to you?</p>
<p>That story could be anything. It could be a book, could be a movie. It could
be ...</p>
<p><strong>Joe:</strong> A story that I have heard or a story that I have told? </p>
<p><strong>John:</strong> Either one.</p>
<p><strong>Joe:</strong> I think that. I have a significant recency bias with this. I love to
read, I probably read two or three books a week. And I recently read a book
called The Golden Spruce. It's a non-fiction book and it's about this huge
Sitka Spruce in the Queen Charlotte Islands that has for reasons that nobody
knows has golden needles.</p>
<p>And it's about, this seemingly deranged, perhaps not extremist who cuts down
the tree. It's like a thousand year old tree. And what struck me about that
story is that it talks a lot about the Haida native population. It talks a lot
about logging environmental ism. And what struck me about the story that I
think was really powerful was that It presented a really genuine, but diverse
set of points of view in a really compelling way. Often I find like whether
it's at work or in literature or documentary or whatever, that there's always
some heavy bias, that's hard to unravel. And what I appreciated about that
story was that there is no clear answer for why this tree existed or whether
it should have been cut, whether cutting it down, actually achieved the
objective, which was to highlight the hypocrisy of logging in the area and
things like that because they were highlighting how wonderful this tree is
while they were ravaging the rest of the Queen Charlotte Islands, basically.</p>
<p>What struck me about this story was the really diverse points of view in the
sense of conflict that's unresolved, because I find that a lot of times
stories want to have a resolution, I told you as an English major. There's
always some resolution. In life there's a resolution.</p>
<p>And I always gravitate towards stories that are unresolved. </p>
<p><strong>John:</strong> So the story left a lot of tension in the air? But at least it
exposed you to the tension as opposed to just watch, sweep it under the rug... </p>
<p><strong>Joe:</strong> Yeah. It's one of those books that I'm like, I still don't know how I
feel about this. Who, do I believe in that the sort of antagonist point of
view and that sort of thing. Yeah that one stays with me. </p>
<p><strong>John:</strong> Wow. On that note I think I'd like to thank you for the
conversation. This is a super fun for me and hopefully folks got something out
of this as well.</p>
<p><strong>Joe:</strong> Well thanks, That was super fun. I I appreciate you doing this and
it's always fun to chat and get to know one another, on a more human and
personal level than just talking about shop all time.</p>
<p>And we're actually in the same room doing this right now. And unlike, and one
of the impetuses for this was just all the isolation that we all felt sitting
in our bedrooms or wherever ...</p>
<p>totally </p>
<p><strong>John:</strong> ...talking to each other.</p>
<p><strong>Joe:</strong> Yeah. It's I have to remind myself how long the last couple of years
have been ...</p>
<p><strong>John:</strong> It's been a couple of years</p>
<p><strong>Joe:</strong> Reconnecting in whatever form, whether it's through things like this
or in person or whatever it's been really awesome. </p>
<p>Long overdue. Yeah. Yeah. </p>
2022-05-062022-05-06T00:00:00+00:002022-05-06T00:00:00+00:00https://www.iunknown.com/2022-05-06/<h2 id="i-ve-started-a-podcast">I've started a podcast!<a class="zola-anchor" href="#i-ve-started-a-podcast" aria-label="Anchor link for: i-ve-started-a-podcast">🔗</a></h2>
<p>A <a href="http://scripting.com/davenet/2000/10/31/virtualBandwidth.html">couple of decades too
late</a>, I've
decided to start a podcast. I've had the good fortune to have met many
interesting people in my life, and I wish I had written down or recorded more
of what I learned from them. In the spirit the best time to start a podcast
was 20 years ago and the next best time is right now, I'm going to try and
make up for lost time. </p>
<p>For those arriving in the future, here's a <a href="https://john-lam-podcast.simplecast.com/">link to the main page of my
podcast</a>. I need to find a place
for it on this blog as well.</p>
<p>I started my experiment by interviewing people on my team. Here's my
conversation with Austin Henley, former Assistant Professor at the University
of Tennessee and the newest member of the PROSE (Program Synthesis) team at
Microsoft. </p>
<h2 id="summary">Summary<a class="zola-anchor" href="#summary" aria-label="Anchor link for: summary">🔗</a></h2>
<iframe height="200px" width="100%" frameborder="no" scrolling="no" seamless src="https://player.simplecast.com/fc78863b-0236-47cf-8d6e-4e3841ad0e4b?dark=true"></iframe>
<p>In this conversation, Austin and I discuss such topics as:</p>
<ul>
<li>His recently discovered love of LEGO as an adult</li>
<li>How bouldering helps him strengthen his problem solving skills</li>
<li>The differences and similarities between working as a professor and as a
Program Manager at Microsoft</li>
<li>The effectiveness of using a 'flipped classroom' teaching technique</li>
<li>How Visual Studio and Visual Basic 6 got him started in programming</li>
<li>How to use feedback loops in recommendation systems to generate superior results</li>
<li>What we can do to improve tools for software developers by better
understanding what their intentions are</li>
</ul>
<h2 id="transcript">Transcript<a class="zola-anchor" href="#transcript" aria-label="Anchor link for: transcript">🔗</a></h2>
<p><a href="https://share.descript.com/view/cqd8Kmqr70k">Click here for an interactive transcript.</a> </p>
<p><strong>John:</strong> Today on the podcast, we're going to be talking with Austin Henley,
the newest member of our team. He just recently joined us a little over a
month ago from the university of Tennessee, where he was a professor of
computer science. At Microsoft, Austin's going to be working on the PROSE
team, our program synthesis team.</p>
<p>And in this, conversation, we're going to be learning a bit more about
Austin's background, what got him to come to Microsoft and some of the things
that he finds particularly interesting, about his past life as a professor. So
you got recently to number one on hacker news, with this post: what a $500,000
grant proposal looks like.</p>
<p>And that was for an NSF career grant. It was also this thing that kind of made
it pretty likely that you were going to go get tenure as a professor, but yet
you gave all of that up to come work here at Microsoft. Why did you do that? </p>
<p><strong>Austin:</strong> Well, that's the $500,000 question. So, you know, there's some
history here.</p>
<p>I had a couple of these NSF grants, the national science foundation it's who
funds most of the basic research. And you're right. It was looking good for me
to get tenure my faculty position. But for the last few years, there's just
been this bug in my head about, not that this isn't actually my goal.</p>
<p>Even though it was what I set out to do, there was more to it. I'd already had
a relationship with Microsoft before: I interned with them. I spent a summer,
visiting, as a professor. And so it morphed over time that I wasn't happy
doing what I was doing, this race to get tenure.</p>
<p>And so an opportunity arose. And I couldn't say no. I mean, it goes back to
when I got into programming, like in fifth, sixth grade that I wanted to work
at Microsoft. And so I couldn't pass up the opportunity. Right. </p>
<p><strong>John:</strong> So you're always like the Microsoft fanboy, growing up </p>
<p><strong>Austin:</strong> a little bit.</p>
<p>So I started with visual basic six. I used to have to pirate visual studio,
6.0, back in the day, this was probably around 2001. And every time my dad
would find it on our home computer, he would delete it. Cause he didn't know
what it was and it would take up, I don't know, 12MB. Yeah. It was huge.</p>
<p>And we had this tiny hard drive and so he would delete it. And so every couple
of weeks I'd have to re-download it. So I got started and was a bit of a fan
boy and that just kind of grew through college and grad school. </p>
<p><strong>John:</strong> When you were applying for this grant and what kind of led you to
come to Microsoft where they roughly the same things where they do different
things, like, could you describe a little bit more about what that was?</p>
<p><strong>Austin:</strong> Sure. So the research that I was doing at UT is all about
developer tools. So they use like I'm on the human factors side. So I would
observe developers, I'd put them in a lab. I would, watch them code, try to
understand what their problems are, what their workflow is. And so the grant
was actually about how can we build tools to help, not just students with
learning, in coding task.</p>
<p>So, maybe they were trying to understand how for loops work. But how can we
also apply that to professional developers? So there's a lot of learning that
happens while you're actively coding. And so that's what my grant was about:
can we help learning process through self explanation?</p>
<p>Kind of like rubber duck debugging. So Microsoft, in the PROSE team, they had
a project that was aligned with this. They're working on an intelligent
tutoring system, for like intro to CS and intro to data science students. And
so it's a very much overlapped with what the team was doing.</p>
<p><strong>John:</strong> So now that you've transitioned out of the academic life and into
whatever corporate professional life that we have here, what's the biggest
difference that you've seen so far, between these two worlds and also what's
similar between these two worlds.</p>
<p><strong>Austin:</strong> Yeah, there's actually a lot of similarities that I was kinda
surprised about. The ability to just figure out what needs to be done, what
needs to be done next, and then present that on the fly to diff very different
audiences is something that I had to do a lot in academia. And now it's
something that I do every day and different different meetings with different
partner teams and management just trying to paint the picture of what we're
doing and where we plan to go.</p>
<p>That's just constant. Something that's very different is just the pace. So the
job is a lot more similar than I thought, but the pace is so radically.
Whereas in, in my previous position, if I wanted to work on something, you
kind of go off and you think about it for a couple of weeks maybe work with
your graduate students to get a prototype over the next couple months and
brainstorm and sketch out what's the design space for the problem.</p>
<p>And what's the solution space look like, do some related work and just kind of
explore. But we do this. Daytime frame in the team or within a few days we
sketch out these plans and figure out what to do. So the pace is the biggest
one. What </p>
<p><strong>John:</strong> do you think is like the thing that's most responsible for this
difference in pace, like I think you, and I've spent some time talking about
Tim Urban the wait, but why thing? And he likes talking about procrastination
as a thing that he does a lot. And I think we all see that in ourselves and in
his, the funny thing that he likes to bring up for that is for deadline based
things this panic monster thing wakes up and and governs your life and drives
you to complete it.</p>
<p>Do you feel that, you know, I don't want to try and put the words in your
mouth, but do you think that it's kind of the difference between, being your
own boss in academia versus now where you have lots of bosses, it seems. Is
there more panic, monster driven work going on </p>
<p><strong>Austin:</strong> here?</p>
<p>Yeah, for sure. And I'm trying to find the balance there because I think
there's so much benefit to just having uninterrupted deep thought on a problem
that you're working on. And so how to fit that in to my current schedule,
which is just ridden with, deadlines and other people, depending on me.</p>
<p>And I, of course don't want to block other people, you know? So how can I work
in those sessions of just, how can I get two full days to think about
something without interruption while also not dropping the ball on all these
other projects? Another thing that I think makes this different is that it's
so much more collaborative of a workspace.</p>
<p>And academia, I had my, like a group of six students. I'd worked with them a
couple of times a week, but for the most part, we're a bit isolated in how we
work. But at Microsoft, I'm in meetings every day with different teams and
each team, has I, I'm making promises about, I can help with this, or there's
some expectation that they'll get me something.</p>
<p>And so that puts a lot of pressure to basic, basically have deadlines every
week at the very least for showing up with deliverables. </p>
<p><strong>John:</strong> Did you find that you collaborative much with other colleagues in
academia or was it perhaps more competitive? In, in that space? Like how was
that?</p>
<p><strong>Austin:</strong> So I. Early on. I took a very personal stance that I wasn't going
to be competitive with my research. And so I would put everything out there. I
didn't treat it as a competition for resources, even though resources were
very limited. I would put my ideas out there on my blog and on Twitter. And I
did a little bit of collaborating, but again the pace and rhythm of those
collaborations at the very most is once a week and more likely every other
week.</p>
<p>And so the expectation, which is, was just not there to have like concrete
deliverables constantly. But yeah, other people do take that to competitive
routes. But I stayed at, stayed away from it. And it, I think it works out
better to just be open and collaborative. </p>
<p><strong>John:</strong> Right. Cause I think there's a lot of. A lot that we can certainly
learn from from being kinder and gentler to each other. If that's the
motivation, right? Other times certainly you've heard plenty of horror stories
in graduate schools about, supervisors pitting students against each other on
the same project and things like that as well.</p>
<p>How did you decide to become a professor in the first place and what kind of
led you down that route? </p>
<p><strong>Austin:</strong> Yeah at some point I, so I got into programming pretty, pretty
early just by accident and fell in love with just coding and really what got
me into it was like compilers and programming languages and.</p>
<p>I remember telling people at high school that I just wanted to be an expert in
that space. I just want heads down, just know everything I can about coding.
I'm like, I want to be the expert that people go to. And so when you start
looking into what kind of jobs that can be academia came up a lot, having
getting a PhD in a topic means that you were given some years of freedom to
just really drill into a topic.</p>
<p>And so I didn't know anyone that had gone to grad school. And so I actually, I
applied and was a master's student at first and my PhD advisor is probably
what really sealed the deal for me, just working with him was a great
experience. And I learned a lot from him. And that made me stick around for
the PhD.</p>
<p>But there was still a question of, should I just go do industry research?
Should I go be a software engineer? Should I go be a PM? Or should I go the
faculty route? And I was in grad school for something like seven years. So I
had plenty of time to think about this and bounced all around and did lots of
internships.</p>
<p>I did, I think five internships. And so I was actually leaning towards the
industry route. But at the very last minute, in my final year of graduate
school, my mentors found out that I wasn't applying to faculty positions
because I, and what I had really said was, I don't think I have a chance.</p>
<p>It's very competitive, very finite resources number of positions. And the
interview process is not like industry positions. It really only happens once
a year. So around October, November, everyone applies to the same person.
University might hire one person each year, if that and it's, it takes months
to, do a phone call.</p>
<p>Then you go out and do a full one or two day interview where people just drill
you or grill you about your research. And you give a job talk as it's called
in front of the entire department and they ask you hard questions. And some
people like to be mean about it and try to trip you up in front of everybody
and show you that they're smarter.</p>
<p>Yup. Yeah. They're smarter than you, right. They know your topic better. And
so I didn't want to do that. That just sounds very stressful. But some great
mentors of mine. They said, everyone's already expecting you to do this
Austin. You've done great work. You can be successful if you try.</p>
<p>So after that I did some like soul seeking and decided to go that path. And it
took, I think, three weeks of full-time effort for me just to do the
applications to get my resume ready. Your statement, your research statement,
teaching statement, all of the materials letters of reference. It took me
about three weeks and I applied and it turns out I, I got a surprising number
of interviews and the first interview was so stressful.</p>
<p>It really was stressful, but after that one, they were also easy. I like, I
think my body just had so much stress that it gave up and stopped fighting it.
And I was just like having fun, enjoying flying around the country, giving
these presentations. And they went really well. And I got some good offers
that I couldn't refuse.</p>
<p>So one of them was at the University of Tennessee. And I actually had a plane
ticket to fly out to Microsoft for a software engineering position interview.
And that was the hard one to say no to because I had accepted the faculty
position</p>
<p><strong>John:</strong> Did you know, where at Microsoft, that engineering position was for?</p>
<p><strong>Austin:</strong> Yes. It would have been working on the Python team for VS Code.</p>
<p>Yep. I also had another the team that I interned with also invited me out. I
believe it was back then. It was the Tools for Software Engineering team TSC.
I think they've rebranded to one Engineering System now. Yeah. </p>
<p><strong>John:</strong> So then you wound up in Tennessee and how long did you stay at
Tennessee?</p>
<p><strong>Austin:</strong> Three and a half years, but I grew up in the state of Tennessee
and I went to graduate school in the state of Tennessee. So there's a lot of,
there's a lot of ties here. </p>
<p><strong>John:</strong> There's a lot of Tennessee in you. </p>
<p><strong>Austin:</strong> Yeah. Too much. Probably. </p>
<p><strong>John:</strong> So then when you became a professor what was like the folks who
read, like how did you pick or choose what you worked on and was that told to
you?</p>
<p>Was that something that you had to figure out for yourself and how did you
decide on those topics? </p>
<p><strong>Austin:</strong> Nobody trains you how to be a professor, really. Graduate school
is supposed to train you to be an independent researcher, but there's a lot of
other parts of the job, right.</p>
<p>That, that have nothing to do with research, such as teaching, administration,
service, mentorship. When I showed up, I had no idea what to do. I was shown
an empty office and it was a very nice office and they gave me the keys and
that was it. There was no starting manual. No one tells you what to work on.</p>
<p>No one tells you how to spend your time. And that was, it was probably what I
spent my first semester on is just learning where to put my time. And then I
evolved it every semester after that. And yeah your point about, where do I,
what research problems do I work on? It's really hard too, because some people
continue their dissertation research, but there's also some expectancy that
you're going to grow beyond.</p>
<p>And be more independent. So breaking away from your prior work and your
research advisor from graduate school. And so I'll tell you what I did. This
was I'm very deadline driven. My first week there was a deadline for a grant,
a national science foundation grant that you can only apply for in your first
two years.</p>
<p>And so I was like, okay, this is like my one opportunity to get a grant. And
like my first two years it's slightly less competitive. And I can't pass up my
first opportunity to apply for it because after like your second year, you
can't get it anymore. And so I was like, well, I guess I'll just do nothing,
but write this grant proposal.</p>
<p>And I actually started it the week before I started the position. But you know
what you have to have a topic to write on. And so I. Just turned off my phone
for a week or two. I didn't go, I didn't leave my apartment. And I just
thought about what is the coolest tool that I can dream up and I'm going to
write my grant proposal on that.</p>
<p>That's what I like to do. I like to work on like just weird ideas for
developer tools. And that's what I did and I wrote the proposal and it was
funded. </p>
<p><strong>John:</strong> Oh, fantastic. And then, so you started working on that you
attracted some graduate students and you also had to teach there too, right?
Was that something that you were just told you're teaching this class? Or how
did that work? </p>
<p><strong>Austin:</strong> Yeah, so my department was there. They're very reasonable. And so
they worked with me to find what classes are good matches, but also the
department needs. And so they brought me in knowing that they have a huge need
for software engineering. So like introduction to software engineering,
junior, senior level standard class that every, almost every university has.</p>
<p>That really just teaches like a a development process. So they already know
how to code but how to work in a team for a group project and build an
application. And yeah, so that I underestimated greatly how much time
preparing for that takes each lecture would take me. I am, because I would
track it something like eight to 12 hours per lecture.</p>
<p>And that's me lecturing for about like 40 minutes. And then I would try to
weave in like an activity each class so that my students, don't go to sleep. I
get tired of hearing myself talk too, so I don't want to put them through the
misery. And yeah, so two days a week I did nothing but make lectures.</p>
<p>The great thing is that I use those lectures every fall after that. </p>
<p><strong>John:</strong> Yeah, there was this huge like startup cost and then it started
paying dividends afterwards. Yeah. So, do you miss the teaching part of it? </p>
<p><strong>Austin:</strong> I really enjoyed the teaching. My classes kept getting bigger and
bigger. And with COVID everything went online and teaching online I don't miss
it all. I do miss teaching, but it's really the small classes. So once you get
beyond 30 students, it's, it doesn't feel like it's teaching anymore. It feels
like I'm talking and they're eyes staring back at me. So I was constantly
struggling with how to make a large classroom of 60 or 120 students more
interactive and I never succeeded there.</p>
<p>But I do, I love teaching the smaller classes and being able to interact with
the students. No. </p>
<p><strong>John:</strong> Did you take inspiration from the big, like performance art classes,
like CS 50 and things like that? Or did you try that? Did you try pulling that
off? </p>
<p><strong>Austin:</strong> I would try to find different pieces that I, because like I tried
doing a flipped classroom for instance, where me and the TAs it's a flipped
classroom is where you do the homework in the classroom and they go off on
their own and watch the lecture or read like some reading assignment outside
of the class, because, and there's some benefit there where they're getting
the one-on-one interaction from the instructor or one dominion erection on
what's actually hard for them, which is Hey I'm trying to code this.</p>
<p>I can't figure out why I'm getting this error instead of sending them home to
do that. And then I can't help them figure out that Python bug that they have.
So I tried things like flipped classrooms. </p>
<p><strong>John:</strong> How did that work? Was that effective? Cause I, only know this kind
of academically when I saw Sal Khan of Khan academy fame talk about this in
some thing that he did many years ago with I think it was public schools in
the valley where he was living at the time tried this, they would watch Khan
academy videos and that was the homework and then the schoolwork or the
homework was done inside of the classroom.</p>
<p>Was that effective? Did that work well? </p>
<p><strong>Austin:</strong> I think it really depends on the classrooms set up and I didn't
have experience doing it so I may not have done it very well. So something
that, the immediate thing that I noticed is that for some students it works
great. They have no problem asking for help.</p>
<p>They have no problem asking for help in front of other students. There is a
large population of the students that I would have my classes that maybe they
found it like stressful to have to perform in class. And they see their peers
around them like finishing the first step of the project, but they're still
stuck on it and they don't want to ask for help because it calls attention to
them that there.</p>
<p>So I've read about some ways to try to get around that. I think you can break
it up into like small groups and get them a bit scattered in, in the class.
But that's what I noticed that a lot of students didn't want to put themselves
out there. They didn't want to engage so much.</p>
<p>So what I started doing was just small pieces. Instead of doing your entire
homework and class, let's get you started. Let's get you first pass that first
barrier. And I would do live coding. So I think with me doing live coding and
I'm not very great at live coding, so I would make lots of mistakes and they
would see that, and that would help them at least get past the initial
barriers.</p>
<p><strong>John:</strong> It's amazing like how much how effective that can be, when, because
most of the time you see the finished product, right? You see the commit in
the repo. You don't see all this work that led to the commit. And one thing
like, like Jeremy Howard of fast AI fame, he actually livestreamed a lot of
his creation of the fast AI library.</p>
<p>And he does this crazy programming style where he writes all the code and
Jupyter notebooks and. But that was actually quite good for his class. So his
class was turn, could tune in to watch him code up the library that they were
using. And he got a lot of very helpful feedback from seeing that as well.</p>
<p>And I always wondered when I see on YouTube there's certainly a set of folks
that live stream coding and it is cool at the same time where you can see some
of these things and you just see how someone that's really experienced goes
about it. And you'll see that, oh my God, they make the same mistakes I make.</p>
<p>At the same time they're Googling for things and that's okay. And things like
that. So let's go back a little bit to Visual Studio and and being a child in
that kind of childlike wonder of computers what was there like a problem that
kind of attracted you to this thing?</p>
<p>Or was there something that you wanted to create that kind of drove you when
you when you were younger? </p>
<p><strong>Austin:</strong> Yes. Yes, there were, there was something that drove me towards
it. So I think it was in a fifth grade, maybe the summer between fifth and
sixth grade, I discovered how to use the internet basically. And we had a home
computer with Windows 98 on it.</p>
<p>And I was into video games and anime as many, young kids are. And I found
these communities online of people that were probably in high school making
these fan webpages for their favorite video game or their favorite TV show and
with they had forums. And I S so I started engaging in these forums and
realized that these people making these websites weren't that much older than
me and they weren't high quality websites at all.</p>
<p>Like they. It was before blogging was really a thing. They would just put
their ideas out there. They would put tutorials out there and fan art and just
discussion boards. And I, as every kid, when you see something you like, you
want to try to emulate it or create it yourself. And so I was like, okay, if
another kid can make a website I'm going to learn how to make a website.</p>
<p>And that's how I got started with, I think it was like geo cities for hosting
and trying to learn HTML. And I actually had a hard time learning, even HTML.
I thought it was so cumbersome to write HTML. And that's where I really got
sucked into computers is I wanted to make my own version of HTML my own markup
language.</p>
<p>And you can probably see where I'm going next. I found some people that had
enough knowledge to tell me, oh, you have to write a compiler to do that. I
had no idea what a compiler was. I'd never coded outside of HTML, but I found
a book at the library on compilers and I couldn't make no sense of it. I not
for many years remember which book </p>
<p>It was the dragon book.</p>
<p>Of course. Yes. Yeah. </p>
<p>I believe the second edition. </p>
<p><strong>John:</strong> And how old were you at this time? </p>
<p><strong>Austin:</strong> Maybe 12. 12. Okay. </p>
<p><strong>John:</strong> Yeah. Yeah. Dragon book of 12. That'd be pretty challenging. </p>
<p><strong>Austin:</strong> Yeah. I mean, it's challenging for a college student. Right? But
it taught me that I need to learn like a procedural programming language,
something.</p>
<p>So I, I first started with basic my dad who I believe had just recently
graduated from college, had taking, taken a basic programming course in
college and he had the textbooks still and he gave it to me. So I think it was
like Q basic or maybe GW basic. I don't remember which. And so I spent maybe a
couple of months on that before finding Visual Basic 6</p>
<p><strong>John:</strong> Did that change your life? Like what was that like to go from .BAS
files? Probably in a text editor and all that, right. To like this visual
thing. </p>
<p><strong>Austin:</strong> Okay. Yeah. So, it was overwhelming at first for sure. But Visual,
Basic 6 I think is what really sucked me in with the form editor.</p>
<p>I still miss that form editor to this day. Because I could just whip up a
simple, like something that just gets the job done and isn't a command line. A
mystery black box but this like visual application that I can hand off to
anyone that's not technical and be like here, this solves your problem.</p>
<p>It was amazing. And then years later I got into C plus, which I really
struggled with. And then later C# probably around the time I got into college.
But I've always been in that Visual Studio ecosystem. </p>
<p><strong>John:</strong> And it seems so sad that, back in the nineties, we certainly call
these things, the RAD environments Rapid Application Development environments
and we don't really have anything like that today.</p>
<p>It seems like, there's just so much complexity in almost anything that you do.
Oh yeah. You can build a UI. Just learn, React, like as if that was just
something that you just knock off in an afternoon while it was just some Java
script and some CSS is fine. You'll learn that stuff too.</p>
<p>And it just seems like the concept count for doing something. Like putting a
button on there and making it do something it's just enormous today with the
stacks that we're using, as opposed to Visual Basic, it's a thing. You drop a
button on it. There's a thing that looks like a button that you drag and drop
onto the form and you double click on it and off you go.</p>
<p>And it seems yeah, we're so far away from that today. And that, worry about
that. Like what so now that you're into doing kind of dev tools and making
people more productive, what do you feel is the kind of the big problem here?
What's the next kind of moonshot thing that we need to try and do in in, in
tooling?</p>
<p>Is it making the professional programmers more productive? Is it making the
students learn things faster or better? What do you feel? It is. </p>
<p><strong>Austin:</strong> Oh, that's another one of these big questions. So something that
I'll some of the research that I was doing. And as it related to the grants
that I know we talked about earlier is that so much knowledge is stuck in
different programmers heads and yet to complete a task, you need that
information.</p>
<p>So you need, and I'll give you an example. Let's say you're a programmer
working on a project at Microsoft, and you're making some changes that ideally
you would need to know the rationale as to why that portion of code was
designed the way it was in the first place. And also what are the cascading
effects of making changes to that location?</p>
<p>Right. And so you'll do things like you'll look at what code interacts with
that code or changing who calls that, that function or interacts with that
class upstream and downstream. You'll you might even look at the code history
and go back in time and look at what it used to, but there's still so much
information that you're not getting out.</p>
<p>And so what that, that last project of mine was getting at is how can we
facilitate the knowledge transfer between people in a more efficient way. You
can't always just walk over to someone's desk and ask them a question, even
though that's a very common thing to do. It's also very common to go back and
look at old code reviews, but it's tedious.</p>
<p>And so I wanted to find out how tools can help us not replace it, but help us
get that information or archive it and share it. And detect when someone needs
it, because you don't always know you don't know what you don't know. And so
if you're making a change, you might not realize the design decisions that
went into it in the first place until it's too late.</p>
<p><strong>John:</strong> How do you think you could solve that problem then? Today with a
magic wand, how would you imagine you can marshal whatever resources you need
to, to marshal to make this thing happen? What would you need to do? Like or
what would you do? </p>
<p><strong>Austin:</strong> Yeah, so I was looking at it from three different perspectives.</p>
<p>I was looking at it for students, you know, they're just trying to understand
concepts. But we can't look into their head and understand what their current
mental model of that concept or of their code is, but we can look for the
symptoms. And an example was something that we call code smell detection. If
they're writing code, it works.</p>
<p>But maybe it just looks funny. It smells bad. Or it, it often is indicative of
a bug then we could potentially intervene. And so that's, this is what my
first research project as a professor was, if we can detect that they're
writing code that has some code smell, say a loop that will only ever iterate
zero times or one times .</p>
<p>That doesn't make sense. It'll compile, it'll run, but no, like you shouldn't
be using a loop for that. Instead of showing them a compiler warning or a
compiler error, use that as an opportunity to pull information out of their
head, ask them a question. And so we built a system that would say, how many
times do you think this loop will iterate?</p>
<p>And we didn't want to disrupt them while they're thinking or working. And so
we use some prior work on these negotiable interruptions as they're called to
try to get them, to give us the answer. And so if they enter an answer, that's
something like, I think it'll run 10 to 100 times.</p>
<p>So it was like a multiple choice thing. It was like a click thing. </p>
<p>Yeah, we we played with different ways of multiple choice or like a range, so
they could enter two numbers X to Y. So for the loop, it was X to Y and then
we could use some static analysis just to see if it's possible. And if it's
not possible, then that's an opportunity to help them again, don't just yell
at them and tell them what the answer is, but rather, sorry, my dog.</p>
<p>Okay. But yeah, so that's an opportunity to try to help them overcome that
misconception. And so that was my very first project at UT and later on for
the career proposal, which is the, this big, like before you go up for tenure
grant proposal, I wanted to generalize it. So how can we take that same idea
of this inquisitive feedback loop, asking someone a question and trying to get
that information and help them use it more efficiently. </p>
<p>How can we apply it to professionals? And so I looked at onboarding and code
documentation. So if they're writing code that has some smells or is
indicative of being complicated or changing a region of code that might
correspond with a prior bugs, meaning that there's been a lot of code churn,
there's been a lot of code changes over time in that area.</p>
<p>Maybe we should ask them some questions, some structured questions to try to
tease out the design rationale and then document it such that it can be shared
later for onboarding purposes or code review purposes. So I don't think that's
a solution, but that's how I was going about this problem of trying to help
people share the knowledge that's stuck away in our heads. </p>
<p><strong>John:</strong> And so when that would happen, then what would be the artifact that
would capture these insights that they would then in turn like that, that
somebody else could glean from? </p>
<p><strong>Austin:</strong> Yeah, I didn't get to that. So like the operationalization of what
do we do with that information?</p>
<p>What form does it go to? That, that was an open question that I didn't get to.
And it's a hard one because you don't just, we already have so much
documentation that all these documents these documents that we share within
our teams or between teams that after a week becomes outdated and then we
never use it again, but it's still floating around in our One Drive. Right. So
that's an open question. </p>
<p><strong>John:</strong> The good live streamers, that code, they're already doing something
like this, right. They're trying to explain or vocalize what they're doing at
the time that they're doing to try and make the stream somewhat interesting.
Because otherwise, yeah, it could be pretty boring.</p>
<p>You're just seeing so many type stuff on, on, on a screen. And so there might
be something there but again, you're almost like relying on the human to
vocalize it, but what might be really interesting here is if we captured a
time series of them just typing stuff and their interactions, there might be a
way to infer things that they're doing by watching the time series of the
changes to the code.</p>
<p>Again, right. We're just in crazy, speculation mode here. But it feels like
there's it for me. </p>
<p><strong>Austin:</strong> Yeah, there's information there. And there's also, so what my
grant was, or my the research projects we're trying to build on was this idea
that you're getting at, which I believe psychologists called monitoring or
self-regulation.</p>
<p>So your kind of just having attention to what you were doing, you're trying to
be intentional and think it through it, think through it step-by-step and that
process of self explanation has shown to have lots of benefits. So if you can
get a student to self, explain what they're working on, like a math formula or
programming, they have better outcomes than a student who you don't ask to do
that.</p>
<p>And the explanation itself often isn't that useful, but the process of doing
it. Gets them better outcomes in some way, it gets complicated. But it's the
process of doing that self explanation. And so I was trying to leverage
semi-intelligent software tools to help the person do that, but also to help
them know when and where to do it.</p>
<p>Because when you're working in code, you can put your attention in all sorts
of different places. And so if we can have a system that calls out the high
value, low effort regions, where you should put your attention, then it can
that was the wind that we were going for. I see. Like, but what you're saying,
you were saying that we should use their process to potentially help others as
well.</p>
<p>Right, right. </p>
<p><strong>John:</strong> Yes, exactly. Yeah. And I, and it also feels Again, back to what
kind of latent information is there that we're just not taking advantage of.
And this kind of idea about vocalizing verbalizing, or you said self
regulating behavior. I remember the story and I've been trying to fact check
it online and it doesn't exist.</p>
<p>So take it with appropriate grain of salt. This was verbally told to me by
someone else, but they called it the Stanford Teddy bear experiment. And what
it was, legend has it that outside of the TA office at Stanford computer
science sat in a chair with a Teddy bear. And the idea was, or the rule was
that you couldn't go ask a question to a TA until you first asked. the Teddy
bear. What they found was the volume of questions that would come in from
students. And the quality of the questions would number one increase, but also
that they would just go away. They would start talking to Teddy bear and about
a minute or two into it, they go, oh, and then they walk away. </p>
<p>That's amazing.</p>
<p><strong>Austin:</strong> That's amazing. Yeah. That's amazing. I need to read about that. </p>
<p><strong>John:</strong> I'm trying to find this, believe me, I've wanted someone to write
this down, but I still haven't been able to find, but someone told me this
verbally and I just can't remember who. </p>
<p><strong>Austin:</strong> Yeah. I mean, and it makes sense. I had a lot of students that
when they would come ask for help, it was obvious that they didn't know how to
articulate their question.</p>
<p>And so if you can help them prep just before going into those office hours to
help them articulate their question. And oftentimes that just requires. Trying
to ask a question. So having that Teddy bear outside I, I can see that being a
lot of help and I think it could help now with some of these meetings that I
go into I try to do this where I'll write down the questions that I want to
ask when I go into the meeting.</p>
<p>And it, a lot of times I realized that I don't know how to ask the question
and I, it's much more fuzzy than I thought it was going to be. And so I think
that's something that we could all probably practice more. </p>
<p><strong>John:</strong> Yeah. I've also noticed that when I've been tempted to go ask an
expert about some thing that I find that as I'm writing the email, I never
send it right. Because I figure out the answer before I ever have to hit the
send button. </p>
<p>And so it's almost the same thing, right? There's this thing. The act of just
explaining the problem to someone else, even if the someone else has
absolutely nothing like my email client can give the answer. But the other
thing nowadays, I think with things like Codex and the thing in copilot our
kind of commercial implementation of Codex, the Open AI thing is it generates
code based on prompts.</p>
<p>And so perhaps, this idea of just prompting, right? Like explaining to the
system, we're trying to describe the thing that you're trying to do to the
system and having the system give you code, even if the code isn't quite
right, or but it could help just that, that, that feedback loop.</p>
<p><strong>Austin:</strong> Yeah. And that's what we're working on now. And in the PROSE team
is that feedback loop of what we call programming by example. So you show us
some input and output example and we try to generate code and we try to help
that feedback loop of trying to solve that problem, whether it be for Excel or
visual studio in different domains.</p>
<p><strong>John:</strong> Yeah. I think one of the challenges that the PROSE had in the past
and that y'all are like, on the path to fixing these days is that PROSE would
never in the past and in features like FlashFill for Excel, it would just do
the thing for you. It wouldn't tell you how it did it. You would just look at
it as huh, it did it. I think it seems right. But you wouldn't know how it did
that. So I think that since since the team has put their energy into having
it, so that PROSE would synthesize human readable or understandable code, in a
programming language, say like Python that all of a sudden it got much better
right now you can look at that and go, oh, I see what you're doing.</p>
<p>And or if nothing else, it would give you more confidence in the answer. </p>
<p><strong>Austin:</strong> Okay. Yeah. That's been a big research area for any recommendation
system is how do you convey some level of meaning of why are you, why are, why
is the user seeing what they're seeing? Because there is some amount of trust
required for a user to understand what's being recommended to them.</p>
<p>And this could be anything like recommending movies or music. And you could
see this on a, like a store it'll say based on what you've bought previously
or based on what other people like you have have purchased. We're going to
recommend this for you, right? So we're actively doing some studies now with
different pros integrations on helping the user understand why they're seeing
those suggestions, but also making them good suggestions.</p>
<p>Like you mentioned, people care about readability. So if we generate a formula
for somebody, it needs to be readable. It's pretty easy to generate really bad
code but making it performance or readable based on their intentions that's a
really hard thing and that's what we're working on now.</p>
<p><strong>John:</strong> Very cool. Very cool. So again, like maybe just shifting gears a
little bit else to, to other things as you're like going through your career
academically, could you share, like people that you looked up to or influences
in your life that kind of changed or shaped the path that you took to get to
where you are today?</p>
<p><strong>Austin:</strong> Sure, definitely. So I've had some great mentors and collaborators
along the way. So the first one was my PhD advisor. So Scott Fleming at the
university of Memphis he introduced me to this idea of human computer
interaction. I had no idea what that was. I used to be a compilers nerd, and
that's what I cared about was programming language design and how compilers
work.</p>
<p>And I had no empathy for users which I shouldn't admit because that's the
opposite of what my job is now. I thought that if you have a problem with
software it's user error and it's because you don't know enough, you didn't
try. Right. You just need to go get smarter. And he, I remember it.</p>
<p>He told me to go read this book, The Design of Everyday Things, and that's
still my favorite like book related to work at all, is this design of everyday
things. I had all my students read it and it just immediately clicked for me
that if I have a problem with software or hardware, it's not me.</p>
<p>Like we shouldn't blame the user. It's a design fail. Why did we not prevent
that error in the first place? Why did we not understand our user in the first
place so that we could make a better experience for them? So Scott Fleming was
my first really big influence in my career. Someone that I really aspired to
follow was robbed, align at Microsoft research.</p>
<p>So when I got into grad school, all the best papers were coming out of
Microsoft research. And so that's that reinforced this idea of I'm. I need to
get some experience at Microsoft. And so people like robbed at line Chris bird
Zimmerman Nachi Andy bagel these were the people that I was reading their
papers, and I was trying to meet at conferences.</p>
<p>I had no connections with them, but I would like you would stack them in a
hallway. Yeah. And had the most awkward, like, hello, I'm a second year grad
student. I love your papers. And then I run away in shame. </p>
<p>Did you have a chance to talk to Robson? </p>
<p>Yes. I spoke with him yesterday. And yeah, and he's great.</p>
<p>He we set up a re recurring meeting time, just so that I can hear more about
what he's working on and it overall overlaps a lot with what I'm doing now. So
it's a small world. Yeah. Rosalind, </p>
<p><strong>John:</strong> my favorite people to talk to here at the company. And we always
have these fun conversations some way when we get a chance to meet up last
time was in person.</p>
<p>But of course we haven't been doing much of that recently, so, yeah. Cool. So
you do some other things like, outside of work and things like that as well. I
know in a previous chat, you mentioned that you also do rock climbing and I
was wondering, how does rock climbing does it have any relationship to
engineering and the mindset that you bring to that?</p>
<p>Or like, how do you find these two things overlap. </p>
<p><strong>Austin:</strong> Yeah. So that's a funny question to ask about the overlap of, I
don't know if I've thought about it. So I got into climbing in college because
my university had a brand new climbing gym. And I had never thought about
climbing. I'm terrified of Heights.</p>
<p>And I went and I tried it with some friends and I got up four or five feet off
the ground and said, I'm never doing this again. It just, but I kept torturing
myself. I would go back every couple of weeks and try and get a little bit
higher and everybody would make fun of me cause. It was not a difficult like
route as we call them.</p>
<p>It was very easy. I was just a chicken and couldn't overcome my fears, ended
up getting a job there a year later. And now I ha I built a client home
climbing gym in my bonus room. My, my entire bonus room is a climate wall
area. And so the overlap, so it's funny that you ask.</p>
<p>So I do a type of climbing called bouldering, which is no rope. You normally
if you're doing it outside you'll bring these crash pads with you these small
foam pads that will prevent you from getting too hurt. And you don't go very
high. 10, 15 feet usually is the limit.</p>
<p>But we call them problems. They're bouldering problems. And so it's a sequence
of moves and they can get quite difficult, but it's all about your body
positioning. At first you think it's all about like just raw strength, but
you'll find that rock climbers, usually aren't, very buff people.</p>
<p>They look like they're quite skinny usually. They're not the most muscular
people in, and you'll quickly find that it really is this, I guess you could
say physics problem of trying to understand how the twist and turn your body
and make these moves. So, you learn a lot of lessons very quickly about how to
stand on your toe on your toes how to balance your body, because if you're
pulling in one direction, are you going to swing off the wall?</p>
<p>So how to stabilize your body and make these nice clean movements as you're
climbing and to avoid injury as well. And yeah, so it's like I said, we call
them problems and it's a lot of fun. You sit there and you really try to
visualize your body going up these sequence of movements. It's a lot of fun.
Yeah. </p>
<p><strong>John:</strong> So there's like planning and stuff that you have to do ahead of time
as well. Do you study these things and plan your route?</p>
<p><strong>Austin:</strong> Yes. Yeah. So once you start getting into the area, the
difficulties that are challenging for yourself and there's grading systems for
this. And so everybody has knows where they're at that climbs you, we call
this the beta which is the sequence of moves that you have to make, and not
everyone will have the same beta for the same problem.</p>
<p>And a taller person might climate very differently than I will. And so you can
look for inspiration from others, but your own style and your own strengths
really change how you climb. And yeah, so you'll plan it out. You'll work on
it. Step-by-step so you don't necessarily, it's not like you just jump on and
say, I'm going to complete this, you're you'll say, okay, I'm going to work on
the bottom region. I'm going to figure out how to just do the first two or
three moves in the sequence, and then maybe you'll work on the next two or
three and then the next two or three, and then you say, okay, now I have to
link them together. And that's a whole nother step of linking those sequences
of moves together.</p>
<p>And it changes once you do that. And so you might have to go back and start
should my left hand be there or should my right hand be there. And in what
order </p>
<p><strong>John:</strong> so do you find that you have like when you're at the limits of your
ability. At that time.</p>
<p>And I guess you fall and stuff. Like how do you overcome the thing there's
this problem you're trying to solve, but you can't quite do it. Like how do
you think about different alternatives or options and things for solving? </p>
<p><strong>Austin:</strong> Yeah. So there's a few strategies.</p>
<p>The most naive, maybe not the best one is you just need some caffeine. And
taking a break. So just taking a break from climbing for a couple of days,
maybe even a week, and just getting away from the problem, you might think
about it a little bit, like when I'm taking a shower or something and you go,
you come back to it for.</p>
<p>You climb so differently in that problem, or, that one move, cause there's
usually a crux, the hardest part of the problem that was so challenging for
you, you'll come back a week later and you're just like, you didn't even have
to think about it. You just, you move past it. And sometimes it's just it just
hits you.</p>
<p>And I don't know why but you'll get hung up on those moves. And then a week
later they're not even an a problem. And then the other way is just to watch
other people climate. So try to understand how they do it. And it's the
funniest thing. Like when I go to a climbing gym, I always watch the little
kids because the kids climbing are often way better climbers than I am.</p>
<p>Even they make it look so effortless. They're like strength to weight ratio is
amazing and I will just go mimic them. So sometimes you're overthinking the
problem. And </p>
<p><strong>John:</strong> So it's interesting, right? Bringing it back to kind of computer
science things, is that oftentimes you have those shower moments, you're
sitting there, you're away from the problem. And all of a sudden the solution
is just appears to you. Because you're, you've been processing it in the
background, but I think that the difference here is this physicality thing,
right? So maybe, maybe there's a, something that you're not flexible enough.</p>
<p>You're not like there's some, there's something that's keeping you from
accomplishing the goal. </p>
<p><strong>Austin:</strong> And so that's one of the things that I enjoy about the climbing is
that If I'm not getting better, technically I can get better through cardio or
flexibility or different strength exercises.</p>
<p>And so even when I feel like I'm plateauing, there's other areas that I can
still improve it feels like I have more chances to get better at it. Sometimes
with coding, it's like, I don't know the alternative to get around this
problem, like how to get better. Cause it's, I just need to get better at
programming.</p>
<p>Right. But maybe I need to treat it the same way and work on, those tangental
aspects that, that have some overlap or perhaps </p>
<p><strong>John:</strong> this same kind of verbalization thing that you, that we were just
talking about earlier. Is that like, when you're observing someone in a gym,
I'm guessing they're not talking to themselves, well, I'm going to go do this
thing and I'm going to grab this thing over here and go swing around and do
this other thing.</p>
<p>You just observe it. Yeah, it would also be interesting, if you could get
inside their head or maybe someone that's, I guess there must be people that
live stream or record, or do YouTube videos of all these things where they
talk it through. But those kinds of things like around here, I've been I built
myself over the holidays and F1 driving simulator and I've been trying to get
faster and what's challenging is when you're watching good streamers do this
stuff, it's really not obvious what they're doing.</p>
<p>And they're not really talking you through the thought process. So again, just
getting that extra little bit of insight I think you can do a using all of
them. It looks like they're starting to brake here, but you have to almost go
frame by frame through the video to see what they're doing.</p>
<p>That's different than what you're doing. </p>
<p><strong>Austin:</strong> Yeah, in research, we do a think aloud or a talk about study,
where we ask people to verbalize what they're thinking as they're doing like a
programming problem. Similar to a programming interview, but what they are
saying doesn't always match. So you also have to be careful.</p>
<p>So what people will verbalize them, what they think is important might be
different. They don't do it intentionally, it's the subconscious thing. Do you </p>
<p><strong>John:</strong> have a good example of some, like a case where you ran into that,
that you could share? </p>
<p><strong>Austin:</strong> Well, I'll say that when people really are struggling when their
cognitive load is high, the last thing that they want to care about usually is
trying to communicate with you.</p>
<p>Or to articulate their weight words just right. And you can practice this. So
do like a math problem in your head and try to talk out loud. And I mean, like
a really hard problem I don't know, start doing some three or four digit
addition and keep going. So add three numbers to three numbers and then three
numbers and three numbers, and keep that in your head.</p>
<p>While also trying to verbalize your strategy. You'll probably be very good at
verbalizing the numbers, but you're not going to be able to tell me your
strategy for, okay. I'm trying to think. Remember it in blocks of two. I don't
want individual digits in my head. I want to do start grouping them in twos or
threes.</p>
<p>I don't think you'll be able to tell me that. So it, there's also some issues
and this like psychologists and sociologists will use this method in lab
studies, but it will change people's behavior when you ask them to verbalize
this information, because now they're doing more regulation of their thought
process. So it can still be useful, but also you have to remember that you're
changing their behavior by asking them to do it's like a Heisenberg </p>
<p><strong>John:</strong> problem, right?</p>
<p>It's the, there, because they're, you're now overloading their cognitive
abilities by asking them to do this other high level thing on top of this high
level thing that that they might do something completely differently. Had they
then had they not been verbalizing at the same time.</p>
<p>Very interesting. Yeah. </p>
<p><strong>Austin:</strong> That's a good thing. I had an engineer once get really mad at me
because I kept asking him, please continue thinking out loud. I had to remind
him every couple minutes of going after going silent. And he got visibly angry
during the loud. Yeah. Yeah. Yeah. </p>
<p><strong>John:</strong> Wow. Very interesting.</p>
<p>So we're approaching the end of our time here. Let's let's wrap things up,
like with what is what's something recently that that you have purchased that
has given you a disproportionate amount of joy? Doesn't have to be something
you bought just like anything, right?</p>
<p>Like something you've got some object or thing that has given you more choice
than you would've expected it to have given you</p>
<p><strong>Austin:</strong> So now that I'm an employee at Microsoft, I get the perks pricks
plus benefit. And I saw on Twitter, someone say that you can get Lego
reimbursed, like Lego, the kids toy of building models. And so I have actually
been buying multiple times. I've been buying and that they now let go now
makes these adult models where they're more complicated and they're nostalgic.</p>
<p>And so I, for example, I just built the original Nintendo entertaining. System
the NDS from the eighties in Lego form. And it even came with a little TV. It
came with the super Mario cartridge. And it works like you can put the
cartridges in it. The TV actually has a carousel built into it, so you can
crank it and you can watch Mario jump and in the level moves.</p>
<p>And </p>
<p><strong>John:</strong> That's what I bought her or was that, is that like Lego or something
that's </p>
<p><strong>Austin:</strong> making it is a mechanical Lego on, so it's like a conveyor belt.
And as you are cranking it, it turns the conveyor belt. And so it's a
continuous, Mario level made up of all these little, very small tiles, and so
the TV is the casing around the conveyor by so that you can only see the view
into a small region. And it's like the, it looks like the first Mario level.
So I did that a week ago and that was some great, just thinking time where I
can mindlessly follow the instructions, building the Lego, find that enjoyable
and either just sit there and absolute silence and like meditate on my day or
what I want to work on next, or listen to a podcast.</p>
<p>And so I think that's my new, like favorite after work, like cool-down
activity is doing Lego as an adult. </p>
<p><strong>John:</strong> That's awesome. Yeah. One of these times when you get out here,
there's there's brick con in in Seattle. That happens every year. I think it's
in the fall. And so you can just walk in and there's you see all the Lego
nerds or there's lots of ligaments and the things that they've built and
there's some absolutely amazing and fantastic things. Remind me to share with
you</p>
<p>some of my Brick Con pictures I've taken over the years. Cause I think there's
this. Yeah. I think he really enjoyed that as well. </p>
<p><strong>Austin:</strong> Does that mean you build Lego? </p>
<p><strong>John:</strong> Certainly. Yes. Like we've spent a lot of time as a kid, I spent a
lot of time building Lego and I've got kids here.</p>
<p>They've got Lego sets. We've certainly spent a lot of time going to build
building Lego here. Something I don't do as often as I would like to I think
that in some ways as a kid I remember that it was a lot of fun. Coming home
from school, right? That was the thing, at lunchtime, get to go home.</p>
<p>I can feel my Legos. And and that was just, it was fun. Like it was like, we
didn't have these specialized sets and stuff back then. It was just like the
generic Lego things. And you just have to imagine how to build different
things out of what you had available. And that was just, that was a lot of
fun.</p>
<p>Just the kind of creativity from just going to building things and imagining
what you could build out of these things. Yeah. Yeah. Yeah. So we were, the
kind of like the sound of just rummaging through your box of Legos. That's a
very, like a visceral sensation from childhood.</p>
<p><strong>Austin:</strong> Oh yeah. Or one of your parents stepping on one of them.</p>
<p><strong>John:</strong> Very cool. Well, thank you so much. This was a ton of fun. I
certainly had a lot of fun talking about this and hope you you enjoyed this
experience as </p>
<p><strong>Austin:</strong> well. I did. Thank you so much for all the good questions.</p>
<p><strong>John:</strong> I hope you enjoyed this inaugural episode of our podcast. Stay tuned
for future episodes, where we're going to be interviewing other members of our
team.</p>
2022-02-172022-02-17T00:00:00+00:002022-02-17T00:00:00+00:00https://www.iunknown.com/2022-02-17/<p>I'm traveling and just got some time to myself to write down a bunch of stuff
that I've learned listening to podcasts during over 1000 miles driving in a
car.</p>
<h2 id="types-of-procrastination">Types of Procrastination<a class="zola-anchor" href="#types-of-procrastination" aria-label="Anchor link for: types-of-procrastination">🔗</a></h2>
<p>From the wisdom of Tim Urban:</p>
<ul>
<li>Type 1 procrastination is what you do when there is a deadline present. The
<a href="https://waitbutwhy.com/2013/10/why-procrastinators-procrastinate.html">panic
monster</a>
will eventually awaken as when the deadline is imminent which will chase away
the instant gratification monkey.</li>
</ul>
<p><img src="https://www.iunknown.com/2022-02-17/2022-02-17-15-10-38.png" alt="" /></p>
<ul>
<li>Type 2 procrastination is what you do when there <em>isn't a deadline present</em>.
This type of procrastination is really, really bad because the panic monster
will never awaken to snap you back to your senses. There really isn't a good
solution to this kind of procrastination.</li>
</ul>
<h2 id="types-of-fun">Types of Fun<a class="zola-anchor" href="#types-of-fun" aria-label="Anchor link for: types-of-fun">🔗</a></h2>
<p>From the wisdom of Kate Courtney:</p>
<ul>
<li>Type 1 fun is fun while you are doing it.</li>
<li>Type 2 fun is fun when you are finished doing it.</li>
<li>Type 3 fun is never fun</li>
</ul>
<blockquote class="instagram-media" data-instgrm-captioned
data-instgrm-permalink="https://www.instagram.com/p/CVJOdJABfWx/?utm_source=ig_embed&utm_campaign=loading"
data-instgrm-version="14"
style=" background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:540px; min-width:326px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);">
<div style="padding:16px;">
<a href="https://www.instagram.com/p/CVJOdJABfWx/?utm_source=ig_embed&utm_campaign=loading"
style=" background:#FFFFFF; line-height:0; padding:0 0; text-align:center; text-decoration:none; width:100%;"
target="_blank">
<div style=" display: flex; flex-direction: row; align-items: center;">
<div
style="background-color: #F4F4F4; border-radius: 50%; flex-grow: 0; height: 40px; margin-right: 14px; width: 40px;">
</div>
<div style="display: flex; flex-direction: column; flex-grow: 1; justify-content: center;">
<div
style=" background-color: #F4F4F4; border-radius: 4px; flex-grow: 0; height: 14px; margin-bottom: 6px; width: 100px;">
</div>
<div
style=" background-color: #F4F4F4; border-radius: 4px; flex-grow: 0; height: 14px; width: 60px;">
</div>
</div>
</div>
<div style="padding: 19% 0;"></div>
<div style="display:block; height:50px; margin:0 auto 12px; width:50px;">
<svg width="50px" height="50px" viewBox="0 0 60 60" version="1.1" xmlns="https://www.w3.org/2000/svg"
xmlns:xlink="https://www.w3.org/1999/xlink">
<g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g transform="translate(-511.000000, -20.000000)" fill="#000000">
<g>
<path
d="M556.869,30.41 C554.814,30.41 553.148,32.076 553.148,34.131 C553.148,36.186 554.814,37.852 556.869,37.852 C558.924,37.852 560.59,36.186 560.59,34.131 C560.59,32.076 558.924,30.41 556.869,30.41 M541,60.657 C535.114,60.657 530.342,55.887 530.342,50 C530.342,44.114 535.114,39.342 541,39.342 C546.887,39.342 551.658,44.114 551.658,50 C551.658,55.887 546.887,60.657 541,60.657 M541,33.886 C532.1,33.886 524.886,41.1 524.886,50 C524.886,58.899 532.1,66.113 541,66.113 C549.9,66.113 557.115,58.899 557.115,50 C557.115,41.1 549.9,33.886 541,33.886 M565.378,62.101 C565.244,65.022 564.756,66.606 564.346,67.663 C563.803,69.06 563.154,70.057 562.106,71.106 C561.058,72.155 560.06,72.803 558.662,73.347 C557.607,73.757 556.021,74.244 553.102,74.378 C549.944,74.521 548.997,74.552 541,74.552 C533.003,74.552 532.056,74.521 528.898,74.378 C525.979,74.244 524.393,73.757 523.338,73.347 C521.94,72.803 520.942,72.155 519.894,71.106 C518.846,70.057 518.197,69.06 517.654,67.663 C517.244,66.606 516.755,65.022 516.623,62.101 C516.479,58.943 516.448,57.996 516.448,50 C516.448,42.003 516.479,41.056 516.623,37.899 C516.755,34.978 517.244,33.391 517.654,32.338 C518.197,30.938 518.846,29.942 519.894,28.894 C520.942,27.846 521.94,27.196 523.338,26.654 C524.393,26.244 525.979,25.756 528.898,25.623 C532.057,25.479 533.004,25.448 541,25.448 C548.997,25.448 549.943,25.479 553.102,25.623 C556.021,25.756 557.607,26.244 558.662,26.654 C560.06,27.196 561.058,27.846 562.106,28.894 C563.154,29.942 563.803,30.938 564.346,32.338 C564.756,33.391 565.244,34.978 565.378,37.899 C565.522,41.056 565.552,42.003 565.552,50 C565.552,57.996 565.522,58.943 565.378,62.101 M570.82,37.631 C570.674,34.438 570.167,32.258 569.425,30.349 C568.659,28.377 567.633,26.702 565.965,25.035 C564.297,23.368 562.623,22.342 560.652,21.575 C558.743,20.834 556.562,20.326 553.369,20.18 C550.169,20.033 549.148,20 541,20 C532.853,20 531.831,20.033 528.631,20.18 C525.438,20.326 523.257,20.834 521.349,21.575 C519.376,22.342 517.703,23.368 516.035,25.035 C514.368,26.702 513.342,28.377 512.574,30.349 C511.834,32.258 511.326,34.438 511.181,37.631 C511.035,40.831 511,41.851 511,50 C511,58.147 511.035,59.17 511.181,62.369 C511.326,65.562 511.834,67.743 512.574,69.651 C513.342,71.625 514.368,73.296 516.035,74.965 C517.703,76.634 519.376,77.658 521.349,78.425 C523.257,79.167 525.438,79.673 528.631,79.82 C531.831,79.965 532.853,80.001 541,80.001 C549.148,80.001 550.169,79.965 553.369,79.82 C556.562,79.673 558.743,79.167 560.652,78.425 C562.623,77.658 564.297,76.634 565.965,74.965 C567.633,73.296 568.659,71.625 569.425,69.651 C570.167,67.743 570.674,65.562 570.82,62.369 C570.966,59.17 571,58.147 571,50 C571,41.851 570.966,40.831 570.82,37.631">
</path>
</g>
</g>
</g>
</svg>
</div>
<div style="padding-top: 8px;">
<div
style=" color:#3897f0; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:550; line-height:18px;">
View this post on Instagram</div>
</div>
<div style="padding: 12.5% 0;"></div>
<div style="display: flex; flex-direction: row; margin-bottom: 14px; align-items: center;">
<div>
<div
style="background-color: #F4F4F4; border-radius: 50%; height: 12.5px; width: 12.5px; transform: translateX(0px) translateY(7px);">
</div>
<div
style="background-color: #F4F4F4; height: 12.5px; transform: rotate(-45deg) translateX(3px) translateY(1px); width: 12.5px; flex-grow: 0; margin-right: 14px; margin-left: 2px;">
</div>
<div
style="background-color: #F4F4F4; border-radius: 50%; height: 12.5px; width: 12.5px; transform: translateX(9px) translateY(-18px);">
</div>
</div>
<div style="margin-left: 8px;">
<div
style=" background-color: #F4F4F4; border-radius: 50%; flex-grow: 0; height: 20px; width: 20px;">
</div>
<div
style=" width: 0; height: 0; border-top: 2px solid transparent; border-left: 6px solid #f4f4f4; border-bottom: 2px solid transparent; transform: translateX(16px) translateY(-4px) rotate(30deg)">
</div>
</div>
<div style="margin-left: auto;">
<div
style=" width: 0px; border-top: 8px solid #F4F4F4; border-right: 8px solid transparent; transform: translateY(16px);">
</div>
<div
style=" background-color: #F4F4F4; flex-grow: 0; height: 12px; width: 16px; transform: translateY(-4px);">
</div>
<div
style=" width: 0; height: 0; border-top: 8px solid #F4F4F4; border-left: 8px solid transparent; transform: translateY(-4px) translateX(8px);">
</div>
</div>
</div>
<div
style="display: flex; flex-direction: column; flex-grow: 1; justify-content: center; margin-bottom: 24px;">
<div
style=" background-color: #F4F4F4; border-radius: 4px; flex-grow: 0; height: 14px; margin-bottom: 6px; width: 224px;">
</div>
<div style=" background-color: #F4F4F4; border-radius: 4px; flex-grow: 0; height: 14px; width: 144px;">
</div>
</div>
</a>
<p
style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;">
<a href="https://www.instagram.com/p/CVJOdJABfWx/?utm_source=ig_embed&utm_campaign=loading"
style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none;"
target="_blank">A post</a></p>
</div>
</blockquote>
<script async src="//www.instagram.com/embed.js"></script>
<h2 id="tim-urban-and-long-form-writing">Tim Urban and long form writing<a class="zola-anchor" href="#tim-urban-and-long-form-writing" aria-label="Anchor link for: tim-urban-and-long-form-writing">🔗</a></h2>
<p>The <a href="https://tim.blog/2018/02/03/the-tim-ferriss-show-transcripts-tim-urban/">Tim Ferris interview with Tim
Urban</a>
reveals a bit about how Tim (Urban) learns things. His long-form posts are him
teaching himself what he's learned about a topic in hopes that it will help
past Tim learn that topic more effectively. He really is just writing for
himself:</p>
<blockquote>
<p>Yeah. So, it’s pretty simple for me. First of all, I do this kind of weird
thing where I assume that my audience is I picture like a stadium full of
me. So, it’s narcistic fantasy. No, but it’s just – I’m just writing for –
I’m writing the exact post that I would be thrilled to get.</p>
</blockquote>
<p>Some tidbits:</p>
<ul>
<li>
<p>On a scale of 1 to 10 where 10 is a world class expert, he starts at a 2 and
continues learning until he gets to about a 5 or a 6. Then he writes the post.
This sometimes takes him 3 hours, sometimes 3 days, sometimes 3 months(!)</p>
</li>
<li>
<p>He starts with general sources of information like Wikipedia on a topic. He
then starts writing down questions (which can be expressed as concepts) and
opens a new browser window for each question. Then he CTRL+clicks the Google
results for each question. Then he sits down to read. He doesn't try to filter
at this point - he just reads and starts forming an impression for each
question.</p>
</li>
</ul>
<h2 id="elon-musk-is-a-nerdy-david-goggins">Elon Musk is a Nerdy David Goggins<a class="zola-anchor" href="#elon-musk-is-a-nerdy-david-goggins" aria-label="Anchor link for: elon-musk-is-a-nerdy-david-goggins">🔗</a></h2>
<p>After listening to back-to-back interviews and books during my long drives, it
occurred to me that they are both intense, driven men that have overcome many
obstacles during their lives. Different things for sure, but things that many
would think are impossible. Some of the things that they did look stupid to
outsiders, but I'm convinced that they share the same mindset when it comes
to overcoming obstacles in their lives. </p>
<p>Here's an interesting example:</p>
<ul>
<li>David Goggins ran a 24 hour race and completing 101 miles in ~18 hours with
zero specific race preparation </li>
<li>Elon Musk started a rocket company and burned through nearly his entire
PayPal fortune in doing so. A friend even sent him a video compilation of
failed rocket launches to try and convince him to not start SpaceX in the
first place.</li>
</ul>
<p>While the <em>impact</em> of those things are quite different, I think the <em>meta
impact</em> of those things are quite similar. They both could inspire others to
realize that things are not as impossible as what others think - you are
capable of more than what you are capable of. They will also inspire different
kinds of people as well. I don't think anyone will use SpaceX as motivation to
become a Navy SEAL any more than I think anyone will use Goggins'
accomplishments to create the next SpaceX.</p>
<p>I highly recommend listening to the <a href="https://amzn.to/3rW6aoV">Audible version of Can't Hurt
Me</a>. In it, you'll hear the book as narrated by his
writer, Adam Skolnick. But at key moments in the story, they will cut away to
a "podcast format" where David gives additional commentary and context to the
story at that point in time. It's a really effective format that I wish others
would copy in their audiobooks.</p>
2022-01-302022-01-30T00:00:00+00:002022-01-30T00:00:00+00:00https://www.iunknown.com/2022-01-30/<h2 id="joe-rogan-robert-malone-and-the-history-of-mrna-vaccines">Joe Rogan, Robert Malone and the history of mRNA vaccines<a class="zola-anchor" href="#joe-rogan-robert-malone-and-the-history-of-mrna-vaccines" aria-label="Anchor link for: joe-rogan-robert-malone-and-the-history-of-mrna-vaccines">🔗</a></h2>
<p>The current controversy-de-jour is Joe Rogan's interviews with vaccine
skeptics. Today, Joe posted an Instagram post where he highlights his
controversial interviews with <a href="https://scholar.google.com/citations?hl=en&user=LzqEaOkAAAAJ">Peter
McCullough</a> and
<a href="https://scholar.google.com/citations?hl=en&user=Jf1bApYAAAAJ">Robert Malone</a>. </p>
<blockquote class="instagram-media" data-instgrm-captioned
data-instgrm-permalink="https://www.instagram.com/p/CZYQ_nDJi6G/?utm_source=ig_embed&utm_campaign=loading"
data-instgrm-version="14"
style=" background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:540px; min-width:326px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);">
<div style="padding:16px;">
<a href="https://www.instagram.com/p/CZYQ_nDJi6G/?utm_source=ig_embed&utm_campaign=loading"
style=" background:#FFFFFF; line-height:0; padding:0 0; text-align:center; text-decoration:none; width:100%;"
target="_blank">
<div style=" display: flex; flex-direction: row; align-items: center;">
<div
style="background-color: #F4F4F4; border-radius: 50%; flex-grow: 0; height: 40px; margin-right: 14px; width: 40px;">
</div>
<div style="display: flex; flex-direction: column; flex-grow: 1; justify-content: center;">
<div
style=" background-color: #F4F4F4; border-radius: 4px; flex-grow: 0; height: 14px; margin-bottom: 6px; width: 100px;">
</div>
<div
style=" background-color: #F4F4F4; border-radius: 4px; flex-grow: 0; height: 14px; width: 60px;">
</div>
</div>
</div>
<div style="padding: 19% 0;"></div>
<div style="display:block; height:50px; margin:0 auto 12px; width:50px;">
<svg width="50px" height="50px" viewBox="0 0 60 60" version="1.1" xmlns="https://www.w3.org/2000/svg"
xmlns:xlink="https://www.w3.org/1999/xlink">
<g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g transform="translate(-511.000000, -20.000000)" fill="#000000">
<g>
<path
d="M556.869,30.41 C554.814,30.41 553.148,32.076 553.148,34.131 C553.148,36.186 554.814,37.852 556.869,37.852 C558.924,37.852 560.59,36.186 560.59,34.131 C560.59,32.076 558.924,30.41 556.869,30.41 M541,60.657 C535.114,60.657 530.342,55.887 530.342,50 C530.342,44.114 535.114,39.342 541,39.342 C546.887,39.342 551.658,44.114 551.658,50 C551.658,55.887 546.887,60.657 541,60.657 M541,33.886 C532.1,33.886 524.886,41.1 524.886,50 C524.886,58.899 532.1,66.113 541,66.113 C549.9,66.113 557.115,58.899 557.115,50 C557.115,41.1 549.9,33.886 541,33.886 M565.378,62.101 C565.244,65.022 564.756,66.606 564.346,67.663 C563.803,69.06 563.154,70.057 562.106,71.106 C561.058,72.155 560.06,72.803 558.662,73.347 C557.607,73.757 556.021,74.244 553.102,74.378 C549.944,74.521 548.997,74.552 541,74.552 C533.003,74.552 532.056,74.521 528.898,74.378 C525.979,74.244 524.393,73.757 523.338,73.347 C521.94,72.803 520.942,72.155 519.894,71.106 C518.846,70.057 518.197,69.06 517.654,67.663 C517.244,66.606 516.755,65.022 516.623,62.101 C516.479,58.943 516.448,57.996 516.448,50 C516.448,42.003 516.479,41.056 516.623,37.899 C516.755,34.978 517.244,33.391 517.654,32.338 C518.197,30.938 518.846,29.942 519.894,28.894 C520.942,27.846 521.94,27.196 523.338,26.654 C524.393,26.244 525.979,25.756 528.898,25.623 C532.057,25.479 533.004,25.448 541,25.448 C548.997,25.448 549.943,25.479 553.102,25.623 C556.021,25.756 557.607,26.244 558.662,26.654 C560.06,27.196 561.058,27.846 562.106,28.894 C563.154,29.942 563.803,30.938 564.346,32.338 C564.756,33.391 565.244,34.978 565.378,37.899 C565.522,41.056 565.552,42.003 565.552,50 C565.552,57.996 565.522,58.943 565.378,62.101 M570.82,37.631 C570.674,34.438 570.167,32.258 569.425,30.349 C568.659,28.377 567.633,26.702 565.965,25.035 C564.297,23.368 562.623,22.342 560.652,21.575 C558.743,20.834 556.562,20.326 553.369,20.18 C550.169,20.033 549.148,20 541,20 C532.853,20 531.831,20.033 528.631,20.18 C525.438,20.326 523.257,20.834 521.349,21.575 C519.376,22.342 517.703,23.368 516.035,25.035 C514.368,26.702 513.342,28.377 512.574,30.349 C511.834,32.258 511.326,34.438 511.181,37.631 C511.035,40.831 511,41.851 511,50 C511,58.147 511.035,59.17 511.181,62.369 C511.326,65.562 511.834,67.743 512.574,69.651 C513.342,71.625 514.368,73.296 516.035,74.965 C517.703,76.634 519.376,77.658 521.349,78.425 C523.257,79.167 525.438,79.673 528.631,79.82 C531.831,79.965 532.853,80.001 541,80.001 C549.148,80.001 550.169,79.965 553.369,79.82 C556.562,79.673 558.743,79.167 560.652,78.425 C562.623,77.658 564.297,76.634 565.965,74.965 C567.633,73.296 568.659,71.625 569.425,69.651 C570.167,67.743 570.674,65.562 570.82,62.369 C570.966,59.17 571,58.147 571,50 C571,41.851 570.966,40.831 570.82,37.631">
</path>
</g>
</g>
</g>
</svg>
</div>
<div style="padding-top: 8px;">
<div
style=" color:#3897f0; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:550; line-height:18px;">
View this post on Instagram</div>
</div>
<div style="padding: 12.5% 0;"></div>
<div style="display: flex; flex-direction: row; margin-bottom: 14px; align-items: center;">
<div>
<div
style="background-color: #F4F4F4; border-radius: 50%; height: 12.5px; width: 12.5px; transform: translateX(0px) translateY(7px);">
</div>
<div
style="background-color: #F4F4F4; height: 12.5px; transform: rotate(-45deg) translateX(3px) translateY(1px); width: 12.5px; flex-grow: 0; margin-right: 14px; margin-left: 2px;">
</div>
<div
style="background-color: #F4F4F4; border-radius: 50%; height: 12.5px; width: 12.5px; transform: translateX(9px) translateY(-18px);">
</div>
</div>
<div style="margin-left: 8px;">
<div
style=" background-color: #F4F4F4; border-radius: 50%; flex-grow: 0; height: 20px; width: 20px;">
</div>
<div
style=" width: 0; height: 0; border-top: 2px solid transparent; border-left: 6px solid #f4f4f4; border-bottom: 2px solid transparent; transform: translateX(16px) translateY(-4px) rotate(30deg)">
</div>
</div>
<div style="margin-left: auto;">
<div
style=" width: 0px; border-top: 8px solid #F4F4F4; border-right: 8px solid transparent; transform: translateY(16px);">
</div>
<div
style=" background-color: #F4F4F4; flex-grow: 0; height: 12px; width: 16px; transform: translateY(-4px);">
</div>
<div
style=" width: 0; height: 0; border-top: 8px solid #F4F4F4; border-left: 8px solid transparent; transform: translateY(-4px) translateX(8px);">
</div>
</div>
</div>
<div
style="display: flex; flex-direction: column; flex-grow: 1; justify-content: center; margin-bottom: 24px;">
<div
style=" background-color: #F4F4F4; border-radius: 4px; flex-grow: 0; height: 14px; margin-bottom: 6px; width: 224px;">
</div>
<div style=" background-color: #F4F4F4; border-radius: 4px; flex-grow: 0; height: 14px; width: 144px;">
</div>
</div>
</a>
<p
style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;">
<a href="https://www.instagram.com/p/CZYQ_nDJi6G/?utm_source=ig_embed&utm_campaign=loading"
style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none;"
target="_blank">A post</a></p>
</div>
</blockquote>
<script async src="//www.instagram.com/embed.js"></script>
<p>It's worth listening to.</p>
<p>At first I had no idea who Robert Malone was, so tonight I went looking.
It's highly likely that mRNA vaccines will recognized in this year's Nobel
Prize awards. As background in the runup to the awards, this <a href="https://www.nature.com/articles/d41586-021-02483-w">article in
Nature</a> does a great job
of outlining the history of the development of mRNA vaccines. In this article
I learned more about the development of mRNA vaccines and Robert Malone's
role in it.</p>
<p>Apparently he was one of the first people to <a href="https://www.pnas.org/content/pnas/86/16/6077.full.pdf">observe protein
transcription</a>
following <em>in vitro</em> insertion of mRNA encapsulated inside of liposomes.
Here's an excerpt of his graduate student lab notebook from the day of that
observation: </p>
<p><img src="2022-01-30/2022-01-30-22-25-42.png" alt="" /></p>
<p>Many other scientists are highlighted, including <a href="https://scholar.google.com/citations?user=PS_CX0AAAAAJ&hl=en">Katalin
Karikó</a>, who
pioneered <a href="https://www.sciencedirect.com/science/article/pii/S1074761305002116">modifying mRNA using
pseudouridine</a>
to suppress immunological response towards it. <a href="https://scholar.google.com/citations?user=ANV63uwAAAAJ&hl=en">Pieter
Cullis</a> who made
key contributions towards developing <a href="https://www.nature.com/articles/s41578-021-00358-0">lipid
nanoparticles</a> that are an
essential piece of technology that enables safe delivery of mRNA into human
cells. </p>
<p>This diagram from the Nature review paper on lipid nanoparticles shows the
parallel development of mRNA and lipid nanoparticle technology that resulted
in the creation of the vaccines that we enjoy today, and the times when
pseudouridine and lipid nanoparticles (and many other discoveries) entered the
picture:</p>
<p><img src="2022-01-30/2022-01-30-22-46-47.png" alt="" /></p>
<p>So what does all of this have to do with Joe Rogan again? He was accused of
bringing contervailing opinions onto his show and giving them a platform.
However, it's worth remembering that scientific progress does not progress in
the idealized straight line seen in the diagram above. There are many twists
and turns, and occasional reversals of course. Sometimes what was accepted as
dogma at one point in the past winds up being known to be false today.</p>
<p>There's a story that <a href="https://www.researchgate.net/profile/Ingmar-Hoerr">Ingmar
Hoerr</a> tells about the time
when he presented his <a href="https://onlinelibrary.wiley.com/doi/abs/10.1002/1521-4141(200001)30:1%3C1::AID-IMMU1%3E3.0.CO;2-%23">early mouse data on direct injection of
mRNA</a>:</p>
<blockquote>
<p>there was a Nobel prizewinner standing up in the first row saying, ‘This is
completely shit what you’re telling us here — completely shit’.</p>
</blockquote>
<p>In fact, this entire field was woefully underfunded precisely because it was
outside mainstream science in the 2000s. <em>What if funding for this field never
happened?</em> </p>
<p>The solution to people saying things that are contrary to the mainstream
belief is not to censor them. Rather, we should combat that by, as <a href="https://stratechery.com/2019/tech-and-liberty/">Ben
Thompson</a> says, using <em>more
free speech</em>. There's a lovely quote from Ben's article that I'm reproducing
below that cites John Stuart Mill's <a href="https://www.gutenberg.org/files/34901/34901-h/34901-h.htm">On
Liberty</a> (from
1859):</p>
<blockquote>
<p>If all mankind minus one, were of one opinion, and only one person were of
the contrary opinion, mankind would be no more justified in silencing that
one person, than he, if he had the power, would be justified in silencing
mankind. Were an opinion a personal possession of no value except to the
owner; if to be obstructed in the enjoyment of it were simply a private
injury, it would make some difference whether the injury was inflicted only
on a few persons or on many. But the peculiar evil of silencing the
expression of an opinion is, that it is robbing the human race; posterity as
well as the existing generation; those who dissent from the opinion, still
more than those who hold it. If the opinion is right, they are deprived of
the opportunity of exchanging error for truth: if wrong, they lose, what is
almost as great a benefit, the clearer perception and livelier impression of
truth, produced by its collision with error.</p>
</blockquote>
<p>Joe admits as much in his Instagram post. He says he will try to ensure that
other opinions are presented on his show in close proximity to the
"controversial opinions". And even if he doesn't, Joe Rogan is hardly the only
platform on the Internet. </p>
2022-01-172022-01-17T00:00:00+00:002022-01-17T00:00:00+00:00https://www.iunknown.com/2022-01-17/<h2 id="the-charisma-machine">The Charisma Machine<a class="zola-anchor" href="#the-charisma-machine" aria-label="Anchor link for: the-charisma-machine">🔗</a></h2>
<p><img src="https://www.iunknown.com/2022-01-17/2022-01-17-22-17-40.png" alt="" /></p>
<p><a href="https://morganya.org/charisma.html">The Charisma Machine by Morgan Ames</a>
chronicles the failure of the One Laptop Per Child project. A telling quote
from the book's website:</p>
<blockquote>
<p>Drawing on a seven-month study of a model OLPC project in Paraguay, this
book reveals that the laptops were not only frustrating to use, easy to
break, and hard to repair, they were designed for “technically precocious
boys”—idealized younger versions of the developers themselves—rather than
the diverse range of children who might actually use them. </p>
</blockquote>
<p>It's pretty clear that the leaders of the project fell in love with an idea.
One where the solution they were creating matched the problems that the
leaders <em>personally</em> had - a desire for a machine like OLPC when they were
children. They assumed, incorrectly, that all children in developing countries
had the same problem that their solution was designed for. Ames describes
this as <em>nostalgic design</em>.</p>
<p>So instead of validating the problem, they went ahead and burned hundreds of
millions of dollars in pursuit of a solution to a problem that apparently did
not exist. Technology is not the solution to all of our problems, especially
in education. But perhaps more interesting for those of us who work in product
development is understanding <em>why</em> Negroponte was wrong? What could he have
done differently in retrospect? Could the many failures encountered in the
field have been discovered sooner? This quote captures Negroponte's hubris:</p>
<blockquote>
<p>The days of pilot projects are over. When people say, ‘Well, we’d like to do
three or four thousand in our country to see how it works.’ Screw you. Go to
the back of the line and someone else will do it, and then when you figure
out that this works, you can join as well.</p>
</blockquote>
<p>Developing and deploying the solution as quickly as possible was clearly the
end-goal here, not understanding the needs of the customer:</p>
<blockquote>
<p>We’ll take tablets and drop them out of helicopters into villages that have
no electricity and school, then go back a year later and see if the kids can
read.</p>
</blockquote>
<p>Could they have shipped a better product that fit the needs of their customers
if they had only spent some time trying to understand their customers first?
One can only imagine what might have been had they pursued a different path,
guided by the real needs of their customers. A fantastic case study of what
not to do when building a product.</p>
2022-01-132022-01-13T00:00:00+00:002022-01-13T00:00:00+00:00https://www.iunknown.com/2022-01-13/<h2 id="multi-agent-hide-and-seek">Multi-Agent Hide and Seek<a class="zola-anchor" href="#multi-agent-hide-and-seek" aria-label="Anchor link for: multi-agent-hide-and-seek">🔗</a></h2>
<p>This is a great <em>visual</em> demonstration of the progress of learning in self-
supervised learning via reinforcement learning. Adding human-like behaviors
to the simulation make it far more engaging to me!</p>
<div class="youtube">
<iframe
width=560 height=315
src="https://www.youtube.com/embed/kopoLzvh5jY"
webkitallowfullscreen
mozallowfullscreen
allowfullscreen>
</iframe>
</div>
<p>The accompanying <a href="https://openai.com/blog/emergent-tool-use/">Open AI blog
post</a> does a great job of
annotating the different skills learned along the way. The reward function is
simple: </p>
<blockquote>
<p>Agents are given a team-based reward; hiders are given a reward of +1 if all
hiders are hidden and -1 if any hider is seen by a seeker. Seekers are given
the opposite reward, -1 if all hiders are hidden and +1 otherwise. </p>
</blockquote>
<p>From this simple reward function, many strategies emerge and many surprising
"hacks" where the agents exploit loopholes in the simulation. The section on
Surprising Behaviors shows these clearly.</p>
<p>But given the extremely large number of episodes that lead to the behaviors,
I wonder how they were able to see these behaviors?</p>
<p>UPDATE: I just discovered the <a href="https://www.youtube.com/channel/UCbfYPyITQ-7l4upoX8nvctg">Two Minute
Papers</a> channel on
YouTube and they do a great job of summarizing the paper in this video.
Subscribed.</p>
<div class="youtube">
<iframe
width=560 height=315
src="https://www.youtube.com/embed/Lu56xVlZ40M"
webkitallowfullscreen
mozallowfullscreen
allowfullscreen>
</iframe>
</div>2022-01-112022-01-11T00:00:00+00:002022-01-11T00:00:00+00:00https://www.iunknown.com/2022-01-11/<h2 id="the-ultimate-home-videoconferencing-setup">The Ultimate Home Videoconferencing Setup<a class="zola-anchor" href="#the-ultimate-home-videoconferencing-setup" aria-label="Anchor link for: the-ultimate-home-videoconferencing-setup">🔗</a></h2>
<p>Nearly 2 years ago, COVID forced many of us learn a new skill: <a href="https://stratechery.com/2021/microsoft-and-the-metaverse/">working
online</a>.
During this time I've been in 1000s of online meetings. This post chronicles
my journey to where I am today and what I've learned along the way in my journey to this:</p>
<p><img src="2022-01-11/2022-01-11-08-02-42.png" alt="" /></p>
<p>At first, I started like many other folks by using the built-in camera on my
laptop (a Surface Laptop 3). While that was serviceable, it wasn't
particularly pleasant to use. The ergonomics are <em>terrible</em> unless you use a
laptop stand and an external keyboard and mouse to elevate the display so that
you're looking at it vs. down at it. I highly recommend <a href="https://www.therooststand.com/">the Roost
stand</a> if you're going to go this approach:</p>
<p><img src="2022-01-11/2022-01-11-08-00-09.png" alt="" /></p>
<p>While that solves the problem of bad ergonomics, it doesn't solve the problem
of poor quality video that is endemic to the webcams that are found in all
laptops. Lots of people tried to upgrade to an external webcam at the start of
working online. The most recommended webcam was a <a href="https://amzn.to/3fb0tfV">Logitech
C920x</a> which was nearly impossible to order and
commanded a steep premiums from scalpers who quickly snapped up all available
supply.</p>
<p><img src="2022-01-11/2022-01-11-08-11-22.png" alt="" /></p>
<p>One </p>
<p>I've given <a href="2022-01-11/Video_Conferencing_Home.pptx">this presentation</a> quite a few times to folks around Microsoft and
hey've found it helpful. </p>
2022-01-102022-01-10T00:00:00+00:002022-01-10T00:00:00+00:00https://www.iunknown.com/2022-01-10/<h2 id="the-origins-of-yak-shaving">The origins of yak shaving<a class="zola-anchor" href="#the-origins-of-yak-shaving" aria-label="Anchor link for: the-origins-of-yak-shaving">🔗</a></h2>
<p>OK so I find it amusing that, in the process of hunting down a reference for
the algorithm that Donald Knuth used to reward bugs in TAOCP, I found the
<a href="https://projects.csail.mit.edu/gsb/old-archive/gsb-archive/gsb2000-02-11.html">earliest documented mention of the term yak
shaving by Carlin Vieri</a>:</p>
<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span>From: "Jeremy H. Brown"
</span><span>To: all-ai@ai.mit.edu
</span><span>Subject: GSB: 5:30pm, 7ai playroom
</span><span>Date: Fri, 11 Feb 2000 16:00:56 -0500 (EST)
</span><span>
</span><span>"Yak shaving." Our very own Carlin Vieri invented the term, and yet
</span><span>it has not caught on within the lab. This is a shame, because it
</span><span>describes all too well what I find myself doing all too often.
</span><span>
</span><span>
</span><span>You see, yak shaving is what you are doing when you're doing some
</span><span>stupid, fiddly little task that bears no obvious relationship to what
</span><span>you're supposed to be working on, but yet a chain of twelve causal
</span><span>relations links what you're doing to the original meta-task.
</span><span>
</span><span>
</span><span>Here's an example:
</span><span>
</span><span>
</span><span>"I was working on my thesis and realized I needed a reference. I'd
</span><span>seen a post on comp.arch recently that cited a paper, so I fired up
</span><span>gnus. While I was searching the for the post, I came across another
</span><span>post whose MIME encoding screwed up my ancient version of gnus, so I
</span><span>stopped and downloaded the latest version of gnus.
</span><span>
</span><span>
</span><span>"Unfortunately, the new version of gnus didn't work with emacs 18, so
</span><span>I downloaded and built emacs 20. Of course, then I had to install
</span><span>updated versions of a half-dozen other packages to keep other users
</span><span>from hurting me. When I finally tried to use the new gnus, it kept
</span><span>crapping out on my old configuration. And that's why I'm deep in the
</span><span>gnus info pages and my .emacs file -- and yet it's all part of working
</span><span>on my thesis."
</span><span>
</span><span>
</span><span>And that, my friends, is yak shaving. (Not that this particular
</span><span>example happened to me recently or anything.)
</span><span>
</span><span>
</span><span>Another example of yak shaving might be "I need to ask a
</span><span>question about our group project. <Person>'s hard to track down. But
</span><span>I know <person> will be at GSB tonight, so I'll go there too." You
</span><span>see, in this case GSB isn't socializing or slacking off, it's part of
</span><span>your work -- hanging out there, you'll be connected to your project
</span><span>via the process of yak shaving!
</span><span>
</span><span>
</span><span>Now, having been introduced to the term and the concept of yak
</span><span>shaving, and also having had it pointed out to you that attending GSB
</span><span>is actually an important part of your research, you are morally bound
</span><span>to come to GSB tonight and discuss the finer points of yak shaving,
</span><span>and in particular the subtle distinctions between some forms of "yak
</span><span>shaving" and "flimsy rationalizations".
</span><span>
</span><span>
</span><span>****************** G I R L S C O U T B E N E F I T ******************
</span><span>****************** 5:30pm 7AI Playroom ******************
</span></code></pre>
2022-01-092022-01-09T00:00:00+00:002022-01-09T00:00:00+00:00https://www.iunknown.com/2022-01-09/<h2 id="donald-knuth-as-the-patron-saint-of-yak-shaving">Donald Knuth as the patron saint of yak shaving<a class="zola-anchor" href="#donald-knuth-as-the-patron-saint-of-yak-shaving" aria-label="Anchor link for: donald-knuth-as-the-patron-saint-of-yak-shaving">🔗</a></h2>
<p><img src="https://www.iunknown.com/2022-01-09/2022-01-09-07-22-19.png" alt="" /></p>
<p>Once upon a time, there was <a href="https://en.wikipedia.org/wiki/Donald_Knuth">Donald
Knuth</a>. He's a well-known
Professor, Computer Scientist, and Author of
<a href="https://en.wikipedia.org/wiki/The_Art_of_Computer_Programming">TAOCP</a>, his
life's work. Every day he worked on TAOCP as a <a href="https://www-cs-faculty.stanford.edu/%7Eknuth/email.html">digital
recluse</a>. While
progress sometimes slowed down (3 volumes were completed by 1999), he does
have a <a href="https://www-cs-faculty.stanford.edu/%7Eknuth/taocp.html">schedule</a> for
completing it. </p>
<p>His work was not un-noticed. TAOCP was named one of the <em>twelve</em> physical
science books of the century in 1999 by American Scientist, alongside other
notable works such as Dirac on quantum mechanics, Einstein on relativity,
Mandelbrot on fractals. And so he kept working until one day in 2015, someone
noticed that there were lots of other things that Knuth created along the way
in support of his life's work. </p>
<p>The activities that led to the creation of these other things are sometimes
called yak shaving:</p>
<blockquote>
<p>Yak shaving refers to a task, that leads you to perform another related task
and so on, and so on — all distracting you from your original goal. This is
sometimes called “going down the rabbit hole.</p>
</blockquote>
<p>The first time I heard of this term was at a RubyConf many years ago. Not
surprisingly, Knuth's behavior was noticed by a member of the Ruby community:
<a href="http://skade.me/profile.html">Florian Gilcher</a> who penned this <a href="https://yakshav.es/the-patron-saint-of-yakshaves/">wonderful
post</a> on Knuth's yak
shaving activities. Knuth's most notable accomplishment outside of TAOCP is
<a href="https://en.wikipedia.org/wiki/TeX">TeX</a>, a typesetting language that he
invented to typeset TAOCP. So if you consider TeX the original yak shave, it
led to all these other yak shaves that are lovingly chronicled in Florian's
post:</p>
<ul>
<li>Write your own programming language to implement TeX in (WEB)</li>
<li>Invent a new programming paradigm (literate programming - a predecessor to
today's RMarkdown and Jupyter) for WEB</li>
<li>Invent a new algorithm for text layout</li>
<li>Design a font (Computer Modern)</li>
<li>Invent a new authoring tool for fonts (METAFONT)</li>
<li>Implement a new device-independent layout engine (DVI)</li>
</ul>
<p>The <a href="https://news.ycombinator.com/item?id=29861678">HN post</a> also had this
wonderful comment from <a href="https://tug.org/interviews/fuchs.html">David Fuchs</a>
who told a story about <em>even more yak shaving</em> by Knuth(!):</p>
<blockquote>
<p>This and more. The Sail version of TeX is mentioned, but everything else had
a usable prototype, too: An early version of Metafont in Sail, an early
version of Web (called Doc, though I don’t recall what the names of the
Tangle and Weave equivalents were), and an early version of Computer Modern
fonts in the early Metafont language. Though fully documented and available
via anonymous FTP on the Arpanet, all of these prototypes were experimental
proofs-of-concept and were completely discarded, along with the languages
they implemented, with the “real” versions rewritten from scratch by Knuth
(each first by hand on legal pads, then typed in and debugged as a whole.)</p>
</blockquote>
<blockquote>
<p>And you missed one more obscure but instructive example: To get the
camera-ready copy for ACP Vol 2, Knuth purchased an Alphatype CRS
phototypesetter. And, unhappy with the manufacturer’s firmware, he rewrote
the 8080 code that drives the thing. Eight simultaneous levels of interrupts
coming from various subsystem: the horizontal and vertical step-motors that
you had to accelerate just right, while keeping synchronized with four S100
boards that generated slices of each character in realtime from a
proprietary outline format, to be flashed into the lens just as it was
passing the right spot on the photo paper. (Four identical boards, since you
had to fill the second while the first one did its processing; times two for
two characters that might overlap due to kerning). Oh, and you had to handle
memory management of the font character data since there wasn’t enough RAM
for even one job’s worth (see our joint paper).</p>
</blockquote>
<blockquote>
<p>Fun times. I did the driver on the mainframe side, so got to be there for
the intense debugging sessions that used only the CRS’s 4x4 hex keypad and
12-character dot-matrix display.</p>
</blockquote>
<blockquote>
<p>Thanks for the DVI shout-out, btw.</p>
</blockquote>
<p>I was fortunate enough to meet Knuth at <a href="https://www.r-project.org/conferences/useR-2016/">useR
2016</a> when it was held on
the campus of Stanford University. At the end of his session on literate
programming, he rode away on a bicycle carrying an enormous stack of books
precariously perched on one hand. Keep in mind he was 77 years old at the
time! Sadly the only photo I have of Knuth from his talk was this one where,
apparently, even the great Donald Knuth needs a bit of help to project from
his computer!</p>
<p><img src="https://www.iunknown.com/2022-01-09/2022-01-09-07-30-07.png" alt="" /></p>
<p>That trip marked the first time that I rode a mountain bike. I couldn't have
picked a better place to do this on the amazing <a href="https://en.wikipedia.org/wiki/Arastradero_Preserve">Arastradero
Preserve</a>:</p>
<p><img src="https://www.iunknown.com/2022-01-09/2022-01-09-07-34-55.png" alt="" /></p>
2022-01-072022-01-07T00:00:00+00:002022-01-07T00:00:00+00:00https://www.iunknown.com/2022-01-07/<h2 id="gpt-3-and-long-form-question-answer-by-openai">GPT-3 and long form question answer by OpenAI<a class="zola-anchor" href="#gpt-3-and-long-form-question-answer-by-openai" aria-label="Anchor link for: gpt-3-and-long-form-question-answer-by-openai">🔗</a></h2>
<p>Note to myself: today Dickie Bush reminded me of the Pixar Storytelling
framework. I'm going to try rewriting this post that way to see if it's
any better at telling the story.</p>
<blockquote class="twitter-tweet">
<a href="https://twitter.com/x/status/1479450845087518721"></a>
</blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
<p>Today's paper is <a href="https://arxiv.org/pdf/2112.09332.pdf">WebGPT: Browser-assisted question-answering with human
feedbac</a>. When I think about thow we can
build a <a href="https://medium.learningbyshipping.com/bicycle-121262546097">bicycle for the
mind</a>, I've been
wondering how machine learning can help and mused about as much while
wondering if it is possible to create a
<a href="https://www.iunknown.com/2022-01-02/">Tim (Urban)-In-A-Box</a>. More important
than summarizing or finding information is <em>getting you to read that summary</em>.</p>
<p>There are a number of things that I learned in this paper. First is that there
is a high quality dataset, <a href="https://facebookresearch.github.io/ELI5/">ELI5</a>
sourced from the popular
<a href="https://www.reddit.com/r/explainlikeimfive/">sub-reddit</a> that contains a list
of questions and answers "explained like I am 5 years old".</p>
<p><img src="2022-01-07/2022-01-07-08-20-57.png" alt="" /></p>
<p>I learned about <a href="http://archives.wbur.org/thewildlife/2015/03/12/the-secrets-of-gift-giving-crows/">crows</a></p>
<h2 id="pixar-version">Pixar version<a class="zola-anchor" href="#pixar-version" aria-label="Anchor link for: pixar-version">🔗</a></h2>
<p>Once upon a time, the Internet was a place where I would <strong>manually</strong> do
research, often times on the toilet. Every day I would click on links, often
times on social media, and read post after post after post, slowly building up
a mental model of the <strong>things</strong> I am researching. </p>
<p>But if I rely on <a href="https://perell.com/note/open-mode-and-closed-mode/">beer
mode</a> activities to drive
my research, it's going to be pretty random. And since there isn't anything
that tries to tie together the things that I have seen on a particular topic,
my poor brain is left to fend for itself. So it sees input that looks
something like:</p>
<ul>
<li>GPT-3 paper</li>
<li>GPT-3 funny meme</li>
<li>Picture of cat</li>
<li>Shitpost from friend on Twitter</li>
<li>OMG COVID will kill us all</li>
<li>Spiderman spoiler</li>
<li>Introduction to Transformers</li>
<li>Transformers: Dark side of the mooon trailer</li>
<li>Attention is all you need paper</li>
</ul>
<p>But one day, I thought: why don't I get my machines to go do the heavy beer
mode activity of sifting through the Internet and return me something that I
could read without distractions, preferrably written in a <a href="https://waitbutwhy.com/">Tim
Urban</a> style? Just how far-fetched is this idea?
Turns out, we're getting closer by the day.</p>
<p>On December 16, <a href="https://openai.com/blog/improving-factual-accuracy/">OpenAI announced
WebGPT</a>, which is a
fine-tuned version of GPT-3 that answers open-ended questions by searching
for and summarizing what it finds online. Unlike GPT-3, WebGPT augments what
is already known in its language model with results obtained by searching
the web using the Bing search API.</p>
<p>The results from the model are pretty interesting. When posed the question:
"How do neural networks work?", WebGPT responded with:</p>
<blockquote>
<p>In its most basic form, a neural network has two layers: an input layer and
an output layer[3]. The output layer is the component of the neural network
that makes predictions[3]. In a feedforward network, information flows
through the network in the following way: patterns of information are fed
into the network via the input units, which trigger the layers of hidden
units, and these in turn arrive at the output units[1]. The network learns
by a feedback process called backpropagation, which involves comparing the
output a network produces with the output it was meant to produce, and using
the difference between them to modify the weights of the connections between
the units in the network, working from the output units through the hidden
units to the input units, going backward[2][4]. Over time, backpropagation
causes the network to learn, reducing the difference between actual and
intended output to the point where the two exactly coincide, so the network
figures things out exactly as it should[2].</p>
</blockquote>
<p>This is pretty reasonable! It even generated references:</p>
<ol>
<li>How neural networks work - A simple introduction (www.explainthatstuff.com) </li>
<li>How neural networks work - A simple introduction (www.explainthatstuff.com) </li>
<li>How Do Neural Networks Really Work? | Nick McCullum (nickmccullum.com) </li>
<li>How Do Neural Networks Really Work? | Nick McCullum (nickmccullum.com) </li>
</ol>
<p>The linked <a href="https://arxiv.org/pdf/2112.09332.pdf">paper</a> provides a lot of
additional details. First, the experimental environment (used by humans
recruited via UpWork) is a text-based web browser. Here's a screenshot of what
it looks like:</p>
<p><img src="2022-01-07/2022-01-07-08-20-57.png" alt="text based browser used by webgpt humans" /></p>
<p>The text based browser was designed to be used by human participants, and did
a lot that a conventional browser does not typically do to make it easier to
work with the text. It uses a number of existing libraries, including:</p>
<ul>
<li><a href="https://github.com/mozilla/readability">readability.js</a></li>
<li><a href="https://github.com/aaronsw/html2text">html2text</a></li>
<li><a href="https://github.com/pdfminer/pdfminer.six">pdfminer.six</a></li>
</ul>
<p>to transform the text into a format that was suitable to feed into the model.
The browser was used to collect two additional pieces of data from the study
participants: 1) demonstrations of humans using search to answer questions,
and 2) comparisons between two model-generated answers to the same question.</p>
<p>The model itself was trained to answer questions from the
<a href="https://facebookresearch.github.io/ELI5/">ELI5</a> dataset that was gathered
from questions and answers in the "Explain Like I'm Five" subreddit. </p>
<p>The results from this study are encouraging - the model's answers are
preferred 56% of the time. When comparing answers to the highest-voted
answer from the ELI5 dataset, the model's answers were preferred 69% of the
time. This is not human-level performance yet, but it's getting there.</p>
<p>Because of this,
Because of this,</p>
<p>Until finally the glorious day arrives when I can ask a question like: </p>
<blockquote>
<p>Have Tim Urban write an explainer for What is Neuralink and why do we need
it?</p>
</blockquote>
<p>And I get an answer like <a href="https://waitbutwhy.com/2017/04/neuralink.html">this amazing 38,000 word explainer for my
question</a>. Or if I'm more in
the mood for something more succinct:</p>
<blockquote>
<p>Give me a Wikipedia summary for What is Neuralink and why do we need it?</p>
</blockquote>
<p>But will it make any difference? Will it actually make people smarter? Think
better? Will this insulate us from the endless distraction that is the
internet? </p>
<p>Maybe what we need is an assistant that filters the web for us but in a way
that doesn't reinforce existing biases? I should write about that some other
time.</p>
<h2 id="brian-kernighan-s-memoir">Brian Kernighan's memoir<a class="zola-anchor" href="#brian-kernighan-s-memoir" aria-label="Anchor link for: brian-kernighan-s-memoir">🔗</a></h2>
<p>TIL that <a href="https://www.amazon.com/UNIX-History-Memoir-Brian-Kernighan-ebook/dp/B07ZQHX3R1">UNIX: A History and a
Memoir</a>
was written by <a href="https://www.cs.princeton.edu/%7Ebwk/">Brian Kernighan</a> and
available on Kindle as an e-book.</p>
2022-01-062022-01-06T00:00:00+00:002022-01-06T00:00:00+00:00https://www.iunknown.com/2022-01-06/<h2 id="optimizing-docker-image-size">Optimizing Docker image size<a class="zola-anchor" href="#optimizing-docker-image-size" aria-label="Anchor link for: optimizing-docker-image-size">🔗</a></h2>
<p>There's a nice <a href="https://contains.dev/blog/optimizing-docker-image-size">blog on optimizing Docker image
size</a>. I learned about
tools that I haven't known about before, especially
<a href="https://github.com/wagoodman/dive">dive</a>. This lets you troubleshoot your
Docker images and even tells you when you have files duplicated in different
layers in your image. It's a great way to discover waste in your images.</p>
<p><img src="https://github.com/wagoodman/dive/blob/master/.data/demo.gif?raw=true" alt="Animated gif showing dive" /></p>
<p>The <a href="https://news.ycombinator.com/item?id=29828386">HN thread</a> also has a
bunch of useful tips for managing layers:</p>
<p>You can use <code>--squash</code> to remove all intermediate layers</p>
<p>The <a href="https://www.docker.com/blog/introduction-to-heredocs-in-dockerfiles/">Docker BuildKit tool supports
heredocs!</a></p>
<pre data-lang="bash" style="background-color:#2b303b;color:#c0c5ce;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#bf616a;">RUN </span><span><<</span><span style="color:#b48ead;">EOF
</span><span style="color:#a3be8c;">apt-get update
</span><span style="color:#a3be8c;">apt-get upgrade -y
</span><span style="color:#a3be8c;">apt-get install -y ...
</span><span style="color:#b48ead;">EOF
</span></code></pre>
<p>There's a tool called <code>stargz</code> (seekable tar.gz format) which greatly improves
startup time in container images by lazy loading files <a href="https://github.com/containerd/stargz-snapshotter">stargz
snapshotter</a></p>
<p>Look at how it improves startup time for python-3.7 image:</p>
<p><img src="2022-01-06/2022-01-06-19-02-52.png" alt="" /></p>
<p>This <a href="https://archive.fosdem.org/2021/schedule/event/containers_lazy_pull/attachments/slides/4687/export/events/attachments/containers_lazy_pull/slides/4687/stargz_snapshotter.pdf">FOSDEM 2021 presentation is a good overview of
stargz</a></p>
<p>This is built on top of the <a href="https://github.com/google/crfs">Google CRFS</a>
(Container Registry Filesystem) project which is a FUSE filesystem that lets
you mount a container image served directly from a container registry without
pulling it locally first. The linked repo has a fantastic README that explains
how it all works.</p>
2022-01-052022-01-05T00:00:00+00:002022-01-05T00:00:00+00:00https://www.iunknown.com/2022-01-05/<h2 id="on-the-importance-of-empathy">On the importance of empathy<a class="zola-anchor" href="#on-the-importance-of-empathy" aria-label="Anchor link for: on-the-importance-of-empathy">🔗</a></h2>
<p>In case we need to be reminded of it, not everyone who we disagree with is
motivated by some evil thing. In the words of Ted Lasso (<a href="https://www.snopes.com/fact-check/be-curious-not-judgmental-walt-whitman/">not actually Walt
Whitman</a>):</p>
<blockquote>
<p>You know Rupert, guys have underestimated me my entire life. And for years I
never understood why. It used to really bother me. But then one day I was
driving my little boy to school and I saw this quote from Walt Whitman
painted on the wall there that said “Be curious. Not Judgmental.” I like
that.</p>
</blockquote>
<blockquote>
<p>So I get back in my car and I’m driving to work and all of sudden it hits
me. All them fellas who used to belittle me, not a single one of them was
curious. You know, they thought they had everything figured out. So they
judged everything. And they judged everyone. And I realized that their
underestimating me, who I was had nothing to do with it. Because if they
were curious, they would have asked questions. You know. Questions like,
have you played a lot of darts, Ted? Which I would have answered. Yes sir.
Every Sunday afternoon at a sports bar with my father from age 10 to 16 when
he passed away.</p>
</blockquote>
<blockquote>
<p>Barbecue sauce.</p>
</blockquote>
<p>This quote is from this excellent scene from Ted Lasso:</p>
<div class="youtube">
<iframe
width=560 height=315
src="https://www.youtube.com/embed/5x0PzUoJS-U"
webkitallowfullscreen
mozallowfullscreen
allowfullscreen>
</iframe>
</div>
<p>Sadly, there's been a lot of non-empathetic judgemental behavior during the
pandemic. A lot of it from me, I'm ashamed to admit.</p>
<p>I've really enjoyed watching the growth of Lex Fridman ever since I discovered
him a few years ago. Recently, he's begun to talk more about the importance of
empathy and to be open and really listen to other people in the absence of
judgement.</p>
<div class="youtube">
<iframe
width=560 height=315
src="https://www.youtube.com/embed/oIOGUYOPAsA"
webkitallowfullscreen
mozallowfullscreen
allowfullscreen>
</iframe>
</div>
<p>A relevant quote from the opening:</p>
<blockquote>
<p>Those who advocate for lockdowns as a policy often ignore the quiet
suffering of millions that it results in which includes economic pain, loss
of jobs that give meaning and pride in the face of uncertainty ... Many
folks whose job is unaffected by the lockdowns talk down to the masses about
which path forward is right and which is wrong. What troubles me most is
this very lack of empathy among the policymakers for the common man and in
general for people who are unlike themselves.</p>
</blockquote>
<p>I had a really hard time with the realization that comes from listening to
this and subsequently looking at myself in the mirror. Divisiveness is not the
answer to any of the problems that we have. Nor should public campaigns be
waged to silence the heretics. This is a good reminder to me and I will strive
to do better.</p>
2022-01-032022-01-03T00:00:00+00:002022-01-03T00:00:00+00:00https://www.iunknown.com/2022-01-03/<h2 id="links">Links<a class="zola-anchor" href="#links" aria-label="Anchor link for: links">🔗</a></h2>
<p>The <a href="https://asmtutor.com/">AsmTutor site</a> is a great introduction to NASM. I
especially like how it begins with making Linux <code>syscalls</code>. </p>
<p><img src="2022-01-03/2022-01-03-15-53-03.png" alt="" /></p>
<h2 id="the-real-sequel-to-on-intelligence">The real sequel to On Intelligence<a class="zola-anchor" href="#the-real-sequel-to-on-intelligence" aria-label="Anchor link for: the-real-sequel-to-on-intelligence">🔗</a></h2>
<p>About 20 years ago, I read Jeff Hawkins' excellent book <a href="https://numenta.com/resources/on-intelligence/">On
Intelligence</a>. One of the
things that really struck me back then was his description of how we could
map different sensors to the neocortex, effectively creating a cyborg. I had
always thought that this meant a physical fusion of human and machine. But
then I read this quote and realized ... that we are <strong>already</strong> cyborgs.</p>
<blockquote>
<p>The thing that people, I think, don’t appreciate right now is that they are
already a cyborg. You’re already a different creature than you would have
been twenty years ago, or even ten years ago. You’re already a different
creature. You can see this when they do surveys of like, “how long do you
want to be away from your phone?” and—particularly if you’re a teenager or
in your 20s—even a day hurts. If you leave your phone behind, it’s like
missing limb syndrome. I think people—they’re already kind of merged with
their phone and their laptop and their applications and everything.</p>
</blockquote>
<p>This quote is from the excellent <a href="https://waitbutwhy.com/2017/04/neuralink.html">Neuralink and the Brain's Magical
Future</a> feature from Tim Urban,
which I now regard as the real successor to On Intelligence (don't bother with
Jeff Hawkins sequel - A Thousand Brains). This 38,000 word epic builds a
compelling case for why we need to create a Brain-Machine-Interface, starting
with a very entertaining and interesting introduction to neuroscience. </p>
<p>There's a very large hand wave in the middle of the article where he
transitions from a discussion of how we got here to where we could go.
Building a BMI is a very hard problem and he does a great job at explaining
through analogy exactly why it is such a hard problem, and also motivating why
we need to tackle this problem. </p>
<p>While some may look at the article as a lot of Elon fanboyism, I think it does
a great job at capturing what motivates Elon. It took me several hours and a
couple of days to read the entire thing. But it's well worth the investment in
time.</p>
2022-01-022022-01-02T00:00:00+00:002022-01-02T00:00:00+00:00https://www.iunknown.com/2022-01-02/<h2 id="how-can-we-build-better-computational-assistants">How can we build better computational assistants?<a class="zola-anchor" href="#how-can-we-build-better-computational-assistants" aria-label="Anchor link for: how-can-we-build-better-computational-assistants">🔗</a></h2>
<p>There is a lot of ceremony in note-taking systems. Some examples:</p>
<ul>
<li><a href="https://zettelkasten.Heede/posts/overview/">Zettelkasten</a></li>
<li><a href="https://fortelabs.co/blog/progressive-summarization-a-practical-technique-for-designing-discoverable-notes/">Progressive
Summarization</a></li>
</ul>
<p>A lot of the ceremony is due to the need to <em>maintain</em> the system itself. Yes,
there are tools like <a href="https://obsidian.md/">Obsidian</a> and <a href="https://roamresearch.com/">Roam
Research</a> that help to maintain these systems, but
they are largely tools that make it more <em>efficient</em> to maintain the system.</p>
<p>Perhaps an interesting thought experiment (I don't have solutions here, I'm
just trying to write down the right questions to ask) would be to imagine what
a Star Trek like conversation with a super-intelligent machine could look
like?</p>
<blockquote>
<p>ME: Hey Jarvis, teach me about super intelligence
JAVIS: How does it feel like to be standing here?</p>
</blockquote>
<p><img src="https://www.iunknown.com/2022-01-02/2022-01-02-11-21-16.png" alt="Human Progress over Time" /></p>
<blockquote>
<p>JARVIS: {more smart things}</p>
</blockquote>
<p>That drawing is from the
<a href="https://waitbutwhy.com/2015/01/artificial-intelligence-revolution-1.html">beginning</a>
of Tim Urban's excellent 95,000 word magnum opus of a 4-part blog post. I've
been <em>obsessed</em> (over the past hour or so) with Tim's storytelling virtuosity.
What Tim seems to do extremely well is take very complex systems and boil them
down into simple, accessible, yet entertaining stories. As I think about what
a super-intelligent note taking system could be, could it be something that
could take our boring notes about something and synthesize it into something
incredibly interesting and entertaining like what Tim is capable of creating?
Could we have our own "Tim in a Box"?</p>
<p>I must say that this is just one possible take, but I'm pretty sure that
whatever our future hyper-intelligent assistants will be, it won't look like a
VS Code interface.</p>
<p>Incidentally, this idea came about when I was watching Tim's Google Talk this
morning:</p>
<div class="youtube">
<iframe
width=560 height=315
src="https://www.youtube.com/embed/mCzaxZZPmN4"
webkitallowfullscreen
mozallowfullscreen
allowfullscreen>
</iframe>
</div>
<h2 id="myelin">Myelin<a class="zola-anchor" href="#myelin" aria-label="Anchor link for: myelin">🔗</a></h2>
<p>This is a beautiful picture of what a myelinated axon looks like:</p>
<p><img src="https://www.iunknown.com/2022-01-02/2022-01-02-19-42-40.png" alt="" /></p>
2022-01-012022-01-01T00:00:00+00:002022-01-01T00:00:00+00:00https://www.iunknown.com/2022-01-01/<p>I miss Euan Garden. </p>
<p><img src="https://www.iunknown.com/2022-01-01/2022-01-01-09-37-04.png" alt="Euan Garden" /></p>
<p>Euan was a friend, a colleague, and a former boss. He's one of the first
people who pop into my mind when I think of the phrase "a man of character". I
can remember so many stories from our many conversations over the years,
starting with the first time that I met him when he was interviewing to become
my boss in the Technical Computing Group at Microsoft over a decade ago. It
was a normal interview until the end when he started fanboying over some work
that I had done earlier with Delphi and COM. I think that anyone who has met
Euan before could imagine the AMOUNT OF ENTHUSIASM with which said fanboying
was done. But he did it not in a way that would make him seem like he was
angling for the job (despite the circumstances) but in the true spirit of love
for the technology. During that time when Euan was my boss on that amazing
team so long ago he was a great boss, one that would at the same time give me
room to explore crazy ideas and the wisdom to step in when my crazy ideas
would go out of control :)</p>
<p>At some point, it became clear to all of us that Technical Computing was not
going to be a thing at Microsoft. When I was recruited into the Windows team
(hi, Mahesh!) coincidentally to own COM and to build the new WinRT programming
model on top of it, I had to break the news to Euan over the holidays. I
needed to do it in person, so I remember driving over to his old house (he
wound up moving across the street to his new house believe it or not) to break
the news. As you might expect, Euan was gracious and helpful during the
transition as that was going to become my first experience with being a
manager at Microsoft.</p>
<p>We were never too far away from each other over the years. I remember random
conversations with him that included:</p>
<ul>
<li>How to talk to the police if you happen to have shot an intruder in your
house</li>
<li>Why driving to work in a scooter while wearing shorts was the only way to
travel in December in Redmond</li>
<li>Why having an Xbox in every room in your house as a media extender was the
only way to live</li>
<li>Why Thinkpads are the ONE TRUE LAPTOP</li>
</ul>
<p>We re-united on the same (larger) team when I joined the Python team after my
stint in Windows. It was great having him just upstairs from me where I could
drop in to get his sage advice on many things as I sought to be helpful to my
new team. His work then was deeply influential on some things that I'm working
on now. When we ship, it's going to be in no small part due to our many chats
over the years. I'm proud to be able to carry forward his work and I'll
continue to think of him often as we continue on his journey.</p>
<p>Godspeed, Euan.</p>
<p>PS others have shared <a href="https://www.kudoboard.com/boards/vKRd51s1">their memories of
Euan</a></p>
<h2 id="more-on-the-metaverse">More on the metaverse<a class="zola-anchor" href="#more-on-the-metaverse" aria-label="Anchor link for: more-on-the-metaverse">🔗</a></h2>
<p>So I was procrastinating today after discovering Tim Urban on Twitter (how is
it possible that I did not know he existed?):</p>
<blockquote class="twitter-tweet">
<a href="https://twitter.com/x/status/1476962460049584136"></a>
</blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
<p>I went down the rabbit hole and discovered his TED Talk:</p>
<div class="youtube">
<iframe
width=560 height=315
src="https://www.youtube.com/embed/arj7oStGLkU"
webkitallowfullscreen
mozallowfullscreen
allowfullscreen>
</iframe>
</div>
<p>And his incredibly <a href="https://waitbutwhy.com/2016/03/doing-a-ted-talk-the-full-story.html">funny
writeup</a>
of what it was like to write his TED Talk.</p>
<p>I was watching it on my phone while sitting on my couch next to my dog who
loves to sleep on my couch. Which got me thinking about what this experience
would be like if I were watching this in VR. It struck me then, in the middle
of watching a talk on procrastination, that at limits of technology, <strong>it
wouldn't look any different at all</strong>.</p>
<p>That's a problem. It also got me thinking about how early movies looked no
different than watching a play at a theater ... they haven't invented editing
yet! So they simply recorded what it was like to watch a play, which made it
possible for people who were not in the room at the time that the play was
showing to experience the play, albeit in a somewhat degraded experience.</p>
<p>My experience in Horizon Meeting Rooms yesterday was one where it feels like
those early movies - we are literally putting people into a 3D room to
experience what it would be like to be in the same place physically. That to
me feels like those early movies - we made it possible for people to
experience a play without being in the same space physically. But why should
we be constrained by the limitations of reality? What is the equivalent of
editing in the metaverse? I don't have any answers here, but at least I have
figured out a question and that's a start.</p>
<p>(An aside) I viscerally remember this thought popping into my head while I was
watching Tim's talk. I think this is another great example of <a href="https://perell.com/note/open-mode-and-closed-mode/">Beer
Mode</a> thinking which I
think is extremely important for creative professionals. Random inputs can
stimulate thinking in different and unexpected ways, especially with ideas
that are tumbling around in your subconcious. Or at least that's how I'm
justifying procrastination.</p>
<h2 id="spatial-context-and-vr">Spatial context and VR<a class="zola-anchor" href="#spatial-context-and-vr" aria-label="Anchor link for: spatial-context-and-vr">🔗</a></h2>
<p>Here's a sequence of photos that I took today at the Microsoft Library:</p>
<p><img src="2022-01-01/2022-01-01-20-23-31.png" alt="Bookshelves" />
<img src="2022-01-01/2022-01-01-20-24-05.png" alt="Bookshelf" />
<img src="2022-01-01/2022-01-01-20-24-24.png" alt="Shelf" />
<img src="2022-01-01/2022-01-01-20-24-44.png" alt="Book" />
<img src="2022-01-01/2022-01-01-20-25-08.png" alt="Summary Table of Contents" />
<img src="2022-01-01/2022-01-01-20-25-31.png" alt="Detail Table of Contents" />
<img src="2022-01-01/2022-01-01-20-25-51.png" alt="Page" />
<img src="2022-01-01/2022-01-01-20-26-04.png" alt="Page Detail" /></p>
<p>They represent zooming in on a piece of information. I find that my memory
works this way - I can remember where something is located spatially, often
times even in cases where I cannot remember the information itself.</p>
<p>Today, VR-based solutions like <a href="https://about.fb.com/news/2021/08/introducing-horizon-workrooms-remote-collaboration-reimagined/">Horizon
Workrooms</a>
create meeting spaces that mimic existing meeting rooms. Since I haven't yet
had meetings inside of a Workroom yet, I can't comment on the experience
first-hand. But watching some YouTube videos it seems like they're striving to
create an experience that mimics a real-world meeting room, which is great
start and requires a tremendous amount of engineering effort to get right.</p>
<p>But let's imagine that we're not limited by what we can do in a physical
meeting room. What if we could take advantage of our spatial memory and leave
objects around the room? What if those objects could be zoomed into
"infinitely" to reveal more about what they represent? What if we could
version control the state of the objects in the room? </p>
<p>One of the great things about being messy, like these famous desks is that
they respresent <strong>saved context</strong> in a physical space. I would like to imagine
that those piles represent trains of thought and can help bring them back into
the context (or at least remind them of the context!)</p>
<p><img src="2022-01-01/2022-01-01-17-08-54.png" alt="Albert Einstein's desk" />
<img src="2022-01-01/2022-01-01-17-08-07.png" alt="Tony Hsieh's desk" />
<img src="2022-01-01/2022-01-01-17-07-33.png" alt="Steve Jobs desk" /></p>
<p>Modern information is mainly accessed in one of two ways: by search or through
storing files in a file system. The problem with both of these approaches is
that neither of them take advantage of our natural spatial awareness or our
ability to organize information into hierarchies (you're already good at this</p>
<ul>
<li>you can probably tell me exactly where in your house your toothbrush, your
keys, or the milk is located). </li>
</ul>
<p>What's worse is that they also remove any cues you may have that the
information exists at all. What would be great is if we could have a system
where you could arrange the information spatially, and that spatial
information could be version controlled. This way the context is maintained.</p>
<p>Shared meeting room spaces are reset for each meeting. However, what if we can
always recreate (or even version control) different meeting contexts? If I met
with you last week, when we re-enter the meeting room everything is exactly
where we left it from our last visit. This way we can take advantage of our
spatial memory to organize information in a virtual space instead of relying
on search or other cumbersome window-based ways of retrieving information. We
could also integrate this with search "find my car keys in the house", which
would reveal the item and its location.</p>
<p>This way we can transcend what is possible spatially and not create a world
that is merely a lower-fidelity imitation of the real world. I get that the
primary benefit that early adopters get from Workrooms is going to be allowing
people that are distant to collaborate in a more meaninful way, much like
those early films allowed people not in the room to experience the play.
That's already super-valuable, especially in today's world. But perhaps
spatial context could be akin to editing in films and create an entirely new
medium in which we can collaborate?</p>
2021-12-312021-12-31T00:00:00+00:002021-12-31T00:00:00+00:00https://www.iunknown.com/2021-12-31/<p>I went to Best Buy this afternoon and bought an Oculus Quest 2 because I
wanted to spend some time this holiday seeing how real <a href="https://stratechery.com/2021/enterprise-metaverses-horizon-workrooms-workrooms-facebook-problem/">Ben
Thompson's</a>
take on the Metaverse was. I'm pretty amazed at what they were able to cram
into a $299 device. To quote:</p>
<blockquote>
<p>My personal experience with Workrooms didn’t involve any dancing or fitness;
it was simply a conversation with the folks that built Workrooms. The sense
of presence, though, was tangible. Voices came from the right place, thanks
to Workrooms’ spatial audio, and hand gestures and viewing directions really
made it feel like the three of us were in the same room. What was
particularly compelling was the way that Workrooms’ virtual reality space
seamlessly interfaced with the real world:</p>
</blockquote>
<blockquote>
<p>People joining a meeting without a headset appear on a TV as if they are
video conferencing; it feels completely natural. Here is a photo from
Facebook’s PR pack (which honestly, given the size of the group, seems less
immersive; my demo had one person on video, and one person in the room with
me):</p>
</blockquote>
<p><img src="2021-12-31/2021-12-31-17-37-10.png" alt="" /></p>
<p>I'm writing this back on my PC after spending about 30 minutes in a Horizon
Workroom by myself. So here's a really quick take on what I liked and didn't
like about the experience:</p>
<p>The immersive feeling is real. I really like how, with Horizon Remote
desktop installed on my PC, I could interact with and type on my PC.</p>
<p>The experience with the whiteboard was ... interesting. I get that this is
using $299 worth of consumer-level hardware, so I'm not expecting a whole lot.
You can write on the whiteboard using one of the controllers flipped around so
that you're using the bottom like a pen. This was ... OK, but clearly not as
good as it could be with better hardware. However I am holding my arm out in
space vs. bracing it against a real whiteboard so I'm not sure how better
hardware can help in this regard.</p>
<p>The latency while using my keyboard and mouse was pretty jarring. Now I
totally respect that I can actually do things with this, but this is very
early adopter territory. Oculus Remote Desktop is pretty confused with
multi-monitor setups though (Aero snap on Windows doesn't do what I would
expect), and I need to take off my headset and manually move windows to my
primary monitor to get it to work correctly. It is usable though. I wonder if
it's any better with USB tethering to my PC?</p>
<p>The resolution is limiting. I get that this will get better over time but it
likely needs to be a LOT better. I'm looking at two 27" 4K monitors right now
and that's my ideal experience. I would imagine 25MP per eye will get us
pretty close to the experience I have already, but that's 7x more pixels than
I'm seeing right now at 1832x1920 per eye, which is still quite amazing
considering it's a $299 device!</p>
<p>Even though I wouldn't call the Quest heavy, it does have a noticeable heft
on my head. I wonder how well this will hold out during a meeting (I have
one scheduled for later this week with a friend to see how well this works).</p>
<p>I'd really like the device to do a better job tracking where my hands are and
letting me see them as I type on my keyboard. I hit keys like F10/F11 all the
time and I can't really touch type those keys as it's quite a reach from the
home position (try it yourself to see what I mean). I'd also like to see my
mouse as well - I would imagine that this will get much better in the future.</p>
<p>But back to the latency - this is probably the biggest technical issue that I
see with the hardware right now. But there's promise here. It feels very
Christensen disruptive (if the collaborative room experience is as good as Ben
claims). </p>
<p>I'll try it again later tonight. But this does feel like the future. But we're
definitely not there right now.</p>
2021-12-302021-12-30T00:00:00+00:002021-12-30T00:00:00+00:00https://www.iunknown.com/2021-12-30/<p>This is a fantastic piece from NYT Opinion that asks a simple question: in the
18 states in the US where Democrats have absolute power, do they live the
values espoused by their party? It examines three key issues: affordable
housing (California), progressive taxation (Washington), and education
(Illinois). The results will be surprising to you. I didn't know that
Washington state is the most regressive taxation state in the nation. </p>
<div class="youtube">
<iframe
width=560 height=315
src="https://www.youtube.com/embed/hNDgcjVGHIw"
webkitallowfullscreen
mozallowfullscreen
allowfullscreen>
</iframe>
</div>
<p>We continue to focus on cases now that Omicron is raging across the country.
But is this the right metric for us to be looking at? We're saying "OMG,
Omicron is setting new daily records". But given that Omicron is much less
virulent:</p>
<blockquote class="twitter-tweet">
<a href="https://twitter.com/x/status/1476678457778049024"></a>
</blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
<p>and the recent data from South Africa shows a dramatic decoupling in deaths
and cases compared to previous variants:</p>
<blockquote class="twitter-tweet">
<a href="https://twitter.com/x/status/1476581435322421252?s=20"></a>
</blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
<p>Why are we continuing to scare people with hyperbolic language like "global
dominance"?</p>
<blockquote class="twitter-tweet">
<a href="https://twitter.com/x/status/1476610692987822080?s=20"></a>
</blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
<p>It's meaningless to compare case numbers from a more virulent but less
transmissible variant to a less virulent but more transmissible variant unless
you're just trying to scare people. Perhaps it's time for a better metric - it
seems like hospitalizations are a much more reasonable metric to be looking at
to a first approximation. Here is Bob Wachter's more reasonable look at
hospitalizations (which of course is a lagging metric to cases):</p>
<blockquote class="twitter-tweet">
<a href="https://twitter.com/x/status/1476708947411177489?s=20"></a>
</blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
<p>Also, Bob has a hopeful take on Omicron. Hopefully Omicron continues to
outcompete Delta and becomes the variant that becomes endemic in the
population. Maybe, as Bob suggests, COVID becomes "just like a bad flu" by the
Spring. We can only hope.</p>
<blockquote class="twitter-tweet">
<a href="https://twitter.com/x/status/1476314067660722176?s=20"></a>
</blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>2021-12-272021-12-27T00:00:00+00:002021-12-27T00:00:00+00:00https://www.iunknown.com/2021-12-27/<p>This is the best explainer of how Airline frequent flyer programs really work.
Airlines are effectively sovereign currency issuers with the caveat that not
only do they control issuing currency, they also control the only means by
which the currency can be redeemed. While this is not entirely true, i.e., you
can purchase goods and services by redeeming frequent flyer miles, you'd have
to be crazy to do so given the terrible exchange rates that are offered by the
credit card issuers.</p>
<div class="youtube">
<iframe
width=560 height=315
src="https://www.youtube.com/embed/ggUduBmvQ_4"
webkitallowfullscreen
mozallowfullscreen
allowfullscreen>
</iframe>
</div>
<p>This diagram does a great job at explaining how Wall Street values airlines
and their frequent flyer programs. Effectively operating an airline is a loss-
leader for providing frequent flyer miles! Now, there's an arbitrary
multiplier applied over EBITDA to come up with the valuation of the frequent
flyer programs but this is still a stunning figure:</p>
<p><img src="2021-12-27/2021-12-27-09-29-25.png" alt="" /></p>
<p>The video also does a great job at explaining how different forms of arbitrage
have been systematically eliminated by the airlines. For example, mile
arbitrage (i.e., find a cheap flight that went on a circuitious route that
would yield a large number of miles for a low cost) have been eliminated by
pegging reward miles to the dollar spend vs. the miles flown. They also do
the same thing on the redemption side as well. I used to run an arbitrage on
this many years ago when I could fly anywhere at anytime for 25K miles. I
would charge customers for the flight at a discount over the current flight
cost, e.g., if a flight cost $1200, I would sell for $1000 and redeem 25K
miles for $1000 for an unheard-of $.04 per mile. Yes, I would get taxed on
the income for that flight but that was still an unheard-of redemption rate
for miles.</p>
<p>One of the challenges of building a semantic search engine is splitting the
input text into smaller chunks that are suitable for generating embeddings
using Transformer models. This
<a href="https://discuss.huggingface.co/t/sentence-splitting/5393">thread</a> on the
Huggingface forums does a good job at breaking down the problem into smaller
pieces. The key insight from <code>lewfun</code> is using a sliding window algorithm over
the text in the document. For those who don't know, there is a limit on the
number of tokens (roughly words) that can be fed to a model. By using a
sliding window algorithm, you block the entire document and can map each block
back to the same original document. This way, you can use similarity based
models to generate a ranked list that maps back to the original document. This
will be the way that I will build the first version of my semantic search
engine.</p>
2021-12-222021-12-22T00:00:00+00:002021-12-22T00:00:00+00:00https://www.iunknown.com/2021-12-22/<p>I've been interested in using Machine Learning to extract text reliably from
a web page for archival purposes (adding to my personal knowlegebase). So
today, I'm collecting some links to prior art in this area for some
inspiration:</p>
<p><a href="https://cs229.stanford.edu/proj2013/YaoZuo-AMachineLearningApproachToWebpageContentExtraction.pdf">A Machine Learning Approach to Webpage Content
Extraction</a>. This paper
uses support vector machines to train a model that uses some specific
features in the text block:</p>
<ul>
<li>number of words in this block and thee quotient to its previous block</li>
<li>average sentence length in this block and the quotient to its previous block</li>
<li>text density in this block and the quotient to its previous block</li>
<li>link density in this block</li>
</ul>
<p><a href="https://github.com/mozilla/readability">Readability.js</a>. This is an node
library that contains the readability library used for the FireFox Reader
view. In a web browser, you must directly pass the <code>document</code> object from the
browser DOM to the library. If used in a node application, you'll need to use
an <a href="https://github.com/jsdom/jsdom">external DOM library like jsdom</a>. Either
way the code is simple:</p>
<pre data-lang="js" style="background-color:#2b303b;color:#c0c5ce;" class="language-js "><code class="language-js" data-lang="js"><span style="color:#b48ead;">var </span><span style="color:#bf616a;">article </span><span>= new Readability(document).</span><span style="color:#96b5b4;">parse</span><span>();
</span></code></pre>
<p>or in the case of a node app:</p>
<pre data-lang="js" style="background-color:#2b303b;color:#c0c5ce;" class="language-js "><code class="language-js" data-lang="js"><span style="color:#b48ead;">var </span><span>{ </span><span style="color:#bf616a;">Readability </span><span>} = </span><span style="color:#96b5b4;">require</span><span>('</span><span style="color:#a3be8c;">@mozilla/readability</span><span>');
</span><span style="color:#b48ead;">var </span><span>{ </span><span style="color:#bf616a;">JSDOM </span><span>} = </span><span style="color:#96b5b4;">require</span><span>('</span><span style="color:#a3be8c;">jsdom</span><span>');
</span><span style="color:#b48ead;">var </span><span style="color:#bf616a;">doc </span><span>= new JSDOM("</span><span style="color:#a3be8c;"><body>Look at this cat: <img src='./cat.jpg'></body></span><span>", {
</span><span> url: "</span><span style="color:#a3be8c;">https://www.example.com/the-page-i-got-the-source-from</span><span>"
</span><span>});
</span><span style="color:#b48ead;">let </span><span style="color:#bf616a;">reader </span><span>= new Readability(</span><span style="color:#bf616a;">doc</span><span>.</span><span style="color:#bf616a;">window</span><span>.</span><span style="color:#bf616a;">document</span><span>);
</span><span style="color:#b48ead;">let </span><span style="color:#bf616a;">article </span><span>= </span><span style="color:#bf616a;">reader</span><span>.</span><span style="color:#96b5b4;">parse</span><span>();
</span></code></pre>
<p>Ideally I should create an API that accepts a URI as a parameter and returns
the parsed document to the caller. Invoking this from a Chrome extension
should make it very straightforward to "clip" a web page into a personal
knowledgebase.</p>
<p>Large language models like GPT-3 show real promise in this area as well. In
this
<a href="https://www.pragnakalp.com/question-answering-using-gpt3-examples/">article</a>,
the authors use GPT-3 to answer questions based on text extracted from a
document. Starting at 2:47 in the video below is a great demo of this working</p>
<div class="youtube">
<iframe
width=560 height=315
src="https://www.youtube.com/embed/8psgEDhT1MM"
webkitallowfullscreen
mozallowfullscreen
allowfullscreen>
</iframe>
</div>
2021-12-212021-12-21T00:00:00+00:002021-12-21T00:00:00+00:00https://www.iunknown.com/2021-12-21/<p><strong>Day 3 of fastai</strong>. The
<a href="https://www.amazon.com/Deep-Learning-Coders-fastai-PyTorch/dp/1492045527/ref=sr_1_3?crid=39HBTBCBZ94GK&keywords=fastai+book&qid=1640122478&sprefix=fastai+bo%2Caps%2C372&sr=8-3">book</a>
arrived today and I'm following along from the book directly. A combination of
reading the paper book and using the Jupyter notebooks found in the <a href="https://github.com/fastai/fastbook">GitHub
book repo</a> are a potent combination.
Reminder that you can run the book repo in just a single step using
<a href="https://github.com/jflam/ez">ez</a> and VS Code.</p>
<p>The <a href="https://en.wikipedia.org/wiki/Universal_approximation_theorem">Universal Approximation
Theorem</a>
undergirds the theoretical basis for neural networks being able to compute
arbitrary functions. The two parts of the approximation theorem look at the
limits of a single layer with an arbitrary number of neurons ("arbitrary
width") and the limits of a network with an arbitrary number of hidden layers
("arbitrary depth").</p>
2021-12-202021-12-20T00:00:00+00:002021-12-20T00:00:00+00:00https://www.iunknown.com/2021-12-20/<p>Day 2 of fastai class.</p>
<h1 id="the-problem-with-p-values">The problem with p-values<a class="zola-anchor" href="#the-problem-with-p-values" aria-label="Anchor link for: the-problem-with-p-values">🔗</a></h1>
<p>Ways of determining whether a relationship would happen by chance?</p>
<p>Independent variables
Dependent variables</p>
<p><img src="2021-12-20/2021-12-20-11-30-44.png" alt="" /></p>
<p>One way of doing this is by simulation.</p>
<p>Another way to do this is by looking at the <code>p-value</code>, i.e., the probability
of an observed or more extreme result assuming that the null hypothesis is
true. See <a href="https://en.wikipedia.org/wiki/P-value">wikipedia article on
p-value</a></p>
<p>Unfortunately, p-values are not useful - bottom line is that it doesn't say
anything about the importance of a result.</p>
<p><img src="2021-12-20/2021-12-20-11-33-09.png" alt="" /></p>
<p>See Frank Harrell's work.</p>
<p>p-values are a part of machine learning. </p>
<p>The outcome that we want from our models is whether they predict a practical
result or outcome. In Jeremy's critique of the temperature-R relationship
paper, he's </p>
<p>Another way to look at this set of problems is through the lens of outcomes
that you want from your model. He has a 4 step process. In the example, he's
looking at the objective of maximizing the 5 year profits of a hypothetical
insurance company. Next he looks at the levers, i.e., what can you control
which in the case of insurance it's the price of a policy for an individual.
Next he looks at the data that can be collected, i.e., the revenues and claims
and the impact those have on the profitability. He then ties the first thee
things: objective, levers, and data together in a model which learn how the
levers influence the objective. This is all discussed in this <a href="https://www.oreilly.com/radar/drivetrain-approach-data-products/">article that he
wrote in
2012</a></p>
<p>"Using data to produce actionable outcomes", i.e., don't just make a model to
predict crashes, instead have the model optimize the profit.</p>
<p>Deploying the bear detector (black, grizzly, teddy) reminds me of
<a href="https://streamlit.io/">Streamlit</a>. It might be a really interesting
exercise to build the bear model from the class and deploy it as a local
streamlit app (and perhaps think about what it would take to deploy it to
Azure as well).</p>
<p>A great <a href="https://medium.learningbyshipping.com/bicycle-121262546097">tribute by Steven
Sinofsky</a> to the
Apple Bicycle for the Mind. It would be great to create a modern poster for
this someday.</p>
<p><img src="2021-12-20/2021-12-20-14-07-06.png" alt="" /></p>
2021-12-192021-12-19T00:00:00+00:002021-12-19T00:00:00+00:00https://www.iunknown.com/2021-12-19/<p>Today, I'm starting to work on the 4th edition of the
<a href="https://github.com/fastai/fastai">fastai</a> course, and I'll be note-taking on
this blog. At the start Jeremy shows this lovely photo of the Mark 1
perceptron at Cornell circa 1961. It does a great job at showing the
complexity of the connections in a neural network:</p>
<p><img src="2021-12-19/2021-12-19-07-38-03.png" alt="" /></p>
<p>Some housekeeping things that are pretty cool that intersects with my day job
at Microsoft building tools for data scientists. </p>
<p>I'm using my <a href="https://github.com/jflam/ez">ez</a> to run the <code>fastai</code> notebooks
locally on my Windows machine which has an RTX2080 GPU. All I need to do is
run a single command: </p>
<pre data-lang="bash" style="background-color:#2b303b;color:#c0c5ce;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#bf616a;">$</span><span> ez env go git@github.com:jflam/fastai</span><span style="color:#bf616a;"> -n</span><span> .
</span></code></pre>
<p>You'll notice that I'm using my own <a href="https://github.com/jflam/fastai">fork</a> of
the <code>fastai</code> repo which contains only a aingle configuration file: <code>ez.json</code>
that <code>ez</code> uses to build and run the image in VS Code.
This is the entire contents of the <code>ez.json</code> file:</p>
<pre data-lang="json" style="background-color:#2b303b;color:#c0c5ce;" class="language-json "><code class="language-json" data-lang="json"><span>{
</span><span> "</span><span style="color:#a3be8c;">requires_gpu</span><span>": "</span><span style="color:#a3be8c;">true</span><span>",
</span><span> "</span><span style="color:#a3be8c;">base_container_image</span><span>": "</span><span style="color:#a3be8c;">fastdotai/fastai:latest</span><span>"
</span><span>}
</span></code></pre>
<p>After running that command, this is what <code>ez</code> created on my machine:</p>
<p><img src="2021-12-19/2021-12-19-07-53-47.png" alt="" /></p>
<p>It's a fully functional running Docker container with GPU support enabled and
VS Code is bound to it using the VS Code Remote Containers extension. There's
a fair amount of manual steps that would have been needed to get this running
and <code>ez</code> eliminates the need to do any of that - you get straight to the
course in a running <em>local</em> environment.</p>
<p>I'm also using GitHub Codespaces to view the notebooks for the book version of
the course. All you need to do is go to the
<a href="https://github.dev/fastai/fastbook">fastbook</a> GitHub repo and press the <code>.</code>
key to open up Codespaces in the browser to view the contents of the notebook:</p>
<p><img src="2021-12-19/2021-12-19-08-08-53.png" alt="" /></p>
<p>Of course, if you are able to, please support the authors by
<a href="https://www.oreilly.com/library/view/deep-learning-for/9781492045519/">purchasing</a>
a copy of the book.
{% end %}</p>
<p>Jerermy introduces his pedagogy for the class at the start, based on the work
of David Perkins. I love this image:</p>
<p><img src="2021-12-19/2021-12-19-08-19-21.png" alt="" /></p>
<p>Begin by "building state-of-the-art world-class models" as your Hello, World.</p>
<p>Jeremy and Sylvain wrote a paper on the <a href="https://arxiv.org/abs/2002.04688">fastai
library</a> which is the layer of software on
top of PyTorch that is used in the course.</p>
<p>While following along in the first video of the course, I realized that
Jeremy is running some of the cells in the notebooks from the <a href="https://github.com/fastai/fastbook">fastbook</a> repo. So I forked and copied the <code>ez.json</code> file into that
repo and was quickly able to reproduce his results using <code>ez</code>:</p>
<pre data-lang="bash" style="background-color:#2b303b;color:#c0c5ce;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#bf616a;">ez</span><span> env go</span><span style="color:#bf616a;"> -g</span><span> git@github.com/jflam/fastbook</span><span style="color:#bf616a;"> -n</span><span> .
</span></code></pre>
<p>A quick note - the <code>-n .</code> parameter tells <code>ez</code> to run the repo locally. <code>ez</code>
also supports running on Azure VMs using the same command. See the docs in the
<a href="https://github.com/jflam/ez">ez</a> for more details on the setup on Azure (it's
only 2 additional commands!)</p>
<p>This is a screenshot from my computer this morning after running the first
model in the course. You can see that I'm using the Outline feature in VS Code
notebooks to see an outline of the different sections from the first chapter
of the book:</p>
<p><img src="2021-12-19/2021-12-19-09-42-15.png" alt="" /></p>
<p>Terminology:</p>
<ul>
<li><em>classification</em> model predicts one of a number of discrete possibilities,
e.g., "dog" or "cat</li>
<li><em>regression</em> models predict a numeric (continuous?) quantity</li>
</ul>
<p><code>valid_pct=0.2</code> in the code means that it holds back 20% of the data to
validate the accuracy of the model. This is also the default in case you
forget to set it</p>
<p>a <em>learner</em> contains your data, your architecture and also a metric to
optimize for:</p>
<pre data-lang="python" style="background-color:#2b303b;color:#c0c5ce;" class="language-python "><code class="language-python" data-lang="python"><span>learn = </span><span style="color:#bf616a;">cnn_learner</span><span>(dls, resnet34, </span><span style="color:#bf616a;">metrics</span><span>=error_rate)
</span></code></pre>
<p>An <code>epoch</code> is looking at every item in the dataset once</p>
<p><code>accuracy</code> is another function which is define as <code>1.0 - error_rate</code></p>
<p>error_rate and accuracy are not good <em>loss functions</em> which is a bit
counter-intuitive as those are the values that humans care about, but it turns
out that they are poor loss functions which are used to tune the parameters in
the model across epochs</p>
<p>fastai uses the validation set to determine the accuracy or error rate of a
model</p>
<p>Remember that a model is parameters + architecture</p>
<p>Training, validation, test datasets - this is used for things like Kaggle</p>
<p>Actual performance is withheld from models so that you can avoid the
overfitting problem as well</p>
<p>In a time series you can't really create a validation dataset by random
sampling, instead you need to chop off the end, since that's really the goal -
to predict the future, not make predictions at random points in the past. We
need to have different sampling algorithms based on the nature of the data and
the predictions desired.</p>
<p>Discusses a case about loss functions vs. metrics. One way to think about
overfitting is a case where your model keeps getting better at making
predictions in the training dataset, but starts getting worse against the
validation dataset. This can be an indication of overfitting. Jeremy cautions
that this is different from changes in the loss function however, and he will
get into the mathematics behind this later when he discusses loss functions in
more detail.</p>
<p>Definition: <em>transfer learning</em> is using a pretrained model for a task
different from the one it was originally trained for. The <code>fine_tune()</code> method
called that because it is doing transfer learning. In the examples earlier
with resnet34, it was performing transfer learning against the model to get
the superior performance. It lets you use less data and less compute to
accomplish our goals.</p>
<p>Zeiler and Fergus published a paper in 2013 <a href="https://arxiv.org/abs/1311.2901">Visualizing and Understanding
Convolutional Networks</a>. It showed how
different layers in the network recognize initially simple patterns and then
become more specialized in later layers. I think this is done by activations
of different filters against an image, so that you can see the parts of the
image that a filter gets activated against. This paper gives a good mental
model for thinking about how filters can be generalized and how transfer
learning can take advantage of filters in earlier layers.</p>
<p>Sound detection can work by turning sounds into pictures and using CNNs to
classify them:</p>
<p><img src="2021-12-19/2021-12-19-22-16-17.png" alt="" /></p>
<p>Here's a really cool example of detecting fraudulent activity by looking at
traces of mouse movements and clicks and turning them into pictures (done by a
fastai student at Splunk - <a href="https://www.splunk.com/en_us/blog/security/deep-learning-with-splunk-and-tensorflow-for-security-catching-the-fraudster-in-neural-networks-with-behavioral-biometrics.html">blog that announced this
result</a></p>
<p><img src="2021-12-19/2021-12-19-22-15-22.png" alt="" /></p>
<p>What happens when you fine tune an existing model - does it perform worse on
detecting things that it used to do before the fine tuning dataset? In the
literature this is called <a href="https://en.wikipedia.org/wiki/Catastrophic_interference">catastrophic forgetting or catastrophic
interference</a>. To
mitigate this problem you need to continue to provide data for other
categories that you want detected during the fine tuning (transfer learning)
stage.</p>
<p>When looking for pretrained model, you can search for <code>model zoo</code> or
<code>pretrained models</code>.</p>
<p>He has a number of different categories: vision, text, tabular, recommendation
systems.</p>
<p>Recommendation systems == collaborative filtering</p>
<p>Recommendation != Prediction</p>
2021-12-182021-12-18T00:00:00+00:002021-12-18T00:00:00+00:00https://www.iunknown.com/2021-12-18/<a name="a1"></a>
<p>
Tim O'Reilly, one of our elder statesmen of the web, has written
a great <a href="https://www.oreilly.com/radar/why-its-too-early-to-get-excited-about-web3/">analysis article on
Web3</a>.
It is well worth reading the post in its entirety, as he does a really good
job at constructing arguments without being confrontational in his reasoning.
he does this by asking questions without presuming what the answers are. This
is probably the most balanced account of Web3 that I've read so far and well
worth your time.
<a href="https://www.iunknown.com/2021-12-18#a1" title="Direct link to this item.">#</a>
</p>
<a name="a2"></a>
<p>
I've been thinking a lot about the parallels between liquid chromatography and
espresso making. I found this <a href="https://www.chemistryviews.org/details/ezine/694285/Espresso__A_Three-Step_Preparation.html">article that delves into both the chemistry and
physics of espresso
brewing</a>.
<a href="https://www.iunknown.com/2021-12-18#a2" title="Direct link to this item.">#</a>
</p>
<a name="a3"></a>
<p>
While looking around for a project for the holidays, I've started thinking
about continuing to build my personal semantic search engine. The core idea is
to make a tool that makes it easier to remember and recall things that are
interesting to me. Part of that is searching my private data for things that
are interesting. I've already made pretty good progress in August on this. The
other part is building a browser extension that makes it easy to tag and take
notes on things that I'm reading and add those things to the index that my
search engine operates over. That feels like a good task for the holidays.
<a href="https://www.iunknown.com/2021-12-18#a3" title="Direct link to this item.">#</a>
</p>
<a name="a4"></a>
<p>
I've also been interested in autonomous agents for helping to manage
beer mode information. My gut tells me that these things likely won't help
in the long run, but they are nevertheless interesting to me. There are two
tools that I came across tonight:</p>
<ol>
<li><a href="https://mailbrew.com/">mailbrew</a> which is a service for delivering news
culled by agents that you configure into an email that shows up in your
inbox. This is pretty interesting as a tool as it lets you aggregate
different pieces of information into a personal newsletter. It's $5/month
which is also pretty reasonable.</li>
<li><a href="https://github.com/huginn/huginn">huginn</a> which is named after the crows
Huginn and Muninn who sat on Odin's shoulders and told him the news of the
world. This is kind of like a DIY mailbrew where all the information sits
on a server that you get to run it on. It's a DAG of agents (all written in
Ruby) that you can configure to do virtually anything. It also runs as a
Docker container to save you the trouble of setup. This feels like a lot of
work compared to mailbrew.</li>
</ol>
<a href="https://www.iunknown.com/2021-12-18#a4" title="Direct link to this item.">#</a>
</p>
<a name="a5"></a>
<p>
I found a way to split an MP3 into smaller files automatically using ffmpeg.
This is also the first time that I've ever used <code>ffmpeg</code> before and it did
a fantastic job on this task.</p>
<p><code>$ ffmpeg -i somefile.mp3 -f segment -segment_time 3 -c copy out%03d.mp3</code></p>
<p><a href="https://unix.stackexchange.com/questions/280767/how-do-i-split-an-audio-file-into-multiple">source</a>
<a href="https://www.iunknown.com/2021-12-18#a5" title="Direct link to this item.">#</a>
</p>
<a name="a6"></a>
<p>
Perhaps the greatest productivity hack ever created is <a href="https://github.com/jordwest/news-feed-eradicator/">News Feed
Eradicator</a>. I use this for
Twitter so that I still have the ability to read specific tweets, e.g., they
were linked from somewhere else or I can look up a specific user. But the
algorithmic feed is gone. It's <em>lovely</em>.
<a href="https://www.iunknown.com/2021-12-18#a6" title="Direct link to this item.">#</a>
</p>2021-12-142021-12-14T00:00:00+00:002021-12-14T00:00:00+00:00https://www.iunknown.com/2021-12-14/<a name="a1"></a>
<p>
There's long been an argument by crypto enthusiasts that we need crypto to
fight against the dastardly fees charged by Western Union and the like in the
3rd world. In this post by Patrick McKenzie (aka patio11) <a href="https://bam.kalzumeus.com/archive/more-than-you-want-to-know-about-gift-cards/">More than you want
to know about gift
cards</a>
it seems like there's a strong argument to be made for using gift cards to
work around the fees charged by Western Union?</p>
<blockquote>
<p>In this regard it is not merely important that they look attractive in a
birthday card but also that they’re available for cash everywhere, require
no identification or ongoing banking relationship to purchase, do not charge
a fee like e.g. Western Union, and can be conveyed over a text message or
phone call. They're not worse cash, they're better Tide in the informal
economy.</p>
</blockquote>
<a href="https://www.iunknown.com/2021-12-14#a1" title="Direct link to this item.">#</a>
</p>
<a name="a2"></a>
<p>
This morning on HN I found this course on <a href="https://www.pinecone.io/learn/nlp/">Natural Language Processing for
Semantic Search</a> by a startup called
pinecone. This is my current area of interest, which is why I created a
simple <a href="https://github.com/jflam/wine">wine semantic search engine</a> a while
ago to explore this area. Taking a look at a couple of chapters it definitely
looks interesting and worth a longer look over the holidays.
<a href="https://www.iunknown.com/2021-12-14#a2" title="Direct link to this item.">#</a>
</p>
<a name="a3"></a>
<p>
There's another post by someone who is trying to build a <a href="https://news.ycombinator.com/item?id=29551686">news
site</a> that is kind of like the
original Yahoo aggregator, but with the twist of having <em>sagas</em> which let you
follow a story as it progresses, e.g., salacious news like the Theranos trial
which unfolds over a long period of time. It looks like it is curated by the
poster though. I would love to combine the idea of sagas with some kind of AI
filter that is trained on my interests to pull tweets and news articles into a
personal feed for my own consumption. This way it is aligned with my interests
vs. the interests of the aggregator.
<a href="https://www.iunknown.com/2021-12-14#a3" title="Direct link to this item.">#</a>
</p>
<a name="a4"></a>
<p>
I listened to Professor Christensen on this podcast the year it came out
(2004!) and it left an indelible impression on me. Sadly, it looks like IT
Conversations no longer exists, and I found this <a href="http://web.archive.org/web/20130729212828id_/http://itc.conversationsnetwork.org/shows/detail135.html">archive of the
page</a>
created by the awesome folks at archive.org. I also copied it to this <a href="2021-12-14/Christensen-part1.mp3">part
1</a> and <a href="2021-12-14/Christensen-part2.mp3">part
2</a> so that I can find it again - just in
case. I highly recommend listening to this; the stories that Christensen tells
about his conversations with Andy Grove are wonderful and do a great job at
driving home the concepts of his theory of disruption. RIP.</p>
<p><img src="2021-12-14/2021-12-14-11-23-53.png" alt="" />
<a href="https://www.iunknown.com/2021-12-14#a4" title="Direct link to this item.">#</a>
</p>2021-12-132021-12-13T00:00:00+00:002021-12-13T00:00:00+00:00https://www.iunknown.com/2021-12-13/<a name="a1"></a>
<p>
This is an interesting take on the metaverse that I haven't seen before:</p>
<blockquote class="twitter-tweet">
<a href="https://twitter.com/x/status/1454151241785696256"></a>
</blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
<p>The idea that (metaverse : digital) is like (singularity : AI) is certainly a
possibility. As Shaan (with a healthy dose of unhelpful crypto speak)
correctly says, we've been on a rapid trend towards more a life in a <em>virtual
world</em> that is more detached from our physical world thanks to ever improving
technology. </p>
<p>Where I disagree with Shaan's tweet is how long this has beeng going on. It's
been going on for much longer than 20 years; from the creation of the printing
press, we have been on a path to ever increasing amounts of
media/digital/online in our life. We have been spending more of our time in
front of some other piece of technology and less time in the "real world".
When you are reading a book, watching TV, playing a video game, or wearing a
VR headset, you aren't in the "real world" - you can be doing those activities
from anywhere - your physical environment doesn't matter. You're <em>immersed</em> in
these experiences.</p>
<p>At what point does the value of the virtual world become greater to us than the
value of our physical world? To some extent, the pandemic has started pushing
our work to be more <a href="https://stratechery.com/2021/microsoft-and-the-metaverse/">online
work</a> and it's not
a huge leap to imagine that we are moving more towards a world where the
experience of being in an online meeting in the metaverse is better than the
experience of being in a real-life meeting. </p>
<p><img src="2021-12-13/2021-12-14-07-02-59.png" alt="" /></p>
<p>Perhaps Ben Thompson is right - the metaverse-as-a-place will start in
businesses who will buy this expensive technology for their employees, much
like how the PC revolution started. It has the characteristics of
<a href="https://www.christenseninstitute.org/disruptive-innovations/">disruption</a>; it
is worse on some dimension (e.g., the fidelity of the experience) that the
mainstream cares about but better on some dimension that the early adopters
care about (e.g., you don't need to live close to an office to go to work) -
and it's on a steeper slope of improvement.</p>
<p>I know I'll be watching this area closely and learning. It's tempting to want
to dismiss this because of the dystopian takes on this technology. But that's
not an excuse to ignore it or try to block it. Technology is chaotic neutral
and can't be un-invented. It's up to all of us to create a better experience
for ourselves using it.</p>
<div class="youtube">
<iframe
width=560 height=315
src="https://www.youtube.com/embed/cSp1dM2Vj48"
webkitallowfullscreen
mozallowfullscreen
allowfullscreen>
</iframe>
</div>
<a href="https://www.iunknown.com/2021-12-13#a1" title="Direct link to this item.">#</a>
</p>2021-12-122021-12-12T00:00:00+00:002021-12-12T00:00:00+00:00https://www.iunknown.com/2021-12-12/<a name="a1"></a>
<p>
That was a F1 championship for the ages; certainly the best one that I can
remember since I started watching a decade ago during the Vettel era. A bit
of luck certainly contributed to Max's win, but can we talk about just how
well the Red Bull team managed Max during the race? The call to pit for new
hard tires under the virtual safety car and the call to pit for new soft tires
under the safety car were clearly the calls that made the difference in a race
where it was clear that Lewis had the faster car. </p>
<p>Mercedes really need to look in the mirror here as what they needed to do was
cover off any pit stops that Max did. They will of course appeal to the FIA,
but I can't imagine them changing the title in the courts.</p>
<p>Something else to talk about: Sergio Perez. In the era of selfish F1 teammates
his sacrifice and ultimate retirement this weekend clearly enabled Max to get
not only pole position but possibly the race itself. His epic battle with
Lewis made up a huge gap that let Max back into contention in the race.</p>
<p>Regardless of what happens in the end, this was an epic end to an amazing
season. Both Lews and Max deserved to win this race. Lewis behaved like the
GOAT that he is and was so gracious in congratulating Max, gutting as it must
have been for him. It was also great to see, in the back of the paddock, this
scene with Anthony Hamilton and Jos Verstappen congratulating Max on his win.</p>
<p><img src="2021-12-12/2021-12-12-08-34-11.png" alt="" /></p>
<p>Also these scenes with the fathers consoling and congratulating their sons:</p>
<p><img src="2021-12-12/2021-12-12-08-20-01.png" alt="" /></p>
<p><img src="2021-12-12/2021-12-12-08-23-04.png" alt="" /></p>
<p>These are the human moments in sport, and I'm grateful to have been here to
see this.
<a href="https://www.iunknown.com/2021-12-12#a1" title="Direct link to this item.">#</a>
</p>2021-12-112021-12-11T00:00:00+00:002021-12-11T00:00:00+00:00https://www.iunknown.com/2021-12-11/<a name="a1"></a>
<p>
A recent interview with Anders Hejlsberg!</p>
<p><img src="2021-12-11/2021-12-11-01-09-01.png" alt="Anders Hejlsberg" /></p>
<div class="youtube">
<iframe
width=560 height=315
src="https://www.youtube.com/embed/K3qf8gRFESU"
webkitallowfullscreen
mozallowfullscreen
allowfullscreen>
</iframe>
</div>
<p>I found this on <a href="https://news.ycombinator.com/item?id=29514900">Hacker News</a></p>
<ul>
<li>His brother is one of the interviewers</li>
<li>They started programming 40 years ago in Copenhagen</li>
<li>Started using high school computer in the 1970s</li>
<li>Started by implementing a programming language, Turbo Pascal</li>
<li>Cut his teeth by adding extensions to existing language to make it useful</li>
<li>C# was first language designed from scratch</li>
<li>"You can always add but you can never take away"</li>
<li>The perfect programming language is one with no users(!)</li>
<li>V1.0 is the only greenfield </li>
<li>Game of learning to say no vs. yes</li>
<li>Language features asks come from people with an instance of a problem - he
tries to find the class of problems that it belongs to</li>
<li>HTML is an incomprehensible mess :)</li>
<li>TypeScript was the first foray of a project that, from the onset was open
source</li>
<li>Wanted Roslyn to be open source, but C# and .NET was not open source</li>
<li>Roslyn was not built as open source, was open sourced later</li>
<li>Open development - 2014 moved to GitHub - everything is on GitHub is the
next step, e.g., design notes - close to users</li>
<li>Anders participates in C# design committee, but Mads has been running it for
the last decade(!)</li>
<li>Multiple inheritence - usefulness does not outweigh the downsides of
additional complexity</li>
<li>If he could change one thing in C# he would have nullability and
value/reference types as orthogonal issues, e.g., you cannot have
non-nullable reference types</li>
<li>Tony Hoare called inventing null his billion dollar mistake</li>
<li>Functional programming languages do not enable circular reference data types
(e.g., double-linked list or trees with back-pointers)</li>
<li>Opting into nullability in specific areas</li>
<li>Don Syme did most of the implementation of generics in .NET 2.0</li>
<li>He regrets dynamic in C# 4.0</li>
<li>He likes the work done in C# 5.0 for async/await</li>
<li>TypeScript - how solve the nullability problem. He is very happy with that
result.</li>
<li>Turbo Pascal 1.0 symbol table was a linked list(!)</li>
<li>He read <a href="http://www.cl72.org/110dataAlgo/Algorithms%20%20%20Data%20Structures%20=%20Programs%20%5BWirth%201976-02%5D.pdf">Algorithms + Data Structures =
Programs</a>
by Niklas Wirth - learned about hash tables and then reimplemented the
symbol table in Turbo Pascal 2.0 using them <a href="2021-12-11/AlgoDataProgWirth.pdf">local copy in case this
disappears from the web</a></li>
<li>He learned by trial and error without formal background</li>
</ul>
<a href="https://www.iunknown.com/2021-12-11#a1" title="Direct link to this item.">#</a>
</p>
<a name="a2"></a>
<p>
I like it when things that I read and don't agree with get me thinking about
an idea. This post by David Perell spent some time rattling around in my
subconscious:</p>
<blockquote class="twitter-tweet">
<a href="https://twitter.com/x/status/1468675151407497219"></a>
</blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
<p>I didn't agree with it because almost all software that I use today requires
me to Google something to figure out an obscure feature - there are <em>always</em>
obscure features especially in software that I don't use all the time. If I
don't know how to do something already using the UI, I would immediately
Google it and follow the directions on how to accomplish the task.</p>
<p>I was out riding my bike today, and listening to Neal Stephenson being
interviewed by Lex Fridman. During the conversation they talked about Google
and search. The idea that popped into my head then was that UI is great for
<em>idiomatic</em> operations and search is great for everything else.</p>
<div class="youtube">
<iframe
width=560 height=315
src="https://www.youtube.com/embed/xAfdSak2fs8"
webkitallowfullscreen
mozallowfullscreen
allowfullscreen>
</iframe>
</div>
<p>The example in my head was VS Code. The idiomatic operations are provided by
the UI, e.g., vi keybindings for navigating a document, tabs for managing
multiple documents, a file explorer for viewing the contents of your project,
a debugging tab for viewing the state of variables in the debugger etc. IMHO
the real innovation in VS Code is the command palette which lets you search
for the command that you want - this avoids over-complicating the UI with
endless toolbars. VS Code users quickly learn to use the fuzzy search in the
command palette to find the command that they are looking for. They even have
the ability to bind those commands to a custom keybinding to turn it into an
idiomatic operation if they use that command often enough.</p>
<p>I think this strikes the right balance between a rich featureset and a simple,
idiomatic UI. Unfortunately, it seems that in our attempt to simplify
everything for the novice user, we have wound up with UIs that have way too
many layers of UI (I'm looking at you, Microsoft Teams).</p>
<p>I wonder what a better experience for search would be on mobile though? A
command palette is a lot more difficult to use on a phone.
<a href="https://www.iunknown.com/2021-12-11#a2" title="Direct link to this item.">#</a>
</p>2021-12-102021-12-10T00:00:00+00:002021-12-10T00:00:00+00:00https://www.iunknown.com/2021-12-10/<p>There is some good news coming out of South Africa today - it looks like the
probability of severe outcomes from Omicron is lower than Delta:</p>
<p><img src="2021-12-10/2021-12-10-23-58-32.png" alt="" /></p>
<p>However, this is not the way to handle the Delta and nascent Omicron wave in
USA:</p>
<p><img src="2021-12-10/2021-12-10-23-54-06.png" alt="" /></p>
2021-12-092021-12-09T00:00:00+00:002021-12-09T00:00:00+00:00https://www.iunknown.com/2021-12-09/<p>OK. We have some pretty good news coming out of South Africa on Omicron - it
looks like the probability of severe outcomes from Omicron are lower than
Delta!</p>
<p><img src="2021-12-09/2021-11-10-20-28-36.png" alt="" /></p>
<p>Unfortunately, it looks like we're trending the wrong way on Delta in the US:</p>
2021-12-082021-12-08T00:00:00+00:002021-12-08T00:00:00+00:00https://www.iunknown.com/2021-12-08/<a name="a1"></a>
<p>
Our talk yesterday was about using Transformer models to win a <a href="https://www.kaggle.com/c/riiid-test-answer-prediction">Kaggle
competition</a> at a
training cost of less than $50 on Azure. Fortunately, Alon understands what
Transformer models are, and he did a wonderful job of summarizing what
Transformer model is in about 5 minutes.</p>
<p>I really wanted to learn more about Transforrmer models; I've been treating
them mostly as a black box and using pre-trained Transformer models to make
cool things like my <a href="https://github.com/jflam/wine">semantic wine review search
engine</a>. Coincidentally, this morning someone
from work linked this tweet:</p>
<blockquote class="twitter-tweet">
<a href="https://twitter.com/x/status/1468370605229547522?s=20"></a>
</blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
<p>and he subsequently found a link to this fantastic explanation of Transformer
models called <a href="https://e2eml.school/transformers.html">Transformers From
Scratch</a> written by Brandon Roher (hi
Brandon!) I'm still working through the piece but one thing that I had not
understood before was how matrix multiplication and one-hot encoded vectors
are used to do <em>branch-free selection of rows from a table</em>. Let that sink in
for a minute: how would you do that WITHOUT COMPARISONS and BRANCHING?
🤯 </p>
<p>Apparently this is one of the key insights from Transformers. There's a whole
lot of branching and comparing in this Python list comprehension:</p>
<p><code>[x for x in ['fizz','buzz','fizz','fizz'] if x == 'fizz']</code>
<a href="https://www.iunknown.com/2021-12-08#a1" title="Direct link to this item.">#</a>
</p>
<a name="a2"></a>
<p>
Continuing to take notes on Brandon's tutorial on the flight home. There is a
concept of <em>selective masking</em> that is in the original Transformers paper.
Here is an <a href="https://nlp.seas.harvard.edu/2018/04/03/attention.html">annotated Attention is All You Need
paper</a>. </p>
<p>In his explanation, there are a large number of unhelpful predictions where
there is a 50:50 probability of some outcome in his highly simplified
example. Masking is a concept to drive low probability events to zero to
eliminate them from consideration, and is the central idea in Transformers.</p>
<p>He summarizes the first part of his explanation through three ideas:</p>
<ol>
<li>
<p>Turning everything into matrix multiplication is a good idea. As I
observed above, being able to select rows out of a table (or matrix) by
doing nothing more than matrix multiplication is incredibly efficient.</p>
</li>
<li>
<p>Each step during training must be differentiable, i.e., each adjustment
to a parameter must result in a calculation of the model error / loss
function.</p>
</li>
<li>
<p>Having <em>smooth gradients</em> is really important, He has a nice analogy
between ML gradients and hills/mountains/valleys in the real world. He
describes the art of data science in ensuring that the gradients are
smooth and "well-conditioned", i.e., they shouldn't quickly drop to zero
or rise to infinity.</p>
</li>
</ol>
<a href="https://www.iunknown.com/2021-12-08#a2" title="Direct link to this item.">#</a>
</p>2021-12-072021-12-07T00:00:00+00:002021-12-07T00:00:00+00:00https://www.iunknown.com/2021-12-07/<a name="a1"></a>
<p>
Today was talk day in Las Vegas. I will have a lot more details to write about
the talk later, but giving this (non-recorded) talk was a super-fun experience
both for me, and my co-presenter <a href="https://www.linkedin.com/in/alonbochman/">Alon
Bochman</a>. We had a great
conversation afterwards, and among the many things we talked about was the
importance of Beer Mode to me. I was reminiscing about the early days of the
Ruby community that I was so fortunate to have been a part of and how the
serendipitous conversations I had at those early RubyConfs forever changed my
life.</p>
<p>Speaking of serendipity, Hacker News is one of my best sources for random Beer
Mode input. I saw <a href="https://news.ycombinator.com/item?id=29476545">Rockstar: a language for programs that are also hair metal
power ballads</a> tonight on HN
and in the comments (unlike YouTube, <em>always</em> read the comments on HN), I
discovered this incredible talk by <a href="https://dylanbeattie.net/">Dylan Beattie</a>
the guy who spec'd, implemented and performed a program written in Rockstar.</p>
<p>This instantly became one of my favorite talks of all time. It looks at
programming as an art form - especially given that all his examples which
range from Conway's Game of Life through to the mathematics behind Mendelbrot
plots, the esoteric world of programming <em>quines</em> (programs that print
themselves as output) and <em>polyquines</em> which are beyond incredible, and
finally his performance of a program written in Rockstar.</p>
<div class="youtube">
<iframe
width=560 height=315
src="https://www.youtube.com/embed/gdSlcxxYAA8"
webkitallowfullscreen
mozallowfullscreen
allowfullscreen>
</iframe>
</div>
<p>Watching this reminded me of <a href="https://gilesbowkett.com/">Giles Bowkett's</a>
incredible Archaeopteryx talk that I was fortunate enough to have watched live
at RubyConf Salt Lake City almost a decade ago. He was featured recently in
another book that I love called <a href="https://www.calnewport.com/books/so-good/">So Good They Can't Ignore
You</a> by Cal Newport. This is
a masterful talk that was also a piece of performance art.</p>
<div class="youtube">
<iframe
width=560 height=315
src="https://www.youtube.com/embed/0XDawYp9mKY"
webkitallowfullscreen
mozallowfullscreen
allowfullscreen>
</iframe>
</div>
<p>This sent me down memory lane thinking about incredible talks that I have
seen in the past. This talk by Guy Steele Jr. was and remains at the top
of my list of most incredible performance art talks that I have seen. This
also relates somewhat to Ruby as I attended my one and only OOSPLA in 2005
just before I attended my first RubyConf in 2005 as part of a "learning
vacation" that I took back then. So good - it starts off super weird but
I promise you it's worth sticking through to the end.</p>
<div class="youtube">
<iframe
width=560 height=315
src="https://www.youtube.com/embed/lw6TaiXzHAE"
webkitallowfullscreen
mozallowfullscreen
allowfullscreen>
</iframe>
</div>
<a href="https://www.iunknown.com/2021-12-07#a1" title="Direct link to this item.">#</a>
</p>
<a name="a2"></a>
<p>
I finished implementing the zola serve preview in my
<a href="https://www.youtube.com/watch?v=0XDawYp9mKY">vscode-zola</a> VS Code extension.
It contains everything that I know (which isn't very much) about writing
extensions, JavaScript and TypeScript. I also learned how to package my
extension into a VSIX using the
<a href="https://code.visualstudio.com/api/working-with-extensions/publishing-extension">vsce</a>
tool so now I can write using VS Code and not have to first build and run my
extension from another VS Code! If I find that I like how I use it over the
next few days, I'll publish it to the VS Code Marketplace and post a link to
the zola community.
<a href="https://www.iunknown.com/2021-12-07#a2" title="Direct link to this item.">#</a>
</p>
2021-12-062021-12-06T00:00:00+00:002021-12-06T00:00:00+00:00https://www.iunknown.com/2021-12-06/<a name="a1"></a>
<p>
I'm getting ready to fly to Las Vegas for my first talk in ages: <a href="https://www.azureaiconf.com/#!/session/Train%20a%20Kaggle%20winner%20for%20under%20$50%20on%20Azure/4934">Train a
Kaggle Winner Under $50 on
Azure</a>.
One thing that I'm planning to share with my audience is this amazing Derek
Sivers TED Talk on how to start a movement; it could just as easily be how to
start an Open Source project as well! </p>
<p>At my talk, I'm going to be releasing a project that I've been working on for
a while: <a href="https://github.com/jflam/ez">ez</a> that hopefully makes using Azure as
a powerful <em>personal computer</em> much easier than it is today.</p>
<div class="youtube">
<iframe
width=560 height=315
src="https://www.youtube.com/embed/V74AxCqOTvg"
webkitallowfullscreen
mozallowfullscreen
allowfullscreen>
</iframe>
</div>
<a href="https://www.iunknown.com/2021-12-06#a1" title="Direct link to this item.">#</a>
</p>2021-12-042021-12-04T00:00:00+00:002021-12-04T00:00:00+00:00https://www.iunknown.com/2021-12-04/<a name="a1"></a>
<p>
Beer mode is extremely important to me: it's how I discover new ideas
serendipitously. Twitter is a great place for beer mode activities, but it's
also a toxic cesspool full of shitposting and virtue signaling. It's
entertaining, exhausting, and distracting.</p>
<p>Fortunately, there are a small number of users who consistently post great
content focused on an area that I'm interested in. They are, essentially,
"professional tweeters". Or, if you prefer terms from a bygone era, they are
<em>micro-bloggers</em>. </p>
<p>You can configure tweetdeck, which is the only Twitter client you should
use, as it lets you configure exactly how you want to view tweets and you
can remove the algorithmic timeline (and ads) from it entirely. At first, I
configured tweetdeck to follow individual users which worked great and cut
down the noise considerably. </p>
<p>But I still saw <em>replies</em> from those users. While that isn't necessarily a bad
thing, it's really random when you see it in a column as the context isn't
really there. I really prefer starting from the top of a thread and then
seeing any replies that they may be making to other users on their thread.
The trick that I learned to do this is to create search columns instead of
user columsn. You just need to use this format for the advanced search
syntax:</p>
<p><code>from:user_name -filter:replies</code></p>
<p>That's it! Here's a screenshot of how this looks in tweetdeck
<a href="https://www.iunknown.com/2021-12-04#a1" title="Direct link to this item.">#</a>
</p>
<img src="https://www.iunknown.com/processed_images/1f846145448480c000.png" />
2021-12-032021-12-03T00:00:00+00:002021-12-03T00:00:00+00:00https://www.iunknown.com/2021-12-03/<a name="a1"></a>
<p>
Still thinking about how to optimize this blog by capturing screenshots of
things like tweets, Instagram posts, or YouTube thumbnails. While it is
certainly possible to do all of this manually with existing OS screenshotting
tools, it would certainly be more efficient to remove the friction from the
process by simply working with links.</p>
<p>An idea that I had this morning was to use a headless browser and some
automation to capture tweets, YouTube videos etc. Ideally this is something
that can be extensibile by other motivated contributors.</p>
<p>There is some prior art in this area, as this
<a href="https://www.labnol.org/internet/create-twitter-screenshots/13842/">post</a>
discusses. There is also a Twitter screenshots Chrome extension by the same
guy that created <a href="https://screenshot.guru">screenshot guru</a>. <a href="https://github.com/premieroctet/screen-guru">GH
Repo</a>
<a href="https://www.iunknown.com/2021-12-03#a1" title="Direct link to this item.">#</a>
</p>
<a name="a2"></a>
<p>
David Perell continues to deliver value to me. In this tweet, he advocates for
studying debate as a way to better frame ideas. I've long thought about this
as "not being mired in the details of an idea", but I can see how this is also
about jumping to conclusions. For example focusing on a detail implies you
know that the detail is somehow a foregone conclusion already, instead of
exploring and convincing others about the problem. Framing the problem is
something that I want to get better at, as, as David so concisely describes,
"... the highest leverage thing to do".</p>
<blockquote class="twitter-tweet">
<a href="https://twitter.com/x/status/1316572267078393857"></a>
</blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
<a href="https://www.iunknown.com/2021-12-03#a2" title="Direct link to this item.">#</a>
</p>2021-12-022021-12-02T00:00:00+00:002021-12-02T00:00:00+00:00https://www.iunknown.com/2021-12-02/<a name="a1"></a>
<p>
Today's morning read is a wonderful essay that hit the top of
<a href="https://news.ycombinator.com/item?id=29416606">HN</a> titled <a href="https://apenwarr.ca/log/20211201">100 years of
whatever this will be</a>. The key thing that
<a href="https://www.linkedin.com/in/apenwarr/">Avery Pennarun</a> talks about is the
importance of centralized regulation in distributed systems. He also talks
about just how hard it is to build a reliable distributed system from his
perspective of being the co-founder of <a href="https://tailscale.com/">TailScale</a>. He
also evokes (with lots of examples) the observation that decentralized markets
trend towards chaos over time and why it's important to centrally regulate
them.</p>
<blockquote>
<p>The job of regulation is to stop distributed systems from going awry.
Because distributed systems always go awry.</p>
</blockquote>
<p>He references another essay <a href="https://www.jofreeman.com/joreen/tyranny.htm">The Tyranny of
Structurelessness</a> that says
"if you don't have an explicit hierarchy you have an implicit one" and then
brilliantly applies it to look at why your distributed system can fail.</p>
<p>The rant about technology at the start is awesome as well, an example:</p>
<blockquote>
<p>IT security has become literally impossible: if you install all the patches,
you get SolarWinds-style supply chain malware delivered to you
automatically. If you don't install the patches, well, that's worse. Either
way, enjoy your ransomware. </p>
</blockquote>
<p>Worth noting that this is a thinly veiled takedown of the DeFi and crypto
movements in general and he accuses them of making handwavy arguments around
the reliability of those systems ("it's decentralized so it can't fail!")</p>
<p>Go read it. I'll wait.
<a href="https://www.iunknown.com/2021-12-02#a1" title="Direct link to this item.">#</a>
</p>
<a name="a2"></a>
<p>
I'm really happy with rebooting this blog using Cloudflare Pages. In an
attempt to build a more interesting site with interactive content (e.g.,
embedded YouTube videos, Twitter and Linked in blocks etc.) I've found that
the size of the site (and the bloated-ness) of the site has increased
dramatically. It's 100% due to how I'm using JavaScript to embed those
external services. This is a
<a href="https://tools.pingdom.com/#5f5f1784e7c00000">report</a> that I just ran this
morning:</p>
<p><img src="2021-12-02/2021-12-02-11-28-16.png" alt="" /></p>
<p>I think that in the future, I need to teach <code>vscode-zola</code> how to embed
an image of, say the YouTube video, the Twitter post or the Instagram post
with a link to the original instead of doing these crazy embeddings. The
fact that my web page is 6.4MB is <em>inconceivable</em>.
<a href="https://www.iunknown.com/2021-12-02#a2" title="Direct link to this item.">#</a>
</p>2021-12-012021-12-01T00:00:00+00:002021-12-01T00:00:00+00:00https://www.iunknown.com/2021-12-01/<a name="a1"></a>
<p>
Continued to listen to Tim's interview with <a href="https://andrewchen.com/">Andrew
Chen</a> today and learned about his new book. In the
interview he talks about how he uses Twitter as a way to source writing ideas.
Tim called it "his MVP for writing" which makes a ton of sense. I also learned
that Andrew is writing a new book called the <a href="https://www.amazon.com/The-Cold-Start-Problem/dp/B08MKNHSWC/">Cold Start
Problem</a> (which
of course is why he's on Tim's podcast). It also explains why he started the
podcast with a great story about how coupons solved the cold start problem
from over 100 years ago!</p>
<p>I love how he's building viral promotional campaign for his book. </p>
<p>Step 1: canvas your audience to engage them on the content:</p>
<blockquote class="twitter-tweet">
<a href="https://twitter.com/x/status/1465892860360683526"></a>
</blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
<p>Step 2: publish excerpts on different types of social media to non-overlapping
audiences. <em>Update:</em> I just realized that these are stories about companies
and not where those excerpts are going to get published (to be fair, I only
remembered LinkedIn and YouTube - publishing a chapter on Tinder would be ...
interesting 😄). Regardless, I stand by the observation that publishing
excerpts on different mediums would be an interesting experiment - YouTube
would be interesting.</p>
<blockquote class="twitter-tweet">
<a href="https://twitter.com/x/status/1465921554152181762"></a>
</blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
<p>Step 3: profit!
<a href="https://www.iunknown.com/2021-12-01#a1" title="Direct link to this item.">#</a>
</p>
<a name="a2"></a>
<p>
<a href="https://www.fredhutch.org/en/faculty-lab-directory/bedford-trevor.html">Trevor
Bedford</a>
is one of the best academic sources for information on the SARS-CoV-2 virus on
Twitter. Yesterday he published a thread that explains the difference between
transmissibility (early results say that Omicron has 3-5X the transmissibility
of Delta) and immune escape.</p>
<blockquote class="twitter-tweet">
<a href="https://twitter.com/x/status/1466076797670363140"></a>
</blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
<p>The interesting thing is, that in a heavily vaccinated population, a virus
with high immune escape but low intrinsic (R0) transmissibility can out-compete
a virus with higher intrinsic transmissibility. This seems to be the case
with Omicron based on early data.</p>
<p>But all is not necessarily good here, as high immune escape viruses can
target existing vaccinated populations more effectively.
<a href="https://www.iunknown.com/2021-12-01#a2" title="Direct link to this item.">#</a>
</p>2021-11-302021-11-30T00:00:00+00:002021-11-30T00:00:00+00:00https://www.iunknown.com/2021-11-30/<a name="a1"></a>
<p>
I like to listen to podcasts during my morning job as an Uber driver for my
kids. Today was <a href="https://tim.blog/2021/11/30/andrew-chen/">Andrew Chen being interviewed by Tim
Ferris</a>, and in the first 15 minutes
there were two wonderful anecdotes from it.</p>
<p>The first is <a href="https://www.amazon.com/Life-Advertising-Scientific-Classics-Library/dp/0844231010">My Life in
Advertising</a>
which describes some of the origins for common advertising techniques today.
One I loved was the story around the invention of the coupon which helped to
solve the chicken-and-egg problem that product people had at the turn of the
century. Retailers wouldn't stock your product because customers were not
asking for it. But customers wouldn't ask for it if they didn't see it on the
store shelves. So Claude Hopkins invented the coupon - and ran ads in the
local newspaper. Then he would go around to all the different retailers to
stock the product and tell them that about the coupon in a future edition of
the newspaper and how they would have angry customers trying to redeem the
coupon if they didn't buy some stock of the product. Demand generation!</p>
<p><a href="https://www.amazon.com/Life-Advertising-Scientific-Classics-Library/dp/0844231010"><img src="2021-11-30/2021-11-30-07-53-09.png" alt="My Life in Advertising Book" /></a></p>
<p>The second was how <a href="https://www.linkedin.com/in/seanellis/">Sean Ellis</a> in the
early days of SV startups would go around talking to young founders and
explain how he could help them "with their marketing". The negative
connotations around the word would invariably send the wrong impression about
the work that he <em>really</em> did, which was helping companies grow. So he
invented the term "growth hacking" to describe what he does. Brillaint.
<a href="https://www.iunknown.com/2021-11-30#a1" title="Direct link to this item.">#</a>
</p>
<a name="a2"></a>
<p>
Feature idea: add an last updated (human readable time) byline to the top of
the blog.
<a href="https://www.iunknown.com/2021-11-30#a2" title="Direct link to this item.">#</a>
</p>
<a name="a3"></a>
<p>
Andrew Chen has a <a href="https://andrewchen.com/">blog</a> of sorts, which is now
called a "newsletter" these days. For his job as a VC, it's all about the deal
flow and writing content helps to attract deal flow. What's cool is that he's
been doing it since 2005. A complete list of his
<a href="https://andrewchen.com/list-of-essays/">essays</a>.
<a href="https://www.iunknown.com/2021-11-30#a3" title="Direct link to this item.">#</a>
</p>
<a name="a4"></a>
<p>
<a href="https://twitter.com/shreyas">Shreyas Doshi</a> is one of my favorite people on
Twitter, and one that has earned a spot in my TweetDeck columns (I don't use
algorithmic feeds for my own sanity). He recently started writing in public
about his idea about different types of people in organizations, which led to
this excellent summary by Sam Higham:</p>
<blockquote class="twitter-tweet">
<a href="https://twitter.com/x/status/1465681344709775363"></a>
</blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
<p>If I'm honest with myself, I've been in every one of these roles over my
career. The other important observation is that a team needs a mix of these
people too!
<a href="https://www.iunknown.com/2021-11-30#a4" title="Direct link to this item.">#</a>
</p>
<p>I cannot resist a great Feynmann story, and this one by <a href="https://paulsteinhardt.org/">Paul
Stenhardt</a> on <a href="https://nautil.us/issue/108/change/what-impossible-meant-to-richard-feynman">What Impossible Meant to Richard
Feynmann</a>
was a great story! <em>Impossible</em> to Feynmann is a compliment. <em>Stupid</em> is
something applied not just to others but to himself as well.</p>
2021-11-292021-11-29T00:00:00+00:002021-11-29T00:00:00+00:00https://www.iunknown.com/2021-11-29/<a name="a1"></a>
<p>
This is a new post for tomorrow. Placeholder to remind me to fix the timezone
bug that let me create this on 11/28 😄 <strong>Update:</strong> fixed.
<a href="https://www.iunknown.com/2021-11-29#a1" title="Direct link to this item.">#</a>
</p>
<a name="a2"></a>
<p>
While learning about Jack Twitter's retirement on HN today, I learned about
<a href="https://apps.apple.com/us/app/fenix-for-twitter/id1437821840">Fenix</a> which
looks like a TweetDeck clone with better aesthetics. It's available for iOS
iPadOS and MacOS.
<a href="https://www.iunknown.com/2021-11-29#a2" title="Direct link to this item.">#</a>
</p>
<a name="a3"></a>
<p>
To implement the permalink feature in
<a href="https://github.com/jflam/vscode-zola">vscode-zola</a>, I'll need to implement a
stateful <code>tera</code> template as described by the
<a href="https://tera.netlify.app/docs/#data-structures">docs</a>. It looks pretty
straightforward. Done! 😄
<a href="https://www.iunknown.com/2021-11-29#a3" title="Direct link to this item.">#</a>
</p>
<a name="a4"></a>
<p>
<a href="https://nixos.org/">Nix</a> looks like an interesting tool. I just heard about
it from HN in this <a href="https://blog.replit.com/nix-vs-docker">post</a> by repl.it
folks talking about Docker vs. Nix.
<a href="https://news.ycombinator.com/item?id=29387137">HN comments</a> are pretty
critical and damning of the technology. I did not know that it predated Docker
by a decade(!)</p>
<p>The claim is that Nix does a better job at reproducible builds. Crucially, Nix
does not use containers, rather it does everything by isolating using
environment variables. This might be an interesting way to avoid the whole
"must install Docker" thing that holds people back from reproducible
environments. The repl.it team seems focused on moving from Docker to Nix, and
providing packages via Nix. </p>
<p>Here's an early <a href="https://blog.replit.com/nix">post</a> from the repl.it team
describing how they've been migrating away from a single massive Docker image
to using Nix. They make 30,000 packages available in a single 1TB share that
is mounted into every container. Users define a <code>shell.nix</code> file that declares
dependencies that are then satisfied by the <code>nix-shell</code> tool.</p>
<p>A quick look at this thing though and it appears to be another package system
with packages (over 60K) provided by various maintainers. Not sure what the
value would be, say, over the official Nvidia pytorch containers, for example.
It seems like the risk is not worth it.
<a href="https://www.iunknown.com/2021-11-29#a4" title="Direct link to this item.">#</a>
</p>
2021-11-282021-11-28T00:00:00+00:002021-11-28T00:00:00+00:00https://www.iunknown.com/2021-11-28/<a name="a1"></a>
<p>
Writing a VS Code extension requires understanding how activation works and
where state is stored. The <a href="https://code.visualstudio.com/api/references/activation-events">Activation
Events</a> page
in the documentation has a good explanation of how it works. The default
sample uses only the <code>onCommand</code> event binding which is not what I need for my
extension (and actually caused me quite a lot of confusion).</p>
<p>Instead, I really need to have it activate when a workspace contains a zola
blog. the <code>workspaceContains</code> event uses a glob pattern to look for a file of
interest. I think that <code>**/*.config.toml</code> is probably good enough for now, and
I could even not activate the extension if I find that it doesn't have the
right parameters inside the file.
<a href="https://www.iunknown.com/2021-11-28#a1" title="Direct link to this item.">#</a>
</p>
<a name="a2"></a>
<p>
<code>vscode-zola</code> now supports emitting shortcodes based on URIs copied from the
clipboard. For most cases where I copy a URI for YouTube, Twitter, or
Instagram content, the extension will emit the proper <code>zola</code> shortcodes and
embed the content within the page, giving a much nicer rendering experience
for the reader.</p>
<p>Here's a This Triathlon Life YouTube video that I watched earlier today.
Eric and Laura are like characters in a TV show that I watch regularly, usually
when I'm riding my bike on the trainer:</p>
<div class="youtube">
<iframe
width=560 height=315
src="https://www.youtube.com/embed/rgHEmK2mE7Q"
webkitallowfullscreen
mozallowfullscreen
allowfullscreen>
</iframe>
</div>
<p>Charlie's moved on from Redmond and he's got a temporary home for his cars:</p>
<blockquote class="twitter-tweet">
<a href="https://twitter.com/x/status/1462284494258405384"></a>
</blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
<p>I didn't know this history of grep before - these kinds of stories are what
make YouTube great:</p>
<div class="youtube">
<iframe
width=560 height=315
src="https://www.youtube.com/embed/NTfOnGZUZDk"
webkitallowfullscreen
mozallowfullscreen
allowfullscreen>
</iframe>
</div>
<p>Paula vs. Eric in a Specialized Tarmac vs. Epic showdown:</p>
<blockquote class="instagram-media" data-instgrm-captioned
data-instgrm-permalink="https://www.instagram.com/p/CW1lrUvvSry/?utm_source=ig_embed&utm_campaign=loading"
data-instgrm-version="14"
style=" background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:540px; min-width:326px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);">
<div style="padding:16px;">
<a href="https://www.instagram.com/p/CW1lrUvvSry/?utm_source=ig_embed&utm_campaign=loading"
style=" background:#FFFFFF; line-height:0; padding:0 0; text-align:center; text-decoration:none; width:100%;"
target="_blank">
<div style=" display: flex; flex-direction: row; align-items: center;">
<div
style="background-color: #F4F4F4; border-radius: 50%; flex-grow: 0; height: 40px; margin-right: 14px; width: 40px;">
</div>
<div style="display: flex; flex-direction: column; flex-grow: 1; justify-content: center;">
<div
style=" background-color: #F4F4F4; border-radius: 4px; flex-grow: 0; height: 14px; margin-bottom: 6px; width: 100px;">
</div>
<div
style=" background-color: #F4F4F4; border-radius: 4px; flex-grow: 0; height: 14px; width: 60px;">
</div>
</div>
</div>
<div style="padding: 19% 0;"></div>
<div style="display:block; height:50px; margin:0 auto 12px; width:50px;">
<svg width="50px" height="50px" viewBox="0 0 60 60" version="1.1" xmlns="https://www.w3.org/2000/svg"
xmlns:xlink="https://www.w3.org/1999/xlink">
<g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g transform="translate(-511.000000, -20.000000)" fill="#000000">
<g>
<path
d="M556.869,30.41 C554.814,30.41 553.148,32.076 553.148,34.131 C553.148,36.186 554.814,37.852 556.869,37.852 C558.924,37.852 560.59,36.186 560.59,34.131 C560.59,32.076 558.924,30.41 556.869,30.41 M541,60.657 C535.114,60.657 530.342,55.887 530.342,50 C530.342,44.114 535.114,39.342 541,39.342 C546.887,39.342 551.658,44.114 551.658,50 C551.658,55.887 546.887,60.657 541,60.657 M541,33.886 C532.1,33.886 524.886,41.1 524.886,50 C524.886,58.899 532.1,66.113 541,66.113 C549.9,66.113 557.115,58.899 557.115,50 C557.115,41.1 549.9,33.886 541,33.886 M565.378,62.101 C565.244,65.022 564.756,66.606 564.346,67.663 C563.803,69.06 563.154,70.057 562.106,71.106 C561.058,72.155 560.06,72.803 558.662,73.347 C557.607,73.757 556.021,74.244 553.102,74.378 C549.944,74.521 548.997,74.552 541,74.552 C533.003,74.552 532.056,74.521 528.898,74.378 C525.979,74.244 524.393,73.757 523.338,73.347 C521.94,72.803 520.942,72.155 519.894,71.106 C518.846,70.057 518.197,69.06 517.654,67.663 C517.244,66.606 516.755,65.022 516.623,62.101 C516.479,58.943 516.448,57.996 516.448,50 C516.448,42.003 516.479,41.056 516.623,37.899 C516.755,34.978 517.244,33.391 517.654,32.338 C518.197,30.938 518.846,29.942 519.894,28.894 C520.942,27.846 521.94,27.196 523.338,26.654 C524.393,26.244 525.979,25.756 528.898,25.623 C532.057,25.479 533.004,25.448 541,25.448 C548.997,25.448 549.943,25.479 553.102,25.623 C556.021,25.756 557.607,26.244 558.662,26.654 C560.06,27.196 561.058,27.846 562.106,28.894 C563.154,29.942 563.803,30.938 564.346,32.338 C564.756,33.391 565.244,34.978 565.378,37.899 C565.522,41.056 565.552,42.003 565.552,50 C565.552,57.996 565.522,58.943 565.378,62.101 M570.82,37.631 C570.674,34.438 570.167,32.258 569.425,30.349 C568.659,28.377 567.633,26.702 565.965,25.035 C564.297,23.368 562.623,22.342 560.652,21.575 C558.743,20.834 556.562,20.326 553.369,20.18 C550.169,20.033 549.148,20 541,20 C532.853,20 531.831,20.033 528.631,20.18 C525.438,20.326 523.257,20.834 521.349,21.575 C519.376,22.342 517.703,23.368 516.035,25.035 C514.368,26.702 513.342,28.377 512.574,30.349 C511.834,32.258 511.326,34.438 511.181,37.631 C511.035,40.831 511,41.851 511,50 C511,58.147 511.035,59.17 511.181,62.369 C511.326,65.562 511.834,67.743 512.574,69.651 C513.342,71.625 514.368,73.296 516.035,74.965 C517.703,76.634 519.376,77.658 521.349,78.425 C523.257,79.167 525.438,79.673 528.631,79.82 C531.831,79.965 532.853,80.001 541,80.001 C549.148,80.001 550.169,79.965 553.369,79.82 C556.562,79.673 558.743,79.167 560.652,78.425 C562.623,77.658 564.297,76.634 565.965,74.965 C567.633,73.296 568.659,71.625 569.425,69.651 C570.167,67.743 570.674,65.562 570.82,62.369 C570.966,59.17 571,58.147 571,50 C571,41.851 570.966,40.831 570.82,37.631">
</path>
</g>
</g>
</g>
</svg>
</div>
<div style="padding-top: 8px;">
<div
style=" color:#3897f0; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:550; line-height:18px;">
View this post on Instagram</div>
</div>
<div style="padding: 12.5% 0;"></div>
<div style="display: flex; flex-direction: row; margin-bottom: 14px; align-items: center;">
<div>
<div
style="background-color: #F4F4F4; border-radius: 50%; height: 12.5px; width: 12.5px; transform: translateX(0px) translateY(7px);">
</div>
<div
style="background-color: #F4F4F4; height: 12.5px; transform: rotate(-45deg) translateX(3px) translateY(1px); width: 12.5px; flex-grow: 0; margin-right: 14px; margin-left: 2px;">
</div>
<div
style="background-color: #F4F4F4; border-radius: 50%; height: 12.5px; width: 12.5px; transform: translateX(9px) translateY(-18px);">
</div>
</div>
<div style="margin-left: 8px;">
<div
style=" background-color: #F4F4F4; border-radius: 50%; flex-grow: 0; height: 20px; width: 20px;">
</div>
<div
style=" width: 0; height: 0; border-top: 2px solid transparent; border-left: 6px solid #f4f4f4; border-bottom: 2px solid transparent; transform: translateX(16px) translateY(-4px) rotate(30deg)">
</div>
</div>
<div style="margin-left: auto;">
<div
style=" width: 0px; border-top: 8px solid #F4F4F4; border-right: 8px solid transparent; transform: translateY(16px);">
</div>
<div
style=" background-color: #F4F4F4; flex-grow: 0; height: 12px; width: 16px; transform: translateY(-4px);">
</div>
<div
style=" width: 0; height: 0; border-top: 8px solid #F4F4F4; border-left: 8px solid transparent; transform: translateY(-4px) translateX(8px);">
</div>
</div>
</div>
<div
style="display: flex; flex-direction: column; flex-grow: 1; justify-content: center; margin-bottom: 24px;">
<div
style=" background-color: #F4F4F4; border-radius: 4px; flex-grow: 0; height: 14px; margin-bottom: 6px; width: 224px;">
</div>
<div style=" background-color: #F4F4F4; border-radius: 4px; flex-grow: 0; height: 14px; width: 144px;">
</div>
</div>
</a>
<p
style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;">
<a href="https://www.instagram.com/p/CW1lrUvvSry/?utm_source=ig_embed&utm_campaign=loading"
style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none;"
target="_blank">A post</a></p>
</div>
</blockquote>
<script async src="//www.instagram.com/embed.js"></script>
<a href="https://www.iunknown.com/2021-11-28#a2" title="Direct link to this item.">#</a>
</p>
<a name="a3"></a>
<p>
After running this blog on GitHub pages over the weekend, I decided to try
something new and created a <a href="https://cloudflare.com">CloudFlare</a> account.
While I was having some troubles with GitHub pages occassionally not rendering
correctly (something with the DNS entries not being happy with GitHub), I was
more curious about CloudFlare and wanted to try being a customer. So I signed
up for the free plan.</p>
<p>There's an interesting gateway drug effect with CloudFlare. After getting a
free account and using it to protect this blog on GitHub pages, I learned that
I could transfer my domain over to CloudFlare from GoDaddy, the registrar that
I've been using for the past decade or so. I was attracted by the wholesale
cost pricing of CloudFlare which worked out to less than $9/year to continue
to manage my <code>iunknown.com</code> domain (which is now 24 years old!) So I went and
initiated the transfer process tonight.</p>
<p>I was also curious about JamStack and <a href="https://blog.cloudflare.com/cloudflare-pages-is-lightning-fast/">CloudFlare
Pages</a>. It
turns out that there's also <a href="https://developers.cloudflare.com/pages/framework-guides/deploy-a-zola-site">built-in support for
Zola</a>
as well. After some misadventures with version numbers (as of this writing,
the only supported version is 0.14.0), I finally got builds up and running.</p>
<p>The experience is identical to GitHub Actions and GitHub Pages - I push to my
<code>main</code> branch, and the installed CloudFlare Pages GitHub app handles the build
and deployment process into the CloudFlare network. The only thing I noticed
is that the container(?) that is used to build takes a long time to initialize
compared to GitHub Actions. When I look at the logs, it seems like this
container is used not just by <code>zola</code> but it installs other static web site
generators like <code>Hugo</code> as well.
<a href="https://www.iunknown.com/2021-11-28#a3" title="Direct link to this item.">#</a>
</p>
<a name="a4"></a>
<p>
I've got a working version of my first VS Code extension,
<a href="https://github.com/jflam/vscode-zola">vscode-zola</a>. I'm using it to write
this post now. So far, it supports:</p>
<ul>
<li>Creating a new post</li>
<li>Pasting social media URIs and embedding them in the generated page</li>
<li>A sort-of working Preview Blog service</li>
</ul>
<p>I'm a bit torn about how the Preview Blog service should behave - right now
I'm imagining that it will work like the way VS Code Markdown Preview works -
creating a new pane to the right of the editor that shows the preview with a
hot-reload function that refreshes every time you save the markdown file. The
existing <code>zola serve</code> command works and does auto-refresh in an external
browser window too, and it already supports hot reloading. </p>
<p>Some future features that I want to add include:</p>
<ul>
<li>Paste image functionality similar to how the <a href="https://marketplace.visualstudio.com/items?itemName=mushan.vscode-paste-image">Paste
Image</a>
extension works today, but tailored to how my <code>zola</code> blog's needs (specially
formed URIs and using the image shortcode).</li>
<li>Section permalink - another command that inserts some markdown into the post
that generates a # (typically at the end of a logical section) which is also
a permalink that users can use to link directly to that part of the post.
This is how <code>Scripting News</code> works and I want to make it easy to do so using
nothing more than plain-vanilla markdown.</li>
</ul>
<a href="https://www.iunknown.com/2021-11-28#a4" title="Direct link to this item.">#</a>
</p>2021-11-272021-11-27T00:00:00+00:002021-11-27T00:00:00+00:00https://www.iunknown.com/2021-11-27/<a name="a1"></a>
<p>
Hello <a href="https://www.getzola.org/documentation/templates/overview/">Zola</a> supports the
<a href="https://tera.netlify.app/">Tera</a> templating engine. Today I'm going to update
the way my blog renders by rendering in a continuous style much like how Dave
Winer's <a href="https://www.scripting.com">Scripting.com</a> site works. I like the
layout, and I'm hoping to build something out that looks more like this.</p>
<p>I updated it to use two open source fonts from Google:
<a href="https://fonts.google.com/specimen/Oswald">Oswald</a> for headings and
<a href="https://fonts.google.com/specimen/Ubuntu">Ubuntu</a> for body text.
<a href="https://www.iunknown.com/2021-11-27#a1" title="Direct link to this item.">#</a>
</p>
<p>This is what Oswald looks like:</p>
<img src="https://www.iunknown.com/processed_images/bed421ab661272ce00.png" />
<p>This is what Ubuntu looks like:</p>
<img src="https://www.iunknown.com/processed_images/f46f169dfa91a48a00.png" />
<a name="a2"></a>
<p>
To make this really work, it's going to need tooling, as there is quite a bit
of friction today. The VS Code extension will need to preview output using
<code>zola</code>. It will also need to analyze clipboard formats and generate
appropriate markup as well. When using <code>zola serve</code> to render the page, the
browser window does an auto-refresh of the page when the contents are
re-rendered (not quite sure how this happens, but it's cool). Ideally what
I do is render that instead of the Markdown Preview pane that VS Code uses
today.</p>
<p>If there is an image on the clipboard, much like the <code>Paste Image</code> extension
that I'm currently using, it will need to generate some appropriate markup
that, roughly speaking looks like with the following escaped by the <code>tera</code>
markup charcters:</p>
<pre style="background-color:#2b303b;color:#c0c5ce;"><code><span>image(src="POST-DIRECTORY/GENERATED-NAME.PNG", width=500)
</span></code>
<p>The extension will also examine URIs pasted to the clipboard, e.g., from
YouTube or Twitter, and paste the appropriate shortcodes for those URIs.</p>
<p>So there are a few things that I need to learn:</p>
<ol>
<li>How to examine the contents of the clipboard in a cross-platform way so
that I can serialize binary data for an image into a file.</li>
<li>Have a generic extension that understands how to expand templates based
on pattern matches for URIs and uses a template engine to generate text
that is pasted into the app.</li>
</ol>
<p><a href="https://www.iunknown.com/2021-11-27#a2" title="Direct link to this item.">#</a></p>
</p></pre>2021-11-262021-11-26T00:00:00+00:002021-11-26T00:00:00+00:00https://www.iunknown.com/2021-11-26/<a name="a1"></a>
<p>
I'm journaling the start of a new blog that I'm writing using VS Code as my
editor, some extensions and the <code>zola</code> markdown engine. The idea is to build
something that looks like Dave Winer's Scripting.com to let me easily write
stream of consciousness <a href="https://perell.com/note/open-mode-and-closed-mode/">Beer
Mode</a> observations.</p>
<p>To commemorate this, I've captured a screenshot of the VS Code project that
contains this first post:
<a href="https://www.iunknown.com/2021-11-26#a1" title="Direct link to this item.">#</a>
</p>
<img src="https://www.iunknown.com/processed_images/2cd8b97c8e8c869100.png" />
<p>The only thing that's annoying about how this works today is that I need to
use raw HTML if the captured image needs to be resized for aesthetics. Below
is an example of what I need to type in the raw HTML format. I think I'm going
to need to write a VS Code extension to streamline this process to let me more
easily fine-tune the appearance of images.</p>
<pre data-lang="html" style="background-color:#2b303b;color:#c0c5ce;" class="language-html "><code class="language-html" data-lang="html"><span><</span><span style="color:#bf616a;">img </span><span style="color:#d08770;">src</span><span>="</span><span style="color:#a3be8c;">2021-11-26/2021-11-26-20-01-27.png</span><span>" </span><span style="color:#d08770;">width</span><span>=</span><span style="color:#a3be8c;">200</span><span>>
</span></code></pre>
<a name="a2"></a>
<p>
I'm using the <a href="https://marketplace.visualstudio.com/items?itemName=mushan.vscode-paste-image">Paste Image</a>
VS Code extension to make it easier to insert images into each post.</p>
<p>I tried GitHub pages and Jekyll, but forcing images into a global <code>/assets</code>
directory is a non-starter. </p>
<p>After some research, I decided to use use
<a href="https://github.com/getzola/zola">zora</a> which is a much better choice as it
gives me the flexibility to include content in simple directory structures,
i.e., pasted images can be in the same directory as the markdown option.</p>
<p>Next, I need to figure out how to include <code>zola</code> in a custom </p>
<p>Another image:</p>
<p><img src="2021-11-26/2021-11-26-23-24-30.png" alt="" />
<a href="https://www.iunknown.com/2021-11-26#a2" title="Direct link to this item.">#</a>
</p>
<a name="a3"></a>
<p>
This is quite possibly the best YouTube video that explains how F1 Cars work.
He builds a <a href="https://www.blender.org/">Blender</a> model of the car and proceeds
to show airflow dynamics, suspension operation, motor details (and how the
turbocharger works), how the hybrid MGU-K and MGU-H systems work and much
more. Easily the best video explainer for F1 cars that I've seen!</p>
<div class="youtube">
<iframe
width=560 height=315
src="https://www.youtube.com/embed/V7707zEX9X4"
webkitallowfullscreen
mozallowfullscreen
allowfullscreen>
</iframe>
</div>
<a href="https://www.iunknown.com/2021-11-26#a3" title="Direct link to this item.">#</a>
</p>
<a name="a4"></a>
<p>
Today more scary information was being published about the new omicron
(ο) variant. There are 15 mutations in the receptor binding domain of
the spike protein.</p>
<blockquote class="twitter-tweet">
<a href="https://twitter.com/x/status/1464452102382448643"></a>
</blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
<a href="https://www.iunknown.com/2021-11-26#a4" title="Direct link to this item.">#</a>
</p>
<p>💡 There's probably a <code>zola</code> VS Code extension waiting to be written that
will do things like take a copied YouTube or Twitter URI and turn it into
one of the shortcodes in this repository. I think that the extension should
also start a background <code>zola</code> process that will render the preview in place
of the existing VS Code markdown preview. Finally, it should have a feature
that will generate the appropriate GitHub Actions to publish to GitHub pages
after pushing to the remote.</p>