We developed this for Roam (https://ro.am/ [1]). Roam is a virtual office environment for real-time collaboration - audio, video, whiteboards, personal offices, team rooms, theaters and group chat with ML-enabled tools layered on top. It's based on Chromium & WebRTC so that we can ship a cross-platform app (Electron) as well as a nearly-parity Web client with a tiny team.
We've had a good experience with this approach, although it is far from plug-and-play. We do have to identity and patch items in Chromium/WebRTC & the server (Pion) interaction to get our video quality up to compete with Zoom/Teams/Meet. We are able to effectively compare video quality across these providers and expect to reach their video quality with this stack.
Disclaimer: I work on Roam's Chat, AI, and API.
[1] We are currently in closed beta so there's not much there at the moment.
As a millenial with a good chunk of his net worth in property, it seems clear that real estate prices are inflated by the Govt via mortgage rates, and I am super nervous about how this plays out now that they are near zero in conjunction with QE. Nowhere to go but down? Yikes
Most of it doesn't. Take a look at net/http. I'm not aware of anything it does that your package could not. Certainly nothing that would move the needle on succinctness.
I see this argument made pretty frequently, and it might be correct for a team that's just starting out.
But service discovery and zero downtime upgrades are not that hard to implement and maintain. Our company's implementations of those things from 12 years ago have required ~zero maintenance and work completely fine. Sure, it uses Zookeeper which is out of vogue, but that also has been "just working" with very little attention.
A thought experiment where we had instead been running a Kubernetes cluster for 12 years comes out pretty lopsided in favor of the path we took for which one minimizes the effort spent and complexity of the overall system.
I have a similar (but much less severe) situation -- need to change my car registration, but my NY State online account has been locked "for security". Calling the phone number says "please use the online portal", but has an option to continue to wait for an agent. However, there is no queue, just a message that says there are high volumes of calls and try your call again. I called at various times over a couple weeks until giving up and just driving with an incorrect registration. Not ideal, tbh.
It seems to me that US politics took a turn for the worse in the past 20 years, and my response has been to disengage. Randomly, I picked up The Politics Industry by Michael Porter and Katherine Gehl, and I found it pretty convincing:
(a) The system of elections and legislation is responsible for the poor outcomes we see. It's not the specific personalities.
(b) That system's rules were written by the Republican and Democratic parties to entrench their power. It is NOT encoded in the constitution or otherwise set in stone. Both parties are winners with the status quo -- they do very well financially by drumming up tribalistic competition instead of cooperation and problem solving.
(c) The result of the current rules is that a politician's ONLY job is to appeal to primary voters, which is why they take an ideologic or hard line stance. "Reaching across the aisle" results in a primary challenger that costs them their job.
As an "average voter" that thinks the best route is probably somewhere in the middle (the world is complicated, and government is neither omnipotent nor impotent), me and everyone like me are not represented.
They present a surprisingly straightforward remedy:
(1) Adopt non-partisan primaries with Final Five ballots, which a couple states have already passed variants of (Final Four just passed in Alaska!)
(2) Ranked choice voting to remove the Spoiler reason ("don't throw your vote away") that keeps independents or third parties out.
I came away optimistic about the future. Highly recommended!
It's hard to square these articles with the reality I see on the ground: our baseline memory usage for common types of Java service is 1 GB, vs 50 MB for Go. We do have a few mammoth servers at the top end in both languages though (e.g. 75 GB heaps)
The deploy JARs have 100+ MB of class files, so perhaps it's a function of all the dependencies that you "need" for an enterprise Java program and not something more fundamental.
These blog posts also present AOT as if its just another option you can toggle, while my impression is that it's incompatible with common Java libraries and requires swapping / maintaining a parallel compiler in the build toolchain, configuring separate rules to build it AOT, etc. I don't have actual experience with it though so I could be missing something.
One thing I omitted in the response which might be relevant is that usually you can only use one version of a package in any given build[1], so you have to use a version that works for everything that depends on it.
I think that might be a difference for folks coming from other ecosystems.
[1] The asterisk is that you can have multiple major versions coexist using Go modules, or you can use gopkg.in import paths, or some other workarounds, but in my experience that is not common and typically you do have to find a single version that works for your whole program.
It can be easier to maintain a small amount of code that you duplicate and check in and is purpose-built to your use case and treat as your own, compared to a general library imported for one routine that you have to think about (licensing, upgrading, auditing). Or sometimes libraries break backwards compatibility to add features you aren't interested in, and it makes busy work to stay up to date.
> Is there no package pinning solution?
Multiple dependency managers have supported pinning since at least 5 years ago e.g. glock, dep, glide. Go Modules supports pinning.
> Pinning is the solution for avoiding breakage due to dependencies
Related to the first point, in general you have to do work to upgrade your dependencies. If not because you care about bug / security fixes that happen, then because you use ANOTHER library that has the same dependency, and that other library uses a feature only present in a newer version. Any time you upgrade a library it takes work to verify nothing has broken, and potentially work to fix things that do break.
I thought Docker builds are not generally repeatable, since they often `apt-get update && apt-get install`, which depends on the current state of external package management?
They are definitely not reproducible in the sense of building bit-for-bit identical containers, unless you use Bazel.
That being said, I've found Dockerfiles to be a much more reliable build process than most others (recently struggled to get through LogDevice's cmake-based build.. ugh).
Your favorite tool that produces json should be able to work. I'd probably use jsonnet, which has a multi-file mode so that one template file can render into many json files.
Question that's been bugging me and I haven't quite wrapped my head around --
For light usage, I find managing Terraform's state to be a significant hurdle. You basically have no choice but to set up secure remote storage unless you want to check passwords into source control. In contrast `kubectl apply` is so easy to use since it's stateless. It just creates or updates any resources provided, and it even supports --prune if you want the set of configuration to be treated as comprehensive.
It seems like the main things that Terraform adds:
1. The ability to work with providers that require you to store their generated IDs to reference later. With kubernetes, the kind and name of the resource is enough to identify it; it does get assigned a UID, but you don't have to include that in the configuration since keys that are excluded are left as-is.
2. The ability to work with multiple different providers. I'm not sure how often you do have a single terraform project(is that the term?) with more than one provider, but I guess using the same set of tools, even if the configuration is provider-dependent, is nice.
Is that accurate? Does Terraform offer any other advantages?
If you were building a configuration mechanism for your system from scratch to allow your users to configure it as code, would you make .a Terraform provider over a command line tool that can apply [--prune] that same configuration?
According to the announcement [1], gorename is able to rename just about any identifier (function, method, exported variable, local variable) throughout your entire GOPATH, not just a file. I tried it out and it seemed to work fine. Additionally, it seems to detect at least some cases where the rename would cause the resulting code to not work, although you can -force it to apply the changes anyway.
I happen to agree that Go could use more refactoring tools, but I think it's in good shape considering how young it is.
We've had a good experience with this approach, although it is far from plug-and-play. We do have to identity and patch items in Chromium/WebRTC & the server (Pion) interaction to get our video quality up to compete with Zoom/Teams/Meet. We are able to effectively compare video quality across these providers and expect to reach their video quality with this stack.
Disclaimer: I work on Roam's Chat, AI, and API.
[1] We are currently in closed beta so there's not much there at the moment.