NTARelix
I was learning about Kubernetes at work and it seemed like such a powerful tool, so I had this grand vision of building a little cluster in my laundry room with nodes net booting into Flatcar and running services via k3s. When I started building this, I was horrified by the complexity, so I went the complete opposite direction. I didn't need a cluster, net booting, blue-green deployments, or containers. I landed on NixOS with systemd for everything. Bare git repos over ssh for personal projects. Git server hooks for CI/CD. Email server for phone notifications (upgrade failures, service down, low disk space etc). NixOS nightly upgrades.
I never understood the hate systemd gets, but I also never really took the time to learn it until now, and I really love the simplicity when paired with NixOS. I finally feel like I'm satisfied with the operation and management of my server (aside from a semi frequent kernel panic that I've been struggling to resolve).
Not knowing much about how soundcards work, I imagine it would be feasible to flash some soundcards with custom firmware to use the speaker port for input without the user knowing.
> The [WebGPU] spec has been finalized
but the official WebGPU spec [1] still describes it as a draft. Have I misinterpreted something here or is there some missing context around Deno's statement?
The chart I'm talking about has multiple names, but is not a simple pie chart. Thanks to funcDropShadow for pointing this out. The names: sunburst chart, multilevel pie chart, and radial treemap.
https://www.anychart.com/chartopedia/chart-type/sunburst-cha...
One of the primary features I appreciate that the others have behind a paywall is the ability to download content for offline use. 1 less reason to open up my network's SSH port to the world. The feature is great for trips where connectivity is limited, or just at a friend's house with terribly unreliable wifi.
I run Jellyfin on an Athlon II X4 (12 or 13 years old) with several other self-hosted services. Transcoding anything above 720p causes the entire system to come to a screeching halt, so I've pre-transcoded all of my content with handbrake to allow direct-play 4k content on all my home devices (Firefox, Shield TV, Chromecast, Android client, desktop client).
interface ClientMessage { content: string }
function isClientMessage(thing: unknown): thing is ClientMessage { return thing !== null && typeof thing === 'object' && typeof thing.content === 'string' }
expect(isClientMessage('nope')).toBeFalse()
expect(isClientMessage({ content: 'yup' })).toBeTrue()
but user-defined type guards basically duplicate the interface, are prone to error, and can be very verbose. io-ts solves this by creating a run-time schema from which build-time types can be inferred, giving you both an interface and an automatically generated type guard:
import { string, type } from 'io-ts'
const ClientMessage = type({ content: string })
expect(ClientMessage.is('nope')).toBeFalse()
expect(ClientMessage.is({ content: 'yup' })).toBeTrue()
Very nifty for my client/server monorepo using Yarn workspaces where the client and server message types are basically just a union of interfaces (of various complexity) defined in io-ts. Then I can just:
ws.on('message', msg => {
if (ClientMessage.is(msg)) {
// fullfill client's request
} else {
// handle invalid request
}
})Only thing missing is additional validation, which I think can be achieved with more complicated codec definitions in io-ts.
1. Internal maintenance; to understand the system's depths and how it came to be in its current state
2. External consumption; to see the pieces of the system, how they work together, and how to use them
In my research I stumbled across several viable documentation techniques/patterns that seemed to help us reach our doc goals. We decided to combine 3 of those techniques:
1. C4 Model (https://c4model.com/)
2. Architectural Decision Records (https://adr.github.io/)
3. arc42 (https://arc42.org/)
The result feels like more documentation than anyone will ever read, but it has allowed us to create a complete self-service set of documents that should allow our library to be used broadly across the org without our team becoming something like a tool support team.
While demonstrating or describing our system to people across the org (not just devs) we found that pointing to the top 2 levels of our C4 diagrams has been incredibly useful at helping describe the system and the work we're doing in the system. We've also received fantastic positive feedback from our audience regarding the diagrams and their ability to help clarify the concepts being described.
We decided to embed our diagrams directly into our markdown docs. The raw markdown looks like this:
```
## How It Works
A person uses the app, the app is compiled from the code, the code is maintained by developers.
<!--
@startuml example-diagram
!include <C4/C4_Container>
Person(dev, "Developer", "A software developer")
Person(user, "User", "A person that uses the application")
System(app, "Application", "The application")
System(code, "Code", "Code repository")
Rel(dev, code, "Maintains", "Git")
Rel(code, app, "Produces", "Azure")
Rel(user, app, "Uses", "Web Browser")
@enduml
-->

```
This ends up being completely readable as a plain markdown file, but is enhanced by having a markdown preview tool like any of the major Git hosts (GitHub, ADO, etc.) because the PlantUML is hidden, but the diagram is presented graphically as a .png image. It also allows us to keep our documentation close to the code it represents, which has been a huge benefit in the organizing of documentation (vs adding another doc to the pile of outdated docs in our internal wiki).
The big improvement for me that Firefox had over IE was tabs, though I'm sure there were many other UX improvements that my young mind didn't recognize or hold onto.
I imagine this means the 2+ clients use XMPP to negotiate direct connections to one another that are better suited for audio/video streaming.
A couple new problems we're dealing with now:
1. Finding older common things and deprecating them. When it's in a common space it feels like it's everyone's responsibility which means nobody ends up working on it. Maybe more narrow, clear ownership would solve that problem.
2. Someone finds the common thing that almost fits their need, if only it had one more little feature. The problem is when this happens many times and you end up with this complicated beast of an abstraction. This is probably solved by finding ways to decompose the abstraction and by following a principle of "do one thing well" or something about simplicity.
I ended up linking to my Google account, but I spent a long while trying to "sign up" with my email only to be given an message about failing to meet the password requirements (no mention of character limit and no special characters allowed). At first I thought I just needed to adjust my password generator to get a valid password (usually 64 chars with alpha-numerics and special characters), but even the simplest passwords failed with the same error message.
[0]: https://git-scm.com/book/en/v2/Git-Internals-Plumbing-and-Po...
That miscommunication wasn't apparent to me back then, but seems more relevant than ever now. People often like to make bold claims without giving the relevant context or even without actually understanding the context. I see this all the time with news articles or videos making some claim, showing a small bit of evidence, then the information spreads quickly through social bubbles. If I decide to dig through the sources from which the article was derived, I find that there's often a very important piece of context missing. Whether that context was intentionally removed to twist a narrative or if the context was overlooked is not always clear, but it makes it hard to trust so many people and news articles today.
The best remedy for me so far has been to attempt to identify gaps in the knowledge of the people and articles that I'm observing, then try to fill in those gaps.
This article puts to rest my dissatisfaction with the simple claim that they don't decompose because it reveals the primary difference in testing between the conclusions formed by the 2 opposing experiments.
I also just hated worrying about which hairstyle to get, how to maintain that style, and when to repeat that process. Now it's a cheap and simple part of my routine that looks and feels great!
Only downside buzzing myself is that I occasionally miss a small spot if I'm in a hurry, but it's never a big deal and it's easy to fix.
If I stay up later than usual then I'll often wake up at the usual time and just sleep a little less, but sometimes I'll sleep a bit longer. Either way I still feel very tired breaking out of my schedule. I'm also lucky enough to have an employer allows a relatively flexible schedule so I could experiment with this for a while.
Calabrio gives you the power of a single integrated solution for call recording, quality assurance, workforce management and analytics. Built for people. Powered by smarter, more intuitive technology. It’s the new way to think about optimization.
We're growing fast and are constantly hiring more developers. Our product is a webapp built primarily on JavaScript and Java. The product can be used in the cloud, on-prem, or in some form of hybrid.
I'm a UI developer in the Minneapolis location working primarily with AngularJS and currently upgrading our UI build from a legacy build system to a more modern build system using NPM/Webpack, Jenkins pipelines, Docker, and Artifactory.
Find jobs and apply here: http://calabrio.com/careers/