October dispatch
This commit is contained in:
162
static/archive/stephango-com-tiumoc.txt
Normal file
162
static/archive/stephango-com-tiumoc.txt
Normal file
@@ -0,0 +1,162 @@
|
||||
#[1]Steph Ango [2]Steph Ango
|
||||
|
||||
[3]Steph Ango / [4]Writing [5]About [6]Now
|
||||
|
||||
Style is consistent constraint
|
||||
|
||||
September 3, 2023 •2 minute read
|
||||
|
||||
Oscar Wilde once said:
|
||||
|
||||
“Consistency is the last refuge of the unimaginative.”
|
||||
|
||||
When it comes to ideas, I agree — allow your mind to be changed. When
|
||||
it comes to process, I disagree. Style emerges from consistency, and
|
||||
having a style opens your imagination. Your mind should be flexible,
|
||||
but your process should be repeatable.
|
||||
|
||||
Style is a set of constraints that you stick to.
|
||||
|
||||
You can explore many types of constraints: colors, shapes, materials,
|
||||
textures, fonts, language, clothing, decor, beliefs, flavors, sounds,
|
||||
scents, rituals. Your style doesn’t have to please anyone else. Play by
|
||||
your own rules. Everything you do is open to stylistic interpretation.
|
||||
|
||||
A style can be a system, a pattern, a set of personal guidelines. Here
|
||||
are a few of mine:
|
||||
* I wear monochromatic clothing without logos
|
||||
* I use YYYY-MM-DD dates everywhere
|
||||
* I pluralize tag and folder names (e.g. #people not #person)
|
||||
* I use [7]plain text files for all my writing
|
||||
* I ask myself [8]40 questions every year
|
||||
* I meal prep lunches every week, shave my head twice a week
|
||||
* I write [9]concise essays, less than 500 words
|
||||
|
||||
Collect constraints you enjoy. Unusual constraints make things more
|
||||
fun. You can always change them later. This is your style, after all.
|
||||
It’s not a life commitment, it’s just the way you do things. For now.
|
||||
|
||||
Having a style collapses hundreds of future decisions into one, and
|
||||
gives you focus. I always pluralize tags so I never have to wonder what
|
||||
to name new tags.
|
||||
|
||||
Style gives you leverage. Every time you reuse your style you save
|
||||
time. A durable style is a great investment.
|
||||
|
||||
Style helps you know when you’re breaking your constraints. Sometimes
|
||||
you have to. And if you want to edit your constraints, you can. It will
|
||||
be easier to adopt the new constraints if you already had some clearly
|
||||
defined.
|
||||
|
||||
You don’t need a style for everything. Make a deliberate choice about
|
||||
what needs consistency and what doesn’t.
|
||||
|
||||
If you stick with your constraints long enough, your style becomes a
|
||||
cohesive and recognizable [10]point of view.
|
||||
__________________________________________________________________
|
||||
|
||||
Appendix
|
||||
|
||||
I am starting a collection of interesting personal style choices.
|
||||
Please [11]send me examples and I’ll add them to the list.
|
||||
* [12]Scott Yu-Jan [13]paints all his tools white.
|
||||
* [14]2ynthetic uses a [15]limited palette for outfits and [16]office
|
||||
decor.
|
||||
* [17]Johnny Decimal is a system to organize digital data.
|
||||
* [18]Casey Neistat labels everything [19]in his studio with paint
|
||||
markers.
|
||||
* Ryan Hoover [20]never changes his profile picture.
|
||||
* Wes Anderson uses [21]the typeface Futura in many of his films.
|
||||
* [22]Steve Jobs wore the same Issey Miyake black turtleneck and New
|
||||
Balance 991 shoes every day.
|
||||
* George R.R. Martin writes his novels on the 40 year old DOS
|
||||
operating system
|
||||
* Beethoven always counted exactly 60 coffee beans to make coffee,
|
||||
especially for visitors.
|
||||
* Jesper Kouthoofd of [23]Teenage Engineering [24]only uses lowercase
|
||||
because uppercase communicates too much authority
|
||||
* Osvaldo Cavandoli created the cartoon [25]La Linea using an
|
||||
animated white line, colored backgrounds, and unintelligible
|
||||
vocalizations
|
||||
|
||||
Linked mentions
|
||||
[26]Don't specialize, hybridize
|
||||
Specialization is too heavily encouraged as a career path. Becoming a
|
||||
generalist is one alternative, but there is...
|
||||
[27]Buy wisely
|
||||
Whenever I buy things I try to prioritize cost per use. Sometimes I
|
||||
consider other priorities such as...
|
||||
[28]Obsidian Vault Template
|
||||
I use Obsidian to write and take notes. This is my bottom-up approach
|
||||
to note-taking and organizing things...
|
||||
[29]Flexoki
|
||||
Flexoki is an inky color scheme for prose and code. Flexoki is designed
|
||||
for reading and writing on...
|
||||
|
||||
You might also enjoy
|
||||
* [30]Buy wisely
|
||||
* [31]Concise explanations accelerate progress
|
||||
* [32]Scars are beautiful
|
||||
* [33]Don't delegate understanding
|
||||
* [34]Nibble and your appetite will grow
|
||||
* [35]How I do my to-dos
|
||||
* [36]Calmness is a superpower
|
||||
* [37]Design is compromise
|
||||
* [38]A little bit every day
|
||||
|
||||
[39]Receive my updates
|
||||
|
||||
Follow me via email, [40]RSS, [41]Twitter and [42]other options
|
||||
____________________ Sign up
|
||||
|
||||
[43]Mastodon
|
||||
|
||||
References
|
||||
|
||||
Visible links:
|
||||
1. https://stephango.com/feed.xml
|
||||
2. https://stephango.com/feed.json
|
||||
3. file:///
|
||||
4. file:///
|
||||
5. file:///about
|
||||
6. file:///now
|
||||
7. file:///file-over-app
|
||||
8. file:///40-questions
|
||||
9. file:///concise
|
||||
10. file:///in-good-hands
|
||||
11. file:///about
|
||||
12. https://www.youtube.com/@ScottYuJan
|
||||
13. https://www.youtube.com/watch?v=3GBPYRG9jM0
|
||||
14. https://www.youtube.com/@2ynthetic
|
||||
15. https://www.youtube.com/watch?v=4xMo2PsLi3c
|
||||
16. https://www.youtube.com/watch?v=1RqBrl0-qOA
|
||||
17. https://johnnydecimal.com/
|
||||
18. https://www.youtube.com/@casey
|
||||
19. https://www.youtube.com/watch?v=vb60rrtTddQ
|
||||
20. https://www.ryanhoover.me/post/why-i-never-change-my-profile-pic
|
||||
21. https://www.marksimonson.com/notebook/view/RoyalTenenbaumsWorldofFutura
|
||||
22. https://en.wikipedia.org/wiki/Steve_Jobs
|
||||
23. https://teenage.engineering/
|
||||
24. https://scandinavianmind.com/feature/human-touch-interview-jesper-kouthoofd-teenage-engineering
|
||||
25. https://en.wikipedia.org/wiki/La_Linea_(TV_series)
|
||||
26. file:///hybridize
|
||||
27. file:///buy-wisely
|
||||
28. file:///vault
|
||||
29. file:///flexoki
|
||||
30. file:///buy-wisely
|
||||
31. file:///concise
|
||||
32. file:///scars
|
||||
33. file:///understand
|
||||
34. file:///nibble
|
||||
35. file:///todos
|
||||
36. file:///calmness
|
||||
37. file:///design-is-compromise
|
||||
38. file:///a-little-bit-every-day
|
||||
39. file:///subscribe
|
||||
40. file:///feed.xml
|
||||
41. https://twitter.com/kepano
|
||||
42. file:///subscribe
|
||||
43. https://mastodon.social/@kepano
|
||||
|
||||
Hidden links:
|
||||
45. https://twitter.com/kepano
|
||||
524
static/archive/www-wired-com-ybjipw.txt
Normal file
524
static/archive/www-wired-com-ybjipw.txt
Normal file
@@ -0,0 +1,524 @@
|
||||
#[1]alternate
|
||||
|
||||
IFRAME: [2]https://www.googletagmanager.com/ns.html?id=GTM-5HBJC2K
|
||||
|
||||
[3]Skip to main content
|
||||
|
||||
(BUTTON) Open Navigation Menu
|
||||
|
||||
To revist this article, visit My Profile, then [4]View saved stories.
|
||||
(BUTTON) Close Alert
|
||||
[5]WIRED
|
||||
I Finally Reached Computing Nirvana. What Was It All For?
|
||||
|
||||
* [6]Backchannel
|
||||
* [7]Business
|
||||
* [8]Culture
|
||||
* [9]Gear
|
||||
* [10]Ideas
|
||||
* [11]Science
|
||||
* [12]Security
|
||||
* [13]Merch
|
||||
* [14]Prime Day
|
||||
|
||||
(BUTTON) More
|
||||
|
||||
To revist this article, visit My Profile, then [15]View saved stories.
|
||||
(BUTTON) Close Alert
|
||||
[16]Sign In
|
||||
|
||||
[17]Search
|
||||
|
||||
* [18]Backchannel
|
||||
* [19]Business
|
||||
* [20]Culture
|
||||
* [21]Gear
|
||||
* [22]Ideas
|
||||
* [23]Science
|
||||
* [24]Security
|
||||
* [25]Merch
|
||||
* [26]Prime Day
|
||||
|
||||
* [27]Podcasts
|
||||
* [28]Video
|
||||
* [29]Artificial Intelligence
|
||||
* [30]Climate
|
||||
* [31]Games
|
||||
* [32]Newsletters
|
||||
* [33]Magazine
|
||||
* [34]Events
|
||||
* [35]Wired Insider
|
||||
* [36]Jobs
|
||||
* [37]Coupons
|
||||
|
||||
[38]Paul Ford
|
||||
[39]Ideas
|
||||
Apr 1, 2022 7:00 AM
|
||||
|
||||
I Finally Reached Computing Nirvana. What Was It All For?
|
||||
|
||||
Breakfast, it turns out. The answer is breakfast.
|
||||
illustration concept of an optimal computer system
|
||||
Illustration: Elena Lacey
|
||||
|
||||
(BUTTON) Save
|
||||
(BUTTON) Save
|
||||
|
||||
Like many nerds before me, I spent a goodly portion of my life
|
||||
searching for the perfect [40]computing system. I wanted a single tool
|
||||
that would let me write prose or programs, that could search every
|
||||
email, tweet, or document in a few keystrokes, and that would work
|
||||
across all my devices. I yearned to summit the mythic Mt. Augment, to
|
||||
achieve the enlightenment of a properly orchestrated personal computer.
|
||||
Where the [41]software industry offered notifications, little clicks
|
||||
and dings, messages jumping up and down on my screen like a dog begging
|
||||
for a treat, I wanted calm textuality. Seeking it, I tweaked. I
|
||||
configured.
|
||||
|
||||
The purpose of configuration is to make a thing work with some other
|
||||
thing—to make the to-do list work with the email client, say, or the
|
||||
calendar work with the other calendar. It's an interdisciplinary study.
|
||||
Configuration can be as complex as programming or as simple as checking
|
||||
a box. Everyone talks about it, but it's not taken that seriously,
|
||||
because there's not much profit in it. And unfortunately, configuration
|
||||
is indistinguishable from procrastination. A little is fine but too
|
||||
much is embarrassing.
|
||||
|
||||
[42]The Best Way to Learn Online? Be a Lurker
|
||||
Sneakbrowsing
|
||||
The Best Way to Learn Online? Be a Lurker
|
||||
|
||||
Paul Ford
|
||||
[43]Coders’ Primal Urge to Kill Inefficiency&-Everywhere
|
||||
Coders
|
||||
Coders’ Primal Urge to Kill Inefficiency—Everywhere
|
||||
|
||||
Clive Thompson
|
||||
[44]Forget To-Do Lists. You Really Need a ‘Got Done’ List
|
||||
work smart
|
||||
Forget To-Do Lists. You Really Need a ‘Got Done’ List
|
||||
|
||||
Stacy S. Kim
|
||||
|
||||
I spent almost three decades configuring my text editor, amassing 20 or
|
||||
so dotfiles that would make one acronym or nonsense word concordant
|
||||
with another. (For me: i3wm + emacs + org-mode + notmuch + tmux, bound
|
||||
together with ssh + git + Syncthing + Tailscale.) I'd start down a
|
||||
path, but then there'd be some blocker—some bug I didn't understand,
|
||||
some page of errors I didn't have time to deal with—and I'd give up.
|
||||
|
||||
A big problem I had was where to put my stuff. I tried different
|
||||
databases, folder structures, private websites, cloud drives, and
|
||||
desktop search tools. The key, finally, was to turn nearly everything
|
||||
in my life into emails. All my calendar entries, essay drafts, tweets—I
|
||||
wrote programs that turned them into gigs and gigs of emails. Emails
|
||||
are horrible, messy, swollen, decrepit forms of data, but they are
|
||||
understood by everything everywhere. You can lard them with
|
||||
attachments. You can tag them. You can add any amount of metadata to
|
||||
them and synchronize them with servers. They suck, but they work. No
|
||||
higher praise.
|
||||
|
||||
It took years to get all these emails into place, tag them, filter them
|
||||
just so. Little by little I could see more of the shape of my own data.
|
||||
And as I did this, software got better and computers got faster. Not
|
||||
only that, other people started sharing their config files on GitHub.
|
||||
|
||||
Then, one cold day—January 31, 2022—something bizarre happened. I was
|
||||
at home, writing a little glue function to make my emails searchable
|
||||
from anywhere inside my text editor. I evaluated that tiny program and
|
||||
ran it. It worked. Somewhere in my brain, I felt a distinct click. I
|
||||
was done. No longer configuring, but configured. The world had
|
||||
conspired to give me what I wanted. I stood up from the computer,
|
||||
suffused with a sort of European-classical-composer level of emotion,
|
||||
and went for a walk. Was this happiness? Freedom? Or would I find
|
||||
myself back tomorrow, with a whole new set of requirements?
|
||||
Most Popular
|
||||
* [45]New York’s Airbnb Ban Is Descending Into Pure Chaos
|
||||
Business
|
||||
New York’s Airbnb Ban Is Descending Into Pure Chaos
|
||||
Amanda Hoover
|
||||
* [46]The Israel-Hamas War Is Drowning X in Disinformation
|
||||
Security
|
||||
The Israel-Hamas War Is Drowning X in Disinformation
|
||||
David Gilbert
|
||||
* [47]Inside FTX’s All-Night Race to Stop a $1 Billion Crypto Heist
|
||||
Security
|
||||
Inside FTX’s All-Night Race to Stop a $1 Billion Crypto Heist
|
||||
Andy Greenberg
|
||||
* [48]23andMe User Data Stolen in Targeted Attack on Ashkenazi Jews
|
||||
Security
|
||||
23andMe User Data Stolen in Targeted Attack on Ashkenazi Jews
|
||||
Lily Hay Newman
|
||||
*
|
||||
|
||||
The more “professional” a piece of software is intended to be, the more
|
||||
likely it is to be scriptable. CAD tools or 3D programs will provide
|
||||
whole languages just for configuration. But the huge consumer products,
|
||||
the operating systems themselves, are more and more locked down. The
|
||||
reasons are multiple—money, security, simplicity. A lot of our
|
||||
computing is done on someone else's terms. We describe it with carceral
|
||||
words. To assert control over your device, you “jailbreak” out.
|
||||
|
||||
I wonder if this is one of the reasons people get into [49]crypto—they
|
||||
dream of a new world that can be customized like software. Programmable
|
||||
money, self-executing contracts, little scripts that rearrange reality.
|
||||
In DAOs (decentralized autonomous organizations), people use code to
|
||||
make social rules, then buy or do things with their consolidated
|
||||
digital might.
|
||||
|
||||
A lot of my friends hate all this stuff (perhaps [50]NFTs more than
|
||||
DAOs) with great passion; they see it as a closing off, a betrayal of
|
||||
the open, trust-driven nature of the early web. Others love it, seeing
|
||||
it as a continuation of the community-building, empowering nature of
|
||||
the early web. What I see is a generation of configurers coming into
|
||||
their own. Older web folks expected to create the new digital economy;
|
||||
these younger ones are trying to create the new economy economy. Their
|
||||
dream is a more perfect union where humans will, because of computers,
|
||||
stop acting in the ways we've been acting since we came out of the
|
||||
trees. Then again, $200 million in NFTs were stolen the day I drafted
|
||||
this column.
|
||||
|
||||
When in history have we been able to schedule folly? Sometimes the only
|
||||
way to end the vacation is to drive the RV off a cliff.
|
||||
|
||||
Perhaps by the time you read this the NFTs will have been returned.
|
||||
That would be a good reconfiguration. But the likely outcome of the
|
||||
boom is that some people will cash out at the right time and become
|
||||
convinced that they hold the keys to the universe and will lecture us
|
||||
for the rest of our lives, and most people (like those who had their
|
||||
NFTs stolen) will be humbled, or at best break even. When in history
|
||||
have we been able to schedule folly? Sometimes the only way to end the
|
||||
vacation is to drive the RV off a cliff.
|
||||
|
||||
While the youth reconfigure society, I'm done configuring. A month has
|
||||
gone by since the click, and the urge to tweak is gone. My system looks
|
||||
like something from the '80s (a lot of it is from the '80s), but I
|
||||
finally got my room just the way I like it.
|
||||
|
||||
Here's what I mean. Say I search for the word “database”; 7,222 emails
|
||||
pop up. Most are from marketers and industry mailing lists proclaiming
|
||||
some technological triumph, but nestled among them are messages from
|
||||
me, or to me, about learning to use databases—XML databases, SQL
|
||||
databases, and so forth. When I read these old messages, I am always
|
||||
surprised at how little I've changed, how consistent my obsessions are.
|
||||
There's something valuable to me in just seeing that, in seeing how the
|
||||
world keeps trumpeting the new while the self stays the same. You'd
|
||||
think there'd be at least five new me's by now, given how often I've
|
||||
vowed to become better. But no. I've been writing about configuring my
|
||||
text editor since 1996. I've been running my mouth about databases at
|
||||
least that long. They say you can't dip your hand in the same river
|
||||
twice, but they rarely mention that it's the same hand doing the
|
||||
dipping.
|
||||
Most Popular
|
||||
* [51]New York’s Airbnb Ban Is Descending Into Pure Chaos
|
||||
Business
|
||||
New York’s Airbnb Ban Is Descending Into Pure Chaos
|
||||
Amanda Hoover
|
||||
* [52]The Israel-Hamas War Is Drowning X in Disinformation
|
||||
Security
|
||||
The Israel-Hamas War Is Drowning X in Disinformation
|
||||
David Gilbert
|
||||
* [53]Inside FTX’s All-Night Race to Stop a $1 Billion Crypto Heist
|
||||
Security
|
||||
Inside FTX’s All-Night Race to Stop a $1 Billion Crypto Heist
|
||||
Andy Greenberg
|
||||
* [54]23andMe User Data Stolen in Targeted Attack on Ashkenazi Jews
|
||||
Security
|
||||
23andMe User Data Stolen in Targeted Attack on Ashkenazi Jews
|
||||
Lily Hay Newman
|
||||
*
|
||||
|
||||
Since the emails are, well, just emails, sometimes I hit Reply (by
|
||||
typing “r”). On a thread that went dormant a decade ago. I don't always
|
||||
offer context. Sometimes I just write, “Curious … how did this turn
|
||||
out?” I used to feel I was intruding, to just drop in like that. But
|
||||
what the hell. It's been a long pandemic. No one has to write back.
|
||||
|
||||
Out go the emails. Most get no reply; some get a bounce-back. But often
|
||||
enough, people respond at length. Some left the city and came back.
|
||||
Some are up for coffee. A surprising number are now cyborgs
|
||||
(pacemakers, hearing aids). Some are rich, some are broke, some are
|
||||
divorced. One is considering being frozen after death, some are
|
||||
considering getting into crypto, and one has moved to Miami. None of us
|
||||
understand our children.
|
||||
|
||||
I'm thinking of starting a Sunday morning waffle breakfast for
|
||||
[55]vaccinated people to come stare at each other. It's one thing to
|
||||
email after 10 years, but everyone appreciates an invitation to
|
||||
breakfast. Maybe I'll set up some sort of internet-connected LED
|
||||
scrolly screen, like they put on food carts, so out-of-towners can
|
||||
leave messages. I gotta have something to configure.
|
||||
|
||||
If you'd asked me, back when I was still configuring, not yet
|
||||
configured, exactly why I was nurturing these dozens of dotfiles, I'd
|
||||
have had a hard time telling you. I would have said: I want a pure and
|
||||
sleek experience. I want the computer working for me, augmenting my
|
||||
dumb brain with its immense arithmetical speed. I want access to my
|
||||
whole digital self. So I am very surprised that the terminal result of
|
||||
my efforts is not some sort of ecstatic communion with the internet, or
|
||||
even with my own computer. The function of my whole big orchestrated,
|
||||
tagged, integrated system was merely to rekindle old ties. What was all
|
||||
that configuration for? It was, in all sincerity, for waffles.
|
||||
__________________________________________________________________
|
||||
|
||||
This article appears in the April 2022 issue. [56]Subscribe now.
|
||||
__________________________________________________________________
|
||||
|
||||
More Great WIRED Stories
|
||||
* 📩 The latest on tech, science, and more: [57]Get our newsletters!
|
||||
* [58]Jacques Vallée still doesn’t know what UFOs are
|
||||
* When should you [59]test yourself for Covid-19?
|
||||
* [60]How to leave your photos to someone when you die
|
||||
* TV struggles to put [61]Silicon Valley on the screen
|
||||
* [62]YouTube's captions insert explicit language in kids' videos
|
||||
* 👁️ Explore AI like never before with [63]our new database
|
||||
* 🎧 Things not sounding right? Check out our favorite [64]wireless
|
||||
headphones, [65]soundbars, and [66]Bluetooth speakers
|
||||
|
||||
[67]Paul Ford is a writer, programmer, and software entrepreneur. He
|
||||
lives in Brooklyn.
|
||||
Contributor
|
||||
*
|
||||
|
||||
Topics[68]magazine-30.04[69]crypto[70]NFTs[71]software[72]Web3
|
||||
|
||||
More from WIRED
|
||||
[73]
|
||||
ChatGPT Isn't Coming for Your Coding Job
|
||||
ChatGPT Isn't Coming for Your Coding Job
|
||||
New technologies have long promised to make human software engineers
|
||||
redundant. But developers have only gotten more important over time.
|
||||
|
||||
Zeb Larson
|
||||
[74]AI-Powered ‘Thought Decoders’ Won’t Just Read Your Mind&-They’ll
|
||||
Change It
|
||||
AI-Powered ‘Thought Decoders’ Won’t Just Read Your Mind—They’ll Change
|
||||
It
|
||||
“Mind-reading” neural decoders could spell the end of privacy. But the
|
||||
full ramifications of this technology are even more concerning.
|
||||
|
||||
Leo Kim
|
||||
[75]Marie Kondo and the Manhattan Project
|
||||
Marie Kondo and the Manhattan Project
|
||||
What does the author and lifestyle guru have in common with the
|
||||
mathematician Stan Ulam—and Benjamin Franklin?
|
||||
|
||||
Coco Krumme
|
||||
[76]In the War Between Harassment and Censorship, No One Wins
|
||||
In the War Between Harassment and Censorship, No One Wins
|
||||
Abuses on Kiwi Farms have sparked debate about harassment, safety, and
|
||||
free speech, with activists on both sides caught in an ethical
|
||||
minefield.
|
||||
|
||||
Katherine Alejandra Cross
|
||||
[77]Is the Physics of Time Actually Changing?
|
||||
Is the Physics of Time Actually Changing?
|
||||
Days seem to be rushing ahead in a disturbing blur, or else slowing
|
||||
painfully down. Maybe it’s a tale as old as—well, you know.
|
||||
|
||||
KC Cole
|
||||
[78]Immersive Tech Obscures Reality. AI Will Threaten It
|
||||
Immersive Tech Obscures Reality. AI Will Threaten It
|
||||
AI could supercharge augmented and virtual reality, making online
|
||||
manipulation and disinformation campaigns much more personal—and
|
||||
effective.
|
||||
|
||||
Jameson Spivack
|
||||
[79]Welcome to Halal Hinge
|
||||
Welcome to Halal Hinge
|
||||
In my community, mums and aunties are joining WhatsApp matchmaking
|
||||
groups to find spouses for their kids. Instead, they’re getting a crash
|
||||
course in modern dating.
|
||||
|
||||
Faima Bakar
|
||||
[80]Everyone Is a Girl Online
|
||||
Everyone Is a Girl Online
|
||||
NPC influencers, "girl dinner," angels, bimbos—the internet is a girl's
|
||||
world now, whether you like it or not.
|
||||
|
||||
Alex Quicho
|
||||
|
||||
[81]WIRED
|
||||
WIRED is where tomorrow is realized. It is the essential source of
|
||||
information and ideas that make sense of a world in constant
|
||||
transformation. The WIRED conversation illuminates how technology is
|
||||
changing every aspect of our lives—from culture to business, science to
|
||||
design. The breakthroughs and innovations that we uncover lead to new
|
||||
ways of thinking, new connections, and new industries.
|
||||
*
|
||||
*
|
||||
*
|
||||
*
|
||||
*
|
||||
*
|
||||
|
||||
(BUTTON) More From WIRED
|
||||
* [82]Subscribe
|
||||
* [83]Newsletters
|
||||
* [84]FAQ
|
||||
* [85]Wired Staff
|
||||
* [86]Press Center
|
||||
* [87]Coupons
|
||||
* [88]Editorial Standards
|
||||
* [89]Archive
|
||||
* [90]Prime Day
|
||||
|
||||
(BUTTON) Contact
|
||||
* [91]Advertise
|
||||
* [92]Contact Us
|
||||
* [93]Customer Care
|
||||
* [94]Jobs
|
||||
|
||||
* [95]RSS
|
||||
* [96]Accessibility Help
|
||||
* [97]Condé Nast Store
|
||||
* (BUTTON) Do Not Sell My Personal Info
|
||||
|
||||
© 2023 Condé Nast. All rights reserved. Use of this site constitutes
|
||||
acceptance of our [98]User Agreement and [99]Privacy Policy and Cookie
|
||||
Statement and [100]Your California Privacy Rights. WIRED may earn a
|
||||
portion of sales from products that are purchased through our site as
|
||||
part of our Affiliate Partnerships with retailers. The material on this
|
||||
site may not be reproduced, distributed, transmitted, cached or
|
||||
otherwise used, except with the prior written permission of Condé Nast.
|
||||
[101]Ad Choices
|
||||
Select international site (BUTTON) United States
|
||||
* [102]UK
|
||||
* [103]Italia
|
||||
* [104]Japón
|
||||
|
||||
References
|
||||
|
||||
Visible links:
|
||||
1. https://www.wired.com/feed/rss
|
||||
2. https://www.googletagmanager.com/ns.html?id=GTM-5HBJC2K
|
||||
3. file:///var/folders/q9/qlz2w5251kzdfgn0np7z2s4c0000gn/T/L85849-8TMP.html#main-content
|
||||
4. file:///account/saved
|
||||
5. file:///
|
||||
6. file:///category/backchannel/
|
||||
7. file:///category/business/
|
||||
8. file:///category/culture/
|
||||
9. file:///category/gear/
|
||||
10. file:///category/ideas/
|
||||
11. file:///category/science/
|
||||
12. file:///category/security/
|
||||
13. https://shop.wired.com/
|
||||
14. file:///story/best-october-prime-day-deals-2023-3/
|
||||
15. file:///account/saved
|
||||
16. file:///auth/initiate?redirectURL=/story/i-finally-reached-computing-nirvana-what-was-it-all-for/&source=VERSO_NAVIGATION
|
||||
17. file:///search/
|
||||
18. file:///category/backchannel/
|
||||
19. file:///category/business/
|
||||
20. file:///category/culture/
|
||||
21. file:///category/gear/
|
||||
22. file:///category/ideas/
|
||||
23. file:///category/science/
|
||||
24. file:///category/security/
|
||||
25. https://shop.wired.com/
|
||||
26. file:///story/best-october-prime-day-deals-2023-3/
|
||||
27. file:///podcasts/
|
||||
28. file:///video/
|
||||
29. https://www.wired.com/category/artificial-intelligence/
|
||||
30. https://www.wired.com/category/science/environment-climate-change/
|
||||
31. https://www.wired.com/tag/video-games/
|
||||
32. https://www.wired.com/newsletter
|
||||
33. https://www.wired.com/magazine
|
||||
34. https://events.wired.com/livewired
|
||||
35. file:///category/wiredinsider/
|
||||
36. https://jobs.wired.com/?source=navbar
|
||||
37. https://www.wired.com/coupons
|
||||
38. file:///author/paul-ford
|
||||
39. file:///category/ideas
|
||||
40. https://www.wired.com/tag/computers/
|
||||
41. https://www.wired.com/tag/software/
|
||||
42. file:///story/best-way-learn-online-be-lurker/
|
||||
43. file:///story/coders-efficiency-is-beautiful/
|
||||
44. file:///story/productivity-got-done-list/
|
||||
45. https://www.wired.com/story/airbnb-ban-new-york-illegal-listings/#intcid=_wired-right-rail_04b13a6e-88a3-40d4-830d-f3acae710540_popular4-1-reranked-by-vidi
|
||||
46. https://www.wired.com/story/x-israel-hamas-war-disinformation/#intcid=_wired-right-rail_04b13a6e-88a3-40d4-830d-f3acae710540_popular4-1-reranked-by-vidi
|
||||
47. https://www.wired.com/story/ftx-1-billion-crypto-heist/#intcid=_wired-right-rail_04b13a6e-88a3-40d4-830d-f3acae710540_popular4-1-reranked-by-vidi
|
||||
48. https://www.wired.com/story/23andme-credential-stuffing-data-stolen/#intcid=_wired-right-rail_04b13a6e-88a3-40d4-830d-f3acae710540_popular4-1-reranked-by-vidi
|
||||
49. https://www.wired.com/tag/cryptocurrency/
|
||||
50. https://www.wired.com/tag/nfts/
|
||||
51. https://www.wired.com/story/airbnb-ban-new-york-illegal-listings/#intcid=_wired-right-rail_04b13a6e-88a3-40d4-830d-f3acae710540_popular4-1-reranked-by-vidi
|
||||
52. https://www.wired.com/story/x-israel-hamas-war-disinformation/#intcid=_wired-right-rail_04b13a6e-88a3-40d4-830d-f3acae710540_popular4-1-reranked-by-vidi
|
||||
53. https://www.wired.com/story/ftx-1-billion-crypto-heist/#intcid=_wired-right-rail_04b13a6e-88a3-40d4-830d-f3acae710540_popular4-1-reranked-by-vidi
|
||||
54. https://www.wired.com/story/23andme-credential-stuffing-data-stolen/#intcid=_wired-right-rail_04b13a6e-88a3-40d4-830d-f3acae710540_popular4-1-reranked-by-vidi
|
||||
55. https://www.wired.com/tag/vaccines/
|
||||
56. https://subscribe.wired.com/subscribe/splits/wired/WIR_Edit_Hardcoded?source=ArticleEnd_CMlink
|
||||
57. https://www.wired.com/newsletter?sourceCode=BottomStories
|
||||
58. https://www.wired.com/story/jacques-vallee-still-doesnt-know-what-ufos-are/?itm_campaign=BottomRelatedStories&itm_content=footer-recirc
|
||||
59. https://www.wired.com/story/when-to-test-for-covid-vaccinated/?itm_campaign=BottomRelatedStories&itm_content=footer-recirc
|
||||
60. https://www.wired.com/story/how-to-leave-photos-behind-when-you-die/?itm_campaign=BottomRelatedStories&itm_content=footer-recirc
|
||||
61. https://www.wired.com/story/wecrashed-tv-silicon-valley/?itm_campaign=BottomRelatedStories&itm_content=footer-recirc
|
||||
62. https://www.wired.com/story/youtubes-captions-insert-explicit-language-kids-videos/?itm_campaign=BottomRelatedStories&itm_content=footer-recirc
|
||||
63. https://www.wired.com/category/artificial-intelligence/?itm_campaign=BottomRelatedStories&itm_content=footer-recirc
|
||||
64. https://www.wired.com/gallery/best-wireless-headphones/?itm_campaign=BottomRelatedStories&itm_content=footer-recirc
|
||||
65. https://www.wired.com/gallery/best-soundbars/?itm_campaign=BottomRelatedStories&itm_content=footer-recirc
|
||||
66. https://www.wired.com/gallery/best-bluetooth-speakers/?itm_campaign=BottomRelatedStories&itm_content=footer-recirc
|
||||
67. file:///author/paul-ford
|
||||
68. file:///tag/magazine-3004/
|
||||
69. file:///tag/crypto/
|
||||
70. file:///tag/nfts/
|
||||
71. file:///tag/software/
|
||||
72. file:///tag/web3/
|
||||
73. https://www.wired.com/story/chatgpt-coding-software-crisis/#intcid=_wired-bottom-recirc-v2_1cf83657-8f1c-4af7-bf40-d8067c0a444b_cral2-2-reranked-by-vidi
|
||||
74. https://www.wired.com/story/ai-thought-decoder-mind-philosophy/#intcid=_wired-bottom-recirc-v2_1cf83657-8f1c-4af7-bf40-d8067c0a444b_cral2-2-reranked-by-vidi
|
||||
75. https://www.wired.com/story/optimization-math-history-coco-krumme/#intcid=_wired-bottom-recirc-v2_1cf83657-8f1c-4af7-bf40-d8067c0a444b_cral2-2-reranked-by-vidi
|
||||
76. https://www.wired.com/story/kiwifarms-tech-ethics-networked-harassment/#intcid=_wired-bottom-recirc-v2_1cf83657-8f1c-4af7-bf40-d8067c0a444b_cral2-2-reranked-by-vidi
|
||||
77. https://www.wired.com/story/physics-of-time-actually-changing/#intcid=_wired-bottom-recirc-v2_1cf83657-8f1c-4af7-bf40-d8067c0a444b_cral2-2-reranked-by-vidi
|
||||
78. https://www.wired.com/story/immersive-technology-artificial-intelligence-disinformation/#intcid=_wired-bottom-recirc-v2_1cf83657-8f1c-4af7-bf40-d8067c0a444b_cral2-2-reranked-by-vidi
|
||||
79. https://www.wired.com/story/whatsapp-matchmaking-dating-ghosting/#intcid=_wired-bottom-recirc-v2_1cf83657-8f1c-4af7-bf40-d8067c0a444b_cral2-2-reranked-by-vidi
|
||||
80. https://www.wired.com/story/girls-online-culture/#intcid=_wired-bottom-recirc-v2_1cf83657-8f1c-4af7-bf40-d8067c0a444b_cral2-2-reranked-by-vidi
|
||||
81. file:///
|
||||
82. https://www.wired.com/subscribe/
|
||||
83. https://www.wired.com/newsletter?sourceCode=HeaderAndFooter
|
||||
84. https://www.wired.com/about/faq/
|
||||
85. https://www.wired.com/wired-staff/
|
||||
86. https://www.wired.com/about/press/
|
||||
87. https://www.wired.com/coupons
|
||||
88. https://www.wired.com/about/wired-on-background-policy/
|
||||
89. https://archive.wired.com/t/storefront/storefront
|
||||
90. file:///story/best-october-prime-day-deals-2023-3/
|
||||
91. https://www.condenast.com/brands/wired
|
||||
92. https://www.wired.com/about/feedback/
|
||||
93. https://subscriptions.wired.com/pubs/N3/WIR/Register.jsp?cds_page_id=175371&cds_mag_code=WIR&id=1423757547774&lsid=50431012277019467&vid=1
|
||||
94. https://www.wired.com/about/wired-jobs/
|
||||
95. file:///about/rss-feeds/
|
||||
96. file:///about/accessibility-help/
|
||||
97. https://www.condenaststore.com/
|
||||
98. https://www.condenast.com/user-agreement/
|
||||
99. http://www.condenast.com/privacy-policy#privacypolicy
|
||||
100. http://www.condenast.com/privacy-policy#privacypolicy-california
|
||||
101. http://www.condenast.com/privacy-policy#privacypolicy-optout
|
||||
102. https://www.wired.co.uk/
|
||||
103. https://www.wired.it/
|
||||
104. https://wired.jp/
|
||||
|
||||
Hidden links:
|
||||
106. file://localhost/story/best-way-learn-online-be-lurker/
|
||||
107. file://localhost/story/coders-efficiency-is-beautiful/
|
||||
108. file://localhost/story/productivity-got-done-list/
|
||||
109. https://www.wired.com/story/airbnb-ban-new-york-illegal-listings/#intcid=_wired-right-rail_04b13a6e-88a3-40d4-830d-f3acae710540_popular4-1-reranked-by-vidi
|
||||
110. https://www.wired.com/story/x-israel-hamas-war-disinformation/#intcid=_wired-right-rail_04b13a6e-88a3-40d4-830d-f3acae710540_popular4-1-reranked-by-vidi
|
||||
111. https://www.wired.com/story/ftx-1-billion-crypto-heist/#intcid=_wired-right-rail_04b13a6e-88a3-40d4-830d-f3acae710540_popular4-1-reranked-by-vidi
|
||||
112. https://www.wired.com/story/23andme-credential-stuffing-data-stolen/#intcid=_wired-right-rail_04b13a6e-88a3-40d4-830d-f3acae710540_popular4-1-reranked-by-vidi
|
||||
113. https://www.wired.com/story/airbnb-ban-new-york-illegal-listings/#intcid=_wired-right-rail_04b13a6e-88a3-40d4-830d-f3acae710540_popular4-1-reranked-by-vidi
|
||||
114. https://www.wired.com/story/x-israel-hamas-war-disinformation/#intcid=_wired-right-rail_04b13a6e-88a3-40d4-830d-f3acae710540_popular4-1-reranked-by-vidi
|
||||
115. https://www.wired.com/story/ftx-1-billion-crypto-heist/#intcid=_wired-right-rail_04b13a6e-88a3-40d4-830d-f3acae710540_popular4-1-reranked-by-vidi
|
||||
116. https://www.wired.com/story/23andme-credential-stuffing-data-stolen/#intcid=_wired-right-rail_04b13a6e-88a3-40d4-830d-f3acae710540_popular4-1-reranked-by-vidi
|
||||
117. https://www.twitter.com/https://twitter.com/ftrain
|
||||
118. https://www.wired.com/story/chatgpt-coding-software-crisis/#intcid=_wired-bottom-recirc-v2_1cf83657-8f1c-4af7-bf40-d8067c0a444b_cral2-2-reranked-by-vidi
|
||||
119. https://www.wired.com/story/ai-thought-decoder-mind-philosophy/#intcid=_wired-bottom-recirc-v2_1cf83657-8f1c-4af7-bf40-d8067c0a444b_cral2-2-reranked-by-vidi
|
||||
120. https://www.wired.com/story/optimization-math-history-coco-krumme/#intcid=_wired-bottom-recirc-v2_1cf83657-8f1c-4af7-bf40-d8067c0a444b_cral2-2-reranked-by-vidi
|
||||
121. https://www.wired.com/story/kiwifarms-tech-ethics-networked-harassment/#intcid=_wired-bottom-recirc-v2_1cf83657-8f1c-4af7-bf40-d8067c0a444b_cral2-2-reranked-by-vidi
|
||||
122. https://www.wired.com/story/physics-of-time-actually-changing/#intcid=_wired-bottom-recirc-v2_1cf83657-8f1c-4af7-bf40-d8067c0a444b_cral2-2-reranked-by-vidi
|
||||
123. https://www.wired.com/story/immersive-technology-artificial-intelligence-disinformation/#intcid=_wired-bottom-recirc-v2_1cf83657-8f1c-4af7-bf40-d8067c0a444b_cral2-2-reranked-by-vidi
|
||||
124. https://www.wired.com/story/whatsapp-matchmaking-dating-ghosting/#intcid=_wired-bottom-recirc-v2_1cf83657-8f1c-4af7-bf40-d8067c0a444b_cral2-2-reranked-by-vidi
|
||||
125. https://www.wired.com/story/girls-online-culture/#intcid=_wired-bottom-recirc-v2_1cf83657-8f1c-4af7-bf40-d8067c0a444b_cral2-2-reranked-by-vidi
|
||||
126. https://www.facebook.com/wired/
|
||||
127. https://twitter.com/wired/
|
||||
128. https://pinterest.com/wired/
|
||||
129. https://www.youtube.com/user/wired/
|
||||
130. https://instagram.com/wired/
|
||||
131. https://www.tiktok.com/@wired?lang=en
|
||||
595
static/archive/xeiaso-net-ygnwtd.txt
Normal file
595
static/archive/xeiaso-net-ygnwtd.txt
Normal file
@@ -0,0 +1,595 @@
|
||||
#[1]alternate [2]alternate
|
||||
|
||||
[3]Xe
|
||||
|
||||
[4]Blog
|
||||
|
||||
[5]Contact
|
||||
|
||||
[6]Resume
|
||||
|
||||
[7]Talks
|
||||
|
||||
[8]VODs
|
||||
|
||||
[9]Signalboost
|
||||
|
||||
gokrazy is really cool
|
||||
|
||||
Published on 09/20/2023
|
||||
An image of undefined I work for Tailscale at the time of writing this
|
||||
article. I wrote this on my own time out of my own volition.
|
||||
|
||||
When you deal with Linux, you end up hearing about "distributions" as
|
||||
different "flavors" of Linux combined with a bunch of other tools. This
|
||||
is mostly true, but it's slightly missing the forest for the trees.
|
||||
|
||||
Consider this famous and often misunderstood quote by Richard Stallman:
|
||||
|
||||
I'd just like to interject for a moment. What you're referring to as
|
||||
Linux is in fact, GNU/Linux, or as I've recently taken to calling
|
||||
it, GNU plus Linux.Linux is not an operating system unto itself, but
|
||||
rather another free component of a fully functioning GNU system made
|
||||
useful by the GNU corelibs, shell utilities and vital system
|
||||
components comprising a full OS as defined by POSIX.
|
||||
|
||||
Many pages of ink have been spilled over analyzing this quote, and a
|
||||
lot of them fall short of really getting at the heart of the matter.
|
||||
What this actually means is something like this:
|
||||
|
||||
By itself, Linux is useless. It does boot the system, it does interface
|
||||
with hardware, but without a bunch of other tools, it's not very
|
||||
useful. It's like a car without a steering wheel, or a boat without a
|
||||
rudder. It does something, but it's not very useful. The real value of
|
||||
things like the GNU project, systemd, openrc and other tools in that
|
||||
vein is that they make Linux useful. They make it into a complete
|
||||
system that you can use to do things. They are the proverbial steering
|
||||
wheel and rudder in the metaphor.
|
||||
Mara is hacker
|
||||
<[10]Mara> Fun fact, if you try to boot a Linux kernel without an init
|
||||
process, it'll just panic and crash!
|
||||
|
||||
Most Linux systems on the face of the planet are built with GNU tools
|
||||
and utilities. In order to compile the Linux kernel, you need to use
|
||||
[11]GCC. In order to run ls to list files in the current directory, you
|
||||
need to use [12]GNU coreutils. Every dynamically linked program uses
|
||||
[13]glibc for performing basic system interactions like writing to
|
||||
files or opening network sockets. Everything is built on top of the GNU
|
||||
toolset. This is why Stallman is so adamant about calling it GNU/Linux.
|
||||
It's not that he's trying to take credit for Linux, it's that he's
|
||||
trying to give credit to the GNU project for making Linux useful.
|
||||
|
||||
However, there's a lot of room for nuance here. For example, [14]Alpine
|
||||
Linux is a Linux distribution that uses [15]musl libc instead of
|
||||
[16]glibc and [17]busybox instead of GNU coreutils. It's still a Linux
|
||||
distribution, but it doesn't use the GNU toolset. It's still a Linux
|
||||
distribution, but it's not GNU/Linux.
|
||||
Mara is hacker
|
||||
<[18]Mara> Also, for the record you can build the Linux kernel with
|
||||
clang, but that's a whole other can of worms. For one, GCC supports
|
||||
many more targets than clang likely ever will, but in general there are
|
||||
some compromises you need to make until clang implements some
|
||||
GCC-specific compiler extensions a bit better. Google, Facebook, and a
|
||||
few other companies do run LLVM compiled kernels in production though,
|
||||
so it's probably closer to viable than you think. Especially if you use
|
||||
ChromeOS or Android.
|
||||
|
||||
So, what is a Linux distribution? It's a collection of tools that make
|
||||
Linux useful. It's a collection of tools that make Linux into a
|
||||
complete system. It's not a "flavor" of Linux (though this conceptually
|
||||
can exist with alternative kernels like the Zen kernel patchset), it's
|
||||
a system that just so happens to make Linux useful.
|
||||
|
||||
As a counter-argument, consider the reason why Linux runs on more
|
||||
devices worldwide than there are people: [19]Android. Android does use
|
||||
the Linux kernel, but it doesn't use any GNU tools in the stack at all.
|
||||
You can't take programs that are compiled against other Linux
|
||||
distributions and run them on Android. You can't take programs that are
|
||||
compiled against Android and run them on other Linux distributions.
|
||||
Aoi is wut
|
||||
<[20]Aoi> Wait, so does this mean Android's not a Linux distribution?
|
||||
What is it then?
|
||||
|
||||
I'm going to argue that Android is not a Linux distribution unto
|
||||
itself. Android is a Linux implementation. It uses the Linux kernel,
|
||||
but that's where the similarities with the rest of the ecosystem end.
|
||||
Android is its own little world where there's just enough system tools
|
||||
to get the system running, but once you get into the UI, it's a
|
||||
completely different world. It's a completely different ecosystem. It's
|
||||
a completely different operating system.
|
||||
Aoi is wut
|
||||
<[21]Aoi> So what's the difference between a Linux distribution and a
|
||||
Linux implementation?
|
||||
Cadey is enby
|
||||
<[22]Cadey> It's a bit of a fuzzy line, but I'd say that a Linux
|
||||
distribution is a collection of discrete tools that make Linux useful,
|
||||
and a Linux implementation is a cohesive collection of bespoke tools
|
||||
that make Linux into a complete system. Really, you could argue that if
|
||||
it has /bin/sh, it's a Linux distribution.
|
||||
|
||||
gokrazy
|
||||
|
||||
[23]gokrazy is a Linux implementation that I've used off and on for a
|
||||
few years now. It's a very interesting project because everything on
|
||||
the system is written in Go save the kernel. The init process is in Go
|
||||
(and even listens over HTTP to handle updates!), every userland process
|
||||
is written in Go, and even the core system services are written in Go.
|
||||
|
||||
Out of the box a gokrazy install comes with these basic tools:
|
||||
* The init process that is mandated to be the parent of all userland
|
||||
processes by the Linux kernel.
|
||||
* A [24]DHCP client that automatically configures the network
|
||||
interface.
|
||||
* A [25]NTP client that automatically sets the system clock.
|
||||
* A little tool to save randomness from the kernel to a file so that
|
||||
it can be used to seed the random number generator on boot (because
|
||||
the Raspberry Pi doesn't have a robust hardware random number
|
||||
generator)
|
||||
|
||||
That's it. Everything else from the web UI to A/B update logic is
|
||||
written in Go. It boots in literal seconds, uses an insanely small
|
||||
amount of RAM out of the box, and runs with nearly zero overhead. When
|
||||
you configure your gokrazy install to run additional software, you do
|
||||
so by adding the Go command path to a configuration file and then
|
||||
updating to trigger a reboot into the new version.
|
||||
|
||||
Here's an example of what my gokrazy virtual machine's file tree looks
|
||||
like:
|
||||
/ # tree etc gokrazy user
|
||||
etc
|
||||
âââ breakglass.authorized_keys
|
||||
âââ gokr-pw.txt
|
||||
âââ gokrazy
|
||||
â âââ sbom.json
|
||||
âââ hostname
|
||||
âââ hosts
|
||||
âââ http-port.txt
|
||||
âââ https-port.txt
|
||||
âââ localtime
|
||||
âââ machine-id
|
||||
âââ resolv.conf -> /tmp/resolv.conf
|
||||
âââ ssl
|
||||
âââ ca-bundle.pem
|
||||
|
||||
gokrazy
|
||||
âââ dhcp
|
||||
âââ heartbeat
|
||||
âââ init
|
||||
âââ ntp
|
||||
âââ randomd
|
||||
|
||||
user
|
||||
âââ breakglass
|
||||
âââ fbstatus
|
||||
âââ qemu-guest-kragent
|
||||
âââ serial-busybox
|
||||
âââ tailscale
|
||||
âââ tailscaled
|
||||
âââ waifud-gok-agent
|
||||
|
||||
That is the entire system. It's all stripped down to these few
|
||||
programs, configuration files, and one symlink for DNS resolution. This
|
||||
is a very minimal system, and it's all you need to run statically
|
||||
linked Go programs. It's very easy to deploy your own services to it
|
||||
too. It's probably the easiest platform I know of that lets you just
|
||||
deploy a Go binary and have it run as a service, automatically
|
||||
restarting when it crashes.
|
||||
|
||||
The tooling
|
||||
|
||||
When I used gokrazy back in the day, you had to use a command line
|
||||
called gokr-packer that you passed a bunch of command line flags to
|
||||
with information about all the Go programs you wanted to run on the
|
||||
machine, configuration for those programs, and any other
|
||||
meta-information like where the update tool should push the image to.
|
||||
It was a bit of a pain to use, but it worked. Recently the [26]gok tool
|
||||
was added to the project, and this has been revolutionary when it comes
|
||||
to using and administrating gokrazy installs.
|
||||
|
||||
Essentially, gok is a wrapper around the existing gokr-packer logic
|
||||
with a JSON file to store your configuration details. It's a lot easier
|
||||
to use, understand, and automate. You don't have to remember command
|
||||
line flags or maintain unwieldy scripts. You just edit a JSON file and
|
||||
push updates with gok update. It's amazingly simple.
|
||||
|
||||
Setting up a gokrazy machine
|
||||
|
||||
As an example, I'm going to show you how to install a bunch of tailnet
|
||||
addons to a gokrazy machine. I'm also going to assume that you don't
|
||||
have a gokrazy install set up yet, so we'll need to install it. To do
|
||||
this, we'll need to do a few simple things:
|
||||
* Install the gok tool.
|
||||
* Create your gok configuration.
|
||||
* Install Tailscale on the machine.
|
||||
* Create your "seed" image with gok overwrite.
|
||||
* Boot it on your Raspberry Pi or VM.
|
||||
* Push any updates to the image to the machine with gok update.
|
||||
|
||||
First, let's install the gok tool. In order to do this, you need to
|
||||
have the [27]Go toolchain installed. Once you have that, you can run go
|
||||
install to install the gok tool:
|
||||
go install github.com/gokrazy/tools/cmd/gok@main
|
||||
|
||||
Mara is hacker
|
||||
<[28]Mara> You may want to ensure that ~/go/bin is in your $PATH
|
||||
variable so that you can run it by the name gok instead of
|
||||
~/go/bin/gok.
|
||||
|
||||
Next, create a new gokrazy configuration with gok new:
|
||||
gok new -i casa
|
||||
|
||||
This will create a configuration named casa (cf: Spanish for "house")
|
||||
in ~/gokrazy/casa. This is where all of your configuration files will
|
||||
live. You can edit the configuration file with gok edit:
|
||||
gok edit -i casa
|
||||
|
||||
If you are making a virtual machine
|
||||
|
||||
If you are making a virtual machine, you will need to override the
|
||||
kernel and firmware packages. You can do this by adding the following
|
||||
to your configuration file:
|
||||
{
|
||||
// ...
|
||||
"KernelPackage": "github.com/rtr7/kernel",
|
||||
"FirmwarePackage": "github.com/rtr7/kernel",
|
||||
// ...
|
||||
}
|
||||
|
||||
You will need to prefix the gok overwrite and gok update commands with
|
||||
GOARCH=amd64 to ensure that Go builds x86_64 binaries instead of ARM
|
||||
binaries:
|
||||
GOARCH=amd64 gok update -i casa
|
||||
|
||||
If you don't do this, you will get arm64 binaries being built. This may
|
||||
require manual recovery of your virtual machine.
|
||||
|
||||
Let's make our lives easier by installing [29]Tailscale on the machine.
|
||||
By default, gokrazy will announce its hostname over DHCP, which usually
|
||||
makes most consumer routers pick it up and then lets you ping it by
|
||||
name. When you have [30]MagicDNS enabled, Tailscale can take over this
|
||||
logic and prevent you from accessing the machine by name.
|
||||
|
||||
However, Tailscale is written in Go and doesn't require any of the
|
||||
services that most Linux distributions provide in order to function.
|
||||
It's a perfect fit for gokrazy. You can install it with gok add:
|
||||
gok add tailscale.com/cmd/tailscaled
|
||||
gok add tailscale.com/cmd/tailscale
|
||||
|
||||
And be sure to add the mkfs service to create a persistent partition on
|
||||
/perm:
|
||||
gok add github.com/gokrazy/mkfs
|
||||
|
||||
Next, fetch an [31]auth key from [32]the admin console and make sure
|
||||
you check that it's reusable. Then, add the following to your
|
||||
configuration file under the PackageConfig block:
|
||||
{
|
||||
// ...
|
||||
"PackageConfig": {
|
||||
// ...
|
||||
"tailscale.com/cmd/tailscale": {
|
||||
"CommandLineFlags": [
|
||||
"up",
|
||||
// paste your key here!
|
||||
"--authkey=tskey-auth-hunter2-hunter2hunter2hunter2"
|
||||
]
|
||||
},
|
||||
// ...
|
||||
}
|
||||
// ...
|
||||
}
|
||||
|
||||
Mara is hacker
|
||||
<[33]Mara> You can pass any other [34]tailscale up flags you want here,
|
||||
such as --advertise-exit-node if you want to use your gokrazy machine
|
||||
as an [35]exit node.
|
||||
|
||||
This will make your machine automatically connect to Tailscale on boot.
|
||||
|
||||
Next, we need to create our "seed" image with gok overwrite. First,
|
||||
figure out what the device node for your SD card is. On Linux, you can
|
||||
do this with lsblk:
|
||||
lsblk
|
||||
|
||||
And then look for the one that has the same size as your SD card. In my
|
||||
case, it's /dev/sdd. Once you have that, you can run gok overwrite:
|
||||
gok overwrite --full /dev/sdd
|
||||
|
||||
However if you want to write the image to a file (such as if you are
|
||||
doing mass distribution or making a VM image), you need to use gok
|
||||
overwrite with a file instead of a device node. This will create a 16
|
||||
GB image:
|
||||
gok overwrite -i casa --full gokrazy.img --target_storage_bytes 17179869184
|
||||
|
||||
Once you have your image, you can write it to your SD card with dd (or
|
||||
[36]balenaEtcher) or import it into your virtual machine hypervisor of
|
||||
choice.
|
||||
|
||||
Once you have your image written to your SD card, you can boot it on
|
||||
your Raspberry Pi or VM.
|
||||
Aoi is wut
|
||||
<[37]Aoi> Wait, so how do I log in with a shell?
|
||||
Cadey is enby
|
||||
<[38]Cadey> You don't. gokrazy doesn't have a login prompt. It's a
|
||||
single-user system. There is [39]breakglass as a tool of last resort to
|
||||
modify things, but you only have a very minimal subset of busybox to
|
||||
work with, so it should be avoided if at all possible.
|
||||
|
||||
Once you have your machine booted and it responds to pings over
|
||||
Tailscale, you can open its HTTP interface in your browser. If you
|
||||
called your machine casa, you can open it at [40]http://casa. It will
|
||||
prompt you for a username and password. Your username is gokrazy, and
|
||||
the password is near the top of your config.json file. When you log in,
|
||||
you'll see a screen like this:
|
||||
[41][gokrazy-ui.jpg]
|
||||
|
||||
This is the gokrazy web UI. It lets you see the status of your machine
|
||||
and any logs that are being generated by your applications. You can
|
||||
also start, stop, and restart any of your applications from here. It's
|
||||
a very simple UI, but it's fantastic for debugging and monitoring.
|
||||
|
||||
Tailnet addons
|
||||
|
||||
Now that we have a Gokrazy system up and running, let's add some
|
||||
programs to it! I'm going to list a couple tailnet addons that give
|
||||
your tailnet superpowers. These are all written in Go, so they're a
|
||||
perfect fit for gokrazy.
|
||||
|
||||
Today I'm going to show you how to install these tools into your
|
||||
tailnet:
|
||||
* [42]golink - a URL shortener at http://go
|
||||
* [43]tmemes - an internal meme generator you can host at
|
||||
http://memegen
|
||||
* [44]tclip - a pastebin you can host at http://paste
|
||||
|
||||
These tools help you augment your tailnet by giving you tools that will
|
||||
make you and your team's life a lot easier. A URL shortener helps you
|
||||
link to complicated Google Docs URLs. A meme generator gives you a new
|
||||
innovative way to let off steam. A pastebin lets you share text with
|
||||
your team without having to worry about the service you're using going
|
||||
offline due to no fault of your own.
|
||||
|
||||
golink
|
||||
|
||||
To install golink, we need to add the golink binary to the
|
||||
configuration. You can do this with gok add:
|
||||
gok add github.com/tailscale/golink/cmd/golink
|
||||
|
||||
Then configure it with gok edit:
|
||||
{
|
||||
// ...
|
||||
"PackageConfig": {
|
||||
// ...
|
||||
"github.com/tailscale/golink/cmd/golink": {
|
||||
"CommandLineFlags": [
|
||||
"--sqlitedb=/perm/home/golink/data.db"
|
||||
],
|
||||
"Environment": [
|
||||
// the same one from before
|
||||
"TS_AUTHKEY=tskey-auth-hunter2-hunter2hunter2hunter2"
|
||||
],
|
||||
// don't start the service until NTP catches up
|
||||
"WaitForClock": true
|
||||
},
|
||||
// ...
|
||||
}
|
||||
// ...
|
||||
}
|
||||
|
||||
And finally push it with gok update:
|
||||
gok update -i casa
|
||||
|
||||
It'll build the image, push it out over Tailscale, trigger a reboot,
|
||||
and be back up in the span of a minute. Once it's back up, you can open
|
||||
the web UI again and see the status of your golink instance at
|
||||
[45]http://casa/status?path=%2fuser%2fgolink:
|
||||
[46][golink.jpg]
|
||||
|
||||
And then you can start using short URLs at [47]http://go:
|
||||
[48][golink-ui.jpg]
|
||||
|
||||
And that's it! You now have a super minimal VM running small programs
|
||||
that let you do useful things to you. You can add more programs to your
|
||||
configuration file and push them with gok update to add more
|
||||
functionality to your machine. You can even add your own programs to
|
||||
the configuration file and push them to your machine. It's a very
|
||||
simple system, but it's very powerful.
|
||||
|
||||
tmemes
|
||||
|
||||
Google is infamous for having an internal service named [49]memegen.
|
||||
This allows Googlers to make internal-facing memes about the slings and
|
||||
arrows that impact them as highly paid programmers. This is an internal
|
||||
service inside Google that has a lot of serious investment of time and
|
||||
energy to make it the best possible experience it can be. It's to the
|
||||
point that reportedly people can keep up with how an all-hands meeting
|
||||
is going by the tone of the sarcastic memes that are being posted to
|
||||
memegen.
|
||||
|
||||
The main reason this is run inside Google is to avoid information
|
||||
leaking via memes. Yes, this is an actual threat model.
|
||||
|
||||
Thanks to the magic of Tailscale, you can make your own private memegen
|
||||
using [50]tmemes. tmemes is a tailnet addon that lets you post image
|
||||
macro templates and layer wisdom over it in the form of text.
|
||||
|
||||
Here's an example meme:
|
||||
[51][society-if-gokrazy.jpg]
|
||||
|
||||
To add tmemes to your gokrazy machine, you can use gok add:
|
||||
gok add github.com/tailscale/tmemes/tmemes
|
||||
|
||||
Then open your config with gok edit and add the following to your
|
||||
PackageConfig block:
|
||||
{
|
||||
// ...
|
||||
"PackageConfig": {
|
||||
// ...
|
||||
"github.com/tailscale/tmemes/tmemes": {
|
||||
"Environment": [
|
||||
"TS_AUTHKEY=tskey-auth-hunter2-hunter2hunter2hunter2"
|
||||
],
|
||||
"CommandLineFlags": [
|
||||
// change this to your desired hostname
|
||||
"--hostname=memegen",
|
||||
// change this to your username on Tailscale
|
||||
"--admin=Xe@github",
|
||||
"--store=/perm/home/tmemes"
|
||||
],
|
||||
"WaitForClock": true
|
||||
},
|
||||
// ...
|
||||
},
|
||||
// ...
|
||||
}
|
||||
|
||||
And then push it with gok update:
|
||||
gok update -i casa
|
||||
|
||||
Then you can head to [52]http://memegen and upload a template to make
|
||||
your own dank memes.
|
||||
|
||||
If you want to integrate your own tools with tmemes, you can check out
|
||||
the [53]API documentation. This should help you do whatever it is you
|
||||
want with a meme generator as a service.
|
||||
|
||||
tclip
|
||||
|
||||
Sometimes you just need a place to paste text and get a URL pointing to
|
||||
it. [54]tclip is a tool that you can add to your tailnet and get
|
||||
exactly that. It's a very simple tool, but it's very useful. It's also
|
||||
written in Go, so it's a perfect fit for gokrazy. [55]Their recent
|
||||
update to remove Cgo dependencies makes it possible to run your tclip
|
||||
node on a gokrazy machine.
|
||||
|
||||
To add tclip to your gokrazy machine, you can use gok add:
|
||||
gok add github.com/tailscale-dev/tclip/cmd/tclipd
|
||||
|
||||
Then open your config with gok edit and add the following to your
|
||||
PackageConfig block:
|
||||
{
|
||||
// ...
|
||||
"PackageConfig": {
|
||||
// ...
|
||||
"github.com/tailscale-dev/tclip/cmd/tclipd": {
|
||||
"CommandLineFlags": [
|
||||
"--data-location=/perm/home/tclip/"
|
||||
],
|
||||
"WaitForClock": true,
|
||||
"Environment": [
|
||||
"TS_AUTHKEY=tskey-auth-hunter2-hunter2hunter2hunter2",
|
||||
"USE_FUNNEL=true" // Remove this if you don't want to use Funnel
|
||||
]
|
||||
},
|
||||
// ...
|
||||
}
|
||||
}
|
||||
|
||||
And then push it with gok update:
|
||||
gok update -i casa
|
||||
|
||||
And then you can start using it by heading to [56]http://paste. Install
|
||||
the command-line tool on your development workstation with go install:
|
||||
go install github.com/tailscale-dev/tclip/cmd/tclip@latest
|
||||
|
||||
Here's an example tclip link if you want to see what it looks like in
|
||||
practice: [57]interjection.c. It's a very simple tool, but it's very
|
||||
useful.
|
||||
|
||||
Conclusion
|
||||
|
||||
gokrazy is insanely cool. It's the easiest way to deploy Go services to
|
||||
your homelab. It integrates seamlessly with Tailscale, and is something
|
||||
that I'm very excited to see grow and mature. I'm very excited to see
|
||||
what the future holds for gokrazy, and I'm very excited to see what
|
||||
people do with it.
|
||||
|
||||
I've seen signs that they're going to be adding an automatic update
|
||||
process, and that has me very excited. I'm also excited to see what
|
||||
other services people add to the gokrazy ecosystem. I'm hoping to add a
|
||||
few of my own in the future, and I'm hoping to see what other people do
|
||||
with it.
|
||||
Mara is hacker
|
||||
<[58]Mara> Spoiler alert: [59]waifud support is coming soon to a
|
||||
homelab near you.
|
||||
(BUTTON) Share
|
||||
|
||||
Facts and circumstances may have changed since publication. Please
|
||||
contact me before jumping to conclusions if something seems wrong or
|
||||
unclear.
|
||||
|
||||
Tags: go, gokrazy, linux
|
||||
|
||||
Copyright 2012-2023 Xe Iaso (Christine Dodrill). Any and all opinions
|
||||
listed here are my own and not representative of any of my employers,
|
||||
past, future, and/or present.
|
||||
|
||||
Like what you see? Donate on [60]Patreon like [61]these awesome people!
|
||||
|
||||
Served by xesite v4
|
||||
(/nix/store/5k4azk5h5ymf5r6siw9jv7d3k58qrwx7-xesite_v4-20231009/bin/xes
|
||||
ite), source code available [62]here.
|
||||
|
||||
References
|
||||
|
||||
1. https://xeiaso.net/blog.rss
|
||||
2. https://xeiaso.net/blog.json
|
||||
3. file:///
|
||||
4. file:///blog
|
||||
5. file:///contact
|
||||
6. file:///resume
|
||||
7. file:///talks
|
||||
8. file:///vods
|
||||
9. file:///signalboost
|
||||
10. file:///characters#mara
|
||||
11. https://gcc.gnu.org/
|
||||
12. https://www.gnu.org/software/coreutils/coreutils.html
|
||||
13. https://www.gnu.org/software/libc/
|
||||
14. https://alpinelinux.org/
|
||||
15. https://musl.libc.org/
|
||||
16. https://www.gnu.org/software/libc/
|
||||
17. https://en.wikipedia.org/wiki/BusyBox
|
||||
18. file:///characters#mara
|
||||
19. https://en.wikipedia.org/wiki/Android_(operating_system)
|
||||
20. file:///characters#aoi
|
||||
21. file:///characters#aoi
|
||||
22. file:///characters#cadey
|
||||
23. https://gokrazy.org/
|
||||
24. https://en.wikipedia.org/wiki/Dynamic_Host_Configuration_Protocol
|
||||
25. https://en.wikipedia.org/wiki/Network_Time_Protocol
|
||||
26. https://gokrazy.org/quickstart/
|
||||
27. https://golang.org/doc/install
|
||||
28. file:///characters#mara
|
||||
29. https://tailscale.com/
|
||||
30. https://tailscale.com/kb/1081/magicdns/
|
||||
31. https://tailscale.com/kb/1085/auth-keys/
|
||||
32. https://login.tailscale.com/admin/settings/keys
|
||||
33. file:///characters#mara
|
||||
34. https://tailscale.com/kb/1080/cli/#up
|
||||
35. https://tailscale.com/kb/1103/exit-nodes/?q=exit node
|
||||
36. https://etcher.balena.io/
|
||||
37. file:///characters#aoi
|
||||
38. file:///characters#cadey
|
||||
39. https://github.com/gokrazy/breakglass
|
||||
40. http://casa/
|
||||
41. https://cdn.xeiaso.net/file/christine-static/blog/2023/gokrazy/gokrazy-ui.jpg
|
||||
42. https://github.com/tailscale/golink
|
||||
43. https://github.com/tailscale/tmemes
|
||||
44. https://github.com/tailscale-dev/tclip
|
||||
45. http://casa/status?path=/user/golink
|
||||
46. https://cdn.xeiaso.net/file/christine-static/blog/2023/gokrazy/golink.jpg
|
||||
47. http://go/
|
||||
48. https://cdn.xeiaso.net/file/christine-static/blog/2023/gokrazy/golink-ui.jpg
|
||||
49. https://www.buzzfeednews.com/article/reyhan/inside-googles-internal-meme-generator
|
||||
50. https://github.com/tailscale/tmemes
|
||||
51. https://cdn.xeiaso.net/file/christine-static/blog/2023/gokrazy/society-if-gokrazy.jpg
|
||||
52. http://memegen/
|
||||
53. https://github.com/tailscale/tmemes/blob/main/docs/api.md
|
||||
54. https://tailscale.dev/blog/tclip
|
||||
55. https://tailscale.dev/blog/tclip-updates-092023
|
||||
56. http://paste/
|
||||
57. https://paste.shark-harmonic.ts.net/paste/696b9b02-90ac-4adc-a33d-d749bb6f460f
|
||||
58. file:///characters#mara
|
||||
59. https://github.com/Xe/waifud-gok-agent
|
||||
60. https://patreon.com/cadey
|
||||
61. file:///patrons
|
||||
62. https://github.com/Xe/site
|
||||
Reference in New Issue
Block a user