• Thoughts

    Always be threat modeling

    Data is a liability. You should consistently be questioning which resources need protection, system boundaries, access capabilities from all sides, and what it would take to feasibly cause a breach.

  • Style

    Semantic slots brings context to styles

    Semantic slots allow labeling of CSS property values with context friendly notation e.g. color: slot.get('body.text.primary');

    Try out scss-semantic-slots and write more consistent SASS.

  • Thoughts

    Dependency Injection is always the answer

    There aren't many hills I'd die on, but DI is one I refuse to budge on.

    The minor inconvenience of complexity is far out weighed by a code base's ability to be easily manipulated with minimal side effects.

  • Coding

    Blazor + HTML minification

    Blazor tracks local state through HTML comments. HTML minification should exclude Blazor: comments to avoid rendering the application unusable.

  • Thoughts

    A job done well means not over-engineered

    Over-engineering is a complexity that burdens code bases, developers and budgets. We need to encourage each other to solve today's problems, not tomorrows.

  • Thoughts

    Could, would, should

    The three most powerful words I use consistently in code reviews. No condescending tones, no orders, just simple open ended questions leading the author to reevaluate and stay in control of their code.

  • Coding

    Async locking

    Async by design may not resume on its original thread which can result in deadlocks. Locking needs to occur through a shared resource, a semaphore.

  • Database

    Prefiltering large datasets

    When dealing with missing indexes or large data sets across joins, in-memory temp tables are often be a highly performant solution.

  • Source control

    Quick Git - Undo local commits

    git reset --soft {commit sha}

  • Source control

    Quick Git - Remove local commits

    git reset --hard {commit sha}

  • Source control

    Quick Git - Undo local changes

    # remove uncommitted filesgit add .git stashgit stash drop

    # remove untracked filesgit clean -fdx

  • Source control

    Quick Git - Remove branches

    # remove local branchgit branch -D {branch}

    # remove remote branchgit push -d origin {branch}

  • Thoughts

    Nest less

    Nesting reduces readability and increases cognitive load. Reduce, or better yet, never nest. Return early and extract code blocks when feasible.

  • Thoughts

    SOLID, KISS, DRY = suggestions, not rules

    Extensibility, flexiblity and maintainability should be balanced with future effort and developer sanity and onboardability.

    Often times it is okay to repeat yourself, it is okay to be verbose and straightforward.

  • Coding

    LINQ .Distinct on ordered results

    If you've noticed that your ordered results become unordered after materializing with .Distrinct(), give .GroupBy() a try.

  • Coding

    WebApi [FromBody]

    Web Api's [FromBody] seems to confuse a lot of developers. By default Web Api will only look for primitve types (string, int, etc) in the uri.

    For actions using primitive types in the body such as Post(int userId) we must tell the Web Api binder to look at the body of the request, not the uri, by decorating arguments with [FromBody].

  • Style

    CSS adjacent selector (+)

    The + selector will apply style to the element immediately following the + selector. In the example below the p tag immediately following the h1 tag will have top margin.

    h1 + p { margin-top: 2em; }
  • Thoughts

    Naming is hard

    Naming and organization is one of the hardest parts of engineering. A poorly chosen name will haunt your code base for years, don't under think it.

An error has occurred. This application may no longer respond until reloaded. Reload 🗙