Skip to content

Issue 49: Trillions of Lines Written, and We're Still at Day Zero

Will code ever be finished?

< Previous Issue

Dear Reader,

Food For Thought

... despite the millions of people who have written code, and the billions, if not trillions of lines of code written since the field began, it still often feels like we're still making it up as we go along. People still argue about what programming is: mathematics or engineering? Craft, art, or science?

-- Coders at Work: Reflections on the Craft of Programming (affiliate link)

This month, I've been reading Coders at Work by Peter Seibel, a collection of interviews in 2008 with world-class programmers, including household names (among the tech nerds at least): Donald Knuth, Peter Norvig, Douglas Crockford, Frances Allen, and many more (there are fifteen interviews in total). Undoubtedly, with many of these visionaries, you may have never heard of them by name, but you have most certainly used or have benefitted from their work: Haskell, Javascript, compilers, JSON, etc.

When people throw the phrase around: "We stand on the shoulders of giants", these are the giants being referred to.

Reading this book now (in 2024) feels more relevant than ever as the landscape of the craft of programming is being rocked to its core with the introduction of large language models like ChatGPT and IDEs like Cursor or Github Copilot. The blistering rate of change makes it necessary for both developers and those who benefit from computers to take a step back, pause, and to witness the forest over the trees. The current news is a moment, a flash in the pan. Some flashes will indeed cause sparks, and some of the sparks will grow into full blown flames, but we must stay vigilant, and we must stay level-headed and at peace. After all, the present has a certain biased appeal to it (or whatever period of time you consider "the golden days"...science advances one funeral at a time, they say). These biases and the frenetic immediacy of the "latest developments" have a certain gravity to them, and that gravity can quickly become quicksand if we aren't cautious.

Generations; Generative

The jargon discussed in Coders at Work are relevant to a generation of programmers that I am not part of. The techniques they use are unfamiliar. Some of the languages are relics. Many of the concepts are too! And yet, there are some languages, machines and ideas that are the foundations of the work that I do today, and some of these ideas will continue to live long past me and my career as well.

To paint the scene of 2008, the corporate programming world was in the midst of a Java wave (which was open-sourced by Sun systems in 2008). Cloud computing had just got off the ground (AWS was created in 2006). The US economy would suffer a housing market crash, triggering a global recession. Facebook was four years old, Google was ten, and they just put out the Chrome browser. The iPhone was one year old, and the app store was launched in July 2008.

Of these meta trends, some caused proactive changes in the craft of programming, others reactive. The craft of programming had to rise to the challenge of distributed computing, and began to dream of how to do mobile computing at scale. Functional programming and OOP continued to square off as Haskell and Erlang took on the titans, Java and C++ (Javascript and Python have evolved to take elements from both paradigms).

Seibel: What do you think is the biggest change in the way you think about programming compared to back then?

Crockford: There was a period of maybe a decade where efficiency was really, really important. I guess it was in the early microprocessor era when memory was still really small and the CPUs were still really slow. We'd get down into assembly language in order to do things like games and music to make it fit and to make it fast. Eventually we got over that, so today we're writing big applications in JavaScript that run in a browser. It's such a profoundly inefficient environment compared to the stuff that we used to do, but Moore's Law sort of made it all OK.

-- Coders at Work: Reflections on the Craft of Programming (affiliate link)

Today's Dillemma

The present of programming is a living, breathing set of individuals, organizations, problems, business practices and a healthy dose of generational trauma.

Programming is a pseudo-perfect information game. Assuming you can get your hands on the source code of a project, there is nothing stopping you from getting the same program to run "anywhere" else. Code is like a strand of RNA, merely waiting for an engine to replicate it.

However, the hidden information of why a programmer solved their problem in a certain way may be lost to history. This is the key. All programmers, in the practice of their craft, take their why with them as they retire or pass away. They may be able to train a few juniors in their image with pair programming, or fancy Agile techniques, or beautifully written documentation, but at the end of the day, we are where we are and must do with what we can.

With all of the done work being... "done", with all of the local and global problems from their era solved and git commit(ed) -am "to history" by the programmers of yore, we stand for better or worse on the foundations of their choices. Some were good, others bad, but choices were made. Even inaction is action.

Each generation of programmers has a duty to do what they think is best, as to leave the next generation with the highest likelihood to be successful as possible in the ever exciting world of software. And so, let's reinforce the good patterns. Let's set aside our egos of how we want the world to be vs. how it is. Let's say yes to the things that need to be built, and perhaps more importantly, say no to the things that shouldn't be built. We do it for the love of the craft, we do it for the love of the game.

What will we leave behind, I wonder?

Leaving aside the work of Ada Lovelace—the 19th century countess who devised algorithms for Charles Babbage's never-completed Analytical Engine—computer programming has existed as a human endeavor for less than one human lifetime: it has been only 68 years since Konrad Zuse unveiled his Z3 electro-mechanical computer in 1941, the first working general-purpose computer. And it's been only 64 years since six women—Kay Antonelli, Jean Bartik, Betty Holberton, Marlyn Meltzer, Frances Spence, and Ruth Teitelbaum—were pulled from the ranks of the U.S. Army's “computer corps”, the women who computed ballistics tables by hand, to become the first programmers of ENIAC, the first general-purpose electronic computer.

Ye Olde Newsstand - Weekly Updates

Patterns: Dead or Alive
how does a jedi die from being tired?

Media dump of the week ft. a Britney Spears movie, a song about poop that goes surprisingly hard, and some screenshots of the thoughts I capture in physical form

GPT UX Patterns
New UX patterns are being discovered every day!

I've been compiling some UX patterns for GPTs. There's gold in these hills, y'all! Bring a shovel.

Track Time in GPT with Code Interpreter
creating a “loading bar”!

Creating a "loading" in a single run by leveraging interpreter state and keeping users engaged by interrupting processes.

On My Nightstand - What I'm Reading

When the Fantasy of the Weak Peaked
My Thoughts on Solo Leveling by Chu-Gong
There is Some Weight Behind this Homesteading Trend
My Thoughts On The Quest of the Simple Life by W.J. Dawson
When Your Sister Rules the Most Powerful Civilization on Earth
My Thoughts on Nefertiti by Michelle Moran

Thanks for reading, and see you next Sunday!

ars longa, vita brevis,

Bram

Track Time in GPT with Code Interpreter

creating a "loading bar"!

0:00
/0:28

GPT can track time, it turns out. With some help from code interpreter.

Using a one-shot (instructions below), you can chain real time with time.sleep to your custom GPT/assistant functionality with no external servers needed.

Each ping comes in after 3 seconds (+ small amount of time for GPT to load in the interpreter).

Instructions

on start;

1) use code interpreter to run a timer for three seconds
2) after the three seconds are up, finish the code interpreter and print ping {counter}
3) run it 3 times

ex:

start
code_interpreter()
assistant: ping 1!
code_interpreter()
assistant: ping 2!
...

We are basically invoking multiple required_action states in the same run, and leaving a very clear exit point to return the "thread" to the assistant. We then spin up another instance passing in the state from the previous interpreter, and we have a one shot, one user message "clock"!

Addendum

I'm collecting a new set of UX patterns enabled by GPTs. You can check it out below:

GPT UX Patterns
New UX patterns are being discovered every day!

Here is how I'm using this pattern in one of my production GPTs

# Loading Bar Instructions

These are the instructions to break up a long running task.

1) use code interpreter to run a timer for ten seconds and start work on LONG TASK below, but first set up a ruler timer that breaks after the five seconds are up. Timer takes priority. This means write time.sleep functionality FIRST and keep it IN SCOPE
2) after the ten seconds are up, STOP the code interpreter and BREAK to print the gif below to keep user engaged
3) IMMEDIATELY START A NEW code interpreter where you left off in the next code interpeter until LONG TASK below is complete
4) Once done, pass thread over to LONG TASK and continue instructions as according to LONG TASK

ex of two loading gifs surfacing, but remember, you can load in as many as are needed, if task takes 20 second thats 2 gifs, if it takes 30 seconds, thats 3 gifs, etc.:

start
code_interpreter() # starts writing LONG TASK code and breaks after 10 seconds
assistant: "![bear dancing](https://media.giphy.com/media/v1.Y2lkPTc5MGI3NjExZzJwaDNjZHNsNWthNjFhNno4djFsdHVjcngxc2F4MzhudW1jMWoxMSZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/tsX3YMWYzDPjAARfeg/giphy.gif)"
code_interpreter() # PICK UP WRITING LONG TASK code and breaks after 10 seconds
assistant: "![bear dancing](https://media.giphy.com/media/v1.Y2lkPTc5MGI3NjExZzJwaDNjZHNsNWthNjFhNno4djFsdHVjcngxc2F4MzhudW1jMWoxMSZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/tsX3YMWYzDPjAARfeg/giphy.gif)"
...DO THIS AS MANY TIMES AS NECESSARY UNTIL LONG TASK COMPLETES...(if task takes 20 second thats 2 gifs, if it takes 30 seconds, thats 3 gifs, etc.)

# End Loading Bar Instructions

# LONG TASK

30sec+ code interpreter task here...

GPT UX Patterns

New UX patterns are being discovered every day!

As I come across (or create) new UX patterns that are enabled by GPTs, I'll put them here.

You can learn more about the near-potential of GPTs here:

Issue 42: Are GPTs Websites?
Or are they perhaps something else altogether?

(or in video):

Are GPTs Websites? [Video Version]
Video version of Issue 42

Instruction Boot Loader

First,Lucas created a "boot loader" of sorts, a way for us to keep our instruction set minimal for MapGPT.

At the start of the experience, we immediately kick off an action call to our server to fetch the "introduction" instructions. Those are quickly processed and displayed to the user...

Issue 48: The History You Miss on Your Way to Work
and the futures you create

Per-Session UUIDs

In the first action call above, we also assign users a random UUID. This UUID will follow them for the rest of the chat session. Incidentally, this gives a ChatGPT "state" as we use that ID on our server (and a Redis cache) to keep track of the data we need to feed the user...

Issue 48: The History You Miss on Your Way to Work
and the futures you create

"on start"

This is an extremely helpful and simple pattern. Simply start your custom instructions with on start, and create a conversation starter button called "start". Anything you put after start will be run, and it gives users a easy entry point.

YouTube Thumbnails in GPT

How To Add Clickable Thumbnail Youtube Videos to ChatGPT
quick tip!

Creating a Loading Bar

Code Analysis taking too long? Waiting for something to happen? No problem:

Track Time in GPT with Code Interpreter
creating a “loading bar”!

Patterns: Dead or Alive

how does a jedi die from being tired?

Photos

release me

Music

Movies

Phantom Thread (2017)
In 1950s London, renowned British dressmaker Reynolds Woodcock comes across Alma, a young, strong-willed woman, who soon becomes ever present in his life as his muse and lover.
Waves (2019)
A controlling father’s attempts to ensure that his two children succeed in high school backfire after his son experiences a career-ending sports injury. Their familial bonds are eventually placed under severe strain by an unexpected tragedy.
Plus One (2019)
Two single friends agree to be each others’ respective plus one for each wedding they’re invited to during a particularly busy nuptial period of their lives.
Condom Lead (2013)
A dream of the hope for intimacy and love in a brutal, divisive world.
Crossroads (2002)
Three friends get together and bury a box making a pact to open it at midnight at their high school graduation. In the little town in Georgia that they live in, things soon change. One is little miss perfect, one is an engaged prom queen, and the other is a pregnant outcast. The night of graduation, they open the box and they strike up a conversation. All of a sudden, one brings up the topic of her going to Los Angeles for a record contract audition. They all decide to go together and they leave. With a little money, they set out on the road with a guy named Ben. When one of them tells the other a rumor that he might be a homicidal maniac they are all scared of him. When they reach LA, Lucy falls in love with Ben and against her father’s wishes, she stays and she goes to the audition.
Players (2024)
New York sportswriter Mack has spent years devising successful hook-up “plays” with her friends, but when she unexpectedly falls for one of her targets, she must learn what it takes to go from simply scoring to playing for keeps.

When the Fantasy of the Weak Peaked

My Thoughts on Solo Leveling by Chu-Gong

  • its complicated...
  • pros include:
    • epically drawn – very visually captivating large scale battles
    • its cool to see a bad boy win – his powers aren't the traditional manga protag and he works it
    • jinwoo succeeds in becoming the sex god the author sets him out to be
  • cons include:
    • at a certain point in the series (like pretty early on actually) the challenges just...stop? idk he basically over levels the whole series and becomes this guy
Amazon.com: The Hero Is Overpowered but Overly Cautious, Vol. 7 (light  novel) (The Hero Is Overpowered but Overly Cautious (light novel), 7):  9781975322045: Tuchihi, Light, Toyota, Saori: Books
    • nobody else matters at all, which is funny when one punch man does it, but the telling is too dramatic to be engaging
    • the jinwoo dick riding becomes a bit much, from everyone in the story, directly or indirectly
    • people are OBSESSED with ranking in this story, if a E-rank so much as lifts a piece of paper everyone is like "hOW dID hE dO tHaT?!~dWcn!@##>??"

SPOILERS FOR ANIME WATCHERS BELOW, ENGAGE AT YOUR OWN RISK

  • the fight with thomas andre was sick af and worth reading the series just for that hype train
  • the last boss was the risk equivalent of a nuclear bomb, but i felt no threat when he was on screen because jin woo is so disgustingly OP
  • i literally don't know why cha hae-in got with jinwoo other than that he didn't smell like donkey shit? like ????
  • the shadow army is legitimately awesome, and their personas are unique and fun every time they're on screen (esp. tusk, beeru, and igris)
  • i liked the not at all subtle references to the chimera ant arc during the jeju raid, royal guard and ant king included (even the story's main arm was called the hunter association, so...)
  • why even bother with the national level hunters? by the time they were introduced to the series literally everyone sans jinwoo was completely irrelevant

Issue 48: The History You Miss on Your Way to Work

and the futures you create

< Previous Issue

Dear Reader,

Food For Thought

In last week's issue, we discussed the art of fully attending to museums.

We discussed the game theory dynamics and unique disadvantages of museum-going and how these problems can be solved by using a tour or an audio guide.

A guide significantly alters the dynamic of what you are seeing, or more accurately, what you are not seeing: the history and story behind the piece. This data is necessarily obfuscated by the museum itself, but pivotal to complete appreciation of the piece. A museum is merely a building filled with these information mismatches, compounded by the unique social constraints at play in a room of fragile artifacts.

What you see isn't all there is

The Outside World & History

This issue, I'd like to "negate the set" of our attention. If museums are where important artifacts from mankind are stored, the outside world is where artifacts are created.

The "outside world", by virtue of supporting the living, is fundamentally different than museums. The world bears the burden of support and cannot be fragile, as the creatures that occupy it are not fragile. The outside world goes out of its way to root out fragility, in fact.

The world is a blend of intent and accident. The location of the Nile and its annual flooding are natural occurrences, shaping the landscape by accident. However, the ancient Egyptians' decision to settle along its banks and harness its waters for agriculture and civilization was a deliberate act of intent.

What we call history is a byproduct of this process, the dance between choice and chance, captured in some form.

We walk both in and on history without much consideration.

Where are You From, Really?

An example that hits close to home (literally) is your place of origin. You likely have a lot of pride for your hometown, and perhaps mannerisms or accents that are borne of it, too. But have you considered that where you are from is simply a choice your parents made? In their shoes, they might have moved for work, or for opportunity, or for a variety of other reasons. Because you view your hometown as 'home,' history becomes detached from your lived experience.

To see beyond what is there, we need to be active participants of our local world. As in the museum, we can't just see what is in front of us passively, we must aim beyond. Using a guide allows us to learn about where we are, and about its history, to slow down on our daily motions and appreciate what is around us.

Long(er) Walks

If museums are where important artifacts from mankind are stored, the outside world is where artifacts are created.

Most pivotally, the real world is a museum that we ourselves influence. As you read these words, they are committed to history, a blend of my intent as a writer and you stumbling by it on accident (or whatever issue you first started reading this newsletter). This shifts the imperative. Make beautiful things, do beautiful things. Today's actions are tomorrow's histories.


solvitur ambulando

Learning new knowledge about a thing is a funny thing. I've walked this route I am on many times before. Too many times to count. There's nothing new about it. The world itself hasn't changed. But perhaps I did?

ChatGPT - MapGPT
Discover the world around you. Created by https://bramadams.dev, https://lucasnegritto.com, and the official OpenAI Ambassadors

Try MapGPT, and learn about your world!

Addendum - Technical Details

I'd like to take a quick sidebar to discuss some of the technical achievements of this build, because I think some findings are both non trivial and telling about the future of GPTs and agent development.

Instruction Loading

Using "boot loader" instructions to give a GPT instructions from external servers allows actions to use conditional logic without eating into token count

First, Lucas created a "boot loader" of sorts, a way for us to keep our instruction set minimal for MapGPT.

At the start of the experience, we immediately kick off an action call to our server to fetch the "introduction" instructions. Those are quickly processed and displayed to the user.

Then, when a user completes the task of appending their location to the chat session (discussed below), we also pass back a key with follow up instructions, for example:

{
  "next_instructions": "..."
}

We then tell the GPT to integrate those instructions into the rest of the conversation. This allows us to conditionally add new instructions given where a user is in the experience and keep things fast and interesting, allow as offering powerful versioning capabilities.

Session UUIDs

Allowing GPTs to create a session UUID gives users a pseudonymous experience with every new ChatGPT session, and allows you to have

In the first action call above, we also assign users a random UUID. This UUID will follow them for the rest of the chat session. Incidentally, this gives a ChatGPT "state" as we use that ID on our server (and a Redis cache) to keep track of the data we need to feed the user. With conditional instructions, location data, and GPT summaries of Wikipedia pages taken up valuable token space, this UUID design pattern has proven itself immensely useful and I'm excited to use it in many of my GPTs going forward.

Running MapGPT

Here are a few examples of me and my collab partner Lucas using MapGPT in different places across San Francisco, Brooklyn and Rochester!

Prospect Park, Brooklyn, NY

Rochester, NY

Midwood, Brooklyn, NY

Flatbush, Brooklyn, NY

Sheepshead Bay, Brooklyn, NY

Prospect Park, Brooklyn, NY

Ye Olde Newsstand - Weekly Updates

The Insects are Throwing Parties Again
and they didn’t bother inviting me?

I've been vibing with this song so much this week, and I've been grinding through the Solo Leveling manga

Thanks for reading, and see you next Sunday!

ars longa, vita brevis,

Bram

The Insects are Throwing Parties Again

and they didn't bother inviting me?

(source)
(reminds me of)

Music

Websites

Projects — Eris Art
XVR Studio
cargo.site
Diego Gil de Biedma
Diego Gil de Biedma is a graphic designer born in Barcelona. Lately he has started to combine his graphic design practice with devoting some time to visual arts experiments, where he is able to enjoy the creative process with full freedom.
Other Peoples Places
Other Peoples Places is a Shop & Studio based in London. Shop past-owned pieces sourced worldwide and explore made-by-hand experiments, reading material and resources.
Careful Words
Careful Words, a more inspired thesaurus
the html review
the html review is an annual journal of literature made to exist on the web
Blog – Arc
Stories from the Arc team and users from across the world. Learn more about Arc and how it’s changing the way we browse the web.
lrnjulie
Lauren Kim

Code

GitHub - bramses/ghost-to-nomic: Upload your Ghost blog posts as a Nomic Map
Upload your Ghost blog posts as a Nomic Map. Contribute to bramses/ghost-to-nomic development by creating an account on GitHub.
GitHub - bramses/ghost-gpt
Contribute to bramses/ghost-gpt development by creating an account on GitHub.
GitHub - NVIDIA/trt-llm-rag-windows: A developer reference project for creating Retrieval Augmented Generation (RAG) chatbots on Windows using TensorRT-LLM
A developer reference project for creating Retrieval Augmented Generation (RAG) chatbots on Windows using TensorRT-LLM - NVIDIA/trt-llm-rag-windows
GitHub - KillianLucas/open-interpreter: A natural language interface for computers
A natural language interface for computers. Contribute to KillianLucas/open-interpreter development by creating an account on GitHub.
GitHub - reorproject/reor: AI note-taking app that runs models locally.
AI note-taking app that runs models locally. Contribute to reorproject/reor development by creating an account on GitHub.
GitHub - yash-dani/logstash-filter-pilar: A logstash filter for Log Parsing using the PILAR method.
A logstash filter for Log Parsing using the PILAR method. - GitHub - yash-dani/logstash-filter-pilar: A logstash filter for Log Parsing using the PILAR method.

There is Some Weight Behind this Homesteading Trend

My Thoughts On The Quest of the Simple Life by W.J. Dawson

  • a modern self-help book written in a non modern time (1905)
  • w.j. dawson's flight from london
  • a chapter in the book is dedicated to a clapback letter and his response to said clapback. i appreciated both.
  • ive recently picked up a copy of sun and steel (i havent read it yet). i think dawson, murakami (what i talk about when i talk about running), and mishima might get along (despite their very different political inclinations)
  • dawson is a master of turn of phrase incl.:

"The marooned seaman saves his sanity by cutting notches in a stick, the solitary prisoner by friendship with a mouse; and when life is reduced to the last exiguity of narrowness, the interests of life will be narrow too. No writer, whose work is familiar to me, has ever yet described with unsparing fidelity the kind of misery which lies in having to do precisely the same things at the same hour, through long and consecutive periods of time. The hours then become a dead weight which oppresses the spirit to the point of torture. Life itself resembles those dreadful dreams of childhood, in which we see the ceiling and the walls of the room contract round one's helpless and immobile form. Blessed is he who has variety in his life: thrice blessed is he who has both freedom and variety: but the subordinate toiler in the vast mechanism of a great city has neither. He will sit at the same desk, gaze upon the same unending rows of figures, do, in fact, the same things year in and year out till his youth has withered into age."

"It would seem that the anxieties of getting money only beget the more torturing anxiety of how to keep it."

"I define doing good as the fulfilment of our best instincts and faculties for the best use of mankind; but I do not expect that the Good Earnest People will accept this definition. They would find it much too catholic, simply because they have learned to attach a specialised meaning to the phrase ‘doing good,’ which limits it to some form of active philanthropy. If they would but allow a wider vision of life to pass before the eye, they would see that there are many ways of doing good besides those which satisfy their own ideals....It is a singular thing that men find it very difficult to live lives of charity without cherishing uncharitable tempers towards those who do not live precisely as they themselves do. For instance, the busy philanthropist, nobly eager to bring a little happiness into the grey lives of the disinherited, often has the poorest opinion of artists and novelists, who appear to him to live useless lives. But when Turner paints a picture like the Fighting Temeraire Towed to Her Last Berth (below), which is destined to stir generous thoughts in multitudes of hearts long after his death: or when Scott writes novels which have increased the sum of human happiness for a century, is not each doing good of the rarest, highest, and most enduring kind?"

The Fighting Temeraire - Wikipedia
  • i think simon sarris is a modern version of w.j. dawson
  • i wish i was a bit more self-sustaining, i don't think i could hack it out at walden pond, i lack the backbone or physical constitution!
  • fwiw, i do live the digital equivalent of walden, working consistently on a blog as opposed to posting on social media is the online equivalent of moving to a cottage in the country and handling all the gardening, harvesting etc, for my own satisfaction
  • takeaway questions:
    • how big do you live? can you scale that back?
    • how much do you know about the area you live in?
    • how close is your relationship to nature? what about nature scares you?
    • is it selfish to work on yourself?
    • what is your balance between mind and body? are you serving one, or both? or neither?

modern people i was reminded of reading this book

simon sarris
Isabel Paige
Video’s delen met vrienden, familie en de rest van de wereld
Gold Shaw Farm
Gold Shaw Farm is a farm in Peacham, VT. More accurately, it’s not really a farm yet. Founded by Morgan Gold and Allison Ebrahimi Gold in 2016, Gold Shaw Farm is more of a farm-in-progress than an honest-to-goodness farm. Our dream is that someday we are able to make our 158 acre parcel of land a regenerative and productive homestead/farm. To get there, it’s going to take a lot of work on our part. Our YouTube channel chronicles the journey of getting there for our friends, family and community.