HN user

dxchester

251 karma
Posts21
Comments25
View on HN
frameable.com 2y ago

We built multiple screen sharing into Microsoft Teams calls

dxchester
1pts0
frameable.com 2y ago

We made "ding" sounds in Microsoft Teams when people join a call

dxchester
4pts3
frameable.com 3y ago

We found sanity in a subset of Tailwind CSS

dxchester
7pts1
github.com 3y ago

Show HN: El – Minimal front-end application framework based on Web Components

dxchester
4pts2
github.com 4y ago

Show HN: Pigeon–Fast diff, patch, merge for JSON with an Automerge-like API

dxchester
4pts0
colludle.socialhour.com 4y ago

Show HN: Colludle – Collaborative Wordle Game

dxchester
3pts3
frameableinc.com 4y ago

A technique to store rich formatting separately from text

dxchester
4pts3
www.subtask.co 5y ago

Use an effort/value matrix to work more effectively with your team

dxchester
3pts1
team.video 5y ago

When You Can't Measure It, You Won't Fix It

dxchester
4pts0
team.video 5y ago

Meeting KPIs That Can Uncover a Toxic Workplace Culture

dxchester
2pts0
team.video 6y ago

Now.me

dxchester
2pts0
team.video 6y ago

Zoom treats you like a child

dxchester
7pts3
github.com 6y ago

Show HN: Aviary.sh – A tiny Bash alternative to Ansible

dxchester
276pts208
team.video 6y ago

A UX approach to video meeting fatigue

dxchester
7pts0
github.com 6y ago

Show HN: Tragopan – Minimal, dependency-free pan/zoom JavaScript library

dxchester
69pts23
news.ycombinator.com 6y ago

Ask HN: Does it bother you to see yourself in video calls?

dxchester
3pts2
team.video 6y ago

Beauty and tragedy at a kindergarten Zoom dance party

dxchester
4pts1
bits.shutterstock.com 12y ago

Mustache vs Swig Templating Shootout

dxchester
1pts0
github.com 12y ago

Ntf -- Acceptance testing for web services in Node.js

dxchester
2pts0
www.theverge.com 12y ago

New massive tunnel under Manhattan

dxchester
2pts0
bits.shutterstock.com 13y ago

Show HN: Lil Brother -- Open Source Client-Side Event Tracking w/ Node.js

dxchester
1pts1

The main reason is that they're too low-level to use directly.

They do a lot, but stop just short of being useful without something of a framework on top. I tried hard to use them directly, but found that it was untenable without sensible template interpolation, and without helpers for event binding.

Here's my shot at the smallest possible "framework" atop Web Components that make them workable (and even enjoyable) as an application developer:

https://github.com/dchester/yhtml

It's just ~10 SLOC, admittedly dense, but which make a world of difference in terms of usability. With that in place, now you can write markup in a style not too dissimilar from React or Vue, like...

    <button @click="increment">${this.count}</button>
Whereas without, you need to bind your own events and manage your own template interpolation with sanitizing, handling conditionals, loops, and all the rest.

If we could get something in this direction adopted into the spec, it would open up a lot of use cases for Web Components that it just can't address as-is.

Agreed that investing in standards is always a good bet. But at the same time, we have so many web frameworks in part because what is spec'd in plain JavaScript/HTML/CSS is not quite high-level enough to be really be a productive foundation just on its own. Going all the way back to raw `Document.createElement` will come with its own special pain.

With the WebComponents movement though, we are getting ever closer to being able to rely on native browser functionality for a good share of what frameworks set out to do. We're not all the way to bliss without frameworks, but for what it's worth here is my 481-byte library to support template interpolation with event binding in order to make WebComponents pretty workable mostly as-is: https://github.com/dchester/yhtml

I also sometimes enjoy this approach of starting from absolutely nothing.

Instead of taking the path of starting with DOM manipulation and then going to a framework as necessary, I've kept really trying to make raw web components work, but kept finding that I wanted just a little bit more.

I managed to get the more I wanted -- sensible template interpolation with event binding -- boiled down to a tag function in 481 bytes / 12 lines of (dense) source code, which I feel like is small enough that you can copy/paste it around and not feel to bad about it. It's here if anyone cares to look: https://github.com/dchester/yhtml

We have used Automerge a bunch, but found that there is a threshold where beyond a given document size, performance gets exponentially worse, until even trivial updates take many seconds' worth of CPU. That is often how it works when the document end state is exclusively the sum of all the edits that have ever happened.

Our answer was to reimplement the Automerge API with different mechanics underneath that allows for a "snapshots + recent changes" paradigm, instead of "the doc is the sum of all changes". That way performance doesn't have to degrade over time as changes accumulate.

Project is here: https://github.com/frameable/pigeon, with some benchmarks: https://github.com/frameable/pigeon/wiki/Benchmarks in the wiki...

We wrote about our journey[0] to sanity after Tailwind:

The answer is to do it all in strategic moderation: Use a subset of tailwind just for spacing and layout and revel in simple things being simple. Use modular CSS for UI patterns and revel in the readability of your HTML and visual consistency of your UI. And then use custom scoped CSS where required, and revel in interesting things being only as hard as need be, without ruining everything else along the way.

[0] https://frameable.com/company/tech/how-we-found-sanity-in-a-...

This sounds cool. We wrote a git-based CMS[0] that is a little different. It has a nice-enough UI for creating and editing markdown documents, which are stored in git. And then it has a JSON API so that your main site can fetch the content and style / format however it likes. Users log in with OAuth or local passwords and their edits end up as git commits that are attributed to them.

[0] https://github.com/frameable/junco-cms

I could have chosen to rebuild the entire UI as a template string as a function of state, but instead, it is ultimately more performant to create these DOM helper methods and modify what I want.

I like the effort, but this is basically admitting defeat. Just naively using template strings and re-rendering the whole app on every change of state _is_ too slow, and so the author falls back instead to rendering via a series of bespoke methods that mix logic and template strings and DOM methods all interspersed. It still has all the shortcomings of 00's-era PHP, or piles of jQuery.

It is possible to do one step better than this still with vanilla js, if you use Web Components / custom elements. That way you can have each type of custom element (todo-app, todo-list, todo-item, etc) have its own render function using template strings, and you can still sneak in custom optimizations (like direct DOM insertion when adding and item to a long list instead of re-rendering).

But in the end, it's just so wonderful to be able to have reactive state and efficiently render your app from the state, and forget about all the rest.

We developed El.js[1] with all of this in mind, to be as little as possible on top of vanilla js and web components, to get the reactivity and efficient rendering.

[1] https://github.com/frameable/el

Frameable | Remote GMT-4 | https://frameable.com/careers

We build next-generation virtual spaces for working together. Tech stack is WebRTC, Node, Vue, WebSockets.

We are hiring for many positions, but especially interested in augmenting our WebRTC capacity, both human and technical. We run our own fleet of mediasoup-powered SFUs, and are working on all sorts of fun and hard problems:

- Large scale testing with 1500+ participants in a call using real headless chromiums

- Voice detection and noise cancellation with wasm/tensorflow

- Being robust to so, so many shenanigans introduced by corporate "adaptive firewalls"

- Geographically distributed TURN servers

- Connection quality scoring and analytics in mediasoup

More on this position here: https://frameable.com/company/careers/streaming-media-engine...

Also hiring for other positions as well including a designer, full-stack engineers, and a QA engineer. It's fun stuff and we are a ambitious, scrappy, delightful team. Come join us!

We built this collaborative wordle game during a hackathon and it turned out to be kind of fun. It's a new word each day, and you can have up to seven people on your team.

For what it's worth, the tech stack is Node / WebSockets / Vue.

The purpose of an agile process is ultimately to "de-risk your investment" as much as possible.

This idea really rings true to me. Tight iteration/feedback loops are key. Each cycle should introduce value -- either in the form solving user pain points, or providing product learnings on the way to solving user pain points.

Yes, in the end it might amount to more overhead each cycle, than if the team had put their head down and focused purely on producing. But: you end up where you actually want to be! And despite however confident you were at the outset, where you want to be is probably different than where you thought you wanted to be. With Agile you get to learn that part along the way.

Organizing by effort/value has been magical for us. Whether it's working thorugh a punchlist for a product nearing launch, or whether it's proioritizing initiatives for the upcoming quarter -- looking through the lens of what is easy/valuable, hard/valuable, etc, really puts things in perspective.

The easy/valuable stuff is obvious, just do it! The hard/useless stuff is obvious too, just let it be. And then the more important decisions come around which hard/valuable stuff to do.

Either way, all that is much clearer when laid out visually...

We put this library together at https://team.video after struggling with "button explosion" in previous projects, where we ended up with an endless sea of subtly different button implementations.

Sometimes the differences were totally legitimate and justified for the use case, and other times it was easy to just not remember or realize that the permutation we wanted had already been painstakingly crafted elsewhere.

When we took a systematic approach to catalog how we were using buttons, we settled on that yes, we really do want a lot of options, depending on the scale of the interaction, how much emphasis we wanted to put on the choice, etc -- but not the infinite flexibility (and so low reusability) that comes with a free-for-all.

So this has really worked well for us after settling on this approach. How have others dealt with the trade-offs here?

Nice, that is a cool concept. Part of the motivation with tragopan was to see if using native scrolling could be a more natural fit especially on mobile, versus the more common way of using transform/translate.

On BigPicture, two bits of feedback for what it's worth:

- Maybe try `user-select: none` while a user is panning? Otherwise I end up inadvertently selecting text sometimes when I try to pan around, especially in Firefox

- I couldn't figure out how to make a given bit of text bigger or smaller, like the demo shows is obviously possible. I did make it happen a few times but then couldn't understand what steps had actually led to the change... Maybe some instructions on that, or just a floating toolbar could help (even though the toolbar-less aesthetic and approach is otherwise pretty nice!)

My son had another event this morning -- this time a treasure hunt over Google Meet. There were 16 wonderful, jubilant kids on the call, but only 9 would show on the screen at any given time, which seemed such a shame.

We should really expect to be able to see everyone on the call, in Kindergarten calls, and in meetings at work too. We humans are so well tuned to read each others' facial expressions that we have no problem recognizing reactions/sentiments in small video feeds of our friends and colleagues, even at avatar-size resolutions.

Internally, we've done some tests/prototyping where it's completely workable to have 100+ feeds on the screen all at once, even with some "hero" space reserved for the couple of most recent active speakers.