Updates on Graduation Panel

I would like to share these things about how the graduation process is going so far:

  • I’m happy that everyone who I asked to be on my panel said yes.
  • My whole panel met on Saturday (four days ago)
  • I’m glad that all six of us were able to schedule a call together
    • To facilitate this (make it easy), my approach was to:
      1. Find out about the availability of the person who I thought would be least flexible
      2. Pick three exact times that I know would work for both them and me
      3. Suggest those times to the group
    • (thanks Abby and Mommy for the good advice that guided me to this approach)
  • The main outcomes of the call were, I think
    • Some clarity for members of the panel about the details of both my project and the graduation process
    • An intention to create sub-groups in which we collaborate on various aspects of the graduation project
      • Projecting out a timeline based on how long things seem to take
      • Architecting the Holochain data integrity model
      • UX and QA design and testing

Grad Project Deets #2: Spec for minimal hApp

I wrote this document in the process of designing a minimal blogging app on Holochain as the first step of my graduation project. This might interest you if you want to know more about how hApps are designed…


Entry Types

  • Blog
    • name: string
  • Blog post
    • owning-blog: hash-of-blog-entry
    • content: string

Anchor types

  • Username

Link types

  • Username anchor to agent
  • Agent to blog
  • Blog to blog post

Validation

Blog entries

  • Blog creation: name less than storage limit
  • Blog editing: agent created blog; new name shorter than storage limit
  • Blog deletion: agent created blog

Blog post entries

  • Blog post creation: agent created owning blog; agent hasn’t deleted owning-blog; content shorter than storage limit
  • Blog post editing: agent created post; agent hasn’t deleted owning-blog; new content shorter than storage limit
  • Blog post deletion: agent created post

Links

  • Link from username anchor to agent: agent linking is agent being linked to
  • Delete link from username anchor to agent: fail
  • Link from agent to blog: agent at link source created blog
  • Delete link from agent to blog: fail
  • Link from blog to blog post: blog post’s owning-blog is blog
  • Delete link from blog to blog post: fail

Grad Project Deets #1: Project Outline

Objective

To create a fully-featured blogging app using Holochain for the use of ALC communities.

Features

Users should be able to:

  • Create posts
  • View posts
  • Embed images and other media
  • Use rich text formatting
  • Download all their content
  • Find other user’s blogs
  • Configure the visibility of their posts
  • Customize the theme of their blog
  • Reply to other user’s blogs
  • Find users in their community

Constraints

We need to make sure that

  • Users have access to all their data (for GDPR)
  • Users can choose the language of all vital components (because the ALC network is international)
  • Users can recover their account/password/private keys easily

Taking a break from my mindless and life-draining habits

I spent pretty much all of my free-time at home in the past six days watching YouTube and scrolling through online articles about Rust. I was looking forward to the weekend, where I would finally get a good night’s sleep and then have the energy to get stuff done. It’s Sunday, and I didn’t get a good night’s sleep and don’t have that energy.

This behaviour where I wait until I have energy so I can get my intentions done isn’t just from this week. This is a persistent complaint that I’ve had on and off for years. A few minutes ago, I decided to try out a shift:

I’m taking a break from watching YouTube and reading articles about Rust for seven days.

The moment I made this decision, in the car ride home from my weekend outside of NYC, I felt a huge relief: I realized that when I got home, since I wouldn’t need to watch YouTube, I could take a nap.

I left the car feeling good. My eyes weren’t hurting because I hadn’t been staring at my phone reading articles.

I just left my nap, (I didn’t actually fall asleep but that’s fine) and I felt bored. My first idea was to open my phone and read some Rust articles, nope. My next idea was to go watch some YouTube on the TV, nope. Then I chose to write a blog post.

I was bored, so I wrote a blog post.

I am shocked at how free I feel right now.

Project Management Plan

For graduation, one of the things I’m gonna do is complete a tech project. For this, I’ve devised a project management plan.

The main goal is to set myself up so that I can make sure I can tell whether I’m getting enough done to complete the project on pace.

My plan is to start by breaking down the project into a bunch of small pieces, then give a relative time rating to each piece. This way, if after a certain amount of time, I haven’t completed enough units of the project, then I know I need to pick up the pace.

This post didn’t end up being very long but I really like my plan!

Pull-Request Reflections #1

I haven’t been writing about my contributions for a while, so this post will try to catch you up.

The start of my recent spree was “Path string roundup”. This was a round-up PR because it looks for some set of patterns across the code-base, and replaces them with something else.

Here’s what I think about round-up PRs…
To write round-up PRs it takes:
  • Time cost – high
    • Very rarely does Find/Replace do the job
    • Since in order to make them easy to review, you have to put each type of substitution in its own commit, you end up jumping between files a lot so you can’t work in flow when you see some other change that needs to be made.
  • Mental effort – low
    • Usually it’s easy to tell whether or not the pattern applies.
  • Conflict resolution effort – high
    • Since they touch many places in the code-base, there are often conflicts.
To review them it takes:
  • Time cost – medium
    • Lots of changes but not a lot of time spent on each
  • Mental effort – very low
    • Assuming that each type of change is in its own commit, you don’t have to think almost at all about the change.
      • Note that this is only true in strongly typed languages where it wouldn’t compile if something trivial was wrong.
Notably, I was motivated to write this specific round-up PR by an issue that a team member opened, implying to me that this was something the team wanted to have happen.

I feel frustrated about this PR because it has now been exactly two months (Sep 8 – Now) and with only positive response, it still hasn’t been merged.

At the same time, I respect that the team has higher priorities than code-quality (i.e. shipping before the two week from now deadline), so I understand why it has taken this long ūüôā

Graduating…

Last Friday, I officially started the graduation process at ALCNYC. I felt was very nervous about graduating which is why I waited until the last possible day to start.

Here are some of my thoughts:
  • Even if I complete the graduation process this year, I can still choose not to graduate.
  • If I fail to complete the process, I will have learned along the way so it won’t be a waste.
  • I want to graduate soon because I want to dedicate my time to Holochain, a cause that I think is both exceedingly important and exceedingly urgent.
  • Since I’m good at coming up with feedback for processes, I want to go through it on the behalf of future graduates.

Here are some of my best ideas for graduation projects:

  • Spending a lot of time farming
  • Taking an internship with a tech company
  • Building a blogging website for the ALC network on Holochain
  • Finishing my WIP non-holochain blogging website for the ALC network (that I work on with a friend)
I’m also gonna make blogging a priority and take Abby’s advice by starting to document reflections on my open source contributions to Holochain.

Redux pattern

I’ve¬†had¬†two¬†(somewhat)¬†recent¬†experiences¬†with¬†the¬†Redux¬†pattern:
  1. Building a web app using React + Redux
  2. Contributing to Holochain, which uses it for managing node state
I¬†think¬†that¬†it¬†worked¬†well¬†for¬†the¬†web¬†app,¬†but¬†I¬†don’t¬†think¬†it¬†did¬†for¬†Holochain.¬†Here¬†are¬†some¬†of¬†my¬†thoughts¬†on¬†when¬†it¬†works¬†well.

If¬†you’re¬†not¬†already¬†familiar¬†with¬†Redux,¬†it¬†helps¬†you¬†model¬†state¬†by¬†defining¬†different¬†types¬†of¬†Actions¬†and¬†a¬†Reducer¬†that¬†given¬†the¬†current¬†state¬†and¬†an¬†Action,¬†produces¬†the¬†next¬†state.

Based on that definition, Redux requires that:
  • You have a clear set of Actions that will come from outside your system.
  • You have a clear order in which Actions should be processed.
  • You don’t mind having a single global state.
    • Since global state inhibits local reasoning, you don’t have much complicated logic to reason about.
    • Since global state requires synchronization, you’re not trying to do things in parallel.
  • You don’t need to persist your state between executions.
Web sites (for the most part) meet all of these requirements:
  • Yes, you have one action per button.
  • Yes, your users can only click one button at a time; no ambigous ordering.
  • Yes, you don’t mind having a single global state because
    • Yes, you’re not doing complicated logic and
    • Yes, you can’t possibly do things in parallel (it’s in the browser).
  • Yes, your users expect the page to get reset after they close it.
Holochain meets only one of them:
  • Yes, you have one action per possible network protocol event.
  • No, since there are multiple agents producing actions (many other nodes, the user interacting with the UI), there isn’t a clear order in which actions should be processed.
  • No, you do mind having a single global state because
    • No, you are doing complicated logic and
    • No, you do want to do things in parallel.
  • No, you do need to persist your state and even be versatile with respect to power-loss, etc.
Since¬†by¬†design,¬†most¬†of¬†the¬†state¬†that¬†nodes¬†need¬†to¬†keep¬†track¬†of¬†should¬†be¬†within¬†cryptographic¬†data¬†structures¬†anyway,¬†the¬†need¬†for¬†a¬†state¬†management¬†system¬†at¬†all¬†pretty¬†much¬†doesn’t¬†exist¬†for¬†Holochain.

Overall, I can’t wait to switch Holochain so that it doesn’t use Redux anymore. We’ll see how hard that ends up being…

Intrinsically Motivated

I’m really happy with how the past couple of weeks are going. I feel like I’m doing a lot and learning a lot. The best part? I haven’t needed to use any sources of external motivation!

In general, however, I tend to have a less happy outlook on my productivity. I spend days and days on “unproductive” activities, don’t contribute to anything besides maybe my Mom’s emotional well-being or something. I notice that I feel tired and low on energy, sometimes I even stay up late and make things worse.

Sometimes, I try to implement external structures to provide motivation. Maybe a group of accountability buddies who can provide social pressure to complete a task or something of the like.

However, even when I’m low energy, it’s not really that I’m unmotivated. I’m very motivated to watch the next video, I get excited about clicking on it. This brings me to the new theory that I’m gonna try on: I’m intrinsically motivated to do things that I want to be doing.

Imagine how cool it would be to think that about yourself!

The latest

Here’s the latest things I’ve been into:

  • Watching videos about DOTA Auto Chess
  • Watching videos about Hearthstone
  • Watching math videos
  • Thinking of strategies for DOTA Auto Chess
  • Thinking about how many powers of two will all even digits exist
  • Thinking about algorithms to split a set of numbers into two sets of equal sum
  • Playing Hearthstone
  • Playing Hearthstone with Dougster
  • Reading blog posts about Rust
  • Reading Rust RFCs
  • Building a web server for blogging in Rust with Even
  • Building a computer in Minecraft with Even
  • Teaching code
  • Supporting elders with devices
  • Playing indie games