closure-library
golink
closure-library | golink | |
---|---|---|
5 | 9 | |
4,841 | 1,132 | |
0.2% | 2.5% | |
6.6 | 7.1 | |
6 days ago | 10 days ago | |
JavaScript | Go | |
Apache License 2.0 | BSD 3-clause "New" or "Revised" License |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
closure-library
-
For processing strings, streams in C++ can be slow
> "I recently learned that some Node.js engineers prefer stream classes when building strings, for performance reasons." Pretty much tells you everything you need to know about node js, I guess.
Google Closure Library includes a StringBuffer class. [1]
I recall it having explanatory notes, but I don't see them in the code now. JavaScript engines can optimize a string concatenating to in-place edit, if there is only one reference to the first string. The StringBuffer class keeps the reference count at one, guaranteeing this optimization is available, even if the StringBuffer itself is ever shared.
[1] https://github.com/google/closure-library/blob/master/closur...
- Closure Library Is in Maintenance Mode
-
Tailscale/golink: A private shortlink service for tailnets
This made me wonder what the oldest go-link (from inside Google) discoverable on the public internet is. So far I've found one going back to 2013 (but there should definitely be some from the mid 2000s): https://github.com/google/closure-library/blame/11ed104958a2...
(Fun fact: go-links are so critical to Google ops, that they're expected to be accessible in a "everything is down" scenario.)
-
Which Type, Currency Values In DB?
For data type I always use DECIMAL(#, 6). So 6 decimal places. This accommodates all generally agreed upon rounding standards for calculating interest, taxes, discounts, etc. So for me, something like $12.75 USD will look like 12.750000 in the database. I store the 3-letter currency code in a separate column. I know what the base value for each currency is on the code side in our framework, which has a currency library that reads a dataset that has every currency stored like this (the 'rules' key is a bitmask per Google's i18n currency.js):
- How do I find out what functions are called when a button is pressed in Chrome Console?
golink
- Add short URL link to Tailscale interface
- Golink: A private shortlink service for tailnets
- GitHub - tailscale/golink: A private shortlink service for tailnets
- Tailscale/golink: A private shortlink service for tailnets
-
Tailscale Funnel
Something else interesting they're doing is their tsnet package, which lets you join your process to the tailnet and bind tcp listeners/connect to TCP services via their tailnet IP or subnet.
I'm writing some stuff using this at the moment, but I also just saw https://github.com/tailscale/golink which does the same thing: a single binary that runs a link shortener that joins itself to your tailnet.
tl;dr: don't run your service on a machine then join that to tailnet, directly bind your service to an in-memory tailnet client
- A private shortlink service for tailnets
What are some alternatives?
go-links - The open source go links app at the core of Trotto.
tolocal - self-hosted reverse proxy from public dns domain to localhost
wesher - wireguard overlay mesh network manager
f5go - The F5 Go Redirector
go - Another Google-like Go short link service
golinks - simple go links server backed by airtable
yggdrasil-go - An experiment in scalable routing as an encrypted IPv6 overlay network
natpunch-go - NAT puncher for Wireguard mesh networking.
cjdns - An encrypted IPv6 network using public-key cryptography for address allocation and a distributed hash table for routing.
tailscale - The easiest, most secure way to use WireGuard and 2FA.