Skip to content

writing

August 28 2023

Where do you see yourself in four months?




5 losses IN A ROW before one win

Bangers only from the Readwise review today!



Write a simple test case | DeepEval
If you are interested in running a quick Colab example, you can click here.
pretty straightfwd to use – very akin to traditional unit test assertions
Alert Score | DeepEval
Alert score checks if a generated output is good or bad. It automatically checks for:
this is good! ive manually run libraries like bad-words.js to see if a input is toxic, but being able to assert if an answer is relevant && not toxic is helpful
Factual consistency is measured using natural language inference models based on the output score of the entailment class that compare the ground truth and the context from which the ground truth is done.
"James has 3 apples" and "James has fruit" would be considered an entailment.
"James only owns a car." and "James owns a bike." would be considered a contradiction.

Entailment seems like an abbreviation or rework of p > q from discrete mathematics.


Since ChatGPT's launch just nine months ago, we’ve seen teams adopt it in over 80% of Fortune 500 companies.

Wild. Seems like the null hypothesis won't really be happening lmao...

ChatGPT Enterprise removes all usage caps, and performs up to two times faster. We include 32k context in Enterprise, allowing users to process four times longer inputs or files.

make art from quote button ez clap


if (interaction.isButton()) {
    if (interaction.customId === "button_id") {
		await interaction.deferReply();
      console.log(`Button was clicked by: ${interaction.user.username}`);
      // Here you can call your function
      const { prompt, imageUrl } = await main(interaction.message.content);

	  if (interaction.replied || interaction.deferred) {
		await interaction.followUp(`Art Prompt (save the image it disappears in 24 hours!): ${prompt} \n Image: [(url)](${imageUrl})`);
	  } else {
		await interaction.reply(`Art Prompt (save the image it disappears in 24 hours!): ${prompt} \n Image: [(url)](${imageUrl})`);
	  }
	  // set interaction command name to aart
	  interaction.commandName = "aart";
	  await invocationWorkflow(interaction, true);
    }
    return;
  }



great quote abt propositional knowledge (facts) vs experiential knowledge (riding a bike) – in fact both are the same if criticism is able to be applied, you don't need to live something to know something. that is empirical error. (see: theoretical physics)

The Problems That CPUs Can’t Solve

the types of things that can't be solved by things that solve types of things

Off the jump, we can derive from the name “computer” that CPUs cannot solve any problem that is not able to be computed, obviously. But as we are discovering, even simple CPUs have signs of being able to handle nearly infinite variations of repeatable-computable problems, given the constraint that they finish and fit inside memory.

Therefore, learning the distinction between where computation is or isn’t a tool for problem solving will help us shine a more accurate light on what problems computers will be able to tackle in the future and thus tell us where to focus our efforts.

Having a set of off-limits bounds in a universal tool does not make it any less universal. A universal tool needs to have universal influence inside the bounds of its own universe, not the external universe. Instead, these limits should be thought of as creativity applied within constraints. For example, humans, despite our technological creativity, are bound to the laws of biology and physics. One reason we even deign to create external tools in the first place is because our biology is a deeply complex, and more importantly, finicky system that does not like to be thrown off balance, ergo external tools. Instead of heating our bodies, we heat our homes. Instead of running far on foot, we create vehicles. Instead of orating the same story over and over, we write. It would be interesting to imagine what problems humans could solve if augmentation was an internal process.

This limitation of “non-computable problems” also does not mean that CPU’s can’t compute specific examples of non computable logic with a bottom up approach of tackling parts of a problem at a time. These types of problems can be solved in piecemeal. It means in the general case that computers can’t help with these kinds of state transitions.

What is a Non Computable Problem?

Before we defined a problem as a state where an entity is uncomfortable, and a set of immediate actions that they can take to reach a new state where they are less uncomfortable. The entity is willing to take on a real energetic cost to conduct this transition. We now need to discuss what actions an entity could take that wouldn’t be considered in the simple CPU actions of read/write/decode/execute/jump/loop, for that entails problems that do not have a computable solution under the Turing machine architecture.

As for an exhaustive list, there are a host of non computable problems that are well defined, as well as a set of problems that are not well defined. Let’s go over a few.

The Halting Problem

The most common introduction to non computable problems for computer science students is the halting problem, which in essence states that there is no program able to be written that will tell if any other program will stop computing or run infinitely. Basically there is no external universal tool that in the general case will be able to tell if other universal tools ever finish doing their work. Comparing infinities and all, I suppose.

In the real world, we actually deal with finite memory on all of our machines, so every program technically “finishes” by returning successfully or devouring the entire resource space of the host to run a program and crashing the machine.

To go further, we can use the underlying theorem from the halting problem even more generally. A system cannot clearly comment on the totality of itself. There needs to be some external system that can verify or disprove that the system is comprised of X or Y or Z. It follows that if all programs (any program that could ever be written) were lined up one after another, there would not be any individual program in the set that could verify or disprove the rest of the programs, since the program that reads all of the programs would be inside the list of programs, creating a mutual dependency. (However, I am not fully convinced that there isn’t some kind of pairwise bonding that could be applied here, where each program has a sister program of sorts that’s sole duty is to watch the program, but I digress).

Paradoxes

Another set of non-computable problems are paradoxes. Paradoxes are common in universal tools where the rules are, well, made up. Here’s an example in human language: “This sentence is false”. This is a paradox because language in general is assumed to be comprised of true statements. However if what I said above is true, then the sentence is false. This means the sentence is both false and true, which logically can’t be the case. This is no problem in a system that isn’t reliant on the simple computation rules of the Turing machine universe. We as humans can see that sentence, shrug, and move on. This equanimity despite uncertainty was referred to by Leonardo Da Vinci as sfumato, having ease in knowing that some things are inherently uncertain, and that is not a issue!

A Turing machine will get trapped in a loop, forever trying to decide if the sentence is true or false. Paradoxes are non computable because computers literally can’t be in a state of paradox (have you ever tried to divide by zero?). Computers are foundational Boolean logic operators at massive scales. If something is required to be true and false, this breaks everything! (Quantum computers and transformers may not have this limitation, and we will discuss in a future post).

This fact alone is actually a huge issue in our universal tool, because paradoxes can be extremely useful as a creative tool, and elucidate unique facets about the universe.

This simultaneously implies that computers cannot suffer from what we might call cognitive dissonance, since dissonance is a sign of a paradoxical state, where a person deeply believes that A is the case and acts in a way that is directly counter to what would be the case if A were indeed true.

bramadams.dev is a reader-supported published Zettelkasten. Both free and paid subscriptions are available. If you want to support my work, the best way is by taking out a paid subscription.

June 20 2023

another banger alfred workflow

Writing

The Universal Tool
There is an old adage that “when you have a hammer, everything begins to look like a nail”

Code

Another Alfred banger. This time I'm appending to my weekly note > day of the week > events | thoughts | todo heading. It's basically the best thing ever to an organization and journaling nerd like me.

Example of thoughts pushed today (look at the time stamp!)

https://bram-adams.ghost.io/content/images/2023/06/example-of-result-of-weekly-push.png
example of result of weekly push.png

Alfred

https://bram-adams.ghost.io/content/images/2023/06/append-to-weekly-1.png
append to weekly 1.png
https://bram-adams.ghost.io/content/images/2023/06/append-to-weekly-2.png
append to weekly 2.png
https://bram-adams.ghost.io/content/images/2023/06/append-to-weekly-3.png
append to weekly 3.png

Python

import sys
import os
import datetime
import argparse
from pathlib import Path

# https://chat.openai.com/share/3e2173cd-b2da-4ae8-8dff-4d1ebde65fdd <- how this is made

append_to = os.getenv("append_to")
query = os.getenv("value")

# Get the day of the week
now = datetime.datetime.now()
day_of_week = now.strftime('%A').lower()
time_string = now.strftime('%H:%M:%S')

# Define the path of the Weekly_Folder
Weekly_Folder = Path("{YOUR_WEEKLY_FOLDER_PATH}")

# Get the most recent file in the Weekly_Folder
most_recent_file = max(Weekly_Folder.glob('*'), key=os.path.getctime)

# Define the section to append to based on the input category
if append_to == "todo":
    section = "### todo/" + day_of_week
    query = "- [ ] (" + time_string + ") "  + query
elif append_to == "events":
    section = "#### events/" + day_of_week
    query = "(" + time_string + ") " + query
elif append_to == "thoughts":
    section = "#### thoughts/" + day_of_week
    query = "(" + time_string + ") " + query
else:
    sys.stderr.write("Invalid category. Please choose either 'todo', 'events', or 'thoughts'.")
    exit()

# Read the file
with open(most_recent_file, 'r+') as file:
    lines = file.readlines()
    
    # Find the section and append the string_to_append
    start_append = False
    for i, line in enumerate(lines):
        if line.strip() == section:
            # Start appending after the section
            start_append = True
        elif start_append and (line.startswith("###") or line.startswith("####")):
            # Stop appending if we find another heading at the same or higher level
            lines.insert(i, query + '\n\n')
            break
    else:
        if start_append:
            # If the section was the last one, append at the end of the file
            lines.append(query + '\n\n')
        else:
            print(f"Could not find the section: {section}")
            exit()

    # Write the modified lines back to the file
    file.seek(0)
    file.write(''.join(lines))
    file.truncate()

sys.stderr.write(f"Successfully appended string to the {append_to} section on {day_of_week}.")

Obsidian Weekly Template

## Commitments

### todo/sunday

#### events/sunday

#### thoughts/sunday

### todo/monday

#### events/monday

#### thoughts/monday

### todo/tuesday

#### events/tuesday

#### thoughts/tuesday

### todo/wednesday

#### events/wednesday

#### thoughts/wednesday

### todo/thursday

#### events/thursday

#### thoughts/thursday

### todo/friday

#### events/friday

#### thoughts/friday

### todo/saturday

#### events/saturday

#### thoughts/saturday

bramadams.dev is a reader-supported published Zettelkasten. Both free and paid subscriptions are available. If you want to support my work, the best way is by taking out a paid subscription.

Blogging Has Just Changed Forever and No One Is Talking About It

Blogging has recieved a major upgrade, from an unexpected place.

💡
TL;DR: OpenAI just released share chats, allowing readers to get a insanely powerful look into the thought process of a writer and allowing the writer to increase the value of their blogs for little to no extra work. We examine the draft phase and edit phase, with a ton of examples embedded along the way!

note: I highly recommend you click all the links in this piece.

The blog-o-sphere has been taking major L's on the Internet as of late. Bloggers have taken loss after loss to platforms like TikTok and Twitter, where producers have had the "pleasure" of competing for likes amongst the chaos of noise, where the lone individual yells until their lungs sting with pain in a vain attempt to be the tallest soapbox in the shampoo aisle.

For small indie bloggers that sought their 1000 true fans, the torch of hope seemed to be entering its dying light phase, quietly exiting stage left to an Internet run by a few large aggregation sites. There was just no cost effective way to have competitive advantage over an endless stream of algorithmically curated material, an IV drip feed of jump cuts and words.

And just as all hope seemed lost, a horn sounded in the distance. Our unexpected saviors had arrived. The cavalry was here.

Share Chats from ChatGPT. Yes, you heard me right. That thing that allows people to effectively screenshot chats with a machine learning model. Let me repeat that. Share Chats from ChatGPT.

Allow me to elaborate on why this is a huge deal.

Those Who Write Actually Think

If you've ever dabbled with the idea of taking writing as a craft seriously, you'll know that all writing (and I really do mean all: from drunk text messages to an ex all the way up to graduate level books on theoretical quantum physics) is composed of two steps: conjecture and error correction, or in layman's terms, the draft phase and the edit phase. Every writer has their preference and quirks: some only write in the mornings, some write on typewriters, some dictate to their Voice Memos app during their jogs.

But all writers think. All writers think new thoughts, and then tear away at the thoughts they created. All writers build and prune, build and prune, and build and prune, until you, dear reader, see a meticulously-engineered polished final piece of work, quieter than a hunting owl and smoother than a…uh…some really smooth thing.

The thing is, up until now, the final work was all the reader got to see and all the writer could manage. Blogging, even with it's unique ability to leverage hyperlinks out to research and other blogs, was largely a one dimensional effort.

Enter ChatGPT

Ok, so where does ChatGPT fit into this puzzle? How can it increase the value of a blog post for the reader and the writer? I'll tell you! ChatGPT is…drumroll please

ChatGPT is frozen externalized cognition.

Whaaatt?? you might rightfully be thinking right now. How can we think outside our heads? And what does it mean to "freeze" cognition?

To answer this question, we need to examine the act of thinking in the two phases of conjecture and error correction above.

Conjecture

Conjecture is a fancy word for hypothesis which is a fancy word for educated guess which is a fancy term for cool idea that has a non zero chance of failure.

To make a new conjecture, one must be willing to trial multiple ideas and…well, see what sticks. Some ideas are good. Few ideas are really, really good. Most ideas are meh to bad.

The ideal conjecture phase is pure play. Don't set out to quell or snuff out any ideas, there are no bad ideas when the idea itself is to explore the space of ideas.

Conjecture lives mostly inside the mind, but that does not imply that conjecture only lives inside the mind. Think about the last time you were at a brainstorming session. Multiple minds were put to the task of solving one problem, but the thing is, all the participants have different backgrounds. Every person has their own set of priors, a fancy term for their own viewpoint built out of their unique experience and therefore show up to the table with a different offering to solve the shared problem.

Great, you may be saying, but if this is internal or done with a group, how does ChatGPT help?

In short, ChatGPT is a really, really good improv partner ("yes, and…"). Basically, thanks to RLHF training, the model will go along with any wacky idea you give to it -- it truly has zero preference about whether you want to opine on the best pizza place in Topeka, Kansas or discuss the finer points of the last Game of Thrones season. GPT. Will. Play.

Without judgement, you as a human can lead the Dance of Death as the instruments of your mind and ChatGPT play their frenetic tune into the rabbit hole of whatever the hell you please.

As an example, GPT in it's judgement free zone, can help you find words to express the idea you are looking to say.

Remember this from above?

And just as all hope seemed lost, the horn sounded in the distance. Our unexpected saviors had arrived. The cavalry was here.

Co-conjectured by me and ChatGPT.

Or this?

meticulously-engineered polished final piece of work

Also ChatGPT.

Or how about this from a second ago?

you as a human can lead the Dance of Death as the instruments of the mind play their frenetic tune into the rabbit hole of whatever the hell you please

Chat FREAKING G. P. T.

The conjecture phase with Share chats is basically a thought process camera (take a snapshot) and resolution increaser (see the steps of the mental recipe). It clarifies your ideas, helps you play with more concepts to go even further, and freezes this "play" phase in time for your readers to see the foundational aspects of your argument.

Error Correction

This brings us to the second phase, the whittling away of the marble sketch we created in the conjecture phase, error correction.

If conjecture was exploring the space by opening all available doors, error correction is going around and slamming each one by one until only the fittest remain.

When we are editing, we are literally proclaiming our thoughts to the public. These thoughts are sent out into the wild to be upvoted and downvoted, shared, mulled over, and eviscerated in comment boards.

The process of editing is baked into the reality we (you, me, the neighbors' dog, Canada, an oak tree, a pod of whales,…) share. All writers have a duty to translate the goings-on in their minds as faithfully as possible to an external audience of readers. And thus writers edit. Writers hire teams of publishers to bleed over word choice, to fight to cut entire paragraphs from a piece, to destroy the tower but leave the base intact. And stronger.

GPT serves as a great editor. Looking for a different way to say something? How about multiple ways to say something with pros/cons in tabular format?

No problem.

The edit phase is about tradeoffs. Cutting some ideas in favor of others. Choosing one phrase instead of another since it is likely to be understood by the target audience. But no idea, no theory -- is perfect. In fact, some ideas might be in direct conflict with each other and both remain true, and until now, there was be no way for the reader to divine this from the final edited work without a ton of caveats plainly stated by the writer. Share Chats allow the reader to see the edit choices made by the writer.

Editing also got a major, major upgrade.

Conclusion

OpenAI just released share chats, allowing readers to get a insanely powerful look into the thought process of the writer and allowing the writer to increase the value of their blogs for little to no extra work.

This makes blogging, thanks to it's core technology of hypertext, now multi-dimensional in nature, where the thought process of the blogger can be frozen as literal threads for the reader to dive into. This is a huge win for blogging, and aggregators have not caught up to the value add of this yet.

Forget chain of thought language model prompting, hello chain of thought blogging!

Other Examples You Might Want to Try

  • finding the right word that fits the flow of your piece better
  • coining a creative turn of phrase or trying to teach a new concept
  • summarizing something into simpler conceptual terminology
  • arguing about pros and cons
  • simulating audience questions or comments
  • "invoking" the style of writer's you look up to to emulate
  • creating a "writers table" to edit your work in third person

And these are just off the top of my head.

One Last Thing

Hugely, and I mean hugely, these share chats are also templates. What does this mean? This means a reader gets to continue the writers thought process with their own cognitive understanding and background. They get to take the writer's seeds of thoughts, and recompose them in their own garden, like taking a lemon from your neighbors prolific lemon tree to plant in your own backyard.

It’s like an MMO for blogging between the reader the writer and the LLM, I can’t overstate the importance of this.

P.S I Lied, There's Something Else. Something Big

Blogging isn't the only work product that has been quietly disrupted by Share Chats. Interested in learning about this? Sign up for the newsletter to be informed of when it drops!

Hint(!):

You now get a front row seat into the mind of the coder, and since GPT/copilot is writing all out code anyway these days, you get to see the libraries it prefers to reference, and how to move towards or away from these imports.
No longer do you have to guess what some previous incarnation of the Avatar some software developer was LARPing as, you can literally see their thought process.

bramadams.dev is a reader-supported published Zettelkasten. Both free and paid subscriptions are available. If you want to support my work, the best way is by taking out a paid subscription.

Mark Twain on Editing

I apologize for such a long letter - I didn't have time to write a short one

It seems that the exact quote "I'm sorry I ran out of time to edit this" is not found in the search results. However, a similar quote attributed to Mark Twain is, "I apologize for such a long letter - I didn't have time to write a short one."

bramadams.dev is a reader-supported published Zettelkasten. Both free and paid subscriptions are available. If you want to support my work, the best way is by taking out a paid subscription.

Funny-Writing Tip #4: Make It Short Anything worth saying is worth saying briefly. It may take more time (Mark Twain famously apologized for a letter’s lengthiness by explaining that he didn’t have time to make it short), but this is time well spent. Sometimes cutting a word or two can make a line twice as funny, or turn an unfunny line into a funny one. Experiment with your work by cutting words. See if anything’s lost. And use simpler, shorter words when possible. (Location 417)

World Building in Obsidian

I am exploring the art of world building in Obsidian, taking inspiration from Hunter X Hunter and Game of Thrones. I am learning that world building is made up of parts which can be linked together by backlinks and surfacing to create interesting callbacks and payoffs.

Disclaimer: I've never built a fictional world in Obsidian. Just in case this post reads as too precise or anything, wanted to let it be known I am a novice. Though I do hope one day soon to produce some fiction of my own!

To discuss the art of world building in the Obsidian software, I'd like to point out some of my inspirations for world building.

Hunter X Hunter World-building

My favorite world building story is Hunter x Hunter. The world and its characters are so vibrant and have so much depth, with payoff for some small character details coming many arcs after their introduction. The world itself feels like the main character of the show, and the line of villain/protagonist gets blurred in every arc.

Togashi is a master crafter of creating a veneer of simplicity and then subverting it in a way that feels entirely natural.

The world is so detailed in fact, that when Gon is forced to come to terms with his misconceptions, it causes an intense mental breakdown 202301092316.

Game of Thrones World-Building

GRRM has also discussed his writing style in interview and how he develops his characters.

The human heart in conflict with itself is the only thing worth writing about.

From this we can deduce that conflict from a character node should cause ripple effects in its neighbors, disrupting the peace.

The Real World

The real world is amazingly crafted as a story too. Herman Hesse puts it best in Siddhartha, while Siddhartha sits next to the river in reflection and discovers the connection of it all: ^f88637. The real world has real rules (physics), real magic (science), and real character development against an indomitable foe (natural selection),[1] as errors are corrected out of the system.

Induction, instrumentalism and even Lamarckism all make the same mistake: they expect explanationless progress. They expect knowledge to be created by fiat with few errors, and not by a process of variation and selection that is making a continual stream of errors and correcting them. (Location 3613)

Emulating Togashi and GRRM with Obsidian Tools

The whole is made up of parts. All stories start with atomic elements, such as a character name or a glimpse of a location, which can be stored as Zettels.

Parts can be linked together by backlinks, allowing the creation of comprehensive arcs by putting atomic notes in collection files, also known as Maps of Content.

Surfacing old notes can create interesting callbacks and payoffs, making the world seem much more well thought out and comprehensive when using Obsidian tools to emulate the writing style of Togashi and GRRM.

  • Similar: Is Obsidian Publish a Good Venue? Is Twitter? - 202301240135
  • Clever: Why I Use the Head of Leda Everywhere - 202302092343
  • Chaotic: When Buying Bread in the Grocery Store - 202301032252

  1. The Beginning of Infinity does a great dive into natural selection

Actually Good Technical Writing Tips

If you are in the writing game, do yourself a favor and read this blog post about writing for developers.

Some of my favorite tips -- emphasis mine:

tl;dr:

  • be bold about using bold
  • short headers, few letters
  • jump cuts work in text too
  • variety in sentence structure makes for good reading, variety on a plate makes for good eating
  • hey little reader lemme whisper in your ear ^58oqr1
  • don't enjoy the little detours[1]
  • build an unhealthy addiction to writing for people you'll never meet
Make the post skimmable
Since 1994, Jakob Nielsen and John Morkes have been conducting studies to learn how people read online. Their conclusion, which remains true, is that readers rarely read the whole page.
Online readers are active. They like to scan and skim, picking the information they need. Most readers will read only 20% of the words in a given article. (View Highlight)

Writing short (8 words or less) and interesting headers that tell a story. Don’t go deeper than H2 or H3.
• Write short paragraphs of less than 5 lines.
• Use bold or italic fonts to emphasize important parts of your text.
• Separate sections with plenty of whitespace.
State the idea behind each paragraph in the first sentence. (View Highlight

Never go for longer than three paragraphs without using one or more of the following:
• Pictures
• Diagrams or charts
• Code snippets

• Lists
• Headings
• Tables (View Highlight)

“This sentence has five words. Here are five more words. Five-word sentences are fine. But several together become monotonous. Listen to what is happening. The writing is getting boring. The sound of it drones. It’s like a stuck record. The ear demands some variety.”
— Gary Provost,
100 Ways to Improve Your Writing.** (View Highlight)**

The language you use can either bring you closer to the reader or create distance.
Language can create a barrier between the writer and the reader.


Write using I, we, and you. Don’t be afraid to express your opinions and views. Imagine you’re speaking to a close friend and don’t write anything you wouldn’t say in a conversation.
There are instances in which rules or style guides recommend not using such pronouns. Even so, you can still maintain a friendly tone by writing in the first person for the first draft and removing it on a second pass. It may sound like extra work, but it brings warmth into otherwise dry writing. (View Highlight)


Once the clutter is controlled, it’s time to check for missing links in your reasoning and places where you branched off the topic. Each paragraph should build on the previous one without any detours. This is very careful work that demands composure. Expect the draft to undergo multiple revisions until all paragraphs perfectly line up. (View Highlight)

Make writing a habit: find the best time to write and make a habit of writing every day. Some people like the morning and night owls write best under the cover of darkness.
• Change the scenery: go to a cafe or the park. The library works too.
• Go for a walk: turn off the computer and do some exercise. Some of the best ideas I’ve had came to me when I wasn’t at the desk.
• Sleep on it: if you’re overwhelmed, let it rest for a few days and focus on other articles. When you come back, things will fall into place a lot faster.
(View Highlight)

https://bram-adams.ghost.io/content/images/2023/01/you-should-enjoy-the-little-detours.png
you should enjoy the little detours.png

↩︎