Been having a hard time with a bunch of things lately so have disconnected from almost everything I find my way back to building myself back up. Futureland is really positive for me so want to get back into it. I really appreciate everyone that reached out to check in, especially the folks on this site.

Biked 10 miles from Fort Greene to Upper West Side to get bagels (at the best spot). Biked back after. Also, biked a few miles to Lowe’s to get hardware for mounting projector.

Worked out with KJ. Changed it up and did sets of two exercises instead of the usual three. Went much faster through each as a result with higher intensity.

1

Biked from Brooklyn, over the Williamsburg Bridge, across Manhattan to the Hudson River, and back with John. (He took a pic of me looking at my phone instead of the sunset!!)

Made another round of swordfish last night. Added basil and chili to the marinade. Also, cut up the cilantro.

Swordfish marinated in olive oil, salt, pepper, cilantro, garlic, and lime with braised bok choy and pearled tomato couscous.

Was incredible. Might be the tastiest thing I’ve ever made. Latika loved it too.

It I ever take a year off or decide to leave tech, I would do cooking school or some more formal culinarily training.

Started putting veggies in recycled glass jars to preserve them longer. Have some green onion, cilantro, and basil going right now.

1

Unclogged bathroom sink drain. First, tried baking soda and vinegar. That worked okay. What really worked well was using a plunger. You need to block up the overflow drain before plunging.

Was outside all day. Went for a walk, then biked around like mad getting supplies for a friend’s birthday in the park.

Cooked swordfish on griddler after marinating in garlic, olive oil, lime, and salt for around 10m. Can’t marinate in lime for longer than 30m otherwise it starts to cook in the juice. Rolling a lime before cutting it is a great way to get the juice out.

Worked out by myself today. Part of the reason I started working with KJ was so I could just show up and focus on lifting things without worrying about planning the exercises. After working with him for almost a year, I feel comfortable planning a workout. I didn't realize how difficult is to workout alone now!

Group 1
- Squat and press
- Delt rows
- Dumbbell fly

Group 2
- Pushups
- Single leg glute bridge
- Side lunge with dumbbell

Group 3
- Lateral raise
- Frontal raise
- Pullover

Group 4
- Alternating regular and hammer curls
- Triceps kickbacks
- 10 ab wheel roll outs

Went for a walk with Grant and Michelle today. Was sitting most of the day on the computer so needed this. Going to try to reset every day with a walk ~5p like I did out in the suburbs.

Packed session with KJ today:

Group 1
- Deadlifts
- Dumbbell fly
- Dumbbell rows

Group 2
- Woodchucks
- 25 pushups
- Single leg glute bridge

Group 3
- Forward and backward lunges
- Lateral raises
- Shoulder press

Group 4
- Pull overs
- Hip raise
- Frontal raise

Group 5
- Bicep curls
- Triceps kick backs
- Crunches

Made burrito bowls for dinner tonight. Picture is of preparing the beans and peppers in minced garlic and jalapeños.

Worked out with KJ. Noted the exercises during the workout.

Group 1
- Squat and press with resistance band
- Kettle bell swings (but with a dumbbell in each hand)
- 25 pushups

Group 2
- Dumbbell lateral raises
- Single leg glute bridge
- Deadlifts with dumbbells on shoulders

Group 3
- Dumbbell frontal raise
- Up and down plank
- Dumbbell bent over rows

Group 4
- Regular and hammer curls
- Dumbbell kick backs
- 20 v sit ups

Made a peanut butter banana smoothie for breakfast this morning. Tossed in some chocolate protein powder too. The frozen banana tokens worked much better than whole frozen bananas (what I normally do).

Used painters tape to map out where the dining table is going to go. Useful for seeing if it will fit in the space.

Also, did a lot of tidying, scrubbed the shower head after the vinegar soak, started soaking the other shower head, and mopped the second bathroom.

Biked from the apartment (Fort Greene) to the office (SoHo) to pick up some stuff. Then to my old apartment (Union Square). Finally back over the Manhattan bridge again home. Had an electric pedal assist bike both ways over the bridge. A lot of biking today.

Cleaning shower head with vinegar. Didn’t want to unscrew because there was plumbers tape wrapped around the top part of it so we put the vinegar in the bag and tied the bag up. If this works well, we’ll clean the other shower head this way too.

A key part of disconnecting for me is not being as reactive throughout the day. Since moving, I haven't settled on a routine. I wake up and go to sleep at different times every day.* Almost everything in between is variable too, except scheduled activities where there are other parties involved: training with KJ and therapy.

Over the last couple days, I've tried to start my day the same no matter what time I wake up. I get out of bed, then I brush my teeth and do my sinus rinse. Those two things are small, but I feel like I accomplish something after completing them. I'm going to continue with those two as a foundation. Perhaps I will build on them: Add in breathing exercises, drink a glass of water, etc.

* Maybe this is what freedom looks like for me. I get to explore and the endpoints of my day shift to accommodate.

Was away since Monday so wasn’t able to make a lot of progress. Brought back a banana tree and curry leaf plant. Also got rid of a bunch of empty boxes from moving.

Back at my apartment. Friday morning workout with KJ. Going to write down the exercises during my workout on Monday so I remember. I increased the number of pushups per set recently from 20 to 25.

Later today, I'm going for a bike ride with my friend, John, before dinner. It's going to be casual, but will be good for keeping things loose.

Drove back down to Brooklyn. I carried a bunch of items up the stairs and biked for ~20m back from dropping the rental car off. Also, went up and down the stairs multiple times while taking out trash and recycling. (Lots of cardboard boxes from moving and ordering things.)

Workout with KJ earlier this morning:

Group 1
- Forward and backward lunges
- Pushups
- Dumbbell rows

Group 2
- Dumbbell woodchucks
- Single leg glute bridge
- Lateral raises

Group 3
- Dumbbell fly
- Dumbbell pull over
- Hip extension

Group 4
- Triceps band pull
- Hammer and regular curls
- Sit ups with alternating leg raises

Mashed potatoes, broccoli, and chicken breast marinated in mustard seeds, olive oil, salt, and garam masala.

The new apartment has central air so I ordered some new filters 20x20x1 filters a few days ago. Today, I replaced the old filter put in by the previous tenants. It was filthy. Going to replace again in three months.

Made some eggs with garlic chips on the griddle this morning. Love cooking on a griddle. There’s a lot of space and there are different heat regions on it.

Also, the bananas I got last week were starting to get soft so I cut them into coins and froze them. Will use for smoothies. This is the first time I’m freezing them as slices and not whole.

Did a couple roll outs last night. Wanted to do more, but was too sore. I feel good about showing up and keeping the streak going, even though I wasn’t able to do 10.

Turkey meat sauce and tortellini with zucchini. Also, cleaned a leek from the farmer’s market and froze it. Going to make a quiche or something with it in the future.

Made burrito bowls for dinner last night: Beans, peppers (bell and jalapeños) with red onion and garlic, tomatoes, rice, and cheese. Unfortunately don’t have any spices yet.

Work out with KJ. We started using an ab wheel on Wednesday and continued today. Very sore and very challenging. Going to try to use it every day.

Group 1
- Squat and press
- Deadlift
- Single leg glute bridge

Group 2
- Backwards lunges
- Pushups
- Delt rows

Group 3
- Dumbbell fly
- Pull over
- Hip extension

Group 4
- Alternating regular and hammer curls
- Triceps kickbacks
- 10 ab wheel roll outs

Going to bike to meet my friend, John, later in Williamsburg, then bike back here and go for a walk.

Today, we organized the kitchen. Created a document with a list of where everything might go based on usage and different categories. It's amazing how many different types of tools and gadgets are all in the same space for cooking and storing food: Cutlery, knives, cooking utensils, storage containers, pots and pans, appliances, spices, pantry etc.

Haven’t been on HN yet today. I went on yesterday and spent some time. It’s funny how it’s no longer an automated thing I do. I can access it whenever I want, but I’m not compulsively going like I did before.

Worked out with KJ this morning. Used the ab wheel for part of the workout. That thing is so challenging! Did three sets of ten roll outs with it. My abs are going to be on fire tomorrow morning.

The last couple times I've exercised at my apartment, I haven't worn shoes. Going to wear them on Friday because the support and stability is better, especially when doing lunges.

Need to get back into walking every day. Going to try to head outside in a few hours weather permitting.

2

Going to return to Hacker News tomorrow. Only two rules are do not use it on phone and try to delay using it for as long as possible. If I can delay until later in the day, it will be a reward for the day's work. Tomorrow is also a full month of not using it.

Cleaned the washing machine today. It's amazing how much grime (mold?) built up around the gasket. Hopefully it's not mold because I didn't use bleach (I used an all-purpose cleaner). If it is, it will likely grow back after a while. After the washing machine, I will try to keep it open so it can dry out on it's own.

Latika cleaned the kitchen today and set up the printer in the office. I haven't linked my devices to it yet, but apparently you can print from your phone too.

Worked out with KJ at the new apartment. Only had a yoga mat and two 15lb dumbbells. Resistance bands are still packed in a box somewhere.

Group 1
- Squat and press
- Delt row
- Dumbbell fly

Group 2
- Pushups
- Glute bridge
- Side lunge with dumbbell

Group 3
- Lateral raise
- Frontal raise
- Pullover

Group 4
- Alternate between normal and hammer curls
- Triceps kickbacks
- Crunches while holding 15lb dumbbell

Packed up my apartment yesterday and moved. We hired movers to do the moving, but I biked from my apartment to Latika’s. Then over to our new place. Was around 5 miles in total. Also, walked up and down a bunch of staircases. My old apartment was quite the trek up.

No routine the last couple days. Setting up a new apartment. Everything is open and new right now. Going to let my mind wander too.

I moved into a new place. We spend a lot of time working on improving ourselves. One way to improve yourself is through improving the physical space you occupy. I’m working on improving my new home and learning new domestic skills.

Today, I made a bleach mix to clean one of the showers and also mopped. Never worked with bleach before. This was not my first time mopping, but I haven’t done it that often. In the past I’ve mostly used Swifter pads. Using a mop allows you to cover a greater area and control how much liquid you use.

1

Haven’t had much time to stop and think today. Been packing and getting ready to head down to NYC tomorrow. Looking forward to some quiet time when I make it down.

Worked out with KJ this morning and went on a walk with my sister and mom. Tomorrow I head back to NYC and will need to figure out a new routine.

Heading down to Brooklyn and a new apartment Saturday. Want to be intentional about setting it up. Make the physical spaces work for me (and Latika). Often people just randomly set up the spaces in which they operate and don't pay attention to their actual needs or they fall into normal traps. I don't need or want a TV to be the center of the living room.

Three weeks without Hacker News, Twitter, et al. Hard to believe it's been that long since I've been on HN. I definitely still have some FOMO. A lot of the stuff I read about on there (tech, startups, products, etc.) is a waste of time, but some of it is really valuable. I've met folks and found out about life-changing things on there. I'll be back at some point.

Worked out with KJ this morning. Penultimate session with him until I leave the home gym.

Group 1
- Barbell squats (10lbs each side)
- Single leg hamstring bridge (from hands)
- Barbell deadlift (10lbs each side)

Group 2
- Side lunges with 20lb dumbbell
- Pushups
- Lateral raises

Group 3
- Single arm rows
- Dumbbell pull over
- ???

Group 4
- 20 bicep curls (10 regular, 10 hammer) with 20lbs dumbbell
- 20 bench dips
- 15 crunches

Amazing how sometimes I don't remember the exercises after. It's really nice to work with KJ and have him make a plan. That way I can just show up and perform.

Been off for a bit. Set up Vim to work with Swift. Going to pick up again soon. Moving to a new apartment this weekend which disrupted my flow.

Been working like mad on a new feature for Patreon so I don’t have as much time during the day to get distracted by other things. The downside is it’s hard to disconnect from work when you are pushing to finish something.

Back at the "gym" (a.k.a. a space that has weights). Worked out with KJ. Different workout structure this time. Each group was two exercises instead of three (three sets per group):

Group 1
- Dumbbell chest press
- Dumbbell single arm row

Group 2
- Pushups
- Dumbbell lateral raises

Group 3
- Dumbbell fly
- Dumbbell pull over

Group 4
- Lunges while holding dumbbells
- Single leg glute bridge

Group 5
- Barbell frontal raise
- Dumbbell shoulder press

Group 6
- Dumbbell hammer curls
- Dips
- Crunches

Watched an entire season of Succession while helping Latika pack over the last few days. It was a nice break, but reminded me how addictive content can be. Don’t get me wrong, it was enjoyable and there’s nothing else I was going to do with that time. Trade-off accepted.

Drove home from NYC yesterday so spent a lot of time in the car. Before we left, I moved a bunch of boxes and went up and down the stairs to throw out trash. Moving heavy things outside while wearing a mask in the heat is not fun.

Did breathing exercises before going to sleep last night and this morning after exercising. I'm in a in-between state right now. Latika and I are moving in with each other. We are packing up our respective apartments. We move to the new place next weekend. Once we move in, we'll need to get everything set up.

During this in-between state, my brain is hungry for stimulation. It wants to relax after packing and figuring things out. Staying the course during this time is challenging. I need to remember to do simple things to stay grounded: Breathe, exercise, keep learning.

Missed Wednesday because I was driving down to NYC. Yesterday, I did a set of 20 pushups. Today, I had my training session with KJ. All I had was a yoga mat and a blue resistance band. The workout was still challenging. (Each group three times.)

Group 1
- 20 Squats
- 20 Pushups
- 15 Resistance band lateral raise*

Group 2
- 15 Forward and backward lunges*
- 15 Single leg glute bridge from hands*
- 15 Bodyweight deadlift

Group 3
- 20 Knee to elbow planks
- 15 Side hip raise*
- 15 Resistance band shoulder press*

Group 4
- 20 Resistance band bicep curl*
- 20 Seated triceps extension*
- 15 Alternate leg crunches*

* Once per side

Been slacking on the breathing exercises over the last week. I had been doing them before bed and occasionally after waking up in the morning. Going to focus on them specifically over the next few days and upload progress here to hold myself accountable.

Drove down to NYC this morning. It's amazing how even while driving when so much is going on, you can clear your mind. Guess it's similar to walking. You are focusing on the task, but the mind still has some space to wander.

Long walk today. Walked faster than usual because it was windy and we wanted to get as much in as possible before any rain. Missing normal workout with KJ tomorrow since I’m heading down to NYC to help Latika pack up her apartment ahead of our move. I won’t be going outside then (thanks covid) so will probably do RingFit.

1

Vapor

Bunch of random stuff today

- Learned about downloading and uploading data
- Intro to Vapor
- I really like guard statements in Swift

Also, Setting up Vim to work with Swift/Xcode. I like using Vim because I'm much faster editing text with it, but Xcode is good because it allows you to change certain configuration properties while developing. The problem with Xcode is it is slow to work in (reformatting, navigating around files, etc.).

Did a quick test of editing a file in Vim and Xcode grabs the file's changes when I save. I can use a coc extension to get autocomplete, go-to definition, etc. working. I can also use SwiftLint through Vim to take care of prettying files on save. I've even seen some extensions to build and run on devices from the command line too.

For now, I'll continue with running from Xcode, but will try to edit text mostly from iTerm (Tmux with Vim) after my config is set up. (Hopefully this isn't a huge waste of time lol.)

Note: I've also looked into using XVim, but it seems unstable.

Thinking about building a simple multiplatform app with SwiftUI to view tweets. This would allow me to control how much I consume more directly than using the Twitter app (or another client). I could have the app only show a specific number of tweets per day, not work on weekends, etc. I'm also learning how to build native apps right now so I could feed two birds with one scone.

Went for a walk with my mom and sister. It’s fun to walk at a brisk pace and chat. Need to find someone to walk with when I’m back in the city.

Learned basics about concurrency on iOS: NSThread, Grand Central Dispatch, Operations Queues, and Combine. Started working on a simple app to download songs and album artwork. Need to use URLSessions and GCD for this part of the course. Main takeaway:

DispatchQueue.main.async {
  // Update UI on main thread
}

Worked out with KJ via Zoom again. Each group three times, then stretch at the end. (Not sure I'll list every workout like this in the future.)

Group 1
- Barbell squats
- Single leg glute bridge from hands
- Barbell Deadlifts

Group 2
- Dumbbell chest press
- Dumbbell single arm rows
- Dumbbell pull over

Group 3
- Dumbbell lateral and frontal raises
- Forward lunges
- ???

Group 4
- Dumbbell bicep curls
- Dips on bench
- Crunches

Need to figure out what I'm going to do for weights when I head back down to Brooklyn midway through the month. These look great, but are out of stock. Might be stuck doing body weight stuff for a while.

Is it worthwhile to disconnect at all? I think it is, but was thinking about this question more. Some basic pros and cons.

Pros
- More time to do other things
- Less external stimulation
- Clear headspace of other ideas and random things

Cons
- Less time to do other things
- Less entertainment
- Less connecting with folks online/learning about new things

I'd like to find a way to spend less time on Hacker News, Twitter, etc. but still be able to hear about new things (i.e. tech, news, people).

Thinking about a way to ease back into using Hacker News and Twitter again. Some questions I'm asking myself.

- How many times per day do I allow myself to use? Once, twice, or more? Time limit?
- Trade-off between using in the morning versus at night?
- Mobile and/or desktop?
- When is enough? When you are eating food, your body tells you when you've had enough. When consuming digital content, how do you know you are full?

So far I think I'd like to set a rule where I use HN and Twitter only on my computer during weekdays in the early to late afternoon. It will be an intentional time set aside for checking both. Hopefully, it won't become an impulsive habit then.

I will stay signed out of HN and Twitter when I'm not using them and turn on a custom Stylus rule that hides the page HTML.

Going to keep thinking about these type of questions and come up with a plan before returning to both.

Back home so did a quick workout: Pushups, one arm rows, and lateral raises, then bicep curls, tricep extensions, and crunches. (Both exercise groups three times.) Also, going to go for a 40-minute walk around the neighborhood later.

My exercise over the last two days was moving stuff around in New Hampshire. I was on my feet all day from 10a to 7p. Lots of bending and lifting too.

2

Spending the last couple days in New Hampshire without Internet was refreshing. When Latika and I move into our new place August 15th, I'd like to have at least one day every week where the router is switched off and phones are set to airplane mode. Disconnecting for a day or two is centering. Your mind ends up wandering and along the way you can get into deep focus.

I’m heading up to New Hampshire for a couple days to help my mom clean up the house. The Internet hasn’t been set up for a couple years so it’s an explicit barrier to using a device. When I think about methods for disconnecting, a lot of people (including myself) tend to block themselves from accessing stuff. Creating barriers, like using iOS Screen Time or not having Internet access, seem effective, but not sustainable.

Ideally, my brain changes enough so I can rely on self-discipline instead.

Starting to play around with SwiftUI more in Playgrounds than inside apps. It's faster to get instant feedback and try concepts out. Today, I was prototyping with timers. Here's a shell for getting SwiftUI and Playgrounds working.

import SwiftUI

struct ContentView: View {
  var body: some View {
    Text("Hello, World")
  }
}

import PlaygroundSupport
PlaygroundPage.current.setLiveView(ContentView())

I wish I started this earlier, but here goes. Today, I did the usual weightlifting I do on Mondays, Wednesday, and Fridays. I worked with my KJ via Zoom and did a full-body workout for an hour.

On Friday, I'm going to the New Hampshire house to clean some things up with my mom. Will need to figure out a way to get something still in. Later today, I'm going to go for a 40-minute walk around the neighborhood with my sister. We started doing this a every day a few months ago.

1

It's frustrating that SwiftUI isn't as far along as I thought. I was trying to do a few things with Lists earlier today and there are a few random bugs. Hopefully they get fixed in the next Xcode Beta.

I have a lot of extra time in the during the day now since I'm not going on Hacker News. I started using Hacker News five or six years ago and it became an integral part of my life. I posted products that got some interest and learned a lot from the community. My brain has ⌘+t, then n+Enter wired whenever I'm using a browser.

At some point I'd like to return to using it because it's been valuable, but I don't need to go on it many times a day like I did before. Nothing really changes that often! All I ever do is refresh the frontpage and look at the same stuff over and over again. I'm hoping me truly realizing this helps me change my behavior when I let it back into my life.

Took a break from guided learning over the weekend and messed around with SwiftUI in another project. Today, I resumed and learned more about Codable. Specifically, how to assign different names for properties when writing to files, reading data from an API, etc.

struct Task: Identifiable, Codable {
    let id = UUID()
    
    var name: String
    var completed = false
    
    enum CodingKeys: String, CodingKey {
        case id = "identifier"
        case name
        case completed = "is_complete"
    }
}

Spent some time in bed reading and replying to text messages. In the past, I think using my phone in bed in the morning helped wake me up, like coffee would.

There are less things to read in my Instapaper backlog because I'm not saving new stories from Hacker News, Twitter, etc. I do feel like there is some stuff I'm missing, but I don't know at all what it is. Overall, I feel less scattered and reactive.

Finished a section on building user interfaces with SwiftUI. I need to remember to use GeometryReader for getting programmatic access to a view's container frame and layout. This is useful for calculating child size based on a parent, laying out a group of items inside a container, and I imagine much more.

Next, I started learning more about data persistence using FileManager to write and read contents. I briefly started learning more about the Codeable protocol. I remember hearing about Codable a few years ago so excited to start digging in to it.

I've been doing a lot of structured/guided learning lately from online resources and courses. I know enough about SwiftUI to be dangerous so at some point I think I should start building something, and learn as problems come up.

The most challenging time to stay under control is when I’m tired. My brain searches for snacks. I’ve noticed that I haven’t had to rely on the blockers I put in place on my phone and computer yet. I’ve had enough resolve to stay away. One thing I’m worried about is my brain getting attached to new snacks. Websites that I wouldn’t have spent much time on before, but are the only things left to snack on. Stale chips. NYT Cooking could be one of those things.

Was more challenging to wake up this morning (snoozed my alarm for an hour) since I went to sleep later.

I watched an hour of TV with my mom and Facetimed Latika right before bed so I only read for five minutes and did shortened breathing exercises.

Even though I didn’t use any “banned” apps I still need more time to clear my mind before going to sleep.

2

Played around with Sign In With Apple and animations.

I’m conflicted as to use SIWA or not because you’re giving away a lot. It is super simple though. Trade offs.

2

Woke up this morning and immediately got out of bed since I signed out of Tweetbot and blocked websites I usually visit in Safari (i.e. Hack News). Once I got up, I did some breathing exercises in Oak. By doing these two simple things, I cleared my mind to start the day and didn't waste 30+ minutes in bed.

1

Today I first learned more about container views in SwiftUI: Stacks, like HStack, VStack, ZStack, how SwiftUI's layout system works, Lists, Forms, Scroll Views, Navigation, etc. I remember doing all these things in UIKit being much harder and needing a lot more code.

Next, I learned more about binding data to views. Some random notes:

- ObservableObject protocol with @Published property wrapper on properties you want to watch for changes
- @ObservedObject property wrapper
- @Binding property wrapper
- .environmentObject(someReferenceType) used with @EnvironmentObject property wrapper to inject dependencies

Lastly, I got an intro to accessibility with SwiftUI. In the past, I haven't done a very good job of making things I've made accessible. It's always been an afterthought because I'm privileged not to need assistance. SwiftUI and iOS makes it easy so I should be adding and testing accessibility from the start as I get into making my own apps. I added a VoiceOver toggle to the lock button if I triple press it.

Some notes on VoiceOver accessibility:

- Passing a decorative property to Image removes the label from being read by VoiceOver Image(decorative: "ImageName")
- You can hide elements from VoiceOver completely with .accessibility(hidden: true) modifier
- You can provide a more understandable value with .accessibility(value: "Some value")
- Call out specific headers for VoiceOver to recognize .accessibility(addTraits: .isHeader)

There are many other accessibility features besides VoiceOver that I still need to learn more about. In the video I watched, it said Apple has three questions to keep in mind when developing for accessibility:

1. Do displayed strings provide enough information?
2. Would a custom action simplify the interaction?
3. Can you speed up navigation?

After using my phone with VoiceOver for a bit, number three resonated with me the most. It takes a while to navigate around with VoiceOver (Iam very experienced with it). I can see how if an app doesn't provide accessibility support or creates custom elements instead of using Apple's accessible versions, it can be very frustrating to get to where you want to go.

Multiple content previews for larger type and dark color scheme:

struct ContentView_Previews : PreviewProvider {
  static var previews: some View {
    
    Group {
        ContentView()
            .environment(\.sizeCategory, .accessibilityExtraExtraLarge)
        ContentView()
            .environment(\.colorScheme, .dark)
    }
  }
}

Woke up late so didn't have as much time this morning. I learned about protocols and extensions. Protocols define requirements and extensions allow for default implementations of those requirements. Here's one useful for accessing ColorSets defined in the asset catalog:

import SwiftUI
extension Color {
    public static let background: Color { Color("Background") }
    public static let brand: Color { Color("Brand") }
    public static let text: Color { Color("Text") }
}

Instead of typing Color("Brand") everywhere (since it's prone to misspelling, etc.), you can do Color(Color.brand).

Also, spent some time playing around with Classes in Swift and inheritance. I already know about polymorphism so this was just practice with syntax.

1

Found this notebook because I ran out of printer paper to scribble on. It has my old Swift notes from 2014-2015 in it! Pretty cool that this loop is continuing again some five years later.

Learned more about programming in Swift:

- Functions: overloading and advanced parameters
- Closures
- Enums: CaseIterable, switch statements, associated values
- Properties and methods: stored, computed, and lazy

I used JavaScript for so long, I forgot how good other languages are. This syntax for swift is really clever:

let numbers = [2, 30, 19, 6, 71, 100]
numbers.reduce(0, +)

Made a tasks app and learned more about SwiftUI views, file organization, binding, different types of navigation views, and models (extensions, protocols, enums, nested types).

I’m still amazed at how fast it is to create decent looking interfaces with SwiftUI. Also, the data binding reminds me a lot of Angular.js and Vue.js.

Made a super simple iOS app, called Bull’s Eye, in the intro course on Ray Wenderlich. It was pretty boring at times because the course caters towards folks with zero to no coding experience. I listened at 2x speed though so got through fast.

I’m conflicted whether or not to continue with structure, like the course, or just make my own stuff.

Also, learned more about navigation, view modifiers, and alerts that were useful.

SF Symbols - SF Symbols - Human Interface Guidelines - Apple Developer

Finished all 10 videos from Primitive that are released. Learned about a bunch of things:

- Basic Xcode shortcuts (cmd+shift+l to open Library, cmd+option+p to start preview, etc.)
- How to use custom and system fonts
- How to use SF Symbols
- Colors (creating color sets in xcassets is super nice)
- Chaining modifiers
- Layout
- Reusable subviews

SwiftUI has come a long way since I looked at it last year. Subviews are really smooth and just work. You don't have to import them like you do with components in JavaScript. I'm excited by how fast it is to throw together good looking interfaces and put them on a phone.

Until there are more Primitive.school videos out, I'm going to switch over the Ray Wenderlich.

A lot of projects I work on tend to be all-consuming. They take over my brain. It makes it hard to be present. Until I find a healthy way to approach the work, I need to take a break for a bit.

I hope to be back soon!

8

Added some demo-able things:

- Placeholder for empty document so you know you can type something in the blank space
- Quick dark mode that hooks in to system preferences
- Added basic vertical rhythm so headings, paragraphs, etc. have some room to breathe

I wasn't handling line breaks and blank lines so I added in some logic to account for both those cases. It got tricky when an inline mark (bold, emphasis, etc.) was split because line breaks are valid in markdown.

__foo bar
baz__

Even though it's unlikely I will split bold text across lines like this, someone might. I think it's important to spend extra time right now to get the little details right.

The editor also handles backlashes better than before too. Adding backlashes or escaped characters (\@) shifted the showing/hiding syntax off track before.

Finally finished updating the parser. Now I have more robust support for complicated markdown variants like heading closing sequences and leading characters.

Switching from marked to remark for parsing markdown since it's more flexible and marked had a couple annoying bugs, like mangling emails.

This will take a few days so nothing to show in the meantime. Need to make the foundation strong.

Finish a basic implementation of headings. Headings can contain marks instead them. Heading syntax disappears when the cursor is focused on a different line.

1

Got carried away today and did something unnecessary: I named it and designed a landing page. It was fun, but doesn't matter. I'm building this for myself.

Late last night I added delete/update markdown. Even though the implementation is a little greedy, it felt great to finish it in much less time than I was expecting.

Today, I made some more improvements to nested marks (i.e. bold inside italic) and added support for links: markdown-syntax, autolinking, and email detection.

Part of my brain is nervously waiting for something to spring up that halts progress. There are already some small bugs, but nothing show stopping. I can fix them later.

3

I started building a notes app for myself.

All the notes apps I've used in the past (iOS Notes, Notational Velocity, Simplenote, Notion, Roam) never quite did what I wanted. I'm a software engineer so figured I might as well try to build a tool I use everyday.

Right now I'm focused on building the editor and haven't thought much about anything else. The goal for the editor is to combine markdown syntax and preview. Syntax shows up when you need it to, and disappears when you don't.

Beyond that I'd like it to be ridiculously performant, work offline, and automatically create a new daily note every day that you can start dumping your thoughts into.

It's unlikely that it ever supports collaboration, tables/databases, slash commands, etc. Those things are for the enterprise and teams or non-technical users. This app is just for me.

My current reference sheet I have a bunch of commands on that I’m trying to memorize or reference frequently.

I started using vimwiki to keep track of things I learn while I'm coding. I can quickly open it, and jot something down or reference a previous note. This is super useful because it's in my terminal with vim, tmux, and friends.

Not sure how I'm going to use this log going forward now. I love how helpful it's been, but don't want to duplicate knowledge in two places.

Got the bike out of the garage. It was hiding behind some stuff. I walked it outside and took some pictures. Everything looks "okay" (nothing is bent or visually off), but I'm not an expert.

There wasn't a lot more I could do with the bike today so I headed to my computer for research. I started an are.na channel to capture links, videos, and pictures. I'm just trying to learn anything right now. I feel like I'm trying to keep my head above water.

I learned why the bike is a ten-speed. Two gears in the front times five gears in the back.

I've used folds sparingly so far because I didn't really know how to use them. Earlier today, I had to edit a really large JSON file and it was a pain to navigate so I decided I should try out folding it.

All I had to do was add set foldmethod=syntax to my vimrc and I was off! I previously installed vim-polyglot so it was an extra bonus that it brings in syntax files on-demand to help with folding.

One of the side effects of how I use Vim is a lot of buffers are opened. I'll make some edits, then switch to a new file, keeping the buffer open, either in the background or foreground.

Once they start piling up, it's a paid to open the buffer list, navigate to each buffer, and close them all. I thought there had to be other people with this problem and found a plugin that takes care of it for me. close-buffers.vim give me the ability to interactively select buffers to close, close all hidden buffers, and several other options.

I just used my first Vim macro!

I knew they were super powerful, but I was avoiding them because the seemed like something hardcore Vim users used. I don't think I'm hardcore (yet). I've only used Vim for a month and a half!

Anyway, I was working in Patreon's code base and had to internationalize a bunch of strings so I recorded a macro to change 'some string' into __('some string'):

qd
ysa'(
i__
q

Now whenever I call @d, I save a few seconds.

My vimrc was getting disorganized after tinkering with it over the past month so I organized it into sections: Plug General, Appearance, Key Mappings, Leader Commands, Plugins, Coc, Autocommands, Commands, and Functions.

These sections are pretty self-explanatory, except I separated out "Coc" into it's own section out of "Plugins" because it has a bunch of extra configuration.

I also added a foldmethod comment (" vim:foldmethod=marker) so all the sections are collapsed when I open up my vimrc to change something.

This is a picture I took almost a year ago of my dad's old bike before my family moved out of the house we grew up in. My dad passed away from cancer in 2007 when I was 14. I've spent a lot of time over the last year trying to sort through my emotions and feel more connected to him.

Now that I'm back in the suburbs — and out of NYC — for a while, I figured I would try to fix up his bike. I know very little about bikes, other than how to ride them so not sure what to expect. I think certain parts, like spokes, are expensive. Once the rain lets up, I'll take it out of the garage for an inspection.

Until then, I'm going to spend some time researching bikes. Found out that this one is a Fuji 10 speed and bookmarked this article to read tomorrow.

Switched from vim-yoink to YankRing. Originally I discounted YankRing because the project was so old and didn't have any recent commits, but it appears to work okay (famous last words).

The thing I like about it that vim-yoink doesn't have is it allows you to view the entire clipboard with the YRShow command (I mapped to <Leader>y) and select one of the yanks to paste.

I use Alfred's built in clipboard history manager to cycle through different things I've copied, but it didn't work well with Vim. Formatting was messed up and my system clipboard picked up some Vim operators I didn't care about (mostly x).

I could have spent more time configuring, but for now I decided to go with vim-yoink, which "automatically maintain[s] a history of yanks that you can choose between when pasting." It even works with the system clipboard!

When I was writing a blog post in Vim, I wanted to turn on spellcheck and change a few other settings so I learned that I could use an autocommand to apply settings based on the open file type.


autocmd FileType markdown setlocal signcolumn=no spell textwidth=80 colorcolumn=+1

I found myself wanting a way to run things on the command line while using Vim so I decided to try out tmux. Like Vim, I had come across tmux before, but never found it that useful.

Now, I almost exclusively run Vim in tmux. With the vim-tmux-navigator plugin, you can quickly jump between Vim splits and tmux panes too.

Typically I will use two tmux panes. One on the left running Vim and one on the right for executing build scripts or tests. It's nice coding and seeing the results nearby.

Vim has a powerful ecosystem of plugins that do almost anything. I wanted to carefully approach installing plugins when I first started so I didn't end up with too many. My goal was to make Vim a little more like the IDEs I'd grown used to since I started programming.

With that in mind, I installed a plugin manager, vim-plug, and added a few to try out. By far the most useful plugin is coc.vim. I mentioned coc before in the output on snippets a couple days ago. It also powers my autocomplete, formatting, etc.

A close second to coc is fzf.vim, which allows me to open files and search code. I extended it to include a nice preview using bat and search really quickly with ripgrep.

Not all Vim plugins adds functionality. My color scheme is also a plugin! I'm using jellybeans. Vim is infinitely configurable and you can often find a plugin to help make a task easier or faster.

The first day I started using Vim, I configured a bunch of basic settings that are mostly unchanged today.

They are the foundation of my vimrc. Simple things like showing line numbers (set number) and the current mode (set showmode), and converting tabs to spaces (set tabstop=4).

I also disabled the arrow keys to force me to use hjkl for everything. Here's what my vimrc looked like back then.

In the last output, I said the next few would focus on documenting everything I learned before I signed up for Futureland. I lied. I'm learning too much, too quickly. Instead they will be a mix of previous learning and new stuff.

Now for some new stuff. Snippets. coc.vim, the ["Intellisense engine"] I'm using, includes an extension for code snippets. I’ve always wanted to use  snippets to speed up development (by reducing the amount of code I need to write) but never wanted to invest time in building up a repository of them.

With coc-snippets, I can take advantage of existing third-party snippet definitions. I already added a couple: vim-es2015-snippets and vim-react-snippets that are speeding things up.

2

I'm a month or so into learning Vim so thought I would start documenting the journey. It's a shame I didn't start recording from the beginning — since I learned a lot — but here we are now. Over the next few days, I'll catch Futureland up to speed, using my Git commit history. Today, I thought I would talk more about the motivation for learning Vim and how I got started.

Vim is a text editor for efficiently creating or changing text. It's popped up every so often since I started programming, but I always dismissed it. After feeling bored with VS Code and seeing a coworker use Vim. I decided I would explore making the switch. I could try it for a week and retreat to the comfort of VS Code if it wasn't for me.

I started on February 25, 2020 with an article on configuring Vim to play nicely with JavaScript. I wanted to make sure I could get an autocomplete, linting, etc. going before committing. Next, I did a few videos a day from Thoughtbot's Onramp to Vim course. After about a week of watching videos, reading blog posts, and using Vim for programming every day, I was hooked.

I wish I started learning Vim 10 years ago! There are not many things I can say that about.

internetvin
😍 lol
internetvin
Nice. Why? It’s neat how you’ve been con...
internetvin
Killer man lol I gotta eat this stuff on...
internetvin
Looks great man! I hope we can eat some ...
internetvin
🖤
internetvin
<3
internetvin
ha! :) Hope you're well
internetvin
Have I read that you’ve done like remote...
internetvin
<3
internetvin
damn, the dude is making Indian food lol...
internetvin
ha nice!
tmm
This is a great idea.
internetvin
I really enjoy these thoughts. It makes ...
internetvin
🖤
internetvin
whoa! nice
josephazar
I saw your comment throw my email, but n...
gndclouds
🌬 💧
justin
It’s sooo hard for me to enforce this wh...
tmm
Wilmot, NH, USA
internetvin
Nice man. This is such a great journal. ...
lucas
Had the same experience so far. Seems to...
tmm
I’ll probably use it since it’s a pretty...
internetvin
A super great image and a beautiful day....
lucas
That sounds like great progress man. Kno...
lucas
Valuable insights about accessibility. T...
tmm
@lucas can i disable previews? this is g...
internetvin
Really neat!
lucas
Hope I will get to this level soon. lol
lucas
Thanks for sharing. Tried it out in anot...
tmm
good idea - will try it out. also just r...
internetvin
Nice! I want to try this out soon. @luca...
lucas
Thank you for sharing. I find that very ...
abhi
Love the alliteration, why not have a la...
internetvin
link to that project: https://futureland...
tmm
Thanks! Wish I started documenting earli...