I do computers. Married to
@radkat
. 3 kids. Xoogler.
@golang
team '10~'20. Made LiveJournal, memcached. Now
@Tailscale
. Mostly in bluer skies these days.
"An update on bradfitz"
After ~12.5 years at Google and ~10 years working on Go, it's time for me to do something new. Tomorrow is my last day at Google. ๐
I'll still be involved with
#golang
but less, and differently.
More:
I can't keep up with the news lately (and most of it's depressing), but the
#HongKong
protests seem like the most optimistic thing that's happening in the world lately.
We're cheering for you, Hong Kong! ๐ญ๐ฐ (well, most of us, except stupid corps and bots)
Today LiveJournal is 20 years old. ๐๐๐ It's a few months older but before that it was a CGI script I copied to friends who ran it on their own servers. Today is domain anniversary. Hosting it for others helped it grow. :)
Coworker closes laptop lid in sadness and frustration at some code. Coworker 2 asks why he doesn't throw his laptop across the room.
"Because I'm afraid I'd then need to upgrade to one with USB-C"
Remember when I quit my well-paying job in January because it was "time for me to do something new"?
I suppose pandemic lockdown childcare is "something new" but this isn't quite what I had in mind; I should've been more specific.
The
#golang
playground now supports third-party imports, pulling them in via ...
๐
Multi-file support & few other things up next.
Report bugs at or here on the tweeters.
When I went to Google in 2007 to learn how the grownups did distributed systems, I searched internal docs for things I'd made and found that YouTube was using Perlbal (LiveJournal's HTTP load balancer) for some stuff at the time.
Honored ๐
Tailscale-for-wasm shipped!
Now you can SSH in your browser to
@Tailscale
nodes. It runs all of Tailscale+WireGuard+gVisor netstack+SSH client in your browser locally.
#WebAssembly
To make a web SSH client from scratch, you must first create the network stack.
It was a lot of fun turning
@bradfitz
โs
@tailscale
Wasm prototype into Tailscale SSH Console. We wrote up a bunch of behind the scenes details at .
Turns out Google's internal business card order form only allows a few email address domain names in its <select> drop-down.
But that's easy enough to fix by editing the DOM with Chrome DevTools.
My parting gift arrived. (I couldn't change the Google to a gopher, though.)
Somebody just found some old pictures of my 21st birthday party and noted that I stepped away from the party to deal with a LiveJournal thing in the middle.
Look at that retro battlestation! And a fax machine?!
Twice today I've spoken up in meetings and was totally ignored. I guess my idea wasn't even worth a reply? :-/
Five minutes later: oh, right, I forgot I'd muted myself.
Go 1.13 is shaping up to be pretty fun:
- modules
- defer on stack ()
- bunch of GC return-memory-to-OS improvements
- bunch of optimizations
- linker memory reductions, some speed
- record version & dep versions in binary
- sync.Pool love
- ...
#golang
115 KiB of our binary is
#golang
compiler-generated equality funcs for structs used as value types.
Make it all go away with this one dirty trick:
Make your struct types not comparable by adding an unnamed 0-sized array of func pointers. Now it can't ==:
_ [0]func()
๐คฎ ๐คทโโ๏ธ
10 years of my technical writing being critiqued by the Go team and I can still hear Rob et al telling me: "Drop Useful. Useful is subjective. And if it's not useful why would it be here anyway?"
java.util.Locale: ...
Dear onesie manufacturers,
Please use alternating colored snaps to prevent off-by-one errors during baby wiggling. All silver doesn't help anybody.
Love,
Parents
@AOC
I hope you enjoyed LiveJournal in high school, at least! Keep up the good work. Don't let the haters hate.
Signed,
LiveJournal creator & AOC fan,
@bradfitz
.
Well, it only took 7 months for Google recruiters to start contacting me.
(Then again, they also contact you while you're still employed at the company, so I shouldn't be too surprised.)
useless idea that maybe already exists:
add song metadata in source code comments so each file can have a theme song that starts playing when you open it (e.g. integrate with vscode-spotify or whatever)
We made a thing: ะขะฐilscale SSH.
We put an SSH server in the
@Tailscale
tailscaled process that integrates w/ Tailscale auth (authN+authZ) so you don't need SSH keys. And works alongside any existing SSH server on your machine.
Props to
@maisem_ali
for doing the hard parts! ๐
๐ Say hello to Tailscale SSH โ and say goodbye to managing SSH keys, setting up bastion jump boxes, and unnecessarily exposing your private production devices to the open internet.
Go 1.14 should be great. Much
#golang
runtime work this cycle. Hope all lands:
* async preemption ()
* fast defers ()
* scalable timers (, )
* new page allocator ()
#golang
defer statements got faster in Go 1.13 and got much faster just now, for Go 1.14:
"cmd/compile, cmd/link, runtime: make defers low-cost through inline code and extra funcdata"
I apologize to any of my twitter followers who are not interested in the union of:
*
#golang
* Politics
* Kubernetes
* Seattle, SF
* Bitcoin
* Photos of my cute baby
* Dad jokes
* General snark
* Beer
But thanks for tolerating all the tweetspam!
Today's my two years at
@Tailscale
anniversary! ๐๐
After about 3,000 commits I'm getting closer to understanding networking. (admittedly a BS metric; nobody will truly understand networking)
Google's all, "Oh, you're logged into Google so we know who you are and your country and every personal detail of your life and looking at a map of Hawaii, so we'll show you miles not km, but OH MY GOD YOU HAVE A GERMAN IP ADDRESS SO WE'LL USE A COMMA FOR THE DECIMAL POINT!"
thx
So,
* FB pays teens to track them with app (market research). ~Fine
* Apple doesn't approve said iOS app
* FB says F that, distributes sideloaded corp app
* Apple says F that, blacklists Facebook's corp cert
* FB employees can't check lunch menu etc
Cool.
I wrote a doc:
CRFS: Container Registry Filesystem
"CRFS is a read-only FUSE filesystem that lets you mount a container image, served directly from a container registry (such as ), without pulling it all locally first."
Code later
We just made the first bits of the
@Tailscale
code public, starting w/ the Linux client + its dependent/common code:
Still lots of rough edges & TODOs everywhere so temper expectations accordingly. We want to hack in open and not wait until it's perfect.
My Unix/Linux knowledge is pretty decent in parts & not so in others.
Stuff around process groups, sessions/session leaders, controlling terminals, ptys, termcaps, login shells, uid/euid/suid, capabilities... very fuzzy.
There a canonical guide/book to all this? Time to learn.
The 3-year-old talking about his little brother who smashed his tower:
"He's just a little boy. He doesn't know what to do. But I'm a big boy and I also don't know what to do."
Deep.
So
@Tailscale
is now officially free for open source projects & friends/family use cases when using GitHub orgs:
We launched GitHub auth support without clarifying that. Consider it clarified. :)
We finished[1] migrating away from git submodules today.
go.mod + gohack FTW. (Thanks,
@rogpeppe
!)
[1] nothing is ever finished, but they are deleted.
When I left Google apparently all my old App Engine and GCP projects were auto-transferred to my team or something, including my very first one when I wanted to run Hello World but it nagged me for a "project ID" (whatever that was!) and I entered:
"your-mom"
So Go got that. ๐
Good on
@AWSOpen
for forking ElasticSearch.
Sorry Elasticsearch, but if you open source something and then up-open source it, don't be surprised if people carry on using & contributing to the old open source version.
Play stupid games, win stupid prizes, etc.
.
@radkat
is really into custom cakes (like Thomas the Tank Engine for our 2 year old's party) but I'm not into Thomas (as much as Dylan) so she got me a cake shaped like my server rack[0], complete with lights. ๐
[0]
Thanks to
@FiloSottile
for sending out to remove hurtful terminology in the
#golang
tree.
Better late than never.
(Preemptive: yes, whitelist/blacklist terms aren't racist by etymology. That's not the point. Rather, not perpetuating white=good/black=bad)
Lolz at internet comments saying that Google couldn't have possibly paid "millions" on Go because
#golang
is so simple.
Probably a troll, but my napkin math w/ git log + ~glassdoor salaries puts Google-paid accumulated salaries alone at least $45 million since 2009.
A good stopping point for going to bed is when you think you know the solution to a problem or at least a good next debugging step.
DON'T ACTUALLY TRY IT, though! If you fail, you'll be up longer: either fighting it more, or thinking about it in bed.
๐ค
Whoa:
"Run VS Code on a remote server"
I haven't been able to fight Emacs+screen+mosh addiction for ~20 years now (well, mosh was recent addition) because I loved being able to move between machines & have my state preserved.
I've been waiting for this!
The IRS has a new authentication provider: .
So to pay taxes to the US government I need to use an identity provider with a Montenegro domain. ๐๐คทโโ๏ธ
If any of y'all would like to experience something, uh, special, then express support for Hong Kong and watch your email and DMs blow up with Chinese bots and nationalists. Wow. Good times.
I can't keep up with the news lately (and most of it's depressing), but the
#HongKong
protests seem like the most optimistic thing that's happening in the world lately.
We're cheering for you, Hong Kong! ๐ญ๐ฐ (well, most of us, except stupid corps and bots)
My
#homelab
write-up is now up:
Questions welcome. I'll reply here & also update the doc. And I'll try to keep it updated over time and flesh it out more with configs, etc.
Week 1 (0.5?) at
@Tailscale
:
* set up internal Tailscale godoc server (running on Tailscale itself!); memories of Google internal godoc on Borg
* set up many accounts, 2FA, computers (Windows + Linux) ... tedious, but necessary
* started prepping for open sourcing stuff ๐๐