December 28, 2022 3 min read

Food

This article focuses on ingredients and a balanced diet. For information on heating, combining, and serving, see cooking

My approach to food emphasizes meat-free whole foods and keeping good food around instead of counting every calorie.

Much like wearing a uniform might save cognitive overhead of choosing an outfit every day, having a limited menu of go-tos that are always stocked is Step Zero for eating well.

Because I am often cooking for one and don't really enjoy leftovers, a lot of this is oriented around cooking or assembling single meals fresh to eat immediately.

Breakfast

Tim Ferris writes in the 4-hour body about the importance of getting protein into your body in the morning, ideally 30 minutes after waking.

Greek Yogurt & Granola

Greek yogurt and granola is a great breakfast option because it's packed with protein, healthy fats, and complex carbohydrates. Greek yogurt is high in protein, which will keep you full for longer and provide energy throughout the day. Granola is a great source of complex carbohydrates, which will give you sustained energy and help you stay alert and focused.

Oatmeal & Granola

Oatmeal and granola is a delicious and healthy breakfast option. Oatmeal is a great source of complex carbohydrates and fiber, which will give you sustained energy and keep you full until lunchtime. Granola adds a crunchy texture and a boost of protein and healthy fats.

Toast & Greek Yogurt

I first had this at the Samovar Lounge in Yerba Buena Park. It was simple and yet extraordinarily delicious and decadent: a thick slice of sourdough with fresh, thick greek yogurt, topped with honey, olive oil, and big flakes of sea salt. It is a simple and luxurious breakfast.

Eggs & Toast

Eggs and toast is a classic breakfast combination that is quick, tasty, and nutritious. Eggs are a great source of protein, while the toast provides complex carbohydrates for sustained energy. I usually add some hot sauce or chili oil.

Hardboiled Eggs

Hardboiled eggs are a great breakfast option if you're short on time or don’t want to make dishes. They're a great source of protein and can be eaten alone or paired with toast or a piece of fruit. Hardboiled eggs can also be pre-cooked on the weekend and stored in the fridge for a quick and easy breakfast during the week.

Lunch

Lunch is an important meal of the day and should include a balance of protein, carbohydrates, and healthy fats. Salads are a great lunch option because they can be customized with a variety of ingredients and flavors. Here are some ingredients to consider when making a salad: lettuce, protein, toppings, and dressings.

What should I have for lunch? Just have a salad. Its not that complicated.

Salad

Lettuce
  • Baby Spinach
  • Romaine
  • Spring greens
Protein
  • Chickpeas
  • Black beans
  • Pre-cooked chicken
  • Pre-cooked fish
  • Tofu
  • Hardboiled eggs
Toppings
  • Sliced cucumber
  • Tomatoes
  • Sliced purple cabbage
  • Sprouts (sunflower, alfalfa, arugula)
  • Sliced citrus (oranges, mandarins, apples)
Dressings
  • Ceasar
  • Oil & Vinegar
  • Greek Yogurt

Dinner

cooking-ramen-experiments

Desserts

Chocolate chip cookies

chocolate-chip-cookies

Kolaches

cooking-kolaches

December 26, 2022 7 min read

How to Travel for Maximum Joy

#travel #personal

#travel

Traveling can be an exciting adventure, but sometimes it can be hard to keep the joy of spontaneous experiences alive. Whether it's a weekend getaway or a longer trip, I try to apply a few simple principals to my travel and the more I stick to them, the more fun I have.

Coffee in the Morning

Before embarking on any journey, make sure to grab a coffee before you hit the road. The first thing you should be doing every morning is finding, making, and consuming coffee. This seems like a joke or something that can be delayed; it is not.

Accept and Embrace Mistakes

Travel is more fun if you just accept the fact that you will make mistakes and wrong turns and unforeseen circumstances will delay or divert you. Those things are the joy of travel; not sources of frustration. A slight divergence in how you see the same situation will radically alter your enjoyment of it. While not always possible on minimal sleep, food, or patience- you can often switch your brain to the right spot by reminding yourself this is an adventure.

Don't stress

It's completely normal to feel a certain level of stress when you're traveling. After all, you're in a new environment, potentially far from home, and things might not always go as planned. But it's important to remember that these are all part of the travel experience.

Instead of stressing over what might go wrong, try to focus on what's going right. Maybe your flight was delayed, but that gave you an extra hour to finish that book you've been engrossed in. Perhaps you got lost trying to find a restaurant, but you stumbled upon a great little café.

Leave Room for Synchronicities

In order to do this without stress, you need to strategically plan your travel in a way that leaves space for synchronicities to happen. A tight schedule makes everything stressful and should be avoided when traveling for pleasure.

Sometimes, when you're traveling, you can come across amazing opportunities and experiences that you didn't even know were possible. Make sure to leave some room in your schedule and your heart to be open to these unexpected moments - you never know what you'll find if you just go with the flow.

Keep it Moving

When traversing new landscapes, whether it's bustling city streets or quiet country roads, it's crucial to remember we're sharing these spaces with others. This principle is integral to maintaining harmonious relationships with locals and fellow travelers alike.

If you're meandering through a city, make sure to step to the side when stopping to gaze at the architectural wonders or consult your map. This simple gesture helps prevent pedestrian traffic jams and signals respect for the city's rhythm and the people who live there.

The same applies when riding a motorcycle or driving. Pay attention to your surroundings and ensure you're not obstructing traffic when you stop to take in the view or check your route. Strategically design your stops to be safe and considerate, perhaps choosing a designated lookout point or parking space rather than pulling over haphazardly.

Handling Disagreements

When traveling with others, disagreements are inevitable. Here's a simple, three-step approach to navigate them:

  1. Listen: Ensure everyone involved has the chance to express their view without interruption - take a break to cool down before doing so if necessary.
  2. Compromise: Find a middle ground that may not be perfect but is acceptable to all parties.
  3. Move on: Don't dwell on the disagreement. Remember, you're here for the adventure and shared experiences.

Traveling on a Budget

Traveling, especially on a motorcycle, can be a very economical way to see the world. Camping out under the stars, cooking meals over an open fire, and immersing yourself in nature can not only create memorable experiences but save money but also.

Utilize budget accommodations like campsites or motels when needed, eat at local diners or cook your own meals with ingredients from local markets, and take advantage of the free beauty that the great outdoors has to offer. This type of travel gives you an authentic connection with the place and its people without costing a fortune.

Splurge

But just because you're traveling on a budget doesn't mean you can't indulge once in a while. If you find yourself in Maine, it might be worth splurging on some fresh oysters straight from the sea. Or maybe you pass through Kentucky and decide to treat yourself to a bottle of locally distilled bourbon.

It's about finding a balance between frugality and enjoyment. Yes, travel economically, but remember to savor those unique regional delights that you won't find anywhere else. Because at the end of the day, these are the experiences that make your journey unforgettable.

Allowing occasional splurges doesn't mean throwing caution to the wind. You can set aside a 'treat yourself' budget for those unique local experiences and stick to more economical options otherwise. This approach ensures you don't miss out on regional specialties while keeping your finances in check.

Balancing the Planned and Unplanned: Tuning Into Your Energy

Planning for travel can provide a sense of structure and security, but it's equally important to remain open to spontaneous experiences and listen to your own energy levels. Your plans serve you, not the other way around.

Plan But Stay Flexible: Begin by creating a plan that includes must-see spots or activities. However, consider these plans as options rather than obligations. This way, you've created a safety net of planned activities without anchoring yourself to them.

Tune Into Your Energy: Pay attention to how you're feeling each day. If you wake up exhausted, don't force yourself to stick to a plan that involves a lot of physical activity. It's okay to have a slow day, rest, or explore something less demanding. Travel is about enjoyment, not endurance.

Spontaneity Over Schedule: Leave ample room in your schedule for unexpected adventures. This might mean exploring a local market recommended by a friendly local or spending the afternoon getting lost in a beautiful neighborhood you just discovered.

Embrace Change: Plans can change due to external factors like weather or closures, or internal factors like mood or energy levels. Instead of seeing this as a disruption, view it as an opportunity for an unexpected adventure.

Safety, of course, should never be compromised. Being spontaneous doesn't mean being reckless. Always stay informed about local risks and safety guidelines and above all: trust your instincts.

Dancing in the Rain: Embracing Uncertainty in Travel

Life isn't about waiting for the storm to pass, but learning to dance in the rain. This applies fittingly to travel as well. When planning a trip, it's easy to become preoccupied with weather forecasts and dread the possibility of rain ruining your carefully planned adventure. But in reality, these concerns only serve to drain your energy and cast unnecessary worry over your journey.

Rain or shine, travel is about experiencing a place authentically and completely. Weather is an integral part of any destination's charm and identity – it can shape landscapes, inspire cultures, influence cuisine and determine local lifestyles. To reject or fear an aspect of this because it may bring discomfort or inconvenience is contrary to the true spirit of travel.

Embracing potential rainy days with open arms involves changing our perspective on what 'good' travel looks like. Sure, sunshine may be ideal for a picture-perfect beach day or city sightseeing tour but consider this: how ethereal would a misty forest hike be? Or how atmospheric would a quiet mountain valley appear after a downpour? Sometimes it’s these unpredictable conditions that can lead to unforgettable moments.

Scarcity mentality

My proclivity for overpacking, Ms. Beckford told me, comes from a place of pessimism and a “scarcity mentality,” whereby I’m constantly imagining everything that could go wrong on a trip and trying to pack accordingly. That negativity can color a trip from the start.

Sure, plan ahead, research the climate at your destination and pick a few fun outfits you want to wear in your Instagram upload, she advised, but don’t stress too much. It’s a vacation, after all.

December 23, 2022 7 min read

Into the Wild: Motorcycle Camping Gearlist

I've spent countless hours researching, testing out different methods, and developing a reliable motorcycle camping setup that I want to share so that anyone can make their dreams a reality.

It just makes sense that motorcycles and camping go hand in hand. The same sensory connection to the world we get from motorcycling—the same elements we love, of being in the wind and leaning through the curves—can take place around camp. This both adds to your motorcycle adventures and contributes an entirely new passion to the mix. Tim Collins and Amanda Zito Collins-Zito-The Fundamentals of Motorcycle Camping

Modular Design

Let's start by talking about how to stay organized on the road. There will come a time when you need something you packed but don't remember where it is or what bag its in.

To help avoid confusion, lay out your gear before you head out and get in the habit of labeling bags or containers so you can find them when needed. Everything should have precisely one place where it belongs. You should be able to envision that place in your mind’s eye and find it in the dark.

Start by packing all of your gear into tiers; with essential items within easiest reach - this way, you won't have to fumble around for them when you need them.

In certain scenarios, it might be helpful to pull off subsets of your bags. For instance, if you’ll need to check into a hotel during your trip, you may want to leave your camping gear behind while bringing smaller essentials such as clothing and electronics up to your room. Or, if you plan on meeting up with friends and traveling by boat, what do you leave behind on the bike and what do you bring along to camp? These are questions that can be answered with thoughtful packing strategies and are better addressed ahead of time so you can grab your bags and focus on your adventure.

Consider using dry bags clipped together or attached to your bags with carabiners so everything stays together no matter what kind of terrain or weather follows you on your journey.

My bags for Island camping at Lake George

You see things vacationing on a motorcycle in a way that is completely different from any other. In a car you’re always in a compartment, and because you’re used to it you don’t realize that through that car window everything you see is just more TV. You’re a passive observer and it is all moving by you boringly in a frame. Pirsig-Zen and the Art of Motorcycle Maintenance

Motorcycle: Kawasaki Versys-X 300

Your bike is one of the most important elements of a successful camping trip, after your own body. You need a model that’s powerful enough to handle off-road terrain, yet lightweight enough to pick up when you inevitably drop it. It should have plenty of luggage capacity - able to carry all of your essential gear comfortably between destinations.

The Kawasaki Versys X 300 fits all my requirements.

  • Engine: 296cc liquid-cooled 4-stroke DOHC 8-valve parallel twin.
  • Power: 40 HP @ 11,500 rpm.
  • Torque: 19.2 lb-ft of torque @ 10,000 rpm.
  • Curb Weight: 386 lbs (175 kg)
  • Seat Height: 32.1 in (815mm)

What I looked for in a bike

  • Weight: I need to be able to pick it up and take it on single track
  • Tires: It needs to be able to go off road
  • Luggage: It needs to be able to carry all my camping gear

Gearing Up

Finding the right protective gear is as important as getting your motorcycle. Make sure you have a helmet that fits correctly, gloves, jacket and boots that are designed with safety and comfort in mind. You want to be thinking about your adventure, not your gear. A little investment goes a long way.

My setup:

  • Helmet: Bell Racer
  • Gloves: Knox Handroid Gauntlets
  • Jacket: Halo Drystar
  • Boots: Forma ADV
  • GPS: Garmin Zumo XT

Gear Up Your Motorcycle

It’s just as important to your gear up your motorcycle as it is to gear up yourself. You’ll need a variety of bags, depending on the length of your trips. Having an excuse to have a variety of bags may be one of my favorite reasons to travel.

With a system like the Mosko Moto Reckless 80L Motorcycle Luggage System you have a main bag, two 25L side bags and two 4L auxiliary bags for maximum organization. Look for bags with durable material, waterproof construction and straps to keep your things secure.

You should be prepared to ride in the rain. It will happen at the most inopportune time, so all of your gear should be able to get wet along with you. Your main bag should include a dry bags for at least clothing and a first aid kit, while your side dry bags and auxiliary bags should house your camping gear such as a tent, hammock, sleeping bag, liner and pillow.

I also carry an art kit and a Jetboil with fuel for coffee in the morning.

This is definitely Too Much Stuff, but she handled it like a champ

Bags

  • Main bag: 5.11 Rush 24
    • Dry bag for clothes
    • First aid kit
    • Art kit
  • 25L side bag 1: tent, hammock
  • 25L side bag 2: sleeping bag, liner, pillow, pad
  • 4l aux bag 1: jetboil + fuel

exploded bags diagram

Mosko Moto Reckless 80L Motorcycle Luggage System

How to find anything (what bag is it in?)

Another reason I lay out all my gear is so that I can remember what I brought or even look it up later if I forget that I had something useful but didn't bring it out until the end of the trip. Staying organized helps make sure that I know where my items are located and how many of each item exist so that nothing gets lost or forgotten about when packing up after camping somewhere new!

Camping

It helps if you already have a camping setup from backpacking or car camping. Camping off a motorcycle requires finding gear that can be condensed down to the smallest possible form. Space on the bike is precious and every square inch considered carefully.

I love the Marmot Tungsten 2P Tent—a lightweight but versatile option that sets up quick, though it is a bit large for my liking.

Marmot Tungsten 2P Tent

Campsite Considerations

Camping off a motorcycle requires finding gear that can be condensed down to the smallest possible form. Look for items with versatile features and lightweight construction and consider your space limitations when selecting items. We love the Marmot Tungsten 2P Tent - a lightweight but versatile option.

You should also consider a campsite layout to help keep your gear safe and organized while still giving you plenty of space to explore. Take a look at our diagram below to get an idea of how you can setup your campsite for maximum enjoyment and convenience.

Motorcycle repair kit (home + travel)

Because no matter how much research and preparation goes into a journey there are still moments when things will go wrong; having an emergency repair kit can help ensure that a small issue doesn't derail your trip entirely! Better to have it and not use it, than to need it and not have it!

Home repair kit

  • Socket set 4mm-19mm
  • Combination wrenches 8mm-19mm
  • Pliers
  • Hex wrenches 2-10mm
  • Adjustable wrench
  • Allen wrench set
  • Torx wrenches
  • Spark plugs, 10mm thread, 0.75in

Travel repair kit

  • Tubeless tire repair kit
  • Mini tire inflator
  • Jump battery

Ready to explore

Now that you’ve got your gear and a plan in place, it’s time to start your journey! Even with the best-laid plans, things can still go wrong on the trail, and that’s all part of the fun.

If you live in the Hudson Valley, check out hudson-valley-motorcycle-rides for some great spots to explore. Happy camping!


#setup #motorcycle #travel

reading/Thompson-Hells Angels

December 23, 2022 2 min read

Making Space to Make Dope Shit

![[4168054398_Isometric_3D_rendering_of_a_studio_setup__vibrant_colors__cartoon_style__plants__tools__cabinets__sh.png]]

Creating a studio for your creative endeavors doesn't have to break the bank. When you know your shit, it's easy to turn any space - big or small - into a place for your transformative ideas to come to life. Here's an insider look at my current setup.

Get Vibes Right

The beginning of any worthwhile project is to make sure the atmosphere is just right. Get an adjustable chair, lighting fitted to the task and make sure it's the right temperature. Your art needs the perfect environment to thrive.

Get Your Supplies

Each type of art requires its own supplies and materials. Think about what you'd like to create and make sure you have everything you need on hand:

  • Acrylic Painting: Acid-free paper or canvas, paints, brushes, palette and painting mediums.
  • Watercolor Painting: Cold press paper, paints, brushes, and palette.
  • Linocut: Linocut blocks, carving implements, block printing ink, and block printing tools.
  • Dyeing: Soda ash, dye, a container for fabric and dye, and fabric to dye.
  • Soap: Soap molds, scale, thermometer, lye, and oils.

My Setup for Maximum Efficiency

Everything needs to have its place, or else you'll be searching for supplies constantly. Use organizers, bins, trays and racks to keep your materials accessible and organized, it's a payoff that multiplies over time.

Make the space your own, and remember to be patient. Projects like this can bring a lot of satisfaction and inspiration. With the tips in this blog you'll be ready to get the most out of your art studio.

Travelling art setup

TODO

Getting Started

December 05, 2022 9 min read

Coach Artie: Webhooks, Cron, and Advanced Reflection

We've been working hard to make Coach Artie even better, and we're excited to share some updates on recent work we’ve been doing to make him more helpful and intuitive.

Recently, we introduced a new way for you to experiment with Artie's abilities without having to run the entire system or interact through Discord. This means you can now test and refine new capabilities quickly. It's a game-changer for speeding up development and making it easier for contributors to add their innovations. Coach Artie automatically parses jsdoc-formatted documentation within capabilities, so if the capability is well-documented he should be able to pick it right up.

Artie has also learned to communicate through webhooks, a technology that lets him send and receive messages from lots of different web services. We made sure to handle HMAC secrets so it is private and secure, and it works seamlessly with various services you might already use, like GitHub or Missive.

We also made it so Artie can now deep dive into long documents, digesting long and complex information and turning it into concise memories. Whether it's a lengthy report or a running notes from your meetings, he breaks it down into digestible memories, making sure he remembers the right details at the right time. And when you send him a file, he now treats it like it has its own life, creating memories specific to that document, which can evolve as the document changes.

As Coach Artie continues to learn and adapt, we're also building new ways for you to see what's going on in his 'brain' through a real-time, user-friendly website, which we have been using internally for development. This will help Artie’s users manage his capabilities and see the impact of his memory in action. It’s like having a window into how he thinks.

Through these updates, Coach Artie is not just a tool; he's becoming a more integrated part of our workflow, gathering context about the world automatically, anticipating our needs, and adapting to them without skipping a beat. We're excited to see how these improvements will continue to transform the way we interact with our tools.

graph TD
    A[Capability Player] -->|Test new features| B[Webhook Support]
    B -->|Secure communication| C[Missive Integration]
    B -->|Trigger actions| D[Automated pgcron scheduling]
    A -->|Dynamic testing| E[On-The-Fly Configuration]
    E -->|Model switching| F[Claude Support]
    E -->|Config adjustments| G[Supabase Admin Capabilities]
    C -->|Access conversations| H[Advanced Reflection: Todo List]
    D -->|Schedule tasks| H
    I[Deep Document Ingest] -->|Process documents| J[Forming Memories about Files]
    J -->|Memory creation| K[Read Repo Capability]
    I -->|Summarize content| K
    K -->|Interact with repos| L[Coach Artie Brain]
    L -->|Monitor memories and processes| M[Memory embedding visualization]
    H -->|Create actionable todos| L
    G -->|Database management| L
    F -->|Enhance capabilities| E
    J -->|Generate memories| L
    B -->|Integrate external services| K
    C -->|Enhance interaction quality| H
    D -->|Automate processes| G
    I -->|Enhance document handling| L

Capability Player

We added a new capability player that makes it unnecessary to have a running instance of Coach Artie in order to test new capabilities. It allows you to run a capability with any arguments you choose, which should considerably speed up development. This should also enable people to contribute and test capabilities without needing to run the entire Coach Artie instance.

Webhook Support

We added support for communicating with Coach Artie through webhooks, including HMAC secrets, which allows you to send private information securely. Initially, we added this integration for Missive, but it works for any service that uses webhooks like GitHub, Slack, or Supabase.

Missive Integration

In addition to the Missive webhook integration, we added deep Missive capabilities that allow Coach Artie to access conversations and attachments and build memories from Missive conversations.

On-The-Fly Configuration

We enhanced Coach Artie with capabilities to edit his own configuration on the fly. This includes allowing him to switch between models such as Claude or OpenAI, with the potential to include others in the future. He can also adjust settings like Max Tries and other configurations. Now, he can run a capability to see his current settings and edit them in real time.

Automated pgcron scheduling

One of our goals for Coach Artie is to enable him to schedule tasks for himself in the future. Since we're already using Supabase, it made sense to leverage its existing pg_cron functionality. This allows Coach Artie to set a cron job with any schedule he desires. This job will initiate a webhook with a custom prompt that gets sent to the previously mentioned webhook endpoint.

Advanced Reflection: Todo List

We introduced a new to-do list concept, inspired by the idea of having sticky notes at your desk. These to-dos are omnipresent, added and removed as your day and week progress. To manage these, we added a new reflection stage. In this stage, in addition to making memories from a user interaction, Coach Artie determines whether a to-do or multiple to-dos need to be created from the interaction. These to-dos are then always added to the context window, ensuring they inform every future user interaction.

Deep Document Ingest

To enhance our fetch and summarize capability in the web browser, we recognized the need for the robot to read very long documents and transform them into one or many concise memories linked to that document. This is often necessary when handling large documents, such as extensive notes from user meetings or detailed documentation. We added a new processing step, which we call "deep document ingest." This allows us to take lengthy documents and convert them into memories in an efficient and consistent manner, leveraging all the benefits of memory creation, while still creating distinct enough groupings to ensure we recall the right things at the right time.

Forming Memories about Files

In addition to deep document ingest, we introduced a new concept where we can now form memories about files or resources. Previously, we only created memories linked to users, so a memory might contain information about a file a user sent, but it was always associated with that user. Now, when a user sends us a file, we treat that file as its own entity with its own memories. This is particularly useful for documents that change over time. It’s also beneficial for images and PDFs because we can process them with specialized vision and OCR capabilities, generating one or many memories of the document that can be accessed via that document ID.

Read Repo Capability

We've been eager to give Coach Artie the ability to read entire repositories. Excited by new services that offer larger context windows, we can now potentially send some or all files from a repo, allowing Coach Artie to answer questions based on the structure of our entire codebase. To achieve this, we need to enable him to access any GitHub repository and send him all the files in an intelligently formatted manner. This setup will allow us to pose user questions similar to how we handle documents. Furthermore, it's essential to allow him to form memories about pieces of code that are not direct one-to-one representations; these are abstracted summaries of facts generated from the code and used for understanding the architecture.

Claude Support

One of the more exciting developments over the last few months has been validating a long-held concept at Coach Artie—namely, that if we switch to a different LLM model, Coach Artie will retain much of the same functionality and personality we depend on. We recently tested this by moving the backend from OpenAI to the Anthropic Claude API, and we're thrilled with the results. The transition required us to format our messages slightly differently and adopt an XML-based command pattern. After making a few adjustments, we found that the switch was pretty seamless. We've particularly enjoyed working with Claude, finding its personality more enjoyable as it offers more openness and creativity compared to the increasingly restricted ChatGPT API.

Supabase Admin Capabilities

One of the key advancements we've unlocked is enhanced database capabilities for Coach Artie around Supabase. All of Coach Artie’s memories, messages, and tasks are already stored as Supabase tables. We've now empowered him not only to insert, delete, and update rows on his own but also to create new tables and define new schemas on the fly. This capability provides a powerful solution that naturally extends as the models evolve, allowing him to build his own systems and data storage methods—capabilities we couldn’t have anticipated without the flexibility afforded by his new meta Supabase capability.

graph TD
    A[Self-Management Core] -->|Dynamic Configuration| B[On-The-Fly Configuration]
    B -->|Model Switching| C[Model Choices]
    C -->|Choose Claude or OpenAI| C
    B -->|Adjust Runtime Settings| D[Dynamic Settings Adjustment]
    D -->|Update Max Tries, etc.| D
    
    A -->|Meta-Capabilities| E[Supabase Admin Capabilities]
    E -->|Database Self-Management| F[Database Operations]
    F -->|CRUD Operations on Data| F
    E -->|Schema Self-Modification| G[Dynamic Table and Schema Management]
    
    A -->|Self-Auditing Capabilities| H[Coach Artie Brain]
    H -->|Monitor Own State| I[Real-Time Monitoring]
    I -->|View and Analyze Logs| J[Memory and Process Logs]
    I -->|Access and Query Logs| K[Log Querying]
    K -->|Self-Diagnosis and Debugging| K
    
    B -->|Capability Testing| L[Capability Player]
    L -->|Test New and Existing Features| L
    
    H -->|Visual Feedback for Users| M[Admin Interface]
    M -->|Client-Side Application| N[Client Side App]
    N -->|Manage Configurations and View States| N

Coach Artie Brain

For the first year, we focused on managing Coach Artie exclusively through Discord, engaging in conversations and training him through the development of memories and patterns, which resulted in specific actions. Now, as we introduce more advanced capabilities, it's becoming crucial to have effective ways to see what's happening in Coach Artie's "brain" at any given time and in real time. To address this, I've begun developing a client-side app using Nuxt that displays all of Coach Artie's memories and messages.

We are now sending all the logs to Supabase, enabling you to view and filter these logs as they process in real time. This development is particularly exciting because it also manages configurations and prompts, creating an admin interface that simplifies management for non-technical users and potential clients of Coach Artie. This interface is designed to be simple, beautiful, and powerful, enhancing the user experience and facilitating self-management through a user-friendly web interface.

As we advance the capabilities of Coach Artie, it's clear that our work at Room 302 Studio is a small but meaningful step towards the future of interactive AI. By focusing on user-centric features and intuitive design, we are committed to making advanced technology accessible and useful for everyone. While we are proud of our progress, we view it our contribution to a larger journey in the ever-evolving landscape of AI.

Coach Artie is open source for non-commercial use, embodying our belief in the power of community-driven innovation. By making these tools available freely, we invite developers and enthusiasts to join us in refining and expanding Artie's capabilities. We want to build a collaborative environment where Artie grows through shared knowledge and creativity.

November 14, 2022 8 min read

Election Night 2018

Around 1AM I saw a note in Slack that said, very simply, that there were bacon pancakes in studio 3B. Studio 3B had been accurately described to me as “that costco looking studio” and it held a makeshift control room. Screens were stacked at the front, different desks decked out with multiple monitors encompassing the director’s desk.

I said “It looks like you guys are launching a ship…”

“You know you’re not the first person to say that”

Jason and Adam had set up a makeshift assembly line, cooking bacon and then squirting pancake mix onto the strips and cooking them as quickly as the growing assembly of stagehands and graphics people and technical directors could eat them. Everyone was in good spirits. It was 1AM and things were, for the most part, over. Nothing had blown up. Lots of small things had blown up. But doing elections is like flying a large ship. Things break, and are designed to break, and so you use backups or take them out and figure out how to keep flying. So there is a special kinship with the people you fly with. You could have crashed and burned together. But you avoided it.

Standing in front of a big screen with the app on it

It is very strange to make an app that is put onto TV because it is performed. In a performance there is not a lot of room for error. It is definitely the most stressful thing I have ever done. To create something and hand it off to someone else and put it on a screen I have very little control of and broadcast it to 19 million people. And they translated it into Spanish at like 1 am the night before we went live. Very wild.

It felt really cool though when I went to collect my headset. Broadcast works through these radio frequencies, and for the most part it’s silent (when things are going well) and you can hear things breaking all over. “The 3A wall went to black” someone says. “The (ice) rink graphics are not loading” someone else says later. “Don’t go to that for now.” someone else responds back. You hope to god you don’t hear your name.

I kept my ears perked for key words like “Adam” (Kornacki’s producer), “Jan” (Who created the system that producers use to put the app on the screen), “The App” (Which is what everyone calls the app we built for the touchscreen), and of course my own name. You keep an eye out for emails and texts. Adam had been texting and calling me at all hours in the weeks leading up to the election as he did hits on Maddow and Morning Joe and Brian Williams so I had gotten used to fixing things or adding new scorecard filters at a moment’s notice.

Boop boop boop, just edit some JSON, VPN into the NBC network, SSH into the server that serves the app, git pull from master, pm2 restart all, text the producer that it’s updated. Bada bing bada boom. I did it from my couch a few times in a late-night emergency and then watched my changes on air a few minutes later through Hulu while smoking a spliff. That is a pretty cool feeling.

There are a lot of negatives that I could choose to dwell on. I keep thinking about that Larry Page quote: “it is very hard to fail completely at a very ambitious thing”. When you try and strive for enough cool shit, when some of it fails, as things inevitably do, even your failure is progress. I feel like we did that.

I wonder what I sacrificed to create this app though. I gave up a lot and delayed a lot of relationships and happiness just to make this thing that ultimately did… what? I think it is good to think about all of the things I learned. I learned how to be a better manager. To lead from behind. That pushing people doesn’t work. That different people have different motivations, and you have to learn each person’s and figure out how to appeal to those. That some people need a lot of direction and some people don’t want any direction. That you need to be very clear about things from the start. Even internally. Even with people that you trust.

I felt like I was going to get a lot more resources and at the end I really felt like it came down to how many hours I was awake coding, or maintaining things. Or doing demos and getting yelled at for the lack of progress being made. But no real power to get more resources. I kept being told “take more budget! hire more freelancers, what do you need?” but that ended up going to other people who didn’t want to hear my say about how to spend it. I was left with a lot of responsibility on the project but no ability to fix it beyond my own ability to code and put time in and keep making it better and closing tickets.

A whole bunch of tickets on sticky notes

But at least it’s over now, and I got to see my thing on TV. My baby. That all came from a prototype I made in January and demoed to Adam and then to Steve and then to Marc and got the budget and finally made this whole thing happen. Weathered changes from Andy and Phil and a final 2 weeks with David who basically invented the medium… Everyone at NBC kept telling me “don’t do what he says” but he was very convincing and I ended up doing what he said a few times and getting yelled at, except for one that I think no one noticed and Steve really appreciated.

You walk past TVs tuned to MSNBC (what else? This is 30 rock…) and then moments later walk past the cameras on the 3rd floor as you pass the interview booth. It gets to a point where you see the camera crew for the Showtime show “The Circus” and instead of being impressed by your proximity to fame or trying to nonchalantly work your way into the background of their shot, you just tire at their presence and wish they would stop blocking the fucking hallway.

I have a keen ability to quickly discover reasons to hate anything I have coveted for a long time, once I attain it. So far I have found very little use for this skill.

If achieving your dreams doesn’t make you happy, then maybe you should adjust your dreams? Or adjust your happiness? The path forward is unclear. But when you think you just want your friends and family to be proud of you, and they’re all finally texting you that they’ve seen your work and it’s awesome, what do you do when you don’t feel much from that? What do you do when 10 million Americans see the app you’ve made between NBC and MSNBC? When it’s featured in two of their top-rated shows? You just focus on the problems.

The brief sentence that comes in an otherwise glowing Vulture review of how great Kornacki was using your board. Or a parenthetical in a wrap-up of election night by the New York Times you read in the airport while you wait for your flight to California for vacation. It is very easy to focus on those things. Those are the things you feared. The evidence that things did not go off without a hitch.

Presenting the app in a meeting

It’s not even my fault, really, the things they are mentioning. The app briefly froze. Well it looked like that. Steve tapped, panicked, at a map of Montana election results that would not respond. It’s hard to explain to people that it wasn’t my app, per se, that broke. His touch inputs were being sent to my app, and it was responding. But the video feed from the app, which is routed through a control room so that it can be color corrected, had frozen. They had to re route the video feed to fix it. But not after Steve had grown frustrated, and everyone watching MSNBC had seen the issue. Ultimately that all falls on me. It is seen as how the app performed.

Nonetheless, at 1AM as the night drew down and everyone began to relax, I felt like I had accomplished it. We made it through the night. A coworker told me Chuck Todd’s producer had said this was the first election night where Chuck wasn’t frustrated with the app. Maybe he’s just relaxing in his own age, but I feel proud of that.

Steve looked amazing with the board, panning and zooming. Using the new features we had added, like the scoreboard, or the historical drawers for counties or districts, like a pro. He made it look good. Motions and ways of storytelling I had done months earlier, playing out how I wanted it to work, were appearing on TV. That felt really amazing. A lot of things that we wanted to work out worked out. A lot of things that we thought would be used a lot weren’t used at all. It’s funny how that is.

I scarfed down my bacon pancake, gratefully, and went back to the studio to finish out the night.


November 03, 2022 3 min read

My Morning Routine and Daily Rituals

The morning time is important to me. I naturally run a but hurried and agitated so it takes some time to calm down my mind and body and focus on the things I want to do.

When I find myself feeling shitty I am almost always failing to do the routines noted here.

I rarely do all of them every day, but the foundation of one or two keeps me grounded.

Shower and Listen to the Radio

Starting my morning with a shower helps me to wake up and I like to listen to the local radio station WNYC while I do this. It helps to get me feeling positive and it's a great way to stay up to date with news and current events.

Make Coffee, Read, and Meditate

I make my morning coffee and take some time to read something inspiring – maybe a blog post or a book. I also meditate for 10 to 20 minutes to slow down my mind and body for the day to come.

Exercise

In the morning, I like to do some light exercise with a bulgarian bag and some kettlebells. This helps me stay active and energized for the rest of the day and really helps with mental health.

Feed the cat

I feed my cat and give him some attention. He is trained to the sound of the espresso machine starting. I get a free hit of dopamine as if I accomplished something, but all I did was take a can off the top of the fridge and open it. The cat is always grateful.

Journaling and Writing

I also spend some time journaling and writing down ideas for the day. This helps me organize my thoughts, plan out tasks, and stay on track with my goals.

Plan Out My Day

Finally, I plan out my day by making a to-do list so that I can prioritize tasks and be more efficient throughout the day.

Making an espresso

Making an espresso is important part of my morning routine because it provides me with a quick and efficient caffeine boost and it is a quick and rewarding creative act; every day I strive to perfect my tamp, grind size, and quality of the shot I pull.

5 Minute morning journal

I am grateful for...
1. 
2. 
3. 
What would make today great?
1. 
2. 
3. 
Today I am practicing...

Analog / paper time and being outside

I usually make an effort to spend some time outside and away from my phone, laptop or other screens. This helps me stay grounded, appreciate the world around me, and get in touch with the present moment. I also like to spend some time with analog activities like sketching, painting with watercolors, or reading a book.

Connecting with friends and family

I like to take specific time in the morning to check in with people via text or DM or whichever inbox has messages now. I struggle sometimes to answer people when I get messages throughout the idea, but I usually try not to let a message sit for longer than a day.

November 03, 2022 5 min read

Embracing Joy-Driven Development: A New Philosophy for Better Work

I want to take some time to put into words the philosophy that has been guiding my approach to work for the past few years. My ideas and approaches have evolved as I have tried to explain these motivations to different collaborators, and I will try to distill that here.

The core of what I think of as "Joy-Driven Development" is a drive to embrace the sparks of joy that illuminate our work, guiding us along a path infused with curiosity and effortless innovation.

In this post, I'll discuss the principles of Joy-Driven Development and how it can lead to more fulfilling work experiences and better final products. Joy-driven development is an important piece of how-to-run-a-project

Discovering the Spark: What is Joy-Driven Development?

Joy-Driven Development is an approach to software development that emphasizes the importance of enjoying the process of creating and building software. We should focus on creating a positive and fulfilling collaborative environment, where developers are motivated by their passion for coding, learning, and collaboration.

Instead of avoiding hard work or hard problems, we should make hard work fun.

This approach encourages teams to prioritize their happiness and well-being, which in turn leads to increased productivity, creativity, and overall better work. It is a counterpoint to more traditional development methodologies that may prioritize strict deadlines, rigid processes, and high-pressure environments.

Curiosity As Fuel: Incorporating Joy

Finding the rhythm in Joy-Driven Development can be as simple as immersing yourself in projects that echo the beat of your natural curiosity. That does not always come naturally.

You have to set an intention to lean into what you are naturally drawn to. Harness your innate sense of wonder to propel your work forward, even when the reward remains veiled. By tapping into our curiosity, we find motivation and fuel that drive us forward. When joy is at the core of our work, the outcome is often better: joyful creators make joyful creations, leading to joyful users.

Follow the Joyful Compass: How To Approach Decision-Making

Embracing Joy-Driven Development is akin to navigating your creative odyssey with a compass forged from joy. As you face countless decisions, let each step be guided by the direction that invites the most joy for the people embarking on this voyage with you.

There's a kind of excited curiosity that's both the engine and the rudder of great work. It will not only drive you, but if you let it have its way, will also show you what to work on. https://paulgraham.com/greatwork.html

Addressing the Skeptics

There may be misconceptions about centering joy in the work process, and it may come across as frivolous or lazy. However, Joy-Driven Development prioritizes both the experience of those working on the project and the quality of the final product. We focus on enjoying our work so we can create better work.

There are times when you need to do your chores, and that is not always fun. But having all of your chores done is joyful. Making a client happy is joyful. Creating work that makes the world better is joyful. If you can remember that as you hand-clean a dataset or debug a complicated SQL query, you can find the joy in those tasks too. Joy-driven development doesn't mean that we only do work that brings us joy, it means that joy is the gas that powers the engine.

By entwining threads of joy into the fabric of our work, we not only cultivate more satisfying experiences for ourselves but also craft joy-filled creations that resonate with users.

  1. Introduction (1-2 minutes):
    • Open with a vibrant, colorful montage of you and your team working on various projects, showcasing the energy and enthusiasm that comes with enjoying your work.
    • Introduce the concept of "Joy-Driven Development" as a philosophy that has been guiding your approach to work for the past few years.
    • Emphasize the core idea of using joy and curiosity as fuel to propel your work forward and create better outcomes.
  2. Discovering the Spark (2-3 minutes):
    • Explain what Joy-Driven Development is and how it differs from traditional development methodologies.
    • Use engaging visuals and animations to illustrate the key principles of this approach, such as prioritizing happiness, well-being, and passion for coding and collaboration.
    • Highlight the benefits of Joy-Driven Development, including increased productivity, creativity, and overall better work.
  3. Curiosity as Fuel (2-3 minutes):
    • Discuss the importance of leaning into your natural curiosity and using it as a driving force in your work.
    • Share personal examples of how following your curiosity has led to joyful and successful projects.
    • Use metaphorical visuals to represent the idea of curiosity as fuel, such as a rocket being propelled by a vibrant, colorful energy source.
  4. The Joyful Compass (2-3 minutes):
    • Introduce the concept of the "Joyful Compass" as a tool for decision-making in Joy-Driven Development.
    • Explain how prioritizing joy for yourself and your team can guide you towards the best outcomes.
    • Use a creative visual representation of a compass, with joy as the north star, to illustrate this concept.
  5. Addressing the Skeptics (2-3 minutes):
    • Acknowledge the potential misconceptions about Joy-Driven Development, such as it being frivolous or lazy.
    • Counter these misconceptions by emphasizing the focus on both the experience of the team and the quality of the final product.
    • Use examples from your own work to demonstrate how finding joy in even the most mundane tasks can lead to better results.
  6. The Impact of Joy-Driven Development (2-3 minutes):
    • Share success stories and testimonials from your team and clients about the positive impact of Joy-Driven Development.
    • Highlight the ways in which this approach has led to more satisfying work experiences, better collaboration, and ultimately, more successful projects.
    • Use a combination of interviews, project footage, and data visualizations to illustrate the tangible benefits of this philosophy.
  7. Conclusion and Call-to-Action (1-2 minutes):
    • Summarize the key points of Joy-Driven Development and the importance of using joy and curiosity as fuel in your work.
    • Encourage viewers to embrace this philosophy in their own lives and work, and to prioritize their happiness and well-being as a means to create better outcomes.
    • End with an inspiring visual metaphor, such as a team of developers riding a wave of colorful energy, representing the power and potential of Joy-Driven Development.
November 03, 2022 4 min read

Why I think everyone should learn to code

![[1312706448_An_award_winning_lineart_illustration_of_a_student_coding_on_a_laptop__programming_language_syntax_i.png]]

Defining computer literacy

The ability to understand the ways that computers operate; if/else statements, networks, looping, and the ease of scale.

You can gain a lot of this through intuition. The best way to learn is to accomplish a task that provides a function beyond the sheer learning itself. Some of the first computer networks and mailing lists were used to trade recordings of Grateful Dead shows. In this same vein, a student who wants to track baseball scores or their anime library or create a website for their album will learn the fundamentals as their project progresses naturally.

It is not remembering the name of obscure tools, functions, or frameworks.

drafts/approach-to-learning

Learning to google “Magic Words”

Once you know what something is called, you can usually find enough resources to understand it, and maybe even a few examples of how to use it. The difficult thing, often described as “domain expertise” is knowing what things are called in a particular industry, field, or tool.

So there is a meta-skill that sits on top of learning any technology; if you can reliably discover and research the “magic words” you need, you can teach yourself almost anything as a result.

Noticing when you feel like a robot

Sometimes I will find myself doing an arduous and repetitive task. When I find myself repeating a loop of tasks more than a few times, I sit back and think how long it would take to automate that task. Then I think about how many times I will probably do that task by hand, and weigh those things together. If I can save time by writing some code to make it faster, I almost always will. This type of broken brain is called being a hacker.

Communicating with Artificial Intelligence

See how-i-use-gpt3 and how-i-use-stable-diffusion for more.

Appreciating the “I can do that” moments

There is a profound feeling that comes with the realization that you can make a computer do what you want it to. It’s like a lightbulb moment, and it’s addicting.

You start to see automation possibilities everywhere. You can make a computer do the things that are tedious, repetitive, or just plain annoying. This is the skill that allows you to take a problem and break it down into small, manageable pieces that a computer can understand.

Control of the world around you

With coding, you have the ability to define the world around you. In a very real sense, you can make the world work the way you want it to.

Of course, you can’t do everything, but the ability to code gives you a lot of power to shape the world to your liking. The Internet Was Built To Be Hacked

Making your work easier

Coding can make your work easier in all sorts of ways. Automating repetitive tasks, for example, can save you a lot of time and effort.

But coding can also make your work easier in more subtle ways. For example, learning to code can help you become more organized and systematic in your thinking. This can make it easier to solve problems and to communicate your ideas to others.

Improving your career prospects

Coding skills are in high demand. Or they can help you start your own business. If you have an idea for a new app or website, you can bring it to life yourself.

Having a set of tools that are ready

Once you have learned to code, you have a set of tools at your disposal that can be utilized for a wide range of tasks. From data analysis to web development, the possibilities are endless.

From there you can build a computer setup (like computer-setup) that has your tools ready to go for when you get an idea for a project.

November 03, 2022 12 min read

The Art of Coding: A Developer's Guide

#programming #personal #process

From personal projects to collaborations, paid work to passion projects, lets explore how I write code to achieve specific goals. We'll discuss the importance of clear goals, user stories, acceptance criteria, deadlines, and our core guiding principles.

The rough shape of the project changes depending on a few factors:

  • Personal project vs group project
  • Paid vs unpaid
  • Fast vs slow
  • Public vs private

For more less-technical specifics around project management in general (not just code): how-to-run-a-project

For design philosophy My design philosophy and work philosophy Joy Driven Development

The tools I use to prototype quickly: 2022 Toolkit for Prototyping

My coding setup, including theme and plugins: My VSCode setup and favorite plugins

Establish a clear goal

Sometimes the goal of a project can boil down to "who are we trying to make happy?"

That could be a particular type of user, or it could be a powerful stakeholder, or the person who commissioned the project. Who controls the future of this project and what are they trying to get out of it? How can we make them happy?

On personal project the goals might not be so clear, and it's worth digging into why something is interesting and putting it into words. Treat yourself as your client, with all the patience and diligence that implies. Write yourself a clear and comprehensive brief that you can come back to later.

Personal projects can be beneficial for a variety of reasons:

  • Explore personal curiosities
  • Learn new technologies / techniques
  • Collaborate with cool people
  • Create material for self-promotion
  • Create work that you want to do more of

You can usually only accomplish a few of those goals, and knowing the bounds of your motivation for a project can help you avoid diving deep into the wrong areas and getting burnt out.

User stories

User stories are essential to writing software that will be used by people. I talk more about user stories in how-to-run-a-project

tl;dr

User stories are a way of describing the functionality of a system from the perspective of the user. User stories are written in the following format: "As a *type of user, I want goal so that reason."

Acceptance criteria

Acceptance criteria are predefined rules that determine whether a given feature or piece of functionality is working as intended. They are a set of statements, with a clear pass or fail result, that specify both functional and nonfunctional requirements, and are used to assess the success of a project. These conditions must be met to consider a project successful.

Acceptance criteria help to create a shared understanding between team members, clients, and stakeholders about what is expected from an engagement. It's important that they are clear, specific, measurable, and easy to validate.

I often write my acceptance criteria in the form of user stories.

Deadline

Deadlines, while sometimes stressful, actually serve an important role in managing your work. They help to frame the timeline and encourage focus and productivity. A clearly defined deadline sets the expectation for when work should be completed and ensures that everyone is working towards the same goal.

Do not break deadlines

Core principles

Joy Driven Development

Gather context

Stakeholder Needs

Knowing who the stakeholders are and what they expect from the project is crucial. Needs could range from project timeline, budget, technical specifics, to the business impact.

Project Goals

Understanding and articulating the main objectives behind the project, along with what problem the project aims to solve.

Technical Infrastructure

Understanding the tools, platforms, or systems that will be used during the project helps in planning and implementation.

User Expectations

If the project involves a user base, understanding their expectations and needs can significantly enhance the project's design and usability.

Keeping abreast of existing market trends, both direct and indirect competition, can inform the strategy and positioning of your project.

Prior work

Before starting a new project, it's beneficial to research and understand the work that has already been done in the area. Existing solutions, projects, or research might provide valuable insights, lessons learned, or even spark new ideas. Evaluating prior work can also prevent you from duplicating efforts or repeating the same mistakes.

Terminology / names

Every industry or project often has its own set of unique terms, names, or jargon. Familiarizing yourself with these terms can hugely impact your understanding of the project and improve your communication with stakeholders and team members. Trying to speak the same language as your users or clients can foster better understanding, and convey professionalism and competence.

When creating new things, often new names need to be invented. I try not to be too precious about this process. The key is to just pick a sensible name for a thing and stick to it, until a better taxonomy develops and it makes sense to rename it. It is often very difficult to rename things once the name has been embedded deeply into the code. Only the bravest developers rename existing variables, especially deeply-entrenched ones.

Carefully pick your tools

Not every project will require the same set of tools. Depending on the project's nature, the 'right' tools can hugely differ. It's important to identify and understand the tools available that could aid your project's development, whether they're software for task management, design tools, coding platforms, analytical tools, or even physical equipment if relevant. They can save time, increase efficiency, and provide new capabilities.

Often the most productive developers aren't the ones with the most experience or domain expertise, but those with the best set of tools for a particular problem.

Gather data and explore

Data forms the backbone of any data visualization project. The type and amount of data needed will depend on the project's complexity and scope. Gathering useful data is a systematic process involving identifying data sources, collecting information, cleaning it, and then verifying its accuracy and relevance.

In the exploration phase, objective analysis of the gathered data can reveal patterns, trends, and insights that inform your project direction and strategy.

Metadata: what’s there? What’s missing?

As we navigate the development process, one crucial step is managing metadata - the information about our data. It's key in understanding the depth and quality of assembled data and integral to interpreting it correctly.

Observing what data exists and recognizing what's missing allows us to validate our data's completeness and reliability. Like a pre-flight checklist for a pilot, knowing your metadata and any gaps that exist helps you anticipate and mitigate any potential hiccups when using the data to drive your project decisions. It ensures the journey ahead relies on dependable, comprehensible information.

Go Wide, Establish Possibilities

In this stage of the process, the objective is to broaden the horizons of your project and explore as many possibilities as you can. This is the brainstorming phase where no idea is dismissed prematurely. Encourage out-of-the-box thinking and don't limit your exploration to just the tried-and-true.

This step might involve several techniques like:

  • Mind Mapping: This visual tool can help you organize thoughts, ideas, and potential solutions related to your project.
  • Prototyping: Quick hands-on experiments or simulations can provide insights on feasibility of ideas.
  • Notebooks: Jotting down or sketching ideas can help retain them and facilitate deeper analysis later.
  • Clients feedback and iteration loops: Engaging stakeholders at this stage can bring in fresh perspectives and align ideas better to actual needs.

By stretching the possibilities wide in this stage, you ensure you have multiple approaches or solutions to choose

Visual Forms for data

The use of visual forms in the exploration stage is instrumental. They convert raw data into insightful visuals, leading to an enhanced understanding and drastically improving the quality of the project:

Numeric Values: Scatterplot

Scatterplots illuminate trends or outliers in numeric data, providing a clear path to impactful solutions.

Geographic Data: Map

Maps transform location-based data into discernible patterns, opening up the landscape for strategic decisions.

Data with Time: Line Chart or Animation

Line charts or animations translate progression over time into visible trends, illuminating the path forward.

Everything: Tables

Our goal is not to visualize data just to make our work beautiful– sometimes the clearest way to convey some information is a simple humble table.

Make a prototype

In the developmental journey, crafting a prototype is your first step towards making your project tangible. A prototype, often developed with Vue/Nuxt in my process, is a functional, interactive model that embodies your design vision.

A prototype primarily serves as a validation tool - a way to test design hypotheses, functionality, and gather initial user feedback. Prototypes might not encompass the full functionality of the final product and often focus on testing specific aspects of the design. As such, they're meant to be iterative, changed, and refined based on user feedback and testing outcomes.

An important distinction to make is between a prototype and a Minimum Viable Product (MVP). While they seem similar, their purpose and scope differ. An MVP is a pared-down version of your product that includes just the core features necessary to make it work and deliver value to users. It's more polished than a prototype and is generally used to see how the target audience responds to the product's main idea. While the prototype is more for internal validation of design ideas, an MVP is put in front of actual users.

Designing an MVP

When designing a Minimum Viable Product (MVP), the goal is to develop a product with the smallest possible feature set that still delivers core value to the user. To achieve this, everything we've done so far comes into play.

The understanding gained from gathering context about user needs, project goals, and stakeholder requirements informs what your MVP must achieve. The data exploration and visual forms help you grasp the intricacies of the data your MVP will handle, influencing design decisions.

Starting with a mobile-first design helps focus on what's essential. On smaller screens, every element matters and unnecessary complexity can ruin user experience. This approach forces you to prioritize features, displaying only what's crucial on your MVP.

Using tools like Figma, create interactive high-fidelity prototypes to visualize the flow and feel of your MVP. Use it to try out different design possibilities and interaction patterns before committing any code.

It's important here to think in terms of problem-solving, not feature-building. Keep asking: what is the simplest solution that solves the problem for our users?

When defining the scope of your MVP, consider data prototypes too, especially for products involving complex data interactions. They allow you to test feasibility and performance early on.

At this stage, a key mantra should be: don't fall in love with your ideas. Be open to discard features or elements if they do not serve the primary goal of your MVP.

Ultimately, designing an MVP is about discerning what's absolutely necessary for your product to provide its core value, and having the discipline to say 'no' to everything else until after validating the MVP. It is a challenging process but essential in creating focused, valuable products while minimizing wasted efforts.

Visual design and polish

Post-MVP, attention turns to enhancing user experience with aesthetics. It's more than just colors and fonts; it's about intuitive, consistent visuals that boost user engagement.

Visual design gives your product its aesthetic appeal, aligning it with the brand's identity and improving user experience. It includes aspects like color schemes, typography, iconography, layout and spacing, among others.

Polishing your product involves refining every element and interaction to make sure it's smooth, intuitive, and visually pleasing. It's about paying attention to small details like consistency in design elements, easy-to-read fonts, sensible animations, effective color contrasts, and so on.

User Testing

User testing is the pivotal phase where your product, the MVP you designed and polished, is put to the test in the hands of actual users. It provides crucial insights into its usability and any potential areas for improvement.

The User is Always Right

During user testing, one mantra to remember is: The user is always right. If users struggle with a certain feature or can't navigate through your app intuitively, it indicates that changes are needed. This feedback is invaluable in improving the product and enhancing user satisfaction. After all, a product that doesn't meet user needs or isn't user-friendly will struggle to find success.

Be Open to Big Pivots

It's also essential to remain open-minded and ready for change during this stage. Sometimes, user testing might reveal that significant changes (or pivots) are necessary for your product to work effectively. These pivots could range from minor feature tweaks to a complete overhaul of certain aspects. Being flexible and open to these big pivots can significantly improve your product's final version.

Beginners Mind is Invaluable

Approaching user testing with a 'beginner's mind' can be invaluable. This mindset allows you to observe and understand users' experiences without preconceived notions, helping identify pain points or difficulties a more experienced eye might overlook.

Documenting the Process

The process of developing a project is a journey filled with valuable insights, decisions, and iterations. Documenting this process serves several purposes:

  • It provides a historical record of your project, allowing you to trace back your steps, understand the decisions made, and learn from them.
  • It facilitates communication and transparency with stakeholders, clients or team members. They can see the progress made, understand the reasoning behind decisions, and contribute more effectively.
  • It's a great tool for reflection and learning. Looking back at your documentation can provide insights into your working style, efficiency, and areas for improvement.

There are several ways to document the process effectively:

Screenshots

Visuals can communicate information quickly and intuitively. Regularly taking screenshots of your work - be it design drafts, code snippets, bug reports or user feedback - can create a rich visual timeline of your project.

Working in Public

Sharing your work progress publicly (e.g., on social media or a blog) not only serves as documentation but also invites feedback and creates accountability. It can foster community engagement and even attract potential users or clients.

Working in semi-Public

Even if you aren't sharing your work publicly, you can "liveblog" your progress in your company's shared chat channels.

Live-Streaming

Live-streaming your work sessions is another form of real-time documentation. It gives people an inside look into your workflow and decision-making process. This transparency can build trust with clients or users and facilitate learning for others in your field.

November 03, 2022 2 min read

My VSCode setup and favorite plugins

![[1316824112_Cute_Pixel_Art_of_a_coder_s_desk_cluttered_with_various_plugins_and_VSCode_open__reflecting_off_a_go.png]]

Imagine a coding environment that not only boosts your productivity but also sparks joy with every keystroke. Recently, I've fine-tuned my Visual Studio Code (VSCode) setup to help me work most efficiently and center joy. Trying a few various themes and plugins has ultimately allowed me to craft a toolkit that's geared towards my preferred workflow.

For more info about how VSCode fits into my broader prototyping toolkit see 2022 Toolkit for Prototyping

Theme

For my theme, I decided to combine Ayu and Panda Theme. The former is a minimal and flat theme that emphasizes ease of use, while the latter adds an extra layer of fun with its vivid colors. Together, they provide an environment that satisfies my need for both productivity and delight. I like to have my system use a light theme during the day and a dark theme at night, so I have themes to match both modes.

Plugins

  • GitHub Co-Pilot provides an easy way for me to track and manage important issues and pull requests.
  • GitHub Pull Requests makes it easy to create new pull requests right from vscode.
  • GitLens helps me better understand who wrote what and when, making collaboration and debugging a lot less stressful.
  • Live Share connects me with my teammates in real-time and enables us to work together remotely, even on the same project.
  • Prettier ESLint allows me to quickly and easily format my code and keep me sane.
  • Toggle Light/Dark Theme helps me quickly switch between two different themes based on the system setting, which I do every day when it gets dark.
  • Vitest allows me to run automated tests right inside my editor, which saves me time and helps me spot potential bugs quickly.
  • Volar provides language enhancements when working with Vue.
  • VSCode Pets provides a fun way to take a break when I need a mental breather, as well as a feeling of companionship while I'm coding.
November 02, 2022

8pm To Midnight Mixes

#dj #music

Over the course of a year I put together a series of playlists built on the evolving vibes of a night of partying. As a DJ you get used to changing tunes to match the vibe of the audience, and I tried to capture the growing energy that happens.

The first playlist begins at 7PM, but I've been known to put it on first thing in the morning. It is calm background music as people gather and talk and hang out.

We build and increase the BPM over the course of the night, culminating with the midnight playlist, at which point everyone should be dancing.

Total tracks: 135

Length of all playlists: 8 hours, 7 minutes, and 50 seconds

Genres

Artist Network Analysis

Exploration notebook: Spotify Playlist Exploration Observable Notebook

Exported playlist data with https://exportify.net/#playlists found through reddit through

All songs in a csv https://docs.google.com/spreadsheets/d/1sz6jrmQml-TKWy9jArsCaGpBdUmonivU1oZ-jTZXu-8/edit?usp=sharing

Gist of the csv https://gist.github.com/ejfox/deedd43d8b2de49a95016dd47f5c38b8

7PM

https://open.spotify.com/playlist/3LyfewR3NzcviwZmlSaOOy?si=8996848dd3c94629

8PM

https://open.spotify.com/playlist/01pW3QTbllu5wl3uPu4q4G?si=87d3944fdbc643b6

9PM

https://open.spotify.com/playlist/7oyc4KEVAHOS9Z4v8Fo0Dd?si=ef5c5fb81a8b4174

10PM

https://open.spotify.com/playlist/2lTRaeJ5vA5tShiPLgkVg0?si=4b5592931c1f48b7

11PM

https://open.spotify.com/playlist/2cwBcpmCi5o3cX3zlDtUVR?si=246dee8ea8df44a5

Midnight

https://open.spotify.com/playlist/4InvNgYsvHIH6kIqZE6fCV?si=e53897693ffa48df

November 02, 2022 5 min read

Experiments with Live Looping

Performing electronic music with loops is a technique known as live looping. It has been used for many years by a variety of different artists and it has been used on stage and in recording studios.

This article aims to introduce the reader to the techniques used in live looping and to describe what a live looping performer needs to know in order to do perform effectively.

To program a drumbeat is to align an external rhythmic device to an individual’s biorhythm. Saul Williams Williams-The Dead Emcee Scrolls

See also Generative Music Iteration

Fundamentals of Looping

You must place the fundamentals of rhythm at the heart of your rig, because those are the sounds that will make people move.

Focus on getting a beat or simple riff looping, and once that is done, start putting a little seasoning onto the beat.

There are many ways to spice up your basic rhythm, but one thing is undeniable: It should act as a strong foundation for the rest of your mix.

Now, you can always add a dash of sugar. Sugar comes in many forms: A catchy melody in your main synth line, an uplifting chord progression using synths or a well placed vocal breakbeat.

Keep building, and then remove some elements, build some tension, and then suddenly drop all of the elements back. Now do it all over again.

Artists who live loop

  • Animal Collective
  • Marc Rebillet
  • Reggie Watts
  • Imogen Heap
  • Beardyman
  • Jacob Collier
  • Andrew Bird

Core principles

Tempo sync

To get a satisfying flow while performing live loops, the loops in the rig have to be at the same tempo. This is a complex task, because it involves connecting some gear using MIDI, while other gear doesn't even have a MIDI in.

Fortunately, the TR-8, SP-555, and RC-505 have a "sync" function, which can be used to send a synth and MIDI clock to other devices. This means that if the TR-8 is playing a consistent beat, the rest of the gear can receive that beat and use it to start automatically looping and recording their tracks. I usually have my RC-505 as master and have the TR-8 sync to whatever tempo it is set at.

Dynamics & crescendos

It's important to leave enough space in a performance to build up from a quiet side to a peak. This is done by adding and removing loops from the mix and fading their volume in and out.

Looping

When there are too many loops happening at the same time, the performance becomes oversaturated and loses it's dynamics.

A small correction in tempo to correct a mistake will sound very abrupt and will ruin the performance.

The only way out is good preparation: be careful when you play, and know your gear really well.

If you choose the right amount of loops to perform with, it will be much easier to keep track of what's going on.

When performing with a number of different devices, there will be some degree of randomness to your loops, and riding the natural drift is part of the art of performing live.

Live Looping Pitfalls

Too Repetitive

If you play the same loop over and over again, the performance will become boring.

The solution is to add new loops to the mix, and to remove old loops. There should almost always be something changing at any point in time.

Losing sync

If the loops are not in sync, the performance will sound bad.

The solution is to use the sync function on the TR-8, SP-555, and RC-505.

Not making changes on-beat

Every change that you make, whether you think it will affect the sound or not, should be made on-beat. That way even if it has unintended effects, it at least happened in the right place and can sound a lot better.

Not enough inputs/sounds

If there are not enough loops in the mix, the performance will sound empty.

If there are not enough sounds, it gets boring quickly. Having a library of diverse instruments available keeps things sounding fresh.

Equipment

Roland TR-8 (Drums)

The TR-8 is a drum machine and sequencing interface that emulates the sound and feel of the classic TR-808 and TR-909. It can be used for triggered live samples or as a percussion instrument in a live setting.

The TR-8 is great because you get individual control over the volume and timbre of each drum, so you can easily add or remove just the hi-hats or snare at any time.

Xone 96 (Mixer)

The Xone 96 is a DJ mixer with loads of inputs and fx, but where it shines is as the center for audio controls for all inputs.

Delay and reverb pedals (effects)

At least one delay and one reverb pedal on loop make any performance infinitely better. The DD-7 and DD-3 have different delay times and sound, so they make a great pair in my opinion.

Traktor F1 (Sampler)

The F1 is NI's controller for the Traktor DJ software. It's a limited sampler with 4 slots, but it's useful in a live looping setup due to it's ease of use during a performance.

In the context of live looping rhythm, the knobs correspond to decay, filter cutoff and other performance oriented controls.

SP-555 (FX)

In my opinion, the SP-555 is the definitive looping sample player. It's a classic, the one where it all started. It's somewhat confusing interface is eclipsed by its usefulness as a looping tool. The library of loops and samples available for these devices is second to none, and so are their warm saturating sounds.

Midifighter (Controller)

The Midifighter is a controller that is designed to perform samples in a live setting. It's small, it's sturdy, and it's easy to use.

Keylab 49 (Controller)

The Keylab 49 is a MIDI controller with 49 keys, a pitch bend wheel, a modulation wheel, and a bunch of knobs and buttons.

Turntables (Controller)

The turntables are the classic DJ tool. They are used to control the pitch of a record, and they can be used to scratch.

RC-505 (Controller)

The RC-505 is a looping controller. It has 5 tracks, each with a fader and a knob. It also has a bunch of effects and a built in sampler.

November 02, 2022 2 min read

2022 Toolkit for Prototyping

See also My VSCode setup and favorite plugins

Tools

CSV and JSON

CSV (Comma Separated Values) and JSON (JavaScript Object Notation) are the ideal file formats for storing and exchanging data. They are both lightweight, human-readable, and easily parsed by programming languages, making them ideal choices for handling data in your prototypes.

CSVkit

CSVkit is a powerful command-line tool for working with CSV files. It simplifies tasks like filtering, sorting, and converting data between different formats. By incorporating CSVkit into your toolkit, you can save time on data manipulation tasks and focus on building your prototype.

Datasette

Datasette is an open-source tool that allows you to explore and publish data using a web interface. It supports various file formats like SQLite, CSV, and JSON, enabling you to quickly create interactive web applications with minimal effort.

Observable & Plot

Observable is a platform for creating interactive data visualizations using JavaScript. Its built-in library, Plot, makes it easy to generate beautiful charts and graphs with just a few lines of code. By leveraging Observable & Plot in your prototyping process, you can bring your data to life and create engaging user experiences.

QGIS

QGIS is a powerful open-source Geographic Information System (GIS) that enables you to create, edit, and analyze geospatial data. With its extensive set of features and plugins, QGIS is an invaluable tool for developers working with location-based data in their prototypes.

Vue and Nuxt

Vue.js is a popular JavaScript framework for building user interfaces, while Nuxt.js is a higher-level framework built on top of Vue.js that simplifies the development of universal applications.

Vue over React

Both Vue.js and React are popular choices for front-end development, each with its own strengths and weaknesses. I prefer Vue because it works the way my brain works, and I really like the community and ecosystem of plugins. The time and care spent on developer experience makes it a joy to write code, which is invaluable for maintaining flow.

Tachyons

Tachyons is a functional CSS framework that promotes fast-loading, highly-readable, and easily-maintainable code. By using Tachyons in your projects, I can rapidly prototype responsive designs, and I am able to prototype complex layouts in realtime using live reload and the built-in classes.

Supabase

Supabase is an open-source alternative to Firebase that provides a suite of tools for building modern web applications. It includes features like real-time databases, authentication, and storage services. Integrating Supabase into your toolkit can simplify the process of building full-stack prototypes.