Use w3m for archiving
This commit is contained in:
@@ -15,7 +15,7 @@ puts "references:"
|
||||
|
||||
urls.each do |url|
|
||||
page_content = `curl -s #{url}`
|
||||
text_content = `lynx -dump --display_charset=utf-8 #{url}`
|
||||
text_content = `w3m -dump -T text/html -o display_link_number=1 #{url}`
|
||||
|
||||
begin
|
||||
title = page_content
|
||||
|
||||
@@ -1,170 +1,174 @@
|
||||
#[1]home [2]RSS
|
||||
|
||||
[3]Aaron Bushnell
|
||||
(BUTTON)
|
||||
[1] Aaron Bushnell
|
||||
|
||||
Hi, I'm Aaron!
|
||||
|
||||
Born and raised in the midwest and notorious [4]golden retriever
|
||||
hoarder.
|
||||
* Featherhour
|
||||
* Mastodon
|
||||
* GitHub
|
||||
* Twitch
|
||||
* Spotify
|
||||
* Twitter
|
||||
Born and raised in the midwest and notorious [3]golden retriever hoarder.
|
||||
|
||||
• [4]
|
||||
Featherhour
|
||||
• [5]
|
||||
Mastodon
|
||||
• [6]
|
||||
GitHub
|
||||
• [7]
|
||||
Twitch
|
||||
• [8]
|
||||
Spotify
|
||||
• [9]
|
||||
Twitter
|
||||
|
||||
You are beautiful. ❤️
|
||||
|
||||
[5]Aaron Bushnell
|
||||
[10] Aaron Bushnell
|
||||
|
||||
Hi, I'm Aaron!
|
||||
|
||||
Born and raised in the midwest and notorious [6]golden retriever
|
||||
hoarder.
|
||||
* Featherhour
|
||||
* Mastodon
|
||||
* GitHub
|
||||
* Twitch
|
||||
* Spotify
|
||||
* Twitter
|
||||
Born and raised in the midwest and notorious [11]golden retriever hoarder.
|
||||
|
||||
• [12]
|
||||
Featherhour
|
||||
• [13]
|
||||
Mastodon
|
||||
• [14]
|
||||
GitHub
|
||||
• [15]
|
||||
Twitch
|
||||
• [16]
|
||||
Spotify
|
||||
• [17]
|
||||
Twitter
|
||||
|
||||
You are beautiful. ❤️
|
||||
|
||||
[7]← View all posts
|
||||
[18]← View all posts
|
||||
August 28, 2023
|
||||
|
||||
Keep your stack short
|
||||
|
||||
Not long ago [8]I wrote about using Gatsby.js on a Craft CMS project.
|
||||
If you want to learn more about that particular pairing you may want to
|
||||
read that post. But, for the sake of this one, I'll briefly summarize
|
||||
the tech stack:
|
||||
Not long ago [19]I wrote about using Gatsby.js on a Craft CMS project. If you
|
||||
want to learn more about that particular pairing you may want to read that
|
||||
post. But, for the sake of this one, I'll briefly summarize the tech stack:
|
||||
|
||||
[9]Craft CMS handles the backend (content). [10]Gatsby.js, [11]GraphQL,
|
||||
and [12]React handles frontend. The on-paper benefits sound like a
|
||||
great approach for building a website:
|
||||
* Craft CMS: The best CMS out there (in my opinion)
|
||||
* React: One templating language for static-generated content and
|
||||
client-side interactivity
|
||||
* GraphQL: A centralized dataset accessible from a single API
|
||||
* Performance: Serving a compiled, static version of the site is
|
||||
extremely fast
|
||||
[20]Craft CMS handles the backend (content). [21]Gatsby.js, [22]GraphQL, and
|
||||
[23]React handles frontend. The on-paper benefits sound like a great approach
|
||||
for building a website:
|
||||
|
||||
If this were a web framework's website you'd see a column of ✅s next to
|
||||
another framework's pitiful column of ❌s.
|
||||
• Craft CMS: The best CMS out there (in my opinion)
|
||||
• React: One templating language for static-generated content and client-side
|
||||
interactivity
|
||||
• GraphQL: A centralized dataset accessible from a single API
|
||||
• Performance: Serving a compiled, static version of the site is extremely
|
||||
fast
|
||||
|
||||
If this were a web framework's website you'd see a column of ✅s next to another
|
||||
framework's pitiful column of ❌s.
|
||||
|
||||
But, there's always a catch
|
||||
|
||||
There's no such thing as a free lunch and that goes double for
|
||||
programming.
|
||||
There's no such thing as a free lunch and that goes double for programming.
|
||||
|
||||
If you've ever set up a system like this it's tempting to think
|
||||
that—once it's established—the hardest part is over. But, it's not.
|
||||
If you've ever set up a system like this it's tempting to think that—once it's
|
||||
established—the hardest part is over. But, it's not.
|
||||
|
||||
The hardest part isn't setting it up. It's coming back to it a year
|
||||
later.
|
||||
The hardest part isn't setting it up. It's coming back to it a year later.
|
||||
|
||||
A year later you're more likely to be mired in:
|
||||
* Time-consuming training and documentation for team members
|
||||
* Out-of-date dependencies
|
||||
* Updates that cause breaking changes across your stack
|
||||
* Workflows that make trivial updates time-consuming
|
||||
|
||||
You wind up with a great deal of complexity that prevents you from
|
||||
adding the features your client needs ASAP. While your stack is
|
||||
conceptually well-separated and tidy, the separation itself becomes
|
||||
your greatest liability to be productive.
|
||||
• Time-consuming training and documentation for team members
|
||||
• Out-of-date dependencies
|
||||
• Updates that cause breaking changes across your stack
|
||||
• Workflows that make trivial updates time-consuming
|
||||
|
||||
You wind up with a great deal of complexity that prevents you from adding the
|
||||
features your client needs ASAP. While your stack is conceptually
|
||||
well-separated and tidy, the separation itself becomes your greatest liability
|
||||
to be productive.
|
||||
|
||||
Low abstraction trends
|
||||
|
||||
Maybe you've heard, but [13]there's a post or two about [14]Tailwind
|
||||
and its controversial approach.
|
||||
Maybe you've heard, but [24]there's a post or two about [25]Tailwind and its
|
||||
controversial approach.
|
||||
|
||||
I'm not going to proselytize a framework or tool. But there's an
|
||||
obvious influx in tools like Tailwind that aim to reduce overhead and
|
||||
abstractions.
|
||||
I'm not going to proselytize a framework or tool. But there's an obvious influx
|
||||
in tools like Tailwind that aim to reduce overhead and abstractions.
|
||||
|
||||
Tailwind does this by encouraging you to style your components directly in your
|
||||
templates:
|
||||
|
||||
Tailwind does this by encouraging you to style your components directly
|
||||
in your templates:
|
||||
<!-- High Abstraction -->
|
||||
<div class="card"></div>
|
||||
|
||||
<!-- Low Abstraction (Tailwind) -->
|
||||
<div class="bg-white rounded-lg p-4"></div>
|
||||
|
||||
React (by way of JSX) allows you to put your structure and interactions
|
||||
into a single file. (And, if you inline your styles, you can collocate
|
||||
everything).
|
||||
React (by way of JSX) allows you to put your structure and interactions into a
|
||||
single file. (And, if you inline your styles, you can collocate everything).
|
||||
|
||||
<button onClick={() => alert('I think you are great!')}>
|
||||
What do you think about me?
|
||||
</button>
|
||||
|
||||
Developers find value in these types of low-overhead tools because:
|
||||
1. They can collocate a component's structure, functionality, and
|
||||
styling into a single file
|
||||
|
||||
1. They can collocate a component's structure, functionality, and styling into
|
||||
a single file
|
||||
2. Detecting "leakage" can be easier because changes to structure,
|
||||
functionality, and styling can occur in this single file
|
||||
|
||||
Shortening the stack
|
||||
|
||||
Revisiting our Gatsby.js example, there's a similarly large distance
|
||||
between the content being stored and the views being presented. It's
|
||||
separated by tools, by protocol, and even by language. All of these
|
||||
bridges require connectors—any of which can fail for any number of
|
||||
reasons and require intervention.
|
||||
Revisiting our Gatsby.js example, there's a similarly large distance between
|
||||
the content being stored and the views being presented. It's separated by
|
||||
tools, by protocol, and even by language. All of these bridges require
|
||||
connectors—any of which can fail for any number of reasons and require
|
||||
intervention.
|
||||
|
||||
But, if we were to reduce the stack from Craft CMS, Gatsby.js, GraphQL,
|
||||
and React to just Craft CMS and [15]Twig (Craft's templating language)
|
||||
it eliminates a massive set of complexity and overhead.
|
||||
But, if we were to reduce the stack from Craft CMS, Gatsby.js, GraphQL, and
|
||||
React to just Craft CMS and [26]Twig (Craft's templating language) it
|
||||
eliminates a massive set of complexity and overhead.
|
||||
|
||||
Not only does it reduce a large number of dependencies, but it
|
||||
eliminates all of the connecting protocols and an entirely different
|
||||
language to keep the stack working. It means fewer bridges to cross,
|
||||
fewer competing dependencies, and a dramatically simpler stack to
|
||||
revisit a year later.
|
||||
Not only does it reduce a large number of dependencies, but it eliminates all
|
||||
of the connecting protocols and an entirely different language to keep the
|
||||
stack working. It means fewer bridges to cross, fewer competing dependencies,
|
||||
and a dramatically simpler stack to revisit a year later.
|
||||
|
||||
Wrapping up
|
||||
|
||||
I do want to be clear in stating that this isn't an indictment against
|
||||
Gatsby.js, Craft, or a pairing between the two. Rather, I hope it
|
||||
causes you to consider all technical challenges not as something that
|
||||
needs to be solved once, but sustained indefinitely.
|
||||
Gatsby.js, Craft, or a pairing between the two. Rather, I hope it causes you to
|
||||
consider all technical challenges not as something that needs to be solved
|
||||
once, but sustained indefinitely.
|
||||
|
||||
When you're building something it's not quite appropriate to ask "will
|
||||
this be hard to set up?". You're smart and I believe you can set it up!
|
||||
When you're building something it's not quite appropriate to ask "will this be
|
||||
hard to set up?". You're smart and I believe you can set it up!
|
||||
|
||||
Instead, ask yourself: "Will this be harder a year later?"
|
||||
|
||||
References
|
||||
|
||||
Visible links:
|
||||
1. https://aaronmbushnell.com/
|
||||
2. https://aaronmbushnell.com/feed.xml
|
||||
3. https://aaronmbushnell.com/
|
||||
4. https://aaronmbushnell.com/images/goldens.png
|
||||
5. https://aaronmbushnell.com/
|
||||
6. https://aaronmbushnell.com/images/goldens.png
|
||||
7. https://aaronmbushnell.com/
|
||||
8. https://aaronmbushnell.com/running-gatsby-js-sites-with-craft-cms
|
||||
9. https://craftcms.com/
|
||||
10. https://www.gatsbyjs.com/
|
||||
11. https://graphql.org/
|
||||
12. https://react.dev/
|
||||
13. https://www.google.com/search?q=site:medium.com+tailwind
|
||||
14. https://tailwindcss.com/
|
||||
15. https://twig.symfony.com/
|
||||
References:
|
||||
|
||||
Hidden links:
|
||||
17. https://featherhour.com/
|
||||
18. https://mastodon.social/@aaronbushnell
|
||||
19. https://github.com/aaronbushnell
|
||||
20. https://www.twitch.tv/aaronbushnell
|
||||
21. https://open.spotify.com/user/aaronmbushnell
|
||||
22. https://twitter.com/aaronbushnell
|
||||
23. https://featherhour.com/
|
||||
24. https://mastodon.social/@aaronbushnell
|
||||
25. https://github.com/aaronbushnell
|
||||
26. https://www.twitch.tv/aaronbushnell
|
||||
27. https://open.spotify.com/user/aaronmbushnell
|
||||
28. https://twitter.com/aaronbushnell
|
||||
[1] https://aaronmbushnell.com/
|
||||
[3] https://aaronmbushnell.com/images/goldens.png
|
||||
[4] https://featherhour.com/
|
||||
[5] https://mastodon.social/@aaronbushnell
|
||||
[6] https://github.com/aaronbushnell
|
||||
[7] https://www.twitch.tv/aaronbushnell
|
||||
[8] https://open.spotify.com/user/aaronmbushnell
|
||||
[9] https://twitter.com/aaronbushnell
|
||||
[10] https://aaronmbushnell.com/
|
||||
[11] https://aaronmbushnell.com/images/goldens.png
|
||||
[12] https://featherhour.com/
|
||||
[13] https://mastodon.social/@aaronbushnell
|
||||
[14] https://github.com/aaronbushnell
|
||||
[15] https://www.twitch.tv/aaronbushnell
|
||||
[16] https://open.spotify.com/user/aaronmbushnell
|
||||
[17] https://twitter.com/aaronbushnell
|
||||
[18] https://aaronmbushnell.com/
|
||||
[19] https://aaronmbushnell.com/running-gatsby-js-sites-with-craft-cms
|
||||
[20] https://craftcms.com/
|
||||
[21] https://www.gatsbyjs.com/
|
||||
[22] https://graphql.org/
|
||||
[23] https://react.dev/
|
||||
[24] https://www.google.com/search?q=site%3Amedium.com+tailwind
|
||||
[25] https://tailwindcss.com/
|
||||
[26] https://twig.symfony.com/
|
||||
|
||||
@@ -1,122 +1,158 @@
|
||||
[2]
|
||||
|
||||
(BUTTON)
|
||||
|
||||
Lucian Ghinda
|
||||
|
||||
[4]
|
||||
[]Lucian Ghinda
|
||||
All about coding
|
||||
|
||||
(BUTTON) (BUTTON)
|
||||
Follow
|
||||
|
||||
[1]All about coding
|
||||
[7]All about coding
|
||||
|
||||
Follow
|
||||
[8][9][10][11][12][13][14][15]
|
||||
Ruby open source: feedbinRuby open source: feedbin
|
||||
|
||||
Ruby open source: feedbin
|
||||
|
||||
[2]Lucian Ghinda's photo Lucian Ghinda's photo
|
||||
[3]Lucian Ghinda
|
||||
·[4]Nov 17, 2023·
|
||||
[16][]Lucian Ghinda's photoLucian Ghinda's photo
|
||||
[17]Lucian Ghinda
|
||||
·[18]Nov 17, 2023·
|
||||
|
||||
11 min read
|
||||
|
||||
Table of contents
|
||||
|
||||
* The product
|
||||
* Open source
|
||||
|
||||
* License
|
||||
|
||||
• [19]
|
||||
The product
|
||||
• [20]
|
||||
Open source
|
||||
□ [21]
|
||||
License
|
||||
• [22]
|
||||
Technical review
|
||||
* Ruby and Rails version
|
||||
* Architecture
|
||||
* Stats
|
||||
* Style Guide
|
||||
* Storage, Persistence and in-memory storage
|
||||
* Gems used
|
||||
* Code & Design Patterns
|
||||
|
||||
* Code Organisation
|
||||
* Routes
|
||||
* Controllers
|
||||
* Models
|
||||
* Jobs
|
||||
* Presenters
|
||||
* ApplicationComponents
|
||||
* ComponentsPreview
|
||||
|
||||
□ [23]
|
||||
Ruby and Rails version
|
||||
□ [24]
|
||||
Architecture
|
||||
□ [25]
|
||||
Stats
|
||||
□ [26]
|
||||
Style Guide
|
||||
□ [27]
|
||||
Storage, Persistence and in-memory storage
|
||||
□ [28]
|
||||
Gems used
|
||||
□ [29]
|
||||
Code & Design Patterns
|
||||
☆ [30]
|
||||
Code Organisation
|
||||
☆ [31]
|
||||
Routes
|
||||
☆ [32]
|
||||
Controllers
|
||||
☆ [33]
|
||||
Models
|
||||
☆ [34]
|
||||
Jobs
|
||||
☆ [35]
|
||||
Presenters
|
||||
☆ [36]
|
||||
ApplicationComponents
|
||||
☆ [37]
|
||||
ComponentsPreview
|
||||
• [38]
|
||||
Testing
|
||||
* Custom assertions
|
||||
|
||||
□ [39]
|
||||
Custom assertions
|
||||
• [40]
|
||||
Conclusion
|
||||
|
||||
The product
|
||||
|
||||
[5]https://feedbin.com
|
||||
[41]https://feedbin.com
|
||||
|
||||
"Feedbin is the best way to enjoy content on the Web. By combining
|
||||
RSS, and newsletters, you can get all the good parts of the Web in
|
||||
one convenient location"
|
||||
"Feedbin is the best way to enjoy content on the Web. By combining RSS, and
|
||||
newsletters, you can get all the good parts of the Web in one convenient
|
||||
location"
|
||||
|
||||
[42][dcaac2f3-3]
|
||||
|
||||
Open source
|
||||
|
||||
The open-source repository can be found at
|
||||
[6]https://github.com/feedbin/feedbin
|
||||
The open-source repository can be found at [43]https://github.com/feedbin/
|
||||
feedbin
|
||||
|
||||
License
|
||||
|
||||
The [7]license they use is MIT:
|
||||
The [44]license they use is MIT:
|
||||
|
||||
[45][26c3731c-c]
|
||||
|
||||
Technical review
|
||||
|
||||
Ruby and Rails version
|
||||
|
||||
They are currently using:
|
||||
* Ruby version 3.2.2
|
||||
* They used a fork of Rails at [8]https://github.com/feedbin/rails
|
||||
forked from [9]https://github.com/Shopify/rails. They are using a
|
||||
branch called [10]7-1-stable-invalid-cache-entries - It seems to be
|
||||
Rails 7.1 and about 1 month behind the Shopify/rails which is
|
||||
usually pretty up to date with main Rails
|
||||
|
||||
• Ruby version 3.2.2
|
||||
|
||||
• They used a fork of Rails at [46]https://github.com/feedbin/rails forked
|
||||
from [47]https://github.com/Shopify/rails. They are using a branch called
|
||||
[48]7-1-stable-invalid-cache-entries - It seems to be Rails 7.1 and about 1
|
||||
month behind the Shopify/rails which is usually pretty up to date with main
|
||||
Rails
|
||||
|
||||
Architecture
|
||||
|
||||
Code Architecture:
|
||||
* They are using the standard Rails organisation of MVC.
|
||||
|
||||
• They are using the standard Rails organisation of MVC.
|
||||
|
||||
Database:
|
||||
* The DB is PostgreSQL
|
||||
|
||||
• The DB is PostgreSQL
|
||||
|
||||
Jobs queue:
|
||||
* Sidekiq
|
||||
|
||||
• Sidekiq
|
||||
|
||||
On the front-end side:
|
||||
* They use .html.erb
|
||||
* They are using Phlex for [11]components
|
||||
* They are using [12]Jquery for the JS library
|
||||
* They have some custom JS code written in [13]CoffeeScript
|
||||
* They are using Hotwire via [14]importmaps
|
||||
* They are using [15]Tailwind
|
||||
|
||||
• They use .html.erb
|
||||
|
||||
• They are using Phlex for [49]components
|
||||
|
||||
• They are using [50]Jquery for the JS library
|
||||
|
||||
• They have some custom JS code written in [51]CoffeeScript
|
||||
|
||||
• They are using Hotwire via [52]importmaps
|
||||
|
||||
• They are using [53]Tailwind
|
||||
|
||||
Stats
|
||||
|
||||
Running /bin/rails stats will output the following:
|
||||
|
||||
[12169b38-4]
|
||||
|
||||
Running VSCodeCounter will give the following stats:
|
||||
|
||||
[99f9ce55-5]
|
||||
|
||||
Style Guide
|
||||
|
||||
For Ruby:
|
||||
* They are using [16]standardrb as the Style Guide with no
|
||||
customisations.
|
||||
|
||||
• They are using [54]standardrb as the Style Guide with no customisations.
|
||||
|
||||
Storage, Persistence and in-memory storage
|
||||
|
||||
The DB is PostgreSQL.
|
||||
|
||||
They are not using the schema.rb but the [17]structure.sql format for
|
||||
DB schema dump is configured via application.rb:
|
||||
They are not using the schema.rb but the [55]structure.sql format for DB schema
|
||||
dump is configured via application.rb:
|
||||
|
||||
module Feedbin
|
||||
class Application < Rails::Application
|
||||
# other configs
|
||||
@@ -126,27 +162,28 @@ module Feedbin
|
||||
end
|
||||
|
||||
Enabled PSQL extensions:
|
||||
* hstore - "data type for storing sets of (key, value) pairs"
|
||||
* pg_stat_statements - "track planning and execution statistics of
|
||||
all SQL statements executed"
|
||||
* uuid-ossp - "generate universally unique identifiers (UUIDs)"
|
||||
|
||||
• hstore - "data type for storing sets of (key, value) pairs"
|
||||
|
||||
• pg_stat_statements - "track planning and execution statistics of all SQL
|
||||
statements executed"
|
||||
|
||||
• uuid-ossp - "generate universally unique identifiers (UUIDs)"
|
||||
|
||||
CREATE EXTENSION IF NOT EXISTS hstore WITH SCHEMA public;
|
||||
COMMENT ON EXTENSION hstore IS 'data type for storing sets of (key, value) pairs
|
||||
';
|
||||
COMMENT ON EXTENSION hstore IS 'data type for storing sets of (key, value) pairs';
|
||||
|
||||
CREATE EXTENSION IF NOT EXISTS pg_stat_statements WITH SCHEMA public;
|
||||
COMMENT ON EXTENSION pg_stat_statements IS 'track planning and execution statist
|
||||
ics of all SQL statements executed';
|
||||
COMMENT ON EXTENSION pg_stat_statements IS 'track planning and execution statistics of all SQL statements executed';
|
||||
|
||||
|
||||
CREATE EXTENSION IF NOT EXISTS "uuid-ossp" WITH SCHEMA public;
|
||||
COMMENT ON EXTENSION "uuid-ossp" IS 'generate universally unique identifiers (UU
|
||||
IDs)';
|
||||
COMMENT ON EXTENSION "uuid-ossp" IS 'generate universally unique identifiers (UUIDs)';
|
||||
|
||||
Redis is configured to be used with Sidekiq.
|
||||
|
||||
This is what the [18]redis initializer looks like:
|
||||
This is what the [56]redis initializer looks like:
|
||||
|
||||
# https://github.com/feedbin/feedbin/blob/main/config/initializers/redis.rb#L1
|
||||
|
||||
defaults = {connect_timeout: 5, timeout: 5}
|
||||
@@ -160,18 +197,19 @@ $redis = {}.tap do |hash|
|
||||
hash[:refresher] = ConnectionPool.new(size: 10) { Redis.new(options2) }
|
||||
end
|
||||
|
||||
Further, there is a [19]RedisLock configured like this:
|
||||
Further, there is a [57]RedisLock configured like this:
|
||||
|
||||
# https://github.com/feedbin/feedbin/blob/main/app/models/redis_lock.rb#L1
|
||||
|
||||
class RedisLock
|
||||
def self.acquire(lock_name, expiration_in_seconds = 55)
|
||||
Sidekiq.redis { _1.set(lock_name, "locked", ex: expiration_in_seconds, nx: t
|
||||
rue) }
|
||||
Sidekiq.redis { _1.set(lock_name, "locked", ex: expiration_in_seconds, nx: true) }
|
||||
end
|
||||
end
|
||||
|
||||
Further down this is used in a [20]clock.rb (that defines scheduled
|
||||
tasks to run):
|
||||
Further down this is used in a [58]clock.rb (that defines scheduled tasks to
|
||||
run):
|
||||
|
||||
# https://github.com/feedbin/feedbin/blob/main/lib/clock.rb#L8
|
||||
|
||||
every(10.seconds, "clockwork.very_frequent") do
|
||||
@@ -215,46 +253,56 @@ end
|
||||
Gems used
|
||||
|
||||
Here are some of the gems used:
|
||||
* [21]sax-machine - "A declarative sax parsing library backed by
|
||||
Nokogiri"
|
||||
* [22]feedjira - "Feedjira is a Ruby library designed to parse feeds"
|
||||
* [23]html-pipeline - "HTML processing filters and utilities. This
|
||||
module is a small framework for defining CSS-based content filters
|
||||
and applying them to user provided content"
|
||||
* [24]apnotic - "A Ruby APNs HTTP/2 gem able to provide instant
|
||||
feedback"
|
||||
* [25]autoprefixer-rails - "Autoprefixer is a tool to parse CSS and
|
||||
add vendor prefixes to CSS rules using values from the Can I Use
|
||||
database. This gem provides Ruby and Ruby on Rails integration with
|
||||
this JavaScript tool"
|
||||
* [26]clockwork - "Clockwork is a cron replacement. It runs as a
|
||||
lightweight, long-running Ruby process which sits alongside your
|
||||
web processes (Mongrel/Thin) and your worker processes
|
||||
(DJ/Resque/Minion/Stalker) to schedule recurring work at particular
|
||||
times or dates"
|
||||
* [27]down - "Streaming downloads using net/http, http.rb, HTTPX or
|
||||
wget"
|
||||
* [28]phlex-rails - "Phlex is a framework that lets you compose web
|
||||
views in pure Ruby"
|
||||
* [29]premailer-rails - "This gem is a drop in solution for styling
|
||||
HTML emails with CSS without having to do the hard work yourself"
|
||||
* [30]raindrops - "raindrops is a real-time stats toolkit to show
|
||||
statistics for Rack HTTP servers. It is designed for preforking
|
||||
servers such as unicorn, but should support any Rack HTTP server on
|
||||
platforms supporting POSIX shared memory"
|
||||
* [31]strong_migrations - "Catch unsafe migrations in development"
|
||||
* [32]web-push - "This gem makes it possible to send push messages to
|
||||
web browsers from Ruby backends using the Web Push Protocol"
|
||||
* [33]stripe-ruby-mock - "A drop-in library to test stripe without
|
||||
hitting their servers"
|
||||
* [34]rails-controller-testing - "Brings back assigns and
|
||||
assert_template to your Rails tests"
|
||||
|
||||
There are many other gems used, I only selected few here. Browse the
|
||||
[35]Gemfile to discover more.
|
||||
• [59]sax-machine - "A declarative sax parsing library backed by Nokogiri"
|
||||
|
||||
• [60]feedjira - "Feedjira is a Ruby library designed to parse feeds"
|
||||
|
||||
• [61]html-pipeline - "HTML processing filters and utilities. This module is
|
||||
a small framework for defining CSS-based content filters and applying them
|
||||
to user provided content"
|
||||
|
||||
• [62]apnotic - "A Ruby APNs HTTP/2 gem able to provide instant feedback"
|
||||
|
||||
• [63]autoprefixer-rails - "Autoprefixer is a tool to parse CSS and add
|
||||
vendor prefixes to CSS rules using values from the Can I Use database. This
|
||||
gem provides Ruby and Ruby on Rails integration with this JavaScript tool"
|
||||
|
||||
• [64]clockwork - "Clockwork is a cron replacement. It runs as a lightweight,
|
||||
long-running Ruby process which sits alongside your web processes (Mongrel/
|
||||
Thin) and your worker processes (DJ/Resque/Minion/Stalker) to schedule
|
||||
recurring work at particular times or dates"
|
||||
|
||||
• [65]down - "Streaming downloads using net/http, http.rb, HTTPX or wget"
|
||||
|
||||
• [66]phlex-rails - "Phlex is a framework that lets you compose web views in
|
||||
pure Ruby"
|
||||
|
||||
• [67]premailer-rails - "This gem is a drop in solution for styling HTML
|
||||
emails with CSS without having to do the hard work yourself"
|
||||
|
||||
• [68]raindrops - "raindrops is a real-time stats toolkit to show statistics
|
||||
for Rack HTTP servers. It is designed for preforking servers such as
|
||||
unicorn, but should support any Rack HTTP server on platforms supporting
|
||||
POSIX shared memory"
|
||||
|
||||
• [69]strong_migrations - "Catch unsafe migrations in development"
|
||||
|
||||
• [70]web-push - "This gem makes it possible to send push messages to web
|
||||
browsers from Ruby backends using the Web Push Protocol"
|
||||
|
||||
• [71]stripe-ruby-mock - "A drop-in library to test stripe without hitting
|
||||
their servers"
|
||||
|
||||
• [72]rails-controller-testing - "Brings back assigns and assert_template to
|
||||
your Rails tests"
|
||||
|
||||
There are many other gems used, I only selected few here. Browse the [73]
|
||||
Gemfile to discover more.
|
||||
|
||||
What could be mentioned is that they use their fork for some of the gems
|
||||
included in the file:
|
||||
|
||||
What could be mentioned is that they use their fork for some of the
|
||||
gems included in the file:
|
||||
# https://github.com/feedbin/feedbin/blob/main/Gemfile
|
||||
|
||||
# other gems
|
||||
@@ -263,26 +311,19 @@ gem "rails", github: "feedbin/rails", branch: "7-1-stable-invalid-cache-entries"
|
||||
|
||||
# some other gems
|
||||
|
||||
gem "http", github: "feedbin/http", branch: "feedb
|
||||
in"
|
||||
gem "carrierwave", github: "feedbin/carrierwave", branch: "feedb
|
||||
in"
|
||||
gem "sax-machine", github: "feedbin/sax-machine", branch: "feedb
|
||||
in"
|
||||
gem "http", github: "feedbin/http", branch: "feedbin"
|
||||
gem "carrierwave", github: "feedbin/carrierwave", branch: "feedbin"
|
||||
gem "sax-machine", github: "feedbin/sax-machine", branch: "feedbin"
|
||||
gem "feedjira", github: "feedbin/feedjira", branch: "f2"
|
||||
gem "feedkit", github: "feedbin/feedkit", branch: "maste
|
||||
r"
|
||||
gem "html-pipeline", github: "feedbin/html-pipeline", branch: "feedb
|
||||
in"
|
||||
gem "feedkit", github: "feedbin/feedkit", branch: "master"
|
||||
gem "html-pipeline", github: "feedbin/html-pipeline", branch: "feedbin"
|
||||
gem "html_diff", github: "feedbin/html_diff", ref: "013e1bb"
|
||||
gem "twitter", github: "feedbin/twitter", branch: "feedb
|
||||
in"
|
||||
gem "twitter", github: "feedbin/twitter", branch: "feedbin"
|
||||
|
||||
# other gems
|
||||
|
||||
group :development, :test do
|
||||
gem "stripe-ruby-mock", github: "feedbin/stripe-ruby-mock", branch: "feedbin",
|
||||
require: "stripe_mock"
|
||||
gem "stripe-ruby-mock", github: "feedbin/stripe-ruby-mock", branch: "feedbin", require: "stripe_mock"
|
||||
# other gems
|
||||
end
|
||||
|
||||
@@ -292,36 +333,36 @@ Code & Design Patterns
|
||||
|
||||
Code Organisation
|
||||
|
||||
Under /app there are 3 folders different from the ones that Rails comes
|
||||
with:
|
||||
* presenters
|
||||
* uploaders
|
||||
* validators
|
||||
Under /app there are 3 folders different from the ones that Rails comes with:
|
||||
|
||||
The lib folder includes very few extra objects. Most of them seems to
|
||||
be related to communicating with external services.
|
||||
• presenters
|
||||
|
||||
Maybe worth mentioning from lib folder is the
|
||||
[36]ConditionalSassCompressor
|
||||
# https://github.com/feedbin/feedbin/blob/main/lib/conditional_sass_compressor.r
|
||||
b#L1
|
||||
• uploaders
|
||||
|
||||
• validators
|
||||
|
||||
The lib folder includes very few extra objects. Most of them seems to be
|
||||
related to communicating with external services.
|
||||
|
||||
Maybe worth mentioning from lib folder is the [74]ConditionalSassCompressor
|
||||
|
||||
# https://github.com/feedbin/feedbin/blob/main/lib/conditional_sass_compressor.rb#L1
|
||||
|
||||
class ConditionalSassCompressor
|
||||
def compress(string)
|
||||
return string if string =~ /tailwindcss/
|
||||
options = { syntax: :scss, cache: false, read_cache: false, style: :compress
|
||||
ed}
|
||||
options = { syntax: :scss, cache: false, read_cache: false, style: :compressed}
|
||||
begin
|
||||
Sprockets::Autoload::SassC::Engine.new(string, options).render
|
||||
rescue => e
|
||||
puts "Could not compress '#{string[0..65]}'...: #{e.message}, skipping com
|
||||
pression"
|
||||
puts "Could not compress '#{string[0..65]}'...: #{e.message}, skipping compression"
|
||||
string
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
This is used to configure:
|
||||
|
||||
# https://github.com/feedbin/feedbin/blob/main/config/application.rb#L47
|
||||
config.assets.css_compressor = ConditionalSassCompressor.new
|
||||
|
||||
@@ -329,7 +370,8 @@ Routes
|
||||
|
||||
There is a combination of RESTful routes and non-restful routes.
|
||||
|
||||
Here is an example from entries in the [37]routes.rb :
|
||||
Here is an example from entries in the [75]routes.rb :
|
||||
|
||||
# https://github.com/feedbin/feedbin/blob/main/config/routes.rb#L133
|
||||
|
||||
resources :entries, only: [:show, :index, :destroy] do
|
||||
@@ -361,17 +403,19 @@ Controllers
|
||||
The controllers are mostly what I would call vanilla Rails controllers.
|
||||
|
||||
Three notes about them:
|
||||
* Some of them are responding with JS usually using USJ or JQuery to
|
||||
change elements from the page.
|
||||
* They contain non-Rails standard actions (actions that are not show,
|
||||
index, new, create ...)
|
||||
* There is a namespaced api folder that contains APIs used by mobile
|
||||
apps
|
||||
|
||||
Here is one simple example for DELETE /entries/:id , the controller
|
||||
looks like this:
|
||||
# https://github.com/feedbin/feedbin/blob/main/app/controllers/entries_controlle
|
||||
r.rb#L238
|
||||
• Some of them are responding with JS usually using USJ or JQuery to change
|
||||
elements from the page.
|
||||
|
||||
• They contain non-Rails standard actions (actions that are not show, index,
|
||||
new, create ...)
|
||||
|
||||
• There is a namespaced api folder that contains APIs used by mobile apps
|
||||
|
||||
Here is one simple example for DELETE /entries/:id , the controller looks like
|
||||
this:
|
||||
|
||||
# https://github.com/feedbin/feedbin/blob/main/app/controllers/entries_controller.rb#L238
|
||||
def destroy
|
||||
@user = current_user
|
||||
@entry = @user.entries.find(params[:id])
|
||||
@@ -380,24 +424,23 @@ r.rb#L238
|
||||
end
|
||||
end
|
||||
|
||||
And here is the view [38]destroy.js.erb :
|
||||
And here is the view [76]destroy.js.erb :
|
||||
|
||||
$('[data-behavior~=entries_target] [data-entry-id=<%= @entry.id %>]').remove();
|
||||
|
||||
feedbin.Counts.get().removeEntry(<%= @entry.id %>, <%= @entry.feed_id %>, 'unrea
|
||||
d')
|
||||
feedbin.Counts.get().removeEntry(<%= @entry.id %>, <%= @entry.feed_id %>, 'starr
|
||||
ed')
|
||||
feedbin.Counts.get().removeEntry(<%= @entry.id %>, <%= @entry.feed_id %>, 'unread')
|
||||
feedbin.Counts.get().removeEntry(<%= @entry.id %>, <%= @entry.feed_id %>, 'starred')
|
||||
feedbin.applyCounts(true)
|
||||
|
||||
feedbin.clearEntry();
|
||||
feedbin.fullScreen(false)
|
||||
|
||||
The main pattern adopted to controllers is to have some logic in them
|
||||
and delegate to jobs some part of the processing.
|
||||
The main pattern adopted to controllers is to have some logic in them and
|
||||
delegate to jobs some part of the processing.
|
||||
|
||||
The repo contains mostly straight-forward controllers like this one:
|
||||
# https://github.com/feedbin/feedbin/blob/main/app/controllers/pages_internal_co
|
||||
ntroller.rb#L1
|
||||
|
||||
# https://github.com/feedbin/feedbin/blob/main/app/controllers/pages_internal_controller.rb#L1
|
||||
class PagesInternalController < ApplicationController
|
||||
|
||||
def create
|
||||
@@ -407,8 +450,8 @@ class PagesInternalController < ApplicationController
|
||||
end
|
||||
|
||||
But also few controllers that include some logic:
|
||||
# https://github.com/feedbin/feedbin/blob/main/app/controllers/api/podcasts/v1/f
|
||||
eeds_controller.rb#L8
|
||||
|
||||
# https://github.com/feedbin/feedbin/blob/main/app/controllers/api/podcasts/v1/feeds_controller.rb#L8
|
||||
|
||||
def show
|
||||
url = hex_decode(params[:id])
|
||||
@@ -437,21 +480,22 @@ rescue => exception
|
||||
end
|
||||
end
|
||||
|
||||
Even with this structure, I find all controllers easy to read and I
|
||||
think they can be easier to change.
|
||||
Even with this structure, I find all controllers easy to read and I think they
|
||||
can be easier to change.
|
||||
|
||||
Models
|
||||
|
||||
The app/models folders contain both ActiveRecord and normal Ruby
|
||||
objects. With few exceptions, they are not namespaced.
|
||||
The app/models folders contain both ActiveRecord and normal Ruby objects. With
|
||||
few exceptions, they are not namespaced.
|
||||
|
||||
Jobs
|
||||
|
||||
The jobs folder contains Sidekiq jobs which are used to do processing
|
||||
on various objects. They are usually called from controllers and most
|
||||
of them are async.
|
||||
The jobs folder contains Sidekiq jobs which are used to do processing on
|
||||
various objects. They are usually called from controllers and most of them are
|
||||
async.
|
||||
|
||||
Here is one job that is caching views:
|
||||
|
||||
# https://github.com/feedbin/feedbin/blob/main/app/jobs/cache_entry_views.rb#L1
|
||||
|
||||
class CacheEntryViews
|
||||
@@ -491,12 +535,12 @@ end
|
||||
|
||||
Presenters
|
||||
|
||||
There is a [39]BasePresenter and all other presenters are extending it
|
||||
via inheritance:
|
||||
There is a [77]BasePresenter and all other presenters are extending it via
|
||||
inheritance:
|
||||
|
||||
This controller defines a private method called presents:
|
||||
# https://github.com/feedbin/feedbin/blob/main/app/presenters/base_presenter.rb#
|
||||
L1
|
||||
|
||||
# https://github.com/feedbin/feedbin/blob/main/app/presenters/base_presenter.rb#L1
|
||||
|
||||
class BasePresenter
|
||||
def initialize(object, locals, template)
|
||||
@@ -517,8 +561,8 @@ class BasePresenter
|
||||
end
|
||||
|
||||
and it is used like this for example:
|
||||
# https://github.com/feedbin/feedbin/blob/main/app/presenters/user_presenter.rb#
|
||||
L2
|
||||
|
||||
# https://github.com/feedbin/feedbin/blob/main/app/presenters/user_presenter.rb#L2
|
||||
|
||||
class UserPresenter < BasePresenter
|
||||
presents :user
|
||||
@@ -533,8 +577,9 @@ class UserPresenter < BasePresenter
|
||||
# ... other code
|
||||
end
|
||||
|
||||
To use the presenters, there is a helper defined in ApplicationHelper
|
||||
will instantiate the proper helper based on the object class:
|
||||
To use the presenters, there is a helper defined in ApplicationHelper will
|
||||
instantiate the proper helper based on the object class:
|
||||
|
||||
module ApplicationHelper
|
||||
def present(object, locals = nil, klass = nil)
|
||||
klass ||= "#{object.class}Presenter".constantize
|
||||
@@ -546,23 +591,21 @@ module ApplicationHelper
|
||||
# more code ...
|
||||
end
|
||||
|
||||
and it is used [40]like this in views:
|
||||
and it is used [78]like this in views:
|
||||
|
||||
<% present @user do |user_presenter| %>
|
||||
<% @class = "settings-body settings-#{params[:action]} theme-#{user_presente
|
||||
r.theme}"%>
|
||||
<% @class = "settings-body settings-#{params[:action]} theme-#{user_presenter.theme}"%>
|
||||
<% end %>
|
||||
|
||||
ApplicationComponents
|
||||
|
||||
Components are based on Phlex and they inherit from
|
||||
[41]ApplicationComponent
|
||||
Components are based on Phlex and they inherit from [79]ApplicationComponent
|
||||
|
||||
It defines a method to add Stimulus controller in components like this:
|
||||
# https://github.com/feedbin/feedbin/blob/main/app/views/components/application_
|
||||
component.rb#L25
|
||||
|
||||
def stimulus(controller:, actions: {}, values: {}, outlets: {}, classes: {}, d
|
||||
ata: {})
|
||||
# https://github.com/feedbin/feedbin/blob/main/app/views/components/application_component.rb#L25
|
||||
|
||||
def stimulus(controller:, actions: {}, values: {}, outlets: {}, classes: {}, data: {})
|
||||
stimulus_controller = controller.to_s.dasherize
|
||||
|
||||
action = actions.map do |event, function|
|
||||
@@ -581,18 +624,17 @@ ata: {})
|
||||
[controller, key, "class"].join("_").to_sym
|
||||
end
|
||||
|
||||
{ controller: stimulus_controller, action: }.merge!({ **values, **outlets, *
|
||||
*classes, **data})
|
||||
{ controller: stimulus_controller, action: }.merge!({ **values, **outlets, **classes, **data})
|
||||
end
|
||||
|
||||
Where we can also see a bit of hash literal omission at {controller:
|
||||
stimulus_controller, action: }
|
||||
|
||||
But more interesting that this method that helps defining a Stimulus
|
||||
controller, is the method used to define a Stimulus item that uses
|
||||
binding to get variables from the object where it is used:
|
||||
# https://github.com/feedbin/feedbin/blob/main/app/views/components/application_
|
||||
component.rb#L47
|
||||
controller, is the method used to define a Stimulus item that uses binding to
|
||||
get variables from the object where it is used:
|
||||
|
||||
# https://github.com/feedbin/feedbin/blob/main/app/views/components/application_component.rb#L47
|
||||
|
||||
def stimulus_item(target: nil, actions: {}, params: {}, data: {}, for:)
|
||||
stimulus_controller = binding.local_variable_get(:for).to_s.dasherize
|
||||
@@ -612,54 +654,53 @@ component.rb#L47
|
||||
end
|
||||
|
||||
if target
|
||||
defaults[:"#{binding.local_variable_get(:for)}_target"] = target.to_s.came
|
||||
lize(:lower)
|
||||
defaults[:"#{binding.local_variable_get(:for)}_target"] = target.to_s.camelize(:lower)
|
||||
end
|
||||
|
||||
defaults
|
||||
end
|
||||
|
||||
The part with binding does the following:
|
||||
* stimulus_controller =
|
||||
binding.local_variable_get(:for).to_s.dasherize This line retrieves
|
||||
the value of the local variable for, converts it to a string, and
|
||||
then applies the dasherize method (presumably to format it for use
|
||||
in a specific context, like a CSS class or an identifier in HTML).
|
||||
* Apparently binding.local_variable_get should not be needed as the
|
||||
variable is passed a keyword parameter to the method. But the name
|
||||
of the variable is for which is a reserved word and thus if the
|
||||
code would have been stimulus_controller = for.to_s_dasherize that
|
||||
would have raised syntax error, unexpected '.' (SyntaxError)
|
||||
|
||||
This is a way to have keyword arguments named as reserved words and
|
||||
still be able to use them.
|
||||
• stimulus_controller = binding.local_variable_get(:for).to_s.dasherize This
|
||||
line retrieves the value of the local variable for, converts it to a
|
||||
string, and then applies the dasherize method (presumably to format it for
|
||||
use in a specific context, like a CSS class or an identifier in HTML).
|
||||
|
||||
• Apparently binding.local_variable_get should not be needed as the variable
|
||||
is passed a keyword parameter to the method. But the name of the variable
|
||||
is for which is a reserved word and thus if the code would have been
|
||||
stimulus_controller = for.to_s_dasherize that would have raised syntax
|
||||
error, unexpected '.' (SyntaxError)
|
||||
|
||||
This is a way to have keyword arguments named as reserved words and still be
|
||||
able to use them.
|
||||
|
||||
ComponentsPreview
|
||||
|
||||
All components can be previewed via Lookbook and they can be found in
|
||||
test/components
|
||||
All components can be previewed via Lookbook and they can be found in test/
|
||||
components
|
||||
|
||||
Testing
|
||||
|
||||
For testing it uses Minitest, the default testing framework from Rails.
|
||||
It uses fixtures to set up the test db.
|
||||
For testing it uses Minitest, the default testing framework from Rails. It uses
|
||||
fixtures to set up the test db.
|
||||
|
||||
Tests are simple and direct, containing all preconditions and
|
||||
postconditions in each test. This is great for following what each test
|
||||
is doing.
|
||||
Tests are simple and direct, containing all preconditions and postconditions in
|
||||
each test. This is great for following what each test is doing.
|
||||
|
||||
There are controller tests, model tests, job tests and some system
|
||||
tests. There are more controller tests than system tests making the
|
||||
test suite run quite fast. Also the jobs are covered pretty good with
|
||||
testing as there is a log of logic in the jobs.
|
||||
There are controller tests, model tests, job tests and some system tests. There
|
||||
are more controller tests than system tests making the test suite run quite
|
||||
fast. Also the jobs are covered pretty good with testing as there is a log of
|
||||
logic in the jobs.
|
||||
|
||||
Custom assertions
|
||||
|
||||
There are some custom assertions created specifically to work with
|
||||
collections: assert_has_keys will check if all keys are included in the
|
||||
hash and assert_equal_ids will check if the two collections provided
|
||||
have the same ids (one being a collection of objects and the other one
|
||||
being a hash).
|
||||
There are some custom assertions created specifically to work with collections:
|
||||
assert_has_keys will check if all keys are included in the hash and
|
||||
assert_equal_ids will check if the two collections provided have the same ids
|
||||
(one being a collection of objects and the other one being a hash).
|
||||
|
||||
# https://github.com/feedbin/feedbin/blob/main/test/support/assertions.rb#L3
|
||||
|
||||
def assert_has_keys(keys, hash)
|
||||
@@ -674,134 +715,132 @@ Custom assertions
|
||||
|
||||
Conclusion
|
||||
|
||||
In conclusion, Feedbin is an open-source project that combines RSS
|
||||
feeds and newsletters into a convenient platform.
|
||||
In conclusion, Feedbin is an open-source project that combines RSS feeds and
|
||||
newsletters into a convenient platform.
|
||||
|
||||
It utilizes Ruby on Rails, PostgreSQL, Sidekiq, and various other
|
||||
technologies to provide a robust and efficient service.
|
||||
It utilizes Ruby on Rails, PostgreSQL, Sidekiq, and various other technologies
|
||||
to provide a robust and efficient service.
|
||||
|
||||
The code is well-organized and simple to follow the logic and what is
|
||||
happening. I think it will make it easy for anyone to contribute to
|
||||
this repo. If you want to run this yourself locally you should take a
|
||||
look at the [42]feedbin-docker.
|
||||
__________________________________________________________________
|
||||
happening. I think it will make it easy for anyone to contribute to this repo.
|
||||
If you want to run this yourself locally you should take a look at the [80]
|
||||
feedbin-docker.
|
||||
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
Enjoyed this article?
|
||||
|
||||
👉 Join my [43]Short Ruby News newsletter for weekly Ruby updates from
|
||||
the community and visit [44]rubyandrails.info, a directory with
|
||||
learning content about Ruby.
|
||||
👉 Join my [81]Short Ruby News newsletter for weekly Ruby updates from the
|
||||
community and visit [82][83]rubyandrails.info, a directory with learning
|
||||
content about Ruby.
|
||||
|
||||
👐 Subscribe to my Ruby and Ruby on rails courses over email at
|
||||
[45]learn.shortruby.com - effortless learning anytime, anywhere
|
||||
👐 Subscribe to my Ruby and Ruby on rails courses over email at [84]
|
||||
learn.shortruby.com - effortless learning anytime, anywhere
|
||||
|
||||
🤝 Let's connect on [46]Ruby.social or [47]Linkedin or [48]Twitter where
|
||||
I post mainly about Ruby and Rails.
|
||||
🤝 Let's connect on [85][86]Ruby.social or [87]Linkedin or [88]Twitter where I
|
||||
post mainly about Ruby and Rails.
|
||||
|
||||
🎥 Follow me on [49]my YouTube channel for short videos about Ruby
|
||||
🎥 Follow me on [89]my YouTube channel for short videos about Ruby
|
||||
|
||||
Did you find this article valuable?
|
||||
|
||||
Support Lucian Ghinda by becoming a sponsor. Any amount is appreciated!
|
||||
(BUTTON) Sponsor
|
||||
[50]See recent sponsors | [51]Learn more about Hashnode Sponsors
|
||||
|
||||
[52]Ruby[53]Ruby on Rails[54]Open Source[55]coding[56]Programming Blogs
|
||||
Sponsor
|
||||
[91]See recent sponsors | [92]Learn more about Hashnode Sponsors
|
||||
[93]Ruby[94]Ruby on Rails[95]Open Source[96]coding[97]Programming Blogs
|
||||
|
||||
References
|
||||
References:
|
||||
|
||||
Visible links:
|
||||
1. https://allaboutcoding.ghinda.com/?source=top_nav_blog_home
|
||||
2. https://hashnode.com/@lucianghinda
|
||||
3. https://hashnode.com/@lucianghinda
|
||||
4. https://allaboutcoding.ghinda.com/ruby-open-source-feedbin
|
||||
5. https://feedbin.com/
|
||||
6. https://github.com/feedbin/feedbin/blob/main/LICENSE.md
|
||||
7. https://github.com/feedbin/feedbin/blob/main/LICENSE.md
|
||||
8. https://github.com/feedbin/rails
|
||||
9. https://github.com/Shopify/rails
|
||||
10. https://github.com/feedbin/rails/tree/7-1-stable-invalid-cache-entries
|
||||
11. https://github.com/feedbin/feedbin/tree/main/app/views/components
|
||||
12. https://github.com/feedbin/feedbin/blob/main/Gemfile#L38
|
||||
13. https://github.com/feedbin/feedbin/tree/main/app/assets/javascripts/web
|
||||
14. https://github.com/feedbin/feedbin/blob/abf1ad883dab8a3464fe12e4653de6323296175b/config/importmap.rb#L1
|
||||
15. https://github.com/feedbin/feedbin/blob/abf1ad883dab8a3464fe12e4653de6323296175b/Gemfile#L66
|
||||
16. https://github.com/feedbin/feedbin/blob/abf1ad883dab8a3464fe12e4653de6323296175b/Gemfile#L94
|
||||
17. https://github.com/feedbin/feedbin/blob/main/db/structure.sql
|
||||
18. https://github.com/feedbin/feedbin/blob/abf1ad883dab8a3464fe12e4653de6323296175b/config/initializers/redis.rb#L1
|
||||
19. https://github.com/feedbin/feedbin/blob/main/app/models/redis_lock.rb#L1
|
||||
20. https://github.com/feedbin/feedbin/blob/main/lib/clock.rb#L8
|
||||
21. https://github.com/pauldix/sax-machine
|
||||
22. https://github.com/feedjira/feedjira
|
||||
23. https://github.com/feedbin/html-pipeline
|
||||
24. https://github.com/ostinelli/apnotic
|
||||
25. https://github.com/ai/autoprefixer-rails
|
||||
26. https://github.com/Rykian/clockwork
|
||||
27. https://github.com/janko/down
|
||||
28. https://github.com/phlex-ruby/phlex-rails
|
||||
29. https://github.com/fphilipe/premailer-rails
|
||||
30. https://rubygems.org/gems/raindrops
|
||||
31. https://github.com/ankane/strong_migrations
|
||||
32. https://github.com/pushpad/web-push
|
||||
33. https://github.com/stripe-ruby-mock/stripe-ruby-mock
|
||||
34. https://github.com/rails/rails-controller-testing
|
||||
35. https://github.com/feedbin/feedbin/blob/main/Gemfile
|
||||
36. https://github.com/feedbin/feedbin/blob/main/lib/conditional_sass_compressor.rb#L1
|
||||
37. https://github.com/feedbin/feedbin/blob/main/config/routes.rb#L133
|
||||
38. https://github.com/feedbin/feedbin/blob/main/app/views/entries/destroy.js.erb#L1
|
||||
39. https://github.com/feedbin/feedbin/blob/main/app/presenters/base_presenter.rb#L1
|
||||
40. https://github.com/feedbin/feedbin/blob/main/app/views/layouts/settings.html.erb#L1
|
||||
41. https://github.com/feedbin/feedbin/blob/main/app/views/components/application_component.rb#L3
|
||||
42. https://github.com/angristan/feedbin-docker
|
||||
43. https://shortruby.com/
|
||||
44. http://rubyandrails.info/
|
||||
45. https://learn.shortruby.com/
|
||||
46. http://Ruby.social/
|
||||
47. https://linkedin.com/in/lucianghinda
|
||||
48. https://x.com/lucianghinda
|
||||
49. https://www.youtube.com/@shortruby
|
||||
50. https://allaboutcoding.ghinda.com/sponsor
|
||||
51. https://hashnode.com/sponsors
|
||||
52. https://allaboutcoding.ghinda.com/tag/ruby?source=tags_bottom_blogs
|
||||
53. https://allaboutcoding.ghinda.com/tag/ruby-on-rails?source=tags_bottom_blogs
|
||||
54. https://allaboutcoding.ghinda.com/tag/opensource?source=tags_bottom_blogs
|
||||
55. https://allaboutcoding.ghinda.com/tag/coding?source=tags_bottom_blogs
|
||||
56. https://allaboutcoding.ghinda.com/tag/programming-blogs?source=tags_bottom_blogs
|
||||
|
||||
Hidden links:
|
||||
58. https://allaboutcoding.ghinda.com/
|
||||
59. https://allaboutcoding.ghinda.com/?source=top_nav_blog_home
|
||||
60. https://twitter.com/lucianghinda
|
||||
61. https://github.com/lucianghinda
|
||||
62. https://shortruby.com/
|
||||
63. https://hashnode.com/@lucianghinda
|
||||
64. https://app.daily.dev/lucianghinda
|
||||
65. https://linkedin.com/in/lucianghinda
|
||||
66. https://ruby.social/@lucian
|
||||
67. https://allaboutcoding.ghinda.com/rss.xml
|
||||
68. https://allaboutcoding.ghinda.com/ruby-open-source-feedbin#heading-the-product
|
||||
69. https://allaboutcoding.ghinda.com/ruby-open-source-feedbin#heading-open-source
|
||||
70. https://allaboutcoding.ghinda.com/ruby-open-source-feedbin#heading-license
|
||||
71. https://allaboutcoding.ghinda.com/ruby-open-source-feedbin#heading-technical-review
|
||||
72. https://allaboutcoding.ghinda.com/ruby-open-source-feedbin#heading-ruby-and-rails-version
|
||||
73. https://allaboutcoding.ghinda.com/ruby-open-source-feedbin#heading-architecture
|
||||
74. https://allaboutcoding.ghinda.com/ruby-open-source-feedbin#heading-stats
|
||||
75. https://allaboutcoding.ghinda.com/ruby-open-source-feedbin#heading-style-guide
|
||||
76. https://allaboutcoding.ghinda.com/ruby-open-source-feedbin#heading-storage-persistence-and-in-memory-storage
|
||||
77. https://allaboutcoding.ghinda.com/ruby-open-source-feedbin#heading-gems-used
|
||||
78. https://allaboutcoding.ghinda.com/ruby-open-source-feedbin#heading-code-amp-design-patterns
|
||||
79. https://allaboutcoding.ghinda.com/ruby-open-source-feedbin#heading-code-organisation
|
||||
80. https://allaboutcoding.ghinda.com/ruby-open-source-feedbin#heading-routes
|
||||
81. https://allaboutcoding.ghinda.com/ruby-open-source-feedbin#heading-controllers
|
||||
82. https://allaboutcoding.ghinda.com/ruby-open-source-feedbin#heading-models
|
||||
83. https://allaboutcoding.ghinda.com/ruby-open-source-feedbin#heading-jobs
|
||||
84. https://allaboutcoding.ghinda.com/ruby-open-source-feedbin#heading-presenters
|
||||
85. https://allaboutcoding.ghinda.com/ruby-open-source-feedbin#heading-applicationcomponents
|
||||
86. https://allaboutcoding.ghinda.com/ruby-open-source-feedbin#heading-componentspreview
|
||||
87. https://allaboutcoding.ghinda.com/ruby-open-source-feedbin#heading-testing
|
||||
88. https://allaboutcoding.ghinda.com/ruby-open-source-feedbin#heading-custom-assertions
|
||||
89. https://allaboutcoding.ghinda.com/ruby-open-source-feedbin#heading-conclusion
|
||||
90. https://feedbin.com/about
|
||||
91. https://github.com/feedbin/feedbin/blob/main/LICENSE.md
|
||||
92. http://rubyandrails.info/
|
||||
93. https://ruby.social/@lucian
|
||||
[2] https://allaboutcoding.ghinda.com/
|
||||
[4] https://allaboutcoding.ghinda.com/?source=top_nav_blog_home
|
||||
[7] https://allaboutcoding.ghinda.com/?source=top_nav_blog_home
|
||||
[8] https://twitter.com/lucianghinda
|
||||
[9] https://github.com/lucianghinda
|
||||
[10] https://shortruby.com/
|
||||
[11] https://hashnode.com/@lucianghinda
|
||||
[12] https://app.daily.dev/lucianghinda
|
||||
[13] https://linkedin.com/in/lucianghinda
|
||||
[14] https://ruby.social/@lucian
|
||||
[15] https://allaboutcoding.ghinda.com/rss.xml
|
||||
[16] https://hashnode.com/@lucianghinda
|
||||
[17] https://hashnode.com/@lucianghinda
|
||||
[18] https://allaboutcoding.ghinda.com/ruby-open-source-feedbin
|
||||
[19] https://allaboutcoding.ghinda.com/ruby-open-source-feedbin#heading-the-product
|
||||
[20] https://allaboutcoding.ghinda.com/ruby-open-source-feedbin#heading-open-source
|
||||
[21] https://allaboutcoding.ghinda.com/ruby-open-source-feedbin#heading-license
|
||||
[22] https://allaboutcoding.ghinda.com/ruby-open-source-feedbin#heading-technical-review
|
||||
[23] https://allaboutcoding.ghinda.com/ruby-open-source-feedbin#heading-ruby-and-rails-version
|
||||
[24] https://allaboutcoding.ghinda.com/ruby-open-source-feedbin#heading-architecture
|
||||
[25] https://allaboutcoding.ghinda.com/ruby-open-source-feedbin#heading-stats
|
||||
[26] https://allaboutcoding.ghinda.com/ruby-open-source-feedbin#heading-style-guide
|
||||
[27] https://allaboutcoding.ghinda.com/ruby-open-source-feedbin#heading-storage-persistence-and-in-memory-storage
|
||||
[28] https://allaboutcoding.ghinda.com/ruby-open-source-feedbin#heading-gems-used
|
||||
[29] https://allaboutcoding.ghinda.com/ruby-open-source-feedbin#heading-code-amp-design-patterns
|
||||
[30] https://allaboutcoding.ghinda.com/ruby-open-source-feedbin#heading-code-organisation
|
||||
[31] https://allaboutcoding.ghinda.com/ruby-open-source-feedbin#heading-routes
|
||||
[32] https://allaboutcoding.ghinda.com/ruby-open-source-feedbin#heading-controllers
|
||||
[33] https://allaboutcoding.ghinda.com/ruby-open-source-feedbin#heading-models
|
||||
[34] https://allaboutcoding.ghinda.com/ruby-open-source-feedbin#heading-jobs
|
||||
[35] https://allaboutcoding.ghinda.com/ruby-open-source-feedbin#heading-presenters
|
||||
[36] https://allaboutcoding.ghinda.com/ruby-open-source-feedbin#heading-applicationcomponents
|
||||
[37] https://allaboutcoding.ghinda.com/ruby-open-source-feedbin#heading-componentspreview
|
||||
[38] https://allaboutcoding.ghinda.com/ruby-open-source-feedbin#heading-testing
|
||||
[39] https://allaboutcoding.ghinda.com/ruby-open-source-feedbin#heading-custom-assertions
|
||||
[40] https://allaboutcoding.ghinda.com/ruby-open-source-feedbin#heading-conclusion
|
||||
[41] https://feedbin.com/
|
||||
[42] https://feedbin.com/about
|
||||
[43] https://github.com/feedbin/feedbin/blob/main/LICENSE.md
|
||||
[44] https://github.com/feedbin/feedbin/blob/main/LICENSE.md
|
||||
[45] https://github.com/feedbin/feedbin/blob/main/LICENSE.md
|
||||
[46] https://github.com/feedbin/rails
|
||||
[47] https://github.com/Shopify/rails
|
||||
[48] https://github.com/feedbin/rails/tree/7-1-stable-invalid-cache-entries
|
||||
[49] https://github.com/feedbin/feedbin/tree/main/app/views/components
|
||||
[50] https://github.com/feedbin/feedbin/blob/main/Gemfile#L38
|
||||
[51] https://github.com/feedbin/feedbin/tree/main/app/assets/javascripts/web
|
||||
[52] https://github.com/feedbin/feedbin/blob/abf1ad883dab8a3464fe12e4653de6323296175b/config/importmap.rb#L1
|
||||
[53] https://github.com/feedbin/feedbin/blob/abf1ad883dab8a3464fe12e4653de6323296175b/Gemfile#L66
|
||||
[54] https://github.com/feedbin/feedbin/blob/abf1ad883dab8a3464fe12e4653de6323296175b/Gemfile#L94
|
||||
[55] https://github.com/feedbin/feedbin/blob/main/db/structure.sql
|
||||
[56] https://github.com/feedbin/feedbin/blob/abf1ad883dab8a3464fe12e4653de6323296175b/config/initializers/redis.rb#L1
|
||||
[57] https://github.com/feedbin/feedbin/blob/main/app/models/redis_lock.rb#L1
|
||||
[58] https://github.com/feedbin/feedbin/blob/main/lib/clock.rb#L8
|
||||
[59] https://github.com/pauldix/sax-machine
|
||||
[60] https://github.com/feedjira/feedjira
|
||||
[61] https://github.com/feedbin/html-pipeline
|
||||
[62] https://github.com/ostinelli/apnotic
|
||||
[63] https://github.com/ai/autoprefixer-rails
|
||||
[64] https://github.com/Rykian/clockwork
|
||||
[65] https://github.com/janko/down
|
||||
[66] https://github.com/phlex-ruby/phlex-rails
|
||||
[67] https://github.com/fphilipe/premailer-rails
|
||||
[68] https://rubygems.org/gems/raindrops
|
||||
[69] https://github.com/ankane/strong_migrations
|
||||
[70] https://github.com/pushpad/web-push
|
||||
[71] https://github.com/stripe-ruby-mock/stripe-ruby-mock
|
||||
[72] https://github.com/rails/rails-controller-testing
|
||||
[73] https://github.com/feedbin/feedbin/blob/main/Gemfile
|
||||
[74] https://github.com/feedbin/feedbin/blob/main/lib/conditional_sass_compressor.rb#L1
|
||||
[75] https://github.com/feedbin/feedbin/blob/main/config/routes.rb#L133
|
||||
[76] https://github.com/feedbin/feedbin/blob/main/app/views/entries/destroy.js.erb#L1
|
||||
[77] https://github.com/feedbin/feedbin/blob/main/app/presenters/base_presenter.rb#L1
|
||||
[78] https://github.com/feedbin/feedbin/blob/main/app/views/layouts/settings.html.erb#L1
|
||||
[79] https://github.com/feedbin/feedbin/blob/main/app/views/components/application_component.rb#L3
|
||||
[80] https://github.com/angristan/feedbin-docker
|
||||
[81] https://shortruby.com/
|
||||
[82] http://rubyandrails.info/
|
||||
[83] http://rubyandrails.info/
|
||||
[84] https://learn.shortruby.com/
|
||||
[85] https://ruby.social/@lucian
|
||||
[86] http://ruby.social/
|
||||
[87] https://linkedin.com/in/lucianghinda
|
||||
[88] https://x.com/lucianghinda
|
||||
[89] https://www.youtube.com/@shortruby
|
||||
[91] https://allaboutcoding.ghinda.com/sponsor
|
||||
[92] https://hashnode.com/sponsors
|
||||
[93] https://allaboutcoding.ghinda.com/tag/ruby?source=tags_bottom_blogs
|
||||
[94] https://allaboutcoding.ghinda.com/tag/ruby-on-rails?source=tags_bottom_blogs
|
||||
[95] https://allaboutcoding.ghinda.com/tag/opensource?source=tags_bottom_blogs
|
||||
[96] https://allaboutcoding.ghinda.com/tag/coding?source=tags_bottom_blogs
|
||||
[97] https://allaboutcoding.ghinda.com/tag/programming-blogs?source=tags_bottom_blogs
|
||||
|
||||
@@ -1,57 +1,56 @@
|
||||
[1]Analog Office
|
||||
* [2]Home
|
||||
* [3]Subscribe
|
||||
* [4]Archive
|
||||
* [5]Photos
|
||||
* [6]About
|
||||
* [7]Bookshelf
|
||||
* [8]Contact
|
||||
* [9]Ask a Question
|
||||
* [10]Office Holders
|
||||
* [11]Search
|
||||
|
||||
• [2]Home
|
||||
• [3]Subscribe
|
||||
• [4]Archive
|
||||
• [5]Photos
|
||||
• [6]About
|
||||
• [7]Bookshelf
|
||||
• [8]Contact
|
||||
• [9]Ask a Question
|
||||
• [10]Office Holders
|
||||
• [11]Search
|
||||
|
||||
The Life-Changing Magic of Keeping a File Index
|
||||
|
||||
Filing systems for personal, household files don’t get much love from
|
||||
people who write about household organizing. Most books dealing with
|
||||
household organization brush it off in a page or two, and it often
|
||||
comes down to something like this:
|
||||
Filing systems for personal, household files don’t get much love from people
|
||||
who write about household organizing. Most books dealing with household
|
||||
organization brush it off in a page or two, and it often comes down to
|
||||
something like this:
|
||||
|
||||
“Throw out all your papers! Go electronic! With the six papers that are
|
||||
left over, file them alphabetically!”
|
||||
“Throw out all your papers! Go electronic! With the six papers that are left
|
||||
over, file them alphabetically!”
|
||||
|
||||
Marie Kondo, in her first book, advised people to dump most of their
|
||||
papers. (GASP!)
|
||||
Marie Kondo, in her first book, advised people to dump most of their papers.
|
||||
(GASP!)
|
||||
|
||||
Certainly, if you don’t keep papers, you won’t need an excellent filing
|
||||
system.
|
||||
Certainly, if you don’t keep papers, you won’t need an excellent filing system.
|
||||
|
||||
But what if you do want to keep a lot of papers, AND find them quickly?
|
||||
|
||||
Some people collect Lego sets, or porcelain tea cups. I create and
|
||||
collect documents, both paper and electronic. And I know I am not alone
|
||||
in this.
|
||||
Some people collect Lego sets, or porcelain tea cups. I create and collect
|
||||
documents, both paper and electronic. And I know I am not alone in this.
|
||||
|
||||
I like being able to pull out papers like my handout for folding and
|
||||
cutting a six-pointed paper snowflake (I forget how to do this every
|
||||
year); or the brochure that came with my split mechanical gaming
|
||||
keyboard* that tells me how to reset the programming, after I mistype
|
||||
and inadvertently create a macro; or the gift passes to a cool local
|
||||
museum when friends visit.
|
||||
I like being able to pull out papers like my handout for folding and cutting a
|
||||
six-pointed paper snowflake (I forget how to do this every year); or the
|
||||
brochure that came with my split mechanical gaming keyboard* that tells me how
|
||||
to reset the programming, after I mistype and inadvertently create a macro; or
|
||||
the gift passes to a cool local museum when friends visit.
|
||||
|
||||
And I like being able to do that QUICKLY: go to my file cabinet, pull
|
||||
out the gift passes, done. No rummaging through piles or having to pay
|
||||
entrance fees for our guests because I couldn’t find the passes.
|
||||
And I like being able to do that QUICKLY: go to my file cabinet, pull out the
|
||||
gift passes, done. No rummaging through piles or having to pay entrance fees
|
||||
for our guests because I couldn’t find the passes.
|
||||
|
||||
This is where decent filing systems come in.
|
||||
|
||||
I’ll be writing more about some ways to file paper reference materials
|
||||
(this IS after all, the Analog Office) but today I want to focus on:
|
||||
* the need
|
||||
* the genius
|
||||
* the beauty, and
|
||||
* the brilliance of a digital document that most people at home don’t
|
||||
keep: a file index.
|
||||
I’ll be writing more about some ways to file paper reference materials (this IS
|
||||
after all, the Analog Office) but today I want to focus on:
|
||||
|
||||
• the need
|
||||
• the genius
|
||||
• the beauty, and
|
||||
• the brilliance of a digital document that most people at home don’t keep: a
|
||||
file index.
|
||||
|
||||
A file index is your [12]Where Is It? document for your files.
|
||||
|
||||
@@ -61,149 +60,148 @@ Choose: Invest Predictable, Regular, Short Periods of Time?
|
||||
|
||||
Or, Lose: Long, Stressful, Unpredictable Periods of Time (And Money)?
|
||||
|
||||
When you can’t find a paper, you lose an unpredictable amount of time
|
||||
running around and looking through piles, and you also lose sometimes
|
||||
significant amounts of money, because some papers are stand-ins for
|
||||
money (guest passes at the museum); or cost you time and money to
|
||||
replace (deeds, titles).
|
||||
When you can’t find a paper, you lose an unpredictable amount of time running
|
||||
around and looking through piles, and you also lose sometimes significant
|
||||
amounts of money, because some papers are stand-ins for money (guest passes at
|
||||
the museum); or cost you time and money to replace (deeds, titles).
|
||||
|
||||
A file index will take a little time to set up, and small amounts of
|
||||
predictable time to maintain. So it is a trade-off.
|
||||
|
||||
But I would rather spend a little time to have zero anxiety about
|
||||
finding my papers when I want and need them.
|
||||
But I would rather spend a little time to have zero anxiety about finding my
|
||||
papers when I want and need them.
|
||||
|
||||
So I spend small, predictable amounts of time entering information into
|
||||
my filing index.
|
||||
So I spend small, predictable amounts of time entering information into my
|
||||
filing index.
|
||||
|
||||
Why Filing Indexes Work So Well
|
||||
|
||||
Say you have a paper policy from Zenith Auto Insurance, and say you
|
||||
want to file this alphabetically.
|
||||
Say you have a paper policy from Zenith Auto Insurance, and say you want to
|
||||
file this alphabetically.
|
||||
|
||||
Where does it go? What comes to mind for you, if you were looking for
|
||||
it? Where would you put it?
|
||||
Where does it go? What comes to mind for you, if you were looking for it? Where
|
||||
would you put it?
|
||||
|
||||
File it under “Z” for Zenith? Or, “A” for Auto? Or maybe, “I” for
|
||||
Insurance?
|
||||
File it under “Z” for Zenith? Or, “A” for Auto? Or maybe, “I” for Insurance?
|
||||
|
||||
But maybe you think of it as car insurance.
|
||||
|
||||
How about “C” for Car insurance?
|
||||
|
||||
If you file it under “I” for insurance, do you keep your health
|
||||
insurance information in there too? Renter’s or homeowners insurance,
|
||||
does that go there too?
|
||||
If you file it under “I” for insurance, do you keep your health insurance
|
||||
information in there too? Renter’s or homeowners insurance, does that go there
|
||||
too?
|
||||
|
||||
You could; you could have a folder for, “Insurance, Car” and another
|
||||
folder for “Insurance, Health,” and another for, “Insurance, Renters.”
|
||||
Or, you could put health insurance under “H” or even “M” (medical!)…
|
||||
and so on, and so on… aaaargh….!
|
||||
You could; you could have a folder for, “Insurance, Car” and another folder for
|
||||
“Insurance, Health,” and another for, “Insurance, Renters.” Or, you could put
|
||||
health insurance under “H” or even “M” (medical!)… and so on, and so on…
|
||||
aaaargh….!
|
||||
|
||||
Enter the file index.
|
||||
|
||||
File indexes can be – and indeed of course used to be – analog, but I
|
||||
recommend using a digital format because:
|
||||
File indexes can be – and indeed of course used to be – analog, but I recommend
|
||||
using a digital format because:
|
||||
|
||||
✨ You want it to be searchable. ✨🎉
|
||||
|
||||
It’s also a good idea to figure out how you will make your file index
|
||||
accessible to others.
|
||||
|
||||
Because I want my husband to be able to find important household files,
|
||||
I print the file index out whenever I update it, so he can have a way
|
||||
to find things in case he can’t get into my computer. You could also
|
||||
share the document and keep it all online, or print out instructions
|
||||
for how to access it in case someone else needs to.
|
||||
Because I want my husband to be able to find important household files, I print
|
||||
the file index out whenever I update it, so he can have a way to find things in
|
||||
case he can’t get into my computer. You could also share the document and keep
|
||||
it all online, or print out instructions for how to access it in case someone
|
||||
else needs to.
|
||||
|
||||
Make Your Own File Index
|
||||
|
||||
For your file index, you can use a spreadsheet, a notes program, a
|
||||
single document – as long as it is searchable, and you have a way to
|
||||
share access if these are household files that someone else may need.
|
||||
For your file index, you can use a spreadsheet, a notes program, a single
|
||||
document – as long as it is searchable, and you have a way to share access if
|
||||
these are household files that someone else may need.
|
||||
|
||||
It doesn’t matter where the insurance paper goes. It could be under any
|
||||
letter you want.
|
||||
It doesn’t matter where the insurance paper goes. It could be under any letter
|
||||
you want.
|
||||
|
||||
It matters that you record your decision on a document that maps out
|
||||
where you put your files.
|
||||
It matters that you record your decision on a document that maps out where you
|
||||
put your files.
|
||||
|
||||
Let’s say you decide that your Zenith Auto Insurance Policy goes under
|
||||
“C” for “Car Insurance.”
|
||||
Let’s say you decide that your Zenith Auto Insurance Policy goes under “C” for
|
||||
“Car Insurance.”
|
||||
|
||||
So you record on the file index:
|
||||
|
||||
Location; Topic or General Description; Keywords
|
||||
|
||||
* “Location” = the section of the physical file system you need to
|
||||
look in. What is it filed under? That’s your location. For an
|
||||
alphabetical file system, it will be a letter.
|
||||
* “Topic or General Description” = what you call the document; the
|
||||
first phrase that comes to mind when you are looking for the
|
||||
document: if you think of it as your car insurance policy, write
|
||||
“car insurance policy” here
|
||||
* Keywords = MAGIC!! when combined with ✨ search functions 🎉
|
||||
• “Location” = the section of the physical file system you need to look in.
|
||||
What is it filed under? That’s your location. For an alphabetical file
|
||||
system, it will be a letter.
|
||||
|
||||
Filing can be frustrating because often we think of multiple terms for
|
||||
our files. (This happens a lot in homes, less for businesses with
|
||||
structured file naming conventions.)
|
||||
• “Topic or General Description” = what you call the document; the first
|
||||
phrase that comes to mind when you are looking for the document: if you
|
||||
think of it as your car insurance policy, write “car insurance policy” here
|
||||
|
||||
I might think of it as the “car insurance policy,” my husband might
|
||||
look for “Zenith.”
|
||||
• Keywords = MAGIC!! when combined with ✨ search functions 🎉
|
||||
|
||||
So with keywords, you list any words that you might think of when
|
||||
looking for the document, that are not already named in your topic
|
||||
section, above. For this one, you might list: “Zenith, auto, policy,
|
||||
policies, automobile, registration, proof of insurance.”
|
||||
Filing can be frustrating because often we think of multiple terms for our
|
||||
files. (This happens a lot in homes, less for businesses with structured file
|
||||
naming conventions.)
|
||||
|
||||
an example of a file index made from a spreadsheet, showing sample
|
||||
entries using columns for location, topic, and keyword, and a fourth
|
||||
column for digital file locations
|
||||
I might think of it as the “car insurance policy,” my husband might look for
|
||||
“Zenith.”
|
||||
|
||||
Next level: after keywords, if you have a digital file that corresponds
|
||||
to the paper one, put in the location for the digital file.
|
||||
So with keywords, you list any words that you might think of when looking for
|
||||
the document, that are not already named in your topic section, above. For this
|
||||
one, you might list: “Zenith, auto, policy, policies, automobile, registration,
|
||||
proof of insurance.”
|
||||
|
||||
an example of a file index made from a spreadsheet, showing sample entries
|
||||
using columns for location, topic, and keyword, and a fourth column for digital
|
||||
file locations
|
||||
|
||||
Next level: after keywords, if you have a digital file that corresponds to the
|
||||
paper one, put in the location for the digital file.
|
||||
|
||||
Find it all, with file indexes.
|
||||
__________________________________________________________________
|
||||
|
||||
Copy and share – [13]the link is here. Never miss a post from the
|
||||
Analog Office! [14]Subscribe here to get blog posts via email.
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
Wondering how to manage your paper-based or hybrid paper-digital
|
||||
systems? [15]Ask me a question.
|
||||
__________________________________________________________________
|
||||
Copy and share – [13]the link is here. Never miss a post from the Analog
|
||||
Office! [14]Subscribe here to get blog posts via email.
|
||||
|
||||
Wondering how to manage your paper-based or hybrid paper-digital systems? [15]
|
||||
Ask me a question.
|
||||
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
NOTES
|
||||
|
||||
* I’m not a gamer, but my son recommended this split keyboard to me,
|
||||
and it is AWESOME. Shifting rainbow color backlighting, Cherry MX
|
||||
mechanical key switches (whatever that means, I’m reading from the
|
||||
brochure that I quickly and easily pulled from my files), but the best
|
||||
thing is that I no longer have wrist pain. Plus, the cat can hang out
|
||||
in the middle.
|
||||
* I’m not a gamer, but my son recommended this split keyboard to me, and it is
|
||||
AWESOME. Shifting rainbow color backlighting, Cherry MX mechanical key switches
|
||||
(whatever that means, I’m reading from the brochure that I quickly and easily
|
||||
pulled from my files), but the best thing is that I no longer have wrist pain.
|
||||
Plus, the cat can hang out in the middle.
|
||||
|
||||
cat stepping in the middle of a split keyboard
|
||||
|
||||
*****
|
||||
Written on 31 May 2023
|
||||
© 2024 Anna Havron. All rights reserved. Website hosted by [16]micro.blog
|
||||
|
||||
© 2024 Anna Havron. All rights reserved. Website hosted by
|
||||
[16]micro.blog
|
||||
References:
|
||||
|
||||
References
|
||||
|
||||
1. https://analogoffice.net/
|
||||
2. https://analogoffice.net/
|
||||
3. https://analogoffice.net/subscribe/
|
||||
4. https://analogoffice.net/archive/
|
||||
5. https://analogoffice.net/photos/
|
||||
6. https://analogoffice.net/about/
|
||||
7. https://analogoffice.net/books/
|
||||
8. https://analogoffice.net/contact/
|
||||
9. https://analogoffice.net/advice/
|
||||
10. https://analogoffice.net/office-holders/
|
||||
11. https://analogoffice.net/search/
|
||||
12. https://analogoffice.net/2023/01/16/keep-a-where.html
|
||||
13. https://analogoffice.net/2023/05/31/the-lifechanging-magic.html
|
||||
14. https://analogoffice.net/subscribe/
|
||||
15. https://analogoffice.net/advice/
|
||||
16. https://micro.blog/
|
||||
[1] https://analogoffice.net/
|
||||
[2] https://analogoffice.net/
|
||||
[3] https://analogoffice.net/subscribe/
|
||||
[4] https://analogoffice.net/archive/
|
||||
[5] https://analogoffice.net/photos/
|
||||
[6] https://analogoffice.net/about/
|
||||
[7] https://analogoffice.net/books/
|
||||
[8] https://analogoffice.net/contact/
|
||||
[9] https://analogoffice.net/advice/
|
||||
[10] https://analogoffice.net/office-holders/
|
||||
[11] https://analogoffice.net/search/
|
||||
[12] https://analogoffice.net/2023/01/16/keep-a-where.html
|
||||
[13] https://analogoffice.net/2023/05/31/the-lifechanging-magic.html
|
||||
[14] https://analogoffice.net/subscribe/
|
||||
[15] https://analogoffice.net/advice/
|
||||
[16] https://micro.blog/
|
||||
|
||||
@@ -1,74 +1,67 @@
|
||||
[1]Baty.net
|
||||
(BUTTON)
|
||||
[1][apple-touc]Baty.net
|
||||
|
||||
* [2]Archive
|
||||
* [3]About
|
||||
* [4]Tags
|
||||
* [5]Uses
|
||||
* [6]Search
|
||||
• [3]Archive
|
||||
• [4]About
|
||||
• [5]Tags
|
||||
• [6]Uses
|
||||
• [7]Search
|
||||
|
||||
Ending my OpenBSD experiment (Almost)
|
||||
|
||||
January 4, 2024 · 197 words
|
||||
|
||||
I did [7]this fun thing from Derek Sivers because I wanted to play with
|
||||
[8]OpenBSD and with [9]Vultr for hosting.
|
||||
I did [8]this fun thing from Derek Sivers because I wanted to play with [9]
|
||||
OpenBSD and with [10]Vultr for hosting.
|
||||
|
||||
Well, I played with it. It was fun. I got to see how [10]Dovecot works
|
||||
and I learned how to configure Relayd and the OpenBSD httpd server.
|
||||
Well, I played with it. It was fun. I got to see how [11]Dovecot works and I
|
||||
learned how to configure Relayd and the OpenBSD httpd server.
|
||||
|
||||
I think I’d end up liking it. BSD feels lighter and simpler and
|
||||
therefore probably more secure than the Ubuntu servers I’m running.
|
||||
I think I’d end up liking it. BSD feels lighter and simpler and therefore
|
||||
probably more secure than the Ubuntu servers I’m running.
|
||||
|
||||
However, I don’t need another server to manage. I don’t need to run my
|
||||
own mail server or CalDAV server. My VPS at Digital Ocean has been
|
||||
running (::knocks wood::) smoothly for years and I’ve got the
|
||||
configuration down.
|
||||
However, I don’t need another server to manage. I don’t need to run my own mail
|
||||
server or CalDAV server. My VPS at Digital Ocean has been running (::knocks
|
||||
wood::) smoothly for years and I’ve got the configuration down.
|
||||
|
||||
I’ll be deleting the OpenBSD server once I’ve moved the few sites I’d
|
||||
migrated there back to Digital Ocean.
|
||||
I’ll be deleting the OpenBSD server once I’ve moved the few sites I’d migrated
|
||||
there back to Digital Ocean.
|
||||
|
||||
Remember, [11]Reduce and Simplify.
|
||||
Remember, [12]Reduce and Simplify.
|
||||
|
||||
I may try again later with stock OpenBSD and Caddy, without all of the
|
||||
Sivers’ stuff.
|
||||
I may try again later with stock OpenBSD and Caddy, without all of the Sivers’
|
||||
stuff.
|
||||
|
||||
2 hours later: I was right. I spun up a fresh OpenBSD server at Vultr
|
||||
and configured it myself. No services running but relayd->httpd and so
|
||||
far the only site it’s running is [12]jackbaty.com. I like the idea of
|
||||
BSD so much that I couldn’t give up quite yet.
|
||||
2 hours later: I was right. I spun up a fresh OpenBSD server at Vultr and
|
||||
configured it myself. No services running but relayd->httpd and so far the only
|
||||
site it’s running is [13]jackbaty.com. I like the idea of BSD so much that I
|
||||
couldn’t give up quite yet.
|
||||
|
||||
* [13]OpenBSD
|
||||
• [14]OpenBSD
|
||||
|
||||
[14]« Prev
|
||||
Obsidian is not at all joyful to use [15]Next »
|
||||
[15]« Prev
|
||||
Obsidian is not at all joyful to use [16]Next »
|
||||
The care and feeding of my system
|
||||
[17]✍️ Reply by email
|
||||
© Jack Baty | Powered by [18]Hugo & [19]PaperMod[20]
|
||||
|
||||
[16]✍️ Reply by email
|
||||
References:
|
||||
|
||||
© Jack Baty | Powered by [17]Hugo & [18]PaperMod
|
||||
|
||||
References
|
||||
|
||||
Visible links:
|
||||
1. https://baty.net/
|
||||
2. https://baty.net/archives
|
||||
3. https://baty.net/about/
|
||||
4. https://baty.net/tags/
|
||||
5. https://baty.net/uses/
|
||||
6. https://baty.net/search/
|
||||
7. https://baty.net/journal/2023/12/29/running-an-openbsd-server
|
||||
8. https://www.openbsdfoundation.org/
|
||||
9. https://www.vultr.com/
|
||||
10. https://dovecot.org/
|
||||
11. https://baty.net/journal/2023/12/31/reduce-and-simplify
|
||||
12. https://jackbaty.com/
|
||||
13. https://baty.net/tags/openbsd/
|
||||
14. https://baty.net/journal/2024/01/04/obsidian-is-not-at-all-joyful-to-use/
|
||||
15. https://baty.net/2024/01/the-care-and-feeding-of-my-system/
|
||||
16. mailto:jack@baty.net?subject=[baty.net] Re: Ending my OpenBSD experiment (Almost)
|
||||
17. https://gohugo.io/
|
||||
18. https://github.com/adityatelange/hugo-PaperMod/
|
||||
|
||||
Hidden links:
|
||||
20. https://baty.net/2024/01/ending-my-openbsd-experiment/#top
|
||||
[1] https://baty.net/
|
||||
[3] https://baty.net/archives
|
||||
[4] https://baty.net/about/
|
||||
[5] https://baty.net/tags/
|
||||
[6] https://baty.net/uses/
|
||||
[7] https://baty.net/search/
|
||||
[8] https://baty.net/journal/2023/12/29/running-an-openbsd-server
|
||||
[9] https://www.openbsdfoundation.org/
|
||||
[10] https://www.vultr.com/
|
||||
[11] https://dovecot.org/
|
||||
[12] https://baty.net/journal/2023/12/31/reduce-and-simplify
|
||||
[13] https://jackbaty.com/
|
||||
[14] https://baty.net/tags/openbsd/
|
||||
[15] https://baty.net/journal/2024/01/04/obsidian-is-not-at-all-joyful-to-use/
|
||||
[16] https://baty.net/2024/01/the-care-and-feeding-of-my-system/
|
||||
[17] mailto:jack@baty.net?subject=[baty.net]%20Re:%20Ending%20my%20OpenBSD%20experiment%20%28Almost%29
|
||||
[18] https://gohugo.io/
|
||||
[19] https://github.com/adityatelange/hugo-PaperMod/
|
||||
[20] https://baty.net/2024/01/ending-my-openbsd-experiment/#top
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,17 +1,19 @@
|
||||
[matomo]
|
||||
|
||||
[1] Test Double The Test Double logo
|
||||
|
||||
Menu
|
||||
|
||||
(BUTTON) Menu Menu An icon that displays an illustration of a website
|
||||
menu
|
||||
* [2]Home
|
||||
* [3]Agency
|
||||
* [4]Services
|
||||
* [5]Careers
|
||||
* [6]Blog
|
||||
* [7]Contact
|
||||
Menu An icon that displays an illustration of a website menu
|
||||
|
||||
[8]Blog [9]Posts
|
||||
• [3] Home
|
||||
• [4] Agency
|
||||
• [5] Services
|
||||
• [6] Careers
|
||||
• [7] Blog
|
||||
• [8] Contact
|
||||
|
||||
[9] Blog [10] Posts
|
||||
|
||||
How to tell if AI threatens YOUR job
|
||||
|
||||
@@ -19,515 +21,486 @@ No, really, this post may give you a way to answer that
|
||||
|
||||
An icon of a clock Publish Date
|
||||
March 14, 2023
|
||||
|
||||
An icon of a human figure Authors
|
||||
[10]Justin Searls
|
||||
[11]Justin Searls
|
||||
|
||||
As a young lad, I developed a habit of responding to the enthusiasm of
|
||||
others with fear, skepticism, and judgment.
|
||||
As a young lad, I developed a habit of responding to the enthusiasm of others
|
||||
with fear, skepticism, and judgment.
|
||||
|
||||
While it never made me very fun at parties, my hypercritical reflex has
|
||||
been rewarded with the sweet satisfaction of being able to say “I told
|
||||
you so” more often than not. Everyone brings a default disposition to
|
||||
the table, and for me that includes a deep suspicion of hope and
|
||||
optimism as irrational exuberance.
|
||||
While it never made me very fun at parties, my hypercritical reflex has been
|
||||
rewarded with the sweet satisfaction of being able to say “I told you so” more
|
||||
often than not. Everyone brings a default disposition to the table, and for me
|
||||
that includes a deep suspicion of hope and optimism as irrational exuberance.
|
||||
|
||||
But there’s one trend people are excited about that—try as I might—I’m
|
||||
having a hard time passing off as mere hype: generative AI.
|
||||
But there’s one trend people are excited about that—try as I might—I’m having a
|
||||
hard time passing off as mere hype: generative AI.
|
||||
|
||||
The more excited someone is by the prospect of AI making their job
|
||||
easier, the more they should be worried.
|
||||
The more excited someone is by the prospect of AI making their job easier, the
|
||||
more they should be worried.
|
||||
|
||||
There’s little doubt at this point: the tools that succeed [11]DALL•E
|
||||
and [12]ChatGPT will have a profound impact on society. If it feels
|
||||
obvious that self-driving cars will put millions of truckers out of
|
||||
work, it should be clear even more white collar jobs will be rendered
|
||||
unnecessary by this new class of AI tools.
|
||||
There’s little doubt at this point: the tools that succeed [12]DALL•E and [13]
|
||||
ChatGPT will have a profound impact on society. If it feels obvious that
|
||||
self-driving cars will put millions of truckers out of work, it should be clear
|
||||
even more white collar jobs will be rendered unnecessary by this new class of
|
||||
AI tools.
|
||||
|
||||
While [13]Level 4 autonomous vehicles may still be years away,
|
||||
production-ready AI is here today. It’s already being used to do
|
||||
significant amounts of paid work, often with employers being none the
|
||||
wiser.
|
||||
While [14]Level 4 autonomous vehicles may still be years away, production-ready
|
||||
AI is here today. It’s already being used to do significant amounts of paid
|
||||
work, often with employers being none the wiser.
|
||||
|
||||
If truckers deserve [14]years [15]of [16]warnings that their jobs are
|
||||
at risk, we owe it to ourselves and others to think through the types
|
||||
of problems that generative AI is best equipped to solve, which sorts
|
||||
of jobs are at greatest risk, and what workers can start doing now to
|
||||
prepare for the profound disruption that’s coming for the information
|
||||
economy.
|
||||
If truckers deserve [15]years [16]of [17]warnings that their jobs are at risk,
|
||||
we owe it to ourselves and others to think through the types of problems that
|
||||
generative AI is best equipped to solve, which sorts of jobs are at greatest
|
||||
risk, and what workers can start doing now to prepare for the profound
|
||||
disruption that’s coming for the information economy.
|
||||
|
||||
So let’s do that.
|
||||
|
||||
[17]Now it’s time to major bump Web 2.0
|
||||
[18]Now it’s time to major bump Web 2.0
|
||||
|
||||
Computer-generated content wouldn’t pose the looming threat it does
|
||||
without the last 20 years of user-generated content blanketing the
|
||||
Internet to fertilize it.
|
||||
Computer-generated content wouldn’t pose the looming threat it does without the
|
||||
last 20 years of user-generated content blanketing the Internet to fertilize
|
||||
it.
|
||||
|
||||
As user-generated content came to dominate the Internet with the advent
|
||||
of Web 2.0 in the 2000s, we heard a lot about the [18]Wisdom of the
|
||||
Crowd. The theory was simple: if anyone could publish content to a
|
||||
platform, then users could rank that content’s quality (whether via
|
||||
viewership metrics or explicit upvotes), and eventually the efforts of
|
||||
the (unpaid!) general public would outperform the productivity of
|
||||
(quite expensive!) professional authors and publishers. The winners,
|
||||
under Web 2.0, would no longer be the best content creators, but the
|
||||
platforms that successfully achieve [19]network effect and come to
|
||||
mediate everyone’s experience with respect to a particular category of
|
||||
As user-generated content came to dominate the Internet with the advent of Web
|
||||
2.0 in the 2000s, we heard a lot about the [19]Wisdom of the Crowd. The theory
|
||||
was simple: if anyone could publish content to a platform, then users could
|
||||
rank that content’s quality (whether via viewership metrics or explicit
|
||||
upvotes), and eventually the efforts of the (unpaid!) general public would
|
||||
outperform the productivity of (quite expensive!) professional authors and
|
||||
publishers. The winners, under Web 2.0, would no longer be the best content
|
||||
creators, but the platforms that successfully achieve [20]network effect and
|
||||
come to mediate everyone’s experience with respect to a particular category of
|
||||
content.
|
||||
|
||||
This theory quickly proved correct. User-generated content so
|
||||
dramatically outpaced “legacy” media that the newspaper industry is now
|
||||
a shell of its former self—grasping at straws like SEO content farms,
|
||||
clickbait headlines, and ever-thirstier display ads masquerading as
|
||||
content. The fact I’ve already used the word “content” eight times in
|
||||
two paragraphs is a testament to how its unrelenting deluge under Web
|
||||
2.0 has flattened our relationship with information. “Content” has
|
||||
become a fungible resource to be consumed by our eyeballs and earholes,
|
||||
which transforms it into a value-added product called “engagement,” and
|
||||
which the platform owners in turn package and resell to advertisers as
|
||||
a service called “impressions.”
|
||||
This theory quickly proved correct. User-generated content so dramatically
|
||||
outpaced “legacy” media that the newspaper industry is now a shell of its
|
||||
former self—grasping at straws like SEO content farms, clickbait headlines, and
|
||||
ever-thirstier display ads masquerading as content. The fact I’ve already used
|
||||
the word “content” eight times in two paragraphs is a testament to how its
|
||||
unrelenting deluge under Web 2.0 has flattened our relationship with
|
||||
information. “Content” has become a fungible resource to be consumed by our
|
||||
eyeballs and earholes, which transforms it into a value-added product called
|
||||
“engagement,” and which the platform owners in turn package and resell to
|
||||
advertisers as a service called “impressions.”
|
||||
|
||||
And for a beautiful moment in time, this system created a lot of value
|
||||
for shareholders.
|
||||
And for a beautiful moment in time, this system created a lot of value for
|
||||
shareholders.
|
||||
|
||||
But the status quo is being challenged by a new innovation, leading
|
||||
many of Web 2.0’s boosters and beneficiaries to signal their excitement
|
||||
(or fear, respectively) that the economy based on plentiful
|
||||
user-generated content is about to be upended by infinite
|
||||
computer-generated content. If we’re witnessing the first act of Web
|
||||
3.0, it’s got nothing to do with crypto and everything to do with
|
||||
[20]generative AI.
|
||||
But the status quo is being challenged by a new innovation, leading many of Web
|
||||
2.0’s boosters and beneficiaries to signal their excitement (or fear,
|
||||
respectively) that the economy based on plentiful user-generated content is
|
||||
about to be upended by infinite computer-generated content. If we’re witnessing
|
||||
the first act of Web 3.0, it’s got nothing to do with crypto and everything to
|
||||
do with [21]generative AI.
|
||||
|
||||
If you’re reading this, you don’t need me to recap the cultural impact
|
||||
of [21]ChatGPT and [22]Bing Chat for you. Suffice to say, if Google—the
|
||||
runaway winner of the Web 2.0 economy—is [23]legit shook, there’s
|
||||
probably fire to go with all this smoke. Moreover, when you consider
|
||||
that [24]the same incumbent is already at the forefront of AI
|
||||
innovation but is nevertheless terrified by this sea change, Google
|
||||
clearly believes we’re witnessing a major market disruption in addition
|
||||
to a technological one.
|
||||
If you’re reading this, you don’t need me to recap the cultural impact of [22]
|
||||
ChatGPT and [23]Bing Chat for you. Suffice to say, if Google—the runaway winner
|
||||
of the Web 2.0 economy—is [24]legit shook, there’s probably fire to go with all
|
||||
this smoke. Moreover, when you consider that [25]the same incumbent is already
|
||||
at the forefront of AI innovation but is nevertheless terrified by this sea
|
||||
change, Google clearly believes we’re witnessing a major market disruption in
|
||||
addition to a technological one.
|
||||
|
||||
One reason I’ve been thinking so much about this is that I’ve started
|
||||
work on a personal project to build an AI chatbot for practicing
|
||||
Japanese language and I’m livecoding 100% of my work for an educational
|
||||
video series I call [25]Searls After Dark. Might be why I’ve got AI on
|
||||
the mind lately!
|
||||
One reason I’ve been thinking so much about this is that I’ve started work on a
|
||||
personal project to build an AI chatbot for practicing Japanese language and
|
||||
I’m livecoding 100% of my work for an educational video series I call [26]
|
||||
Searls After Dark. Might be why I’ve got AI on the mind lately!
|
||||
|
||||
But you’re not a tech giant. You’re wondering what this means for you
|
||||
and your weekend. And I think we’re beginning to identify the contours
|
||||
of an answer to that question.
|
||||
But you’re not a tech giant. You’re wondering what this means for you and your
|
||||
weekend. And I think we’re beginning to identify the contours of an answer to
|
||||
that question.
|
||||
|
||||
[26]ChatGPT can do some people’s work, but not everyone’s
|
||||
[27]ChatGPT can do some people’s work, but not everyone’s
|
||||
|
||||
A profound difference between the coming economic upheaval and those of
|
||||
the past is that it will most severely impact white collar workers.
|
||||
Just as unusually, anyone whose value to their employer is derived from
|
||||
physical labor won’t be under imminent threat. Everyone else is left to
|
||||
ask: will generative AI replace my job? Do I need to be worried?
|
||||
A profound difference between the coming economic upheaval and those of the
|
||||
past is that it will most severely impact white collar workers. Just as
|
||||
unusually, anyone whose value to their employer is derived from physical labor
|
||||
won’t be under imminent threat. Everyone else is left to ask: will generative
|
||||
AI replace my job? Do I need to be worried?
|
||||
|
||||
Suppose we approached AI as a new form of outsourcing. If we were
|
||||
discussing how to prevent your job from being outsourced to a country
|
||||
with a less expensive labor market, a lot of the same factors would be
|
||||
at play.
|
||||
Suppose we approached AI as a new form of outsourcing. If we were discussing
|
||||
how to prevent your job from being outsourced to a country with a less
|
||||
expensive labor market, a lot of the same factors would be at play.
|
||||
|
||||
Having spent months programming with [27]GitHub Copilot, weeks talking
|
||||
to ChatGPT, and days searching via Bing Chat as an alternative to
|
||||
Google, the best description I’ve heard of AI’s capabilities is
|
||||
“[28]fluent bullshit.” And after months of seeing friends “cheat” at
|
||||
their day jobs by having [29]ChatGPT do their homework for them, I’ve
|
||||
come to a pretty grim, if obvious, realization: the more excited
|
||||
someone is by the prospect of AI making their job easier, the more they
|
||||
should be worried.
|
||||
Having spent months programming with [28]GitHub Copilot, weeks talking to
|
||||
ChatGPT, and days searching via Bing Chat as an alternative to Google, the best
|
||||
description I’ve heard of AI’s capabilities is “[29]fluent bullshit.” And after
|
||||
months of seeing friends “cheat” at their day jobs by having [30]ChatGPT do
|
||||
their homework for them, I’ve come to a pretty grim, if obvious, realization:
|
||||
the more excited someone is by the prospect of AI making their job easier, the
|
||||
more they should be worried.
|
||||
|
||||
Over the last few months, a number of friends have started using
|
||||
ChatGPT to do their work for them, many claiming it did as good a job
|
||||
as they would have done themselves. Examples include:
|
||||
* Summarizing content for social media previews
|
||||
* Authoring weekly newsletters
|
||||
* E-mailing follow-ups to sales prospects and clients
|
||||
* Submitting feature specifications for their team’s issue tracker
|
||||
* Optimizing the performance of SQL queries and algorithms
|
||||
* Completing employees’ performance reviews
|
||||
Over the last few months, a number of friends have started using ChatGPT to do
|
||||
their work for them, many claiming it did as good a job as they would have done
|
||||
themselves. Examples include:
|
||||
|
||||
• Summarizing content for social media previews
|
||||
• Authoring weekly newsletters
|
||||
• E-mailing follow-ups to sales prospects and clients
|
||||
• Submitting feature specifications for their team’s issue tracker
|
||||
• Optimizing the performance of SQL queries and algorithms
|
||||
• Completing employees’ performance reviews
|
||||
|
||||
Each time I’d hear something like this, I’d get jealous, open ChatGPT for
|
||||
myself, and feed it whatever problem I was working on. It never worked.
|
||||
Sometimes it’d give up and claim the thing I was trying to do was too obscure.
|
||||
Sometimes it’d generate a superficially realistic response, but always with
|
||||
just enough nonsense mixed in that it would take [31]more [32]time to [33]edit
|
||||
than to rewrite from scratch. But most often, I’d end up wasting time stuck in
|
||||
this never-ending loop:
|
||||
|
||||
Each time I’d hear something like this, I’d get jealous, open ChatGPT
|
||||
for myself, and feed it whatever problem I was working on. It never
|
||||
worked. Sometimes it’d give up and claim the thing I was trying to do
|
||||
was too obscure. Sometimes it’d generate a superficially realistic
|
||||
response, but always with just enough nonsense mixed in that it would
|
||||
take [30]more [31]time to [32]edit than to rewrite from scratch. But
|
||||
most often, I’d end up wasting time stuck in this never-ending loop:
|
||||
1. Ask ChatGPT to do something
|
||||
2. It responds with an obviously-wrong answer
|
||||
3. Explain to ChatGPT why its response is wrong
|
||||
4. It politely apologizes (“You are correct, X in fact does not equal
|
||||
Y. I apologize.”) before immediately generating an
|
||||
equally-incorrect answer
|
||||
4. It politely apologizes (“You are correct, X in fact does not equal Y. I
|
||||
apologize.”) before immediately generating an equally-incorrect answer
|
||||
5. GOTO 3
|
||||
|
||||
I got so frustrated asking it to help me troubleshoot my VS Code task
|
||||
configuration that [33]I recorded my screen and set it to a few lofi
|
||||
tracks before [34]giving up.
|
||||
configuration that [34]I recorded my screen and set it to a few lofi tracks
|
||||
before [35]giving up.
|
||||
|
||||
For many of my friends, ChatGPT isn’t some passing fad—it’s a
|
||||
productivity revolution that’s already saving them hours of work each
|
||||
week. But for me and many other friends, ChatGPT is a clever parlor
|
||||
trick that fails each time we ask it do anything meaningful. What
|
||||
gives?
|
||||
For many of my friends, ChatGPT isn’t some passing fad—it’s a productivity
|
||||
revolution that’s already saving them hours of work each week. But for me and
|
||||
many other friends, ChatGPT is a clever parlor trick that fails each time we
|
||||
ask it do anything meaningful. What gives?
|
||||
|
||||
[35]Three simple rules for keeping your job
|
||||
[36]Three simple rules for keeping your job
|
||||
|
||||
I’ve spent the last few months puzzling over this. Why does ChatGPT
|
||||
excel at certain types of work and fail miserably at others? Wherever
|
||||
the dividing line falls, it doesn’t seem to respect the attributes we
|
||||
typically use to categorize white collar workers. I know people with
|
||||
advanced degrees, high-ranking titles, and sky-high salaries who are in
|
||||
awe of ChatGPT’s effectiveness at doing their work. But I can identify
|
||||
just as many roles that sit near the bottom of the org chart, don’t
|
||||
require special credentials, and don’t pay particularly well for which
|
||||
ChatGPT isn’t even remotely useful.
|
||||
I’ve spent the last few months puzzling over this. Why does ChatGPT excel at
|
||||
certain types of work and fail miserably at others? Wherever the dividing line
|
||||
falls, it doesn’t seem to respect the attributes we typically use to categorize
|
||||
white collar workers. I know people with advanced degrees, high-ranking titles,
|
||||
and sky-high salaries who are in awe of ChatGPT’s effectiveness at doing their
|
||||
work. But I can identify just as many roles that sit near the bottom of the org
|
||||
chart, don’t require special credentials, and don’t pay particularly well for
|
||||
which ChatGPT isn’t even remotely useful.
|
||||
|
||||
Here’s where I landed. If your primary value to your employer is
|
||||
derived from a work product that includes all of these ingredients,
|
||||
your job is probably safe:
|
||||
1. Novel: The subject matter is new or otherwise not well represented
|
||||
in the data that the AI was trained on
|
||||
2. Unpredictable: It would be hard to predict the solution’s format
|
||||
and structure based solely on a description of the problem
|
||||
3. Fragile: Minor errors and inaccuracies would dramatically reduce
|
||||
the work’s value without time-intensive remediation from an expert
|
||||
Here’s where I landed. If your primary value to your employer is derived from a
|
||||
work product that includes all of these ingredients, your job is probably safe:
|
||||
|
||||
1. Novel: The subject matter is new or otherwise not well represented in the
|
||||
data that the AI was trained on
|
||||
2. Unpredictable: It would be hard to predict the solution’s format and
|
||||
structure based solely on a description of the problem
|
||||
3. Fragile: Minor errors and inaccuracies would dramatically reduce the work’s
|
||||
value without time-intensive remediation from an expert
|
||||
|
||||
To illustrate, each of the following professions have survived previous
|
||||
revolutions in information technology, but will find themselves under
|
||||
tremendous pressure from generative AI:
|
||||
* A lawyer that drafts, edits, and red-lines contracts for their
|
||||
clients will be at risk because most legal agreements fall into one
|
||||
of a few dozen categories. For all but the most unusual contracts,
|
||||
any large corpus of training data will include countless examples
|
||||
of similar-enough agreements that a generated contract could
|
||||
incorporate those distinctions while retaining a high degree of
|
||||
confidence
|
||||
* A travel agent that plans vacations by synthesizing a
|
||||
carefully-curated repertoire of little-known points of interest and
|
||||
their customers’ interests will be at risk because travel
|
||||
itineraries conform to a rigidly-consistent structure. With
|
||||
training, a [36]stochastic AI could predictably fill in the blanks
|
||||
of a traveler’s agenda with “hidden” gems while avoiding
|
||||
recommending the same places to everyone
|
||||
* An insurance broker responsible for translating known risks and
|
||||
potential liabilities into a prescribed set of coverages will
|
||||
themselves be at risk because most policy mistakes are relatively
|
||||
inconsequential. Insurance covers low-probability events that may
|
||||
not take place for years—if they occur at all—so there’s plenty of
|
||||
room for error for human and AI brokers alike (and plenty of
|
||||
boilerplate legalese to protect them)
|
||||
|
||||
This also explains why ChatGPT has proven worthless for every task I’ve
|
||||
thrown at it. As an experienced application developer, let’s consider
|
||||
whether that’s because my work meets the three criteria identified
|
||||
above:
|
||||
1. Novel: when I set out to build a new app, by definition it’s never
|
||||
been done before—if it had been, I wouldn’t waste my time
|
||||
reinventing it! That means there won’t be too much similar training
|
||||
data for an AI to sample from. Moreover, by preferring expressive,
|
||||
terse languages like Ruby and frameworks like Rails that promote
|
||||
[37]DRY, there just isn’t all that much for GitHub Copilot to
|
||||
suggest to me (and when it does generate a large chunk of correct
|
||||
code, I interpret it as a smell that I’m needlessly [38]reinventing
|
||||
a wheel)
|
||||
2. Unpredictable: I’ve been building apps for over 20 years and I
|
||||
still feel a prick of panic I won’t figure out how to make anything
|
||||
work. Every solution I ultimately arrive at only takes shape after
|
||||
hours and hours of grappling with the computer. Whether you call
|
||||
programming trial-and-error or dress it up as “[39]emergent
|
||||
design,” the upshot is that the best engineers tend to be resigned
|
||||
to the fact that the architectural design of the solution to any
|
||||
problem is unknowable at the outset and can only be discovered
|
||||
through the act of solving
|
||||
3. Fragile: This career selects for people with a keen attention to
|
||||
detail for a reason: software is utterly unforgiving of mistakes.
|
||||
One errant character is enough to break a program millions of lines
|
||||
long. Subtle bugs can have costly consequences if deployed, like
|
||||
security breaches and data loss. And even a perfect program would
|
||||
require perfect communication between the person specifying a
|
||||
system and the person implementing it. While AI may one day create
|
||||
apps, the precision and accuracy required makes probabilistic
|
||||
• A lawyer that drafts, edits, and red-lines contracts for their clients will
|
||||
be at risk because most legal agreements fall into one of a few dozen
|
||||
categories. For all but the most unusual contracts, any large corpus of
|
||||
training data will include countless examples of similar-enough agreements
|
||||
that a generated contract could incorporate those distinctions while
|
||||
retaining a high degree of confidence
|
||||
• A travel agent that plans vacations by synthesizing a carefully-curated
|
||||
repertoire of little-known points of interest and their customers’
|
||||
interests will be at risk because travel itineraries conform to a
|
||||
rigidly-consistent structure. With training, a [37]stochastic AI could
|
||||
predictably fill in the blanks of a traveler’s agenda with “hidden” gems
|
||||
while avoiding recommending the same places to everyone
|
||||
• An insurance broker responsible for translating known risks and potential
|
||||
liabilities into a prescribed set of coverages will themselves be at risk
|
||||
because most policy mistakes are relatively inconsequential. Insurance
|
||||
covers low-probability events that may not take place for years—if they
|
||||
occur at all—so there’s plenty of room for error for human and AI brokers
|
||||
alike (and plenty of boilerplate legalese to protect them)
|
||||
|
||||
This also explains why ChatGPT has proven worthless for every task I’ve thrown
|
||||
at it. As an experienced application developer, let’s consider whether that’s
|
||||
because my work meets the three criteria identified above:
|
||||
|
||||
1. Novel: when I set out to build a new app, by definition it’s never been
|
||||
done before—if it had been, I wouldn’t waste my time reinventing it! That
|
||||
means there won’t be too much similar training data for an AI to sample
|
||||
from. Moreover, by preferring expressive, terse languages like Ruby and
|
||||
frameworks like Rails that promote [38]DRY, there just isn’t all that much
|
||||
for GitHub Copilot to suggest to me (and when it does generate a large
|
||||
chunk of correct code, I interpret it as a smell that I’m needlessly [39]
|
||||
reinventing a wheel)
|
||||
2. Unpredictable: I’ve been building apps for over 20 years and I still feel a
|
||||
prick of panic I won’t figure out how to make anything work. Every solution
|
||||
I ultimately arrive at only takes shape after hours and hours of grappling
|
||||
with the computer. Whether you call programming trial-and-error or dress it
|
||||
up as “[40]emergent design,” the upshot is that the best engineers tend to
|
||||
be resigned to the fact that the architectural design of the solution to
|
||||
any problem is unknowable at the outset and can only be discovered through
|
||||
the act of solving
|
||||
3. Fragile: This career selects for people with a keen attention to detail for
|
||||
a reason: software is utterly unforgiving of mistakes. One errant character
|
||||
is enough to break a program millions of lines long. Subtle bugs can have
|
||||
costly consequences if deployed, like security breaches and data loss. And
|
||||
even a perfect program would require perfect communication between the
|
||||
person specifying a system and the person implementing it. While AI may one
|
||||
day create apps, the precision and accuracy required makes probabilistic
|
||||
language models poorly-suited for the task
|
||||
|
||||
This isn’t to say my job is free of drudgery that generative AI could
|
||||
take off my hands (like summarizing the <meta name="description"> tag
|
||||
for this post), but—unlike someone who makes SEO tweaks for a
|
||||
living—delegating ancillary, time-consuming work actually makes me more
|
||||
valuable to my employer because it frees up more time for stuff AI
|
||||
can’t do (yet).
|
||||
This isn’t to say my job is free of drudgery that generative AI could take off
|
||||
my hands (like summarizing the <meta name="description"> tag for this post),
|
||||
but—unlike someone who makes SEO tweaks for a living—delegating ancillary,
|
||||
time-consuming work actually makes me more valuable to my employer because it
|
||||
frees up more time for stuff AI can’t do (yet).
|
||||
|
||||
So if you’re a programmer like me, you’re probably safe!
|
||||
|
||||
Job’s done. Post over.
|
||||
|
||||
[40]Post not over: How can I save my job?
|
||||
[41]Post not over: How can I save my job?
|
||||
|
||||
So what can someone do if their primary role doesn’t produce work that
|
||||
checks the three boxes of novelty, unpredictability, and fragility?
|
||||
So what can someone do if their primary role doesn’t produce work that checks
|
||||
the three boxes of novelty, unpredictability, and fragility?
|
||||
|
||||
Here are a few ideas that probably won’t work:
|
||||
* Ask major tech companies to kindly put this genie back into the
|
||||
bottle
|
||||
* Lobby for [41]humane policies to prepare for a world that doesn’t
|
||||
need every human’s labor
|
||||
* Embrace return-to-office mandates by doing stuff software can’t do,
|
||||
like stocking the snack cabinet and proactively offering to play
|
||||
foosball with your boss
|
||||
|
||||
If reading this has turned your excitement that ChatGPT can do your job
|
||||
into fear that ChatGPT can do your job, take heart! There are things
|
||||
you can do today to prepare.
|
||||
• Ask major tech companies to kindly put this genie back into the bottle
|
||||
|
||||
Only in very rare cases could AI do every single valuable task you
|
||||
currently perform for your employer. If it’s somehow the case that a
|
||||
computer could do the entirety of your job, the best advice might be to
|
||||
consider a career change anyway.
|
||||
• Lobby for [42]humane policies to prepare for a world that doesn’t need
|
||||
every human’s labor
|
||||
|
||||
Suppose we approached AI as a new form of outsourcing. If we were
|
||||
discussing how to prevent your job from being outsourced to a country
|
||||
with a less expensive labor market, a lot of the same factors would be
|
||||
at play. As a result, if you were my friend (just kidding! You are my
|
||||
friend, I swear!) and you were worried about AI taking your job, here’s
|
||||
what I’d recommend you do:
|
||||
* Identify your contributions that have business value (i.e. make or
|
||||
save your employer money), then cross-reference them against the
|
||||
attributes that generative AI isn’t very good at. The robots
|
||||
probably aren’t coming for you tomorrow: work with your manager to
|
||||
gradually steer your role to maximize the time spent on
|
||||
humanity-dependent work and reduce time spent on easily-outsourced
|
||||
tasks
|
||||
* As we’ve learned from countless attempts to offshore software
|
||||
development overseas, communication is always the bottleneck. Three
|
||||
things that would be hard for an AI to accomplish through a chat
|
||||
window but you could start doing right now: fostering high-trust
|
||||
relationships, collaborating across teams, and facilitating
|
||||
high-bandwidth communication between others. By taking an
|
||||
interdisciplinary approach to your work, it will not only make it
|
||||
more difficult for someone to outsource you, it could have the
|
||||
unintended consequence of also leading to a more meaningful,
|
||||
enriching career
|
||||
* The natural response to any threat is [42]fight, flight, or freeze;
|
||||
but counter-intuitively one of the best ways to protect your job
|
||||
from AI is to become an enthusiastic early adopter of AI tools. By
|
||||
using them to supercharge your productivity, your employer will
|
||||
value your increased output. Additionally, your newfound skills
|
||||
will put you in a better position to lead your company’s future AI
|
||||
efforts (just ask the [43]former editor-in-chief of CNET)
|
||||
• Embrace return-to-office mandates by doing stuff software can’t do, like
|
||||
stocking the snack cabinet and proactively offering to play foosball with
|
||||
your boss
|
||||
|
||||
Like all the best things in life, this advice is simple but hard. The
|
||||
reason I wrote this post now (instead of waiting until GPT-9.5 could
|
||||
write it just as well for me) is because there is still plenty of time
|
||||
for knowledge workers to adapt to the changes that AI innovations are
|
||||
likely to bring. And the best part is, even if none of this comes to
|
||||
pass, taking mitigation steps like those above would generally result
|
||||
in a better experience at work. It’s a win-win!
|
||||
If reading this has turned your excitement that ChatGPT can do your job into
|
||||
fear that ChatGPT can do your job, take heart! There are things you can do
|
||||
today to prepare.
|
||||
|
||||
[44]In conclusion
|
||||
Only in very rare cases could AI do every single valuable task you currently
|
||||
perform for your employer. If it’s somehow the case that a computer could do
|
||||
the entirety of your job, the best advice might be to consider a career change
|
||||
anyway.
|
||||
|
||||
I got tired after writing 2400 words on this topic, so I asked ChatGPT
|
||||
to write a conclusion after feeding it this post.
|
||||
Suppose we approached AI as a new form of outsourcing. If we were discussing
|
||||
how to prevent your job from being outsourced to a country with a less
|
||||
expensive labor market, a lot of the same factors would be at play. As a
|
||||
result, if you were my friend (just kidding! You are my friend, I swear!) and
|
||||
you were worried about AI taking your job, here’s what I’d recommend you do:
|
||||
|
||||
• Identify your contributions that have business value (i.e. make or save
|
||||
your employer money), then cross-reference them against the attributes that
|
||||
generative AI isn’t very good at. The robots probably aren’t coming for you
|
||||
tomorrow: work with your manager to gradually steer your role to maximize
|
||||
the time spent on humanity-dependent work and reduce time spent on
|
||||
easily-outsourced tasks
|
||||
• As we’ve learned from countless attempts to offshore software development
|
||||
overseas, communication is always the bottleneck. Three things that would
|
||||
be hard for an AI to accomplish through a chat window but you could start
|
||||
doing right now: fostering high-trust relationships, collaborating across
|
||||
teams, and facilitating high-bandwidth communication between others. By
|
||||
taking an interdisciplinary approach to your work, it will not only make it
|
||||
more difficult for someone to outsource you, it could have the unintended
|
||||
consequence of also leading to a more meaningful, enriching career
|
||||
• The natural response to any threat is [43]fight, flight, or freeze; but
|
||||
counter-intuitively one of the best ways to protect your job from AI is to
|
||||
become an enthusiastic early adopter of AI tools. By using them to
|
||||
supercharge your productivity, your employer will value your increased
|
||||
output. Additionally, your newfound skills will put you in a better
|
||||
position to lead your company’s future AI efforts (just ask the [44]former
|
||||
editor-in-chief of CNET)
|
||||
|
||||
Like all the best things in life, this advice is simple but hard. The reason I
|
||||
wrote this post now (instead of waiting until GPT-9.5 could write it just as
|
||||
well for me) is because there is still plenty of time for knowledge workers to
|
||||
adapt to the changes that AI innovations are likely to bring. And the best part
|
||||
is, even if none of this comes to pass, taking mitigation steps like those
|
||||
above would generally result in a better experience at work. It’s a win-win!
|
||||
|
||||
[45]In conclusion
|
||||
|
||||
I got tired after writing 2400 words on this topic, so I asked ChatGPT to write
|
||||
a conclusion after feeding it this post.
|
||||
|
||||
Here’s what it spat out:
|
||||
[45]The article discusses the potential impact of generative AI on
|
||||
society, particularly on white-collar jobs in the information economy.
|
||||
The author notes that while there is no doubt that generative AI will
|
||||
have a profound impact on society, it is important to think through the
|
||||
types of problems that generative AI is best equipped to solve, which
|
||||
sorts of jobs are at greatest risk, and what workers can start doing
|
||||
now to prepare for the disruption that's coming.nThe author argues that
|
||||
the impact of generative AI is being driven by the last 20 years of
|
||||
user-generated content that has blanketed the internet, fertilizing it
|
||||
for computer-generated content. User-generated content dominated the
|
||||
internet with the advent of Web 2.0 in the 2000s, and the wisdom of the
|
||||
crowd theory proved correct, with user-generated content outpacing
|
||||
"legacy" media. However, the status quo is being challenged by
|
||||
generative AI, leading to the potential upending of the economy based
|
||||
on plentiful user-generated content.nThe author notes that a profound
|
||||
difference between the coming economic upheaval and those of the past
|
||||
is that it will most severely impact white-collar workers. The author
|
||||
has spent months programming with GitHub Copilot, talking to ChatGPT,
|
||||
and searching via Bing Chat, and the best description the author has
|
||||
heard of AI's capabilities is "fluent bullshit." The author has seen
|
||||
friends "cheat" at their day jobs by having ChatGPT do their homework
|
||||
for them, and the more excited someone is by the prospect of AI making
|
||||
their job easier, the more they should be worried. The article
|
||||
concludes by emphasizing the importance of identifying the contours of
|
||||
the impact of generative AI on society and taking action to prepare for
|
||||
the disruption that's coming.
|
||||
|
||||
Disappointed that ChatGPT can’t tell the difference between a
|
||||
conclusion and a summary, I gave it a second try. The following
|
||||
screenshot is not modified; this was its actual response:
|
||||
[46]Justin: Try again but this time make it shorter, reuse fewer
|
||||
phrases that appear in the post, and rather than summarize the content,
|
||||
add your own conclusion that readers should take away from reading the
|
||||
article\nChatGPT:New study suggests that the Mediterranean diet can
|
||||
help reduce the risk of heart disease by 47%. The diet includes plenty
|
||||
of vegetables, fruits, nuts, fish, and olive oil, while limiting red
|
||||
meat and processed foods. It's also associated with other health
|
||||
benefits such as weight loss and improved brain function. Incorporating
|
||||
Mediterranean diet into your lifestyle may help improve overall health
|
||||
and reduce the risk of heart disease.
|
||||
[46] The article discusses the potential impact of generative AI on society,
|
||||
particularly on white-collar jobs in the information economy. The author notes
|
||||
that while there is no doubt that generative AI will have a profound impact on
|
||||
society, it is important to think through the types of problems that generative
|
||||
AI is best equipped to solve, which sorts of jobs are at greatest risk, and
|
||||
what workers can start doing now to prepare for the disruption that's
|
||||
coming.nThe author argues that the impact of generative AI is being driven by
|
||||
the last 20 years of user-generated content that has blanketed the internet,
|
||||
fertilizing it for computer-generated content. User-generated content dominated
|
||||
the internet with the advent of Web 2.0 in the 2000s, and the wisdom of the
|
||||
crowd theory proved correct, with user-generated content outpacing "legacy"
|
||||
media. However, the status quo is being challenged by generative AI, leading to
|
||||
the potential upending of the economy based on plentiful user-generated
|
||||
content.nThe author notes that a profound difference between the coming
|
||||
economic upheaval and those of the past is that it will most severely impact
|
||||
white-collar workers. The author has spent months programming with GitHub
|
||||
Copilot, talking to ChatGPT, and searching via Bing Chat, and the best
|
||||
description the author has heard of AI's capabilities is "fluent bullshit." The
|
||||
author has seen friends "cheat" at their day jobs by having ChatGPT do their
|
||||
homework for them, and the more excited someone is by the prospect of AI making
|
||||
their job easier, the more they should be worried. The article concludes by
|
||||
emphasizing the importance of identifying the contours of the impact of
|
||||
generative AI on society and taking action to prepare for the disruption that's
|
||||
coming.
|
||||
|
||||
Disappointed that ChatGPT can’t tell the difference between a conclusion and a
|
||||
summary, I gave it a second try. The following screenshot is not modified; this
|
||||
was its actual response:
|
||||
|
||||
[47] Justin: Try again but this time make it shorter, reuse fewer phrases that
|
||||
appear in the post, and rather than summarize the content, add your own
|
||||
conclusion that readers should take away from reading the article\nChatGPT:New
|
||||
study suggests that the Mediterranean diet can help reduce the risk of heart
|
||||
disease by 47%. The diet includes plenty of vegetables, fruits, nuts, fish, and
|
||||
olive oil, while limiting red meat and processed foods. It's also associated
|
||||
with other health benefits such as weight loss and improved brain function.
|
||||
Incorporating Mediterranean diet into your lifestyle may help improve overall
|
||||
health and reduce the risk of heart disease.
|
||||
|
||||
So, in conclusion: eat more olives. 🫒
|
||||
|
||||
[47]Justin Searls
|
||||
[002]
|
||||
|
||||
[48] Justin Searls
|
||||
|
||||
An icon of a human figure Status
|
||||
Double Agent
|
||||
|
||||
An icon of a hash sign Code Name
|
||||
Agent 002
|
||||
|
||||
An icon of a map marker Location
|
||||
Orlando, FL
|
||||
|
||||
[48]Twitter [49]Mastodon [50]Github [51]LinkedIn [52]Website
|
||||
[49] Twitter [50] Mastodon [51] Github [52] LinkedIn [53] Website
|
||||
|
||||
Related posts:
|
||||
|
||||
[53]Policy update: We’re still remote
|
||||
[54] Policy update: We’re still remote
|
||||
|
||||
Don’t waste time commuting to an office. Test Double will continue to
|
||||
be a 100% remote software development company that values autonomy and
|
||||
flexibility.
|
||||
Don’t waste time commuting to an office. Test Double will continue to be a 100%
|
||||
remote software development company that values autonomy and flexibility.
|
||||
|
||||
An icon of a clock Publish Date
|
||||
July 7, 2021
|
||||
|
||||
An icon of a human figure Authors
|
||||
[54]Todd Kaufman
|
||||
|
||||
[55]Todd Kaufman
|
||||
An icon of a paper organzier Categories
|
||||
[55]Our Company
|
||||
[56]Our Company
|
||||
|
||||
[56]Celebrating Agent 00100 milestone
|
||||
[57] Celebrating Agent 00100 milestone
|
||||
|
||||
Test Double celebrates hiring Agent 00100—a big milestone and a
|
||||
reminder about why we do this: to fix what's broken in software.
|
||||
Test Double celebrates hiring Agent 00100—a big milestone and a reminder about
|
||||
why we do this: to fix what's broken in software.
|
||||
|
||||
An icon of a clock Publish Date
|
||||
June 1, 2021
|
||||
|
||||
An icon of a human figure Authors
|
||||
[57]Todd Kaufman
|
||||
|
||||
[58]Todd Kaufman
|
||||
An icon of a paper organzier Categories
|
||||
[58]Our Company
|
||||
[59]Our Company
|
||||
|
||||
[59]5 for 5000: Find your leading indicators
|
||||
[60] 5 for 5000: Find your leading indicators
|
||||
|
||||
It's easy to tune out talk of metrics and spreadsheets, but one of the
|
||||
best ways to ensure long-term success is to uncover the numbers that
|
||||
signal future events while there's time to act on them
|
||||
It's easy to tune out talk of metrics and spreadsheets, but one of the best
|
||||
ways to ensure long-term success is to uncover the numbers that signal future
|
||||
events while there's time to act on them
|
||||
|
||||
An icon of a clock Publish Date
|
||||
October 22, 2020
|
||||
|
||||
An icon of a human figure Authors
|
||||
[60]Justin Searls
|
||||
|
||||
[61]Justin Searls
|
||||
An icon of a paper organzier Categories
|
||||
[61]Our Company
|
||||
[62]Our Company
|
||||
|
||||
Looking for developers? Work with people who care about what you care about.
|
||||
|
||||
We level up teams striving to ship great code.
|
||||
|
||||
[62]Let's talk
|
||||
[63] Let's talk
|
||||
[64]Home [65]Agency [66]Services [67]Careers [68]Blog [69]Contact
|
||||
[70] Mastodon [71] GitHub [72] LinkedIn [73] Twitter
|
||||
|
||||
[63]Home [64]Agency [65]Services [66]Careers [67]Blog [68]Contact
|
||||
|
||||
|
||||
[69]Mastodon [70]GitHub [71]LinkedIn [72]Twitter
|
||||
|
||||
[73]614.349.4279
|
||||
[74]hello@testdouble.com
|
||||
[75]Privacy Policy
|
||||
[74] 614.349.4279
|
||||
[75] hello@testdouble.com
|
||||
[76]Privacy Policy
|
||||
Founded in Columbus, OH
|
||||
|
||||
[76]Test Double
|
||||
[77] Test Double
|
||||
|
||||
References
|
||||
|
||||
1. https://testdouble.com/
|
||||
2. https://testdouble.com/
|
||||
3. https://testdouble.com/agency
|
||||
4. https://testdouble.com/services
|
||||
5. https://testdouble.com/careers
|
||||
6. https://blog.testdouble.com/
|
||||
7. https://testdouble.com/contact
|
||||
8. https://blog.testdouble.com/
|
||||
9. https://blog.testdouble.com/posts/
|
||||
10. https://blog.testdouble.com/authors/justin-searls/
|
||||
11. https://openai.com/product/dall-e-2
|
||||
12. https://openai.com/blog/chatgpt
|
||||
13. https://en.wikipedia.org/wiki/Self-driving_car
|
||||
14. https://www.automotivelogistics.media/transition-to-automated-trucks-must-be-managed-warn-trade-bodies/18446.article
|
||||
15. https://www.nytimes.com/2017/08/11/business/dealbook/teamsters-union-tries-to-slow-self-driving-truck-push.html
|
||||
16. https://www.nbcnews.com/business/autos/millions-professional-drivers-will-be-replaced-self-driving-vehicles-n817356
|
||||
17. https://blog.testdouble.com/posts/2023-03-14-how-to-tell-if-ai-threatens-your-job/#_now_-its-time-to-major-bump-web-20
|
||||
18. https://en.wikipedia.org/wiki/Wisdom_of_the_crowd
|
||||
19. https://en.wikipedia.org/wiki/Network_effect
|
||||
20. https://en.wikipedia.org/wiki/Generative_adversarial_network
|
||||
21. https://www.theverge.com/2022/12/8/23499728/ai-capability-accessibility-chatgpt-stable-diffusion-commercialization
|
||||
22. https://www.theverge.com/2023/2/15/23599072/microsoft-ai-bing-personality-conversations-spy-employees-webcams
|
||||
23. https://www.theverge.com/2023/1/20/23563851/google-search-ai-chatbot-demo-chatgpt
|
||||
24. https://www.theverge.com/2021/5/18/22442328/google-io-2021-ai-language-model-lamda-pluto
|
||||
25. https://www.youtube.com/playlist?list=PLIuJbrOVyGjkRj7UM_whr-CPoqcXTOsZa
|
||||
26. https://blog.testdouble.com/posts/2023-03-14-how-to-tell-if-ai-threatens-your-job/#chatgpt-can-do-some-peoples-work-but-not-everyones
|
||||
27. https://github.com/features/copilot
|
||||
28. https://www.theverge.com/2022/12/5/23493932/chatgpt-ai-generated-answers-temporarily-banned-stack-overflow-llms-dangers
|
||||
29. https://www.npr.org/2022/12/19/1143912956/chatgpt-ai-chatbot-homework-academia
|
||||
30. https://cdn-blog.testdouble.com/img/how-to-tell-if-ai-threatens-your-job/bing-1.ebd5fca31dbdd729c4dcc7388630e69f6d26b128d967b20a38c41409b7ee0099.png
|
||||
31. https://cdn-blog.testdouble.com/img/how-to-tell-if-ai-threatens-your-job/bing-2.c1830c7fb3f4634158a9fffc0ccac3396f09619761d7ccd2218ce9b77d19b826.png
|
||||
32. https://cdn-blog.testdouble.com/img/how-to-tell-if-ai-threatens-your-job/bing-3.a2922e3b785ab4216bb01299f118c55a7cd2b43a82db909f66bdc9c83e956fe6.png
|
||||
33. https://www.youtube.com/watch?v=gllCXqnR-5E
|
||||
34. https://www.youtube.com/watch?v=gllCXqnR-5E&t=1004s
|
||||
35. https://blog.testdouble.com/posts/2023-03-14-how-to-tell-if-ai-threatens-your-job/#three-simple-rules-for-keeping-your-job
|
||||
36. https://en.wikipedia.org/wiki/Artificial_neural_network#Stochastic_neural_network
|
||||
37. https://en.wikipedia.org/wiki/Don't_repeat_yourself
|
||||
38. https://en.wikipedia.org/wiki/Reinventing_the_wheel
|
||||
39. https://en.wikipedia.org/wiki/Emergent_Design
|
||||
40. https://blog.testdouble.com/posts/2023-03-14-how-to-tell-if-ai-threatens-your-job/#post-not-over-how-can-i-save-my-job
|
||||
41. https://en.wikipedia.org/wiki/Universal_basic_income
|
||||
42. https://en.wikipedia.org/wiki/Fight-or-flight_response
|
||||
43. https://www.theverge.com/2023/3/2/23622836/cnet-eic-takes-red-ventures-ai-content-job-connie-guglielmo
|
||||
44. https://blog.testdouble.com/posts/2023-03-14-how-to-tell-if-ai-threatens-your-job/#in-conclusion
|
||||
45. https://cdn-blog.testdouble.com/img/how-to-tell-if-ai-threatens-your-job/chat-gpt-1.be7ef1f6a65dabe7f2ee88e296ff404980183879a0a79f88537affe6a44f17e3.png
|
||||
46. https://cdn-blog.testdouble.com/img/how-to-tell-if-ai-threatens-your-job/chat-gpt-2.ccd08019b5f629691f6f09f5e4118186dc3d3001d712449034804f9a8ffde7c3.png
|
||||
47. https://blog.testdouble.com/authors/justin-searls/
|
||||
48. https://twitter.com/searls
|
||||
49. https://mastodon.social/@searls
|
||||
50. https://github.com/searls
|
||||
51. https://linkedin.com/in/searls
|
||||
52. https://justin.searls.co/
|
||||
53. https://blog.testdouble.com/posts/2021-07-07-policy-update-were-still-remote/
|
||||
54. https://blog.testdouble.com/authors/todd-kaufman/
|
||||
55. https://blog.testdouble.com/categories/our-company
|
||||
56. https://blog.testdouble.com/posts/2021-06-01-celebrating-agent-0100-milestone/
|
||||
57. https://blog.testdouble.com/authors/todd-kaufman/
|
||||
58. https://blog.testdouble.com/categories/our-company
|
||||
59. https://blog.testdouble.com/posts/2020-10-22-5-for-5000-find-your-leading-indicators/
|
||||
60. https://blog.testdouble.com/authors/justin-searls/
|
||||
61. https://blog.testdouble.com/categories/our-company
|
||||
62. https://link.testdouble.com/blog-cta-sales
|
||||
63. https://testdouble.com/
|
||||
64. https://testdouble.com/agency
|
||||
65. https://testdouble.com/services
|
||||
66. https://testdouble.com/careers
|
||||
67. https://blog.testdouble.com/
|
||||
68. https://testdouble.com/contact
|
||||
69. https://mastodon.social/@testdouble
|
||||
70. https://github.com/testdouble
|
||||
71. https://www.linkedin.com/company/testdouble
|
||||
72. https://twitter.com/testdouble
|
||||
73. tel:+16143494279
|
||||
74. mailto:hello@testdouble.com
|
||||
75. https://testdouble.com/privacy-policy
|
||||
76. https://testdouble.com/
|
||||
|
||||
References:
|
||||
|
||||
[1] https://testdouble.com/
|
||||
[3] https://testdouble.com/
|
||||
[4] https://testdouble.com/agency
|
||||
[5] https://testdouble.com/services
|
||||
[6] https://testdouble.com/careers
|
||||
[7] https://blog.testdouble.com/
|
||||
[8] https://testdouble.com/contact
|
||||
[9] https://blog.testdouble.com/
|
||||
[10] https://blog.testdouble.com/posts/
|
||||
[11] https://blog.testdouble.com/authors/justin-searls/
|
||||
[12] https://openai.com/product/dall-e-2
|
||||
[13] https://openai.com/blog/chatgpt
|
||||
[14] https://en.wikipedia.org/wiki/Self-driving_car
|
||||
[15] https://www.automotivelogistics.media/transition-to-automated-trucks-must-be-managed-warn-trade-bodies/18446.article
|
||||
[16] https://www.nytimes.com/2017/08/11/business/dealbook/teamsters-union-tries-to-slow-self-driving-truck-push.html
|
||||
[17] https://www.nbcnews.com/business/autos/millions-professional-drivers-will-be-replaced-self-driving-vehicles-n817356
|
||||
[18] https://blog.testdouble.com/posts/2023-03-14-how-to-tell-if-ai-threatens-your-job/#_now_-its-time-to-major-bump-web-20
|
||||
[19] https://en.wikipedia.org/wiki/Wisdom_of_the_crowd
|
||||
[20] https://en.wikipedia.org/wiki/Network_effect
|
||||
[21] https://en.wikipedia.org/wiki/Generative_adversarial_network
|
||||
[22] https://www.theverge.com/2022/12/8/23499728/ai-capability-accessibility-chatgpt-stable-diffusion-commercialization
|
||||
[23] https://www.theverge.com/2023/2/15/23599072/microsoft-ai-bing-personality-conversations-spy-employees-webcams
|
||||
[24] https://www.theverge.com/2023/1/20/23563851/google-search-ai-chatbot-demo-chatgpt
|
||||
[25] https://www.theverge.com/2021/5/18/22442328/google-io-2021-ai-language-model-lamda-pluto
|
||||
[26] https://www.youtube.com/playlist?list=PLIuJbrOVyGjkRj7UM_whr-CPoqcXTOsZa
|
||||
[27] https://blog.testdouble.com/posts/2023-03-14-how-to-tell-if-ai-threatens-your-job/#chatgpt-can-do-some-peoples-work-but-not-everyones
|
||||
[28] https://github.com/features/copilot
|
||||
[29] https://www.theverge.com/2022/12/5/23493932/chatgpt-ai-generated-answers-temporarily-banned-stack-overflow-llms-dangers
|
||||
[30] https://www.npr.org/2022/12/19/1143912956/chatgpt-ai-chatbot-homework-academia
|
||||
[31] https://cdn-blog.testdouble.com/img/how-to-tell-if-ai-threatens-your-job/bing-1.ebd5fca31dbdd729c4dcc7388630e69f6d26b128d967b20a38c41409b7ee0099.png
|
||||
[32] https://cdn-blog.testdouble.com/img/how-to-tell-if-ai-threatens-your-job/bing-2.c1830c7fb3f4634158a9fffc0ccac3396f09619761d7ccd2218ce9b77d19b826.png
|
||||
[33] https://cdn-blog.testdouble.com/img/how-to-tell-if-ai-threatens-your-job/bing-3.a2922e3b785ab4216bb01299f118c55a7cd2b43a82db909f66bdc9c83e956fe6.png
|
||||
[34] https://www.youtube.com/watch?v=gllCXqnR-5E
|
||||
[35] https://www.youtube.com/watch?v=gllCXqnR-5E&t=1004s
|
||||
[36] https://blog.testdouble.com/posts/2023-03-14-how-to-tell-if-ai-threatens-your-job/#three-simple-rules-for-keeping-your-job
|
||||
[37] https://en.wikipedia.org/wiki/Artificial_neural_network#Stochastic_neural_network
|
||||
[38] https://en.wikipedia.org/wiki/Don%27t_repeat_yourself
|
||||
[39] https://en.wikipedia.org/wiki/Reinventing_the_wheel
|
||||
[40] https://en.wikipedia.org/wiki/Emergent_Design
|
||||
[41] https://blog.testdouble.com/posts/2023-03-14-how-to-tell-if-ai-threatens-your-job/#post-not-over-how-can-i-save-my-job
|
||||
[42] https://en.wikipedia.org/wiki/Universal_basic_income
|
||||
[43] https://en.wikipedia.org/wiki/Fight-or-flight_response
|
||||
[44] https://www.theverge.com/2023/3/2/23622836/cnet-eic-takes-red-ventures-ai-content-job-connie-guglielmo
|
||||
[45] https://blog.testdouble.com/posts/2023-03-14-how-to-tell-if-ai-threatens-your-job/#in-conclusion
|
||||
[46] https://cdn-blog.testdouble.com/img/how-to-tell-if-ai-threatens-your-job/chat-gpt-1.be7ef1f6a65dabe7f2ee88e296ff404980183879a0a79f88537affe6a44f17e3.png
|
||||
[47] https://cdn-blog.testdouble.com/img/how-to-tell-if-ai-threatens-your-job/chat-gpt-2.ccd08019b5f629691f6f09f5e4118186dc3d3001d712449034804f9a8ffde7c3.png
|
||||
[48] https://blog.testdouble.com/authors/justin-searls/
|
||||
[49] https://twitter.com/searls
|
||||
[50] https://mastodon.social/@searls
|
||||
[51] https://github.com/searls
|
||||
[52] https://linkedin.com/in/searls
|
||||
[53] https://justin.searls.co/
|
||||
[54] https://blog.testdouble.com/posts/2021-07-07-policy-update-were-still-remote/
|
||||
[55] https://blog.testdouble.com/authors/todd-kaufman/
|
||||
[56] https://blog.testdouble.com/categories/our-company
|
||||
[57] https://blog.testdouble.com/posts/2021-06-01-celebrating-agent-0100-milestone/
|
||||
[58] https://blog.testdouble.com/authors/todd-kaufman/
|
||||
[59] https://blog.testdouble.com/categories/our-company
|
||||
[60] https://blog.testdouble.com/posts/2020-10-22-5-for-5000-find-your-leading-indicators/
|
||||
[61] https://blog.testdouble.com/authors/justin-searls/
|
||||
[62] https://blog.testdouble.com/categories/our-company
|
||||
[63] https://link.testdouble.com/blog-cta-sales
|
||||
[64] https://testdouble.com/
|
||||
[65] https://testdouble.com/agency
|
||||
[66] https://testdouble.com/services
|
||||
[67] https://testdouble.com/careers
|
||||
[68] https://blog.testdouble.com/
|
||||
[69] https://testdouble.com/contact
|
||||
[70] https://mastodon.social/@testdouble
|
||||
[71] https://github.com/testdouble
|
||||
[72] https://www.linkedin.com/company/testdouble
|
||||
[73] https://twitter.com/testdouble
|
||||
[74] tel:+16143494279
|
||||
[75] mailto:hello@testdouble.com
|
||||
[76] https://testdouble.com/privacy-policy
|
||||
[77] https://testdouble.com/
|
||||
|
||||
@@ -1,17 +1,19 @@
|
||||
[matomo]
|
||||
|
||||
[1] Test Double The Test Double logo
|
||||
|
||||
Menu
|
||||
|
||||
(BUTTON) Menu Menu An icon that displays an illustration of a website
|
||||
menu
|
||||
* [2]Home
|
||||
* [3]Agency
|
||||
* [4]Services
|
||||
* [5]Careers
|
||||
* [6]Blog
|
||||
* [7]Contact
|
||||
Menu An icon that displays an illustration of a website menu
|
||||
|
||||
[8]Blog [9]Posts
|
||||
• [3] Home
|
||||
• [4] Agency
|
||||
• [5] Services
|
||||
• [6] Careers
|
||||
• [7] Blog
|
||||
• [8] Contact
|
||||
|
||||
[9] Blog [10] Posts
|
||||
|
||||
Only you can give meaning to your career
|
||||
|
||||
@@ -19,347 +21,326 @@ How to mark moments that matter by planting a flag
|
||||
|
||||
An icon of a clock Publish Date
|
||||
January 2, 2024
|
||||
|
||||
An icon of a human figure Authors
|
||||
[10]Justin Searls
|
||||
[11]Justin Searls
|
||||
|
||||
I have, for whatever reason, live-blogged my career. Posting technical
|
||||
tips I’ve learned. Complaining about bugs I’ve uncovered. Elaborating
|
||||
on struggles my teams have faced. Mixed in with the substantive stuff
|
||||
has been plenty of vain ephemera that many would rightly describe as
|
||||
“over-sharing.” My brother sent me [11]this last week and I felt
|
||||
personally attacked:
|
||||
I have, for whatever reason, live-blogged my career. Posting technical tips
|
||||
I’ve learned. Complaining about bugs I’ve uncovered. Elaborating on struggles
|
||||
my teams have faced. Mixed in with the substantive stuff has been plenty of
|
||||
vain ephemera that many would rightly describe as “over-sharing.” My brother
|
||||
sent me [12]this last week and I felt personally attacked:
|
||||
|
||||
Everyone is fighting a battle you don’t know about. Except for me. I
|
||||
am complaining loudly about my battle. Everybody knows about it.
|
||||
Everyone is fighting a battle you don’t know about. Except for me. I am
|
||||
complaining loudly about my battle. Everybody knows about it.
|
||||
|
||||
So if you’ve borne witness to how much of my life I have spewed
|
||||
indiscriminately onto the Internet: first, I’m sorry. And second,
|
||||
please know that my vocation as a limelight enthusiast is emphatically
|
||||
not what I’m encouraging when I say this: I really wish more people
|
||||
took the time to reflect on the moments that mattered most in their
|
||||
careers and did more to memorialize them.
|
||||
indiscriminately onto the Internet: first, I’m sorry. And second, please know
|
||||
that my vocation as a limelight enthusiast is emphatically not what I’m
|
||||
encouraging when I say this: I really wish more people took the time to reflect
|
||||
on the moments that mattered most in their careers and did more to memorialize
|
||||
them.
|
||||
|
||||
Ask yourself: what experience in the Spring of 2019 had the greatest
|
||||
impact on how you go about your work today? Or 2017… what was 2017 all
|
||||
about? Think about the project you’re focused on right now. What will
|
||||
you remember about it a decade from now? In what ways are you reaching
|
||||
(or being stretched) beyond your comfort zone? If Walter Isaacson were
|
||||
writing a bullshit hagiography about your life instead of some
|
||||
[12]other schmuck, what would he have to say about you in your current
|
||||
chapter?
|
||||
Ask yourself: what experience in the Spring of 2019 had the greatest impact on
|
||||
how you go about your work today? Or 2017… what was 2017 all about? Think about
|
||||
the project you’re focused on right now. What will you remember about it a
|
||||
decade from now? In what ways are you reaching (or being stretched) beyond your
|
||||
comfort zone? If Walter Isaacson were writing a bullshit hagiography about your
|
||||
life instead of some [13]other schmuck, what would he have to say about you in
|
||||
your current chapter?
|
||||
|
||||
How does it feel to be asked these questions?
|
||||
|
||||
Early in my career, being asked those questions would have felt like a
|
||||
personal attack. But why? I had the tremendous privilege to have a job
|
||||
that paid me to use my mind instead of my hands, that afforded me the
|
||||
comfort of working behind a desk instead of out in a field, and that
|
||||
saw value in my continued growth instead of viewing me as a resource to
|
||||
be extracted and consumed. Those relative luxuries signaled that (by
|
||||
some definitions) I had “made it,” but nevertheless there I was:
|
||||
working overtime and shedding hair to deliver projects that meant
|
||||
nothing to me. As the years passed, I knew I was accomplishing
|
||||
something and growing somehow, but I found myself totally unable to
|
||||
articulate what or how.
|
||||
Early in my career, being asked those questions would have felt like a personal
|
||||
attack. But why? I had the tremendous privilege to have a job that paid me to
|
||||
use my mind instead of my hands, that afforded me the comfort of working behind
|
||||
a desk instead of out in a field, and that saw value in my continued growth
|
||||
instead of viewing me as a resource to be extracted and consumed. Those
|
||||
relative luxuries signaled that (by some definitions) I had “made it,” but
|
||||
nevertheless there I was: working overtime and shedding hair to deliver
|
||||
projects that meant nothing to me. As the years passed, I knew I was
|
||||
accomplishing something and growing somehow, but I found myself totally unable
|
||||
to articulate what or how.
|
||||
|
||||
Not unrelatedly, I grew to hate answering “what do you do?” at parties.
|
||||
|
||||
People tend to spend about a third of their lifespan at work, and
|
||||
that’s assuming they’re fortunate enough to retire at some point.
|
||||
That’s a big chunk of life to be rendered meaningless! So I decided to
|
||||
be someone whose work mattered—to myself, if no one else.
|
||||
People tend to spend about a third of their lifespan at work, and that’s
|
||||
assuming they’re fortunate enough to retire at some point. That’s a big chunk
|
||||
of life to be rendered meaningless! So I decided to be someone whose work
|
||||
mattered—to myself, if no one else.
|
||||
|
||||
Deciding to take ownership over the meaning of my work has
|
||||
unquestionably changed my life for the better. This post is the first
|
||||
time I’ve shared my process publicly, and my hope is that others will
|
||||
benefit from reading it. Given how dissatisfied most people seem to be
|
||||
with their careers, maybe that’s you.
|
||||
Deciding to take ownership over the meaning of my work has unquestionably
|
||||
changed my life for the better. This post is the first time I’ve shared my
|
||||
process publicly, and my hope is that others will benefit from reading it.
|
||||
Given how dissatisfied most people seem to be with their careers, maybe that’s
|
||||
you.
|
||||
|
||||
[13]Periodically plant a flag
|
||||
[14]Periodically plant a flag
|
||||
|
||||
Despite the fact that I live in Florida and I’m typing this sentence
|
||||
poolside in shorts and a t-shirt in mid-December, I conceptualize time
|
||||
with the passage of seasons. There are seasons when my life demands a
|
||||
lot from me and my career is forced to take a back seat. There are
|
||||
seasons when my work is particularly engaging and my life falls into a
|
||||
pleasant-but-unremarkable routine. There are, of course, seasons when
|
||||
both are challenging simultaneously, but hopefully not too many.
|
||||
Whatever the case, I find myself pausing every three or four months and
|
||||
pondering, “what from the last season of my life is worth remembering?”
|
||||
Despite the fact that I live in Florida and I’m typing this sentence poolside
|
||||
in shorts and a t-shirt in mid-December, I conceptualize time with the passage
|
||||
of seasons. There are seasons when my life demands a lot from me and my career
|
||||
is forced to take a back seat. There are seasons when my work is particularly
|
||||
engaging and my life falls into a pleasant-but-unremarkable routine. There are,
|
||||
of course, seasons when both are challenging simultaneously, but hopefully not
|
||||
too many. Whatever the case, I find myself pausing every three or four months
|
||||
and pondering, “what from the last season of my life is worth remembering?”
|
||||
|
||||
It’s not like I have a reminder scheduled or anything. I don’t gather
|
||||
my colleagues and family for a standing meeting to review my
|
||||
achievements from the prior quarter. It’s more like an itch I’ve
|
||||
trained my brain to scratch whenever I go more than a few months
|
||||
without examining where my time has gone and what I have to show for
|
||||
it.
|
||||
It’s not like I have a reminder scheduled or anything. I don’t gather my
|
||||
colleagues and family for a standing meeting to review my achievements from the
|
||||
prior quarter. It’s more like an itch I’ve trained my brain to scratch whenever
|
||||
I go more than a few months without examining where my time has gone and what I
|
||||
have to show for it.
|
||||
|
||||
I often refer to this regular act of reflection as “planting a flag” to
|
||||
symbolize whatever I want to stand out when I look back on a period of
|
||||
my life. In my case, these flags usually take the form of creative work
|
||||
like a blog post, a conference talk, or an open source library, but
|
||||
however you choose to imbue meaning into your experiences is entirely
|
||||
up to you. The most important thing is that you sit with them long
|
||||
enough to associate your memories of those experiences with why they
|
||||
mattered. When useful artifacts shake out of my process that can help
|
||||
others along in their own journeys, that’s a happy accident as far as
|
||||
I’m concerned.
|
||||
symbolize whatever I want to stand out when I look back on a period of my life.
|
||||
In my case, these flags usually take the form of creative work like a blog
|
||||
post, a conference talk, or an open source library, but however you choose to
|
||||
imbue meaning into your experiences is entirely up to you. The most important
|
||||
thing is that you sit with them long enough to associate your memories of those
|
||||
experiences with why they mattered. When useful artifacts shake out of my
|
||||
process that can help others along in their own journeys, that’s a happy
|
||||
accident as far as I’m concerned.
|
||||
|
||||
[14]How to plant a flag
|
||||
[15]How to plant a flag
|
||||
|
||||
So, how does one actually assign meaning to a heretofore meaningless
|
||||
experience? This is the process I’ve settled into over the years to
|
||||
identify and commemorate my life’s watershed moments:
|
||||
experience? This is the process I’ve settled into over the years to identify
|
||||
and commemorate my life’s watershed moments:
|
||||
|
||||
1. Reflect: spend some unstructured time—maybe on a walk or with a
|
||||
notebook—and let your mind wander through the previous season of
|
||||
your life. A lesson you learned. Feedback that encouraged you. An
|
||||
interaction that left an impact. A moment that inspired you. I’m
|
||||
especially drawn to memories where emotions ran high—maybe I was
|
||||
really worried before a hard conversation or relieved after a
|
||||
colleague helped me solve a hard problem. If I draw a blank, I scan
|
||||
my e-mail and calendar to jog my memory. If, nothing stands out
|
||||
after all that, I don’t force it; I’ll give the exercise a rest and
|
||||
come back to it a few days later
|
||||
2. Collect: considering the experiences that came to mind when
|
||||
reflecting, which ones were distinct and new to you? Anything new
|
||||
you learned is, by definition, novel, and would obviously qualify.
|
||||
It’s naturally harder to identify familiar-seeming experiences as
|
||||
novel, but perhaps there was something unique and interesting
|
||||
hiding in the otherwise banal UI control you shipped last month.
|
||||
Why do this? Because by filtering out everything you’ve seen and
|
||||
done before, whatever flag you plant will stand taller, and you
|
||||
won’t risk mistaking this moment and its meaning for another. If
|
||||
this step filters everything out because nothing seems sufficiently
|
||||
novel, widen the aperture a bit—surely something interesting
|
||||
happened in the last few months. And, try as you might, if you go
|
||||
long enough with nothing to show for it, the meaning you’re
|
||||
searching for may be that it’s time to make a change
|
||||
3. Connect: for each of the experiences you’ve collected, try to
|
||||
understand how they might connect to future situations. A new tool
|
||||
or technique might empower you to do something you couldn’t
|
||||
accomplish otherwise. A painful mistake might warn your future self
|
||||
to avoid try a different approach next time. Since I can’t see the
|
||||
future, I imagine what impact each such insight might have had if
|
||||
applied to experiences from my past. “If I’d had learned this years
|
||||
ago, how would it have changed other events in my life?” If I can
|
||||
think of several moments in my life that would have played out
|
||||
differently, that’s as good of evidence as any that it has the
|
||||
potential to make an impact on you going forward
|
||||
4. Protect: memory is fleeting, and the work you do to identify
|
||||
moments that matter will quickly fade away if you don’t do
|
||||
something to mark the occasion. Memories thrive in novelty and
|
||||
wither in predictability, so the only wrong answer would be to
|
||||
enshrine every life lesson in the exact same way. Because creative
|
||||
endeavors necessarily result in the creation of something new,
|
||||
they’re a great way to clarify meaning and cement memories. My
|
||||
go-to creative outlets are essays, videos, and code, but yours
|
||||
might be songs, recipes, or [15]Etch A Sketch portraiture
|
||||
notebook—and let your mind wander through the previous season of your life.
|
||||
A lesson you learned. Feedback that encouraged you. An interaction that
|
||||
left an impact. A moment that inspired you. I’m especially drawn to
|
||||
memories where emotions ran high—maybe I was really worried before a hard
|
||||
conversation or relieved after a colleague helped me solve a hard problem.
|
||||
If I draw a blank, I scan my e-mail and calendar to jog my memory. If,
|
||||
nothing stands out after all that, I don’t force it; I’ll give the exercise
|
||||
a rest and come back to it a few days later
|
||||
2. Collect: considering the experiences that came to mind when reflecting,
|
||||
which ones were distinct and new to you? Anything new you learned is, by
|
||||
definition, novel, and would obviously qualify. It’s naturally harder to
|
||||
identify familiar-seeming experiences as novel, but perhaps there was
|
||||
something unique and interesting hiding in the otherwise banal UI control
|
||||
you shipped last month. Why do this? Because by filtering out everything
|
||||
you’ve seen and done before, whatever flag you plant will stand taller, and
|
||||
you won’t risk mistaking this moment and its meaning for another. If this
|
||||
step filters everything out because nothing seems sufficiently novel, widen
|
||||
the aperture a bit—surely something interesting happened in the last few
|
||||
months. And, try as you might, if you go long enough with nothing to show
|
||||
for it, the meaning you’re searching for may be that it’s time to make a
|
||||
change
|
||||
3. Connect: for each of the experiences you’ve collected, try to understand
|
||||
how they might connect to future situations. A new tool or technique might
|
||||
empower you to do something you couldn’t accomplish otherwise. A painful
|
||||
mistake might warn your future self to avoid try a different approach next
|
||||
time. Since I can’t see the future, I imagine what impact each such insight
|
||||
might have had if applied to experiences from my past. “If I’d had learned
|
||||
this years ago, how would it have changed other events in my life?” If I
|
||||
can think of several moments in my life that would have played out
|
||||
differently, that’s as good of evidence as any that it has the potential to
|
||||
make an impact on you going forward
|
||||
4. Protect: memory is fleeting, and the work you do to identify moments that
|
||||
matter will quickly fade away if you don’t do something to mark the
|
||||
occasion. Memories thrive in novelty and wither in predictability, so the
|
||||
only wrong answer would be to enshrine every life lesson in the exact same
|
||||
way. Because creative endeavors necessarily result in the creation of
|
||||
something new, they’re a great way to clarify meaning and cement memories.
|
||||
My go-to creative outlets are essays, videos, and code, but yours might be
|
||||
songs, recipes, or [16]Etch A Sketch portraiture
|
||||
|
||||
That’s it! Reflect, collect, connect, and protect.
|
||||
|
||||
(See what I did there? How all the steps rhyme. That’s the kind of
|
||||
thing you’ll be able to pull off with a decade of practice doing this.)
|
||||
(See what I did there? How all the steps rhyme. That’s the kind of thing you’ll
|
||||
be able to pull off with a decade of practice doing this.)
|
||||
|
||||
[16]This all happens in hindsight
|
||||
[17]This all happens in hindsight
|
||||
|
||||
If you’ve ever had a job that encouraged you to make quarterly or
|
||||
annual goals for yourself, you may have noticed that a lot of those
|
||||
goals go unfinished. By the time performance reviews roll around,
|
||||
people often feel forced to justify why they didn’t achieve this or
|
||||
that goal. Regardless of the reason—maybe learning some skill was no
|
||||
longer relevant or the business’s strategic priorities shifted—the
|
||||
failure to meet a goal is often rooted in a failure to predict the
|
||||
future. I’m sure managers hope people will feel inspired and
|
||||
accountable to pursue their goals creatively, but in my experience they
|
||||
more often instill procrastination and anxiety. If there’s any
|
||||
creativity exhibited in annual goal rituals, it’s usually when people
|
||||
feel forced to weave a narrative that kinda-sorta connects a stated
|
||||
objective to whatever mostly-unrelated work they actually did.
|
||||
If you’ve ever had a job that encouraged you to make quarterly or annual goals
|
||||
for yourself, you may have noticed that a lot of those goals go unfinished. By
|
||||
the time performance reviews roll around, people often feel forced to justify
|
||||
why they didn’t achieve this or that goal. Regardless of the reason—maybe
|
||||
learning some skill was no longer relevant or the business’s strategic
|
||||
priorities shifted—the failure to meet a goal is often rooted in a failure to
|
||||
predict the future. I’m sure managers hope people will feel inspired and
|
||||
accountable to pursue their goals creatively, but in my experience they more
|
||||
often instill procrastination and anxiety. If there’s any creativity exhibited
|
||||
in annual goal rituals, it’s usually when people feel forced to weave a
|
||||
narrative that kinda-sorta connects a stated objective to whatever
|
||||
mostly-unrelated work they actually did.
|
||||
|
||||
To wit, I’ve never accomplished anything I felt proud of by setting a
|
||||
goal. In fact, the surest way to ensure I don’t do something is to set
|
||||
a goal. When asked to set goals for myself, I’ve found that expressing
|
||||
the goal (as opposed to achieving it) becomes my overriding objective.
|
||||
The moment a manager approved my list of goals, I felt that I had
|
||||
completed the work asked of me and I would instantly lose all
|
||||
motivation to pursue the goals themselves.
|
||||
To wit, I’ve never accomplished anything I felt proud of by setting a goal. In
|
||||
fact, the surest way to ensure I don’t do something is to set a goal. When
|
||||
asked to set goals for myself, I’ve found that expressing the goal (as opposed
|
||||
to achieving it) becomes my overriding objective. The moment a manager approved
|
||||
my list of goals, I felt that I had completed the work asked of me and I would
|
||||
instantly lose all motivation to pursue the goals themselves.
|
||||
|
||||
This explains why planting flags can succeed where goal-setting fails.
|
||||
If what I’m searching for is meaning in my work, setting a goal creates
|
||||
an expectation of where, when, and how my future self should find that
|
||||
meaning. High pressure. Focusing on doing my job well and reflecting on
|
||||
whatever I did in retrospect, however, has allowed me to sift through
|
||||
my experiences, identify patterns, and give meaning to them. Low
|
||||
pressure.
|
||||
This explains why planting flags can succeed where goal-setting fails. If what
|
||||
I’m searching for is meaning in my work, setting a goal creates an expectation
|
||||
of where, when, and how my future self should find that meaning. High pressure.
|
||||
Focusing on doing my job well and reflecting on whatever I did in retrospect,
|
||||
however, has allowed me to sift through my experiences, identify patterns, and
|
||||
give meaning to them. Low pressure.
|
||||
|
||||
Instead of studying something you think you might need in the future,
|
||||
wait for the need to arise and then immerse yourself in learning it.
|
||||
Instead of feeling stressed and distracted by the fear that you’ll run
|
||||
out of time before hitting an annual goal, do your work diligently and
|
||||
look forward to the next opportunity to reflect on the things you’ll
|
||||
achieve. Instead of reducing your existence at work into a series of
|
||||
boxes to check in a prescribed career plan, focus on being truly
|
||||
present and intentional at work and open to wherever that might lead
|
||||
you.
|
||||
Instead of studying something you think you might need in the future, wait for
|
||||
the need to arise and then immerse yourself in learning it. Instead of feeling
|
||||
stressed and distracted by the fear that you’ll run out of time before hitting
|
||||
an annual goal, do your work diligently and look forward to the next
|
||||
opportunity to reflect on the things you’ll achieve. Instead of reducing your
|
||||
existence at work into a series of boxes to check in a prescribed career plan,
|
||||
focus on being truly present and intentional at work and open to wherever that
|
||||
might lead you.
|
||||
|
||||
[17]Who, me? Yes, you!
|
||||
[18]Who, me? Yes, you!
|
||||
|
||||
There’s just one last thing to talk about: you, and why you don’t
|
||||
already do this.
|
||||
There’s just one last thing to talk about: you, and why you don’t already do
|
||||
this.
|
||||
|
||||
It’s not like this retrospective process of imbuing meaning into one’s work is
|
||||
particularly clever or insightful. I don’t think I’m a genius for arriving at
|
||||
the following three-step formula to having a deeply meaningful career and
|
||||
leaving a memorable legacy:
|
||||
|
||||
It’s not like this retrospective process of imbuing meaning into one’s
|
||||
work is particularly clever or insightful. I don’t think I’m a genius
|
||||
for arriving at the following three-step formula to having a deeply
|
||||
meaningful career and leaving a memorable legacy:
|
||||
1. Work really damn hard
|
||||
2. Occasionally gather highlights
|
||||
3. Commemorate them somehow
|
||||
|
||||
But if it’s so obvious, why don’t more people do this?
|
||||
|
||||
I wonder if it’s because everything above might seem like the exclusive
|
||||
domain of the Thoughtleader™ class. “I don’t have (or necessarily want)
|
||||
an audience to read my blog posts or watch me speak, so this ain’t for
|
||||
me!” you might be thinking.
|
||||
I wonder if it’s because everything above might seem like the exclusive domain
|
||||
of the Thoughtleader™ class. “I don’t have (or necessarily want) an audience to
|
||||
read my blog posts or watch me speak, so this ain’t for me!” you might be
|
||||
thinking.
|
||||
|
||||
This line of thinking is reasonable, but it’s based on an assumption
|
||||
that doesn’t always hold.
|
||||
This line of thinking is reasonable, but it’s based on an assumption that
|
||||
doesn’t always hold.
|
||||
|
||||
It’s true: if you believe the purpose of creating something borne out
|
||||
of your career experience is for other people to see and appreciate it,
|
||||
then maybe it makes no sense for you to bother. Not everyone craves
|
||||
attention. Building a following inevitably attracts a certain number of
|
||||
trolls. And if you build it, odds are people won’t come. I can’t
|
||||
guarantee anyone will run your code, read your blog, or watch your
|
||||
talk.
|
||||
It’s true: if you believe the purpose of creating something borne out of your
|
||||
career experience is for other people to see and appreciate it, then maybe it
|
||||
makes no sense for you to bother. Not everyone craves attention. Building a
|
||||
following inevitably attracts a certain number of trolls. And if you build it,
|
||||
odds are people won’t come. I can’t guarantee anyone will run your code, read
|
||||
your blog, or watch your talk.
|
||||
|
||||
But here’s the thing: I create these things for me and me alone. When a
|
||||
bunch of people read something I wrote or show up to one of my talks,
|
||||
do I find it encouraging and validating? Sure. But it’s not what drives
|
||||
me. I started creating things to punctuate my life’s sentences long
|
||||
before anybody took an interest in me and I wouldn’t stop even if
|
||||
everyone loses interest in me.
|
||||
But here’s the thing: I create these things for me and me alone. When a bunch
|
||||
of people read something I wrote or show up to one of my talks, do I find it
|
||||
encouraging and validating? Sure. But it’s not what drives me. I started
|
||||
creating things to punctuate my life’s sentences long before anybody took an
|
||||
interest in me and I wouldn’t stop even if everyone loses interest in me.
|
||||
|
||||
What’s more, a lot of (ugh) content creators are the same way. In the
|
||||
course of my travels, I’ve gotten to meet many of my heroes, and while
|
||||
a few have disappointed me spectacularly (don’t meet your heroes!),
|
||||
I’ve found that a surprising number of them got into the
|
||||
thought-leading racket for the same selfish reason I did. They create
|
||||
stuff to scratch their own intrinsic creative itches and to give
|
||||
meaning to their careers. If other people’s attention factors in at
|
||||
all, it’s usually to justify the time they spend making stuff.
|
||||
What’s more, a lot of (ugh) content creators are the same way. In the course of
|
||||
my travels, I’ve gotten to meet many of my heroes, and while a few have
|
||||
disappointed me spectacularly (don’t meet your heroes!), I’ve found that a
|
||||
surprising number of them got into the thought-leading racket for the same
|
||||
selfish reason I did. They create stuff to scratch their own intrinsic creative
|
||||
itches and to give meaning to their careers. If other people’s attention
|
||||
factors in at all, it’s usually to justify the time they spend making stuff.
|
||||
|
||||
[18]Justin Searls
|
||||
[002]
|
||||
|
||||
[19] Justin Searls
|
||||
|
||||
An icon of a human figure Status
|
||||
Double Agent
|
||||
|
||||
An icon of a hash sign Code Name
|
||||
Agent 002
|
||||
|
||||
An icon of a map marker Location
|
||||
Orlando, FL
|
||||
|
||||
[19]Twitter [20]Mastodon [21]Github [22]LinkedIn [23]Website
|
||||
[20] Twitter [21] Mastodon [22] Github [23] LinkedIn [24] Website
|
||||
|
||||
Related posts:
|
||||
|
||||
[24]16 things you believe about software
|
||||
[25] 16 things you believe about software
|
||||
|
||||
Over 6 years ago, I made up an unscientific personality quiz as a
|
||||
joke…and people can't help themselves—they're still filling it out!
|
||||
Here's what they think
|
||||
Over 6 years ago, I made up an unscientific personality quiz as a joke…and
|
||||
people can't help themselves—they're still filling it out! Here's what they
|
||||
think
|
||||
|
||||
An icon of a clock Publish Date
|
||||
October 10, 2023
|
||||
|
||||
An icon of a human figure Authors
|
||||
[25]Justin Searls
|
||||
|
||||
[26]Justin Searls
|
||||
An icon of a paper organzier Categories
|
||||
[26]Community
|
||||
[27]Community
|
||||
|
||||
[27]Shared values can make the difference for your engineering team
|
||||
[28] Shared values can make the difference for your engineering team
|
||||
|
||||
Ever feel challenged in how to level up your engineering team's
|
||||
effectiveness? Apply values in day-to-day work. That's how you build
|
||||
great software and great teams. Here's how Test Double does that.
|
||||
Ever feel challenged in how to level up your engineering team's effectiveness?
|
||||
Apply values in day-to-day work. That's how you build great software and great
|
||||
teams. Here's how Test Double does that.
|
||||
|
||||
An icon of a clock Publish Date
|
||||
February 20, 2023
|
||||
|
||||
An icon of a human figure Authors
|
||||
[28]Cathy Colliver
|
||||
|
||||
[29]Cathy Colliver
|
||||
An icon of a paper organzier Categories
|
||||
[29]Leadership
|
||||
[30]Teams
|
||||
[31]Our Company
|
||||
[30]Leadership
|
||||
[31]Teams
|
||||
[32]Our Company
|
||||
|
||||
Looking for developers? Work with people who care about what you care about.
|
||||
|
||||
We level up teams striving to ship great code.
|
||||
|
||||
[32]Let's talk
|
||||
[33] Let's talk
|
||||
[34]Home [35]Agency [36]Services [37]Careers [38]Blog [39]Contact
|
||||
[40] Mastodon [41] GitHub [42] LinkedIn [43] Twitter
|
||||
|
||||
[33]Home [34]Agency [35]Services [36]Careers [37]Blog [38]Contact
|
||||
|
||||
|
||||
[39]Mastodon [40]GitHub [41]LinkedIn [42]Twitter
|
||||
|
||||
[43]614.349.4279
|
||||
[44]hello@testdouble.com
|
||||
[45]Privacy Policy
|
||||
[44] 614.349.4279
|
||||
[45] hello@testdouble.com
|
||||
[46]Privacy Policy
|
||||
Founded in Columbus, OH
|
||||
|
||||
[46]Test Double
|
||||
[47] Test Double
|
||||
|
||||
References
|
||||
|
||||
1. https://testdouble.com/
|
||||
2. https://testdouble.com/
|
||||
3. https://testdouble.com/agency
|
||||
4. https://testdouble.com/services
|
||||
5. https://testdouble.com/careers
|
||||
6. https://blog.testdouble.com/
|
||||
7. https://testdouble.com/contact
|
||||
8. https://blog.testdouble.com/
|
||||
9. https://blog.testdouble.com/posts/
|
||||
10. https://blog.testdouble.com/authors/justin-searls/
|
||||
11. https://x.com/TheAndrewNadeau/status/1647622603698257921
|
||||
12. https://www.amazon.com/Elon-Musk-Walter-Isaacson/dp/1982181281
|
||||
13. https://blog.testdouble.com/posts/2024-01-02-plant-your-flag-career-advice/#periodically-plant-a-flag
|
||||
14. https://blog.testdouble.com/posts/2024-01-02-plant-your-flag-career-advice/#how-to-plant-a-flag
|
||||
15. https://www.etsy.com/shop/PrincessEtch
|
||||
16. https://blog.testdouble.com/posts/2024-01-02-plant-your-flag-career-advice/#this-all-happens-in-hindsight
|
||||
17. https://blog.testdouble.com/posts/2024-01-02-plant-your-flag-career-advice/#who-me-yes-you
|
||||
18. https://blog.testdouble.com/authors/justin-searls/
|
||||
19. https://twitter.com/searls
|
||||
20. https://mastodon.social/@searls
|
||||
21. https://github.com/searls
|
||||
22. https://linkedin.com/in/searls
|
||||
23. https://justin.searls.co/
|
||||
24. https://blog.testdouble.com/posts/2023-10-10-16-things-you-believe-about-software/
|
||||
25. https://blog.testdouble.com/authors/justin-searls/
|
||||
26. https://blog.testdouble.com/categories/community
|
||||
27. https://blog.testdouble.com/posts/2023-02-20-shared-values-make-the-difference/
|
||||
28. https://blog.testdouble.com/authors/cathy-colliver/
|
||||
29. https://blog.testdouble.com/categories/leadership
|
||||
30. https://blog.testdouble.com/categories/teams
|
||||
31. https://blog.testdouble.com/categories/our-company
|
||||
32. https://link.testdouble.com/blog-cta-sales
|
||||
33. https://testdouble.com/
|
||||
34. https://testdouble.com/agency
|
||||
35. https://testdouble.com/services
|
||||
36. https://testdouble.com/careers
|
||||
37. https://blog.testdouble.com/
|
||||
38. https://testdouble.com/contact
|
||||
39. https://mastodon.social/@testdouble
|
||||
40. https://github.com/testdouble
|
||||
41. https://www.linkedin.com/company/testdouble
|
||||
42. https://twitter.com/testdouble
|
||||
43. tel:+16143494279
|
||||
44. mailto:hello@testdouble.com
|
||||
45. https://testdouble.com/privacy-policy
|
||||
46. https://testdouble.com/
|
||||
|
||||
References:
|
||||
|
||||
[1] https://testdouble.com/
|
||||
[3] https://testdouble.com/
|
||||
[4] https://testdouble.com/agency
|
||||
[5] https://testdouble.com/services
|
||||
[6] https://testdouble.com/careers
|
||||
[7] https://blog.testdouble.com/
|
||||
[8] https://testdouble.com/contact
|
||||
[9] https://blog.testdouble.com/
|
||||
[10] https://blog.testdouble.com/posts/
|
||||
[11] https://blog.testdouble.com/authors/justin-searls/
|
||||
[12] https://x.com/TheAndrewNadeau/status/1647622603698257921
|
||||
[13] https://www.amazon.com/Elon-Musk-Walter-Isaacson/dp/1982181281
|
||||
[14] https://blog.testdouble.com/posts/2024-01-02-plant-your-flag-career-advice/#periodically-plant-a-flag
|
||||
[15] https://blog.testdouble.com/posts/2024-01-02-plant-your-flag-career-advice/#how-to-plant-a-flag
|
||||
[16] https://www.etsy.com/shop/PrincessEtch
|
||||
[17] https://blog.testdouble.com/posts/2024-01-02-plant-your-flag-career-advice/#this-all-happens-in-hindsight
|
||||
[18] https://blog.testdouble.com/posts/2024-01-02-plant-your-flag-career-advice/#who-me-yes-you
|
||||
[19] https://blog.testdouble.com/authors/justin-searls/
|
||||
[20] https://twitter.com/searls
|
||||
[21] https://mastodon.social/@searls
|
||||
[22] https://github.com/searls
|
||||
[23] https://linkedin.com/in/searls
|
||||
[24] https://justin.searls.co/
|
||||
[25] https://blog.testdouble.com/posts/2023-10-10-16-things-you-believe-about-software/
|
||||
[26] https://blog.testdouble.com/authors/justin-searls/
|
||||
[27] https://blog.testdouble.com/categories/community
|
||||
[28] https://blog.testdouble.com/posts/2023-02-20-shared-values-make-the-difference/
|
||||
[29] https://blog.testdouble.com/authors/cathy-colliver/
|
||||
[30] https://blog.testdouble.com/categories/leadership
|
||||
[31] https://blog.testdouble.com/categories/teams
|
||||
[32] https://blog.testdouble.com/categories/our-company
|
||||
[33] https://link.testdouble.com/blog-cta-sales
|
||||
[34] https://testdouble.com/
|
||||
[35] https://testdouble.com/agency
|
||||
[36] https://testdouble.com/services
|
||||
[37] https://testdouble.com/careers
|
||||
[38] https://blog.testdouble.com/
|
||||
[39] https://testdouble.com/contact
|
||||
[40] https://mastodon.social/@testdouble
|
||||
[41] https://github.com/testdouble
|
||||
[42] https://www.linkedin.com/company/testdouble
|
||||
[43] https://twitter.com/testdouble
|
||||
[44] tel:+16143494279
|
||||
[45] mailto:hello@testdouble.com
|
||||
[46] https://testdouble.com/privacy-policy
|
||||
[47] https://testdouble.com/
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,217 +1,208 @@
|
||||
GoatCounter stats
|
||||
|
||||
[test-img]
|
||||
[1]skip to main content
|
||||
[2]Brain Baking navigation toggle
|
||||
|
||||
[2]Brain Baking (BUTTON) navigation toggle
|
||||
* [3] Brain Baking
|
||||
* [4] Archives
|
||||
* [5] Subscribe
|
||||
• [4] Brain Baking
|
||||
• [5] Archives
|
||||
• [6] Subscribe
|
||||
|
||||
* [6] Works
|
||||
* [7] About
|
||||
* [8] Links
|
||||
• [7] Works
|
||||
• [8] About
|
||||
• [9] Links
|
||||
|
||||
[10]
|
||||
|
||||
Favorites of December 2023
|
||||
|
||||
[9]1 January 2024
|
||||
[11] 1 January 2024
|
||||
|
||||
Happy New Year! Hopefully 2024 will bring the needed peace and solace
|
||||
to everyone. 2023 was a very difficult year for us, with lots of what
|
||||
you might call “low lows” and a few “high highs”. We usually make fun
|
||||
of that saying, but this seems like the first time it’s appropriate to
|
||||
use it.
|
||||
Happy New Year! Hopefully 2024 will bring the needed peace and solace to
|
||||
everyone. 2023 was a very difficult year for us, with lots of what you might
|
||||
call “low lows” and a few “high highs”. We usually make fun of that saying, but
|
||||
this seems like the first time it’s appropriate to use it.
|
||||
|
||||
As far as blogging goes, 2023 was a great year. See the Brain Baking
|
||||
[10]blog post archive for 2023: with 90 posts last year, that’s on
|
||||
average 7.5 a month or 1.875 a week. The best part about 2023 in
|
||||
blogging was the feedback I got, and the new friends and e-mail pen
|
||||
pals I made. As frequently mentioned before, [11]blogging keeps on
|
||||
giving. If there’s one thing I never ever intend to give up, it’s
|
||||
blogging.
|
||||
As far as blogging goes, 2023 was a great year. See the Brain Baking [12]blog
|
||||
post archive for 2023: with 90 posts last year, that’s on average 7.5 a month
|
||||
or 1.875 a week. The best part about 2023 in blogging was the feedback I got,
|
||||
and the new friends and e-mail pen pals I made. As frequently mentioned before,
|
||||
[13]blogging keeps on giving. If there’s one thing I never ever intend to give
|
||||
up, it’s blogging.
|
||||
|
||||
The following posts turned out to be the most popular of 2023:
|
||||
1. [12]FPGAs And The Renaissance of Retro Hardware
|
||||
2. [13]Overlooked Reasons To Still Buy Physical Media
|
||||
3. [14]Goodbye, ProtonMail
|
||||
4. [15]Phomemo Thermal Printing On MacOS
|
||||
5. [16]DOOM Turned Thirty
|
||||
|
||||
As for Jefklak’s Codex, the most popular article was the one on
|
||||
[17]Freaky Trip, a bizarre (and very buggy) single-screen
|
||||
adventure/puzzle game. That one got a few hits simply because I
|
||||
couldn’t find any reviews online myself! As far as visitor counts go,
|
||||
the Codex gets almost none, but I still have a lot of fun filling it.
|
||||
It’s my own thing, and I’ve pondered on that subject recently in [18]On
|
||||
Writing For Yourself In Public.
|
||||
1. [14]FPGAs And The Renaissance of Retro Hardware
|
||||
2. [15]Overlooked Reasons To Still Buy Physical Media
|
||||
3. [16]Goodbye, ProtonMail
|
||||
4. [17]Phomemo Thermal Printing On MacOS
|
||||
5. [18]DOOM Turned Thirty
|
||||
|
||||
Previous month: [19]October 2023.
|
||||
As for Jefklak’s Codex, the most popular article was the one on [19]Freaky Trip
|
||||
, a bizarre (and very buggy) single-screen adventure/puzzle game. That one got
|
||||
a few hits simply because I couldn’t find any reviews online myself! As far as
|
||||
visitor counts go, the Codex gets almost none, but I still have a lot of fun
|
||||
filling it. It’s my own thing, and I’ve pondered on that subject recently in
|
||||
[20]On Writing For Yourself In Public.
|
||||
|
||||
Previous month: [21]October 2023.
|
||||
|
||||
Books I’ve read
|
||||
|
||||
Not much this month. Read my [20]2023 in books overview post to find
|
||||
out about the 22 books I managed to finish last year.
|
||||
Not much this month. Read my [22]2023 in books overview post to find out about
|
||||
the 22 books I managed to finish last year.
|
||||
|
||||
The Malloreon chronicles by [21]David Eddings continues to be my go-to
|
||||
bed-time material. Books 1 and 2 are done and although the tension
|
||||
doesn’t exactly build up, I don’t mind to keep on reading as it’s a
|
||||
light read and entertaining enough.
|
||||
The Malloreon chronicles by [23]David Eddings continues to be my go-to bed-time
|
||||
material. Books 1 and 2 are done and although the tension doesn’t exactly build
|
||||
up, I don’t mind to keep on reading as it’s a light read and entertaining
|
||||
enough.
|
||||
|
||||
Games I’ve played
|
||||
|
||||
After finishing Super Mario Bros. Wonder, I continued with the 2D Mario
|
||||
strike with the Mario Land Game Boy series that evolved into Wario Land
|
||||
and Wario Land II. The best is yet to come, though, as Wario Land 3 is
|
||||
on my [22]25 Best Games of All Time list! I know them all by heart but
|
||||
still breeze through these platformers once every few years.
|
||||
After finishing Super Mario Bros. Wonder, I continued with the 2D Mario strike
|
||||
with the Mario Land Game Boy series that evolved into Wario Land and Wario Land
|
||||
II. The best is yet to come, though, as Wario Land 3 is on my [24]25 Best Games
|
||||
of All Time list! I know them all by heart but still breeze through these
|
||||
platformers once every few years.
|
||||
|
||||
My wife discovered a cheap Switch eShop code for Mario + Rabbids:
|
||||
Kingdom Battle and since I love tactical turn-based games, I eagerly
|
||||
dove in. It’s okay so far: the core gameplay is very solid, but
|
||||
everything slathered on top is not my cup of tea. I’m nearing the end
|
||||
and will have a review up shortly. Meanwhile, Kristien insists on
|
||||
playing [23]Railbound, a cosy railway puzzle game with sometimes
|
||||
devilishly difficult levels! Most of the time, I just don’t “see it”,
|
||||
but we’re having fun together nonetheless.
|
||||
My wife discovered a cheap Switch eShop code for Mario + Rabbids: Kingdom
|
||||
Battle and since I love tactical turn-based games, I eagerly dove in. It’s okay
|
||||
so far: the core gameplay is very solid, but everything slathered on top is not
|
||||
my cup of tea. I’m nearing the end and will have a review up shortly.
|
||||
Meanwhile, Kristien insists on playing [25]Railbound, a cosy railway puzzle
|
||||
game with sometimes devilishly difficult levels! Most of the time, I just don’t
|
||||
“see it”, but we’re having fun together nonetheless.
|
||||
|
||||
Selected (blog) posts
|
||||
|
||||
* Gibru writes several interesting articles on AI and LLM generation,
|
||||
including [24]Contextualizing the Artistic Process.
|
||||
* Jonas Downey is convinced that having [25]side projects is
|
||||
essential for creatives, and I agree. This could grow into a
|
||||
powerful manifesto.
|
||||
* Cory Zue provides an overview on his side projects and why
|
||||
[26]building publicly in private works for him.
|
||||
* Keith McNulty explains why [27]the MBTI tests are corporate
|
||||
astrology (Medum link).
|
||||
* Michael Klamerus explains his process on [28]finding small indie
|
||||
games.
|
||||
* This sobering article at Eurogamer reminds us that in the video
|
||||
game industry, 2023 was also the year of low lows and high highs:
|
||||
[29]You Can’t Talk About Games Without Talking About The Layoffs.
|
||||
* Glyph explains how to set up the best possible [30]Phython
|
||||
development environment for MacOS. Don’t use brew install like I
|
||||
did.
|
||||
* Speaking of Python, [31]why is Python so slow? Jake VanderPlas
|
||||
deciphers the Python internals to figure out why.
|
||||
* Vlad-Stefan Harbuz’s blog is great: it’s a combination between
|
||||
computing and philosophical work. Here’s his [32]overview on
|
||||
resources on the philosophy of work I still have to dig into.
|
||||
* Here’s an interesting piece on [33]Mickey Mouse and the Public
|
||||
Domain. As of today, one of the earliest versions of Mickey hits
|
||||
public domain in USA.
|
||||
* [34]You Don’t Need Statistics On Your Blog says William Woodruff.
|
||||
Perhaps I should take on the challenge and ditch GoatCounter in
|
||||
favor of a few grep scripts in access logs, if that?
|
||||
• Gibru writes several interesting articles on AI and LLM generation,
|
||||
including [26]Contextualizing the Artistic Process.
|
||||
• Jonas Downey is convinced that having [27]side projects is essential for
|
||||
creatives, and I agree. This could grow into a powerful manifesto.
|
||||
• Cory Zue provides an overview on his side projects and why [28]building
|
||||
publicly in private works for him.
|
||||
• Keith McNulty explains why [29]the MBTI tests are corporate astrology
|
||||
(Medum link).
|
||||
• Michael Klamerus explains his process on [30]finding small indie games.
|
||||
• This sobering article at Eurogamer reminds us that in the video game
|
||||
industry, 2023 was also the year of low lows and high highs: [31]You Can’t
|
||||
Talk About Games Without Talking About The Layoffs.
|
||||
• Glyph explains how to set up the best possible [32]Phython development
|
||||
environment for MacOS. Don’t use brew install like I did.
|
||||
• Speaking of Python, [33]why is Python so slow? Jake VanderPlas deciphers
|
||||
the Python internals to figure out why.
|
||||
• Vlad-Stefan Harbuz’s blog is great: it’s a combination between computing
|
||||
and philosophical work. Here’s his [34]overview on resources on the
|
||||
philosophy of work I still have to dig into.
|
||||
• Here’s an interesting piece on [35]Mickey Mouse and the Public Domain. As
|
||||
of today, one of the earliest versions of Mickey hits public domain in USA.
|
||||
• [36]You Don’t Need Statistics On Your Blog says William Woodruff. Perhaps I
|
||||
should take on the challenge and ditch GoatCounter in favor of a few grep
|
||||
scripts in access logs, if that?
|
||||
|
||||
Other random links
|
||||
|
||||
* [35]Déjà Dup Backups is a Gnome-powered UI-friendly backup tool for
|
||||
Unix.
|
||||
* Did you know you can [36]Scheme in Scheme on WASM in the browser?
|
||||
wait what now? The Spritely Institute also has cool info on Lisp
|
||||
hackatons if that’s your jam.
|
||||
* If you want to follow physical video game releases, look no further
|
||||
than [37]https://www.physicalreleases.com/
|
||||
* The [38]Into The Aether Podcast released a six-hour long episode on
|
||||
the 2023 Game of the Year. It’s great, but I have been slogging
|
||||
through it on and off all week and I’m still just over 03:21:00
|
||||
hours/minutes in! Who decided that three-plus hours of jabbering
|
||||
about video games is a good thing? Because it totally is!
|
||||
• [37]Déjà Dup Backups is a Gnome-powered UI-friendly backup tool for Unix.
|
||||
• Did you know you can [38]Scheme in Scheme on WASM in the browser? wait what
|
||||
now? The Spritely Institute also has cool info on Lisp hackatons if that’s
|
||||
your jam.
|
||||
• If you want to follow physical video game releases, look no further than
|
||||
[39]https://www.physicalreleases.com/
|
||||
• The [40]Into The Aether Podcast released a six-hour long episode on the
|
||||
2023 Game of the Year. It’s great, but I have been slogging through it on
|
||||
and off all week and I’m still just over 03:21:00 hours/minutes in! Who
|
||||
decided that three-plus hours of jabbering about video games is a good
|
||||
thing? Because it totally is!
|
||||
|
||||
I hope to keep up the blogging rhythm in 2024. That’s everything I wish
|
||||
for in 2024 besides the obvious ones.
|
||||
I hope to keep up the blogging rhythm in 2024. That’s everything I wish for in
|
||||
2024 besides the obvious ones.
|
||||
|
||||
[39]metapost
|
||||
[41]metapost
|
||||
|
||||
You Might Also Like...
|
||||
[42] You Might Also Like...
|
||||
|
||||
* [40]2023 In Books 28 Dec 2023
|
||||
* [41]DOOM Turned Thirty 11 Dec 2023
|
||||
* [42]FPGAs And The Renaissance Of Retro Hardware 27 Nov 2023
|
||||
* [43]On Writing For Yourself In Public 06 Nov 2023
|
||||
* [44]Favorites of October 2023 02 Nov 2023
|
||||
* [45]Top 25 Best Games Of All Time (GOAT) 08 Oct 2023
|
||||
* [46]Overlooked Reasons To Still Buy Physical Media 25 Sep 2023
|
||||
• [43]2023 In Books 28 Dec 2023
|
||||
• [44]DOOM Turned Thirty 11 Dec 2023
|
||||
• [45]FPGAs And The Renaissance Of Retro Hardware 27 Nov 2023
|
||||
• [46]On Writing For Yourself In Public 06 Nov 2023
|
||||
• [47]Favorites of October 2023 02 Nov 2023
|
||||
• [48]Top 25 Best Games Of All Time (GOAT) 08 Oct 2023
|
||||
• [49]Overlooked Reasons To Still Buy Physical Media 25 Sep 2023
|
||||
|
||||
Bio and Support
|
||||
[50] Bio and Support
|
||||
|
||||
[47]A photo of Me!
|
||||
[51] A photo of Me!
|
||||
|
||||
I'm [48]Wouter Groeneveld, a Brain Baker, and I love the smell of
|
||||
freshly baked thoughts (and bread) in the morning. I sometimes convince
|
||||
others to bake their brain (and bread) too.
|
||||
I'm [52]Wouter Groeneveld, a Brain Baker, and I love the smell of freshly baked
|
||||
thoughts (and bread) in the morning. I sometimes convince others to bake their
|
||||
brain (and bread) too.
|
||||
|
||||
If you found this article amusing and/or helpful, you can support me
|
||||
via [49]PayPal or [50]Ko-Fi. I also like to hear your feedback via
|
||||
[51]Mastodon or email. Thanks!
|
||||
JavaScript is disabled. I use it to obfuscate my e-mail, keeping
|
||||
spambots at bay.
|
||||
If you found this article amusing and/or helpful, you can support me via [53]
|
||||
PayPal or [54]Ko-Fi. I also like to hear your feedback via [55]Mastodon or
|
||||
email. Thanks!
|
||||
|
||||
JavaScript is disabled. I use it to obfuscate my e-mail, keeping spambots at
|
||||
bay.
|
||||
Reach me using: [firstname] at [this domain].
|
||||
|
||||
↑ [52]Top
|
||||
[53]Brain Baking | [54]Archives | [55]© CC BY 4.0 License.
|
||||
↑ [56]Top [57]Brain Baking | [58]Archives | [59]© CC BY 4.0 License.
|
||||
|
||||
References
|
||||
|
||||
Visible links:
|
||||
1. https://brainbaking.com/post/2024/01/december-2023/#top
|
||||
2. https://brainbaking.com/post/2024/01/december-2023/
|
||||
3. https://brainbaking.com/
|
||||
4. https://brainbaking.com/archives
|
||||
5. https://brainbaking.com/subscribe
|
||||
6. https://brainbaking.com/works
|
||||
7. https://brainbaking.com/about
|
||||
8. https://brainbaking.com/links
|
||||
9. https://brainbaking.com/post/2024/01/december-2023/
|
||||
10. https://brainbaking.com/post/2023/
|
||||
11. https://brainbaking.com/post/2021/10/a-triumph-for-blogging/
|
||||
12. https://brainbaking.com/post/2023/11/fpgas-and-the-renaissance-of-retro-hardware/
|
||||
13. https://brainbaking.com/post/2023/09/overlooked-reasons-to-still-buy-physical-media/
|
||||
14. https://brainbaking.com/post/2023/01/goodbye-protonmail/
|
||||
15. https://brainbaking.com/post/2023/02/phomemo-thermal-printing-on-macos/
|
||||
16. https://brainbaking.com/post/2023/12/doom-turned-thirty/
|
||||
17. https://jefklakscodex.com/games/switch/freaky-trip/
|
||||
18. https://brainbaking.com/post/2023/11/on-writing-for-yourself-in-public/
|
||||
19. https://brainbaking.com/post/2023/11/october-2023
|
||||
20. https://brainbaking.com/post/2023/12/2023-in-books
|
||||
21. https://www.eddingschronicles.com/index.html
|
||||
22. https://brainbaking.com/post/2023/10/top-25-best-games-of-all-time
|
||||
23. https://store.steampowered.com/app/1967510/Railbound/
|
||||
24. https://elusivewordsmith.com/posts/Playground/contextualizing/
|
||||
25. https://jonas.do/writing/2023-10-05-side-projects/
|
||||
26. https://www.coryzue.com/writing/building-in-private/
|
||||
27. https://medium.com/swlh/the-mbti-is-corporate-astrology-c132d93e684f
|
||||
28. https://virtualmoose.org/2023/12/13/finding-indie-games/
|
||||
29. https://www.eurogamer.net/you-cant-talk-about-2023-in-games-without-talking-about-layoffs
|
||||
30. https://blog.glyph.im/2023/08/get-your-mac-python-from-python-dot-org.html
|
||||
31. http://jakevdp.github.io/blog/2014/05/09/why-python-is-slow/
|
||||
32. https://vladh.net/wage-labour-resources/
|
||||
33. https://web.law.duke.edu/cspd/mickey/
|
||||
34. https://blog.yossarian.net/2023/12/24/You-dont-need-analytics-on-your-blog
|
||||
35. https://apps.gnome.org/en-GB/DejaDup/
|
||||
36. https://spritely.institute/news/scheme-in-scheme-on-wasm-in-the-browser.html
|
||||
37. https://www.physicalreleases.com/
|
||||
38. https://intothecast.online/
|
||||
39. https://brainbaking.com/tags/metapost
|
||||
40. https://brainbaking.com/post/2023/12/2023-in-books/
|
||||
41. https://brainbaking.com/post/2023/12/doom-turned-thirty/
|
||||
42. https://brainbaking.com/post/2023/11/fpgas-and-the-renaissance-of-retro-hardware/
|
||||
43. https://brainbaking.com/post/2023/11/on-writing-for-yourself-in-public/
|
||||
44. https://brainbaking.com/post/2023/11/october-2023/
|
||||
45. https://brainbaking.com/post/2023/10/top-25-best-games-of-all-time/
|
||||
46. https://brainbaking.com/post/2023/09/overlooked-reasons-to-still-buy-physical-media/
|
||||
47. https://brainbaking.com/
|
||||
48. https://brainbaking.com/about
|
||||
49. https://www.paypal.com/donate/?hosted_button_id=R2WTKY7G9V2KQ
|
||||
50. https://ko-fi.com/woutergroeneveld
|
||||
51. https://dosgame.club/@jefklak
|
||||
52. https://brainbaking.com/post/2024/01/december-2023/#header
|
||||
53. https://brainbaking.com/
|
||||
54. https://brainbaking.com/archives
|
||||
55. https://brainbaking.com/copyright-and-tracking-policy
|
||||
References:
|
||||
|
||||
Hidden links:
|
||||
57. https://brainbaking.com/
|
||||
58. https://brainbaking.com/post/2024/01/december-2023/#related
|
||||
59. https://brainbaking.com/post/2024/01/december-2023/#bio
|
||||
[1] https://brainbaking.com/post/2024/01/december-2023/#top
|
||||
[2] https://brainbaking.com/post/2024/01/december-2023/#
|
||||
[4] https://brainbaking.com/
|
||||
[5] https://brainbaking.com/archives
|
||||
[6] https://brainbaking.com/subscribe
|
||||
[7] https://brainbaking.com/works
|
||||
[8] https://brainbaking.com/about
|
||||
[9] https://brainbaking.com/links
|
||||
[10] https://brainbaking.com/
|
||||
[11] https://brainbaking.com/post/2024/01/december-2023/
|
||||
[12] https://brainbaking.com/post/2023/
|
||||
[13] https://brainbaking.com/post/2021/10/a-triumph-for-blogging/
|
||||
[14] https://brainbaking.com/post/2023/11/fpgas-and-the-renaissance-of-retro-hardware/
|
||||
[15] https://brainbaking.com/post/2023/09/overlooked-reasons-to-still-buy-physical-media/
|
||||
[16] https://brainbaking.com/post/2023/01/goodbye-protonmail/
|
||||
[17] https://brainbaking.com/post/2023/02/phomemo-thermal-printing-on-macos/
|
||||
[18] https://brainbaking.com/post/2023/12/doom-turned-thirty/
|
||||
[19] https://jefklakscodex.com/games/switch/freaky-trip/
|
||||
[20] https://brainbaking.com/post/2023/11/on-writing-for-yourself-in-public/
|
||||
[21] https://brainbaking.com/post/2023/11/october-2023
|
||||
[22] https://brainbaking.com/post/2023/12/2023-in-books
|
||||
[23] https://www.eddingschronicles.com/index.html
|
||||
[24] https://brainbaking.com/post/2023/10/top-25-best-games-of-all-time
|
||||
[25] https://store.steampowered.com/app/1967510/Railbound/
|
||||
[26] https://elusivewordsmith.com/posts/Playground/contextualizing/
|
||||
[27] https://jonas.do/writing/2023-10-05-side-projects/
|
||||
[28] https://www.coryzue.com/writing/building-in-private/
|
||||
[29] https://medium.com/swlh/the-mbti-is-corporate-astrology-c132d93e684f
|
||||
[30] https://virtualmoose.org/2023/12/13/finding-indie-games/
|
||||
[31] https://www.eurogamer.net/you-cant-talk-about-2023-in-games-without-talking-about-layoffs
|
||||
[32] https://blog.glyph.im/2023/08/get-your-mac-python-from-python-dot-org.html
|
||||
[33] http://jakevdp.github.io/blog/2014/05/09/why-python-is-slow/
|
||||
[34] https://vladh.net/wage-labour-resources/
|
||||
[35] https://web.law.duke.edu/cspd/mickey/
|
||||
[36] https://blog.yossarian.net/2023/12/24/You-dont-need-analytics-on-your-blog
|
||||
[37] https://apps.gnome.org/en-GB/DejaDup/
|
||||
[38] https://spritely.institute/news/scheme-in-scheme-on-wasm-in-the-browser.html
|
||||
[39] https://www.physicalreleases.com/
|
||||
[40] https://intothecast.online/
|
||||
[41] https://brainbaking.com/tags/metapost
|
||||
[42] https://brainbaking.com/post/2024/01/december-2023/#related
|
||||
[43] https://brainbaking.com/post/2023/12/2023-in-books/
|
||||
[44] https://brainbaking.com/post/2023/12/doom-turned-thirty/
|
||||
[45] https://brainbaking.com/post/2023/11/fpgas-and-the-renaissance-of-retro-hardware/
|
||||
[46] https://brainbaking.com/post/2023/11/on-writing-for-yourself-in-public/
|
||||
[47] https://brainbaking.com/post/2023/11/october-2023/
|
||||
[48] https://brainbaking.com/post/2023/10/top-25-best-games-of-all-time/
|
||||
[49] https://brainbaking.com/post/2023/09/overlooked-reasons-to-still-buy-physical-media/
|
||||
[50] https://brainbaking.com/post/2024/01/december-2023/#bio
|
||||
[51] https://brainbaking.com/
|
||||
[52] https://brainbaking.com/about
|
||||
[53] https://www.paypal.com/donate/?hosted_button_id=R2WTKY7G9V2KQ
|
||||
[54] https://ko-fi.com/woutergroeneveld
|
||||
[55] https://dosgame.club/@jefklak
|
||||
[56] https://brainbaking.com/post/2024/01/december-2023/#header
|
||||
[57] https://brainbaking.com/
|
||||
[58] https://brainbaking.com/archives
|
||||
[59] https://brainbaking.com/copyright-and-tracking-policy
|
||||
|
||||
@@ -1,393 +1,380 @@
|
||||
#[1]Cal Newport » Feed [2]Cal Newport » Comments Feed [3]Cal Newport »
|
||||
On Tools and the Aesthetics of Work Comments Feed [4]alternate
|
||||
[5]alternate [6]alternate
|
||||
[1]Skip to content
|
||||
[2] Cal Newport
|
||||
Menu
|
||||
[4] Cal Newport
|
||||
Menu
|
||||
|
||||
IFRAME: [7]https://www.googletagmanager.com/ns.html?id=GTM-W6XZ4TH
|
||||
• [6]Home
|
||||
• [7]Scholarship
|
||||
• [8]Writing
|
||||
• [9]Essays
|
||||
• [10]Press
|
||||
• [11]Contact
|
||||
|
||||
[8]Skip to content
|
||||
|
||||
[9]Cal Newport
|
||||
|
||||
(BUTTON) Menu
|
||||
|
||||
[10]Cal Newport
|
||||
(BUTTON) Menu
|
||||
* [11]Home
|
||||
* [12]Scholarship
|
||||
* [13]Writing
|
||||
* [14]Essays
|
||||
* [15]Press
|
||||
* [16]Contact
|
||||
|
||||
[17]Home » [18]Blog » On Tools and the Aesthetics of Work
|
||||
[12]Home » [13]Blog » On Tools and the Aesthetics of Work
|
||||
|
||||
On Tools and the Aesthetics of Work
|
||||
|
||||
September 4, 2023
|
||||
[mythic-640px]
|
||||
|
||||
In the summer of 2022, an engineer named Keegan McNamara, who was at
|
||||
the time working for a fundraising technology startup, found his way to
|
||||
the [19]Arms and Armor exhibit at the Met. He was struck by the
|
||||
unapologetic mixture of extreme beauty and focused function captured in
|
||||
the antique firearms on display. As reported in [20]a recent profile of
|
||||
McNamara published in The Verge, this encounter with the past sparked a
|
||||
realization about the present:
|
||||
In the summer of 2022, an engineer named Keegan McNamara, who was at the time
|
||||
working for a fundraising technology startup, found his way to the [14]Arms and
|
||||
Armor exhibit at the Met. He was struck by the unapologetic mixture of extreme
|
||||
beauty and focused function captured in the antique firearms on display. As
|
||||
reported in [15]a recent profile of McNamara published in The Verge, this
|
||||
encounter with the past sparked a realization about the present:
|
||||
|
||||
“That combination of craftsmanship and utility, objects that are
|
||||
both thoroughly practical and needlessly outrageously beautiful,
|
||||
doesn’t really exist anymore. ‘And it especially doesn’t exist for
|
||||
computers.'”
|
||||
“That combination of craftsmanship and utility, objects that are both
|
||||
thoroughly practical and needlessly outrageously beautiful, doesn’t really
|
||||
exist anymore. ‘And it especially doesn’t exist for computers.'”
|
||||
|
||||
Aesthetically, contemporary digitals devices have become industrial and
|
||||
impersonal: grey and black rectangles carved into generically-modern
|
||||
clean lines . Functionally, they offer the hapless user a cluttered
|
||||
explosion of potential activity, windows piling on top of windows,
|
||||
command bars thick with applications. Standing in the Arms and Armor
|
||||
exhibit McNamara began to wonder if there was a way to rethink the PC;
|
||||
to save it from a predictable maximalism.
|
||||
impersonal: grey and black rectangles carved into generically-modern clean
|
||||
lines . Functionally, they offer the hapless user a cluttered explosion of
|
||||
potential activity, windows piling on top of windows, command bars thick with
|
||||
applications. Standing in the Arms and Armor exhibit McNamara began to wonder
|
||||
if there was a way to rethink the PC; to save it from a predictable maximalism.
|
||||
|
||||
The result was [21]The Mythic I, a custom computer that McNamara
|
||||
handcrafted over the year or so that followed that momentous afternoon
|
||||
at the Met. The machine is housed in a swooping hardwood frame carved
|
||||
using manual tools. An eight-inch screen is mounted above a 1980’s
|
||||
IBM-style keyboard with big clacking keys that McNamara carefully
|
||||
lubricated to achieve exactly the right sound on each strike: “if you
|
||||
have dry rubbing of plastic, it doesn’t sound thock-y. It just sounds
|
||||
cheap.” Below the keyboard is an Italian leather hand rest. To turn it
|
||||
on you insert and turn a key and then flip a toggle switch.
|
||||
The result was [16]The Mythic I, a custom computer that McNamara handcrafted
|
||||
over the year or so that followed that momentous afternoon at the Met. The
|
||||
machine is housed in a swooping hardwood frame carved using manual tools. An
|
||||
eight-inch screen is mounted above a 1980’s IBM-style keyboard with big
|
||||
clacking keys that McNamara carefully lubricated to achieve exactly the right
|
||||
sound on each strike: “if you have dry rubbing of plastic, it doesn’t sound
|
||||
thock-y. It just sounds cheap.” Below the keyboard is an Italian leather hand
|
||||
rest. To turn it on you insert and turn a key and then flip a toggle switch.
|
||||
|
||||
Equally notable is what happens once the machine is activated. McNamara
|
||||
designed the Mythic for three specific purposes: writing a novel,
|
||||
writing occasional computer code, and writing his daily journal.
|
||||
Accordingly, it runs a highly-modular version of Linux called NixOS
|
||||
that he’s customized to only offer emacs, a text-based editor popular
|
||||
among hacker types, that’s launched from a basic green command line.
|
||||
You can’t go online, or create a PowerPoint presentation, or edit a
|
||||
video. It’s a writing a machine, and like the antique arms that
|
||||
inspired it, the Mythic implements this functionality with a focused,
|
||||
designed the Mythic for three specific purposes: writing a novel, writing
|
||||
occasional computer code, and writing his daily journal. Accordingly, it runs a
|
||||
highly-modular version of Linux called NixOS that he’s customized to only offer
|
||||
emacs, a text-based editor popular among hacker types, that’s launched from a
|
||||
basic green command line. You can’t go online, or create a PowerPoint
|
||||
presentation, or edit a video. It’s a writing a machine, and like the antique
|
||||
arms that inspired it, the Mythic implements this functionality with a focused,
|
||||
beautiful utilitarianism.
|
||||
|
||||
In his critical classic, [22]Amusing Ourselves to Death, Neil Postman
|
||||
argued that the form taken by the technologies we use impacts the
|
||||
fundamental nature of our cognition. When we switched media consumption
|
||||
from long newspaper articles to television soundbites, for example, our
|
||||
understanding of news lost its heft and became more superficial and
|
||||
emotionally-charged.
|
||||
In his critical classic, [17]Amusing Ourselves to Death, Neil Postman argued
|
||||
that the form taken by the technologies we use impacts the fundamental nature
|
||||
of our cognition. When we switched media consumption from long newspaper
|
||||
articles to television soundbites, for example, our understanding of news lost
|
||||
its heft and became more superficial and emotionally-charged.
|
||||
|
||||
When pondering Keegan McNamara and the Mythic, I can’t help but apply
|
||||
Postman’s framework to the machines that organize our professional
|
||||
activities. The modern computer, with its generic styling and
|
||||
overloaded activity, creates a cognitive environment defined by urgent,
|
||||
bland, Sisyphean widget cranking — work as endless Slack and email and
|
||||
Zoom and “jumping on” calls, in which there is always too much to do,
|
||||
but no real sense of much of importance actually being accomplished.
|
||||
When pondering Keegan McNamara and the Mythic, I can’t help but apply Postman’s
|
||||
framework to the machines that organize our professional activities. The modern
|
||||
computer, with its generic styling and overloaded activity, creates a cognitive
|
||||
environment defined by urgent, bland, Sisyphean widget cranking — work as
|
||||
endless Slack and email and Zoom and “jumping on” calls, in which there is
|
||||
always too much to do, but no real sense of much of importance actually being
|
||||
accomplished.
|
||||
|
||||
In Keegan’s construction we find an alternative understanding of work,
|
||||
built now on beauty, craftsmanship, and focus. Replacing everyone’s
|
||||
MacBook with custom-carved hardwood, of course, is not enough on its
|
||||
own to transform how we think about out jobs, [23]as these issues have
|
||||
deeper roots. But the Mythic is a useful reminder that the rhythms of
|
||||
our professional lives are not pre-ordained. We craft the world in
|
||||
which we work, even if we don’t realize it.
|
||||
In Keegan’s construction we find an alternative understanding of work, built
|
||||
now on beauty, craftsmanship, and focus. Replacing everyone’s MacBook with
|
||||
custom-carved hardwood, of course, is not enough on its own to transform how we
|
||||
think about out jobs, [18]as these issues have deeper roots. But the Mythic is
|
||||
a useful reminder that the rhythms of our professional lives are not
|
||||
pre-ordained. We craft the world in which we work, even if we don’t realize it.
|
||||
|
||||
#####
|
||||
|
||||
In other news: My longtime friend Brad Stulberg has a great new book
|
||||
out this week. It’s called, [24]Master of Change: How to Excel When
|
||||
Everything is Changing — Including You. In my cover blurb, I noted that
|
||||
this “immensely wise and timely book provides a roadmap for a
|
||||
tumultuous world.” I really mean it! The idea of preparing yourself to
|
||||
thrive, and not crumble, when faced with inevitable change is
|
||||
self-evidently important, and Brad does a great job of delivering the
|
||||
goods on this timely theme.
|
||||
In other news: My longtime friend Brad Stulberg has a great new book out this
|
||||
week. It’s called, [19]Master of Change: How to Excel When Everything is
|
||||
Changing — Including You. In my cover blurb, I noted that this “immensely wise
|
||||
and timely book provides a roadmap for a tumultuous world.” I really mean it!
|
||||
The idea of preparing yourself to thrive, and not crumble, when faced with
|
||||
inevitable change is self-evidently important, and Brad does a great job of
|
||||
delivering the goods on this timely theme.
|
||||
|
||||
Pro-tip: if you do buy the book this week, [25]go to Brad’s website to
|
||||
claim a bunch of cool pre-order bonuses that he’s offering through the
|
||||
first full week of publication.
|
||||
Pro-tip: if you do buy the book this week, [20]go to Brad’s website to claim a
|
||||
bunch of cool pre-order bonuses that he’s offering through the first full week
|
||||
of publication.
|
||||
|
||||
[26]We Don’t Need a New Twitter
|
||||
[27]On Tire Pressure and Productivity
|
||||
[21]We Don’t Need a New Twitter
|
||||
[22]On Tire Pressure and Productivity
|
||||
|
||||
11 thoughts on “On Tools and the Aesthetics of Work”
|
||||
|
||||
1.
|
||||
1. [aac40]
|
||||
Galia
|
||||
[28]September 4, 2023 at 9:27 am
|
||||
Too much information when few things matter: that reminds me of the
|
||||
book Essentialism. Acting like those everyday stimuli don’t exist
|
||||
is the first recipe for success.
|
||||
[29]Reply
|
||||
2.
|
||||
[23] September 4, 2023 at 9:27 am
|
||||
|
||||
Too much information when few things matter: that reminds me of the book
|
||||
Essentialism. Acting like those everyday stimuli don’t exist is the first
|
||||
recipe for success.
|
||||
|
||||
[24]Reply
|
||||
2. [8b32b]
|
||||
Alexander Lewis
|
||||
[30]September 4, 2023 at 11:57 am
|
||||
I love the idea here. People still use old typewriters as art
|
||||
pieces and coffee table decor in their homes. It’s hard to imagine
|
||||
something similar occuring with modern computers. Laptops are used
|
||||
until they’re dead, and then they’re recycled or thrown into the
|
||||
junk drawer.
|
||||
[25] September 4, 2023 at 11:57 am
|
||||
|
||||
I love the idea here. People still use old typewriters as art pieces and
|
||||
coffee table decor in their homes. It’s hard to imagine something similar
|
||||
occuring with modern computers. Laptops are used until they’re dead, and
|
||||
then they’re recycled or thrown into the junk drawer.
|
||||
|
||||
I think this craftsman/engineer might be onto something.
|
||||
[31]Reply
|
||||
3.
|
||||
|
||||
[26]Reply
|
||||
3. [d7ec0]
|
||||
Rafa Font
|
||||
[32]September 4, 2023 at 3:22 pm
|
||||
They have become Swiss knives, tools for all. Especially mobile
|
||||
phones, they’re maps, navigators, radio, compass, torch, voice
|
||||
recorder, word processor… all in one.
|
||||
I gave my kids a voice recorder the other day. So that they can
|
||||
have a one-action device to play with and understand what it is, on
|
||||
its own.
|
||||
[33]Reply
|
||||
+
|
||||
[27] September 4, 2023 at 3:22 pm
|
||||
|
||||
They have become Swiss knives, tools for all. Especially mobile phones,
|
||||
they’re maps, navigators, radio, compass, torch, voice recorder, word
|
||||
processor… all in one.
|
||||
|
||||
I gave my kids a voice recorder the other day. So that they can have a
|
||||
one-action device to play with and understand what it is, on its own.
|
||||
|
||||
[28]Reply
|
||||
□ [92093]
|
||||
Tim Koerner
|
||||
[34]September 11, 2023 at 3:27 pm
|
||||
[29] September 11, 2023 at 3:27 pm
|
||||
|
||||
Love the voice recorder idea for kids, well done.
|
||||
[35]Reply
|
||||
4.
|
||||
|
||||
[30]Reply
|
||||
4. [2e0eb]
|
||||
Alex Francisco
|
||||
[36]September 4, 2023 at 8:04 pm
|
||||
[31] September 4, 2023 at 8:04 pm
|
||||
|
||||
What a find!
|
||||
My copies of ‘Understanding Media: The Extensions of Man’ –
|
||||
McLuhan,
|
||||
|
||||
My copies of ‘Understanding Media: The Extensions of Man’ – McLuhan,
|
||||
the Medium is the Massage are always in my mind.
|
||||
A good summary is that one line by Culkin in an article about
|
||||
McLuhan:
|
||||
“We become what we behold. We shape our tools, and thereafter our
|
||||
tools shape us.”
|
||||
|
||||
A good summary is that one line by Culkin in an article about McLuhan:
|
||||
“We become what we behold. We shape our tools, and thereafter our tools
|
||||
shape us.”
|
||||
|
||||
Timeless, humbling AND empowering at once.
|
||||
[37]Reply
|
||||
+
|
||||
|
||||
[32]Reply
|
||||
□ [2a88f]
|
||||
Jonathan
|
||||
[38]November 11, 2023 at 6:47 pm
|
||||
That quote it itself based on one by Winston Churchill to the
|
||||
UK Parliament in 1943: “We shape our buildings, and afterwards
|
||||
our buildings shape us.” Churchill was referring to the
|
||||
reconstruction of the bombed House of Commons, emphasizing how
|
||||
the design of buildings influences the behavior and culture of
|
||||
the people who use them.
|
||||
[39]Reply
|
||||
5.
|
||||
[33] November 11, 2023 at 6:47 pm
|
||||
|
||||
That quote it itself based on one by Winston Churchill to the UK
|
||||
Parliament in 1943: “We shape our buildings, and afterwards our
|
||||
buildings shape us.” Churchill was referring to the reconstruction of
|
||||
the bombed House of Commons, emphasizing how the design of buildings
|
||||
influences the behavior and culture of the people who use them.
|
||||
|
||||
[34]Reply
|
||||
5. [8e65d]
|
||||
rb
|
||||
[40]September 4, 2023 at 9:47 pm
|
||||
WordStar was more fun than WordPerfect, which was quite a bit more
|
||||
fun than Microsoft Word. There has not been a professional writing
|
||||
application since WordStar and its pale descendants including
|
||||
EMACS. Everybody writes – there is opportunity here.
|
||||
[41]Reply
|
||||
6.
|
||||
[35] September 4, 2023 at 9:47 pm
|
||||
|
||||
WordStar was more fun than WordPerfect, which was quite a bit more fun than
|
||||
Microsoft Word. There has not been a professional writing application since
|
||||
WordStar and its pale descendants including EMACS. Everybody writes – there
|
||||
is opportunity here.
|
||||
|
||||
[36]Reply
|
||||
6. [5d6ca]
|
||||
Garrett
|
||||
[42]September 6, 2023 at 1:46 pm
|
||||
[37] September 6, 2023 at 1:46 pm
|
||||
|
||||
In my opinion, another huge value of this is that it has a distinct
|
||||
physical location. There’s a lot of power (at least for me) in
|
||||
having a physical place to do things. When I’m in my woodshop for
|
||||
instance, I am not engaging with distractions. I’m there to create
|
||||
things and I’m limited (or, empowered) by the tools around me.
|
||||
[43]Reply
|
||||
7.
|
||||
physical location. There’s a lot of power (at least for me) in having a
|
||||
physical place to do things. When I’m in my woodshop for instance, I am not
|
||||
engaging with distractions. I’m there to create things and I’m limited (or,
|
||||
empowered) by the tools around me.
|
||||
|
||||
[38]Reply
|
||||
7. [90c00]
|
||||
Judy
|
||||
[44]September 6, 2023 at 6:23 pm
|
||||
As someone who formerly worked in IT but transitioned to become a
|
||||
classical fine art painter, I love the concept of objects that are
|
||||
both utilitarian and beautiful. Many craftspeople of the past took
|
||||
great pride in creating all manner of objects that were more than
|
||||
simply useful, as Keegan McNamara discovered. Owners of these
|
||||
well-crafted objects also loved them for their beauty. Beauty is
|
||||
important in life.
|
||||
[45]Reply
|
||||
8.
|
||||
[39] September 6, 2023 at 6:23 pm
|
||||
|
||||
As someone who formerly worked in IT but transitioned to become a classical
|
||||
fine art painter, I love the concept of objects that are both utilitarian
|
||||
and beautiful. Many craftspeople of the past took great pride in creating
|
||||
all manner of objects that were more than simply useful, as Keegan McNamara
|
||||
discovered. Owners of these well-crafted objects also loved them for their
|
||||
beauty. Beauty is important in life.
|
||||
|
||||
[40]Reply
|
||||
8. [50214]
|
||||
Kenneth Lawson
|
||||
[46]September 11, 2023 at 11:43 am
|
||||
This goes back to the idea of writing things in a book, on real
|
||||
paper.
|
||||
[41] September 11, 2023 at 11:43 am
|
||||
|
||||
This goes back to the idea of writing things in a book, on real paper.
|
||||
|
||||
Paper and pen are used for one thing.
|
||||
Creation.
|
||||
When writing with a pen on paper, there is no distraction, only
|
||||
you, Your mind, and the physical act of putting words on paper.
|
||||
Thats not to say that paper and pen can’t be works of art in
|
||||
themselves.
|
||||
When writing with a pen on paper, there is no distraction, only you, Your
|
||||
mind, and the physical act of putting words on paper.
|
||||
|
||||
Thats not to say that paper and pen can’t be works of art in themselves.
|
||||
They definitely can.
|
||||
Good quality paper in a nice notebook will always be more enjoyable
|
||||
to use than cheap printer paper.
|
||||
Good quality paper in a nice notebook will always be more enjoyable to use
|
||||
than cheap printer paper.
|
||||
|
||||
The same with pens.
|
||||
Would you rather write the same note on printer paper with a Bic
|
||||
Ballpoint pen, or in a nice notebook on quality paper, with a nice
|
||||
fountain pen, that writes better and has more character than any
|
||||
pen could ever have?
|
||||
The note written on good paper with a fountain pen becomes a work
|
||||
of art in itself.
|
||||
Would you rather write the same note on printer paper with a Bic Ballpoint
|
||||
pen, or in a nice notebook on quality paper, with a nice fountain pen, that
|
||||
writes better and has more character than any pen could ever have?
|
||||
|
||||
The note written on good paper with a fountain pen becomes a work of art in
|
||||
itself.
|
||||
And going back to read it later is more enjoyable.
|
||||
‘
|
||||
[47]Reply
|
||||
9.
|
||||
|
||||
[42]Reply
|
||||
9. [97f77]
|
||||
Kenwood
|
||||
[48]September 22, 2023 at 11:32 am
|
||||
Nice. Your essay emphasizes the profound influence of tool
|
||||
aesthetics on our work and cognition. The Mythic I, handcrafted by
|
||||
Keegan McNamara, epitomizes the fusion of craftsmanship and
|
||||
practicality, offering a stark contrast to today’s industrial and
|
||||
impersonal digital devices. McNamara’s computer is designed for
|
||||
specific tasks like writing, coding, and journaling, redirecting
|
||||
our focus from multitasking chaos to singular productivity. It
|
||||
reminds us that we shape our work environment and challenges
|
||||
conventional notions of productivity. I would like to share
|
||||
[49]https://writinguniverse.com/essay-writing-service/ free tools
|
||||
for writers. While we can’t all have custom-made computers,
|
||||
McNamara’s creation encourages us to rethink the balance between
|
||||
aesthetics and function in our daily tools.
|
||||
[50]Reply
|
||||
[43] September 22, 2023 at 11:32 am
|
||||
|
||||
Leave a Comment [51]Cancel reply
|
||||
Nice. Your essay emphasizes the profound influence of tool aesthetics on
|
||||
our work and cognition. The Mythic I, handcrafted by Keegan McNamara,
|
||||
epitomizes the fusion of craftsmanship and practicality, offering a stark
|
||||
contrast to today’s industrial and impersonal digital devices. McNamara’s
|
||||
computer is designed for specific tasks like writing, coding, and
|
||||
journaling, redirecting our focus from multitasking chaos to singular
|
||||
productivity. It reminds us that we shape our work environment and
|
||||
challenges conventional notions of productivity. I would like to share [44]
|
||||
https://writinguniverse.com/essay-writing-service/ free tools for writers.
|
||||
While we can’t all have custom-made computers, McNamara’s creation
|
||||
encourages us to rethink the balance between aesthetics and function in our
|
||||
daily tools.
|
||||
|
||||
Comment
|
||||
_____________________________________________
|
||||
_____________________________________________
|
||||
_____________________________________________
|
||||
_____________________________________________
|
||||
_____________________________________________
|
||||
_____________________________________________
|
||||
_____________________________________________
|
||||
_____________________________________________
|
||||
[45]Reply
|
||||
|
||||
____________________________________________________________
|
||||
____________________________________________________________
|
||||
____________________________________________________________
|
||||
____________________________________________________________
|
||||
Name ______________________________ Email
|
||||
______________________________ ______________________________
|
||||
Leave a Comment [46]Cancel reply
|
||||
|
||||
[ ] Save my name, email, and website in this browser for the next time
|
||||
I comment.
|
||||
[ ]
|
||||
[ ]
|
||||
[ ]
|
||||
[ ]
|
||||
[ ]
|
||||
[ ]
|
||||
[ ]
|
||||
Comment[ ] [ ]
|
||||
|
||||
Post Comment
|
||||
Name[49][ ] Email
|
||||
[50][ ] [51][ ]
|
||||
|
||||
[52][ ] Save my name, email, and website in this browser for the next time I
|
||||
comment.
|
||||
|
||||
[53][Post Comment]
|
||||
|
||||
Cal Newport headshot
|
||||
|
||||
About
|
||||
|
||||
Cal launched the "Study Hacks" blog at calnewport.com in 2007, and has
|
||||
been regularly publishing essays here ever since. Over 2,000,000 people
|
||||
a year visit this site to read Cal's weekly posts about technology,
|
||||
productivity, and the quest to live and work deeply in an increasingly
|
||||
distracted world, while tens of thousands more subscribe to have these
|
||||
essays delivered directly to their inbox (see the sign-up form
|
||||
below). [52]To read more, you can browse more than 15 years of past
|
||||
essays in the archive.
|
||||
In the fall of 2022, Cal launched a new portal, [53]TheDeepLife.com, to
|
||||
serve as the online home for all other content relevant to the deep
|
||||
life movement he helped initiate. Here you can find all past episodes
|
||||
of Cal's popular podcast, Deep Questions, and explore an extensive
|
||||
library of original videos.
|
||||
__________________________________________________________________
|
||||
Cal launched the "Study Hacks" blog at calnewport.com in 2007, and has been
|
||||
regularly publishing essays here ever since. Over 2,000,000 people a year visit
|
||||
this site to read Cal's weekly posts about technology, productivity, and the
|
||||
quest to live and work deeply in an increasingly distracted world, while tens
|
||||
of thousands more subscribe to have these essays delivered directly to their
|
||||
inbox (see the sign-up form below). [57]To read more, you can browse more than
|
||||
15 years of past essays in the archive.
|
||||
In the fall of 2022, Cal launched a new portal, [58]TheDeepLife.com, to serve
|
||||
as the online home for all other content relevant to the deep life movement he
|
||||
helped initiate. Here you can find all past episodes of Cal's popular podcast,
|
||||
Deep Questions, and explore an extensive library of original videos.
|
||||
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
Cal Newport logo
|
||||
|
||||
This site is the online home for the computer science professor and
|
||||
bestselling author Cal Newport. Here you can learn more about Cal and
|
||||
both his general-audience and academic writing. You can also browse and
|
||||
subscribe to his long-running weekly essay series. For more on Cal's
|
||||
podcast, videos, and online courses, please visit his media
|
||||
portal, [54]TheDeepLife.com
|
||||
This site is the online home for the computer science professor and bestselling
|
||||
author Cal Newport. Here you can learn more about Cal and both his
|
||||
general-audience and academic writing. You can also browse and subscribe to his
|
||||
long-running weekly essay series. For more on Cal's podcast, videos, and online
|
||||
courses, please visit his media portal, [59]TheDeepLife.com
|
||||
|
||||
Contact Info
|
||||
|
||||
Academic Communication
|
||||
[55][email protected]
|
||||
[60][email protected]
|
||||
|
||||
Media Inquires
|
||||
[56][email protected]
|
||||
[61][email protected]
|
||||
|
||||
All Other Requests
|
||||
[57]See Contact Page
|
||||
[62]See Contact Page
|
||||
|
||||
Quick Links
|
||||
|
||||
* [58]Scholarship
|
||||
* [59]Writing
|
||||
* [60]Essays
|
||||
* [61]Press
|
||||
* [62]Contact
|
||||
* [63]Media Kit
|
||||
* [64]Podcast/Videos
|
||||
• [63]Scholarship
|
||||
• [64]Writing
|
||||
• [65]Essays
|
||||
• [66]Press
|
||||
• [67]Contact
|
||||
• [68]Media Kit
|
||||
• [69]Podcast/Videos
|
||||
|
||||
* [65]Privacy Policies
|
||||
* [66]Cookie Policy
|
||||
* [67]Terms of Service
|
||||
* [68]Accessibility Statement
|
||||
• [70]Privacy Policies
|
||||
• [71]Cookie Policy
|
||||
• [72]Terms of Service
|
||||
• [73]Accessibility Statement
|
||||
|
||||
Copyright © 2024 Cal Newport, All rights reserved.
|
||||
[74] Cleantalk Pixel
|
||||
|
||||
Cleantalk Pixel
|
||||
References:
|
||||
|
||||
References
|
||||
|
||||
Visible links:
|
||||
1. https://calnewport.com/feed/
|
||||
2. https://calnewport.com/comments/feed/
|
||||
3. https://calnewport.com/on-tools-and-the-aesthetics-of-work/feed/
|
||||
4. https://calnewport.com/wp-json/wp/v2/posts/15503
|
||||
5. https://calnewport.com/wp-json/oembed/1.0/embed?url=https://calnewport.com/on-tools-and-the-aesthetics-of-work/
|
||||
6. https://calnewport.com/wp-json/oembed/1.0/embed?url=https://calnewport.com/on-tools-and-the-aesthetics-of-work/&format=xml
|
||||
7. https://www.googletagmanager.com/ns.html?id=GTM-W6XZ4TH
|
||||
8. https://calnewport.com/on-tools-and-the-aesthetics-of-work/#content
|
||||
9. https://calnewport.com/
|
||||
10. https://calnewport.com/
|
||||
11. https://calnewport.com/
|
||||
12. https://calnewport.com/scholarship/
|
||||
13. https://calnewport.com/writing/
|
||||
14. https://calnewport.com/blog/
|
||||
15. https://calnewport.com/press/
|
||||
16. https://calnewport.com/contact/
|
||||
17. https://calnewport.com/
|
||||
18. https://calnewport.com/blog/
|
||||
19. https://www.metmuseum.org/about-the-met/collection-areas/arms-and-armor
|
||||
20. https://www.theverge.com/23841276/mythic-computer-keegan-mcnamara-pc-builder
|
||||
21. https://www.mythic.computer/
|
||||
22. https://www.amazon.com/Amusing-Ourselves-Death-Discourse-Business/dp/014303653X/
|
||||
23. https://www.amazon.com/World-Without-Email-Reimagining-Communication/dp/0525536558/
|
||||
24. https://www.amazon.com/Master-Change-Everything-Changing-Including/dp/006325316X
|
||||
25. https://www.bradstulberg.com/
|
||||
26. https://calnewport.com/we-dont-need-a-new-twitter/
|
||||
27. https://calnewport.com/on-tire-pressure-and-productivity/
|
||||
28. https://calnewport.com/on-tools-and-the-aesthetics-of-work/#comment-75274
|
||||
29. https://calnewport.com/on-tools-and-the-aesthetics-of-work/#comment-75274
|
||||
30. https://calnewport.com/on-tools-and-the-aesthetics-of-work/#comment-75292
|
||||
31. https://calnewport.com/on-tools-and-the-aesthetics-of-work/#comment-75292
|
||||
32. https://calnewport.com/on-tools-and-the-aesthetics-of-work/#comment-75309
|
||||
33. https://calnewport.com/on-tools-and-the-aesthetics-of-work/#comment-75309
|
||||
34. https://calnewport.com/on-tools-and-the-aesthetics-of-work/#comment-76565
|
||||
35. https://calnewport.com/on-tools-and-the-aesthetics-of-work/#comment-76565
|
||||
36. https://calnewport.com/on-tools-and-the-aesthetics-of-work/#comment-75349
|
||||
37. https://calnewport.com/on-tools-and-the-aesthetics-of-work/#comment-75349
|
||||
38. https://calnewport.com/on-tools-and-the-aesthetics-of-work/#comment-83574
|
||||
39. https://calnewport.com/on-tools-and-the-aesthetics-of-work/#comment-83574
|
||||
40. https://calnewport.com/on-tools-and-the-aesthetics-of-work/#comment-75355
|
||||
41. https://calnewport.com/on-tools-and-the-aesthetics-of-work/#comment-75355
|
||||
42. https://calnewport.com/on-tools-and-the-aesthetics-of-work/#comment-75579
|
||||
43. https://calnewport.com/on-tools-and-the-aesthetics-of-work/#comment-75579
|
||||
44. https://calnewport.com/on-tools-and-the-aesthetics-of-work/#comment-75642
|
||||
45. https://calnewport.com/on-tools-and-the-aesthetics-of-work/#comment-75642
|
||||
46. https://calnewport.com/on-tools-and-the-aesthetics-of-work/#comment-76535
|
||||
47. https://calnewport.com/on-tools-and-the-aesthetics-of-work/#comment-76535
|
||||
48. https://calnewport.com/on-tools-and-the-aesthetics-of-work/#comment-78315
|
||||
49. https://writinguniverse.com/essay-writing-service/
|
||||
50. https://calnewport.com/on-tools-and-the-aesthetics-of-work/#comment-78315
|
||||
51. https://calnewport.com/on-tools-and-the-aesthetics-of-work/#respond
|
||||
52. https://calnewport.com/archive/
|
||||
53. https://www.thedeeplife.com/
|
||||
54. https://www.thedeeplife.com/
|
||||
55. https://calnewport.com/cdn-cgi/l/email-protection#f2919cc0c6cab295979d809597869d859cdc979687
|
||||
56. https://calnewport.com/cdn-cgi/l/email-protection#9ffcfef3f1fae8eff0edebdfeffaf1f8eaf6f1edfef1fbf0f2f7f0eaecfab1fcf0f2
|
||||
57. https://calnewport.com/contact/
|
||||
58. https://calnewport.com/scholarship/
|
||||
59. https://calnewport.com/writing/
|
||||
60. https://calnewport.com/blog/
|
||||
61. https://calnewport.com/press/
|
||||
62. https://calnewport.com/contact/
|
||||
63. https://calnewport.com/media-kit/
|
||||
64. https://calnewport.com/podcasts/
|
||||
65. https://calnewport.com/privacy-policies/
|
||||
66. https://calnewport.com/cookie-policy/
|
||||
67. https://calnewport.com/terms-of-service/
|
||||
68. https://calnewport.com/accessibility-statement/
|
||||
|
||||
Hidden links:
|
||||
70. https://calnewport.com/on-tools-and-the-aesthetics-of-work/
|
||||
[1] https://calnewport.com/on-tools-and-the-aesthetics-of-work/#content
|
||||
[2] https://calnewport.com/
|
||||
[4] https://calnewport.com/
|
||||
[6] https://calnewport.com/
|
||||
[7] https://calnewport.com/scholarship/
|
||||
[8] https://calnewport.com/writing/
|
||||
[9] https://calnewport.com/blog/
|
||||
[10] https://calnewport.com/press/
|
||||
[11] https://calnewport.com/contact/
|
||||
[12] https://calnewport.com/
|
||||
[13] https://calnewport.com/blog/
|
||||
[14] https://www.metmuseum.org/about-the-met/collection-areas/arms-and-armor
|
||||
[15] https://www.theverge.com/23841276/mythic-computer-keegan-mcnamara-pc-builder
|
||||
[16] https://www.mythic.computer/
|
||||
[17] https://www.amazon.com/Amusing-Ourselves-Death-Discourse-Business/dp/014303653X/
|
||||
[18] https://www.amazon.com/World-Without-Email-Reimagining-Communication/dp/0525536558/
|
||||
[19] https://www.amazon.com/Master-Change-Everything-Changing-Including/dp/006325316X
|
||||
[20] https://www.bradstulberg.com/
|
||||
[21] https://calnewport.com/we-dont-need-a-new-twitter/
|
||||
[22] https://calnewport.com/on-tire-pressure-and-productivity/
|
||||
[23] https://calnewport.com/on-tools-and-the-aesthetics-of-work/#comment-75274
|
||||
[24] https://calnewport.com/on-tools-and-the-aesthetics-of-work/#comment-75274
|
||||
[25] https://calnewport.com/on-tools-and-the-aesthetics-of-work/#comment-75292
|
||||
[26] https://calnewport.com/on-tools-and-the-aesthetics-of-work/#comment-75292
|
||||
[27] https://calnewport.com/on-tools-and-the-aesthetics-of-work/#comment-75309
|
||||
[28] https://calnewport.com/on-tools-and-the-aesthetics-of-work/#comment-75309
|
||||
[29] https://calnewport.com/on-tools-and-the-aesthetics-of-work/#comment-76565
|
||||
[30] https://calnewport.com/on-tools-and-the-aesthetics-of-work/#comment-76565
|
||||
[31] https://calnewport.com/on-tools-and-the-aesthetics-of-work/#comment-75349
|
||||
[32] https://calnewport.com/on-tools-and-the-aesthetics-of-work/#comment-75349
|
||||
[33] https://calnewport.com/on-tools-and-the-aesthetics-of-work/#comment-83574
|
||||
[34] https://calnewport.com/on-tools-and-the-aesthetics-of-work/#comment-83574
|
||||
[35] https://calnewport.com/on-tools-and-the-aesthetics-of-work/#comment-75355
|
||||
[36] https://calnewport.com/on-tools-and-the-aesthetics-of-work/#comment-75355
|
||||
[37] https://calnewport.com/on-tools-and-the-aesthetics-of-work/#comment-75579
|
||||
[38] https://calnewport.com/on-tools-and-the-aesthetics-of-work/#comment-75579
|
||||
[39] https://calnewport.com/on-tools-and-the-aesthetics-of-work/#comment-75642
|
||||
[40] https://calnewport.com/on-tools-and-the-aesthetics-of-work/#comment-75642
|
||||
[41] https://calnewport.com/on-tools-and-the-aesthetics-of-work/#comment-76535
|
||||
[42] https://calnewport.com/on-tools-and-the-aesthetics-of-work/#comment-76535
|
||||
[43] https://calnewport.com/on-tools-and-the-aesthetics-of-work/#comment-78315
|
||||
[44] https://writinguniverse.com/essay-writing-service/
|
||||
[45] https://calnewport.com/on-tools-and-the-aesthetics-of-work/#comment-78315
|
||||
[46] https://calnewport.com/on-tools-and-the-aesthetics-of-work/#respond
|
||||
[57] https://calnewport.com/archive/
|
||||
[58] https://www.thedeeplife.com/
|
||||
[59] https://www.thedeeplife.com/
|
||||
[60] https://calnewport.com/cdn-cgi/l/email-protection#34575a06000c7453515b465351405b435a1a515041
|
||||
[61] https://calnewport.com/cdn-cgi/l/email-protection#b8dbd9d4d6ddcfc8d7caccf8c8ddd6dfcdd1d6cad9d6dcd7d5d0d7cdcbdd96dbd7d5
|
||||
[62] https://calnewport.com/contact/
|
||||
[63] https://calnewport.com/scholarship/
|
||||
[64] https://calnewport.com/writing/
|
||||
[65] https://calnewport.com/blog/
|
||||
[66] https://calnewport.com/press/
|
||||
[67] https://calnewport.com/contact/
|
||||
[68] https://calnewport.com/media-kit/
|
||||
[69] https://calnewport.com/podcasts/
|
||||
[70] https://calnewport.com/privacy-policies/
|
||||
[71] https://calnewport.com/cookie-policy/
|
||||
[72] https://calnewport.com/terms-of-service/
|
||||
[73] https://calnewport.com/accessibility-statement/
|
||||
[74] https://calnewport.com/on-tools-and-the-aesthetics-of-work/#
|
||||
|
||||
@@ -1,295 +1,292 @@
|
||||
[book_front.svg] [book_back.svg]
|
||||
[book_front] [book_back]
|
||||
night mode
|
||||
____________________ (BUTTON) Subscribe
|
||||
[1][ ] Subscribe
|
||||
|
||||
[1]RSS
|
||||
[3] RSS
|
||||
Add this blog to your rss feed
|
||||
[2]github logo
|
||||
[4] github logo
|
||||
Pollute your mind with some of my other missguided creations on Github
|
||||
[3]email icon
|
||||
[5] email icon
|
||||
Contact me at: george@cerebralab.com
|
||||
[4]twitter logo
|
||||
[6] twitter logo
|
||||
Publicly berate me on Twitter
|
||||
|
||||
This blog is no longer active, you can find my new stuff at:
|
||||
[5]george3d6.com, [6]epistem.ink, [7]ontologi.cc, and
|
||||
[8]phenomenologi.cc
|
||||
This blog is no longer active, you can find my new stuff at: [7]george3d6.com,
|
||||
[8]epistem.ink, [9]ontologi.cc, and [10]phenomenologi.cc
|
||||
|
||||
[9]Audio version (read by a tts bot)
|
||||
|
||||
|
||||
[11]Audio version (read by a tts bot)
|
||||
|
||||
Imaginary Problems Are the Root of Bad Software
|
||||
|
||||
https://upload.wikimedia.org/wikipedia/commons/c/c0/De_Rebus_Bellicis%2
|
||||
C_XVth_Century_Miniature.JPG There are many factors which can be a
|
||||
catalyst for bad software: from the tools being used, to team
|
||||
communication, to the personal stake developers have in its success, to
|
||||
the testing methodology.
|
||||
https://upload.wikimedia.org/wikipedia/commons/c/c0/
|
||||
De_Rebus_Bellicis%2C_XVth_Century_Miniature.JPG There are many factors which
|
||||
can be a catalyst for bad software: from the tools being used, to team
|
||||
communication, to the personal stake developers have in its success, to the
|
||||
testing methodology.
|
||||
|
||||
I propose that there is one problem chief among them, an impetus for
|
||||
bad software from which almost all others take root: imaginary
|
||||
problems.
|
||||
I propose that there is one problem chief among them, an impetus for bad
|
||||
software from which almost all others take root: imaginary problems.
|
||||
|
||||
Most complicated or broken software is not designed to be overly
|
||||
complex or dysfunctional. It’s just designed to do something other than
|
||||
its intended purpose.
|
||||
Most complicated or broken software is not designed to be overly complex or
|
||||
dysfunctional. It’s just designed to do something other than its intended
|
||||
purpose.
|
||||
|
||||
Let’s say you’re a podcast host who wants a custom website where you
|
||||
can sell your promotional products, make advertising money without a
|
||||
third party cutting in, and, most importantly, deliver podcasts,
|
||||
videos, and blogs to your audience.
|
||||
Let’s say you’re a podcast host who wants a custom website where you can sell
|
||||
your promotional products, make advertising money without a third party cutting
|
||||
in, and, most importantly, deliver podcasts, videos, and blogs to your
|
||||
audience.
|
||||
|
||||
The requirements for your little web-app might look something like
|
||||
this:
|
||||
* Fast load time in North America, with real-time podcast streaming
|
||||
and downloads
|
||||
* Doesn’t crash or freeze in the first 15 minutes for 99.99 percent
|
||||
of users, preferably never crashes or freezes
|
||||
* Integrates well with Google Adwords and maybe some other
|
||||
third-party ad providers as well, if there’s time
|
||||
* Dynamically links to the latest products in my Zazzle shop and, if
|
||||
possible, gives recommendations to users based on the content
|
||||
they’ve consumed
|
||||
* Integrates with Facebook live player. If it’s easy to create an
|
||||
alternative solution for streaming that doesn’t require Facebook,
|
||||
even better
|
||||
The requirements for your little web-app might look something like this:
|
||||
|
||||
You give these specs to a team of contractors, and you chat about them
|
||||
a bit. It seems that everyone is on the same page. Yet, when they
|
||||
return with the Minimum Viable Product two months later, your face
|
||||
turns red. You’ve just wasted $15,000 on a piece of garbage; you want
|
||||
your money back.
|
||||
• Fast load time in North America, with real-time podcast streaming and
|
||||
downloads
|
||||
• Doesn’t crash or freeze in the first 15 minutes for 99.99 percent of users,
|
||||
preferably never crashes or freezes
|
||||
• Integrates well with Google Adwords and maybe some other third-party ad
|
||||
providers as well, if there’s time
|
||||
• Dynamically links to the latest products in my Zazzle shop and, if
|
||||
possible, gives recommendations to users based on the content they’ve
|
||||
consumed
|
||||
• Integrates with Facebook live player. If it’s easy to create an alternative
|
||||
solution for streaming that doesn’t require Facebook, even better
|
||||
|
||||
The first time you open the app, the screen freezes. You ask how to
|
||||
select what kind of ads should be allowed to run on the site and are
|
||||
pointed to an ugly, hard-to-understand custom user interface (UI). Half
|
||||
the links to your merchandise on Zazzle are broken or missing images,
|
||||
and the Facebook livestream is laggy!
|
||||
You give these specs to a team of contractors, and you chat about them a bit.
|
||||
It seems that everyone is on the same page. Yet, when they return with the
|
||||
Minimum Viable Product two months later, your face turns red. You’ve just
|
||||
wasted $15,000 on a piece of garbage; you want your money back.
|
||||
|
||||
But the development team is confused at your anger — rightfully so,
|
||||
from their point of view — because they’ve gone to hell and back for
|
||||
you.
|
||||
The first time you open the app, the screen freezes. You ask how to select what
|
||||
kind of ads should be allowed to run on the site and are pointed to an ugly,
|
||||
hard-to-understand custom user interface (UI). Half the links to your
|
||||
merchandise on Zazzle are broken or missing images, and the Facebook livestream
|
||||
is laggy!
|
||||
|
||||
They’ve put their heart and soul into creating this app, and it has
|
||||
some amazing features:
|
||||
* A state of the art recommendation system
|
||||
* An algorithm generating the transcript of all your streams, in real
|
||||
time
|
||||
* Your front page loads in sub 200ms times all over the world
|
||||
* A streaming protocol and client build almost from scratch, in case
|
||||
you don’t want to rely on Facebook live
|
||||
* A service that allows you to easily integrate over 20 ad exchanges
|
||||
But the development team is confused at your anger — rightfully so, from their
|
||||
point of view — because they’ve gone to hell and back for you.
|
||||
|
||||
The problem is that you thought you requested a core product with a
|
||||
couple of extra features, if they were easy enough to implement.
|
||||
Meanwhile, the dev team heard something else. They heard about some
|
||||
exciting challenges they could tackle… and a slew of boring, basic
|
||||
features they couldn’t be bothered to test properly or care about.
|
||||
They’ve put their heart and soul into creating this app, and it has some
|
||||
amazing features:
|
||||
|
||||
Even worse, you didn’t communicate directly with the devs — you
|
||||
communicated through a game of Telephone. You spoke to a sales guy, who
|
||||
held a meeting with some middle management chap, who wrote some
|
||||
business specs and gave those to a PM, who wrote some technical specs
|
||||
and gave those to a team lead or architect, who then, at last, began to
|
||||
design the product with his team — each one of them putting a bit of
|
||||
his own twist on it along the way.
|
||||
__________________________________________________________________
|
||||
• A state of the art recommendation system
|
||||
• An algorithm generating the transcript of all your streams, in real time
|
||||
• Your front page loads in sub 200ms times all over the world
|
||||
• A streaming protocol and client build almost from scratch, in case you
|
||||
don’t want to rely on Facebook live
|
||||
• A service that allows you to easily integrate over 20 ad exchanges
|
||||
|
||||
Imaginary problems are often more fun to solve than real ones.
|
||||
Extremely intelligent people play competitive games, construct and
|
||||
solve math problems, and write books that aim to answer abstract
|
||||
questions about the human condition, all of them for free. A mediocre
|
||||
programmer, however, will probably charge you a fair amount to build a
|
||||
simple Android app. That’s not because mediocre programmers are harder
|
||||
to find than geniuses, but because the former activities are all fun,
|
||||
while the latter can be quite boring.
|
||||
The problem is that you thought you requested a core product with a couple of
|
||||
extra features, if they were easy enough to implement. Meanwhile, the dev team
|
||||
heard something else. They heard about some exciting challenges they could
|
||||
tackle… and a slew of boring, basic features they couldn’t be bothered to test
|
||||
properly or care about.
|
||||
|
||||
Most programmers want to get paid and have fun at the same time. Of
|
||||
course, the definition of “fun” is different for everyone, but for many
|
||||
engineers, it boils down to tackling interesting and challenging
|
||||
problems that are within the realm of solvability.
|
||||
Even worse, you didn’t communicate directly with the devs — you communicated
|
||||
through a game of Telephone. You spoke to a sales guy, who held a meeting with
|
||||
some middle management chap, who wrote some business specs and gave those to a
|
||||
PM, who wrote some technical specs and gave those to a team lead or architect,
|
||||
who then, at last, began to design the product with his team — each one of them
|
||||
putting a bit of his own twist on it along the way.
|
||||
|
||||
Give a somewhat intelligent person too many boring tasks that are
|
||||
impossible to automate and you will eventually drive him mad. The human
|
||||
brain however, after billions of years of evolution, is quite talented
|
||||
at keeping its sanity. Much like victims of childhood hardship or abuse
|
||||
can find escape in fantasy books, victims of enterprise programming or
|
||||
freelance web development can find their escape in solving imaginary
|
||||
problems.
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
The amount of imaginary problems a software engineer can create for
|
||||
themselves is a function of their imagination and of the difficulty of
|
||||
the real problems they’re supposed to solve.
|
||||
Imaginary problems are often more fun to solve than real ones. Extremely
|
||||
intelligent people play competitive games, construct and solve math problems,
|
||||
and write books that aim to answer abstract questions about the human
|
||||
condition, all of them for free. A mediocre programmer, however, will probably
|
||||
charge you a fair amount to build a simple Android app. That’s not because
|
||||
mediocre programmers are harder to find than geniuses, but because the former
|
||||
activities are all fun, while the latter can be quite boring.
|
||||
|
||||
It should be noted that this issue isn’t unique to developers.
|
||||
Management, sales, HR, support, legal, and even accounting departments
|
||||
have their own unique ways of creating imaginary problems. They try to
|
||||
involve themselves too much in a decision, when their presence at a
|
||||
meeting is just a formality or wasn’t requested at all. They
|
||||
overemphasize a minute problem that is related to their role, or hire
|
||||
teams much larger than necessary to illustrate their importance.
|
||||
Most programmers want to get paid and have fun at the same time. Of course, the
|
||||
definition of “fun” is different for everyone, but for many engineers, it boils
|
||||
down to tackling interesting and challenging problems that are within the realm
|
||||
of solvability.
|
||||
|
||||
When problems are dumb, intelligent individuals will find a way of
|
||||
coping.
|
||||
__________________________________________________________________
|
||||
Give a somewhat intelligent person too many boring tasks that are impossible to
|
||||
automate and you will eventually drive him mad. The human brain however, after
|
||||
billions of years of evolution, is quite talented at keeping its sanity. Much
|
||||
like victims of childhood hardship or abuse can find escape in fantasy books,
|
||||
victims of enterprise programming or freelance web development can find their
|
||||
escape in solving imaginary problems.
|
||||
|
||||
But imaginary problems aren’t just the result of bored developers.
|
||||
They’re also the result of long chains of communication.
|
||||
[1]
|
||||
|
||||
The amount of imaginary problems a software engineer can create for themselves
|
||||
is a function of their imagination and of the difficulty of the real problems
|
||||
they’re supposed to solve.
|
||||
|
||||
It should be noted that this issue isn’t unique to developers. Management,
|
||||
sales, HR, support, legal, and even accounting departments have their own
|
||||
unique ways of creating imaginary problems. They try to involve themselves too
|
||||
much in a decision, when their presence at a meeting is just a formality or
|
||||
wasn’t requested at all. They overemphasize a minute problem that is related to
|
||||
their role, or hire teams much larger than necessary to illustrate their
|
||||
importance.
|
||||
|
||||
When problems are dumb, intelligent individuals will find a way of coping.
|
||||
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
But imaginary problems aren’t just the result of bored developers. They’re also
|
||||
the result of long chains of communication.
|
||||
|
||||
When I first began taking on freelance clients, I couldn’t afford to be
|
||||
particular. This means I’ve had email chains lasting for over a 100
|
||||
exchanges, discussing insignificant details about internal MVPs. I’ve
|
||||
had people change every single requirement on a project within the span
|
||||
of a week. I’ve had clients ask questions such as “Could this be
|
||||
ICO-ed?” or “Can we add some A.I. in here?”
|
||||
particular. This means I’ve had email chains lasting for over a 100 exchanges,
|
||||
discussing insignificant details about internal MVPs. I’ve had people change
|
||||
every single requirement on a project within the span of a week. I’ve had
|
||||
clients ask questions such as “Could this be ICO-ed?” or “Can we add some A.I.
|
||||
in here?”
|
||||
|
||||
Granted, most clients are savvier than that, but, even still, they
|
||||
often lack a bit of the knowledge necessary to articulate or construct
|
||||
some of their requirements. That is fine, as part of my job as “the
|
||||
computer guy” is to help people figure out what they do and don’t need
|
||||
based on their use cases. But it can become much harder to determine
|
||||
what’s needed when there are a few layers between you and the client.
|
||||
Granted, most clients are savvier than that, but, even still, they often lack a
|
||||
bit of the knowledge necessary to articulate or construct some of their
|
||||
requirements. That is fine, as part of my job as “the computer guy” is to help
|
||||
people figure out what they do and don’t need based on their use cases. But it
|
||||
can become much harder to determine what’s needed when there are a few layers
|
||||
between you and the client.
|
||||
|
||||
Requirements get changed because someone either misunderstood an
|
||||
intention or because someone was trying to cope with that
|
||||
aforementioned boredom
|
||||
Requirements get changed because someone either misunderstood an intention
|
||||
or because someone was trying to cope with that aforementioned boredom
|
||||
|
||||
Most companies like having a sales guy who pitches potential customers,
|
||||
negotiates prices, and outlines possible features. They also have a
|
||||
[10]people person to discuss more in-depth requirements and details
|
||||
with the customer, usually another sales guy, but with a slightly
|
||||
different title. Then there’s the internal chain of command, various
|
||||
levels of management, and possibly some hierarchy, within the technical
|
||||
team.
|
||||
negotiates prices, and outlines possible features. They also have a [12]people
|
||||
person to discuss more in-depth requirements and details with the customer,
|
||||
usually another sales guy, but with a slightly different title. Then there’s
|
||||
the internal chain of command, various levels of management, and possibly some
|
||||
hierarchy, within the technical team.
|
||||
|
||||
When a list of client requirements goes through so many people, even if
|
||||
those people have the best of intentions, some things will inevitably
|
||||
get lost in translation. Sometimes that change happens because the
|
||||
original requirement made no sense, or sometimes requirements need to
|
||||
be redefined. The sales guy might have told the client, “for only
|
||||
39,999 extra we can do this on the Blockchain.” But that leaves
|
||||
everyone who encounters the requirements down the line wondering what
|
||||
the definition is of “doing it on the Blockchain.”
|
||||
When a list of client requirements goes through so many people, even if those
|
||||
people have the best of intentions, some things will inevitably get lost in
|
||||
translation. Sometimes that change happens because the original requirement
|
||||
made no sense, or sometimes requirements need to be redefined. The sales guy
|
||||
might have told the client, “for only 39,999 extra we can do this on the
|
||||
Blockchain.” But that leaves everyone who encounters the requirements down the
|
||||
line wondering what the definition is of “doing it on the Blockchain.”
|
||||
|
||||
More often than not, requirements get changed because someone either
|
||||
misunderstood an intention or because someone was trying to cope with
|
||||
that aforementioned boredom, trying to make his job or the work of his
|
||||
team more interesting and impressive.
|
||||
misunderstood an intention or because someone was trying to cope with that
|
||||
aforementioned boredom, trying to make his job or the work of his team more
|
||||
interesting and impressive.
|
||||
|
||||
Through all of this, the original requirements — the real problems that
|
||||
have to be solved — get lost. They are replaced with imaginary problems
|
||||
and with voids, and you’ve got plenty of people ready and willing to
|
||||
fill those voids with their own imaginary problems, because the
|
||||
problems they have to solve are boring, and filling the voids gives
|
||||
them a way of coping.
|
||||
Through all of this, the original requirements — the real problems that have to
|
||||
be solved — get lost. They are replaced with imaginary problems and with voids,
|
||||
and you’ve got plenty of people ready and willing to fill those voids with
|
||||
their own imaginary problems, because the problems they have to solve are
|
||||
boring, and filling the voids gives them a way of coping.
|
||||
|
||||
Overcomplexity and natural selection
|
||||
|
||||
There can often be an even darker reason for the existence of imaginary
|
||||
problems: problems can help a team or a company grow, and can even
|
||||
become an integral part of its function.
|
||||
problems: problems can help a team or a company grow, and can even become an
|
||||
integral part of its function.
|
||||
|
||||
“People who are bred, selected, and compensated to find complicated
|
||||
solutions do not have an incentive to implement simplified ones.”
|
||||
|
||||
— Nassim Nicholas Taleb
|
||||
|
||||
Have you ever heard about those three web engineers who figured out
|
||||
that secure online banking is actually quite an easy problem to solve?
|
||||
They developed some flawless banking software from scratch, using a
|
||||
functional design methodology and memory safe languages, then started
|
||||
migrating major banks to their amazing infrastructure.
|
||||
Have you ever heard about those three web engineers who figured out that secure
|
||||
online banking is actually quite an easy problem to solve? They developed some
|
||||
flawless banking software from scratch, using a functional design methodology
|
||||
and memory safe languages, then started migrating major banks to their amazing
|
||||
infrastructure.
|
||||
|
||||
Probably you haven’t heard of them, because they don’t exist. There
|
||||
are, however, plenty of teams of [11]thousands of developers, who are
|
||||
unable to grasp simple concepts such “rollbacks,” perpetually creating
|
||||
banking software.
|
||||
Probably you haven’t heard of them, because they don’t exist. There are,
|
||||
however, plenty of teams of [13]thousands of developers, who are unable to
|
||||
grasp simple concepts such “rollbacks,” perpetually creating banking software.
|
||||
|
||||
The storage and transfer of numbers is not a particularly hard problem.
|
||||
Indexing the whole content of the internet and providing relevant
|
||||
results to natural language queries, in sub second times, is a hard
|
||||
problem. [12]But just a few smart guys managed to solve that problem.
|
||||
Indexing the whole content of the internet and providing relevant results to
|
||||
natural language queries, in sub second times, is a hard problem. [14]But just
|
||||
a few smart guys managed to solve that problem.
|
||||
|
||||
The persistent problem for online banking is that the banking ecosystem
|
||||
has become really good at preserving its own money-grabbing hierarchy.
|
||||
Its leaders are [13]corrupt leeches who prey on society — but the
|
||||
leaders in an organization are just a symptom of its members.
|
||||
The persistent problem for online banking is that the banking ecosystem has
|
||||
become really good at preserving its own money-grabbing hierarchy. Its leaders
|
||||
are [15]corrupt leeches who prey on society — but the leaders in an
|
||||
organization are just a symptom of its members.
|
||||
|
||||
I wouldn’t suggest that most underling workers for banks are evil or
|
||||
malicious in any way. Far from it. They are usually friendly lads,
|
||||
working to provide food, shelter, and an education for their families.
|
||||
But their chief incentive is not to fix the banking software, it is to
|
||||
stay employed. Losing your job in today’s economy is no joking matter
|
||||
for some; in the banking industry, a big mouth or too much initiative
|
||||
is an easy way find yourself in front of a disciplinary committee.
|
||||
I wouldn’t suggest that most underling workers for banks are evil or malicious
|
||||
in any way. Far from it. They are usually friendly lads, working to provide
|
||||
food, shelter, and an education for their families. But their chief incentive
|
||||
is not to fix the banking software, it is to stay employed. Losing your job in
|
||||
today’s economy is no joking matter for some; in the banking industry, a big
|
||||
mouth or too much initiative is an easy way find yourself in front of a
|
||||
disciplinary committee.
|
||||
|
||||
So banking systems remain the same — not because the systems are
|
||||
efficient, but because of inertia. This inertia comes in the form of
|
||||
working on imaginary problems in order to avoid fixing real
|
||||
problems — real problems which, once pointed out, would threaten the
|
||||
jobs of other people. To focus on these real problems could lead to
|
||||
getting fired, or, in the case of some particularly nasty
|
||||
“institutions” like Goldman Sachs, [14]getting a few life-ruining brown
|
||||
So banking systems remain the same — not because the systems are efficient, but
|
||||
because of inertia. This inertia comes in the form of working on imaginary
|
||||
problems in order to avoid fixing real problems — real problems which, once
|
||||
pointed out, would threaten the jobs of other people. To focus on these real
|
||||
problems could lead to getting fired, or, in the case of some particularly
|
||||
nasty “institutions” like Goldman Sachs, [16]getting a few life-ruining brown
|
||||
envelopes sent to a few FBI officers and prompting a strange suicide.
|
||||
|
||||
“It is difficult to get a man to understand something, when his
|
||||
salary depends upon his not understanding it!”
|
||||
“It is difficult to get a man to understand something, when his salary
|
||||
depends upon his not understanding it!”
|
||||
|
||||
— Upton Sinclair
|
||||
|
||||
The [15]C-suite ignores the fact that their upper management workers
|
||||
spend 90 percent of their time on “client meetings” that involve
|
||||
tropical islands and million-dollar budgets for “other expenses.” Upper
|
||||
management, in return, turns a blind eye to corruption in C-suite.
|
||||
The [17]C-suite ignores the fact that their upper management workers spend 90
|
||||
percent of their time on “client meetings” that involve tropical islands and
|
||||
million-dollar budgets for “other expenses.” Upper management, in return, turns
|
||||
a blind eye to corruption in C-suite.
|
||||
|
||||
Because middle management encourages them to live in their Wolf of Wall
|
||||
Street fantasies, upper management ignores middle managers who buy
|
||||
eccentric offices and hire themselves three secretaries and a dozen
|
||||
interns.
|
||||
Because middle management encourages them to live in their Wolf of Wall Street
|
||||
fantasies, upper management ignores middle managers who buy eccentric offices
|
||||
and hire themselves three secretaries and a dozen interns.
|
||||
|
||||
Because line management doesn’t complain about their dictatorial power
|
||||
fantasies, middle management ignores the fact that line managers,
|
||||
instead of cutting costs, spend their time working on PowerPoint
|
||||
presentations about “Improving our Agile Methodology.”
|
||||
fantasies, middle management ignores the fact that line managers, instead of
|
||||
cutting costs, spend their time working on PowerPoint presentations about
|
||||
“Improving our Agile Methodology.”
|
||||
|
||||
Because the team leaders don’t seem to notice the fact that their
|
||||
superiors can’t even use Excel properly and only hit the office every
|
||||
few weeks, line managers ignore the team leaders and architects talking
|
||||
about “next generation interfacing between our systems using JRPC and
|
||||
microserviceization using Hibernate and Spring” when they should be
|
||||
getting those bloody Mysql queries to take less than a day.
|
||||
Because the team leaders don’t seem to notice the fact that their superiors
|
||||
can’t even use Excel properly and only hit the office every few weeks, line
|
||||
managers ignore the team leaders and architects talking about “next generation
|
||||
interfacing between our systems using JRPC and microserviceization using
|
||||
Hibernate and Spring” when they should be getting those bloody Mysql queries to
|
||||
take less than a day.
|
||||
|
||||
Because the developers don’t seem to notice that their leaders don’t
|
||||
really write any code except DOT diagrams, team leaders don’t complain
|
||||
about their developers, instead of looking at an EXPLAIN for the
|
||||
aforementioned slow query, re-designing the UI for the tenth time that
|
||||
year using a new JavaScript framework.
|
||||
Because the developers don’t seem to notice that their leaders don’t really
|
||||
write any code except DOT diagrams, team leaders don’t complain about their
|
||||
developers, instead of looking at an EXPLAIN for the aforementioned slow query,
|
||||
re-designing the UI for the tenth time that year using a new JavaScript
|
||||
framework.
|
||||
|
||||
It’s a vicious cycle of solving imaginary problems, from the CEO who
|
||||
doesn’t realize that stealing another 30 million won’t make his dad
|
||||
love him to the user-experience intern who doesn’t realize that
|
||||
redesigning the “submit” button using Angular-Material-Bootstrap
|
||||
19.13.5 won’t make the fact that they store passwords in plain text
|
||||
(and use them as part of the auth cookie) go away.
|
||||
It’s a vicious cycle of solving imaginary problems, from the CEO who doesn’t
|
||||
realize that stealing another 30 million won’t make his dad love him to the
|
||||
user-experience intern who doesn’t realize that redesigning the “submit” button
|
||||
using Angular-Material-Bootstrap 19.13.5 won’t make the fact that they store
|
||||
passwords in plain text (and use them as part of the auth cookie) go away.
|
||||
|
||||
But everyone needs to keep solving the imaginary problems, because if
|
||||
they stop creating and solving these problems, if they start focusing
|
||||
on the real problems, they might realize the whole system is broken.
|
||||
They might realize Debra has been sitting in that corner, staring at
|
||||
uptime graphs of the internal server farm for 10 years, despite the
|
||||
fact that the company moved to AWS five years ago. They might realize
|
||||
99 percent of their job is to perpetuate the existence of someone
|
||||
else’s job. And that’s a hard realization to digest—impossible for
|
||||
most, I dare say. So, instead, most find a way of coping.
|
||||
__________________________________________________________________
|
||||
But everyone needs to keep solving the imaginary problems, because if they stop
|
||||
creating and solving these problems, if they start focusing on the real
|
||||
problems, they might realize the whole system is broken. They might realize
|
||||
Debra has been sitting in that corner, staring at uptime graphs of the internal
|
||||
server farm for 10 years, despite the fact that the company moved to AWS five
|
||||
years ago. They might realize 99 percent of their job is to perpetuate the
|
||||
existence of someone else’s job. And that’s a hard realization to
|
||||
digest—impossible for most, I dare say. So, instead, most find a way of coping.
|
||||
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
If you enjoyed this article you may also like:
|
||||
* [16]The Red Queen
|
||||
* [17]Stop future proofing software
|
||||
|
||||
• [18]The Red Queen
|
||||
• [19]Stop future proofing software
|
||||
|
||||
Published on: 2019-04-29
|
||||
__________________________________________________________________
|
||||
|
||||
____________________ (BUTTON) Subscribe
|
||||
|
||||
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
|
||||
[20][ ] Subscribe
|
||||
|
||||
|
||||
|
||||
|
||||
Reactions:
|
||||
|
||||
@@ -298,34 +295,48 @@ Overcomplexity and natural selection
|
||||
pls
|
||||
sexy
|
||||
straigt-face
|
||||
__________________________________________________________________
|
||||
|
||||
[18]twitter logo
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
[22] twitter logo
|
||||
Share this article on twitter
|
||||
[19]linkedin logo
|
||||
[23] linkedin logo
|
||||
Share this article on linkedin
|
||||
[20]Fb logo
|
||||
[24] Fb logo
|
||||
Share this article on facebook
|
||||
|
||||
References
|
||||
|
||||
1. https://cerebralab.com/feed.xml
|
||||
2. https://github.com/George3d6
|
||||
3. mailto:george@cerebralab.com
|
||||
4. https://twitter.com/Cerebralab2
|
||||
5. https://george3d6.com/
|
||||
6. https://epistem.ink/
|
||||
7. https://ontologi.cc/
|
||||
8. https://phenomenologi.cc/
|
||||
9. https://youtu.be/9jODhmgkp3o
|
||||
10. https://www.youtube.com/watch?v=hNuu9CpdjIo
|
||||
11. https://www.theguardian.com/business/2018/apr/28/warning-signs-for-tsbs-it-meltdown-were-clear-a-year-ago-insider
|
||||
12. https://en.wikipedia.org/wiki/History_of_Google
|
||||
13. https://en.wikipedia.org/wiki/Ben_Bernanke
|
||||
14. https://en.wikipedia.org/wiki/Sergey_Aleynikov
|
||||
15. https://www.investopedia.com/terms/c/c-suite.asp
|
||||
16. https://cerebralab.com/The Red Queen
|
||||
17. https://cerebralab.com/Stop future proofing software
|
||||
18. https://twitter.com/intent/tweet?text=A shameless content-promotion script has asked me to share with you this amazing article I just read: https://cerebralab.com
|
||||
19. https://www.linkedin.com/shareArticle?mini=true&url=https://cerebralab.com&summary=A shameless content-promotion script has asked me to share with you this amazing article I just read&source=https://cerebralab.com
|
||||
20. https://www.facebook.com/sharer/sharer.php?u=https://cerebralab.com
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
References:
|
||||
|
||||
[3] https://cerebralab.com/feed.xml
|
||||
[4] https://github.com/George3d6
|
||||
[5] mailto:george@cerebralab.com
|
||||
[6] https://twitter.com/Cerebralab2
|
||||
[7] https://george3d6.com/
|
||||
[8] https://epistem.ink/
|
||||
[9] https://ontologi.cc/
|
||||
[10] https://phenomenologi.cc/
|
||||
[11] https://youtu.be/9jODhmgkp3o
|
||||
[12] https://www.youtube.com/watch?v=hNuu9CpdjIo
|
||||
[13] https://www.theguardian.com/business/2018/apr/28/warning-signs-for-tsbs-it-meltdown-were-clear-a-year-ago-insider
|
||||
[14] https://en.wikipedia.org/wiki/History_of_Google
|
||||
[15] https://en.wikipedia.org/wiki/Ben_Bernanke
|
||||
[16] https://en.wikipedia.org/wiki/Sergey_Aleynikov
|
||||
[17] https://www.investopedia.com/terms/c/c-suite.asp
|
||||
[18] https://cerebralab.com/The%20Red%20Queen
|
||||
[19] https://cerebralab.com/Stop%20future%20proofing%20software
|
||||
[22] https://twitter.com/intent/tweet?text=A%20shameless%20content-promotion%20script%20has%20asked%20me%20to%20share%20with%20you%20this%20amazing%20article%20I%20just%20read:%20https://cerebralab.com
|
||||
[23] https://www.linkedin.com/shareArticle?mini=true&url=https://cerebralab.com&summary=A%20shameless%20content-promotion%20script%20has%20asked%20me%20to%20share%20with%20you%20this%20amazing%20article%20I%20just%20read&source=https://cerebralab.com
|
||||
[24] https://www.facebook.com/sharer/sharer.php?u=https://cerebralab.com
|
||||
|
||||
@@ -1,512 +1,495 @@
|
||||
#[1]News Feed (The Proverbial Fire Hose) [2]Master Feed (All Shows)
|
||||
[3]Posts Feed [4]JSON News Feed
|
||||
[1]Changelog
|
||||
|
||||
[5]Changelog
|
||||
• [2]Podcasts
|
||||
• [3]Beats
|
||||
• [4]Posts
|
||||
• [5]Community
|
||||
• [6]Subscribe
|
||||
• [7]Changelog++
|
||||
|
||||
* [6]Podcasts
|
||||
* [7]Beats
|
||||
* [8]Posts
|
||||
* [9]Community
|
||||
* [10]Subscribe
|
||||
* [11]Changelog++
|
||||
• [8]Live
|
||||
• [9]Submit News
|
||||
|
||||
* [12]Live
|
||||
* [13]Submit News
|
||||
• [10]Sign In
|
||||
|
||||
* [14]Sign In
|
||||
[11][ ]
|
||||
[13]Changelog
|
||||
|
||||
____________________
|
||||
(BUTTON)
|
||||
• [14]Podcasts
|
||||
• [15]Beats
|
||||
• [16]Posts
|
||||
• [17]Community
|
||||
• [18]Subscribe
|
||||
• [19]Changelog++
|
||||
• [20]Submit News
|
||||
|
||||
[15]Changelog
|
||||
* [16]Podcasts
|
||||
* [17]Beats
|
||||
* [18]Posts
|
||||
* [19]Community
|
||||
* [20]Subscribe
|
||||
* [21]Changelog++
|
||||
* [22]Submit News
|
||||
|
||||
____________________
|
||||
|
||||
[23]Jerod Santo [24]changelog.com/posts
|
||||
[21][ ]
|
||||
[22] Jerod Santo [23]changelog.com/posts
|
||||
|
||||
There's still no silver bullet
|
||||
|
||||
a friendly reminder that you haven't found the panacea
|
||||
|
||||
logged by [25]jerodsanto [26]2023-05-24T16:25:22Z [27]#practices +2
|
||||
* [28]#history
|
||||
* [29]#react
|
||||
logged by [24]jerodsanto [25]2023-05-24T16:25:22Z [26]#practices +2
|
||||
|
||||
The late, great [30]Fred Brooks wrote many words about software
|
||||
engineering. You may have heard of [31]Brooks’s Law or read his seminal
|
||||
book, [32]The Mythical Man-Month. Even if you haven’t, you’ve probably
|
||||
heard at least one colleague proclaim:
|
||||
• [27]#history
|
||||
• [28]#react
|
||||
|
||||
The late, great [29]Fred Brooks wrote many words about software engineering.
|
||||
You may have heard of [30]Brooks’s Law or read his seminal book, [31]The
|
||||
Mythical Man-Month. Even if you haven’t, you’ve probably heard at least one
|
||||
colleague proclaim:
|
||||
|
||||
Nine women can’t make a baby in one month!
|
||||
|
||||
This is a powerful metaphor for two reasons. First: it’s so vivid that
|
||||
it’s hard to forget (and easy to recall in a time of need). Second: it
|
||||
makes obvious a not-so-obvious conclusion. Which is:
|
||||
This is a powerful metaphor for two reasons. First: it’s so vivid that it’s
|
||||
hard to forget (and easy to recall in a time of need). Second: it makes obvious
|
||||
a not-so-obvious conclusion. Which is:
|
||||
|
||||
Adding manpower to a late software project makes it later.
|
||||
|
||||
That’s a hard pill to swallow, especially when your project is late.
|
||||
But it’s a truth pill, which makes it worth choking down. Here’s
|
||||
another truth pill that Brooks wrote in his paper [33]No Silver
|
||||
Bullet–Essence and Accident in Software Engineering:
|
||||
That’s a hard pill to swallow, especially when your project is late. But it’s a
|
||||
truth pill, which makes it worth choking down. Here’s another truth pill that
|
||||
Brooks wrote in his paper [32]No Silver Bullet–Essence and Accident in Software
|
||||
Engineering:
|
||||
|
||||
There is no single development, in either technology or management
|
||||
technique, which by itself promises even one order of magnitude
|
||||
[tenfold] improvement within a decade in productivity, in
|
||||
reliability, in simplicity.
|
||||
__________________________________________________________________
|
||||
technique, which by itself promises even one order of magnitude [tenfold]
|
||||
improvement within a decade in productivity, in reliability, in simplicity.
|
||||
|
||||
For those who don’t understand the silver bullet reference… it’s
|
||||
[34]pulled from folklore where a bullet cast from silver is the only
|
||||
weapon that can kill a werewolf. Over time a silver bullet has come to
|
||||
represent “a simple, seemingly magical, solution to a difficult
|
||||
problem.” Brooks could have easily reached for [35]panacea instead, but
|
||||
I think the shiny characteristic of silver makes it the perfect analog
|
||||
to software solutions.
|
||||
__________________________________________________________________
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
I’ve found myself referencing this a [36]couple [37]times recently.
|
||||
Both of those conversations were in the context of [38]React, but the
|
||||
principle applies to every over-adopted technology.
|
||||
For those who don’t understand the silver bullet reference… it’s [33]pulled
|
||||
from folklore where a bullet cast from silver is the only weapon that can kill
|
||||
a werewolf. Over time a silver bullet has come to represent “a simple,
|
||||
seemingly magical, solution to a difficult problem.” Brooks could have easily
|
||||
reached for [34]panacea instead, but I think the shiny characteristic of silver
|
||||
makes it the perfect analog to software solutions.
|
||||
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
I’ve found myself referencing this a [35]couple [36]times recently. Both of
|
||||
those conversations were in the context of [37]React, but the principle applies
|
||||
to every over-adopted technology.
|
||||
|
||||
So, this post is a gentle reminder to my fellow software engineers:
|
||||
* Does a new tool promise to solve all your problems? It won’t
|
||||
* Do you think you’ve found the “one true tech”? You haven’t
|
||||
* Have a shiny hammer that looks great for hitting screws? It isn’t
|
||||
|
||||
Please humor me while I [39]quote myself for a moment: (Hey, it’s
|
||||
easier than writing)
|
||||
• Does a new tool promise to solve all your problems? It won’t
|
||||
• Do you think you’ve found the “one true tech”? You haven’t
|
||||
• Have a shiny hammer that looks great for hitting screws? It isn’t
|
||||
|
||||
IFRAME: [40]https://www.youtube.com/embed/btIc-_dGz9k
|
||||
Please humor me while I [38]quote myself for a moment: (Hey, it’s easier than
|
||||
writing)
|
||||
|
||||
Subscribe to [41]our YouTube channel for more clips like this, live
|
||||
show recordings, and more ✌️
|
||||
Subscribe to [39]our YouTube channel for more clips like this, live show
|
||||
recordings, and more ✌️
|
||||
|
||||
We tend to be kind of lazy and just take the big hammer and hit all
|
||||
the nails with it. Like, “Oh, I’ve found the panacea. This is gonna
|
||||
solve all my problems”, because it does solve some of your problems
|
||||
big-time.
|
||||
|
||||
But it’s also is gonna create other problems, and it’s also not
|
||||
gonna fit in every place that you can shove it. I mean, I know
|
||||
there’s React-based command line builders… And it’s like, okay, if
|
||||
you like components, cool. That makes sense. But why is React
|
||||
building your command-line app? I just don’t understand.
|
||||
We tend to be kind of lazy and just take the big hammer and hit all the
|
||||
nails with it. Like, “Oh, I’ve found the panacea. This is gonna solve all
|
||||
my problems”, because it does solve some of your problems big-time.
|
||||
|
||||
When I extemporaneously said “I just don’t understand”, I meant that
|
||||
the choice confounds me. But I do understand why people might make it.
|
||||
But it’s also is gonna create other problems, and it’s also not gonna fit
|
||||
in every place that you can shove it. I mean, I know there’s React-based
|
||||
command line builders… And it’s like, okay, if you like components, cool.
|
||||
That makes sense. But why is React building your command-line app? I just
|
||||
don’t understand.
|
||||
|
||||
Saying “use the right tool for the job” is easy, but actually selecting
|
||||
the right tool for the job is anything but. Good tools are hard to
|
||||
find, hard to evaluate, hard to learn. We have constraints, we have
|
||||
biases, we have shortcomings.
|
||||
When I extemporaneously said “I just don’t understand”, I meant that the choice
|
||||
confounds me. But I do understand why people might make it.
|
||||
|
||||
Saying “use the right tool for the job” is easy, but actually selecting the
|
||||
right tool for the job is anything but. Good tools are hard to find, hard to
|
||||
evaluate, hard to learn. We have constraints, we have biases, we have
|
||||
shortcomings.
|
||||
|
||||
But that’s all part of the work.
|
||||
|
||||
And if you “just use Go” or “just use React” or “just use Postgres” for
|
||||
every problem that crosses your keyboard, you’re just not putting in
|
||||
the work.
|
||||
And if you “just use Go” or “just use React” or “just use Postgres” for every
|
||||
problem that crosses your keyboard, you’re just not putting in the work.
|
||||
|
||||
(And I say this as a guy who uses Postgres for most things! 😆)
|
||||
__________________________________________________________________
|
||||
|
||||
If you enjoyed reading this, you’ll probably enjoy [42]Changelog News,
|
||||
my free weekly podcast + newsletter covering developer news worth your
|
||||
attention. I keep it brief (~8 min), entertaining & always on-point.
|
||||
Not so sure? Check out a [43]recent issue!
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
Software moves fast. We help you keep up. Our weekly newsletter is
|
||||
brief, entertaining & always on-point.
|
||||
____________________
|
||||
Get Changelog News
|
||||
(BUTTON)
|
||||
__________________________________________________________________
|
||||
If you enjoyed reading this, you’ll probably enjoy [40]Changelog News, my free
|
||||
weekly podcast + newsletter covering developer news worth your attention. I
|
||||
keep it brief (~8 min), entertaining & always on-point. Not so sure? Check out
|
||||
a [41]recent issue!
|
||||
|
||||
Software moves fast. We help you keep up. Our weekly newsletter is brief,
|
||||
entertaining & always on-point.
|
||||
|
||||
[42][ ]
|
||||
[43][Get Changelog News]
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
Discussion
|
||||
|
||||
[44]Sign in or [45]Join to comment or subscribe
|
||||
|
||||
(BUTTON)
|
||||
|
||||
(BUTTON) Solomon Ucko
|
||||
|
||||
sollyucko
|
||||
[46]Solomon Ucko
|
||||
[45]Sign in or [46]Join to comment or subscribe
|
||||
|
||||
Solomon Ucko
|
||||
|
||||
* [47]Twitter
|
||||
* [48]GitHub
|
||||
* [49]LinkedIn
|
||||
sollyucko
|
||||
|
||||
[50]2023-05-25T03:42:39Z ago
|
||||
[49] Solomon Ucko
|
||||
|
||||
just use Rust, except possibly when you’re working with a platform
|
||||
designed for another language (e.g. web => HTML/CSS/JS, Android => Java
|
||||
or Kotlin, macOS/iOS => Objective-C or Swift, Microsoft Office macros
|
||||
=> Visual Basic), though Rust does have FFI crates for all of these.
|
||||
Solomon Ucko
|
||||
|
||||
[51]reply
|
||||
• [50]Twitter
|
||||
• [51]GitHub
|
||||
• [52]LinkedIn
|
||||
|
||||
(BUTTON)
|
||||
[53] 2023-05-25T03:42:39Z ago
|
||||
|
||||
(BUTTON) James Harr
|
||||
just use Rust, except possibly when you’re working with a platform designed for
|
||||
another language (e.g. web => HTML/CSS/JS, Android => Java or Kotlin, macOS/iOS
|
||||
=> Objective-C or Swift, Microsoft Office macros => Visual Basic), though Rust
|
||||
does have FFI crates for all of these.
|
||||
|
||||
jamesharr
|
||||
[52]James Harr
|
||||
[54]reply
|
||||
|
||||
James Harr
|
||||
|
||||
* [53]GitHub
|
||||
jamesharr
|
||||
|
||||
[54]2023-05-27T12:55:20Z ago
|
||||
[57] James Harr
|
||||
|
||||
James Harr
|
||||
|
||||
• [58]GitHub
|
||||
|
||||
[59] 2023-05-27T12:55:20Z ago
|
||||
|
||||
Nine women can’t make a baby in one month!
|
||||
|
||||
I quoted this to my wife once while trying to explain the concept from
|
||||
the book. She knew what I meant, but said (paraphrasing) it’s a micro
|
||||
aggression to pick out women and I might want to pick another example.
|
||||
I quoted this to my wife once while trying to explain the concept from the
|
||||
book. She knew what I meant, but said (paraphrasing) it’s a micro aggression to
|
||||
pick out women and I might want to pick another example.
|
||||
|
||||
After some reflection and an initial knee jerk internal reaction of
|
||||
“no, it’s a fine example”, I agree with her. There’s no reason to
|
||||
change the book – it is what it is, it was written at a point in time,
|
||||
and it did it’s job of getting the readers to think. All that said, we
|
||||
can come up with a better example for the present and future. I don’t
|
||||
know what that example is, but I know we can do better.
|
||||
After some reflection and an initial knee jerk internal reaction of “no, it’s a
|
||||
fine example”, I agree with her. There’s no reason to change the book – it is
|
||||
what it is, it was written at a point in time, and it did it’s job of getting
|
||||
the readers to think. All that said, we can come up with a better example for
|
||||
the present and future. I don’t know what that example is, but I know we can do
|
||||
better.
|
||||
|
||||
[55]reply
|
||||
[60]reply
|
||||
|
||||
(BUTTON)
|
||||
|
||||
(BUTTON) Jerod Santo
|
||||
Jerod Santo
|
||||
|
||||
jerodsanto
|
||||
[56]Jerod Santo
|
||||
|
||||
[63] Jerod Santo
|
||||
|
||||
Jerod Santo
|
||||
|
||||
Omaha, Nebraska
|
||||
|
||||
Jerod co-hosts [57]The Changelog, crashes [58]JS Party, and takes out
|
||||
the trash (his old code) once in awhile.
|
||||
* [59]Twitter
|
||||
* [60]GitHub
|
||||
* [61]LinkedIn
|
||||
Jerod co-hosts [64]The Changelog, crashes [65]JS Party, and takes out the trash
|
||||
(his old code) once in awhile.
|
||||
|
||||
[62]2023-05-27T13:36:23Z ago
|
||||
• [66]Twitter
|
||||
• [67]GitHub
|
||||
• [68]LinkedIn
|
||||
|
||||
[69] 2023-05-27T13:36:23Z ago
|
||||
|
||||
How is it a micro aggression? I do not understand.
|
||||
|
||||
[63]reply
|
||||
|
||||
(BUTTON)
|
||||
|
||||
(BUTTON) James Harr
|
||||
|
||||
jamesharr
|
||||
[64]James Harr
|
||||
[70]reply
|
||||
|
||||
James Harr
|
||||
|
||||
* [65]GitHub
|
||||
jamesharr
|
||||
|
||||
[66]2023-05-27T16:02:25Z ago
|
||||
[73] James Harr
|
||||
|
||||
Well, maybe micro aggression isn’t the right term, but it’s something
|
||||
that left a bad taste in her mouth and I’m trying to remember exactly
|
||||
how she described it. I think you almost have to put your self in the
|
||||
shoes of someone who 1) has had to work upstream in an industry because
|
||||
of their gender 2) has had to deal with people in a society that see a
|
||||
women’s “job” is to bear children and careers come second at best 3)
|
||||
has had to deal with a lot of people having opinions over your body and
|
||||
what you do with it, most of which do not share your anatomy. After
|
||||
putting yourself in that position, the comparison starts to feel more
|
||||
icky.
|
||||
James Harr
|
||||
|
||||
I’ll be honest, I’m defending a view I don’t entirely “get” and may not
|
||||
be capable of understanding. However, after seeing her reaction when I
|
||||
said that quote, this is one of those times where I’m going to say “I
|
||||
believe you”. I’ve been incredibly privileged in this world as a white
|
||||
male, and that’s a pretty big blindspot, so I’m putting trust in
|
||||
someone else to see what’s there.
|
||||
• [74]GitHub
|
||||
|
||||
I’m not going to fault anyone for quoting it and you have nothing to
|
||||
apologize for; Part of the reason that quote works so effectively is
|
||||
how ridiculous it is. I’m just going to challenge people to do better,
|
||||
and it’s going to be hard.
|
||||
[75] 2023-05-27T16:02:25Z ago
|
||||
|
||||
[67]reply
|
||||
Well, maybe micro aggression isn’t the right term, but it’s something that left
|
||||
a bad taste in her mouth and I’m trying to remember exactly how she described
|
||||
it. I think you almost have to put your self in the shoes of someone who 1) has
|
||||
had to work upstream in an industry because of their gender 2) has had to deal
|
||||
with people in a society that see a women’s “job” is to bear children and
|
||||
careers come second at best 3) has had to deal with a lot of people having
|
||||
opinions over your body and what you do with it, most of which do not share
|
||||
your anatomy. After putting yourself in that position, the comparison starts to
|
||||
feel more icky.
|
||||
|
||||
(BUTTON)
|
||||
I’ll be honest, I’m defending a view I don’t entirely “get” and may not be
|
||||
capable of understanding. However, after seeing her reaction when I said that
|
||||
quote, this is one of those times where I’m going to say “I believe you”. I’ve
|
||||
been incredibly privileged in this world as a white male, and that’s a pretty
|
||||
big blindspot, so I’m putting trust in someone else to see what’s there.
|
||||
|
||||
(BUTTON) Jerod Santo
|
||||
I’m not going to fault anyone for quoting it and you have nothing to apologize
|
||||
for; Part of the reason that quote works so effectively is how ridiculous it
|
||||
is. I’m just going to challenge people to do better, and it’s going to be hard.
|
||||
|
||||
[76]reply
|
||||
|
||||
Jerod Santo
|
||||
|
||||
jerodsanto
|
||||
[68]Jerod Santo
|
||||
|
||||
[79] Jerod Santo
|
||||
|
||||
Jerod Santo
|
||||
|
||||
Omaha, Nebraska
|
||||
|
||||
Jerod co-hosts [69]The Changelog, crashes [70]JS Party, and takes out
|
||||
the trash (his old code) once in awhile.
|
||||
* [71]Twitter
|
||||
* [72]GitHub
|
||||
* [73]LinkedIn
|
||||
Jerod co-hosts [80]The Changelog, crashes [81]JS Party, and takes out the trash
|
||||
(his old code) once in awhile.
|
||||
|
||||
[74]2023-05-28T12:43:12Z ago
|
||||
• [82]Twitter
|
||||
• [83]GitHub
|
||||
• [84]LinkedIn
|
||||
|
||||
I’ll be honest, I’m defending a view I don’t entirely “get” and may
|
||||
not be capable of understanding. However, after seeing her reaction
|
||||
when I said that quote, this is one of those times where I’m going
|
||||
to say “I believe you”
|
||||
[85] 2023-05-28T12:43:12Z ago
|
||||
|
||||
That’s a fair stance to take, but it doesn’t produce much of a
|
||||
convincing argument that will drive people to change. If you want
|
||||
people to starting using a better metaphor, I challenge you to come up
|
||||
with one.
|
||||
I’ll be honest, I’m defending a view I don’t entirely “get” and may not be
|
||||
capable of understanding. However, after seeing her reaction when I said
|
||||
that quote, this is one of those times where I’m going to say “I believe
|
||||
you”
|
||||
|
||||
[75]reply
|
||||
That’s a fair stance to take, but it doesn’t produce much of a convincing
|
||||
argument that will drive people to change. If you want people to starting using
|
||||
a better metaphor, I challenge you to come up with one.
|
||||
|
||||
(BUTTON)
|
||||
|
||||
(BUTTON) Bryan Betts
|
||||
|
||||
bryan-ffd
|
||||
[76]Bryan Betts
|
||||
[86]reply
|
||||
|
||||
Bryan Betts
|
||||
|
||||
* [77]GitHub
|
||||
bryan-ffd
|
||||
|
||||
[78]2023-06-28T12:58:27Z ago
|
||||
[89] Bryan Betts
|
||||
|
||||
“Over time a silver bullet has come to represent “a simple, seemingly
|
||||
magical, solution to a difficult problem.”
|
||||
Well, maybe - but what you’re actually referring to here is a magic
|
||||
bullet, or Zauberkugel. Over time, some people - yes, including
|
||||
award-winning engineers and scientists - have come to confuse the two.
|
||||
Bryan Betts
|
||||
|
||||
[79]reply
|
||||
• [90]GitHub
|
||||
|
||||
(BUTTON) Hide Overlay
|
||||
[91] 2023-06-28T12:58:27Z ago
|
||||
|
||||
* [80]About
|
||||
* [81]Contact
|
||||
* [82]888-974-CHLG (2454)
|
||||
“Over time a silver bullet has come to represent “a simple, seemingly magical,
|
||||
solution to a difficult problem.”
|
||||
Well, maybe - but what you’re actually referring to here is a magic bullet, or
|
||||
Zauberkugel. Over time, some people - yes, including award-winning engineers
|
||||
and scientists - have come to confuse the two.
|
||||
|
||||
* [83]Twitter Icon
|
||||
* [84]Mastodon Icon
|
||||
* [85]LinkedIn Icon
|
||||
* [86]GitHub Icon
|
||||
* [87]YouTube Icon
|
||||
* [88]Instagram Icon
|
||||
* [89]TikTok Icon
|
||||
[92]reply
|
||||
|
||||
[90]Podcasts
|
||||
Hide Overlay
|
||||
|
||||
* [91]The Changelog
|
||||
* [92]Practical AI
|
||||
* [93]JS Party
|
||||
* [94]Ship It!
|
||||
* [95]Founders Talk
|
||||
* [96]Go Time
|
||||
* [97]Changelog Master Feed
|
||||
* ---
|
||||
* [98]Request For Commits
|
||||
* [99]Brain Science
|
||||
* [100]Away from Keyboard
|
||||
* [101]Backstage
|
||||
* [102]Spotlight
|
||||
• [94]About
|
||||
• [95]Contact
|
||||
• [96]888-974-CHLG (2454)
|
||||
|
||||
• [97] Twitter Icon
|
||||
• [98] Mastodon Icon
|
||||
• [99] LinkedIn Icon
|
||||
• [100] GitHub Icon
|
||||
• [101] YouTube Icon
|
||||
• [102] Instagram Icon
|
||||
• [103] TikTok Icon
|
||||
|
||||
[104]Podcasts
|
||||
|
||||
• [105]The Changelog
|
||||
• [106]Practical AI
|
||||
• [107]JS Party
|
||||
• [108]Ship It!
|
||||
• [109]Founders Talk
|
||||
• [110]Go Time
|
||||
• [111]Changelog Master Feed
|
||||
• ---
|
||||
• [112]Request For Commits
|
||||
• [113]Brain Science
|
||||
• [114]Away from Keyboard
|
||||
• [115]Spotlight
|
||||
• [116]Backstage
|
||||
|
||||
Social
|
||||
|
||||
* [103]Twitter
|
||||
* [104]Mastodon
|
||||
* [105]LinkedIn
|
||||
* [106]GitHub
|
||||
* [107]YouTube
|
||||
* [108]Instagram
|
||||
* [109]TikTok
|
||||
• [117]Twitter
|
||||
• [118]Mastodon
|
||||
• [119]LinkedIn
|
||||
• [120]GitHub
|
||||
• [121]YouTube
|
||||
• [122]Instagram
|
||||
• [123]TikTok
|
||||
|
||||
Community
|
||||
|
||||
* [110]Merch Shop
|
||||
* [111]Join the Community
|
||||
* [112]Code of Conduct
|
||||
* [113]Sign in to Slack
|
||||
* ---
|
||||
* [114]Request Episode
|
||||
* [115]Submit News
|
||||
• [124]Merch Shop
|
||||
• [125]Join the Community
|
||||
• [126]Code of Conduct
|
||||
• [127]Sign in to Slack
|
||||
• ---
|
||||
• [128]Request Episode
|
||||
• [129]Submit News
|
||||
|
||||
Etc.
|
||||
|
||||
* [116]Beats
|
||||
* [117]Posts
|
||||
* [118]Changelog Nightly
|
||||
* [119]Sponsor
|
||||
* [120]Search
|
||||
* [121]View Source
|
||||
* ---
|
||||
* [122]Report an Issue
|
||||
* [123]Terms & Conditions
|
||||
* [124]Privacy Policy
|
||||
* ---
|
||||
* [125]Status
|
||||
• [130]Beats
|
||||
• [131]Posts
|
||||
• [132]Changelog Nightly
|
||||
• [133]Sponsor
|
||||
• [134]Search
|
||||
• [135]View Source
|
||||
• ---
|
||||
• [136]Report an Issue
|
||||
• [137]Terms & Conditions
|
||||
• [138]Privacy Policy
|
||||
• ---
|
||||
• [139]Status
|
||||
|
||||
[126]
|
||||
[140]
|
||||
|
||||
Bandwidth
|
||||
|
||||
Fastly
|
||||
[127]
|
||||
[141]
|
||||
|
||||
Hosting
|
||||
|
||||
Fly
|
||||
[128]
|
||||
[142]
|
||||
|
||||
Search
|
||||
|
||||
Typesense
|
||||
|
||||
(BUTTON) (BUTTON) (BUTTON)
|
||||
Player art
|
||||
(BUTTON) Previous Chapter (BUTTON) (BUTTON) (BUTTON) (BUTTON) Next
|
||||
Chapter
|
||||
(BUTTON) [1X] 0:00 ____________________ / 0:00
|
||||
Previous Chapter Next Chapter
|
||||
[152][0 ]
|
||||
[153][] [1X] 0:00[155][ ] / 0:00
|
||||
|
||||
References
|
||||
References:
|
||||
|
||||
1. https://changelog.com/feed
|
||||
2. https://changelog.com/master/feed
|
||||
3. https://changelog.com/posts/feed
|
||||
4. https://changelog.com/feed.json
|
||||
5. https://changelog.com/
|
||||
6. https://changelog.com/
|
||||
7. https://changelog.com/beats
|
||||
8. https://changelog.com/posts
|
||||
9. https://changelog.com/community
|
||||
10. https://changelog.com/subscribe
|
||||
11. https://changelog.com/++
|
||||
12. https://changelog.com/live
|
||||
13. https://changelog.com/news/submit
|
||||
14. https://changelog.com/in
|
||||
15. https://changelog.com/
|
||||
16. https://changelog.com/podcasts
|
||||
17. https://changelog.com/beats
|
||||
18. https://changelog.com/posts
|
||||
19. https://changelog.com/community
|
||||
20. https://changelog.com/subscribe
|
||||
21. https://changelog.com/++
|
||||
22. https://changelog.com/news/submit
|
||||
23. https://changelog.com/person/jerodsanto
|
||||
24. https://changelog.com/posts
|
||||
25. https://changelog.com/person/jerodsanto
|
||||
26. https://changelog.com/posts/still-no-silver-bullet
|
||||
27. https://changelog.com/topic/practices
|
||||
28. https://changelog.com/topic/history
|
||||
29. https://changelog.com/topic/react
|
||||
30. https://en.wikipedia.org/wiki/Fred_Brooks
|
||||
31. https://en.wikipedia.org/wiki/Brooks's_law
|
||||
32. https://en.wikipedia.org/wiki/The_Mythical_Man-Month
|
||||
33. http://worrydream.com/refs/Brooks-NoSilverBullet.pdf
|
||||
34. https://en.wikipedia.org/wiki/Silver_bullet
|
||||
35. https://en.wikipedia.org/wiki/Panacea_(medicine)
|
||||
36. https://youtube.com/shorts/m5A8eQaaG8o
|
||||
37. https://jsparty.fm/269#transcript-237
|
||||
38. https://reactjs.org/
|
||||
39. https://jsparty.fm/269#transcript-237
|
||||
40. https://www.youtube.com/embed/btIc-_dGz9k
|
||||
41. https://youtube.com/changelog
|
||||
42. https://changelog.com/news
|
||||
43. https://changelog.com/news/45/email
|
||||
44. https://changelog.com/in
|
||||
45. https://changelog.com/join
|
||||
46. https://twitter.com/SolomonUcko
|
||||
47. https://twitter.com/SolomonUcko
|
||||
48. https://github.com/sollyucko
|
||||
49. https://www.linkedin.com/in/solomon-ucko-143853155
|
||||
50. https://changelog.com/posts/still-no-silver-bullet#comment-YX1k
|
||||
51. javascript:void(0)
|
||||
52. https://changelog.com/person/jamesharr
|
||||
53. https://github.com/jamesharr
|
||||
54. https://changelog.com/posts/still-no-silver-bullet#comment-yW7b
|
||||
55. javascript:void(0)
|
||||
56. https://changelog.com/person/jerodsanto
|
||||
57. https://changelog.com/podcast
|
||||
58. https://changelog.com/jsparty
|
||||
59. https://twitter.com/jerodsanto
|
||||
60. https://github.com/jerodsanto
|
||||
61. https://www.linkedin.com/in/jerodsanto
|
||||
62. https://changelog.com/posts/still-no-silver-bullet#comment-V31e
|
||||
63. javascript:void(0)
|
||||
64. https://changelog.com/person/jamesharr
|
||||
65. https://github.com/jamesharr
|
||||
66. https://changelog.com/posts/still-no-silver-bullet#comment-Zqom
|
||||
67. javascript:void(0)
|
||||
68. https://changelog.com/person/jerodsanto
|
||||
69. https://changelog.com/podcast
|
||||
70. https://changelog.com/jsparty
|
||||
71. https://twitter.com/jerodsanto
|
||||
72. https://github.com/jerodsanto
|
||||
73. https://www.linkedin.com/in/jerodsanto
|
||||
74. https://changelog.com/posts/still-no-silver-bullet#comment-qGM2
|
||||
75. javascript:void(0)
|
||||
76. https://github.com/bryan-ffd
|
||||
77. https://github.com/bryan-ffd
|
||||
78. https://changelog.com/posts/still-no-silver-bullet#comment-J3nq
|
||||
79. javascript:void(0)
|
||||
80. https://changelog.com/about
|
||||
81. https://changelog.com/contact
|
||||
82. tel:+1-888-974-2454
|
||||
83. https://twitter.com/changelog
|
||||
84. https://changelog.social/
|
||||
85. https://linkedin.com/company/changelog
|
||||
86. https://github.com/thechangelog
|
||||
87. https://www.youtube.com/changelog
|
||||
88. https://www.instagram.com/changelog_
|
||||
89. https://www.tiktok.com/@changelog.com
|
||||
90. https://changelog.com/podcasts
|
||||
91. https://changelog.com/podcast
|
||||
92. https://changelog.com/practicalai
|
||||
93. https://changelog.com/jsparty
|
||||
94. https://changelog.com/shipit
|
||||
95. https://changelog.com/founderstalk
|
||||
96. https://changelog.com/gotime
|
||||
97. https://changelog.com/master
|
||||
98. https://changelog.com/rfc
|
||||
99. https://changelog.com/brainscience
|
||||
100. https://changelog.com/afk
|
||||
101. https://changelog.com/backstage
|
||||
102. https://changelog.com/spotlight
|
||||
103. https://twitter.com/changelog
|
||||
104. https://changelog.social/
|
||||
105. https://linkedin.com/company/changelog
|
||||
106. https://github.com/thechangelog
|
||||
107. https://www.youtube.com/changelog
|
||||
108. https://www.instagram.com/changelog_
|
||||
109. https://www.tiktok.com/@changelog.com
|
||||
110. https://merch.changelog.com/
|
||||
111. https://changelog.com/community
|
||||
112. https://changelog.com/coc
|
||||
113. https://changelog.slack.com/
|
||||
114. https://changelog.com/request
|
||||
115. https://changelog.com/news/submit
|
||||
116. https://changelog.com/beats
|
||||
117. https://changelog.com/posts
|
||||
118. https://changelog.com/nightly
|
||||
119. https://changelog.com/sponsor
|
||||
120. https://changelog.com/search
|
||||
121. https://github.com/thechangelog/changelog.com
|
||||
122. https://github.com/thechangelog/changelog.com/issues/new
|
||||
123. https://changelog.com/terms
|
||||
124. https://changelog.com/privacy
|
||||
125. https://status.changelog.com/
|
||||
126. https://www.fastly.com/?utm_source=changelog
|
||||
127. https://fly.io/
|
||||
128. https://typesense.org/?utm_source=changelog&utm_campaign=changelog-search&utm_medium=referral
|
||||
[1] https://changelog.com/
|
||||
[2] https://changelog.com/
|
||||
[3] https://changelog.com/beats
|
||||
[4] https://changelog.com/posts
|
||||
[5] https://changelog.com/community
|
||||
[6] https://changelog.com/subscribe
|
||||
[7] https://changelog.com/++
|
||||
[8] https://changelog.com/live
|
||||
[9] https://changelog.com/news/submit
|
||||
[10] https://changelog.com/in
|
||||
[13] https://changelog.com/
|
||||
[14] https://changelog.com/podcasts
|
||||
[15] https://changelog.com/beats
|
||||
[16] https://changelog.com/posts
|
||||
[17] https://changelog.com/community
|
||||
[18] https://changelog.com/subscribe
|
||||
[19] https://changelog.com/++
|
||||
[20] https://changelog.com/news/submit
|
||||
[22] https://changelog.com/person/jerodsanto
|
||||
[23] https://changelog.com/posts
|
||||
[24] https://changelog.com/person/jerodsanto
|
||||
[25] https://changelog.com/posts/still-no-silver-bullet
|
||||
[26] https://changelog.com/topic/practices
|
||||
[27] https://changelog.com/topic/history
|
||||
[28] https://changelog.com/topic/react
|
||||
[29] https://en.wikipedia.org/wiki/Fred_Brooks
|
||||
[30] https://en.wikipedia.org/wiki/Brooks%27s_law
|
||||
[31] https://en.wikipedia.org/wiki/The_Mythical_Man-Month
|
||||
[32] http://worrydream.com/refs/Brooks-NoSilverBullet.pdf
|
||||
[33] https://en.wikipedia.org/wiki/Silver_bullet
|
||||
[34] https://en.wikipedia.org/wiki/Panacea_(medicine)
|
||||
[35] https://youtube.com/shorts/m5A8eQaaG8o
|
||||
[36] https://jsparty.fm/269#transcript-237
|
||||
[37] https://reactjs.org/
|
||||
[38] https://jsparty.fm/269#transcript-237
|
||||
[39] https://youtube.com/changelog
|
||||
[40] https://changelog.com/news
|
||||
[41] https://changelog.com/news/45/email
|
||||
[45] https://changelog.com/in
|
||||
[46] https://changelog.com/join
|
||||
[49] https://twitter.com/SolomonUcko
|
||||
[50] https://twitter.com/SolomonUcko
|
||||
[51] https://github.com/sollyucko
|
||||
[52] https://www.linkedin.com/in/solomon-ucko-143853155
|
||||
[53] https://changelog.com/posts/still-no-silver-bullet#comment-YX1k
|
||||
[54] javascript:void(0)
|
||||
[57] https://changelog.com/person/jamesharr
|
||||
[58] https://github.com/jamesharr
|
||||
[59] https://changelog.com/posts/still-no-silver-bullet#comment-yW7b
|
||||
[60] javascript:void(0)
|
||||
[63] https://changelog.com/person/jerodsanto
|
||||
[64] https://changelog.com/podcast
|
||||
[65] https://changelog.com/jsparty
|
||||
[66] https://twitter.com/jerodsanto
|
||||
[67] https://github.com/jerodsanto
|
||||
[68] https://www.linkedin.com/in/jerodsanto
|
||||
[69] https://changelog.com/posts/still-no-silver-bullet#comment-V31e
|
||||
[70] javascript:void(0)
|
||||
[73] https://changelog.com/person/jamesharr
|
||||
[74] https://github.com/jamesharr
|
||||
[75] https://changelog.com/posts/still-no-silver-bullet#comment-Zqom
|
||||
[76] javascript:void(0)
|
||||
[79] https://changelog.com/person/jerodsanto
|
||||
[80] https://changelog.com/podcast
|
||||
[81] https://changelog.com/jsparty
|
||||
[82] https://twitter.com/jerodsanto
|
||||
[83] https://github.com/jerodsanto
|
||||
[84] https://www.linkedin.com/in/jerodsanto
|
||||
[85] https://changelog.com/posts/still-no-silver-bullet#comment-qGM2
|
||||
[86] javascript:void(0)
|
||||
[89] https://github.com/bryan-ffd
|
||||
[90] https://github.com/bryan-ffd
|
||||
[91] https://changelog.com/posts/still-no-silver-bullet#comment-J3nq
|
||||
[92] javascript:void(0)
|
||||
[94] https://changelog.com/about
|
||||
[95] https://changelog.com/contact
|
||||
[96] tel:+1-888-974-2454
|
||||
[97] https://twitter.com/changelog
|
||||
[98] https://changelog.social/
|
||||
[99] https://linkedin.com/company/changelog
|
||||
[100] https://github.com/thechangelog
|
||||
[101] https://www.youtube.com/changelog
|
||||
[102] https://www.instagram.com/changelog_
|
||||
[103] https://www.tiktok.com/@changelog.com
|
||||
[104] https://changelog.com/podcasts
|
||||
[105] https://changelog.com/podcast
|
||||
[106] https://changelog.com/practicalai
|
||||
[107] https://changelog.com/jsparty
|
||||
[108] https://changelog.com/shipit
|
||||
[109] https://changelog.com/founderstalk
|
||||
[110] https://changelog.com/gotime
|
||||
[111] https://changelog.com/master
|
||||
[112] https://changelog.com/rfc
|
||||
[113] https://changelog.com/brainscience
|
||||
[114] https://changelog.com/afk
|
||||
[115] https://changelog.com/spotlight
|
||||
[116] https://changelog.com/backstage
|
||||
[117] https://twitter.com/changelog
|
||||
[118] https://changelog.social/
|
||||
[119] https://linkedin.com/company/changelog
|
||||
[120] https://github.com/thechangelog
|
||||
[121] https://www.youtube.com/changelog
|
||||
[122] https://www.instagram.com/changelog_
|
||||
[123] https://www.tiktok.com/@changelog.com
|
||||
[124] https://merch.changelog.com/
|
||||
[125] https://changelog.com/community
|
||||
[126] https://changelog.com/coc
|
||||
[127] https://changelog.slack.com/
|
||||
[128] https://changelog.com/request
|
||||
[129] https://changelog.com/news/submit
|
||||
[130] https://changelog.com/beats
|
||||
[131] https://changelog.com/posts
|
||||
[132] https://changelog.com/nightly
|
||||
[133] https://changelog.com/sponsor
|
||||
[134] https://changelog.com/search
|
||||
[135] https://github.com/thechangelog/changelog.com
|
||||
[136] https://github.com/thechangelog/changelog.com/issues/new
|
||||
[137] https://changelog.com/terms
|
||||
[138] https://changelog.com/privacy
|
||||
[139] https://status.changelog.com/
|
||||
[140] https://www.fastly.com/?utm_source=changelog
|
||||
[141] https://fly.io/
|
||||
[142] https://typesense.org/?utm_source=changelog&utm_campaign=changelog-search&utm_medium=referral
|
||||
|
||||
@@ -1,65 +1,62 @@
|
||||
#[1]Notes from your friend Chris
|
||||
|
||||
[2]Notes from your friend Chris
|
||||
[3]Home [4]Archives [5]Search [6]Feed
|
||||
[1] Notes from your friend Chris
|
||||
[2]Home [3]Archives [4]Search [5]Feed
|
||||
|
||||
Digital Notetaking Stack
|
||||
|
||||
So I use a paper notebook. To be more specific, I use a notebook binder
|
||||
with three separate notebooks in it. Each notebook serves a specific
|
||||
purpose. The first one is for tasks and to-dos. The second one is just
|
||||
a scratch pad for absolutely anything under the sun: drawings,
|
||||
thoughts, somebody’s phone number, anything. The last one is a very
|
||||
regimented journal where I reflect on personal experiences.
|
||||
So I use a paper notebook. To be more specific, I use a notebook binder with
|
||||
three separate notebooks in it. Each notebook serves a specific purpose. The
|
||||
first one is for tasks and to-dos. The second one is just a scratch pad for
|
||||
absolutely anything under the sun: drawings, thoughts, somebody’s phone number,
|
||||
anything. The last one is a very regimented journal where I reflect on personal
|
||||
experiences.
|
||||
|
||||
Sure, I could just use a single notebook for all of these purposes.
|
||||
Hell, I could use a stack of printer paper for all these purposes; but
|
||||
it would be clunky, it would be difficult, and I wouldn’t really want
|
||||
to use it because it wouldn’t be very satisfying.
|
||||
Sure, I could just use a single notebook for all of these purposes. Hell, I
|
||||
could use a stack of printer paper for all these purposes; but it would be
|
||||
clunky, it would be difficult, and I wouldn’t really want to use it because it
|
||||
wouldn’t be very satisfying.
|
||||
|
||||
So, I’ve developed a system that works for taking paper notes. It’s
|
||||
custom tailored to my goals and how my brain works. And as a cherry on
|
||||
top, I picked a notebook binder and pen that I really enjoy touching
|
||||
and looking at, which makes the whole system just that much better.
|
||||
So, I’ve developed a system that works for taking paper notes. It’s custom
|
||||
tailored to my goals and how my brain works. And as a cherry on top, I picked a
|
||||
notebook binder and pen that I really enjoy touching and looking at, which
|
||||
makes the whole system just that much better.
|
||||
|
||||
Similarly, I use a set of different apps for different purposes when
|
||||
I’m taking notes in my digital world.
|
||||
Similarly, I use a set of different apps for different purposes when I’m taking
|
||||
notes in my digital world.
|
||||
|
||||
Yes, I could probably stick to just using the default notes app on my
|
||||
phone, but it would be clunky, there would be friction, it would not
|
||||
adapt to the way my brain works, and I would end up using it less. Plus
|
||||
it isn’t really that satisfying to look at… but that’s just my opinion.
|
||||
Yes, I could probably stick to just using the default notes app on my phone,
|
||||
but it would be clunky, there would be friction, it would not adapt to the way
|
||||
my brain works, and I would end up using it less. Plus it isn’t really that
|
||||
satisfying to look at… but that’s just my opinion.
|
||||
|
||||
So instead, after nearly a decade of trial and error, I’ve developed a
|
||||
system and way of working with my notes in my digital world that brings
|
||||
me immense satisfaction and works well with the way my brain works and
|
||||
the way my lifestyle is currently set up.
|
||||
So instead, after nearly a decade of trial and error, I’ve developed a system
|
||||
and way of working with my notes in my digital world that brings me immense
|
||||
satisfaction and works well with the way my brain works and the way my
|
||||
lifestyle is currently set up.
|
||||
|
||||
DISCLAIMERS:
|
||||
* This is not me trying to convince you to use the apps that I use.
|
||||
This is what works for me, and is very tailored to my brain and
|
||||
life. I’m not here to tell you what to use. But if hearing about my
|
||||
setup gives you ideas, that’s great!
|
||||
* This is something I will continue to change and improve. It’s been
|
||||
a long evolution to land on this setup. Trial and error was
|
||||
involved, and will continue to be. I think there’s an ebb and flow
|
||||
to changing your setup. If you do it too often, you lose
|
||||
productivity. If you don’t do it enough, your setup may stagnate
|
||||
and fail to match your lifestyle.
|
||||
* This is a values-based notetaking setup. I believe in owning my own
|
||||
data, having an easily exportable format (markdown), and using
|
||||
tools that are extensible & hackable. For someone who doesn’t share
|
||||
these values, this may seem overbuilt or convoluted or not native
|
||||
enough or something.
|
||||
* This is not written for the PKM enthusiast community. It’s a basic,
|
||||
balanced setup using tools that are widely known. If you’re a
|
||||
longtime Personal Knowledge Management guru, there won’t be
|
||||
anything new for you here. This is written for the layman who is
|
||||
dissatisfied with their current setup and looking for inspiration.
|
||||
|
||||
Anyway, if digital notetaking is something that never really clicked
|
||||
for you, or if you currently have a workflow that you’re not pleased
|
||||
with, this might be a blog article for you. Let me know on [7]Mastodon!
|
||||
• This is not me trying to convince you to use the apps that I use. This is
|
||||
what works for me, and is very tailored to my brain and life. I’m not here
|
||||
to tell you what to use. But if hearing about my setup gives you ideas,
|
||||
that’s great!
|
||||
• This is something I will continue to change and improve. It’s been a long
|
||||
evolution to land on this setup. Trial and error was involved, and will
|
||||
continue to be. I think there’s an ebb and flow to changing your setup. If
|
||||
you do it too often, you lose productivity. If you don’t do it enough, your
|
||||
setup may stagnate and fail to match your lifestyle.
|
||||
• This is a values-based notetaking setup. I believe in owning my own data,
|
||||
having an easily exportable format (markdown), and using tools that are
|
||||
extensible & hackable. For someone who doesn’t share these values, this may
|
||||
seem overbuilt or convoluted or not native enough or something.
|
||||
• This is not written for the PKM enthusiast community. It’s a basic,
|
||||
balanced setup using tools that are widely known. If you’re a longtime
|
||||
Personal Knowledge Management guru, there won’t be anything new for you
|
||||
here. This is written for the layman who is dissatisfied with their current
|
||||
setup and looking for inspiration.
|
||||
|
||||
Anyway, if digital notetaking is something that never really clicked for you,
|
||||
or if you currently have a workflow that you’re not pleased with, this might be
|
||||
a blog article for you. Let me know on [6]Mastodon!
|
||||
|
||||
Overview
|
||||
|
||||
@@ -71,222 +68,214 @@ Overview
|
||||
|
||||
Intake / Short-term notes
|
||||
|
||||
One of the most important parts of my setup is my intake app. I hope
|
||||
you’ve never had to experience this feeling:
|
||||
One of the most important parts of my setup is my intake app. I hope you’ve
|
||||
never had to experience this feeling:
|
||||
|
||||
Your friend names a cool restaurant or book for you to look up
|
||||
later. You hastily pull up your notes app to write it down. But
|
||||
wait. Where should you make the note? Does restaurant fall under
|
||||
your travel folder? Or your food folder? What should you title it?
|
||||
Do you need to make a new folder? While you’re fiddling with your
|
||||
app your friend has already started talking about that other boba
|
||||
place you should explore. Should that go in a whole other note? Oh
|
||||
god.
|
||||
Your friend names a cool restaurant or book for you to look up later. You
|
||||
hastily pull up your notes app to write it down. But wait. Where should you
|
||||
make the note? Does restaurant fall under your travel folder? Or your food
|
||||
folder? What should you title it? Do you need to make a new folder? While
|
||||
you’re fiddling with your app your friend has already started talking about
|
||||
that other boba place you should explore. Should that go in a whole other
|
||||
note? Oh god.
|
||||
|
||||
I feel like a lot of people give up after going through this a couple
|
||||
times and their notes app just ends up being a hodge-podge of
|
||||
unorganized, random shit that they dread looking back at later.
|
||||
I feel like a lot of people give up after going through this a couple times and
|
||||
their notes app just ends up being a hodge-podge of unorganized, random shit
|
||||
that they dread looking back at later.
|
||||
|
||||
This is exactly why I use an intake app, and my app of choice for this
|
||||
incredibly important role is, of course, Drafts.
|
||||
|
||||
[8]✨Drafts✨
|
||||
[7]✨Drafts✨
|
||||
|
||||
Drafts is made for this exact purpose. By default, it opens to a blank
|
||||
new note. Whatever you type as the first line is considered the title.
|
||||
And it has this insane concept called Actions that lets you quickly
|
||||
process your notes by moving them elsewhere through deep interactions
|
||||
with your other existing apps.
|
||||
Drafts is made for this exact purpose. By default, it opens to a blank new
|
||||
note. Whatever you type as the first line is considered the title. And it has
|
||||
this insane concept called Actions that lets you quickly process your notes by
|
||||
moving them elsewhere through deep interactions with your other existing apps.
|
||||
|
||||
Let’s look at some pictures:
|
||||
|
||||
[723b4f53-202a-41b6-981c-d1e2710d6e47.png]
|
||||
[723b4f53-202a-41b6-981c-d1e2710d6e47]
|
||||
|
||||
[896a49c3-ec20-4dff-89ac-33f9cf1e6120.png]
|
||||
[896a49c3-ec20-4dff-89ac-33f9cf1e6120]
|
||||
|
||||
[78912a4e-95cc-463f-af64-5e55f4ddb395.png]
|
||||
[78912a4e-95cc-463f-af64-5e55f4ddb395]
|
||||
|
||||
In the leftmost image, you can see where I keep Drafts. Front and
|
||||
center, only app in my bottom drawer.
|
||||
In the leftmost image, you can see where I keep Drafts. Front and center, only
|
||||
app in my bottom drawer.
|
||||
|
||||
Middle image, you have the first thing you see when the app opens: a
|
||||
blank note to write that restaurant / song / boba place.
|
||||
Middle image, you have the first thing you see when the app opens: a blank note
|
||||
to write that restaurant / song / boba place.
|
||||
|
||||
Rightmost image, you have the actions pane.
|
||||
|
||||
The actions in this pane are customized to my workflow. You are able to
|
||||
configure multiple pages, but I’m content with just one for now.
|
||||
|
||||
Drafting a text to your mom? Send it as a text message after you’ve
|
||||
perfected it. Shopping list? Export straight into wherever you keep
|
||||
that (for me it’s Things). Deep thought that’s perhaps a little too
|
||||
deep? File it away in Day One where it will never see the light of day.
|
||||
Drafting a text to your mom? Send it as a text message after you’ve perfected
|
||||
it. Shopping list? Export straight into wherever you keep that (for me it’s
|
||||
Things). Deep thought that’s perhaps a little too deep? File it away in Day One
|
||||
where it will never see the light of day.
|
||||
|
||||
Basic tagging, shortcuts integration, and an archive folder really tie
|
||||
everything together. Process a ton of drafts at once by selecting them
|
||||
in the app and then doing a batch operation.
|
||||
everything together. Process a ton of drafts at once by selecting them in the
|
||||
app and then doing a batch operation.
|
||||
|
||||
Drafts comes with a pretty comprehensive set of actions right out of
|
||||
the box, but the true power here comes from tapping into the [9]Drafts
|
||||
Directory: a massive repository of actions sourced from the Drafts
|
||||
community (as well as many written by the creator).
|
||||
Drafts comes with a pretty comprehensive set of actions right out of the box,
|
||||
but the true power here comes from tapping into the [8]Drafts Directory: a
|
||||
massive repository of actions sourced from the Drafts community (as well as
|
||||
many written by the creator).
|
||||
|
||||
Every app you could imagine is in this directory.
|
||||
|
||||
And the best part: if your app isn’t in there you can write your own
|
||||
action!
|
||||
And the best part: if your app isn’t in there you can write your own action!
|
||||
|
||||
Drafts could honestly take up a whole series of blog posts so I’ll stop
|
||||
there for now. I haven’t even scratched the surface of what it can do,
|
||||
but you really don’t need to dive very deep to reap the benefits.
|
||||
Drafts could honestly take up a whole series of blog posts so I’ll stop there
|
||||
for now. I haven’t even scratched the surface of what it can do, but you really
|
||||
don’t need to dive very deep to reap the benefits.
|
||||
|
||||
Let’s table Drafts for now. It’ll come up later with how it pipes into
|
||||
my other systems.
|
||||
Let’s table Drafts for now. It’ll come up later with how it pipes into my other
|
||||
systems.
|
||||
|
||||
Long-term notes
|
||||
|
||||
So you may have picked up on the fact that notes don’t stay in Drafts
|
||||
long. They either get exported or archived.
|
||||
So you may have picked up on the fact that notes don’t stay in Drafts long.
|
||||
They either get exported or archived.
|
||||
|
||||
Not every note is worthy of a permanent place in your note-taking
|
||||
kingdom. Embracing this concept was a huge step in cleaning up my
|
||||
digital world and starting to build a meaningful notes database for my
|
||||
life.
|
||||
Not every note is worthy of a permanent place in your note-taking kingdom.
|
||||
Embracing this concept was a huge step in cleaning up my digital world and
|
||||
starting to build a meaningful notes database for my life.
|
||||
|
||||
As I continued to acclimate to digital notes, I noticed that certain
|
||||
note categories began to make themselves known.
|
||||
As I continued to acclimate to digital notes, I noticed that certain note
|
||||
categories began to make themselves known.
|
||||
|
||||
[11b85744-48ac-4c2d-a817-6e813929b837.png]
|
||||
[11b85744-48ac-4c2d-a817-6e813929b837]
|
||||
|
||||
The middle 3 folders are the important ones to note here.
|
||||
|
||||
Core
|
||||
|
||||
My core folder is where deeply personal stuff goes. Longterm goals,
|
||||
journal entries, guiding principles and personal mantras. I wouldn’t
|
||||
expect you to understand mine, but I’d encourage anyone to explore this
|
||||
category of notes for themselves.
|
||||
My core folder is where deeply personal stuff goes. Longterm goals, journal
|
||||
entries, guiding principles and personal mantras. I wouldn’t expect you to
|
||||
understand mine, but I’d encourage anyone to explore this category of notes for
|
||||
themselves.
|
||||
|
||||
The notes in this folder don’t change much. But I recently started
|
||||
recording a daily voice note diary of my day that I then transcribe and
|
||||
summarize with AI.
|
||||
The notes in this folder don’t change much. But I recently started recording a
|
||||
daily voice note diary of my day that I then transcribe and summarize with AI.
|
||||
|
||||
I also do yearly, quarterly, monthly, and weekly planning sessions, and
|
||||
the artifacts from these sessions often end up in here.
|
||||
I also do yearly, quarterly, monthly, and weekly planning sessions, and the
|
||||
artifacts from these sessions often end up in here.
|
||||
|
||||
Projects
|
||||
|
||||
Projects is my favorite folder in my long-term notes.
|
||||
|
||||
For me, this is a place for all kinds of things. Packing lists +
|
||||
itineraries + other details for an upcoming trip, startup ideas,
|
||||
potential blog posts, plans and details for my numerous hobbies.
|
||||
For me, this is a place for all kinds of things. Packing lists + itineraries +
|
||||
other details for an upcoming trip, startup ideas, potential blog posts, plans
|
||||
and details for my numerous hobbies.
|
||||
|
||||
Notes in here often originate in Drafts and get quickly exported to my
|
||||
projects folder via Drafts actions.
|
||||
Notes in here often originate in Drafts and get quickly exported to my projects
|
||||
folder via Drafts actions.
|
||||
|
||||
Projects are usually temporary, and get moved to my archive folder when
|
||||
they’re completed (or when I get bored and move onto the next hobby).
|
||||
Projects are usually temporary, and get moved to my archive folder when they’re
|
||||
completed (or when I get bored and move onto the next hobby).
|
||||
|
||||
Reference
|
||||
|
||||
This is for lists and information that I will want to keep as
|
||||
reference. Quotes, wishlists, movie bucket list, books to read, etc.
|
||||
This is for lists and information that I will want to keep as reference.
|
||||
Quotes, wishlists, movie bucket list, books to read, etc.
|
||||
|
||||
I used to maintain a personal wiki of information on different topics.
|
||||
Zettelkasten-esque, my knowledge wiki is currently in need of cleanup
|
||||
and will likely be featured in its own blog post if I continue to work
|
||||
on it.
|
||||
Zettelkasten-esque, my knowledge wiki is currently in need of cleanup and will
|
||||
likely be featured in its own blog post if I continue to work on it.
|
||||
|
||||
Other folders
|
||||
|
||||
Archive is self-explanatory. Old notes go in here.
|
||||
|
||||
Templates is for fill-in-the-blank templates for notes that I take
|
||||
often. Like those yearly/quarterly/etc check-ins and certain types of
|
||||
projects. There’s an Obsidian plugin that has some functionality to
|
||||
take advantage of these, but right now I just duplicate and move
|
||||
markdown files manually as-needed. Nothing fancy.
|
||||
__________________________________________________________________
|
||||
Templates is for fill-in-the-blank templates for notes that I take often. Like
|
||||
those yearly/quarterly/etc check-ins and certain types of projects. There’s an
|
||||
Obsidian plugin that has some functionality to take advantage of these, but
|
||||
right now I just duplicate and move markdown files manually as-needed. Nothing
|
||||
fancy.
|
||||
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
I find this setup to be just enough. My main folders allow plenty of
|
||||
flexibility within them for me to develop all kinds of systems to match
|
||||
how my brain works.
|
||||
flexibility within them for me to develop all kinds of systems to match how my
|
||||
brain works.
|
||||
|
||||
Apps and stuff
|
||||
|
||||
Yes, yes, we’ll talk about the app I use, but that’s much less
|
||||
important than the underlying foundation.
|
||||
Yes, yes, we’ll talk about the app I use, but that’s much less important than
|
||||
the underlying foundation.
|
||||
|
||||
My long-term note-taking system is really just two things:
|
||||
* A collection of markdown files
|
||||
* A syncing service that circulates these files between my devices
|
||||
|
||||
If you commit to using the first, you can choose whatever you want for
|
||||
the second and migrate between syncing providers at-will with minimal
|
||||
headache. I’m not going to say much more on that, since others have
|
||||
covered it very well ([10]File over App from one of the people
|
||||
responsible for Obsidian).
|
||||
• A collection of markdown files
|
||||
• A syncing service that circulates these files between my devices
|
||||
|
||||
And as long as you have these two, you can access all of your notes on
|
||||
all of your devices with whatever Markdown tools you’d like. Ultimate
|
||||
freedom, extensibility, and hackability.
|
||||
If you commit to using the first, you can choose whatever you want for the
|
||||
second and migrate between syncing providers at-will with minimal headache. I’m
|
||||
not going to say much more on that, since others have covered it very well ([9]
|
||||
File over App from one of the people responsible for Obsidian).
|
||||
|
||||
And as long as you have these two, you can access all of your notes on all of
|
||||
your devices with whatever Markdown tools you’d like. Ultimate freedom,
|
||||
extensibility, and hackability.
|
||||
|
||||
That said, I use Obsidian.
|
||||
|
||||
[11]✨Obsidian✨
|
||||
[10]✨Obsidian✨
|
||||
|
||||
My go-to sync tool was Dropbox for a long time, but after committing
|
||||
fully to Obsidian as my default app across Mac / iPad / iPhone I’ve
|
||||
switched over to Obsidian Sync for the E2E encryption, longer note
|
||||
history, and seamless integration with Obsidian.
|
||||
My go-to sync tool was Dropbox for a long time, but after committing fully to
|
||||
Obsidian as my default app across Mac / iPad / iPhone I’ve switched over to
|
||||
Obsidian Sync for the E2E encryption, longer note history, and seamless
|
||||
integration with Obsidian.
|
||||
|
||||
It basically works like Dropbox used to before the weird Apple OS
|
||||
integration stuff. Obsidian Sync downloads all the files onto your
|
||||
device, so you still can access them with any markdown editor that has
|
||||
access to the filesystem.
|
||||
It basically works like Dropbox used to before the weird Apple OS integration
|
||||
stuff. Obsidian Sync downloads all the files onto your device, so you still can
|
||||
access them with any markdown editor that has access to the filesystem.
|
||||
|
||||
Drafts can export to my longterm notes via both the OS filesystem and
|
||||
Obsidian app urls. Same for Shortcuts, which I’ll get to later.
|
||||
Drafts can export to my longterm notes via both the OS filesystem and Obsidian
|
||||
app urls. Same for Shortcuts, which I’ll get to later.
|
||||
|
||||
Obsidian also plays nicely with iCloud, and supports Dropbox / Google
|
||||
Drive / S3 through its community plugins. I have it connected to my
|
||||
Dropbox for publishing / sharing notes, which I’ll get into in a bit.
|
||||
Obsidian also plays nicely with iCloud, and supports Dropbox / Google Drive /
|
||||
S3 through its community plugins. I have it connected to my Dropbox for
|
||||
publishing / sharing notes, which I’ll get into in a bit.
|
||||
|
||||
My main reasons for using Obsidian are:
|
||||
* It has command palette
|
||||
* It has quick open
|
||||
* It’s hackable & has community plugins
|
||||
|
||||
Honestly, the specific app here doesn’t really matter as much as the
|
||||
underlying system. I could switch to using Ulysses or 1Writer or Byword
|
||||
or nvAlt or something else entirely if I wanted.
|
||||
• It has command palette
|
||||
• It has quick open
|
||||
• It’s hackable & has community plugins
|
||||
|
||||
I will say, like Drafts, Obsidian is a product of thoughtful design.
|
||||
You don’t need to dive to deep to reap the benefits. But if you want to
|
||||
be a power user, there’s a LOT it can do. For me, the important thing
|
||||
is that I can open files and do stuff with them easily, and I can hack
|
||||
it to accommodate to pretty much any use case my weird brain comes up
|
||||
with.
|
||||
Honestly, the specific app here doesn’t really matter as much as the underlying
|
||||
system. I could switch to using Ulysses or 1Writer or Byword or nvAlt or
|
||||
something else entirely if I wanted.
|
||||
|
||||
I will say, like Drafts, Obsidian is a product of thoughtful design. You don’t
|
||||
need to dive to deep to reap the benefits. But if you want to be a power user,
|
||||
there’s a LOT it can do. For me, the important thing is that I can open files
|
||||
and do stuff with them easily, and I can hack it to accommodate to pretty much
|
||||
any use case my weird brain comes up with.
|
||||
|
||||
Obsidian really knocks it out of the park for me, so I use it almost
|
||||
exclusively right now (for long-term notes).
|
||||
|
||||
Published / shared notes
|
||||
|
||||
I’m not going to shit on Notion in this post (not much, at least), but
|
||||
one thing I really missed from migrating from it was the
|
||||
ease-of-sharing.
|
||||
I’m not going to shit on Notion in this post (not much, at least), but one
|
||||
thing I really missed from migrating from it was the ease-of-sharing.
|
||||
|
||||
I would put together an itinerary, packing list, cost breakdown, and
|
||||
car-pooling plan for group camping trips in minutes, hit the share
|
||||
button, and fire it off to my group chat of friends with no hiccups.
|
||||
car-pooling plan for group camping trips in minutes, hit the share button, and
|
||||
fire it off to my group chat of friends with no hiccups.
|
||||
|
||||
I had been craving that functionality in my new note-taking system, so
|
||||
I built it. Kind of.
|
||||
I had been craving that functionality in my new note-taking system, so I built
|
||||
it. Kind of.
|
||||
|
||||
Before we get to that, let’s talk about my workflow for posting blog
|
||||
articles.
|
||||
Before we get to that, let’s talk about my workflow for posting blog articles.
|
||||
|
||||
Publishing blog posts
|
||||
|
||||
@@ -294,14 +283,13 @@ Publishing blog posts
|
||||
|
||||
I do that with help from a service called Blot.
|
||||
|
||||
[12]✨Blot✨
|
||||
[11]✨Blot✨
|
||||
|
||||
Blot turns a folder in your Dropbox account into a fully functioning
|
||||
blog.
|
||||
Blot turns a folder in your Dropbox account into a fully functioning blog.
|
||||
|
||||
Their website explains it all, but basically to publish this article I
|
||||
literally just dropped it into a folder in my Dropbox, which I can do
|
||||
without leaving Obsidian.
|
||||
literally just dropped it into a folder in my Dropbox, which I can do without
|
||||
leaving Obsidian.
|
||||
|
||||
I wouldn’t say this is anything groundbreaking, but I find it immensely
|
||||
satisfying.
|
||||
@@ -310,133 +298,125 @@ Sharing notes
|
||||
|
||||
Okay, back to Notion-esque sharing.
|
||||
|
||||
Let’s say I put together a travel itinerary for a camping trip in my
|
||||
Projects folder. It has a list of everyone attending, cost breakdown,
|
||||
directions, packing list, and pictures of the campsite to drum up hype.
|
||||
Let’s say I put together a travel itinerary for a camping trip in my Projects
|
||||
folder. It has a list of everyone attending, cost breakdown, directions,
|
||||
packing list, and pictures of the campsite to drum up hype.
|
||||
|
||||
It’s all ready to go, but I need to share it out to my friends.
|
||||
|
||||
Enter Blot. Same service, different folder. This time, instead of
|
||||
having Blot publish to chrisnotes.io, I have a separate domain I use
|
||||
only for this purpose. I move the note to the shared folder and shoot
|
||||
my friends the link.
|
||||
Enter Blot. Same service, different folder. This time, instead of having Blot
|
||||
publish to chrisnotes.io, I have a separate domain I use only for this purpose.
|
||||
I move the note to the shared folder and shoot my friends the link.
|
||||
|
||||
The end. No fuss, no need for them to have an account, it’s just
|
||||
published to a non-indexed domain that I use as an external
|
||||
file/note-share.
|
||||
The end. No fuss, no need for them to have an account, it’s just published to a
|
||||
non-indexed domain that I use as an external file/note-share.
|
||||
|
||||
”But it’s not collaborative!” Yeah, and it’s not meant to be.
|
||||
|
||||
Collaborative notes
|
||||
|
||||
Okay, so once in a blue moon I have a valid reason to collaborate on a
|
||||
note with someone. It’s incredibly rare, and usually a very niche
|
||||
use-case.
|
||||
Okay, so once in a blue moon I have a valid reason to collaborate on a note
|
||||
with someone. It’s incredibly rare, and usually a very niche use-case.
|
||||
|
||||
If it’s like a Resume or something, I use Google Drive, because the
|
||||
output artifact is a document.
|
||||
If it’s like a Resume or something, I use Google Drive, because the output
|
||||
artifact is a document.
|
||||
|
||||
If it’s for brainstorming or something, Figma.
|
||||
|
||||
If it’s project tracking, Notion.
|
||||
|
||||
These aren’t really notes anymore. This is a one-off collaboration with
|
||||
a specific outcome in mind, so it doesn’t really fall into the purview
|
||||
of this post.
|
||||
These aren’t really notes anymore. This is a one-off collaboration with a
|
||||
specific outcome in mind, so it doesn’t really fall into the purview of this
|
||||
post.
|
||||
|
||||
To be honest, I don’t think my personal notes database is something
|
||||
that would ever require collaboration. My notes are deeply personal,
|
||||
and I like it that way. I can publish if I need to, and there are
|
||||
plenty of collaborative tools that work for other tasks. But I have yet
|
||||
to need real-time collaboration on my actual notes.
|
||||
To be honest, I don’t think my personal notes database is something that would
|
||||
ever require collaboration. My notes are deeply personal, and I like it that
|
||||
way. I can publish if I need to, and there are plenty of collaborative tools
|
||||
that work for other tasks. But I have yet to need real-time collaboration on my
|
||||
actual notes.
|
||||
|
||||
My gripe with Notion
|
||||
|
||||
Okay fine, quick note on Notion. While it’s a powerful tool that sparks
|
||||
creativity in a very attractive interface, it goes against my core
|
||||
values. You don’t own your data, it’s on their servers the entire time.
|
||||
Offline mode barely works. Exporting is a mess because while they
|
||||
present themselves as Markdown-esque, their stuff is so custom it’s a
|
||||
mess to port to other apps.
|
||||
creativity in a very attractive interface, it goes against my core values. You
|
||||
don’t own your data, it’s on their servers the entire time. Offline mode barely
|
||||
works. Exporting is a mess because while they present themselves as
|
||||
Markdown-esque, their stuff is so custom it’s a mess to port to other apps.
|
||||
|
||||
You get punished as soon as you try to leave.
|
||||
|
||||
Best of luck to anyone entangled in that system. It took some work to
|
||||
get my notes out of Notion, and I will not be going back.
|
||||
Best of luck to anyone entangled in that system. It took some work to get my
|
||||
notes out of Notion, and I will not be going back.
|
||||
|
||||
Closing thoughts
|
||||
|
||||
You made it to the end!
|
||||
|
||||
Personally, after having tried a lot of tools with varying levels of
|
||||
depth and complexity, I find this setup very balanced.
|
||||
Personally, after having tried a lot of tools with varying levels of depth and
|
||||
complexity, I find this setup very balanced.
|
||||
|
||||
It does just enough. I haven’t gone too deep into any of the tools.
|
||||
It’s still portable. I could still switch stuff around with very little
|
||||
overhead if I wanted to.
|
||||
It does just enough. I haven’t gone too deep into any of the tools. It’s still
|
||||
portable. I could still switch stuff around with very little overhead if I
|
||||
wanted to.
|
||||
|
||||
Being candid, my sync system is the one thing I am considering
|
||||
changing. I don’t like that Obsidian Sync has no way to run headless,
|
||||
and has no API access for other apps to tap into. If I wanted to change
|
||||
editor, I’d need to switch back to Dropbox. It wouldn’t take much to
|
||||
make the switch: maybe 5 minutes to update the config across all my
|
||||
devices.
|
||||
Being candid, my sync system is the one thing I am considering changing. I
|
||||
don’t like that Obsidian Sync has no way to run headless, and has no API access
|
||||
for other apps to tap into. If I wanted to change editor, I’d need to switch
|
||||
back to Dropbox. It wouldn’t take much to make the switch: maybe 5 minutes to
|
||||
update the config across all my devices.
|
||||
|
||||
But that’s the only thing I’m really not happy with right now. I find
|
||||
this system pretty seamless to work with. It has structure and
|
||||
organization, without being so confined that it limits creativity.
|
||||
But that’s the only thing I’m really not happy with right now. I find this
|
||||
system pretty seamless to work with. It has structure and organization, without
|
||||
being so confined that it limits creativity.
|
||||
|
||||
Bonus goodies
|
||||
|
||||
If you made it this far, you’re either really into notetaking systems
|
||||
or you’re friends with me. Either way, you might get a kick out of some
|
||||
of the cool functionality that comes from a system like this.
|
||||
If you made it this far, you’re either really into notetaking systems or you’re
|
||||
friends with me. Either way, you might get a kick out of some of the cool
|
||||
functionality that comes from a system like this.
|
||||
|
||||
Custom share sheet actions
|
||||
|
||||
Any time I’m browsing the web and come across something I want to buy
|
||||
later, I can instantly append it to my Wishlist note using a share
|
||||
sheet action that uses Obsidian’s deep-linking.
|
||||
Any time I’m browsing the web and come across something I want to buy later, I
|
||||
can instantly append it to my Wishlist note using a share sheet action that
|
||||
uses Obsidian’s deep-linking.
|
||||
|
||||
I could easily replicate this functionality using the OS filesystem in
|
||||
shortcuts.
|
||||
|
||||
Or, if I was using Dropbox, I could do it with Dropbox’s shortcut
|
||||
integrations.
|
||||
Or, if I was using Dropbox, I could do it with Dropbox’s shortcut integrations.
|
||||
|
||||
I have a similar shortcut action for prepending selected text to my
|
||||
Quotes note.
|
||||
I have a similar shortcut action for prepending selected text to my Quotes
|
||||
note.
|
||||
|
||||
If I wanted, I could have an automation that downloads the current
|
||||
weather and top news stories to a daily note for me to review when I
|
||||
start my morning.
|
||||
If I wanted, I could have an automation that downloads the current weather and
|
||||
top news stories to a daily note for me to review when I start my morning.
|
||||
|
||||
With a little scripting, you can really bend any of these tools / files
|
||||
to do whatever you want because of the format.
|
||||
With a little scripting, you can really bend any of these tools / files to do
|
||||
whatever you want because of the format.
|
||||
|
||||
Anyway, thanks so much for reading this far. I hope you got something
|
||||
from it. And if you have any input, please let me know. I’m not going
|
||||
to pretend I’m any kind of guru, and I love learning new things. If you
|
||||
have suggestions or ideas or feedback, please send them my way on
|
||||
[13]Mastodon!
|
||||
__________________________________________________________________
|
||||
Anyway, thanks so much for reading this far. I hope you got something from it.
|
||||
And if you have any input, please let me know. I’m not going to pretend I’m any
|
||||
kind of guru, and I love learning new things. If you have suggestions or ideas
|
||||
or feedback, please send them my way on [12]Mastodon!
|
||||
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
Date
|
||||
|
||||
September 4, 2023
|
||||
|
||||
References
|
||||
References:
|
||||
|
||||
1. https://chrisnotes.io/feed.rss
|
||||
2. https://chrisnotes.io/
|
||||
3. https://chrisnotes.io/
|
||||
4. https://chrisnotes.io/archives
|
||||
5. https://chrisnotes.io/search
|
||||
6. https://chrisnotes.io/feed.rss
|
||||
7. https://mastodon.social/@chrisnotes
|
||||
8. https://getdrafts.com/
|
||||
9. https://directory.getdrafts.com/
|
||||
10. https://stephanango.com/file-over-app
|
||||
11. http://obsidian.md/
|
||||
12. https://blot.im/
|
||||
13. https://mastodon.social/@chrisnotes
|
||||
[1] https://chrisnotes.io/
|
||||
[2] https://chrisnotes.io/
|
||||
[3] https://chrisnotes.io/archives
|
||||
[4] https://chrisnotes.io/search
|
||||
[5] https://chrisnotes.io/feed.rss
|
||||
[6] https://mastodon.social/@chrisnotes
|
||||
[7] https://getdrafts.com/
|
||||
[8] https://directory.getdrafts.com/
|
||||
[9] https://stephanango.com/file-over-app
|
||||
[10] http://obsidian.md/
|
||||
[11] https://blot.im/
|
||||
[12] https://mastodon.social/@chrisnotes
|
||||
|
||||
@@ -1,272 +1,265 @@
|
||||
#[1]home
|
||||
|
||||
[2]Jump to Content
|
||||
|
||||
[1]Jump to Content
|
||||
[2]
|
||||
Cloud
|
||||
(BUTTON)
|
||||
[3]Blog
|
||||
[4]Contact sales [5]Get started for free
|
||||
____________________
|
||||
|
||||
[4]Blog
|
||||
[5]Contact sales [6]Get started for free
|
||||
[7][ ]
|
||||
[13]
|
||||
Cloud
|
||||
[6]Blog
|
||||
[14]Blog
|
||||
|
||||
* Solutions & technology
|
||||
+ [7]AI & Machine Learning
|
||||
+ [8]API Management
|
||||
+ [9]Application Development
|
||||
+ [10]Application Modernization
|
||||
+ [11]Chrome Enterprise
|
||||
+ [12]Compute
|
||||
+ [13]Containers & Kubernetes
|
||||
+ [14]Data Analytics
|
||||
+ [15]Databases
|
||||
+ [16]DevOps & SRE
|
||||
+ [17]Maps & Geospatial
|
||||
+ [18]Security & Identity
|
||||
+ [19]Infrastructure
|
||||
+ [20]Infrastructure Modernization
|
||||
+ [21]Networking
|
||||
+ [22]Productivity & Collaboration
|
||||
+ [23]SAP on Google Cloud
|
||||
+ [24]Storage & Data Transfer
|
||||
+ [25]Sustainability
|
||||
* Ecosystem
|
||||
+ [26]IT Leaders
|
||||
+ Industries
|
||||
o [27]Financial Services
|
||||
o [28]Healthcare & Life Sciences
|
||||
o [29]Manufacturing
|
||||
o [30]Media & Entertainment
|
||||
o [31]Public Sector
|
||||
o [32]Retail
|
||||
o [33]Supply Chain
|
||||
o [34]Telecommunications
|
||||
+ [35]Partners
|
||||
+ [36]Startups & SMB
|
||||
+ [37]Training & Certifications
|
||||
+ [38]Inside Google Cloud
|
||||
+ [39]Google Cloud Next & Events
|
||||
+ [40]Google Maps Platform
|
||||
+ [41]Google Workspace
|
||||
* [42]Developers & Practitioners
|
||||
* [43]Transform with Google Cloud
|
||||
|
||||
[44]Contact sales [45]Get started for free
|
||||
____________________
|
||||
• Solutions & technology
|
||||
□ [15]AI & Machine Learning
|
||||
□ [16]API Management
|
||||
□ [17]Application Development
|
||||
□ [18]Application Modernization
|
||||
□ [19]Chrome Enterprise
|
||||
□ [20]Compute
|
||||
□ [21]Containers & Kubernetes
|
||||
□ [22]Data Analytics
|
||||
□ [23]Databases
|
||||
□ [24]DevOps & SRE
|
||||
□ [25]Maps & Geospatial
|
||||
□ [26]Security & Identity
|
||||
□ [27]Infrastructure
|
||||
□ [28]Infrastructure Modernization
|
||||
□ [29]Networking
|
||||
□ [30]Productivity & Collaboration
|
||||
□ [31]SAP on Google Cloud
|
||||
□ [32]Storage & Data Transfer
|
||||
□ [33]Sustainability
|
||||
• Ecosystem
|
||||
□ [34]IT Leaders
|
||||
□ Industries
|
||||
☆ [35]Financial Services
|
||||
☆ [36]Healthcare & Life Sciences
|
||||
☆ [37]Manufacturing
|
||||
☆ [38]Media & Entertainment
|
||||
☆ [39]Public Sector
|
||||
☆ [40]Retail
|
||||
☆ [41]Supply Chain
|
||||
☆ [42]Telecommunications
|
||||
□ [43]Partners
|
||||
□ [44]Startups & SMB
|
||||
□ [45]Training & Certifications
|
||||
□ [46]Inside Google Cloud
|
||||
□ [47]Google Cloud Next & Events
|
||||
□ [48]Google Maps Platform
|
||||
□ [49]Google Workspace
|
||||
• [50]Developers & Practitioners
|
||||
• [51]Transform with Google Cloud
|
||||
|
||||
[52]Contact sales [53]Get started for free
|
||||
[54][ ]
|
||||
Application Modernization
|
||||
|
||||
Why I love Go
|
||||
|
||||
September 12, 2022
|
||||
*
|
||||
*
|
||||
*
|
||||
*
|
||||
|
||||
• [60]
|
||||
• [61]
|
||||
• [62]
|
||||
• [63]
|
||||
|
||||
David Yach
|
||||
|
||||
Director of Engineering at Google Cloud
|
||||
|
||||
I’ve been building software over the last four decades, as a developer,
|
||||
manager and executive in both small and large software companies. I
|
||||
started my career working on commercial compilers, first BASIC and then
|
||||
C. I have written a lot of code in many different languages, and
|
||||
managed teams with even broader language usage.
|
||||
I’ve been building software over the last four decades, as a developer, manager
|
||||
and executive in both small and large software companies. I started my career
|
||||
working on commercial compilers, first BASIC and then C. I have written a lot
|
||||
of code in many different languages, and managed teams with even broader
|
||||
language usage.
|
||||
|
||||
I learned Go about 5 years ago when I was CTO at a startup/scaleup. At
|
||||
the time, we were looking to move to a microservice architecture, and
|
||||
that shift gave us the opportunity to consider moving away from the
|
||||
incumbent language (Scala). As I read through the Go tutorials, my
|
||||
compiler-writing background came back to me and I found myself
|
||||
repeatedly thinking “That’s cool – I know why the Go team did that!â€<C3A2> So
|
||||
I got hooked on the language design.
|
||||
I learned Go about 5 years ago when I was CTO at a startup/scaleup. At the
|
||||
time, we were looking to move to a microservice architecture, and that shift
|
||||
gave us the opportunity to consider moving away from the incumbent language
|
||||
(Scala). As I read through the Go tutorials, my compiler-writing background
|
||||
came back to me and I found myself repeatedly thinking “That’s cool – I know
|
||||
why the Go team did that!” So I got hooked on the language design.
|
||||
|
||||
Learning
|
||||
|
||||
I have worked with many different computer languages over the years, so
|
||||
I was not surprised I could quickly get started writing Go programs
|
||||
after reading through the online documents and tutorials. But then when
|
||||
I saw a new co-op student (a.k.a. intern) learn Go and write a
|
||||
substantial prototype in their first two weeks on the job, it became
|
||||
clear that Go was much easier to learn than many other languages.
|
||||
I have worked with many different computer languages over the years, so I was
|
||||
not surprised I could quickly get started writing Go programs after reading
|
||||
through the online documents and tutorials. But then when I saw a new co-op
|
||||
student (a.k.a. intern) learn Go and write a substantial prototype in their
|
||||
first two weeks on the job, it became clear that Go was much easier to learn
|
||||
than many other languages.
|
||||
|
||||
Writing code
|
||||
|
||||
As I started writing my first Go programs, the first thing that struck
|
||||
me was the blazing compiler speed. It was as fast or faster starting my
|
||||
application than many interpreted languages, yet it was a compiled
|
||||
program with a strongly typed language. (I have an affinity for
|
||||
strongly typed languages – I have spent way too much time tracking down
|
||||
obscure issues in my own code in dynamic typed languages, where the
|
||||
same issue would have been a compile error in a strongly typed
|
||||
language.) Even better, in Go I often don’t need to declare the type –
|
||||
As I started writing my first Go programs, the first thing that struck me was
|
||||
the blazing compiler speed. It was as fast or faster starting my application
|
||||
than many interpreted languages, yet it was a compiled program with a strongly
|
||||
typed language. (I have an affinity for strongly typed languages – I have spent
|
||||
way too much time tracking down obscure issues in my own code in dynamic typed
|
||||
languages, where the same issue would have been a compile error in a strongly
|
||||
typed language.) Even better, in Go I often don’t need to declare the type –
|
||||
the compiler figures it out.
|
||||
|
||||
I was impressed with the standard Go library – it included many of the
|
||||
capabilities required by modern applications – things like HTTP
|
||||
support, JSON handling and encryption. Many other languages required
|
||||
you to use a third-party library for these features, and often there
|
||||
were multiple competing libraries to choose from, adding another
|
||||
decision point for the developer. With Go, I could go to the standard
|
||||
library GoDoc and get started right away.
|
||||
capabilities required by modern applications – things like HTTP support, JSON
|
||||
handling and encryption. Many other languages required you to use a third-party
|
||||
library for these features, and often there were multiple competing libraries
|
||||
to choose from, adding another decision point for the developer. With Go, I
|
||||
could go to the standard library GoDoc and get started right away.
|
||||
|
||||
There were a few other language decisions that I found helpful. One is
|
||||
that the compiler figures out if you are returning a pointer to a
|
||||
local, and behind the scenes allocates the memory rather than using the
|
||||
stack. This prevents bugs, and I find the code more readable.
|
||||
There were a few other language decisions that I found helpful. One is that the
|
||||
compiler figures out if you are returning a pointer to a local, and behind the
|
||||
scenes allocates the memory rather than using the stack. This prevents bugs,
|
||||
and I find the code more readable.
|
||||
|
||||
I also like that you don’t declare that you support an interface. I
|
||||
wasn’t sure I would like this at first because it isn’t obvious if a
|
||||
type implements a particular interface, but I found greater value in
|
||||
the fact that I wasn’t dependent on the code author (even if it was
|
||||
me!) to declare that the interface is implemented. This first hit home
|
||||
when I used fmt.Println() and it automatically used the String() method
|
||||
I had implemented even though it hadn’t occurred to me that I was
|
||||
implementing the Stringer interface.
|
||||
I also like that you don’t declare that you support an interface. I wasn’t sure
|
||||
I would like this at first because it isn’t obvious if a type implements a
|
||||
particular interface, but I found greater value in the fact that I wasn’t
|
||||
dependent on the code author (even if it was me!) to declare that the interface
|
||||
is implemented. This first hit home when I used fmt.Println() and it
|
||||
automatically used the String() method I had implemented even though it hadn’t
|
||||
occurred to me that I was implementing the Stringer interface.
|
||||
|
||||
The last feature I’ll note is the ability to do concurrent programming
|
||||
through channels and goroutines. The model is simple to understand yet
|
||||
powerful.
|
||||
The last feature I’ll note is the ability to do concurrent programming through
|
||||
channels and goroutines. The model is simple to understand yet powerful.
|
||||
|
||||
Reading code
|
||||
|
||||
After writing more Go code and starting to incorporate third party
|
||||
libraries, I had a realization that had never occurred to me before –
|
||||
as a developer, I spend a lot of time reading code. In fact, I probably
|
||||
spend more time reading code than writing it, once you start counting
|
||||
code reviews, debugging, and evaluating third-party libraries.
|
||||
After writing more Go code and starting to incorporate third party libraries, I
|
||||
had a realization that had never occurred to me before – as a developer, I
|
||||
spend a lot of time reading code. In fact, I probably spend more time reading
|
||||
code than writing it, once you start counting code reviews, debugging, and
|
||||
evaluating third-party libraries.
|
||||
|
||||
What was different about reading Go code? I would summarize it by “it
|
||||
all looks the same.â€<EFBFBD> What do I mean by that? Go format ensures all the
|
||||
braces are in the same spot; capitalized identifiers are exported;
|
||||
there are no implicit conversions, even of internal types; and there is
|
||||
no overloading of operators, functions or methods. That means that with
|
||||
Go code, “what you see is what you getâ€<C3A2> with no hidden meaning. Of
|
||||
course, it doesn’t help me to understand a complicated algorithm, but
|
||||
it does mean that I can concentrate more on that algorithm because I
|
||||
don’t have to understand whether ‘+’ is overloaded, for example.
|
||||
What was different about reading Go code? I would summarize it by “it all looks
|
||||
the same.” What do I mean by that? Go format ensures all the braces are in the
|
||||
same spot; capitalized identifiers are exported; there are no implicit
|
||||
conversions, even of internal types; and there is no overloading of operators,
|
||||
functions or methods. That means that with Go code, “what you see is what you
|
||||
get” with no hidden meaning. Of course, it doesn’t help me to understand a
|
||||
complicated algorithm, but it does mean that I can concentrate more on that
|
||||
algorithm because I don’t have to understand whether ‘+’ is overloaded, for
|
||||
example.
|
||||
|
||||
I was also pleasantly surprised when I used GoDoc on one of my
|
||||
projects, and discovered that I had semi-reasonable documentation
|
||||
without doing anything while writing the code other than adding
|
||||
comments on my functions and methods based on nagging from the IDE I
|
||||
was using. I did spend some time cleaning up the comments after that,
|
||||
but I’m not sure I would have even started that work if Go hadn’t given
|
||||
me a great starting point.
|
||||
I was also pleasantly surprised when I used GoDoc on one of my projects, and
|
||||
discovered that I had semi-reasonable documentation without doing anything
|
||||
while writing the code other than adding comments on my functions and methods
|
||||
based on nagging from the IDE I was using. I did spend some time cleaning up
|
||||
the comments after that, but I’m not sure I would have even started that work
|
||||
if Go hadn’t given me a great starting point.
|
||||
|
||||
Testing code
|
||||
|
||||
Go test is part of the standard Go tools and supported by IDEs, making
|
||||
it easy to get started creating unit tests for my code. And like the
|
||||
standard Go library, having a standard way to do tests means I don’t
|
||||
have to evaluate external testing frameworks and select one. I can also
|
||||
understand the tests when I’m evaluating a third party library.
|
||||
Go test is part of the standard Go tools and supported by IDEs, making it easy
|
||||
to get started creating unit tests for my code. And like the standard Go
|
||||
library, having a standard way to do tests means I don’t have to evaluate
|
||||
external testing frameworks and select one. I can also understand the tests
|
||||
when I’m evaluating a third party library.
|
||||
|
||||
Even better, the default behavior running package tests in VSCode is to
|
||||
enable Go’s built-in code coverage. I had never taken code coverage
|
||||
seriously working in other languages, partly because it was often
|
||||
difficult to set up. But the immediate feedback (helped by the blazing
|
||||
compile speed) gamified this for me, and I found myself adding tests to
|
||||
increase code coverage (and finding new bugs along the way).
|
||||
Even better, the default behavior running package tests in VSCode is to enable
|
||||
Go’s built-in code coverage. I had never taken code coverage seriously working
|
||||
in other languages, partly because it was often difficult to set up. But the
|
||||
immediate feedback (helped by the blazing compile speed) gamified this for me,
|
||||
and I found myself adding tests to increase code coverage (and finding new bugs
|
||||
along the way).
|
||||
|
||||
Go doesn’t allow circular dependencies between packages. While this has
|
||||
caused me some rethinking while writing code, I find it makes my
|
||||
testing regimen easier to think about – if I depend on a package, I can
|
||||
rely on that package to have its own tests covering its capabilities.
|
||||
Go doesn’t allow circular dependencies between packages. While this has caused
|
||||
me some rethinking while writing code, I find it makes my testing regimen
|
||||
easier to think about – if I depend on a package, I can rely on that package to
|
||||
have its own tests covering its capabilities.
|
||||
|
||||
Deploying code
|
||||
|
||||
I learned Go at the same time we were migrating towards container-based
|
||||
microservices. In that environment, the fact that Go produces a single,
|
||||
self-contained executable makes it much easier and more efficient to
|
||||
build and manage containers. I can build a container layer with one
|
||||
single file, which is often a single-digit number of MB in size,
|
||||
compared to our prior JVM-based containers which started with hundreds
|
||||
of MB for the Java runtime then another layer for our application. (It
|
||||
is easy to forget how much this overhead ends up costing in production,
|
||||
particularly if you have hundreds or thousands of containers running).
|
||||
self-contained executable makes it much easier and more efficient to build and
|
||||
manage containers. I can build a container layer with one single file, which is
|
||||
often a single-digit number of MB in size, compared to our prior JVM-based
|
||||
containers which started with hundreds of MB for the Java runtime then another
|
||||
layer for our application. (It is easy to forget how much this overhead ends up
|
||||
costing in production, particularly if you have hundreds or thousands of
|
||||
containers running).
|
||||
|
||||
Second, Go has built-in cross compiling capabilities so our development
|
||||
machines, containers and cloud hardware don’t all have to all be on the
|
||||
same processor or operating system. For example, I can use a Linux
|
||||
build machine to produce client executables for Linux, Mac and Windows.
|
||||
Again, this takes away a complicated decision process due to artificial
|
||||
constraints.
|
||||
machines, containers and cloud hardware don’t all have to all be on the same
|
||||
processor or operating system. For example, I can use a Linux build machine to
|
||||
produce client executables for Linux, Mac and Windows. Again, this takes away a
|
||||
complicated decision process due to artificial constraints.
|
||||
|
||||
Finally, Go has established a well defined set of principles for
|
||||
versioning and compatibility. While not all pieces of this are
|
||||
enforced, having the principles from an authoritative source helps
|
||||
manage the real life challenges of keeping your software supply chain
|
||||
up to date. For example, it is strongly recommended that breaking
|
||||
changes require a new major version number. While not enforced, it
|
||||
leads the community to call out any open source package that violates
|
||||
this principle.
|
||||
Finally, Go has established a well defined set of principles for versioning and
|
||||
compatibility. While not all pieces of this are enforced, having the principles
|
||||
from an authoritative source helps manage the real life challenges of keeping
|
||||
your software supply chain up to date. For example, it is strongly recommended
|
||||
that breaking changes require a new major version number. While not enforced,
|
||||
it leads the community to call out any open source package that violates this
|
||||
principle.
|
||||
|
||||
What do I miss?
|
||||
|
||||
I did miss generics; thankfully Go 1.18 added support. And I do wish
|
||||
the standard library offered immutable collections (like Scala and
|
||||
other functional languages). Embedding instead of inheritance works
|
||||
pretty much the same in many cases, but requires some deep thinking
|
||||
sometimes.
|
||||
I did miss generics; thankfully Go 1.18 added support. And I do wish the
|
||||
standard library offered immutable collections (like Scala and other functional
|
||||
languages). Embedding instead of inheritance works pretty much the same in many
|
||||
cases, but requires some deep thinking sometimes.
|
||||
|
||||
My most frequent coding mistake is when I should have used a pointer
|
||||
receiver for a method and didn’t, then modify the receiver expecting
|
||||
the changes to be visible when the method returns. The code looks
|
||||
correct, the right values get assigned if I use a debugger to step
|
||||
through or issue prints, but the changes disappear after the method
|
||||
returns. I think I would have preferred if receivers were immutable, it
|
||||
would have caught these errors at compile time, and in the few
|
||||
remaining cases where I wanted to modify the receiver I would have
|
||||
copied it to a local variable.
|
||||
My most frequent coding mistake is when I should have used a pointer receiver
|
||||
for a method and didn’t, then modify the receiver expecting the changes to be
|
||||
visible when the method returns. The code looks correct, the right values get
|
||||
assigned if I use a debugger to step through or issue prints, but the changes
|
||||
disappear after the method returns. I think I would have preferred if receivers
|
||||
were immutable, it would have caught these errors at compile time, and in the
|
||||
few remaining cases where I wanted to modify the receiver I would have copied
|
||||
it to a local variable.
|
||||
|
||||
In conclusion
|
||||
|
||||
As you can tell, I am a huge fan of Go, from even before I joined
|
||||
Google. I am impressed by the language and ecosystem design, and by the
|
||||
implementation. For me, Go makes me a more productive developer and I’m
|
||||
more confident in the quality of the code I produce.
|
||||
As you can tell, I am a huge fan of Go, from even before I joined Google. I am
|
||||
impressed by the language and ecosystem design, and by the implementation. For
|
||||
me, Go makes me a more productive developer and I’m more confident in the
|
||||
quality of the code I produce.
|
||||
|
||||
Go, give it a [46]try!
|
||||
Go, give it a [64]try!
|
||||
|
||||
Posted in
|
||||
* [47]Application Modernization
|
||||
* [48]Application Development
|
||||
* [49]Open Source
|
||||
|
||||
• [65]Application Modernization
|
||||
• [66]Application Development
|
||||
• [67]Open Source
|
||||
|
||||
Related articles
|
||||
|
||||
https://storage.googleapis.com/gweb-cloudblog-publish/images/containers
|
||||
_2022_anH39my.max-700x700.jpg
|
||||
[68]
|
||||
https://storage.googleapis.com/gweb-cloudblog-publish/images/
|
||||
containers_2022_anH39my.max-700x700.jpg
|
||||
DevOps & SRE
|
||||
|
||||
Best practices for consuming public Docker Hub content
|
||||
|
||||
By Rishi Mukhopadhyay • 2-minute read
|
||||
|
||||
https://storage.googleapis.com/gweb-cloudblog-publish/images/General-GC
|
||||
_Blog_header_2436x1200-v1.max-700x700.jpg
|
||||
[69]
|
||||
https://storage.googleapis.com/gweb-cloudblog-publish/images/
|
||||
General-GC_Blog_header_2436x1200-v1.max-700x700.jpg
|
||||
Google Cloud
|
||||
|
||||
The overwhelmed person’s guide to Google Cloud: week of Dec 18
|
||||
|
||||
By Forrest Brazeal • 2-minute read
|
||||
|
||||
https://storage.googleapis.com/gweb-cloudblog-publish/images/Google_Clo
|
||||
ud_AIML_thumbnail.max-700x700.jpg
|
||||
[70]
|
||||
https://storage.googleapis.com/gweb-cloudblog-publish/images/
|
||||
Google_Cloud_AIML_thumbnail.max-700x700.jpg
|
||||
AI & Machine Learning
|
||||
|
||||
Have the AI build your app for you!
|
||||
|
||||
By Max Saltonstall • 2-minute read
|
||||
|
||||
https://storage.googleapis.com/gweb-cloudblog-publish/images/DO_NOT_USE
|
||||
_Wfx45fA.max-700x700.jpg
|
||||
[71]
|
||||
https://storage.googleapis.com/gweb-cloudblog-publish/images/
|
||||
DO_NOT_USE_Wfx45fA.max-700x700.jpg
|
||||
Application Modernization
|
||||
|
||||
Apollo24|7: Migrating a complex microservices application to Google Cloud
|
||||
with zero downtime
|
||||
Apollo24|7: Migrating a complex microservices application to Google Cloud with
|
||||
zero downtime
|
||||
|
||||
By Nishu Saxena • 4-minute read
|
||||
|
||||
@@ -274,94 +267,93 @@ with zero downtime
|
||||
|
||||
Follow us
|
||||
|
||||
*
|
||||
*
|
||||
*
|
||||
*
|
||||
*
|
||||
• [72]
|
||||
• [73]
|
||||
• [74]
|
||||
• [75]
|
||||
• [76]
|
||||
|
||||
* [50]Google Cloud
|
||||
* [51]Google Cloud Products
|
||||
* [52]Privacy
|
||||
* [53]Terms
|
||||
* [54]Cookies management controls
|
||||
[77]
|
||||
|
||||
* [55]Help
|
||||
* [‪English‬__€¬..]
|
||||
• [78]Google Cloud
|
||||
• [79]Google Cloud Products
|
||||
• [80]Privacy
|
||||
• [81]Terms
|
||||
• [82]Cookies management controls
|
||||
|
||||
References
|
||||
• [83]Help
|
||||
• [84][Language ]
|
||||
|
||||
Visible links:
|
||||
1. https://cloud.google.com/?lfhs=2
|
||||
2. https://cloud.google.com/blog/#content
|
||||
3. https://cloud.google.com/blog
|
||||
4. https://cloud.google.com/contact/
|
||||
5. https://console.cloud.google.com/freetrial/
|
||||
6. https://cloud.google.com/blog
|
||||
7. https://cloud.google.com/blog/products/ai-machine-learning
|
||||
8. https://cloud.google.com/blog/products/api-management
|
||||
9. https://cloud.google.com/blog/products/application-development
|
||||
10. https://cloud.google.com/blog/products/application-modernization
|
||||
11. https://cloud.google.com/blog/products/chrome-enterprise
|
||||
12. https://cloud.google.com/blog/products/compute
|
||||
13. https://cloud.google.com/blog/products/containers-kubernetes
|
||||
14. https://cloud.google.com/blog/products/data-analytics
|
||||
15. https://cloud.google.com/blog/products/databases
|
||||
16. https://cloud.google.com/blog/products/devops-sre
|
||||
17. https://cloud.google.com/blog/topics/maps-geospatial
|
||||
18. https://cloud.google.com/blog/products/identity-security
|
||||
19. https://cloud.google.com/blog/products/infrastructure
|
||||
20. https://cloud.google.com/blog/products/infrastructure-modernization
|
||||
21. https://cloud.google.com/blog/products/networking
|
||||
22. https://cloud.google.com/blog/products/productivity-collaboration
|
||||
23. https://cloud.google.com/blog/products/sap-google-cloud
|
||||
24. https://cloud.google.com/blog/products/storage-data-transfer
|
||||
25. https://cloud.google.com/blog/topics/sustainability
|
||||
26. https://cloud.google.com/transform
|
||||
27. https://cloud.google.com/blog/topics/financial-services
|
||||
28. https://cloud.google.com/blog/topics/healthcare-life-sciences
|
||||
29. https://cloud.google.com/blog/topics/manufacturing
|
||||
30. https://cloud.google.com/blog/products/media-entertainment
|
||||
31. https://cloud.google.com/blog/topics/public-sector
|
||||
32. https://cloud.google.com/blog/topics/retail
|
||||
33. https://cloud.google.com/blog/topics/supply-chain-logistics
|
||||
34. https://cloud.google.com/blog/topics/telecommunications
|
||||
35. https://cloud.google.com/blog/topics/partners
|
||||
36. https://cloud.google.com/blog/topics/startups
|
||||
37. https://cloud.google.com/blog/topics/training-certifications
|
||||
38. https://cloud.google.com/blog/topics/inside-google-cloud
|
||||
39. https://cloud.google.com/blog/topics/google-cloud-next
|
||||
40. https://cloud.google.com/blog/products/maps-platform
|
||||
41. https://workspace.google.com/blog
|
||||
42. https://cloud.google.com/blog/topics/developers-practitioners
|
||||
43. https://cloud.google.com/transform
|
||||
44. https://cloud.google.com/contact/
|
||||
45. https://console.cloud.google.com/freetrial/
|
||||
46. https://go.dev/tour/list
|
||||
47. https://cloud.google.com/blog/products/application-modernization
|
||||
48. https://cloud.google.com/blog/products/application-development
|
||||
49. https://cloud.google.com/blog/products/open-source
|
||||
50. https://cloud.google.com/
|
||||
51. https://cloud.google.com/products/
|
||||
52. https://myaccount.google.com/privacypolicy?hl=en-US
|
||||
53. https://myaccount.google.com/termsofservice?hl=en-US
|
||||
54. https://cloud.google.com/blog/products/application-modernization/why-david-yach-loves-go
|
||||
55. https://support.google.com/
|
||||
|
||||
Hidden links:
|
||||
57. https://cloud.google.com/
|
||||
58. https://cloud.google.com/
|
||||
59. https://twitter.com/intent/tweet?text=Why%20I%20love%20Go%20@googlecloud&url=https://cloud.google.com/blog/products/application-modernization/why-david-yach-loves-go
|
||||
60. https://www.linkedin.com/shareArticle?mini=true&url=https://cloud.google.com/blog/products/application-modernization/why-david-yach-loves-go&title=Why%20I%20love%20Go
|
||||
61. https://www.facebook.com/sharer/sharer.php?caption=Why%20I%20love%20Go&u=https://cloud.google.com/blog/products/application-modernization/why-david-yach-loves-go
|
||||
62. mailto:?subject=Why%20I%20love%20Go&body=Check%20out%20this%20article%20on%20the%20Cloud%20Blog:%0A%0AWhy%20I%20love%20Go%0A%0ALearn%20all%20the%20reasons%20David%20Yach,%20industry%20veteran%20and%20Director%20of%20Engineering%20at%20Google%20Cloud,%20loves%20to%20use%20Go%20for%20software%20development.%0A%0Ahttps://cloud.google.com/blog/products/application-modernization/why-david-yach-loves-go
|
||||
63. https://cloud.google.com/blog/products/devops-sre/using-authenticated-logins-for-docker-hub-in-google-cloud
|
||||
64. https://cloud.google.com/blog/products/gcp/the-overwhelmed-persons-guide-to-google-cloud
|
||||
65. https://cloud.google.com/blog/products/ai-machine-learning/have-duet-ai-make-your-next-app-using-conversation
|
||||
66. https://cloud.google.com/blog/products/application-modernization/migrating-a-microservices-application-with-no-downtime
|
||||
67. https://www.twitter.com/googlecloud
|
||||
68. https://www.youtube.com/googlecloud
|
||||
69. https://www.linkedin.com/showcase/google-cloud
|
||||
70. https://www.instagram.com/googlecloud/
|
||||
71. https://www.facebook.com/googlecloud/
|
||||
72. https://cloud.google.com/
|
||||
References:
|
||||
|
||||
[1] https://cloud.google.com/blog/#content
|
||||
[2] https://cloud.google.com/
|
||||
[4] https://cloud.google.com/blog
|
||||
[5] https://cloud.google.com/contact/
|
||||
[6] https://console.cloud.google.com/freetrial/
|
||||
[13] https://cloud.google.com/
|
||||
[14] https://cloud.google.com/blog
|
||||
[15] https://cloud.google.com/blog/products/ai-machine-learning
|
||||
[16] https://cloud.google.com/blog/products/api-management
|
||||
[17] https://cloud.google.com/blog/products/application-development
|
||||
[18] https://cloud.google.com/blog/products/application-modernization
|
||||
[19] https://cloud.google.com/blog/products/chrome-enterprise
|
||||
[20] https://cloud.google.com/blog/products/compute
|
||||
[21] https://cloud.google.com/blog/products/containers-kubernetes
|
||||
[22] https://cloud.google.com/blog/products/data-analytics
|
||||
[23] https://cloud.google.com/blog/products/databases
|
||||
[24] https://cloud.google.com/blog/products/devops-sre
|
||||
[25] https://cloud.google.com/blog/topics/maps-geospatial
|
||||
[26] https://cloud.google.com/blog/products/identity-security
|
||||
[27] https://cloud.google.com/blog/products/infrastructure
|
||||
[28] https://cloud.google.com/blog/products/infrastructure-modernization
|
||||
[29] https://cloud.google.com/blog/products/networking
|
||||
[30] https://cloud.google.com/blog/products/productivity-collaboration
|
||||
[31] https://cloud.google.com/blog/products/sap-google-cloud
|
||||
[32] https://cloud.google.com/blog/products/storage-data-transfer
|
||||
[33] https://cloud.google.com/blog/topics/sustainability
|
||||
[34] https://cloud.google.com/transform
|
||||
[35] https://cloud.google.com/blog/topics/financial-services
|
||||
[36] https://cloud.google.com/blog/topics/healthcare-life-sciences
|
||||
[37] https://cloud.google.com/blog/topics/manufacturing
|
||||
[38] https://cloud.google.com/blog/products/media-entertainment
|
||||
[39] https://cloud.google.com/blog/topics/public-sector
|
||||
[40] https://cloud.google.com/blog/topics/retail
|
||||
[41] https://cloud.google.com/blog/topics/supply-chain-logistics
|
||||
[42] https://cloud.google.com/blog/topics/telecommunications
|
||||
[43] https://cloud.google.com/blog/topics/partners
|
||||
[44] https://cloud.google.com/blog/topics/startups
|
||||
[45] https://cloud.google.com/blog/topics/training-certifications
|
||||
[46] https://cloud.google.com/blog/topics/inside-google-cloud
|
||||
[47] https://cloud.google.com/blog/topics/google-cloud-next
|
||||
[48] https://cloud.google.com/blog/products/maps-platform
|
||||
[49] https://workspace.google.com/blog
|
||||
[50] https://cloud.google.com/blog/topics/developers-practitioners
|
||||
[51] https://cloud.google.com/transform
|
||||
[52] https://cloud.google.com/contact/
|
||||
[53] https://console.cloud.google.com/freetrial/
|
||||
[60] https://twitter.com/intent/tweet?text=Why%20I%20love%20Go%20@googlecloud&url=https://cloud.google.com/blog/products/application-modernization/why-david-yach-loves-go
|
||||
[61] https://www.linkedin.com/shareArticle?mini=true&url=https://cloud.google.com/blog/products/application-modernization/why-david-yach-loves-go&title=Why%20I%20love%20Go
|
||||
[62] https://www.facebook.com/sharer/sharer.php?caption=Why%20I%20love%20Go&u=https://cloud.google.com/blog/products/application-modernization/why-david-yach-loves-go
|
||||
[63] mailto:?subject=Why%20I%20love%20Go&body=Check%20out%20this%20article%20on%20the%20Cloud%20Blog:%0A%0AWhy%20I%20love%20Go%0A%0ALearn%20all%20the%20reasons%20David%20Yach,%20industry%20veteran%20and%20Director%20of%20Engineering%20at%20Google%20Cloud,%20loves%20to%20use%20Go%20for%20software%20development.%0A%0Ahttps://cloud.google.com/blog/products/application-modernization/why-david-yach-loves-go
|
||||
[64] https://go.dev/tour/list
|
||||
[65] https://cloud.google.com/blog/products/application-modernization
|
||||
[66] https://cloud.google.com/blog/products/application-development
|
||||
[67] https://cloud.google.com/blog/products/open-source
|
||||
[68] https://cloud.google.com/blog/products/devops-sre/using-authenticated-logins-for-docker-hub-in-google-cloud
|
||||
[69] https://cloud.google.com/blog/products/gcp/the-overwhelmed-persons-guide-to-google-cloud
|
||||
[70] https://cloud.google.com/blog/products/ai-machine-learning/have-duet-ai-make-your-next-app-using-conversation
|
||||
[71] https://cloud.google.com/blog/products/application-modernization/migrating-a-microservices-application-with-no-downtime
|
||||
[72] https://www.twitter.com/googlecloud
|
||||
[73] https://www.youtube.com/googlecloud
|
||||
[74] https://www.linkedin.com/showcase/google-cloud
|
||||
[75] https://www.instagram.com/googlecloud/
|
||||
[76] https://www.facebook.com/googlecloud/
|
||||
[77] https://cloud.google.com/
|
||||
[78] https://cloud.google.com/
|
||||
[79] https://cloud.google.com/products/
|
||||
[80] https://myaccount.google.com/privacypolicy?hl=en-US
|
||||
[81] https://myaccount.google.com/termsofservice?hl=en-US
|
||||
[82] https://cloud.google.com/blog/#
|
||||
[83] https://support.google.com/
|
||||
|
||||
@@ -2,373 +2,359 @@
|
||||
|
||||
[2]Codefol.io
|
||||
|
||||
* [3]All Articles
|
||||
* [4]Articles by Topic
|
||||
* [5]Favourite Articles
|
||||
* [6]RSS
|
||||
* [7]About
|
||||
• [3]All Articles
|
||||
• [4]Articles by Topic
|
||||
• [5]Favourite Articles
|
||||
• [6]RSS
|
||||
• [7]About
|
||||
|
||||
When Should You NOT Use Rails?
|
||||
|
||||
A chimpanzee in a white coat types at a keyboard lit by glowing LEDs.
|
||||
He's gorgeous, yes. But is his talent natural… or is it Ruby on Rails?
|
||||
|
||||
I was [8]recently on Jason Swett’s podcast again. He’s a great
|
||||
interviewer and I always have fun with him.
|
||||
I was [8]recently on Jason Swett’s podcast again. He’s a great interviewer and
|
||||
I always have fun with him.
|
||||
|
||||
By Twitter request we talked about… When would you not use Rails? It’s
|
||||
a great question.
|
||||
By Twitter request we talked about… When would you not use Rails? It’s a great
|
||||
question.
|
||||
|
||||
For the entertaining version, [9]listen to the podcast. For the
|
||||
just-the-facts extra-complete version, I’m writing this post.
|
||||
For the entertaining version, [9]listen to the podcast. For the just-the-facts
|
||||
extra-complete version, I’m writing this post.
|
||||
|
||||
When Is Rails the Wrong Choice?
|
||||
|
||||
I’ll start with a few simple, obvious times you wouldn’t use Rails, and
|
||||
then I’ll talk about some technically interesting times.
|
||||
I’ll start with a few simple, obvious times you wouldn’t use Rails, and then
|
||||
I’ll talk about some technically interesting times.
|
||||
|
||||
First, and most important, is team familiarity. If your team doesn’t
|
||||
already know Rails and isn’t especially interested in learning it then
|
||||
Rails is the wrong choice. This should be obvious, but it still
|
||||
deserves first billing.
|
||||
First, and most important, is team familiarity. If your team doesn’t already
|
||||
know Rails and isn’t especially interested in learning it then Rails is the
|
||||
wrong choice. This should be obvious, but it still deserves first billing.
|
||||
|
||||
Second, when you know some other framework fits better. I’ll talk more
|
||||
below about when that is. But sometimes you have a specific concern
|
||||
that trumps everything else. If you need to use a Java-language machine
|
||||
learning library and you don’t want to use JRuby for some reason, Rails
|
||||
isn’t your framework. If you’re writing a WordPress plugin, you’ll be
|
||||
doing it in PHP. Often there’s one specific compatibility concern that
|
||||
overrides everything else.
|
||||
Second, when you know some other framework fits better. I’ll talk more below
|
||||
about when that is. But sometimes you have a specific concern that trumps
|
||||
everything else. If you need to use a Java-language machine learning library
|
||||
and you don’t want to use JRuby for some reason, Rails isn’t your framework. If
|
||||
you’re writing a WordPress plugin, you’ll be doing it in PHP. Often there’s one
|
||||
specific compatibility concern that overrides everything else.
|
||||
|
||||
You can also think of it as: use it where Rails’ good points hold and
|
||||
its bad points don’t. So we’ll also talk about the good and bad points.
|
||||
You can also think of it as: use it where Rails’ good points hold and its bad
|
||||
points don’t. So we’ll also talk about the good and bad points.
|
||||
|
||||
Separately: you’d normally only use Rails as an HTTP server, so some
|
||||
tasks just aren’t Rails-shaped.
|
||||
Separately: you’d normally only use Rails as an HTTP server, so some tasks just
|
||||
aren’t Rails-shaped.
|
||||
|
||||
When is Rails Too Much?
|
||||
|
||||
[10]A pirate puppet with an eyepatch, safety goggles and a huge
|
||||
scraggly mustache watches over a purple crystal ball at his feet.' He’s
|
||||
too much lab assistant for your lab.
|
||||
[10] A pirate puppet with an eyepatch, safety goggles and a huge scraggly
|
||||
mustache watches over a purple crystal ball at his feet.' He’s too much lab
|
||||
assistant for your lab.
|
||||
|
||||
Some places not to use Rails can include:
|
||||
|
||||
Really Small Tasks that Won’t Grow: if a server does very little, Rails
|
||||
is often too much. Not going to touch a database? Then the DB setup
|
||||
isn’t helping you, is it? Just a tiny low-traffic intermediate server
|
||||
with no caching? A lot of Rails is more trouble than it’s worth.
|
||||
Really Small Tasks that Won’t Grow: if a server does very little, Rails is
|
||||
often too much. Not going to touch a database? Then the DB setup isn’t helping
|
||||
you, is it? Just a tiny low-traffic intermediate server with no caching? A lot
|
||||
of Rails is more trouble than it’s worth.
|
||||
|
||||
Be careful with tasks that grow, though — making a tiny server scale up
|
||||
to do a lot more can be ugly. If you’re already serving HTTP pages to a
|
||||
human with a web browser, consider that you may have to add features to
|
||||
it later. Something like that is already fairly large from the word
|
||||
“go”.
|
||||
Be careful with tasks that grow, though — making a tiny server scale up to do a
|
||||
lot more can be ugly. If you’re already serving HTTP pages to a human with a
|
||||
web browser, consider that you may have to add features to it later. Something
|
||||
like that is already fairly large from the word “go”.
|
||||
|
||||
When It’s ‘Just’ an API Server: Rails has less to offer an API server
|
||||
that speaks JSON over the wire. A lot of its HTTP security doesn’t
|
||||
matter for that case: CSRF protection is entirely about dealing with
|
||||
HTML and Javascript. Many kinds of XSS attacks are dependent on a
|
||||
browser as the weak link, or on putting unescaped user input into HTML.
|
||||
Redirection vulnerabilities assume automatic redirection, which APIs
|
||||
usually don’t do. You can prevent SQL injection attacks with just an
|
||||
ORM, a simpler ORM, or even the raw Ruby MySQL and Postgres gems, which
|
||||
support question-mark arguments.
|
||||
When It’s ‘Just’ an API Server: Rails has less to offer an API server that
|
||||
speaks JSON over the wire. A lot of its HTTP security doesn’t matter for that
|
||||
case: CSRF protection is entirely about dealing with HTML and Javascript. Many
|
||||
kinds of XSS attacks are dependent on a browser as the weak link, or on putting
|
||||
unescaped user input into HTML. Redirection vulnerabilities assume automatic
|
||||
redirection, which APIs usually don’t do. You can prevent SQL injection attacks
|
||||
with just an ORM, a simpler ORM, or even the raw Ruby MySQL and Postgres gems,
|
||||
which support question-mark arguments.
|
||||
|
||||
Rails security really shines when you’re navigating the bewildering
|
||||
world of HTML and browser security. Small projects that mostly speak a
|
||||
structured format read by machines will get less from Rails. Securing
|
||||
something like an integer ID or a hash of strings is just easier than
|
||||
ensuring your HTML contains no script tags or anything exploitable.
|
||||
Rails security really shines when you’re navigating the bewildering world of
|
||||
HTML and browser security. Small projects that mostly speak a structured format
|
||||
read by machines will get less from Rails. Securing something like an integer
|
||||
ID or a hash of strings is just easier than ensuring your HTML contains no
|
||||
script tags or anything exploitable.
|
||||
|
||||
Related to that is when you’re doing in-browser rendering and Rails is
|
||||
‘just’ serving JSON. It’s a weird kind of in-between case. A lot of
|
||||
Rails security and convenience functions no longer help you, but you’re
|
||||
still doing things where internal libraries (ActiveRecord, ActiveJob,
|
||||
ActionMailer) can be highly useful. But if you’re never rendering HTML
|
||||
on the server and you’re very sure you never will, Rails will probably
|
||||
help you less.
|
||||
Related to that is when you’re doing in-browser rendering and Rails is ‘just’
|
||||
serving JSON. It’s a weird kind of in-between case. A lot of Rails security and
|
||||
convenience functions no longer help you, but you’re still doing things where
|
||||
internal libraries (ActiveRecord, ActiveJob, ActionMailer) can be highly
|
||||
useful. But if you’re never rendering HTML on the server and you’re very sure
|
||||
you never will, Rails will probably help you less.
|
||||
|
||||
When Is Rails Not Enough?
|
||||
|
||||
Rails is also designed for a small team and a medium-sized codebase. A
|
||||
huge team (lots of programmers) or a huge codebase (lots of
|
||||
controllers, models and/or lines of code) will tend to drag down the
|
||||
standard Rails-app structure.
|
||||
Rails is also designed for a small team and a medium-sized codebase. A huge
|
||||
team (lots of programmers) or a huge codebase (lots of controllers, models and/
|
||||
or lines of code) will tend to drag down the standard Rails-app structure.
|
||||
|
||||
Ruby allows for a lot of [11]non-local effects. Whether that’s
|
||||
monkeypatching, writing to a database or creating new types at runtime,
|
||||
Ruby isn’t designed for a team of 200 programmers where you don’t trust
|
||||
some of them. There are too many ways for them to cause you trouble.
|
||||
You can use [12]good tooling to scale Ruby to larger teams, but even
|
||||
that will [13]tend to have exceptions and difficulties. That’s not
|
||||
really Ruby’s sweet spot.
|
||||
Ruby allows for a lot of [11]non-local effects. Whether that’s monkeypatching,
|
||||
writing to a database or creating new types at runtime, Ruby isn’t designed for
|
||||
a team of 200 programmers where you don’t trust some of them. There are too
|
||||
many ways for them to cause you trouble. You can use [12]good tooling to scale
|
||||
Ruby to larger teams, but even that will [13]tend to have exceptions and
|
||||
difficulties. That’s not really Ruby’s sweet spot.
|
||||
|
||||
In most cases you can cut up a large project into smaller projects. If
|
||||
one Rails app is too big, you can often separate it into multiple apps,
|
||||
or a thinner app with more back-end services, or an app and a separate
|
||||
microservice, or… One way or another there is usually a way to separate
|
||||
out smaller pieces. Ruby strongly encourages that, as do I.
|
||||
In most cases you can cut up a large project into smaller projects. If one
|
||||
Rails app is too big, you can often separate it into multiple apps, or a
|
||||
thinner app with more back-end services, or an app and a separate microservice,
|
||||
or… One way or another there is usually a way to separate out smaller pieces.
|
||||
Ruby strongly encourages that, as do I.
|
||||
|
||||
There are also not-quite-Rails structures that can scale better. Avdi
|
||||
Grimm’s (now retired) [14]Objects on Rails was an attempt in that
|
||||
direction, as is [15]the Hexagonal architecture for Rails, which in
|
||||
turn has a lot in common with the older and more general [16]N-tier
|
||||
architecture.
|
||||
There are also not-quite-Rails structures that can scale better. Avdi Grimm’s
|
||||
(now retired) [14]Objects on Rails was an attempt in that direction, as is [15]
|
||||
the Hexagonal architecture for Rails, which in turn has a lot in common with
|
||||
the older and more general [16]N-tier architecture.
|
||||
|
||||
But at some point you might want to consider a different framework.
|
||||
[17]Hanami is an obvious choice, designed to be less quick and nimble
|
||||
than Rails for getting a tiny app off the ground, but more scalable if
|
||||
you want to use the same code with a lot more contributors.
|
||||
But at some point you might want to consider a different framework. [17]Hanami
|
||||
is an obvious choice, designed to be less quick and nimble than Rails for
|
||||
getting a tiny app off the ground, but more scalable if you want to use the
|
||||
same code with a lot more contributors.
|
||||
|
||||
I’d still start out in Rails, personally. If you’re building something
|
||||
quickly to see if anybody cares, I know of no framework that comes
|
||||
close to its productivity. Wait to rewrite (in a more rigid framework)
|
||||
until you’re successful and you can afford the drag on your development
|
||||
speed.
|
||||
I’d still start out in Rails, personally. If you’re building something quickly
|
||||
to see if anybody cares, I know of no framework that comes close to its
|
||||
productivity. Wait to rewrite (in a more rigid framework) until you’re
|
||||
successful and you can afford the drag on your development speed.
|
||||
|
||||
The other worry here can be performance. If you’re rewriting a project
|
||||
that is already as large as the current Basecamp… then you’re
|
||||
[18]actually fine for performance. Rails still scales great for them.
|
||||
But if you’re looking at something a hundred times larger (which by
|
||||
definition means B2C, not B2B) then you might have a situation where
|
||||
your server costs are substantially greater than your engineering
|
||||
payroll. In that case it can make sense to slow down your engineers to
|
||||
pay lower server costs. To check this, see what your EC2-or-equivalent
|
||||
costs are just for your application servers, which are what run Rails.
|
||||
And check your payroll just for web engineers, which is who writes in
|
||||
Rails. Normally the engineering payroll is much larger and you should
|
||||
stick with trading cheap machine time for expensive engineering time.
|
||||
But at some point the balance may tip and you should consider raising
|
||||
your engineering payroll to cut your server costs.
|
||||
The other worry here can be performance. If you’re rewriting a project that is
|
||||
already as large as the current Basecamp… then you’re [18]actually fine for
|
||||
performance. Rails still scales great for them. But if you’re looking at
|
||||
something a hundred times larger (which by definition means B2C, not B2B) then
|
||||
you might have a situation where your server costs are substantially greater
|
||||
than your engineering payroll. In that case it can make sense to slow down your
|
||||
engineers to pay lower server costs. To check this, see what your
|
||||
EC2-or-equivalent costs are just for your application servers, which are what
|
||||
run Rails. And check your payroll just for web engineers, which is who writes
|
||||
in Rails. Normally the engineering payroll is much larger and you should stick
|
||||
with trading cheap machine time for expensive engineering time. But at some
|
||||
point the balance may tip and you should consider raising your engineering
|
||||
payroll to cut your server costs.
|
||||
|
||||
When Does Rails Have the Wrong Assumptions?
|
||||
|
||||
[19]A pirate, a bear and a chimp sit at a wicker table. The bear looks
|
||||
into a very old-fashioned microscope as the other two look on. They’re
|
||||
checking the microscope for real-world use cases where Rails might be
|
||||
wrong.
|
||||
[19] A pirate, a bear and a chimp sit at a wicker table. The bear looks into a
|
||||
very old-fashioned microscope as the other two look on. They’re checking the
|
||||
microscope for real-world use cases where Rails might be wrong.
|
||||
|
||||
Before checking if Rails’ assumptions are right for you, we should see
|
||||
what those assumptions actually are.
|
||||
Before checking if Rails’ assumptions are right for you, we should see what
|
||||
those assumptions actually are.
|
||||
|
||||
Before you take my word for it, I recommend taking [20]David Heinemeier
|
||||
Hansson’s word for it in the form of The Rails Doctrine. It’s a great
|
||||
document and it covers a lot of ground.
|
||||
Hansson’s word for it in the form of The Rails Doctrine. It’s a great document
|
||||
and it covers a lot of ground.
|
||||
|
||||
Indeed, if you want to better understand why Rails isn’t amazing for
|
||||
large, low-trust teams, you should read [21]“Provide Sharp Knives” in
|
||||
the Rails Doctrine several times. A lot of Rails’ tradeoffs are
|
||||
entirely by design.
|
||||
Indeed, if you want to better understand why Rails isn’t amazing for large,
|
||||
low-trust teams, you should read [21]“Provide Sharp Knives” in the Rails
|
||||
Doctrine several times. A lot of Rails’ tradeoffs are entirely by design.
|
||||
|
||||
Rails also has some simpler assumptions: it assumes you’re writing an
|
||||
interactive app with server-rendered HTML. It assumes that security is
|
||||
vital (Rails trades a lot for security) but that you don’t want to
|
||||
build your own custom security system in most cases. And it assumes
|
||||
that you either have a small, excellent team doing prototyping work
|
||||
(“Provide Sharp Knives”) or that you have a possibly-mediocre team that
|
||||
needs powerful built-in guidelines ([22]“The Menu is Omakase.”)
|
||||
interactive app with server-rendered HTML. It assumes that security is vital
|
||||
(Rails trades a lot for security) but that you don’t want to build your own
|
||||
custom security system in most cases. And it assumes that you either have a
|
||||
small, excellent team doing prototyping work (“Provide Sharp Knives”) or that
|
||||
you have a possibly-mediocre team that needs powerful built-in guidelines ([22]
|
||||
“The Menu is Omakase.”)
|
||||
|
||||
Rails also assumes you want high developer velocity at a cost of
|
||||
technical debt. In other words, it’s designed for building very
|
||||
quickly. That makes sense when technical execution is not your biggest
|
||||
risk. For instance: if you’re building a small startup, and you’re
|
||||
pretty sure you can build the site but people may not buy your product,
|
||||
you are dominated by market risk. That’s when Rails is perfect. You
|
||||
want to build very quickly. And even if you build perfectly, you’re
|
||||
probably going to have to throw away the result for nontechnical
|
||||
reasons, like “people don’t want to buy it.”
|
||||
Rails also assumes you want high developer velocity at a cost of technical
|
||||
debt. In other words, it’s designed for building very quickly. That makes sense
|
||||
when technical execution is not your biggest risk. For instance: if you’re
|
||||
building a small startup, and you’re pretty sure you can build the site but
|
||||
people may not buy your product, you are dominated by market risk. That’s when
|
||||
Rails is perfect. You want to build very quickly. And even if you build
|
||||
perfectly, you’re probably going to have to throw away the result for
|
||||
nontechnical reasons, like “people don’t want to buy it.”
|
||||
|
||||
As part of “high dev velocity, technical debt is okay” Rails assumes
|
||||
things like, “you’ll want to use a lot of gems” and “dependencies that
|
||||
work are fine if they speed you up.”
|
||||
As part of “high dev velocity, technical debt is okay” Rails assumes things
|
||||
like, “you’ll want to use a lot of gems” and “dependencies that work are fine
|
||||
if they speed you up.”
|
||||
|
||||
Rails assumes you don’t mind scaling out application servers
|
||||
horizontally (by bringing more of them online.) It’s designed to scale
|
||||
well if you can do that. Rails assumes CPU is fairly cheap and it’s
|
||||
usually right about that. Relatedly, Rails assumes that the database is
|
||||
usually your most serious performance bottleneck, which is how web
|
||||
applications usually work.
|
||||
Rails assumes you don’t mind scaling out application servers horizontally (by
|
||||
bringing more of them online.) It’s designed to scale well if you can do that.
|
||||
Rails assumes CPU is fairly cheap and it’s usually right about that. Relatedly,
|
||||
Rails assumes that the database is usually your most serious performance
|
||||
bottleneck, which is how web applications usually work.
|
||||
|
||||
Rails also assumes you’ll have some calculation or data transformation
|
||||
in your application. It assumes that it’s okay to use some CPU because
|
||||
you’ll be doing that anyway.
|
||||
Rails also assumes you’ll have some calculation or data transformation in your
|
||||
application. It assumes that it’s okay to use some CPU because you’ll be doing
|
||||
that anyway.
|
||||
|
||||
(When does that last assumption matter? Let’s talk about Evented
|
||||
Servers and see.)
|
||||
(When does that last assumption matter? Let’s talk about Evented Servers and
|
||||
see.)
|
||||
|
||||
What Isn’t Rails Good At?
|
||||
|
||||
[23] The Node.js logo. Sometimes you need it, or something like it.
|
||||
|
||||
While Rails is great at a lot of things, there’s one particular task
|
||||
that it’s not amazing for: shim servers.
|
||||
While Rails is great at a lot of things, there’s one particular task that it’s
|
||||
not amazing for: shim servers.
|
||||
|
||||
By “shim servers” I mean servers that do very little calculation but
|
||||
integrate answers from a few other back-end services and relay the
|
||||
result. Imagine a server that queries two JSON services and combines
|
||||
the result with simple string-manipulation, for instance. It does very
|
||||
little calculation, but it juggles a lot of events.
|
||||
By “shim servers” I mean servers that do very little calculation but integrate
|
||||
answers from a few other back-end services and relay the result. Imagine a
|
||||
server that queries two JSON services and combines the result with simple
|
||||
string-manipulation, for instance. It does very little calculation, but it
|
||||
juggles a lot of events.
|
||||
|
||||
And that’s the relevant word: “events.”
|
||||
|
||||
There is a specific kind of app architecture embodied by Node.js and
|
||||
its relatives called “Evented” programming. It can support many
|
||||
thousands, or even millions, of simultaneous connections with a tiny
|
||||
amount of server resources. It can be both high-throughput and
|
||||
low-latency. Its benchmark numbers are matchless… for the cases where
|
||||
it works.
|
||||
There is a specific kind of app architecture embodied by Node.js and its
|
||||
relatives called “Evented” programming. It can support many thousands, or even
|
||||
millions, of simultaneous connections with a tiny amount of server resources.
|
||||
It can be both high-throughput and low-latency. Its benchmark numbers are
|
||||
matchless… for the cases where it works.
|
||||
|
||||
Rails can’t match Evented programming at what Evented programming is
|
||||
good at. Basically no framework can. There are Evented frameworks for
|
||||
Ruby (e.g. [24]EventMachine, [25]Async.) Rails is built differently.
|
||||
Rails can’t match Evented programming at what Evented programming is good at.
|
||||
Basically no framework can. There are Evented frameworks for Ruby (e.g. [24]
|
||||
EventMachine, [25]Async.) Rails is built differently.
|
||||
|
||||
If Evented is so much better, why don’t we use it for everything?
|
||||
Because it doesn’t work for everything. I emphasise calculation
|
||||
per-request because an Evented server will fall down and die if you try
|
||||
to make it do very much calculation per-request. Having one server
|
||||
handle a million connections is no good if each connection winds up
|
||||
using a hundred milliseconds of CPU time — that’s simply too many
|
||||
connections and the latency will be terrible.
|
||||
If Evented is so much better, why don’t we use it for everything? Because it
|
||||
doesn’t work for everything. I emphasise calculation per-request because an
|
||||
Evented server will fall down and die if you try to make it do very much
|
||||
calculation per-request. Having one server handle a million connections is no
|
||||
good if each connection winds up using a hundred milliseconds of CPU time —
|
||||
that’s simply too many connections and the latency will be terrible.
|
||||
|
||||
In other words, Rails and Node.js are different tools for different
|
||||
projects. If you’re thinking, “I should either use Rails or Node for
|
||||
this” I would recommend looking deeper into your project (and/or your
|
||||
framework) until it’s obvious which one is the right answer. They do
|
||||
different things.
|
||||
In other words, Rails and Node.js are different tools for different projects.
|
||||
If you’re thinking, “I should either use Rails or Node for this” I would
|
||||
recommend looking deeper into your project (and/or your framework) until it’s
|
||||
obvious which one is the right answer. They do different things.
|
||||
|
||||
Look, I Just Scroll to the Bottom for the Summary and Criticise It On Reddit
|
||||
|
||||
[26]A chimpanzee in a lab coat stares down at his lap, containing
|
||||
sections of wooden train track, and his hand holding a toy train. I’m
|
||||
sure this is the right answer, but I have forgotten the question.
|
||||
[26] A chimpanzee in a lab coat stares down at his lap, containing sections of
|
||||
wooden train track, and his hand holding a toy train. I’m sure this is the
|
||||
right answer, but I have forgotten the question.
|
||||
|
||||
Rails is the wrong choice if your team doesn’t want to use it or
|
||||
doesn’t know how.
|
||||
Rails is the wrong choice if your team doesn’t want to use it or doesn’t know
|
||||
how.
|
||||
|
||||
Rails is the wrong choice in cases where a different framework is
|
||||
specifically better, or you have a specific library you need to be
|
||||
compatible with that isn’t Rails-friendly.
|
||||
Rails is the wrong choice in cases where a different framework is specifically
|
||||
better, or you have a specific library you need to be compatible with that
|
||||
isn’t Rails-friendly.
|
||||
|
||||
Rails might be the wrong choice if you’re not rendering HTML on the
|
||||
server, especially if your project is very small and/or doesn’t use a
|
||||
database.
|
||||
Rails might be the wrong choice if you’re not rendering HTML on the server,
|
||||
especially if your project is very small and/or doesn’t use a database.
|
||||
|
||||
Rails is the wrong choice is you’re not doing prototyping-flavoured
|
||||
work, preferably with a small, highly-competent team.
|
||||
Rails is the wrong choice is you’re not doing prototyping-flavoured work,
|
||||
preferably with a small, highly-competent team.
|
||||
|
||||
Rails is the wrong choice if your dev team or your app code is too big
|
||||
and you can’t subdivide the project.
|
||||
Rails is the wrong choice if your dev team or your app code is too big and you
|
||||
can’t subdivide the project.
|
||||
|
||||
Rails is the wrong choice if your project wants an Evented server like
|
||||
Node.js or EventMachine.
|
||||
Rails is the wrong choice if your project wants an Evented server like Node.js
|
||||
or EventMachine.
|
||||
|
||||
This article is the wrong choice if you’d rather [27]listen to an
|
||||
entertaining podcast on the same topic.
|
||||
This article is the wrong choice if you’d rather [27]listen to an entertaining
|
||||
podcast on the same topic.
|
||||
|
||||
If you’re wondering when Rails is the right choice, [28]the Rails Doctrine is a
|
||||
great first step.
|
||||
|
||||
If you’re wondering when Rails is the right choice, [28]the Rails
|
||||
Doctrine is a great first step.
|
||||
Aug 6 2020
|
||||
[29]ruby [30]rails
|
||||
|
||||
You Hunger to Get Better
|
||||
|
||||
Subscribe to get free ebook chapters and an emailed coding class now,
|
||||
plus videos and articles a few times a month.
|
||||
Subscribe to get free ebook chapters and an emailed coding class now, plus
|
||||
videos and articles a few times a month.
|
||||
|
||||
Why this specific newsletter? You want to be an expert. Expertise comes
|
||||
from learning the fundamentals, deeply. And that comes from the best
|
||||
kind of practice. I write with that in mind. I won't waste your time.
|
||||
Why this specific newsletter? You want to be an expert. Expertise comes from
|
||||
learning the fundamentals, deeply. And that comes from the best kind of
|
||||
practice. I write with that in mind. I won't waste your time.
|
||||
|
||||
(Yes, I also sell things. They're good, but I'm fine if you don't buy
|
||||
them.)
|
||||
____________________ ____________________ (BUTTON) Sign-up
|
||||
(Yes, I also sell things. They're good, but I'm fine if you don't buy them.)
|
||||
|
||||
[32][ ][33][ ] Sign-up
|
||||
Comments
|
||||
|
||||
Please enable JavaScript to view the [31]comments powered by Disqus.
|
||||
[32]comments powered by Disqus
|
||||
Please enable JavaScript to view the [35]comments powered by Disqus. [36]
|
||||
comments powered by Disqus
|
||||
|
||||
Read Next
|
||||
|
||||
[33]Computer Science: Just the Useful Bits
|
||||
[37]Computer Science: Just the Useful Bits
|
||||
|
||||
[34]ruby [35]rails
|
||||
[36]Computer Science: Just the Useful Bits
|
||||
[38]ruby [39]rails
|
||||
|
||||
[37]Let's Build Course Software: Email Reminders
|
||||
[40] Computer Science: Just the Useful Bits
|
||||
|
||||
[38]ruby [39]rails [40]letsbuild [41]rubymadscience
|
||||
[42]Let's Build Course Software: Email Reminders
|
||||
[41]Let's Build Course Software: Email Reminders
|
||||
|
||||
[43]Free Rebuilding Rails Video Chapters
|
||||
[42]ruby [43]rails [44]letsbuild [45]rubymadscience
|
||||
|
||||
[44]career
|
||||
[46] Let's Build Course Software: Email Reminders
|
||||
|
||||
[45]The Urban Legend of the 10X Developer
|
||||
[47]Free Rebuilding Rails Video Chapters
|
||||
|
||||
[46]career
|
||||
[47]The Urban Legend of the 10X Developer
|
||||
[48]career
|
||||
|
||||
[48]Mastodon [49]GitHub [50]Linkedin [51]Mastodon
|
||||
[49]The Urban Legend of the 10X Developer
|
||||
|
||||
[52]Codefol.io © 2020 . Horace theme by [53]JustGoodThemes..
|
||||
[50]career
|
||||
|
||||
[54]Back to top
|
||||
[51] The Urban Legend of the 10X Developer
|
||||
|
||||
References
|
||||
[52] Mastodon [53] GitHub [54] Linkedin [55]Mastodon
|
||||
|
||||
1. https://codefol.io/
|
||||
2. https://codefol.io/
|
||||
3. https://codefol.io/posts
|
||||
4. https://codefol.io/topics
|
||||
5. https://codefol.io/tags/favourite
|
||||
6. https://codefol.io/feed.xml
|
||||
7. https://codefol.io/about
|
||||
8. https://www.codewithjason.com/rails-with-jason-podcast/noah-gibbs-3/
|
||||
9. https://www.codewithjason.com/rails-with-jason-podcast/noah-gibbs-3/
|
||||
10. https://rubymadscience.com/img/assistant_pirate_with_sphere_bigthumb.png
|
||||
11. https://en.wikipedia.org/wiki/Side_effect_(computer_science)
|
||||
12. https://sorbet.org/
|
||||
13. https://sorbet.org/docs/troubleshooting#escape-hatches
|
||||
14. https://www.goodreads.com/book/show/13481927-objects-on-rails
|
||||
15. https://medium.com/@vsavkin/hexagonal-architecture-for-rails-developers-8b1fee64a613
|
||||
16. https://en.wikipedia.org/wiki/Multitier_architecture
|
||||
17. https://hanamirb.org/
|
||||
18. https://m.signalvnoise.com/only-15-of-the-basecamp-operations-budget-is-spent-on-ruby/
|
||||
19. https://rubymadscience.com/img/dr_bear_microscope_bigthumb.png
|
||||
20. https://rubyonrails.org/doctrine/
|
||||
21. https://rubyonrails.org/doctrine/#provide-sharp-knives
|
||||
22. https://rubyonrails.org/doctrine/#omakase
|
||||
23. https://codefol.io/posts/when-should-you-not-use-rails/node_js_logo.png
|
||||
24. https://github.com/eventmachine/eventmachine
|
||||
25. https://github.com/socketry/async
|
||||
26. http://rubymadscience.com/img/rails_internals_bigthumb.png
|
||||
27. https://www.codewithjason.com/rails-with-jason-podcast/noah-gibbs-3/
|
||||
28. https://rubyonrails.org/doctrine/
|
||||
29. https://codefol.io/tags/ruby/
|
||||
30. https://codefol.io/tags/rails/
|
||||
31. http://disqus.com/?ref_noscript
|
||||
32. http://disqus.com/
|
||||
33. https://codefol.io/posts/introducing-computer-science-just-the-useful-bits/
|
||||
34. https://codefol.io/tags/ruby/
|
||||
35. https://codefol.io/tags/rails/
|
||||
36. https://codefol.io/posts/introducing-computer-science-just-the-useful-bits/
|
||||
37. https://codefol.io/posts/series-build-coding-course-email-reminders/
|
||||
38. https://codefol.io/tags/ruby/
|
||||
39. https://codefol.io/tags/rails/
|
||||
40. https://codefol.io/tags/letsbuild/
|
||||
41. https://codefol.io/tags/rubymadscience/
|
||||
42. https://codefol.io/posts/series-build-coding-course-email-reminders/
|
||||
43. https://codefol.io/posts/free-rr-video-chapters/
|
||||
44. https://codefol.io/tags/career/
|
||||
45. https://codefol.io/posts/urban-legend-of-the-10x-developer/
|
||||
46. https://codefol.io/tags/career/
|
||||
47. https://codefol.io/posts/urban-legend-of-the-10x-developer/
|
||||
48. https://ruby.social/@codefolio
|
||||
49. https://github.com/noahgibbs
|
||||
50. https://www.linkedin.com/in/noahgibbs
|
||||
51. https://ruby.social/@codefolio
|
||||
52. https://codefol.io/posts/when-should-you-not-use-rails/
|
||||
53. https://justgoodthemes.com/
|
||||
54. https://codefol.io/posts/when-should-you-not-use-rails/#page
|
||||
[56]Codefol.io © 2020 . Horace theme by [57]JustGoodThemes..
|
||||
|
||||
[58] Back to top
|
||||
|
||||
|
||||
References:
|
||||
|
||||
[1] https://codefol.io/
|
||||
[2] https://codefol.io/
|
||||
[3] https://codefol.io/posts
|
||||
[4] https://codefol.io/topics
|
||||
[5] https://codefol.io/tags/favourite
|
||||
[6] https://codefol.io/feed.xml
|
||||
[7] https://codefol.io/about
|
||||
[8] https://www.codewithjason.com/rails-with-jason-podcast/noah-gibbs-3/
|
||||
[9] https://www.codewithjason.com/rails-with-jason-podcast/noah-gibbs-3/
|
||||
[10] https://rubymadscience.com/img/assistant_pirate_with_sphere_bigthumb.png
|
||||
[11] https://en.wikipedia.org/wiki/Side_effect_(computer_science)
|
||||
[12] https://sorbet.org/
|
||||
[13] https://sorbet.org/docs/troubleshooting#escape-hatches
|
||||
[14] https://www.goodreads.com/book/show/13481927-objects-on-rails
|
||||
[15] https://medium.com/@vsavkin/hexagonal-architecture-for-rails-developers-8b1fee64a613
|
||||
[16] https://en.wikipedia.org/wiki/Multitier_architecture
|
||||
[17] https://hanamirb.org/
|
||||
[18] https://m.signalvnoise.com/only-15-of-the-basecamp-operations-budget-is-spent-on-ruby/
|
||||
[19] https://rubymadscience.com/img/dr_bear_microscope_bigthumb.png
|
||||
[20] https://rubyonrails.org/doctrine/
|
||||
[21] https://rubyonrails.org/doctrine/#provide-sharp-knives
|
||||
[22] https://rubyonrails.org/doctrine/#omakase
|
||||
[23] https://codefol.io/posts/when-should-you-not-use-rails/node_js_logo.png
|
||||
[24] https://github.com/eventmachine/eventmachine
|
||||
[25] https://github.com/socketry/async
|
||||
[26] http://rubymadscience.com/img/rails_internals_bigthumb.png
|
||||
[27] https://www.codewithjason.com/rails-with-jason-podcast/noah-gibbs-3/
|
||||
[28] https://rubyonrails.org/doctrine/
|
||||
[29] https://codefol.io/tags/ruby/
|
||||
[30] https://codefol.io/tags/rails/
|
||||
[35] http://disqus.com/?ref_noscript
|
||||
[36] http://disqus.com/
|
||||
[37] https://codefol.io/posts/introducing-computer-science-just-the-useful-bits/
|
||||
[38] https://codefol.io/tags/ruby/
|
||||
[39] https://codefol.io/tags/rails/
|
||||
[40] https://codefol.io/posts/introducing-computer-science-just-the-useful-bits/
|
||||
[41] https://codefol.io/posts/series-build-coding-course-email-reminders/
|
||||
[42] https://codefol.io/tags/ruby/
|
||||
[43] https://codefol.io/tags/rails/
|
||||
[44] https://codefol.io/tags/letsbuild/
|
||||
[45] https://codefol.io/tags/rubymadscience/
|
||||
[46] https://codefol.io/posts/series-build-coding-course-email-reminders/
|
||||
[47] https://codefol.io/posts/free-rr-video-chapters/
|
||||
[48] https://codefol.io/tags/career/
|
||||
[49] https://codefol.io/posts/urban-legend-of-the-10x-developer/
|
||||
[50] https://codefol.io/tags/career/
|
||||
[51] https://codefol.io/posts/urban-legend-of-the-10x-developer/
|
||||
[52] https://ruby.social/@codefolio
|
||||
[53] https://github.com/noahgibbs
|
||||
[54] https://www.linkedin.com/in/noahgibbs
|
||||
[55] https://ruby.social/@codefolio
|
||||
[56] https://codefol.io/posts/when-should-you-not-use-rails/#
|
||||
[57] https://justgoodthemes.com/
|
||||
[58] https://codefol.io/posts/when-should-you-not-use-rails/#page
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
#[1]Craig Mod — Writer + Photographer
|
||||
|
||||
[1]
|
||||
[2]About Craig
|
||||
[3]Books & [4]Essays
|
||||
[5]Membership
|
||||
@@ -7,7 +6,9 @@
|
||||
[7]“Special Projects” Membership
|
||||
Podcasts:🎧 [8]On Margins & [9]SW945
|
||||
[10]Newsletters:📩 [11]Roden & [12]Ridgeline
|
||||
|
||||
[13]
|
||||
[14]
|
||||
[15]
|
||||
Header image for Electric Bike, Stupid Love of My Life
|
||||
|
||||
|
||||
@@ -16,391 +17,387 @@ Electric Bike, Stupid Love of My Life
|
||||
Reflections on eighteen months of electric bike ownership
|
||||
|
||||
|
||||
My electric bike sings, emits a nearly imperceptible hum from its tiny
|
||||
motor. I love its song. A song of peace and magic. Has money ever
|
||||
bought as much delight as the delight of an electric bike?
|
||||
|
||||
The first time I rode one was nearly a decade ago, in Kyoto. The
|
||||
electric bike I rented was huge and unwieldy, but that tug of its motor
|
||||
never left my mind. I went to climb a hill and it felt as if a giant
|
||||
had gently placed his hand on my back and pushed me forward. That
|
||||
stupid smile has been on my face ever since.
|
||||
My electric bike sings, emits a nearly imperceptible hum from its tiny motor. I
|
||||
love its song. A song of peace and magic. Has money ever bought as much delight
|
||||
as the delight of an electric bike?
|
||||
|
||||
Two years ago I rented another one. This one smaller, lighter, the
|
||||
motor more powerful. I was convinced. This is the way. Eighteen months
|
||||
ago, in the heart of the pandemic, I committed and bought my first
|
||||
electric bike and have never looked back.
|
||||
__________________________________________________________________
|
||||
The first time I rode one was nearly a decade ago, in Kyoto. The electric bike
|
||||
I rented was huge and unwieldy, but that tug of its motor never left my mind. I
|
||||
went to climb a hill and it felt as if a giant had gently placed his hand on my
|
||||
back and pushed me forward. That stupid smile has been on my face ever since.
|
||||
|
||||
Indulge me — a summer afternoon: Soaring down the coast, the ocean to
|
||||
one side and a strand of old pines to the other. The afternoon sun
|
||||
beats down but it feels cool and there’s something irrationally
|
||||
stirring — downright emotional — about the efficiency of this dumb
|
||||
machine beneath my body. The motor looks too small — just a black
|
||||
cylinder on the hub of the wheel. And yet it moves. It sings that song.
|
||||
A subtle hum. A beautiful hum. It makes me want to ride and ride,
|
||||
ridiculous distances, nonsensical distances. I don’t want to get to
|
||||
where I’m going because I want the ride to last longer. I want to
|
||||
linger in this space as long as possible, this space of smooth and
|
||||
efficient movement through the world, gliding in near total mechanical
|
||||
silence, just the sound of rubber on the pavement, wind in my ears,
|
||||
breaking waves, salt, the smell of pine. This is what electric bikes
|
||||
do: They drive you insane with the poetry of the world.
|
||||
__________________________________________________________________
|
||||
Two years ago I rented another one. This one smaller, lighter, the motor more
|
||||
powerful. I was convinced. This is the way. Eighteen months ago, in the heart
|
||||
of the pandemic, I committed and bought my first electric bike and have never
|
||||
looked back.
|
||||
|
||||
A strange trio A few of my old bikes: A mamachari, carbon fiber road
|
||||
bike, and Kalavinka
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
[13]#So Many Bikes
|
||||
Indulge me — a summer afternoon: Soaring down the coast, the ocean to one side
|
||||
and a strand of old pines to the other. The afternoon sun beats down but it
|
||||
feels cool and there’s something irrationally stirring — downright emotional —
|
||||
about the efficiency of this dumb machine beneath my body. The motor looks too
|
||||
small — just a black cylinder on the hub of the wheel. And yet it moves. It
|
||||
sings that song. A subtle hum. A beautiful hum. It makes me want to ride and
|
||||
ride, ridiculous distances, nonsensical distances. I don’t want to get to where
|
||||
I’m going because I want the ride to last longer. I want to linger in this
|
||||
space as long as possible, this space of smooth and efficient movement through
|
||||
the world, gliding in near total mechanical silence, just the sound of rubber
|
||||
on the pavement, wind in my ears, breaking waves, salt, the smell of pine. This
|
||||
is what electric bikes do: They drive you insane with the poetry of the world.
|
||||
|
||||
All my standing life, I’ve biked. As a kid I rode a K-Mart Huffy to a
|
||||
rusted nub and then managed to nab a Haro Group 1. As an adult, bikes
|
||||
have been one of my few material indulgences (unwittingly,
|
||||
organically). In the past twenty years alone I’ve owned some fifteen
|
||||
bikes. I’ve had aluminum and carbon Bianchi road bikes. I’ve had steel
|
||||
Kalavinka keirin bikes with gorgeous head badges. I’ve had folding
|
||||
Dahon and Birdy BD-1s. I’ve had a handful of beloved brandless
|
||||
throwaway mamacharis — shopping bikes — that have proven hearty and fun
|
||||
in their own ways, and have each died uniquely. I’ve gone out of my way
|
||||
to get a handmade Arrow cruiser from a builder in Ogikubo. I still have
|
||||
a custom orange Moulton that I’ve modified into a single-speed city
|
||||
bomber that goes remarkably fast while floating atop its simple
|
||||
suspension.
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
A strange trio A few of my old bikes: A mamachari, carbon fiber road bike, and
|
||||
Kalavinka
|
||||
|
||||
And on and on — bikes. Why? Because as any bike lover will tell you, to
|
||||
be ensorcelled by the bike is to crave one and only one thing: More
|
||||
bike. Each new bike is like riding once again for the first time.
|
||||
Exploring a city on a mamachari is different than a BD-1 is different
|
||||
than a Moulton. All thrilling. The bikes change, and so, too does your
|
||||
relationship to the pavement. My love for bikes has no categorical
|
||||
allegiances; if it has two wheels, and pedals, I’m interested. I want
|
||||
to ride them all.
|
||||
A Moulton Tiny, but fast, nearly flawless as a city machine — a Moulton
|
||||
with converted stem, Sugino cranks, coaster brake
|
||||
__________________________________________________________________
|
||||
[16]#So Many Bikes
|
||||
|
||||
Summers in most of Japan have never been easy. The temperatures England
|
||||
flirted with in 2022 are temperatures Tokyoites have contended with for
|
||||
centuries (and now contend with ones even higher). Crushing heat
|
||||
coupled with suffocating humidity. A three-shower-a-day kinda summer.
|
||||
Watch an Ozu film and observe the languid and supine impulse of its
|
||||
inhabitants during summertime scenes — that’s not affect, it’s
|
||||
survival. In Japan’s August, you simply can’t walk a block without
|
||||
losing most of your moisture.
|
||||
All my standing life, I’ve biked. As a kid I rode a K-Mart Huffy to a rusted
|
||||
nub and then managed to nab a Haro Group 1. As an adult, bikes have been one of
|
||||
my few material indulgences (unwittingly, organically). In the past twenty
|
||||
years alone I’ve owned some fifteen bikes. I’ve had aluminum and carbon Bianchi
|
||||
road bikes. I’ve had steel Kalavinka keirin bikes with gorgeous head badges.
|
||||
I’ve had folding Dahon and Birdy BD-1s. I’ve had a handful of beloved brandless
|
||||
throwaway mamacharis — shopping bikes — that have proven hearty and fun in
|
||||
their own ways, and have each died uniquely. I’ve gone out of my way to get a
|
||||
handmade Arrow cruiser from a builder in Ogikubo. I still have a custom orange
|
||||
Moulton that I’ve modified into a single-speed city bomber that goes remarkably
|
||||
fast while floating atop its simple suspension.
|
||||
|
||||
Bikes have always helped. A bicycle generates a microclimate with
|
||||
minimal effort. Standing on a street corner you may be soaked, but on a
|
||||
bike, the wind whooshing past, you are crisp(er) and dry(er). An
|
||||
electric bike only amplifies the effect.
|
||||
And on and on — bikes. Why? Because as any bike lover will tell you, to be
|
||||
ensorcelled by the bike is to crave one and only one thing: More bike. Each new
|
||||
bike is like riding once again for the first time. Exploring a city on a
|
||||
mamachari is different than a BD-1 is different than a Moulton. All thrilling.
|
||||
The bikes change, and so, too does your relationship to the pavement. My love
|
||||
for bikes has no categorical allegiances; if it has two wheels, and pedals, I’m
|
||||
interested. I want to ride them all.
|
||||
|
||||
When I was a child I dreamt of having a personal helicopter. Powered by
|
||||
my feet and a bit of magic (certainly not gasoline, oddly, thinking
|
||||
back on it now). I imagined quietly gliding over the city in this tiny
|
||||
contraption, floating from home to video rental shop to diner, stopping
|
||||
by a friend’s house along the way. An electric bike gets me most of the
|
||||
way to this feeling.
|
||||
A Moulton Tiny, but fast, nearly flawless as a city machine — a Moulton with
|
||||
converted stem, Sugino cranks, coaster brake
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
In the past eighteen months I’ve put several thousand kilometers on my
|
||||
electric bikes. It feels like cheating in every best possible way. I
|
||||
live in a seaside town south of Tokyo and traffic can get ridiculous,
|
||||
its ancient roads sized for horses, not cars. The electric bike swoops
|
||||
between and alongside these stale processions of heat and burning fuel.
|
||||
Drifting behind a gas-powered scooter or moped feels like observing
|
||||
some Victorian contraption — inefficient and loud and clunky and
|
||||
burdensome and pollutant. And not much faster (often much slower) or
|
||||
more useful than an electric bike.
|
||||
__________________________________________________________________
|
||||
Summers in most of Japan have never been easy. The temperatures England flirted
|
||||
with in 2022 are temperatures Tokyoites have contended with for centuries (and
|
||||
now contend with ones even higher). Crushing heat coupled with suffocating
|
||||
humidity. A three-shower-a-day kinda summer. Watch an Ozu film and observe the
|
||||
languid and supine impulse of its inhabitants during summertime scenes — that’s
|
||||
not affect, it’s survival. In Japan’s August, you simply can’t walk a block
|
||||
without losing most of your moisture.
|
||||
|
||||
A Vanmoof and a BESV My friend's S3 and my BESV (the X3 looks like a
|
||||
slightly smaller version of the S3)
|
||||
Bikes have always helped. A bicycle generates a microclimate with minimal
|
||||
effort. Standing on a street corner you may be soaked, but on a bike, the wind
|
||||
whooshing past, you are crisp(er) and dry(er). An electric bike only amplifies
|
||||
the effect.
|
||||
|
||||
[14]#Electrics
|
||||
When I was a child I dreamt of having a personal helicopter. Powered by my feet
|
||||
and a bit of magic (certainly not gasoline, oddly, thinking back on it now). I
|
||||
imagined quietly gliding over the city in this tiny contraption, floating from
|
||||
home to video rental shop to diner, stopping by a friend’s house along the way.
|
||||
An electric bike gets me most of the way to this feeling.
|
||||
|
||||
I own two electric bikes. My first purchase was the strangely named
|
||||
BESV PSA1 — which is a smaller wheeled (20"), rear-wheel drive machine,
|
||||
with mostly off-the-shelf components allowing you to customize it to
|
||||
your liking. ^[15]1 And then, because I was so enamored by the BESV —
|
||||
so seduced by its small motor of umph, so wanting more and different
|
||||
electric bike experiences — I went and picked up a front-wheel drive
|
||||
Vanmoof X3 — the smaller-wheeled brother (24") to Vanmoof’s (quite
|
||||
frankly) giant S3 — just a few months later.
|
||||
In the past eighteen months I’ve put several thousand kilometers on my electric
|
||||
bikes. It feels like cheating in every best possible way. I live in a seaside
|
||||
town south of Tokyo and traffic can get ridiculous, its ancient roads sized for
|
||||
horses, not cars. The electric bike swoops between and alongside these stale
|
||||
processions of heat and burning fuel. Drifting behind a gas-powered scooter or
|
||||
moped feels like observing some Victorian contraption — inefficient and loud
|
||||
and clunky and burdensome and pollutant. And not much faster (often much
|
||||
slower) or more useful than an electric bike.
|
||||
|
||||
I love them both like damaged brothers, because both of these bikes are
|
||||
flawed in frustrating ways.
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
A Vanmoof and a BESV My friend's S3 and my BESV (the X3 looks like a slightly
|
||||
smaller version of the S3)
|
||||
|
||||
The electronic brain on the BESV is as dumb as they come.^[16]2 The
|
||||
settings reset each time you turn the bike on. The acceleration curves
|
||||
feel unrefined — herky-jerky, you might say. Its app is the worst app I
|
||||
have on my phone — badly designed, nearly functionally useless, clearly
|
||||
engineered without love. And yet. Despite these flaws I put hundreds of
|
||||
kilometers on this thing in the first month. The front and rear
|
||||
suspension turn every road to glass, and are even fine for dirt trails;
|
||||
I find myself hunting down paths through parks I’d never otherwise
|
||||
think about. Suddenly every hilly road is a thing demanding to be
|
||||
explored. Up up up the little machine yells, and you follow its
|
||||
command.
|
||||
[17]#Electrics
|
||||
|
||||
Guests who stay at my studio are given the BESV to ride. We take it
|
||||
down the coast. It never fails to amaze. One friend felt compelled to
|
||||
pet it upon dismount, saying, Good job, buddy, so quick and deep was
|
||||
the affection for the thing.
|
||||
I own two electric bikes. My first purchase was the strangely named BESV PSA1 —
|
||||
which is a smaller wheeled (20"), rear-wheel drive machine, with mostly
|
||||
off-the-shelf components allowing you to customize it to your liking. ^[18]1
|
||||
And then, because I was so enamored by the BESV — so seduced by its small motor
|
||||
of umph, so wanting more and different electric bike experiences — I went and
|
||||
picked up a front-wheel drive Vanmoof X3 — the smaller-wheeled brother (24") to
|
||||
Vanmoof’s (quite frankly) giant S3 — just a few months later.
|
||||
|
||||
The Vanmoof is much smarter — the brain and software within it are
|
||||
refined, the app good, the acceleration curves smooth — but the bike is
|
||||
all custom components, and they aren’t the highest quality at that. The
|
||||
automatic shifting mechanism on mine failed twice in the first two
|
||||
months, requiring shipping the bike to the Vanmoof store.^[17]3 The
|
||||
seat post bolt broke off in the post. The original plastic pedals felt
|
||||
cheap and flimsy (pedals are one of the few things you can swap for
|
||||
your own). The aluminum frame is too stiff for the speed the bike
|
||||
generates — it can feel like you’ve been rattled to death after a bumpy
|
||||
I love them both like damaged brothers, because both of these bikes are flawed
|
||||
in frustrating ways.
|
||||
|
||||
The electronic brain on the BESV is as dumb as they come.^[19]2 The settings
|
||||
reset each time you turn the bike on. The acceleration curves feel unrefined —
|
||||
herky-jerky, you might say. Its app is the worst app I have on my phone — badly
|
||||
designed, nearly functionally useless, clearly engineered without love. And
|
||||
yet. Despite these flaws I put hundreds of kilometers on this thing in the
|
||||
first month. The front and rear suspension turn every road to glass, and are
|
||||
even fine for dirt trails; I find myself hunting down paths through parks I’d
|
||||
never otherwise think about. Suddenly every hilly road is a thing demanding to
|
||||
be explored. Up up up the little machine yells, and you follow its command.
|
||||
|
||||
Guests who stay at my studio are given the BESV to ride. We take it down the
|
||||
coast. It never fails to amaze. One friend felt compelled to pet it upon
|
||||
dismount, saying, Good job, buddy, so quick and deep was the affection for the
|
||||
thing.
|
||||
|
||||
The Vanmoof is much smarter — the brain and software within it are refined, the
|
||||
app good, the acceleration curves smooth — but the bike is all custom
|
||||
components, and they aren’t the highest quality at that. The automatic shifting
|
||||
mechanism on mine failed twice in the first two months, requiring shipping the
|
||||
bike to the Vanmoof store.^[20]3 The seat post bolt broke off in the post. The
|
||||
original plastic pedals felt cheap and flimsy (pedals are one of the few things
|
||||
you can swap for your own). The aluminum frame is too stiff for the speed the
|
||||
bike generates — it can feel like you’ve been rattled to death after a bumpy
|
||||
road. (And stiffness mitigation by lowering tire pressure seems to only
|
||||
increase possibility of puncture.) But, more than all that, the design
|
||||
of the bike has a dangerous fundamental flaw: The bottom bracket is
|
||||
simply too low.
|
||||
increase possibility of puncture.) But, more than all that, the design of the
|
||||
bike has a dangerous fundamental flaw: The bottom bracket is simply too low.
|
||||
|
||||
Of all my many, many bikes, I’ve never had a pedal bottom out. On this
|
||||
Vanmoof X3? Dozens of times. Most critically during a turn at speed —
|
||||
the pedal hit the pavement, jumped the bike sideways, and sent me
|
||||
flying. It’s the only bad crash I’ve had in decades. So I’ve had to
|
||||
modify the way I ride — no pedaling into or out of turns, hyper
|
||||
awareness of deviations in lateral road slope — because, despite all
|
||||
this, I can’t stop riding this stupid thing. It sings — that hum. It is
|
||||
joy. I reach for it daily and it takes me around the peninsula and
|
||||
makes me happy to be alive.
|
||||
__________________________________________________________________
|
||||
Of all my many, many bikes, I’ve never had a pedal bottom out. On this Vanmoof
|
||||
X3? Dozens of times. Most critically during a turn at speed — the pedal hit the
|
||||
pavement, jumped the bike sideways, and sent me flying. It’s the only bad crash
|
||||
I’ve had in decades. So I’ve had to modify the way I ride — no pedaling into or
|
||||
out of turns, hyper awareness of deviations in lateral road slope — because,
|
||||
despite all this, I can’t stop riding this stupid thing. It sings — that hum.
|
||||
It is joy. I reach for it daily and it takes me around the peninsula and makes
|
||||
me happy to be alive.
|
||||
|
||||
BESV @ Lee's Bread, Oiso I've written about three electric bike rides
|
||||
for Papersky Magazine: Misaki, Oiso, and Yokosuka.
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
BESV @ Lee's Bread, Oiso I've written about three electric bike rides for
|
||||
Papersky Magazine: Misaki, Oiso, and Yokosuka.
|
||||
|
||||
Allow me to share a dirty secret: More often than not, at midnight I
|
||||
can’t repress the impulse — I have to take a bike out. Out the bike
|
||||
comes and together we head into the empty streets of my town and hum
|
||||
our way all over, visiting temples in total silence. There are no cars.
|
||||
Often no people. It feels illicit — this slipping around town, this
|
||||
sliding into temple parking lots in the shroud of the night, looking at
|
||||
their old beams, feeling ten years old and grateful for both the
|
||||
ability and awareness to be doing just this very thing at this very
|
||||
moment.
|
||||
__________________________________________________________________
|
||||
Allow me to share a dirty secret: More often than not, at midnight I can’t
|
||||
repress the impulse — I have to take a bike out. Out the bike comes and
|
||||
together we head into the empty streets of my town and hum our way all over,
|
||||
visiting temples in total silence. There are no cars. Often no people. It feels
|
||||
illicit — this slipping around town, this sliding into temple parking lots in
|
||||
the shroud of the night, looking at their old beams, feeling ten years old and
|
||||
grateful for both the ability and awareness to be doing just this very thing at
|
||||
this very moment.
|
||||
|
||||
I’ve long since posited world peace could be achieved if you bought
|
||||
everyone in the world a bike, but now I want those bikes to be
|
||||
electric. I want everyone to feel this silliness, this punch-drunk
|
||||
stupidity of pure love, this sense of cheating the rules, the norms,
|
||||
this sense of ever-present delight. At our worst, humans mindlessly
|
||||
consume, sear the earth and each other, fill our bodies with poisons.
|
||||
At our best we invent electric bikes. Batteries have gotten more
|
||||
efficient, motors smaller and more powerful. The last decade has
|
||||
brought great efficiency to these machines, and the next ten years will
|
||||
only double down on these gains. Electric bike numbers are up, year
|
||||
over year over year. Tremendously so. Those who know, proselytize. We
|
||||
can’t help it. The charm is too great. The game non- zero sum. The more
|
||||
people who know, the better the world. It’s a wild notion, this sense
|
||||
of goodness to be had if you just reach out for it. Goodness with no
|
||||
real downside. Like solar panels or wind turbines, electric bikes are
|
||||
machines that buoy the spirit and the earth.
|
||||
__________________________________________________________________
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
Buy the best electric bike you can within your budget. Stretch if
|
||||
possible. Usually, the more you spend the lighter the machine, the more
|
||||
powerful the motor, the longer-lasting the battery. Depending on which
|
||||
country you live in top speeds will differ. In Japan the bike’s are
|
||||
capped at 24km/h. In America, 32km/h. Some places only allow for
|
||||
pedal-assist — meaning the motor only works when pedaling. Others allow
|
||||
throttles, blurring the line between bike and scooter. Laws will change
|
||||
in the coming years as more people adopt the machines and cities
|
||||
themselves adapt. This is just the start. Ten years ago it was fairly
|
||||
rare to see an electric bike around Tokyo. Today, it seems as if every
|
||||
I’ve long since posited world peace could be achieved if you bought everyone in
|
||||
the world a bike, but now I want those bikes to be electric. I want everyone to
|
||||
feel this silliness, this punch-drunk stupidity of pure love, this sense of
|
||||
cheating the rules, the norms, this sense of ever-present delight. At our
|
||||
worst, humans mindlessly consume, sear the earth and each other, fill our
|
||||
bodies with poisons. At our best we invent electric bikes. Batteries have
|
||||
gotten more efficient, motors smaller and more powerful. The last decade has
|
||||
brought great efficiency to these machines, and the next ten years will only
|
||||
double down on these gains. Electric bike numbers are up, year over year over
|
||||
year. Tremendously so. Those who know, proselytize. We can’t help it. The charm
|
||||
is too great. The game non- zero sum. The more people who know, the better the
|
||||
world. It’s a wild notion, this sense of goodness to be had if you just reach
|
||||
out for it. Goodness with no real downside. Like solar panels or wind turbines,
|
||||
electric bikes are machines that buoy the spirit and the earth.
|
||||
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
Buy the best electric bike you can within your budget. Stretch if possible.
|
||||
Usually, the more you spend the lighter the machine, the more powerful the
|
||||
motor, the longer-lasting the battery. Depending on which country you live in
|
||||
top speeds will differ. In Japan the bike’s are capped at 24km/h. In America,
|
||||
32km/h. Some places only allow for pedal-assist — meaning the motor only works
|
||||
when pedaling. Others allow throttles, blurring the line between bike and
|
||||
scooter. Laws will change in the coming years as more people adopt the machines
|
||||
and cities themselves adapt. This is just the start. Ten years ago it was
|
||||
fairly rare to see an electric bike around Tokyo. Today, it seems as if every
|
||||
parent hauling their kids is doing so electrically.
|
||||
|
||||
A good strategy: Find a local bike shop that will let you try out
|
||||
several electric bikes. Some have front-hub motors, others rear-hub
|
||||
motors. Others, the motor sits in the center, between the cranks. Each
|
||||
has a subtly different feel. Going up a hill, a front-motor’d machine
|
||||
may skip or slip as you pull back on the handlebars, but on flat land
|
||||
will feel more like being tugged through the world.
|
||||
A good strategy: Find a local bike shop that will let you try out several
|
||||
electric bikes. Some have front-hub motors, others rear-hub motors. Others, the
|
||||
motor sits in the center, between the cranks. Each has a subtly different feel.
|
||||
Going up a hill, a front-motor’d machine may skip or slip as you pull back on
|
||||
the handlebars, but on flat land will feel more like being tugged through the
|
||||
world.
|
||||
|
||||
Sure, electric bikes aren’t cheap. But I believe they’re a rare object
|
||||
to be well worth the cost. This in spite of their annoying flaws, their
|
||||
often bad software, their defective geometries. Because they open the
|
||||
world. Whatever world may have been nearby, an electric bike brings it
|
||||
nearer. This is worth more than you might estimate. These bikes sing
|
||||
their little songs and the smile on your face makes you look like a
|
||||
village idiot, but what a wonderful idiot to be.
|
||||
__________________________________________________________________
|
||||
Sure, electric bikes aren’t cheap. But I believe they’re a rare object to be
|
||||
well worth the cost. This in spite of their annoying flaws, their often bad
|
||||
software, their defective geometries. Because they open the world. Whatever
|
||||
world may have been nearby, an electric bike brings it nearer. This is worth
|
||||
more than you might estimate. These bikes sing their little songs and the smile
|
||||
on your face makes you look like a village idiot, but what a wonderful idiot to
|
||||
be.
|
||||
|
||||
A summer night: Biking home alongside a river. The air is thick with
|
||||
humidity and cicadas vibrate wildly in the distance. The moon is out.
|
||||
My choices: straight home along the shimmering moonlit river, or take a
|
||||
detour, up into the dark mountains, doubling the distance. To my
|
||||
surprise, I choose the mountains almost every time. More! That tiny
|
||||
child who fantasized about helicopters yells. More of this, whatever
|
||||
this is. More more more. And so I feed that impulse, an impulse
|
||||
generated and nurtured by the electric bike. Into the shadow mountains
|
||||
we go, up, pushed by the hand of that giant, always present, always
|
||||
ready to help. It is a ridiculous thing. A thing of peace and magic. An
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
A summer night: Biking home alongside a river. The air is thick with humidity
|
||||
and cicadas vibrate wildly in the distance. The moon is out. My choices:
|
||||
straight home along the shimmering moonlit river, or take a detour, up into the
|
||||
dark mountains, doubling the distance. To my surprise, I choose the mountains
|
||||
almost every time. More! That tiny child who fantasized about helicopters
|
||||
yells. More of this, whatever this is. More more more. And so I feed that
|
||||
impulse, an impulse generated and nurtured by the electric bike. Into the
|
||||
shadow mountains we go, up, pushed by the hand of that giant, always present,
|
||||
always ready to help. It is a ridiculous thing. A thing of peace and magic. An
|
||||
owl hoots. The smile has never left my face.
|
||||
__________________________________________________________________
|
||||
|
||||
[18]#Noted:
|
||||
__________________________________________________________________
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
1. I upgraded my BESV to an SRAM drivetrain and Paul brake levers and
|
||||
Klamper disc calipers, some MKS pedals, and a set of Brooks grips
|
||||
and saddle and it feels wonderful through and through. These Paul
|
||||
Klampers are mechanical. The Vanmoof uses (generic?) hydraulic
|
||||
brakes. After thousands of kilometers, my conclusion is: hydraulics
|
||||
feel nice, but they are fussy (and perhaps Vanmoof’s chosen
|
||||
components are sub-optimal) and difficult (?) to tune on your own.
|
||||
In the end, I just don’t think they’re worth it. Too “delicate.”
|
||||
The Pauls feel as fresh today as the day I put them on, whereas the
|
||||
hydraulics have required much bikeshop tuning over the course of
|
||||
the last eighteen months. Were the Vanmoof more flexible, I’d
|
||||
happily swap out for mechanicals. This lack of flexibility is a
|
||||
bummer because, unlike an Apple iPhone, for example, where the
|
||||
components tend to be best of class (think: modem, CPU, camera
|
||||
unit, etc), the physical components on a Vanmoof most definitely
|
||||
aren’t — nor do they offer the option to pay more to get better
|
||||
components. [19]↩︎
|
||||
2. Oh, how I wish this thing was open source, hackable — because it’s
|
||||
so close to great. Sadly — and I don’t know how else to frame this
|
||||
— it feels like the engineers behind the software don’t ride bikes.
|
||||
At least not this one. The software flaws are so fundamentally
|
||||
obvious, that anyone who had a) access to the code, and b) rode the
|
||||
bike, couldn’t NOT fix these obvious issues. What I really wish,
|
||||
though, is that I could slap the Vanmoof brain onto the BESV body
|
||||
and, well, then we’d be in Electric Bike Elysium. [20]↩︎
|
||||
3. I’ve since learned — the drive train of the Vanmoof is not to be
|
||||
“ridden” like a “bike” but rather, “feathered” like a delicate sand
|
||||
castle — assume the gears could explode at any moment and apply the
|
||||
least amount of pressure you can; the motor is strong enough to
|
||||
take care of most of the rest. In this way, the Vanmoof feels more
|
||||
like a moped that uses “pedal assist” as a suggestion than a pure
|
||||
electric-assist bike — a smart way to get around motorcycle laws in
|
||||
most countries, which I assume is the main point. Not to say you
|
||||
don’t get a workout on the Vanmoof, you do, but not nearly as much
|
||||
as the more classically committed BESV — which really does require
|
||||
you to pedal.
|
||||
Maybe this is a good place to bring up the question: Why not just
|
||||
get an electric scooter? I think it mainly comes down to
|
||||
flexibility and philosophy. With a pedal assist bike (even if the
|
||||
pedaling required is minimal) you simply have more flexibility in
|
||||
parking, in riding, in “lightness” of transportation, than with an
|
||||
electric scooter. Also: Insurance costs, maintenance, and higher
|
||||
base cost. And philosophically, being able to still use the bike as
|
||||
a “bike” without power feels like an aspect of these machines we
|
||||
shouldn’t be so quick to toss aside. [21]↩︎
|
||||
[21]#Noted:
|
||||
|
||||
This essay, published September 2022. Thoughts? Email
|
||||
[22]me@craigmod.com.
|
||||
[23]Craig Mod, his head, floating at the bottom of the article
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
[24]Craig Mod is a writer and photographer based in Japan. He's the
|
||||
author of the books [25]Things Become Other Things and [26]Kissa by
|
||||
Kissa and is a MacDowell, Ragdale, and VCCA writing fellow. His essays
|
||||
and articles have appeared in The New York Times, Eater, The Atlantic,
|
||||
California Sunday Magazine, Wired, Aeon, New Scientist, Virginia
|
||||
Quarterly Review, The New Yorker, The Morning News, Codex: Journal of
|
||||
Typography, and elsewhere.
|
||||
1. I upgraded my BESV to an SRAM drivetrain and Paul brake levers and Klamper
|
||||
disc calipers, some MKS pedals, and a set of Brooks grips and saddle and it
|
||||
feels wonderful through and through. These Paul Klampers are mechanical.
|
||||
The Vanmoof uses (generic?) hydraulic brakes. After thousands of
|
||||
kilometers, my conclusion is: hydraulics feel nice, but they are fussy (and
|
||||
perhaps Vanmoof’s chosen components are sub-optimal) and difficult (?) to
|
||||
tune on your own. In the end, I just don’t think they’re worth it. Too
|
||||
“delicate.” The Pauls feel as fresh today as the day I put them on, whereas
|
||||
the hydraulics have required much bikeshop tuning over the course of the
|
||||
last eighteen months. Were the Vanmoof more flexible, I’d happily swap out
|
||||
for mechanicals. This lack of flexibility is a bummer because, unlike an
|
||||
Apple iPhone, for example, where the components tend to be best of class
|
||||
(think: modem, CPU, camera unit, etc), the physical components on a Vanmoof
|
||||
most definitely aren’t — nor do they offer the option to pay more to get
|
||||
better components. [22]↩︎
|
||||
|
||||
He writes newsletters, oh yes, [27]newsletters: [28]Roden &
|
||||
[29]Ridgeline.
|
||||
2. Oh, how I wish this thing was open source, hackable — because it’s so close
|
||||
to great. Sadly — and I don’t know how else to frame this — it feels like
|
||||
the engineers behind the software don’t ride bikes. At least not this one.
|
||||
The software flaws are so fundamentally obvious, that anyone who had a)
|
||||
access to the code, and b) rode the bike, couldn’t NOT fix these obvious
|
||||
issues. What I really wish, though, is that I could slap the Vanmoof brain
|
||||
onto the BESV body and, well, then we’d be in Electric Bike Elysium. [23]↩︎
|
||||
|
||||
The work on this site is supported in part by [30]paid memberships.
|
||||
3. I’ve since learned — the drive train of the Vanmoof is not to be “ridden”
|
||||
like a “bike” but rather, “feathered” like a delicate sand castle — assume
|
||||
the gears could explode at any moment and apply the least amount of
|
||||
pressure you can; the motor is strong enough to take care of most of the
|
||||
rest. In this way, the Vanmoof feels more like a moped that uses “pedal
|
||||
assist” as a suggestion than a pure electric-assist bike — a smart way to
|
||||
get around motorcycle laws in most countries, which I assume is the main
|
||||
point. Not to say you don’t get a workout on the Vanmoof, you do, but not
|
||||
nearly as much as the more classically committed BESV — which really does
|
||||
require you to pedal.
|
||||
|
||||
Whatever you do, don't follow @craigmod on [31]Threads or
|
||||
[32]Instagram.
|
||||
Maybe this is a good place to bring up the question: Why not just get an
|
||||
electric scooter? I think it mainly comes down to flexibility and
|
||||
philosophy. With a pedal assist bike (even if the pedaling required is
|
||||
minimal) you simply have more flexibility in parking, in riding, in
|
||||
“lightness” of transportation, than with an electric scooter. Also:
|
||||
Insurance costs, maintenance, and higher base cost. And philosophically,
|
||||
being able to still use the bike as a “bike” without power feels like an
|
||||
aspect of these machines we shouldn’t be so quick to toss aside. [24]↩︎
|
||||
|
||||
[25] [26]
|
||||
|
||||
This essay, published September 2022. Thoughts? Email [27]me@craigmod.com.
|
||||
|
||||
[28]Craig Mod, his head, floating at the bottom of the article
|
||||
|
||||
[29]Craig Mod is a writer and photographer based in Japan. He's the author of
|
||||
the books [30]Things Become Other Things and [31]Kissa by Kissa and is a
|
||||
MacDowell, Ragdale, and VCCA writing fellow. His essays and articles have
|
||||
appeared in The New York Times, Eater, The Atlantic, California Sunday Magazine
|
||||
, Wired, Aeon, New Scientist, Virginia Quarterly Review, The New Yorker, The
|
||||
Morning News, Codex: Journal of Typography, and elsewhere.
|
||||
|
||||
He writes newsletters, oh yes, [32]newsletters: [33]Roden & [34]Ridgeline.
|
||||
|
||||
The work on this site is supported in part by [35]paid memberships.
|
||||
|
||||
Whatever you do, don't follow @craigmod on [36]Threads or [37]Instagram.
|
||||
|
||||
Subscribe to my newsletters
|
||||
|
||||
Join some ~30,000 other subscribers.
|
||||
[33]Roden: photography × literature × tech × film (monthly)
|
||||
[34]Ridgeline: walking × Japan (weekly)
|
||||
Always one-click to unsubscribe.
|
||||
____________________
|
||||
[X] Roden (monthly)
|
||||
[X] Ridgeline (weekly)
|
||||
(BUTTON) Subscribe
|
||||
|
||||
[38]Roden: photography × literature × tech × film (monthly)
|
||||
[39]Ridgeline: walking × Japan (weekly)
|
||||
|
||||
Always one-click to unsubscribe.
|
||||
|
||||
[40][ ]
|
||||
[41][*] Roden (monthly)
|
||||
[42][*] Ridgeline (weekly)
|
||||
Subscribe
|
||||
Popular Essays
|
||||
|
||||
|
||||
An endless, gritty, very spitty walk
|
||||
|
||||
Good walks benefit from context.
|
||||
[44]
|
||||
|
||||
|
||||
How I Got My Attention Back
|
||||
The Buzz Cut
|
||||
|
||||
Technology is commanding our attention in infinite, insurmountable loops. A
|
||||
country trip off-grid helped me escape.
|
||||
You'd think a buzz would be a buzz would be a buzz
|
||||
|
||||
[45]
|
||||
|
||||
|
||||
Annapurna Moonrise
|
||||
Walking Around Kan Yasuda's Sculptures
|
||||
|
||||
A night on Annapurna basecamp
|
||||
Exploring Arte Piazza in Hokkaido
|
||||
|
||||
[46]
|
||||
|
||||
|
||||
The Leica Q
|
||||
Pop-Up Walk
|
||||
|
||||
A six month field test — by Craig Mod
|
||||
What does a pop-up walk look like?
|
||||
|
||||
____________________
|
||||
[47]
|
||||
|
||||
Produced / written / maintained by [35]Craig Mod since 2002
|
||||
|
||||
References
|
||||
Stab a Book, the Book Won't Die
|
||||
|
||||
Visible links:
|
||||
1. https://craigmod.com/index.xml
|
||||
2. https://craigmod.com/about/
|
||||
3. https://craigmod.com/books/
|
||||
4. https://craigmod.com/essays/
|
||||
5. https://craigmod.com/membership/
|
||||
6. https://shop.specialprojects.jp/
|
||||
7. https://craigmod.com/membership/
|
||||
8. https://craigmod.com/onmargins/
|
||||
9. https://sw945.craigmod.com/
|
||||
10. https://craigmod.com/newsletters/
|
||||
11. https://craigmod.com/roden/
|
||||
12. https://craigmod.com/ridgeline/
|
||||
13. https://craigmod.com/essays/electric_bikes/#so-many-bikes
|
||||
14. https://craigmod.com/essays/electric_bikes/#electrics
|
||||
15. https://craigmod.com/essays/electric_bikes/#fn:1
|
||||
16. https://craigmod.com/essays/electric_bikes/#fn:2
|
||||
17. https://craigmod.com/essays/electric_bikes/#fn:3
|
||||
18. https://craigmod.com/essays/electric_bikes/#noted
|
||||
19. https://craigmod.com/essays/electric_bikes/#fnref:1
|
||||
20. https://craigmod.com/essays/electric_bikes/#fnref:2
|
||||
21. https://craigmod.com/essays/electric_bikes/#fnref:3
|
||||
22. mailto:me@craigmod.com
|
||||
23. https://craigmod.com/about/
|
||||
24. https://craigmod.com/about/
|
||||
25. https://shop.specialprojects.jp/products/things-become-other-things-1st-ed/
|
||||
26. https://shop.specialprojects.jp/products/kissa-by-kissa-4th-ed
|
||||
27. https://craigmod.com/newsletters
|
||||
28. https://craigmod.com/explorers/
|
||||
29. https://craigmod.com/ridgeline/
|
||||
30. https://craigmod.com/membership/
|
||||
31. http://threads.net/@craigmod/
|
||||
32. http://instagram.com/craigmod
|
||||
33. https://craigmod.com/roden/
|
||||
34. https://craigmod.com/ridgeline/
|
||||
35. https://craigmod.com/about/
|
||||
On the resilience of books in the face of apps, attention monsters, and an
|
||||
ad-driven online economy
|
||||
|
||||
Hidden links:
|
||||
37. https://craigmod.com/
|
||||
38. https://threads.net/@craigmod/
|
||||
39. https://instagram.com/craigmod/
|
||||
40. https://mastodon.social/@craigmod
|
||||
41. mailto:?subject=From%20craigmod.com:%20Electric%20Bike%2c%20Stupid%20Love%20of%20My%20Life&body=I%20think%20you%20might%20enjoy%20this%20article:%0D%0Ahttps%3a%2f%2fcraigmod.com%2fessays%2felectric_bikes%2f%20%0D%0A
|
||||
42. https://twitter.com/intent/tweet?text=Electric%20Bike,%20Stupid%20Love%20of%20My%20Life+https://craigmod.com/essays/electric_bikes/
|
||||
43. https://craigmod.com/ridgeline/001/
|
||||
44. https://craigmod.com/essays/how_i_got_my_attention_back/
|
||||
45. https://craigmod.com/journal/annapurna_moonrise/
|
||||
46. https://craigmod.com/essays/leica_q/
|
||||
47. https://threads.net/@craigmod/
|
||||
48. https://instagram.com/craigmod/
|
||||
49. https://mastodon.social/@craigmod
|
||||
50. https://craigmod.com/index.xml
|
||||
[48][ ]
|
||||
|
||||
Produced / written / maintained by [49]Craig Mod since 2002
|
||||
|
||||
[50] [51] [52] [53]
|
||||
|
||||
[piwik]
|
||||
|
||||
|
||||
References:
|
||||
|
||||
[1] https://craigmod.com/
|
||||
[2] https://craigmod.com/about/
|
||||
[3] https://craigmod.com/books/
|
||||
[4] https://craigmod.com/essays/
|
||||
[5] https://craigmod.com/membership/
|
||||
[6] https://shop.specialprojects.jp/
|
||||
[7] https://craigmod.com/membership/
|
||||
[8] https://craigmod.com/onmargins/
|
||||
[9] https://sw945.craigmod.com/
|
||||
[10] https://craigmod.com/newsletters/
|
||||
[11] https://craigmod.com/roden/
|
||||
[12] https://craigmod.com/ridgeline/
|
||||
[13] https://threads.net/@craigmod/
|
||||
[14] https://instagram.com/craigmod/
|
||||
[15] https://mastodon.social/@craigmod
|
||||
[16] https://craigmod.com/essays/electric_bikes/#so-many-bikes
|
||||
[17] https://craigmod.com/essays/electric_bikes/#electrics
|
||||
[18] https://craigmod.com/essays/electric_bikes/#fn:1
|
||||
[19] https://craigmod.com/essays/electric_bikes/#fn:2
|
||||
[20] https://craigmod.com/essays/electric_bikes/#fn:3
|
||||
[21] https://craigmod.com/essays/electric_bikes/#noted
|
||||
[22] https://craigmod.com/essays/electric_bikes/#fnref:1
|
||||
[23] https://craigmod.com/essays/electric_bikes/#fnref:2
|
||||
[24] https://craigmod.com/essays/electric_bikes/#fnref:3
|
||||
[25] mailto:?subject=From%20craigmod.com:%20Electric%20Bike%2c%20Stupid%20Love%20of%20My%20Life&body=I%20think%20you%20might%20enjoy%20this%20article:%0D%0Ahttps%3a%2f%2fcraigmod.com%2fessays%2felectric_bikes%2f%20%0D%0A
|
||||
[26] https://twitter.com/intent/tweet?text=Electric%20Bike,%20Stupid%20Love%20of%20My%20Life+https://craigmod.com/essays/electric_bikes/
|
||||
[27] mailto:me@craigmod.com
|
||||
[28] https://craigmod.com/about/
|
||||
[29] https://craigmod.com/about/
|
||||
[30] https://shop.specialprojects.jp/products/things-become-other-things-1st-ed/
|
||||
[31] https://shop.specialprojects.jp/products/kissa-by-kissa-4th-ed
|
||||
[32] https://craigmod.com/newsletters
|
||||
[33] https://craigmod.com/explorers/
|
||||
[34] https://craigmod.com/ridgeline/
|
||||
[35] https://craigmod.com/membership/
|
||||
[36] http://threads.net/@craigmod/
|
||||
[37] http://instagram.com/craigmod
|
||||
[38] https://craigmod.com/roden/
|
||||
[39] https://craigmod.com/ridgeline/
|
||||
[44] https://craigmod.com/ridgeline/106/
|
||||
[45] https://craigmod.com/ridgeline/159/
|
||||
[46] https://craigmod.com/ridgeline/047/
|
||||
[47] https://craigmod.com/essays/media_accounting/
|
||||
[49] https://craigmod.com/about/
|
||||
[50] https://threads.net/@craigmod/
|
||||
[51] https://instagram.com/craigmod/
|
||||
[52] https://mastodon.social/@craigmod
|
||||
[53] https://craigmod.com/index.xml
|
||||
|
||||
@@ -1,103 +1,89 @@
|
||||
#[1]crawshaw.io atom feed
|
||||
|
||||
One process programming notes (with Go and SQLite)
|
||||
|
||||
2018 July 30
|
||||
|
||||
Blog-ified version of a talk I gave at [2]Go Northwest.
|
||||
Blog-ified version of a talk I gave at [1]Go Northwest.
|
||||
|
||||
This content covers my recent exploration of writing internet services,
|
||||
iOS apps, and macOS programs as an indie developer.
|
||||
This content covers my recent exploration of writing internet services, iOS
|
||||
apps, and macOS programs as an indie developer.
|
||||
|
||||
There are several topics here that should each have their own blog
|
||||
post. But as I have a lot of programming to do I am going to put these
|
||||
notes up as is and split the material out some time later.
|
||||
There are several topics here that should each have their own blog post. But as
|
||||
I have a lot of programming to do I am going to put these notes up as is and
|
||||
split the material out some time later.
|
||||
|
||||
My focus has been on how to adapt the lessons I have learned working in
|
||||
teams at Google to a single programmer building small business work.
|
||||
There are many great engineering practices in Silicon Valleyʼs big
|
||||
companies and well-capitalized VC firms, but one person does not have
|
||||
enough bandwidth to use them all and write software. The exercise for
|
||||
me is: what to keep and what must go.
|
||||
My focus has been on how to adapt the lessons I have learned working in teams
|
||||
at Google to a single programmer building small business work. There are many
|
||||
great engineering practices in Silicon Valley's big companies and
|
||||
well-capitalized VC firms, but one person does not have enough bandwidth to use
|
||||
them all and write software. The exercise for me is: what to keep and what must
|
||||
go.
|
||||
|
||||
If I have been doing it right, the technology and techniques described
|
||||
here will sound easy. I have to fit it all in my head while having
|
||||
enough capacity left over to write software people want. Every extra
|
||||
thing has great cost, especially rarely touched software that comes
|
||||
back to bite in the middle of the night six months later.
|
||||
If I have been doing it right, the technology and techniques described here
|
||||
will sound easy. I have to fit it all in my head while having enough capacity
|
||||
left over to write software people want. Every extra thing has great cost,
|
||||
especially rarely touched software that comes back to bite in the middle of the
|
||||
night six months later.
|
||||
|
||||
Two key technologies I have decided to use are Go and SQLite.
|
||||
|
||||
A brief introduction to SQLite
|
||||
|
||||
SQLite is an implementation of SQL. Unlike traditional database
|
||||
implementations like PostgreSQL or MySQL, SQLite is a self-contained C
|
||||
library designed to be embedded into programs. It has been built by D.
|
||||
Richard Hipp since its release in 2000, and in the past 18 years other
|
||||
open source contributors have helped. At this point it has been around
|
||||
most of the time I have been programming and is a core part of my
|
||||
programming toolbox.
|
||||
SQLite is an implementation of SQL. Unlike traditional database implementations
|
||||
like PostgreSQL or MySQL, SQLite is a self-contained C library designed to be
|
||||
embedded into programs. It has been built by D. Richard Hipp since its release
|
||||
in 2000, and in the past 18 years other open source contributors have helped.
|
||||
At this point it has been around most of the time I have been programming and
|
||||
is a core part of my programming toolbox.
|
||||
|
||||
Hands-on with the SQLite command line tool
|
||||
|
||||
Rather than talk through SQLite in the abstract, let me show it to you.
|
||||
|
||||
A kind person on Kaggle has [3]provided a CSV file of the plays of
|
||||
Shakespeare. Letʼs build an SQLite database out of it.
|
||||
A kind person on Kaggle has [2]provided a CSV file of the plays of Shakespeare.
|
||||
Let's build an SQLite database out of it.
|
||||
|
||||
$ head shakespeare_data.csv
|
||||
"Dataline","Play","PlayerLinenumber","ActSceneLine","Player","PlayerLine"
|
||||
"1","Henry IV",,,,"ACT I"
|
||||
"2","Henry IV",,,,"SCENE I. London. The palace."
|
||||
"3","Henry IV",,,,"Enter KING HENRY, LORD JOHN OF LANCASTER, the EARL of WESTMOR
|
||||
ELAND, SIR WALTER BLUNT, and others"
|
||||
"4","Henry IV","1","1.1.1","KING HENRY IV","So shaken as we are, so wan with car
|
||||
e,"
|
||||
"5","Henry IV","1","1.1.2","KING HENRY IV","Find we a time for frighted peace to
|
||||
pant,"
|
||||
"6","Henry IV","1","1.1.3","KING HENRY IV","And breathe short-winded accents of
|
||||
new broils"
|
||||
"7","Henry IV","1","1.1.4","KING HENRY IV","To be commenced in strands afar remo
|
||||
te."
|
||||
"8","Henry IV","1","1.1.5","KING HENRY IV","No more the thirsty entrance of this
|
||||
soil"
|
||||
"9","Henry IV","1","1.1.6","KING HENRY IV","Shall daub her lips with her own chi
|
||||
ldren's blood,"
|
||||
"3","Henry IV",,,,"Enter KING HENRY, LORD JOHN OF LANCASTER, the EARL of WESTMORELAND, SIR WALTER BLUNT, and others"
|
||||
"4","Henry IV","1","1.1.1","KING HENRY IV","So shaken as we are, so wan with care,"
|
||||
"5","Henry IV","1","1.1.2","KING HENRY IV","Find we a time for frighted peace to pant,"
|
||||
"6","Henry IV","1","1.1.3","KING HENRY IV","And breathe short-winded accents of new broils"
|
||||
"7","Henry IV","1","1.1.4","KING HENRY IV","To be commenced in strands afar remote."
|
||||
"8","Henry IV","1","1.1.5","KING HENRY IV","No more the thirsty entrance of this soil"
|
||||
"9","Henry IV","1","1.1.6","KING HENRY IV","Shall daub her lips with her own children's blood,"
|
||||
|
||||
First, let's use the sqlite command line tool to create a new database and
|
||||
import the CSV.
|
||||
|
||||
First, letʼs use the sqlite command line tool to create a new database
|
||||
and import the CSV.
|
||||
$ sqlite3 shakespeare.db
|
||||
sqlite> .mode csv
|
||||
sqlite> .import shakespeare_data.csv import
|
||||
|
||||
Done! A couple of SELECTs will let us quickly see if it worked.
|
||||
|
||||
sqlite> SELECT count(*) FROM import;
|
||||
111396
|
||||
sqlite> SELECT * FROM import LIMIT 10;
|
||||
1,"Henry IV","","","","ACT I"
|
||||
2,"Henry IV","","","","SCENE I. London. The palace."
|
||||
3,"Henry IV","","","","Enter KING HENRY, LORD JOHN OF LANCASTER, the EARL of WES
|
||||
TMORELAND, SIR WALTER BLUNT, and others"
|
||||
3,"Henry IV","","","","Enter KING HENRY, LORD JOHN OF LANCASTER, the EARL of WESTMORELAND, SIR WALTER BLUNT, and others"
|
||||
4,"Henry IV",1,1.1.1,"KING HENRY IV","So shaken as we are, so wan with care,"
|
||||
5,"Henry IV",1,1.1.2,"KING HENRY IV","Find we a time for frighted peace to pant,
|
||||
"
|
||||
6,"Henry IV",1,1.1.3,"KING HENRY IV","And breathe short-winded accents of new br
|
||||
oils"
|
||||
5,"Henry IV",1,1.1.2,"KING HENRY IV","Find we a time for frighted peace to pant,"
|
||||
6,"Henry IV",1,1.1.3,"KING HENRY IV","And breathe short-winded accents of new broils"
|
||||
7,"Henry IV",1,1.1.4,"KING HENRY IV","To be commenced in strands afar remote."
|
||||
8,"Henry IV",1,1.1.5,"KING HENRY IV","No more the thirsty entrance of this soil"
|
||||
9,"Henry IV",1,1.1.6,"KING HENRY IV","Shall daub her lips with her own children'
|
||||
s blood,"
|
||||
9,"Henry IV",1,1.1.6,"KING HENRY IV","Shall daub her lips with her own children's blood,"
|
||||
|
||||
Looks good! Now we can do a little cleanup. The original CSV contains a
|
||||
column called AceSceneLine that uses dots to encode Act number, Scene
|
||||
number, and Line number. Those would look much nicer as their own
|
||||
columns.
|
||||
sqlite> CREATE TABLE plays (rowid INTEGER PRIMARY KEY, play, linenumber, act, sc
|
||||
ene, line, player, text);
|
||||
Looks good! Now we can do a little cleanup. The original CSV contains a column
|
||||
called AceSceneLine that uses dots to encode Act number, Scene number, and Line
|
||||
number. Those would look much nicer as their own columns.
|
||||
|
||||
sqlite> CREATE TABLE plays (rowid INTEGER PRIMARY KEY, play, linenumber, act, scene, line, player, text);
|
||||
sqlite> .schema
|
||||
CREATE TABLE import (rowid primary key, play, playerlinenumber, actsceneline, pl
|
||||
ayer, playerline);
|
||||
CREATE TABLE plays (rowid primary key, play, linenumber, act, scene, line, playe
|
||||
r, text);
|
||||
CREATE TABLE import (rowid primary key, play, playerlinenumber, actsceneline, player, playerline);
|
||||
CREATE TABLE plays (rowid primary key, play, linenumber, act, scene, line, player, text);
|
||||
sqlite> INSERT INTO plays SELECT
|
||||
row AS rowid,
|
||||
play,
|
||||
@@ -109,66 +95,65 @@ sqlite> INSERT INTO plays SELECT
|
||||
playerline AS text
|
||||
FROM import;
|
||||
|
||||
(The substr above can be improved by using instr to find the ʼ.ʼ
|
||||
characters. Exercise left for the reader.)
|
||||
(The substr above can be improved by using instr to find the '.' characters.
|
||||
Exercise left for the reader.)
|
||||
|
||||
Here we used the INSERT ... SELECT syntax to build a table out of
|
||||
another table. The ActSceneLine column was split apart using the
|
||||
builtin SQLite function substr, which slices strings.
|
||||
Here we used the INSERT ... SELECT syntax to build a table out of another
|
||||
table. The ActSceneLine column was split apart using the builtin SQLite
|
||||
function substr, which slices strings.
|
||||
|
||||
The result:
|
||||
|
||||
sqlite> SELECT * FROM plays LIMIT 10;
|
||||
1,"Henry IV","","","","","","ACT I"
|
||||
2,"Henry IV","","","","","","SCENE I. London. The palace."
|
||||
3,"Henry IV","","","","","","Enter KING HENRY, LORD JOHN OF LANCASTER, the EARL
|
||||
of WESTMORELAND, SIR WALTER BLUNT, and others"
|
||||
3,"Henry IV","","","","","","Enter KING HENRY, LORD JOHN OF LANCASTER, the EARL of WESTMORELAND, SIR WALTER BLUNT, and others"
|
||||
4,"Henry IV",1,1,1,1,"KING HENRY IV","So shaken as we are, so wan with care,"
|
||||
5,"Henry IV",1,1,1,2,"KING HENRY IV","Find we a time for frighted peace to pant,
|
||||
"
|
||||
6,"Henry IV",1,1,1,3,"KING HENRY IV","And breathe short-winded accents of new br
|
||||
oils"
|
||||
5,"Henry IV",1,1,1,2,"KING HENRY IV","Find we a time for frighted peace to pant,"
|
||||
6,"Henry IV",1,1,1,3,"KING HENRY IV","And breathe short-winded accents of new broils"
|
||||
7,"Henry IV",1,1,1,4,"KING HENRY IV","To be commenced in strands afar remote."
|
||||
8,"Henry IV",1,1,1,5,"KING HENRY IV","No more the thirsty entrance of this soil"
|
||||
9,"Henry IV",1,1,1,6,"KING HENRY IV","Shall daub her lips with her own children'
|
||||
s blood,"
|
||||
9,"Henry IV",1,1,1,6,"KING HENRY IV","Shall daub her lips with her own children's blood,"
|
||||
|
||||
Now we have our data, let us search for something:
|
||||
|
||||
sqlite> SELECT * FROM plays WHERE text LIKE "whether tis nobler%";
|
||||
sqlite>
|
||||
|
||||
That did not work. Hamlet definitely says that, but perhaps the text
|
||||
formatting is slightly off. SQLite to the rescue. It ships with a Full
|
||||
Text Search extension compiled in. Let us index all of Shakespeare with
|
||||
FTS5:
|
||||
That did not work. Hamlet definitely says that, but perhaps the text formatting
|
||||
is slightly off. SQLite to the rescue. It ships with a Full Text Search
|
||||
extension compiled in. Let us index all of Shakespeare with FTS5:
|
||||
|
||||
sqlite> CREATE VIRTUAL TABLE playsearch USING fts5(playsrowid, text);
|
||||
sqlite> INSERT INTO playsearch SELECT rowid, text FROM plays;
|
||||
|
||||
Now we can search for our soliloquy:
|
||||
sqlite> SELECT rowid, text FROM playsearch WHERE text MATCH "whether tis nobler"
|
||||
;
|
||||
|
||||
sqlite> SELECT rowid, text FROM playsearch WHERE text MATCH "whether tis nobler";
|
||||
34232|Whether 'tis nobler in the mind to suffer
|
||||
|
||||
Success! The act and scene can be acquired by joining with our original
|
||||
table.
|
||||
Success! The act and scene can be acquired by joining with our original table.
|
||||
|
||||
sqlite> SELECT play, act, scene, line, player, plays.text
|
||||
FROM playsearch
|
||||
INNER JOIN plays ON playsearch.playsrowid = plays.rowid
|
||||
WHERE playsearch.text MATCH "whether tis nobler";
|
||||
Hamlet|3|1|65|HAMLET|Whether 'tis nobler in the mind to suffer
|
||||
|
||||
Letʼs clean up.
|
||||
Let's clean up.
|
||||
|
||||
sqlite> DROP TABLE import;
|
||||
sqlite> VACUUM;
|
||||
|
||||
Finally, what does all of this look like on the file system?
|
||||
|
||||
$ ls -l
|
||||
-rwxr-xr-x@ 1 crawshaw staff 10188854 Apr 27 2017 shakespeare_data.csv
|
||||
-rw-r--r-- 1 crawshaw staff 22286336 Jul 25 22:05 shakespeare.db
|
||||
|
||||
There you have it. The SQLite database contains two full copies of the
|
||||
plays of Shakespeare, one with a full text search index, and stores
|
||||
both of them in about twice the space it takes the original CSV file to
|
||||
store one. Not bad.
|
||||
There you have it. The SQLite database contains two full copies of the plays of
|
||||
Shakespeare, one with a full text search index, and stores both of them in
|
||||
about twice the space it takes the original CSV file to store one. Not bad.
|
||||
|
||||
That should give you a feel for the i-t-e of SQLite.
|
||||
|
||||
@@ -178,14 +163,14 @@ Using SQLite from Go
|
||||
|
||||
The standard database/sql
|
||||
|
||||
There are a number of cgo-based [4]database/sql drivers available for
|
||||
SQLite. The most popular one appears to be
|
||||
[5]github.com/mattn/go-sqlite3. It gets the job done and is probably
|
||||
what you want.
|
||||
There are a number of cgo-based [3]database/sql drivers available for SQLite.
|
||||
The most popular one appears to be [4]github.com/mattn/go-sqlite3. It gets the
|
||||
job done and is probably what you want.
|
||||
|
||||
Using the database/sql package it is straightforward to open an SQLite database
|
||||
and execute SQL statements on it. For example, we can run the FTS query from
|
||||
earlier using this Go code:
|
||||
|
||||
Using the database/sql package it is straightforward to open an SQLite
|
||||
database and execute SQL statements on it. For example, we can run the
|
||||
FTS query from earlier using this Go code:
|
||||
package main
|
||||
|
||||
import (
|
||||
@@ -212,8 +197,7 @@ func main() {
|
||||
}
|
||||
var play, text string
|
||||
var act, scene int
|
||||
err = stmt.QueryRow("whether tis nobler").Scan(&play, &act, &scene, &tex
|
||||
t)
|
||||
err = stmt.QueryRow("whether tis nobler").Scan(&play, &act, &scene, &text)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
@@ -221,60 +205,59 @@ t)
|
||||
}
|
||||
|
||||
Executing it yields:
|
||||
|
||||
Hamlet 3:1 "Whether 'tis nobler in the mind to suffer"
|
||||
|
||||
A low-level wrapper: crawshaw.io/sqlite
|
||||
|
||||
Just as SQLite steps beyond the basics of SELECT, INSERT, UPDATE,
|
||||
DELETE with full-text search, it has several other interesting features
|
||||
and extensions that cannot be accessed by SQL statements alone. These
|
||||
need specialized interfaces, and many of the interfaces are not
|
||||
supported by any of the existing drivers.
|
||||
Just as SQLite steps beyond the basics of SELECT, INSERT, UPDATE, DELETE with
|
||||
full-text search, it has several other interesting features and extensions that
|
||||
cannot be accessed by SQL statements alone. These need specialized interfaces,
|
||||
and many of the interfaces are not supported by any of the existing drivers.
|
||||
|
||||
So I wrote my own. You can get it from [6]crawshaw.io/sqlite. In
|
||||
particular, it supports the streaming blob interface, the [7]session
|
||||
extension, and implements the necessary sqlite_unlock_notify machinery
|
||||
to make good use of the [8]shared cache for connection pools. I am
|
||||
going to cover these features through two use case studies: the client
|
||||
and the cloud.
|
||||
So I wrote my own. You can get it from [5]crawshaw.io/sqlite. In particular, it
|
||||
supports the streaming blob interface, the [6]session extension, and implements
|
||||
the necessary sqlite_unlock_notify machinery to make good use of the [7]shared
|
||||
cache for connection pools. I am going to cover these features through two use
|
||||
case studies: the client and the cloud.
|
||||
|
||||
cgo
|
||||
|
||||
All of these approaches rely on cgo for integrating C into Go. This is
|
||||
straightforward to do, but adds some operational complexity. Building a
|
||||
Go program using SQLite requires a C compiler for the target.
|
||||
straightforward to do, but adds some operational complexity. Building a Go
|
||||
program using SQLite requires a C compiler for the target.
|
||||
|
||||
In practice, this means if you develop on macOS you need to install a
|
||||
cross-compiler for linux.
|
||||
|
||||
Typical concerns about the impact on software quality of adding C code
|
||||
to Go do not apply to SQLite as it has an extraordinary degree of
|
||||
testing. The quality of the code is exceptional.
|
||||
Typical concerns about the impact on software quality of adding C code to Go do
|
||||
not apply to SQLite as it has an extraordinary degree of testing. The quality
|
||||
of the code is exceptional.
|
||||
|
||||
Go and SQLite for the client
|
||||
|
||||
I am building an [9]iOS app, with almost all the code written in Go and
|
||||
the UI provided by a web view. This app has a full copy of the user
|
||||
data, it is not a thin view onto an internet server. This means storing
|
||||
a large amount of local, structured data, on-device full text
|
||||
searching, background tasks working on the database in a way that does
|
||||
not disrupt the UI, and syncing DB changes to a backup in the cloud.
|
||||
I am building an [8]iOS app, with almost all the code written in Go and the UI
|
||||
provided by a web view. This app has a full copy of the user data, it is not a
|
||||
thin view onto an internet server. This means storing a large amount of local,
|
||||
structured data, on-device full text searching, background tasks working on the
|
||||
database in a way that does not disrupt the UI, and syncing DB changes to a
|
||||
backup in the cloud.
|
||||
|
||||
That is a lot of moving parts for a client. More than I want to write
|
||||
in JavaScript, and more than I want to write in Swift and then have to
|
||||
promptly rewrite if I ever manage to build an Android app. More
|
||||
importantly, the server is in Go, and I am one independent developer.
|
||||
It is absolutely vital I reduce the number of moving pieces in my
|
||||
development environment to the smallest possible number. Hence the
|
||||
effort to build (the big bits) of a client using the exact same
|
||||
technology as my server.
|
||||
That is a lot of moving parts for a client. More than I want to write in
|
||||
JavaScript, and more than I want to write in Swift and then have to promptly
|
||||
rewrite if I ever manage to build an Android app. More importantly, the server
|
||||
is in Go, and I am one independent developer. It is absolutely vital I reduce
|
||||
the number of moving pieces in my development environment to the smallest
|
||||
possible number. Hence the effort to build (the big bits) of a client using the
|
||||
exact same technology as my server.
|
||||
|
||||
The Session extension
|
||||
|
||||
The session extension lets you start a session on an SQLite connection.
|
||||
All changes made to the database through that connection are bundled
|
||||
into a patchset blob. The extension also provides method for applying
|
||||
the generated patchset to a table.
|
||||
The session extension lets you start a session on an SQLite connection. All
|
||||
changes made to the database through that connection are bundled into a
|
||||
patchset blob. The extension also provides method for applying the generated
|
||||
patchset to a table.
|
||||
|
||||
func (conn *Conn) CreateSession(db string) (*Session, error)
|
||||
|
||||
func (s *Session) Changeset(w io.Writer) error
|
||||
@@ -285,49 +268,46 @@ func (conn *Conn) ChangesetApply(
|
||||
conflictFn func(ConflictType, ChangesetIter) ConflictAction,
|
||||
) error
|
||||
|
||||
This can be used to build a very simple client-sync system. Collect the
|
||||
changes made in a client, periodically bundle them up into a changeset
|
||||
and upload it to the server where it is applied to a backup copy of the
|
||||
database. If another client changes the database then the server
|
||||
advertises it to the client, who downloads a changeset and applies it.
|
||||
This can be used to build a very simple client-sync system. Collect the changes
|
||||
made in a client, periodically bundle them up into a changeset and upload it to
|
||||
the server where it is applied to a backup copy of the database. If another
|
||||
client changes the database then the server advertises it to the client, who
|
||||
downloads a changeset and applies it.
|
||||
|
||||
This requires a bit of care in the database design. The reason I kept
|
||||
the FTS table separate in the Shakespeare example is I keep my FTS
|
||||
tables in a separate attached database (which in SQLite, means a
|
||||
different file). The cloud backup database never generates the FTS
|
||||
tables, the client is free to generate the tables in a background
|
||||
thread and they can lag behind data backups.
|
||||
This requires a bit of care in the database design. The reason I kept the FTS
|
||||
table separate in the Shakespeare example is I keep my FTS tables in a separate
|
||||
attached database (which in SQLite, means a different file). The cloud backup
|
||||
database never generates the FTS tables, the client is free to generate the
|
||||
tables in a background thread and they can lag behind data backups.
|
||||
|
||||
Another point of care is minimizing conflicts. The biggest one is
|
||||
AUTOINCREMENT keys. By default the primary key of a rowid table is
|
||||
incremented, which means if you have multiple clients generating rowids
|
||||
you will see lots of conflicts.
|
||||
Another point of care is minimizing conflicts. The biggest one is AUTOINCREMENT
|
||||
keys. By default the primary key of a rowid table is incremented, which means
|
||||
if you have multiple clients generating rowids you will see lots of conflicts.
|
||||
|
||||
I have been trialing two different solutions. The first is having each
|
||||
client register a rowid range with the server and only allocate from
|
||||
its own range. It works. The second is randomly generating int64
|
||||
values, and relying on the low collision rate. So far it works too.
|
||||
Both strategies have risks, and I havenʼt decided which is better.
|
||||
I have been trialing two different solutions. The first is having each client
|
||||
register a rowid range with the server and only allocate from its own range. It
|
||||
works. The second is randomly generating int64 values, and relying on the low
|
||||
collision rate. So far it works too. Both strategies have risks, and I haven't
|
||||
decided which is better.
|
||||
|
||||
In practice, I have found I have to limit DB updates to a single
|
||||
connection to keep changeset quality high. (A changeset does not see
|
||||
changes made on other connections.) To do this I maintain a read-only
|
||||
pool of connections and a single guarded read-write connection in a
|
||||
pool of 1. The code only grabs the read-write connection when it needs
|
||||
it, and the read-only connections are enforced by the read-only bit on
|
||||
the SQLite connection.
|
||||
In practice, I have found I have to limit DB updates to a single connection to
|
||||
keep changeset quality high. (A changeset does not see changes made on other
|
||||
connections.) To do this I maintain a read-only pool of connections and a
|
||||
single guarded read-write connection in a pool of 1. The code only grabs the
|
||||
read-write connection when it needs it, and the read-only connections are
|
||||
enforced by the read-only bit on the SQLite connection.
|
||||
|
||||
Nested Transactions
|
||||
|
||||
The database/sql driver encourages the use of SQL transactions with its
|
||||
Tx type, but this does not appear to play well with nested
|
||||
transactions. This is a concept implemented by SAVEPOINT / RELEASE in
|
||||
SQL, and it makes for surprisingly composable code.
|
||||
The database/sql driver encourages the use of SQL transactions with its Tx
|
||||
type, but this does not appear to play well with nested transactions. This is a
|
||||
concept implemented by SAVEPOINT / RELEASE in SQL, and it makes for
|
||||
surprisingly composable code.
|
||||
|
||||
If a function needs to make multiple statements in a transaction, it can open
|
||||
with a SAVEPOINT, then defer a call to RELEASE if the function produces no Go
|
||||
return error, or if it does instead call ROLLBACK and return the error.
|
||||
|
||||
If a function needs to make multiple statements in a transaction, it
|
||||
can open with a SAVEPOINT, then defer a call to RELEASE if the function
|
||||
produces no Go return error, or if it does instead call ROLLBACK and
|
||||
return the error.
|
||||
func f(conn *sqlite.Conn) (err error) {
|
||||
conn...SAVEPOINT
|
||||
defer func() {
|
||||
@@ -339,23 +319,25 @@ func f(conn *sqlite.Conn) (err error) {
|
||||
}()
|
||||
}
|
||||
|
||||
Now if this transactional function f needs to call another
|
||||
transactional function g, then g can use exactly the same strategy and
|
||||
f can call it in a very traditional Go way:
|
||||
Now if this transactional function f needs to call another transactional
|
||||
function g, then g can use exactly the same strategy and f can call it in a
|
||||
very traditional Go way:
|
||||
|
||||
if err := g(conn); err != nil {
|
||||
return err // all changes in f will be rolled back by the defer
|
||||
}
|
||||
|
||||
The function g is also perfectly safe to use in its own right, as it
|
||||
has its own transaction.
|
||||
The function g is also perfectly safe to use in its own right, as it has its
|
||||
own transaction.
|
||||
|
||||
I have been using this SAVEPOINT + defer RELEASE or return an error
|
||||
semantics for several months now and find it invaluable. It makes it
|
||||
easy to safely wrap code in SQL transactions.
|
||||
I have been using this SAVEPOINT + defer RELEASE or return an error semantics
|
||||
for several months now and find it invaluable. It makes it easy to safely wrap
|
||||
code in SQL transactions.
|
||||
|
||||
The example above however is a bit bulky, and there are some edge cases that
|
||||
need to be handled. (For example, if the RELEASE fails, then an error needs to
|
||||
be returned.) So I have wrapped this up in a utility:
|
||||
|
||||
The example above however is a bit bulky, and there are some edge cases
|
||||
that need to be handled. (For example, if the RELEASE fails, then an
|
||||
error needs to be returned.) So I have wrapped this up in a utility:
|
||||
func f(conn *sqlite.Conn) (err error) {
|
||||
defer sqlitex.Save(conn)(&err)
|
||||
|
||||
@@ -363,130 +345,124 @@ func f(conn *sqlite.Conn) (err error) {
|
||||
// with other functions that call sqlitex.Save.
|
||||
}
|
||||
|
||||
The first time you see sqlitex.Save in action it can be a little
|
||||
off-putting, at least it was for me when I first created it. But I
|
||||
quickly got used to it, and it does a lot of heavy lifting. The first
|
||||
call to sqlitex.Save opens a SAVEPOINT on the conn and returns a
|
||||
closure that either RELEASEs or ROLLBACKs depending on the value of
|
||||
err, and sets err if necessary.
|
||||
The first time you see sqlitex.Save in action it can be a little off-putting,
|
||||
at least it was for me when I first created it. But I quickly got used to it,
|
||||
and it does a lot of heavy lifting. The first call to sqlitex.Save opens a
|
||||
SAVEPOINT on the conn and returns a closure that either RELEASEs or ROLLBACKs
|
||||
depending on the value of err, and sets err if necessary.
|
||||
|
||||
Go and SQLite in the cloud
|
||||
|
||||
I have spent several months now redesigning services I have encountered
|
||||
before and designing services for problems I would like to work on
|
||||
going forward. The process has led me to a general design that works
|
||||
for many problems and I quite enjoy building.
|
||||
I have spent several months now redesigning services I have encountered before
|
||||
and designing services for problems I would like to work on going forward. The
|
||||
process has led me to a general design that works for many problems and I quite
|
||||
enjoy building.
|
||||
|
||||
It can be summarized as 1 VM, 1 Zone, 1 process programming.
|
||||
|
||||
If this sounds ridiculously simplistic to you, I think thatʼs good! It
|
||||
is simple. It does not meet all sorts of requirements that we would
|
||||
like our modern fancy cloud services to meet. It is not "serverless",
|
||||
which means when a service is extremely small it does not run for free,
|
||||
and when a service grows it does not automatically scale. Indeed, there
|
||||
is an explicit scaling limit. Right now the best server you can get
|
||||
from Amazon is roughly:
|
||||
* 128 CPU threads at ~4GHz
|
||||
* 4TB RAM
|
||||
* 25 Gbit ethernet
|
||||
* 10 Gbps NAS
|
||||
* hours of yearly downtime
|
||||
If this sounds ridiculously simplistic to you, I think that's good! It is
|
||||
simple. It does not meet all sorts of requirements that we would like our
|
||||
modern fancy cloud services to meet. It is not "serverless", which means when a
|
||||
service is extremely small it does not run for free, and when a service grows
|
||||
it does not automatically scale. Indeed, there is an explicit scaling limit.
|
||||
Right now the best server you can get from Amazon is roughly:
|
||||
|
||||
That is a huge potential downside of of one process programming.
|
||||
However, I claim that is a livable limit.
|
||||
• 128 CPU threads at ~4GHz
|
||||
• 4TB RAM
|
||||
• 25 Gbit ethernet
|
||||
• 10 Gbps NAS
|
||||
• hours of yearly downtime
|
||||
|
||||
That is a huge potential downside of of one process programming. However, I
|
||||
claim that is a livable limit.
|
||||
|
||||
I claim typical services do not hit this scaling limit.
|
||||
|
||||
If you are building a small business, most products can grow and become
|
||||
profitable well under this limit for years. When you see the limit
|
||||
approaching in the next year or two, you have a business with revenue
|
||||
to hire more than one engineer, and the new team can, in the face of
|
||||
radically changing business requirements, rewrite the service.
|
||||
profitable well under this limit for years. When you see the limit approaching
|
||||
in the next year or two, you have a business with revenue to hire more than one
|
||||
engineer, and the new team can, in the face of radically changing business
|
||||
requirements, rewrite the service.
|
||||
|
||||
Reaching this limit is a good problem to have because when it comes you
|
||||
will have plenty of time to deal with it and the human resources you
|
||||
need to solve it well.
|
||||
Reaching this limit is a good problem to have because when it comes you will
|
||||
have plenty of time to deal with it and the human resources you need to solve
|
||||
it well.
|
||||
|
||||
Early in the life of a small business you donʼt, and every hour you
|
||||
spend trying to work beyond this scaling limit is an hour that would
|
||||
have been better spent talking to your customers about their needs.
|
||||
Early in the life of a small business you don't, and every hour you spend
|
||||
trying to work beyond this scaling limit is an hour that would have been better
|
||||
spent talking to your customers about their needs.
|
||||
|
||||
The principle at work here is:
|
||||
|
||||
Donʼt use N computers when 1 will do.
|
||||
Don't use N computers when 1 will do.
|
||||
|
||||
To go into a bit more technical detail,
|
||||
|
||||
I run a single VM on AWS, in a single availability zone. The VM has
|
||||
three EBS volumes (this is Amazon name for NAS). The first holds the
|
||||
OS, logs, temporary files, and any ephemeral SQLite databases that are
|
||||
generated from the main databases, e.g. FTS tables. The second the
|
||||
primary SQLite database for the main service. The third holds the
|
||||
customer sync SQLite databases.
|
||||
I run a single VM on AWS, in a single availability zone. The VM has three EBS
|
||||
volumes (this is Amazon name for NAS). The first holds the OS, logs, temporary
|
||||
files, and any ephemeral SQLite databases that are generated from the main
|
||||
databases, e.g. FTS tables. The second the primary SQLite database for the main
|
||||
service. The third holds the customer sync SQLite databases.
|
||||
|
||||
The system is configured to periodically snapshot the system EBS volume
|
||||
and the customer EBS volumes to S3, the Amazon geo-redundant blob
|
||||
store. This is a relatively cheap operation that can be scripted,
|
||||
because only blocks that change are copied.
|
||||
The system is configured to periodically snapshot the system EBS volume and the
|
||||
customer EBS volumes to S3, the Amazon geo-redundant blob store. This is a
|
||||
relatively cheap operation that can be scripted, because only blocks that
|
||||
change are copied.
|
||||
|
||||
The main EBS volume is backed up to S3 very regularly, by custom code
|
||||
that flushes the WAL cache. Iʼll explain that in a bit.
|
||||
The main EBS volume is backed up to S3 very regularly, by custom code that
|
||||
flushes the WAL cache. I'll explain that in a bit.
|
||||
|
||||
The service is a single Go binary running on this VM. The machine has
|
||||
plenty of extra RAM that is used by linuxʼs disk cache. (And that can
|
||||
be used by a second copy of the service spinning up for low down-time
|
||||
replacement.)
|
||||
The service is a single Go binary running on this VM. The machine has plenty of
|
||||
extra RAM that is used by linux's disk cache. (And that can be used by a second
|
||||
copy of the service spinning up for low down-time replacement.)
|
||||
|
||||
The result of this is a service that has at most tens of hours of
|
||||
downtime a year, about as much change of suffering block loss as a
|
||||
physical computer with a RAID5 array, and active offsite backups being
|
||||
made every few minutes to a distributed system that is built and
|
||||
maintained by a large team.
|
||||
The result of this is a service that has at most tens of hours of downtime a
|
||||
year, about as much change of suffering block loss as a physical computer with
|
||||
a RAID5 array, and active offsite backups being made every few minutes to a
|
||||
distributed system that is built and maintained by a large team.
|
||||
|
||||
This system is astonishingly simple. I shell into one machine. It is a
|
||||
linux machine. I have a deploy script for the service that is ten lines
|
||||
long. Almost all of my performance work is done with pprof.
|
||||
This system is astonishingly simple. I shell into one machine. It is a linux
|
||||
machine. I have a deploy script for the service that is ten lines long. Almost
|
||||
all of my performance work is done with pprof.
|
||||
|
||||
On a medium sized VM I can clock 5-6 thousand concurrent requests with
|
||||
only a few hours of performance tuning. On the largest machine AWS has,
|
||||
tens of thousands.
|
||||
On a medium sized VM I can clock 5-6 thousand concurrent requests with only a
|
||||
few hours of performance tuning. On the largest machine AWS has, tens of
|
||||
thousands.
|
||||
|
||||
Now to talk a little more about the particulars of the stack:
|
||||
|
||||
Shared cache and WAL
|
||||
|
||||
To make the server extremely concurrent there are two important SQLite
|
||||
features I use. The first is the shared cache, which lets me allocate
|
||||
one large pool of memory to the database page cache and many concurrent
|
||||
connections can use it simultaneously. This requires some support in
|
||||
the driver for sqlite_unlock_notify so user code doesnʼt need to deal
|
||||
with locking events, but that is transparent to end user code.
|
||||
To make the server extremely concurrent there are two important SQLite features
|
||||
I use. The first is the shared cache, which lets me allocate one large pool of
|
||||
memory to the database page cache and many concurrent connections can use it
|
||||
simultaneously. This requires some support in the driver for
|
||||
sqlite_unlock_notify so user code doesn't need to deal with locking events, but
|
||||
that is transparent to end user code.
|
||||
|
||||
The second is the Write Ahead Log. This is a mode SQLite can be knocked
|
||||
into at the beginning of connection which changes the way it writes
|
||||
transactions to disk. Instead of locking the database and making
|
||||
modifications along with a rollback journal, it appends the new change
|
||||
to a separate file. This allows readers to work concurrently with the
|
||||
writer. The WAL has to be flushed periodically by SQLite, which
|
||||
involves locking the database and writing the changes from it. There
|
||||
are default settings for doing this.
|
||||
The second is the Write Ahead Log. This is a mode SQLite can be knocked into at
|
||||
the beginning of connection which changes the way it writes transactions to
|
||||
disk. Instead of locking the database and making modifications along with a
|
||||
rollback journal, it appends the new change to a separate file. This allows
|
||||
readers to work concurrently with the writer. The WAL has to be flushed
|
||||
periodically by SQLite, which involves locking the database and writing the
|
||||
changes from it. There are default settings for doing this.
|
||||
|
||||
I override these and execute WAL flushes manually from a package that,
|
||||
when it is done, also triggers an S3 snapshot. This package is called
|
||||
reallyfsync, and if I can work out how to test it properly I will make
|
||||
it open source.
|
||||
I override these and execute WAL flushes manually from a package that, when it
|
||||
is done, also triggers an S3 snapshot. This package is called reallyfsync, and
|
||||
if I can work out how to test it properly I will make it open source.
|
||||
|
||||
Incremental Blob API
|
||||
|
||||
Another smaller, but important to my particular server feature, is
|
||||
SQLiteʼs [10]incremental blob API. This allows a field of bytes to be
|
||||
read and written in the DB without storing all the bytes in memory
|
||||
simultaneously, which matters when it is possible for each request to
|
||||
be working with hundreds of megabytes, but you want tens of thousands
|
||||
of potential concurrent requests.
|
||||
Another smaller, but important to my particular server feature, is SQLite's [9]
|
||||
incremental blob API. This allows a field of bytes to be read and written in
|
||||
the DB without storing all the bytes in memory simultaneously, which matters
|
||||
when it is possible for each request to be working with hundreds of megabytes,
|
||||
but you want tens of thousands of potential concurrent requests.
|
||||
|
||||
This is one of the places where the driver deviates from being a close-to-cgo
|
||||
wrapper to be more [10]Go-like:
|
||||
|
||||
This is one of the places where the driver deviates from being a
|
||||
close-to-cgo wrapper to be more [11]Go-like:
|
||||
type Blob
|
||||
func (blob *Blob) Close() error
|
||||
func (blob *Blob) Read(p []byte) (n int, err error)
|
||||
@@ -496,79 +472,75 @@ type Blob
|
||||
func (blob *Blob) Write(p []byte) (n int, err error)
|
||||
func (blob *Blob) WriteAt(p []byte, off int64) (n int, err error)
|
||||
|
||||
This looks a lot like a file, and indeed can be used like a file, with
|
||||
one caveat: the size of a blob is set when it is created. (As such, I
|
||||
still find temporary files to be useful.)
|
||||
This looks a lot like a file, and indeed can be used like a file, with one
|
||||
caveat: the size of a blob is set when it is created. (As such, I still find
|
||||
temporary files to be useful.)
|
||||
|
||||
Designing with one process programming
|
||||
|
||||
I start with: Do you really need N computers?
|
||||
|
||||
Some problems really do. For example, you cannot build a low-latency
|
||||
index of the public internet with only 4TB of RAM. You need a lot more.
|
||||
These problems are great fun, and we like to talk a lot about them, but
|
||||
they are a relatively small amount of all the code written. So far all
|
||||
the projects I have been developing post-Google fit on 1 computer.
|
||||
Some problems really do. For example, you cannot build a low-latency index of
|
||||
the public internet with only 4TB of RAM. You need a lot more. These problems
|
||||
are great fun, and we like to talk a lot about them, but they are a relatively
|
||||
small amount of all the code written. So far all the projects I have been
|
||||
developing post-Google fit on 1 computer.
|
||||
|
||||
There are also more common sub-problems that are hard to solve with one
|
||||
computer. If you have a global customer base and need low-latency to
|
||||
your server, the speed of light gets in the way. But many of these
|
||||
problems can be solved with relatively straightforward CDN products.
|
||||
computer. If you have a global customer base and need low-latency to your
|
||||
server, the speed of light gets in the way. But many of these problems can be
|
||||
solved with relatively straightforward CDN products.
|
||||
|
||||
Another great solution to the speed of light is geo-sharding. Have
|
||||
complete and independent copies of your service in multiple
|
||||
datacenters, move your userʼs data to the service near them. This can
|
||||
be as easy as having one small global redirect database (maybe SQLite
|
||||
on geo-redundant NFS!) redirecting the user to a specific DNS name like
|
||||
{us-east, us-west}.mservice.com.
|
||||
Another great solution to the speed of light is geo-sharding. Have complete and
|
||||
independent copies of your service in multiple datacenters, move your user's
|
||||
data to the service near them. This can be as easy as having one small global
|
||||
redirect database (maybe SQLite on geo-redundant NFS!) redirecting the user to
|
||||
a specific DNS name like {us-east, us-west}.mservice.com.
|
||||
|
||||
Most problems do fit in one computer, up to a point. Spend some time
|
||||
determining where that point is. If it is years away there is a good
|
||||
chance one computer will do.
|
||||
determining where that point is. If it is years away there is a good chance one
|
||||
computer will do.
|
||||
|
||||
Indie dev techniques for the corporate programmer
|
||||
|
||||
Even if you do not write code in this particular technology stack and
|
||||
you are not an independent developer, there is value here. Use the one
|
||||
big VM, one zone, one process Go, SQLite, and snapshot backup stack as
|
||||
a hypothetical tool to test your designs.
|
||||
Even if you do not write code in this particular technology stack and you are
|
||||
not an independent developer, there is value here. Use the one big VM, one
|
||||
zone, one process Go, SQLite, and snapshot backup stack as a hypothetical tool
|
||||
to test your designs.
|
||||
|
||||
So add a hypothetical step to your design process: If you solved your
|
||||
problem on this stack with one computers, how far could you get? How
|
||||
many customers could you support? At what size would you need to
|
||||
rewrite your software?
|
||||
So add a hypothetical step to your design process: If you solved your problem
|
||||
on this stack with one computers, how far could you get? How many customers
|
||||
could you support? At what size would you need to rewrite your software?
|
||||
|
||||
If this indie mini stack would last your business years, you might want
|
||||
to consider delaying the adoption of modern cloud software.
|
||||
If this indie mini stack would last your business years, you might want to
|
||||
consider delaying the adoption of modern cloud software.
|
||||
|
||||
If you are a programmer at a well-capitalized company, you may also
|
||||
want to consider what development looks like for small internal or
|
||||
experimental projects. Do your coworkers have to use large complex
|
||||
distributed systems for policy reasons? Many of these projects will
|
||||
never need to scale beyond one computer, or if they do they will need a
|
||||
rewrite to deal with shifting requirements. In which case, find a way
|
||||
to make an indie stack, linux VMs with a file system, available for
|
||||
prototyping and experimentation.
|
||||
__________________________________________________________________
|
||||
If you are a programmer at a well-capitalized company, you may also want to
|
||||
consider what development looks like for small internal or experimental
|
||||
projects. Do your coworkers have to use large complex distributed systems for
|
||||
policy reasons? Many of these projects will never need to scale beyond one
|
||||
computer, or if they do they will need a rewrite to deal with shifting
|
||||
requirements. In which case, find a way to make an indie stack, linux VMs with
|
||||
a file system, available for prototyping and experimentation.
|
||||
|
||||
[12]Index
|
||||
[13]github.com/crawshaw
|
||||
[14]twitter.com/davidcrawshaw
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
[11]Index
|
||||
[12]github.com/crawshaw
|
||||
[13]twitter.com/davidcrawshaw
|
||||
david@zentus.com
|
||||
|
||||
References
|
||||
References:
|
||||
|
||||
1. https://crawshaw.io/atom.xml
|
||||
2. https://gonorthwest.io/
|
||||
3. https://www.kaggle.com/kingburrito666/shakespeare-plays
|
||||
4. https://golang.org/pkg/database/sql
|
||||
5. https://github.com/mattn/go-sqlite3
|
||||
6. https://crawshaw.io/sqlite
|
||||
7. https://www.sqlite.org/sessionintro.html
|
||||
8. https://www.sqlite.org/sharedcache.html
|
||||
9. https://www.posticulous.com/
|
||||
10. https://www.sqlite.org/c3ref/blob_open.html
|
||||
11. https://godoc.org/crawshaw.io/sqlite#Blob
|
||||
12. https://crawshaw.io/
|
||||
13. https://github.com/crawshaw
|
||||
14. https://twitter.com/davidcrawshaw
|
||||
[1] https://gonorthwest.io/
|
||||
[2] https://www.kaggle.com/kingburrito666/shakespeare-plays
|
||||
[3] https://golang.org/pkg/database/sql
|
||||
[4] https://github.com/mattn/go-sqlite3
|
||||
[5] https://crawshaw.io/sqlite
|
||||
[6] https://www.sqlite.org/sessionintro.html
|
||||
[7] https://www.sqlite.org/sharedcache.html
|
||||
[8] https://www.posticulous.com/
|
||||
[9] https://www.sqlite.org/c3ref/blob_open.html
|
||||
[10] https://godoc.org/crawshaw.io/sqlite#Blob
|
||||
[11] https://crawshaw.io/
|
||||
[12] https://github.com/crawshaw
|
||||
[13] https://twitter.com/davidcrawshaw
|
||||
|
||||
@@ -1,312 +1,301 @@
|
||||
#[1]alternate [2]alternate [3]Deadspin - All stories
|
||||
[p]
|
||||
|
||||
[p?c1=2&c2=6770184&cv=4.4.0&cj=1]
|
||||
• [1]The A.V. Club
|
||||
• [2]Deadspin
|
||||
• [3]Gizmodo
|
||||
• [4]Jalopnik
|
||||
• [5]Kotaku
|
||||
• [6]Quartz
|
||||
• [7]The Root
|
||||
• [8]The Takeout
|
||||
•
|
||||
• [9]The Onion
|
||||
•
|
||||
• [10]The Inventory
|
||||
|
||||
* [4]The A.V. Club
|
||||
* [5]Deadspin
|
||||
* [6]Gizmodo
|
||||
* [7]Jalopnik
|
||||
* [8]Kotaku
|
||||
* [9]Quartz
|
||||
* [10]The Root
|
||||
* [11]The Takeout
|
||||
*
|
||||
* [12]The Onion
|
||||
*
|
||||
* [13]The Inventory
|
||||
[11]
|
||||
[12]
|
||||
|
||||
* [14]Home
|
||||
* [15]Latest
|
||||
* [16]Baseball
|
||||
* [17]Football
|
||||
* [18]Basketball
|
||||
* [19]Hockey
|
||||
* [20]Golf
|
||||
* [21]Soccer
|
||||
* [22]The Mourning After
|
||||
* [23]Wrestling
|
||||
* [24]Lists
|
||||
* [25]Tennis
|
||||
* [26]The Fights
|
||||
* [27]Olympics
|
||||
* [28]Racing
|
||||
* [29]Poker
|
||||
* [30]Media
|
||||
* [31]Locker
|
||||
* [32]Español
|
||||
• [13]Home
|
||||
• [14]Latest
|
||||
• [15]Baseball
|
||||
• [16]Football
|
||||
• [17]Basketball
|
||||
• [18]Hockey
|
||||
• [19]Golf
|
||||
• [20]Soccer
|
||||
• [21]The Mourning After
|
||||
• [22]Wrestling
|
||||
• [23]Lists
|
||||
• [24]Tennis
|
||||
• [25]The Fights
|
||||
• [26]Olympics
|
||||
• [27]Racing
|
||||
• [28]Poker
|
||||
• [29]Media
|
||||
• [30]Locker
|
||||
• [31]Español
|
||||
|
||||
[32][33]
|
||||
We may earn a commission from links on this page
|
||||
|
||||
* [33]Home
|
||||
* [34]Latest
|
||||
* [35]Baseball
|
||||
* [36]Football
|
||||
* [37]Basketball
|
||||
* [38]Hockey
|
||||
* [39]Golf
|
||||
* [40]Soccer
|
||||
* [41]The Mourning After
|
||||
* [42]Wrestling
|
||||
* [43]Lists
|
||||
* [44]Tennis
|
||||
* [45]The Fights
|
||||
* [46]Olympics
|
||||
* [47]Racing
|
||||
* [48]Poker
|
||||
* [49]Media
|
||||
* [50]Locker
|
||||
* [51]Español
|
||||
• [34]Home
|
||||
• [35]Latest
|
||||
• [36]Baseball
|
||||
• [37]Football
|
||||
• [38]Basketball
|
||||
• [39]Hockey
|
||||
• [40]Golf
|
||||
• [41]Soccer
|
||||
• [42]The Mourning After
|
||||
• [43]Wrestling
|
||||
• [44]Lists
|
||||
• [45]Tennis
|
||||
• [46]The Fights
|
||||
• [47]Olympics
|
||||
• [48]Racing
|
||||
• [49]Poker
|
||||
• [50]Media
|
||||
• [51]Locker
|
||||
• [52]Español
|
||||
|
||||
[53]
|
||||
Locker
|
||||
|
||||
Spend Exactly None Of Your Time Killing Time
|
||||
|
||||
By
|
||||
[52]Chris Thompson
|
||||
[54]Chris Thompson
|
||||
PublishedJanuary 25, 2019
|
||||
We may earn a commission from links on this page.
|
||||
[55][56][57][58][59]
|
||||
Image for article titled Spend Exactly None Of Your Time Killing Time
|
||||
Illustration: Chelsea Beck (GMG)
|
||||
|
||||
Here’s a good resolution, if you’re the sort of person who resolves to
|
||||
do good and healthy things and then maintains any hope of actually
|
||||
doing them: Resolve to divide your waking hours exactly and only
|
||||
between doing things you should be doing, and doing things you want to
|
||||
be doing.
|
||||
Here’s a good resolution, if you’re the sort of person who resolves to do good
|
||||
and healthy things and then maintains any hope of actually doing them: Resolve
|
||||
to divide your waking hours exactly and only between doing things you should be
|
||||
doing, and doing things you want to be doing.
|
||||
|
||||
Watch
|
||||
What Jason Kelce’s retirement says about the Eagles future
|
||||
(BUTTON) CC
|
||||
CC
|
||||
Share
|
||||
Subtitles
|
||||
* Off
|
||||
* English
|
||||
|
||||
• Off
|
||||
• English
|
||||
|
||||
Share this Video
|
||||
[53]Facebook[54]Twitter[55]Email
|
||||
[56]Reddit[57]Link
|
||||
[58]view video
|
||||
[59]What Jason Kelce’s retirement says about the Eagles future
|
||||
[61]Facebook[62]Twitter[63]Email
|
||||
[64]Reddit[65]Link
|
||||
[66]view video
|
||||
[67]What Jason Kelce’s retirement says about the Eagles future
|
||||
[68]
|
||||
Which NFL team lands Jim Harbaugh as their next head coach?
|
||||
January 10, 2024
|
||||
Josh Allen, Trevor Lawrence, or the Eagles: Who are the biggest frauds
|
||||
of the season?
|
||||
[69]
|
||||
Josh Allen, Trevor Lawrence, or the Eagles: Who are the biggest frauds of the
|
||||
season?
|
||||
January 8, 2024
|
||||
|
||||
When you are not doing something you should be doing—straightening up
|
||||
around the house, taking out the garbage, walking the dog, your job—you
|
||||
should always and only be doing something you actively want to be
|
||||
doing, like reading a book, or playing video games, or pursuing a
|
||||
hobby. Conversely, when you are not doing something you want to be
|
||||
doing, you should always and only be doing something you should be
|
||||
doing. This is a good resolution because it’s not aimed at some
|
||||
specific result that deviates a whole lot from who you are already,
|
||||
like overhauling your diet or your sleep regimen or whatever. No
|
||||
overhaul required, here. You already do plenty of what you’re supposed
|
||||
to do, and plenty of what you want to do. Resolve to stop doing
|
||||
anything else.
|
||||
When you are not doing something you should be doing—straightening up around
|
||||
the house, taking out the garbage, walking the dog, your job—you should always
|
||||
and only be doing something you actively want to be doing, like reading a book,
|
||||
or playing video games, or pursuing a hobby. Conversely, when you are not doing
|
||||
something you want to be doing, you should always and only be doing something
|
||||
you should be doing. This is a good resolution because it’s not aimed at some
|
||||
specific result that deviates a whole lot from who you are already, like
|
||||
overhauling your diet or your sleep regimen or whatever. No overhaul required,
|
||||
here. You already do plenty of what you’re supposed to do, and plenty of what
|
||||
you want to do. Resolve to stop doing anything else.
|
||||
|
||||
Advertisement
|
||||
|
||||
But I already do this, you are saying, as you sit at your desk, not
|
||||
working, procrastinating, avoiding work by dicking around on the
|
||||
internet and winding up on a dumb-ass late-January blog about, of all
|
||||
things, self-improvement. No! Right now, you are not following this
|
||||
very good advice. You are not doing what you should be doing—unless
|
||||
what you should be doing is reading blogs—nor are you doing what you
|
||||
really want to be doing, which is parasailing or skiing or hunting
|
||||
moose in [60]ye olde cowboy game. You are killing time, waiting for
|
||||
either the energy for work or the consequences of not doing work to
|
||||
give your life some feeble structure. Stop it! Killing time is the very
|
||||
habit we are trying to address, here. There’s barely enough time as it
|
||||
is.
|
||||
But I already do this, you are saying, as you sit at your desk, not working,
|
||||
procrastinating, avoiding work by dicking around on the internet and winding up
|
||||
on a dumb-ass late-January blog about, of all things, self-improvement. No!
|
||||
Right now, you are not following this very good advice. You are not doing what
|
||||
you should be doing—unless what you should be doing is reading blogs—nor are
|
||||
you doing what you really want to be doing, which is parasailing or skiing or
|
||||
hunting moose in [70]ye olde cowboy game. You are killing time, waiting for
|
||||
either the energy for work or the consequences of not doing work to give your
|
||||
life some feeble structure. Stop it! Killing time is the very habit we are
|
||||
trying to address, here. There’s barely enough time as it is.
|
||||
|
||||
Advertisement
|
||||
|
||||
Along the way you will need to hone your sense of what things you
|
||||
should be doing. You know the most obvious ones—they’re occupying the
|
||||
margins of your consciousness all the time, bearing down on you and
|
||||
poisoning the time you spend not doing them. Chores, assignments,
|
||||
projects, bills, phone calls, repairs, and so forth. The list is a
|
||||
little bit longer than that, which is both good news and bad news. It’s
|
||||
bad news because it includes things like talking to your folks on the
|
||||
telephone, or listening patiently while your spouse rants about their
|
||||
day, or brushing your teeth—things you put off doing nearly as much as
|
||||
work but which, I’m afraid, must be done. But it’s also good news,
|
||||
because by acknowledging that those are responsibilities, you have also
|
||||
earned the right to take some satisfaction from having fulfilled them.
|
||||
Along the way you will need to hone your sense of what things you should be
|
||||
doing. You know the most obvious ones—they’re occupying the margins of your
|
||||
consciousness all the time, bearing down on you and poisoning the time you
|
||||
spend not doing them. Chores, assignments, projects, bills, phone calls,
|
||||
repairs, and so forth. The list is a little bit longer than that, which is both
|
||||
good news and bad news. It’s bad news because it includes things like talking
|
||||
to your folks on the telephone, or listening patiently while your spouse rants
|
||||
about their day, or brushing your teeth—things you put off doing nearly as much
|
||||
as work but which, I’m afraid, must be done. But it’s also good news, because
|
||||
by acknowledging that those are responsibilities, you have also earned the
|
||||
right to take some satisfaction from having fulfilled them.
|
||||
|
||||
Advertisement
|
||||
|
||||
Sometimes you have the bandwidth and energy to address your attention
|
||||
to the things you should be doing, and other times the thought of
|
||||
getting your car inspected or working out or washing a sinkful of
|
||||
dishes fills you with a sudden urge to throw yourself down a well. When
|
||||
you have the energy to do the things you should do, do them, or keep
|
||||
doing them. When you don’t—and this is crucial—go ahead and give
|
||||
yourself permission to set them aside for another time. But—and this is
|
||||
also crucial, because it is the lesson of this damn blog—when you give
|
||||
yourself permission not to do the things you should be doing, please
|
||||
spend the resulting block of free time doing something good and cool,
|
||||
something you genuinely want to do.
|
||||
Sometimes you have the bandwidth and energy to address your attention to the
|
||||
things you should be doing, and other times the thought of getting your car
|
||||
inspected or working out or washing a sinkful of dishes fills you with a sudden
|
||||
urge to throw yourself down a well. When you have the energy to do the things
|
||||
you should do, do them, or keep doing them. When you don’t—and this is
|
||||
crucial—go ahead and give yourself permission to set them aside for another
|
||||
time. But—and this is also crucial, because it is the lesson of this damn
|
||||
blog—when you give yourself permission not to do the things you should be
|
||||
doing, please spend the resulting block of free time doing something good and
|
||||
cool, something you genuinely want to do.
|
||||
|
||||
You will also need to hone your sense of what it is you want to be
|
||||
doing. Today, the thing I most want to be doing in all the universe is
|
||||
riding Splash Mountain. That activity, I am afraid to say, is
|
||||
completely out of the question, in no small part because I am supposed
|
||||
to be doing the thing I least want to do in all the universe, which is
|
||||
working. Since I would certainly rather die than actually work, I’m
|
||||
going to do something else. But what? It helps to start all the way out
|
||||
at riding Splash Mountain, because understanding want in terms of
|
||||
genuine desire keeps you from slipping into the shitty headspace of
|
||||
just measuring activities against the dread and misery of work. In
|
||||
almost all cases I would rather be watching Law & Order reruns than
|
||||
doing chores, but that doesn’t mean I really want to be watching Law &
|
||||
Order reruns. In the endless list of things I could conceivably do with
|
||||
a day, watching Law & Order reruns is probably closer to doing chores
|
||||
than it is to riding Splash Mountain. In fact, I often default to
|
||||
watching Law & Order reruns because some part of my brain recognizes
|
||||
that it keeps me anchored in place near the chores, and isn’t so joyful
|
||||
that I can be said to be really enjoying myself, which is clearly
|
||||
You will also need to hone your sense of what it is you want to be doing.
|
||||
Today, the thing I most want to be doing in all the universe is riding Splash
|
||||
Mountain. That activity, I am afraid to say, is completely out of the question,
|
||||
in no small part because I am supposed to be doing the thing I least want to do
|
||||
in all the universe, which is working. Since I would certainly rather die than
|
||||
actually work, I’m going to do something else. But what? It helps to start all
|
||||
the way out at riding Splash Mountain, because understanding want in terms of
|
||||
genuine desire keeps you from slipping into the shitty headspace of just
|
||||
measuring activities against the dread and misery of work. In almost all cases
|
||||
I would rather be watching Law & Order reruns than doing chores, but that
|
||||
doesn’t mean I really want to be watching Law & Order reruns. In the endless
|
||||
list of things I could conceivably do with a day, watching Law & Order reruns
|
||||
is probably closer to doing chores than it is to riding Splash Mountain. In
|
||||
fact, I often default to watching Law & Order reruns because some part of my
|
||||
brain recognizes that it keeps me anchored in place near the chores, and isn’t
|
||||
so joyful that I can be said to be really enjoying myself, which is clearly
|
||||
something I don’t deserve.
|
||||
|
||||
Advertisement
|
||||
|
||||
So it is with scanning headlines or surfing Instagram or refreshing
|
||||
Twitter, the grey shit you do compulsively when you are
|
||||
procrastinating. Yes, you would rather be doing those things than
|
||||
painting your living room—anything, including bleeding from the
|
||||
eyeballs, is better than painting—but that doesn’t necessarily mean
|
||||
they’re worth a shit. If you’re not going to paint the living room,
|
||||
that’s fine! But now use the time on something good! In my case, if I
|
||||
start all the way out at riding Splash Mountain and work backward from
|
||||
there, long before I get to watching Law & Order reruns, I will arrive
|
||||
at things like bowling or going to the movies or hunting moose in ye
|
||||
olde cowboy game. Those are things I find myself wanting to do, but
|
||||
rarely give myself permission to do. Ask yourself, “What are some
|
||||
activities that would be genuinely fun?” Make a list! Cross off the
|
||||
stuff you know you can’t do, and then pick and do one of the ones you
|
||||
can. Go to the zoo. Watch a horror flick. Try out a new bar. Read a few
|
||||
chapters of a good book.
|
||||
So it is with scanning headlines or surfing Instagram or refreshing Twitter,
|
||||
the grey shit you do compulsively when you are procrastinating. Yes, you would
|
||||
rather be doing those things than painting your living room—anything, including
|
||||
bleeding from the eyeballs, is better than painting—but that doesn’t
|
||||
necessarily mean they’re worth a shit. If you’re not going to paint the living
|
||||
room, that’s fine! But now use the time on something good! In my case, if I
|
||||
start all the way out at riding Splash Mountain and work backward from there,
|
||||
long before I get to watching Law & Order reruns, I will arrive at things like
|
||||
bowling or going to the movies or hunting moose in ye olde cowboy game. Those
|
||||
are things I find myself wanting to do, but rarely give myself permission to
|
||||
do. Ask yourself, “What are some activities that would be genuinely fun?” Make
|
||||
a list! Cross off the stuff you know you can’t do, and then pick and do one of
|
||||
the ones you can. Go to the zoo. Watch a horror flick. Try out a new bar. Read
|
||||
a few chapters of a good book.
|
||||
|
||||
It can feel reckless and irresponsible to spend your day bowling or baking or
|
||||
hunting moose in ye olde cowboy game, but a big chunk of the guilt associated
|
||||
with these activities stems from not really giving yourself permission to do
|
||||
them, at least in part because too much of your average day is already given
|
||||
over to tweeting at Jonathan Chait. But it’s healthy and productive to do cool
|
||||
and fun things that enrich your life! The solution, here, is to buy yourself
|
||||
the time to do the really interesting things by first being honest with
|
||||
yourself about all the sweaty hours you waste tweeting at Jonathan Chait. You
|
||||
are a successful and prolific time-killer because you’ve got a selection of
|
||||
ways of doing it that are marginally less dreary and more stimulating than
|
||||
folding laundry or managing spreadsheets, and some inherited puritanical
|
||||
impulse that tells you you’re still close to upright so long as you’re not
|
||||
actually enjoying yourself. Bullshit! When you are not doing what you are
|
||||
supposed to do, do something you genuinely want to do. That’s the rule.
|
||||
|
||||
It can feel reckless and irresponsible to spend your day bowling or
|
||||
baking or hunting moose in ye olde cowboy game, but a big chunk of the
|
||||
guilt associated with these activities stems from not really giving
|
||||
yourself permission to do them, at least in part because too much of
|
||||
your average day is already given over to tweeting at Jonathan Chait.
|
||||
But it’s healthy and productive to do cool and fun things that enrich
|
||||
your life! The solution, here, is to buy yourself the time to do the
|
||||
really interesting things by first being honest with yourself about all
|
||||
the sweaty hours you waste tweeting at Jonathan Chait. You are a
|
||||
successful and prolific time-killer because you’ve got a selection of
|
||||
ways of doing it that are marginally less dreary and more stimulating
|
||||
than folding laundry or managing spreadsheets, and some inherited
|
||||
puritanical impulse that tells you you’re still close to upright so
|
||||
long as you’re not actually enjoying yourself. Bullshit! When you are
|
||||
not doing what you are supposed to do, do something you genuinely want
|
||||
to do. That’s the rule.
|
||||
Advertisement
|
||||
|
||||
Of course, there will be any number of times when you are prevented
|
||||
from doing any of the things you want to be doing. The rule is also
|
||||
this: When you cannot do what you genuinely want to do, do what you are
|
||||
supposed to do. Here is a good life hack: when you lack the bandwidth
|
||||
to take on an important chore or duty, you probably still have the
|
||||
bandwidth to make a list of all your important chores and duties. Do
|
||||
that! This counts as a thing you should be doing, because often enough
|
||||
in making the list you will hit on something that requires little
|
||||
enough of you that you can take it on right away, without too much
|
||||
suffering. And even if you don’t, the making of the list will bring you
|
||||
a little closer to addressing yourself to the items on it, and that’s
|
||||
enough of a positive step that when the time comes for you to do
|
||||
something you want to do, you will feel the satisfaction of having
|
||||
earned it, through work. That’s what’s missing from the shame-soaked
|
||||
hours spent avoiding and procrastinating: the feeling that you deserve
|
||||
to have a good time, and the permission to have one.
|
||||
Of course, there will be any number of times when you are prevented from doing
|
||||
any of the things you want to be doing. The rule is also this: When you cannot
|
||||
do what you genuinely want to do, do what you are supposed to do. Here is a
|
||||
good life hack: when you lack the bandwidth to take on an important chore or
|
||||
duty, you probably still have the bandwidth to make a list of all your
|
||||
important chores and duties. Do that! This counts as a thing you should be
|
||||
doing, because often enough in making the list you will hit on something that
|
||||
requires little enough of you that you can take it on right away, without too
|
||||
much suffering. And even if you don’t, the making of the list will bring you a
|
||||
little closer to addressing yourself to the items on it, and that’s enough of a
|
||||
positive step that when the time comes for you to do something you want to do,
|
||||
you will feel the satisfaction of having earned it, through work. That’s what’s
|
||||
missing from the shame-soaked hours spent avoiding and procrastinating: the
|
||||
feeling that you deserve to have a good time, and the permission to have one.
|
||||
|
||||
Of course, you will probably fall short of dividing your time exactly equally
|
||||
between responsibilities and pursuits. Don’t think of that as failure. When you
|
||||
remember this wise practice, when it occurs to you, treat it as a rule and
|
||||
follow it. Ah, right, I said I wasn’t gonna sit here stewing in my anxiety all
|
||||
afternoon, so instead I’m going to go see [71]Into the Spider-Verse. Good plan!
|
||||
You are going to end the day with something to show for it, and that’s the
|
||||
whole idea.
|
||||
|
||||
Of course, you will probably fall short of dividing your time exactly
|
||||
equally between responsibilities and pursuits. Don’t think of that as
|
||||
failure. When you remember this wise practice, when it occurs to you,
|
||||
treat it as a rule and follow it. Ah, right, I said I wasn’t gonna sit
|
||||
here stewing in my anxiety all afternoon, so instead I’m going to go
|
||||
see [61]Into the Spider-Verse. Good plan! You are going to end the day
|
||||
with something to show for it, and that’s the whole idea.
|
||||
(BUTTON)
|
||||
Continue reading
|
||||
|
||||
IFRAME: [62]https://www.googletagmanager.com/ns.html?id=GTM-T73GPNQ
|
||||
References:
|
||||
|
||||
References
|
||||
|
||||
Visible links:
|
||||
1. https://deadspin.com/spend-exactly-none-of-your-time-killing-time-1831777904
|
||||
2. https://deadspin.com/spend-exactly-none-of-your-time-killing-time-1831777904
|
||||
3. https://deadspin.com/rss
|
||||
4. https://avclub.com/
|
||||
5. https://deadspin.com/spend-exactly-none-of-your-time-killing-time-1831777904
|
||||
6. https://gizmodo.com/
|
||||
7. https://jalopnik.com/
|
||||
8. https://kotaku.com/
|
||||
9. https://qz.com/
|
||||
10. https://theroot.com/
|
||||
11. https://thetakeout.com/
|
||||
12. https://theonion.com/
|
||||
13. https://theinventory.com/
|
||||
14. https://deadspin.com/
|
||||
15. https://deadspin.com/latest
|
||||
16. https://deadspin.com/baseball
|
||||
17. https://deadspin.com/football
|
||||
18. https://deadspin.com/basketball
|
||||
19. https://deadspin.com/hockey
|
||||
20. https://deadspin.com/golf
|
||||
21. https://deadspin.com/soccer
|
||||
22. https://deadspin.com/locker/the-mourning-after
|
||||
23. https://deadspin.com/wrestling
|
||||
24. https://deadspin.com/lists
|
||||
25. https://deadspin.com/tennis
|
||||
26. https://deadspin.com/the-fights
|
||||
27. https://deadspin.com/olympics
|
||||
28. https://deadspin.com/racing
|
||||
29. https://deadspin.com/poker
|
||||
30. https://deadspin.com/media
|
||||
31. https://deadspin.com/locker
|
||||
32. https://es.deadspin.com/
|
||||
33. https://deadspin.com/
|
||||
34. https://deadspin.com/latest
|
||||
35. https://deadspin.com/baseball
|
||||
36. https://deadspin.com/football
|
||||
37. https://deadspin.com/basketball
|
||||
38. https://deadspin.com/hockey
|
||||
39. https://deadspin.com/golf
|
||||
40. https://deadspin.com/soccer
|
||||
41. https://deadspin.com/locker/the-mourning-after
|
||||
42. https://deadspin.com/wrestling
|
||||
43. https://deadspin.com/lists
|
||||
44. https://deadspin.com/tennis
|
||||
45. https://deadspin.com/the-fights
|
||||
46. https://deadspin.com/olympics
|
||||
47. https://deadspin.com/racing
|
||||
48. https://deadspin.com/poker
|
||||
49. https://deadspin.com/media
|
||||
50. https://deadspin.com/locker
|
||||
51. https://es.deadspin.com/
|
||||
52. https://deadspin.com/author/miserableshitehawk
|
||||
53. https://facebook.com/sharer.php?u=https://deadspin.com/what-jason-kelce-s-retirement-says-about-the-eagles-fut-1851169895?utm_medium=sharefromsite&utm_source=facebook
|
||||
54. https://twitter.com/intent/tweet?url=https://deadspin.com/what-jason-kelce-s-retirement-says-about-the-eagles-fut-1851169895?utm_medium=sharefromsite&utm_source=twitter&text=What Jason Kelce’s retirement says about the Eagles future
|
||||
55. mailto:?subject=What Jason Kelce’s retirement says about the Eagles future&body=https://deadspin.com/what-jason-kelce-s-retirement-says-about-the-eagles-fut-1851169895?utm_medium=sharefromsite&utm_source=email
|
||||
56. https://www.reddit.com/submit?url=https://deadspin.com/what-jason-kelce-s-retirement-says-about-the-eagles-fut-1851169895?utm_medium=sharefromsite&utm_source=reddit&title=What Jason Kelce’s retirement says about the Eagles future
|
||||
57. https://deadspin.com/what-jason-kelce-s-retirement-says-about-the-eagles-fut-1851169895
|
||||
58. https://deadspin.com/what-jason-kelce-s-retirement-says-about-the-eagles-fut-1851169895
|
||||
59. https://deadspin.com/what-jason-kelce-s-retirement-says-about-the-eagles-fut-1851169895
|
||||
60. https://theconcourse.deadspin.com/i-like-chopping-firewood-in-red-dead-redemption-2-1830178593#_ga=2.215259543.149258240.1547482638-1486199056.1525795056
|
||||
61. https://film.avclub.com/superhero-dimensions-collide-in-a-funny-gorgeously-psy-1830700647
|
||||
62. https://www.googletagmanager.com/ns.html?id=GTM-T73GPNQ
|
||||
|
||||
Hidden links:
|
||||
64. https://deadspin.com/spend-exactly-none-of-your-time-killing-time-1831777904
|
||||
65. https://deadspin.com/spend-exactly-none-of-your-time-killing-time-1831777904
|
||||
66. https://deadspin.com/search
|
||||
67. https://deadspin.com/newsletter
|
||||
68. https://deadspin.com/locker
|
||||
69. https://twitter.com/intent/tweet?via=deadspin&url=https%3A%2F%2Fdeadspin.com%2Fspend-exactly-none-of-your-time-killing-time-1831777904%3Futm_medium%3Dsharefromsite%26utm_source%3Ddeadspin_twitter&text=Spend%20Exactly%20None%20Of%20Your%20Time%20Killing%20Time
|
||||
70. https://facebook.com/sharer.php?u=https%3A%2F%2Fdeadspin.com%2Fspend-exactly-none-of-your-time-killing-time-1831777904%3Futm_medium%3Dsharefromsite%26utm_source%3Ddeadspin_facebook
|
||||
71. https://www.reddit.com/submit?url=https%3A%2F%2Fdeadspin.com%2Fspend-exactly-none-of-your-time-killing-time-1831777904%3Futm_medium%3Dsharefromsite%26utm_source%3Ddeadspin_reddit&title=Spend%20Exactly%20None%20Of%20Your%20Time%20Killing%20Time
|
||||
72. mailto:?subject=Spend%20Exactly%20None%20Of%20Your%20Time%20Killing%20Time&body=https%3A%2F%2Fdeadspin.com%2Fspend-exactly-none-of-your-time-killing-time-1831777904%3Futm_medium%3Dsharefromsite%26utm_source%3Ddeadspin_email
|
||||
73. https://deadspin.com/spend-exactly-none-of-your-time-killing-time-1831777904
|
||||
74. https://deadspin.com/which-nfl-team-lands-jim-harbaugh-as-their-next-head-co-1851156349
|
||||
75. https://deadspin.com/josh-allen-trevor-lawrence-or-the-eagles-who-are-the-1851149579
|
||||
[1] https://avclub.com/
|
||||
[2] https://deadspin.com/
|
||||
[3] https://gizmodo.com/
|
||||
[4] https://jalopnik.com/
|
||||
[5] https://kotaku.com/
|
||||
[6] https://qz.com/
|
||||
[7] https://theroot.com/
|
||||
[8] https://thetakeout.com/
|
||||
[9] https://theonion.com/
|
||||
[10] https://theinventory.com/
|
||||
[11] https://deadspin.com/
|
||||
[12] https://deadspin.com/
|
||||
[13] https://deadspin.com/
|
||||
[14] https://deadspin.com/latest
|
||||
[15] https://deadspin.com/baseball
|
||||
[16] https://deadspin.com/football
|
||||
[17] https://deadspin.com/basketball
|
||||
[18] https://deadspin.com/hockey
|
||||
[19] https://deadspin.com/golf
|
||||
[20] https://deadspin.com/soccer
|
||||
[21] https://deadspin.com/locker/the-mourning-after
|
||||
[22] https://deadspin.com/wrestling
|
||||
[23] https://deadspin.com/lists
|
||||
[24] https://deadspin.com/tennis
|
||||
[25] https://deadspin.com/the-fights
|
||||
[26] https://deadspin.com/olympics
|
||||
[27] https://deadspin.com/racing
|
||||
[28] https://deadspin.com/poker
|
||||
[29] https://deadspin.com/media
|
||||
[30] https://deadspin.com/locker
|
||||
[31] https://es.deadspin.com/
|
||||
[32] https://deadspin.com/search
|
||||
[33] https://deadspin.com/newsletter
|
||||
[34] https://deadspin.com/
|
||||
[35] https://deadspin.com/latest
|
||||
[36] https://deadspin.com/baseball
|
||||
[37] https://deadspin.com/football
|
||||
[38] https://deadspin.com/basketball
|
||||
[39] https://deadspin.com/hockey
|
||||
[40] https://deadspin.com/golf
|
||||
[41] https://deadspin.com/soccer
|
||||
[42] https://deadspin.com/locker/the-mourning-after
|
||||
[43] https://deadspin.com/wrestling
|
||||
[44] https://deadspin.com/lists
|
||||
[45] https://deadspin.com/tennis
|
||||
[46] https://deadspin.com/the-fights
|
||||
[47] https://deadspin.com/olympics
|
||||
[48] https://deadspin.com/racing
|
||||
[49] https://deadspin.com/poker
|
||||
[50] https://deadspin.com/media
|
||||
[51] https://deadspin.com/locker
|
||||
[52] https://es.deadspin.com/
|
||||
[53] https://deadspin.com/locker
|
||||
[54] https://deadspin.com/author/miserableshitehawk
|
||||
[55] https://twitter.com/intent/tweet?via=deadspin&url=https%3A%2F%2Fdeadspin.com%2Fspend-exactly-none-of-your-time-killing-time-1831777904%3Futm_medium%3Dsharefromsite%26utm_source%3Ddeadspin_twitter&text=Spend%20Exactly%20None%20Of%20Your%20Time%20Killing%20Time
|
||||
[56] https://facebook.com/sharer.php?u=https%3A%2F%2Fdeadspin.com%2Fspend-exactly-none-of-your-time-killing-time-1831777904%3Futm_medium%3Dsharefromsite%26utm_source%3Ddeadspin_facebook
|
||||
[57] https://www.reddit.com/submit?url=https%3A%2F%2Fdeadspin.com%2Fspend-exactly-none-of-your-time-killing-time-1831777904%3Futm_medium%3Dsharefromsite%26utm_source%3Ddeadspin_reddit&title=Spend%20Exactly%20None%20Of%20Your%20Time%20Killing%20Time
|
||||
[58] mailto:?subject=Spend%20Exactly%20None%20Of%20Your%20Time%20Killing%20Time&body=https%3A%2F%2Fdeadspin.com%2Fspend-exactly-none-of-your-time-killing-time-1831777904%3Futm_medium%3Dsharefromsite%26utm_source%3Ddeadspin_email
|
||||
[59] https://deadspin.com/spend-exactly-none-of-your-time-killing-time-1831777904
|
||||
[61] https://facebook.com/sharer.php?u=https%3A%2F%2Fdeadspin.com%2Fwhat-jason-kelce-s-retirement-says-about-the-eagles-fut-1851169895%3Futm_medium%3Dsharefromsite%26utm_source%3Dfacebook
|
||||
[62] https://twitter.com/intent/tweet?url=https%3A%2F%2Fdeadspin.com%2Fwhat-jason-kelce-s-retirement-says-about-the-eagles-fut-1851169895%3Futm_medium%3Dsharefromsite%26utm_source%3Dtwitter&text=What%20Jason%20Kelce%E2%80%99s%20retirement%20says%20about%20the%20Eagles%20future
|
||||
[63] mailto:?subject=What%20Jason%20Kelce%E2%80%99s%20retirement%20says%20about%20the%20Eagles%20future&body=https%3A%2F%2Fdeadspin.com%2Fwhat-jason-kelce-s-retirement-says-about-the-eagles-fut-1851169895%3Futm_medium%3Dsharefromsite%26utm_source%3Demail
|
||||
[64] https://www.reddit.com/submit?url=https%3A%2F%2Fdeadspin.com%2Fwhat-jason-kelce-s-retirement-says-about-the-eagles-fut-1851169895%3Futm_medium%3Dsharefromsite%26utm_source%3Dreddit&title=What%20Jason%20Kelce%E2%80%99s%20retirement%20says%20about%20the%20Eagles%20future
|
||||
[65] https://deadspin.com/what-jason-kelce-s-retirement-says-about-the-eagles-fut-1851169895
|
||||
[66] https://deadspin.com/what-jason-kelce-s-retirement-says-about-the-eagles-fut-1851169895
|
||||
[67] https://deadspin.com/what-jason-kelce-s-retirement-says-about-the-eagles-fut-1851169895
|
||||
[68] https://deadspin.com/which-nfl-team-lands-jim-harbaugh-as-their-next-head-co-1851156349
|
||||
[69] https://deadspin.com/josh-allen-trevor-lawrence-or-the-eagles-who-are-the-1851149579
|
||||
[70] https://theconcourse.deadspin.com/i-like-chopping-firewood-in-red-dead-redemption-2-1830178593#_ga=2.215259543.149258240.1547482638-1486199056.1525795056
|
||||
[71] https://film.avclub.com/superhero-dimensions-collide-in-a-funny-gorgeously-psy-1830700647
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,311 +1,328 @@
|
||||
Funland is closed for the season! Our opening day next season is Sat,
|
||||
May 11!
|
||||
[1]Home
|
||||
[1]
|
||||
|
||||
Funland is closed for the season! Our opening day next season is Sat, May 11!
|
||||
|
||||
[2]Home
|
||||
[3]
|
||||
Attractions
|
||||
* [2]Park Information
|
||||
* [3]Rides
|
||||
* [4]Games
|
||||
* [5]Retail & Food
|
||||
|
||||
[6]Schedule
|
||||
• [4]Park Information
|
||||
• [5]Rides
|
||||
• [6]Games
|
||||
• [7]Retail & Food
|
||||
|
||||
[8]Schedule
|
||||
[9]
|
||||
Work For Us
|
||||
* [7]Employee Testimonials
|
||||
* [8]Seasonal Rides/ Games
|
||||
* [9]Maintenance Manager
|
||||
* [10]Maintenance Mechanic
|
||||
* [11]Seasonal Park Cleaner
|
||||
|
||||
• [10]Employee Testimonials
|
||||
• [11]Seasonal Rides/ Games
|
||||
• [12]Maintenance Manager
|
||||
• [13]Maintenance Mechanic
|
||||
• [14]Seasonal Park Cleaner
|
||||
|
||||
[15]
|
||||
Info
|
||||
* [12]Tickets
|
||||
* [13]Height Restrictions
|
||||
* [14]Photos
|
||||
* [15]Contact Us
|
||||
* [16]Report A Lost Item
|
||||
|
||||
• [16]Tickets
|
||||
• [17]Height Restrictions
|
||||
• [18]Photos
|
||||
• [19]Contact Us
|
||||
• [20]Report A Lost Item
|
||||
|
||||
[21]
|
||||
Funland Rehoboth
|
||||
[17]Home
|
||||
[22]Home
|
||||
[23]
|
||||
Attractions
|
||||
* [18]Park Information
|
||||
* [19]Rides
|
||||
* [20]Games
|
||||
* [21]Retail & Food
|
||||
|
||||
[22]Schedule
|
||||
• [24]Park Information
|
||||
• [25]Rides
|
||||
• [26]Games
|
||||
• [27]Retail & Food
|
||||
|
||||
[28]Schedule
|
||||
[29]
|
||||
Work For Us
|
||||
* [23]Employee Testimonials
|
||||
* [24]Seasonal Rides/ Games
|
||||
* [25]Maintenance Manager
|
||||
* [26]Maintenance Mechanic
|
||||
* [27]Seasonal Park Cleaner
|
||||
|
||||
• [30]Employee Testimonials
|
||||
• [31]Seasonal Rides/ Games
|
||||
• [32]Maintenance Manager
|
||||
• [33]Maintenance Mechanic
|
||||
• [34]Seasonal Park Cleaner
|
||||
|
||||
[35]
|
||||
Info
|
||||
* [28]Tickets
|
||||
* [29]Height Restrictions
|
||||
* [30]Photos
|
||||
* [31]Contact Us
|
||||
* [32]Report A Lost Item
|
||||
|
||||
• [36]Tickets
|
||||
• [37]Height Restrictions
|
||||
• [38]Photos
|
||||
• [39]Contact Us
|
||||
• [40]Report A Lost Item
|
||||
|
||||
[41]
|
||||
More
|
||||
* [33]Home
|
||||
* Attractions
|
||||
+ [34]Park Information
|
||||
+ [35]Rides
|
||||
+ [36]Games
|
||||
+ [37]Retail & Food
|
||||
* [38]Schedule
|
||||
* Work For Us
|
||||
+ [39]Employee Testimonials
|
||||
+ [40]Seasonal Rides/ Games
|
||||
+ [41]Maintenance Manager
|
||||
+ [42]Maintenance Mechanic
|
||||
+ [43]Seasonal Park Cleaner
|
||||
* Info
|
||||
+ [44]Tickets
|
||||
+ [45]Height Restrictions
|
||||
+ [46]Photos
|
||||
+ [47]Contact Us
|
||||
+ [48]Report A Lost Item
|
||||
|
||||
* [49]Sign In
|
||||
*
|
||||
______________________________________________________________
|
||||
• [42]Home
|
||||
• Attractions
|
||||
□ [43]Park Information
|
||||
□ [44]Rides
|
||||
□ [45]Games
|
||||
□ [46]Retail & Food
|
||||
• [47]Schedule
|
||||
• Work For Us
|
||||
□ [48]Employee Testimonials
|
||||
□ [49]Seasonal Rides/ Games
|
||||
□ [50]Maintenance Manager
|
||||
□ [51]Maintenance Mechanic
|
||||
□ [52]Seasonal Park Cleaner
|
||||
• Info
|
||||
□ [53]Tickets
|
||||
□ [54]Height Restrictions
|
||||
□ [55]Photos
|
||||
□ [56]Contact Us
|
||||
□ [57]Report A Lost Item
|
||||
|
||||
* [50]My Account
|
||||
[58]
|
||||
[59]
|
||||
|
||||
* Signed in as:
|
||||
* filler@godaddy.com
|
||||
*
|
||||
______________________________________________________________
|
||||
• [60]Sign In
|
||||
• ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
• [61]My Account
|
||||
|
||||
* [51]My Account
|
||||
* Sign out
|
||||
• Signed in as:
|
||||
|
||||
• filler@godaddy.com
|
||||
|
||||
• ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
• [62]My Account
|
||||
• Sign out
|
||||
|
||||
[63]
|
||||
[64]
|
||||
Funland Rehoboth
|
||||
|
||||
Signed in as:
|
||||
|
||||
filler@godaddy.com
|
||||
* [52]Home
|
||||
* [53]Attractions
|
||||
+ [54]Park Information
|
||||
+ [55]Rides
|
||||
+ [56]Games
|
||||
+ [57]Retail & Food
|
||||
* [58]Schedule
|
||||
* [59]Work For Us
|
||||
+ [60]Employee Testimonials
|
||||
+ [61]Seasonal Rides/ Games
|
||||
+ [62]Maintenance Manager
|
||||
+ [63]Maintenance Mechanic
|
||||
+ [64]Seasonal Park Cleaner
|
||||
* [65]Info
|
||||
+ [66]Tickets
|
||||
+ [67]Height Restrictions
|
||||
+ [68]Photos
|
||||
+ [69]Contact Us
|
||||
+ [70]Report A Lost Item
|
||||
|
||||
• [65]Home
|
||||
• [66]Attractions
|
||||
□ [67]Park Information
|
||||
□ [68]Rides
|
||||
□ [69]Games
|
||||
□ [70]Retail & Food
|
||||
• [71]Schedule
|
||||
• [72]Work For Us
|
||||
□ [73]Employee Testimonials
|
||||
□ [74]Seasonal Rides/ Games
|
||||
□ [75]Maintenance Manager
|
||||
□ [76]Maintenance Mechanic
|
||||
□ [77]Seasonal Park Cleaner
|
||||
• [78]Info
|
||||
□ [79]Tickets
|
||||
□ [80]Height Restrictions
|
||||
□ [81]Photos
|
||||
□ [82]Contact Us
|
||||
□ [83]Report A Lost Item
|
||||
|
||||
Account
|
||||
*
|
||||
______________________________________________________________
|
||||
|
||||
* [71]My Account
|
||||
* Sign out
|
||||
• ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
• [84]My Account
|
||||
• Sign out
|
||||
|
||||
*
|
||||
______________________________________________________________
|
||||
• ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
• [85]Sign In
|
||||
• [86]My Account
|
||||
|
||||
* [72]Sign In
|
||||
* [73]My Account
|
||||
|
||||
[rs=w:388,h:388,cg:true,m]
|
||||
[74]Schedule
|
||||
[rs=w:388,h:388,cg:true]
|
||||
[75]Tickets
|
||||
[rs=w:388,h:388,cg:true,m]
|
||||
[76]Work for Us
|
||||
[cr=w:388,h:388]
|
||||
[77]Rides
|
||||
[rs=w:388,h:388,cg:true,m]
|
||||
[78]Games
|
||||
[rs=w:388,h:388,cg:true]
|
||||
[79]Park Info
|
||||
|
||||
IFRAME: [80]javascript: window.frameElement.getAttribute("srcdoc");
|
||||
[rs]
|
||||
[87]Schedule
|
||||
[rs]
|
||||
[88]Tickets
|
||||
[rs]
|
||||
[89]Work for Us
|
||||
[cr]
|
||||
[90]Rides
|
||||
[rs]
|
||||
[91]Games
|
||||
[rs]
|
||||
[92]Park Info
|
||||
|
||||
History of Funland
|
||||
|
||||
[ACwAAAAAAQABAAACADs=]
|
||||
[ACwAAAAAAQ]
|
||||
|
||||
It all started as an innocent vacation to the beach, back in 1961…
|
||||
|
||||
Allen and Don Fasnacht, their wives Jean and Dee, and their parents Al
|
||||
and Sis visited the place that was to become Funland during a trip to
|
||||
the Delaware seashore in August of 1961.
|
||||
Allen and Don Fasnacht, their wives Jean and Dee, and their parents Al and Sis
|
||||
visited the place that was to become Funland during a trip to the Delaware
|
||||
seashore in August of 1961.
|
||||
|
||||
At the time, the family was operating a small “picnic park” near
|
||||
Harrisburg, Pennsylvania, called Willow Mill Park. Being the park
|
||||
people that they were, they visited the Rehoboth Beach Sports Center,
|
||||
as it was called when the Dentino family owned it. While they were
|
||||
talking about the ins and outs of the park business with Mr Dentino, he
|
||||
asked if they might be interested in buying the Sports Center. Yeah
|
||||
right, was the thought not spoken, but that was going through the
|
||||
Fasnachts’ minds. Mr. Dentino affirmed that he was indeed interested
|
||||
in selling the business and that the Fasnachts should think about
|
||||
|
||||
At the time, the family was operating a small “picnic park” near Harrisburg,
|
||||
Pennsylvania, called Willow Mill Park. Being the park people that they were,
|
||||
they visited the Rehoboth Beach Sports Center, as it was called when the
|
||||
Dentino family owned it. While they were talking about the ins and outs of the
|
||||
park business with Mr Dentino, he asked if they might be interested in buying
|
||||
the Sports Center. Yeah right, was the thought not spoken, but that was going
|
||||
through the Fasnachts’ minds. Mr. Dentino affirmed that he was indeed
|
||||
interested in selling the business and that the Fasnachts should think about
|
||||
buying it.
|
||||
|
||||
Think about it is exactly what the family did when they returned home.
|
||||
It became a recurring topic in the Fasnacht family. They called Mr.
|
||||
Dentino and decided to go through with the purchase.
|
||||
|
||||
By March 1962 everything was falling into place, but so was an unusual
|
||||
area of low pressure off the East Coast. This storm never developed
|
||||
into a hurricane but was the lowest pressure system ever recorded for
|
||||
the area. Settlement on the park was to be on March 15, 1962. The
|
||||
Great Atlantic Storm hit on March 6th, devastating the entire eastern
|
||||
seacoast. The Fasnacht family traveled down from Hershey, and the
|
||||
Dentino family came up from Florida to assess the situation. Both
|
||||
families agreed to go ahead with the deal after they worked out an
|
||||
allowance for the damage.
|
||||
Think about it is exactly what the family did when they returned home. It
|
||||
became a recurring topic in the Fasnacht family. They called Mr. Dentino and
|
||||
decided to go through with the purchase.
|
||||
|
||||
The rest is history: expanding the park here and there, adding rides
|
||||
and games, and buying adjoining properties for the growing family and
|
||||
their children. From the original 1st and 2nd generation, there are
|
||||
now over twenty 3rd and 4th generation family members who are directly
|
||||
involved with the business. They, along with over ten 5th generation
|
||||
members coming up closely behind them, are all continuing that heritage
|
||||
that began half a century ago!
|
||||
|
||||
If you would like to hear more about the Funland story check out the
|
||||
links below!
|
||||
By March 1962 everything was falling into place, but so was an unusual area of
|
||||
low pressure off the East Coast. This storm never developed into a hurricane
|
||||
but was the lowest pressure system ever recorded for the area. Settlement on
|
||||
the park was to be on March 15, 1962. The Great Atlantic Storm hit on March
|
||||
6th, devastating the entire eastern seacoast. The Fasnacht family traveled
|
||||
down from Hershey, and the Dentino family came up from Florida to assess the
|
||||
situation. Both families agreed to go ahead with the deal after they worked
|
||||
out an allowance for the damage.
|
||||
|
||||
CBS Sunday Morning: [81]“Old-Fashion Fun: Funland”
|
||||
Content Delaware Documentary: [82] “Nothing Beats Fun: The Funland
|
||||
Story!”.
|
||||
The Cape Gazette also featured a [83]Funland Retrospective which marked
|
||||
our 50th year of fun at the Rehoboth seashore.
|
||||
|
||||
The rest is history: expanding the park here and there, adding rides and games,
|
||||
and buying adjoining properties for the growing family and their children.
|
||||
From the original 1st and 2nd generation, there are now over twenty 3rd and
|
||||
4th generation family members who are directly involved with the business.
|
||||
They, along with over ten 5th generation members coming up closely behind them,
|
||||
are all continuing that heritage that began half a century ago!
|
||||
|
||||
|
||||
If you would like to hear more about the Funland story check out the links
|
||||
below!
|
||||
|
||||
CBS Sunday Morning: [93]“Old-Fashion Fun: Funland”
|
||||
Content Delaware Documentary: [94] “Nothing Beats Fun: The Funland Story!”.
|
||||
The Cape Gazette also featured a [95]Funland Retrospective which marked our
|
||||
50th year of fun at the Rehoboth seashore.
|
||||
|
||||
Subscribe
|
||||
|
||||
Sign up to stay up to date with all announcements!
|
||||
____________________Email
|
||||
(BUTTON) Sign up
|
||||
* [84]Seasonal Rides/ Games
|
||||
* [85]Park Policies
|
||||
* [86]Rider Safety Guide
|
||||
* [87]Contact Us
|
||||
* [88]Subscribe
|
||||
|
||||
[96][ ]Email
|
||||
Sign up
|
||||
• [98]Seasonal Rides/ Games
|
||||
• [99]Park Policies
|
||||
• [100]Rider Safety Guide
|
||||
• [101]Contact Us
|
||||
• [102]Subscribe
|
||||
|
||||
[103][104][105]
|
||||
|
||||
Funland
|
||||
|
||||
Copyright © 2020 Funland - All Rights Reserved.
|
||||
|
||||
References
|
||||
|
||||
Visible links:
|
||||
1. https://funlandrehoboth.com/
|
||||
2. https://funlandrehoboth.com/park-information
|
||||
3. https://funlandrehoboth.com/rides
|
||||
4. https://funlandrehoboth.com/games
|
||||
5. https://funlandrehoboth.com/retail-&-food
|
||||
6. https://funlandrehoboth.com/schedule
|
||||
7. https://funlandrehoboth.com/employee-testimonials
|
||||
8. https://funlandrehoboth.com/seasonal-rides/-games
|
||||
9. https://funlandrehoboth.com/maintenance-manager
|
||||
10. https://funlandrehoboth.com/maintenance-mechanic
|
||||
11. https://funlandrehoboth.com/seasonal-park-cleaner
|
||||
12. https://funlandrehoboth.com/tickets
|
||||
13. https://funlandrehoboth.com/height-restrictions
|
||||
14. https://funlandrehoboth.com/photos
|
||||
15. https://funlandrehoboth.com/contact-us
|
||||
16. https://funlandrehoboth.com/report-a-lost-item
|
||||
17. https://funlandrehoboth.com/
|
||||
18. https://funlandrehoboth.com/park-information
|
||||
19. https://funlandrehoboth.com/rides
|
||||
20. https://funlandrehoboth.com/games
|
||||
21. https://funlandrehoboth.com/retail-&-food
|
||||
22. https://funlandrehoboth.com/schedule
|
||||
23. https://funlandrehoboth.com/employee-testimonials
|
||||
24. https://funlandrehoboth.com/seasonal-rides/-games
|
||||
25. https://funlandrehoboth.com/maintenance-manager
|
||||
26. https://funlandrehoboth.com/maintenance-mechanic
|
||||
27. https://funlandrehoboth.com/seasonal-park-cleaner
|
||||
28. https://funlandrehoboth.com/tickets
|
||||
29. https://funlandrehoboth.com/height-restrictions
|
||||
30. https://funlandrehoboth.com/photos
|
||||
31. https://funlandrehoboth.com/contact-us
|
||||
32. https://funlandrehoboth.com/report-a-lost-item
|
||||
33. https://funlandrehoboth.com/
|
||||
34. https://funlandrehoboth.com/park-information
|
||||
35. https://funlandrehoboth.com/rides
|
||||
36. https://funlandrehoboth.com/games
|
||||
37. https://funlandrehoboth.com/retail-&-food
|
||||
38. https://funlandrehoboth.com/schedule
|
||||
39. https://funlandrehoboth.com/employee-testimonials
|
||||
40. https://funlandrehoboth.com/seasonal-rides/-games
|
||||
41. https://funlandrehoboth.com/maintenance-manager
|
||||
42. https://funlandrehoboth.com/maintenance-mechanic
|
||||
43. https://funlandrehoboth.com/seasonal-park-cleaner
|
||||
44. https://funlandrehoboth.com/tickets
|
||||
45. https://funlandrehoboth.com/height-restrictions
|
||||
46. https://funlandrehoboth.com/photos
|
||||
47. https://funlandrehoboth.com/contact-us
|
||||
48. https://funlandrehoboth.com/report-a-lost-item
|
||||
49. https://funlandrehoboth.com/m/account
|
||||
50. https://funlandrehoboth.com/m/account
|
||||
51. https://funlandrehoboth.com/m/account
|
||||
52. https://funlandrehoboth.com/
|
||||
53. https://funlandrehoboth.com/
|
||||
54. https://funlandrehoboth.com/park-information
|
||||
55. https://funlandrehoboth.com/rides
|
||||
56. https://funlandrehoboth.com/games
|
||||
57. https://funlandrehoboth.com/retail-&-food
|
||||
58. https://funlandrehoboth.com/schedule
|
||||
59. https://funlandrehoboth.com/
|
||||
60. https://funlandrehoboth.com/employee-testimonials
|
||||
61. https://funlandrehoboth.com/seasonal-rides/-games
|
||||
62. https://funlandrehoboth.com/maintenance-manager
|
||||
63. https://funlandrehoboth.com/maintenance-mechanic
|
||||
64. https://funlandrehoboth.com/seasonal-park-cleaner
|
||||
65. https://funlandrehoboth.com/
|
||||
66. https://funlandrehoboth.com/tickets
|
||||
67. https://funlandrehoboth.com/height-restrictions
|
||||
68. https://funlandrehoboth.com/photos
|
||||
69. https://funlandrehoboth.com/contact-us
|
||||
70. https://funlandrehoboth.com/report-a-lost-item
|
||||
71. https://funlandrehoboth.com/m/account
|
||||
72. https://funlandrehoboth.com/m/account
|
||||
73. https://funlandrehoboth.com/m/account
|
||||
74. https://funlandrehoboth.com/schedule
|
||||
75. https://funlandrehoboth.com/tickets
|
||||
76. https://funlandrehoboth.com/seasonal-rides/-games
|
||||
77. https://funlandrehoboth.com/rides
|
||||
78. https://funlandrehoboth.com/games
|
||||
79. https://funlandrehoboth.com/park-information
|
||||
80. javascript: window.frameElement.getAttribute("srcdoc");
|
||||
81. https://www.youtube.com/watch?v=7sB9vcZvigA
|
||||
82. http://www.youtube.com/watch?v=eyftYi7p4zs
|
||||
83. http://capegazette.villagesoup.com/p/rehoboths-funland-marks-50-years-of-thrills/104065
|
||||
84. https://funlandrehoboth.com/seasonal-rides/-games
|
||||
85. https://funlandrehoboth.com/park-policies
|
||||
86. https://funlandrehoboth.com/rider-safety-guide
|
||||
87. https://funlandrehoboth.com/contact-us
|
||||
88. https://funlandrehoboth.com/subscribe
|
||||
References:
|
||||
|
||||
Hidden links:
|
||||
90. https://funlandrehoboth.com/schedule
|
||||
91. https://funlandrehoboth.com/
|
||||
92. https://funlandrehoboth.com/
|
||||
93. https://funlandrehoboth.com/
|
||||
94. https://funlandrehoboth.com/
|
||||
95. https://funlandrehoboth.com/
|
||||
96. https://funlandrehoboth.com/
|
||||
97. https://funlandrehoboth.com/
|
||||
98. https://funlandrehoboth.com/
|
||||
99. https://funlandrehoboth.com/
|
||||
100. https://funlandrehoboth.com/
|
||||
101. https://funlandrehoboth.com/
|
||||
102. https://funlandrehoboth.com/
|
||||
103. https://www.facebook.com/Funland.RehobothBeach?fref=ts
|
||||
104. https://www.instagram.com/funlandrehoboth/
|
||||
105. https://www.twitter.com/FunlandRehoboth
|
||||
[1] https://funlandrehoboth.com/schedule
|
||||
[2] https://funlandrehoboth.com/
|
||||
[3] https://funlandrehoboth.com/#
|
||||
[4] https://funlandrehoboth.com/park-information
|
||||
[5] https://funlandrehoboth.com/rides
|
||||
[6] https://funlandrehoboth.com/games
|
||||
[7] https://funlandrehoboth.com/retail-%26-food
|
||||
[8] https://funlandrehoboth.com/schedule
|
||||
[9] https://funlandrehoboth.com/#
|
||||
[10] https://funlandrehoboth.com/employee-testimonials
|
||||
[11] https://funlandrehoboth.com/seasonal-rides%2F-games
|
||||
[12] https://funlandrehoboth.com/maintenance-manager
|
||||
[13] https://funlandrehoboth.com/maintenance-mechanic
|
||||
[14] https://funlandrehoboth.com/seasonal-park-cleaner
|
||||
[15] https://funlandrehoboth.com/#
|
||||
[16] https://funlandrehoboth.com/tickets
|
||||
[17] https://funlandrehoboth.com/height-restrictions
|
||||
[18] https://funlandrehoboth.com/photos
|
||||
[19] https://funlandrehoboth.com/contact-us
|
||||
[20] https://funlandrehoboth.com/report-a-lost-item
|
||||
[21] https://funlandrehoboth.com/
|
||||
[22] https://funlandrehoboth.com/
|
||||
[23] https://funlandrehoboth.com/#
|
||||
[24] https://funlandrehoboth.com/park-information
|
||||
[25] https://funlandrehoboth.com/rides
|
||||
[26] https://funlandrehoboth.com/games
|
||||
[27] https://funlandrehoboth.com/retail-%26-food
|
||||
[28] https://funlandrehoboth.com/schedule
|
||||
[29] https://funlandrehoboth.com/#
|
||||
[30] https://funlandrehoboth.com/employee-testimonials
|
||||
[31] https://funlandrehoboth.com/seasonal-rides%2F-games
|
||||
[32] https://funlandrehoboth.com/maintenance-manager
|
||||
[33] https://funlandrehoboth.com/maintenance-mechanic
|
||||
[34] https://funlandrehoboth.com/seasonal-park-cleaner
|
||||
[35] https://funlandrehoboth.com/#
|
||||
[36] https://funlandrehoboth.com/tickets
|
||||
[37] https://funlandrehoboth.com/height-restrictions
|
||||
[38] https://funlandrehoboth.com/photos
|
||||
[39] https://funlandrehoboth.com/contact-us
|
||||
[40] https://funlandrehoboth.com/report-a-lost-item
|
||||
[41] https://funlandrehoboth.com/#
|
||||
[42] https://funlandrehoboth.com/
|
||||
[43] https://funlandrehoboth.com/park-information
|
||||
[44] https://funlandrehoboth.com/rides
|
||||
[45] https://funlandrehoboth.com/games
|
||||
[46] https://funlandrehoboth.com/retail-%26-food
|
||||
[47] https://funlandrehoboth.com/schedule
|
||||
[48] https://funlandrehoboth.com/employee-testimonials
|
||||
[49] https://funlandrehoboth.com/seasonal-rides%2F-games
|
||||
[50] https://funlandrehoboth.com/maintenance-manager
|
||||
[51] https://funlandrehoboth.com/maintenance-mechanic
|
||||
[52] https://funlandrehoboth.com/seasonal-park-cleaner
|
||||
[53] https://funlandrehoboth.com/tickets
|
||||
[54] https://funlandrehoboth.com/height-restrictions
|
||||
[55] https://funlandrehoboth.com/photos
|
||||
[56] https://funlandrehoboth.com/contact-us
|
||||
[57] https://funlandrehoboth.com/report-a-lost-item
|
||||
[58] https://funlandrehoboth.com/#
|
||||
[59] https://funlandrehoboth.com/#
|
||||
[60] https://funlandrehoboth.com/m/account
|
||||
[61] https://funlandrehoboth.com/m/account
|
||||
[62] https://funlandrehoboth.com/m/account
|
||||
[63] https://funlandrehoboth.com/#
|
||||
[64] https://funlandrehoboth.com/
|
||||
[65] https://funlandrehoboth.com/
|
||||
[66] https://funlandrehoboth.com/#
|
||||
[67] https://funlandrehoboth.com/park-information
|
||||
[68] https://funlandrehoboth.com/rides
|
||||
[69] https://funlandrehoboth.com/games
|
||||
[70] https://funlandrehoboth.com/retail-%26-food
|
||||
[71] https://funlandrehoboth.com/schedule
|
||||
[72] https://funlandrehoboth.com/#
|
||||
[73] https://funlandrehoboth.com/employee-testimonials
|
||||
[74] https://funlandrehoboth.com/seasonal-rides%2F-games
|
||||
[75] https://funlandrehoboth.com/maintenance-manager
|
||||
[76] https://funlandrehoboth.com/maintenance-mechanic
|
||||
[77] https://funlandrehoboth.com/seasonal-park-cleaner
|
||||
[78] https://funlandrehoboth.com/#
|
||||
[79] https://funlandrehoboth.com/tickets
|
||||
[80] https://funlandrehoboth.com/height-restrictions
|
||||
[81] https://funlandrehoboth.com/photos
|
||||
[82] https://funlandrehoboth.com/contact-us
|
||||
[83] https://funlandrehoboth.com/report-a-lost-item
|
||||
[84] https://funlandrehoboth.com/m/account
|
||||
[85] https://funlandrehoboth.com/m/account
|
||||
[86] https://funlandrehoboth.com/m/account
|
||||
[87] https://funlandrehoboth.com/schedule
|
||||
[88] https://funlandrehoboth.com/tickets
|
||||
[89] https://funlandrehoboth.com/seasonal-rides%2F-games
|
||||
[90] https://funlandrehoboth.com/rides
|
||||
[91] https://funlandrehoboth.com/games
|
||||
[92] https://funlandrehoboth.com/park-information
|
||||
[93] https://www.youtube.com/watch?v=7sB9vcZvigA
|
||||
[94] http://www.youtube.com/watch?v=eyftYi7p4zs
|
||||
[95] http://capegazette.villagesoup.com/p/rehoboths-funland-marks-50-years-of-thrills/104065
|
||||
[98] https://funlandrehoboth.com/seasonal-rides%2F-games
|
||||
[99] https://funlandrehoboth.com/park-policies
|
||||
[100] https://funlandrehoboth.com/rider-safety-guide
|
||||
[101] https://funlandrehoboth.com/contact-us
|
||||
[102] https://funlandrehoboth.com/subscribe
|
||||
[103] https://www.facebook.com/Funland.RehobothBeach?fref=ts
|
||||
[104] https://www.instagram.com/funlandrehoboth/
|
||||
[105] https://www.twitter.com/FunlandRehoboth
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,165 +1,153 @@
|
||||
#[1]inkdroid
|
||||
|
||||
(BUTTON)
|
||||
* [2]Home
|
||||
* [3]About
|
||||
* [4]Tags
|
||||
* [5]Bookmarks
|
||||
* [6]Photos
|
||||
* [7]Podcasts
|
||||
* [8]Music
|
||||
* [9]Software
|
||||
* [10]Mastodon
|
||||
* [11]Talks
|
||||
* [12]Web Archives
|
||||
* [13]Feed
|
||||
* [14]🎁
|
||||
• [2]Home
|
||||
• [3]About
|
||||
• [4]Tags
|
||||
• [5]Bookmarks
|
||||
• [6]Photos
|
||||
• [7]Podcasts
|
||||
• [8]Music
|
||||
• [9]Software
|
||||
• [10]Mastodon
|
||||
• [11]Talks
|
||||
• [12]Web Archives
|
||||
• [13]Feed
|
||||
• [14]🎁
|
||||
|
||||
Why I don't use Copilot
|
||||
|
||||
June 4, 2023
|
||||
[15]programming [16]artificial-intelligence
|
||||
__________________________________________________________________
|
||||
|
||||
TL;DR Don’t install Copilot. It rots your brain and destroys the
|
||||
environment.
|
||||
__________________________________________________________________
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
[rubber-duck.jpg] [17]A rubber duck in use by a developer to aid code
|
||||
review
|
||||
TL;DR Don’t install Copilot. It rots your brain and destroys the environment.
|
||||
|
||||
[18]GitHub Copilot is a technology that is designed to help you write
|
||||
code, kind of like your partner in [19]pair programming. But, you know,
|
||||
it’s not an actual person. It’s “A.I.”–whatever that means.
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
[rubber-duc] [17]A rubber duck in use by a developer to aid code review
|
||||
|
||||
In principle this sounds like it might actually be a good thing right?
|
||||
I know several people, who I respect, that use it as part of their
|
||||
daily work. I’ve heard [20]smart people say AI coding assistants like
|
||||
Copilot will democratize programming, by making it possible for more
|
||||
people to write code, and automate the drudgery out of their lives. I’m
|
||||
not convinced.
|
||||
[18]GitHub Copilot is a technology that is designed to help you write code,
|
||||
kind of like your partner in [19]pair programming. But, you know, it’s not an
|
||||
actual person. It’s “A.I.”–whatever that means.
|
||||
|
||||
In principle this sounds like it might actually be a good thing right? I know
|
||||
several people, who I respect, that use it as part of their daily work. I’ve
|
||||
heard [20]smart people say AI coding assistants like Copilot will democratize
|
||||
programming, by making it possible for more people to write code, and automate
|
||||
the drudgery out of their lives. I’m not convinced.
|
||||
|
||||
Here’s why I don’t use Copilot (or ChatGPT) to write code:
|
||||
1. Copilot’s suggestions are based on a corpus of open source code in
|
||||
GitHub, but the suggestions do not mention where the code came
|
||||
from, and what the license is. GitHub is stealing and selling
|
||||
intellectual property.
|
||||
2. Copilot lets you write code faster. I don’t think more code is a
|
||||
good thing. The more code there is, the more code there is to
|
||||
maintain. Minimalism in features is usually a good thing too. Less
|
||||
really is more.
|
||||
3. As more and more programmers use Copilot it creates conservativism
|
||||
in languages and frameworks that prevents people from creating and
|
||||
learning new ways of doing things. Collectively, we get even more
|
||||
stuck in our ways and biases. Some of the biases encoded into LLMs
|
||||
are things that we are actively trying to [21]change.
|
||||
4. Developers become dependent on Copilot for intellectual work.
|
||||
Actually, maybe addicted is a better word here. The same could be
|
||||
(and was) said about the effect of search engines on software
|
||||
development work (e.g. Googling error messages). But the difference
|
||||
is that search results need to be interpreted, and the resulting
|
||||
web pages have important context that you often need to understand.
|
||||
This is work that Copilot optimizes away and truncates our
|
||||
knowledge in the process.
|
||||
5. Copilot costs money. It doesn’t cost tons of money (for a
|
||||
professional person in the USA) but it could be significant for
|
||||
some. Who does it privilege? Also, it could change (see point 4).
|
||||
Remember who owns this thing.
|
||||
6. How much [22]energy does it take to run Copilot as millions of
|
||||
developers outsource their intellectual work to its LLM
|
||||
infrastructure? Is this massive centralization and enclosure really
|
||||
progress in computing? Or is it a [23]step backwards as we try to
|
||||
[24]reduce our energy use as a species?
|
||||
7. What does Copilot see of the code in your editor? Does it use your
|
||||
code as context for the prompt? What does it store, and remember,
|
||||
and give to others? Somebody has probably looked into this, but if
|
||||
they have it is always up for revision. Just out of principle I
|
||||
don’t want my editor sending my code somewhere else without me
|
||||
intentionally doing it.
|
||||
|
||||
1. Copilot’s suggestions are based on a corpus of open source code in GitHub,
|
||||
but the suggestions do not mention where the code came from, and what the
|
||||
license is. GitHub is stealing and selling intellectual property.
|
||||
2. Copilot lets you write code faster. I don’t think more code is a good
|
||||
thing. The more code there is, the more code there is to maintain.
|
||||
Minimalism in features is usually a good thing too. Less really is more.
|
||||
3. As more and more programmers use Copilot it creates conservativism in
|
||||
languages and frameworks that prevents people from creating and learning
|
||||
new ways of doing things. Collectively, we get even more stuck in our ways
|
||||
and biases. Some of the biases encoded into LLMs are things that we are
|
||||
actively trying to [21]change.
|
||||
4. Developers become dependent on Copilot for intellectual work. Actually,
|
||||
maybe addicted is a better word here. The same could be (and was) said
|
||||
about the effect of search engines on software development work
|
||||
(e.g. Googling error messages). But the difference is that search results
|
||||
need to be interpreted, and the resulting web pages have important context
|
||||
that you often need to understand. This is work that Copilot optimizes away
|
||||
and truncates our knowledge in the process.
|
||||
5. Copilot costs money. It doesn’t cost tons of money (for a professional
|
||||
person in the USA) but it could be significant for some. Who does it
|
||||
privilege? Also, it could change (see point 4). Remember who owns this
|
||||
thing.
|
||||
6. How much [22]energy does it take to run Copilot as millions of developers
|
||||
outsource their intellectual work to its LLM infrastructure? Is this
|
||||
massive centralization and enclosure really progress in computing? Or is it
|
||||
a [23]step backwards as we try to [24]reduce our energy use as a species?
|
||||
7. What does Copilot see of the code in your editor? Does it use your code as
|
||||
context for the prompt? What does it store, and remember, and give to
|
||||
others? Somebody has probably looked into this, but if they have it is
|
||||
always up for revision. Just out of principle I don’t want my editor
|
||||
sending my code somewhere else without me intentionally doing it.
|
||||
8. Working with others who use Copilot makes my job harder, since they
|
||||
sometimes don’t really understand the details of why the code is
|
||||
written a particular way. Over time Copilot code can mix idioms,
|
||||
styles and approaches, in ways that the developer doesn’t really
|
||||
understand or even recognize. This makes maintenance harder.
|
||||
sometimes don’t really understand the details of why the code is written a
|
||||
particular way. Over time Copilot code can mix idioms, styles and
|
||||
approaches, in ways that the developer doesn’t really understand or even
|
||||
recognize. This makes maintenance harder.
|
||||
|
||||
As far as I can tell the only redeeming qualities of Copilot are:
|
||||
1. Copilot encourages you to articulate and describe a problem as
|
||||
written prose before starting to write code. You don’t need Copilot
|
||||
for this. Maybe keep a work journal or write a [25]design document?
|
||||
Maybe use your issue tracker? Use [26]text to communicate with
|
||||
other people.
|
||||
2. Copilot is more interactive than a [27]rubber duck. But, it turns
|
||||
out Actual People are even more interactive and surprising. Reach
|
||||
out to other professionals and make some friends. Go to workshops
|
||||
and conferences.
|
||||
3. I could be convinced that Copilot has a useful place in the
|
||||
[28]review of code rather than the first draft of code. It wouldn’t
|
||||
be a replacement for review by people, but I believe it could
|
||||
potentially help people do the review. I don’t think this exists
|
||||
yet?
|
||||
4. Copilot makes me think critically about machine learning
|
||||
technology, my profession and its place in the world.
|
||||
|
||||
Maybe my thinking on this will change. But I doubt it. I’m on the older
|
||||
side for a software developer, and (hopefully) will retire some day.
|
||||
Maybe people like me are on the way out, and writing code with Copilot
|
||||
and ChatGPT is the future. Maybe programming has always been about
|
||||
increasing layers of abstraction and this is just the next logical
|
||||
layer. I really hope not.
|
||||
1. Copilot encourages you to articulate and describe a problem as written
|
||||
prose before starting to write code. You don’t need Copilot for this. Maybe
|
||||
keep a work journal or write a [25]design document? Maybe use your issue
|
||||
tracker? Use [26]text to communicate with other people.
|
||||
2. Copilot is more interactive than a [27]rubber duck. But, it turns out
|
||||
Actual People are even more interactive and surprising. Reach out to other
|
||||
professionals and make some friends. Go to workshops and conferences.
|
||||
3. I could be convinced that Copilot has a useful place in the [28]review of
|
||||
code rather than the first draft of code. It wouldn’t be a replacement for
|
||||
review by people, but I believe it could potentially help people do the
|
||||
review. I don’t think this exists yet?
|
||||
4. Copilot makes me think critically about machine learning technology, my
|
||||
profession and its place in the world.
|
||||
|
||||
I enjoy programming because it’s about reasoning, thinking, models,
|
||||
concepts, expression, communication, ethics, reading, learning, making,
|
||||
and process. It’s an art and a practice that is best done with other
|
||||
people.
|
||||
Maybe my thinking on this will change. But I doubt it. I’m on the older side
|
||||
for a software developer, and (hopefully) will retire some day. Maybe people
|
||||
like me are on the way out, and writing code with Copilot and ChatGPT is the
|
||||
future. Maybe programming has always been about increasing layers of
|
||||
abstraction and this is just the next logical layer. I really hope not.
|
||||
|
||||
Increasingly I think it’s imperative for programming to be done more
|
||||
slowly, more deliberatively, and as part of more conversations with
|
||||
more people. The furious automation of everything is eating the world.
|
||||
I enjoy programming because it’s about reasoning, thinking, models, concepts,
|
||||
expression, communication, ethics, reading, learning, making, and process. It’s
|
||||
an art and a practice that is best done with other people.
|
||||
|
||||
Programs need to run more efficiently. Programs need to be well
|
||||
understood, by a more diverse and varied set of people. Programs need
|
||||
to be robust and resilient. Programs need to be easier to change.
|
||||
Increasingly I think it’s imperative for programming to be done more slowly,
|
||||
more deliberatively, and as part of more conversations with more people. The
|
||||
furious automation of everything is eating the world.
|
||||
|
||||
Can Copilot help with these [29]goals? I think the answer is no,
|
||||
because it doesn’t actually understand anything, and more importantly,
|
||||
it doesn’t promote understanding.
|
||||
__________________________________________________________________
|
||||
Programs need to run more efficiently. Programs need to be well understood, by
|
||||
a more diverse and varied set of people. Programs need to be robust and
|
||||
resilient. Programs need to be easier to change.
|
||||
|
||||
Update (2023-06-09): For another take on Copilot that uses this post as
|
||||
a jumping off point see Vivek Haldar’s [30]Re: Why I don’t use Copilot.
|
||||
Can Copilot help with these [29]goals? I think the answer is no, because it
|
||||
doesn’t actually understand anything, and more importantly, it doesn’t promote
|
||||
understanding.
|
||||
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
Update (2023-06-09): For another take on Copilot that uses this post as a
|
||||
jumping off point see Vivek Haldar’s [30]Re: Why I don’t use Copilot.
|
||||
|
||||
Unless otherwise noted all the content here is licensed [31]CC-BY
|
||||
|
||||
References
|
||||
|
||||
1. https://inkdroid.org/feed.xml
|
||||
2. https://inkdroid.org/
|
||||
3. https://inkdroid.org/about/
|
||||
4. https://inkdroid.org/tags/
|
||||
5. http://pinboard.in/u:edsu
|
||||
6. https://www.flickr.com/photos/inkdroid
|
||||
7. https://inkdroid.org/podcasts/feed.opml
|
||||
8. https://bandcamp.com/edsu
|
||||
9. https://github.com/edsu
|
||||
10. https://social.coop/@edsu
|
||||
11. https://inkdroid.org/talks/
|
||||
12. https://inkdroid.org/web-archives/archives/
|
||||
13. https://inkdroid.org/feed.xml
|
||||
14. https://bookshop.org/wishlists/d7c0224f5440df8d2c174ad2cc38b3fca1aa813f
|
||||
15. https://inkdroid.org/tag/programming
|
||||
16. https://inkdroid.org/tag/artificial-intelligence
|
||||
17. https://commons.wikimedia.org/wiki/File:Rubber_duck_assisting_with_debugging.jpg
|
||||
18. https://en.wikipedia.org/wiki/GitHub_Copilot
|
||||
19. https://en.wikipedia.org/wiki/Pair_programming
|
||||
20. https://changelog.com/podcast/534
|
||||
21. https://www.wired.com/story/tech-confronts-use-labels-master-slave/
|
||||
22. https://dl.acm.org/doi/pdf/10.1145/3442188.3445922
|
||||
23. https://www.washingtonpost.com/technology/2023/06/05/chatgpt-hidden-cost-gpu-compute/
|
||||
24. https://www.jasonhickel.org/less-is-more
|
||||
25. https://en.wikipedia.org/wiki/Software_design_description
|
||||
26. https://graydon2.dreamwidth.org/193447.html
|
||||
27. https://en.wikipedia.org/wiki/Rubber_duck_debugging
|
||||
28. https://en.wikipedia.org/wiki/Code_review
|
||||
29. https://permacomputing.net/
|
||||
30. https://vivekhaldar.com/articles/re--why-i-don-t-use-copilot/
|
||||
31. https://creativecommons.org/licenses/by/4.0/
|
||||
References:
|
||||
|
||||
[2] https://inkdroid.org/
|
||||
[3] https://inkdroid.org/about/
|
||||
[4] https://inkdroid.org/tags/
|
||||
[5] http://pinboard.in/u:edsu
|
||||
[6] https://www.flickr.com/photos/inkdroid
|
||||
[7] https://inkdroid.org/podcasts/feed.opml
|
||||
[8] https://bandcamp.com/edsu
|
||||
[9] https://github.com/edsu
|
||||
[10] https://social.coop/@edsu
|
||||
[11] https://inkdroid.org/talks/
|
||||
[12] https://inkdroid.org/web-archives/archives/
|
||||
[13] https://inkdroid.org/feed.xml
|
||||
[14] https://bookshop.org/wishlists/d7c0224f5440df8d2c174ad2cc38b3fca1aa813f
|
||||
[15] https://inkdroid.org/tag/programming
|
||||
[16] https://inkdroid.org/tag/artificial-intelligence
|
||||
[17] https://commons.wikimedia.org/wiki/File:Rubber_duck_assisting_with_debugging.jpg
|
||||
[18] https://en.wikipedia.org/wiki/GitHub_Copilot
|
||||
[19] https://en.wikipedia.org/wiki/Pair_programming
|
||||
[20] https://changelog.com/podcast/534
|
||||
[21] https://www.wired.com/story/tech-confronts-use-labels-master-slave/
|
||||
[22] https://dl.acm.org/doi/pdf/10.1145/3442188.3445922
|
||||
[23] https://www.washingtonpost.com/technology/2023/06/05/chatgpt-hidden-cost-gpu-compute/
|
||||
[24] https://www.jasonhickel.org/less-is-more
|
||||
[25] https://en.wikipedia.org/wiki/Software_design_description
|
||||
[26] https://graydon2.dreamwidth.org/193447.html
|
||||
[27] https://en.wikipedia.org/wiki/Rubber_duck_debugging
|
||||
[28] https://en.wikipedia.org/wiki/Code_review
|
||||
[29] https://permacomputing.net/
|
||||
[30] https://vivekhaldar.com/articles/re--why-i-don-t-use-copilot/
|
||||
[31] https://creativecommons.org/licenses/by/4.0/
|
||||
|
||||
@@ -1,113 +1,109 @@
|
||||
#[1]alternate
|
||||
|
||||
IFRAME: [2]https://www.googletagmanager.com/ns.html?id=GTM-NBN52P
|
||||
|
||||
[3]Skip to main content
|
||||
|
||||
Search ______________________________
|
||||
Search
|
||||
[1] Skip to main content
|
||||
Search [2][ ]
|
||||
[3][Search]
|
||||
[4] Home
|
||||
Main navigation Menu
|
||||
|
||||
Main navigation (BUTTON) Menu
|
||||
* [5]Who we are
|
||||
+ [6]About Inviqa
|
||||
+ [7]About Havas
|
||||
+ [8]Our Sustainability Journey
|
||||
* [9]What we do
|
||||
+ [10]Digital Strategy Consulting
|
||||
+ [11]Digital Roadmap Development
|
||||
+ [12]Digital Product Design
|
||||
+ [13]User Research
|
||||
+ [14]Usability Testing
|
||||
+ [15]Technical Architecture Consulting & Development
|
||||
+ [16]Digital Platform Implementation
|
||||
+ [17]Experience Optimisation
|
||||
+ [18]All services
|
||||
* [19]Case studies
|
||||
+ [20]B2B case studies
|
||||
+ [21]Fashion & Luxury case studies
|
||||
+ [22]Not-For-Profit case studies
|
||||
+ [23]Retail & DTC case studies
|
||||
+ [24]Sport, Leisure & Entertainment case studies
|
||||
+ [25]Travel & Hotels case studies
|
||||
+ [26]All case studies
|
||||
* [27]Partners
|
||||
+ [28]Akeneo
|
||||
+ [29]BigCommerce
|
||||
+ [30]Drupal
|
||||
+ [31]Magento / Adobe Commerce
|
||||
+ [32]Spryker
|
||||
+ [33]All partners
|
||||
* [34]Careers
|
||||
+ [35]Life at Inviqa
|
||||
+ [36]Current Vacancies
|
||||
* [37]Insights
|
||||
+ [38]DTC Ecommerce Report 2023
|
||||
+ [39]PIM Readiness Framework
|
||||
+ [40]Retail Optimisation Whitepaper
|
||||
+ [41]Blog
|
||||
+ [42]All insights
|
||||
* [43]Contact
|
||||
+ [44]Get in Touch
|
||||
• [6]Who we are
|
||||
□ [7]About Inviqa
|
||||
□ [8]About Havas
|
||||
□ [9]Our Sustainability Journey
|
||||
• [10]What we do
|
||||
□ [11]Digital Strategy Consulting
|
||||
□ [12]Digital Roadmap Development
|
||||
□ [13]Digital Product Design
|
||||
□ [14]User Research
|
||||
□ [15]Usability Testing
|
||||
□ [16]Technical Architecture Consulting & Development
|
||||
□ [17]Digital Platform Implementation
|
||||
□ [18]Experience Optimisation
|
||||
□ [19]All services
|
||||
• [20]Case studies
|
||||
□ [21]B2B case studies
|
||||
□ [22]Fashion & Luxury case studies
|
||||
□ [23]Not-For-Profit case studies
|
||||
□ [24]Retail & DTC case studies
|
||||
□ [25]Sport, Leisure & Entertainment case studies
|
||||
□ [26]Travel & Hotels case studies
|
||||
□ [27]All case studies
|
||||
• [28]Partners
|
||||
□ [29]Akeneo
|
||||
□ [30]BigCommerce
|
||||
□ [31]Drupal
|
||||
□ [32]Magento / Adobe Commerce
|
||||
□ [33]Spryker
|
||||
□ [34]All partners
|
||||
• [35]Careers
|
||||
□ [36]Life at Inviqa
|
||||
□ [37]Current Vacancies
|
||||
• [38]Insights
|
||||
□ [39]DTC Ecommerce Report 2023
|
||||
□ [40]PIM Readiness Framework
|
||||
□ [41]Retail Optimisation Whitepaper
|
||||
□ [42]Blog
|
||||
□ [43]All insights
|
||||
• [44]Contact
|
||||
□ [45]Get in Touch
|
||||
|
||||
* [45]EN
|
||||
* [46]DE
|
||||
• [46] EN
|
||||
• [47] DE
|
||||
|
||||
Storing graphs in the database: SQL meets social network
|
||||
|
||||
By Lorenzo Alberton
|
||||
7 September 2009 [47]Technology engineering
|
||||
7 September 2009 [48]Technology engineering
|
||||
|
||||
Graphs are ubiquitous. Social or P2P networks, thesauri, route planning
|
||||
systems, recommendation systems, collaborative filtering, even the
|
||||
World Wide Web itself is ultimately a graph!
|
||||
systems, recommendation systems, collaborative filtering, even the World Wide
|
||||
Web itself is ultimately a graph!
|
||||
|
||||
Given their importance, it's surely worth spending some time in
|
||||
studying some algorithms and models to represent and work with them
|
||||
effectively. In this short article, we're going to see how we can store
|
||||
a graph in a DBMS. Given how much attention my talk about storing a
|
||||
tree data structure in the db received, it's probably going to be
|
||||
interesting to many. Unfortunately, the Tree models/techniques do not
|
||||
apply to generic graphs, so let's discover how we can deal with them.
|
||||
Given their importance, it's surely worth spending some time in studying some
|
||||
algorithms and models to represent and work with them effectively. In this
|
||||
short article, we're going to see how we can store a graph in a DBMS. Given how
|
||||
much attention my talk about storing a tree data structure in the db received,
|
||||
it's probably going to be interesting to many. Unfortunately, the Tree models/
|
||||
techniques do not apply to generic graphs, so let's discover how we can deal
|
||||
with them.
|
||||
|
||||
What's a graph
|
||||
|
||||
A graph is a set of nodes (vertices) interconnected by links (edges).
|
||||
When the edges have no orientation, the graph is called an undirected
|
||||
graph. In contrast, a graph where the edges have a specific orientation
|
||||
from a node to another is called directed:
|
||||
A graph is a set of nodes (vertices) interconnected by links (edges). When the
|
||||
edges have no orientation, the graph is called an undirected graph. In
|
||||
contrast, a graph where the edges have a specific orientation from a node to
|
||||
another is called directed:
|
||||
|
||||
" "
|
||||
|
||||
A graph is called complete when there's an edge between any two
|
||||
nodes, dense when the number of edges is close to the maximal number of
|
||||
edges, and sparse when it has only a few edges:
|
||||
A graph is called complete when there's an edge between any two nodes, dense
|
||||
when the number of edges is close to the maximal number of edges, and sparse
|
||||
when it has only a few edges:
|
||||
|
||||
" "
|
||||
|
||||
Representing a graph
|
||||
|
||||
Two main data structures for the representation of graphs are used in
|
||||
practice. The first is called an adjacency list, and is implemented as
|
||||
an array with one linked list for each source node, containing the
|
||||
destination nodes of the edges that leave each node. The second is a
|
||||
two-dimensional boolean adjacency matrix, in which the rows and columns
|
||||
are the source and destination vertices, and entries in the array
|
||||
indicate whether an edge exists between the vertices. Adjacency lists
|
||||
are preferred for sparse graphs; otherwise, an adjacency matrix is a
|
||||
good choice. [1]
|
||||
Two main data structures for the representation of graphs are used in practice.
|
||||
The first is called an adjacency list, and is implemented as an array with one
|
||||
linked list for each source node, containing the destination nodes of the edges
|
||||
that leave each node. The second is a two-dimensional boolean adjacency matrix,
|
||||
in which the rows and columns are the source and destination vertices, and
|
||||
entries in the array indicate whether an edge exists between the vertices.
|
||||
Adjacency lists are preferred for sparse graphs; otherwise, an adjacency matrix
|
||||
is a good choice. [1]
|
||||
|
||||
" "" "
|
||||
|
||||
When dealing with databases, most of the times the adjacency matrix is
|
||||
not a viable option, for two reasons: there is a hard limit in the
|
||||
number of columns that a table can have, and adding or removing a node
|
||||
requires a DDL statement.
|
||||
When dealing with databases, most of the times the adjacency matrix is not a
|
||||
viable option, for two reasons: there is a hard limit in the number of columns
|
||||
that a table can have, and adding or removing a node requires a DDL statement.
|
||||
|
||||
Joe Celko dedicates a short chapter to graphs in his '[48]SQL for
|
||||
Smarties' book, but the topic is treated in a quite hasty way, which is
|
||||
surprising given his usual high standards.
|
||||
Joe Celko dedicates a short chapter to graphs in his '[49]SQL for Smarties'
|
||||
book, but the topic is treated in a quite hasty way, which is surprising given
|
||||
his usual high standards.
|
||||
|
||||
One of the basic rules of a successful representation is to separate the nodes
|
||||
and the edges, to avoid [50]DKNF problems. Thus, we create two tables:
|
||||
|
||||
One of the basic rules of a successful representation is to separate
|
||||
the nodes and the edges, to avoid [49]DKNF problems. Thus, we create
|
||||
two tables:
|
||||
CREATE TABLE nodes (
|
||||
id INTEGER PRIMARY KEY,
|
||||
name VARCHAR(10) NOT NULL,
|
||||
@@ -125,19 +121,18 @@ CREATE INDEX a_idx ON edges (a);
|
||||
CREATE INDEX b_idx ON edges (b);
|
||||
|
||||
The first table (nodes) contains the actual node payload, with all the
|
||||
interesting information we need to store about a node (in the
|
||||
example, feat1 and feat2 represent two node features, like the age of
|
||||
the person, or the location, etc.).
|
||||
interesting information we need to store about a node (in the example, feat1
|
||||
and feat2 represent two node features, like the age of the person, or the
|
||||
location, etc.).
|
||||
|
||||
If we want to represent an undirected graph, we need to add a CHECK
|
||||
constraint on the uniqueness of the pair.
|
||||
If we want to represent an undirected graph, we need to add a CHECK constraint
|
||||
on the uniqueness of the pair.
|
||||
|
||||
Since the SQL standard does not allow a subquery in the CHECK
|
||||
constraint, we first create a function and then we use it in the CHECK
|
||||
constraint (this example is for PostgreSQL, but can be easily ported to
|
||||
other DBMS):
|
||||
CREATE FUNCTION check_unique_pair(IN id1 INTEGER, IN id2 INTEGER) RETURNS INTEGE
|
||||
R AS $body$
|
||||
Since the SQL standard does not allow a subquery in the CHECK constraint, we
|
||||
first create a function and then we use it in the CHECK constraint (this
|
||||
example is for PostgreSQL, but can be easily ported to other DBMS):
|
||||
|
||||
CREATE FUNCTION check_unique_pair(IN id1 INTEGER, IN id2 INTEGER) RETURNS INTEGER AS $body$
|
||||
DECLARE retval INTEGER DEFAULT 0;
|
||||
BEGIN
|
||||
SELECT COUNT(*) INTO retval FROM (
|
||||
@@ -150,31 +145,32 @@ END
|
||||
$body$
|
||||
LANGUAGE 'plpgsql';
|
||||
|
||||
ALTER TABLE edges ADD CONSTRAINT unique_pair CHECK (check_unique_pair(a, b) < 1)
|
||||
;
|
||||
ALTER TABLE edges ADD CONSTRAINT unique_pair CHECK (check_unique_pair(a, b) < 1);
|
||||
|
||||
NB: a UDF in a CHECK constraint might be a bit slow [4]. An alternative
|
||||
is to have a materialized view [5] or force an order in the node pair
|
||||
(i.e. "CHECK (a < b)", and then using a stored procedure to insert the
|
||||
nodes in the correct order).
|
||||
NB: a UDF in a CHECK constraint might be a bit slow [4]. An alternative is to
|
||||
have a materialized view [5] or force an order in the node pair (i.e. "CHECK (a
|
||||
< b)", and then using a stored procedure to insert the nodes in the correct
|
||||
order).
|
||||
|
||||
If we also want to prevent self-loops (i.e. a node linking to itself), we can
|
||||
add another CHECK constraint:
|
||||
|
||||
If we also want to prevent self-loops (i.e. a node linking to itself),
|
||||
we can add another CHECK constraint:
|
||||
ALTER TABLE edges ADD CONSTRAINT no_self_loop CHECK (a <> b)
|
||||
|
||||
" "" "
|
||||
|
||||
Traversing the graph
|
||||
|
||||
Now that we know how to store the graph, we might want to know which
|
||||
nodes are connected. Listing the directly connected nodes is very
|
||||
simple:
|
||||
Now that we know how to store the graph, we might want to know which nodes are
|
||||
connected. Listing the directly connected nodes is very simple:
|
||||
|
||||
SELECT *
|
||||
FROM nodes n
|
||||
LEFT JOIN edges e ON n.id = e.b
|
||||
WHERE e.a = 1; -- retrieve nodes connected to node 1
|
||||
|
||||
or, in the case of undirected edges:
|
||||
|
||||
SELECT * FROM nodes WHERE id IN (
|
||||
SELECT a FROM edges WHERE b = 1
|
||||
UNION
|
||||
@@ -189,53 +185,51 @@ SELECT * FROM nodes where id IN (
|
||||
WHERE 1 IN (a, b)
|
||||
);
|
||||
|
||||
Traversing the full graph usually requires more than a query: we can
|
||||
either loop through the connected nodes, one level a time, or we can
|
||||
create a temporary table holding all the possible paths between two
|
||||
nodes.
|
||||
Traversing the full graph usually requires more than a query: we can either
|
||||
loop through the connected nodes, one level a time, or we can create a
|
||||
temporary table holding all the possible paths between two nodes.
|
||||
|
||||
We could use Oracle’s CONNECT BY syntax or SQL standard’s Common Table
|
||||
Expressions (CTEs) to recurse through the nodes, but since the graph
|
||||
can contain loops, we’d get errors (unless we’re very careful, as we’ll
|
||||
see in a moment).
|
||||
Expressions (CTEs) to recurse through the nodes, but since the graph can
|
||||
contain loops, we’d get errors (unless we’re very careful, as we’ll see in a
|
||||
moment).
|
||||
|
||||
Kendall Willets [2] proposes a way of traversing (BFS) the graph using
|
||||
a temporary table. It is quite robust, since it doesn’t fail on graphs
|
||||
with cycles (and when dealing with trees, he shows there are better
|
||||
algorithms available). His solution is just one of the many available,
|
||||
but quite good.
|
||||
Kendall Willets [2] proposes a way of traversing (BFS) the graph using a
|
||||
temporary table. It is quite robust, since it doesn’t fail on graphs with
|
||||
cycles (and when dealing with trees, he shows there are better algorithms
|
||||
available). His solution is just one of the many available, but quite good.
|
||||
|
||||
The problem with temporary tables holding all the possible paths is it
|
||||
has to be maintained. Depending on how frequently the data is accessed
|
||||
and updated it might still be worth it, but it’s quite expensive. If
|
||||
you do resort to such a solution, these references may be of use [13]
|
||||
[14].
|
||||
The problem with temporary tables holding all the possible paths is it has to
|
||||
be maintained. Depending on how frequently the data is accessed and updated it
|
||||
might still be worth it, but it’s quite expensive. If you do resort to such a
|
||||
solution, these references may be of use [13] [14].
|
||||
|
||||
Before going further in our analysis, we need to introduce a new
|
||||
concept: the transitive closure of a graph.
|
||||
Before going further in our analysis, we need to introduce a new concept: the
|
||||
transitive closure of a graph.
|
||||
|
||||
Transitive closure
|
||||
|
||||
The transitive closure of a graph G = (V,E) is a graph G* = (V,E*) such
|
||||
that E* contains an edge (u,v) if and only if G contains a path from u
|
||||
to v.
|
||||
The transitive closure of a graph G = (V,E) is a graph G* = (V,E*) such that E*
|
||||
contains an edge (u,v) if and only if G contains a path from u to v.
|
||||
|
||||
In other words, the transitive closure of a graph is a graph which contains an
|
||||
edge (u,v) whenever there is a directed path from u to v.
|
||||
|
||||
In other words, the transitive closure of a graph is a graph which
|
||||
contains an edge (u,v) whenever there is a directed path from u to v.
|
||||
" "
|
||||
|
||||
Graph: transitive closure
|
||||
Graph: transitive closure
|
||||
|
||||
As already mentioned, SQL has historically been unable [3] to express
|
||||
recursive functions needed to maintain the transitive closure of a
|
||||
graph without an auxiliary table. There are many solutions to solve
|
||||
this problem with a temporary table (some even elegant [2]), but I
|
||||
still haven't found one to do it dynamically.
|
||||
As already mentioned, SQL has historically been unable [3] to express recursive
|
||||
functions needed to maintain the transitive closure of a graph without an
|
||||
auxiliary table. There are many solutions to solve this problem with a
|
||||
temporary table (some even elegant [2]), but I still haven't found one to do it
|
||||
dynamically.
|
||||
|
||||
Here's my clumsy attempt at a possible solution using CTEs
|
||||
|
||||
First, this is how we can write the WITH RECURSIVE statement for a
|
||||
Directed (Cyclic) Graph:
|
||||
First, this is how we can write the WITH RECURSIVE statement for a Directed
|
||||
(Cyclic) Graph:
|
||||
|
||||
WITH RECURSIVE transitive_closure(a, b, distance, path_string) AS
|
||||
( SELECT a, b, 1 AS distance,
|
||||
a || '.' || b || '.' AS path_string
|
||||
@@ -253,15 +247,16 @@ WITH RECURSIVE transitive_closure(a, b, distance, path_string) AS
|
||||
SELECT * FROM transitive_closure
|
||||
ORDER BY a, b, distance;
|
||||
|
||||
Notice the WHERE condition, which stops the recursion in the presence
|
||||
of loops. This is very important to avoid errors.
|
||||
Notice the WHERE condition, which stops the recursion in the presence of loops.
|
||||
This is very important to avoid errors.
|
||||
|
||||
Sample output:
|
||||
|
||||
" "
|
||||
|
||||
This is a slightly modified version of the same query to deal with
|
||||
Undirected graphs (NB: this is probably going to be rather slow if done
|
||||
in real time):
|
||||
This is a slightly modified version of the same query to deal with Undirected
|
||||
graphs (NB: this is probably going to be rather slow if done in real time):
|
||||
|
||||
-- DROP VIEW edges2;
|
||||
CREATE VIEW edges2 (a, b) AS (
|
||||
SELECT a, b FROM edges
|
||||
@@ -287,24 +282,24 @@ ORDER BY a, b, distance;
|
||||
|
||||
Linkedin: Degrees of separation
|
||||
|
||||
One of the fundamental characteristics of networks (or graphs in
|
||||
general) is connectivity. We might want to know how to go from A to B,
|
||||
or how two people are connected, and we also want to know how many
|
||||
"hops" separate two nodes, to have an idea about the distance.
|
||||
One of the fundamental characteristics of networks (or graphs in general) is
|
||||
connectivity. We might want to know how to go from A to B, or how two people
|
||||
are connected, and we also want to know how many "hops" separate two nodes, to
|
||||
have an idea about the distance.
|
||||
|
||||
For instance, social networks like LinkedIN show our connections or
|
||||
search results sorted by degree of separation, and trip planning sites
|
||||
show how many flights you have to take to reach your destination,
|
||||
usually listing direct connections first.
|
||||
For instance, social networks like LinkedIN show our connections or search
|
||||
results sorted by degree of separation, and trip planning sites show how many
|
||||
flights you have to take to reach your destination, usually listing direct
|
||||
connections first.
|
||||
|
||||
There are some database extensions or hybrid solutions like SPARQL on
|
||||
Virtuoso [11] that add a TRANSITIVE clause [12] to make this kind of
|
||||
queries both easy and efficient, but we want to see how to reach the
|
||||
same goal with standard SQL.
|
||||
There are some database extensions or hybrid solutions like SPARQL on Virtuoso
|
||||
[11] that add a TRANSITIVE clause [12] to make this kind of queries both easy
|
||||
and efficient, but we want to see how to reach the same goal with standard SQL.
|
||||
|
||||
As you might guess, this becomes really easy once you have the transitive
|
||||
closure of the graph, we only have to add a WHERE clause specifying what our
|
||||
source and destination nodes are:
|
||||
|
||||
As you might guess, this becomes really easy once you have the
|
||||
transitive closure of the graph, we only have to add a WHERE clause
|
||||
specifying what our source and destination nodes are:
|
||||
WITH RECURSIVE transitive_closure(a, b, distance, path_string) AS
|
||||
( SELECT a, b, 1 AS distance,
|
||||
a || '.' || b || '.' AS path_string
|
||||
@@ -325,18 +320,18 @@ ORDER BY a, b, distance;
|
||||
|
||||
" "
|
||||
|
||||
If we're showing the trip planning results, then we have a list of all
|
||||
possible travel solutions; instead of sorting by distance, we might
|
||||
sort by price or other parameters with little changes.
|
||||
If we're showing the trip planning results, then we have a list of all possible
|
||||
travel solutions; instead of sorting by distance, we might sort by price or
|
||||
other parameters with little changes.
|
||||
|
||||
If we're showing how two people are connected (LinkedIN), then we can
|
||||
limit the result set to the first row, since we're probably interested
|
||||
in showing the shortest distance only and not all the other
|
||||
alternatives.
|
||||
If we're showing how two people are connected (LinkedIN), then we can limit the
|
||||
result set to the first row, since we're probably interested in showing the
|
||||
shortest distance only and not all the other alternatives.
|
||||
|
||||
Instead of adding a LIMIT clause, it's probably more efficient to add "AND
|
||||
tc.distance = 0" to the WHERE clause of the recursive part of the CTE, or a
|
||||
GROUP BY clause as follows:
|
||||
|
||||
Instead of adding a LIMIT clause, it's probably more efficient to add
|
||||
"AND tc.distance = 0" to the WHERE clause of the recursive part of the
|
||||
CTE, or a GROUP BY clause as follows:
|
||||
WITH RECURSIVE transitive_closure(a, b, distance, path_string)
|
||||
AS
|
||||
( SELECT a, b, 1 AS distance,
|
||||
@@ -358,9 +353,10 @@ ORDER BY a, dist, b;
|
||||
|
||||
" "
|
||||
|
||||
If you are interested in the immediate connections of a certain node,
|
||||
then specify the starting node and a distance equals to one (by
|
||||
limiting the recursion at the first level)
|
||||
If you are interested in the immediate connections of a certain node, then
|
||||
specify the starting node and a distance equals to one (by limiting the
|
||||
recursion at the first level)
|
||||
|
||||
WITH RECURSIVE transitive_closure(a, b, distance, path_string) AS
|
||||
( SELECT a, b, 1 AS distance, a || '.' || b || '.' AS path_string
|
||||
FROM edges2
|
||||
@@ -377,16 +373,16 @@ WITH RECURSIVE transitive_closure(a, b, distance, path_string) AS
|
||||
)
|
||||
SELECT b FROM transitive_closure;
|
||||
|
||||
Of course to get the immediate connections there's no need for a
|
||||
recursive query (just use the one presented at the previous paragraph),
|
||||
but I thought I'd show it anyway as a first step towards more complex
|
||||
queries.
|
||||
Of course to get the immediate connections there's no need for a recursive
|
||||
query (just use the one presented at the previous paragraph), but I thought I'd
|
||||
show it anyway as a first step towards more complex queries.
|
||||
|
||||
LinkedIN has a nice feature to show "How this user is connected to you"
|
||||
for non directly connected nodes.
|
||||
LinkedIN has a nice feature to show "How this user is connected to you" for non
|
||||
directly connected nodes.
|
||||
|
||||
If the distance between the two nodes is equal to 2, you can show the shared
|
||||
connections:
|
||||
|
||||
If the distance between the two nodes is equal to 2, you can show the
|
||||
shared connections:
|
||||
SELECT b FROM (
|
||||
|
||||
WITH RECURSIVE transitive_closure(a, b, distance, path_string) AS
|
||||
@@ -426,15 +422,15 @@ SELECT b FROM transitive_closure
|
||||
GROUP BY b
|
||||
HAVING COUNT(b) > 1;
|
||||
|
||||
In the above query, we select the immediate connections of the two
|
||||
nodes separately, and then select the shared ones.
|
||||
In the above query, we select the immediate connections of the two nodes
|
||||
separately, and then select the shared ones.
|
||||
|
||||
For nodes having a distance equals to 3, the approach is slightly
|
||||
different.
|
||||
For nodes having a distance equals to 3, the approach is slightly different.
|
||||
|
||||
First, you check that the two nodes are indeed at a minimum distance of 3 nodes
|
||||
(you're probably not interested in showing the relationship between two nodes
|
||||
when the distance is bigger):
|
||||
|
||||
First, you check that the two nodes are indeed at a minimum distance of
|
||||
3 nodes (you're probably not interested in showing the relationship
|
||||
between two nodes when the distance is bigger):
|
||||
WITH RECURSIVE transitive_closure(a, b, distance, path_string) AS
|
||||
( SELECT a, b, 1 AS distance,
|
||||
a || '.' || b || '.' AS path_string
|
||||
@@ -457,19 +453,20 @@ HAVING min(distance) = 3; --set the minimum distance
|
||||
|
||||
Then you select the paths between those nodes.
|
||||
|
||||
But there's a different approach which is more generic and efficient,
|
||||
and can be used for all the nodes whose distance is bigger than 2.
|
||||
But there's a different approach which is more generic and efficient, and can
|
||||
be used for all the nodes whose distance is bigger than 2.
|
||||
|
||||
The idea is to select the immediate neighbours of the starting node
|
||||
that are also in the path to the other node.
|
||||
The idea is to select the immediate neighbours of the starting node that are
|
||||
also in the path to the other node.
|
||||
|
||||
Depending on the distance, you can have either the shared nodes (distance = 2),
|
||||
or the connections that could lead to the other node (distance > 2). In the
|
||||
latter case, you could for instance show how A is connected to B:
|
||||
|
||||
Depending on the distance, you can have either the shared nodes
|
||||
(distance = 2), or the connections that could lead to the other node
|
||||
(distance > 2). In the latter case, you could for instance show how A
|
||||
is connected to B:
|
||||
" "
|
||||
|
||||
Linkedin
|
||||
|
||||
WITH RECURSIVE transitive_closure(a, b, distance, path_string) AS
|
||||
( SELECT a, b, 1 AS distance,
|
||||
a || '.' || b || '.' AS path_string,
|
||||
@@ -495,43 +492,40 @@ ORDER BY a,b,distance
|
||||
|
||||
Facebook: You might also know
|
||||
|
||||
A similar but slightly different requirement is to find those nodes
|
||||
that are most strongly related, but not directly connected yet. In
|
||||
other words, it's interesting to find out which and how many connected
|
||||
nodes are shared between any two nodes, i.e. how many 'friends' are
|
||||
shared between two individuals. Or better yet, to find those nodes
|
||||
sharing a certain (minimum) number of nodes with the current one.
|
||||
A similar but slightly different requirement is to find those nodes that are
|
||||
most strongly related, but not directly connected yet. In other words, it's
|
||||
interesting to find out which and how many connected nodes are shared between
|
||||
any two nodes, i.e. how many 'friends' are shared between two individuals. Or
|
||||
better yet, to find those nodes sharing a certain (minimum) number of nodes
|
||||
with the current one.
|
||||
|
||||
This could be useful to suggest a new possible friend, or in the case
|
||||
of recommendation systems, to suggest a new item/genre that matches the
|
||||
user's interests.
|
||||
This could be useful to suggest a new possible friend, or in the case of
|
||||
recommendation systems, to suggest a new item/genre that matches the user's
|
||||
interests.
|
||||
|
||||
There are many ways of doing this. In theory, this is bordering on the
|
||||
domain of collaborative filtering [6][7][8], so using Pearson's
|
||||
correlation [9] or a similar distance measure with an appropriate
|
||||
algorithm [10] is going to generate the best results. Collaborative
|
||||
filtering is an incredibly interesting topic on its own, but outside
|
||||
the scope of this article.
|
||||
There are many ways of doing this. In theory, this is bordering on the domain
|
||||
of collaborative filtering [6][7][8], so using Pearson's correlation [9] or a
|
||||
similar distance measure with an appropriate algorithm [10] is going to
|
||||
generate the best results. Collaborative filtering is an incredibly interesting
|
||||
topic on its own, but outside the scope of this article.
|
||||
|
||||
A rough and inexpensive alternative is to find the nodes having distance equals
|
||||
to 2, and filter those that either have a common characteristic with the source
|
||||
node (went to the same school / worked at the same company, belong to the same
|
||||
interest group / are items of the same genre) or have several mutual 'friends'.
|
||||
|
||||
A rough and inexpensive alternative is to find the nodes having
|
||||
distance equals to 2, and filter those that either have a common
|
||||
characteristic with the source node (went to the same school / worked
|
||||
at the same company, belong to the same interest group / are items of
|
||||
the same genre) or have several mutual 'friends'.
|
||||
" "
|
||||
|
||||
Facebook
|
||||
|
||||
This, again, is easily done once you have the transitive closure of the
|
||||
graph:
|
||||
This, again, is easily done once you have the transitive closure of the graph:
|
||||
|
||||
SELECT a AS you,
|
||||
b AS mightknow,
|
||||
shared_connection,
|
||||
CASE
|
||||
WHEN (n1.feat1 = n2.feat1 AND n1.feat1 = n3.feat1) THEN 'feat1 in commo
|
||||
n'
|
||||
WHEN (n1.feat2 = n2.feat2 AND n1.feat2 = n3.feat2) THEN 'feat2 in commo
|
||||
n'
|
||||
WHEN (n1.feat1 = n2.feat1 AND n1.feat1 = n3.feat1) THEN 'feat1 in common'
|
||||
WHEN (n1.feat2 = n2.feat2 AND n1.feat2 = n3.feat2) THEN 'feat2 in common'
|
||||
ELSE 'nothing in common'
|
||||
END AS reason
|
||||
FROM (
|
||||
@@ -566,182 +560,177 @@ WHERE (n1.feat1 = n2.feat1 AND n1.feat1 = n3.feat1)
|
||||
|
||||
" "
|
||||
|
||||
Once you have selected these nodes, you can filter those recurring more
|
||||
often, or give more importance to those having a certain feature in
|
||||
common, or pick one randomly (so you don't end up suggesting the same
|
||||
node over and over).
|
||||
Once you have selected these nodes, you can filter those recurring more often,
|
||||
or give more importance to those having a certain feature in common, or pick
|
||||
one randomly (so you don't end up suggesting the same node over and over).
|
||||
|
||||
Conclusion
|
||||
|
||||
In this article I had some fun with the new and powerful CTEs, and
|
||||
showed some practical examples where they can be useful. I also showed
|
||||
some approaches at solving the challenges faced by any social network
|
||||
or recommendation system.
|
||||
In this article I had some fun with the new and powerful CTEs, and showed some
|
||||
practical examples where they can be useful. I also showed some approaches at
|
||||
solving the challenges faced by any social network or recommendation system.
|
||||
|
||||
You are advised that depending on the size of the graph and the
|
||||
performance requirements of your application, the above queries might
|
||||
be too slow to run in realtime. Caching is your friend.
|
||||
You are advised that depending on the size of the graph and the performance
|
||||
requirements of your application, the above queries might be too slow to run in
|
||||
realtime. Caching is your friend.
|
||||
|
||||
Update: Many of the queries in this article have been revised, so
|
||||
please refer
|
||||
to [50]http://www.slideshare.net/quipo/rdbms-in-the-social-networks-age
|
||||
for changes.
|
||||
Update: Many of the queries in this article have been revised, so please refer
|
||||
to [51]http://www.slideshare.net/quipo/rdbms-in-the-social-networks-age for
|
||||
changes.
|
||||
|
||||
References
|
||||
|
||||
[1] [51]http://willets.org/sqlgraphs.html
|
||||
[1] [52]http://willets.org/sqlgraphs.html
|
||||
|
||||
[2] [52]http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.48.53
|
||||
[2] [53]http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.48.53
|
||||
|
||||
[3] [53]http://sqlblog.com/blogs/alexander_kuznetsov/archive/2009/06/25
|
||||
/scalar-udfs-wrapped-in-check-constraints-are-very-slow-and-may-fail-fo
|
||||
r-multirow-updates.aspx
|
||||
[3] [54]http://sqlblog.com/blogs/alexander_kuznetsov/archive/2009/06/25/
|
||||
scalar-udfs-wrapped-in-check-constraints-are-very-slow-and-may-fail-for-multirow-updates.aspx
|
||||
|
||||
[4] [54]http://www.dbazine.com/oracle/or-articles/tropashko8
|
||||
[4] [55]http://www.dbazine.com/oracle/or-articles/tropashko8
|
||||
|
||||
[5] [55]http://en.wikipedia.org/wiki/Collaborative_filtering
|
||||
[5] [56]http://en.wikipedia.org/wiki/Collaborative_filtering
|
||||
|
||||
[6] [56]http://en.wikipedia.org/wiki/Slope_One
|
||||
[6] [57]http://en.wikipedia.org/wiki/Slope_One
|
||||
|
||||
[7] blog.charliezhu.com/2008/07/21/implementing-slope-one-in-t-sql/
|
||||
[7] blog.charliezhu.com/2008/07/21/implementing-slope-one-in-t-sql/
|
||||
|
||||
[8] bakara.eng.tau.ac.il/~semcomm/slides7/grouplensAlgs-Kahn.pps
|
||||
[8] bakara.eng.tau.ac.il/~semcomm/slides7/grouplensAlgs-Kahn.pps
|
||||
|
||||
[9] [57]http://www.slideshare.net/denisparra/evaluation-of-collaborativ
|
||||
e-filtering-algorithms-for-recommending-articles-on-citeulike
|
||||
[9] [58]http://www.slideshare.net/denisparra/
|
||||
evaluation-of-collaborative-filtering-algorithms-for-recommending-articles-on-citeulike
|
||||
|
||||
[10] [58]http://virtuoso.openlinksw.com/
|
||||
[10] [59]http://virtuoso.openlinksw.com/
|
||||
|
||||
[11] [59]http://www.openlinksw.com/weblog/oerling/?id=1433
|
||||
[11] [60]http://www.openlinksw.com/weblog/oerling/?id=1433
|
||||
|
||||
[12] [60]http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.48.53
|
||||
[12] [61]http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.48.53
|
||||
|
||||
[13] [61]http://en.wikipedia.org/wiki/Transitive_reduction
|
||||
[13] [62]http://en.wikipedia.org/wiki/Transitive_reduction
|
||||
|
||||
You might also like...
|
||||
|
||||
[63]
|
||||
A woman reviews code on her laptop
|
||||
|
||||
|
||||
Headless commerce: everything you need to know
|
||||
|
||||
What the heck is headless? Discover the what, why, and when of headless
|
||||
architectures with our guide to headless commerce.
|
||||
|
||||
[64]
|
||||
Drupal consulting and web development at Inviqa
|
||||
|
||||
|
||||
The Drupal 9 upgrade Config Split issue and how to fix it
|
||||
|
||||
In this article we look back at an issue we’ve encountered with Drupal
|
||||
Config Split when upgrading Drupal 8 to 9 – and we share how to fix it,
|
||||
so you don’t have to run into the same issue when upgrading to Drupal
|
||||
9.
|
||||
In this article we look back at an issue we’ve encountered with Drupal Config
|
||||
Split when upgrading Drupal 8 to 9 – and we share how to fix it, so you don’t
|
||||
have to run into the same issue when upgrading to Drupal 9.
|
||||
|
||||
Inviqa, winner of Webby Awards The Webby Awards winner
|
||||
Inviqa named one of Top 100 Agencies in Econsultancy Top 100 Digital
|
||||
Agencies
|
||||
Inviqa named one of Top 100 Agencies in Econsultancy Top 100 Digital Agencies
|
||||
Inviqa UXUK Awards winner UXUK Awards winner
|
||||
DADI Award winner of 'Best UX / Usability category' DADI Award winner
|
||||
|
||||
Footer Main Navigation
|
||||
* [62]Home
|
||||
* [63]Who we are
|
||||
* [64]What we do
|
||||
* [65]Case studies
|
||||
* [66]Careers
|
||||
* [67]Insights
|
||||
* [68]Contact
|
||||
* [69]Accessibility statement
|
||||
|
||||
• [65]Home
|
||||
• [66]Who we are
|
||||
• [67]What we do
|
||||
• [68]Case studies
|
||||
• [69]Careers
|
||||
• [70]Insights
|
||||
• [71]Contact
|
||||
• [72]Accessibility statement
|
||||
|
||||
About us
|
||||
|
||||
Together with your teams, we shape the digital products, teams,
|
||||
processes, and software systems you need to meet diverse customer needs
|
||||
and accelerate your business growth.
|
||||
Together with your teams, we shape the digital products, teams, processes, and
|
||||
software systems you need to meet diverse customer needs and accelerate your
|
||||
business growth.
|
||||
|
||||
© 2007-2024, Inviqa UK Ltd. Registered No. 06278367. Registered Office:
|
||||
Havas House, Hermitage Court, Hermitage Lane, Maidstone, ME16 9NT, UK.
|
||||
© 2007-2024, Inviqa UK Ltd. Registered No. 06278367. Registered Office: Havas
|
||||
House, Hermitage Court, Hermitage Lane, Maidstone, ME16 9NT, UK.
|
||||
|
||||
Footer Legal Links
|
||||
* [70]Covid-19
|
||||
* [71]Privacy policy
|
||||
* [72]Sitemap
|
||||
|
||||
References
|
||||
• [73]Covid-19
|
||||
• [74]Privacy policy
|
||||
• [75]Sitemap
|
||||
|
||||
Visible links:
|
||||
1. https://inviqa.com/blog/storing-graphs-database-sql-meets-social-network
|
||||
2. https://www.googletagmanager.com/ns.html?id=GTM-NBN52P
|
||||
3. https://inviqa.com/blog/storing-graphs-database-sql-meets-social-network#main-content
|
||||
4. https://inviqa.com/
|
||||
5. https://inviqa.com/who-we-are
|
||||
6. https://inviqa.com/who-we-are
|
||||
7. https://www.havas.com/
|
||||
8. https://inviqa.com/digital-sustainability-journey
|
||||
9. https://inviqa.com/what-we-do
|
||||
10. https://inviqa.com/what-we-do/digital-strategy-consulting-and-development
|
||||
11. https://inviqa.com/what-we-do/digital-roadmap-development
|
||||
12. https://inviqa.com/what-we-do/digital-product-design
|
||||
13. https://inviqa.com/what-we-do/user-research
|
||||
14. https://inviqa.com/what-we-do/usability-testing
|
||||
15. https://inviqa.com/what-we-do/technical-architecture-consulting-and-development
|
||||
16. https://inviqa.com/what-we-do/digital-platform-consulting-and-implementation
|
||||
17. https://inviqa.com/what-we-do/experience-optimisation
|
||||
18. https://inviqa.com/what-we-do
|
||||
19. https://inviqa.com/case-studies
|
||||
20. https://inviqa.com/case-studies?category=b2b
|
||||
21. https://inviqa.com/case-studies#fashion
|
||||
22. https://inviqa.com/case-studies#charity
|
||||
23. https://inviqa.com/case-studies?category=retail
|
||||
24. https://inviqa.com/case-studies#leisure
|
||||
25. https://inviqa.com/case-studies?category=travel
|
||||
26. https://inviqa.com/case-studies
|
||||
27. https://inviqa.com/partners
|
||||
28. https://inviqa.com/akeneo-pim-consulting-and-implementation
|
||||
29. https://inviqa.com/blog/bigcommerce-7-best-sites
|
||||
30. https://inviqa.com/drupal-consulting-and-web-development
|
||||
31. https://inviqa.com/magento-consulting-and-web-development
|
||||
32. https://inviqa.com/blog/spryker-commerce-platform-introduction
|
||||
33. https://inviqa.com/partners
|
||||
34. https://careers.inviqa.com/
|
||||
35. https://careers.inviqa.com/
|
||||
36. https://careers.inviqa.com/jobs
|
||||
37. https://inviqa.com/insights
|
||||
38. https://inviqa.com/insights/dtc-ecommerce-report-2023
|
||||
39. https://inviqa.com/insights/PIM-readiness-framework
|
||||
40. https://inviqa.com/insights/retail-optimisation-guide-2023
|
||||
41. https://inviqa.com/blog
|
||||
42. https://inviqa.com/insights
|
||||
43. https://inviqa.com/contact
|
||||
44. https://inviqa.com/contact
|
||||
45. https://inviqa.com/
|
||||
46. https://inviqa.de/
|
||||
47. https://inviqa.com/blog#Technology engineering
|
||||
48. https://www.amazon.com/Joe-Celkos-SQL-Smarties-Programming/dp/0123693799/157-5667933-6571053?ie=UTF8&redirect=true&tag=postcarfrommy-20
|
||||
49. https://en.wikipedia.org/wiki/Domain-key_normal_form
|
||||
50. http://www.slideshare.net/quipo/rdbms-in-the-social-networks-age
|
||||
51. http://willets.org/sqlgraphs.html
|
||||
52. http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.48.53
|
||||
53. http://sqlblog.com/blogs/alexander_kuznetsov/archive/2009/06/25/scalar-udfs-wrapped-in-check-constraints-are-very-slow-and-may-fail-for-multirow-updates.aspx
|
||||
54. http://www.dbazine.com/oracle/or-articles/tropashko8/
|
||||
55. https://en.wikipedia.org/wiki/Collaborative_filtering
|
||||
56. https://en.wikipedia.org/wiki/Slope_One
|
||||
57. http://www.slideshare.net/denisparra/evaluation-of-collaborative-filtering-algorithms-for-recommending-articles-on-citeulike
|
||||
58. http://virtuoso.openlinksw.com/
|
||||
59. http://www.openlinksw.com/weblog/oerling/?id=1433
|
||||
60. http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.48.53
|
||||
61. https://en.wikipedia.org/wiki/Transitive_reduction
|
||||
62. https://inviqa.com/we-craft-game-changing-digital-experiences
|
||||
63. https://inviqa.com/who-we-are
|
||||
64. https://inviqa.com/what-we-do
|
||||
65. https://inviqa.com/case-studies
|
||||
66. https://careers.inviqa.com/
|
||||
67. https://inviqa.com/insights
|
||||
68. https://inviqa.com/contact
|
||||
69. https://inviqa.com/accessibility-statement
|
||||
70. https://inviqa.com/covid-19-measures
|
||||
71. https://inviqa.com/privacy-policy-UK
|
||||
72. https://inviqa.com/sitemap
|
||||
|
||||
Hidden links:
|
||||
74. https://inviqa.com/blog/headless-commerce-everything-you-need-know
|
||||
75. https://inviqa.com/blog/drupal-9-upgrade-config-split-issue-and-how-fix-it
|
||||
References:
|
||||
|
||||
[1] https://inviqa.com/blog/storing-graphs-database-sql-meets-social-network#main-content
|
||||
[4] https://inviqa.com/
|
||||
[6] https://inviqa.com/who-we-are
|
||||
[7] https://inviqa.com/who-we-are
|
||||
[8] https://www.havas.com/
|
||||
[9] https://inviqa.com/digital-sustainability-journey
|
||||
[10] https://inviqa.com/what-we-do
|
||||
[11] https://inviqa.com/what-we-do/digital-strategy-consulting-and-development
|
||||
[12] https://inviqa.com/what-we-do/digital-roadmap-development
|
||||
[13] https://inviqa.com/what-we-do/digital-product-design
|
||||
[14] https://inviqa.com/what-we-do/user-research
|
||||
[15] https://inviqa.com/what-we-do/usability-testing
|
||||
[16] https://inviqa.com/what-we-do/technical-architecture-consulting-and-development
|
||||
[17] https://inviqa.com/what-we-do/digital-platform-consulting-and-implementation
|
||||
[18] https://inviqa.com/what-we-do/experience-optimisation
|
||||
[19] https://inviqa.com/what-we-do
|
||||
[20] https://inviqa.com/case-studies
|
||||
[21] https://inviqa.com/case-studies?category=b2b
|
||||
[22] https://inviqa.com/case-studies#fashion
|
||||
[23] https://inviqa.com/case-studies#charity
|
||||
[24] https://inviqa.com/case-studies?category=retail
|
||||
[25] https://inviqa.com/case-studies#leisure
|
||||
[26] https://inviqa.com/case-studies?category=travel
|
||||
[27] https://inviqa.com/case-studies
|
||||
[28] https://inviqa.com/partners
|
||||
[29] https://inviqa.com/akeneo-pim-consulting-and-implementation
|
||||
[30] https://inviqa.com/blog/bigcommerce-7-best-sites
|
||||
[31] https://inviqa.com/drupal-consulting-and-web-development
|
||||
[32] https://inviqa.com/magento-consulting-and-web-development
|
||||
[33] https://inviqa.com/blog/spryker-commerce-platform-introduction
|
||||
[34] https://inviqa.com/partners
|
||||
[35] https://careers.inviqa.com/
|
||||
[36] https://careers.inviqa.com/
|
||||
[37] https://careers.inviqa.com/jobs
|
||||
[38] https://inviqa.com/insights
|
||||
[39] https://inviqa.com/insights/dtc-ecommerce-report-2023
|
||||
[40] https://inviqa.com/insights/PIM-readiness-framework
|
||||
[41] https://inviqa.com/insights/retail-optimisation-guide-2023
|
||||
[42] https://inviqa.com/blog
|
||||
[43] https://inviqa.com/insights
|
||||
[44] https://inviqa.com/contact
|
||||
[45] https://inviqa.com/contact
|
||||
[46] https://inviqa.com/
|
||||
[47] https://inviqa.de/
|
||||
[48] https://inviqa.com/blog#Technology%20engineering
|
||||
[49] https://www.amazon.com/Joe-Celkos-SQL-Smarties-Programming/dp/0123693799/157-5667933-6571053?ie=UTF8&redirect=true&tag=postcarfrommy-20
|
||||
[50] https://en.wikipedia.org/wiki/Domain-key_normal_form
|
||||
[51] http://www.slideshare.net/quipo/rdbms-in-the-social-networks-age
|
||||
[52] http://willets.org/sqlgraphs.html
|
||||
[53] http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.48.53
|
||||
[54] http://sqlblog.com/blogs/alexander_kuznetsov/archive/2009/06/25/scalar-udfs-wrapped-in-check-constraints-are-very-slow-and-may-fail-for-multirow-updates.aspx
|
||||
[55] http://www.dbazine.com/oracle/or-articles/tropashko8/
|
||||
[56] https://en.wikipedia.org/wiki/Collaborative_filtering
|
||||
[57] https://en.wikipedia.org/wiki/Slope_One
|
||||
[58] http://www.slideshare.net/denisparra/evaluation-of-collaborative-filtering-algorithms-for-recommending-articles-on-citeulike
|
||||
[59] http://virtuoso.openlinksw.com/
|
||||
[60] http://www.openlinksw.com/weblog/oerling/?id=1433
|
||||
[61] http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.48.53
|
||||
[62] https://en.wikipedia.org/wiki/Transitive_reduction
|
||||
[63] https://inviqa.com/blog/headless-commerce-everything-you-need-know
|
||||
[64] https://inviqa.com/blog/drupal-9-upgrade-config-split-issue-and-how-fix-it
|
||||
[65] https://inviqa.com/we-craft-game-changing-digital-experiences
|
||||
[66] https://inviqa.com/who-we-are
|
||||
[67] https://inviqa.com/what-we-do
|
||||
[68] https://inviqa.com/case-studies
|
||||
[69] https://careers.inviqa.com/
|
||||
[70] https://inviqa.com/insights
|
||||
[71] https://inviqa.com/contact
|
||||
[72] https://inviqa.com/accessibility-statement
|
||||
[73] https://inviqa.com/covid-19-measures
|
||||
[74] https://inviqa.com/privacy-policy-UK
|
||||
[75] https://inviqa.com/sitemap
|
||||
|
||||
@@ -4,237 +4,219 @@ This Page is Designed to Last
|
||||
|
||||
By [1]Jeff Huang, published 2019-12-19, updated 2021-08-24
|
||||
|
||||
The end of the year is an opportunity to clean up and reset for the
|
||||
upcoming new semester. I found myself clearing out old bookmarks—yes,
|
||||
bookmarks: that formerly beloved browser feature that seems to have
|
||||
lost the battle to 'address bar autocomplete'. But this nostalgic act
|
||||
of tidying led me to despair.
|
||||
The end of the year is an opportunity to clean up and reset for the upcoming
|
||||
new semester. I found myself clearing out old bookmarks—yes, bookmarks: that
|
||||
formerly beloved browser feature that seems to have lost the battle to 'address
|
||||
bar autocomplete'. But this nostalgic act of tidying led me to despair.
|
||||
|
||||
Bookmark after bookmark led to dead link after dead link. What's
|
||||
vanished: unique pieces of writing on kuro5hin about tech culture; a
|
||||
collection of mathematical puzzles and their associated discussion by
|
||||
academics that my father introduced me to; Woodman's Reverse
|
||||
Engineering tutorials from my high school years, where I first tasted
|
||||
the feeling of control over software; even my most recent bookmark, a
|
||||
series of posts on Google+ exposing usb-c chargers' non-compliance with
|
||||
the specification, all disappeared.
|
||||
Bookmark after bookmark led to dead link after dead link. What's vanished:
|
||||
unique pieces of writing on kuro5hin about tech culture; a collection of
|
||||
mathematical puzzles and their associated discussion by academics that my
|
||||
father introduced me to; Woodman's Reverse Engineering tutorials from my high
|
||||
school years, where I first tasted the feeling of control over software; even
|
||||
my most recent bookmark, a series of posts on Google+ exposing usb-c chargers'
|
||||
non-compliance with the specification, all disappeared.
|
||||
|
||||
This is more than just link rot, it's the increasing complexity of
|
||||
keeping alive indie content on the web, leading to a reliance on
|
||||
platforms and time-sorted publication formats (blogs, feeds, tweets).
|
||||
This is more than just link rot, it's the increasing complexity of keeping
|
||||
alive indie content on the web, leading to a reliance on platforms and
|
||||
time-sorted publication formats (blogs, feeds, tweets).
|
||||
|
||||
Of course, I have also contributed to the problem. A paper I published
|
||||
7 years ago has an abstract that includes a demo link, which has been
|
||||
taken over by a spammy page with a pumpkin picture on it. Part of that
|
||||
lapse was laziness to avoid having to renew and keep a functioning web
|
||||
application up year after year.
|
||||
Of course, I have also contributed to the problem. A paper I published 7 years
|
||||
ago has an abstract that includes a demo link, which has been taken over by a
|
||||
spammy page with a pumpkin picture on it. Part of that lapse was laziness to
|
||||
avoid having to renew and keep a functioning web application up year after
|
||||
year.
|
||||
|
||||
I've recommended my students to push websites to Heroku, and publish
|
||||
portfolios on Wix. Yet every platform with irreplaceable content dies
|
||||
off some day. Geocities, LiveJournal, what.cd, now Yahoo Groups. One
|
||||
day, Medium, Twitter, and even hosting services like GitHub Pages will
|
||||
be plundered then discarded when they can no longer grow or cannot find
|
||||
a working business model.
|
||||
I've recommended my students to push websites to Heroku, and publish portfolios
|
||||
on Wix. Yet every platform with irreplaceable content dies off some day.
|
||||
Geocities, LiveJournal, what.cd, now Yahoo Groups. One day, Medium, Twitter,
|
||||
and even hosting services like GitHub Pages will be plundered then discarded
|
||||
when they can no longer grow or cannot find a working business model.
|
||||
|
||||
The problem is multi-faceted. First, content takes effort to maintain.
|
||||
The content may need updating to remain relevant, and will eventually
|
||||
have to be rehosted. A lot of content, what used to be the vast
|
||||
majority of content, was put up by individuals. But individuals (maybe
|
||||
you?) lose interest, so one day maybe you just don't want to deal with
|
||||
migrating a website to a new hosting provider.
|
||||
The problem is multi-faceted. First, content takes effort to maintain. The
|
||||
content may need updating to remain relevant, and will eventually have to be
|
||||
rehosted. A lot of content, what used to be the vast majority of content, was
|
||||
put up by individuals. But individuals (maybe you?) lose interest, so one day
|
||||
maybe you just don't want to deal with migrating a website to a new hosting
|
||||
provider.
|
||||
|
||||
Second, a growing set of libraries and frameworks are making the web
|
||||
more sophisticated but also more complex. First came jquery, then
|
||||
bootstrap, npm, angular, grunt, webpack, and more. If you are a web
|
||||
developer who is keeping up with the latest, then that's not a problem.
|
||||
Second, a growing set of libraries and frameworks are making the web more
|
||||
sophisticated but also more complex. First came jquery, then bootstrap, npm,
|
||||
angular, grunt, webpack, and more. If you are a web developer who is keeping up
|
||||
with the latest, then that's not a problem.
|
||||
|
||||
But if not, maybe you are an embedded systems programmer or startup CTO
|
||||
or enterprise Java developer or chemistry PhD student, sure you could
|
||||
probably figure out how to set up some web server and toolchain, but
|
||||
will you keep this up year after year, decade after decade? Probably
|
||||
not, and when the next year when you encounter a package dependency
|
||||
problem or figure out how to regenerate your html files, you might just
|
||||
throw your hands up and zip up the files to deal with "later". Even
|
||||
simple technology stacks like static site generators (e.g., Jekyll)
|
||||
require a workflow and will stop working at some point. You fall into
|
||||
npm dependency hell, and forget the command to package a release. And
|
||||
having a website with multiple html pages is complex; how would you
|
||||
know how each page links to each other? index.html.old, Copy of
|
||||
about.html, index.html (1), nav.html?
|
||||
But if not, maybe you are an embedded systems programmer or startup CTO or
|
||||
enterprise Java developer or chemistry PhD student, sure you could probably
|
||||
figure out how to set up some web server and toolchain, but will you keep this
|
||||
up year after year, decade after decade? Probably not, and when the next year
|
||||
when you encounter a package dependency problem or figure out how to regenerate
|
||||
your html files, you might just throw your hands up and zip up the files to
|
||||
deal with "later". Even simple technology stacks like static site generators
|
||||
(e.g., Jekyll) require a workflow and will stop working at some point. You fall
|
||||
into npm dependency hell, and forget the command to package a release. And
|
||||
having a website with multiple html pages is complex; how would you know how
|
||||
each page links to each other? index.html.old, Copy of about.html, index.html
|
||||
(1), nav.html?
|
||||
|
||||
Third, and this has been touted by others already (and even
|
||||
[2]rebutted), the disappearance of the public web in favor of mobile
|
||||
and web apps, walled gardens (Facebook pages), just-in-time WebSockets
|
||||
loading, and AMP decreases the proportion of the web on the world wide
|
||||
web, which now seems more like a continental web than a "world wide
|
||||
web".
|
||||
Third, and this has been touted by others already (and even [2]rebutted), the
|
||||
disappearance of the public web in favor of mobile and web apps, walled gardens
|
||||
(Facebook pages), just-in-time WebSockets loading, and AMP decreases the
|
||||
proportion of the web on the world wide web, which now seems more like a
|
||||
continental web than a "world wide web".
|
||||
|
||||
So for these problems, what can we do about it? It's not such a simple
|
||||
problem that can be solved in this one article. The Wayback Machine and
|
||||
archive.org helps keep some content around for longer. And sometimes an
|
||||
altruistic individual rehosts the content elsewhere.
|
||||
So for these problems, what can we do about it? It's not such a simple problem
|
||||
that can be solved in this one article. The Wayback Machine and archive.org
|
||||
helps keep some content around for longer. And sometimes an altruistic
|
||||
individual rehosts the content elsewhere.
|
||||
|
||||
But the solution needs to be multi-pronged. How do we make web content
|
||||
that can last and be maintained for at least 10 years? As someone
|
||||
studying human-computer interaction, I naturally think of the
|
||||
stakeholders we aren't supporting. Right now putting up web content is
|
||||
optimized for either the professional web developer (who use the latest
|
||||
frameworks and workflows) or the non-tech savvy user (who use a
|
||||
platform).
|
||||
But the solution needs to be multi-pronged. How do we make web content that can
|
||||
last and be maintained for at least 10 years? As someone studying
|
||||
human-computer interaction, I naturally think of the stakeholders we aren't
|
||||
supporting. Right now putting up web content is optimized for either the
|
||||
professional web developer (who use the latest frameworks and workflows) or the
|
||||
non-tech savvy user (who use a platform).
|
||||
|
||||
But I think we should consider both 1) the casual web content
|
||||
"maintainer", someone who doesn't constantly stay up to date with the
|
||||
latest web technologies, which means the website needs to have low
|
||||
maintenance needs; 2) and the crawlers who preserve the content and
|
||||
[3]personal archivers, the "archiver", which means the website should
|
||||
be easy to save and interpret.
|
||||
But I think we should consider both 1) the casual web content "maintainer",
|
||||
someone who doesn't constantly stay up to date with the latest web
|
||||
technologies, which means the website needs to have low maintenance needs; 2)
|
||||
and the crawlers who preserve the content and [3]personal archivers, the
|
||||
"archiver", which means the website should be easy to save and interpret.
|
||||
|
||||
So my proposal is seven unconventional guidelines in how we handle
|
||||
websites designed to be informative, to make them easy to maintain and
|
||||
preserve. The guiding intention is that the maintainer will try to keep
|
||||
the website up for at least 10 years, maybe even 20 or 30 years. These
|
||||
are not controversial views necessarily, but are aspirations that are
|
||||
not mainstream—a manifesto for a long-lasting website.
|
||||
1. Return to vanilla HTML/CSS – I think we've reached the point where
|
||||
html/css is more powerful, and nicer to use than ever before.
|
||||
Instead of starting with a giant template filled with .js includes,
|
||||
it's now okay to just write plain HTML from scratch again. CSS
|
||||
Flexbox and Grid, canvas, Selectors, box-shadow, the video element,
|
||||
filter, etc. eliminate a lot of the need for JavaScript libraries.
|
||||
We can avoid jquery and bootstrap when they're not needed. The more
|
||||
libraries incorporated into the website, the more fragile it
|
||||
becomes. Skip the polyfills and CSS prefixes, and stick with the
|
||||
CSS attributes that work across all browsers. And frequently
|
||||
validate your HTML; it could save you a headache in the future when
|
||||
you encounter a bug.
|
||||
So my proposal is seven unconventional guidelines in how we handle websites
|
||||
designed to be informative, to make them easy to maintain and preserve. The
|
||||
guiding intention is that the maintainer will try to keep the website up for at
|
||||
least 10 years, maybe even 20 or 30 years. These are not controversial views
|
||||
necessarily, but are aspirations that are not mainstream—a manifesto for a
|
||||
long-lasting website.
|
||||
|
||||
1. Return to vanilla HTML/CSS – I think we've reached the point where html/css
|
||||
is more powerful, and nicer to use than ever before. Instead of starting
|
||||
with a giant template filled with .js includes, it's now okay to just write
|
||||
plain HTML from scratch again. CSS Flexbox and Grid, canvas, Selectors,
|
||||
box-shadow, the video element, filter, etc. eliminate a lot of the need for
|
||||
JavaScript libraries. We can avoid jquery and bootstrap when they're not
|
||||
needed. The more libraries incorporated into the website, the more fragile
|
||||
it becomes. Skip the polyfills and CSS prefixes, and stick with the CSS
|
||||
attributes that work across all browsers. And frequently validate your
|
||||
HTML; it could save you a headache in the future when you encounter a bug.
|
||||
2. Don't minimize that HTML – minimizing (compressing) your HTML and
|
||||
associated CSS/JS seems like it saves precious bandwidth and all
|
||||
the big companies are doing it. But why not? Well, you don't save
|
||||
much because your web pages should be gzipped before being sent
|
||||
over the network, so preemptively shrinking your content probably
|
||||
doesn't do much to save bandwidth if anything at all. But even if
|
||||
it did save a few bytes (it's just text in the end), you now need
|
||||
to have a build process and to add this to your workflow, so
|
||||
updating a website just became more complex. If there's a bug or
|
||||
future incompatibility in the html, the minimized form is harder to
|
||||
debug. And it's unfriendly to your users; so many people got their
|
||||
start with HTML by smashing that View Source button, and minimizing
|
||||
associated CSS/JS seems like it saves precious bandwidth and all the big
|
||||
companies are doing it. But why not? Well, you don't save much because your
|
||||
web pages should be gzipped before being sent over the network, so
|
||||
preemptively shrinking your content probably doesn't do much to save
|
||||
bandwidth if anything at all. But even if it did save a few bytes (it's
|
||||
just text in the end), you now need to have a build process and to add this
|
||||
to your workflow, so updating a website just became more complex. If
|
||||
there's a bug or future incompatibility in the html, the minimized form is
|
||||
harder to debug. And it's unfriendly to your users; so many people got
|
||||
their start with HTML by smashing that View Source button, and minimizing
|
||||
your HTML prevents this ideal of learning by seeing what they did.
|
||||
Minimizing HTML does not preserve its educational quality, and what
|
||||
gets archived is only the resulting codejunk.
|
||||
3. Prefer one page over several – several pages are hard to maintain.
|
||||
You can lose track of which pages link to what, and it also leads
|
||||
to some system of page templates to reduce redundancy. How many
|
||||
pages can one person really maintain? Having one file, probably
|
||||
just an index.html, is simple and unforgettable. Make use of that
|
||||
infinite vertical scroll. You never have to dig around your files
|
||||
or grep to see where some content lies. And how should your version
|
||||
control that file? Should you use git? Shove them in an 'old/'
|
||||
folder? Well I like the simple approach of naming old files with
|
||||
the date they are retired, like index.20191213.html. Using the ISO
|
||||
format of the date makes it so that it sorts easily, and there's no
|
||||
confusion between American and European date formats. If I have
|
||||
multiple versions in one day, I would use a style similar to that
|
||||
which is customary in log files, of index.20191213.1.html. A nice
|
||||
side effect is then you can access an older version of the file if
|
||||
you remember the date, without logging into the web host.
|
||||
Minimizing HTML does not preserve its educational quality, and what gets
|
||||
archived is only the resulting codejunk.
|
||||
3. Prefer one page over several – several pages are hard to maintain. You can
|
||||
lose track of which pages link to what, and it also leads to some system of
|
||||
page templates to reduce redundancy. How many pages can one person really
|
||||
maintain? Having one file, probably just an index.html, is simple and
|
||||
unforgettable. Make use of that infinite vertical scroll. You never have to
|
||||
dig around your files or grep to see where some content lies. And how
|
||||
should your version control that file? Should you use git? Shove them in an
|
||||
'old/' folder? Well I like the simple approach of naming old files with the
|
||||
date they are retired, like index.20191213.html. Using the ISO format of
|
||||
the date makes it so that it sorts easily, and there's no confusion between
|
||||
American and European date formats. If I have multiple versions in one day,
|
||||
I would use a style similar to that which is customary in log files, of
|
||||
index.20191213.1.html. A nice side effect is then you can access an older
|
||||
version of the file if you remember the date, without logging into the web
|
||||
host.
|
||||
4. End all forms of hotlinking – this cautionary word seems to have
|
||||
disappeared from internet vocabulary, but it's one of the reasons
|
||||
I've seen a perfectly good website fall apart for no reason. Stop
|
||||
directly including images from other websites, stop "borrowing"
|
||||
stylesheets by just linking to them, and especially stop linking to
|
||||
JavaScript files, even the ones hosted by the original developers.
|
||||
Hotlinking is [4]usually considered rude since your visitors use
|
||||
someone else's bandwidth, it makes the user experience slower, you
|
||||
let another website track your users, and worse of all if the
|
||||
location you're linking to changes their folder structure or just
|
||||
goes offline, then the failure cascades to your website as well.
|
||||
Google Analytics is unnecessary; store your own server logs and set
|
||||
up [5]GoAccess or cut them up however you like, giving you more
|
||||
detailed statistics. Don't give away your logs to Google for free.
|
||||
5. Stick with native fonts – we're focusing on content first, so
|
||||
decorative and unusual typefaces are completely unnecessary. Stick
|
||||
with either the 13 web-safe fonts or a [6]system font stack that
|
||||
matches the default font to the operating system of your visitor.
|
||||
Using the system font stack might look a bit different between
|
||||
operating systems, but your layout shouldn't be so brittle that an
|
||||
extra word wrap will ruin it. Then you don't have to worry about
|
||||
the flashing font problem either. Your focus should be about
|
||||
delivering the content to the user effectively and making the
|
||||
choice of font be invisible, rather than getting noticed to stroke
|
||||
your design ego.
|
||||
6. Obsessively compress your images – faster for your users, less
|
||||
space to archive, and easier to maintain when you don't have to
|
||||
back up a humongous folder. Your images can have the same high
|
||||
quality, but be smaller. [7]Minify your SVGs, losslessly compress
|
||||
your PNGs, generate JPEGs to exactly fit the width of the image.
|
||||
It's worth spending some time figuring out the most optimal way to
|
||||
compress and [8]reduce the size of your images without losing
|
||||
quality. And once [9]WebP gains support on Safari, switch over to
|
||||
that format. Ruthlessly minimize the total size of your website and
|
||||
keep it as small as possible. Every MB can cost someone real money,
|
||||
and in fact, my mobile carrier (Google Fi) charges a cent per MB,
|
||||
so a 25 MB website which is fairly common nowadays, costs a quarter
|
||||
itself, about as much as a newspaper when I was a child.
|
||||
7. Eliminate the broken URL risk – there are [10]monitoring services
|
||||
that will tell you when your URL is down, preventing you from
|
||||
realizing one day that your homepage hasn't been loading for a
|
||||
month and the search engines have deindexed it. Because 10 years is
|
||||
longer than most hard drives or operating systems are meant to
|
||||
last. But to eliminate the risk of a URL breaking completely, set
|
||||
up a second monitoring service. Because if the first one stops for
|
||||
any reason (they move to a pay model, they shut down, you forget to
|
||||
renew something, etc.) you will still get one notification when
|
||||
your URL is down, then realize the other monitoring service is down
|
||||
because you didn't get the second notification. Remember that we're
|
||||
trying to keep something up for over 10 years (ideally way longer,
|
||||
even 30 years), and a lot of services will shut down during this
|
||||
period, so two monitoring services is safer.
|
||||
disappeared from internet vocabulary, but it's one of the reasons I've seen
|
||||
a perfectly good website fall apart for no reason. Stop directly including
|
||||
images from other websites, stop "borrowing" stylesheets by just linking to
|
||||
them, and especially stop linking to JavaScript files, even the ones hosted
|
||||
by the original developers. Hotlinking is [4]usually considered rude since
|
||||
your visitors use someone else's bandwidth, it makes the user experience
|
||||
slower, you let another website track your users, and worse of all if the
|
||||
location you're linking to changes their folder structure or just goes
|
||||
offline, then the failure cascades to your website as well. Google
|
||||
Analytics is unnecessary; store your own server logs and set up [5]GoAccess
|
||||
or cut them up however you like, giving you more detailed statistics. Don't
|
||||
give away your logs to Google for free.
|
||||
5. Stick with native fonts – we're focusing on content first, so decorative
|
||||
and unusual typefaces are completely unnecessary. Stick with either the 13
|
||||
web-safe fonts or a [6]system font stack that matches the default font to
|
||||
the operating system of your visitor. Using the system font stack might
|
||||
look a bit different between operating systems, but your layout shouldn't
|
||||
be so brittle that an extra word wrap will ruin it. Then you don't have to
|
||||
worry about the flashing font problem either. Your focus should be about
|
||||
delivering the content to the user effectively and making the choice of
|
||||
font be invisible, rather than getting noticed to stroke your design ego.
|
||||
6. Obsessively compress your images – faster for your users, less space to
|
||||
archive, and easier to maintain when you don't have to back up a humongous
|
||||
folder. Your images can have the same high quality, but be smaller. [7]
|
||||
Minify your SVGs, losslessly compress your PNGs, generate JPEGs to exactly
|
||||
fit the width of the image. It's worth spending some time figuring out the
|
||||
most optimal way to compress and [8]reduce the size of your images without
|
||||
losing quality. And once [9]WebP gains support on Safari, switch over to
|
||||
that format. Ruthlessly minimize the total size of your website and keep it
|
||||
as small as possible. Every MB can cost someone real money, and in fact, my
|
||||
mobile carrier (Google Fi) charges a cent per MB, so a 25 MB website which
|
||||
is fairly common nowadays, costs a quarter itself, about as much as a
|
||||
newspaper when I was a child.
|
||||
7. Eliminate the broken URL risk – there are [10]monitoring services that will
|
||||
tell you when your URL is down, preventing you from realizing one day that
|
||||
your homepage hasn't been loading for a month and the search engines have
|
||||
deindexed it. Because 10 years is longer than most hard drives or operating
|
||||
systems are meant to last. But to eliminate the risk of a URL breaking
|
||||
completely, set up a second monitoring service. Because if the first one
|
||||
stops for any reason (they move to a pay model, they shut down, you forget
|
||||
to renew something, etc.) you will still get one notification when your URL
|
||||
is down, then realize the other monitoring service is down because you
|
||||
didn't get the second notification. Remember that we're trying to keep
|
||||
something up for over 10 years (ideally way longer, even 30 years), and a
|
||||
lot of services will shut down during this period, so two monitoring
|
||||
services is safer.
|
||||
|
||||
After doing these things, go ahead and place a bit of text in the
|
||||
footer, "The page was designed to last", linking to this page
|
||||
explaining what that means. The words promise that the maintainer will
|
||||
do their best to follow the ideas in this manifesto.
|
||||
After doing these things, go ahead and place a bit of text in the footer, "The
|
||||
page was designed to last", linking to this page explaining what that means.
|
||||
The words promise that the maintainer will do their best to follow the ideas in
|
||||
this manifesto.
|
||||
|
||||
Before you protest, this is obviously not for web applications. If you
|
||||
are making an application, then make your web or mobile app with the
|
||||
workflow you need. I don't even know any web applications that have
|
||||
remained similarly functioning over 10 years so it seems like a lost
|
||||
cause anyway (except Philip Guo's python tutor, due to his
|
||||
[11]minimalist strategy for maintaining it). It's also not for websites
|
||||
maintained by an organization like Wikipedia or Twitter. The salaries
|
||||
for an IT team is probably enough to keep a website alive for a while.
|
||||
Before you protest, this is obviously not for web applications. If you are
|
||||
making an application, then make your web or mobile app with the workflow you
|
||||
need. I don't even know any web applications that have remained similarly
|
||||
functioning over 10 years so it seems like a lost cause anyway (except Philip
|
||||
Guo's python tutor, due to his [11]minimalist strategy for maintaining it).
|
||||
It's also not for websites maintained by an organization like Wikipedia or
|
||||
Twitter. The salaries for an IT team is probably enough to keep a website alive
|
||||
for a while.
|
||||
|
||||
In fact, it's not even that important you strictly follow the 7
|
||||
"rules", as they're more of a provocation than strict rules.
|
||||
In fact, it's not even that important you strictly follow the 7 "rules", as
|
||||
they're more of a provocation than strict rules.
|
||||
|
||||
But let's say some small part of the web starts designing websites to
|
||||
last for content that is meant to last. What happens then? Well, people
|
||||
may prefer to link to them since they have a promise of working in the
|
||||
future. People more generally may be more mindful of making their pages
|
||||
more permanent. And users and archivers both save bandwidth when
|
||||
visiting and storing these pages.
|
||||
But let's say some small part of the web starts designing websites to last for
|
||||
content that is meant to last. What happens then? Well, people may prefer to
|
||||
link to them since they have a promise of working in the future. People more
|
||||
generally may be more mindful of making their pages more permanent. And users
|
||||
and archivers both save bandwidth when visiting and storing these pages.
|
||||
|
||||
The effects are long term, but the achievements are incremental and can
|
||||
be implemented by website owners without being dependent on anyone else
|
||||
or waiting for a network effect. You can do this now for your website,
|
||||
and that already would be a positive outcome. Like using a recycled
|
||||
shopping bag instead of a taking a plastic one, it's a small individual
|
||||
action.
|
||||
The effects are long term, but the achievements are incremental and can be
|
||||
implemented by website owners without being dependent on anyone else or waiting
|
||||
for a network effect. You can do this now for your website, and that already
|
||||
would be a positive outcome. Like using a recycled shopping bag instead of a
|
||||
taking a plastic one, it's a small individual action.
|
||||
|
||||
This article is meant to provoke and lead to individual action, not
|
||||
propose a complete solution to the decaying web. It's a small simple
|
||||
step for a complex sociotechnical system. So I'd love to see this
|
||||
happen. I intend to keep this page up for at least 10 years.
|
||||
This article is meant to provoke and lead to individual action, not propose a
|
||||
complete solution to the decaying web. It's a small simple step for a complex
|
||||
sociotechnical system. So I'd love to see this happen. I intend to keep this
|
||||
page up for at least 10 years.
|
||||
|
||||
If you are interested in receiving updates to [12]irchiver, our project
|
||||
for a personal archive of the web pages you visit, please [13]subscribe
|
||||
here.
|
||||
If you are interested in receiving updates to [12]irchiver, our project for a
|
||||
personal archive of the web pages you visit, please [13]subscribe here.
|
||||
|
||||
Thanks to my Ph.D. students Shaun Wallace, Nediyana Daskalova, Talie
|
||||
Massachi, Alexandra Papoutsaki, my colleagues James Tompkin, Stephen
|
||||
Bach, my teaching assistant Kathleen Chai, and my research assistant
|
||||
Yusuf Karim for feedback on earlier drafts.
|
||||
Thanks to my Ph.D. students Shaun Wallace, Nediyana Daskalova, Talie Massachi,
|
||||
Alexandra Papoutsaki, my colleagues James Tompkin, Stephen Bach, my teaching
|
||||
assistant Kathleen Chai, and my research assistant Yusuf Karim for feedback on
|
||||
earlier drafts.
|
||||
|
||||
See discussions on [14]Hacker News and [15]reddit /r/programming
|
||||
|
||||
@@ -262,30 +244,30 @@ Other articles I've written
|
||||
|
||||
This page is [25]designed to last.
|
||||
|
||||
References
|
||||
References:
|
||||
|
||||
1. https://jeffhuang.com/
|
||||
2. https://gomakethings.com/the-web-is-not-dying/
|
||||
3. https://archivebox.io/
|
||||
4. https://webmasters.stackexchange.com/questions/25315/hotlinking-what-is-it-and-why-shouldnt-people-do-it
|
||||
5. https://goaccess.io/
|
||||
6. https://systemfontstack.com/
|
||||
7. https://victorzhou.com/blog/minify-svgs/
|
||||
8. https://evilmartians.com/chronicles/images-done-right-web-graphics-good-to-the-last-byte-optimization-techniques
|
||||
9. https://caniuse.com/#feat=webp
|
||||
10. https://uptimerobot.com/
|
||||
11. https://pg.ucsd.edu/publications/Python-Tutor-scalable-sustainable-research-software_UIST-2021.pdf
|
||||
12. https://irchiver.com/
|
||||
13. https://docs.google.com/forms/d/e/1FAIpQLSeTCgnwF1gjrc1O8mfJ_5TmT_TLowFQ2DUhsollmqPG84pAFQ/viewform?usp=pp_url&entry.1299571007=irchiver:+your+full-resolution+personal+web+archive+and+search&entry.1760653896=designed_to_last
|
||||
14. https://news.ycombinator.com/item?id=21840140
|
||||
15. https://www.reddit.com/r/programming/comments/ed88ra/this_page_is_designed_to_last_a_manifesto_for/
|
||||
16. https://jeffhuang.com/struggle_for_each_paper/
|
||||
17. https://jeffhuang.com/illustrative-notes-for-publishing-aesthetics/
|
||||
18. https://jeffhuang.com/productivity_text_file/
|
||||
19. https://jeffhuang.com/covid_sleep/
|
||||
20. https://jeffhuang.com/extracting_data_from_tracking_devices/
|
||||
21. https://jeffhuang.com/computer-science-open-data/#cs-faculty-composition-and-hiring-trends
|
||||
22. https://jeffhuang.com/computer-science-open-data/#bias-in-computer-science-rankings
|
||||
23. https://jeffhuang.com/computer-science-open-data/#who-wins-cs-best-paper-awards
|
||||
24. https://jeffhuang.com/computer-science-open-data/#verified-computer-science-phd-stipends
|
||||
25. http://jeffhuang.com/designed_to_last/
|
||||
[1] https://jeffhuang.com/
|
||||
[2] https://gomakethings.com/the-web-is-not-dying/
|
||||
[3] https://archivebox.io/
|
||||
[4] https://webmasters.stackexchange.com/questions/25315/hotlinking-what-is-it-and-why-shouldnt-people-do-it
|
||||
[5] https://goaccess.io/
|
||||
[6] https://systemfontstack.com/
|
||||
[7] https://victorzhou.com/blog/minify-svgs/
|
||||
[8] https://evilmartians.com/chronicles/images-done-right-web-graphics-good-to-the-last-byte-optimization-techniques
|
||||
[9] https://caniuse.com/#feat=webp
|
||||
[10] https://uptimerobot.com/
|
||||
[11] https://pg.ucsd.edu/publications/Python-Tutor-scalable-sustainable-research-software_UIST-2021.pdf
|
||||
[12] https://irchiver.com/
|
||||
[13] https://docs.google.com/forms/d/e/1FAIpQLSeTCgnwF1gjrc1O8mfJ_5TmT_TLowFQ2DUhsollmqPG84pAFQ/viewform?usp=pp_url&entry.1299571007=irchiver:+your+full-resolution+personal+web+archive+and+search&entry.1760653896=designed_to_last
|
||||
[14] https://news.ycombinator.com/item?id=21840140
|
||||
[15] https://www.reddit.com/r/programming/comments/ed88ra/this_page_is_designed_to_last_a_manifesto_for/
|
||||
[16] https://jeffhuang.com/struggle_for_each_paper/
|
||||
[17] https://jeffhuang.com/illustrative-notes-for-publishing-aesthetics/
|
||||
[18] https://jeffhuang.com/productivity_text_file/
|
||||
[19] https://jeffhuang.com/covid_sleep/
|
||||
[20] https://jeffhuang.com/extracting_data_from_tracking_devices/
|
||||
[21] https://jeffhuang.com/computer-science-open-data/#cs-faculty-composition-and-hiring-trends
|
||||
[22] https://jeffhuang.com/computer-science-open-data/#bias-in-computer-science-rankings
|
||||
[23] https://jeffhuang.com/computer-science-open-data/#who-wins-cs-best-paper-awards
|
||||
[24] https://jeffhuang.com/computer-science-open-data/#verified-computer-science-phd-stipends
|
||||
[25] http://jeffhuang.com/designed_to_last/
|
||||
|
||||
@@ -1,133 +1,126 @@
|
||||
#[1]alternate
|
||||
[1]
|
||||
|
||||
* [2]Home
|
||||
* [3]Articles
|
||||
* [4]Subscribe
|
||||
* [5]Work
|
||||
* [6]About
|
||||
* (BUTTON)
|
||||
• [2]Home
|
||||
• [3]Articles
|
||||
• [4]Subscribe
|
||||
• [5]Work
|
||||
• [6]About
|
||||
•
|
||||
|
||||
The beauty of finished software
|
||||
|
||||
October 31, 2023
|
||||
|
||||
Let me introduce you to [7]WordStar 4.0, a popular word processor from
|
||||
the early 80s.
|
||||
Let me introduce you to [8]WordStar 4.0, a popular word processor from the
|
||||
early 80s.
|
||||
|
||||
Wordstar 4.0 WordStar 4.0
|
||||
|
||||
As old as it seems, George R.R. Martin used it to write “A Song of Ice
|
||||
and Fire”.
|
||||
As old as it seems, George R.R. Martin used it to write “A Song of Ice and
|
||||
Fire”.
|
||||
|
||||
Why would someone use such an old piece of software to write over 5,000
|
||||
pages? I love how he puts it:
|
||||
Why would someone use such an old piece of software to write over 5,000 pages?
|
||||
I love how he puts it:
|
||||
|
||||
It does everything I want a word processing program to do and it
|
||||
doesn't do anything else. I don't want any help. I hate some of
|
||||
these modern systems where you type up a lowercase letter and it
|
||||
becomes a capital. I don't want a capital, if I'd wanted a capital,
|
||||
I would have typed the capital.[8]George R.R. Martin
|
||||
It does everything I want a word processing program to do and it doesn't do
|
||||
anything else. I don't want any help. I hate some of these modern systems
|
||||
where you type up a lowercase letter and it becomes a capital. I don't want
|
||||
a capital, if I'd wanted a capital, I would have typed the capital.[9]
|
||||
George R.R. Martin
|
||||
|
||||
This program embodies the concept of finished software — a software you
|
||||
can use forever with no unneeded changes.
|
||||
This program embodies the concept of finished software — a software you can use
|
||||
forever with no unneeded changes.
|
||||
|
||||
Finished software is software that’s not expected to change, and that’s
|
||||
a feature! You can rely on it to do some real work.
|
||||
Finished software is software that’s not expected to change, and that’s a
|
||||
feature! You can rely on it to do some real work.
|
||||
|
||||
Once you get used to the software, once the software works for you, you
|
||||
don’t need to learn anything new; the interface will exactly be the
|
||||
same, and all your files will stay relevant. No migrations, no new
|
||||
payments, no new changes.
|
||||
Once you get used to the software, once the software works for you, you don’t
|
||||
need to learn anything new; the interface will exactly be the same, and all
|
||||
your files will stay relevant. No migrations, no new payments, no new changes.
|
||||
|
||||
This kind of software can be created intentionally, with a compromise
|
||||
from the creators that they won’t bother you with things you don’t
|
||||
need, and only the absolutely necessary will change, like minor updates
|
||||
to make it compatible with new operating systems.
|
||||
This kind of software can be created intentionally, with a compromise from the
|
||||
creators that they won’t bother you with things you don’t need, and only the
|
||||
absolutely necessary will change, like minor updates to make it compatible with
|
||||
new operating systems.
|
||||
|
||||
Sometimes, finished software happens accidentally; maybe the company
|
||||
behind it has disappeared, or the product has been abandoned.
|
||||
Sometimes, finished software happens accidentally; maybe the company behind it
|
||||
has disappeared, or the product has been abandoned.
|
||||
|
||||
There are also some great examples in the UNIX world of finished
|
||||
software: commands like cd(to change the current directory) or ls(to
|
||||
list what’s there) won’t ever change in a significant way. You can rely
|
||||
on them until the end of your career.
|
||||
There are also some great examples in the UNIX world of finished software:
|
||||
commands like cd(to change the current directory) or ls(to list what’s there)
|
||||
won’t ever change in a significant way. You can rely on them until the end of
|
||||
your career.
|
||||
|
||||
The seduction of constant updates
|
||||
|
||||
Our expectations for software are different from other products we use
|
||||
in our daily lives.
|
||||
Our expectations for software are different from other products we use in our
|
||||
daily lives.
|
||||
|
||||
When we buy a physical product, we accept that it won’t change in its
|
||||
lifetime. We’ll use it until it wears off, and we replace it. We can
|
||||
rely on that product not evolving; the gas pedal in my car will always
|
||||
be in the same place.
|
||||
When we buy a physical product, we accept that it won’t change in its lifetime.
|
||||
We’ll use it until it wears off, and we replace it. We can rely on that product
|
||||
not evolving; the gas pedal in my car will always be in the same place.
|
||||
|
||||
However, when it comes to software, we usually have the ingrained
|
||||
expectations of perpetual updates. We believe that if software doesn’t
|
||||
evolve it’ll be boring, old and unusable. If we see an app with no
|
||||
updates in the last year, we think the creator might be dead.
|
||||
However, when it comes to software, we usually have the ingrained expectations
|
||||
of perpetual updates. We believe that if software doesn’t evolve it’ll be
|
||||
boring, old and unusable. If we see an app with no updates in the last year, we
|
||||
think the creator might be dead.
|
||||
|
||||
We also expect new versions of any software will be better than the
|
||||
previous ones. Once it’s released, most of our problems will be solved!
|
||||
What a deceiving lie.
|
||||
We also expect new versions of any software will be better than the previous
|
||||
ones. Once it’s released, most of our problems will be solved! What a deceiving
|
||||
lie.
|
||||
|
||||
Sometimes, a software upgrade is a step backward: less usable, less
|
||||
stable, with new bugs. Even if it’s genuinely better, there’s the
|
||||
learning curve. You were efficient with the old version, but now your
|
||||
most used button is on the other side of the screen under a hidden
|
||||
menu.
|
||||
Sometimes, a software upgrade is a step backward: less usable, less stable,
|
||||
with new bugs. Even if it’s genuinely better, there’s the learning curve. You
|
||||
were efficient with the old version, but now your most used button is on the
|
||||
other side of the screen under a hidden menu.
|
||||
|
||||
Finished software is a good reminder
|
||||
|
||||
In a world where constant change is the norm, finished software
|
||||
provides a breath of fresh air. It’s a reminder that reliability,
|
||||
consistency, and user satisfaction can coexist in the realm of software
|
||||
development.
|
||||
In a world where constant change is the norm, finished software provides a
|
||||
breath of fresh air. It’s a reminder that reliability, consistency, and user
|
||||
satisfaction can coexist in the realm of software development.
|
||||
|
||||
So the next time you find yourself yearning for the latest update,
|
||||
remember that sometimes, the best software is the one that doesn’t
|
||||
change at all.
|
||||
__________________________________________________________________
|
||||
So the next time you find yourself yearning for the latest update, remember
|
||||
that sometimes, the best software is the one that doesn’t change at all.
|
||||
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
References
|
||||
|
||||
[1] George R.R. Martin in Conan show (2014).
|
||||
[9]https://www.youtube.com/watch?v=X5REM-3nWHg.
|
||||
[1] George R.R. Martin in Conan show (2014). [10]https://www.youtube.com/watch?
|
||||
v=X5REM-3nWHg.
|
||||
|
||||
Subscribe below to get future posts in your inbox (no spam)
|
||||
____________________
|
||||
____________________
|
||||
Subscribe
|
||||
|
||||
Or use the [10]RSS feed link.
|
||||
__________________________________________________________________
|
||||
[11][ ]
|
||||
[12][ ]
|
||||
[13][Subscribe]
|
||||
Or use the [14]RSS feed link.
|
||||
|
||||
This site is ads-free and done in my free time. [11]Buy Me A Coffee to
|
||||
help me keep working on it.
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
© 2023 [12]Home | [13]Mastodon | [14]Twitter | [15]RSS feed | [16]Buy
|
||||
Me A Coffee
|
||||
This site is ads-free and done in my free time. [15]Buy Me A Coffee to help me
|
||||
keep working on it.
|
||||
|
||||
References
|
||||
© 2023 [16]Home | [17]Mastodon | [18]Twitter | [19]RSS feed | [20]Buy Me A
|
||||
Coffee[21]
|
||||
|
||||
Visible links:
|
||||
1. https://josem.co//articles/index.xml
|
||||
2. https://josem.co/
|
||||
3. https://josem.co/articles/
|
||||
4. https://josem.co/subscribe/
|
||||
5. https://josem.co/work/
|
||||
6. https://josem.co/about/
|
||||
7. https://en.wikipedia.org/wiki/WordStar
|
||||
8. https://josem.co/the-beauty-of-finished-software/#rf1
|
||||
9. https://www.youtube.com/watch?v=X5REM-3nWHg
|
||||
10. https://josem.co/articles/index.xml
|
||||
11. https://www.buymeacoffee.com/josem.co
|
||||
12. https://josem.co/
|
||||
13. https://mstdn.social/@josem
|
||||
14. https://twitter.com/gilgado_
|
||||
15. https://josem.co/articles/index.xml
|
||||
16. https://www.buymeacoffee.com/josem.co
|
||||
References:
|
||||
|
||||
Hidden links:
|
||||
18. https://josem.co/
|
||||
19. https://josem.co/the-beauty-of-finished-software/#top
|
||||
[1] https://josem.co/
|
||||
[2] https://josem.co/
|
||||
[3] https://josem.co/articles/
|
||||
[4] https://josem.co/subscribe/
|
||||
[5] https://josem.co/work/
|
||||
[6] https://josem.co/about/
|
||||
[8] https://en.wikipedia.org/wiki/WordStar
|
||||
[9] https://josem.co/the-beauty-of-finished-software/#rf1
|
||||
[10] https://www.youtube.com/watch?v=X5REM-3nWHg
|
||||
[14] https://josem.co/articles/index.xml
|
||||
[15] https://www.buymeacoffee.com/josem.co
|
||||
[16] https://josem.co/
|
||||
[17] https://mstdn.social/@josem
|
||||
[18] https://twitter.com/gilgado_
|
||||
[19] https://josem.co/articles/index.xml
|
||||
[20] https://www.buymeacoffee.com/josem.co
|
||||
[21] https://josem.co/the-beauty-of-finished-software/#top
|
||||
|
||||
@@ -1,42 +1,39 @@
|
||||
#[1]RSS Feed for ANIAT [2]JSON Feed for ANIAT
|
||||
[snowman-20]
|
||||
|
||||
[snowman-200.jpg]
|
||||
|
||||
[3]And now it’s all this
|
||||
[1]And now it’s all this
|
||||
|
||||
I just said what I said and it was wrong
|
||||
Or was taken wrong
|
||||
|
||||
[4]Next post [5]Previous post
|
||||
[2]Next post [3]Previous post
|
||||
|
||||
[6]Tidying Markdown reference links
|
||||
[4]Tidying Markdown reference links
|
||||
|
||||
September 17, 2012 at 9:15 PM by Dr. Drang
|
||||
|
||||
Oscar Wilde—who would have been great on Twitter—[7]said “I couldn’t
|
||||
help it. I can resist everything except temptation.” That’s my excuse
|
||||
for this post.
|
||||
Oscar Wilde—who would have been great on Twitter—[5]said “I couldn’t help it. I
|
||||
can resist everything except temptation.” That’s my excuse for this post.
|
||||
|
||||
Several days ago I got an email from a reader, asking if I knew of a
|
||||
script that would tidy up [8]Markdown reference links in a document.
|
||||
She wanted them reordered and renumbered at the end of the document to
|
||||
match the order in which they appear in the body of the text. I didn’t
|
||||
know of one^[9]1 and suggested she write it herself and let me know
|
||||
when it’s done. I’ve been getting progress reports, but her script
|
||||
isn’t finished yet.
|
||||
Several days ago I got an email from a reader, asking if I knew of a script
|
||||
that would tidy up [6]Markdown reference links in a document. She wanted them
|
||||
reordered and renumbered at the end of the document to match the order in which
|
||||
they appear in the body of the text. I didn’t know of one^[7]1 and suggested
|
||||
she write it herself and let me know when it’s done. I’ve been getting progress
|
||||
reports, but her script isn’t finished yet.
|
||||
|
||||
There’s certainly no need to tidy the links up that way. Markdown
|
||||
doesn’t care what order the reference links appear in or the labels
|
||||
that are assigned to them. I’ve written dozens of posts in which the
|
||||
order of the references at the end of the Markdown source were way off
|
||||
from the order of the links in body. But…
|
||||
There’s certainly no need to tidy the links up that way. Markdown doesn’t care
|
||||
what order the reference links appear in or the labels that are assigned to
|
||||
them. I’ve written dozens of posts in which the order of the references at the
|
||||
end of the Markdown source were way off from the order of the links in body.
|
||||
But…
|
||||
|
||||
But there is an attraction to putting everything in apple pie order,
|
||||
even when no one but me will ever see it. Last night I succumbed and
|
||||
wrote a script to tidy up the links. Sorry, Phaedra.
|
||||
But there is an attraction to putting everything in apple pie order, even when
|
||||
no one but me will ever see it. Last night I succumbed and wrote a script to
|
||||
tidy up the links. Sorry, Phaedra.
|
||||
|
||||
Here’s an example of a short Markdown document with out-of-order reference
|
||||
links:
|
||||
|
||||
Here’s an example of a short Markdown document with out-of-order
|
||||
reference links:
|
||||
Species and their hybrids, How simply are these facts! How
|
||||
strange that the pollen of each But we may thus have
|
||||
[succeeded][2] in selecting so many exceptions to this rule.
|
||||
@@ -64,9 +61,10 @@ selection may be extended--to the stigma of.
|
||||
[3]: http://docs.python.org/library/index.html
|
||||
[4]: http://www.kungfugrippe.com/
|
||||
|
||||
Note that the references are numbered 1, 2, 3, 4 at the bottom of the
|
||||
document, but that they appear in the body in the order 2, 4, 3, 1. The
|
||||
purpose of the script is to change the document to
|
||||
Note that the references are numbered 1, 2, 3, 4 at the bottom of the document,
|
||||
but that they appear in the body in the order 2, 4, 3, 1. The purpose of the
|
||||
script is to change the document to
|
||||
|
||||
Species and their hybrids, How simply are these facts! How
|
||||
strange that the pollen of each But we may thus have
|
||||
[succeeded][1] in selecting so many exceptions to this rule.
|
||||
@@ -95,12 +93,13 @@ selection may be extended--to the stigma of.
|
||||
[3]: http://www.kungfugrippe.com/
|
||||
[4]: http://daringfireball.net/markdown/
|
||||
|
||||
Now the links are numbered 1, 2, 3, 4 in both the text and the end
|
||||
references. The HTML produced when this document is run through a
|
||||
Markdown processor will be the same as the previous one—the links will
|
||||
still go to the right places—but the Markdown source looks better.
|
||||
Now the links are numbered 1, 2, 3, 4 in both the text and the end references.
|
||||
The HTML produced when this document is run through a Markdown processor will
|
||||
be the same as the previous one—the links will still go to the right places—but
|
||||
the Markdown source looks better.
|
||||
|
||||
Here’s the script that does it:
|
||||
|
||||
python:
|
||||
1: #!/usr/bin/python
|
||||
2:
|
||||
@@ -137,8 +136,7 @@ python:
|
||||
33: order.append(i[1])
|
||||
34:
|
||||
35: # Make a list of the references in order of appearance.
|
||||
36: newlabels = [ '[%d]: %s' % (i + 1, labels[j]) for (i, j) in enumerate(order
|
||||
) ]
|
||||
36: newlabels = [ '[%d]: %s' % (i + 1, labels[j]) for (i, j) in enumerate(order) ]
|
||||
37:
|
||||
38: # Remove the old references and put the new ones at the end of the text.
|
||||
39: text = label.sub('', text).rstrip() + '\n'*3 + '\n'.join(newlabels)
|
||||
@@ -148,139 +146,135 @@ python:
|
||||
43:
|
||||
44: print text
|
||||
|
||||
The regular expressions in Lines 13 and 17 are fairly easy to
|
||||
understand. The first one looks for the links in the body of the text
|
||||
and the second looks for the labels.
|
||||
The regular expressions in Lines 13 and 17 are fairly easy to understand. The
|
||||
first one looks for the links in the body of the text and the second looks for
|
||||
the labels.
|
||||
|
||||
The key to the script are the four data structures: links, labels, order, and
|
||||
newlabels. For our example document, links is the list of tuples
|
||||
|
||||
The key to the script are the four data structures: links, labels,
|
||||
order, and newlabels. For our example document, links is the list of
|
||||
tuples
|
||||
[('succeeded', '2'),
|
||||
('single character', '4'),
|
||||
('under confinement', '3'),
|
||||
('slaves', '1')]
|
||||
|
||||
labels is the dictionary
|
||||
|
||||
{'1': 'http://daringfireball.net/markdown/',
|
||||
'3': 'http://docs.python.org/library/index.html',
|
||||
'2': 'http://www.google.com/',
|
||||
'4': 'http://www.kungfugrippe.com/'}
|
||||
|
||||
order is the list
|
||||
|
||||
['2', '4', '3', '1']
|
||||
|
||||
and newlabels is the list of strings
|
||||
|
||||
['[1]: http://www.google.com/',
|
||||
'[2]: http://docs.python.org/library/index.html',
|
||||
'[3]: http://www.kungfugrippe.com/',
|
||||
'[4]: http://daringfireball.net/markdown/']
|
||||
|
||||
links and labels are built via the regex findall method in Lines 25-26.
|
||||
links is the direct output of the method and maintains the order in
|
||||
which the links appear in the text. labels is that same output, but
|
||||
converted to a dictionary. Its order, which we don’t care about, is
|
||||
lost in the conversion, but it can be used to easily access the URL
|
||||
from the link label.
|
||||
links and labels are built via the regex findall method in Lines 25-26. links
|
||||
is the direct output of the method and maintains the order in which the links
|
||||
appear in the text. labels is that same output, but converted to a dictionary.
|
||||
Its order, which we don’t care about, is lost in the conversion, but it can be
|
||||
used to easily access the URL from the link label.
|
||||
|
||||
order is the order in which the link labels first appear in the text.
|
||||
The if statement in Line 32 ensures that repeated links don’t overwrite
|
||||
each other.
|
||||
order is the order in which the link labels first appear in the text. The if
|
||||
statement in Line 32 ensures that repeated links don’t overwrite each other.
|
||||
|
||||
newlabels is built from labels and order in Line 36. It’s the list of
|
||||
labels after the renumbering. Line 39 deletes the original label lines
|
||||
and puts the new ones at the end of the document.
|
||||
newlabels is built from labels and order in Line 36. It’s the list of labels
|
||||
after the renumbering. Line 39 deletes the original label lines and puts the
|
||||
new ones at the end of the document.
|
||||
|
||||
Finally, Line 42 replaces all the link labels in the body of the text
|
||||
with the new values. Rather than a replacement string, it uses a simple
|
||||
replacement function defined in Lines 19-21 to do so.
|
||||
Finally, Line 42 replaces all the link labels in the body of the text with the
|
||||
new values. Rather than a replacement string, it uses a simple replacement
|
||||
function defined in Lines 19-21 to do so.
|
||||
|
||||
Barring any bugs I haven’t found yet, this script (or filter) will work
|
||||
on any Markdown document and can be used either directly from the
|
||||
command line or through whatever system your text editor uses to call
|
||||
external scripts. I have it stored in BBEdit’s Text Filters folder
|
||||
under the name “Tidy Markdown Reference Links.py,” so I can call it
|
||||
from the Text ‣ Apply Text Filter submenu.
|
||||
Barring any bugs I haven’t found yet, this script (or filter) will work on any
|
||||
Markdown document and can be used either directly from the command line or
|
||||
through whatever system your text editor uses to call external scripts. I have
|
||||
it stored in BBEdit’s Text Filters folder under the name “Tidy Markdown
|
||||
Reference Links.py,” so I can call it from the Text ‣ Apply Text Filter
|
||||
submenu.
|
||||
|
||||
I should mention that although this script is fairly compact and
|
||||
simple, it didn’t spring from my head fully formed. There were starts
|
||||
and stops as I figured out which data structures were needed and how
|
||||
they could be built. Each little subsection of the script was tested as
|
||||
I went along. The order list was originally a list of tuples; it wasn’t
|
||||
until I had a working version of the entire script that I realized that
|
||||
it could be simplified down to a list of link labels. That change
|
||||
shortened the script by five lines or so and, more importantly,
|
||||
clarified its logic.
|
||||
I should mention that although this script is fairly compact and simple, it
|
||||
didn’t spring from my head fully formed. There were starts and stops as I
|
||||
figured out which data structures were needed and how they could be built. Each
|
||||
little subsection of the script was tested as I went along. The order list was
|
||||
originally a list of tuples; it wasn’t until I had a working version of the
|
||||
entire script that I realized that it could be simplified down to a list of
|
||||
link labels. That change shortened the script by five lines or so and, more
|
||||
importantly, clarified its logic.
|
||||
|
||||
Despite these improvements, the script is hardly foolproof. The
|
||||
Markdown source of this very post confuses the hell out it. Not only
|
||||
does it think there are links in the sample document (which you’d
|
||||
probably guess), it also thinks the [%s][%d] in Line 21 of the script
|
||||
is a link (and the one in this sentence, too). And why wouldn’t it? To
|
||||
distinguish between real links and things that look like links in
|
||||
embedded source code, the script would have to be able to parse
|
||||
Markdown, not just match a couple of short regular expressions. This is
|
||||
a variant on what Hamish Sanderson said in the comments on [10]an
|
||||
earlier post.
|
||||
Despite these improvements, the script is hardly foolproof. The Markdown source
|
||||
of this very post confuses the hell out it. Not only does it think there are
|
||||
links in the sample document (which you’d probably guess), it also thinks the
|
||||
[%s][%d] in Line 21 of the script is a link (and the one in this sentence,
|
||||
too). And why wouldn’t it? To distinguish between real links and things that
|
||||
look like links in embedded source code, the script would have to be able to
|
||||
parse Markdown, not just match a couple of short regular expressions. This is a
|
||||
variant on what Hamish Sanderson said in the comments on [8]an earlier post.
|
||||
|
||||
At the moment, I’m not willing to sacrifice the simplicity of the Tidy
|
||||
script to get it to handle weird posts like this one. But if I find
|
||||
that it fails often with the kind of input I commonly give it, I’ll
|
||||
have to revisit that decision.
|
||||
At the moment, I’m not willing to sacrifice the simplicity of the Tidy script
|
||||
to get it to handle weird posts like this one. But if I find that it fails
|
||||
often with the kind of input I commonly give it, I’ll have to revisit that
|
||||
decision.
|
||||
|
||||
As Wilde also said, “Experience is the name everyone gives to their
|
||||
mistakes.”
|
||||
__________________________________________________________________
|
||||
As Wilde also said, “Experience is the name everyone gives to their mistakes.”
|
||||
|
||||
1. I didn’t think [11]Seth Brown’s formd did that, but [12]this tweet
|
||||
from Brett Terpsta says I was wrong about that. [13]↩
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
[14]Next post [15]Previous post
|
||||
1. I didn’t think [9]Seth Brown’s formd did that, but [10]this tweet from
|
||||
Brett Terpsta says I was wrong about that. [11]↩
|
||||
|
||||
[12]Next post [13]Previous post
|
||||
|
||||
Site search
|
||||
|
||||
____________________ Go!
|
||||
|
||||
[21][ ] [22][Go!]
|
||||
Meta
|
||||
|
||||
* drdrang at leancrew
|
||||
* [16]Blog archive
|
||||
* [17]RSS feed
|
||||
* [18]JSON feed
|
||||
* [19]Mastodon
|
||||
* [20]GitHub repositories
|
||||
• drdrang at leancrew
|
||||
• [23]Blog archive
|
||||
• [24]RSS feed
|
||||
• [25]JSON feed
|
||||
• [26]Mastodon
|
||||
• [27]GitHub repositories
|
||||
|
||||
Recent posts
|
||||
|
||||
Credits
|
||||
|
||||
[21]Powered by MathJax
|
||||
[28] Powered by MathJax
|
||||
|
||||
This work is licensed under a [22]Creative Commons Attribution-Share
|
||||
Alike 3.0 Unported License.
|
||||
This work is licensed under a [29]Creative Commons Attribution-Share Alike 3.0
|
||||
Unported License.
|
||||
|
||||
© 2005–2023, Dr. Drang
|
||||
|
||||
References
|
||||
|
||||
1. https://leancrew.com/all-this/feed/
|
||||
2. https://leancrew.com/all-this/feed.json
|
||||
3. https://leancrew.com/all-this/
|
||||
4. https://leancrew.com/all-this/2012/09/some-kind-of-druid-dudes-lifting-the-veil/
|
||||
5. https://leancrew.com/all-this/2012/09/implementing-pubsubhubbub/
|
||||
6. https://leancrew.com/all-this/2012/09/tidying-markdown-reference-links/
|
||||
7. http://www.gutenberg.org/dirs/etext97/lwfan10h.htm
|
||||
8. http://daringfireball.net/projects/markdown/syntax#link
|
||||
9. https://leancrew.com/all-this/2012/09/tidying-markdown-reference-links/#fn:formd
|
||||
10. http://www.leancrew.com/all-this/2012/09/applescript-syntax-highlighting-finally/
|
||||
11. http://www.drbunsen.org/formd-a-markdown-formatting-tool.html
|
||||
12. https://twitter.com/ttscoff/status/247398632377184256
|
||||
13. https://leancrew.com/all-this/2012/09/tidying-markdown-reference-links/#fnref:formd
|
||||
14. https://leancrew.com/all-this/2012/09/some-kind-of-druid-dudes-lifting-the-veil/
|
||||
15. https://leancrew.com/all-this/2012/09/implementing-pubsubhubbub/
|
||||
16. https://leancrew.com/all-this/archive/
|
||||
17. https://leancrew.com/all-this/feed/
|
||||
18. https://leancrew.com/all-this/feed.json
|
||||
19. https://fosstodon.org/@drdrang
|
||||
20. http://github.com/drdrang
|
||||
21. http://www.mathjax.org/
|
||||
22. http://creativecommons.org/licenses/by-sa/3.0/
|
||||
References:
|
||||
|
||||
[1] https://leancrew.com/all-this/
|
||||
[2] https://leancrew.com/all-this/2012/09/some-kind-of-druid-dudes-lifting-the-veil/
|
||||
[3] https://leancrew.com/all-this/2012/09/implementing-pubsubhubbub/
|
||||
[4] https://leancrew.com/all-this/2012/09/tidying-markdown-reference-links/
|
||||
[5] http://www.gutenberg.org/dirs/etext97/lwfan10h.htm
|
||||
[6] http://daringfireball.net/projects/markdown/syntax#link
|
||||
[7] https://leancrew.com/all-this/2012/09/tidying-markdown-reference-links/#fn:formd
|
||||
[8] http://www.leancrew.com/all-this/2012/09/applescript-syntax-highlighting-finally/
|
||||
[9] http://www.drbunsen.org/formd-a-markdown-formatting-tool.html
|
||||
[10] https://twitter.com/ttscoff/status/247398632377184256
|
||||
[11] https://leancrew.com/all-this/2012/09/tidying-markdown-reference-links/#fnref:formd
|
||||
[12] https://leancrew.com/all-this/2012/09/some-kind-of-druid-dudes-lifting-the-veil/
|
||||
[13] https://leancrew.com/all-this/2012/09/implementing-pubsubhubbub/
|
||||
[23] https://leancrew.com/all-this/archive/
|
||||
[24] https://leancrew.com/all-this/feed/
|
||||
[25] https://leancrew.com/all-this/feed.json
|
||||
[26] https://fosstodon.org/@drdrang
|
||||
[27] http://github.com/drdrang
|
||||
[28] http://www.mathjax.org/
|
||||
[29] http://creativecommons.org/licenses/by-sa/3.0/
|
||||
|
||||
@@ -1,91 +1,87 @@
|
||||
* Site
|
||||
+ [1]Home
|
||||
+ [2]About me
|
||||
* Blog
|
||||
+ [3]Posts
|
||||
+ [4]Categories
|
||||
* Post
|
||||
+ [5]Comments
|
||||
+ [6]Related
|
||||
• Site
|
||||
□ [1]Home
|
||||
□ [2]About me
|
||||
• Blog
|
||||
□ [3]Posts
|
||||
□ [4]Categories
|
||||
• Post
|
||||
□ [5]Comments
|
||||
□ [6]Related
|
||||
|
||||
No one actually wants simplicity
|
||||
|
||||
by [7]Luke Plant
|
||||
Posted in:
|
||||
* [8]Rants
|
||||
* [9]Software development
|
||||
* [10]Web development
|
||||
|
||||
• [8]Rants
|
||||
• [9]Software development
|
||||
• [10]Web development
|
||||
|
||||
— August 22, 2023 18:49
|
||||
|
||||
The reason that modern web development is [11]swamped with complexity
|
||||
is that no one really wants things to be simple. We just think we do,
|
||||
while our choices prove otherwise.
|
||||
The reason that modern web development is [11]swamped with complexity is that
|
||||
no one really wants things to be simple. We just think we do, while our choices
|
||||
prove otherwise.
|
||||
|
||||
A lot of developers want simplicity in the same way that a lot of
|
||||
clients claim they want a fast website. You respond “OK, so we can
|
||||
remove some of these 17 Javascript trackers and other bloat that’s
|
||||
making your website horribly slow?” – no, apparently those are all
|
||||
critical business functionality.
|
||||
A lot of developers want simplicity in the same way that a lot of clients claim
|
||||
they want a fast website. You respond “OK, so we can remove some of these 17
|
||||
Javascript trackers and other bloat that’s making your website horribly slow?”
|
||||
– no, apparently those are all critical business functionality.
|
||||
|
||||
In other words, they prioritise everything over speed. And then they
|
||||
wonder why using their website is like rowing a boat through a lake of
|
||||
molasses on a cold day using nothing but a small plastic spoon.
|
||||
In other words, they prioritise everything over speed. And then they wonder why
|
||||
using their website is like rowing a boat through a lake of molasses on a cold
|
||||
day using nothing but a small plastic spoon.
|
||||
|
||||
The same is often true of complexity. The real test is the question
|
||||
“what are you willing to sacrifice to achieve simplicity?” If the
|
||||
answer is “nothing”, then you don’t actually love simplicity at all,
|
||||
it’s your lowest priority.
|
||||
The same is often true of complexity. The real test is the question “what are
|
||||
you willing to sacrifice to achieve simplicity?” If the answer is “nothing”,
|
||||
then you don’t actually love simplicity at all, it’s your lowest priority.
|
||||
|
||||
When I say “sacrifice”, I don’t mean that choosing simplicity will mean
|
||||
you are worse off overall – simplicity brings massive benefits. But it
|
||||
does mean that there will be some things that tempt you to believe you
|
||||
are missing out.
|
||||
When I say “sacrifice”, I don’t mean that choosing simplicity will mean you are
|
||||
worse off overall – simplicity brings massive benefits. But it does mean that
|
||||
there will be some things that tempt you to believe you are missing out.
|
||||
|
||||
For every developer, it might be something different. For one, the
|
||||
tedium of having to spend half an hour a month ensuring that two
|
||||
different things are kept in sync easily justifies the adoption of a
|
||||
bulky framework that solves that particular problem. For another, the
|
||||
ability to control how a checkbox animates when you check it is of
|
||||
course a valid reason to add another 50 packages and 3 layers of
|
||||
frameworks to their product. For another, adding an abstraction with
|
||||
thousands of lines of codes, dozens of classes and page after page of
|
||||
documentation in order to avoid manually writing a [12]tiny factory
|
||||
For every developer, it might be something different. For one, the tedium of
|
||||
having to spend half an hour a month ensuring that two different things are
|
||||
kept in sync easily justifies the adoption of a bulky framework that solves
|
||||
that particular problem. For another, the ability to control how a checkbox
|
||||
animates when you check it is of course a valid reason to add another 50
|
||||
packages and 3 layers of frameworks to their product. For another, adding an
|
||||
abstraction with thousands of lines of codes, dozens of classes and page after
|
||||
page of documentation in order to avoid manually writing a [12]tiny factory
|
||||
function for a test is a great trade-off.
|
||||
|
||||
Of course we all claim to hate complexity, but it’s actually just
|
||||
complexity added by other people that we hate — our own bugbears are
|
||||
always exempted, and for things we understand we quickly become unable
|
||||
to even see there is a potential problem for other people. Certainly
|
||||
there are frameworks and dependencies that justify their existence and
|
||||
adoption, but working out which ones they are is hard.
|
||||
Of course we all claim to hate complexity, but it’s actually just complexity
|
||||
added by other people that we hate — our own bugbears are always exempted, and
|
||||
for things we understand we quickly become unable to even see there is a
|
||||
potential problem for other people. Certainly there are frameworks and
|
||||
dependencies that justify their existence and adoption, but working out which
|
||||
ones they are is hard.
|
||||
|
||||
I think a good test of whether you truly love simplicity is whether you
|
||||
are able to remove things you have added, especially code you’ve
|
||||
written, even when it is still providing value, because you realise it
|
||||
is not providing enough value.
|
||||
I think a good test of whether you truly love simplicity is whether you are
|
||||
able to remove things you have added, especially code you’ve written, even when
|
||||
it is still providing value, because you realise it is not providing enough
|
||||
value.
|
||||
|
||||
Another test is what you are tempted to do when a problem arises with
|
||||
some of the complexity you’ve added. Is your first instinct to add even
|
||||
more stuff to fix it, or is it to remove and live with the loss?
|
||||
Another test is what you are tempted to do when a problem arises with some of
|
||||
the complexity you’ve added. Is your first instinct to add even more stuff to
|
||||
fix it, or is it to remove and live with the loss?
|
||||
|
||||
The only path I can see through all this is to cultivate an almost
|
||||
obsessive suspicion of [13]FOMO. I think that’s probably key to
|
||||
learning to [14]say no.
|
||||
The only path I can see through all this is to cultivate an almost obsessive
|
||||
suspicion of [13]FOMO. I think that’s probably key to learning to [14]say no.
|
||||
|
||||
Links
|
||||
|
||||
* [15]Discussion of this post on Lobsters
|
||||
• [15]Discussion of this post on Lobsters
|
||||
|
||||
You may also like: [16]§
|
||||
|
||||
* [17]Super-fast Sphinx docs, and SNOB driven development
|
||||
* [18]Test smarter, not harder
|
||||
* [19]Announcement: Django Views - The Right Way
|
||||
* [20]Wedding hacks - seating planner using simulated annealing
|
||||
* [21]Wedding hacks - John Lewis gift list hyperlink
|
||||
* [22]A prayer to the programming gods
|
||||
* [23]Why learning Haskell/Python makes you a worse programmer
|
||||
• [17]Super-fast Sphinx docs, and SNOB driven development
|
||||
• [18]Test smarter, not harder
|
||||
• [19]Announcement: Django Views - The Right Way
|
||||
• [20]Wedding hacks - seating planner using simulated annealing
|
||||
• [21]Wedding hacks - John Lewis gift list hyperlink
|
||||
• [22]A prayer to the programming gods
|
||||
• [23]Why learning Haskell/Python makes you a worse programmer
|
||||
|
||||
Comments [24]§
|
||||
|
||||
@@ -96,31 +92,32 @@ Comments [24]§
|
||||
Built using [25]Nikola
|
||||
Powered by [26]DigitalOcean
|
||||
|
||||
References
|
||||
|
||||
1. https://lukeplant.me.uk/
|
||||
2. https://lukeplant.me.uk/personal/
|
||||
3. https://lukeplant.me.uk/blog/
|
||||
4. https://lukeplant.me.uk/blog/categories/
|
||||
5. https://lukeplant.me.uk/blog/posts/no-one-actually-wants-simplicity/#comments
|
||||
6. https://lukeplant.me.uk/blog/posts/no-one-actually-wants-simplicity/#related
|
||||
7. https://lukeplant.me.uk/
|
||||
8. https://lukeplant.me.uk/blog/categories/rants/
|
||||
9. https://lukeplant.me.uk/blog/categories/software-development/
|
||||
10. https://lukeplant.me.uk/blog/categories/web-development/
|
||||
11. https://www.youtube.com/watch?v=BtJAsvJOlhM
|
||||
12. https://lukeplant.me.uk/blog/posts/test-factory-functions-in-django/
|
||||
13. https://en.wikipedia.org/wiki/Fear_of_missing_out
|
||||
14. https://grugbrain.dev/#grug-on-saying-no
|
||||
15. https://lobste.rs/s/ao2x0v/no_one_actually_wants_simplicity
|
||||
16. https://lukeplant.me.uk/blog/posts/no-one-actually-wants-simplicity/#related
|
||||
17. https://lukeplant.me.uk/blog/posts/super-fast-sphinx-docs/
|
||||
18. https://lukeplant.me.uk/blog/posts/test-smarter-not-harder/
|
||||
19. https://lukeplant.me.uk/blog/posts/announcement-django-views-the-right-way/
|
||||
20. https://lukeplant.me.uk/blog/posts/wedding-hacks---seating-planner-using-simulated-annealing/
|
||||
21. https://lukeplant.me.uk/blog/posts/wedding-hacks---john-lewis-gift-list-hyperlink/
|
||||
22. https://lukeplant.me.uk/blog/posts/a-prayer-to-the-programming-gods/
|
||||
23. https://lukeplant.me.uk/blog/posts/why-learning-haskell-python-makes-you-a-worse-programmer/
|
||||
24. https://lukeplant.me.uk/blog/posts/no-one-actually-wants-simplicity/#comments
|
||||
25. https://getnikola.com/
|
||||
26. https://m.do.co/c/cef485980f20
|
||||
References:
|
||||
|
||||
[1] https://lukeplant.me.uk/
|
||||
[2] https://lukeplant.me.uk/personal/
|
||||
[3] https://lukeplant.me.uk/blog/
|
||||
[4] https://lukeplant.me.uk/blog/categories/
|
||||
[5] https://lukeplant.me.uk/blog/posts/no-one-actually-wants-simplicity/#comments
|
||||
[6] https://lukeplant.me.uk/blog/posts/no-one-actually-wants-simplicity/#related
|
||||
[7] https://lukeplant.me.uk/
|
||||
[8] https://lukeplant.me.uk/blog/categories/rants/
|
||||
[9] https://lukeplant.me.uk/blog/categories/software-development/
|
||||
[10] https://lukeplant.me.uk/blog/categories/web-development/
|
||||
[11] https://www.youtube.com/watch?v=BtJAsvJOlhM
|
||||
[12] https://lukeplant.me.uk/blog/posts/test-factory-functions-in-django/
|
||||
[13] https://en.wikipedia.org/wiki/Fear_of_missing_out
|
||||
[14] https://grugbrain.dev/#grug-on-saying-no
|
||||
[15] https://lobste.rs/s/ao2x0v/no_one_actually_wants_simplicity
|
||||
[16] https://lukeplant.me.uk/blog/posts/no-one-actually-wants-simplicity/#related
|
||||
[17] https://lukeplant.me.uk/blog/posts/super-fast-sphinx-docs/
|
||||
[18] https://lukeplant.me.uk/blog/posts/test-smarter-not-harder/
|
||||
[19] https://lukeplant.me.uk/blog/posts/announcement-django-views-the-right-way/
|
||||
[20] https://lukeplant.me.uk/blog/posts/wedding-hacks---seating-planner-using-simulated-annealing/
|
||||
[21] https://lukeplant.me.uk/blog/posts/wedding-hacks---john-lewis-gift-list-hyperlink/
|
||||
[22] https://lukeplant.me.uk/blog/posts/a-prayer-to-the-programming-gods/
|
||||
[23] https://lukeplant.me.uk/blog/posts/why-learning-haskell-python-makes-you-a-worse-programmer/
|
||||
[24] https://lukeplant.me.uk/blog/posts/no-one-actually-wants-simplicity/#comments
|
||||
[25] https://getnikola.com/
|
||||
[26] https://m.do.co/c/cef485980f20
|
||||
|
||||
@@ -1,349 +1,328 @@
|
||||
#[1]macwright.com - Micro [2]macwright.com - Micro
|
||||
|
||||
Tom MacWright
|
||||
|
||||
tom@macwright.com
|
||||
|
||||
Tom MacWright
|
||||
|
||||
* [3]Writingâ‡
|
||||
* [4]Reading
|
||||
* [5]Photos
|
||||
* [6]Projects
|
||||
* [7]Drawings
|
||||
* [8]Micro
|
||||
* [9]About
|
||||
• [1]Writing⇠
|
||||
• [2]Reading
|
||||
• [3]Photos
|
||||
• [4]Projects
|
||||
• [5]Drawings
|
||||
• [6]Micro
|
||||
• [7]About
|
||||
|
||||
A year of Rails
|
||||
|
||||
Railroad
|
||||
|
||||
I spent most of 2020 working with [10]Ruby on Rails. I moved a project
|
||||
from [11]Next.js + [12]Rust to… Rails, baby! Back to the future. My
|
||||
earlier post on [13]Second-guessing the modern web was inspired by this
|
||||
experience, that for the product we were building, a ‘modern’ stack was
|
||||
not working as well as a traditional one.
|
||||
I spent most of 2020 working with [8]Ruby on Rails. I moved a project from [9]
|
||||
Next.js + [10]Rust to… Rails, baby! Back to the future. My earlier post on [11]
|
||||
Second-guessing the modern web was inspired by this experience, that for the
|
||||
product we were building, a ‘modern’ stack was not working as well as a
|
||||
traditional one.
|
||||
|
||||
We didn’t do competitive analysis against Laravel, Django, or Phoenix.
|
||||
They’re similar, not radically better or worse. There are multiple
|
||||
acceptable solutions to a problem, and this was more a matter of
|
||||
choosing the right kind of solution than pursuing some kind of perfect
|
||||
choice and burning hours and motivation doing the window-shopping.
|
||||
We didn’t do competitive analysis against Laravel, Django, or Phoenix. They’re
|
||||
similar, not radically better or worse. There are multiple acceptable solutions
|
||||
to a problem, and this was more a matter of choosing the right kind of solution
|
||||
than pursuing some kind of perfect choice and burning hours and motivation
|
||||
doing the window-shopping.
|
||||
|
||||
What helped Rails win was that the team had a little more experience in
|
||||
Ruby (with the exception of myself), and we found plenty of resources
|
||||
for developing and deploying the stack. Rails fit perfectly into the
|
||||
ideology of [14]Choosing boring technology. Another part of the product
|
||||
would be the hard, innovative part, so it made no sense to grapple with
|
||||
bleeding-edge web frameworks.
|
||||
What helped Rails win was that the team had a little more experience in Ruby
|
||||
(with the exception of myself), and we found plenty of resources for developing
|
||||
and deploying the stack. Rails fit perfectly into the ideology of [12]Choosing
|
||||
boring technology. Another part of the product would be the hard, innovative
|
||||
part, so it made no sense to grapple with bleeding-edge web frameworks.
|
||||
|
||||
This was a really fun experience. There’s a lot to love about Rails.
|
||||
Other communities could learn a bit from the Ruby & Rails culture and
|
||||
wisdom. I won’t implement everything in Rails, but it’ll be part of the
|
||||
toolbox.
|
||||
This was a really fun experience. There’s a lot to love about Rails. Other
|
||||
communities could learn a bit from the Ruby & Rails culture and wisdom. I won’t
|
||||
implement everything in Rails, but it’ll be part of the toolbox.
|
||||
|
||||
Before this, I hadn’t touched the stuff. And I bet a lot of people are
|
||||
like that - they came of age in the world of React and Go, and haven’t
|
||||
tried anything even remotely similar to Rails. For their benefit, and
|
||||
to debrief from 2020, here are some notes on the experience. Plus,
|
||||
[15]Rails-like projects in JavaScript are ramping up quickly, and it’s
|
||||
fun to know the origins.
|
||||
Before this, I hadn’t touched the stuff. And I bet a lot of people are like
|
||||
that - they came of age in the world of React and Go, and haven’t tried
|
||||
anything even remotely similar to Rails. For their benefit, and to debrief from
|
||||
2020, here are some notes on the experience. Plus, [13]Rails-like projects in
|
||||
JavaScript are ramping up quickly, and it’s fun to know the origins.
|
||||
|
||||
The good
|
||||
|
||||
Debugging Rails apps is amazing
|
||||
|
||||
A while ago, I [16]wrote on Twitter
|
||||
A while ago, I [14]wrote on Twitter
|
||||
|
||||
the real reason why javascript developers don’t use breakpoints and
|
||||
use console.log is that breakpoints don’t work
|
||||
the real reason why javascript developers don’t use breakpoints and use
|
||||
console.log is that breakpoints don’t work
|
||||
|
||||
After years of working in JavaScript, I’m used to bad debugging
|
||||
experiences. The Chrome debugger’s [17]automatic pause on caught
|
||||
exceptions is amazing, sometimes. But throwing a debugger statement in
|
||||
some React code is dodgy as hell. Sometimes it works, mostly it
|
||||
doesn’t. You have to deal with code that might not have the right
|
||||
[18]sourcemap to translate from bundled & minified code to original
|
||||
source. Subtle abstractions like React hooks and advanced transpiler
|
||||
stuff like [19]Regenerator mean that your code’s stacktrace probably
|
||||
looks nothing like what you expect, with lots of internal garbage.
|
||||
Sure, you can learn better techniques for diagnosing and debugging
|
||||
errors, but it’s not just you - the debugging story in JavaScript is
|
||||
pretty bad. This applies even to Node.js, where one of the debugging
|
||||
stories is to connect Chrome’s debugger to a Node.js instance: a
|
||||
finicky solution that doesn’t consistently work.
|
||||
After years of working in JavaScript, I’m used to bad debugging experiences.
|
||||
The Chrome debugger’s [15]automatic pause on caught exceptions is amazing,
|
||||
sometimes. But throwing a debugger statement in some React code is dodgy as
|
||||
hell. Sometimes it works, mostly it doesn’t. You have to deal with code that
|
||||
might not have the right [16]sourcemap to translate from bundled & minified
|
||||
code to original source. Subtle abstractions like React hooks and advanced
|
||||
transpiler stuff like [17]Regenerator mean that your code’s stacktrace probably
|
||||
looks nothing like what you expect, with lots of internal garbage. Sure, you
|
||||
can learn better techniques for diagnosing and debugging errors, but it’s not
|
||||
just you - the debugging story in JavaScript is pretty bad. This applies even
|
||||
to Node.js, where one of the debugging stories is to connect Chrome’s debugger
|
||||
to a Node.js instance: a finicky solution that doesn’t consistently work.
|
||||
|
||||
In Rails, there is [20]byebug. You write byebug in your source code,
|
||||
and you get an interactive REPL right there. It works in views,
|
||||
controllers, database migrations, everywhere. It almost always works.
|
||||
Variables are named what you expect. The whole system is paused at that
|
||||
moment, and you can actually interact with it, using all of the Rails
|
||||
utilities and your installed gems.
|
||||
In Rails, there is [18]byebug. You write byebug in your source code, and you
|
||||
get an interactive REPL right there. It works in views, controllers, database
|
||||
migrations, everywhere. It almost always works. Variables are named what you
|
||||
expect. The whole system is paused at that moment, and you can actually
|
||||
interact with it, using all of the Rails utilities and your installed gems.
|
||||
|
||||
If a page crashes unexpectedly, you get a similar REPL experience, in
|
||||
your browser, automatically. With an automatically cleaned-up
|
||||
stacktrace that excludes Rails’s own frames. Like the byebug interface,
|
||||
this REPL actually works and is consistently helpful in finding root
|
||||
causes. Rarely will you need to use puts to print something to the
|
||||
console because this debugging system is so good.
|
||||
If a page crashes unexpectedly, you get a similar REPL experience, in your
|
||||
browser, automatically. With an automatically cleaned-up stacktrace that
|
||||
excludes Rails’s own frames. Like the byebug interface, this REPL actually
|
||||
works and is consistently helpful in finding root causes. Rarely will you need
|
||||
to use puts to print something to the console because this debugging system is
|
||||
so good.
|
||||
|
||||
The magic mostly works
|
||||
|
||||
Our Rails app didn’t have any require statements. You mention a
|
||||
module’s name, and it’s automatically included, using [21]Zeitwerk, a
|
||||
tool that comes standard with Rails.
|
||||
Our Rails app didn’t have any require statements. You mention a module’s name,
|
||||
and it’s automatically included, using [19]Zeitwerk, a tool that comes standard
|
||||
with Rails.
|
||||
|
||||
This kind of system was terrifying to me before. What if you
|
||||
accidentally import something just by mentioning it? What if two things
|
||||
have the same name and you import the wrong one? How do you really know
|
||||
what’s happening? Sure, you’re happy now, with all of that annoying
|
||||
importing and exporting taken care of, but the sky might fall.
|
||||
This kind of system was terrifying to me before. What if you accidentally
|
||||
import something just by mentioning it? What if two things have the same name
|
||||
and you import the wrong one? How do you really know what’s happening? Sure,
|
||||
you’re happy now, with all of that annoying importing and exporting taken care
|
||||
of, but the sky might fall.
|
||||
|
||||
Or maybe it just… doesn’t. Maybe impure, vaguely risky techniques are
|
||||
just a net positive over time, and making everything fully explicit
|
||||
isn’t really necessary? Now when I’m using other systems, I wonder -
|
||||
what if I could just mention one of my React components and it would
|
||||
just… be there? Sure, the system would have to complain if there were
|
||||
two components with the same name, and it would have to make
|
||||
assumptions about directory structure, but overall, wouldn’t this be
|
||||
nice?
|
||||
Or maybe it just… doesn’t. Maybe impure, vaguely risky techniques are just a
|
||||
net positive over time, and making everything fully explicit isn’t really
|
||||
necessary? Now when I’m using other systems, I wonder - what if I could just
|
||||
mention one of my React components and it would just… be there? Sure, the
|
||||
system would have to complain if there were two components with the same name,
|
||||
and it would have to make assumptions about directory structure, but overall,
|
||||
wouldn’t this be nice?
|
||||
|
||||
This applies to a lot of other parts of the system too. Rails is famous
|
||||
for doing pluralization - you name a model Post and you automatically
|
||||
get an interface called posts. But what, you ask, of words with uneven
|
||||
pluralization rules? Rails actually [22]does the right thing, almost
|
||||
always. And when it fails, you can override it. It actually just saves
|
||||
time, reliably.
|
||||
This applies to a lot of other parts of the system too. Rails is famous for
|
||||
doing pluralization - you name a model Post and you automatically get an
|
||||
interface called posts. But what, you ask, of words with uneven pluralization
|
||||
rules? Rails actually [20]does the right thing, almost always. And when it
|
||||
fails, you can override it. It actually just saves time, reliably.
|
||||
|
||||
Testing works
|
||||
|
||||
I’ve tried to test front-end applications. I’ve set up [23]nightwatch,
|
||||
[24]jest, [25]enzyme, [26]cypress, and probably 5-10 other frameworks.
|
||||
Front-end testing is universally terrible. Projects like Cypress are
|
||||
throwing untold hours into making it less terrible, taking on massive
|
||||
amounts of complexity to abstract away from fickle browser behavior and
|
||||
complex interactions.
|
||||
I’ve tried to test front-end applications. I’ve set up [21]nightwatch, [22]jest
|
||||
, [23]enzyme, [24]cypress, and probably 5-10 other frameworks. Front-end
|
||||
testing is universally terrible. Projects like Cypress are throwing untold
|
||||
hours into making it less terrible, taking on massive amounts of complexity to
|
||||
abstract away from fickle browser behavior and complex interactions.
|
||||
|
||||
But it still sucks. Frontend testing has no good attributes: it’s
|
||||
unreliable, hard to automate, hard to debug when it fails, and often
|
||||
doesn’t even assert for important behaviors, so it doesn’t actually
|
||||
identify regressions. Running frontend tests in CI is resource-heavy,
|
||||
requiring you to set up headless X windows environments on servers or
|
||||
use specialized CI services that produce screencasts of test runs.
|
||||
But it still sucks. Frontend testing has no good attributes: it’s unreliable,
|
||||
hard to automate, hard to debug when it fails, and often doesn’t even assert
|
||||
for important behaviors, so it doesn’t actually identify regressions. Running
|
||||
frontend tests in CI is resource-heavy, requiring you to set up headless X
|
||||
windows environments on servers or use specialized CI services that produce
|
||||
screencasts of test runs.
|
||||
|
||||
Testing fully-server-rendered applications, on the other hand, is
|
||||
amazing. A vanilla testing setup with Rails & [27]RSpec can give you
|
||||
fast, stable, concise, and actually-useful test coverage. You can
|
||||
actually assert for behavior and navigate through an application like a
|
||||
user would. These tests are solving a simpler problem - making requests
|
||||
and parsing responses, without the need for a full browser or headless
|
||||
browser, without multiple kinds of state to track.
|
||||
Testing fully-server-rendered applications, on the other hand, is amazing. A
|
||||
vanilla testing setup with Rails & [25]RSpec can give you fast, stable,
|
||||
concise, and actually-useful test coverage. You can actually assert for
|
||||
behavior and navigate through an application like a user would. These tests are
|
||||
solving a simpler problem - making requests and parsing responses, without the
|
||||
need for a full browser or headless browser, without multiple kinds of state to
|
||||
track.
|
||||
|
||||
Not only do the tests work better, the testing culture is a completely
|
||||
different universe. There are entire books written about how to write
|
||||
RSpec tests that catch bugs, allow software evolution, and aren’t
|
||||
filled with boilerplate.
|
||||
different universe. There are entire books written about how to write RSpec
|
||||
tests that catch bugs, allow software evolution, and aren’t filled with
|
||||
boilerplate.
|
||||
|
||||
Gems are so powerful
|
||||
|
||||
Powerful and dangerous.
|
||||
|
||||
I’m used to modules as they work in other systems - Python, Node, Elm,
|
||||
and so on. They provide objects, functions, and variables that you can
|
||||
import and combine into your code explicitly. Usually they sit on some
|
||||
specific level of abstraction - it’s a utility for connecting to
|
||||
servers or a React component you can use.
|
||||
I’m used to modules as they work in other systems - Python, Node, Elm, and so
|
||||
on. They provide objects, functions, and variables that you can import and
|
||||
combine into your code explicitly. Usually they sit on some specific level of
|
||||
abstraction - it’s a utility for connecting to servers or a React component you
|
||||
can use.
|
||||
|
||||
Gems can do so much more. You install something like [28]Devise into
|
||||
your system and it adds views, routes, methods, utilities, you name it.
|
||||
It’s not like “loading some functionsâ€<EFBFBD>, it’s more like composing a
|
||||
whole different app into your app, implicitly.
|
||||
Gems can do so much more. You install something like [26]Devise into your
|
||||
system and it adds views, routes, methods, utilities, you name it. It’s not
|
||||
like “loading some functions”, it’s more like composing a whole different app
|
||||
into your app, implicitly.
|
||||
|
||||
This is obviously terrifying. It means that you can’t look at your
|
||||
directories of views and your file of routes.rb and know what exists at
|
||||
a glance. There are other layers, lurking in the ephemeral space of
|
||||
third-party code. They interact in serious but uncertain ways.
|
||||
This is obviously terrifying. It means that you can’t look at your directories
|
||||
of views and your file of routes.rb and know what exists at a glance. There are
|
||||
other layers, lurking in the ephemeral space of third-party code. They interact
|
||||
in serious but uncertain ways.
|
||||
|
||||
But it’s also pretty incredible - the idea that something like
|
||||
[29]passport, Node’s middleware, could instead be a full-fledged
|
||||
authentication system. It means that you have to write a lot less code,
|
||||
and it also means that the people who use that code have a lot more
|
||||
code in common. That gems can work on a higher level of abstraction,
|
||||
making it possible to cobble together software faster, to write less
|
||||
‘glue code.’
|
||||
But it’s also pretty incredible - the idea that something like [27]passport,
|
||||
Node’s middleware, could instead be a full-fledged authentication system. It
|
||||
means that you have to write a lot less code, and it also means that the people
|
||||
who use that code have a lot more code in common. That gems can work on a
|
||||
higher level of abstraction, making it possible to cobble together software
|
||||
faster, to write less ‘glue code.’
|
||||
|
||||
There’s so much good writing about Rails
|
||||
|
||||
Even if you don’t write Ruby, you should pay attention to [30]Sandi
|
||||
Metz. She’s incredibly wise and has so many incredible ideas to share.
|
||||
Even if you don’t write Ruby, you should pay attention to [28]Sandi Metz. She’s
|
||||
incredibly wise and has so many incredible ideas to share.
|
||||
|
||||
And then there’s [31]arkency, [32]ThoughtBot, and so many other
|
||||
thoughtful writers with years of experience in Rails. Sometimes it’s a
|
||||
little shocking to google for some obscure problem and see a decade of
|
||||
discussion about it.
|
||||
And then there’s [29]arkency, [30]ThoughtBot, and so many other thoughtful
|
||||
writers with years of experience in Rails. Sometimes it’s a little shocking to
|
||||
google for some obscure problem and see a decade of discussion about it.
|
||||
|
||||
The best practices are also formalized into tools like [33]Code Climate
|
||||
and [34]reek. I’ve never seen so many actually-useful suggestions come
|
||||
out of automated systems as I did in the world of Ruby and Rails.
|
||||
The best practices are also formalized into tools like [31]Code Climate and
|
||||
[32]reek. I’ve never seen so many actually-useful suggestions come out of
|
||||
automated systems as I did in the world of Ruby and Rails.
|
||||
|
||||
Ruby
|
||||
|
||||
Ruby is a pretty pleasant language to work in. Sure, it has a lot of
|
||||
syntax and a sprawling standard library, but you don’t have to use all
|
||||
of that if you don’t want to. It took me a while to adjust to the
|
||||
object-oriented way of doing things - in particular, the idea that you
|
||||
can’t just have a free-range function floating out there, unassociated
|
||||
with a class or module, like you can in JavaScript. And you can’t just
|
||||
create an arbitrary one-off object - you either need to define a class
|
||||
to create an object, or use a Hash to store data.
|
||||
Ruby is a pretty pleasant language to work in. Sure, it has a lot of syntax and
|
||||
a sprawling standard library, but you don’t have to use all of that if you
|
||||
don’t want to. It took me a while to adjust to the object-oriented way of doing
|
||||
things - in particular, the idea that you can’t just have a free-range function
|
||||
floating out there, unassociated with a class or module, like you can in
|
||||
JavaScript. And you can’t just create an arbitrary one-off object - you either
|
||||
need to define a class to create an object, or use a Hash to store data.
|
||||
|
||||
But Ruby’s standard library isn’t that huge. I’ve seen JavaScript’s
|
||||
‘standard library’ grow a lot too, and frankly it’s nice to have
|
||||
methods like [35]String.prototype.padStart instead of having every
|
||||
little thing in userspace. The only part that felt actively weird was
|
||||
[36]activesupport - a gem that extends Ruby’s core objects, but is part
|
||||
of Rails. It felt weird to have string methods that would only work if
|
||||
your environment was Rails.
|
||||
But Ruby’s standard library isn’t that huge. I’ve seen JavaScript’s ‘standard
|
||||
library’ grow a lot too, and frankly it’s nice to have methods like [33]
|
||||
String.prototype.padStart instead of having every little thing in userspace.
|
||||
The only part that felt actively weird was [34]activesupport - a gem that
|
||||
extends Ruby’s core objects, but is part of Rails. It felt weird to have string
|
||||
methods that would only work if your environment was Rails.
|
||||
|
||||
The [37]Dash app for documentation rocketed from my pile of unused
|
||||
tools to an absolute must-have. In the world of Ruby and Rails, with
|
||||
most gems having pretty good, semi-standard documentation, you can
|
||||
search for, and get answers, super fast. The Ruby language
|
||||
documentation and the Rails documentation is absolutely great. The
|
||||
JavaScript equivalent - [38]MDN - pales in comparison.
|
||||
The [35]Dash app for documentation rocketed from my pile of unused tools to an
|
||||
absolute must-have. In the world of Ruby and Rails, with most gems having
|
||||
pretty good, semi-standard documentation, you can search for, and get answers,
|
||||
super fast. The Ruby language documentation and the Rails documentation is
|
||||
absolutely great. The JavaScript equivalent - [36]MDN - pales in comparison.
|
||||
|
||||
The bad
|
||||
|
||||
The asset pipeline
|
||||
|
||||
Remember SASS and the YUI Compressor? These are, unfortunately,
|
||||
defaults in the [39]asset pipeline. There’s [40]Webpacker too, which
|
||||
has a parallel approach to CSS and images as the asset pipeline. It has
|
||||
[41]opinionated integrations with stuff like React. Ah, and I should
|
||||
mention that Rails’s [42]JavaScript utilities are written in…
|
||||
CoffeeScript.
|
||||
Remember SASS and the YUI Compressor? These are, unfortunately, defaults in the
|
||||
[37]asset pipeline. There’s [38]Webpacker too, which has a parallel approach to
|
||||
CSS and images as the asset pipeline. It has [39]opinionated integrations with
|
||||
stuff like React. Ah, and I should mention that Rails’s [40]JavaScript
|
||||
utilities are written in… CoffeeScript.
|
||||
|
||||
I get it - it’s hard to keep up with the latest trends in frontend. But
|
||||
this is one area where Rails’s strong backwards compatibility feels
|
||||
iffy. I wish that Rails was more opinionated about the frontend, and
|
||||
that it had better opinions.
|
||||
I get it - it’s hard to keep up with the latest trends in frontend. But this is
|
||||
one area where Rails’s strong backwards compatibility feels iffy. I wish that
|
||||
Rails was more opinionated about the frontend, and that it had better opinions.
|
||||
|
||||
Best practice churn
|
||||
|
||||
In Smalltalk, everything happens somewhere else. - [43]Adele
|
||||
Goldberg
|
||||
In Smalltalk, everything happens somewhere else. - [41]Adele Goldberg
|
||||
|
||||
Ruby, as today’s Smalltalk, has the same issue. The community venerates
|
||||
small - that methods should be short, files should be small, complexity
|
||||
should be controlled. This begs the question of where it all goes -
|
||||
certainly not in controllers, which should be skinny, and not in views,
|
||||
which should have very little logic at all, and maybe [44]not in models
|
||||
either. Maybe in [45]Service Objects, or policies, or decorators?
|
||||
Ruby, as today’s Smalltalk, has the same issue. The community venerates small -
|
||||
that methods should be short, files should be small, complexity should be
|
||||
controlled. This begs the question of where it all goes - certainly not in
|
||||
controllers, which should be skinny, and not in views, which should have very
|
||||
little logic at all, and maybe [42]not in models either. Maybe in [43]Service
|
||||
Objects, or policies, or decorators?
|
||||
|
||||
I found myself falling victim to this. I’d try to win CodeClimate’s
|
||||
approval by moving code around, perfecting the art of making everything
|
||||
small or at most medium-sized, extracting concerns until most files
|
||||
looked okay. This was time well-spent on learning, but I have to admit
|
||||
that it doesn’t actually matter for an early-stage startup’s product.
|
||||
I found myself falling victim to this. I’d try to win CodeClimate’s approval by
|
||||
moving code around, perfecting the art of making everything small or at most
|
||||
medium-sized, extracting concerns until most files looked okay. This was time
|
||||
well-spent on learning, but I have to admit that it doesn’t actually matter for
|
||||
an early-stage startup’s product.
|
||||
|
||||
In stark contrast to the folks who say that Rails is for prototypes,
|
||||
there’s a lot of attention paid to long-lived engineering efforts -
|
||||
adopting patterns that let many team work on the same ‘monolith’,
|
||||
identifying [46]shotgun surgery - a term I first heard from Sandi Metz.
|
||||
In stark contrast to the folks who say that Rails is for prototypes, there’s a
|
||||
lot of attention paid to long-lived engineering efforts - adopting patterns
|
||||
that let many team work on the same ‘monolith’, identifying [44]shotgun surgery
|
||||
- a term I first heard from Sandi Metz.
|
||||
|
||||
ActiveRecord is great, except when it isn’t
|
||||
|
||||
One of the hardest bugs we encountered happened with ActiveRecord. We
|
||||
were creating a set of changes to apply to a model, using their
|
||||
in-memory instances to do some stuff, and then finally applying them.
|
||||
This broke because one of the ActiveRecord methods automatically
|
||||
‘committed’ those changes, quietly.
|
||||
One of the hardest bugs we encountered happened with ActiveRecord. We were
|
||||
creating a set of changes to apply to a model, using their in-memory instances
|
||||
to do some stuff, and then finally applying them. This broke because one of the
|
||||
ActiveRecord methods automatically ‘committed’ those changes, quietly.
|
||||
|
||||
ActiveRecord is kind of like this - a lot of the times it’s pleasantly
|
||||
implicit, letting you just assign a value and automatically saving that
|
||||
to the database. But then it’ll do something implicitly that you don’t
|
||||
want to happen, and figuring out why this happened and how to stop it
|
||||
from happening is a real challenge.
|
||||
implicit, letting you just assign a value and automatically saving that to the
|
||||
database. But then it’ll do something implicitly that you don’t want to happen,
|
||||
and figuring out why this happened and how to stop it from happening is a real
|
||||
challenge.
|
||||
|
||||
Most of the time, to be clear - it’s a really great system. It provides
|
||||
lots of ways to generate efficient-enough queries, knowing full well
|
||||
that SQL performance is often the bottleneck of web applications. Most
|
||||
of the time it’s really nice that it automatically casts and
|
||||
deserializes query results. But when it goes bad, the diagnosis and the
|
||||
cure can be pretty ugly.
|
||||
Most of the time, to be clear - it’s a really great system. It provides lots of
|
||||
ways to generate efficient-enough queries, knowing full well that SQL
|
||||
performance is often the bottleneck of web applications. Most of the time it’s
|
||||
really nice that it automatically casts and deserializes query results. But
|
||||
when it goes bad, the diagnosis and the cure can be pretty ugly.
|
||||
|
||||
The other issue with ActiveRecord is that it has efficient methods and
|
||||
inefficient methods right next to each other, because it automatically
|
||||
turns your ‘query builder’ into an array when you call array-like
|
||||
methods. So, for example:
|
||||
inefficient methods right next to each other, because it automatically turns
|
||||
your ‘query builder’ into an array when you call array-like methods. So, for
|
||||
example:
|
||||
|
||||
Dogs.all.max_by(&:height)
|
||||
|
||||
Is wildly inefficient. It might fetch and deserialized a million
|
||||
records just to sort them and give you the first. On the other hand,
|
||||
Is wildly inefficient. It might fetch and deserialized a million records just
|
||||
to sort them and give you the first. On the other hand,
|
||||
|
||||
Dogs.order(height: :desc).first
|
||||
|
||||
Is fast - it sorts in the database and fetches a single record. Rails
|
||||
is both offering smart and easy ways to write optimized code, but also
|
||||
making it really easy to write inefficient code.
|
||||
__________________________________________________________________
|
||||
Is fast - it sorts in the database and fetches a single record. Rails is both
|
||||
offering smart and easy ways to write optimized code, but also making it really
|
||||
easy to write inefficient code.
|
||||
|
||||
A Rails-like framework is a really good thing to have in your toolbox,
|
||||
and there’s a lot to learn from the Ruby community. My hope is that we
|
||||
see these sorts of abstractions in new languages and frameworks, and
|
||||
see more of the Ruby community’s culture filter into the programming
|
||||
world.
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
February 18, 2021 [47]Tom MacWright ([48]@tmcw,
|
||||
[49]@tmcw@mastodon.social)
|
||||
A Rails-like framework is a really good thing to have in your toolbox, and
|
||||
there’s a lot to learn from the Ruby community. My hope is that we see these
|
||||
sorts of abstractions in new languages and frameworks, and see more of the Ruby
|
||||
community’s culture filter into the programming world.
|
||||
|
||||
References
|
||||
February 18, 2021 [45]Tom MacWright ([46]@tmcw, [47]@tmcw@mastodon.social)
|
||||
|
||||
1. https://macwright.com/micro/rss.xml
|
||||
2. https://macwright.com/micro/atom.xml
|
||||
3. https://macwright.com/
|
||||
4. https://macwright.com/reading/
|
||||
5. https://macwright.com/photos/
|
||||
6. https://macwright.com/projects/
|
||||
7. https://macwright.com/drawings/
|
||||
8. https://macwright.com/micro/
|
||||
9. https://macwright.com/about/
|
||||
10. https://rubyonrails.org/
|
||||
11. https://nextjs.org/
|
||||
12. https://www.rust-lang.org/
|
||||
13. https://macwright.com/2020/05/10/spa-fatigue
|
||||
14. http://boringtechnology.club/
|
||||
15. https://macwright.com/2020/10/28/if-not-spas
|
||||
16. https://twitter.com/tmcw/status/1321133460501585922
|
||||
17. https://developers.google.com/web/updates/2015/05/automatically-pause-on-any-exception
|
||||
18. https://www.html5rocks.com/en/tutorials/developertools/sourcemaps/
|
||||
19. https://github.com/facebook/regenerator
|
||||
20. https://github.com/deivid-rodriguez/byebug
|
||||
21. https://github.com/fxn/zeitwerk
|
||||
22. https://weblog.rubyonrails.org/2005/8/25/10-reasons-rails-does-pluralization/
|
||||
23. https://nightwatchjs.org/
|
||||
24. https://jestjs.io/
|
||||
25. https://enzymejs.github.io/enzyme/
|
||||
26. https://www.cypress.io/
|
||||
27. https://rspec.info/
|
||||
28. https://github.com/heartcombo/devise
|
||||
29. http://www.passportjs.org/
|
||||
30. https://sandimetz.com/
|
||||
31. https://blog.arkency.com/
|
||||
32. https://thoughtbot.com/blog/
|
||||
33. https://codeclimate.com/
|
||||
34. https://github.com/troessner/reek
|
||||
35. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padStart
|
||||
36. https://web.archive.org/web/https://rubygems.org/gems/activesupport/versions/6.1.1
|
||||
37. https://kapeli.com/dash
|
||||
38. https://developer.mozilla.org/en-US/
|
||||
39. https://guides.rubyonrails.org/asset_pipeline.html
|
||||
40. https://edgeguides.rubyonrails.org/webpacker.html
|
||||
41. https://github.com/rails/webpacker#integrations
|
||||
42. https://github.com/rails/rails/tree/main/actionview/app/assets/javascripts
|
||||
43. https://en.wikipedia.org/wiki/Adele_Goldberg_(computer_scientist)
|
||||
44. https://thoughtbot.com/blog/skinny-controllers-skinny-models
|
||||
45. https://codeclimate.com/blog/7-ways-to-decompose-fat-activerecord-models/
|
||||
46. https://en.wikipedia.org/wiki/Shotgun_surgery
|
||||
47. https://macwright.com/about/
|
||||
48. https://twitter.com/intent/follow?screen_name=tmcw&user_id=1458271
|
||||
49. https://mastodon.social/@tmcw
|
||||
|
||||
References:
|
||||
|
||||
[1] https://macwright.com/
|
||||
[2] https://macwright.com/reading/
|
||||
[3] https://macwright.com/photos/
|
||||
[4] https://macwright.com/projects/
|
||||
[5] https://macwright.com/drawings/
|
||||
[6] https://macwright.com/micro/
|
||||
[7] https://macwright.com/about/
|
||||
[8] https://rubyonrails.org/
|
||||
[9] https://nextjs.org/
|
||||
[10] https://www.rust-lang.org/
|
||||
[11] https://macwright.com/2020/05/10/spa-fatigue
|
||||
[12] http://boringtechnology.club/
|
||||
[13] https://macwright.com/2020/10/28/if-not-spas
|
||||
[14] https://twitter.com/tmcw/status/1321133460501585922
|
||||
[15] https://developers.google.com/web/updates/2015/05/automatically-pause-on-any-exception
|
||||
[16] https://www.html5rocks.com/en/tutorials/developertools/sourcemaps/
|
||||
[17] https://github.com/facebook/regenerator
|
||||
[18] https://github.com/deivid-rodriguez/byebug
|
||||
[19] https://github.com/fxn/zeitwerk
|
||||
[20] https://weblog.rubyonrails.org/2005/8/25/10-reasons-rails-does-pluralization/
|
||||
[21] https://nightwatchjs.org/
|
||||
[22] https://jestjs.io/
|
||||
[23] https://enzymejs.github.io/enzyme/
|
||||
[24] https://www.cypress.io/
|
||||
[25] https://rspec.info/
|
||||
[26] https://github.com/heartcombo/devise
|
||||
[27] http://www.passportjs.org/
|
||||
[28] https://sandimetz.com/
|
||||
[29] https://blog.arkency.com/
|
||||
[30] https://thoughtbot.com/blog/
|
||||
[31] https://codeclimate.com/
|
||||
[32] https://github.com/troessner/reek
|
||||
[33] https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padStart
|
||||
[34] https://web.archive.org/web/https://rubygems.org/gems/activesupport/versions/6.1.1
|
||||
[35] https://kapeli.com/dash
|
||||
[36] https://developer.mozilla.org/en-US/
|
||||
[37] https://guides.rubyonrails.org/asset_pipeline.html
|
||||
[38] https://edgeguides.rubyonrails.org/webpacker.html
|
||||
[39] https://github.com/rails/webpacker#integrations
|
||||
[40] https://github.com/rails/rails/tree/main/actionview/app/assets/javascripts
|
||||
[41] https://en.wikipedia.org/wiki/Adele_Goldberg_%28computer_scientist%29
|
||||
[42] https://thoughtbot.com/blog/skinny-controllers-skinny-models
|
||||
[43] https://codeclimate.com/blog/7-ways-to-decompose-fat-activerecord-models/
|
||||
[44] https://en.wikipedia.org/wiki/Shotgun_surgery
|
||||
[45] https://macwright.com/about/
|
||||
[46] https://twitter.com/intent/follow?screen_name=tmcw&user_id=1458271
|
||||
[47] https://mastodon.social/@tmcw
|
||||
|
||||
@@ -1,288 +1,267 @@
|
||||
#[1]macwright.com - Micro [2]macwright.com - Micro
|
||||
|
||||
Tom MacWright
|
||||
|
||||
tom@macwright.com
|
||||
|
||||
Tom MacWright
|
||||
|
||||
* [3]Writingâ‡
|
||||
* [4]Reading
|
||||
* [5]Photos
|
||||
* [6]Projects
|
||||
* [7]Drawings
|
||||
* [8]Micro
|
||||
* [9]About
|
||||
• [1]Writing⇠
|
||||
• [2]Reading
|
||||
• [3]Photos
|
||||
• [4]Projects
|
||||
• [5]Drawings
|
||||
• [6]Micro
|
||||
• [7]About
|
||||
|
||||
Second-guessing the modern web
|
||||
|
||||
The emerging norm for web development is to build a React single-page
|
||||
application, with server rendering. The two key elements of this
|
||||
architecture are something like:
|
||||
1. The main UI is built & updated in JavaScript using React or
|
||||
something similar.
|
||||
application, with server rendering. The two key elements of this architecture
|
||||
are something like:
|
||||
|
||||
1. The main UI is built & updated in JavaScript using React or something
|
||||
similar.
|
||||
2. The backend is an API that that application makes requests against.
|
||||
|
||||
This idea has really swept the internet. It started with a few major
|
||||
popular websites and has crept into corners like marketing sites and
|
||||
blogs.
|
||||
This idea has really swept the internet. It started with a few major popular
|
||||
websites and has crept into corners like marketing sites and blogs.
|
||||
|
||||
I’m increasingly skeptical of it.
|
||||
|
||||
There is a sweet spot of React: in moderately interactive interfaces.
|
||||
Complex forms that require immediate feedback, UIs that need to move
|
||||
around and react instantly. That’s where it excels. I helped build the
|
||||
editors in [10]Mapbox Studio and [11]Observable and for the most part,
|
||||
React was a great choice.
|
||||
There is a sweet spot of React: in moderately interactive interfaces. Complex
|
||||
forms that require immediate feedback, UIs that need to move around and react
|
||||
instantly. That’s where it excels. I helped build the editors in [8]Mapbox
|
||||
Studio and [9]Observable and for the most part, React was a great choice.
|
||||
|
||||
But there’s a lot on either side of that sweet spot.
|
||||
|
||||
The high performance parts aren’t React. [12]Mapbox GL, for example, is
|
||||
vanilla JavaScript and probably should be forever. The level of
|
||||
abstraction that React works on is too high, and the cost of using
|
||||
React - in payload, parse time, and so on - is too much for any company
|
||||
to include it as part of an SDK. Same with the [13]Observable runtime,
|
||||
the juicy center of that product: it’s very performance-intensive and
|
||||
would barely benefit from a port.
|
||||
The high performance parts aren’t React. [10]Mapbox GL, for example, is vanilla
|
||||
JavaScript and probably should be forever. The level of abstraction that React
|
||||
works on is too high, and the cost of using React - in payload, parse time, and
|
||||
so on - is too much for any company to include it as part of an SDK. Same with
|
||||
the [11]Observable runtime, the juicy center of that product: it’s very
|
||||
performance-intensive and would barely benefit from a port.
|
||||
|
||||
The less interactive parts don’t benefit much from React. Listing
|
||||
pages, static pages, blogs - these things are increasingly built in
|
||||
React, but the benefits they accrue are extremely narrow. A lot of the
|
||||
optimizations we’re deploying to speed up these things, things like
|
||||
bundle splitting, server-side rendering, and prerendering, are
|
||||
triangulating what we had before the rise of React.
|
||||
The less interactive parts don’t benefit much from React. Listing pages, static
|
||||
pages, blogs - these things are increasingly built in React, but the benefits
|
||||
they accrue are extremely narrow. A lot of the optimizations we’re deploying to
|
||||
speed up these things, things like bundle splitting, server-side rendering, and
|
||||
prerendering, are triangulating what we had before the rise of React.
|
||||
|
||||
And they’re kind of messy optimizations. Here are some examples.
|
||||
|
||||
Bundle splitting.
|
||||
|
||||
As your React application grows, the application bundle grows. Unlike
|
||||
with a traditional multi-page app, that growth affects every visitor:
|
||||
you download the whole app the first time that you visit it. At some
|
||||
point, this becomes a real problem. Someone who lands on the About page
|
||||
is also downloading 20 other pages in the same application bundle.
|
||||
Bundle splitting ‘solves’ this problem by creating many JavaScript
|
||||
bundles that can lazily load each other. So you load the About page and
|
||||
what your browser downloads is an ‘index’ bundle, and then that ‘index’
|
||||
bundle loads the ‘about page’ bundle.
|
||||
As your React application grows, the application bundle grows. Unlike with a
|
||||
traditional multi-page app, that growth affects every visitor: you download the
|
||||
whole app the first time that you visit it. At some point, this becomes a real
|
||||
problem. Someone who lands on the About page is also downloading 20 other pages
|
||||
in the same application bundle. Bundle splitting ‘solves’ this problem by
|
||||
creating many JavaScript bundles that can lazily load each other. So you load
|
||||
the About page and what your browser downloads is an ‘index’ bundle, and then
|
||||
that ‘index’ bundle loads the ‘about page’ bundle.
|
||||
|
||||
This sort of solves the problem, but it’s not great. Most bundle
|
||||
splitting techniques require you to load that ‘index bundle’, and then
|
||||
only once that JavaScript is loaded and executed does your browser know
|
||||
which ‘page bundle’ it needs. So you need two round-trips to start
|
||||
rendering.
|
||||
This sort of solves the problem, but it’s not great. Most bundle splitting
|
||||
techniques require you to load that ‘index bundle’, and then only once that
|
||||
JavaScript is loaded and executed does your browser know which ‘page bundle’ it
|
||||
needs. So you need two round-trips to start rendering.
|
||||
|
||||
And then there’s the question of updating code-split bundles. User
|
||||
sessions are surprisingly long: someone might have your website open in
|
||||
a tab for weeks at a time. I’ve seen it happen. So if they open the
|
||||
‘about page’, keep the tab open for a week, and then request the ‘home
|
||||
page’, then the home page that they request is dictated by the index
|
||||
bundle that they downloaded last week. This is a deeply weird and
|
||||
under-discussed situation. There are essentially two solutions to it:
|
||||
1. You keep all generated JavaScript around, forever, and people will
|
||||
see the version of the site that was live at the time of their
|
||||
first page request.
|
||||
2. You create a system that alerts users when you’ve deployed a new
|
||||
version of the site, and prompt them to reload.
|
||||
And then there’s the question of updating code-split bundles. User sessions are
|
||||
surprisingly long: someone might have your website open in a tab for weeks at a
|
||||
time. I’ve seen it happen. So if they open the ‘about page’, keep the tab open
|
||||
for a week, and then request the ‘home page’, then the home page that they
|
||||
request is dictated by the index bundle that they downloaded last week. This is
|
||||
a deeply weird and under-discussed situation. There are essentially two
|
||||
solutions to it:
|
||||
|
||||
The first solution has a drawback that might not be immediately
|
||||
obvious. In those intervening weeks between loading the site and
|
||||
clicking a link, you might’ve deployed a new API version. So the user
|
||||
will be using an old version of your JavaScript frontend with a new
|
||||
version of your API backend, and they’ll trigger errors that none of
|
||||
your testing knows about, because you’ll usually be testing current
|
||||
versions of each.
|
||||
1. You keep all generated JavaScript around, forever, and people will see the
|
||||
version of the site that was live at the time of their first page request.
|
||||
2. You create a system that alerts users when you’ve deployed a new version of
|
||||
the site, and prompt them to reload.
|
||||
|
||||
And the second solution, while it works (and is what we implemented for
|
||||
Mapbox Studio), is a bizarre way for a web application to behave.
|
||||
Prompting users to ‘update’ is something from the bad old days of
|
||||
desktop software, not from the shiny new days of the web.
|
||||
The first solution has a drawback that might not be immediately obvious. In
|
||||
those intervening weeks between loading the site and clicking a link, you
|
||||
might’ve deployed a new API version. So the user will be using an old version
|
||||
of your JavaScript frontend with a new version of your API backend, and they’ll
|
||||
trigger errors that none of your testing knows about, because you’ll usually be
|
||||
testing current versions of each.
|
||||
|
||||
Sure: traditional non-SPA websites are not immune to this pitfall.
|
||||
Someone might load your website, have a form open for many weeks, and
|
||||
then submit it after their session expired or the API changed. But
|
||||
that’s a much more limited exposure to failure than in the SPA case.
|
||||
And the second solution, while it works (and is what we implemented for Mapbox
|
||||
Studio), is a bizarre way for a web application to behave. Prompting users to
|
||||
‘update’ is something from the bad old days of desktop software, not from the
|
||||
shiny new days of the web.
|
||||
|
||||
Sure: traditional non-SPA websites are not immune to this pitfall. Someone
|
||||
might load your website, have a form open for many weeks, and then submit it
|
||||
after their session expired or the API changed. But that’s a much more limited
|
||||
exposure to failure than in the SPA case.
|
||||
|
||||
Server-Side Rendering
|
||||
|
||||
Okay, so the theory here is that SPAs are initially a blank page, which
|
||||
is then filled out by React & JavaScript. That’s bad for performance:
|
||||
HTML pages don’t need to be blank initially. So, Server-Side Rendering
|
||||
runs your JavaScript frontend code on the backend, creating a
|
||||
filled-out HTML page. The user loads the page, which now has
|
||||
pre-rendered content, and then the JavaScript loads and makes the page
|
||||
interactive.
|
||||
Okay, so the theory here is that SPAs are initially a blank page, which is then
|
||||
filled out by React & JavaScript. That’s bad for performance: HTML pages don’t
|
||||
need to be blank initially. So, Server-Side Rendering runs your JavaScript
|
||||
frontend code on the backend, creating a filled-out HTML page. The user loads
|
||||
the page, which now has pre-rendered content, and then the JavaScript loads and
|
||||
makes the page interactive.
|
||||
|
||||
A great optimization, but again, caveats.
|
||||
|
||||
The first is that the page you initially render is dead: you’ve created
|
||||
the [14]Time To Interactive metric. It’s your startup’s homepage, and
|
||||
it has a “Sign upâ€<EFBFBD> button, but until the JavaScript loads, that button
|
||||
doesn’t do anything. So you need to compensate. Either you omit some
|
||||
interactive elements on load, or you try really hard to make sure that
|
||||
the JavaScript loads faster than users will click, or you make some
|
||||
elements not require JavaScript to work - like making them normal links
|
||||
or forms. Or some combination of those.
|
||||
The first is that the page you initially render is dead: you’ve created the
|
||||
[12]Time To Interactive metric. It’s your startup’s homepage, and it has a
|
||||
“Sign up” button, but until the JavaScript loads, that button doesn’t do
|
||||
anything. So you need to compensate. Either you omit some interactive elements
|
||||
on load, or you try really hard to make sure that the JavaScript loads faster
|
||||
than users will click, or you make some elements not require JavaScript to work
|
||||
- like making them normal links or forms. Or some combination of those.
|
||||
|
||||
And then there’s the authentication story. If you do SSR on any pages
|
||||
that are custom to the user, then you need to forward any cookies or
|
||||
authentication-relevant information to your API backend and make sure
|
||||
that you never cache the server-rendered result. Your
|
||||
formerly-lightweight application server is now doing quite a bit of
|
||||
labor, running React & making API requests in order to do this
|
||||
pre-rendering.
|
||||
And then there’s the authentication story. If you do SSR on any pages that are
|
||||
custom to the user, then you need to forward any cookies or
|
||||
authentication-relevant information to your API backend and make sure that you
|
||||
never cache the server-rendered result. Your formerly-lightweight application
|
||||
server is now doing quite a bit of labor, running React & making API requests
|
||||
in order to do this pre-rendering.
|
||||
|
||||
APIs
|
||||
|
||||
The dream of APIs is that you have generic, flexible endpoints upon
|
||||
which you can build any web application. That idea breaks down pretty
|
||||
fast.
|
||||
The dream of APIs is that you have generic, flexible endpoints upon which you
|
||||
can build any web application. That idea breaks down pretty fast.
|
||||
|
||||
Most interactive web applications start to triangulate on “one query
|
||||
per page.â€<C3A2> API calls being generic or reusable never seems to persist
|
||||
as a value in infrastructure. This is because a large portion of web
|
||||
applications are, at their core, query & transformation interfaces on
|
||||
top of databases. The hardest performance problems they tend to have
|
||||
are query problems and transfer problems.
|
||||
Most interactive web applications start to triangulate on “one query per page.”
|
||||
API calls being generic or reusable never seems to persist as a value in
|
||||
infrastructure. This is because a large portion of web applications are, at
|
||||
their core, query & transformation interfaces on top of databases. The hardest
|
||||
performance problems they tend to have are query problems and transfer
|
||||
problems.
|
||||
|
||||
For example: a generically-designed REST API that tries not to mix
|
||||
‘concerns’ will produce a frontend application that has to make lots of
|
||||
requests to display a page. And then a new-age GraphQL application will
|
||||
suffer under the [15]N+1 query problem at the database level until an
|
||||
optimization arrives. And a traditional “make a query and put it on a
|
||||
pageâ€<C3A2> application will just, well, try to write some good queries.
|
||||
For example: a generically-designed REST API that tries not to mix ‘concerns’
|
||||
will produce a frontend application that has to make lots of requests to
|
||||
display a page. And then a new-age GraphQL application will suffer under the
|
||||
[13]N+1 query problem at the database level until an optimization arrives. And
|
||||
a traditional “make a query and put it on a page” application will just, well,
|
||||
try to write some good queries.
|
||||
|
||||
None of these solutions are silver bullets: I’ve worked with
|
||||
overly-strict REST APIs, optimization-hungry GraphQL APIs, and
|
||||
hand-crafted SQL APIs. But no option really lets a web app be careless
|
||||
about its data-fetching layer. Web applications can’t sit on top of
|
||||
independently-designed APIs: to have a chance at performance, the
|
||||
application and its datasource need to be designed as one.
|
||||
None of these solutions are silver bullets: I’ve worked with overly-strict REST
|
||||
APIs, optimization-hungry GraphQL APIs, and hand-crafted SQL APIs. But no
|
||||
option really lets a web app be careless about its data-fetching layer. Web
|
||||
applications can’t sit on top of independently-designed APIs: to have a chance
|
||||
at performance, the application and its datasource need to be designed as one.
|
||||
|
||||
Data fetching
|
||||
|
||||
Speaking of data fetching. It’s really important and really bizarre in
|
||||
React land. Years ago, I expected that some good patterns would emerge.
|
||||
Frankly, they didn’t.
|
||||
Speaking of data fetching. It’s really important and really bizarre in React
|
||||
land. Years ago, I expected that some good patterns would emerge. Frankly, they
|
||||
didn’t.
|
||||
|
||||
There are decent patterns in the form of GraphQL, but for a React
|
||||
component that loads data with fetch from an API, the solutions have
|
||||
only gotten weirder. There’s great documentation for everything else,
|
||||
but old-fashioned data loading is relegated to one example of how to
|
||||
mock out ‘fetch’ for testing, and lots of Medium posts of varying
|
||||
quality.
|
||||
__________________________________________________________________
|
||||
There are decent patterns in the form of GraphQL, but for a React component
|
||||
that loads data with fetch from an API, the solutions have only gotten weirder.
|
||||
There’s great documentation for everything else, but old-fashioned data loading
|
||||
is relegated to one example of how to mock out ‘fetch’ for testing, and lots of
|
||||
Medium posts of varying quality.
|
||||
|
||||
Don’t read this as anti-React. I still think React is pretty great, and
|
||||
for a particular set of use cases it’s the best tool you can find. And
|
||||
I explicitly want to say that – from what I’ve seen – most other
|
||||
Single-Page-Application tools share most of these problems. They’re
|
||||
issues with the pattern, not the specific frameworks used to implement
|
||||
it. React alternatives have some great ideas, and they might be better,
|
||||
but they are ultimately really similar.
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
Don’t read this as anti-React. I still think React is pretty great, and for a
|
||||
particular set of use cases it’s the best tool you can find. And I explicitly
|
||||
want to say that – from what I’ve seen – most other Single-Page-Application
|
||||
tools share most of these problems. They’re issues with the pattern, not the
|
||||
specific frameworks used to implement it. React alternatives have some great
|
||||
ideas, and they might be better, but they are ultimately really similar.
|
||||
|
||||
But I’m at the point where I look at where the field is and what the
|
||||
alternative patterns are – taking a second look at unloved, unpopular,
|
||||
uncool things like Django, Rails, Laravel – and think what the heck is
|
||||
happening. We’re layering optimizations upon optimizations in order to
|
||||
get the SPA-like pattern to fit every use case, and I’m not sure that
|
||||
it is, well, worth it.
|
||||
alternative patterns are – taking a second look at unloved, unpopular, uncool
|
||||
things like Django, Rails, Laravel – and think what the heck is happening.
|
||||
We’re layering optimizations upon optimizations in order to get the SPA-like
|
||||
pattern to fit every use case, and I’m not sure that it is, well, worth it.
|
||||
|
||||
And it should be easy to do a good job.
|
||||
|
||||
Frameworks should lure people into the [16]pit of success, where
|
||||
following the normal rules and using normal techniques is the winning
|
||||
approach.
|
||||
Frameworks should lure people into the [14]pit of success, where following the
|
||||
normal rules and using normal techniques is the winning approach.
|
||||
|
||||
I don’t think that React, in this context, really is that pit of
|
||||
success. A naïvely implemented React SPA isn’t stable, or efficient,
|
||||
and it doesn’t naturally scale to significant complexity.
|
||||
I don’t think that React, in this context, really is that pit of success. A
|
||||
naïvely implemented React SPA isn’t stable, or efficient, and it doesn’t
|
||||
naturally scale to significant complexity.
|
||||
|
||||
You can add optimizations on top of it that fix those problems, or you
|
||||
can use a framework like Next.js that will include those optimizations
|
||||
by default. That’ll help you get pretty far. But then you’ll be lured
|
||||
by all of the easy one-click ways to add bloat and complexity. You’ll
|
||||
be responsible for keeping some of these complex, finicky optimizations
|
||||
working properly.
|
||||
You can add optimizations on top of it that fix those problems, or you can use
|
||||
a framework like Next.js that will include those optimizations by default.
|
||||
That’ll help you get pretty far. But then you’ll be lured by all of the easy
|
||||
one-click ways to add bloat and complexity. You’ll be responsible for keeping
|
||||
some of these complex, finicky optimizations working properly.
|
||||
|
||||
And for what? Again - there is a swath of use cases which would be hard
|
||||
without React and which aren’t complicated enough to push beyond
|
||||
React’s limits. But there are also a lot of problems for which I can’t
|
||||
see any concrete benefit to using React. Those are things like blogs,
|
||||
shopping-cart-websites, mostly-[17]CRUD-and-forms-websites. For these
|
||||
things, all of the fancy optimizations are trying to get you closer to
|
||||
the performance you would’ve gotten if you just hadn’t used so much
|
||||
technology.
|
||||
And for what? Again - there is a swath of use cases which would be hard without
|
||||
React and which aren’t complicated enough to push beyond React’s limits. But
|
||||
there are also a lot of problems for which I can’t see any concrete benefit to
|
||||
using React. Those are things like blogs, shopping-cart-websites, mostly-[15]
|
||||
CRUD-and-forms-websites. For these things, all of the fancy optimizations are
|
||||
trying to get you closer to the performance you would’ve gotten if you just
|
||||
hadn’t used so much technology.
|
||||
|
||||
I can, for example, guarantee that this blog is faster than any Gatsby
|
||||
blog (and much love to the Gatsby team) because there is nothing that a
|
||||
React static site can do that will make it faster than a non-React
|
||||
static site.
|
||||
__________________________________________________________________
|
||||
I can, for example, guarantee that this blog is faster than any Gatsby blog
|
||||
(and much love to the Gatsby team) because there is nothing that a React static
|
||||
site can do that will make it faster than a non-React static site.
|
||||
|
||||
But the cultural tides are strong. Building a company on Django in 2020
|
||||
seems like the equivalent of driving a PT Cruiser and blasting Faith
|
||||
Hill’s “Breatheâ€<C3A2> on a CD while your friends are listening to The Weeknd
|
||||
in their Teslas. Swimming against this current isn’t easy, and not in a
|
||||
trendy contrarian way.
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
I don’t think that everyone’s using the SPA pattern for no reason. For
|
||||
large corporations, it allows teams to work independently: the
|
||||
“frontend engineersâ€<EFBFBD> can “consumeâ€<C3A2> “APIsâ€<C3A2> from teams that probably work
|
||||
in a different language and can only communicate through the hierarchy.
|
||||
For heavily interactive applications, it has real benefits in
|
||||
modularity, performance, and structure. And it’s beneficial for
|
||||
companies to shift computing requirements from their servers to their
|
||||
customers browsers: a real win for reducing their spend on
|
||||
But the cultural tides are strong. Building a company on Django in 2020 seems
|
||||
like the equivalent of driving a PT Cruiser and blasting Faith Hill’s “Breathe”
|
||||
on a CD while your friends are listening to The Weeknd in their Teslas.
|
||||
Swimming against this current isn’t easy, and not in a trendy contrarian way.
|
||||
|
||||
I don’t think that everyone’s using the SPA pattern for no reason. For large
|
||||
corporations, it allows teams to work independently: the “frontend engineers”
|
||||
can “consume” “APIs” from teams that probably work in a different language and
|
||||
can only communicate through the hierarchy. For heavily interactive
|
||||
applications, it has real benefits in modularity, performance, and structure.
|
||||
And it’s beneficial for companies to shift computing requirements from their
|
||||
servers to their customers browsers: a real win for reducing their spend on
|
||||
infrastructure.
|
||||
|
||||
But I think there are a lot of problems that are better solved some
|
||||
other way. There’s no category winner like React as an alternative.
|
||||
Ironically, backends are churning through technology even faster than
|
||||
frontends, which have been loyal to one programming language for
|
||||
decades. There are some age-old technologies like Rails, Django, and
|
||||
Laravel, and there are a few halfhearted attempts to do templating and
|
||||
“serve web pagesâ€<C3A2> from Go, Node, and other new languages. If you go
|
||||
this way, you’re beset by the cognitive dissonance of following in the
|
||||
footsteps of enormous projects - Wikipedia rendering web pages in PHP,
|
||||
Craigslist rendering webpages in Perl - but being far outside the norms
|
||||
of modern web development. If Wikipedia were started today, it’d be
|
||||
React. Maybe?
|
||||
But I think there are a lot of problems that are better solved some other way.
|
||||
There’s no category winner like React as an alternative. Ironically, backends
|
||||
are churning through technology even faster than frontends, which have been
|
||||
loyal to one programming language for decades. There are some age-old
|
||||
technologies like Rails, Django, and Laravel, and there are a few halfhearted
|
||||
attempts to do templating and “serve web pages” from Go, Node, and other new
|
||||
languages. If you go this way, you’re beset by the cognitive dissonance of
|
||||
following in the footsteps of enormous projects - Wikipedia rendering web pages
|
||||
in PHP, Craigslist rendering webpages in Perl - but being far outside the norms
|
||||
of modern web development. If Wikipedia were started today, it’d be React.
|
||||
Maybe?
|
||||
|
||||
What if everyone’s wrong? We’ve been wrong before.
|
||||
|
||||
Follow-ups & commmentary
|
||||
* [18]"In defense of the modern web", Rich Harris
|
||||
* [19]Friday Night Deploys (Podcast) #22: A Brief Discussion On The
|
||||
State Of The Modern Web
|
||||
* [20]Frontend First (Podcast): Read & Discuss
|
||||
* [21]A Ready-To-Try Concept in Response to “Second-guessing the
|
||||
modern webâ€<C3A2>
|
||||
|
||||
May 10, 2020 [22]Tom MacWright ([23]@tmcw, [24]@tmcw@mastodon.social)
|
||||
• [16]"In defense of the modern web", Rich Harris
|
||||
• [17]Friday Night Deploys (Podcast) #22: A Brief Discussion On The State Of
|
||||
The Modern Web
|
||||
• [18]Frontend First (Podcast): Read & Discuss
|
||||
• [19]A Ready-To-Try Concept in Response to “Second-guessing the modern web”
|
||||
|
||||
References
|
||||
May 10, 2020 [20]Tom MacWright ([21]@tmcw, [22]@tmcw@mastodon.social)
|
||||
|
||||
1. https://macwright.com/micro/rss.xml
|
||||
2. https://macwright.com/micro/atom.xml
|
||||
3. https://macwright.com/
|
||||
4. https://macwright.com/reading/
|
||||
5. https://macwright.com/photos/
|
||||
6. https://macwright.com/projects/
|
||||
7. https://macwright.com/drawings/
|
||||
8. https://macwright.com/micro/
|
||||
9. https://macwright.com/about/
|
||||
10. https://www.mapbox.com/mapbox-studio/
|
||||
11. https://observablehq.com/
|
||||
12. https://docs.mapbox.com/mapbox-gl-js/api/
|
||||
13. https://github.com/observablehq/runtime
|
||||
14. https://web.dev/interactive/
|
||||
15. https://engineering.shopify.com/blogs/engineering/solving-the-n-1-problem-for-graphql-through-batching
|
||||
16. https://blog.codinghorror.com/falling-into-the-pit-of-success/
|
||||
17. https://en.wikipedia.org/wiki/Create,_read,_update_and_delete
|
||||
18. https://dev.to/richharris/in-defense-of-the-modern-web-2nia
|
||||
19. https://dev.to/devplebs/friday-night-deploys-22-a-brief-discussion-on-the-state-of-the-modern-web-2961
|
||||
20. https://frontendfirst.fm/episodes/read-and-discuss-second-guessing-the-modern-web
|
||||
21. https://medium.com/@kevinkirchner/a-ready-to-try-concept-in-response-to-second-guessing-the-modern-web-6946ec4d0598
|
||||
22. https://macwright.com/about/
|
||||
23. https://twitter.com/intent/follow?screen_name=tmcw&user_id=1458271
|
||||
24. https://mastodon.social/@tmcw
|
||||
|
||||
References:
|
||||
|
||||
[1] https://macwright.com/
|
||||
[2] https://macwright.com/reading/
|
||||
[3] https://macwright.com/photos/
|
||||
[4] https://macwright.com/projects/
|
||||
[5] https://macwright.com/drawings/
|
||||
[6] https://macwright.com/micro/
|
||||
[7] https://macwright.com/about/
|
||||
[8] https://www.mapbox.com/mapbox-studio/
|
||||
[9] https://observablehq.com/
|
||||
[10] https://docs.mapbox.com/mapbox-gl-js/api/
|
||||
[11] https://github.com/observablehq/runtime
|
||||
[12] https://web.dev/interactive/
|
||||
[13] https://engineering.shopify.com/blogs/engineering/solving-the-n-1-problem-for-graphql-through-batching
|
||||
[14] https://blog.codinghorror.com/falling-into-the-pit-of-success/
|
||||
[15] https://en.wikipedia.org/wiki/Create,_read,_update_and_delete
|
||||
[16] https://dev.to/richharris/in-defense-of-the-modern-web-2nia
|
||||
[17] https://dev.to/devplebs/friday-night-deploys-22-a-brief-discussion-on-the-state-of-the-modern-web-2961
|
||||
[18] https://frontendfirst.fm/episodes/read-and-discuss-second-guessing-the-modern-web
|
||||
[19] https://medium.com/@kevinkirchner/a-ready-to-try-concept-in-response-to-second-guessing-the-modern-web-6946ec4d0598
|
||||
[20] https://macwright.com/about/
|
||||
[21] https://twitter.com/intent/follow?screen_name=tmcw&user_id=1458271
|
||||
[22] https://mastodon.social/@tmcw
|
||||
|
||||
@@ -1,11 +1,7 @@
|
||||
#[1]Main RSS Feed
|
||||
|
||||
[2]Home
|
||||
The Garden (BUTTON)
|
||||
[1]Home
|
||||
The Garden
|
||||
[3]Now
|
||||
[4]About
|
||||
(BUTTON)
|
||||
|
||||
notes
|
||||
|
||||
evergreen
|
||||
@@ -13,29 +9,31 @@
|
||||
What App is That?
|
||||
|
||||
A guide to the apps and tools I use to create illustrations
|
||||
* [5]How to Illustrate
|
||||
|
||||
• [6]How to Illustrate
|
||||
|
||||
Planted over 3 years agoLast tended over 2 years ago
|
||||
Back To Top
|
||||
|
||||
(BUTTON) Back To Top
|
||||
|
||||
"What app is that?"
|
||||
|
||||
[6]
|
||||
[8]
|
||||
|
||||
I'm a Promiscuous Polytooler
|
||||
|
||||
I use wide variety of different tools and apps for different kinds of
|
||||
visual creations. I'm not wedded to any one tool in particular – they
|
||||
all have their strengths and weaknesses. I'll use whatever fits the
|
||||
task at hand and move work between them liberally.
|
||||
I use wide variety of different tools and apps for different kinds of visual
|
||||
creations. I'm not wedded to any one tool in particular – they all have their
|
||||
strengths and weaknesses. I'll use whatever fits the task at hand and move work
|
||||
between them liberally.
|
||||
|
||||
Here's all the apps and hardware that might be involved in a particular
|
||||
creation...
|
||||
|
||||
None of these are affiliate links - I'm just pointing you to official
|
||||
sites for more context
|
||||
[7]
|
||||
None of these are affiliate links - I'm just pointing you to official sites for
|
||||
more context
|
||||
|
||||
[9]
|
||||
|
||||
Workflows
|
||||
|
||||
@@ -44,48 +42,46 @@ Workflows
|
||||
|
||||
1. Illustrated notes
|
||||
|
||||
Anything I make that has a painterly and loose hand-drawn feel was made
|
||||
in Procreate on the iPad or Photoshop on the Wacom Cintiq. Or probably
|
||||
a combination – it's easy to move files back and forth between the two
|
||||
and the tools they offer are very similar.
|
||||
Anything I make that has a painterly and loose hand-drawn feel was made in
|
||||
Procreate on the iPad or Photoshop on the Wacom Cintiq. Or probably a
|
||||
combination – it's easy to move files back and forth between the two and the
|
||||
tools they offer are very similar.
|
||||
|
||||
Illustrations like these...
|
||||
|
||||
Both of these applications allow you to draw in “raster” graphics,
|
||||
meaning you paint pixels onto a canvas. They require a decent level of
|
||||
hand-skills to make sure your lines aren't wobbly, although both
|
||||
applications have smoothing features to help with that.
|
||||
Both of these applications allow you to draw in “raster” graphics, meaning you
|
||||
paint pixels onto a canvas. They require a decent level of hand-skills to make
|
||||
sure your lines aren't wobbly, although both applications have smoothing
|
||||
features to help with that.
|
||||
|
||||
When I'm in Procreate I use a small selection of brushes I've gathered
|
||||
over the years. It's hard for me to remember where they're all from,
|
||||
and I've customised the majority of them to suit my personal prefs.
|
||||
Most of them were originally from Max Ulichney's brushes. I have the
|
||||
essentials set ($2), the painters set ($8), and the comics set ($15),
|
||||
and can vouch they're all great.
|
||||
When I'm in Procreate I use a small selection of brushes I've gathered over the
|
||||
years. It's hard for me to remember where they're all from, and I've customised
|
||||
the majority of them to suit my personal prefs. Most of them were originally
|
||||
from Max Ulichney's brushes. I have the essentials set ($2), the painters set
|
||||
($8), and the comics set ($15), and can vouch they're all great.
|
||||
|
||||
I move these pieces to Photoshop if I want to work on a larger screen,
|
||||
or have accidentally enlarged the canvas to a 14000px wide sprawling
|
||||
set of sketches that Procreate can't open without crashing.
|
||||
I move these pieces to Photoshop if I want to work on a larger screen, or have
|
||||
accidentally enlarged the canvas to a 14000px wide sprawling set of sketches
|
||||
that Procreate can't open without crashing.
|
||||
|
||||
2. Polished vector illustrations
|
||||
|
||||
Illustrations that look more “polished” are made primarily in Adobe
|
||||
Illustrator, with a touch of Photoshop at the end for lighting effects
|
||||
and texture.
|
||||
Illustrator, with a touch of Photoshop at the end for lighting effects and
|
||||
texture.
|
||||
|
||||
Pieces like these...
|
||||
|
||||
These illustrations are all vector-based, meaning we use mathematical
|
||||
curves to define their shapes, rather than painted pixels. Vectors are
|
||||
great for create hard, crisp edges and working with perfect geometric
|
||||
forms.
|
||||
These illustrations are all vector-based, meaning we use mathematical curves to
|
||||
define their shapes, rather than painted pixels. Vectors are great for create
|
||||
hard, crisp edges and working with perfect geometric forms.
|
||||
|
||||
While I love vectors for laying down the foundation shapes of these,
|
||||
I'll move them over the Photoshop once they're 90% done to adjust the
|
||||
colors, add more subtlety to the lighting and shadows, and chuck a bit
|
||||
of texture on the top so they feel more tangible.
|
||||
While I love vectors for laying down the foundation shapes of these, I'll move
|
||||
them over the Photoshop once they're 90% done to adjust the colors, add more
|
||||
subtlety to the lighting and shadows, and chuck a bit of texture on the top so
|
||||
they feel more tangible.
|
||||
|
||||
Want to share? (BUTTON) Tell Twitter About It
|
||||
Want to share?Tell Twitter About It
|
||||
|
||||
3 Backlinks
|
||||
|
||||
@@ -99,8 +95,8 @@ Frequently Asked Questions
|
||||
|
||||
The Best Illustration Books and Courses
|
||||
|
||||
My favourite resources for learning to draw and developing your visual
|
||||
thinking skills
|
||||
My favourite resources for learning to draw and developing your visual thinking
|
||||
skills
|
||||
|
||||
Mentions around the web
|
||||
|
||||
@@ -110,41 +106,40 @@ Mentions around the web
|
||||
|
||||
Want to stay up to date?
|
||||
|
||||
(BUTTON) Subscribe via RSS Feed
|
||||
Subscribe via RSS Feed
|
||||
[12][13][14][15][16]
|
||||
© 2024 Maggie Appleton
|
||||
* [8]The Garden
|
||||
* [9]Essays
|
||||
* [10]About
|
||||
* [11]Notes
|
||||
* [12]Now
|
||||
* [13]Patterns
|
||||
* [14]Library
|
||||
* [15]Projects
|
||||
* [16]Colophon
|
||||
|
||||
References
|
||||
• [17]The Garden
|
||||
• [18]Essays
|
||||
• [19]About
|
||||
• [20]Notes
|
||||
• [21]Now
|
||||
• [22]Patterns
|
||||
• [23]Library
|
||||
• [24]Projects
|
||||
• [25]Colophon
|
||||
|
||||
Visible links:
|
||||
1. https://maggieappleton.com/rss.xml
|
||||
2. https://maggieappleton.com/
|
||||
3. https://maggieappleton.com/now
|
||||
4. https://maggieappleton.com/about
|
||||
5. https://maggieappleton.com/topics/how-to-illustrate
|
||||
6. https://maggieappleton.com/apps#im-a-promiscuous-polytooler
|
||||
7. https://maggieappleton.com/apps#workflows
|
||||
8. https://maggieappleton.com/garden
|
||||
9. https://maggieappleton.com/essays
|
||||
10. https://maggieappleton.com/about
|
||||
11. https://maggieappleton.com/notes
|
||||
12. https://maggieappleton.com/now
|
||||
13. https://maggieappleton.com/patterns
|
||||
14. https://maggieappleton.com/library
|
||||
15. https://maggieappleton.com/projects
|
||||
16. https://maggieappleton.com/colophon
|
||||
|
||||
Hidden links:
|
||||
18. https://github.com/MaggieAppleton
|
||||
19. https://uk.linkedin.com/in/maggieappleton
|
||||
20. https://dribbble.com/mappleton
|
||||
21. https://twitter.com/Mappletons
|
||||
22. https://indieweb.social/@maggie
|
||||
References:
|
||||
|
||||
[1] https://maggieappleton.com/
|
||||
[3] https://maggieappleton.com/now
|
||||
[4] https://maggieappleton.com/about
|
||||
[6] https://maggieappleton.com/topics/how-to-illustrate
|
||||
[8] https://maggieappleton.com/apps#im-a-promiscuous-polytooler
|
||||
[9] https://maggieappleton.com/apps#workflows
|
||||
[12] https://github.com/MaggieAppleton
|
||||
[13] https://uk.linkedin.com/in/maggieappleton
|
||||
[14] https://dribbble.com/mappleton
|
||||
[15] https://twitter.com/Mappletons
|
||||
[16] https://indieweb.social/@maggie
|
||||
[17] https://maggieappleton.com/garden
|
||||
[18] https://maggieappleton.com/essays
|
||||
[19] https://maggieappleton.com/about
|
||||
[20] https://maggieappleton.com/notes
|
||||
[21] https://maggieappleton.com/now
|
||||
[22] https://maggieappleton.com/patterns
|
||||
[23] https://maggieappleton.com/library
|
||||
[24] https://maggieappleton.com/projects
|
||||
[25] https://maggieappleton.com/colophon
|
||||
|
||||
@@ -1,11 +1,7 @@
|
||||
#[1]Main RSS Feed
|
||||
|
||||
[2]Home
|
||||
The Garden (BUTTON)
|
||||
[1]Home
|
||||
The Garden
|
||||
[3]Now
|
||||
[4]About
|
||||
(BUTTON)
|
||||
|
||||
Essays
|
||||
|
||||
budding
|
||||
@@ -13,78 +9,76 @@
|
||||
Why You Own an iPad and Still Can't Draw
|
||||
|
||||
The failure of drawing materials without mediums and meat
|
||||
* [5]How to Illustrate
|
||||
|
||||
• [6]How to Illustrate
|
||||
|
||||
Planted over 3 years agoLast tended over 3 years ago
|
||||
|
||||
(BUTTON) Back To Top
|
||||
|
||||
Back To Top
|
||||
Assumed Audience
|
||||
|
||||
Anyone who thinks they can't draw, but would like to learn
|
||||
|
||||
They message me a lot.
|
||||
|
||||
Which iPad should I buy? What app do you use? What brush is that?
|
||||
What size should my canvas be?
|
||||
Which iPad should I buy? What app do you use? What brush is that? What size
|
||||
should my canvas be?
|
||||
|
||||
These questions aren't wrong. In fact they're perfectly reasonable.
|
||||
|
||||
I'm vocal about the fact many of my illustrations are made on in an app
|
||||
called . I have a full post about my drawing equipment and workflows
|
||||
over at
|
||||
[6]What App is That?
|
||||
I'm vocal about the fact many of my illustrations are made on in an app called
|
||||
. I have a full post about my drawing equipment and workflows over at
|
||||
[8]What App is That?
|
||||
|
||||
How are you supposed to draw if you don't also have these fancy tools?
|
||||
|
||||
This is the tricky bit.
|
||||
|
||||
If you go out and buy yourself these same things, you'll have all the
|
||||
right materials to draw. But that's only the dressing on the drawing
|
||||
dish.
|
||||
[7]
|
||||
If you go out and buy yourself these same things, you'll have all the right
|
||||
materials to draw. But that's only the dressing on the drawing dish.
|
||||
|
||||
[9]
|
||||
|
||||
What you have is Material without the Medium or the Meat
|
||||
|
||||
What on earth do I mean by material, medium, and meat?
|
||||
__________________________________________________________________
|
||||
|
||||
[8]
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
[10]
|
||||
|
||||
Moving past materials
|
||||
|
||||
Worrying about the materials should take up - at most - 10% of your
|
||||
attention and concern. Focus 70% of your attention on learning the
|
||||
medium while you're just starting out.
|
||||
Worrying about the materials should take up - at most - 10% of your attention
|
||||
and concern. Focus 70% of your attention on learning the medium while you're
|
||||
just starting out.
|
||||
|
||||
You can keep 20% of your focus on the Meat. But I wouldn't worry too
|
||||
much about communicating original, profound ideas at first. Doing so in
|
||||
addition to learning a whole new language is going to be overwhelming.
|
||||
You can keep 20% of your focus on the Meat. But I wouldn't worry too much about
|
||||
communicating original, profound ideas at first. Doing so in addition to
|
||||
learning a whole new language is going to be overwhelming.
|
||||
|
||||
In the same way it's a bad idea to learn Spanish while simultaneously
|
||||
trying to write a philosophy dissertation in it.
|
||||
In the same way it's a bad idea to learn Spanish while simultaneously trying to
|
||||
write a philosophy dissertation in it.
|
||||
|
||||
Once you get more comfortable “speaking" in visual language, you'll be
|
||||
able to shift a much higher percentage of your attention onto the Meat.
|
||||
You'll get to focus on The Thing You Want to Say, and know enough
|
||||
visual language to say it well.
|
||||
Once you get more comfortable “speaking" in visual language, you'll be able to
|
||||
shift a much higher percentage of your attention onto the Meat. You'll get to
|
||||
focus on The Thing You Want to Say, and know enough visual language to say it
|
||||
well.
|
||||
|
||||
That's the ideal I'm currently striving for. To reach a point where the
|
||||
Material is irrelevant, the Medium is a baked into my subconscious, and
|
||||
I'm all about the Meat.
|
||||
Material is irrelevant, the Medium is a baked into my subconscious, and I'm all
|
||||
about the Meat.
|
||||
|
||||
That's the goal. Don't let the shiny iPad reflection blind you.
|
||||
|
||||
Get past picking the Material. Focus on the Medium. Aim for the Meat.
|
||||
|
||||
Want to share? (BUTTON) Tell Twitter About It
|
||||
Want to share?Tell Twitter About It
|
||||
|
||||
1 Backlinks
|
||||
|
||||
The Best Illustration Books and Courses
|
||||
|
||||
My favourite resources for learning to draw and developing your visual
|
||||
thinking skills
|
||||
My favourite resources for learning to draw and developing your visual thinking
|
||||
skills
|
||||
|
||||
Mentions around the web
|
||||
|
||||
@@ -94,42 +88,41 @@ Mentions around the web
|
||||
|
||||
Want to stay up to date?
|
||||
|
||||
(BUTTON) Subscribe via RSS Feed
|
||||
Subscribe via RSS Feed
|
||||
[13][14][15][16][17]
|
||||
© 2024 Maggie Appleton
|
||||
* [9]The Garden
|
||||
* [10]Essays
|
||||
* [11]About
|
||||
* [12]Notes
|
||||
* [13]Now
|
||||
* [14]Patterns
|
||||
* [15]Library
|
||||
* [16]Projects
|
||||
* [17]Colophon
|
||||
|
||||
References
|
||||
• [18]The Garden
|
||||
• [19]Essays
|
||||
• [20]About
|
||||
• [21]Notes
|
||||
• [22]Now
|
||||
• [23]Patterns
|
||||
• [24]Library
|
||||
• [25]Projects
|
||||
• [26]Colophon
|
||||
|
||||
Visible links:
|
||||
1. https://maggieappleton.com/rss.xml
|
||||
2. https://maggieappleton.com/
|
||||
3. https://maggieappleton.com/now
|
||||
4. https://maggieappleton.com/about
|
||||
5. https://maggieappleton.com/topics/how-to-illustrate
|
||||
6. https://maggieappleton.com/apps
|
||||
7. https://maggieappleton.com/still-cant-draw#what-you-have-is-material-without-the-medium-or-the-meat
|
||||
8. https://maggieappleton.com/still-cant-draw#moving-past-materials
|
||||
9. https://maggieappleton.com/garden
|
||||
10. https://maggieappleton.com/essays
|
||||
11. https://maggieappleton.com/about
|
||||
12. https://maggieappleton.com/notes
|
||||
13. https://maggieappleton.com/now
|
||||
14. https://maggieappleton.com/patterns
|
||||
15. https://maggieappleton.com/library
|
||||
16. https://maggieappleton.com/projects
|
||||
17. https://maggieappleton.com/colophon
|
||||
|
||||
Hidden links:
|
||||
19. https://github.com/MaggieAppleton
|
||||
20. https://uk.linkedin.com/in/maggieappleton
|
||||
21. https://dribbble.com/mappleton
|
||||
22. https://twitter.com/Mappletons
|
||||
23. https://indieweb.social/@maggie
|
||||
References:
|
||||
|
||||
[1] https://maggieappleton.com/
|
||||
[3] https://maggieappleton.com/now
|
||||
[4] https://maggieappleton.com/about
|
||||
[6] https://maggieappleton.com/topics/how-to-illustrate
|
||||
[8] https://maggieappleton.com/apps
|
||||
[9] https://maggieappleton.com/still-cant-draw#what-you-have-is-material-without-the-medium-or-the-meat
|
||||
[10] https://maggieappleton.com/still-cant-draw#moving-past-materials
|
||||
[13] https://github.com/MaggieAppleton
|
||||
[14] https://uk.linkedin.com/in/maggieappleton
|
||||
[15] https://dribbble.com/mappleton
|
||||
[16] https://twitter.com/Mappletons
|
||||
[17] https://indieweb.social/@maggie
|
||||
[18] https://maggieappleton.com/garden
|
||||
[19] https://maggieappleton.com/essays
|
||||
[20] https://maggieappleton.com/about
|
||||
[21] https://maggieappleton.com/notes
|
||||
[22] https://maggieappleton.com/now
|
||||
[23] https://maggieappleton.com/patterns
|
||||
[24] https://maggieappleton.com/library
|
||||
[25] https://maggieappleton.com/projects
|
||||
[26] https://maggieappleton.com/colophon
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,260 +1,247 @@
|
||||
#[1]alternate
|
||||
|
||||
[2]
|
||||
[1]
|
||||
|
||||
Dan McKinley
|
||||
Math, Programming, and Minority Reports
|
||||
|
||||
[3]Tweet [4]Follow @mcfunley
|
||||
[2] Tweet [3] Follow @mcfunley
|
||||
|
||||
[5]Choose Boring Technology
|
||||
[4]Choose Boring Technology
|
||||
March 30th, 2015
|
||||
|
||||
Probably the single best thing to happen to me in my career was having
|
||||
had [6]Kellan placed in charge of me. I stuck around long enough to see
|
||||
Kellan’s technical decisionmaking start to bear fruit. I learned a
|
||||
great deal from this, but I also learned a great deal as a result of
|
||||
this. I would not have been free to become the engineer that wrote
|
||||
[7]Data Driven Products Now! if Kellan had not been there to so
|
||||
thoroughly stick the landing on technology choices.
|
||||
[FRQKLCy.jpg] Being inspirational as always.
|
||||
Probably the single best thing to happen to me in my career was having had [5]
|
||||
Kellan placed in charge of me. I stuck around long enough to see Kellan’s
|
||||
technical decisionmaking start to bear fruit. I learned a great deal from this,
|
||||
but I also learned a great deal as a result of this. I would not have been free
|
||||
to become the engineer that wrote [6]Data Driven Products Now! if Kellan had
|
||||
not been there to so thoroughly stick the landing on technology choices.
|
||||
|
||||
In the year since leaving Etsy, I’ve resurrected my ability to care
|
||||
about technology. And my thoughts have crystallized to the point where
|
||||
I can write them down coherently. What follows is a distillation of the
|
||||
Kellan gestalt, which will hopefully serve to horrify him only
|
||||
slightly.
|
||||
[FRQKLCy] Being inspirational as always.
|
||||
|
||||
In the year since leaving Etsy, I’ve resurrected my ability to care about
|
||||
technology. And my thoughts have crystallized to the point where I can write
|
||||
them down coherently. What follows is a distillation of the Kellan gestalt,
|
||||
which will hopefully serve to horrify him only slightly.
|
||||
|
||||
Embrace Boredom.
|
||||
|
||||
Let’s say every company gets about three innovation tokens. You can
|
||||
spend these however you want, but the supply is fixed for a long while.
|
||||
You might get a few more after you achieve a [8]certain level of
|
||||
stability and maturity, but the general tendency is to overestimate the
|
||||
contents of your wallet. Clearly this model is approximate, but I think
|
||||
it helps.
|
||||
Let’s say every company gets about three innovation tokens. You can spend these
|
||||
however you want, but the supply is fixed for a long while. You might get a few
|
||||
more after you achieve a [7]certain level of stability and maturity, but the
|
||||
general tendency is to overestimate the contents of your wallet. Clearly this
|
||||
model is approximate, but I think it helps.
|
||||
|
||||
If you choose to write your website in NodeJS, you just spent one of
|
||||
your innovation tokens. If you choose to use [9]MongoDB, you just spent
|
||||
one of your innovation tokens. If you choose to use [10]service
|
||||
discovery tech that’s existed for a year or less, you just spent one of
|
||||
your innovation tokens. If you choose to write your own database, oh
|
||||
god, you’re in trouble.
|
||||
If you choose to write your website in NodeJS, you just spent one of your
|
||||
innovation tokens. If you choose to use [8]MongoDB, you just spent one of your
|
||||
innovation tokens. If you choose to use [9]service discovery tech that’s
|
||||
existed for a year or less, you just spent one of your innovation tokens. If
|
||||
you choose to write your own database, oh god, you’re in trouble.
|
||||
|
||||
Any of those choices might be sensible if you’re a javascript
|
||||
consultancy, or a database company. But you’re probably not. You’re
|
||||
probably working for a company that is at least ostensibly
|
||||
[11]rethinking global commerce or [12]reinventing payments on the web
|
||||
or pursuing some other suitably epic mission. In that context, devoting
|
||||
any of your limited attention to innovating ssh is an excellent way to
|
||||
fail. Or at best, delay success [13][1].
|
||||
Any of those choices might be sensible if you’re a javascript consultancy, or a
|
||||
database company. But you’re probably not. You’re probably working for a
|
||||
company that is at least ostensibly [10]rethinking global commerce or [11]
|
||||
reinventing payments on the web or pursuing some other suitably epic mission.
|
||||
In that context, devoting any of your limited attention to innovating ssh is an
|
||||
excellent way to fail. Or at best, delay success [12][1].
|
||||
|
||||
What counts as boring? That’s a little tricky. “Boring” should not be
|
||||
conflated with “bad.” There is technology out there that is both boring
|
||||
and bad [14][2]. You should not use any of that. But there are many
|
||||
choices of technology that are boring and good, or at least good
|
||||
enough. MySQL is boring. Postgres is boring. PHP is boring. Python is
|
||||
boring. Memcached is boring. Squid is boring. Cron is boring.
|
||||
What counts as boring? That’s a little tricky. “Boring” should not be conflated
|
||||
with “bad.” There is technology out there that is both boring and bad [13][2].
|
||||
You should not use any of that. But there are many choices of technology that
|
||||
are boring and good, or at least good enough. MySQL is boring. Postgres is
|
||||
boring. PHP is boring. Python is boring. Memcached is boring. Squid is boring.
|
||||
Cron is boring.
|
||||
|
||||
The nice thing about boringness (so constrained) is that the
|
||||
capabilities of these things are well understood. But more importantly,
|
||||
their failure modes are well understood. Anyone who knows me well will
|
||||
understand that it’s only with a overwhelming sense of malaise that I
|
||||
now invoke the spectre of Don Rumsfeld, but I must.
|
||||
[n8ElWr3.jpg] To be clear, fuck this guy.
|
||||
The nice thing about boringness (so constrained) is that the capabilities of
|
||||
these things are well understood. But more importantly, their failure modes are
|
||||
well understood. Anyone who knows me well will understand that it’s only with a
|
||||
overwhelming sense of malaise that I now invoke the spectre of Don Rumsfeld,
|
||||
but I must.
|
||||
|
||||
When choosing technology, you have both known unknowns and unknown
|
||||
unknowns [15][3].
|
||||
* A known unknown is something like: we don’t know what happens when
|
||||
this database hits 100% CPU.
|
||||
* An unknown unknown is something like: geez it didn’t even occur to
|
||||
us that [16]writing stats would cause GC pauses.
|
||||
[n8ElWr3] To be clear, fuck this guy.
|
||||
|
||||
Both sets are typically non-empty, even for tech that’s existed for
|
||||
decades. But for shiny new technology the magnitude of unknown unknowns
|
||||
is significantly larger, and this is important.
|
||||
When choosing technology, you have both known unknowns and unknown unknowns
|
||||
[14][3].
|
||||
|
||||
• A known unknown is something like: we don’t know what happens when this
|
||||
database hits 100% CPU.
|
||||
• An unknown unknown is something like: geez it didn’t even occur to us that
|
||||
[15]writing stats would cause GC pauses.
|
||||
|
||||
Both sets are typically non-empty, even for tech that’s existed for decades.
|
||||
But for shiny new technology the magnitude of unknown unknowns is significantly
|
||||
larger, and this is important.
|
||||
|
||||
Optimize Globally.
|
||||
|
||||
I unapologetically think a bias in favor of boring technology is a good
|
||||
thing, but it’s not the only factor that needs to be considered.
|
||||
Technology choices don’t happen in isolation. They have a scope that
|
||||
touches your entire team, organization, and the system that emerges
|
||||
from the sum total of your choices.
|
||||
I unapologetically think a bias in favor of boring technology is a good thing,
|
||||
but it’s not the only factor that needs to be considered. Technology choices
|
||||
don’t happen in isolation. They have a scope that touches your entire team,
|
||||
organization, and the system that emerges from the sum total of your choices.
|
||||
|
||||
Adding technology to your company comes with a cost. As an abstract
|
||||
statement this is obvious: if we’re already using Ruby, adding Python
|
||||
to the mix doesn’t feel sensible because the resulting complexity would
|
||||
outweigh Python’s marginal utility. But somehow when we’re talking
|
||||
about Python and Scala or MySQL and Redis people [17]lose their minds,
|
||||
discard all constraints, and start raving about using the best tool for
|
||||
the job.
|
||||
Adding technology to your company comes with a cost. As an abstract statement
|
||||
this is obvious: if we’re already using Ruby, adding Python to the mix doesn’t
|
||||
feel sensible because the resulting complexity would outweigh Python’s marginal
|
||||
utility. But somehow when we’re talking about Python and Scala or MySQL and
|
||||
Redis people [16]lose their minds, discard all constraints, and start raving
|
||||
about using the best tool for the job.
|
||||
|
||||
[18]Your function in a nutshell is to map business problems onto a
|
||||
solution space that involves choices of software. If the choices of
|
||||
software were truly without baggage, you could indeed pick a whole mess
|
||||
of locally-the-best tools for your assortment of problems.
|
||||
Created with Sketch. Problems Technical Solutions The way you might
|
||||
choose technology in a world where choices are cheap: "pick the right
|
||||
tool for the job."
|
||||
[17]Your function in a nutshell is to map business problems onto a solution
|
||||
space that involves choices of software. If the choices of software were truly
|
||||
without baggage, you could indeed pick a whole mess of locally-the-best tools
|
||||
for your assortment of problems.
|
||||
|
||||
But of course, the baggage exists. We call the baggage “operations” and
|
||||
to a lesser extent “cognitive overhead.” You have to monitor the thing.
|
||||
You have to figure out unit tests. You need to know the first thing
|
||||
about it to hack on it. You need an init script. I could go on for days
|
||||
here, and all of this adds up fast.
|
||||
Created with Sketch. Problems Technical Solutions The way you choose
|
||||
technology in the world where operations are a serious concern (i.e.,
|
||||
"reality").
|
||||
Created with Sketch. Problems Technical Solutions The way you might choose
|
||||
technology in a world where choices are cheap: "pick the right tool for the
|
||||
job."
|
||||
|
||||
The problem with “best tool for the job” thinking is that it takes a
|
||||
myopic view of the words “best” and “job.” Your job is keeping the
|
||||
company in business, god damn it. And the “best” tool is the one that
|
||||
occupies the “least worst” position for as many of your problems as
|
||||
possible.
|
||||
But of course, the baggage exists. We call the baggage “operations” and to a
|
||||
lesser extent “cognitive overhead.” You have to monitor the thing. You have to
|
||||
figure out unit tests. You need to know the first thing about it to hack on it.
|
||||
You need an init script. I could go on for days here, and all of this adds up
|
||||
fast.
|
||||
|
||||
It is basically always the case that the long-term costs of keeping a
|
||||
system working reliably vastly exceed any inconveniences you encounter
|
||||
while building it. Mature and productive developers understand this.
|
||||
Created with Sketch. Problems Technical Solutions The way you choose technology
|
||||
in the world where operations are a serious concern (i.e., "reality").
|
||||
|
||||
The problem with “best tool for the job” thinking is that it takes a myopic
|
||||
view of the words “best” and “job.” Your job is keeping the company in
|
||||
business, god damn it. And the “best” tool is the one that occupies the “least
|
||||
worst” position for as many of your problems as possible.
|
||||
|
||||
It is basically always the case that the long-term costs of keeping a system
|
||||
working reliably vastly exceed any inconveniences you encounter while building
|
||||
it. Mature and productive developers understand this.
|
||||
|
||||
Choose New Technology, Sometimes.
|
||||
|
||||
Taking this reasoning to its reductio ad absurdum would mean picking
|
||||
Java, and then trying to implement a website without using anything
|
||||
else at all. And that would be crazy. You need some means to add things
|
||||
to your toolbox.
|
||||
Taking this reasoning to its reductio ad absurdum would mean picking Java, and
|
||||
then trying to implement a website without using anything else at all. And that
|
||||
would be crazy. You need some means to add things to your toolbox.
|
||||
|
||||
An important first step is to acknowledge that this is a process, and a
|
||||
conversation. New tech eventually has company-wide effects, so adding
|
||||
tech is a decision that requires company-wide visibility. Your
|
||||
organizational specifics may force the conversation, or [19]they may
|
||||
facilitate developers adding new databases and queues without talking
|
||||
to anyone. One way or another you have to set cultural expectations
|
||||
that this is something we all talk about.
|
||||
conversation. New tech eventually has company-wide effects, so adding tech is a
|
||||
decision that requires company-wide visibility. Your organizational specifics
|
||||
may force the conversation, or [18]they may facilitate developers adding new
|
||||
databases and queues without talking to anyone. One way or another you have to
|
||||
set cultural expectations that this is something we all talk about.
|
||||
|
||||
One of the most worthwhile exercises I recommend here is to consider
|
||||
how you would solve your immediate problem without adding anything new.
|
||||
First, posing this question should detect the situation where the
|
||||
“problem” is that someone really wants to use the technology. If that
|
||||
is the case, you should immediately abort.
|
||||
[rmdSx.gif] I just watched a webinar about this graph database, we
|
||||
should try it out.
|
||||
One of the most worthwhile exercises I recommend here is to consider how you
|
||||
would solve your immediate problem without adding anything new. First, posing
|
||||
this question should detect the situation where the “problem” is that someone
|
||||
really wants to use the technology. If that is the case, you should immediately
|
||||
abort.
|
||||
|
||||
It can be amazing how far a small set of technology choices can go. The
|
||||
answer to this question in practice is almost never “we can’t do it,”
|
||||
it’s usually just somewhere on the spectrum of “well, we could do it,
|
||||
but it would be too hard” [20][4]. If you think you can’t accomplish
|
||||
your goals with what you’ve got now, you are probably just not thinking
|
||||
creatively enough.
|
||||
[rmdSx] I just watched a webinar about this graph database, we should try it
|
||||
out.
|
||||
|
||||
It’s helpful to write down exactly what it is about the current stack
|
||||
that makes solving the problem prohibitively expensive and difficult.
|
||||
This is related to the previous exercise, but it’s subtly different.
|
||||
It can be amazing how far a small set of technology choices can go. The answer
|
||||
to this question in practice is almost never “we can’t do it,” it’s usually
|
||||
just somewhere on the spectrum of “well, we could do it, but it would be too
|
||||
hard” [19][4]. If you think you can’t accomplish your goals with what you’ve
|
||||
got now, you are probably just not thinking creatively enough.
|
||||
|
||||
New technology choices might be purely additive (for example: “we don’t
|
||||
have caching yet, so let’s add memcached”). But they might also overlap
|
||||
or replace things you are already using. If that’s the case, you should
|
||||
set clear expectations about migrating old functionality to the new
|
||||
system. The policy should typically be “we’re committed to migrating,”
|
||||
with a proposed timeline. The intention of this step is to keep
|
||||
wreckage at manageable levels, and to avoid proliferating
|
||||
locally-optimal solutions.
|
||||
It’s helpful to write down exactly what it is about the current stack that
|
||||
makes solving the problem prohibitively expensive and difficult. This is
|
||||
related to the previous exercise, but it’s subtly different.
|
||||
|
||||
This process is not daunting, and it’s not much of a hassle. It’s a
|
||||
handful of questions to fill out as homework, followed by a meeting to
|
||||
talk about it. I think that if a new technology (or a new service to be
|
||||
created on your infrastructure) can pass through this gauntlet
|
||||
unscathed, adding it is fine.
|
||||
New technology choices might be purely additive (for example: “we don’t have
|
||||
caching yet, so let’s add memcached”). But they might also overlap or replace
|
||||
things you are already using. If that’s the case, you should set clear
|
||||
expectations about migrating old functionality to the new system. The policy
|
||||
should typically be “we’re committed to migrating,” with a proposed timeline.
|
||||
The intention of this step is to keep wreckage at manageable levels, and to
|
||||
avoid proliferating locally-optimal solutions.
|
||||
|
||||
This process is not daunting, and it’s not much of a hassle. It’s a handful of
|
||||
questions to fill out as homework, followed by a meeting to talk about it. I
|
||||
think that if a new technology (or a new service to be created on your
|
||||
infrastructure) can pass through this gauntlet unscathed, adding it is fine.
|
||||
|
||||
Just Ship.
|
||||
|
||||
Polyglot programming is sold with the promise that letting developers
|
||||
choose their own tools with complete freedom will make them more
|
||||
effective at solving problems. This is a naive definition of the
|
||||
problems at best, and motivated reasoning at worst. The weight of
|
||||
day-to-day operational [21]toil this creates crushes you to death.
|
||||
Polyglot programming is sold with the promise that letting developers choose
|
||||
their own tools with complete freedom will make them more effective at solving
|
||||
problems. This is a naive definition of the problems at best, and motivated
|
||||
reasoning at worst. The weight of day-to-day operational [20]toil this creates
|
||||
crushes you to death.
|
||||
|
||||
Mindful choice of technology gives engineering minds real freedom: the
|
||||
freedom to [22]contemplate bigger questions. Technology for its own
|
||||
sake is snake oil.
|
||||
Mindful choice of technology gives engineering minds real freedom: the freedom
|
||||
to [21]contemplate bigger questions. Technology for its own sake is snake oil.
|
||||
|
||||
Update, July 27th 2015: I wrote a talk based on this article. You can
|
||||
see it [23]here.
|
||||
__________________________________________________________________
|
||||
Update, July 27th 2015: I wrote a talk based on this article. You can see it
|
||||
[22]here.
|
||||
|
||||
1. Etsy in its early years suffered from this pretty badly. We hired a
|
||||
bunch of Python programmers and decided that we needed to find
|
||||
something for them to do in Python, and the only thing that came to
|
||||
mind was creating a pointless middle layer that [24]required years
|
||||
of effort to amputate. Meanwhile, the 90th percentile search
|
||||
latency was about two minutes. [25]Etsy didn't fail, but it went
|
||||
several years without shipping anything at all. So it took longer
|
||||
to succeed than it needed to.
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
1. Etsy in its early years suffered from this pretty badly. We hired a bunch
|
||||
of Python programmers and decided that we needed to find something for them
|
||||
to do in Python, and the only thing that came to mind was creating a
|
||||
pointless middle layer that [23]required years of effort to amputate.
|
||||
Meanwhile, the 90th percentile search latency was about two minutes. [24]
|
||||
Etsy didn't fail, but it went several years without shipping anything at
|
||||
all. So it took longer to succeed than it needed to.
|
||||
2. We often casually refer to the boring/bad intersection of doom as
|
||||
“enterprise software,” but that terminology may be imprecise.
|
||||
3. In saying this Rumsfeld was either intentionally or unintentionally
|
||||
alluding to [26]the Socratic Paradox. Socrates was by all accounts
|
||||
a thoughtful individual in a number of ways that Rumsfeld is not.
|
||||
4. A good example of this from my experience is [27]Etsy’s activity
|
||||
feeds. When we built this feature, we were working pretty hard to
|
||||
consolidate most of Etsy onto PHP, MySQL, Memcached, and Gearman (a
|
||||
PHP job server). It was much more complicated to implement the
|
||||
feature on that stack than it might have been with something like
|
||||
Redis (or [28]maybe not). But it is absolutely possible to build
|
||||
activity feeds on that stack.
|
||||
An amazing thing happened with that project: our attention turned
|
||||
elsewhere for several years. During that time, activity feeds
|
||||
scaled up 20x while nobody was watching it at all. We made no
|
||||
changes whatsoever specifically targeted at activity feeds, but
|
||||
everything worked out fine as usage exploded because we were using
|
||||
a shared platform. This is the long-term benefit of restraint in
|
||||
technology choices in a nutshell.
|
||||
This isn’t an absolutist position--while activity feeds stored in
|
||||
memcached was judged to be practical, implementing full text search
|
||||
with faceting in raw PHP wasn't. So Etsy used Solr.
|
||||
alluding to [25]the Socratic Paradox. Socrates was by all accounts a
|
||||
thoughtful individual in a number of ways that Rumsfeld is not.
|
||||
4. A good example of this from my experience is [26]Etsy’s activity feeds.
|
||||
When we built this feature, we were working pretty hard to consolidate most
|
||||
of Etsy onto PHP, MySQL, Memcached, and Gearman (a PHP job server). It was
|
||||
much more complicated to implement the feature on that stack than it might
|
||||
have been with something like Redis (or [27]maybe not). But it is
|
||||
absolutely possible to build activity feeds on that stack.
|
||||
|
||||
[29]Back home
|
||||
An amazing thing happened with that project: our attention turned elsewhere
|
||||
for several years. During that time, activity feeds scaled up 20x while
|
||||
nobody was watching it at all. We made no changes whatsoever specifically
|
||||
targeted at activity feeds, but everything worked out fine as usage
|
||||
exploded because we were using a shared platform. This is the long-term
|
||||
benefit of restraint in technology choices in a nutshell.
|
||||
|
||||
[30]Tweet [31]Follow @mcfunley
|
||||
This isn’t an absolutist position--while activity feeds stored in memcached
|
||||
was judged to be practical, implementing full text search with faceting in
|
||||
raw PHP wasn't. So Etsy used Solr.
|
||||
|
||||
* [32]GitHub
|
||||
* [33]LinkedIn
|
||||
[28]Back home
|
||||
[29] Tweet [30] Follow @mcfunley
|
||||
|
||||
[34]Feed | Copyright © 2004-2023 Dan McKinley.
|
||||
• [31]GitHub
|
||||
• [32]LinkedIn
|
||||
|
||||
References
|
||||
[33]Feed | Copyright © 2004-2023 Dan McKinley.
|
||||
|
||||
1. https://mcfunley.com/feed.xml
|
||||
2. https://mcfunley.com/
|
||||
3. https://twitter.com/intent/tweet
|
||||
4. https://twitter.com/mcfunley
|
||||
5. https://mcfunley.com/choose-boring-technology
|
||||
6. http://laughingmeme.org/
|
||||
7. https://mcfunley.com/data-driven-products-lean-startup-2014
|
||||
8. http://rc3.org/2015/03/24/the-pleasure-of-building-big-things/
|
||||
9. https://mcfunley.com/why-mongodb-never-worked-out-at-etsy
|
||||
10. https://consul.io/
|
||||
11. https://www.etsy.com/
|
||||
12. https://stripe.com/
|
||||
13. https://mcfunley.com/choose-boring-technology#f1
|
||||
14. https://mcfunley.com/choose-boring-technology#f2
|
||||
15. https://mcfunley.com/choose-boring-technology#f3
|
||||
16. http://www.evanjones.ca/jvm-mmap-pause.html
|
||||
17. http://martinfowler.com/bliki/PolyglotPersistence.html
|
||||
18. https://twitter.com/coda/status/580531932393504768
|
||||
19. https://twitter.com/mcfunley/status/578603932949164032
|
||||
20. https://mcfunley.com/choose-boring-technology#f4
|
||||
21. https://twitter.com/handler
|
||||
22. https://mcfunley.com/effective-web-experimentation-as-a-homo-narrans
|
||||
23. http://boringtechnology.club/
|
||||
24. https://www.youtube.com/watch?v=eenrfm50mXw
|
||||
25. http://www.sec.gov/Archives/edgar/data/1370637/000119312515077045/d806992ds1.htm
|
||||
26. http://en.wikipedia.org/wiki/I_know_that_I_know_nothing
|
||||
27. https://speakerdeck.com/mcfunley/etsy-activity-feed-architecture
|
||||
28. https://aphyr.com/posts/283-call-me-maybe-redis
|
||||
29. https://mcfunley.com/
|
||||
30. https://twitter.com/intent/tweet
|
||||
31. https://twitter.com/mcfunley
|
||||
32. https://github.com/mcfunley
|
||||
33. https://www.linkedin.com/in/mcfunley
|
||||
34. https://mcfunley.com/feed.xml
|
||||
References:
|
||||
|
||||
[1] https://mcfunley.com/
|
||||
[2] https://twitter.com/intent/tweet
|
||||
[3] https://twitter.com/mcfunley
|
||||
[4] https://mcfunley.com/choose-boring-technology
|
||||
[5] http://laughingmeme.org/
|
||||
[6] https://mcfunley.com/data-driven-products-lean-startup-2014
|
||||
[7] http://rc3.org/2015/03/24/the-pleasure-of-building-big-things/
|
||||
[8] https://mcfunley.com/why-mongodb-never-worked-out-at-etsy
|
||||
[9] https://consul.io/
|
||||
[10] https://www.etsy.com/
|
||||
[11] https://stripe.com/
|
||||
[12] https://mcfunley.com/choose-boring-technology#f1
|
||||
[13] https://mcfunley.com/choose-boring-technology#f2
|
||||
[14] https://mcfunley.com/choose-boring-technology#f3
|
||||
[15] http://www.evanjones.ca/jvm-mmap-pause.html
|
||||
[16] http://martinfowler.com/bliki/PolyglotPersistence.html
|
||||
[17] https://twitter.com/coda/status/580531932393504768
|
||||
[18] https://twitter.com/mcfunley/status/578603932949164032
|
||||
[19] https://mcfunley.com/choose-boring-technology#f4
|
||||
[20] https://twitter.com/handler
|
||||
[21] https://mcfunley.com/effective-web-experimentation-as-a-homo-narrans
|
||||
[22] http://boringtechnology.club/
|
||||
[23] https://www.youtube.com/watch?v=eenrfm50mXw
|
||||
[24] http://www.sec.gov/Archives/edgar/data/1370637/000119312515077045/d806992ds1.htm
|
||||
[25] http://en.wikipedia.org/wiki/I_know_that_I_know_nothing
|
||||
[26] https://speakerdeck.com/mcfunley/etsy-activity-feed-architecture
|
||||
[27] https://aphyr.com/posts/283-call-me-maybe-redis
|
||||
[28] https://mcfunley.com/
|
||||
[29] https://twitter.com/intent/tweet
|
||||
[30] https://twitter.com/mcfunley
|
||||
[31] https://github.com/mcfunley
|
||||
[32] https://www.linkedin.com/in/mcfunley
|
||||
[33] https://mcfunley.com/feed.xml
|
||||
|
||||
@@ -1,297 +1,301 @@
|
||||
#[1]Medium [2]alternate
|
||||
[1]Open in app
|
||||
|
||||
[3]Open in app
|
||||
Sign up
|
||||
|
||||
(BUTTON) Sign up
|
||||
[3]Sign in
|
||||
|
||||
[4]Sign in
|
||||
____________________
|
||||
[4]
|
||||
[5][ ]
|
||||
[6]
|
||||
Write
|
||||
[7]
|
||||
|
||||
(BUTTON) Sign up
|
||||
Sign up
|
||||
|
||||
[5]Sign in
|
||||
(BUTTON)
|
||||
[9]Sign in
|
||||
|
||||
[1]
|
||||
|
||||
Go Project Layout
|
||||
|
||||
[11]
|
||||
Kyle C. Quest (Q)
|
||||
[12]
|
||||
golang-learn
|
||||
|
||||
[6]Kyle C. Quest (Q)
|
||||
[13]Kyle C. Quest (Q)
|
||||
|
||||
·
|
||||
|
||||
[7]Follow
|
||||
[14]Follow
|
||||
|
||||
Published in
|
||||
[8]
|
||||
[15]
|
||||
|
||||
golang-learn
|
||||
|
||||
·
|
||||
5 min read
|
||||
·
|
||||
Sep 11, 2017
|
||||
|
||||
--
|
||||
(BUTTON)
|
||||
|
||||
11
|
||||
(BUTTON)
|
||||
|
||||
Listen
|
||||
(BUTTON)
|
||||
|
||||
Share
|
||||
|
||||
You went through the ‘[9]Tour of Go’, played with
|
||||
[10]https://play.golang.org/ and you feel you are ready to write some
|
||||
code. Great! However, you are not sure how to structure your projects.
|
||||
Can you put your code anywhere you want? Is there a standard way to
|
||||
organize your code? What if you need to have multiple application
|
||||
binaries? What does it mean to be ‘go gettable’? These are some of the
|
||||
questions you’ll be asking yourself.
|
||||
You went through the ‘[19]Tour of Go’, played with [20]https://play.golang.org/
|
||||
and you feel you are ready to write some code. Great! However, you are not sure
|
||||
how to structure your projects. Can you put your code anywhere you want? Is
|
||||
there a standard way to organize your code? What if you need to have multiple
|
||||
application binaries? What does it mean to be ‘go gettable’? These are some of
|
||||
the questions you’ll be asking yourself.
|
||||
|
||||
First, you have to understand Go workspaces. ‘[11]How to Write Go Code’
|
||||
is a good place to start. By default, Go keeps and expects all code in
|
||||
a single workspace. This place is identified by the GOPATH environment
|
||||
variable. What does it mean for you? It means you have to put your code
|
||||
in the default workspace or you have to change the GOPATH variable to
|
||||
point to your own location. Either way the actual source code for your
|
||||
project needs to be placed in the src subdirectory (e.g.,
|
||||
$GOPATH/src/your_project or
|
||||
$GOPATH/src/github.com/your_github_username/your_project). Technically
|
||||
your project doesn’t have to be in a workspace if you don’t import
|
||||
external packages and you use relative imports for your own code, but
|
||||
it’s not recommended. It’s fine for a toy project or a PoC though. Go
|
||||
v1.11 does introduce the concept of [12]modules that allows you to have
|
||||
your project code outside of your GOPATHwithout the import restrictions
|
||||
mentioned above, but it’s still an experimental feature at this point
|
||||
in time.
|
||||
First, you have to understand Go workspaces. ‘[21]How to Write Go Code’ is a
|
||||
good place to start. By default, Go keeps and expects all code in a single
|
||||
workspace. This place is identified by the GOPATH environment variable. What
|
||||
does it mean for you? It means you have to put your code in the default
|
||||
workspace or you have to change the GOPATH variable to point to your own
|
||||
location. Either way the actual source code for your project needs to be placed
|
||||
in the src subdirectory (e.g., $GOPATH/src/your_project or $GOPATH/src/
|
||||
github.com/your_github_username/your_project). Technically your project doesn’t
|
||||
have to be in a workspace if you don’t import external packages and you use
|
||||
relative imports for your own code, but it’s not recommended. It’s fine for a
|
||||
toy project or a PoC though. Go v1.11 does introduce the concept of [22]modules
|
||||
that allows you to have your project code outside of your GOPATHwithout the
|
||||
import restrictions mentioned above, but it’s still an experimental feature at
|
||||
this point in time.
|
||||
|
||||
You have your project directory in the right place. What’s next?
|
||||
|
||||
For a PoC or a very small project where you are the only one writing
|
||||
the code using a single main.go file in the root directory for your
|
||||
project is enough. If you know your project will be large enough or
|
||||
it’ll go into production and others will be contributing to it you
|
||||
should consider adopting, at least, some of the project layout patterns
|
||||
outlined here.
|
||||
For a PoC or a very small project where you are the only one writing the code
|
||||
using a single main.go file in the root directory for your project is enough.
|
||||
If you know your project will be large enough or it’ll go into production and
|
||||
others will be contributing to it you should consider adopting, at least, some
|
||||
of the project layout patterns outlined here.
|
||||
|
||||
There are a number of project layout patterns emerging in the Go
|
||||
ecosystem. The two most common patterns are the cmd and pkg
|
||||
directories. You should adopt these patterns unless you have a tiny
|
||||
project.
|
||||
There are a number of project layout patterns emerging in the Go ecosystem. The
|
||||
two most common patterns are the cmd and pkg directories. You should adopt
|
||||
these patterns unless you have a tiny project.
|
||||
|
||||
The cmd layout pattern is very useful when you need to have more than
|
||||
one application binary. Each binary gets a subdirectory (e.g.,
|
||||
your_project/cmd/your_app). This patterns also helps you keep your
|
||||
project/package ‘go gettable’. What does it mean? It means you can use
|
||||
the go get command to fetch (and install) your project, its
|
||||
applications and its libraries (e.g., go get
|
||||
github.com/your_github_username/your_project/cmd/appxg). You don’t have
|
||||
to separate the application files. You’ll be able to build each
|
||||
application with the right set of go build flags, but go get will no
|
||||
longer work because it will not know which application code to build.
|
||||
The official [13]Go tools is one example of the cmd layout patter. A
|
||||
number of other well known projects use the same pattern:
|
||||
[14]Kubernetes, [15]Docker, [16]Prometheus, [17]Influxdb.
|
||||
The cmd layout pattern is very useful when you need to have more than one
|
||||
application binary. Each binary gets a subdirectory (e.g., your_project/cmd/
|
||||
your_app). This patterns also helps you keep your project/package ‘go
|
||||
gettable’. What does it mean? It means you can use the go get command to fetch
|
||||
(and install) your project, its applications and its libraries (e.g., go get
|
||||
github.com/your_github_username/your_project/cmd/appxg). You don’t have to
|
||||
separate the application files. You’ll be able to build each application with
|
||||
the right set of go build flags, but go get will no longer work because it will
|
||||
not know which application code to build. The official [23]Go tools is one
|
||||
example of the cmd layout patter. A number of other well known projects use the
|
||||
same pattern: [24]Kubernetes, [25]Docker, [26]Prometheus, [27]Influxdb.
|
||||
|
||||
The pkg layout pattern is also pretty popular. For new Go developers
|
||||
it’s one of the most confusing package structure concepts because Go
|
||||
workspaces have a directory with the same name and that directory has a
|
||||
different purpose (it’s used to store object files for the packages the
|
||||
Go compiler builds). The pkg directory is where you put your public
|
||||
libraries. They can be used internally by your application. They can
|
||||
also be used by external projects. This is an informal contract between
|
||||
you and other external users of your code. Other projects will import
|
||||
these libraries expecting them to work, so think twice before you put
|
||||
something here. Many well known projects use this pattern:
|
||||
[18]Kubernetes, [19]Docker, [20]Grafana, [21]Influxdb, [22]Etcd.
|
||||
The pkg layout pattern is also pretty popular. For new Go developers it’s one
|
||||
of the most confusing package structure concepts because Go workspaces have a
|
||||
directory with the same name and that directory has a different purpose (it’s
|
||||
used to store object files for the packages the Go compiler builds). The pkg
|
||||
directory is where you put your public libraries. They can be used internally
|
||||
by your application. They can also be used by external projects. This is an
|
||||
informal contract between you and other external users of your code. Other
|
||||
projects will import these libraries expecting them to work, so think twice
|
||||
before you put something here. Many well known projects use this pattern: [28]
|
||||
Kubernetes, [29]Docker, [30]Grafana, [31]Influxdb, [32]Etcd.
|
||||
|
||||
Some of the libraries in the pkg directory are not always for public
|
||||
use. Why is that? It happens because many existing Go projects predate
|
||||
the ability to hide internal packages. Some projects put those internal
|
||||
libraries in the pkg directory to be consistent with the rest of their
|
||||
code structure. Other projects put their internal libraries into
|
||||
separate directories outside of the pkg directory. [23]Go 1.4 introduce
|
||||
an ability to hide code using internal directories. What does it mean?
|
||||
If you put your code in an ‘internal’ directory no external project
|
||||
will be able to import that code. Even other code in your project won’t
|
||||
be able to access this internal code if it lives outside of its parent
|
||||
directory. This feature is not widely used yet because it’s relatively
|
||||
new; however, it’s extremely valuable as an additional layer of control
|
||||
(in addition to the lowercase and uppercase function visibility rules
|
||||
in Go). A number of new and well known projects use this pattern:
|
||||
[24]Dep, [25]Docker, [26]Nsq, [27]Go Ethereal, [28]Contour.
|
||||
Some of the libraries in the pkg directory are not always for public use. Why
|
||||
is that? It happens because many existing Go projects predate the ability to
|
||||
hide internal packages. Some projects put those internal libraries in the pkg
|
||||
directory to be consistent with the rest of their code structure. Other
|
||||
projects put their internal libraries into separate directories outside of the
|
||||
pkg directory. [33]Go 1.4 introduce an ability to hide code using internal
|
||||
directories. What does it mean? If you put your code in an ‘internal’ directory
|
||||
no external project will be able to import that code. Even other code in your
|
||||
project won’t be able to access this internal code if it lives outside of its
|
||||
parent directory. This feature is not widely used yet because it’s relatively
|
||||
new; however, it’s extremely valuable as an additional layer of control (in
|
||||
addition to the lowercase and uppercase function visibility rules in Go). A
|
||||
number of new and well known projects use this pattern: [34]Dep, [35]Docker,
|
||||
[36]Nsq, [37]Go Ethereal, [38]Contour.
|
||||
|
||||
The internal directory is the place to put your private packages. You
|
||||
can optionally add additional structure by separating your internally
|
||||
shared libraries (e.g., your_project/internal/pkg/your_private_lib) and
|
||||
the application code you don’t want others to import (e.g.,
|
||||
your_project/internal/app/your_app). When you put all of you private
|
||||
code in the ‘internal’ directory the application code in the cmd
|
||||
directory will be limited to small files that define the ‘main’
|
||||
function for the corresponding application binaries. Everything else
|
||||
will be imported from the internal or pkg directories ([29]ark, from
|
||||
Heptio, and [30]loki, from Grafana, are good examples of this tiny main
|
||||
The internal directory is the place to put your private packages. You can
|
||||
optionally add additional structure by separating your internally shared
|
||||
libraries (e.g., your_project/internal/pkg/your_private_lib) and the
|
||||
application code you don’t want others to import (e.g., your_project/internal/
|
||||
app/your_app). When you put all of you private code in the ‘internal’ directory
|
||||
the application code in the cmd directory will be limited to small files that
|
||||
define the ‘main’ function for the corresponding application binaries.
|
||||
Everything else will be imported from the internal or pkg directories ([39]ark,
|
||||
from Heptio, and [40]loki, from Grafana, are good examples of this tiny main
|
||||
package pattern).
|
||||
|
||||
What if you forked and modified a piece of an external project? Some
|
||||
projects put that code in the pkg directory, but it’s better to put it
|
||||
in the third_party top level directory to keep your code separate from
|
||||
the code you borrowed from others.
|
||||
What if you forked and modified a piece of an external project? Some projects
|
||||
put that code in the pkg directory, but it’s better to put it in the
|
||||
third_party top level directory to keep your code separate from the code you
|
||||
borrowed from others.
|
||||
|
||||
What about the external packages you import in your projects? Where do
|
||||
they go? You have several options. You can keep them outside of your
|
||||
project. The packages you install with go get will be saved in your Go
|
||||
workspace. It works most of the times, but depending on the package it
|
||||
might be brittle and unpredictable because when somebody else tries to
|
||||
build your project they might get a backward incompatible version of
|
||||
that package. The solution is ‘vendoring’. With ‘vendoring’ you freeze
|
||||
your dependencies by committing them with your project. [31]Go 1.6
|
||||
introduced a standard way to ‘vendor’ external packages (it was an
|
||||
experimental feature in Go 1.5). Put your external package in the
|
||||
vendor directory. How is this different from the third_party directory?
|
||||
If you import and use external code as-is then it should go into the
|
||||
vendor directory. If you are using a modified version of an external
|
||||
project then put it in the third_party directory.
|
||||
What about the external packages you import in your projects? Where do they go?
|
||||
You have several options. You can keep them outside of your project. The
|
||||
packages you install with go get will be saved in your Go workspace. It works
|
||||
most of the times, but depending on the package it might be brittle and
|
||||
unpredictable because when somebody else tries to build your project they might
|
||||
get a backward incompatible version of that package. The solution is
|
||||
‘vendoring’. With ‘vendoring’ you freeze your dependencies by committing them
|
||||
with your project. [41]Go 1.6 introduced a standard way to ‘vendor’ external
|
||||
packages (it was an experimental feature in Go 1.5). Put your external package
|
||||
in the vendor directory. How is this different from the third_party directory?
|
||||
If you import and use external code as-is then it should go into the vendor
|
||||
directory. If you are using a modified version of an external project then put
|
||||
it in the third_party directory.
|
||||
|
||||
If you want to learn more about the project structure used by other Go
|
||||
projects read the ‘[32]Analysis of the Top 1000 Go Repositories’. It’s
|
||||
a little dated, but it’s still useful.
|
||||
If you want to learn more about the project structure used by other Go projects
|
||||
read the ‘[42]Analysis of the Top 1000 Go Repositories’. It’s a little dated,
|
||||
but it’s still useful.
|
||||
|
||||
A real project will have additional directories too. You can use this
|
||||
layout template as a starting point for your Go projects:
|
||||
[33]https://github.com/golang-standards/project-layout. It covers the
|
||||
Go project layout patterns described in this blog post and it includes
|
||||
a number of supporting directories you’ll need to have.
|
||||
A real project will have additional directories too. You can use this layout
|
||||
template as a starting point for your Go projects: [43]https://github.com/
|
||||
golang-standards/project-layout. It covers the Go project layout patterns
|
||||
described in this blog post and it includes a number of supporting directories
|
||||
you’ll need to have.
|
||||
|
||||
Now it’s time to write some code! If you don’t have Go installed take a
|
||||
look at this [34]quick setup guide for Mac OS X (setup on other
|
||||
platforms is similar). Go through the ‘[35]Tour of Go’ if you haven’t
|
||||
done it yet and then read ’[36]50 Shades of Go’ to learn about the most
|
||||
common gotchas in Go, which will save you quite a bit of time when you
|
||||
start writing and debugging code.
|
||||
Now it’s time to write some code! If you don’t have Go installed take a look at
|
||||
this [44]quick setup guide for Mac OS X (setup on other platforms is similar).
|
||||
Go through the ‘[45]Tour of Go’ if you haven’t done it yet and then read ’[46]
|
||||
50 Shades of Go’ to learn about the most common gotchas in Go, which will save
|
||||
you quite a bit of time when you start writing and debugging code.
|
||||
|
||||
[47]
|
||||
Golang
|
||||
[48]
|
||||
Go
|
||||
[49]
|
||||
Standards
|
||||
[50]
|
||||
Project Structure
|
||||
|
||||
--
|
||||
|
||||
--
|
||||
(BUTTON)
|
||||
|
||||
11
|
||||
(BUTTON)
|
||||
|
||||
[53]
|
||||
Kyle C. Quest (Q)
|
||||
[54]
|
||||
golang-learn
|
||||
(BUTTON) Follow
|
||||
[37](BUTTON)
|
||||
[38]
|
||||
Follow
|
||||
[56]
|
||||
[58]
|
||||
|
||||
Written by Kyle C. Quest (Q)
|
||||
|
||||
[39]358 Followers
|
||||
[59]358 Followers
|
||||
·Editor for
|
||||
[40]
|
||||
[60]
|
||||
|
||||
golang-learn
|
||||
|
||||
CTO / Redefining DevOps * Hacker @DockerSlim * @Golang50Shades * Cloud
|
||||
Native * Data * Security
|
||||
(BUTTON) Follow
|
||||
[41](BUTTON)
|
||||
[42]
|
||||
CTO / Redefining DevOps * Hacker @DockerSlim * @Golang50Shades * Cloud Native *
|
||||
Data * Security
|
||||
|
||||
Follow
|
||||
[62]
|
||||
[64]
|
||||
|
||||
Help
|
||||
[43]
|
||||
|
||||
[65]
|
||||
|
||||
Status
|
||||
[44]
|
||||
|
||||
[66]
|
||||
|
||||
About
|
||||
[45]
|
||||
|
||||
[67]
|
||||
|
||||
Careers
|
||||
[46]
|
||||
|
||||
[68]
|
||||
|
||||
Blog
|
||||
[47]
|
||||
|
||||
[69]
|
||||
|
||||
Privacy
|
||||
[48]
|
||||
|
||||
[70]
|
||||
|
||||
Terms
|
||||
[49]
|
||||
|
||||
[71]
|
||||
|
||||
Text to speech
|
||||
[50]
|
||||
|
||||
[72]
|
||||
|
||||
Teams
|
||||
|
||||
References
|
||||
|
||||
Visible links:
|
||||
1. https://medium.com/osd.xml
|
||||
2. android-app://com.medium.reader/https/medium.com/p/e5213cdcfaa2
|
||||
3. https://rsci.app.link/?$canonical_url=https://medium.com/p/e5213cdcfaa2&~feature=LoOpenInAppButton&~channel=ShowPostUnderCollection&source=---two_column_layout_nav----------------------------------
|
||||
4. https://medium.com/m/signin?operation=login&redirect=https://medium.com/golang-learn/go-project-layout-e5213cdcfaa2&source=post_page---two_column_layout_nav-----------------------global_nav-----------
|
||||
5. https://medium.com/m/signin?operation=login&redirect=https://medium.com/golang-learn/go-project-layout-e5213cdcfaa2&source=post_page---two_column_layout_nav-----------------------global_nav-----------
|
||||
6. https://medium.com/@kcq?source=post_page-----e5213cdcfaa2--------------------------------
|
||||
7. https://medium.com/m/signin?actionUrl=https://medium.com/_/subscribe/user/6aac7a58837&operation=register&redirect=https://medium.com/golang-learn/go-project-layout-e5213cdcfaa2&user=Kyle+C.+Quest+(Q)&userId=6aac7a58837&source=post_page-6aac7a58837----e5213cdcfaa2---------------------post_header-----------
|
||||
8. https://medium.com/golang-learn?source=post_page-----e5213cdcfaa2--------------------------------
|
||||
9. https://tour.golang.org/
|
||||
10. https://play.golang.org/
|
||||
11. https://golang.org/doc/code.html
|
||||
12. https://github.com/golang/go/wiki/Modules
|
||||
13. https://github.com/golang/tools/tree/master/cmd
|
||||
14. https://github.com/kubernetes/kubernetes/tree/master/cmd
|
||||
15. https://github.com/moby/moby/tree/master/cmd
|
||||
16. https://github.com/prometheus/prometheus/tree/master/cmd
|
||||
17. https://github.com/influxdata/influxdb/tree/master/cmd
|
||||
18. https://github.com/kubernetes/kubernetes/tree/master/pkg
|
||||
19. https://github.com/moby/moby/tree/master/pkg
|
||||
20. https://github.com/grafana/grafana/tree/master/pkg
|
||||
21. https://github.com/influxdata/influxdb/tree/master/pkg
|
||||
22. https://github.com/coreos/etcd/tree/master/pkg
|
||||
23. https://golang.org/doc/go1.4#internalpackages
|
||||
24. https://github.com/golang/dep/tree/master/internal
|
||||
25. https://github.com/moby/moby/tree/master/internal
|
||||
26. https://github.com/nsqio/nsq/tree/master/internal
|
||||
27. https://github.com/ethereum/go-ethereum/tree/master/internal
|
||||
28. https://github.com/heptio/contour/tree/master/internal
|
||||
29. https://github.com/heptio/ark/blob/master/cmd/ark/main.go
|
||||
30. https://github.com/grafana/loki/blob/master/cmd/loki/main.go
|
||||
31. https://golang.org/doc/go1.6#go_command
|
||||
32. http://blog.sgmansfield.com/2016/01/an-analysis-of-the-top-1000-go-repositories/
|
||||
33. https://github.com/golang-standards/project-layout
|
||||
34. https://medium.com/golang-learn/quick-go-setup-guide-on-mac-os-x-956b327222b8
|
||||
35. https://tour.golang.org/
|
||||
36. http://devs.cloudimmunity.com/gotchas-and-common-mistakes-in-go-golang/
|
||||
37. https://medium.com/m/signin?actionUrl=/_/api/subscriptions/newsletters/997b4efe98f9&operation=register&redirect=https://medium.com/golang-learn/go-project-layout-e5213cdcfaa2&newsletterV3=6aac7a58837&newsletterV3Id=997b4efe98f9&user=Kyle+C.+Quest+(Q)&userId=6aac7a58837&source=-----e5213cdcfaa2---------------------subscribe_user-----------
|
||||
38. https://medium.com/@kcq?source=post_page-----e5213cdcfaa2--------------------------------
|
||||
39. https://medium.com/@kcq/followers?source=post_page-----e5213cdcfaa2--------------------------------
|
||||
40. https://medium.com/golang-learn?source=post_page-----e5213cdcfaa2--------------------------------
|
||||
41. https://medium.com/m/signin?actionUrl=/_/api/subscriptions/newsletters/997b4efe98f9&operation=register&redirect=https://medium.com/golang-learn/go-project-layout-e5213cdcfaa2&newsletterV3=6aac7a58837&newsletterV3Id=997b4efe98f9&user=Kyle+C.+Quest+(Q)&userId=6aac7a58837&source=-----e5213cdcfaa2---------------------subscribe_user-----------
|
||||
42. https://help.medium.com/hc/en-us?source=post_page-----e5213cdcfaa2--------------------------------
|
||||
43. https://medium.statuspage.io/?source=post_page-----e5213cdcfaa2--------------------------------
|
||||
44. https://medium.com/about?autoplay=1&source=post_page-----e5213cdcfaa2--------------------------------
|
||||
45. https://medium.com/jobs-at-medium/work-at-medium-959d1a85284e?source=post_page-----e5213cdcfaa2--------------------------------
|
||||
46. https://blog.medium.com/?source=post_page-----e5213cdcfaa2--------------------------------
|
||||
47. https://policy.medium.com/medium-privacy-policy-f03bf92035c9?source=post_page-----e5213cdcfaa2--------------------------------
|
||||
48. https://policy.medium.com/medium-terms-of-service-9db0094a1e0f?source=post_page-----e5213cdcfaa2--------------------------------
|
||||
49. https://speechify.com/medium?source=post_page-----e5213cdcfaa2--------------------------------
|
||||
50. https://medium.com/business?source=post_page-----e5213cdcfaa2--------------------------------
|
||||
References:
|
||||
|
||||
Hidden links:
|
||||
52. https://medium.com/?source=---two_column_layout_nav----------------------------------
|
||||
53. https://medium.com/m/signin?operation=register&redirect=https%3A%2F%2Fmedium.com%2Fnew-story&source=---two_column_layout_nav-----------------------new_post_topnav-----------
|
||||
54. https://medium.com/search?source=---two_column_layout_nav----------------------------------
|
||||
55. https://medium.com/@kcq?source=post_page-----e5213cdcfaa2--------------------------------
|
||||
56. https://medium.com/golang-learn?source=post_page-----e5213cdcfaa2--------------------------------
|
||||
57. https://medium.com/tag/golang?source=post_page-----e5213cdcfaa2---------------golang-----------------
|
||||
58. https://medium.com/tag/go?source=post_page-----e5213cdcfaa2---------------go-----------------
|
||||
59. https://medium.com/tag/standards?source=post_page-----e5213cdcfaa2---------------standards-----------------
|
||||
60. https://medium.com/tag/project-structure?source=post_page-----e5213cdcfaa2---------------project_structure-----------------
|
||||
61. https://medium.com/@kcq?source=post_page-----e5213cdcfaa2--------------------------------
|
||||
62. https://medium.com/golang-learn?source=post_page-----e5213cdcfaa2--------------------------------
|
||||
[1] https://rsci.app.link/?%24canonical_url=https%3A%2F%2Fmedium.com%2Fp%2Fe5213cdcfaa2&%7Efeature=LoOpenInAppButton&%7Echannel=ShowPostUnderCollection&source=---two_column_layout_nav----------------------------------
|
||||
[3] https://medium.com/m/signin?operation=login&redirect=https%3A%2F%2Fmedium.com%2Fgolang-learn%2Fgo-project-layout-e5213cdcfaa2&source=post_page---two_column_layout_nav-----------------------global_nav-----------
|
||||
[4] https://medium.com/?source=---two_column_layout_nav----------------------------------
|
||||
[6] https://medium.com/m/signin?operation=register&redirect=https%3A%2F%2Fmedium.com%2Fnew-story&source=---two_column_layout_nav-----------------------new_post_topnav-----------
|
||||
[7] https://medium.com/search?source=---two_column_layout_nav----------------------------------
|
||||
[9] https://medium.com/m/signin?operation=login&redirect=https%3A%2F%2Fmedium.com%2Fgolang-learn%2Fgo-project-layout-e5213cdcfaa2&source=post_page---two_column_layout_nav-----------------------global_nav-----------
|
||||
[11] https://medium.com/@kcq?source=post_page-----e5213cdcfaa2--------------------------------
|
||||
[12] https://medium.com/golang-learn?source=post_page-----e5213cdcfaa2--------------------------------
|
||||
[13] https://medium.com/@kcq?source=post_page-----e5213cdcfaa2--------------------------------
|
||||
[14] https://medium.com/m/signin?actionUrl=https%3A%2F%2Fmedium.com%2F_%2Fsubscribe%2Fuser%2F6aac7a58837&operation=register&redirect=https%3A%2F%2Fmedium.com%2Fgolang-learn%2Fgo-project-layout-e5213cdcfaa2&user=Kyle+C.+Quest+%28Q%29&userId=6aac7a58837&source=post_page-6aac7a58837----e5213cdcfaa2---------------------post_header-----------
|
||||
[15] https://medium.com/golang-learn?source=post_page-----e5213cdcfaa2--------------------------------
|
||||
[19] https://tour.golang.org/
|
||||
[20] https://play.golang.org/
|
||||
[21] https://golang.org/doc/code.html
|
||||
[22] https://github.com/golang/go/wiki/Modules
|
||||
[23] https://github.com/golang/tools/tree/master/cmd
|
||||
[24] https://github.com/kubernetes/kubernetes/tree/master/cmd
|
||||
[25] https://github.com/moby/moby/tree/master/cmd
|
||||
[26] https://github.com/prometheus/prometheus/tree/master/cmd
|
||||
[27] https://github.com/influxdata/influxdb/tree/master/cmd
|
||||
[28] https://github.com/kubernetes/kubernetes/tree/master/pkg
|
||||
[29] https://github.com/moby/moby/tree/master/pkg
|
||||
[30] https://github.com/grafana/grafana/tree/master/pkg
|
||||
[31] https://github.com/influxdata/influxdb/tree/master/pkg
|
||||
[32] https://github.com/coreos/etcd/tree/master/pkg
|
||||
[33] https://golang.org/doc/go1.4#internalpackages
|
||||
[34] https://github.com/golang/dep/tree/master/internal
|
||||
[35] https://github.com/moby/moby/tree/master/internal
|
||||
[36] https://github.com/nsqio/nsq/tree/master/internal
|
||||
[37] https://github.com/ethereum/go-ethereum/tree/master/internal
|
||||
[38] https://github.com/heptio/contour/tree/master/internal
|
||||
[39] https://github.com/heptio/ark/blob/master/cmd/ark/main.go
|
||||
[40] https://github.com/grafana/loki/blob/master/cmd/loki/main.go
|
||||
[41] https://golang.org/doc/go1.6#go_command
|
||||
[42] http://blog.sgmansfield.com/2016/01/an-analysis-of-the-top-1000-go-repositories/
|
||||
[43] https://github.com/golang-standards/project-layout
|
||||
[44] https://medium.com/golang-learn/quick-go-setup-guide-on-mac-os-x-956b327222b8
|
||||
[45] https://tour.golang.org/
|
||||
[46] http://devs.cloudimmunity.com/gotchas-and-common-mistakes-in-go-golang/
|
||||
[47] https://medium.com/tag/golang?source=post_page-----e5213cdcfaa2---------------golang-----------------
|
||||
[48] https://medium.com/tag/go?source=post_page-----e5213cdcfaa2---------------go-----------------
|
||||
[49] https://medium.com/tag/standards?source=post_page-----e5213cdcfaa2---------------standards-----------------
|
||||
[50] https://medium.com/tag/project-structure?source=post_page-----e5213cdcfaa2---------------project_structure-----------------
|
||||
[53] https://medium.com/@kcq?source=post_page-----e5213cdcfaa2--------------------------------
|
||||
[54] https://medium.com/golang-learn?source=post_page-----e5213cdcfaa2--------------------------------
|
||||
[56] https://medium.com/m/signin?actionUrl=%2F_%2Fapi%2Fsubscriptions%2Fnewsletters%2F997b4efe98f9&operation=register&redirect=https%3A%2F%2Fmedium.com%2Fgolang-learn%2Fgo-project-layout-e5213cdcfaa2&newsletterV3=6aac7a58837&newsletterV3Id=997b4efe98f9&user=Kyle+C.+Quest+%28Q%29&userId=6aac7a58837&source=-----e5213cdcfaa2---------------------subscribe_user-----------
|
||||
[58] https://medium.com/@kcq?source=post_page-----e5213cdcfaa2--------------------------------
|
||||
[59] https://medium.com/@kcq/followers?source=post_page-----e5213cdcfaa2--------------------------------
|
||||
[60] https://medium.com/golang-learn?source=post_page-----e5213cdcfaa2--------------------------------
|
||||
[62] https://medium.com/m/signin?actionUrl=%2F_%2Fapi%2Fsubscriptions%2Fnewsletters%2F997b4efe98f9&operation=register&redirect=https%3A%2F%2Fmedium.com%2Fgolang-learn%2Fgo-project-layout-e5213cdcfaa2&newsletterV3=6aac7a58837&newsletterV3Id=997b4efe98f9&user=Kyle+C.+Quest+%28Q%29&userId=6aac7a58837&source=-----e5213cdcfaa2---------------------subscribe_user-----------
|
||||
[64] https://help.medium.com/hc/en-us?source=post_page-----e5213cdcfaa2--------------------------------
|
||||
[65] https://medium.statuspage.io/?source=post_page-----e5213cdcfaa2--------------------------------
|
||||
[66] https://medium.com/about?autoplay=1&source=post_page-----e5213cdcfaa2--------------------------------
|
||||
[67] https://medium.com/jobs-at-medium/work-at-medium-959d1a85284e?source=post_page-----e5213cdcfaa2--------------------------------
|
||||
[68] https://blog.medium.com/?source=post_page-----e5213cdcfaa2--------------------------------
|
||||
[69] https://policy.medium.com/medium-privacy-policy-f03bf92035c9?source=post_page-----e5213cdcfaa2--------------------------------
|
||||
[70] https://policy.medium.com/medium-terms-of-service-9db0094a1e0f?source=post_page-----e5213cdcfaa2--------------------------------
|
||||
[71] https://speechify.com/medium?source=post_page-----e5213cdcfaa2--------------------------------
|
||||
[72] https://medium.com/business?source=post_page-----e5213cdcfaa2--------------------------------
|
||||
|
||||
@@ -3,181 +3,167 @@
|
||||
Daily notes for 2023-07-17
|
||||
|
||||
Jul 17, 2023 · 1447 words · 7 minute read
|
||||
|
||||
Table of Contents
|
||||
|
||||
* [5]Notes on conflict
|
||||
* [6]The INT650
|
||||
• [5]Notes on conflict
|
||||
• [6]The INT650
|
||||
|
||||
Notes on conflict [7]🔗
|
||||
|
||||
When my master and I were walking in the rain, he would say, “Do not
|
||||
walk so fast, the rain is everywhere.”
|
||||
When my master and I were walking in the rain, he would say, “Do not walk
|
||||
so fast, the rain is everywhere.”
|
||||
—Shunryu Suzuki
|
||||
|
||||
For a very long time — too much of my life — I thought conflict was a
|
||||
sign that there was a problem. I didn’t like disagreeing with people
|
||||
about much of anything. I’m using “conflict” in a broad sense: Over
|
||||
resources, points of view, vision, beliefs, tastes.
|
||||
For a very long time — too much of my life — I thought conflict was a sign that
|
||||
there was a problem. I didn’t like disagreeing with people about much of
|
||||
anything. I’m using “conflict” in a broad sense: Over resources, points of
|
||||
view, vision, beliefs, tastes.
|
||||
|
||||
Over time I shifted on the matter a little, but when I look back on it
|
||||
I realize I wasn’t really evolving my attitude toward conflict, I was
|
||||
just evolving my response to its existence, while still believing that
|
||||
being in a state of conflict is a problem. I just got better at keeping
|
||||
my blood pressure low and gritting through it. I think I was looking at
|
||||
conflict as a thing that you have to acknowledge exists, but that you
|
||||
need to get through as quickly as possible, because it’s a bad place to
|
||||
be.
|
||||
Over time I shifted on the matter a little, but when I look back on it I
|
||||
realize I wasn’t really evolving my attitude toward conflict, I was just
|
||||
evolving my response to its existence, while still believing that being in a
|
||||
state of conflict is a problem. I just got better at keeping my blood pressure
|
||||
low and gritting through it. I think I was looking at conflict as a thing that
|
||||
you have to acknowledge exists, but that you need to get through as quickly as
|
||||
possible, because it’s a bad place to be.
|
||||
|
||||
That attitude created some problems:
|
||||
* When you’re bad at being in conflict, you’re at a disadvantage with
|
||||
people who are good at it and mean you harm; and you’re annoying
|
||||
people who are good at it and mean you no harm.
|
||||
* When you look at conflict as a thing to grit through and end
|
||||
quickly it’s hard to maintain your integrity. (See above: The
|
||||
people who don’t want what’s best for you (or the business, or the
|
||||
world, or etc.) understand this, and the ones who are really good
|
||||
at it and a little indifferent toward what’s best for you are
|
||||
counting on you to do all the work to get out of conflict.)
|
||||
* When you’d rather do anything than admit that you’re in a state of
|
||||
conflict, you will eventually do something about your problem that
|
||||
is less skillful for having waited than if you’d admitted it to
|
||||
yourself (and whoever you’re in conflict with) sooner. Or, as one
|
||||
of my past managers put it to me, “don’t be that guy who
|
||||
hockey-sticks.” (I nodded then kind of hockey-sticked.)
|
||||
* When you’re bad at being in conflict, and you’re willing to be set
|
||||
aside your integrity or do other things to get out of it quickly,
|
||||
you’ll eventually get tired of “losing” and figure out ways to
|
||||
“win” that cause others to see you as, at best, baffling and
|
||||
frustrating, and at worst Machiavellian and treacherous.
|
||||
|
||||
That, anyhow, is a rough categorization of my many hundreds of
|
||||
mishandlings of conflict. Maybe the most interesting thing to me about
|
||||
all those mishandlings is that over time I managed to convince myself
|
||||
that failing to be in conflict well was a sign of virtue. Moral
|
||||
sophistication. “Taking the high road.” “Not worth the stress.”
|
||||
“Learning how to play the game.” “Protecting the team.”
|
||||
• When you’re bad at being in conflict, you’re at a disadvantage with people
|
||||
who are good at it and mean you harm; and you’re annoying people who are
|
||||
good at it and mean you no harm.
|
||||
• When you look at conflict as a thing to grit through and end quickly it’s
|
||||
hard to maintain your integrity. (See above: The people who don’t want
|
||||
what’s best for you (or the business, or the world, or etc.) understand
|
||||
this, and the ones who are really good at it and a little indifferent
|
||||
toward what’s best for you are counting on you to do all the work to get
|
||||
out of conflict.)
|
||||
• When you’d rather do anything than admit that you’re in a state of
|
||||
conflict, you will eventually do something about your problem that is less
|
||||
skillful for having waited than if you’d admitted it to yourself (and
|
||||
whoever you’re in conflict with) sooner. Or, as one of my past managers put
|
||||
it to me, “don’t be that guy who hockey-sticks.” (I nodded then kind of
|
||||
hockey-sticked.)
|
||||
• When you’re bad at being in conflict, and you’re willing to be set aside
|
||||
your integrity or do other things to get out of it quickly, you’ll
|
||||
eventually get tired of “losing” and figure out ways to “win” that cause
|
||||
others to see you as, at best, baffling and frustrating, and at worst
|
||||
Machiavellian and treacherous.
|
||||
|
||||
Over the past few years, I’ve changed on the matter: On balance, I
|
||||
definitely don’t think its existence is a sign there’s a problem. It’s
|
||||
just a sign that there’s a conflict.
|
||||
That, anyhow, is a rough categorization of my many hundreds of mishandlings of
|
||||
conflict. Maybe the most interesting thing to me about all those mishandlings
|
||||
is that over time I managed to convince myself that failing to be in conflict
|
||||
well was a sign of virtue. Moral sophistication. “Taking the high road.” “Not
|
||||
worth the stress.” “Learning how to play the game.” “Protecting the team.”
|
||||
|
||||
I still feel a little cautious about conflict when I don’t know the
|
||||
person I’m in conflict with very well. Caution is useful, because
|
||||
people who are bad at being in conflict but mean well — people who are
|
||||
“good eggs” — can still sort of mess things up, because if I have to
|
||||
bet on whether someone hates “losing” or just grinning and bearing it
|
||||
more, my money is on them hating losing more. When things get to a
|
||||
place where it feels existential to them, even good eggs can act sort
|
||||
of rotten. So you have to take time and attend to the interaction so
|
||||
they can be in conflict and feel safe about it.
|
||||
Over the past few years, I’ve changed on the matter: On balance, I definitely
|
||||
don’t think its existence is a sign there’s a problem. It’s just a sign that
|
||||
there’s a conflict.
|
||||
|
||||
I still think I have a responsibility to introduce the existence of
|
||||
conflict with kindness, or receive the news that I’ve entered into a
|
||||
state of conflict in a manner that invites a full airing. “Relaxed and
|
||||
possibly delighted curiosity,” I suppose I’d call it, rather than a
|
||||
furrowing of the brow and assurances that I want to restore harmony at
|
||||
once. Because I don’t want to restore harmony at once. I want to
|
||||
understand why we want different things, then figure out how we can
|
||||
both behave with integrity while we sort that out.
|
||||
I still feel a little cautious about conflict when I don’t know the person I’m
|
||||
in conflict with very well. Caution is useful, because people who are bad at
|
||||
being in conflict but mean well — people who are “good eggs” — can still sort
|
||||
of mess things up, because if I have to bet on whether someone hates “losing”
|
||||
or just grinning and bearing it more, my money is on them hating losing more.
|
||||
When things get to a place where it feels existential to them, even good eggs
|
||||
can act sort of rotten. So you have to take time and attend to the interaction
|
||||
so they can be in conflict and feel safe about it.
|
||||
|
||||
I still think I have a responsibility to introduce the existence of conflict
|
||||
with kindness, or receive the news that I’ve entered into a state of conflict
|
||||
in a manner that invites a full airing. “Relaxed and possibly delighted
|
||||
curiosity,” I suppose I’d call it, rather than a furrowing of the brow and
|
||||
assurances that I want to restore harmony at once. Because I don’t want to
|
||||
restore harmony at once. I want to understand why we want different things,
|
||||
then figure out how we can both behave with integrity while we sort that out.
|
||||
|
||||
The INT650 [8]🔗
|
||||
|
||||
I finally quit waffling on what to do with the Royal Enfield Himalayan.
|
||||
I took it up to [9]Sabatino Moto in St. Johns and traded it in for
|
||||
another Royal Enfield: An INT650 (“Interceptor” everywhere else in the
|
||||
world, but not in North America where Honda owns the rights to the
|
||||
name.)
|
||||
[f4d4087a00284d89b3cedd2720a3b117]
|
||||
|
||||
It’s a pretty night and day difference. The Himalayan is a mountain
|
||||
goat, and the INT650 is … something a little prettier and a little less
|
||||
rough. I was never going to ride the Himalayan the way it was meant to
|
||||
be ridden — fire roads, gravel, dirt — and I didn’t have the patience
|
||||
for the very “work in progress” attitude Royal Enfield took toward it.
|
||||
One thing you learn from all the Himalayan videos on YouTube is that
|
||||
the people who love them best don’t mind fiddling, tweaking, and
|
||||
wrenching. After reading hundreds of owners talk about their
|
||||
experiences, I have come to realize I lost the factory QA lottery on
|
||||
mine, and that engendered a lack of confidence in it that I never
|
||||
recovered from.
|
||||
I finally quit waffling on what to do with the Royal Enfield Himalayan. I took
|
||||
it up to [9]Sabatino Moto in St. Johns and traded it in for another Royal
|
||||
Enfield: An INT650 (“Interceptor” everywhere else in the world, but not in
|
||||
North America where Honda owns the rights to the name.)
|
||||
|
||||
It’s a pretty night and day difference. The Himalayan is a mountain goat, and
|
||||
the INT650 is … something a little prettier and a little less rough. I was
|
||||
never going to ride the Himalayan the way it was meant to be ridden — fire
|
||||
roads, gravel, dirt — and I didn’t have the patience for the very “work in
|
||||
progress” attitude Royal Enfield took toward it. One thing you learn from all
|
||||
the Himalayan videos on YouTube is that the people who love them best don’t
|
||||
mind fiddling, tweaking, and wrenching. After reading hundreds of owners talk
|
||||
about their experiences, I have come to realize I lost the factory QA lottery
|
||||
on mine, and that engendered a lack of confidence in it that I never recovered
|
||||
from.
|
||||
|
||||
Also turns out, I think, that I had a bad dealer:
|
||||
|
||||
The first RE dealer in the Portland area doesn’t really want to sell
|
||||
them, and it really does not want to do anything other than the most
|
||||
basic service. I think I’ve documented that elsewhere, so I won’t go
|
||||
into it more here, but I’ll just offer the observation that RE’s
|
||||
strategy of linking up with Harley dealers to build out its US
|
||||
distribution network did its customers no favors.
|
||||
The first RE dealer in the Portland area doesn’t really want to sell them, and
|
||||
it really does not want to do anything other than the most basic service. I
|
||||
think I’ve documented that elsewhere, so I won’t go into it more here, but I’ll
|
||||
just offer the observation that RE’s strategy of linking up with Harley dealers
|
||||
to build out its US distribution network did its customers no favors.
|
||||
|
||||
The folks at Sabatino, on the other hand, seem to have a genuine
|
||||
appreciation for the bikes, that extends all the way to acknowledging
|
||||
that RE has some QA challenges. Sabatino addresses that by doing their
|
||||
own QA when they uncrate a new bike. And they’re willing to talk about
|
||||
the ups and downs of each model. My head was briefly turned by another
|
||||
model, and I got a reasoned, balanced, discussion of why maybe that one
|
||||
wouldn’t work for me.
|
||||
The folks at Sabatino, on the other hand, seem to have a genuine appreciation
|
||||
for the bikes, that extends all the way to acknowledging that RE has some QA
|
||||
challenges. Sabatino addresses that by doing their own QA when they uncrate a
|
||||
new bike. And they’re willing to talk about the ups and downs of each model. My
|
||||
head was briefly turned by another model, and I got a reasoned, balanced,
|
||||
discussion of why maybe that one wouldn’t work for me.
|
||||
|
||||
They also offer test rides. I can name one dealership that grudgingly
|
||||
made me sign a waiver and write a check for the full amount to test
|
||||
ride a Grom for five laps around their parking lot, and they only did
|
||||
that because it was a two-year-old model and they’d sold the newer one
|
||||
they promised me out from under me. Sabatino made me do the waiver,
|
||||
share my insurance information, and hand over my license, but then they
|
||||
tossed me the keys and told me they’d see me when they saw me.
|
||||
They also offer test rides. I can name one dealership that grudgingly made me
|
||||
sign a waiver and write a check for the full amount to test ride a Grom for
|
||||
five laps around their parking lot, and they only did that because it was a
|
||||
two-year-old model and they’d sold the newer one they promised me out from
|
||||
under me. Sabatino made me do the waiver, share my insurance information, and
|
||||
hand over my license, but then they tossed me the keys and told me they’d see
|
||||
me when they saw me.
|
||||
|
||||
Anyhow, the test ride sold me. I’ve been through several configurations
|
||||
of motorcycle and scooter since getting my motorcycle endorsement —
|
||||
maxiscoots, normal scoots, mini-moto, cruiser, trail bike, dual-sport —
|
||||
and none of them have been the thing I first imagined myself riding
|
||||
when I finally decided to learn how to ride. Well, learn how to ride as
|
||||
an adult, anyhow. The twin 650 runs and sounds nice, the bike handles
|
||||
more comfortably than the Himalayan despite there being 40 pounds more
|
||||
of it, and the super-simple analog speedo and tach are just sort of
|
||||
pleasant. I ran it around St. Johns for a while, was struck by how
|
||||
immediately comfortable it was (and how confident I felt on it), and
|
||||
that was that.
|
||||
Anyhow, the test ride sold me. I’ve been through several configurations of
|
||||
motorcycle and scooter since getting my motorcycle endorsement — maxiscoots,
|
||||
normal scoots, mini-moto, cruiser, trail bike, dual-sport — and none of them
|
||||
have been the thing I first imagined myself riding when I finally decided to
|
||||
learn how to ride. Well, learn how to ride as an adult, anyhow. The twin 650
|
||||
runs and sounds nice, the bike handles more comfortably than the Himalayan
|
||||
despite there being 40 pounds more of it, and the super-simple analog speedo
|
||||
and tach are just sort of pleasant. I ran it around St. Johns for a while, was
|
||||
struck by how immediately comfortable it was (and how confident I felt on it),
|
||||
and that was that.
|
||||
|
||||
Yesterday I took it on a ride out Foster Road toward Damascus. There’s
|
||||
a side road I head out onto that eventually rejoins on the other side
|
||||
of Damascus, close to a back road that joins the highway down to
|
||||
Estacada. So I headed out past Estacada, to see how it did on a small
|
||||
back highway. There was a little bit of buffeting — no fairings — but
|
||||
it ran and handled well. I felt more confident on the little back roads
|
||||
coming back than I did heading out as I got to know the bike better. I
|
||||
did decide to detract from its vintage purity a little by ordering a
|
||||
Dart flyscreen when I got back: People say it helps clean up the
|
||||
turbulence at highway speeds, and keeps the bugs off the pretty silver
|
||||
Yesterday I took it on a ride out Foster Road toward Damascus. There’s a side
|
||||
road I head out onto that eventually rejoins on the other side of Damascus,
|
||||
close to a back road that joins the highway down to Estacada. So I headed out
|
||||
past Estacada, to see how it did on a small back highway. There was a little
|
||||
bit of buffeting — no fairings — but it ran and handled well. I felt more
|
||||
confident on the little back roads coming back than I did heading out as I got
|
||||
to know the bike better. I did decide to detract from its vintage purity a
|
||||
little by ordering a Dart flyscreen when I got back: People say it helps clean
|
||||
up the turbulence at highway speeds, and keeps the bugs off the pretty silver
|
||||
cans.
|
||||
|
||||
Anyhow, glad I’ve got it in the driveway with so much of the riding
|
||||
season left, and I can wholeheartedly recommend Sabatino Moto if you’re
|
||||
looking to buy one for yourself.
|
||||
Anyhow, glad I’ve got it in the driveway with so much of the riding season
|
||||
left, and I can wholeheartedly recommend Sabatino Moto if you’re looking to buy
|
||||
one for yourself.
|
||||
|
||||
[10]journal [11]conflict
|
||||
|
||||
Created with Sketch.
|
||||
|
||||
[12] Created with Sketch.
|
||||
© Copyright 2024 mph
|
||||
Powered by [13]Hugo Theme By [14]nodejh
|
||||
|
||||
Powered by [12]Hugo Theme By [13]nodejh
|
||||
References:
|
||||
|
||||
References
|
||||
|
||||
Visible links:
|
||||
1. https://mike.puddingtime.org/
|
||||
2. https://mike.puddingtime.org/posts
|
||||
3. https://mike.puddingtime.org/tags
|
||||
4. https://mike.puddingtime.org/about
|
||||
5. https://mike.puddingtime.org/posts/2023-07-17-daily-notes/#notes-on-conflict
|
||||
6. https://mike.puddingtime.org/posts/2023-07-17-daily-notes/#the-int650
|
||||
7. https://mike.puddingtime.org/posts/2023-07-17-daily-notes/#notes-on-conflict
|
||||
8. https://mike.puddingtime.org/posts/2023-07-17-daily-notes/#the-int650
|
||||
9. https://www.sabatinomoto.com/
|
||||
10. https://mike.puddingtime.org/tags/journal
|
||||
11. https://mike.puddingtime.org/tags/conflict
|
||||
12. http://www.gohugo.io/
|
||||
13. https://github.com/nodejh/hugo-theme-mini
|
||||
|
||||
Hidden links:
|
||||
15. https://github.com/pdxmph
|
||||
[1] https://mike.puddingtime.org/
|
||||
[2] https://mike.puddingtime.org/posts
|
||||
[3] https://mike.puddingtime.org/tags
|
||||
[4] https://mike.puddingtime.org/about
|
||||
[5] https://mike.puddingtime.org/posts/2023-07-17-daily-notes/#notes-on-conflict
|
||||
[6] https://mike.puddingtime.org/posts/2023-07-17-daily-notes/#the-int650
|
||||
[7] https://mike.puddingtime.org/posts/2023-07-17-daily-notes/#notes-on-conflict
|
||||
[8] https://mike.puddingtime.org/posts/2023-07-17-daily-notes/#the-int650
|
||||
[9] https://www.sabatinomoto.com/
|
||||
[10] https://mike.puddingtime.org/tags/journal
|
||||
[11] https://mike.puddingtime.org/tags/conflict
|
||||
[12] https://github.com/pdxmph
|
||||
[13] http://www.gohugo.io/
|
||||
[14] https://github.com/nodejh/hugo-theme-mini
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,86 +1,82 @@
|
||||
#[1]Stationery🍕
|
||||
|
||||
[2]
|
||||
[1]
|
||||
|
||||
Stationery🍕
|
||||
|
||||
[3]Home [4]Favourites [5]Philosophy [6]Pen & Inks [7]About [8]Contact
|
||||
[9]Colophon [10]Feed [11]Archives
|
||||
[2]Home [3]Favourites [4]Philosophy [5]Pen & Inks [6]About [7]Contact [8]
|
||||
Colophon [9]Feed [10]Archives
|
||||
|
||||
[12]Task management system: Analog Calendar
|
||||
[11] Task management system: Analog Calendar
|
||||
|
||||
2023-05-25 00:00
|
||||
|
||||
My current analog calendar is a Hobonichi Cousin A5.
|
||||
|
||||
I use it part for planning, and part for setting goals on different
|
||||
levels. Yearly, monthly, weekly and daily. I find it very useful
|
||||
process to do in order to see how busy things will be and setting
|
||||
realistic goals.
|
||||
I use it part for planning, and part for setting goals on different levels.
|
||||
Yearly, monthly, weekly and daily. I find it very useful process to do in order
|
||||
to see how busy things will be and setting realistic goals.
|
||||
|
||||
Yearly
|
||||
|
||||
I use on of the graph pages in the back to define some goals I hope to
|
||||
achieve during the year.
|
||||
I use on of the graph pages in the back to define some goals I hope to achieve
|
||||
during the year.
|
||||
|
||||
Monthly
|
||||
|
||||
On the monthly pages I make a note of the most important dates like
|
||||
birthdates and pay day and things like that. Plus that I use the empty
|
||||
area left of the calendar to define some goals and things I’d like to
|
||||
complete during the month.
|
||||
On the monthly pages I make a note of the most important dates like birthdates
|
||||
and pay day and things like that. Plus that I use the empty area left of the
|
||||
calendar to define some goals and things I’d like to complete during the month.
|
||||
|
||||
Weekly
|
||||
|
||||
In the weekly page I do a lot of the same. I define some goals for the
|
||||
week and usually write down a few things I really should get done that
|
||||
week. And in the week spread I write down appointments that involve
|
||||
others or require me to go somewhere plus where I am working from and
|
||||
if I have my daughter.
|
||||
In the weekly page I do a lot of the same. I define some goals for the week and
|
||||
usually write down a few things I really should get done that week. And in the
|
||||
week spread I write down appointments that involve others or require me to go
|
||||
somewhere plus where I am working from and if I have my daughter.
|
||||
|
||||
Makes it really easy to plan and check how much time I have for stuff
|
||||
that show up .
|
||||
Makes it really easy to plan and check how much time I have for stuff that show
|
||||
up .
|
||||
|
||||
Daily
|
||||
|
||||
The daily page is probably the thing that change the most. In some
|
||||
periods it have been where I do my bullet journaling. These days I use
|
||||
them more to define the focus of the day.
|
||||
The daily page is probably the thing that change the most. In some periods it
|
||||
have been where I do my bullet journaling. These days I use them more to define
|
||||
the focus of the day.
|
||||
|
||||
So the page laypit it is kind of split into two sections, one taking
|
||||
1/3 and the other taking 2/3.
|
||||
So the page laypit it is kind of split into two sections, one taking 1/3 and
|
||||
the other taking 2/3.
|
||||
|
||||
The first section I use to outline all the stuff I’m doing that day. It
|
||||
typically looks something like this:
|
||||
* Get up & dressed
|
||||
* Walk the dog
|
||||
* Pack my bag
|
||||
* Skateboard to work
|
||||
* Work
|
||||
+ Work meetings
|
||||
+ Lunch
|
||||
* Skateboard home
|
||||
* Walk the dog
|
||||
* Eat dinner
|
||||
* Etc
|
||||
|
||||
Then on the big section I first define three areas that I’m going to
|
||||
focus on when I get home from work. After that I use the focus areas to
|
||||
define 2-3 goals/bigger tasks for each of them.
|
||||
• Get up & dressed
|
||||
• Walk the dog
|
||||
• Pack my bag
|
||||
• Skateboard to work
|
||||
• Work
|
||||
□ Work meetings
|
||||
□ Lunch
|
||||
• Skateboard home
|
||||
• Walk the dog
|
||||
• Eat dinner
|
||||
• Etc
|
||||
|
||||
Then on the big section I first define three areas that I’m going to focus on
|
||||
when I get home from work. After that I use the focus areas to define 2-3 goals
|
||||
/bigger tasks for each of them.
|
||||
|
||||
Made with ❤️ in Bergen, Norway by Eivind Hjertnes
|
||||
|
||||
References
|
||||
|
||||
1. https://stationery.pizza/feed.rss
|
||||
2. https://stationery.pizza/
|
||||
3. https://stationery.pizza/
|
||||
4. https://stationery.pizza/favourites
|
||||
5. https://stationery.pizza/philosophy
|
||||
6. https://stationery.pizza/pen-inks
|
||||
7. https://stationery.pizza/about
|
||||
8. https://stationery.pizza/contact
|
||||
9. https://stationery.pizza/colophon
|
||||
10. https://stationery.pizza/feed.rss
|
||||
11. https://stationery.pizza/archives
|
||||
12. https://stationery.pizza/2023/05/25/task-management-system-analog-calendar
|
||||
References:
|
||||
|
||||
[1] https://stationery.pizza/
|
||||
[2] https://stationery.pizza/
|
||||
[3] https://stationery.pizza/favourites
|
||||
[4] https://stationery.pizza/philosophy
|
||||
[5] https://stationery.pizza/pen-inks
|
||||
[6] https://stationery.pizza/about
|
||||
[7] https://stationery.pizza/contact
|
||||
[8] https://stationery.pizza/colophon
|
||||
[9] https://stationery.pizza/feed.rss
|
||||
[10] https://stationery.pizza/archives
|
||||
[11] https://stationery.pizza/2023/05/25/task-management-system-analog-calendar
|
||||
|
||||
@@ -1,104 +1,100 @@
|
||||
#[1]Stationery🍕
|
||||
|
||||
[2]
|
||||
[1]
|
||||
|
||||
Stationery🍕
|
||||
|
||||
[3]Home [4]Favourites [5]Philosophy [6]Pen & Inks [7]About [8]Contact
|
||||
[9]Colophon [10]Feed [11]Archives
|
||||
[2]Home [3]Favourites [4]Philosophy [5]Pen & Inks [6]About [7]Contact [8]
|
||||
Colophon [9]Feed [10]Archives
|
||||
|
||||
[12]Bullet Journal
|
||||
[11] Bullet Journal
|
||||
|
||||
2023-05-27 00:00
|
||||
|
||||
The nerdy pen bits
|
||||
|
||||
I use Leuchtturm1917 A5 dot grid notebooks for it at the moment.
|
||||
Sometimes the Bullet Journal versions sometimes the regular. It all
|
||||
depends on what is in stock and if I find a color that is cooler than
|
||||
the dull crap they have for the Bullet Journal versions.
|
||||
I use Leuchtturm1917 A5 dot grid notebooks for it at the moment. Sometimes the
|
||||
Bullet Journal versions sometimes the regular. It all depends on what is in
|
||||
stock and if I find a color that is cooler than the dull crap they have for the
|
||||
Bullet Journal versions.
|
||||
|
||||
Most of the time I use fountain pens. Usually a finer nibbed one for
|
||||
writing and broad stub to underline headings.
|
||||
Most of the time I use fountain pens. Usually a finer nibbed one for writing
|
||||
and broad stub to underline headings.
|
||||
|
||||
How I use it
|
||||
|
||||
I usually re-collect things when the number of pages from first to last
|
||||
go beyond 20-30 pages, mostly because I find it easier to deal with.
|
||||
Plus that I often need to replace at least some of the goals every 3-5
|
||||
days anyways.
|
||||
I usually re-collect things when the number of pages from first to last go
|
||||
beyond 20-30 pages, mostly because I find it easier to deal with. Plus that I
|
||||
often need to replace at least some of the goals every 3-5 days anyways.
|
||||
|
||||
On the first two pages I write down my current “yearly” theme, and then
|
||||
I write down some goals I have on some areas of my life. Usually weight
|
||||
and fitness goals are there. Plus some things I focus on improving.
|
||||
On the first two pages I write down my current “yearly” theme, and then I write
|
||||
down some goals I have on some areas of my life. Usually weight and fitness
|
||||
goals are there. Plus some things I focus on improving.
|
||||
|
||||
Then I put a marker there. Then I turn the page and make a daily page.
|
||||
I make one every day. And move over whatever was left on the day
|
||||
before.
|
||||
Then I put a marker there. Then I turn the page and make a daily page. I make
|
||||
one every day. And move over whatever was left on the day before.
|
||||
|
||||
I just write down the day of the week and the date. And start adding
|
||||
stuff. I usually start by adding auto generated check lists from things
|
||||
that kind of keep my life together.
|
||||
I just write down the day of the week and the date. And start adding stuff. I
|
||||
usually start by adding auto generated check lists from things that kind of
|
||||
keep my life together.
|
||||
|
||||
Usually first work stuff, then my personal daily stuff. I often start
|
||||
with the most important stuff. And then things I have to carry over
|
||||
from the day before. And then I put a marker on the start of the daily
|
||||
page and one marker at the first page with free space to write things.
|
||||
Usually first work stuff, then my personal daily stuff. I often start with the
|
||||
most important stuff. And then things I have to carry over from the day before.
|
||||
And then I put a marker on the start of the daily page and one marker at the
|
||||
first page with free space to write things.
|
||||
|
||||
The first marker is always on the “status / goal page” the second is
|
||||
always at the first page with tasks I haven’t checked off and the last
|
||||
one is always at the first page with available space.
|
||||
The first marker is always on the “status / goal page” the second is always at
|
||||
the first page with tasks I haven’t checked off and the last one is always at
|
||||
the first page with available space.
|
||||
|
||||
As I complete things and run out of tasks I start refilling it. Usually
|
||||
start with Daily tasks, move over to weekly and monthly if there are
|
||||
anything there I need to do. And after that over to projects that are
|
||||
in focus. First the ones outlined in the Hobonichi and then later
|
||||
anything not hidden in my task manager.
|
||||
As I complete things and run out of tasks I start refilling it. Usually start
|
||||
with Daily tasks, move over to weekly and monthly if there are anything there I
|
||||
need to do. And after that over to projects that are in focus. First the ones
|
||||
outlined in the Hobonichi and then later anything not hidden in my task
|
||||
manager.
|
||||
|
||||
Formatting
|
||||
|
||||
I don’t use the official Bullet Journal formatting, I’ve tried a few
|
||||
times but after many years of using [13]Dash/Plus as my task management
|
||||
on paper formatting system I’ve never been able to change it.
|
||||
I don’t use the official Bullet Journal formatting, I’ve tried a few times but
|
||||
after many years of using [12]Dash/Plus as my task management on paper
|
||||
formatting system I’ve never been able to change it.
|
||||
|
||||
The way I do things is that I use one pen and color for writing and
|
||||
another pen and color for underlining things.
|
||||
The way I do things is that I use one pen and color for writing and another pen
|
||||
and color for underlining things.
|
||||
|
||||
I usually only have two levels of headings. One is the day, and then
|
||||
one for the “collection”, when things go deeper than that I typically
|
||||
will do it as sub-tasks and sub-sub-tasks etc. Anything that has tasks
|
||||
under it will be underlined. To make it easy to spot.
|
||||
I usually only have two levels of headings. One is the day, and then one for
|
||||
the “collection”, when things go deeper than that I typically will do it as
|
||||
sub-tasks and sub-sub-tasks etc. Anything that has tasks under it will be
|
||||
underlined. To make it easy to spot.
|
||||
|
||||
In addition to this I also often will write a + between different
|
||||
areas. Like when I move from “Work” related tasks to “Daily” tasks etc.
|
||||
In addition to this I also often will write a + between different areas. Like
|
||||
when I move from “Work” related tasks to “Daily” tasks etc.
|
||||
|
||||
Page layout
|
||||
|
||||
My page layout is usually that I align the top level heading (the day
|
||||
and date) to the left written larger than the rest.
|
||||
My page layout is usually that I align the top level heading (the day and date)
|
||||
to the left written larger than the rest.
|
||||
|
||||
The collection I typically center.
|
||||
|
||||
I also try to use as much of the page as possible. So, if a collection
|
||||
only takes up half the width or a third of the width of the page, I
|
||||
often will add another section next to it. Other times I write the
|
||||
tasks two or three per line. It all depends on what works and how
|
||||
mindful I am of not wasting page while doing it.
|
||||
I also try to use as much of the page as possible. So, if a collection only
|
||||
takes up half the width or a third of the width of the page, I often will add
|
||||
another section next to it. Other times I write the tasks two or three per
|
||||
line. It all depends on what works and how mindful I am of not wasting page
|
||||
while doing it.
|
||||
|
||||
Made with ❤️ in Bergen, Norway by Eivind Hjertnes
|
||||
|
||||
References
|
||||
|
||||
1. https://stationery.pizza/feed.rss
|
||||
2. https://stationery.pizza/
|
||||
3. https://stationery.pizza/
|
||||
4. https://stationery.pizza/favourites
|
||||
5. https://stationery.pizza/philosophy
|
||||
6. https://stationery.pizza/pen-inks
|
||||
7. https://stationery.pizza/about
|
||||
8. https://stationery.pizza/contact
|
||||
9. https://stationery.pizza/colophon
|
||||
10. https://stationery.pizza/feed.rss
|
||||
11. https://stationery.pizza/archives
|
||||
12. https://stationery.pizza/2023/05/27/bullet-journal
|
||||
13. https://patrickrhone.com/dashplus/
|
||||
References:
|
||||
|
||||
[1] https://stationery.pizza/
|
||||
[2] https://stationery.pizza/
|
||||
[3] https://stationery.pizza/favourites
|
||||
[4] https://stationery.pizza/philosophy
|
||||
[5] https://stationery.pizza/pen-inks
|
||||
[6] https://stationery.pizza/about
|
||||
[7] https://stationery.pizza/contact
|
||||
[8] https://stationery.pizza/colophon
|
||||
[9] https://stationery.pizza/feed.rss
|
||||
[10] https://stationery.pizza/archives
|
||||
[11] https://stationery.pizza/2023/05/27/bullet-journal
|
||||
[12] https://patrickrhone.com/dashplus/
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
#[1]Steph Ango [2]Steph Ango
|
||||
[1]Steph Ango / [2]Writing [3]About [4]Now
|
||||
|
||||
[3]Steph Ango / [4]Writing [5]About [6]Now
|
||||
|
||||
Style is consistent constraint
|
||||
Style is consistent constraint
|
||||
|
||||
September 3, 2023 · 2 minute read
|
||||
|
||||
@@ -10,152 +8,150 @@
|
||||
|
||||
“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.
|
||||
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.
|
||||
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
|
||||
A style can be a system, a pattern, a set of personal guidelines. Here are a
|
||||
few of mine:
|
||||
|
||||
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.
|
||||
• 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 [5]plain text files for all my writing
|
||||
• I ask myself [6]40 questions every year
|
||||
• I meal prep lunches every week, shave my head twice a week
|
||||
• I write [7]concise essays, less than 500 words
|
||||
|
||||
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.
|
||||
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.
|
||||
|
||||
Style gives you leverage. Every time you reuse your style you save
|
||||
time. A durable style is a great investment.
|
||||
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 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.
|
||||
Style gives you leverage. Every time you reuse your style you save time. A
|
||||
durable style is a great investment.
|
||||
|
||||
You don’t need a style for everything. Make a deliberate choice about
|
||||
what needs consistency and what doesn’t.
|
||||
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.
|
||||
|
||||
If you stick with your constraints long enough, your style becomes a
|
||||
cohesive and recognizable [10]point of view.
|
||||
__________________________________________________________________
|
||||
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 [8]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
|
||||
I am starting a collection of interesting personal style choices. Please [9]
|
||||
send me examples and I’ll add them to the list.
|
||||
|
||||
• [10]Scott Yu-Jan [11]paints all his tools white.
|
||||
• [12]2ynthetic uses a [13]limited palette for outfits and [14]office decor.
|
||||
• [15]Johnny Decimal is a system to organize digital data.
|
||||
• [16]Casey Neistat labels everything [17]in his studio with paint markers.
|
||||
• Ryan Hoover [18]never changes his profile picture.
|
||||
• Wes Anderson uses [19]the typeface Futura in many of his films.
|
||||
• [20]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 [21]Teenage Engineering [22]only uses lowercase because
|
||||
uppercase communicates too much authority
|
||||
• Osvaldo Cavandoli created the cartoon [23]La Linea using an animated white
|
||||
line, colored backgrounds, and unintelligible vocalizations
|
||||
|
||||
Linked mentions
|
||||
[24]
|
||||
Don't specialize, hybridize
|
||||
Specialization is too heavily encouraged as a career path. The world
|
||||
needs more hybrid people.
|
||||
Specialization is too heavily encouraged as a career path. The world needs more
|
||||
hybrid people.
|
||||
[25]
|
||||
Buy wisely
|
||||
Whenever I buy things I try to prioritize cost per use. Sometimes I
|
||||
consider other priorities such as cost per smile, cost...
|
||||
Whenever I buy things I try to prioritize cost per use. Sometimes I consider
|
||||
other priorities such as cost per smile, cost...
|
||||
[26]
|
||||
Obsidian Vault Template
|
||||
My personal Obsidian vault template. A bottom-up approach to
|
||||
note-taking and organizing things I am interested in.
|
||||
My personal Obsidian vault template. A bottom-up approach to note-taking and
|
||||
organizing things I am interested in.
|
||||
[27]
|
||||
Flexoki
|
||||
An inky color scheme for prose and code.
|
||||
|
||||
You might also enjoy
|
||||
* [26]Buy wisely
|
||||
* [27]Concise explanations accelerate progress
|
||||
* [28]Scars are beautiful
|
||||
* [29]Choose optimism
|
||||
* [30]Quality software deserves your hard‑earned cash
|
||||
* [31]Don't delegate understanding
|
||||
* [32]Nibble and your appetite will grow
|
||||
* [33]How I do my to-dos
|
||||
* [34]Calmness is a superpower
|
||||
|
||||
[35]Receive my updates
|
||||
• [28]Buy wisely
|
||||
• [29]Concise explanations accelerate progress
|
||||
• [30]Scars are beautiful
|
||||
• [31]Choose optimism
|
||||
• [32]Quality software deserves your hard‑earned cash
|
||||
• [33]Don't delegate understanding
|
||||
• [34]Nibble and your appetite will grow
|
||||
• [35]How I do my to-dos
|
||||
• [36]Calmness is a superpower
|
||||
|
||||
Follow me via email, [36]RSS, [37]Twitter, and [38]other options
|
||||
____________________ Sign up
|
||||
[37]Receive my updates
|
||||
|
||||
[39]Mastodon
|
||||
Follow me via email, [38]RSS, [39]Twitter, and [40]other options
|
||||
|
||||
References
|
||||
[41][ ] [44][Sign up]
|
||||
[45] [46]Mastodon
|
||||
|
||||
Visible links:
|
||||
1. https://stephango.com/feed.xml
|
||||
2. https://stephango.com/feed.json
|
||||
3. https://stephango.com/
|
||||
4. https://stephango.com/
|
||||
5. https://stephango.com/about
|
||||
6. https://stephango.com/now
|
||||
7. https://stephango.com/file-over-app
|
||||
8. https://stephango.com/40-questions
|
||||
9. https://stephango.com/concise
|
||||
10. https://stephango.com/in-good-hands
|
||||
11. https://stephango.com/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. https://stephango.com/buy-wisely
|
||||
27. https://stephango.com/concise
|
||||
28. https://stephango.com/scars
|
||||
29. https://stephango.com/optimism
|
||||
30. https://stephango.com/quality-software
|
||||
31. https://stephango.com/understand
|
||||
32. https://stephango.com/nibble
|
||||
33. https://stephango.com/todos
|
||||
34. https://stephango.com/calmness
|
||||
35. https://stephango.com/subscribe
|
||||
36. https://stephango.com/feed.xml
|
||||
37. https://twitter.com/kepano
|
||||
38. https://stephango.com/subscribe
|
||||
39. https://mastodon.social/@kepano
|
||||
References:
|
||||
|
||||
Hidden links:
|
||||
41. https://stephango.com/hybridize
|
||||
42. https://stephango.com/buy-wisely
|
||||
43. https://stephango.com/vault
|
||||
44. https://stephango.com/flexoki
|
||||
45. https://twitter.com/kepano
|
||||
[1] https://stephango.com/
|
||||
[2] https://stephango.com/
|
||||
[3] https://stephango.com/about
|
||||
[4] https://stephango.com/now
|
||||
[5] https://stephango.com/file-over-app
|
||||
[6] https://stephango.com/40-questions
|
||||
[7] https://stephango.com/concise
|
||||
[8] https://stephango.com/in-good-hands
|
||||
[9] https://stephango.com/about
|
||||
[10] https://www.youtube.com/@ScottYuJan
|
||||
[11] https://www.youtube.com/watch?v=3GBPYRG9jM0
|
||||
[12] https://www.youtube.com/@2ynthetic
|
||||
[13] https://www.youtube.com/watch?v=4xMo2PsLi3c
|
||||
[14] https://www.youtube.com/watch?v=1RqBrl0-qOA
|
||||
[15] https://johnnydecimal.com/
|
||||
[16] https://www.youtube.com/@casey
|
||||
[17] https://www.youtube.com/watch?v=vb60rrtTddQ
|
||||
[18] https://www.ryanhoover.me/post/why-i-never-change-my-profile-pic
|
||||
[19] https://www.marksimonson.com/notebook/view/RoyalTenenbaumsWorldofFutura
|
||||
[20] https://en.wikipedia.org/wiki/Steve_Jobs
|
||||
[21] https://teenage.engineering/
|
||||
[22] https://scandinavianmind.com/feature/human-touch-interview-jesper-kouthoofd-teenage-engineering
|
||||
[23] https://en.wikipedia.org/wiki/La_Linea_(TV_series)
|
||||
[24] https://stephango.com/hybridize
|
||||
[25] https://stephango.com/buy-wisely
|
||||
[26] https://stephango.com/vault
|
||||
[27] https://stephango.com/flexoki
|
||||
[28] https://stephango.com/buy-wisely
|
||||
[29] https://stephango.com/concise
|
||||
[30] https://stephango.com/scars
|
||||
[31] https://stephango.com/optimism
|
||||
[32] https://stephango.com/quality-software
|
||||
[33] https://stephango.com/understand
|
||||
[34] https://stephango.com/nibble
|
||||
[35] https://stephango.com/todos
|
||||
[36] https://stephango.com/calmness
|
||||
[37] https://stephango.com/subscribe
|
||||
[38] https://stephango.com/feed.xml
|
||||
[39] https://twitter.com/kepano
|
||||
[40] https://stephango.com/subscribe
|
||||
[45] https://twitter.com/kepano
|
||||
[46] https://mastodon.social/@kepano
|
||||
|
||||
@@ -1,71 +1,65 @@
|
||||
[1]Stephen's Tech Blog
|
||||
|
||||
* [2]Webhook Wizard 🧙♂️
|
||||
• [2]Webhook Wizard 🧙♂️
|
||||
|
||||
Gopher Wrangling. Effective error handling in Go
|
||||
|
||||
June 19, 2023 · 4 min · Stephen Nancekivell
|
||||
|
||||
Table of Contents
|
||||
|
||||
* [3]Guiding principle
|
||||
□ [3]Guiding principle
|
||||
• [4]1. Always handle errors
|
||||
• [5]2. Log errors in one layer
|
||||
• [6]3. Returning async errors
|
||||
• [7]4. Wrapping errors
|
||||
• [8]5. Downgrade errors Warnings
|
||||
|
||||
[4]1. Always handle errors
|
||||
When programming in Go, the amount of error handling is something that slaps
|
||||
you in the face. Most API’s you deal with will expose errors. It can become
|
||||
overwhelming, but with a few tips and a guiding principle we can make handling
|
||||
errors easy, keep our code clean and give you the confidence that nothing is
|
||||
breaking in production.
|
||||
|
||||
[5]2. Log errors in one layer
|
||||
A cartoon of a crazy stressed programmer pulling their hair out in front of
|
||||
lots of screens showing a error exclamation marks
|
||||
|
||||
[6]3. Returning async errors
|
||||
|
||||
[7]4. Wrapping errors
|
||||
|
||||
[8]5. Downgrade errors Warnings
|
||||
|
||||
When programming in Go, the amount of error handling is something that
|
||||
slaps you in the face. Most API’s you deal with will expose errors. It
|
||||
can become overwhelming, but with a few tips and a guiding principle we
|
||||
can make handling errors easy, keep our code clean and give you the
|
||||
confidence that nothing is breaking in production.
|
||||
|
||||
A cartoon of a crazy stressed programmer pulling their hair out in
|
||||
front of lots of screens showing a error exclamation marks
|
||||
|
||||
A cartoon of a crazy stressed programmer pulling their hair out in
|
||||
front of lots of screens showing a error exclamation marks
|
||||
A cartoon of a crazy stressed programmer pulling their hair out in front of
|
||||
lots of screens showing a error exclamation marks
|
||||
|
||||
Guiding principle[9]#
|
||||
|
||||
The goal for our error handling strategy is that it should require
|
||||
minimal effort and provide an easy way to debug any errors that do
|
||||
occur.
|
||||
The goal for our error handling strategy is that it should require minimal
|
||||
effort and provide an easy way to debug any errors that do occur.
|
||||
|
||||
We wont cover strategies like retrying because they are less common and
|
||||
also expose errors.
|
||||
We wont cover strategies like retrying because they are less common and also
|
||||
expose errors.
|
||||
|
||||
1. Always handle errors[10]#
|
||||
|
||||
Always handle errors. Sometimes it’s tempting to skip one, you might
|
||||
not expect that error to ever happen. But that’s why it’s an exception!
|
||||
You need to handle it so that you can find out clearly if it ever does
|
||||
happen.
|
||||
Always handle errors. Sometimes it’s tempting to skip one, you might not expect
|
||||
that error to ever happen. But that’s why it’s an exception! You need to handle
|
||||
it so that you can find out clearly if it ever does happen.
|
||||
|
||||
If you don’t handle the error, the expected value will be something
|
||||
else and just lead to another error that will be harder to debug, or
|
||||
worse it could lead to data corruption.
|
||||
If you don’t handle the error, the expected value will be something else and
|
||||
just lead to another error that will be harder to debug, or worse it could lead
|
||||
to data corruption.
|
||||
|
||||
In most cases to handle the error all you need to do is return it to
|
||||
the caller of your method, where they can log it.
|
||||
In most cases to handle the error all you need to do is return it to the caller
|
||||
of your method, where they can log it.
|
||||
|
||||
For example, when refreshing some data you might load it, then save it.
|
||||
If you skip the error handling it could overwrite potentially useful
|
||||
data with corrupt data.
|
||||
For example, when refreshing some data you might load it, then save it. If you
|
||||
skip the error handling it could overwrite potentially useful data with corrupt
|
||||
data.
|
||||
|
||||
👎 Bad error handling
|
||||
|
||||
func refresh() {
|
||||
bytes, _ := loadData()
|
||||
saveData(bytes)
|
||||
}
|
||||
|
||||
👍 Good error handling
|
||||
|
||||
func refresh() error {
|
||||
bytes, err := loadData()
|
||||
if err != nil {
|
||||
@@ -76,19 +70,19 @@ func refresh() error {
|
||||
|
||||
2. Log errors in one layer[11]#
|
||||
|
||||
You always want to log your errors, ideally to something that will
|
||||
notify you about the error, so you can fix it. There is no point
|
||||
logging the error multiple times at every layer. Make it the top
|
||||
layer’s responsibility and don’t log in any services or lower level
|
||||
code.
|
||||
You always want to log your errors, ideally to something that will notify you
|
||||
about the error, so you can fix it. There is no point logging the error
|
||||
multiple times at every layer. Make it the top layer’s responsibility and don’t
|
||||
log in any services or lower level code.
|
||||
|
||||
Make sure your logging framework is including stack traces so you can
|
||||
trace the error to its cause.
|
||||
Make sure your logging framework is including stack traces so you can trace the
|
||||
error to its cause.
|
||||
|
||||
For example in a web app you would log the error in the http handler
|
||||
when returning the Internal Server status code.
|
||||
For example in a web app you would log the error in the http handler when
|
||||
returning the Internal Server status code.
|
||||
|
||||
👍 Good error handling
|
||||
|
||||
func refresh() error {
|
||||
bytes, err := loadData()
|
||||
if err != nil {
|
||||
@@ -97,8 +91,7 @@ func refresh() error {
|
||||
saveData(bytes)
|
||||
}
|
||||
|
||||
func (h *handlers) handleRefreshRequest(w http.ResponseWriter, r *http.Request)
|
||||
{
|
||||
func (h *handlers) handleRefreshRequest(w http.ResponseWriter, r *http.Request) {
|
||||
err := refresh()
|
||||
if err != nil {
|
||||
log.Error("unexpected error processing request %w", err)
|
||||
@@ -111,12 +104,12 @@ func (h *handlers) handleRefreshRequest(w http.ResponseWriter, r *http.Request)
|
||||
|
||||
3. Returning async errors[12]#
|
||||
|
||||
When processing data concurrently using a go-func’s, it can be annoying
|
||||
to return the error. But if you don’t your app will be less
|
||||
maintainable. To handle async errors, return them via a channel to the
|
||||
calling thread.
|
||||
When processing data concurrently using a go-func’s, it can be annoying to
|
||||
return the error. But if you don’t your app will be less maintainable. To
|
||||
handle async errors, return them via a channel to the calling thread.
|
||||
|
||||
👎 Bad error handling
|
||||
|
||||
func refreshManyConcurrently() {
|
||||
go func(){
|
||||
refresh(1)
|
||||
@@ -128,6 +121,7 @@ func refreshManyConcurrently() {
|
||||
}
|
||||
|
||||
👍 Good error handling
|
||||
|
||||
func refreshManyConcurrently() error {
|
||||
errors := make(chan error, 2)
|
||||
go func(){
|
||||
@@ -140,8 +134,9 @@ func refreshManyConcurrently() error {
|
||||
return multierror.Combine(<-errors, <- errors)
|
||||
}
|
||||
|
||||
When calling functions that return a value and a possible error using a
|
||||
type like Result[T], to wrap the response to pass on the channel.
|
||||
When calling functions that return a value and a possible error using a type
|
||||
like Result[T], to wrap the response to pass on the channel.
|
||||
|
||||
type Result[T any] struct {
|
||||
Value T
|
||||
Error error
|
||||
@@ -149,29 +144,27 @@ type Result[T any] struct {
|
||||
|
||||
4. Wrapping errors[13]#
|
||||
|
||||
Sometimes you want to add additional context to an error message. Eg to
|
||||
include the id of the request that caused the error. You can use
|
||||
fmt.error for this.
|
||||
Sometimes you want to add additional context to an error message. Eg to include
|
||||
the id of the request that caused the error. You can use fmt.error for this.
|
||||
|
||||
err := saveToDb(user)
|
||||
if err != nil {
|
||||
return fmt.errorf("unexpected error saving user. userId=%v error=%w", user.I
|
||||
d, err)
|
||||
return fmt.errorf("unexpected error saving user. userId=%v error=%w", user.Id, err)
|
||||
}
|
||||
|
||||
Usually this isn’t necessary and its better to just return the error
|
||||
unwrapped.
|
||||
Usually this isn’t necessary and its better to just return the error unwrapped.
|
||||
|
||||
5. Downgrade errors Warnings[14]#
|
||||
|
||||
There are types of errors that regularly occur during normal operation.
|
||||
The system might not be able to prevent them all the time, but they
|
||||
don’t need to investigate every time. It is better to treat them as
|
||||
warnings rather than errors. These might be for things like timeouts or
|
||||
intermittent connection errors.
|
||||
There are types of errors that regularly occur during normal operation. The
|
||||
system might not be able to prevent them all the time, but they don’t need to
|
||||
investigate every time. It is better to treat them as warnings rather than
|
||||
errors. These might be for things like timeouts or intermittent connection
|
||||
errors.
|
||||
|
||||
👍 Good error handling
|
||||
func (h *handlers) handleRefreshRequest(w http.ResponseWriter, r *http.Request)
|
||||
{
|
||||
|
||||
func (h *handlers) handleRefreshRequest(w http.ResponseWriter, r *http.Request) {
|
||||
err := refresh()
|
||||
if err != nil {
|
||||
if err == context.DeadlineExceeded {
|
||||
@@ -188,42 +181,39 @@ func (h *handlers) handleRefreshRequest(w http.ResponseWriter, r *http.Request)
|
||||
}
|
||||
|
||||
[15]« Prev
|
||||
PDFs on the Fly: Programmatically Transforming Webpages into PDFs
|
||||
[16]Next »
|
||||
PDFs on the Fly: Programmatically Transforming Webpages into PDFs [16]Next »
|
||||
How to Serve Web Sockets with Http4s
|
||||
[17][18][19][20][21][22]
|
||||
[23]© 2023 [24]Stephen's Tech Blog
|
||||
[25][26][27][28]
|
||||
|
||||
© 2023 [17]Stephen's Tech Blog
|
||||
References:
|
||||
|
||||
References
|
||||
|
||||
Visible links:
|
||||
1. https://stephenn.com/
|
||||
2. https://webhookwizard.com/
|
||||
3. https://stephenn.com/2023/06/gopher-wrangling.-effective-error-handling-in-go/#guiding-principle
|
||||
4. https://stephenn.com/2023/06/gopher-wrangling.-effective-error-handling-in-go/#1-always-handle-errors
|
||||
5. https://stephenn.com/2023/06/gopher-wrangling.-effective-error-handling-in-go/#2-log-errors-in-one-layer
|
||||
6. https://stephenn.com/2023/06/gopher-wrangling.-effective-error-handling-in-go/#3-returning-async-errors
|
||||
7. https://stephenn.com/2023/06/gopher-wrangling.-effective-error-handling-in-go/#4-wrapping-errors
|
||||
8. https://stephenn.com/2023/06/gopher-wrangling.-effective-error-handling-in-go/#5-downgrade-errors-warnings
|
||||
9. https://stephenn.com/2023/06/gopher-wrangling.-effective-error-handling-in-go/#guiding-principle
|
||||
10. https://stephenn.com/2023/06/gopher-wrangling.-effective-error-handling-in-go/#1-always-handle-errors
|
||||
11. https://stephenn.com/2023/06/gopher-wrangling.-effective-error-handling-in-go/#2-log-errors-in-one-layer
|
||||
12. https://stephenn.com/2023/06/gopher-wrangling.-effective-error-handling-in-go/#3-returning-async-errors
|
||||
13. https://stephenn.com/2023/06/gopher-wrangling.-effective-error-handling-in-go/#4-wrapping-errors
|
||||
14. https://stephenn.com/2023/06/gopher-wrangling.-effective-error-handling-in-go/#5-downgrade-errors-warnings
|
||||
15. https://stephenn.com/2023/06/pdfs-on-the-fly-programmatically-transforming-webpages-into-pdfs/
|
||||
16. https://stephenn.com/2022/07/web-sockets-with-http4s/
|
||||
17. https://stephenn.com/
|
||||
|
||||
Hidden links:
|
||||
19. https://twitter.com/intent/tweet/?text=Gopher%20Wrangling.%20Effective%20error%20handling%20in%20Go&url=https%3a%2f%2fstephenn.com%2f2023%2f06%2fgopher-wrangling.-effective-error-handling-in-go%2f&hashtags=
|
||||
20. https://www.linkedin.com/shareArticle?mini=true&url=https%3a%2f%2fstephenn.com%2f2023%2f06%2fgopher-wrangling.-effective-error-handling-in-go%2f&title=Gopher%20Wrangling.%20Effective%20error%20handling%20in%20Go&summary=Gopher%20Wrangling.%20Effective%20error%20handling%20in%20Go&source=https%3a%2f%2fstephenn.com%2f2023%2f06%2fgopher-wrangling.-effective-error-handling-in-go%2f
|
||||
21. https://reddit.com/submit?url=https%3a%2f%2fstephenn.com%2f2023%2f06%2fgopher-wrangling.-effective-error-handling-in-go%2f&title=Gopher%20Wrangling.%20Effective%20error%20handling%20in%20Go
|
||||
22. https://facebook.com/sharer/sharer.php?u=https%3a%2f%2fstephenn.com%2f2023%2f06%2fgopher-wrangling.-effective-error-handling-in-go%2f
|
||||
23. https://api.whatsapp.com/send?text=Gopher%20Wrangling.%20Effective%20error%20handling%20in%20Go%20-%20https%3a%2f%2fstephenn.com%2f2023%2f06%2fgopher-wrangling.-effective-error-handling-in-go%2f
|
||||
24. https://telegram.me/share/url?text=Gopher%20Wrangling.%20Effective%20error%20handling%20in%20Go&url=https%3a%2f%2fstephenn.com%2f2023%2f06%2fgopher-wrangling.-effective-error-handling-in-go%2f
|
||||
25. https://stephenn.com/2023/06/gopher-wrangling.-effective-error-handling-in-go/#top
|
||||
26. https://github.com/stephennancekivell
|
||||
27. https://twitter.com/hi_stephen_n
|
||||
28. https://www.linkedin.com/in/stephen-nancekivell-77003039
|
||||
29. https://stackoverflow.com/users/893854/stephen
|
||||
[1] https://stephenn.com/
|
||||
[2] https://webhookwizard.com/
|
||||
[3] https://stephenn.com/2023/06/gopher-wrangling.-effective-error-handling-in-go/#guiding-principle
|
||||
[4] https://stephenn.com/2023/06/gopher-wrangling.-effective-error-handling-in-go/#1-always-handle-errors
|
||||
[5] https://stephenn.com/2023/06/gopher-wrangling.-effective-error-handling-in-go/#2-log-errors-in-one-layer
|
||||
[6] https://stephenn.com/2023/06/gopher-wrangling.-effective-error-handling-in-go/#3-returning-async-errors
|
||||
[7] https://stephenn.com/2023/06/gopher-wrangling.-effective-error-handling-in-go/#4-wrapping-errors
|
||||
[8] https://stephenn.com/2023/06/gopher-wrangling.-effective-error-handling-in-go/#5-downgrade-errors-warnings
|
||||
[9] https://stephenn.com/2023/06/gopher-wrangling.-effective-error-handling-in-go/#guiding-principle
|
||||
[10] https://stephenn.com/2023/06/gopher-wrangling.-effective-error-handling-in-go/#1-always-handle-errors
|
||||
[11] https://stephenn.com/2023/06/gopher-wrangling.-effective-error-handling-in-go/#2-log-errors-in-one-layer
|
||||
[12] https://stephenn.com/2023/06/gopher-wrangling.-effective-error-handling-in-go/#3-returning-async-errors
|
||||
[13] https://stephenn.com/2023/06/gopher-wrangling.-effective-error-handling-in-go/#4-wrapping-errors
|
||||
[14] https://stephenn.com/2023/06/gopher-wrangling.-effective-error-handling-in-go/#5-downgrade-errors-warnings
|
||||
[15] https://stephenn.com/2023/06/pdfs-on-the-fly-programmatically-transforming-webpages-into-pdfs/
|
||||
[16] https://stephenn.com/2022/07/web-sockets-with-http4s/
|
||||
[17] https://twitter.com/intent/tweet/?text=Gopher%20Wrangling.%20Effective%20error%20handling%20in%20Go&url=https%3a%2f%2fstephenn.com%2f2023%2f06%2fgopher-wrangling.-effective-error-handling-in-go%2f&hashtags=
|
||||
[18] https://www.linkedin.com/shareArticle?mini=true&url=https%3a%2f%2fstephenn.com%2f2023%2f06%2fgopher-wrangling.-effective-error-handling-in-go%2f&title=Gopher%20Wrangling.%20Effective%20error%20handling%20in%20Go&summary=Gopher%20Wrangling.%20Effective%20error%20handling%20in%20Go&source=https%3a%2f%2fstephenn.com%2f2023%2f06%2fgopher-wrangling.-effective-error-handling-in-go%2f
|
||||
[19] https://reddit.com/submit?url=https%3a%2f%2fstephenn.com%2f2023%2f06%2fgopher-wrangling.-effective-error-handling-in-go%2f&title=Gopher%20Wrangling.%20Effective%20error%20handling%20in%20Go
|
||||
[20] https://facebook.com/sharer/sharer.php?u=https%3a%2f%2fstephenn.com%2f2023%2f06%2fgopher-wrangling.-effective-error-handling-in-go%2f
|
||||
[21] https://api.whatsapp.com/send?text=Gopher%20Wrangling.%20Effective%20error%20handling%20in%20Go%20-%20https%3a%2f%2fstephenn.com%2f2023%2f06%2fgopher-wrangling.-effective-error-handling-in-go%2f
|
||||
[22] https://telegram.me/share/url?text=Gopher%20Wrangling.%20Effective%20error%20handling%20in%20Go&url=https%3a%2f%2fstephenn.com%2f2023%2f06%2fgopher-wrangling.-effective-error-handling-in-go%2f
|
||||
[23] https://stephenn.com/2023/06/gopher-wrangling.-effective-error-handling-in-go/#top
|
||||
[24] https://stephenn.com/
|
||||
[25] https://github.com/stephennancekivell
|
||||
[26] https://twitter.com/hi_stephen_n
|
||||
[27] https://www.linkedin.com/in/stephen-nancekivell-77003039
|
||||
[28] https://stackoverflow.com/users/893854/stephen
|
||||
|
||||
@@ -1,117 +1,110 @@
|
||||
[1]taylor.town
|
||||
|
||||
[2]about [3]now [4]spam [5]rss [6]hire
|
||||
|
||||
cloaca maxima
|
||||
|
||||
When to Build Millennia Sewers
|
||||
|
||||
In the mid-1800s, [7]every building in central Chicago was raised 10ft
|
||||
(30m). Yes, they literally used [8]jackscrews to lift entire city
|
||||
blocks up one-by-one.
|
||||
In the mid-1800s, [7]every building in central Chicago was raised 10ft (30m).
|
||||
Yes, they literally used [8]jackscrews to lift entire city blocks up
|
||||
one-by-one.
|
||||
|
||||
Chicago had to [9]hotfix production because they built the city on the
|
||||
shoreline of Lake Michigan, where filth accumulated without natural
|
||||
drainage. They lifted the entire city after it was built so they could
|
||||
add sewers and prevent flooding.
|
||||
shoreline of Lake Michigan, where filth accumulated without natural drainage.
|
||||
They lifted the entire city after it was built so they could add sewers and
|
||||
prevent flooding.
|
||||
|
||||
For comparison, Rome’s [10]Cloaca Maxima (“Greatest Sewer”) is still
|
||||
in-use after 2,400 years.
|
||||
For comparison, Rome’s [10]Cloaca Maxima (“Greatest Sewer”) is still in-use
|
||||
after 2,400 years.
|
||||
|
||||
So why didn’t Chicago just build it right the first time?
|
||||
* [11]Irreversible Decisions
|
||||
* [12]Unintended vs. Unforeseen
|
||||
* [13]Always Scale Down
|
||||
* [14]Labor & Materials
|
||||
* [15]Awful Architecture
|
||||
|
||||
• [11]Irreversible Decisions
|
||||
• [12]Unintended vs. Unforeseen
|
||||
• [13]Always Scale Down
|
||||
• [14]Labor & Materials
|
||||
• [15]Awful Architecture
|
||||
|
||||
Irreversible Decisions
|
||||
|
||||
Some decisions are consequential and irreversible or nearly
|
||||
irreversible – one-way doors – and these decisions must be made
|
||||
methodically, carefully, slowly, with great deliberation and
|
||||
consultation. If you walk through and don’t like what you see on the
|
||||
other side, you can’t get back to where you were before. We can call
|
||||
these Type 1 decisions. But most decisions aren’t like that – they
|
||||
are changeable, reversible – they’re two-way doors. If you’ve made a
|
||||
suboptimal Type 2 decision, you don’t have to live with the
|
||||
consequences for that long. You can reopen the door and go back
|
||||
through. Type 2 decisions can and should be made quickly by high
|
||||
judgment individuals or small groups.
|
||||
Some decisions are consequential and irreversible or nearly irreversible –
|
||||
one-way doors – and these decisions must be made methodically, carefully,
|
||||
slowly, with great deliberation and consultation. If you walk through and
|
||||
don’t like what you see on the other side, you can’t get back to where you
|
||||
were before. We can call these Type 1 decisions. But most decisions aren’t
|
||||
like that – they are changeable, reversible – they’re two-way doors. If
|
||||
you’ve made a suboptimal Type 2 decision, you don’t have to live with the
|
||||
consequences for that long. You can reopen the door and go back through.
|
||||
Type 2 decisions can and should be made quickly by high judgment
|
||||
individuals or small groups.
|
||||
|
||||
As organizations get larger, there seems to be a tendency to use the
|
||||
heavy-weight Type 1 decision-making process on most decisions,
|
||||
including many Type 2 decisions. The end result of this is slowness,
|
||||
unthoughtful risk aversion, failure to experiment sufficiently, and
|
||||
consequently diminished invention. We’ll have to figure out how to
|
||||
fight that tendency.
|
||||
heavy-weight Type 1 decision-making process on most decisions, including
|
||||
many Type 2 decisions. The end result of this is slowness, unthoughtful
|
||||
risk aversion, failure to experiment sufficiently, and consequently
|
||||
diminished invention. We’ll have to figure out how to fight that tendency.
|
||||
|
||||
– [16]Jeff Bezos
|
||||
|
||||
The Cloaca Maxima didn’t magically start out as the Greatest Sewer. It
|
||||
began as an open-air canal, then was modified and renovated and
|
||||
connected to the aqueducts.
|
||||
The Cloaca Maxima didn’t magically start out as the Greatest Sewer. It began as
|
||||
an open-air canal, then was modified and renovated and connected to the
|
||||
aqueducts.
|
||||
|
||||
The Romans probably made mistakes, but they didn’t make any wrong
|
||||
irreversible decisions. To build something that lasts, make sure the
|
||||
architecture is correct where it counts.
|
||||
The Romans probably made mistakes, but they didn’t make any wrong irreversible
|
||||
decisions. To build something that lasts, make sure the architecture is correct
|
||||
where it counts.
|
||||
|
||||
The Chicago sewage disaster was technically reversible, but extremely
|
||||
expensive and painful.
|
||||
The Chicago sewage disaster was technically reversible, but extremely expensive
|
||||
and painful.
|
||||
|
||||
Put “wiggle-room” in your architecture. Plan for repairs. Add
|
||||
backdoors, engine-hoods, seams, and spaces. Emergency plans are
|
||||
generally cheap to include in early phases of design.
|
||||
Put “wiggle-room” in your architecture. Plan for repairs. Add backdoors,
|
||||
engine-hoods, seams, and spaces. Emergency plans are generally cheap to include
|
||||
in early phases of design.
|
||||
|
||||
Unintented vs. Unforeseen
|
||||
|
||||
[17]Exxon executives knew that CO₂ emissions would harm Earth.
|
||||
|
||||
Exxon willfully ignored its own research. Climate change was unintended
|
||||
but not unforeseen.
|
||||
Exxon willfully ignored its own research. Climate change was unintended but not
|
||||
unforeseen.
|
||||
|
||||
Prophets are silenced when apocalypses seem bad for business.
|
||||
|
||||
But remember – all apocalypses are opportunities for entrepeneurship.
|
||||
Exxon could’ve made billions by diversifying themselves with renewable
|
||||
energy. They acted against their own self-interest by ignoring their
|
||||
facts.
|
||||
But remember – all apocalypses are opportunities for entrepeneurship. Exxon
|
||||
could’ve made billions by diversifying themselves with renewable energy. They
|
||||
acted against their own self-interest by ignoring their facts.
|
||||
|
||||
To prevent long-term disaster, solve the hard problem of aligning
|
||||
incentives. Build systems so that all constituents predict and prevent
|
||||
impending doom.
|
||||
To prevent long-term disaster, solve the hard problem of aligning incentives.
|
||||
Build systems so that all constituents predict and prevent impending doom.
|
||||
|
||||
Transparency thwarts [18]own goals. It’s difficult to do stupid things
|
||||
when you do stupid things publicly.
|
||||
Transparency thwarts [18]own goals. It’s difficult to do stupid things when you
|
||||
do stupid things publicly.
|
||||
|
||||
Always Scale Down
|
||||
|
||||
There’s really two ways to design things. You can either sort of
|
||||
start with small things and scale them up or you could start with
|
||||
big things and scale them down…
|
||||
There’s really two ways to design things. You can either sort of start with
|
||||
small things and scale them up or you could start with big things and scale
|
||||
them down…
|
||||
|
||||
So suppose you want to build a system for like 10,000 people to use
|
||||
simultaneously. One way of doing it would be to start with the
|
||||
system, design it for 10 people and test it like that and scale it
|
||||
up 10,000. The other way would be to design it for like 100,000,000
|
||||
people – I mean do the design for that – and then scale it down to
|
||||
tens of thousands. You might not get the same architecture. You
|
||||
might get a completely different architecture. In fact, you would
|
||||
get a different architecture.
|
||||
simultaneously. One way of doing it would be to start with the system,
|
||||
design it for 10 people and test it like that and scale it up 10,000. The
|
||||
other way would be to design it for like 100,000,000 people – I mean do the
|
||||
design for that – and then scale it down to tens of thousands. You might
|
||||
not get the same architecture. You might get a completely different
|
||||
architecture. In fact, you would get a different architecture.
|
||||
|
||||
And I think it’s a really bad idea to start at a design for 10 or
|
||||
100 things and scale it up. It’s better to start with an
|
||||
architecture that you know will work for a few trillion things and
|
||||
scale it down. It will actually be less efficient when you’ve got
|
||||
your 10,000 things than when you scaled up, but you’ll know that
|
||||
you’ll be able to scale it up later. So it’s good.
|
||||
And I think it’s a really bad idea to start at a design for 10 or 100
|
||||
things and scale it up. It’s better to start with an architecture that you
|
||||
know will work for a few trillion things and scale it down. It will
|
||||
actually be less efficient when you’ve got your 10,000 things than when you
|
||||
scaled up, but you’ll know that you’ll be able to scale it up later. So
|
||||
it’s good.
|
||||
|
||||
So rather than ask, “how do we get to five nines?”, let’s make it
|
||||
more interesting! Let’s start at 9,999 nines reliability and scale
|
||||
it down.
|
||||
So rather than ask, “how do we get to five nines?”, let’s make it more
|
||||
interesting! Let’s start at 9,999 nines reliability and scale it down.
|
||||
|
||||
– Joe Armstrong from [19]Systems that run forever and self-heal and
|
||||
scale
|
||||
– Joe Armstrong from [19]Systems that run forever and self-heal and scale
|
||||
|
||||
If you can afford it, throw a few extra zeroes on your designs.
|
||||
|
||||
@@ -124,11 +117,10 @@ Labor & Materials
|
||||
concrete 30 years difficult $ $$
|
||||
stone 100+ years easy $$$$ $$$
|
||||
|
||||
Pay particular attention to labor – 9 women can’t make a baby in 1
|
||||
month.
|
||||
Pay particular attention to labor – 9 women can’t make a baby in 1 month.
|
||||
|
||||
Exercise for the reader: Which is cheaper, a Nespresso machine or a
|
||||
[20]percolator?
|
||||
Exercise for the reader: Which is cheaper, a Nespresso machine or a [20]
|
||||
percolator?
|
||||
|
||||
Awful Architecture
|
||||
|
||||
@@ -136,56 +128,55 @@ Awful Architecture
|
||||
|
||||
Some decisions are awful in every dimension.
|
||||
|
||||
[21]Dvorak keyboards reduce finger fatigue using the same materials as
|
||||
QWERTY keyboards.
|
||||
[21]Dvorak keyboards reduce finger fatigue using the same materials as QWERTY
|
||||
keyboards.
|
||||
|
||||
[22]Juicero famously launched a high-tech product that was inferior to
|
||||
traditional juicers [23]in every comparable way:
|
||||
|
||||
After taking apart the device, venture capitalist Ben Einstein
|
||||
considered the press to be “an incredibly complicated piece of
|
||||
engineering”, but that the complexity was unnecessary and likely
|
||||
arose from a lack of cost constraints during the design process. A
|
||||
simpler and cheaper implementation, suggested Einstein, would likely
|
||||
have produced much the same quality of juice at a price several
|
||||
hundred dollars cheaper.
|
||||
After taking apart the device, venture capitalist Ben Einstein considered
|
||||
the press to be “an incredibly complicated piece of engineering”, but that
|
||||
the complexity was unnecessary and likely arose from a lack of cost
|
||||
constraints during the design process. A simpler and cheaper
|
||||
implementation, suggested Einstein, would likely have produced much the
|
||||
same quality of juice at a price several hundred dollars cheaper.
|
||||
|
||||
If you want to create lasting sewers, study sewer architecture and its
|
||||
impacts. What do good sewers have in common? What do bad sewers look
|
||||
like? What tradeoffs exist with sewage systems? Are there any
|
||||
promising-yet-untested sewer designs? Why do sewers go into disrepair?
|
||||
What societal factors prevent sewers from being made in the first
|
||||
place? Who truly controls the sewers?
|
||||
If you want to create lasting sewers, study sewer architecture and its impacts.
|
||||
What do good sewers have in common? What do bad sewers look like? What
|
||||
tradeoffs exist with sewage systems? Are there any promising-yet-untested sewer
|
||||
designs? Why do sewers go into disrepair? What societal factors prevent sewers
|
||||
from being made in the first place? Who truly controls the sewers?
|
||||
|
||||
Great architects think ahead, but don’t let ambitions run amok. They
|
||||
anticipate irreversible changes and second-order effects. They consider
|
||||
all the costs – labor and materials and maintenance and environmental
|
||||
impact. They always stay ahead-of-schedule and within their budget. And
|
||||
despite the overwhelming constraints, great architects build millennia
|
||||
sewers whenever and wherever they can.
|
||||
Great architects think ahead, but don’t let ambitions run amok. They anticipate
|
||||
irreversible changes and second-order effects. They consider all the costs –
|
||||
labor and materials and maintenance and environmental impact. They always stay
|
||||
ahead-of-schedule and within their budget. And despite the overwhelming
|
||||
constraints, great architects build millennia sewers whenever and wherever they
|
||||
can.
|
||||
|
||||
References
|
||||
|
||||
1. https://taylor.town/
|
||||
2. https://taylor.town/about
|
||||
3. https://taylor.town/now
|
||||
4. https://newsletter.taylor.town/
|
||||
5. https://taylor.town/feed.xml
|
||||
6. https://taylor.town/hire-me
|
||||
7. https://en.wikipedia.org/wiki/Raising_of_Chicago
|
||||
8. https://en.wikipedia.org/wiki/Jack_(device)#House_jack
|
||||
9. https://www.reddit.com/r/ProgrammerHumor/comments/blhec6/fixing_bugs_in_production/
|
||||
10. https://en.wikipedia.org/wiki/Cloaca_Maxima
|
||||
11. https://taylor.town/millennium-sewer#irreversible
|
||||
12. https://taylor.town/millennium-sewer#unintended
|
||||
13. https://taylor.town/millennium-sewer#scale-down
|
||||
14. https://taylor.town/millennium-sewer#labor-materials
|
||||
15. https://taylor.town/millennium-sewer#awful
|
||||
16. https://www.sec.gov/Archives/edgar/data/1018724/000119312516530910/d168744dex991.htm
|
||||
17. https://en.wikipedia.org/wiki/ExxonMobil_climate_change_denial
|
||||
18. https://en.wikipedia.org/wiki/Own_goal
|
||||
19. https://www.youtube-nocookie.com/embed/cNICGEwmXLU?start=433
|
||||
20. https://en.wikipedia.org/wiki/Coffee_percolator
|
||||
21. https://en.wikipedia.org/wiki/Dvorak_keyboard_layout
|
||||
22. https://en.wikipedia.org/wiki/Juicero
|
||||
23. https://en.wikipedia.org/wiki/Juicero#Criticism
|
||||
References:
|
||||
|
||||
[1] https://taylor.town/
|
||||
[2] https://taylor.town/about
|
||||
[3] https://taylor.town/now
|
||||
[4] https://newsletter.taylor.town/
|
||||
[5] https://taylor.town/feed.xml
|
||||
[6] https://taylor.town/hire-me
|
||||
[7] https://en.wikipedia.org/wiki/Raising_of_Chicago
|
||||
[8] https://en.wikipedia.org/wiki/Jack_%28device%29#House_jack
|
||||
[9] https://www.reddit.com/r/ProgrammerHumor/comments/blhec6/fixing_bugs_in_production/
|
||||
[10] https://en.wikipedia.org/wiki/Cloaca_Maxima
|
||||
[11] https://taylor.town/millennium-sewer#irreversible
|
||||
[12] https://taylor.town/millennium-sewer#unintended
|
||||
[13] https://taylor.town/millennium-sewer#scale-down
|
||||
[14] https://taylor.town/millennium-sewer#labor-materials
|
||||
[15] https://taylor.town/millennium-sewer#awful
|
||||
[16] https://www.sec.gov/Archives/edgar/data/1018724/000119312516530910/d168744dex991.htm
|
||||
[17] https://en.wikipedia.org/wiki/ExxonMobil_climate_change_denial
|
||||
[18] https://en.wikipedia.org/wiki/Own_goal
|
||||
[19] https://www.youtube-nocookie.com/embed/cNICGEwmXLU?start=433
|
||||
[20] https://en.wikipedia.org/wiki/Coffee_percolator
|
||||
[21] https://en.wikipedia.org/wiki/Dvorak_keyboard_layout
|
||||
[22] https://en.wikipedia.org/wiki/Juicero
|
||||
[23] https://en.wikipedia.org/wiki/Juicero#Criticism
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,278 +1,249 @@
|
||||
#[1]The Sweet Setup [2]alternate [3]alternate [4]alternate
|
||||
fbpx *
|
||||
|
||||
fbpx [tr?id=1547247442291447&ev=PageView &noscript=1]
|
||||
FREE! Plan Your Ideal Week: Bonus Workshop + Planner → Get the Workshop
|
||||
|
||||
IFRAME: [5]https://www.googletagmanager.com/ns.html?id=GTM-PS7L89F
|
||||
[1]The Sweet SetupThe Sweet Setup
|
||||
[2]ABOUT [3]COURSES [4]BLOG
|
||||
[5]Sign In
|
||||
|
||||
FREE! Plan Your Ideal Week: Bonus Workshop + Planner → Get the
|
||||
Workshop
|
||||
|
||||
[6]The Sweet Setup The Sweet Setup
|
||||
[7]ABOUT [8]COURSES [9]BLOG
|
||||
[10]Sign In
|
||||
|
||||
* [11]Categories
|
||||
+ [12]Mindfulness
|
||||
+ [13]Workflows
|
||||
+ [14]Setups
|
||||
+ [15]Quick Tips
|
||||
|
||||
____________________ Go
|
||||
• [6]Categories
|
||||
□ [7]Mindfulness
|
||||
□ [8]Workflows
|
||||
□ [9]Setups
|
||||
□ [10]Quick Tips
|
||||
|
||||
[11]
|
||||
[12][ ] [13][Go]
|
||||
How to Create an Effective Weekly Schedule
|
||||
|
||||
April 24, 2023
|
||||
by [16]Isaac Smith
|
||||
by [14]Isaac Smith
|
||||
|
||||
HeroHero
|
||||
|
||||
How to Create an Effective Weekly Schedule
|
||||
|
||||
Have you ever finished a week feeling like your to-do list got longer
|
||||
with each passing day?
|
||||
Have you ever finished a week feeling like your to-do list got longer with each
|
||||
passing day?
|
||||
|
||||
Even though each day was a flurry of activity, it feels like no matter
|
||||
how hard you try and regardless of how much you do, it seems impossible
|
||||
to make progress. I can relate. And there were a lot of weeks this was
|
||||
my reality.
|
||||
Even though each day was a flurry of activity, it feels like no matter how hard
|
||||
you try and regardless of how much you do, it seems impossible to make
|
||||
progress. I can relate. And there were a lot of weeks this was my reality.
|
||||
|
||||
But it’s been a while since I’ve had one of those weeks. And as a
|
||||
whole, they have become a lot less common. I would attribute much of
|
||||
this due to my weekly and daily planning process.
|
||||
But it’s been a while since I’ve had one of those weeks. And as a whole, they
|
||||
have become a lot less common. I would attribute much of this due to my weekly
|
||||
and daily planning process.
|
||||
|
||||
Every Monday for the past 5 years, I’ve taken the first 15 minutes to
|
||||
plan the week ahead.
|
||||
Every Monday for the past 5 years, I’ve taken the first 15 minutes to plan the
|
||||
week ahead.
|
||||
|
||||
For me, this has been my single greatest productivity routine. Before
|
||||
being sucked in to the myriad of inboxes and notifications, I take a
|
||||
brief moment to identify and plan what is truly important for the week
|
||||
ahead.
|
||||
For me, this has been my single greatest productivity routine. Before being
|
||||
sucked in to the myriad of inboxes and notifications, I take a brief moment to
|
||||
identify and plan what is truly important for the week ahead.
|
||||
|
||||
Part of this planning process includes accounting for the unmovable
|
||||
rocks in my schedule. Meetings, errands, when the kids need picking up,
|
||||
the things I know are going to happen on a specific day and time. These
|
||||
events act as guardrails in my schedule. Hard stopping points in which
|
||||
I know I’ll have to transition out of “get things done” mode.
|
||||
Part of this planning process includes accounting for the unmovable rocks in my
|
||||
schedule. Meetings, errands, when the kids need picking up, the things I know
|
||||
are going to happen on a specific day and time. These events act as guardrails
|
||||
in my schedule. Hard stopping points in which I know I’ll have to transition
|
||||
out of “get things done” mode.
|
||||
|
||||
With a framework of my week sketched out, I set myself to the task of
|
||||
painting what done or progress looks like. First, what two or three
|
||||
projects do I need to push forward? Second, what are the two to four
|
||||
tasks associated with each project? And what does “done” mean? The more
|
||||
specific the better.
|
||||
With a framework of my week sketched out, I set myself to the task of painting
|
||||
what done or progress looks like. First, what two or three projects do I need
|
||||
to push forward? Second, what are the two to four tasks associated with each
|
||||
project? And what does “done” mean? The more specific the better.
|
||||
|
||||
Targets
|
||||
|
||||
In every sport, there is a clear objective — get the ball into the
|
||||
basket, hit the target, get to home base, etc. Strategy and tactics may
|
||||
differ, but ultimately there is clarity on what it means to win. That
|
||||
clarity allows for an endless number of ways to achieve success. The
|
||||
rules and boundaries actually cause creativity to thrive within their
|
||||
confines.
|
||||
In every sport, there is a clear objective — get the ball into the basket, hit
|
||||
the target, get to home base, etc. Strategy and tactics may differ, but
|
||||
ultimately there is clarity on what it means to win. That clarity allows for an
|
||||
endless number of ways to achieve success. The rules and boundaries actually
|
||||
cause creativity to thrive within their confines.
|
||||
|
||||
When we give ourselves clear objectives (targets) to aim for through
|
||||
planning, we increase our ability to be creative. A lack of clarity
|
||||
leads to confusion, inefficiency, and ultimately, frustration.
|
||||
When we give ourselves clear objectives (targets) to aim for through planning,
|
||||
we increase our ability to be creative. A lack of clarity leads to confusion,
|
||||
inefficiency, and ultimately, frustration.
|
||||
|
||||
When there is a lack of clarity, people waste time and energy on the
|
||||
trivial many. When they have sufficient levels of clarity, they are
|
||||
capable of greater breakthroughs and innovations—greater than people
|
||||
even realize they ought to have—in those areas that are truly vital.
|
||||
—Greg McKeown
|
||||
trivial many. When they have sufficient levels of clarity, they are capable
|
||||
of greater breakthroughs and innovations—greater than people even realize
|
||||
they ought to have—in those areas that are truly vital. —Greg McKeown
|
||||
|
||||
For me, the planning process gives me time and space to identify what
|
||||
is truly important. This results in clarity of what needs to be done.
|
||||
That clarity moves me to precise action.
|
||||
For me, the planning process gives me time and space to identify what is truly
|
||||
important. This results in clarity of what needs to be done. That clarity moves
|
||||
me to precise action.
|
||||
|
||||
Winning Each Day
|
||||
|
||||
Once I’ve outlined my weekly plan, I turn my attention to the day
|
||||
ahead.
|
||||
Once I’ve outlined my weekly plan, I turn my attention to the day ahead.
|
||||
|
||||
Weekly planWeekly plan
|
||||
|
||||
The same principles that guide my weekly plan are also true for daily
|
||||
planning. Greater clarity on what I’m trying to accomplish leads to
|
||||
taking action.
|
||||
The same principles that guide my weekly plan are also true for daily planning.
|
||||
Greater clarity on what I’m trying to accomplish leads to taking action.
|
||||
|
||||
This does not mean my tasks do not involve any level of ambiguity.
|
||||
Often in the doing of something, greater clarity comes as a result. I
|
||||
try to remove any guesswork for myself in planning out my tasks.
|
||||
This does not mean my tasks do not involve any level of ambiguity. Often in the
|
||||
doing of something, greater clarity comes as a result. I try to remove any
|
||||
guesswork for myself in planning out my tasks.
|
||||
|
||||
Instead of assigning myself the task, “write weekly newsletter” I may
|
||||
start with instead “outline weekly newsletter on restoring margin.” A
|
||||
smaller, bite-size, specific task.
|
||||
Instead of assigning myself the task, “write weekly newsletter” I may start
|
||||
with instead “outline weekly newsletter on restoring margin.” A smaller,
|
||||
bite-size, specific task.
|
||||
|
||||
I’ve found my limit is typically three important tasks (MITs) for each
|
||||
day. And usually I only have enough brain power for two deep work
|
||||
tasks. Things that require a large chunk of un-interrupted focus and
|
||||
creativity. If I assign myself five deep work tasks in a single day,
|
||||
it’s unlikely I’ll get through three of them, and I’ll finish the day
|
||||
feeling behind.
|
||||
I’ve found my limit is typically three important tasks (MITs) for each day. And
|
||||
usually I only have enough brain power for two deep work tasks. Things that
|
||||
require a large chunk of un-interrupted focus and creativity. If I assign
|
||||
myself five deep work tasks in a single day, it’s unlikely I’ll get through
|
||||
three of them, and I’ll finish the day feeling behind.
|
||||
|
||||
The real secret to winning each day has been planning my three MITs the
|
||||
day before.
|
||||
The real secret to winning each day has been planning my three MITs the day
|
||||
before.
|
||||
|
||||
At the end of each day I review what I accomplished and compare that to
|
||||
my plan for the week. Then, I look at my schedule for the next day and
|
||||
plan the two to three tasks I will tackle.
|
||||
At the end of each day I review what I accomplished and compare that to my plan
|
||||
for the week. Then, I look at my schedule for the next day and plan the two to
|
||||
three tasks I will tackle.
|
||||
|
||||
* * *
|
||||
|
||||
All of this leads to a remarkable level of calm and responsiveness to
|
||||
my work, rather than feeling frantic and reactive.
|
||||
All of this leads to a remarkable level of calm and responsiveness to my work,
|
||||
rather than feeling frantic and reactive.
|
||||
|
||||
I’m able to be proactive in managing my workload rather than just
|
||||
surviving the dog-pile nature of incoming requests.
|
||||
I’m able to be proactive in managing my workload rather than just surviving the
|
||||
dog-pile nature of incoming requests.
|
||||
|
||||
The more I lean into the 4-Focus Method, the more I find it working for
|
||||
me.
|
||||
The more I lean into the 4-Focus Method, the more I find it working for me.
|
||||
|
||||
IDENTIFY → PLAN → ACT → CELEBRATE
|
||||
|
||||
Studio spreadStudio spread
|
||||
|
||||
My 15-minute planning session on Monday mornings has changed the way I
|
||||
get work done. And thankfully, it’s rare to find myself absolutely
|
||||
buried on Friday as I wrap up my week.
|
||||
My 15-minute planning session on Monday mornings has changed the way I get work
|
||||
done. And thankfully, it’s rare to find myself absolutely buried on Friday as I
|
||||
wrap up my week.
|
||||
|
||||
There will always be more work to do, but I know I’ll be able to plan
|
||||
for it when I’m back in the saddle on Monday.
|
||||
There will always be more work to do, but I know I’ll be able to plan for it
|
||||
when I’m back in the saddle on Monday.
|
||||
|
||||
(P.S. We’re re-launching our task and time management course All the
|
||||
Things next month (May). 🙌 In which we cover weekly and daily planning
|
||||
extensively.)
|
||||
(P.S. We’re re-launching our task and time management course All the Things
|
||||
next month (May). 🙌 In which we cover weekly and daily planning extensively.)
|
||||
|
||||
Follow us
|
||||
Follow us [15] [16]
|
||||
|
||||
[17]Get App Picks, Guides, & More
|
||||
|
||||
Get workflow tips, app recommendations, how-to guides, stories, and
|
||||
more delivered to your inbox. Plus we'll send you our productivity
|
||||
guide for free!
|
||||
Get workflow tips, app recommendations, how-to guides, stories, and more
|
||||
delivered to your inbox. Plus we'll send you our productivity guide for free!
|
||||
|
||||
____________________
|
||||
[25][ ]
|
||||
|
||||
Sweet!
|
||||
[26][Sweet!]
|
||||
|
||||
[18]Best-Selling Courses
|
||||
[27]Best-Selling Courses
|
||||
|
||||
[19]🎟 All Access Pass 🎟
|
||||
[28]🎟 All Access Pass 🎟
|
||||
|
||||
Join the Focus Accelerator to get instant access to the entire course
|
||||
library, resource vault, and more. [20]»
|
||||
Join the Focus Accelerator to get instant access to the entire course library,
|
||||
resource vault, and more. [29]»
|
||||
|
||||
[21]NEW: All the Things
|
||||
[30]NEW: All the Things
|
||||
|
||||
Best-selling productivity course. Stop being managed by your task list.
|
||||
[22]»
|
||||
Best-selling productivity course. Stop being managed by your task list. [31]»
|
||||
|
||||
[23]Full Course List
|
||||
[32]Full Course List
|
||||
|
||||
Serving 15,000 customers since 2013, we have a library full of in-depth
|
||||
courses to help you be more productive, creative, and focused. [24]View
|
||||
all courses »
|
||||
Serving 15,000 customers since 2013, we have a library full of in-depth courses
|
||||
to help you be more productive, creative, and focused. [33]View all courses »
|
||||
|
||||
[25]The Latest Posts
|
||||
[34]The Latest Posts
|
||||
|
||||
[26]Our First Look at Apple’s New Journal App
|
||||
[35]Our First Look at Apple’s New Journal App
|
||||
|
||||
Let’s take a look at Apple’s new Journal app for iPhone and how it
|
||||
stacks up to one of the perennial apps on the App Store. The app has a
|
||||
long way to go, but it has some very intriguing elements to start.
|
||||
[27]»
|
||||
Let’s take a look at Apple’s new Journal app for iPhone and how it stacks up to
|
||||
one of the perennial apps on the App Store. The app has a long way to go, but
|
||||
it has some very intriguing elements to start. [36]»
|
||||
|
||||
[28]Tracking Important Events with Up Ahead, Time Blocking Methods, and More
|
||||
[37]Tracking Important Events with Up Ahead, Time Blocking Methods, and More
|
||||
|
||||
Catch up on what we published this week, including a look at Up Ahead
|
||||
for tracking upcoming events you're looking forward to, a guide to
|
||||
effectively using time blocking for productivity, and more. [29]»
|
||||
Catch up on what we published this week, including a look at Up Ahead for
|
||||
tracking upcoming events you're looking forward to, a guide to effectively
|
||||
using time blocking for productivity, and more. [38]»
|
||||
|
||||
[30]Up Ahead Lets You Track the Important Things in Life
|
||||
[39]Up Ahead Lets You Track the Important Things in Life
|
||||
|
||||
How many days is it until your next trip? How about until your
|
||||
anniversary? Or maybe that movie you’ve been waiting to see comes out?
|
||||
You can of course put all of these events on a calendar and find them
|
||||
that way, but that doesn’t really make it easy to see how long it is
|
||||
until that thing happens. That's where Up Ahead comes in. [31]»
|
||||
How many days is it until your next trip? How about until your anniversary? Or
|
||||
maybe that movie you’ve been waiting to see comes out? You can of course put
|
||||
all of these events on a calendar and find them that way, but that doesn’t
|
||||
really make it easy to see how long it is until that thing happens. That's
|
||||
where Up Ahead comes in. [40]»
|
||||
|
||||
[32]The Power of Focus Themes
|
||||
[41]The Power of Focus Themes
|
||||
|
||||
One of the most important concepts to learn as you figure out your 2024
|
||||
plans comes from David Allen: "You can do anything you want, but you
|
||||
can’t do everything you want." [Free Workshop this Monday] [33]»
|
||||
One of the most important concepts to learn as you figure out your 2024 plans
|
||||
comes from David Allen: "You can do anything you want, but you can’t do
|
||||
everything you want." [Free Workshop this Monday] [42]»
|
||||
|
||||
[34]The CEO Who Had No Goals (Video)
|
||||
[43]The CEO Who Had No Goals (Video)
|
||||
|
||||
I recently heard a surprising admission from a very successful CEO.
|
||||
[35]»
|
||||
I recently heard a surprising admission from a very successful CEO. [44]»
|
||||
|
||||
* [36]Home
|
||||
* [37]About
|
||||
* [38]Products
|
||||
* [39]Contact
|
||||
* [40]Blog
|
||||
* [41]Newsletter
|
||||
* [42]Sign In
|
||||
• [45]Home
|
||||
• [46]About
|
||||
• [47]Products
|
||||
• [48]Contact
|
||||
• [49]Blog
|
||||
• [50]Newsletter
|
||||
• [51]Sign In
|
||||
|
||||
A website by [43]Shawn Blanc and friends. See also: [44]The Focus
|
||||
Course | [45]Tools & Toys
|
||||
A website by [52]Shawn Blanc and friends. See also: [53]The Focus Course |
|
||||
[54]Tools & Toys
|
||||
© 2024 Blanc Media, LLC
|
||||
[46]Design by Ink Blot Media Group • [47]Dev by Jonathan Christopher
|
||||
|
||||
[55]Design by Ink Blot Media Group • [56]Dev by Jonathan Christopher
|
||||
fbpx
|
||||
|
||||
References
|
||||
References:
|
||||
|
||||
Visible links:
|
||||
1. https://thesweetsetup.com/feed/
|
||||
2. https://thesweetsetup.com/wp-json/wp/v2/posts/160038
|
||||
3. https://thesweetsetup.com/wp-json/oembed/1.0/embed?url=https://thesweetsetup.com/how-to-create-an-effective-weekly-schedule/
|
||||
4. https://thesweetsetup.com/wp-json/oembed/1.0/embed?url=https://thesweetsetup.com/how-to-create-an-effective-weekly-schedule/&format=xml
|
||||
5. https://www.googletagmanager.com/ns.html?id=GTM-PS7L89F
|
||||
6. https://thesweetsetup.com/
|
||||
7. https://thesweetsetup.com/colophon/
|
||||
8. https://thesweetsetup.com/training/
|
||||
9. https://thesweetsetup.com/blog/
|
||||
10. https://thesweetsetup.com/my-account
|
||||
11. https://thesweetsetup.com/how-to-create-an-effective-weekly-schedule/
|
||||
12. https://thesweetsetup.com/category/mindfulness/
|
||||
13. https://thesweetsetup.com/category/workflows/
|
||||
14. https://thesweetsetup.com/category/sweet-setup-interview/
|
||||
15. https://thesweetsetup.com/category/quick-tip/
|
||||
16. https://thesweetsetup.com/author/imsmith/
|
||||
17. https://thesweetsetup.com/newsletter/
|
||||
18. https://thesweetsetup.com/training/
|
||||
19. https://thesweetsetup.com/accelerator/
|
||||
20. https://thesweetsetup.com/accelerator/
|
||||
21. https://thesweetsetup.com/things/
|
||||
22. https://thesweetsetup.com/things/
|
||||
23. https://thesweetsetup.com/training/?utm_source=training_sidebar_link&utm_medium=sidebar&utm_campaign=sidebar_att
|
||||
24. https://thesweetsetup.com/training/
|
||||
25. https://thesweetsetup.com/blog/
|
||||
26. https://thesweetsetup.com/our-first-look-at-apples-new-journal-app/
|
||||
27. https://thesweetsetup.com/our-first-look-at-apples-new-journal-app/
|
||||
28. https://thesweetsetup.com/tracking-important-events-up-ahead-timeblocking-more/
|
||||
29. https://thesweetsetup.com/tracking-important-events-up-ahead-timeblocking-more/
|
||||
30. https://thesweetsetup.com/up-ahead-lets-you-track-the-important-things-in-life/
|
||||
31. https://thesweetsetup.com/up-ahead-lets-you-track-the-important-things-in-life/
|
||||
32. https://thesweetsetup.com/the-power-of-focus-themes/
|
||||
33. https://thesweetsetup.com/the-power-of-focus-themes/
|
||||
34. https://thesweetsetup.com/the-ceo-who-dad-no-goals-video/
|
||||
35. https://thesweetsetup.com/the-ceo-who-dad-no-goals-video/
|
||||
36. https://thesweetsetup.com/
|
||||
37. https://thesweetsetup.com/colophon/
|
||||
38. https://thesweetsetup.com/training/
|
||||
39. https://thesweetsetup.com/contact/
|
||||
40. https://thesweetsetup.com/blog/
|
||||
41. https://thesweetsetup.com/newsletter/
|
||||
42. https://thesweetsetup.com/my-account
|
||||
43. https://shawnblanc.net/
|
||||
44. https://thefocuscourse.com/
|
||||
45. http://toolsandtoys.net/
|
||||
46. http://inkblotmediagroup.com/
|
||||
47. http://mondaybynoon.com/
|
||||
|
||||
Hidden links:
|
||||
49. https://thesweetsetup.com/how-to-create-an-effective-weekly-schedule/
|
||||
50. https://twitter.com/thesweetsetup
|
||||
51. https://thesweetsetup.com/feed
|
||||
[1] https://thesweetsetup.com/
|
||||
[2] https://thesweetsetup.com/colophon/
|
||||
[3] https://thesweetsetup.com/training/
|
||||
[4] https://thesweetsetup.com/blog/
|
||||
[5] https://thesweetsetup.com/my-account
|
||||
[6] https://thesweetsetup.com/how-to-create-an-effective-weekly-schedule/#
|
||||
[7] https://thesweetsetup.com/category/mindfulness/
|
||||
[8] https://thesweetsetup.com/category/workflows/
|
||||
[9] https://thesweetsetup.com/category/sweet-setup-interview/
|
||||
[10] https://thesweetsetup.com/category/quick-tip/
|
||||
[11] https://thesweetsetup.com/how-to-create-an-effective-weekly-schedule/#
|
||||
[14] https://thesweetsetup.com/author/imsmith/
|
||||
[15] https://twitter.com/thesweetsetup
|
||||
[16] https://thesweetsetup.com/feed
|
||||
[17] https://thesweetsetup.com/newsletter/
|
||||
[27] https://thesweetsetup.com/training/
|
||||
[28] https://thesweetsetup.com/accelerator/
|
||||
[29] https://thesweetsetup.com/accelerator/
|
||||
[30] https://thesweetsetup.com/things/
|
||||
[31] https://thesweetsetup.com/things/
|
||||
[32] https://thesweetsetup.com/training/?utm_source=training_sidebar_link&utm_medium=sidebar&utm_campaign=sidebar_att
|
||||
[33] https://thesweetsetup.com/training/
|
||||
[34] https://thesweetsetup.com/blog/
|
||||
[35] https://thesweetsetup.com/our-first-look-at-apples-new-journal-app/
|
||||
[36] https://thesweetsetup.com/our-first-look-at-apples-new-journal-app/
|
||||
[37] https://thesweetsetup.com/tracking-important-events-up-ahead-timeblocking-more/
|
||||
[38] https://thesweetsetup.com/tracking-important-events-up-ahead-timeblocking-more/
|
||||
[39] https://thesweetsetup.com/up-ahead-lets-you-track-the-important-things-in-life/
|
||||
[40] https://thesweetsetup.com/up-ahead-lets-you-track-the-important-things-in-life/
|
||||
[41] https://thesweetsetup.com/the-power-of-focus-themes/
|
||||
[42] https://thesweetsetup.com/the-power-of-focus-themes/
|
||||
[43] https://thesweetsetup.com/the-ceo-who-dad-no-goals-video/
|
||||
[44] https://thesweetsetup.com/the-ceo-who-dad-no-goals-video/
|
||||
[45] https://thesweetsetup.com/
|
||||
[46] https://thesweetsetup.com/colophon/
|
||||
[47] https://thesweetsetup.com/training/
|
||||
[48] https://thesweetsetup.com/contact/
|
||||
[49] https://thesweetsetup.com/blog/
|
||||
[50] https://thesweetsetup.com/newsletter/
|
||||
[51] https://thesweetsetup.com/my-account
|
||||
[52] https://shawnblanc.net/
|
||||
[53] https://thefocuscourse.com/
|
||||
[54] http://toolsandtoys.net/
|
||||
[55] http://inkblotmediagroup.com/
|
||||
[56] http://mondaybynoon.com/
|
||||
|
||||
@@ -1,49 +1,46 @@
|
||||
#[1]The Sweet Setup [2]alternate [3]alternate [4]alternate
|
||||
fbpx *
|
||||
|
||||
fbpx [tr?id=1547247442291447&ev=PageView &noscript=1]
|
||||
FREE! Plan Your Ideal Week: Bonus Workshop + Planner → Get the Workshop
|
||||
|
||||
IFRAME: [5]https://www.googletagmanager.com/ns.html?id=GTM-PS7L89F
|
||||
[1]The Sweet SetupThe Sweet Setup
|
||||
[2]ABOUT [3]COURSES [4]BLOG
|
||||
[5]Sign In
|
||||
|
||||
FREE! Plan Your Ideal Week: Bonus Workshop + Planner → Get the
|
||||
Workshop
|
||||
|
||||
[6]The Sweet Setup The Sweet Setup
|
||||
[7]ABOUT [8]COURSES [9]BLOG
|
||||
[10]Sign In
|
||||
|
||||
* [11]Categories
|
||||
+ [12]Mindfulness
|
||||
+ [13]Workflows
|
||||
+ [14]Setups
|
||||
+ [15]Quick Tips
|
||||
|
||||
____________________ Go
|
||||
• [6]Categories
|
||||
□ [7]Mindfulness
|
||||
□ [8]Workflows
|
||||
□ [9]Setups
|
||||
□ [10]Quick Tips
|
||||
|
||||
[11]
|
||||
[12][ ] [13][Go]
|
||||
Turning Obsidian into My Perfect Writing App
|
||||
|
||||
October 24, 2022
|
||||
by [16]Mike Schmitz
|
||||
by [14]Mike Schmitz
|
||||
|
||||
NaNoWriMo (National Novel Writing Month) is right around the corner,
|
||||
and if you’re looking for a great tool to help you hit your writing
|
||||
goals, there are lots of great options available.
|
||||
NaNoWriMo (National Novel Writing Month) is right around the corner, and if
|
||||
you’re looking for a great tool to help you hit your writing goals, there are
|
||||
lots of great options available.
|
||||
|
||||
In this article, I want to make the case for using [17]Obsidian by
|
||||
showing you how to turn it into a powerful writing environment using a
|
||||
few essential plugins.
|
||||
In this article, I want to make the case for using [15]Obsidian by showing you
|
||||
how to turn it into a powerful writing environment using a few essential
|
||||
plugins.
|
||||
|
||||
[svg][obsidianwr]
|
||||
|
||||
But Isn’t Obsidian a Notes App?
|
||||
|
||||
That’s what I thought when I first started using it a couple of years
|
||||
ago. I was hoping it would help me make connections between my notes
|
||||
and help inspire some new ideas. But over time, I fell in love with it
|
||||
as a writing tool. In fact, every article I’ve written in the last 2
|
||||
years has been written in Obsidian.
|
||||
That’s what I thought when I first started using it a couple of years ago. I
|
||||
was hoping it would help me make connections between my notes and help inspire
|
||||
some new ideas. But over time, I fell in love with it as a writing tool. In
|
||||
fact, every article I’ve written in the last 2 years has been written in
|
||||
Obsidian.
|
||||
|
||||
What makes Obsidian great as a writing tool is how much you can
|
||||
customize it using third-party plugins. The number of plugins continues
|
||||
to grow (676 as of this writing), and with Obsidian recently launching
|
||||
version 1.0, the app shows no signs of slowing down any time soon.
|
||||
What makes Obsidian great as a writing tool is how much you can customize it
|
||||
using third-party plugins. The number of plugins continues to grow (676 as of
|
||||
this writing), and with Obsidian recently launching version 1.0, the app shows
|
||||
no signs of slowing down any time soon.
|
||||
|
||||
My Journey Away from Ulysses
|
||||
|
||||
@@ -51,340 +48,338 @@ My Journey Away from Ulysses
|
||||
|
||||
It’s just not for me for a couple of specific reasons.
|
||||
|
||||
First, publishing to the web isn’t quite as easy as it should be with
|
||||
Ulysses. It does give you the ability to publish straight to WordPress,
|
||||
and you can even update blog posts from Ulysses now — if you can get it
|
||||
to connect to your custom WordPress blog.
|
||||
First, publishing to the web isn’t quite as easy as it should be with Ulysses.
|
||||
It does give you the ability to publish straight to WordPress, and you can even
|
||||
update blog posts from Ulysses now — if you can get it to connect to your
|
||||
custom WordPress blog.
|
||||
|
||||
When this broke for me, I started digging in to how to fix it and
|
||||
quickly came across weird plugins and settings for modifying XMLRPC.
|
||||
And unfortunately, I could never get it functioning again. I fully
|
||||
understand it’s something on my domains, but the “simple instructions”
|
||||
didn’t work for me, and even as a web developer I didn’t feel
|
||||
comfortable digging too far into this.
|
||||
When this broke for me, I started digging in to how to fix it and quickly came
|
||||
across weird plugins and settings for modifying XMLRPC. And unfortunately, I
|
||||
could never get it functioning again. I fully understand it’s something on my
|
||||
domains, but the “simple instructions” didn’t work for me, and even as a web
|
||||
developer I didn’t feel comfortable digging too far into this.
|
||||
|
||||
Which meant I was stuck copying and pasting into WordPress.
|
||||
|
||||
And because Ulysses doesn’t use standard Markdown, that meant I had to
|
||||
“export” my text first. This works, but adds a few extra clicks (or
|
||||
taps in iOS) in order to get my text out of my writing app. Combine
|
||||
that with the fact that Ulysses has some weird Markdown formatting that
|
||||
never quite clicked for me in the first place, and I was left looking
|
||||
for a straight Markdown-based text editor.
|
||||
And because Ulysses doesn’t use standard Markdown, that meant I had to “export”
|
||||
my text first. This works, but adds a few extra clicks (or taps in iOS) in
|
||||
order to get my text out of my writing app. Combine that with the fact that
|
||||
Ulysses has some weird Markdown formatting that never quite clicked for me in
|
||||
the first place, and I was left looking for a straight Markdown-based text
|
||||
editor.
|
||||
|
||||
Obsidian fits that description perfectly. It’s simple, uses plain text
|
||||
files, provides inline formatting, and supports standard Markdown. It’s
|
||||
everything I’ve ever wanted in a plain text editor.
|
||||
Obsidian fits that description perfectly. It’s simple, uses plain text files,
|
||||
provides inline formatting, and supports standard Markdown. It’s everything
|
||||
I’ve ever wanted in a plain text editor.
|
||||
|
||||
But there are a few additional settings and plugins you can use to make
|
||||
it even better as a writing app.
|
||||
But there are a few additional settings and plugins you can use to make it even
|
||||
better as a writing app.
|
||||
|
||||
Obsidian Settings
|
||||
|
||||
First, let’s look at some of the settings.
|
||||
|
||||
To access these settings, click the gear icon in the lower-left corner
|
||||
and then select Editor from the Settings sidebar.
|
||||
To access these settings, click the gear icon in the lower-left corner and then
|
||||
select Editor from the Settings sidebar.
|
||||
|
||||
The defaults are actually pretty good, but here’s the key settings you
|
||||
want if you’re going to use Obsidian for writing:
|
||||
* Make sure that Auto pair Markdown syntax is toggled ON. This
|
||||
creates both symbols and places the cursor in the middle, making it
|
||||
easier to create italicized or emphasized text.
|
||||
* Make sure Smart indent lists is toggled ON. This makes it easier to
|
||||
create bulleted and numbered lists quickly, automatically adding
|
||||
the next bullet when you hit the Return key.
|
||||
* Make sure that Fold heading and Fold indent are toggled ON. This
|
||||
creates carats for Markdown headers as well as indented text,
|
||||
adding some cool outliner-inspired features that make it easy to
|
||||
fold up text in large files and focus on the text you want.
|
||||
The defaults are actually pretty good, but here’s the key settings you want if
|
||||
you’re going to use Obsidian for writing:
|
||||
|
||||
There are a bunch of other settings you can customize, but many of them
|
||||
are simply personal preference. These are the important ones.
|
||||
• Make sure that Auto pair Markdown syntax is toggled ON. This creates both
|
||||
symbols and places the cursor in the middle, making it easier to create
|
||||
italicized or emphasized text.
|
||||
• Make sure Smart indent lists is toggled ON. This makes it easier to create
|
||||
bulleted and numbered lists quickly, automatically adding the next bullet
|
||||
when you hit the Return key.
|
||||
• Make sure that Fold heading and Fold indent are toggled ON. This creates
|
||||
carats for Markdown headers as well as indented text, adding some cool
|
||||
outliner-inspired features that make it easy to fold up text in large files
|
||||
and focus on the text you want.
|
||||
|
||||
There are a bunch of other settings you can customize, but many of them are
|
||||
simply personal preference. These are the important ones.
|
||||
|
||||
Once you have your settings, it’s time to move on to the plugins.
|
||||
|
||||
Obsidian Core Plugin Settings
|
||||
|
||||
There are two types of plugins in Obsidian: Core plugins that ship with
|
||||
the app, and Community plugins that you can install to extend the
|
||||
functionality of Obsidian. We’re going to look at the Core plugins
|
||||
first.
|
||||
There are two types of plugins in Obsidian: Core plugins that ship with the
|
||||
app, and Community plugins that you can install to extend the functionality of
|
||||
Obsidian. We’re going to look at the Core plugins first.
|
||||
|
||||
Here are my recommendations for modifying the Core plugins:
|
||||
* Make sure that Backlinks and Outgoing Links are both toggled ON.
|
||||
These are sections available in the right sidebar that show all of
|
||||
the notes that link to the active note and all of the notes linked
|
||||
to from the active note respectively. (If you’re new to the concept
|
||||
of connected notes, check out [18]this article on using the local
|
||||
graph.)
|
||||
* Make sure that Outline is toggled ON. This adds a tab in the right
|
||||
sidebar that creates a table of contents for your note based on the
|
||||
Markdown headers. This is helpful when you need to jump to a
|
||||
specific section of a longer text as you can do so simply by
|
||||
clicking on the appropriate header title.
|
||||
* Turn the Word Count setting OFF. Word counts are important, but
|
||||
there’s a Community plugin that does this much better than the
|
||||
built-in word count tool here.
|
||||
|
||||
Again, there are a bunch of options here that are personal preference,
|
||||
but these are the important ones. Once you have these Core plugins set,
|
||||
it’s time to really make Obsidian dance by adding some Community
|
||||
plugins.
|
||||
• Make sure that Backlinks and Outgoing Links are both toggled ON. These are
|
||||
sections available in the right sidebar that show all of the notes that
|
||||
link to the active note and all of the notes linked to from the active note
|
||||
respectively. (If you’re new to the concept of connected notes, check out
|
||||
[16]this article on using the local graph.)
|
||||
• Make sure that Outline is toggled ON. This adds a tab in the right sidebar
|
||||
that creates a table of contents for your note based on the Markdown
|
||||
headers. This is helpful when you need to jump to a specific section of a
|
||||
longer text as you can do so simply by clicking on the appropriate header
|
||||
title.
|
||||
• Turn the Word Count setting OFF. Word counts are important, but there’s a
|
||||
Community plugin that does this much better than the built-in word count
|
||||
tool here.
|
||||
|
||||
Again, there are a bunch of options here that are personal preference, but
|
||||
these are the important ones. Once you have these Core plugins set, it’s time
|
||||
to really make Obsidian dance by adding some Community plugins.
|
||||
|
||||
Obsidian Community Plugins for an Upgraded Writing Experience
|
||||
|
||||
You can access the Community plugins public directory by going to
|
||||
Settings → Community plugins → Browse once you’ve toggled off Safe
|
||||
Mode. From there, you can find plugins for just about anything, from
|
||||
[19]embedding tasks from Todoist to [20]creating timeblocked daily
|
||||
plans to [21]creating kanban boards — all based on your locally-stored
|
||||
plain text files using standard Markdown.
|
||||
You can access the Community plugins public directory by going to Settings →
|
||||
Community plugins → Browse once you’ve toggled off Safe Mode. From there, you
|
||||
can find plugins for just about anything, from [17]embedding tasks from Todoist
|
||||
to [18]creating timeblocked daily plans to [19]creating kanban boards — all
|
||||
based on your locally-stored plain text files using standard Markdown.
|
||||
|
||||
All of the plugin links I share below are Obsidian links
|
||||
(obsidian://link-adress) that will open straight to the plug-in page if
|
||||
you have Obsidian installed and running on your device.
|
||||
[svg][obsidianpl]
|
||||
|
||||
Note that many of the plugins I will share here are 1:1 replacements
|
||||
for standard features in Ulysses, so if you don’t mind non-standard
|
||||
Markdown formatting and don’t run into the publishing issues that I
|
||||
did, maybe try that instead. But if you’re all in with Obsidian, here
|
||||
are the plugins I use to make Obsidian my perfect writing app.
|
||||
All of the plugin links I share below are Obsidian links (obsidian://
|
||||
link-adress) that will open straight to the plug-in page if you have Obsidian
|
||||
installed and running on your device.
|
||||
|
||||
Note that many of the plugins I will share here are 1:1 replacements for
|
||||
standard features in Ulysses, so if you don’t mind non-standard Markdown
|
||||
formatting and don’t run into the publishing issues that I did, maybe try that
|
||||
instead. But if you’re all in with Obsidian, here are the plugins I use to make
|
||||
Obsidian my perfect writing app.
|
||||
|
||||
Better Word Count
|
||||
|
||||
The first plugin is called [22]Better Word Count. This replaces the
|
||||
built-in word count core plugin, and it functions largely the same with
|
||||
one key addition: when you highlight text, it shows the
|
||||
words/characters of the highlighted text instead of the whole document.
|
||||
The first plugin is called [20]Better Word Count. This replaces the built-in
|
||||
word count core plugin, and it functions largely the same with one key
|
||||
addition: when you highlight text, it shows the words/characters of the
|
||||
highlighted text instead of the whole document.
|
||||
|
||||
It’s not as good as the writing stats in Ulysses, but it’s good enough
|
||||
for me.
|
||||
[svg][obsidianbw]
|
||||
|
||||
It’s not as good as the writing stats in Ulysses, but it’s good enough for me.
|
||||
|
||||
cMenu
|
||||
|
||||
If you’re uncomfortable relying on your memory for Markdown formatting,
|
||||
[23]cMenu is a third-party plugin that gives you a minimal text editor
|
||||
modal that allows you to do things like bold, italicize, strikethrough,
|
||||
underline, and toggle blockquotes.
|
||||
If you’re uncomfortable relying on your memory for Markdown formatting, [21]
|
||||
cMenu is a third-party plugin that gives you a minimal text editor modal that
|
||||
allows you to do things like bold, italicize, strikethrough, underline, and
|
||||
toggle blockquotes.
|
||||
|
||||
If you don’t like the default options, you can customize what shows up
|
||||
in the modal by adding any of the Commands in your Obsidian library.
|
||||
[svg][obsidiancm]
|
||||
|
||||
If you don’t like the default options, you can customize what shows up in the
|
||||
modal by adding any of the Commands in your Obsidian library.
|
||||
|
||||
Reading Time
|
||||
|
||||
Another handy Ulysses feature is being able to see how long it will
|
||||
take to read the text in the selected file. But you can add this
|
||||
feature to the status bar using the [24]Reading Time plugin.
|
||||
Another handy Ulysses feature is being able to see how long it will take to
|
||||
read the text in the selected file. But you can add this feature to the status
|
||||
bar using the [22]Reading Time plugin.
|
||||
|
||||
This one is pretty straightforward — just install it and turn it on and
|
||||
you’ll see the reading time at the bottom of your Obsidian window. You
|
||||
can customize your reading speed in the settings for the plugin.
|
||||
[svg][obsidianre]
|
||||
|
||||
This one is pretty straightforward — just install it and turn it on and you’ll
|
||||
see the reading time at the bottom of your Obsidian window. You can customize
|
||||
your reading speed in the settings for the plugin.
|
||||
|
||||
Footnote Shortcut
|
||||
|
||||
If you use footnotes a lot, they can be a bit of a pain to create with
|
||||
standard Markdown. It’s a lot easier with the [25]Obsidian Footnotes
|
||||
plugin.^[26]1
|
||||
If you use footnotes a lot, they can be a bit of a pain to create with standard
|
||||
Markdown. It’s a lot easier with the [23]Obsidian Footnotes plugin.^[24]1
|
||||
|
||||
Once installed, you can find it in the Command Palette and with the
|
||||
hotkey: Footnote Shortcut: Insert and Navigate Footnote. You can
|
||||
customize the hotkey by going to Settings → Hotkey and searching for
|
||||
Footnote, which will then insert the appropriate Markdown and navigate
|
||||
to the bottom of the note where you can insert the text for your
|
||||
footnote.
|
||||
[svg][obsidianfo]
|
||||
|
||||
Once installed, you can find it in the Command Palette and with the hotkey:
|
||||
Footnote Shortcut: Insert and Navigate Footnote. You can customize the hotkey
|
||||
by going to Settings → Hotkey and searching for Footnote, which will then
|
||||
insert the appropriate Markdown and navigate to the bottom of the note where
|
||||
you can insert the text for your footnote.
|
||||
|
||||
Focus Mode
|
||||
|
||||
The Obsidian interface can be a little distracting when you’re trying
|
||||
to focus on your words. Fortunately, the [27]Focus Mode plugin allows
|
||||
you to remove all the distractions and focus on what you’re writing.
|
||||
The Obsidian interface can be a little distracting when you’re trying to focus
|
||||
on your words. Fortunately, the [25]Focus Mode plugin allows you to remove all
|
||||
the distractions and focus on what you’re writing.
|
||||
|
||||
Once the plugin is installed and active, just click the Toggle Focus
|
||||
Mode button to hide the sidebars and status bar, and you can
|
||||
shift-click the button to hide everything but the active writing pane.
|
||||
[svg][obsidianfo]
|
||||
|
||||
Once the plugin is installed and active, just click the Toggle Focus Mode
|
||||
button to hide the sidebars and status bar, and you can shift-click the button
|
||||
to hide everything but the active writing pane.
|
||||
|
||||
Typewriter Scroll
|
||||
|
||||
[28]This plugin keeps the currently selected line in the middle of the
|
||||
screen as you type. As you type, the focus moves from the current
|
||||
section to the next section by moving the rest of the page in the
|
||||
background, much like an old-fashioned typewriter.
|
||||
[26]This plugin keeps the currently selected line in the middle of the screen
|
||||
as you type. As you type, the focus moves from the current section to the next
|
||||
section by moving the rest of the page in the background, much like an
|
||||
old-fashioned typewriter.
|
||||
|
||||
There’s even a Zen Mode option that grays out the background text to
|
||||
help you focus on the line that you are currently writing.
|
||||
[svg][obsidianty]
|
||||
|
||||
There’s even a Zen Mode option that grays out the background text to help you
|
||||
focus on the line that you are currently writing.
|
||||
|
||||
Novel Word Count
|
||||
|
||||
If you are aiming to write a book (fiction or non-fiction), you
|
||||
probably have a total word count in mind. [29]Novel Word Count shows
|
||||
you the number of words that a document or folder contains in the
|
||||
sidebar so you can keep track of your long-form writing progress.
|
||||
If you are aiming to write a book (fiction or non-fiction), you probably have a
|
||||
total word count in mind. [27]Novel Word Count shows you the number of words
|
||||
that a document or folder contains in the sidebar so you can keep track of your
|
||||
long-form writing progress.
|
||||
|
||||
You can also use pages, characters, date created, and date updated (as
|
||||
well as a few different combinations) that can be configured in the
|
||||
plugin settings once you turn it on.
|
||||
[svg][obsidianno]
|
||||
|
||||
You can also use pages, characters, date created, and date updated (as well as
|
||||
a few different combinations) that can be configured in the plugin settings
|
||||
once you turn it on.
|
||||
|
||||
Conclusion
|
||||
|
||||
Obsidian is much more than just a notes app, and might be the perfect
|
||||
writing tool for you if you want to:
|
||||
Obsidian is much more than just a notes app, and might be the perfect writing
|
||||
tool for you if you want to:
|
||||
|
||||
1. Store your plain text files locally
|
||||
2. Use something that supports standard Markdown
|
||||
3. Gives you the flexibility to craft your writing environment
|
||||
|
||||
Obsidian may not be for everyone, but since it’s completely free to
|
||||
start, there’s no reason not to give it a spin.
|
||||
__________________________________________________________________
|
||||
Obsidian may not be for everyone, but since it’s completely free to start,
|
||||
there’s no reason not to give it a spin.
|
||||
|
||||
1. Since it’s an Obsidian Command, you could also add this as a button
|
||||
to the cMenu plugin mentioned above. [30]↩
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
Follow us
|
||||
1. Since it’s an Obsidian Command, you could also add this as a button to the
|
||||
cMenu plugin mentioned above. [28]↩
|
||||
|
||||
Follow us [29] [30]
|
||||
|
||||
[31]Get App Picks, Guides, & More
|
||||
|
||||
Get workflow tips, app recommendations, how-to guides, stories, and
|
||||
more delivered to your inbox. Plus we'll send you our productivity
|
||||
guide for free!
|
||||
Get workflow tips, app recommendations, how-to guides, stories, and more
|
||||
delivered to your inbox. Plus we'll send you our productivity guide for free!
|
||||
|
||||
____________________
|
||||
[39][ ]
|
||||
|
||||
Sweet!
|
||||
[40][Sweet!]
|
||||
|
||||
[32]Best-Selling Courses
|
||||
[41]Best-Selling Courses
|
||||
|
||||
[33]🎟 All Access Pass 🎟
|
||||
[42]🎟 All Access Pass 🎟
|
||||
|
||||
Join the Focus Accelerator to get instant access to the entire course
|
||||
library, resource vault, and more. [34]»
|
||||
Join the Focus Accelerator to get instant access to the entire course library,
|
||||
resource vault, and more. [43]»
|
||||
|
||||
[35]NEW: All the Things
|
||||
[44]NEW: All the Things
|
||||
|
||||
Best-selling productivity course. Stop being managed by your task list.
|
||||
[36]»
|
||||
Best-selling productivity course. Stop being managed by your task list. [45]»
|
||||
|
||||
[37]Full Course List
|
||||
[46]Full Course List
|
||||
|
||||
Serving 15,000 customers since 2013, we have a library full of in-depth
|
||||
courses to help you be more productive, creative, and focused. [38]View
|
||||
all courses »
|
||||
Serving 15,000 customers since 2013, we have a library full of in-depth courses
|
||||
to help you be more productive, creative, and focused. [47]View all courses »
|
||||
|
||||
[39]The Latest Posts
|
||||
[48]The Latest Posts
|
||||
|
||||
[40]Our First Look at Apple’s New Journal App
|
||||
[49]Our First Look at Apple’s New Journal App
|
||||
|
||||
Let’s take a look at Apple’s new Journal app for iPhone and how it
|
||||
stacks up to one of the perennial apps on the App Store. The app has a
|
||||
long way to go, but it has some very intriguing elements to start.
|
||||
[41]»
|
||||
Let’s take a look at Apple’s new Journal app for iPhone and how it stacks up to
|
||||
one of the perennial apps on the App Store. The app has a long way to go, but
|
||||
it has some very intriguing elements to start. [50]»
|
||||
|
||||
[42]Tracking Important Events with Up Ahead, Time Blocking Methods, and More
|
||||
[51]Tracking Important Events with Up Ahead, Time Blocking Methods, and More
|
||||
|
||||
Catch up on what we published this week, including a look at Up Ahead
|
||||
for tracking upcoming events you're looking forward to, a guide to
|
||||
effectively using time blocking for productivity, and more. [43]»
|
||||
Catch up on what we published this week, including a look at Up Ahead for
|
||||
tracking upcoming events you're looking forward to, a guide to effectively
|
||||
using time blocking for productivity, and more. [52]»
|
||||
|
||||
[44]Up Ahead Lets You Track the Important Things in Life
|
||||
[53]Up Ahead Lets You Track the Important Things in Life
|
||||
|
||||
How many days is it until your next trip? How about until your
|
||||
anniversary? Or maybe that movie you’ve been waiting to see comes out?
|
||||
You can of course put all of these events on a calendar and find them
|
||||
that way, but that doesn’t really make it easy to see how long it is
|
||||
until that thing happens. That's where Up Ahead comes in. [45]»
|
||||
How many days is it until your next trip? How about until your anniversary? Or
|
||||
maybe that movie you’ve been waiting to see comes out? You can of course put
|
||||
all of these events on a calendar and find them that way, but that doesn’t
|
||||
really make it easy to see how long it is until that thing happens. That's
|
||||
where Up Ahead comes in. [54]»
|
||||
|
||||
[46]The Power of Focus Themes
|
||||
[55]The Power of Focus Themes
|
||||
|
||||
One of the most important concepts to learn as you figure out your 2024
|
||||
plans comes from David Allen: "You can do anything you want, but you
|
||||
can’t do everything you want." [Free Workshop this Monday] [47]»
|
||||
One of the most important concepts to learn as you figure out your 2024 plans
|
||||
comes from David Allen: "You can do anything you want, but you can’t do
|
||||
everything you want." [Free Workshop this Monday] [56]»
|
||||
|
||||
[48]The CEO Who Had No Goals (Video)
|
||||
[57]The CEO Who Had No Goals (Video)
|
||||
|
||||
I recently heard a surprising admission from a very successful CEO.
|
||||
[49]»
|
||||
I recently heard a surprising admission from a very successful CEO. [58]»
|
||||
|
||||
* [50]Home
|
||||
* [51]About
|
||||
* [52]Products
|
||||
* [53]Contact
|
||||
* [54]Blog
|
||||
* [55]Newsletter
|
||||
* [56]Sign In
|
||||
• [59]Home
|
||||
• [60]About
|
||||
• [61]Products
|
||||
• [62]Contact
|
||||
• [63]Blog
|
||||
• [64]Newsletter
|
||||
• [65]Sign In
|
||||
|
||||
A website by [57]Shawn Blanc and friends. See also: [58]The Focus
|
||||
Course | [59]Tools & Toys
|
||||
A website by [66]Shawn Blanc and friends. See also: [67]The Focus Course |
|
||||
[68]Tools & Toys
|
||||
© 2024 Blanc Media, LLC
|
||||
[60]Design by Ink Blot Media Group • [61]Dev by Jonathan Christopher
|
||||
|
||||
[69]Design by Ink Blot Media Group • [70]Dev by Jonathan Christopher
|
||||
fbpx
|
||||
|
||||
References
|
||||
References:
|
||||
|
||||
Visible links:
|
||||
1. https://thesweetsetup.com/feed/
|
||||
2. https://thesweetsetup.com/wp-json/wp/v2/posts/132252
|
||||
3. https://thesweetsetup.com/wp-json/oembed/1.0/embed?url=https://thesweetsetup.com/turning-obsidian-into-my-perfect-writing-app/
|
||||
4. https://thesweetsetup.com/wp-json/oembed/1.0/embed?url=https://thesweetsetup.com/turning-obsidian-into-my-perfect-writing-app/&format=xml
|
||||
5. https://www.googletagmanager.com/ns.html?id=GTM-PS7L89F
|
||||
6. https://thesweetsetup.com/
|
||||
7. https://thesweetsetup.com/colophon/
|
||||
8. https://thesweetsetup.com/training/
|
||||
9. https://thesweetsetup.com/blog/
|
||||
10. https://thesweetsetup.com/my-account
|
||||
11. https://thesweetsetup.com/turning-obsidian-into-my-perfect-writing-app/
|
||||
12. https://thesweetsetup.com/category/mindfulness/
|
||||
13. https://thesweetsetup.com/category/workflows/
|
||||
14. https://thesweetsetup.com/category/sweet-setup-interview/
|
||||
15. https://thesweetsetup.com/category/quick-tip/
|
||||
16. https://thesweetsetup.com/author/mikeschmitz/
|
||||
17. https://obsidian.md/
|
||||
18. https://thesweetsetup.com/the-power-of-obsidians-local-graph/
|
||||
19. https://thesweetsetup.com/syncing-embedding-tasks-from-todoist-in-obsidian/
|
||||
20. https://thesweetsetup.com/timeblocking-in-obsidian/
|
||||
21. https://thesweetsetup.com/my-obsidian-based-kanban-writing-workflow/
|
||||
22. obsidian://show-plugin/?id=better-word-count
|
||||
23. obsidian://show-plugin/?id=cmenu-plugin
|
||||
24. obsidian://show-plugin/?id=obsidian-reading-time
|
||||
25. obsidian://show-plugin/?id=obsidian-footnotes
|
||||
26. https://thesweetsetup.com/turning-obsidian-into-my-perfect-writing-app/#fn-132252:1
|
||||
27. obsidian://show-plugin/?id=obsidian-focus-mode
|
||||
28. obsidian://show-plugin/?id=cm-typewriter-scroll-obsidian
|
||||
29. obsidian://show-plugin/?id=novel-word-count
|
||||
30. https://thesweetsetup.com/turning-obsidian-into-my-perfect-writing-app/#fnref-132252:1
|
||||
31. https://thesweetsetup.com/newsletter/
|
||||
32. https://thesweetsetup.com/training/
|
||||
33. https://thesweetsetup.com/accelerator/
|
||||
34. https://thesweetsetup.com/accelerator/
|
||||
35. https://thesweetsetup.com/things/
|
||||
36. https://thesweetsetup.com/things/
|
||||
37. https://thesweetsetup.com/training/?utm_source=training_sidebar_link&utm_medium=sidebar&utm_campaign=sidebar_att
|
||||
38. https://thesweetsetup.com/training/
|
||||
39. https://thesweetsetup.com/blog/
|
||||
40. https://thesweetsetup.com/our-first-look-at-apples-new-journal-app/
|
||||
41. https://thesweetsetup.com/our-first-look-at-apples-new-journal-app/
|
||||
42. https://thesweetsetup.com/tracking-important-events-up-ahead-timeblocking-more/
|
||||
43. https://thesweetsetup.com/tracking-important-events-up-ahead-timeblocking-more/
|
||||
44. https://thesweetsetup.com/up-ahead-lets-you-track-the-important-things-in-life/
|
||||
45. https://thesweetsetup.com/up-ahead-lets-you-track-the-important-things-in-life/
|
||||
46. https://thesweetsetup.com/the-power-of-focus-themes/
|
||||
47. https://thesweetsetup.com/the-power-of-focus-themes/
|
||||
48. https://thesweetsetup.com/the-ceo-who-dad-no-goals-video/
|
||||
49. https://thesweetsetup.com/the-ceo-who-dad-no-goals-video/
|
||||
50. https://thesweetsetup.com/
|
||||
51. https://thesweetsetup.com/colophon/
|
||||
52. https://thesweetsetup.com/training/
|
||||
53. https://thesweetsetup.com/contact/
|
||||
54. https://thesweetsetup.com/blog/
|
||||
55. https://thesweetsetup.com/newsletter/
|
||||
56. https://thesweetsetup.com/my-account
|
||||
57. https://shawnblanc.net/
|
||||
58. https://thefocuscourse.com/
|
||||
59. http://toolsandtoys.net/
|
||||
60. http://inkblotmediagroup.com/
|
||||
61. http://mondaybynoon.com/
|
||||
|
||||
Hidden links:
|
||||
63. https://thesweetsetup.com/turning-obsidian-into-my-perfect-writing-app/
|
||||
64. https://twitter.com/thesweetsetup
|
||||
65. https://thesweetsetup.com/feed
|
||||
[1] https://thesweetsetup.com/
|
||||
[2] https://thesweetsetup.com/colophon/
|
||||
[3] https://thesweetsetup.com/training/
|
||||
[4] https://thesweetsetup.com/blog/
|
||||
[5] https://thesweetsetup.com/my-account
|
||||
[6] https://thesweetsetup.com/turning-obsidian-into-my-perfect-writing-app/#
|
||||
[7] https://thesweetsetup.com/category/mindfulness/
|
||||
[8] https://thesweetsetup.com/category/workflows/
|
||||
[9] https://thesweetsetup.com/category/sweet-setup-interview/
|
||||
[10] https://thesweetsetup.com/category/quick-tip/
|
||||
[11] https://thesweetsetup.com/turning-obsidian-into-my-perfect-writing-app/#
|
||||
[14] https://thesweetsetup.com/author/mikeschmitz/
|
||||
[15] https://obsidian.md/
|
||||
[16] https://thesweetsetup.com/the-power-of-obsidians-local-graph/
|
||||
[17] https://thesweetsetup.com/syncing-embedding-tasks-from-todoist-in-obsidian/
|
||||
[18] https://thesweetsetup.com/timeblocking-in-obsidian/
|
||||
[19] https://thesweetsetup.com/my-obsidian-based-kanban-writing-workflow/
|
||||
[20] obsidian://show-plugin?id=better-word-count
|
||||
[21] obsidian://show-plugin?id=cmenu-plugin
|
||||
[22] obsidian://show-plugin?id=obsidian-reading-time
|
||||
[23] obsidian://show-plugin?id=obsidian-footnotes
|
||||
[24] https://thesweetsetup.com/turning-obsidian-into-my-perfect-writing-app/#fn-132252:1
|
||||
[25] obsidian://show-plugin?id=obsidian-focus-mode
|
||||
[26] obsidian://show-plugin?id=cm-typewriter-scroll-obsidian
|
||||
[27] obsidian://show-plugin?id=novel-word-count
|
||||
[28] https://thesweetsetup.com/turning-obsidian-into-my-perfect-writing-app/#fnref-132252:1
|
||||
[29] https://twitter.com/thesweetsetup
|
||||
[30] https://thesweetsetup.com/feed
|
||||
[31] https://thesweetsetup.com/newsletter/
|
||||
[41] https://thesweetsetup.com/training/
|
||||
[42] https://thesweetsetup.com/accelerator/
|
||||
[43] https://thesweetsetup.com/accelerator/
|
||||
[44] https://thesweetsetup.com/things/
|
||||
[45] https://thesweetsetup.com/things/
|
||||
[46] https://thesweetsetup.com/training/?utm_source=training_sidebar_link&utm_medium=sidebar&utm_campaign=sidebar_att
|
||||
[47] https://thesweetsetup.com/training/
|
||||
[48] https://thesweetsetup.com/blog/
|
||||
[49] https://thesweetsetup.com/our-first-look-at-apples-new-journal-app/
|
||||
[50] https://thesweetsetup.com/our-first-look-at-apples-new-journal-app/
|
||||
[51] https://thesweetsetup.com/tracking-important-events-up-ahead-timeblocking-more/
|
||||
[52] https://thesweetsetup.com/tracking-important-events-up-ahead-timeblocking-more/
|
||||
[53] https://thesweetsetup.com/up-ahead-lets-you-track-the-important-things-in-life/
|
||||
[54] https://thesweetsetup.com/up-ahead-lets-you-track-the-important-things-in-life/
|
||||
[55] https://thesweetsetup.com/the-power-of-focus-themes/
|
||||
[56] https://thesweetsetup.com/the-power-of-focus-themes/
|
||||
[57] https://thesweetsetup.com/the-ceo-who-dad-no-goals-video/
|
||||
[58] https://thesweetsetup.com/the-ceo-who-dad-no-goals-video/
|
||||
[59] https://thesweetsetup.com/
|
||||
[60] https://thesweetsetup.com/colophon/
|
||||
[61] https://thesweetsetup.com/training/
|
||||
[62] https://thesweetsetup.com/contact/
|
||||
[63] https://thesweetsetup.com/blog/
|
||||
[64] https://thesweetsetup.com/newsletter/
|
||||
[65] https://thesweetsetup.com/my-account
|
||||
[66] https://shawnblanc.net/
|
||||
[67] https://thefocuscourse.com/
|
||||
[68] http://toolsandtoys.net/
|
||||
[69] http://inkblotmediagroup.com/
|
||||
[70] http://mondaybynoon.com/
|
||||
|
||||
@@ -1,68 +1,64 @@
|
||||
#[1]RSS feed [2]JSON feed
|
||||
[1]Skip to content[2]
|
||||
|
||||
[3]Skip to content
|
||||
• [3]Blog
|
||||
• [4]About
|
||||
• [5]More
|
||||
|
||||
* [4]Blog
|
||||
* [5]About
|
||||
* [6]More
|
||||
1. [6]Index
|
||||
2. [7]Blog
|
||||
3. [8]My thoughts on Helix after 6 months
|
||||
|
||||
1. [7]Index
|
||||
2. [8]Blog
|
||||
3. [9]My thoughts on Helix after 6 months
|
||||
|
||||
[10](Photo)[11]tim@harek.no[12]PGP key
|
||||
[9][10](Photo)[11]tim@harek.no[12]PGP key
|
||||
|
||||
My thoughts on Helix after 6 months
|
||||
|
||||
Published June 19, 2023
|
||||
2 minutes read
|
||||
|
||||
Back in [13]January I decided to try out Helix as my primary editor and
|
||||
today I have almost been using it for 6 months and these are my
|
||||
thoughts.
|
||||
Back in [13]January I decided to try out Helix as my primary editor and today I
|
||||
have almost been using it for 6 months and these are my thoughts.
|
||||
|
||||
What I like
|
||||
|
||||
Keystrokes
|
||||
|
||||
Helix lives in the opposite land when it comes to keystrokes in
|
||||
comparison to Vim, and it was only difficult for the first couple of
|
||||
days. I've become fond of the way to navigate around.
|
||||
Helix lives in the opposite land when it comes to keystrokes in comparison to
|
||||
Vim, and it was only difficult for the first couple of days. I've become fond
|
||||
of the way to navigate around.
|
||||
|
||||
Minor modes
|
||||
|
||||
I really like that there are more modes, called [14]"Minor modes", and
|
||||
the reason why I like them are that whenever I initate a mode there is
|
||||
a subtle pop-up in the lower-right corner with the available actions
|
||||
with the activated mode. This is super helpful when you are first
|
||||
learning Helix and when you are doing something you don't do on a
|
||||
regular basis. It lowers the chance of having to switch context in
|
||||
order to do something. For instance, I know that m activates "Match
|
||||
mode", but sometimes I may forget how to select around specific
|
||||
selector like (), but with Helix I will have a little helper that tells
|
||||
me that the next key is a and then the next helper will help me select
|
||||
I really like that there are more modes, called [14]"Minor modes", and the
|
||||
reason why I like them are that whenever I initate a mode there is a subtle
|
||||
pop-up in the lower-right corner with the available actions with the activated
|
||||
mode. This is super helpful when you are first learning Helix and when you are
|
||||
doing something you don't do on a regular basis. It lowers the chance of having
|
||||
to switch context in order to do something. For instance, I know that m
|
||||
activates "Match mode", but sometimes I may forget how to select around
|
||||
specific selector like (), but with Helix I will have a little helper that
|
||||
tells me that the next key is a and then the next helper will help me select
|
||||
just ().
|
||||
|
||||
Moving around
|
||||
|
||||
I've become really fond of the idea that every move-action is also a
|
||||
selection/highlight, I find that I miss that feature whenever I edit
|
||||
server-configs via SSH or somewhere else when I'm not in Helix. It
|
||||
feels natural after a while because you get used to moving around
|
||||
text/code with w and e.
|
||||
I've become really fond of the idea that every move-action is also a selection/
|
||||
highlight, I find that I miss that feature whenever I edit server-configs via
|
||||
SSH or somewhere else when I'm not in Helix. It feels natural after a while
|
||||
because you get used to moving around text/code with w and e.
|
||||
|
||||
Configuration
|
||||
|
||||
No more Vimscript and Lua, just plaintext TOML! The documentation for
|
||||
how to configure the editor is great and most of the defaults are also
|
||||
great! My editor-config is just 23 lines in contrast to my
|
||||
Neovim-config which is 209 lines long.
|
||||
No more Vimscript and Lua, just plaintext TOML! The documentation for how to
|
||||
configure the editor is great and most of the defaults are also great! My
|
||||
editor-config is just 23 lines in contrast to my Neovim-config which is 209
|
||||
lines long.
|
||||
|
||||
Language server protocol (LSP) support
|
||||
|
||||
I had some experience with this from Neovim, but it felt cumbersome
|
||||
having to configure everything. With Helix I can simply run hx --health
|
||||
markdown and see what LSP is required for Markdown.
|
||||
I had some experience with this from Neovim, but it felt cumbersome having to
|
||||
configure everything. With Helix I can simply run hx --health markdown and see
|
||||
what LSP is required for Markdown.
|
||||
|
||||
$ hx --health markdown
|
||||
Configured language server: marksman
|
||||
Binary for language server: /opt/homebrew/bin/marksman
|
||||
@@ -71,77 +67,73 @@ Highlight queries: ✓
|
||||
Textobject queries: ✘
|
||||
Indent queries: ✘
|
||||
|
||||
I even managed to get it working with Deno thanks to its documentation
|
||||
on how to use custom LSPs for specific languages.
|
||||
I even managed to get it working with Deno thanks to its documentation on how
|
||||
to use custom LSPs for specific languages.
|
||||
|
||||
What I don't like
|
||||
|
||||
There really isn't anything in particualr that I don't like about
|
||||
Helix. I really miss having it installed on servers by default, but I
|
||||
completely understand that that is a big ask 😅 It's not too difficult
|
||||
to swap between Vim-bindings and Helix-bindings for short sessions.
|
||||
There really isn't anything in particualr that I don't like about Helix. I
|
||||
really miss having it installed on servers by default, but I completely
|
||||
understand that that is a big ask 😅 It's not too difficult to swap between
|
||||
Vim-bindings and Helix-bindings for short sessions.
|
||||
|
||||
Conclusion
|
||||
|
||||
Helix is fun and easy! I highly recommend Helix if you:
|
||||
* want to try a new editor,
|
||||
* tired of configuring {Neo}vim with Vimscript/Lua,
|
||||
* or been thinking about trying out Vim, but been hesitant because of
|
||||
the modes.
|
||||
|
||||
I will continue to use Helix for the forseeable future, I'm looking
|
||||
forward to what future updates will bring!
|
||||
• want to try a new editor,
|
||||
• tired of configuring {Neo}vim with Vimscript/Lua,
|
||||
• or been thinking about trying out Vim, but been hesitant because of the
|
||||
modes.
|
||||
|
||||
Remember to check out Helix's tutor, hx --tutor for quick introduction
|
||||
to its keystrokes and interactions.
|
||||
I will continue to use Helix for the forseeable future, I'm looking forward to
|
||||
what future updates will bring!
|
||||
|
||||
Remember to check out Helix's tutor, hx --tutor for quick introduction to its
|
||||
keystrokes and interactions.
|
||||
|
||||
Tagged with
|
||||
|
||||
* [15]#100-days-to-offload
|
||||
* [16]#helix
|
||||
* [17]#software
|
||||
* [18]#thoughts
|
||||
* [19]#tools
|
||||
• [15]#100-days-to-offload
|
||||
• [16]#helix
|
||||
• [17]#software
|
||||
• [18]#thoughts
|
||||
• [19]#tools
|
||||
|
||||
516 words
|
||||
|
||||
[20]Reply via email
|
||||
|
||||
Last deploy: 2024-01-10
|
||||
|
||||
* [21]Stats
|
||||
* [22]Privacy
|
||||
* [23]Connect
|
||||
* [24]Subscribe
|
||||
• [21]Stats
|
||||
• [22]Privacy
|
||||
• [23]Connect
|
||||
• [24]Subscribe
|
||||
|
||||
References
|
||||
|
||||
Visible links:
|
||||
1. https://timharek.no/feed.xml
|
||||
2. https://timharek.no/feed.json
|
||||
3. https://timharek.no/blog/my-thoughts-on-helix-after-6-months#main
|
||||
4. https://timharek.no/blog
|
||||
5. https://timharek.no/about
|
||||
6. https://timharek.no/more
|
||||
7. https://timharek.no/
|
||||
8. https://timharek.no/blog
|
||||
9. https://timharek.no/blog/my-thoughts-on-helix-after-6-months
|
||||
10. https://timharek.no/.well-known/avatar?size=250&quality=90
|
||||
11. mailto:tim@harek.no
|
||||
12. https://timharek.no/public-key.asc
|
||||
13. https://timharek.no/blog/trying-helix
|
||||
14. https://docs.helix-editor.com/keymap.html#normal-mode
|
||||
15. https://timharek.no/tags/100-days-to-offload
|
||||
16. https://timharek.no/tags/helix
|
||||
17. https://timharek.no/tags/software
|
||||
18. https://timharek.no/tags/thoughts
|
||||
19. https://timharek.no/tags/tools
|
||||
20. mailto:tim@harek.no?subject=RE: My thoughts on Helix after 6 months
|
||||
21. https://timharek.no/stats
|
||||
22. https://timharek.no/privacy
|
||||
23. https://timharek.no/connect
|
||||
24. https://timharek.no/subscribe
|
||||
References:
|
||||
|
||||
Hidden links:
|
||||
26. https://timharek.no/
|
||||
27. https://timharek.no/
|
||||
[1] https://timharek.no/blog/my-thoughts-on-helix-after-6-months#main
|
||||
[2] https://timharek.no/
|
||||
[3] https://timharek.no/blog
|
||||
[4] https://timharek.no/about
|
||||
[5] https://timharek.no/more
|
||||
[6] https://timharek.no/
|
||||
[7] https://timharek.no/blog
|
||||
[8] https://timharek.no/blog/my-thoughts-on-helix-after-6-months
|
||||
[9] https://timharek.no/
|
||||
[10] https://timharek.no/.well-known/avatar?size=250&quality=90
|
||||
[11] mailto:tim@harek.no
|
||||
[12] https://timharek.no/public-key.asc
|
||||
[13] https://timharek.no/blog/trying-helix
|
||||
[14] https://docs.helix-editor.com/keymap.html#normal-mode
|
||||
[15] https://timharek.no/tags/100-days-to-offload
|
||||
[16] https://timharek.no/tags/helix
|
||||
[17] https://timharek.no/tags/software
|
||||
[18] https://timharek.no/tags/thoughts
|
||||
[19] https://timharek.no/tags/tools
|
||||
[20] mailto:tim@harek.no?subject=RE:%20My%20thoughts%20on%20Helix%20after%206%20months
|
||||
[21] https://timharek.no/stats
|
||||
[22] https://timharek.no/privacy
|
||||
[23] https://timharek.no/connect
|
||||
[24] https://timharek.no/subscribe
|
||||
|
||||
@@ -1,107 +1,124 @@
|
||||
#[1]RSS Feed
|
||||
[1] Two Nerds | A lifestyle blog
|
||||
|
||||
[2]Two Nerds | A lifestyle blog
|
||||
• [2]Blog
|
||||
• [3]About
|
||||
|
||||
* [3]Blog
|
||||
* [4]About
|
||||
|
||||
[Blog______]
|
||||
[4][Blog ]
|
||||
IMG_0450.JPG
|
||||
|
||||
[5]Radda in Chianti to Siena
|
||||
|
||||
[6]May 15, 2017 [7]by Claire
|
||||
|
||||
As expected, our second day of riding was easier than the first -- but
|
||||
still hilly, and twice as difficult as any ride I'd done before this
|
||||
trip. It was well worth it to end the day in Siena, a town that's
|
||||
incredibly easy to fall in love with (once you forgive the ancient
|
||||
Etruscans for building their cities on freakin' mountains!).
|
||||
As expected, our second day of riding was easier than the first -- but still
|
||||
hilly, and twice as difficult as any ride I'd done before this trip. It was
|
||||
well worth it to end the day in Siena, a town that's incredibly easy to fall in
|
||||
love with (once you forgive the ancient Etruscans for building their cities on
|
||||
freakin' mountains!).
|
||||
|
||||
We started our day with an early breakfast on our terrace (bruschetta
|
||||
with tomatoes, olives and pieces of fried egg, prepared by our B&B
|
||||
proprietor Romanita), then set off for the open road. After about an
|
||||
hour of pedaling (55 minutes of steady uphill climbing, followed by 5
|
||||
minutes of an exhilarating 35mph downhill plunge) we rolled into Gaolie
|
||||
in Chianti, home of L'Eroica, a retro 200km bike ride held in Tuscany
|
||||
every October.
|
||||
We started our day with an early breakfast on our terrace (bruschetta with
|
||||
tomatoes, olives and pieces of fried egg, prepared by our B&B proprietor
|
||||
Romanita), then set off for the open road. After about an hour of pedaling (55
|
||||
minutes of steady uphill climbing, followed by 5 minutes of an exhilarating
|
||||
35mph downhill plunge) we rolled into Gaolie in Chianti, home of L'Eroica, a
|
||||
retro 200km bike ride held in Tuscany every October.
|
||||
|
||||
We made an unplanned stop at the [8]bike rental shop in town for a
|
||||
quick tune-up, tire pressure check, and to have Felipe (the mechanic)
|
||||
look at a few nagging rattling noises on the bikes -- undoubtedly a
|
||||
result of putting them together ourselves. 45 minutes and just 5 Euro
|
||||
later, we were back on the road!
|
||||
We made an unplanned stop at the [8]bike rental shop in town for a quick
|
||||
tune-up, tire pressure check, and to have Felipe (the mechanic) look at a few
|
||||
nagging rattling noises on the bikes -- undoubtedly a result of putting them
|
||||
together ourselves. 45 minutes and just 5 Euro later, we were back on the road!
|
||||
|
||||
We were treated to our second tough climb of the day out of Gaoile, and
|
||||
by the time we reached the turn for [9]Castello di Brolio at about
|
||||
12:45pm, we were in desperate need of fuel. We stopped at a small café
|
||||
for overpriced cheese sandwiches and unnamed beer. Totally worth it.
|
||||
Then, we pushed our bikes up a steep cliff (zero shame in that) and
|
||||
explored the grounds of the 12th century castle!
|
||||
|
||||
Our route map had us getting back on the main road to snake through a
|
||||
few more hill towns before our final ascent to Siena. We called an
|
||||
audible and followed the white gravel L'Eroica route (which seemed to
|
||||
be shorter, but about which we knew absolutely nothing) instead. We
|
||||
were not disappointed! The road circled around behind the castle, then
|
||||
through the beautiful countryside on roads that were virtually
|
||||
car-less.
|
||||
FullSizeRender.jpg
|
||||
FullSizeRender.jpg
|
||||
|
||||
Thanks to our shortcut, we arrived in Siena before 4pm and checked into
|
||||
the Hotel Bernini (which was absolutely perfect – basic, clean rooms,
|
||||
friendly staff, and a terrace with a killer view). We spent the rest of
|
||||
the afternoon exploring the city streets and enjoying drinks and snacks
|
||||
on Il Campo, the main city square that doubles as a race track one day
|
||||
a year with horses representing each of Siena's 17 contrade
|
||||
(districts).
|
||||
We were treated to our second tough climb of the day out of Gaoile, and by the
|
||||
time we reached the turn for [9]Castello di Brolio at about 12:45pm, we were in
|
||||
desperate need of fuel. We stopped at a small café for overpriced cheese
|
||||
sandwiches and unnamed beer. Totally worth it. Then, we pushed our bikes up a
|
||||
steep cliff (zero shame in that) and explored the grounds of the 12th century
|
||||
castle!
|
||||
|
||||
As the Palio di Siena draws closer, the districts are known to march
|
||||
into the square. (I equate this to a horse race pep rally, sans
|
||||
horses.) We happened to catch the Oca (goose) district marching on
|
||||
Sunday afternoon. It was crazy awesome!
|
||||
IMG_0459.JPG
|
||||
IMG_0461.JPG
|
||||
IMG_0457.JPG
|
||||
IMG_0460.JPG
|
||||
|
||||
We had a few too many snacks during aperitivo (the Italian equivalent
|
||||
of Happy Hour), so weren't hungry for dinner until late – or, put
|
||||
another way, we're finally on the Italian dinner schedule. After
|
||||
scouring menus for the osterias around town, we googled 'best pizza in
|
||||
Siena', and ended up at il Pomodorino around 10pm. It was the best
|
||||
pizza either of us had ever had, and made for a fantastic end to a
|
||||
great day.
|
||||
Our route map had us getting back on the main road to snake through a few more
|
||||
hill towns before our final ascent to Siena. We called an audible and followed
|
||||
the white gravel L'Eroica route (which seemed to be shorter, but about which we
|
||||
knew absolutely nothing) instead. We were not disappointed! The road circled
|
||||
around behind the castle, then through the beautiful countryside on roads that
|
||||
were virtually car-less.
|
||||
|
||||
We had two route options for Monday, Day 3: a Level 2/4 Difficulty and
|
||||
a Level 3/4 Difficulty. After Saturday's killer ride (a 2/4), we felt
|
||||
much more comfortable taking on the former – although it would take
|
||||
about half the time as our original planned route. We decided to
|
||||
sleep-in Monday morning (until 9am), go out for coffee in Siena, then
|
||||
sit in Il Campo and map out our bike route for the day. It was so nice
|
||||
to take our time and enjoy the town (our favorite so far) before all
|
||||
the tour groups showed up!
|
||||
IMG_0456.JPG
|
||||
IMG_0361.JPG
|
||||
IMG_0349.JPG
|
||||
|
||||
Thanks to our shortcut, we arrived in Siena before 4pm and checked into the
|
||||
Hotel Bernini (which was absolutely perfect – basic, clean rooms, friendly
|
||||
staff, and a terrace with a killer view). We spent the rest of the afternoon
|
||||
exploring the city streets and enjoying drinks and snacks on Il Campo, the main
|
||||
city square that doubles as a race track one day a year with horses
|
||||
representing each of Siena's 17 contrade (districts).
|
||||
|
||||
IMG_0411.JPG
|
||||
IMG_0451.JPG
|
||||
IMG_0415.JPG
|
||||
|
||||
As the Palio di Siena draws closer, the districts are known to march into the
|
||||
square. (I equate this to a horse race pep rally, sans horses.) We happened to
|
||||
catch the Oca (goose) district marching on Sunday afternoon. It was crazy
|
||||
awesome!
|
||||
|
||||
IMG_0454.JPG
|
||||
IMG_0453.JPG
|
||||
|
||||
We had a few too many snacks during aperitivo (the Italian equivalent of Happy
|
||||
Hour), so weren't hungry for dinner until late – or, put another way, we're
|
||||
finally on the Italian dinner schedule. After scouring menus for the osterias
|
||||
around town, we googled 'best pizza in Siena', and ended up at il Pomodorino
|
||||
around 10pm. It was the best pizza either of us had ever had, and made for a
|
||||
fantastic end to a great day.
|
||||
|
||||
IMG_0422.JPG
|
||||
|
||||
We had two route options for Monday, Day 3: a Level 2/4 Difficulty and a Level
|
||||
3/4 Difficulty. After Saturday's killer ride (a 2/4), we felt much more
|
||||
comfortable taking on the former – although it would take about half the time
|
||||
as our original planned route. We decided to sleep-in Monday morning (until
|
||||
9am), go out for coffee in Siena, then sit in Il Campo and map out our bike
|
||||
route for the day. It was so nice to take our time and enjoy the town (our
|
||||
favorite so far) before all the tour groups showed up!
|
||||
|
||||
IMG_0429.JPG
|
||||
|
||||
Stay tuned for Monday's ride to San Gimignano!
|
||||
|
||||
Bike Route: 29.4 miles // 2,711 ft of elevation
|
||||
gain. [10]https://www.strava.com/activities/986032513
|
||||
Bike Route: 29.4 miles // 2,711 ft of elevation gain. [10]https://
|
||||
www.strava.com/activities/986032513
|
||||
|
||||
[11]May 15, 2017 /[12]Claire
|
||||
|
||||
* [13]Newer
|
||||
* [14]Older
|
||||
• [13]Newer
|
||||
• [14]Older
|
||||
|
||||
2017 © Two Nerds Dot Net. All Rights Reserved. No content from this
|
||||
site may be used without written permission.
|
||||
2017 © Two Nerds Dot Net. All Rights Reserved. No content from this site may be
|
||||
used without written permission.
|
||||
|
||||
References
|
||||
|
||||
1. https://twonerds.net/blog?format=rss
|
||||
2. https://twonerds.net/
|
||||
3. https://twonerds.net/
|
||||
4. https://twonerds.net/about
|
||||
5. https://twonerds.net/blog/radda-in-chianti-to-siena
|
||||
6. https://twonerds.net/blog/radda-in-chianti-to-siena
|
||||
7. https://twonerds.net/?author=590f29c99f745610d38765af
|
||||
8. http://www.tuscanybicycle.com/en/
|
||||
9. http://www.baronericasoli.com/
|
||||
10. https://www.strava.com/activities/986032513
|
||||
11. https://twonerds.net/blog/radda-in-chianti-to-siena
|
||||
12. https://twonerds.net/?author=590f29c99f745610d38765af
|
||||
13. https://twonerds.net/blog/siena-to-san-gimignano
|
||||
14. https://twonerds.net/blog/firenze-to-radda-in-chianti-our-first-day-in-the-saddle
|
||||
References:
|
||||
|
||||
[1] https://twonerds.net/
|
||||
[2] https://twonerds.net/
|
||||
[3] https://twonerds.net/about
|
||||
[5] https://twonerds.net/blog/radda-in-chianti-to-siena
|
||||
[6] https://twonerds.net/blog/radda-in-chianti-to-siena
|
||||
[7] https://twonerds.net/?author=590f29c99f745610d38765af
|
||||
[8] http://www.tuscanybicycle.com/en/
|
||||
[9] http://www.baronericasoli.com/
|
||||
[10] https://www.strava.com/activities/986032513
|
||||
[11] https://twonerds.net/blog/radda-in-chianti-to-siena
|
||||
[12] https://twonerds.net/?author=590f29c99f745610d38765af
|
||||
[13] https://twonerds.net/blog/siena-to-san-gimignano
|
||||
[14] https://twonerds.net/blog/firenze-to-radda-in-chianti-our-first-day-in-the-saddle
|
||||
|
||||
@@ -1,359 +1,349 @@
|
||||
[1]
|
||||
A logo showing a blue circle
|
||||
Vlad-Stefan Harbuz
|
||||
Menu
|
||||
* [1]About
|
||||
* [2]Music
|
||||
* [3]Photos
|
||||
* [4]Books
|
||||
* [5]RSS
|
||||
|
||||
• [2]About
|
||||
• [3]Music
|
||||
• [4]Photos
|
||||
• [5]Books
|
||||
• [6]RSS
|
||||
|
||||
Philosophy
|
||||
* [6]Resources: Philosophy of Work
|
||||
* [7]Alternatives to Wage Labour
|
||||
* [8]The Epistemic Implications of AI Assistants
|
||||
* [9]Our Schools Should Teach Communication
|
||||
* [10]Voting Regardless of Citizenship
|
||||
* [11]Effective Apologies
|
||||
|
||||
• [7]Resources: Philosophy of Work
|
||||
• [8]Alternatives to Wage Labour
|
||||
• [9]The Epistemic Implications of AI Assistants
|
||||
• [10]Our Schools Should Teach Communication
|
||||
• [11]Voting Regardless of Citizenship
|
||||
• [12]Effective Apologies
|
||||
|
||||
Programming
|
||||
* [12]The Caring Programmer's Manifesto
|
||||
* [13]The Hare Programming Language
|
||||
* [14]Hare Regex Implementation
|
||||
* [15]Peony Game Engine
|
||||
* [16]Skeletal Animation
|
||||
* [17]clumsy computer
|
||||
* [18]Submodule GB01
|
||||
* [19]vegvisir
|
||||
* [20]pstr
|
||||
* [21]Dithering
|
||||
|
||||
• [13]The Caring Programmer's Manifesto
|
||||
• [14]The Hare Programming Language
|
||||
• [15]Hare Regex Implementation
|
||||
• [16]Peony Game Engine
|
||||
• [17]Skeletal Animation
|
||||
• [18]clumsy computer
|
||||
• [19]Submodule GB01
|
||||
• [20]vegvisir
|
||||
• [21]pstr
|
||||
• [22]Dithering
|
||||
|
||||
Languages
|
||||
* [22]Japanese Recommendations
|
||||
* [23]German Noun Genders
|
||||
|
||||
• [23]Japanese Recommendations
|
||||
• [24]German Noun Genders
|
||||
|
||||
Fun
|
||||
* [24]Most Minimal UK Address
|
||||
|
||||
* [25]About
|
||||
* [26]Music
|
||||
* [27]Photos
|
||||
* [28]Books
|
||||
* [29]RSS
|
||||
• [25]Most Minimal UK Address
|
||||
|
||||
• [26]About
|
||||
• [27]Music
|
||||
• [28]Photos
|
||||
• [29]Books
|
||||
• [30]RSS
|
||||
|
||||
Philosophy
|
||||
* [30]Resources: Philosophy of Work
|
||||
* [31]Alternatives to Wage Labour
|
||||
* [32]The Epistemic Implications of AI Assistants
|
||||
* [33]Our Schools Should Teach Communication
|
||||
* [34]Voting Regardless of Citizenship
|
||||
* [35]Effective Apologies
|
||||
|
||||
• [31]Resources: Philosophy of Work
|
||||
• [32]Alternatives to Wage Labour
|
||||
• [33]The Epistemic Implications of AI Assistants
|
||||
• [34]Our Schools Should Teach Communication
|
||||
• [35]Voting Regardless of Citizenship
|
||||
• [36]Effective Apologies
|
||||
|
||||
Programming
|
||||
* [36]The Caring Programmer's Manifesto
|
||||
* [37]The Hare Programming Language
|
||||
* [38]Hare Regex Implementation
|
||||
* [39]Peony Game Engine
|
||||
* [40]Skeletal Animation
|
||||
* [41]clumsy computer
|
||||
* [42]Submodule GB01
|
||||
* [43]vegvisir
|
||||
* [44]pstr
|
||||
* [45]Dithering
|
||||
|
||||
• [37]The Caring Programmer's Manifesto
|
||||
• [38]The Hare Programming Language
|
||||
• [39]Hare Regex Implementation
|
||||
• [40]Peony Game Engine
|
||||
• [41]Skeletal Animation
|
||||
• [42]clumsy computer
|
||||
• [43]Submodule GB01
|
||||
• [44]vegvisir
|
||||
• [45]pstr
|
||||
• [46]Dithering
|
||||
|
||||
Languages
|
||||
* [46]Japanese Recommendations
|
||||
* [47]German Noun Genders
|
||||
|
||||
• [47]Japanese Recommendations
|
||||
• [48]German Noun Genders
|
||||
|
||||
Fun
|
||||
* [48]Most Minimal UK Address
|
||||
|
||||
• [49]Most Minimal UK Address
|
||||
|
||||
Resources on the Philosophy of Work
|
||||
|
||||
04 August 2022
|
||||
|
||||
Wage labour is when you get paid a salary by a company to do work,
|
||||
thereby renting out your time. It’s not a good system because it forces
|
||||
employees to be exploited by manager-owners. This exploitation can be
|
||||
financial, for example if you get paid less than you produce, but it
|
||||
can also be something more than that. One often ends up in a situation
|
||||
where one finds one’s work meaningless, because one cannot connect to,
|
||||
own and direct one’s work in a hierarchical managerial workplace.
|
||||
Additionally, because wage labour is by far the most widespread method
|
||||
of organising work, one might feel powerless to attempt to connect to
|
||||
their work without having someone else own and direct it.
|
||||
Wage labour is when you get paid a salary by a company to do work, thereby
|
||||
renting out your time. It’s not a good system because it forces employees to be
|
||||
exploited by manager-owners. This exploitation can be financial, for example if
|
||||
you get paid less than you produce, but it can also be something more than
|
||||
that. One often ends up in a situation where one finds one’s work meaningless,
|
||||
because one cannot connect to, own and direct one’s work in a hierarchical
|
||||
managerial workplace. Additionally, because wage labour is by far the most
|
||||
widespread method of organising work, one might feel powerless to attempt to
|
||||
connect to their work without having someone else own and direct it.
|
||||
|
||||
Worse, even when one works 8 hours per day, the remaining hours are
|
||||
often dedicated to recovering from work and restoring one’s energy so
|
||||
that one may be productive on the next workday. All of these things
|
||||
come together to form something called “alienation” — our work is
|
||||
important to us, and we should have a positive connection to it, but we
|
||||
end up having a deficient and corrupted connection to it, which is an
|
||||
injustice.
|
||||
Worse, even when one works 8 hours per day, the remaining hours are often
|
||||
dedicated to recovering from work and restoring one’s energy so that one may be
|
||||
productive on the next workday. All of these things come together to form
|
||||
something called “alienation” — our work is important to us, and we should have
|
||||
a positive connection to it, but we end up having a deficient and corrupted
|
||||
connection to it, which is an injustice.
|
||||
|
||||
Some might say that this is unavoidable, but this is not true. In fact,
|
||||
the very idea of this system being unavoidable is a result of a bad way
|
||||
of looking at things called “reification”, which means taking something
|
||||
that us humans have made up, such as our economic system, and saying
|
||||
that it is actually real and inevitably has power over us. This is not
|
||||
the case because it is us who structured society in this way, and we
|
||||
could have done it any other way.
|
||||
Some might say that this is unavoidable, but this is not true. In fact, the
|
||||
very idea of this system being unavoidable is a result of a bad way of looking
|
||||
at things called “reification”, which means taking something that us humans
|
||||
have made up, such as our economic system, and saying that it is actually real
|
||||
and inevitably has power over us. This is not the case because it is us who
|
||||
structured society in this way, and we could have done it any other way.
|
||||
|
||||
Indeed, we know that it is possible to be creative without being
|
||||
oppressed. Most people can contrast alienated wage labour (what some
|
||||
simply sweepingly call “work”) with playful creation, where someone is
|
||||
compelled by passion and interest to put a lot of effort into creating
|
||||
something. In fact, we know that, ironically, we are usually more
|
||||
productive in this passionate state, than when we are managed and
|
||||
disciplined into doing something we do not care about.
|
||||
Indeed, we know that it is possible to be creative without being oppressed.
|
||||
Most people can contrast alienated wage labour (what some simply sweepingly
|
||||
call “work”) with playful creation, where someone is compelled by passion and
|
||||
interest to put a lot of effort into creating something. In fact, we know that,
|
||||
ironically, we are usually more productive in this passionate state, than when
|
||||
we are managed and disciplined into doing something we do not care about.
|
||||
|
||||
One might object that this view is naïve because it is not possible to
|
||||
simply do what we’re passionate about — there are many jobs that must
|
||||
be done and that are simply not fun. But the fact of the matter is that
|
||||
a very large amount of today’s jobs are entirely pointless and
|
||||
unneccesary. Instead, they only exist to provide a reason to perpetuate
|
||||
the status quo of wage labour.
|
||||
One might object that this view is naïve because it is not possible to simply
|
||||
do what we’re passionate about — there are many jobs that must be done and that
|
||||
are simply not fun. But the fact of the matter is that a very large amount of
|
||||
today’s jobs are entirely pointless and unneccesary. Instead, they only exist
|
||||
to provide a reason to perpetuate the status quo of wage labour.
|
||||
|
||||
Imagine someone doing a job we knew to be completely useless, and
|
||||
receiving a salary for it every month. How would we respond to the
|
||||
proposal of paying this person their salary, but allowing them to
|
||||
simply stop doing their work? Many would react negatively and say that
|
||||
this person would be getting paid for nothing. But is it not concerning
|
||||
that we would want someone to waste their life away doing something
|
||||
which is never useful to anyone, just so that we can feel that they
|
||||
have thereby somehow earned their right to exist?
|
||||
Imagine someone doing a job we knew to be completely useless, and receiving a
|
||||
salary for it every month. How would we respond to the proposal of paying this
|
||||
person their salary, but allowing them to simply stop doing their work? Many
|
||||
would react negatively and say that this person would be getting paid for
|
||||
nothing. But is it not concerning that we would want someone to waste their
|
||||
life away doing something which is never useful to anyone, just so that we can
|
||||
feel that they have thereby somehow earned their right to exist?
|
||||
|
||||
Gradual change is possible, and a big part of this change is cultural.
|
||||
This means first realising all the harmful things that gross inequality
|
||||
of income and power does, then changing our values to say that everyone
|
||||
deserves to direct their own life and earn a fair living. This does not
|
||||
necessarily mean that everyone actually will be able to do these
|
||||
things, but the first step is recognising the current state of affairs
|
||||
as unjustifiable.
|
||||
Gradual change is possible, and a big part of this change is cultural. This
|
||||
means first realising all the harmful things that gross inequality of income
|
||||
and power does, then changing our values to say that everyone deserves to
|
||||
direct their own life and earn a fair living. This does not necessarily mean
|
||||
that everyone actually will be able to do these things, but the first step is
|
||||
recognising the current state of affairs as unjustifiable.
|
||||
|
||||
Here are some beginner-friendly books and articles on this topic that I
|
||||
have loved, and are both eloquent and fun to read. I have also included
|
||||
some quotes that I feel explain these concepts well.
|
||||
Here are some beginner-friendly books and articles on this topic that I have
|
||||
loved, and are both eloquent and fun to read. I have also included some quotes
|
||||
that I feel explain these concepts well.
|
||||
|
||||
Introductory Essays and Books
|
||||
|
||||
[49]“In Praise of Idleness” Bertrand Russell [50]“Bullshit Jobs” David
|
||||
Graeber [51]“The Tyranny of Merit” Michael J. Sandel [52]“The Abolition
|
||||
of Work” Bob Black
|
||||
[50] “In Praise of Idleness” Bertrand Russell [51] “Bullshit Jobs” David
|
||||
Graeber [52] “The Tyranny of Merit” Michael J. Sandel [53] “The Abolition of
|
||||
Work” Bob Black
|
||||
|
||||
The absolute best place to start is “In Praise of Idleness”, a short
|
||||
and very accessible essay by Russell that explains some of the most
|
||||
basic problems with our conception of work. “Bullshit Jobs” is a
|
||||
classic in which Graeber describes how many of the jobs we are
|
||||
currently doing are simply not useful to anyone. In “The Tyranny of
|
||||
Merit”, which I have found life-changing, Sandel describes how our
|
||||
conceptions of “merit” do not align with reality, and that our
|
||||
blindness to this affects our lives significantly. Lastly, “The
|
||||
Abolition of Work” is a classic and emotionally powerful essay by Bob
|
||||
Black in which he very clearly describes many of the problems with
|
||||
“work”, but this essay can also be too polemical and antagonising.
|
||||
The absolute best place to start is “In Praise of Idleness”, a short and very
|
||||
accessible essay by Russell that explains some of the most basic problems with
|
||||
our conception of work. “Bullshit Jobs” is a classic in which Graeber describes
|
||||
how many of the jobs we are currently doing are simply not useful to anyone. In
|
||||
“The Tyranny of Merit”, which I have found life-changing, Sandel describes how
|
||||
our conceptions of “merit” do not align with reality, and that our blindness to
|
||||
this affects our lives significantly. Lastly, “The Abolition of Work” is a
|
||||
classic and emotionally powerful essay by Bob Black in which he very clearly
|
||||
describes many of the problems with “work”, but this essay can also be too
|
||||
polemical and antagonising.
|
||||
|
||||
More In-Depth Books
|
||||
|
||||
[53]“Another Now” Yanis Varoufakis [54]“Talking to my Daughter About
|
||||
the Economy” Yanis Varoufakis
|
||||
[54] “Another Now” Yanis Varoufakis [55] “Talking to my Daughter About the
|
||||
Economy” Yanis Varoufakis
|
||||
|
||||
People often ask me what a system that abolishes wage labour and
|
||||
capitalism would look like. In “Another Now”, former Greek finance
|
||||
minister Yanis Varoufakis tells a fictional story that describes what
|
||||
such a parallel world would look like, and he goes into significant
|
||||
economic detail. Similarly, “Talking to my Daughter About the Economy”
|
||||
is an easy to read and light-hearted description of today’s economy.
|
||||
People often ask me what a system that abolishes wage labour and capitalism
|
||||
would look like. In “Another Now”, former Greek finance minister Yanis
|
||||
Varoufakis tells a fictional story that describes what such a parallel world
|
||||
would look like, and he goes into significant economic detail. Similarly,
|
||||
“Talking to my Daughter About the Economy” is an easy to read and light-hearted
|
||||
description of today’s economy.
|
||||
|
||||
Philosophical Background
|
||||
|
||||
[55]“Alienation” Rahel Jaeggi [56]“Free Time” Theodor W. Adorno
|
||||
[56] “Alienation” Rahel Jaeggi [57] “Free Time” Theodor W. Adorno
|
||||
|
||||
Perhaps you have read the more accessible material above, but would
|
||||
like to get more into the philosophical details. In “Alienation”, Rahel
|
||||
Jaeggi describes the history of the concept of alienation, and
|
||||
describes a modern and analytic way to look at it, which I find very
|
||||
useful. Her description really makes one wonder about the aspects of
|
||||
alienation that transcend the financial, such as its impact on our
|
||||
epistemic agency. Adorno’s “Free Time” is an amazingly insightful look
|
||||
at how work has profound effects on us not only during our time at the
|
||||
workplace, but also during our so-called “free time”, which the
|
||||
employer nonetheless deeply affects and controls.
|
||||
Perhaps you have read the more accessible material above, but would like to get
|
||||
more into the philosophical details. In “Alienation”, Rahel Jaeggi describes
|
||||
the history of the concept of alienation, and describes a modern and analytic
|
||||
way to look at it, which I find very useful. Her description really makes one
|
||||
wonder about the aspects of alienation that transcend the financial, such as
|
||||
its impact on our epistemic agency. Adorno’s “Free Time” is an amazingly
|
||||
insightful look at how work has profound effects on us not only during our time
|
||||
at the workplace, but also during our so-called “free time”, which the employer
|
||||
nonetheless deeply affects and controls.
|
||||
|
||||
You can also read my somewhat amateurish essay, [57]“Alternatives to
|
||||
Wage Labour”.
|
||||
You can also read my somewhat amateurish essay, [58]“Alternatives to Wage
|
||||
Labour”.
|
||||
|
||||
Explanatory quotes
|
||||
|
||||
Here are some quotes that I feel explain the ideas I have referenced
|
||||
above quite well. I do not necessarily directly endorse all of these
|
||||
perspectives, but rather find it useful to illustrate how philosophers
|
||||
describe these issues.
|
||||
Here are some quotes that I feel explain the ideas I have referenced above
|
||||
quite well. I do not necessarily directly endorse all of these perspectives,
|
||||
but rather find it useful to illustrate how philosophers describe these issues.
|
||||
|
||||
We should do away with the absolutely specious notion that everybody
|
||||
has to earn a living. It is a fact today that one in ten thousand of
|
||||
us can make a technological breakthrough capable of supporting all
|
||||
the rest. The youth of today are absolutely right in recognizing
|
||||
this nonsense of earning a living. We keep inventing jobs because of
|
||||
this false idea that everybody has to be employed at some kind of
|
||||
drudgery because, according to Malthusian Darwinian theory he must
|
||||
justify his right to exist. So we have inspectors of inspectors and
|
||||
people making instruments for inspectors to inspect inspectors. The
|
||||
true business of people should be to go back to school and think
|
||||
about whatever it was they were thinking about before somebody came
|
||||
along and told them they had to earn a living.
|
||||
We should do away with the absolutely specious notion that everybody has to
|
||||
earn a living. It is a fact today that one in ten thousand of us can make a
|
||||
technological breakthrough capable of supporting all the rest. The youth of
|
||||
today are absolutely right in recognizing this nonsense of earning a
|
||||
living. We keep inventing jobs because of this false idea that everybody
|
||||
has to be employed at some kind of drudgery because, according to
|
||||
Malthusian Darwinian theory he must justify his right to exist. So we have
|
||||
inspectors of inspectors and people making instruments for inspectors to
|
||||
inspect inspectors. The true business of people should be to go back to
|
||||
school and think about whatever it was they were thinking about before
|
||||
somebody came along and told them they had to earn a living.
|
||||
|
||||
— Buckminster Fuller
|
||||
|
||||
The ‘positive’ sense of the word ‘liberty’ derives from the wish on
|
||||
the part of the individual to be his own master. I wish my life and
|
||||
decisions to depend on myself, not on external forces of whatever
|
||||
kind. I wish to be the instrument of my own, not of other men’s,
|
||||
acts of will. I wish to be a subject, not an object; to be moved by
|
||||
reasons, by conscious purposes, which are my own, not by causes
|
||||
which affect me, as it were, from outside. I wish to be somebody,
|
||||
not nobody; a doer—deciding, not being decided for, self-directed
|
||||
and not acted upon by external nature or by other men as if I were a
|
||||
thing, or an animal, or a slave incapable of playing a human role,
|
||||
that is, of conceiving goals and policies of my own and realizing
|
||||
them. (…) I wish, above all, to be conscious of myself as a
|
||||
thinking, willing, active being, bearing responsibility for my
|
||||
choices and able to explain them by references to my own ideas and
|
||||
purposes. I feel free to the degree that I believe this to be true,
|
||||
and enslaved to the degree that I am made to realize that it is not.
|
||||
The ‘positive’ sense of the word ‘liberty’ derives from the wish on the
|
||||
part of the individual to be his own master. I wish my life and decisions
|
||||
to depend on myself, not on external forces of whatever kind. I wish to be
|
||||
the instrument of my own, not of other men’s, acts of will. I wish to be a
|
||||
subject, not an object; to be moved by reasons, by conscious purposes,
|
||||
which are my own, not by causes which affect me, as it were, from outside.
|
||||
I wish to be somebody, not nobody; a doer—deciding, not being decided for,
|
||||
self-directed and not acted upon by external nature or by other men as if I
|
||||
were a thing, or an animal, or a slave incapable of playing a human role,
|
||||
that is, of conceiving goals and policies of my own and realizing them. (…)
|
||||
I wish, above all, to be conscious of myself as a thinking, willing, active
|
||||
being, bearing responsibility for my choices and able to explain them by
|
||||
references to my own ideas and purposes. I feel free to the degree that I
|
||||
believe this to be true, and enslaved to the degree that I am made to
|
||||
realize that it is not.
|
||||
|
||||
— Isaiah Berlin
|
||||
|
||||
The fact that the vast majority of the population accepts, and is
|
||||
made to accept, this society does not render it less irrational and
|
||||
less reprehensible.
|
||||
The fact that the vast majority of the population accepts, and is made to
|
||||
accept, this society does not render it less irrational and less
|
||||
reprehensible.
|
||||
|
||||
— Herbert Marcuse, “One-Dimensional Man”, p. xliv
|
||||
|
||||
The things of everyday life [must be] lifted out of the realm of the
|
||||
self-evident. (…) That which is “natural” must assume the features
|
||||
of the extraordinary. Only in this manner can the laws of cause and
|
||||
effect reveal themselves.
|
||||
self-evident. (…) That which is “natural” must assume the features of the
|
||||
extraordinary. Only in this manner can the laws of cause and effect reveal
|
||||
themselves.
|
||||
|
||||
— Bertolt Brecht, “Schriften zum Theater” (Berlin and Frankfurt,
|
||||
Suhrkamp, 1957), p. 7, 9.
|
||||
— Bertolt Brecht, “Schriften zum Theater” (Berlin and Frankfurt, Suhrkamp,
|
||||
1957), p. 7, 9.
|
||||
|
||||
The Story of the Mathematician
|
||||
|
||||
This is a very short story used as an example by Rahel Jaeggi in
|
||||
“Alienation” which I find a stunningly good illustration of the
|
||||
problems I refer to.
|
||||
This is a very short story used as an example by Rahel Jaeggi in “Alienation”
|
||||
which I find a stunningly good illustration of the problems I refer to.
|
||||
|
||||
A young academic takes up his first position. At the same time he
|
||||
and his girlfriend decide to marry. That makes sense “because of the
|
||||
taxes.” A short time later his wife becomes pregnant. Since large
|
||||
apartments in the city are expensive and hard to find, they decide
|
||||
to move to a suburb. After all, life outside the city will be
|
||||
“better for the child.” The man, a gifted mathematician, who until
|
||||
then has led a slightly chaotic life, oscillating between too much
|
||||
night life and an obsessive immersion in work, is now confronted
|
||||
with a completely new situation. All of a sudden, and without him
|
||||
having really noticed it, his life is now, as it were, “on track.”
|
||||
One thing seems to follow ineluctably from another. And in a
|
||||
creeping, almost unnoticeable process his life acquires all the
|
||||
attributes of a completely normal suburban existence. Would he, who
|
||||
earlier ate fast food most of the time and relied on convenience
|
||||
stores for picking up milk and toilet paper as the need arose, ever
|
||||
have thought that he would one day drive every Saturday morning to
|
||||
the shopping mall to buy supplies for the week and fill the freezer?
|
||||
Could he ever have imagined that he would hurry home from work on
|
||||
Friday because the lawn needed to be mowed before the barbecue? At
|
||||
first he and his wife hardly notice that their conversations are
|
||||
increasingly limited to their child and the organization of
|
||||
household chores. Sometimes, however, he is overcome by a feeling of
|
||||
unreality. Something is wrong here. While many envy him for the
|
||||
beautiful suburban house he lives in, he is not really at home in
|
||||
this situation. The life he leads, which, as it seems to him, has so
|
||||
suddenly tightened around him—one could almost say “rearranged”
|
||||
him—seems, in a strange way, not to be his own life. Everything is
|
||||
as if it could not be any other way; everything happens with a
|
||||
certain inevitability. And in spite of this—or perhaps precisely
|
||||
because of it—it remains in a crucial respect alien to him. To what
|
||||
extent is this life “not really” his own? To what extent is he, in
|
||||
A young academic takes up his first position. At the same time he and his
|
||||
girlfriend decide to marry. That makes sense “because of the taxes.” A
|
||||
short time later his wife becomes pregnant. Since large apartments in the
|
||||
city are expensive and hard to find, they decide to move to a suburb. After
|
||||
all, life outside the city will be “better for the child.” The man, a
|
||||
gifted mathematician, who until then has led a slightly chaotic life,
|
||||
oscillating between too much night life and an obsessive immersion in work,
|
||||
is now confronted with a completely new situation. All of a sudden, and
|
||||
without him having really noticed it, his life is now, as it were, “on
|
||||
track.” One thing seems to follow ineluctably from another. And in a
|
||||
creeping, almost unnoticeable process his life acquires all the attributes
|
||||
of a completely normal suburban existence. Would he, who earlier ate fast
|
||||
food most of the time and relied on convenience stores for picking up milk
|
||||
and toilet paper as the need arose, ever have thought that he would one day
|
||||
drive every Saturday morning to the shopping mall to buy supplies for the
|
||||
week and fill the freezer? Could he ever have imagined that he would hurry
|
||||
home from work on Friday because the lawn needed to be mowed before the
|
||||
barbecue? At first he and his wife hardly notice that their conversations
|
||||
are increasingly limited to their child and the organization of household
|
||||
chores. Sometimes, however, he is overcome by a feeling of unreality.
|
||||
Something is wrong here. While many envy him for the beautiful suburban
|
||||
house he lives in, he is not really at home in this situation. The life he
|
||||
leads, which, as it seems to him, has so suddenly tightened around him—one
|
||||
could almost say “rearranged” him—seems, in a strange way, not to be his
|
||||
own life. Everything is as if it could not be any other way; everything
|
||||
happens with a certain inevitability. And in spite of this—or perhaps
|
||||
precisely because of it—it remains in a crucial respect alien to him. To
|
||||
what extent is this life “not really” his own? To what extent is he, in
|
||||
this life that he leads, alienated from himself?
|
||||
|
||||
Each individual aspect of his life (…) has not really been decided
|
||||
on. Thus, his situation is in fact “out of control” in a certain
|
||||
sense, and (…) it is a situation for which no one can genuinely be
|
||||
held responsible. This does not merely mean that he has not acted,
|
||||
or has not availed himself of his possibilities for acting, but that
|
||||
he has not even understood his situation as one in which action is
|
||||
called for or possible; it does not merely mean that he has not
|
||||
decided something for himself, or has not led his life himself, but
|
||||
that he has been incapable of understanding or regarding it as
|
||||
something he can or must lead.
|
||||
Each individual aspect of his life (…) has not really been decided on.
|
||||
Thus, his situation is in fact “out of control” in a certain sense, and (…)
|
||||
it is a situation for which no one can genuinely be held responsible. This
|
||||
does not merely mean that he has not acted, or has not availed himself of
|
||||
his possibilities for acting, but that he has not even understood his
|
||||
situation as one in which action is called for or possible; it does not
|
||||
merely mean that he has not decided something for himself, or has not led
|
||||
his life himself, but that he has been incapable of understanding or
|
||||
regarding it as something he can or must lead.
|
||||
|
||||
— Rahel Jaeggi, “Alienation”
|
||||
|
||||
[58]XXIIVV webring © 2010 Vlad-Stefan Harbuz. Article text and media is
|
||||
[59]CC-BY-SA 4.0 unless otherwise specified. All other rights reserved.
|
||||
[59] XXIIVV webring © 2010 Vlad-Stefan Harbuz. Article text and media is [60]
|
||||
CC-BY-SA 4.0 unless otherwise specified. All other rights reserved.
|
||||
|
||||
References
|
||||
References:
|
||||
|
||||
Visible links:
|
||||
1. https://vladh.net/about
|
||||
2. https://vladh.net/music
|
||||
3. https://vladh.net/photos
|
||||
4. https://vladh.net/books
|
||||
5. https://vladh.net/index.xml
|
||||
6. https://vladh.net/wage-labour-resources
|
||||
7. https://vladh.net/alternatives-to-wage-labour
|
||||
8. https://vladh.net/the-epistemic-implications-of-ai-assistants
|
||||
9. https://vladh.net/our-schools-should-teach-communication
|
||||
10. https://vladh.net/voting-regardless-of-citizenship
|
||||
11. https://vladh.net/apologies
|
||||
12. https://vladh.net/manifesto
|
||||
13. https://vladh.net/hare
|
||||
14. https://vladh.net/implementing-regular-expressions-in-hare
|
||||
15. https://vladh.net/peony
|
||||
16. https://vladh.net/game-engine-skeletal-animation
|
||||
17. https://vladh.net/clumsycomputer
|
||||
18. https://vladh.net/submodule
|
||||
19. https://vladh.net/vegvisir
|
||||
20. https://vladh.net/pstr
|
||||
21. https://vladh.net/dithering
|
||||
22. https://vladh.net/japanese-recommendations
|
||||
23. https://vladh.net/german-nouns
|
||||
24. https://vladh.net/most-minimal-uk-address
|
||||
25. https://vladh.net/about
|
||||
26. https://vladh.net/music
|
||||
27. https://vladh.net/photos
|
||||
28. https://vladh.net/books
|
||||
29. https://vladh.net/index.xml
|
||||
30. https://vladh.net/wage-labour-resources
|
||||
31. https://vladh.net/alternatives-to-wage-labour
|
||||
32. https://vladh.net/the-epistemic-implications-of-ai-assistants
|
||||
33. https://vladh.net/our-schools-should-teach-communication
|
||||
34. https://vladh.net/voting-regardless-of-citizenship
|
||||
35. https://vladh.net/apologies
|
||||
36. https://vladh.net/manifesto
|
||||
37. https://vladh.net/hare
|
||||
38. https://vladh.net/implementing-regular-expressions-in-hare
|
||||
39. https://vladh.net/peony
|
||||
40. https://vladh.net/game-engine-skeletal-animation
|
||||
41. https://vladh.net/clumsycomputer
|
||||
42. https://vladh.net/submodule
|
||||
43. https://vladh.net/vegvisir
|
||||
44. https://vladh.net/pstr
|
||||
45. https://vladh.net/dithering
|
||||
46. https://vladh.net/japanese-recommendations
|
||||
47. https://vladh.net/german-nouns
|
||||
48. https://vladh.net/most-minimal-uk-address
|
||||
49. https://harpers.org/archive/1932/10/in-praise-of-idleness/
|
||||
50. https://www.goodreads.com/book/show/36531574-bullshit-jobs
|
||||
51. https://www.goodreads.com/book/show/50364458-the-tyranny-of-merit
|
||||
52. https://theanarchistlibrary.org/library/bob-black-the-abolition-of-work
|
||||
53. https://www.goodreads.com/book/show/49098225-another-now
|
||||
54. https://www.goodreads.com/book/show/36490332-talking-to-my-daughter-about-the-economy
|
||||
55. https://www.goodreads.com/en/book/show/19144936
|
||||
56. http://xenopraxis.net/readings/adorno_freetime.pdf
|
||||
57. https://vladh.net/alternatives-to-wage-labour
|
||||
58. https://webring.xxiivv.com/#vladh
|
||||
59. https://creativecommons.org/licenses/by-sa/4.0/
|
||||
|
||||
Hidden links:
|
||||
61. https://vladh.net/
|
||||
[1] https://vladh.net/
|
||||
[2] https://vladh.net/about
|
||||
[3] https://vladh.net/music
|
||||
[4] https://vladh.net/photos
|
||||
[5] https://vladh.net/books
|
||||
[6] https://vladh.net/index.xml
|
||||
[7] https://vladh.net/wage-labour-resources
|
||||
[8] https://vladh.net/alternatives-to-wage-labour
|
||||
[9] https://vladh.net/the-epistemic-implications-of-ai-assistants
|
||||
[10] https://vladh.net/our-schools-should-teach-communication
|
||||
[11] https://vladh.net/voting-regardless-of-citizenship
|
||||
[12] https://vladh.net/apologies
|
||||
[13] https://vladh.net/manifesto
|
||||
[14] https://vladh.net/hare
|
||||
[15] https://vladh.net/implementing-regular-expressions-in-hare
|
||||
[16] https://vladh.net/peony
|
||||
[17] https://vladh.net/game-engine-skeletal-animation
|
||||
[18] https://vladh.net/clumsycomputer
|
||||
[19] https://vladh.net/submodule
|
||||
[20] https://vladh.net/vegvisir
|
||||
[21] https://vladh.net/pstr
|
||||
[22] https://vladh.net/dithering
|
||||
[23] https://vladh.net/japanese-recommendations
|
||||
[24] https://vladh.net/german-nouns
|
||||
[25] https://vladh.net/most-minimal-uk-address
|
||||
[26] https://vladh.net/about
|
||||
[27] https://vladh.net/music
|
||||
[28] https://vladh.net/photos
|
||||
[29] https://vladh.net/books
|
||||
[30] https://vladh.net/index.xml
|
||||
[31] https://vladh.net/wage-labour-resources
|
||||
[32] https://vladh.net/alternatives-to-wage-labour
|
||||
[33] https://vladh.net/the-epistemic-implications-of-ai-assistants
|
||||
[34] https://vladh.net/our-schools-should-teach-communication
|
||||
[35] https://vladh.net/voting-regardless-of-citizenship
|
||||
[36] https://vladh.net/apologies
|
||||
[37] https://vladh.net/manifesto
|
||||
[38] https://vladh.net/hare
|
||||
[39] https://vladh.net/implementing-regular-expressions-in-hare
|
||||
[40] https://vladh.net/peony
|
||||
[41] https://vladh.net/game-engine-skeletal-animation
|
||||
[42] https://vladh.net/clumsycomputer
|
||||
[43] https://vladh.net/submodule
|
||||
[44] https://vladh.net/vegvisir
|
||||
[45] https://vladh.net/pstr
|
||||
[46] https://vladh.net/dithering
|
||||
[47] https://vladh.net/japanese-recommendations
|
||||
[48] https://vladh.net/german-nouns
|
||||
[49] https://vladh.net/most-minimal-uk-address
|
||||
[50] https://harpers.org/archive/1932/10/in-praise-of-idleness/
|
||||
[51] https://www.goodreads.com/book/show/36531574-bullshit-jobs
|
||||
[52] https://www.goodreads.com/book/show/50364458-the-tyranny-of-merit
|
||||
[53] https://theanarchistlibrary.org/library/bob-black-the-abolition-of-work
|
||||
[54] https://www.goodreads.com/book/show/49098225-another-now
|
||||
[55] https://www.goodreads.com/book/show/36490332-talking-to-my-daughter-about-the-economy
|
||||
[56] https://www.goodreads.com/en/book/show/19144936
|
||||
[57] http://xenopraxis.net/readings/adorno_freetime.pdf
|
||||
[58] https://vladh.net/alternatives-to-wage-labour
|
||||
[59] https://webring.xxiivv.com/#vladh
|
||||
[60] https://creativecommons.org/licenses/by-sa/4.0/
|
||||
|
||||
@@ -1,44 +1,48 @@
|
||||
#[1]alternate
|
||||
[1]
|
||||
|
||||
* [2]Now
|
||||
* [3]Giving
|
||||
* [4]Offsets
|
||||
* [5]About Me
|
||||
• [2]Now
|
||||
• [3]Giving
|
||||
• [4]Offsets
|
||||
• [5]About Me
|
||||
|
||||
Some Favorite Reads From 2022
|
||||
|
||||
January 15, 2023
|
||||
|
||||
Another year, and another [6]blog post (singular). Oh well. I always
|
||||
have aspirations to publish more! But you know, one of the joys of
|
||||
being semi-retired is not having to do anything. You know, it’s been a
|
||||
hard few years. So I tried to take it easy on myself in 2022. I spent a
|
||||
lot of time exploring, a lot of time reflecting, and a good bit of time
|
||||
just doing whatever felt right at the time.
|
||||
Another year, and another [6]blog post (singular). Oh well. I always have
|
||||
aspirations to publish more! But you know, one of the joys of being
|
||||
semi-retired is not having to do anything. You know, it’s been a hard few
|
||||
years. So I tried to take it easy on myself in 2022. I spent a lot of time
|
||||
exploring, a lot of time reflecting, and a good bit of time just doing whatever
|
||||
felt right at the time.
|
||||
|
||||
For example, going on a road trip with my mountain bike
|
||||
|
||||
Recently I’ve been reflecting on some of my favorite things from last
|
||||
year. Maybe as a way to focus on the positive. Maybe as a way to keep
|
||||
track of time in our time sick world. Maybe just to get back into the
|
||||
habit of writing. So here’s some of my favorite reads of 2022.
|
||||
__________________________________________________________________
|
||||
Recently I’ve been reflecting on some of my favorite things from last year.
|
||||
Maybe as a way to focus on the positive. Maybe as a way to keep track of time
|
||||
in our time sick world. Maybe just to get back into the habit of writing. So
|
||||
here’s some of my favorite reads of 2022.
|
||||
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
Books
|
||||
|
||||
I really enjoy reading, but this year I kind of gave myself a pass on
|
||||
anything too serious — mostly sticking to my trusty home base
|
||||
of science fiction.
|
||||
* [7][this-is-how-you-lose-the-time-war.jpg]
|
||||
I really enjoy reading, but this year I kind of gave myself a pass on anything
|
||||
too serious — mostly sticking to my trusty home base of science fiction.
|
||||
|
||||
• [7] [this-is-ho]
|
||||
|
||||
This is How You Lose The Time War
|
||||
* [8][rendevous-with-rama.jpg]
|
||||
|
||||
• [8] [rendevous-]
|
||||
|
||||
Rendevous with Rama
|
||||
* [9][elder-race.jpg]
|
||||
|
||||
• [9] [elder-race]
|
||||
|
||||
Elder Race
|
||||
* [10][artifact-space.jpg]
|
||||
|
||||
• [10] [artifact-s]
|
||||
|
||||
Artifact Space
|
||||
|
||||
@@ -46,90 +50,84 @@ Amal El-Mohtar and Max Gladstone’s [11]This is How You Lose the Time War
|
||||
|
||||
From the publisher:
|
||||
|
||||
Among the ashes of a dying world, an agent of the Commandment finds
|
||||
a letter. It reads: Burn before reading.
|
||||
Among the ashes of a dying world, an agent of the Commandment finds a
|
||||
letter. It reads: Burn before reading.
|
||||
|
||||
Thus begins an unlikely correspondence between two rival agents
|
||||
hellbent on securing the best possible future for their warring
|
||||
factions. Now, what began as a taunt, a battlefield boast, becomes
|
||||
something more. Something epic. Something romantic. Something that
|
||||
could change the past and the future.
|
||||
Thus begins an unlikely correspondence between two rival agents hellbent on
|
||||
securing the best possible future for their warring factions. Now, what
|
||||
began as a taunt, a battlefield boast, becomes something more. Something
|
||||
epic. Something romantic. Something that could change the past and the
|
||||
future.
|
||||
|
||||
I fucking loved this book. I started it based on a recommendation from
|
||||
a friend, and didn’t really look into it much before I started. This
|
||||
book is much less about the plot (which is a play off The End of
|
||||
Eternity) and more about the writing and world building. The best way I
|
||||
could describe it is a spy story told through love letters in a poetic
|
||||
universe.
|
||||
I fucking loved this book. I started it based on a recommendation from a
|
||||
friend, and didn’t really look into it much before I started. This book is much
|
||||
less about the plot (which is a play off The End of Eternity) and more about
|
||||
the writing and world building. The best way I could describe it is a spy story
|
||||
told through love letters in a poetic universe.
|
||||
|
||||
Think of birds as a comms channel I can open and close seasonally;
|
||||
fellow operatives relate their work to me at the equinoxes; Garden
|
||||
blooms more brightly in my belly. There’s enough traffic that it’s a
|
||||
simple matter to disguise incoming and outgoing correspondence,
|
||||
misdirect, hide in plain sight.
|
||||
Think of birds as a comms channel I can open and close seasonally; fellow
|
||||
operatives relate their work to me at the equinoxes; Garden blooms more
|
||||
brightly in my belly. There’s enough traffic that it’s a simple matter to
|
||||
disguise incoming and outgoing correspondence, misdirect, hide in plain
|
||||
sight.
|
||||
|
||||
It’s also a short read, which was a nice breath of fresh air after
|
||||
finishing off the Dune series prior to picking this one up. I have a
|
||||
feeling this is going to be one of my most recommended books going
|
||||
forward.
|
||||
It’s also a short read, which was a nice breath of fresh air after finishing
|
||||
off the Dune series prior to picking this one up. I have a feeling this is
|
||||
going to be one of my most recommended books going forward.
|
||||
|
||||
Arthur C. Clarke’s [12]Rendevous with Rama
|
||||
|
||||
From the publisher:
|
||||
|
||||
An enormous cylindrical object has entered Earth’s solar system on a
|
||||
collision course with the sun. A team of astronauts are sent to
|
||||
explore the mysterious craft, which the denizens of the solar system
|
||||
name Rama. What they find is astonishing evidence of a civilization
|
||||
far more advanced than ours. They find an interior stretching over
|
||||
fifty kilometers; a forbidding cylindrical sea; mysterious and
|
||||
inaccessible buildings; and strange machine-animal hybrids, or
|
||||
“biots,” that inhabit the ship. But what they don’t find is an alien
|
||||
presence. So who–and where–are the Ramans?
|
||||
collision course with the sun. A team of astronauts are sent to explore the
|
||||
mysterious craft, which the denizens of the solar system name Rama. What
|
||||
they find is astonishing evidence of a civilization far more advanced than
|
||||
ours. They find an interior stretching over fifty kilometers; a forbidding
|
||||
cylindrical sea; mysterious and inaccessible buildings; and strange
|
||||
machine-animal hybrids, or “biots,” that inhabit the ship. But what they
|
||||
don’t find is an alien presence. So who–and where–are the Ramans?
|
||||
|
||||
I’d never read the Rama books before, so when I heard that Denis
|
||||
Villeneuve was going to be [13]tackling Rendevous with Rama, I took the
|
||||
opportunity to read the whole series (Rendevous with Rama, Rama II, The
|
||||
Garden of Rama, and Rama Revealed).
|
||||
I’d never read the Rama books before, so when I heard that Denis Villeneuve was
|
||||
going to be [13]tackling Rendevous with Rama, I took the opportunity to read
|
||||
the whole series (Rendevous with Rama, Rama II, The Garden of Rama, and Rama
|
||||
Revealed).
|
||||
|
||||
Rendevous with Rama is a fantastically Clarke book. A team of highly
|
||||
trained professionals all work together to explore a mysterious object
|
||||
in space. Does much more need to be said? This book went down like a
|
||||
peanut butter and jelly sandwich. My only criticism is that it left me
|
||||
wanting for was more.
|
||||
Rendevous with Rama is a fantastically Clarke book. A team of highly trained
|
||||
professionals all work together to explore a mysterious object in space. Does
|
||||
much more need to be said? This book went down like a peanut butter and jelly
|
||||
sandwich. My only criticism is that it left me wanting for was more.
|
||||
|
||||
Rama is a cosmic egg, being warmed by the fires of the Sun. It may
|
||||
hatch at any moment.
|
||||
Rama is a cosmic egg, being warmed by the fires of the Sun. It may hatch at
|
||||
any moment.
|
||||
|
||||
And unfortunately, there is more.
|
||||
|
||||
Clarke teamed up with Gentry Lee to write three more novels — Rama II,
|
||||
The Garden of Rama, and Rama Revealed and I all I can say is: I do not
|
||||
recommend them. They are upsetting in very odd child-bride wedding
|
||||
night kinds of ways.
|
||||
Clarke teamed up with Gentry Lee to write three more novels — Rama II, The
|
||||
Garden of Rama, and Rama Revealed and I all I can say is: I do not recommend
|
||||
them. They are upsetting in very odd child-bride wedding night kinds of ways.
|
||||
|
||||
Adrian Tchaikovsky’s [14]Elder Race
|
||||
|
||||
From the publisher:
|
||||
|
||||
A junior anthropologist on a distant planet must help the locals he
|
||||
has sworn to study to save a planet from an unbeatable foe.
|
||||
A junior anthropologist on a distant planet must help the locals he has
|
||||
sworn to study to save a planet from an unbeatable foe.
|
||||
|
||||
I loved Tchaikovsky’s Children of Time, so when I heard Jason Snell
|
||||
offer up Elder Race on The Incomperable, I decided to give it a go. I
|
||||
absolutely love the premise of this book. It’s a singular story told
|
||||
from two different viewpoints, one of them science fiction, and the
|
||||
other fantasy — both happening in parallel — because the two main
|
||||
characters don’t share enough dialect to explain themselves to each
|
||||
other.
|
||||
I loved Tchaikovsky’s Children of Time, so when I heard Jason Snell offer up
|
||||
Elder Race on The Incomperable, I decided to give it a go. I absolutely love
|
||||
the premise of this book. It’s a singular story told from two different
|
||||
viewpoints, one of them science fiction, and the other fantasy — both happening
|
||||
in parallel — because the two main characters don’t share enough dialect to
|
||||
explain themselves to each other.
|
||||
|
||||
They think I’m a wizard. They think I’m a fucking wizard. That’s
|
||||
what I am to them, some weird goblin man from another time with
|
||||
magic powers. And I literally do not have the language to tell them
|
||||
otherwise. I say, “scientist,” “scholar,” but when I speak to them,
|
||||
in their language, these are both cognates for “wizard.” I imagine
|
||||
myself standing there speaking to Lyn and saying, “I’m not a wizard;
|
||||
I’m a wizard, or at best a wizard.” It’s not funny.
|
||||
They think I’m a wizard. They think I’m a fucking wizard. That’s what I am
|
||||
to them, some weird goblin man from another time with magic powers. And I
|
||||
literally do not have the language to tell them otherwise. I say,
|
||||
“scientist,” “scholar,” but when I speak to them, in their language, these
|
||||
are both cognates for “wizard.” I imagine myself standing there speaking to
|
||||
Lyn and saying, “I’m not a wizard; I’m a wizard, or at best a wizard.” It’s
|
||||
not funny.
|
||||
|
||||
And who doesn’t love an old, cranky wizard anthropologist?
|
||||
|
||||
@@ -140,76 +138,75 @@ Miles Cameron’s [15]Artifact Space
|
||||
Out in the darkness of space, something is targeting the Greatships.
|
||||
|
||||
With their vast cargo holds and a crew that could fill a city, the
|
||||
Greatships are the lifeblood of human occupied space, transporting
|
||||
an unimaginable volume - and value - of goods from City, the
|
||||
greatest human orbital, all the way to Tradepoint at the other, to
|
||||
trade for xenoglas with an unknowable alien species.
|
||||
Greatships are the lifeblood of human occupied space, transporting an
|
||||
unimaginable volume - and value - of goods from City, the greatest human
|
||||
orbital, all the way to Tradepoint at the other, to trade for xenoglas with
|
||||
an unknowable alien species.
|
||||
|
||||
This was another recommendation from a friend, and I’m glad I picked it
|
||||
up. At it’s core, it’s about highly competent people all working
|
||||
together, pushing their limits, and achieving success. It’s the kind of
|
||||
genre someone once described to me as competency porn — Star Trek: The
|
||||
Next Generation being the ultimate example.
|
||||
This was another recommendation from a friend, and I’m glad I picked it up. At
|
||||
it’s core, it’s about highly competent people all working together, pushing
|
||||
their limits, and achieving success. It’s the kind of genre someone once
|
||||
described to me as competency porn — Star Trek: The Next Generation being the
|
||||
ultimate example.
|
||||
|
||||
There was very little drama in Space Operations. In fact, every
|
||||
station projected an elaborate aura of calm, as if they were
|
||||
competing to be dry and emotionless. No one swore, no one spat, no
|
||||
one was angry or afraid. Nbaro loved it.
|
||||
There was very little drama in Space Operations. In fact, every station
|
||||
projected an elaborate aura of calm, as if they were competing to be dry
|
||||
and emotionless. No one swore, no one spat, no one was angry or afraid.
|
||||
Nbaro loved it.
|
||||
|
||||
This book pulls from a lot of familiar ideas — the Greatships are an
|
||||
obvious call back to Battlestars, while a lot of the socialist themes
|
||||
call back to Star Trek’s economy. My biggest criticism of this book is
|
||||
the maddening way Cameron switches back and forth between using
|
||||
character’s first and last names — even within the same scene! It makes
|
||||
it incredibly difficult to keep track of who is who with such a large
|
||||
cast, and toward the end I caught myself not even remembering who a
|
||||
certain person was.
|
||||
This book pulls from a lot of familiar ideas — the Greatships are an obvious
|
||||
call back to Battlestars, while a lot of the socialist themes call back to Star
|
||||
Trek’s economy. My biggest criticism of this book is the maddening way Cameron
|
||||
switches back and forth between using character’s first and last names — even
|
||||
within the same scene! It makes it incredibly difficult to keep track of who is
|
||||
who with such a large cast, and toward the end I caught myself not even
|
||||
remembering who a certain person was.
|
||||
|
||||
Dennis E. Taylor’s [16]Heaven’s River (Audiobook)
|
||||
|
||||
From the publisher:
|
||||
|
||||
More than a hundred years ago, Bender set out for the stars and was
|
||||
never heard from again. There has been no trace of him despite
|
||||
numerous searches by his clone-mates. Now Bob is determined to
|
||||
organize an expedition to learn Bender’s fate—whatever the cost.
|
||||
More than a hundred years ago, Bender set out for the stars and was never
|
||||
heard from again. There has been no trace of him despite numerous searches
|
||||
by his clone-mates. Now Bob is determined to organize an expedition to
|
||||
learn Bender’s fate—whatever the cost.
|
||||
|
||||
The Bobiverse is probably my favorite audiobook series of all time.
|
||||
It’s all a part of a grand space opera spanning the galaxy… but also
|
||||
pretty sarcastic and silly? Ray Porter does an amazing job of narrating
|
||||
these books, and is a large part of why I enjoy them so much.
|
||||
The Bobiverse is probably my favorite audiobook series of all time. It’s all a
|
||||
part of a grand space opera spanning the galaxy… but also pretty sarcastic and
|
||||
silly? Ray Porter does an amazing job of narrating these books, and is a large
|
||||
part of why I enjoy them so much.
|
||||
|
||||
Heaven’s River finds a way to pull the series back from the infinite
|
||||
and focuses back down on a single planet for a great little beaver
|
||||
adventure.
|
||||
Heaven’s River finds a way to pull the series back from the infinite and
|
||||
focuses back down on a single planet for a great little beaver adventure.
|
||||
|
||||
Well, space beavers.
|
||||
__________________________________________________________________
|
||||
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
Even More Books
|
||||
|
||||
Neal Stephenson’s [17]Termination Shock: Okay, I actually like
|
||||
Stephenson, and this is a very good book about the inevitable future of
|
||||
Geoengineering and it’s political consequences. Coupled with a very
|
||||
weird Queen fetish. It’s weird. Weird enough to take away from the
|
||||
story line. But if the climate angle of the book interests you — I
|
||||
highly recommend [18]After Geoengineering as a follow-up.
|
||||
Neal Stephenson’s [17]Termination Shock: Okay, I actually like Stephenson, and
|
||||
this is a very good book about the inevitable future of Geoengineering and it’s
|
||||
political consequences. Coupled with a very weird Queen fetish. It’s weird.
|
||||
Weird enough to take away from the story line. But if the climate angle of the
|
||||
book interests you — I highly recommend [18]After Geoengineering as a
|
||||
follow-up.
|
||||
|
||||
Baoshu’s [19]The Redemption of Time: A semi-official 4th book of the
|
||||
Three Body Problem. This is a great continuation of the series, and a
|
||||
good way to answer some lingering questions about the Trisolarians.
|
||||
Baoshu’s [19]The Redemption of Time: A semi-official 4th book of the Three Body
|
||||
Problem. This is a great continuation of the series, and a good way to answer
|
||||
some lingering questions about the Trisolarians.
|
||||
|
||||
Frank Herbert’s [20]Heretics of Dune (Dune 5): I was a little shocked
|
||||
at how much I loved this book. I mean, I love Dune. But this one ended
|
||||
up being one of my favorites of the series. Great new characters, new
|
||||
technologies, and a whole new set of powers for the Atreides genetics.
|
||||
Frank Herbert’s [20]Heretics of Dune (Dune 5): I was a little shocked at how
|
||||
much I loved this book. I mean, I love Dune. But this one ended up being one of
|
||||
my favorites of the series. Great new characters, new technologies, and a whole
|
||||
new set of powers for the Atreides genetics.
|
||||
|
||||
Adrian Tchaikovsky’s [21]Children of Time: This was actually a re-read
|
||||
in preparation of reading Children of Ruin and the upcoming Children of
|
||||
Memory. What can I say? It’s one of my favorite science fiction books
|
||||
of all time — even if only for the worldbuilding. Sentient spiders?
|
||||
Sentient spiders!
|
||||
__________________________________________________________________
|
||||
Adrian Tchaikovsky’s [21]Children of Time: This was actually a re-read in
|
||||
preparation of reading Children of Ruin and the upcoming Children of Memory.
|
||||
What can I say? It’s one of my favorite science fiction books of all time —
|
||||
even if only for the worldbuilding. Sentient spiders? Sentient spiders!
|
||||
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
Newsletters
|
||||
|
||||
@@ -217,117 +214,110 @@ Alex Steffen’s [22]The Snap Forward
|
||||
|
||||
From [23]Discontinuity is the Job:
|
||||
|
||||
To be alive right now is to find ourselves flattened against the
|
||||
fact that the entire human world—our cities and infrastructure, our
|
||||
economy and education system, our farms and factories, our laws and
|
||||
politics—was built for a different planet.
|
||||
To be alive right now is to find ourselves flattened against the fact that
|
||||
the entire human world—our cities and infrastructure, our economy and
|
||||
education system, our farms and factories, our laws and politics—was built
|
||||
for a different planet.
|
||||
|
||||
I can’t remember exactly how I stumbled on Alex Steffen’s The Snap
|
||||
Forward but the idea instantly clicked with me. His newsletter focuses
|
||||
on how climate has affected our infrastructure, our society, and our
|
||||
relationship to the world. I love his newsletter because it makes me
|
||||
feel more sane in a world that keeps trying to sell a new carbon offset
|
||||
marketplace as the solution.
|
||||
I can’t remember exactly how I stumbled on Alex Steffen’s The Snap Forward but
|
||||
the idea instantly clicked with me. His newsletter focuses on how climate has
|
||||
affected our infrastructure, our society, and our relationship to the world. I
|
||||
love his newsletter because it makes me feel more sane in a world that keeps
|
||||
trying to sell a new carbon offset marketplace as the solution.
|
||||
|
||||
From [24]Tempo, Timing, and the Translucence of the Future
|
||||
|
||||
The tempo of change, and our refusal to acknowledge its
|
||||
acceleration, has turned our visions of continuity, stability and
|
||||
value into fantasy worlds. We’re cosplaying people who live in past
|
||||
decades before discontinuity ate our societies.
|
||||
The tempo of change, and our refusal to acknowledge its acceleration, has
|
||||
turned our visions of continuity, stability and value into fantasy worlds.
|
||||
We’re cosplaying people who live in past decades before discontinuity ate
|
||||
our societies.
|
||||
|
||||
I wouldn’t classify The Snap Forward as doomerism, either. It’s a focus
|
||||
on accepting the world as it is and looking for solutions within that
|
||||
framework. Even if all emissions were cut to zero tomorrow, we’d still
|
||||
be facing a myriad of very challenging futures. What do we do with that
|
||||
knowledge? How do we prepare for the transapocalyptic now?
|
||||
I wouldn’t classify The Snap Forward as doomerism, either. It’s a focus on
|
||||
accepting the world as it is and looking for solutions within that framework.
|
||||
Even if all emissions were cut to zero tomorrow, we’d still be facing a myriad
|
||||
of very challenging futures. What do we do with that knowledge? How do we
|
||||
prepare for the transapocalyptic now?
|
||||
|
||||
Matt Levine’s [25]Money Stuff
|
||||
|
||||
I’ve been reading Money Stuff for a few years now, and I can’t really
|
||||
put my thumb on why I love it so much. Sure, it’s about finance… but
|
||||
kind of the weird stuff in finance. More about the cogs of the
|
||||
machinery and the weird personalities in the news than it is about
|
||||
whether the S&P 500 is going to go up or down next week.
|
||||
I’ve been reading Money Stuff for a few years now, and I can’t really put my
|
||||
thumb on why I love it so much. Sure, it’s about finance… but kind of the weird
|
||||
stuff in finance. More about the cogs of the machinery and the weird
|
||||
personalities in the news than it is about whether the S&P 500 is going to go
|
||||
up or down next week.
|
||||
|
||||
From [26]FTX’s Balance Sheet Was Bad:
|
||||
|
||||
But then there is the “Hidden, poorly internally labeled ‘fiat@’
|
||||
account,” with a balance of negative $8 billion. I don’t actually
|
||||
think that you’re supposed to subtract that number from net equity —
|
||||
though I do not know how this balance sheet is supposed to work! —
|
||||
but it doesn’t matter. If you try to calculate the equity of a
|
||||
balance sheet with an entry for HIDDEN POORLY INTERNALLY LABELED
|
||||
ACCOUNT, Microsoft Clippy will appear before you in the flesh,
|
||||
bloodshot and staggering, with a knife in his little paper-clip
|
||||
hand, saying “just what do you think you’re doing Dave?” You cannot
|
||||
apply ordinary arithmetic to numbers in a cell labeled “HIDDEN
|
||||
POORLY INTERNALLY LABELED ACCOUNT.” The result of adding or
|
||||
subtracting those numbers with ordinary numbers is not a number; it
|
||||
is prison.
|
||||
But then there is the “Hidden, poorly internally labeled ‘fiat@’ account,”
|
||||
with a balance of negative $8 billion. I don’t actually think that you’re
|
||||
supposed to subtract that number from net equity — though I do not know how
|
||||
this balance sheet is supposed to work! — but it doesn’t matter. If you try
|
||||
to calculate the equity of a balance sheet with an entry for HIDDEN POORLY
|
||||
INTERNALLY LABELED ACCOUNT, Microsoft Clippy will appear before you in the
|
||||
flesh, bloodshot and staggering, with a knife in his little paper-clip
|
||||
hand, saying “just what do you think you’re doing Dave?” You cannot apply
|
||||
ordinary arithmetic to numbers in a cell labeled “HIDDEN POORLY INTERNALLY
|
||||
LABELED ACCOUNT.” The result of adding or subtracting those numbers with
|
||||
ordinary numbers is not a number; it is prison.
|
||||
|
||||
It’s an understatement to say I don’t love finance, but I do enjoy me
|
||||
some Money Stuff.
|
||||
__________________________________________________________________
|
||||
It’s an understatement to say I don’t love finance, but I do enjoy me some
|
||||
Money Stuff.
|
||||
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
What’s Next?
|
||||
|
||||
I’ve really been enjoying re-visiting some of my favorite authors and
|
||||
finishing off big series I never quite got around to. Last year I
|
||||
finally finished off the whole of Frank Herbert’s Dune (never having
|
||||
read 5 & 6 before), and this year I’m getting the itch to do the same
|
||||
for Foundation. To be frank, I don’t even remember where I ended with
|
||||
that series. But it does feel like a good opportunity to maybe just
|
||||
re-visit the entirety of the Asimov Universe… [27]in chronological
|
||||
order. I’m also getting a terrible itch to revisit a bunch of
|
||||
Vonnegut’s work after watching the excellent [28]Unstuck in Time. But I
|
||||
like new authors too!
|
||||
I’ve really been enjoying re-visiting some of my favorite authors and finishing
|
||||
off big series I never quite got around to. Last year I finally finished off
|
||||
the whole of Frank Herbert’s Dune (never having read 5 & 6 before), and this
|
||||
year I’m getting the itch to do the same for Foundation. To be frank, I don’t
|
||||
even remember where I ended with that series. But it does feel like a good
|
||||
opportunity to maybe just re-visit the entirety of the Asimov Universe… [27]in
|
||||
chronological order. I’m also getting a terrible itch to revisit a bunch of
|
||||
Vonnegut’s work after watching the excellent [28]Unstuck in Time. But I like
|
||||
new authors too!
|
||||
|
||||
I’m also interested in finding more books and newsletters about… I
|
||||
guess you’d call it urban design. Stuff like [29]Strong Towns and other
|
||||
sources of how to adapt our cities into resilient communities. I
|
||||
actually have background in city planning from my Civil Engineering
|
||||
days, but I feel like there’s been a big surge in new thinking that
|
||||
goes farther than the YIMBY/NIMBY noise of the past decade.
|
||||
I’m also interested in finding more books and newsletters about… I guess you’d
|
||||
call it urban design. Stuff like [29]Strong Towns and other sources of how to
|
||||
adapt our cities into resilient communities. I actually have background in city
|
||||
planning from my Civil Engineering days, but I feel like there’s been a big
|
||||
surge in new thinking that goes farther than the YIMBY/NIMBY noise of the past
|
||||
decade.
|
||||
|
||||
Have some recommendations? Hit me up on Mastadon:
|
||||
[30]@kneath@indieweb.social.
|
||||
Have some recommendations? Hit me up on Mastadon: [30]@kneath@indieweb.social.
|
||||
|
||||
Est. 2003 • Do Hard Things • Build. Learn. Explore.
|
||||
|
||||
References
|
||||
|
||||
Visible links:
|
||||
1. http://warpspire.com/feed/
|
||||
2. https://warpspire.com/now
|
||||
3. https://warpspire.com/giving
|
||||
4. https://warpspire.com/offset
|
||||
5. https://warpspire.com/about
|
||||
6. https://warpspire.com/posts/money-pit
|
||||
7. https://bookshop.org/p/books/this-is-how-you-lose-the-time-war-amal-el-mohtar/18270911?aid=13508&ean=9781534430990&gclid=CjwKCAiAy_CcBhBeEiwAcoMRHMYspqPk88ZoP8--CUUbXYfJi5-1npSPEUSq-QroPTijJK-cIC1CAxoCIGsQAvD_BwE&listref=this-is-how-you-lose-the-time-war
|
||||
8. https://bookshop.org/p/books/rendezvous-with-rama-arthur-c-clarke/8296887?ean=9780358380221
|
||||
9. https://bookshop.org/p/books/elder-race-adrian-tchaikovsky/15877279
|
||||
10. https://bookshop.org/p/books/artifact-space-miles-cameron/18367466?ean=9781473232617
|
||||
11. https://bookshop.org/p/books/this-is-how-you-lose-the-time-war-amal-el-mohtar/18270911?aid=13508&ean=9781534430990&gclid=CjwKCAiAy_CcBhBeEiwAcoMRHMYspqPk88ZoP8--CUUbXYfJi5-1npSPEUSq-QroPTijJK-cIC1CAxoCIGsQAvD_BwE&listref=this-is-how-you-lose-the-time-war
|
||||
12. https://bookshop.org/p/books/rendezvous-with-rama-arthur-c-clarke/8296887?ean=9780358380221
|
||||
13. https://www.hollywoodreporter.com/movies/movie-news/denis-villeneuve-rendezvous-with-rama-movie-1235062337/
|
||||
14. https://bookshop.org/p/books/elder-race-adrian-tchaikovsky/15877279
|
||||
15. https://bookshop.org/p/books/artifact-space-miles-cameron/18367466?ean=9781473232617
|
||||
16. https://www.amazon.com/Heavens-River-Bobiverse-Book-4/dp/B088C51F5H/ref=tmm_aud_swatch_0?_encoding=UTF8&qid=&sr=
|
||||
17. https://bookshop.org/p/books/termination-shock-neal-stephenson/18272978?ean=9780063028067
|
||||
18. https://bookshop.org/books/after-geoengineering-climate-tragedy-repair-and-restoration/9781788730365
|
||||
19. https://bookshop.org/p/books/the-redemption-of-time-a-three-body-problem-novel-baoshu/6986329?ean=9781250306005
|
||||
20. https://bookshop.org/p/books/heretics-of-dune-frank-herbert/7513860?ean=9780593098264
|
||||
21. https://bookshop.org/p/books/children-of-time-adrian-tchaikovsky/113411?ean=9780316452502
|
||||
22. https://alexsteffen.substack.com/
|
||||
23. https://alexsteffen.substack.com/p/discontinuity-is-the-job
|
||||
24. https://alexsteffen.substack.com/p/tempo-timing-and-the-translucence
|
||||
25. https://www.bloomberg.com/account/newsletters/money-stuff
|
||||
26. https://newsletters.feedbinusercontent.com/818/8185a1196937308adee75e80f544a29a36b34a5f.html
|
||||
27. https://gist.github.com/kneath/27a2772f5e1871e3c314ef05a4cacd44
|
||||
28. https://www.vonnegutmovie.com/
|
||||
29. https://www.strongtowns.org/
|
||||
30. https://indieweb.social/@kneath
|
||||
References:
|
||||
|
||||
Hidden links:
|
||||
32. https://warpspire.com/
|
||||
[1] https://warpspire.com/
|
||||
[2] https://warpspire.com/now
|
||||
[3] https://warpspire.com/giving
|
||||
[4] https://warpspire.com/offset
|
||||
[5] https://warpspire.com/about
|
||||
[6] https://warpspire.com/posts/money-pit
|
||||
[7] https://bookshop.org/p/books/this-is-how-you-lose-the-time-war-amal-el-mohtar/18270911?aid=13508&ean=9781534430990&gclid=CjwKCAiAy_CcBhBeEiwAcoMRHMYspqPk88ZoP8--CUUbXYfJi5-1npSPEUSq-QroPTijJK-cIC1CAxoCIGsQAvD_BwE&listref=this-is-how-you-lose-the-time-war
|
||||
[8] https://bookshop.org/p/books/rendezvous-with-rama-arthur-c-clarke/8296887?ean=9780358380221
|
||||
[9] https://bookshop.org/p/books/elder-race-adrian-tchaikovsky/15877279
|
||||
[10] https://bookshop.org/p/books/artifact-space-miles-cameron/18367466?ean=9781473232617
|
||||
[11] https://bookshop.org/p/books/this-is-how-you-lose-the-time-war-amal-el-mohtar/18270911?aid=13508&ean=9781534430990&gclid=CjwKCAiAy_CcBhBeEiwAcoMRHMYspqPk88ZoP8--CUUbXYfJi5-1npSPEUSq-QroPTijJK-cIC1CAxoCIGsQAvD_BwE&listref=this-is-how-you-lose-the-time-war
|
||||
[12] https://bookshop.org/p/books/rendezvous-with-rama-arthur-c-clarke/8296887?ean=9780358380221
|
||||
[13] https://www.hollywoodreporter.com/movies/movie-news/denis-villeneuve-rendezvous-with-rama-movie-1235062337/
|
||||
[14] https://bookshop.org/p/books/elder-race-adrian-tchaikovsky/15877279
|
||||
[15] https://bookshop.org/p/books/artifact-space-miles-cameron/18367466?ean=9781473232617
|
||||
[16] https://www.amazon.com/Heavens-River-Bobiverse-Book-4/dp/B088C51F5H/ref=tmm_aud_swatch_0?_encoding=UTF8&qid=&sr=
|
||||
[17] https://bookshop.org/p/books/termination-shock-neal-stephenson/18272978?ean=9780063028067
|
||||
[18] https://bookshop.org/books/after-geoengineering-climate-tragedy-repair-and-restoration/9781788730365
|
||||
[19] https://bookshop.org/p/books/the-redemption-of-time-a-three-body-problem-novel-baoshu/6986329?ean=9781250306005
|
||||
[20] https://bookshop.org/p/books/heretics-of-dune-frank-herbert/7513860?ean=9780593098264
|
||||
[21] https://bookshop.org/p/books/children-of-time-adrian-tchaikovsky/113411?ean=9780316452502
|
||||
[22] https://alexsteffen.substack.com/
|
||||
[23] https://alexsteffen.substack.com/p/discontinuity-is-the-job
|
||||
[24] https://alexsteffen.substack.com/p/tempo-timing-and-the-translucence
|
||||
[25] https://www.bloomberg.com/account/newsletters/money-stuff
|
||||
[26] https://newsletters.feedbinusercontent.com/818/8185a1196937308adee75e80f544a29a36b34a5f.html
|
||||
[27] https://gist.github.com/kneath/27a2772f5e1871e3c314ef05a4cacd44
|
||||
[28] https://www.vonnegutmovie.com/
|
||||
[29] https://www.strongtowns.org/
|
||||
[30] https://indieweb.social/@kneath
|
||||
|
||||
@@ -1,6 +1,4 @@
|
||||
#[1]Feed
|
||||
|
||||
[2][avatar-fb368b1ee9b185dc2a09b03eabdb61678dd55244]
|
||||
[1] [avatar-fb3]
|
||||
|
||||
David Heinemeier Hansson
|
||||
|
||||
@@ -8,96 +6,99 @@
|
||||
|
||||
Even Amazon can't make sense of serverless or microservices
|
||||
|
||||
The Prime Video team at Amazon has published a rather [3]remarkable
|
||||
case study on their decision to dump their serverless, microservices
|
||||
architecture and replace it with a monolith instead. This move saved
|
||||
them a staggering 90%(!!) on operating costs, and simplified the system
|
||||
too. What a win!
|
||||
But beyond celebrating their good sense, I think there's a bigger point
|
||||
here that applies to our entire industry. Here's the telling bit:
|
||||
The Prime Video team at Amazon has published a rather [2]remarkable case study
|
||||
on their decision to dump their serverless, microservices architecture and
|
||||
replace it with a monolith instead. This move saved them a staggering 90%(!!)
|
||||
on operating costs, and simplified the system too. What a win!
|
||||
|
||||
"We designed our initial solution as a distributed system using
|
||||
serverless components... In theory, this would allow us to scale
|
||||
each service component independently. However, the way we used some
|
||||
components caused us to hit a hard scaling limit at around 5% of the
|
||||
expected load."
|
||||
But beyond celebrating their good sense, I think there's a bigger point here
|
||||
that applies to our entire industry. Here's the telling bit:
|
||||
|
||||
That really sums up so much of the microservices craze that was tearing
|
||||
through the tech industry for a while: IN THEORY. Now the real-world
|
||||
results of all this theory are finally in, and it's clear that in
|
||||
practice, microservices pose perhaps the biggest siren song for
|
||||
needlessly complicating your system. And serverless only makes it
|
||||
worse.
|
||||
What makes this story unique is that Amazon was the original poster
|
||||
child for service-oriented architectures. The far more reasonable prior
|
||||
to microservices. An organizational pattern for dealing with
|
||||
intra-company communication at crazy scale when API calls beat
|
||||
scheduling coordination meetings.
|
||||
SOA makes perfect sense at the scale of Amazon. No single team could
|
||||
ever hope to know or understand everything needed to steer such a fleet
|
||||
of supertankers. Making teams coordinate via published APIs was a
|
||||
stroke of genius.
|
||||
But, as with many good ideas, this pattern turned toxic as soon as it
|
||||
was adopted outside its original context, and wreaked havoc once it got
|
||||
pushed into the internals of single-application architectures. That's
|
||||
how we got microservices.
|
||||
In many ways, microservices is a zombie architecture. Another strain of
|
||||
an intellectual contagion that just refuses to die. It's been eating
|
||||
brains since the dark days of J2EE (remote server beans, anyone??)
|
||||
through the [4]WS-Deathstar nonsense, and now in the form of
|
||||
microservices and serverless.
|
||||
But this third wave seems finally to have crested. I wrote an ode to
|
||||
[5]The Majestic Monolith way back in 2016. Kelsey Hightower, one of the
|
||||
leading voices behind Kubernetes, [6]put it beautifully in 2020:
|
||||
|
||||
"We’re gonna break [the monolith] up and somehow find the
|
||||
engineering discipline we never had in the first place... Now you
|
||||
went from writing bad code to building bad infrastructure.
|
||||
Because it drives a lot of new spend, it drives a lot of new hiring…
|
||||
So a lot of people get addicted to all the flourishment of money,
|
||||
and marketing, and it’s just a lot of buzz that people are attaching
|
||||
their assignment to, when honestly it’s not gonna necessarily solve
|
||||
their problem."
|
||||
"We designed our initial solution as a distributed system using serverless
|
||||
components... In theory, this would allow us to scale each service
|
||||
component independently. However, the way we used some components caused us
|
||||
to hit a hard scaling limit at around 5% of the expected load."
|
||||
|
||||
Bingo. Replacing method calls and module separations with network
|
||||
invocations and service partitioning within a single, coherent team and
|
||||
application is madness in almost all cases.
|
||||
I'm happy that we beat back the zombie onslaught of that terrible idea
|
||||
for the third time in my living memory, but we still need to stay
|
||||
vigilant that we'll eventually have to do it again. Some bad ideas
|
||||
simply refuse to die no matter how many times you kill them. All you
|
||||
can do is recognize when they rise from the dead once more, and keep
|
||||
your retorical shotgun locked and loaded.
|
||||
|
||||
That really sums up so much of the microservices craze that was tearing through
|
||||
the tech industry for a while: IN THEORY. Now the real-world results of all
|
||||
this theory are finally in, and it's clear that in practice, microservices pose
|
||||
perhaps the biggest siren song for needlessly complicating your system. And
|
||||
serverless only makes it worse.
|
||||
|
||||
What makes this story unique is that Amazon was the original poster child for
|
||||
service-oriented architectures. The far more reasonable prior to microservices.
|
||||
An organizational pattern for dealing with intra-company communication at crazy
|
||||
scale when API calls beat scheduling coordination meetings.
|
||||
|
||||
SOA makes perfect sense at the scale of Amazon. No single team could ever hope
|
||||
to know or understand everything needed to steer such a fleet of supertankers.
|
||||
Making teams coordinate via published APIs was a stroke of genius.
|
||||
|
||||
But, as with many good ideas, this pattern turned toxic as soon as it was
|
||||
adopted outside its original context, and wreaked havoc once it got pushed into
|
||||
the internals of single-application architectures. That's how we got
|
||||
microservices.
|
||||
|
||||
In many ways, microservices is a zombie architecture. Another strain of an
|
||||
intellectual contagion that just refuses to die. It's been eating brains since
|
||||
the dark days of J2EE (remote server beans, anyone??) through the [3]
|
||||
WS-Deathstar nonsense, and now in the form of microservices and serverless.
|
||||
|
||||
But this third wave seems finally to have crested. I wrote an ode to [4]The
|
||||
Majestic Monolith way back in 2016. Kelsey Hightower, one of the leading voices
|
||||
behind Kubernetes, [5]put it beautifully in 2020:
|
||||
|
||||
|
||||
"We’re gonna break [the monolith] up and somehow find the engineering
|
||||
discipline we never had in the first place... Now you went from writing bad
|
||||
code to building bad infrastructure.
|
||||
|
||||
Because it drives a lot of new spend, it drives a lot of new hiring… So a
|
||||
lot of people get addicted to all the flourishment of money, and marketing,
|
||||
and it’s just a lot of buzz that people are attaching their assignment to,
|
||||
when honestly it’s not gonna necessarily solve their problem."
|
||||
|
||||
|
||||
Bingo. Replacing method calls and module separations with network invocations
|
||||
and service partitioning within a single, coherent team and application is
|
||||
madness in almost all cases.
|
||||
|
||||
I'm happy that we beat back the zombie onslaught of that terrible idea for the
|
||||
third time in my living memory, but we still need to stay vigilant that we'll
|
||||
eventually have to do it again. Some bad ideas simply refuse to die no matter
|
||||
how many times you kill them. All you can do is recognize when they rise from
|
||||
the dead once more, and keep your retorical shotgun locked and loaded.
|
||||
|
||||
About David Heinemeier Hansson
|
||||
Made [7]Basecamp and [8]HEY for the underdogs as co-owner and CTO of
|
||||
[9]37signals. Created [10]Ruby on Rails. Wrote [11]REWORK, [12]It
|
||||
Doesn't Have to Be Crazy at Work, and [13]REMOTE. Won at Le Mans as a
|
||||
[14]racing driver. Fought the big tech monopolies as an [15]antitrust
|
||||
advocate. Invested in [16]Danish startups.
|
||||
|
||||
Subscribe to get future posts via email (or grab the [17]RSS feed)
|
||||
____________________ (BUTTON) Subscribe
|
||||
Made [6]Basecamp and [7]HEY for the underdogs as co-owner and CTO of [8]
|
||||
37signals. Created [9]Ruby on Rails. Wrote [10]REWORK, [11]It Doesn't Have to
|
||||
Be Crazy at Work, and [12]REMOTE. Won at Le Mans as a [13]racing driver. Fought
|
||||
the big tech monopolies as an [14]antitrust advocate. Invested in [15]Danish
|
||||
startups.
|
||||
Subscribe to get future posts via email (or grab the [16]RSS feed)
|
||||
[17][ ] Subscribe
|
||||
[19]Sent to the world with HEY
|
||||
|
||||
[18]Sent to the world with HEY
|
||||
|
||||
References
|
||||
References:
|
||||
|
||||
1. https://world.hey.com/dhh/feed.atom
|
||||
2. https://world.hey.com/dhh
|
||||
3. https://www.primevideotech.com/video-streaming/scaling-up-the-prime-video-audio-video-monitoring-service-and-reducing-costs-by-90
|
||||
4. https://www.flickr.com/photos/psd/1428661128/
|
||||
5. https://m.signalvnoise.com/the-majestic-monolith/
|
||||
6. https://changelog.com/posts/monoliths-are-the-future
|
||||
7. https://www.basecamp.com/
|
||||
8. https://www.hey.com/
|
||||
9. https://37signals.com/
|
||||
10. https://rubyonrails.org/
|
||||
11. https://www.amazon.com/Rework-Jason-Fried/dp/0307463745
|
||||
12. https://www.amazon.com/Doesnt-Have-Be-Crazy-Work/dp/0062874780
|
||||
13. https://www.amazon.com/Remote-Office-Not-Required/dp/0804137501
|
||||
14. https://www.youtube.com/watch?v=iNQl0x6WS3M
|
||||
15. https://dhh.dk/#antitrust
|
||||
16. https://dhh.dk/#investor
|
||||
17. https://world.hey.com/dhh/feed.atom
|
||||
18. https://www.hey.com/world/?utm_source=hw-web
|
||||
[1] https://world.hey.com/dhh
|
||||
[2] https://www.primevideotech.com/video-streaming/scaling-up-the-prime-video-audio-video-monitoring-service-and-reducing-costs-by-90
|
||||
[3] https://www.flickr.com/photos/psd/1428661128/
|
||||
[4] https://m.signalvnoise.com/the-majestic-monolith/
|
||||
[5] https://changelog.com/posts/monoliths-are-the-future
|
||||
[6] https://www.basecamp.com/
|
||||
[7] https://www.hey.com/
|
||||
[8] https://37signals.com/
|
||||
[9] https://rubyonrails.org/
|
||||
[10] https://www.amazon.com/Rework-Jason-Fried/dp/0307463745
|
||||
[11] https://www.amazon.com/Doesnt-Have-Be-Crazy-Work/dp/0062874780
|
||||
[12] https://www.amazon.com/Remote-Office-Not-Required/dp/0804137501
|
||||
[13] https://www.youtube.com/watch?v=iNQl0x6WS3M
|
||||
[14] https://dhh.dk/#antitrust
|
||||
[15] https://dhh.dk/#investor
|
||||
[16] https://world.hey.com/dhh/feed.atom
|
||||
[19] https://www.hey.com/world/?utm_source=hw-web
|
||||
|
||||
@@ -1,23 +1,18 @@
|
||||
#[1]RSS Feed
|
||||
|
||||
[2]
|
||||
[1]
|
||||
0
|
||||
|
||||
[3]Skip to Content
|
||||
[4]Anna Havron
|
||||
|
||||
[5]Articles
|
||||
[6]Blog
|
||||
[7]Articles by Topic
|
||||
[8]Sort Your Signals
|
||||
[9]About
|
||||
[10]Subscribe
|
||||
[11]Site Notes
|
||||
[12]About this site
|
||||
[13]Privacy Policy
|
||||
(BUTTON) Open Menu Close Menu
|
||||
[2] Skip to Content
|
||||
[3]Anna Havron
|
||||
[4] Articles
|
||||
[5] Blog
|
||||
[6] Articles by Topic
|
||||
[7] Sort Your Signals
|
||||
[8] About
|
||||
[9] Subscribe
|
||||
[10] Site Notes
|
||||
[11] About this site
|
||||
[12] Privacy Policy
|
||||
Open Menu Close Menu
|
||||
[14]Anna Havron
|
||||
|
||||
[15] Articles
|
||||
[16] Blog
|
||||
[17] Articles by Topic
|
||||
@@ -27,261 +22,263 @@
|
||||
[21] Site Notes
|
||||
[22] About this site
|
||||
[23] Privacy Policy
|
||||
(BUTTON) Open Menu Close Menu
|
||||
|
||||
Open Menu Close Menu
|
||||
[25]
|
||||
Folder: Articles
|
||||
[24]Back
|
||||
[26] Back
|
||||
[27]
|
||||
Blog
|
||||
[28]
|
||||
Articles by Topic
|
||||
[29]
|
||||
Sort Your Signals
|
||||
[30]
|
||||
About
|
||||
[31]
|
||||
Subscribe
|
||||
[32]
|
||||
Folder: Site Notes
|
||||
[25]Back
|
||||
[33] Back
|
||||
[34]
|
||||
About this site
|
||||
[35]
|
||||
Privacy Policy
|
||||
|
||||
What Do You Want to Make Real in the World?
|
||||
|
||||
Mar 29
|
||||
Written By [26]Anna Havron
|
||||
Written By [36]Anna Havron
|
||||
|
||||
Often the question that drives people’s initial interest in
|
||||
productivity is: “How am I going to get everything done?”
|
||||
Often the question that drives people’s initial interest in productivity is:
|
||||
“How am I going to get everything done?”
|
||||
|
||||
For me, at least, that was true: I got to a point where my life was too
|
||||
complicated for me to manage it without a productivity system. And so I
|
||||
learned about systems for managing time and information and tasks and
|
||||
goals and projects.
|
||||
complicated for me to manage it without a productivity system. And so I learned
|
||||
about systems for managing time and information and tasks and goals and
|
||||
projects.
|
||||
|
||||
These systems have allowed me to get a lot more done, than I could have
|
||||
without them.
|
||||
These systems have allowed me to get a lot more done, than I could have without
|
||||
them.
|
||||
|
||||
But the danger is that we might too easily substitute getting things
|
||||
done — checking off tasks, chores, projects — for living a life of
|
||||
depth and resonance.
|
||||
But the danger is that we might too easily substitute getting things done —
|
||||
checking off tasks, chores, projects — for living a life of depth and
|
||||
resonance.
|
||||
|
||||
For example, I want to take a couple of hours [27]for an adventure to
|
||||
visit a heron rookery nearby, so I can see dozens of Great Blue herons
|
||||
nesting.
|
||||
For example, I want to take a couple of hours [37]for an adventure to visit a
|
||||
heron rookery nearby, so I can see dozens of Great Blue herons nesting.
|
||||
|
||||
But nesting season for herons coincides with my busiest time of the
|
||||
year.
|
||||
But nesting season for herons coincides with my busiest time of the year.
|
||||
|
||||
If I tell myself that I need to get everything done before I take time
|
||||
to see this, nesting season will be over. I will miss the experience of
|
||||
seeing them. (And I still won’t get everything done; I can always think
|
||||
of more that I would like to have done, than I can actually do.)
|
||||
If I tell myself that I need to get everything done before I take time to see
|
||||
this, nesting season will be over. I will miss the experience of seeing them.
|
||||
(And I still won’t get everything done; I can always think of more that I would
|
||||
like to have done, than I can actually do.)
|
||||
|
||||
Stop Asking Yourself How You’ll Get Everything Done
|
||||
|
||||
Most productivity and organizational systems are geared toward the
|
||||
world of work, paid or unpaid.
|
||||
Most productivity and organizational systems are geared toward the world of
|
||||
work, paid or unpaid.
|
||||
|
||||
Few talk about managing your time so that you can pursue important
|
||||
relationships and activities that feed your spirit, but not your bank
|
||||
account. (Laura Vanderkam’s recent book, Tranquility by Tuesday, is one
|
||||
exception to this.)
|
||||
relationships and activities that feed your spirit, but not your bank account.
|
||||
(Laura Vanderkam’s recent book, Tranquility by Tuesday, is one exception to
|
||||
this.)
|
||||
|
||||
But what we call “leisure activities,” non-work or chore activities,
|
||||
non-productive activities in the economic sense, are the very
|
||||
activities you might look back on as the most important to cultivating
|
||||
a well-lived life: a life where you’ve had rich relationships, where
|
||||
you’ve taken time to create things that gave you pleasure to create,
|
||||
where you’ve taken time to contribute your energy and efforts to make
|
||||
this world a better place.
|
||||
non-productive activities in the economic sense, are the very activities you
|
||||
might look back on as the most important to cultivating a well-lived life: a
|
||||
life where you’ve had rich relationships, where you’ve taken time to create
|
||||
things that gave you pleasure to create, where you’ve taken time to contribute
|
||||
your energy and efforts to make this world a better place.
|
||||
|
||||
Sometimes the belief that you must finish everything on the list,
|
||||
whether it’s paid work tasks or chores around the house, robs you of
|
||||
leisure time: “But I can’t stop working until I get everything done!”
|
||||
Sometimes the belief that you must finish everything on the list, whether it’s
|
||||
paid work tasks or chores around the house, robs you of leisure time: “But I
|
||||
can’t stop working until I get everything done!”
|
||||
|
||||
Part of the solution for this is using time management techniques such
|
||||
as [28]paying yourself first.
|
||||
Part of the solution for this is using time management techniques such as [38]
|
||||
paying yourself first.
|
||||
|
||||
But part of it is also reframing the question.
|
||||
|
||||
Ask Instead: What Do You Want to Make Real in the World?
|
||||
|
||||
What if, instead of asking yourself, “What do I need to get done,” you
|
||||
ask yourself: “What do I want to make real, in this world?”
|
||||
What if, instead of asking yourself, “What do I need to get done,” you ask
|
||||
yourself: “What do I want to make real, in this world?”
|
||||
|
||||
What do you want to make real?
|
||||
|
||||
What do you want to bring from your imagination, into real life?
|
||||
|
||||
What do you want to make real, that you can experience? Hiking the
|
||||
Appalachian Trail from Georgia to Maine? Having clean socks on a
|
||||
predictable basis (seriously, that is one of mine)? (Next level: having
|
||||
clean socks on a regular basis, while you are hiking the Appalachian
|
||||
Trail.)
|
||||
What do you want to make real, that you can experience? Hiking the Appalachian
|
||||
Trail from Georgia to Maine? Having clean socks on a predictable basis
|
||||
(seriously, that is one of mine)? (Next level: having clean socks on a regular
|
||||
basis, while you are hiking the Appalachian Trail.)
|
||||
|
||||
What do you want to make real that other people can enjoy or use —
|
||||
learning to play music, starting a non-profit program, creating a
|
||||
useful app?
|
||||
What do you want to make real that other people can enjoy or use — learning to
|
||||
play music, starting a non-profit program, creating a useful app?
|
||||
|
||||
What do you want to make real, that makes this world a better place:
|
||||
provide [29]housing for purple martins so they can keep migrating to
|
||||
North America; provide housing for human beings, so all can live with
|
||||
dignity?
|
||||
What do you want to make real, that makes this world a better place: provide
|
||||
[39]housing for purple martins so they can keep migrating to North America;
|
||||
provide housing for human beings, so all can live with dignity?
|
||||
|
||||
We will all have different things that we deeply want to become real,
|
||||
in this world. We will all have different experiences and
|
||||
accomplishments that we hope to look back on, at the end of a
|
||||
well-lived life.
|
||||
We will all have different things that we deeply want to become real, in this
|
||||
world. We will all have different experiences and accomplishments that we hope
|
||||
to look back on, at the end of a well-lived life.
|
||||
|
||||
I personally believe that if everyone took one thing they wanted to see
|
||||
changed in this world, and worked toward making that one thing real;
|
||||
that we would all be much better off.
|
||||
I personally believe that if everyone took one thing they wanted to see changed
|
||||
in this world, and worked toward making that one thing real; that we would all
|
||||
be much better off.
|
||||
|
||||
Making Things Real in the World Can Take a Lot of Effort; or, Almost No
|
||||
Effort at All
|
||||
Making Things Real in the World Can Take a Lot of Effort; or, Almost No Effort
|
||||
at All
|
||||
|
||||
Lately my key productivity question to myself is: what do I want to
|
||||
make real, in this world?
|
||||
Lately my key productivity question to myself is: what do I want to make real,
|
||||
in this world?
|
||||
|
||||
What do I want to make real, today?
|
||||
|
||||
This can be very small! The other day what I most wanted to make real,
|
||||
was some clean socks. (Doing the laundry, a care task I dislike, is
|
||||
much more satisfying for me when I cheer myself on, saying, “You go,
|
||||
Anna, giving yourself clean socks, good for you!”)
|
||||
This can be very small! The other day what I most wanted to make real, was some
|
||||
clean socks. (Doing the laundry, a care task I dislike, is much more satisfying
|
||||
for me when I cheer myself on, saying, “You go, Anna, giving yourself clean
|
||||
socks, good for you!”)
|
||||
|
||||
I also want to write a book, which is a lot more work than throwing a
|
||||
load of wash into a machine.
|
||||
I also want to write a book, which is a lot more work than throwing a load of
|
||||
wash into a machine.
|
||||
|
||||
To make my book real in the world, I’m going to have to put in
|
||||
consistent thought and effort over time. The same is true for making
|
||||
things real like starting your own business, learning a trade,
|
||||
socializing a dog to become a beloved part of the family.
|
||||
To make my book real in the world, I’m going to have to put in consistent
|
||||
thought and effort over time. The same is true for making things real like
|
||||
starting your own business, learning a trade, socializing a dog to become a
|
||||
beloved part of the family.
|
||||
|
||||
But some things that are important to you, and that bring you a lot of
|
||||
joy, you can make real without much trouble at all.
|
||||
But some things that are important to you, and that bring you a lot of joy, you
|
||||
can make real without much trouble at all.
|
||||
|
||||
Making Things Real is About Responding to Opportunities
|
||||
|
||||
When I was a child, I lived in the Southwest of the U.S., and in
|
||||
northern New England: places where cherry blossom trees don’t grow.
|
||||
When I was a child, I lived in the Southwest of the U.S., and in northern New
|
||||
England: places where cherry blossom trees don’t grow.
|
||||
|
||||
Every year during the spring I would see the Cherry Blossom Festival
|
||||
pictures in Washington, DC, and I thought that those trees looked like
|
||||
blooming clouds, banks of flowering clouds, on the banks of the
|
||||
Potomac. I dreamed of seeing them in real life.
|
||||
Every year during the spring I would see the Cherry Blossom Festival pictures
|
||||
in Washington, DC, and I thought that those trees looked like blooming clouds,
|
||||
banks of flowering clouds, on the banks of the Potomac. I dreamed of seeing
|
||||
them in real life.
|
||||
|
||||
It wasn’t until my thirties that I got to experience the Cherry Blossom
|
||||
Festival in Washington, DC, in real life rather than in my imagination.
|
||||
|
||||
That memory of walking under hundreds of flowering cherry trees, with
|
||||
dark rain clouds overhead playing up the lightness of those short-lived
|
||||
blossoms, remains one of the most vividly piercing things I have ever
|
||||
experienced.
|
||||
That memory of walking under hundreds of flowering cherry trees, with dark rain
|
||||
clouds overhead playing up the lightness of those short-lived blossoms, remains
|
||||
one of the most vividly piercing things I have ever experienced.
|
||||
|
||||
By that time, we lived in an area where cherry trees could grow.
|
||||
However, our house already had such a large old maple shading the yard
|
||||
that we couldn’t plant other trees.
|
||||
By that time, we lived in an area where cherry trees could grow. However, our
|
||||
house already had such a large old maple shading the yard that we couldn’t
|
||||
plant other trees.
|
||||
|
||||
One day, a storm came and toppled our maple tree.
|
||||
|
||||
I was saddened to see it go, but realized that now our small yard had
|
||||
enough sun and space to plant a Yoshino cherry tree, just like the ones
|
||||
in Washington, DC.
|
||||
I was saddened to see it go, but realized that now our small yard had enough
|
||||
sun and space to plant a Yoshino cherry tree, just like the ones in Washington,
|
||||
DC.
|
||||
|
||||
And so we did.
|
||||
|
||||
cherry blossom branches with a blue sky behind them
|
||||
|
||||
Here it is!
|
||||
|
||||
It took less than a day to plant it. That was fourteen years ago.
|
||||
|
||||
Now, it is full grown.
|
||||
|
||||
I can see blossoming branches from my bedroom window, nodding in the
|
||||
breezes, with birds flying in and out of them, and wild solitary bees
|
||||
burrowing into the blossoms. Yoshino cherry trees bloom even before
|
||||
dandelions bloom.
|
||||
I can see blossoming branches from my bedroom window, nodding in the breezes,
|
||||
with birds flying in and out of them, and wild solitary bees burrowing into the
|
||||
blossoms. Yoshino cherry trees bloom even before dandelions bloom.
|
||||
|
||||
Being able to see the cherry blossoms each spring, from a flowering
|
||||
tree in our own yard, from my bedroom window no less, is — for me — one
|
||||
of the best things I have ever made real in the world.
|
||||
Being able to see the cherry blossoms each spring, from a flowering tree in our
|
||||
own yard, from my bedroom window no less, is — for me — one of the best things
|
||||
I have ever made real in the world.
|
||||
|
||||
And it was hardly any work at all.
|
||||
__________________________________________________________________
|
||||
|
||||
Copy and share - [30]the link is here. Never miss a post from
|
||||
annahavron.com! [31]Subscribe here to get blog posts via email.
|
||||
__________________________________________________________________
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
Copy and share - [40]the link is here. Never miss a post from annahavron.com!
|
||||
[41]Subscribe here to get blog posts via email.
|
||||
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
References
|
||||
|
||||
Vanderkam, L. (2022) Tranquility by Tuesday: 9 ways to calm the chaos
|
||||
and make time for what matters. New York: Portfolio.
|
||||
Vanderkam, L. (2022) Tranquility by Tuesday: 9 ways to calm the chaos and make
|
||||
time for what matters. New York: Portfolio.
|
||||
|
||||
Byington, C. (2016) Purple Martins: The Bird That Relies on Human-Built
|
||||
Nests, Cool Green Science, 12 September. Available at:
|
||||
https://blog.nature.org/2016/09/12/purple-martins-the-bird-that-relies-
|
||||
on-human-built-nests/ (Accessed: 28 March 2023).
|
||||
Byington, C. (2016) Purple Martins: The Bird That Relies on Human-Built Nests,
|
||||
Cool Green Science, 12 September. Available at: https://blog.nature.org/2016/09
|
||||
/12/purple-martins-the-bird-that-relies-on-human-built-nests/ (Accessed: 28
|
||||
March 2023).
|
||||
|
||||
[32]Anna Havron
|
||||
|
||||
[42] Anna Havron
|
||||
[43]
|
||||
Previous
|
||||
Previous
|
||||
|
||||
City Hawk
|
||||
|
||||
[44]
|
||||
Next
|
||||
Next
|
||||
|
||||
Prioritize Your Time By Pretending It Is Money
|
||||
|
||||
© 2024 Anna Havron. All rights reserved. | [33]Privacy policy |
|
||||
[34]Subsc[35]ribe
|
||||
© 2024 Anna Havron. All rights reserved. | [45]Privacy policy | [46]Subsc[47]
|
||||
ribe
|
||||
|
||||
References
|
||||
|
||||
Visible links:
|
||||
1. http://feeds.feedburner.com/AnnaHavron
|
||||
2. https://www.annahavron.com/cart
|
||||
3. https://www.annahavron.com/blog/what-do-you-want-to-make-real-in-the-world#page
|
||||
4. https://www.annahavron.com/
|
||||
5. https://www.annahavron.com/articles
|
||||
6. https://www.annahavron.com/
|
||||
7. https://www.annahavron.com/articles-by-topic
|
||||
8. https://www.annahavron.com/sort-your-signals-from-the-noise
|
||||
9. https://www.annahavron.com/about
|
||||
10. https://www.annahavron.com/subscribe
|
||||
11. https://www.annahavron.com/site-notes
|
||||
12. https://www.annahavron.com/about-this-site
|
||||
13. https://www.annahavron.com/privacy-policy
|
||||
14. https://www.annahavron.com/
|
||||
15. https://www.annahavron.com/articles
|
||||
16. https://www.annahavron.com/
|
||||
17. https://www.annahavron.com/articles-by-topic
|
||||
18. https://www.annahavron.com/sort-your-signals-from-the-noise
|
||||
19. https://www.annahavron.com/about
|
||||
20. https://www.annahavron.com/subscribe
|
||||
21. https://www.annahavron.com/site-notes
|
||||
22. https://www.annahavron.com/about-this-site
|
||||
23. https://www.annahavron.com/privacy-policy
|
||||
24. https://www.annahavron.com/
|
||||
25. https://www.annahavron.com/
|
||||
26. https://www.annahavron.com/?author=5f64c2a1f52bd37e36682a0d
|
||||
27. https://www.annahavron.com/blog/big-adventure-little-adventure
|
||||
28. https://www.annahavron.com/blog/prioritize-by-thinking-of-your-time-as-if-it-were-money
|
||||
29. https://blog.nature.org/2016/09/12/purple-martins-the-bird-that-relies-on-human-built-nests/
|
||||
30. https://www.annahavron.com/blog/what-do-you-want-to-make-real-in-the-world
|
||||
31. https://www.annahavron.com/subscribe
|
||||
32. https://www.annahavron.com/?author=5f64c2a1f52bd37e36682a0d
|
||||
33. https://www.annahavron.com/privacy-policy
|
||||
34. https://www.annahavron.com/subscribe
|
||||
35. https://www.annahavron.com/subscribe
|
||||
References:
|
||||
|
||||
Hidden links:
|
||||
37. https://www.annahavron.com/articles
|
||||
38. https://www.annahavron.com/
|
||||
39. https://www.annahavron.com/articles-by-topic
|
||||
40. https://www.annahavron.com/sort-your-signals-from-the-noise
|
||||
41. https://www.annahavron.com/about
|
||||
42. https://www.annahavron.com/subscribe
|
||||
43. https://www.annahavron.com/site-notes
|
||||
44. https://www.annahavron.com/about-this-site
|
||||
45. https://www.annahavron.com/privacy-policy
|
||||
46. https://www.annahavron.com/blog/city-hawk
|
||||
47. https://www.annahavron.com/blog/prioritize-by-thinking-of-your-time-as-if-it-were-money
|
||||
[1] https://www.annahavron.com/cart
|
||||
[2] https://www.annahavron.com/blog/what-do-you-want-to-make-real-in-the-world#page
|
||||
[3] https://www.annahavron.com/
|
||||
[4] https://www.annahavron.com/articles
|
||||
[5] https://www.annahavron.com/
|
||||
[6] https://www.annahavron.com/articles-by-topic
|
||||
[7] https://www.annahavron.com/sort-your-signals-from-the-noise
|
||||
[8] https://www.annahavron.com/about
|
||||
[9] https://www.annahavron.com/subscribe
|
||||
[10] https://www.annahavron.com/site-notes
|
||||
[11] https://www.annahavron.com/about-this-site
|
||||
[12] https://www.annahavron.com/privacy-policy
|
||||
[14] https://www.annahavron.com/
|
||||
[15] https://www.annahavron.com/articles
|
||||
[16] https://www.annahavron.com/
|
||||
[17] https://www.annahavron.com/articles-by-topic
|
||||
[18] https://www.annahavron.com/sort-your-signals-from-the-noise
|
||||
[19] https://www.annahavron.com/about
|
||||
[20] https://www.annahavron.com/subscribe
|
||||
[21] https://www.annahavron.com/site-notes
|
||||
[22] https://www.annahavron.com/about-this-site
|
||||
[23] https://www.annahavron.com/privacy-policy
|
||||
[25] https://www.annahavron.com/articles
|
||||
[26] https://www.annahavron.com/
|
||||
[27] https://www.annahavron.com/
|
||||
[28] https://www.annahavron.com/articles-by-topic
|
||||
[29] https://www.annahavron.com/sort-your-signals-from-the-noise
|
||||
[30] https://www.annahavron.com/about
|
||||
[31] https://www.annahavron.com/subscribe
|
||||
[32] https://www.annahavron.com/site-notes
|
||||
[33] https://www.annahavron.com/
|
||||
[34] https://www.annahavron.com/about-this-site
|
||||
[35] https://www.annahavron.com/privacy-policy
|
||||
[36] https://www.annahavron.com/?author=5f64c2a1f52bd37e36682a0d
|
||||
[37] https://www.annahavron.com/blog/big-adventure-little-adventure
|
||||
[38] https://www.annahavron.com/blog/prioritize-by-thinking-of-your-time-as-if-it-were-money
|
||||
[39] https://blog.nature.org/2016/09/12/purple-martins-the-bird-that-relies-on-human-built-nests/
|
||||
[40] https://www.annahavron.com/blog/what-do-you-want-to-make-real-in-the-world
|
||||
[41] https://www.annahavron.com/subscribe
|
||||
[42] https://www.annahavron.com/?author=5f64c2a1f52bd37e36682a0d
|
||||
[43] https://www.annahavron.com/blog/city-hawk
|
||||
[44] https://www.annahavron.com/blog/prioritize-by-thinking-of-your-time-as-if-it-were-money
|
||||
[45] https://www.annahavron.com/privacy-policy
|
||||
[46] https://www.annahavron.com/subscribe
|
||||
[47] https://www.annahavron.com/subscribe
|
||||
|
||||
@@ -1,23 +1,18 @@
|
||||
#[1]RSS Feed
|
||||
|
||||
[2]
|
||||
[1]
|
||||
0
|
||||
|
||||
[3]Skip to Content
|
||||
[4]Anna Havron
|
||||
|
||||
[5]Articles
|
||||
[6]Blog
|
||||
[7]Articles by Topic
|
||||
[8]Sort Your Signals
|
||||
[9]About
|
||||
[10]Subscribe
|
||||
[11]Site Notes
|
||||
[12]About this site
|
||||
[13]Privacy Policy
|
||||
(BUTTON) Open Menu Close Menu
|
||||
[2] Skip to Content
|
||||
[3]Anna Havron
|
||||
[4] Articles
|
||||
[5] Blog
|
||||
[6] Articles by Topic
|
||||
[7] Sort Your Signals
|
||||
[8] About
|
||||
[9] Subscribe
|
||||
[10] Site Notes
|
||||
[11] About this site
|
||||
[12] Privacy Policy
|
||||
Open Menu Close Menu
|
||||
[14]Anna Havron
|
||||
|
||||
[15] Articles
|
||||
[16] Blog
|
||||
[17] Articles by Topic
|
||||
@@ -27,104 +22,113 @@
|
||||
[21] Site Notes
|
||||
[22] About this site
|
||||
[23] Privacy Policy
|
||||
(BUTTON) Open Menu Close Menu
|
||||
|
||||
Open Menu Close Menu
|
||||
[25]
|
||||
Folder: Articles
|
||||
[24]Back
|
||||
[26] Back
|
||||
[27]
|
||||
Blog
|
||||
[28]
|
||||
Articles by Topic
|
||||
[29]
|
||||
Sort Your Signals
|
||||
[30]
|
||||
About
|
||||
[31]
|
||||
Subscribe
|
||||
[32]
|
||||
Folder: Site Notes
|
||||
[25]Back
|
||||
[33] Back
|
||||
[34]
|
||||
About this site
|
||||
[35]
|
||||
Privacy Policy
|
||||
|
||||
Why Have a Values Plan?
|
||||
|
||||
May 26
|
||||
Written By [26]Anna Havron
|
||||
Written By [36]Anna Havron
|
||||
|
||||
Sharing [27]a talk I gave last week, as one of the presenters at
|
||||
[28]micro.blog’s annual [29]Micro Camp.
|
||||
Sharing [37]a talk I gave last week, as one of the presenters at [38]
|
||||
micro.blog’s annual [39]Micro Camp.
|
||||
|
||||
Bonus: for those of you who like to make cocktails at home, find out
|
||||
the real reason behind the Chartreuse shortage!
|
||||
Bonus: for those of you who like to make cocktails at home, find out the real
|
||||
reason behind the Chartreuse shortage!
|
||||
|
||||
Yes, this is the sine qua non of a first world problem.
|
||||
|
||||
For its makers, it also became an interesting values definition
|
||||
problem.
|
||||
For its makers, it also became an interesting values definition problem.
|
||||
|
||||
Extra bonus: a drawing I just made now, to go with the talk:
|
||||
|
||||
[project]
|
||||
|
||||
Bonus to the bonus bonus:
|
||||
|
||||
Here’s [30]the handout I made to go with the talk.
|
||||
Here’s [40]the handout I made to go with the talk.
|
||||
|
||||
[31]Anna Havron
|
||||
|
||||
|
||||
[41] Anna Havron
|
||||
[42]
|
||||
Previous
|
||||
Previous
|
||||
|
||||
Holding the Space
|
||||
|
||||
[43]
|
||||
Next
|
||||
Next
|
||||
|
||||
Professional Wild Birds
|
||||
|
||||
© 2024 Anna Havron. All rights reserved. | [32]Privacy policy |
|
||||
[33]Subsc[34]ribe
|
||||
© 2024 Anna Havron. All rights reserved. | [44]Privacy policy | [45]Subsc[46]
|
||||
ribe
|
||||
|
||||
References
|
||||
|
||||
Visible links:
|
||||
1. http://feeds.feedburner.com/AnnaHavron
|
||||
2. https://www.annahavron.com/cart
|
||||
3. https://www.annahavron.com/blog/why-have-a-values-plan#page
|
||||
4. https://www.annahavron.com/
|
||||
5. https://www.annahavron.com/articles
|
||||
6. https://www.annahavron.com/
|
||||
7. https://www.annahavron.com/articles-by-topic
|
||||
8. https://www.annahavron.com/sort-your-signals-from-the-noise
|
||||
9. https://www.annahavron.com/about
|
||||
10. https://www.annahavron.com/subscribe
|
||||
11. https://www.annahavron.com/site-notes
|
||||
12. https://www.annahavron.com/about-this-site
|
||||
13. https://www.annahavron.com/privacy-policy
|
||||
14. https://www.annahavron.com/
|
||||
15. https://www.annahavron.com/articles
|
||||
16. https://www.annahavron.com/
|
||||
17. https://www.annahavron.com/articles-by-topic
|
||||
18. https://www.annahavron.com/sort-your-signals-from-the-noise
|
||||
19. https://www.annahavron.com/about
|
||||
20. https://www.annahavron.com/subscribe
|
||||
21. https://www.annahavron.com/site-notes
|
||||
22. https://www.annahavron.com/about-this-site
|
||||
23. https://www.annahavron.com/privacy-policy
|
||||
24. https://www.annahavron.com/
|
||||
25. https://www.annahavron.com/
|
||||
26. https://www.annahavron.com/?author=5f64c2a1f52bd37e36682a0d
|
||||
27. https://www.youtube.com/watch?v=GSqMacBblq8
|
||||
28. https://micro.blog/
|
||||
29. https://micro.camp/
|
||||
30. https://static1.squarespace.com/static/5f64c2a45a59eb66a7264992/t/6468cc1048157b44f53b2e08/1684589584608/Handout+and+worksheet+for+making+a+values+plan,+Micro+Camp+2023.pdf
|
||||
31. https://www.annahavron.com/?author=5f64c2a1f52bd37e36682a0d
|
||||
32. https://www.annahavron.com/privacy-policy
|
||||
33. https://www.annahavron.com/subscribe
|
||||
34. https://www.annahavron.com/subscribe
|
||||
References:
|
||||
|
||||
Hidden links:
|
||||
36. https://www.annahavron.com/articles
|
||||
37. https://www.annahavron.com/
|
||||
38. https://www.annahavron.com/articles-by-topic
|
||||
39. https://www.annahavron.com/sort-your-signals-from-the-noise
|
||||
40. https://www.annahavron.com/about
|
||||
41. https://www.annahavron.com/subscribe
|
||||
42. https://www.annahavron.com/site-notes
|
||||
43. https://www.annahavron.com/about-this-site
|
||||
44. https://www.annahavron.com/privacy-policy
|
||||
45. https://www.annahavron.com/blog/holding-the-space
|
||||
46. https://www.annahavron.com/blog/professional-wild-birds
|
||||
[1] https://www.annahavron.com/cart
|
||||
[2] https://www.annahavron.com/blog/why-have-a-values-plan#page
|
||||
[3] https://www.annahavron.com/
|
||||
[4] https://www.annahavron.com/articles
|
||||
[5] https://www.annahavron.com/
|
||||
[6] https://www.annahavron.com/articles-by-topic
|
||||
[7] https://www.annahavron.com/sort-your-signals-from-the-noise
|
||||
[8] https://www.annahavron.com/about
|
||||
[9] https://www.annahavron.com/subscribe
|
||||
[10] https://www.annahavron.com/site-notes
|
||||
[11] https://www.annahavron.com/about-this-site
|
||||
[12] https://www.annahavron.com/privacy-policy
|
||||
[14] https://www.annahavron.com/
|
||||
[15] https://www.annahavron.com/articles
|
||||
[16] https://www.annahavron.com/
|
||||
[17] https://www.annahavron.com/articles-by-topic
|
||||
[18] https://www.annahavron.com/sort-your-signals-from-the-noise
|
||||
[19] https://www.annahavron.com/about
|
||||
[20] https://www.annahavron.com/subscribe
|
||||
[21] https://www.annahavron.com/site-notes
|
||||
[22] https://www.annahavron.com/about-this-site
|
||||
[23] https://www.annahavron.com/privacy-policy
|
||||
[25] https://www.annahavron.com/articles
|
||||
[26] https://www.annahavron.com/
|
||||
[27] https://www.annahavron.com/
|
||||
[28] https://www.annahavron.com/articles-by-topic
|
||||
[29] https://www.annahavron.com/sort-your-signals-from-the-noise
|
||||
[30] https://www.annahavron.com/about
|
||||
[31] https://www.annahavron.com/subscribe
|
||||
[32] https://www.annahavron.com/site-notes
|
||||
[33] https://www.annahavron.com/
|
||||
[34] https://www.annahavron.com/about-this-site
|
||||
[35] https://www.annahavron.com/privacy-policy
|
||||
[36] https://www.annahavron.com/?author=5f64c2a1f52bd37e36682a0d
|
||||
[37] https://www.youtube.com/watch?v=GSqMacBblq8
|
||||
[38] https://micro.blog/
|
||||
[39] https://micro.camp/
|
||||
[40] https://static1.squarespace.com/static/5f64c2a45a59eb66a7264992/t/6468cc1048157b44f53b2e08/1684589584608/Handout+and+worksheet+for+making+a+values+plan%2C+Micro+Camp+2023.pdf
|
||||
[41] https://www.annahavron.com/?author=5f64c2a1f52bd37e36682a0d
|
||||
[42] https://www.annahavron.com/blog/holding-the-space
|
||||
[43] https://www.annahavron.com/blog/professional-wild-birds
|
||||
[44] https://www.annahavron.com/privacy-policy
|
||||
[45] https://www.annahavron.com/subscribe
|
||||
[46] https://www.annahavron.com/subscribe
|
||||
|
||||
@@ -1,214 +1,153 @@
|
||||
#[1]alternate [2]alternate [3]alternate
|
||||
Menu [1] logo [2]podcast
|
||||
[3][ ]
|
||||
[4][Submit]
|
||||
• [5] Get Style
|
||||
□ [6]Clothing
|
||||
□ [7]Accessories
|
||||
□ [8]Facial Hair
|
||||
□ [9]Ties
|
||||
• [10] Get Strong
|
||||
□ [11]Fitness
|
||||
□ [12]Health
|
||||
□ [13]Program Review
|
||||
• [14] Get Social
|
||||
□ [15]Family
|
||||
□ [16]Fatherhood
|
||||
□ [17]Relationships
|
||||
□ [18]Social Skills
|
||||
• [19] Get Skilled
|
||||
□ [20]How To
|
||||
□ [21]Manly Know-How
|
||||
□ [22]Outdoor/Survival
|
||||
• [23]Podcast
|
||||
• [24]Books
|
||||
• Find more of the Art of Manliness:
|
||||
|
||||
IFRAME: [4]https://www.googletagmanager.com/ns.html?id=GTM-KXJGHMC
|
||||
|
||||
Menu [5]logo [6]podcast ____________________
|
||||
Submit
|
||||
|
||||
* [7]Get Style
|
||||
+ [8]Clothing
|
||||
+ [9]Accessories
|
||||
+ [10]Facial Hair
|
||||
+ [11]Ties
|
||||
* [12]Get Strong
|
||||
+ [13]Fitness
|
||||
+ [14]Health
|
||||
+ [15]Program Review
|
||||
* [16]Get Social
|
||||
+ [17]Family
|
||||
+ [18]Fatherhood
|
||||
+ [19]Relationships
|
||||
+ [20]Social Skills
|
||||
* [21]Get Skilled
|
||||
+ [22]How To
|
||||
+ [23]Manly Know-How
|
||||
+ [24]Outdoor/Survival
|
||||
* [25]Podcast
|
||||
* [26]Books
|
||||
* Find more of the Art of Manliness:
|
||||
instagram icon [27]Instagram
|
||||
feedly icon [28]Feedly
|
||||
facebook icon [29]Facebook
|
||||
twitter icon [30]Twitter
|
||||
youtube icon [31]YouTube
|
||||
* ____________________ cross Submit
|
||||
instagram icon [25]Instagram
|
||||
feedly icon [26]Feedly
|
||||
facebook icon [27]Facebook
|
||||
twitter icon [28]Twitter
|
||||
youtube icon [29]YouTube
|
||||
• [30][ ] cross [31][SUBMIT]
|
||||
Search
|
||||
|
||||
* [32]Clothing
|
||||
* [33]Accessories
|
||||
* [34]Facial Hair
|
||||
* [35]Ties
|
||||
• [32] Clothing
|
||||
• [33] Accessories
|
||||
• [34] Facial Hair
|
||||
• [35] Ties
|
||||
|
||||
[36]3 Ways to Wear a Henley Shirt
|
||||
[36] [lazy] [37]3 Ways to Wear a Henley Shirt [38] [lazy] [39]A Man’s Guide to
|
||||
the Oxford Shirt [40] [lazy] [41]Skill of the Week: Instantly Recognize a
|
||||
Quality Suit [42] [lazy] [43]How to Get the Stink Out of Synthetic Workout
|
||||
Shirts
|
||||
[44] [lazy] [45]Did Commandos Go Commando? [46] [lazy] [47]A Man’s Guide to
|
||||
Fragrance: How to Choose and Wear Cologne [48] [lazy] [49]My Go-To Sunglasses
|
||||
for Summer [50] [lazy] [51]How to Pick the Perfect Men’s Wedding Ring
|
||||
[52] [lazy] [53]Your No-Nonsense Guide to Choosing the Right Beard Style [54]
|
||||
[lazy] [55]How to Grow a Beard: The One and True Guide [56] [lazy] [57]Beard
|
||||
Oil FAQs: Answering All Your Pressing Beardly Questions [58] [lazy] [59]Beard
|
||||
Grooming 101: The Lowdown on Products and Routine
|
||||
[60] [lazy] [61]Skill of the Week: Tie a Scarf 5 Different Ways [62] * [63]How
|
||||
to Tie a Tie [64] [lazy] [65]Skill of the Week: Tie the Half-Windsor Necktie
|
||||
Knot [66] [lazy] [67]How to Match a Shirt and Tie
|
||||
|
||||
[37]A Man’s Guide to the Oxford Shirt
|
||||
[68]Browse all Get Style
|
||||
|
||||
[38]Skill of the Week: Instantly Recognize a Quality Suit
|
||||
• [69] Fitness
|
||||
• [70] Health
|
||||
• [71] Program Review
|
||||
|
||||
[39]How to Get the Stink Out of Synthetic Workout Shirts
|
||||
|
||||
[40]Did Commandos Go Commando?
|
||||
|
||||
[41]A Man’s Guide to Fragrance: How to Choose and Wear Cologne
|
||||
|
||||
[42]My Go-To Sunglasses for Summer
|
||||
|
||||
[43]How to Pick the Perfect Men’s Wedding Ring
|
||||
|
||||
[44]Your No-Nonsense Guide to Choosing the Right Beard Style
|
||||
|
||||
[45]How to Grow a Beard: The One and True Guide
|
||||
|
||||
[46]Beard Oil FAQs: Answering All Your Pressing Beardly Questions
|
||||
|
||||
[47]Beard Grooming 101: The Lowdown on Products and Routine
|
||||
|
||||
[48]Skill of the Week: Tie a Scarf 5 Different Ways
|
||||
|
||||
[49]How to Tie a Tie
|
||||
|
||||
[50]Skill of the Week: Tie the Half-Windsor Necktie Knot
|
||||
|
||||
[51]How to Match a Shirt and Tie
|
||||
|
||||
[52]Browse all Get Style
|
||||
* [53]Fitness
|
||||
* [54]Health
|
||||
* [55]Program Review
|
||||
|
||||
[56]Podcast #955: The Power of NEAT — Move a Little to Lose a Lot
|
||||
|
||||
[57]Podcast #767: Fat Loss Made Simple
|
||||
|
||||
[58]Legendary Bodybuilder Mike Mentzer’s Heavy Duty Method for Maximum
|
||||
Muscle Growth
|
||||
|
||||
[59]Podcast #939: What Lifting Ancient Stones Can Teach You About Being
|
||||
[72] [lazy] [73]Podcast #955: The Power of NEAT — Move a Little to Lose a Lot
|
||||
[74] [lazy] [75]Podcast #767: Fat Loss Made Simple [76] [lazy] [77]Legendary
|
||||
Bodybuilder Mike Mentzer’s Heavy Duty Method for Maximum Muscle Growth [78]
|
||||
[lazy] [79]Podcast #939: What Lifting Ancient Stones Can Teach You About Being
|
||||
a Man
|
||||
[80] [lazy] [81]What You Can Learn About Shedding Pounds From the Vacation
|
||||
Weight Loss Paradox [82] [lazy] [83]You Need to Eat More Fiber [84] [lazy] [85]
|
||||
Silencing the Ring: Proven Strategies for Tinnitus Relief [86] [lazy] [87]
|
||||
Podcast #947: Turn Your Anxiety Into a Strength
|
||||
[88] [lazy] [89]The Insanely Difficult Standards of History’s Hardest P.E.
|
||||
Program [90] [lazy] [91]Which Fitness Program Is Right for You? [92] [lazy]
|
||||
[93]A Review of the MovNat Workshop [94] [lazy] [95]Strengthen Your Tribe: A
|
||||
Report on the Atomic Athlete Vanguard
|
||||
|
||||
[60]What You Can Learn About Shedding Pounds From the Vacation Weight
|
||||
Loss Paradox
|
||||
[96]Browse all Get Strong
|
||||
|
||||
[61]You Need to Eat More Fiber
|
||||
• [97] Family
|
||||
• [98] Fatherhood
|
||||
• [99] Relationships
|
||||
• [100] Social Skills
|
||||
|
||||
[62]Silencing the Ring: Proven Strategies for Tinnitus Relief
|
||||
[101] [lazy] [102]Podcast #946: Counterintuitive Ideas About Marriage, Family,
|
||||
and Kids [103] [lazy] [104]The Best Riddles for Kids (With Answers!) [105]
|
||||
[lazy] [106]Podcast #858: The Affectionate, Ambiguous, and Surprisingly
|
||||
Ambivalent Relationship Between Siblings [107] [lazy] [108]How to Fight
|
||||
Entitlement and Develop Gratitude in Your Kids
|
||||
[109] [lazy] [110]How to Parent-Teacher Conference [111] [lazy] [112]5 Ways
|
||||
Fathers Hugely Influence Their Daughters [113] [lazy] [114]Sunday Firesides: We
|
||||
Shouldn’t (and Should) Be Friends With Our Kids [115] [lazy] [116]What to Do
|
||||
When Your Kid Lies to You
|
||||
[117] [lazy] [118]Sunday Firesides: Can We Finally Stop Blaming the Puritans?
|
||||
[119] [lazy] [120]Sunday Firesides: The Sit-in-Silence Relationship Test [121]
|
||||
[lazy] [122]Sunday Firesides: Treat People as Ends, Not Means [123] [lazy]
|
||||
[124]Podcast #919: Advice on Making Love Last . . . From a Divorce Lawyer
|
||||
[125] [lazy] [126]Podcast #957: How Curiosity Conversations Can Supercharge
|
||||
Your Success [127] [lazy] [128]Podcast #837: The Cues That Make You Charismatic
|
||||
[129] [lazy] [130]Podcast #938: Social Skills as the Road to Character [131]
|
||||
[lazy] [132]Podcast #915: Finally Learn to Say No
|
||||
|
||||
[63]Podcast #947: Turn Your Anxiety Into a Strength
|
||||
[133]Browse all Get Social
|
||||
|
||||
[64]The Insanely Difficult Standards of History’s Hardest P.E. Program
|
||||
• [134] How To
|
||||
• [135] Manly Know-How
|
||||
• [136] Outdoor/Survival
|
||||
|
||||
[65]Which Fitness Program Is Right for You?
|
||||
[137] [lazy] [138]Skill of the Week: Wrap a Gift [139] [lazy] [140]How to
|
||||
De-Ice Your Windshield Easily and Effectively [141] [lazy] [142]Skill of the
|
||||
Week: Paint a Room [143] [lazy] [144]Skill of the Week: Store and Stack
|
||||
Firewood
|
||||
[145] [lazy] [146]Skill of the Week: Build a Cozy Fireplace Fire (That Won’t
|
||||
Make Your House Smoky) [147] [lazy] [148]How to Adjust Your Car Mirrors to
|
||||
Eliminate Blind Spots [149] [lazy] [150]Skill of the Week: Throw a Perfect
|
||||
Football Spiral [151] [lazy] [152]What’s the Difference Between Gas Octanes?
|
||||
[153] [lazy] [154]Skill of the Week: How to Build a Quinzee Snow Shelter [155]
|
||||
[lazy] [156]Skill of the Week: Survive an Earthquake [157] [lazy] [158]Two
|
||||
Things You Should Be Doing to Take Better Care of Your Camping Gear [159]
|
||||
[lazy] [160]Skill of the Week: How to Emergency Rappel
|
||||
|
||||
[66]A Review of the MovNat Workshop
|
||||
[161]Browse all Get Skilled
|
||||
|
||||
[67]Strengthen Your Tribe: A Report on the Atomic Athlete Vanguard
|
||||
|
||||
[68]Browse all Get Strong
|
||||
* [69]Family
|
||||
* [70]Fatherhood
|
||||
* [71]Relationships
|
||||
* [72]Social Skills
|
||||
|
||||
[73]Podcast #946: Counterintuitive Ideas About Marriage, Family, and
|
||||
Kids
|
||||
|
||||
[74]The Best Riddles for Kids (With Answers!)
|
||||
|
||||
[75]Podcast #858: The Affectionate, Ambiguous, and Surprisingly
|
||||
Ambivalent Relationship Between Siblings
|
||||
|
||||
[76]How to Fight Entitlement and Develop Gratitude in Your Kids
|
||||
|
||||
[77]How to Parent-Teacher Conference
|
||||
|
||||
[78]5 Ways Fathers Hugely Influence Their Daughters
|
||||
|
||||
[79]Sunday Firesides: We Shouldn’t (and Should) Be Friends With Our
|
||||
Kids
|
||||
|
||||
[80]What to Do When Your Kid Lies to You
|
||||
|
||||
[81]Sunday Firesides: Can We Finally Stop Blaming the Puritans?
|
||||
|
||||
[82]Sunday Firesides: The Sit-in-Silence Relationship Test
|
||||
|
||||
[83]Sunday Firesides: Treat People as Ends, Not Means
|
||||
|
||||
[84]Podcast #919: Advice on Making Love Last . . . From a Divorce
|
||||
Lawyer
|
||||
|
||||
[85]Podcast #957: How Curiosity Conversations Can Supercharge Your
|
||||
Success
|
||||
|
||||
[86]Podcast #837: The Cues That Make You Charismatic
|
||||
|
||||
[87]Podcast #938: Social Skills as the Road to Character
|
||||
|
||||
[88]Podcast #915: Finally Learn to Say No
|
||||
|
||||
[89]Browse all Get Social
|
||||
* [90]How To
|
||||
* [91]Manly Know-How
|
||||
* [92]Outdoor/Survival
|
||||
|
||||
[93]Skill of the Week: Wrap a Gift
|
||||
|
||||
[94]How to De-Ice Your Windshield Easily and Effectively
|
||||
|
||||
[95]Skill of the Week: Paint a Room
|
||||
|
||||
[96]Skill of the Week: Store and Stack Firewood
|
||||
|
||||
[97]Skill of the Week: Build a Cozy Fireplace Fire (That Won’t Make
|
||||
Your House Smoky)
|
||||
|
||||
[98]How to Adjust Your Car Mirrors to Eliminate Blind Spots
|
||||
|
||||
[99]Skill of the Week: Throw a Perfect Football Spiral
|
||||
|
||||
[100]What’s the Difference Between Gas Octanes?
|
||||
|
||||
[101]Skill of the Week: How to Build a Quinzee Snow Shelter
|
||||
|
||||
[102]Skill of the Week: Survive an Earthquake
|
||||
|
||||
[103]Two Things You Should Be Doing to Take Better Care of Your Camping
|
||||
Gear
|
||||
|
||||
[104]Skill of the Week: How to Emergency Rappel
|
||||
|
||||
[105]Browse all Get Skilled
|
||||
|
||||
in: [106]Advice, [107]Character, [108]Sunday Firesides
|
||||
in: [167]Advice, [168]Character, [169]Sunday Firesides
|
||||
|
||||
Brett & Kate McKay • October 29, 2022
|
||||
|
||||
Sunday Firesides: To-Dos, the Rent We Pay For Living
|
||||
|
||||
You probably brushed your teeth this morning. And will do so tonight.
|
||||
And 730 more times in the year to come.
|
||||
[To-Dos-Rent-for-Living-3]
|
||||
|
||||
As soon as the last load of laundry is folded, it’s time to put in
|
||||
another wash. As soon as you’re done eating and cleaning up one meal,
|
||||
it’s time to start making the next.
|
||||
[170] [171] [172] [173] [174]
|
||||
|
||||
There is a constantly replenishing supply of new texts and emails to
|
||||
answer, bills to pay, stuff to buy, bookings to make, forms to fill
|
||||
out.
|
||||
You probably brushed your teeth this morning. And will do so tonight. And 730
|
||||
more times in the year to come.
|
||||
|
||||
As soon as the last load of laundry is folded, it’s time to put in another
|
||||
wash. As soon as you’re done eating and cleaning up one meal, it’s time to
|
||||
start making the next.
|
||||
|
||||
There is a constantly replenishing supply of new texts and emails to answer,
|
||||
bills to pay, stuff to buy, bookings to make, forms to fill out.
|
||||
|
||||
Whenever you cross one to-do off the list, you add a couple more on.
|
||||
|
||||
Whatever you did the day before, you have to wake up and do it all over
|
||||
again.
|
||||
Whatever you did the day before, you have to wake up and do it all over again.
|
||||
|
||||
The relentless slog of life’s maintenance work can feel tiresome,
|
||||
burdensome, annoying.
|
||||
The relentless slog of life’s maintenance work can feel tiresome, burdensome,
|
||||
annoying.
|
||||
|
||||
It can feel like you’re Sisyphus, pushing a boulder up a hill, only to
|
||||
have it roll back down, ready to be pushed up once more.
|
||||
It can feel like you’re Sisyphus, pushing a boulder up a hill, only to have it
|
||||
roll back down, ready to be pushed up once more.
|
||||
|
||||
Yet we should be glad to continually find this boulder resting at our
|
||||
feet.
|
||||
Yet we should be glad to continually find this boulder resting at our feet.
|
||||
|
||||
Drudgery and chores are the rent we pay for living.
|
||||
|
||||
@@ -218,333 +157,319 @@
|
||||
|
||||
A ticket to continue to ride.
|
||||
|
||||
To-dos keep our world spinning, and signal that we continue to exist on
|
||||
a spinning world.
|
||||
To-dos keep our world spinning, and signal that we continue to exist on a
|
||||
spinning world.
|
||||
|
||||
We ought then to appreciate having one more task-filled day before
|
||||
there comes a knock on the door from a sickle-carrying landlord,
|
||||
bearing an eviction notice in hand.
|
||||
We ought then to appreciate having one more task-filled day before there comes
|
||||
a knock on the door from a sickle-carrying landlord, bearing an eviction notice
|
||||
in hand.
|
||||
|
||||
Yes, we should be very glad indeed to have a full list of to-dos before
|
||||
us. Because the only solution for clearing your slate of all unfinished
|
||||
business, lies six feet underground.
|
||||
Yes, we should be very glad indeed to have a full list of to-dos before us.
|
||||
Because the only solution for clearing your slate of all unfinished business,
|
||||
lies six feet underground.
|
||||
|
||||
Related Posts
|
||||
|
||||
* [109]Sunday Firesides: Stop Living Life "Paycheck to Paycheck"
|
||||
* [110]Sunday Firesides: Yours Sincerely
|
||||
* [111]Sunday Firesides: Love Endures
|
||||
* [112]Sunday Firesides: Die Red
|
||||
* [113]Sunday Firesides: Dependence to Independence
|
||||
* [114]Sunday Firesides: Relationships Over Willpower
|
||||
|
||||
[115]Previous [116]Next
|
||||
• [175][paycheck]
|
||||
[176]Sunday Firesides: Stop Living Life "Paycheck to Paycheck"
|
||||
• [177][sincerely-feat]
|
||||
[178]Sunday Firesides: Yours Sincerely
|
||||
• [179][Love-Endures-BLANK]
|
||||
[180]Sunday Firesides: Love Endures
|
||||
• [181][Die-Red-Header-BLANK]
|
||||
[182]Sunday Firesides: Die Red
|
||||
• [183][baby-fireside]
|
||||
[184]Sunday Firesides: Dependence to Independence
|
||||
• [185][rel-feat]
|
||||
[186]Sunday Firesides: Relationships Over Willpower
|
||||
|
||||
[187] Previous [188]Next
|
||||
document
|
||||
|
||||
Never miss an update
|
||||
|
||||
Subscribe to the AoM Newsletter
|
||||
____________________
|
||||
____________________
|
||||
Daily [ ] Weekly [ ]
|
||||
I agree to the [117]privacy policy terms. [ ]
|
||||
Subscribe
|
||||
|
||||
teddy teddy icon
|
||||
|
||||
[189][ ]
|
||||
[190][ ]
|
||||
Daily [191][ ] Weekly [192][ ]
|
||||
I agree to the [193]privacy policy terms. [194][ ]
|
||||
[196][Subscribe]
|
||||
Want to start taking action on the content you read on AoM?
|
||||
[118]Join the Strenuous Life
|
||||
[119]Learn More
|
||||
|
||||
[197]Join the Strenuous Life
|
||||
[198]Learn More
|
||||
document
|
||||
|
||||
Never miss an update
|
||||
|
||||
Subscribe to the AoM Newsletter
|
||||
____________________
|
||||
____________________
|
||||
Daily [ ] Weekly [ ]
|
||||
I agree to the [120]privacy policy terms. [ ]
|
||||
Subscribe
|
||||
|
||||
podcast
|
||||
[199][ ]
|
||||
[200][ ]
|
||||
Daily [201][ ] Weekly [202][ ]
|
||||
I agree to the [203]privacy policy terms. [204][ ]
|
||||
[206][Subscribe]
|
||||
podcast [207] podcast icon [208] Podcast #959
|
||||
|
||||
[121]podcast icon
|
||||
Come Alive Again by Having More Fun
|
||||
|
||||
[122]Podcast #958
|
||||
[209] podcast icon [210] Podcast #958
|
||||
|
||||
An Insider’s Guide to the Rise of the American Mafia
|
||||
|
||||
[123]podcast icon
|
||||
|
||||
[124]Podcast #957
|
||||
[211] podcast icon [212] Podcast #957
|
||||
|
||||
How Curiosity Conversations Can Supercharge Your Success
|
||||
|
||||
[125]podcast icon
|
||||
|
||||
[126]Podcast #956
|
||||
[213] podcast icon [214] Podcast #956
|
||||
|
||||
Feeling Depressed and Discombobulated? Social Acceleration May Be to Blame
|
||||
|
||||
[127]podcast icon
|
||||
|
||||
[128]Podcast #955
|
||||
|
||||
The Power of NEAT — Move a Little to Lose a Lot
|
||||
|
||||
[129]View all
|
||||
[215]View all
|
||||
|
||||
Related
|
||||
|
||||
Articles///
|
||||
[130]
|
||||
|
||||
[216]
|
||||
|
||||
Podcast #958: An Insider’s Guide to the Rise of the American Mafia
|
||||
|
||||
[131]
|
||||
[217]
|
||||
|
||||
Sunday Firesides: First Day, Worst Day
|
||||
|
||||
[132]
|
||||
[218]
|
||||
|
||||
Rage, Rage Against the Dying Back of the Brain
|
||||
|
||||
[133]
|
||||
[219]
|
||||
|
||||
Podcast #956: Feeling Depressed and Discombobulated? Social Acceleration May
|
||||
Be to Blame
|
||||
Podcast #956: Feeling Depressed and Discombobulated? Social Acceleration May Be
|
||||
to Blame
|
||||
|
||||
[134]View all
|
||||
[220]View all
|
||||
|
||||
Get Daily Updates
|
||||
[135]Text MANLY to (918) 393-3049
|
||||
|
||||
[221]Text MANLY to (918) 393-3049
|
||||
The Art of Manliness
|
||||
Copyright © 2024 All Rights Reserved
|
||||
|
||||
* [136]Contact
|
||||
* [137]Legal
|
||||
* [138]About
|
||||
* [139]All Topics
|
||||
* [140]Archives
|
||||
• [222]Contact
|
||||
• [223]Legal
|
||||
• [224]About
|
||||
• [225]All Topics
|
||||
• [226]Archives
|
||||
|
||||
The Art of Manliness participates in affiliate marketing programs,
|
||||
which means we get paid commissions on editorially chosen products
|
||||
purchased through our links. We only recommend products we genuinely
|
||||
like, and purchases made through our links support our mission and the
|
||||
free content we publish here on AoM.
|
||||
The Art of Manliness participates in affiliate marketing programs, which means
|
||||
we get paid commissions on editorially chosen products purchased through our
|
||||
links. We only recommend products we genuinely like, and purchases made through
|
||||
our links support our mission and the free content we publish here on AoM.
|
||||
|
||||
References
|
||||
|
||||
Visible links:
|
||||
1. https://www.artofmanliness.com/app-json/wp/v2/posts/173682
|
||||
2. https://www.artofmanliness.com/app-json/oembed/1.0/embed?url=https://www.artofmanliness.com/character/advice/sunday-firesides-to-dos-the-rent-we-pay-for-living/
|
||||
3. https://www.artofmanliness.com/app-json/oembed/1.0/embed?url=https://www.artofmanliness.com/character/advice/sunday-firesides-to-dos-the-rent-we-pay-for-living/&format=xml
|
||||
4. https://www.googletagmanager.com/ns.html?id=GTM-KXJGHMC
|
||||
5. https://www.artofmanliness.com/
|
||||
6. https://www.artofmanliness.com/podcast
|
||||
7. https://www.artofmanliness.com/style/
|
||||
8. https://www.artofmanliness.com/style/clothing/
|
||||
9. https://www.artofmanliness.com/style/accessories/
|
||||
10. https://www.artofmanliness.com/style/facial-hair/
|
||||
11. https://www.artofmanliness.com/style/ties/
|
||||
12. https://www.artofmanliness.com/health-fitness/
|
||||
13. https://www.artofmanliness.com/health-fitness/fitness/
|
||||
14. https://www.artofmanliness.com/health-fitness/health/
|
||||
15. https://www.artofmanliness.com/health-fitness/program-review/
|
||||
16. https://www.artofmanliness.com/people/
|
||||
17. https://www.artofmanliness.com/people/family/
|
||||
18. https://www.artofmanliness.com/people/fatherhood/
|
||||
19. https://www.artofmanliness.com/people/relationships/
|
||||
20. https://www.artofmanliness.com/people/social-skills/
|
||||
21. https://www.artofmanliness.com/skills/
|
||||
22. https://www.artofmanliness.com/skills/how-to/
|
||||
23. https://www.artofmanliness.com/skills/manly-know-how/
|
||||
24. https://www.artofmanliness.com/skills/outdoor-survival/
|
||||
25. https://www.artofmanliness.com/podcast/
|
||||
26. https://store.artofmanliness.com/collections/books/
|
||||
27. https://www.instagram.com/artofmanliness/
|
||||
28. https://feedly.com/i/subscription/feed/http://feeds2.feedburner.com/TheArtOfManliness
|
||||
29. https://www.facebook.com/artofmanliness/
|
||||
30. https://twitter.com/artofmanliness
|
||||
31. https://www.youtube.com/user/artofmanliness
|
||||
32. https://www.artofmanliness.com/style/clothing/
|
||||
33. https://www.artofmanliness.com/style/accessories/
|
||||
34. https://www.artofmanliness.com/style/facial-hair/
|
||||
35. https://www.artofmanliness.com/style/ties/
|
||||
36. https://www.artofmanliness.com/style/clothing/3-ways-to-wear-a-henley-shirt/
|
||||
37. https://www.artofmanliness.com/style/clothing/a-mans-guide-to-the-oxford-shirt/
|
||||
38. https://www.artofmanliness.com/style/clothing/30-second-suit-quality-test/
|
||||
39. https://www.artofmanliness.com/style/clothing/how-to-get-the-stink-out-of-workout-shirts/
|
||||
40. https://www.artofmanliness.com/style/did-commandos-go-commando/
|
||||
41. https://www.artofmanliness.com/style/accessories/guide-to-fragrance/
|
||||
42. https://www.artofmanliness.com/style/accessories/huckberry-weekender-sunglasses/
|
||||
43. https://www.artofmanliness.com/style/accessories/how-to-pick-mens-wedding-ring/
|
||||
44. https://www.artofmanliness.com/style/facial-hair/your-no-nonsense-guide-to-choosing-the-right-beard-style/
|
||||
45. https://www.artofmanliness.com/style/facial-hair/growing-a-manly-beard/
|
||||
46. https://www.artofmanliness.com/style/facial-hair/beard-oil-faq/
|
||||
47. https://www.artofmanliness.com/style/facial-hair/beard-grooming-products-routine/
|
||||
48. https://www.artofmanliness.com/style/ties/5-ways-to-tie-a-scarf-your-60-second-visual-guide/
|
||||
49. https://www.artofmanliness.com/style/ties/how-to-tie-a-tie/
|
||||
50. https://www.artofmanliness.com/style/ties/how-to-tie-a-half-windsor-knot/
|
||||
51. https://www.artofmanliness.com/style/ties/how-to-match-a-shirt-and-tie/
|
||||
52. https://www.artofmanliness.com/style/
|
||||
53. https://www.artofmanliness.com/health-fitness/fitness/
|
||||
54. https://www.artofmanliness.com/health-fitness/health/
|
||||
55. https://www.artofmanliness.com/health-fitness/program-review/
|
||||
56. https://www.artofmanliness.com/health-fitness/fitness/podcast-955-the-power-of-neat-move-a-little-to-lose-a-lot/
|
||||
57. https://www.artofmanliness.com/health-fitness/fitness/podcast-767-fat-loss-made-simple/
|
||||
58. https://www.artofmanliness.com/health-fitness/fitness/mike-mentzer-heavy-duty/
|
||||
59. https://www.artofmanliness.com/health-fitness/fitness/podcast-939-what-lifting-ancient-stones-can-teach-you-about-being-a-man/
|
||||
60. https://www.artofmanliness.com/health-fitness/health/what-you-can-learn-about-shedding-pounds-from-the-vacation-weight-loss-paradox/
|
||||
61. https://www.artofmanliness.com/health-fitness/health/you-need-to-eat-more-fiber/
|
||||
62. https://www.artofmanliness.com/health-fitness/health/silencing-the-ring-proven-strategies-for-tinnitus-relief/
|
||||
63. https://www.artofmanliness.com/health-fitness/health/podcast-947-turn-your-anxiety-into-a-strength/
|
||||
64. https://www.artofmanliness.com/health-fitness/program-review/the-insanely-difficult-standards-of-historys-hardest-p-e-program/
|
||||
65. https://www.artofmanliness.com/health-fitness/program-review/fitness-program-right/
|
||||
66. https://www.artofmanliness.com/health-fitness/program-review/a-review-of-the-movnat-workshop/
|
||||
67. https://www.artofmanliness.com/health-fitness/program-review/atomic-athlete-vanguard/
|
||||
68. https://www.artofmanliness.com/health-fitness/
|
||||
69. https://www.artofmanliness.com/people/family/
|
||||
70. https://www.artofmanliness.com/people/fatherhood/
|
||||
71. https://www.artofmanliness.com/people/relationships/
|
||||
72. https://www.artofmanliness.com/people/social-skills/
|
||||
73. https://www.artofmanliness.com/people/family/podcast-946-counterintuitive-ideas-about-marriage-family-and-kids/
|
||||
74. https://www.artofmanliness.com/people/family/riddles-for-kids/
|
||||
75. https://www.artofmanliness.com/people/family/podcast-sibling-ambivalent/
|
||||
76. https://www.artofmanliness.com/people/family/how-to-develop-gratitude-in-your-kids/
|
||||
77. https://www.artofmanliness.com/people/fatherhood/how-to-parent-teacher-conference/
|
||||
78. https://www.artofmanliness.com/people/fatherhood/5-ways-fathers-hugely-influence-on-their-daughters/
|
||||
79. https://www.artofmanliness.com/people/fatherhood/sunday-firesides-we-shouldnt-and-should-be-friends-with-our-kids/
|
||||
80. https://www.artofmanliness.com/people/fatherhood/what-to-do-when-your-kid-lies-to-you/
|
||||
81. https://www.artofmanliness.com/people/relationships/sunday-firesides-can-we-finally-stop-blaming-the-puritans/
|
||||
82. https://www.artofmanliness.com/people/relationships/sunday-firesides-the-sit-in-silence-relationship-test/
|
||||
83. https://www.artofmanliness.com/people/relationships/sunday-firesides-treat-people-as-ends-not-means/
|
||||
84. https://www.artofmanliness.com/people/relationships/podcast-920-advice-on-making-love-last-from-a-divorce-lawyer/
|
||||
85. https://www.artofmanliness.com/people/social-skills/podcast-957-how-curiosity-conversations-can-supercharge-your-success/
|
||||
86. https://www.artofmanliness.com/people/social-skills/podcast-837-the-cues-that-make-you-charismatic/
|
||||
87. https://www.artofmanliness.com/people/social-skills/podcast-938-social-skills-as-the-road-to-character/
|
||||
88. https://www.artofmanliness.com/people/social-skills/podcast-915-finally-learn-to-say-no/
|
||||
89. https://www.artofmanliness.com/people/
|
||||
90. https://www.artofmanliness.com/skills/how-to/
|
||||
91. https://www.artofmanliness.com/skills/manly-know-how/
|
||||
92. https://www.artofmanliness.com/skills/outdoor-survival/
|
||||
93. https://www.artofmanliness.com/skills/how-to/how-to-wrap-a-gift-an-illustrated-guide/
|
||||
94. https://www.artofmanliness.com/skills/how-to/how-to-de-ice-your-windshield-easily-and-effectively/
|
||||
95. https://www.artofmanliness.com/skills/how-to/how-to-paint-a-room/
|
||||
96. https://www.artofmanliness.com/skills/how-to/store-stack-firewood/
|
||||
97. https://www.artofmanliness.com/skills/manly-know-how/build-cozy-fireplace-fire-wont-get-smoky/
|
||||
98. https://www.artofmanliness.com/skills/manly-know-how/how-to-adjust-your-car-mirrors-to-eliminate-blind-spots/
|
||||
99. https://www.artofmanliness.com/skills/manly-know-how/how-throw-a-spiral-football/
|
||||
100. https://www.artofmanliness.com/skills/manly-know-how/whats-the-difference-between-gas-octanes/
|
||||
101. https://www.artofmanliness.com/skills/outdoor-survival/how-to-build-a-quinzee-snow-shelter-illustrated-guide/
|
||||
102. https://www.artofmanliness.com/skills/outdoor-survival/how-to-survive-an-earthquake/
|
||||
103. https://www.artofmanliness.com/skills/outdoor-survival/two-things-you-should-be-doing-to-take-better-care-of-your-camping-gear/
|
||||
104. https://www.artofmanliness.com/skills/outdoor-survival/how-to-emergency-rappel/
|
||||
105. https://www.artofmanliness.com/skills/
|
||||
106. https://www.artofmanliness.com/character/advice/
|
||||
107. https://www.artofmanliness.com/character/
|
||||
108. https://www.artofmanliness.com/sunday-firesides/
|
||||
109. https://www.artofmanliness.com/character/advice/sunday-firesides-stop-living-life-paycheck-to-paycheck/
|
||||
110. https://www.artofmanliness.com/character/advice/sunday-firesides-yours-sincerely/
|
||||
111. https://www.artofmanliness.com/character/advice/sunday-firesides-love-endures/
|
||||
112. https://www.artofmanliness.com/character/advice/sunday-firesides-die-red/
|
||||
113. https://www.artofmanliness.com/character/advice/sunday-firesides-dependence-to-independence/
|
||||
114. https://www.artofmanliness.com/people/relationships/sunday-firesides-relationships-over-willpower/
|
||||
115. https://www.artofmanliness.com/career-wealth/career/you-are-kind-of-your-job/
|
||||
116. https://www.artofmanliness.com/character/manly-lessons/men-without-chests/
|
||||
117. https://www.artofmanliness.com/character/advice/sunday-firesides-to-dos-the-rent-we-pay-for-living/
|
||||
118. https://strenuouslife.co/
|
||||
119. https://strenuouslife.co/
|
||||
120. https://www.artofmanliness.com/character/advice/sunday-firesides-to-dos-the-rent-we-pay-for-living/
|
||||
121. https://www.artofmanliness.com/character/knowledge-of-men/podcast-958-an-insiders-guide-to-the-rise-of-the-american-mafia/
|
||||
122. https://www.artofmanliness.com/character/knowledge-of-men/podcast-958-an-insiders-guide-to-the-rise-of-the-american-mafia/
|
||||
123. https://www.artofmanliness.com/people/social-skills/podcast-957-how-curiosity-conversations-can-supercharge-your-success/
|
||||
124. https://www.artofmanliness.com/people/social-skills/podcast-957-how-curiosity-conversations-can-supercharge-your-success/
|
||||
125. https://www.artofmanliness.com/character/behavior/podcast-956-feeling-depressed-and-discombobulated-social-acceleration-may-be-to-blame/
|
||||
126. https://www.artofmanliness.com/character/behavior/podcast-956-feeling-depressed-and-discombobulated-social-acceleration-may-be-to-blame/
|
||||
127. https://www.artofmanliness.com/health-fitness/fitness/podcast-955-the-power-of-neat-move-a-little-to-lose-a-lot/
|
||||
128. https://www.artofmanliness.com/health-fitness/fitness/podcast-955-the-power-of-neat-move-a-little-to-lose-a-lot/
|
||||
129. https://www.artofmanliness.com/podcast/
|
||||
130. https://www.artofmanliness.com/character/knowledge-of-men/podcast-958-an-insiders-guide-to-the-rise-of-the-american-mafia/
|
||||
131. https://www.artofmanliness.com/character/advice/sunday-firesides-first-day-worst-day/
|
||||
132. https://www.artofmanliness.com/character/knowledge-of-men/rage-rage-against-the-dying-back-of-the-brain/
|
||||
133. https://www.artofmanliness.com/character/behavior/podcast-956-feeling-depressed-and-discombobulated-social-acceleration-may-be-to-blame/
|
||||
134. https://www.artofmanliness.com/character/advice/
|
||||
135. https://my.community.com/artofmanliness?t=manly
|
||||
136. https://www.artofmanliness.com/contact/
|
||||
137. https://www.artofmanliness.com/privacy-policy/
|
||||
138. https://www.artofmanliness.com/about-2/
|
||||
139. https://www.artofmanliness.com/all-topics/
|
||||
140. https://www.artofmanliness.com/archives/
|
||||
References:
|
||||
|
||||
Hidden links:
|
||||
142. https://www.artofmanliness.com/style/clothing/3-ways-to-wear-a-henley-shirt/
|
||||
143. https://www.artofmanliness.com/style/clothing/a-mans-guide-to-the-oxford-shirt/
|
||||
144. https://www.artofmanliness.com/style/clothing/30-second-suit-quality-test/
|
||||
145. https://www.artofmanliness.com/style/clothing/how-to-get-the-stink-out-of-workout-shirts/
|
||||
146. https://www.artofmanliness.com/style/did-commandos-go-commando/
|
||||
147. https://www.artofmanliness.com/style/accessories/guide-to-fragrance/
|
||||
148. https://www.artofmanliness.com/style/accessories/huckberry-weekender-sunglasses/
|
||||
149. https://www.artofmanliness.com/style/accessories/how-to-pick-mens-wedding-ring/
|
||||
150. https://www.artofmanliness.com/style/facial-hair/your-no-nonsense-guide-to-choosing-the-right-beard-style/
|
||||
151. https://www.artofmanliness.com/style/facial-hair/growing-a-manly-beard/
|
||||
152. https://www.artofmanliness.com/style/facial-hair/beard-oil-faq/
|
||||
153. https://www.artofmanliness.com/style/facial-hair/beard-grooming-products-routine/
|
||||
154. https://www.artofmanliness.com/style/ties/5-ways-to-tie-a-scarf-your-60-second-visual-guide/
|
||||
155. https://www.artofmanliness.com/style/ties/how-to-tie-a-tie/
|
||||
156. https://www.artofmanliness.com/style/ties/how-to-tie-a-half-windsor-knot/
|
||||
157. https://www.artofmanliness.com/style/ties/how-to-match-a-shirt-and-tie/
|
||||
158. https://www.artofmanliness.com/health-fitness/fitness/podcast-955-the-power-of-neat-move-a-little-to-lose-a-lot/
|
||||
159. https://www.artofmanliness.com/health-fitness/fitness/podcast-767-fat-loss-made-simple/
|
||||
160. https://www.artofmanliness.com/health-fitness/fitness/mike-mentzer-heavy-duty/
|
||||
161. https://www.artofmanliness.com/health-fitness/fitness/podcast-939-what-lifting-ancient-stones-can-teach-you-about-being-a-man/
|
||||
162. https://www.artofmanliness.com/health-fitness/health/what-you-can-learn-about-shedding-pounds-from-the-vacation-weight-loss-paradox/
|
||||
163. https://www.artofmanliness.com/health-fitness/health/you-need-to-eat-more-fiber/
|
||||
164. https://www.artofmanliness.com/health-fitness/health/silencing-the-ring-proven-strategies-for-tinnitus-relief/
|
||||
165. https://www.artofmanliness.com/health-fitness/health/podcast-947-turn-your-anxiety-into-a-strength/
|
||||
166. https://www.artofmanliness.com/health-fitness/program-review/the-insanely-difficult-standards-of-historys-hardest-p-e-program/
|
||||
167. https://www.artofmanliness.com/health-fitness/program-review/fitness-program-right/
|
||||
168. https://www.artofmanliness.com/health-fitness/program-review/a-review-of-the-movnat-workshop/
|
||||
169. https://www.artofmanliness.com/health-fitness/program-review/atomic-athlete-vanguard/
|
||||
170. https://www.artofmanliness.com/people/family/podcast-946-counterintuitive-ideas-about-marriage-family-and-kids/
|
||||
171. https://www.artofmanliness.com/people/family/riddles-for-kids/
|
||||
172. https://www.artofmanliness.com/people/family/podcast-sibling-ambivalent/
|
||||
173. https://www.artofmanliness.com/people/family/how-to-develop-gratitude-in-your-kids/
|
||||
174. https://www.artofmanliness.com/people/fatherhood/how-to-parent-teacher-conference/
|
||||
175. https://www.artofmanliness.com/people/fatherhood/5-ways-fathers-hugely-influence-on-their-daughters/
|
||||
176. https://www.artofmanliness.com/people/fatherhood/sunday-firesides-we-shouldnt-and-should-be-friends-with-our-kids/
|
||||
177. https://www.artofmanliness.com/people/fatherhood/what-to-do-when-your-kid-lies-to-you/
|
||||
178. https://www.artofmanliness.com/people/relationships/sunday-firesides-can-we-finally-stop-blaming-the-puritans/
|
||||
179. https://www.artofmanliness.com/people/relationships/sunday-firesides-the-sit-in-silence-relationship-test/
|
||||
180. https://www.artofmanliness.com/people/relationships/sunday-firesides-treat-people-as-ends-not-means/
|
||||
181. https://www.artofmanliness.com/people/relationships/podcast-920-advice-on-making-love-last-from-a-divorce-lawyer/
|
||||
182. https://www.artofmanliness.com/people/social-skills/podcast-957-how-curiosity-conversations-can-supercharge-your-success/
|
||||
183. https://www.artofmanliness.com/people/social-skills/podcast-837-the-cues-that-make-you-charismatic/
|
||||
184. https://www.artofmanliness.com/people/social-skills/podcast-938-social-skills-as-the-road-to-character/
|
||||
185. https://www.artofmanliness.com/people/social-skills/podcast-915-finally-learn-to-say-no/
|
||||
186. https://www.artofmanliness.com/skills/how-to/how-to-wrap-a-gift-an-illustrated-guide/
|
||||
187. https://www.artofmanliness.com/skills/how-to/how-to-de-ice-your-windshield-easily-and-effectively/
|
||||
188. https://www.artofmanliness.com/skills/how-to/how-to-paint-a-room/
|
||||
189. https://www.artofmanliness.com/skills/how-to/store-stack-firewood/
|
||||
190. https://www.artofmanliness.com/skills/manly-know-how/build-cozy-fireplace-fire-wont-get-smoky/
|
||||
191. https://www.artofmanliness.com/skills/manly-know-how/how-to-adjust-your-car-mirrors-to-eliminate-blind-spots/
|
||||
192. https://www.artofmanliness.com/skills/manly-know-how/how-throw-a-spiral-football/
|
||||
193. https://www.artofmanliness.com/skills/manly-know-how/whats-the-difference-between-gas-octanes/
|
||||
194. https://www.artofmanliness.com/skills/outdoor-survival/how-to-build-a-quinzee-snow-shelter-illustrated-guide/
|
||||
195. https://www.artofmanliness.com/skills/outdoor-survival/how-to-survive-an-earthquake/
|
||||
196. https://www.artofmanliness.com/skills/outdoor-survival/two-things-you-should-be-doing-to-take-better-care-of-your-camping-gear/
|
||||
197. https://www.artofmanliness.com/skills/outdoor-survival/how-to-emergency-rappel/
|
||||
198. https://getpocket.com/edit?url=https://www.artofmanliness.com/character/advice/sunday-firesides-to-dos-the-rent-we-pay-for-living/
|
||||
199. https://www.facebook.com/sharer.php?u=https://www.artofmanliness.com/character/advice/sunday-firesides-to-dos-the-rent-we-pay-for-living/
|
||||
200. https://pinterest.com/pin/create/link/?url=https://www.artofmanliness.com/character/advice/sunday-firesides-to-dos-the-rent-we-pay-for-living/
|
||||
201. https://twitter.com/intent/tweet?url=https://www.artofmanliness.com/character/advice/sunday-firesides-to-dos-the-rent-we-pay-for-living/
|
||||
202. https://www.artofmanliness.com/cdn-cgi/l/email-protection#3f005d505b4602574b4b4f4c051010484848115e4d4b5059525e515356515a4c4c115c5052105c575e4d5e5c4b5a4d105e5b49565c5a104c4a515b5e461259564d5a4c565b5a4c124b50125b504c124b575a124d5a514b12485a124f5e461259504d1253564956515810
|
||||
203. https://www.artofmanliness.com/character/advice/sunday-firesides-stop-living-life-paycheck-to-paycheck/
|
||||
204. https://www.artofmanliness.com/character/advice/sunday-firesides-yours-sincerely/
|
||||
205. https://www.artofmanliness.com/character/advice/sunday-firesides-love-endures/
|
||||
206. https://www.artofmanliness.com/character/advice/sunday-firesides-die-red/
|
||||
207. https://www.artofmanliness.com/character/advice/sunday-firesides-dependence-to-independence/
|
||||
208. https://www.artofmanliness.com/people/relationships/sunday-firesides-relationships-over-willpower/
|
||||
[1] https://www.artofmanliness.com/
|
||||
[2] https://www.artofmanliness.com/podcast
|
||||
[5] https://www.artofmanliness.com/style/
|
||||
[6] https://www.artofmanliness.com/style/clothing/
|
||||
[7] https://www.artofmanliness.com/style/accessories/
|
||||
[8] https://www.artofmanliness.com/style/facial-hair/
|
||||
[9] https://www.artofmanliness.com/style/ties/
|
||||
[10] https://www.artofmanliness.com/health-fitness/
|
||||
[11] https://www.artofmanliness.com/health-fitness/fitness/
|
||||
[12] https://www.artofmanliness.com/health-fitness/health/
|
||||
[13] https://www.artofmanliness.com/health-fitness/program-review/
|
||||
[14] https://www.artofmanliness.com/people/
|
||||
[15] https://www.artofmanliness.com/people/family/
|
||||
[16] https://www.artofmanliness.com/people/fatherhood/
|
||||
[17] https://www.artofmanliness.com/people/relationships/
|
||||
[18] https://www.artofmanliness.com/people/social-skills/
|
||||
[19] https://www.artofmanliness.com/skills/
|
||||
[20] https://www.artofmanliness.com/skills/how-to/
|
||||
[21] https://www.artofmanliness.com/skills/manly-know-how/
|
||||
[22] https://www.artofmanliness.com/skills/outdoor-survival/
|
||||
[23] https://www.artofmanliness.com/podcast/
|
||||
[24] https://store.artofmanliness.com/collections/books/
|
||||
[25] https://www.instagram.com/artofmanliness/
|
||||
[26] https://feedly.com/i/subscription/feed/http%3A//feeds2.feedburner.com/TheArtOfManliness
|
||||
[27] https://www.facebook.com/artofmanliness/
|
||||
[28] https://twitter.com/artofmanliness
|
||||
[29] https://www.youtube.com/user/artofmanliness
|
||||
[32] https://www.artofmanliness.com/style/clothing/
|
||||
[33] https://www.artofmanliness.com/style/accessories/
|
||||
[34] https://www.artofmanliness.com/style/facial-hair/
|
||||
[35] https://www.artofmanliness.com/style/ties/
|
||||
[36] https://www.artofmanliness.com/style/clothing/3-ways-to-wear-a-henley-shirt/
|
||||
[37] https://www.artofmanliness.com/style/clothing/3-ways-to-wear-a-henley-shirt/
|
||||
[38] https://www.artofmanliness.com/style/clothing/a-mans-guide-to-the-oxford-shirt/
|
||||
[39] https://www.artofmanliness.com/style/clothing/a-mans-guide-to-the-oxford-shirt/
|
||||
[40] https://www.artofmanliness.com/style/clothing/30-second-suit-quality-test/
|
||||
[41] https://www.artofmanliness.com/style/clothing/30-second-suit-quality-test/
|
||||
[42] https://www.artofmanliness.com/style/clothing/how-to-get-the-stink-out-of-workout-shirts/
|
||||
[43] https://www.artofmanliness.com/style/clothing/how-to-get-the-stink-out-of-workout-shirts/
|
||||
[44] https://www.artofmanliness.com/style/did-commandos-go-commando/
|
||||
[45] https://www.artofmanliness.com/style/did-commandos-go-commando/
|
||||
[46] https://www.artofmanliness.com/style/accessories/guide-to-fragrance/
|
||||
[47] https://www.artofmanliness.com/style/accessories/guide-to-fragrance/
|
||||
[48] https://www.artofmanliness.com/style/accessories/huckberry-weekender-sunglasses/
|
||||
[49] https://www.artofmanliness.com/style/accessories/huckberry-weekender-sunglasses/
|
||||
[50] https://www.artofmanliness.com/style/accessories/how-to-pick-mens-wedding-ring/
|
||||
[51] https://www.artofmanliness.com/style/accessories/how-to-pick-mens-wedding-ring/
|
||||
[52] https://www.artofmanliness.com/style/facial-hair/your-no-nonsense-guide-to-choosing-the-right-beard-style/
|
||||
[53] https://www.artofmanliness.com/style/facial-hair/your-no-nonsense-guide-to-choosing-the-right-beard-style/
|
||||
[54] https://www.artofmanliness.com/style/facial-hair/growing-a-manly-beard/
|
||||
[55] https://www.artofmanliness.com/style/facial-hair/growing-a-manly-beard/
|
||||
[56] https://www.artofmanliness.com/style/facial-hair/beard-oil-faq/
|
||||
[57] https://www.artofmanliness.com/style/facial-hair/beard-oil-faq/
|
||||
[58] https://www.artofmanliness.com/style/facial-hair/beard-grooming-products-routine/
|
||||
[59] https://www.artofmanliness.com/style/facial-hair/beard-grooming-products-routine/
|
||||
[60] https://www.artofmanliness.com/style/ties/5-ways-to-tie-a-scarf-your-60-second-visual-guide/
|
||||
[61] https://www.artofmanliness.com/style/ties/5-ways-to-tie-a-scarf-your-60-second-visual-guide/
|
||||
[62] https://www.artofmanliness.com/style/ties/how-to-tie-a-tie/
|
||||
[63] https://www.artofmanliness.com/style/ties/how-to-tie-a-tie/
|
||||
[64] https://www.artofmanliness.com/style/ties/how-to-tie-a-half-windsor-knot/
|
||||
[65] https://www.artofmanliness.com/style/ties/how-to-tie-a-half-windsor-knot/
|
||||
[66] https://www.artofmanliness.com/style/ties/how-to-match-a-shirt-and-tie/
|
||||
[67] https://www.artofmanliness.com/style/ties/how-to-match-a-shirt-and-tie/
|
||||
[68] https://www.artofmanliness.com/style/
|
||||
[69] https://www.artofmanliness.com/health-fitness/fitness/
|
||||
[70] https://www.artofmanliness.com/health-fitness/health/
|
||||
[71] https://www.artofmanliness.com/health-fitness/program-review/
|
||||
[72] https://www.artofmanliness.com/health-fitness/fitness/podcast-955-the-power-of-neat-move-a-little-to-lose-a-lot/
|
||||
[73] https://www.artofmanliness.com/health-fitness/fitness/podcast-955-the-power-of-neat-move-a-little-to-lose-a-lot/
|
||||
[74] https://www.artofmanliness.com/health-fitness/fitness/podcast-767-fat-loss-made-simple/
|
||||
[75] https://www.artofmanliness.com/health-fitness/fitness/podcast-767-fat-loss-made-simple/
|
||||
[76] https://www.artofmanliness.com/health-fitness/fitness/mike-mentzer-heavy-duty/
|
||||
[77] https://www.artofmanliness.com/health-fitness/fitness/mike-mentzer-heavy-duty/
|
||||
[78] https://www.artofmanliness.com/health-fitness/fitness/podcast-939-what-lifting-ancient-stones-can-teach-you-about-being-a-man/
|
||||
[79] https://www.artofmanliness.com/health-fitness/fitness/podcast-939-what-lifting-ancient-stones-can-teach-you-about-being-a-man/
|
||||
[80] https://www.artofmanliness.com/health-fitness/health/what-you-can-learn-about-shedding-pounds-from-the-vacation-weight-loss-paradox/
|
||||
[81] https://www.artofmanliness.com/health-fitness/health/what-you-can-learn-about-shedding-pounds-from-the-vacation-weight-loss-paradox/
|
||||
[82] https://www.artofmanliness.com/health-fitness/health/you-need-to-eat-more-fiber/
|
||||
[83] https://www.artofmanliness.com/health-fitness/health/you-need-to-eat-more-fiber/
|
||||
[84] https://www.artofmanliness.com/health-fitness/health/silencing-the-ring-proven-strategies-for-tinnitus-relief/
|
||||
[85] https://www.artofmanliness.com/health-fitness/health/silencing-the-ring-proven-strategies-for-tinnitus-relief/
|
||||
[86] https://www.artofmanliness.com/health-fitness/health/podcast-947-turn-your-anxiety-into-a-strength/
|
||||
[87] https://www.artofmanliness.com/health-fitness/health/podcast-947-turn-your-anxiety-into-a-strength/
|
||||
[88] https://www.artofmanliness.com/health-fitness/program-review/the-insanely-difficult-standards-of-historys-hardest-p-e-program/
|
||||
[89] https://www.artofmanliness.com/health-fitness/program-review/the-insanely-difficult-standards-of-historys-hardest-p-e-program/
|
||||
[90] https://www.artofmanliness.com/health-fitness/program-review/fitness-program-right/
|
||||
[91] https://www.artofmanliness.com/health-fitness/program-review/fitness-program-right/
|
||||
[92] https://www.artofmanliness.com/health-fitness/program-review/a-review-of-the-movnat-workshop/
|
||||
[93] https://www.artofmanliness.com/health-fitness/program-review/a-review-of-the-movnat-workshop/
|
||||
[94] https://www.artofmanliness.com/health-fitness/program-review/atomic-athlete-vanguard/
|
||||
[95] https://www.artofmanliness.com/health-fitness/program-review/atomic-athlete-vanguard/
|
||||
[96] https://www.artofmanliness.com/health-fitness/
|
||||
[97] https://www.artofmanliness.com/people/family/
|
||||
[98] https://www.artofmanliness.com/people/fatherhood/
|
||||
[99] https://www.artofmanliness.com/people/relationships/
|
||||
[100] https://www.artofmanliness.com/people/social-skills/
|
||||
[101] https://www.artofmanliness.com/people/family/podcast-946-counterintuitive-ideas-about-marriage-family-and-kids/
|
||||
[102] https://www.artofmanliness.com/people/family/podcast-946-counterintuitive-ideas-about-marriage-family-and-kids/
|
||||
[103] https://www.artofmanliness.com/people/family/riddles-for-kids/
|
||||
[104] https://www.artofmanliness.com/people/family/riddles-for-kids/
|
||||
[105] https://www.artofmanliness.com/people/family/podcast-sibling-ambivalent/
|
||||
[106] https://www.artofmanliness.com/people/family/podcast-sibling-ambivalent/
|
||||
[107] https://www.artofmanliness.com/people/family/how-to-develop-gratitude-in-your-kids/
|
||||
[108] https://www.artofmanliness.com/people/family/how-to-develop-gratitude-in-your-kids/
|
||||
[109] https://www.artofmanliness.com/people/fatherhood/how-to-parent-teacher-conference/
|
||||
[110] https://www.artofmanliness.com/people/fatherhood/how-to-parent-teacher-conference/
|
||||
[111] https://www.artofmanliness.com/people/fatherhood/5-ways-fathers-hugely-influence-on-their-daughters/
|
||||
[112] https://www.artofmanliness.com/people/fatherhood/5-ways-fathers-hugely-influence-on-their-daughters/
|
||||
[113] https://www.artofmanliness.com/people/fatherhood/sunday-firesides-we-shouldnt-and-should-be-friends-with-our-kids/
|
||||
[114] https://www.artofmanliness.com/people/fatherhood/sunday-firesides-we-shouldnt-and-should-be-friends-with-our-kids/
|
||||
[115] https://www.artofmanliness.com/people/fatherhood/what-to-do-when-your-kid-lies-to-you/
|
||||
[116] https://www.artofmanliness.com/people/fatherhood/what-to-do-when-your-kid-lies-to-you/
|
||||
[117] https://www.artofmanliness.com/people/relationships/sunday-firesides-can-we-finally-stop-blaming-the-puritans/
|
||||
[118] https://www.artofmanliness.com/people/relationships/sunday-firesides-can-we-finally-stop-blaming-the-puritans/
|
||||
[119] https://www.artofmanliness.com/people/relationships/sunday-firesides-the-sit-in-silence-relationship-test/
|
||||
[120] https://www.artofmanliness.com/people/relationships/sunday-firesides-the-sit-in-silence-relationship-test/
|
||||
[121] https://www.artofmanliness.com/people/relationships/sunday-firesides-treat-people-as-ends-not-means/
|
||||
[122] https://www.artofmanliness.com/people/relationships/sunday-firesides-treat-people-as-ends-not-means/
|
||||
[123] https://www.artofmanliness.com/people/relationships/podcast-920-advice-on-making-love-last-from-a-divorce-lawyer/
|
||||
[124] https://www.artofmanliness.com/people/relationships/podcast-920-advice-on-making-love-last-from-a-divorce-lawyer/
|
||||
[125] https://www.artofmanliness.com/people/social-skills/podcast-957-how-curiosity-conversations-can-supercharge-your-success/
|
||||
[126] https://www.artofmanliness.com/people/social-skills/podcast-957-how-curiosity-conversations-can-supercharge-your-success/
|
||||
[127] https://www.artofmanliness.com/people/social-skills/podcast-837-the-cues-that-make-you-charismatic/
|
||||
[128] https://www.artofmanliness.com/people/social-skills/podcast-837-the-cues-that-make-you-charismatic/
|
||||
[129] https://www.artofmanliness.com/people/social-skills/podcast-938-social-skills-as-the-road-to-character/
|
||||
[130] https://www.artofmanliness.com/people/social-skills/podcast-938-social-skills-as-the-road-to-character/
|
||||
[131] https://www.artofmanliness.com/people/social-skills/podcast-915-finally-learn-to-say-no/
|
||||
[132] https://www.artofmanliness.com/people/social-skills/podcast-915-finally-learn-to-say-no/
|
||||
[133] https://www.artofmanliness.com/people/
|
||||
[134] https://www.artofmanliness.com/skills/how-to/
|
||||
[135] https://www.artofmanliness.com/skills/manly-know-how/
|
||||
[136] https://www.artofmanliness.com/skills/outdoor-survival/
|
||||
[137] https://www.artofmanliness.com/skills/how-to/how-to-wrap-a-gift-an-illustrated-guide/
|
||||
[138] https://www.artofmanliness.com/skills/how-to/how-to-wrap-a-gift-an-illustrated-guide/
|
||||
[139] https://www.artofmanliness.com/skills/how-to/how-to-de-ice-your-windshield-easily-and-effectively/
|
||||
[140] https://www.artofmanliness.com/skills/how-to/how-to-de-ice-your-windshield-easily-and-effectively/
|
||||
[141] https://www.artofmanliness.com/skills/how-to/how-to-paint-a-room/
|
||||
[142] https://www.artofmanliness.com/skills/how-to/how-to-paint-a-room/
|
||||
[143] https://www.artofmanliness.com/skills/how-to/store-stack-firewood/
|
||||
[144] https://www.artofmanliness.com/skills/how-to/store-stack-firewood/
|
||||
[145] https://www.artofmanliness.com/skills/manly-know-how/build-cozy-fireplace-fire-wont-get-smoky/
|
||||
[146] https://www.artofmanliness.com/skills/manly-know-how/build-cozy-fireplace-fire-wont-get-smoky/
|
||||
[147] https://www.artofmanliness.com/skills/manly-know-how/how-to-adjust-your-car-mirrors-to-eliminate-blind-spots/
|
||||
[148] https://www.artofmanliness.com/skills/manly-know-how/how-to-adjust-your-car-mirrors-to-eliminate-blind-spots/
|
||||
[149] https://www.artofmanliness.com/skills/manly-know-how/how-throw-a-spiral-football/
|
||||
[150] https://www.artofmanliness.com/skills/manly-know-how/how-throw-a-spiral-football/
|
||||
[151] https://www.artofmanliness.com/skills/manly-know-how/whats-the-difference-between-gas-octanes/
|
||||
[152] https://www.artofmanliness.com/skills/manly-know-how/whats-the-difference-between-gas-octanes/
|
||||
[153] https://www.artofmanliness.com/skills/outdoor-survival/how-to-build-a-quinzee-snow-shelter-illustrated-guide/
|
||||
[154] https://www.artofmanliness.com/skills/outdoor-survival/how-to-build-a-quinzee-snow-shelter-illustrated-guide/
|
||||
[155] https://www.artofmanliness.com/skills/outdoor-survival/how-to-survive-an-earthquake/
|
||||
[156] https://www.artofmanliness.com/skills/outdoor-survival/how-to-survive-an-earthquake/
|
||||
[157] https://www.artofmanliness.com/skills/outdoor-survival/two-things-you-should-be-doing-to-take-better-care-of-your-camping-gear/
|
||||
[158] https://www.artofmanliness.com/skills/outdoor-survival/two-things-you-should-be-doing-to-take-better-care-of-your-camping-gear/
|
||||
[159] https://www.artofmanliness.com/skills/outdoor-survival/how-to-emergency-rappel/
|
||||
[160] https://www.artofmanliness.com/skills/outdoor-survival/how-to-emergency-rappel/
|
||||
[161] https://www.artofmanliness.com/skills/
|
||||
[167] https://www.artofmanliness.com/character/advice/
|
||||
[168] https://www.artofmanliness.com/character/
|
||||
[169] https://www.artofmanliness.com/sunday-firesides/
|
||||
[170] https://getpocket.com/edit?url=https://www.artofmanliness.com/character/advice/sunday-firesides-to-dos-the-rent-we-pay-for-living/
|
||||
[171] https://www.facebook.com/sharer.php?u=https://www.artofmanliness.com/character/advice/sunday-firesides-to-dos-the-rent-we-pay-for-living/
|
||||
[172] https://pinterest.com/pin/create/link/?url=https://www.artofmanliness.com/character/advice/sunday-firesides-to-dos-the-rent-we-pay-for-living/
|
||||
[173] https://twitter.com/intent/tweet?url=https://www.artofmanliness.com/character/advice/sunday-firesides-to-dos-the-rent-we-pay-for-living/
|
||||
[174] https://www.artofmanliness.com/cdn-cgi/l/email-protection#27184548435e1a4f535357541d08085050500946555348414a46494b4e494254540944484a08444f46554644534255084643514e44420854524943465e0a414e5542544e4342540a53480a4348540a534f420a554249530a50420a57465e0a4148550a4b4e514e494008
|
||||
[175] https://www.artofmanliness.com/character/advice/sunday-firesides-stop-living-life-paycheck-to-paycheck/
|
||||
[176] https://www.artofmanliness.com/character/advice/sunday-firesides-stop-living-life-paycheck-to-paycheck/
|
||||
[177] https://www.artofmanliness.com/character/advice/sunday-firesides-yours-sincerely/
|
||||
[178] https://www.artofmanliness.com/character/advice/sunday-firesides-yours-sincerely/
|
||||
[179] https://www.artofmanliness.com/character/advice/sunday-firesides-love-endures/
|
||||
[180] https://www.artofmanliness.com/character/advice/sunday-firesides-love-endures/
|
||||
[181] https://www.artofmanliness.com/character/advice/sunday-firesides-die-red/
|
||||
[182] https://www.artofmanliness.com/character/advice/sunday-firesides-die-red/
|
||||
[183] https://www.artofmanliness.com/character/advice/sunday-firesides-dependence-to-independence/
|
||||
[184] https://www.artofmanliness.com/character/advice/sunday-firesides-dependence-to-independence/
|
||||
[185] https://www.artofmanliness.com/people/relationships/sunday-firesides-relationships-over-willpower/
|
||||
[186] https://www.artofmanliness.com/people/relationships/sunday-firesides-relationships-over-willpower/
|
||||
[187] https://www.artofmanliness.com/career-wealth/career/you-are-kind-of-your-job/
|
||||
[188] https://www.artofmanliness.com/character/manly-lessons/men-without-chests/
|
||||
[193] https://www.artofmanliness.com/character/advice/sunday-firesides-to-dos-the-rent-we-pay-for-living/#
|
||||
[197] https://strenuouslife.co/
|
||||
[198] https://strenuouslife.co/
|
||||
[203] https://www.artofmanliness.com/character/advice/sunday-firesides-to-dos-the-rent-we-pay-for-living/#
|
||||
[207] https://www.artofmanliness.com/living/leisure/podcast-959-come-alive-again-by-having-more-fun/
|
||||
[208] https://www.artofmanliness.com/living/leisure/podcast-959-come-alive-again-by-having-more-fun/
|
||||
[209] https://www.artofmanliness.com/character/knowledge-of-men/podcast-958-an-insiders-guide-to-the-rise-of-the-american-mafia/
|
||||
[210] https://www.artofmanliness.com/character/knowledge-of-men/podcast-958-an-insiders-guide-to-the-rise-of-the-american-mafia/
|
||||
[211] https://www.artofmanliness.com/people/social-skills/podcast-957-how-curiosity-conversations-can-supercharge-your-success/
|
||||
[212] https://www.artofmanliness.com/people/social-skills/podcast-957-how-curiosity-conversations-can-supercharge-your-success/
|
||||
[213] https://www.artofmanliness.com/character/behavior/podcast-956-feeling-depressed-and-discombobulated-social-acceleration-may-be-to-blame/
|
||||
[214] https://www.artofmanliness.com/character/behavior/podcast-956-feeling-depressed-and-discombobulated-social-acceleration-may-be-to-blame/
|
||||
[215] https://www.artofmanliness.com/podcast/
|
||||
[216] https://www.artofmanliness.com/character/knowledge-of-men/podcast-958-an-insiders-guide-to-the-rise-of-the-american-mafia/
|
||||
[217] https://www.artofmanliness.com/character/advice/sunday-firesides-first-day-worst-day/
|
||||
[218] https://www.artofmanliness.com/character/knowledge-of-men/rage-rage-against-the-dying-back-of-the-brain/
|
||||
[219] https://www.artofmanliness.com/character/behavior/podcast-956-feeling-depressed-and-discombobulated-social-acceleration-may-be-to-blame/
|
||||
[220] https://www.artofmanliness.com/character/advice/
|
||||
[221] https://my.community.com/artofmanliness?t=manly
|
||||
[222] https://www.artofmanliness.com/contact/
|
||||
[223] https://www.artofmanliness.com/privacy-policy/
|
||||
[224] https://www.artofmanliness.com/about-2/
|
||||
[225] https://www.artofmanliness.com/all-topics/
|
||||
[226] https://www.artofmanliness.com/archives/
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,12 +1,10 @@
|
||||
#[1]All posts for Baldur Bjarnason
|
||||
• [1]Archive
|
||||
• [2]Newsletter
|
||||
• [3]Book
|
||||
• [4]AI Book
|
||||
• [5]Contact
|
||||
|
||||
* [2]Archive
|
||||
* [3]Newsletter
|
||||
* [4]Book
|
||||
* [5]AI Book
|
||||
* [6]Contact
|
||||
|
||||
[7]Baldur Bjarnason
|
||||
[6]Baldur Bjarnason
|
||||
|
||||
Web dev at the end of the world, from Hveragerði, Iceland
|
||||
|
||||
@@ -14,209 +12,199 @@
|
||||
|
||||
Programming is a Pop Culture
|
||||
|
||||
(What follows is an extract from [8]Out of the Software Crisis, lightly
|
||||
edited to work as a blog post.)
|
||||
__________________________________________________________________
|
||||
(What follows is an extract from [7]Out of the Software Crisis, lightly edited
|
||||
to work as a blog post.)
|
||||
|
||||
So I think what happened is computing has turned into pop culture
|
||||
and the universities are not helping in general, at least not in the
|
||||
US.
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
So, Cicero---anybody know a good Cicero quote having to do with the
|
||||
present and past? Let's check your classical education here. So, you
|
||||
know who Cicero was. He was one of those old Roman guys.
|
||||
|
||||
So I think what happened is computing has turned into pop culture and the
|
||||
universities are not helping in general, at least not in the US.
|
||||
|
||||
So, Cicero---anybody know a good Cicero quote having to do with the present
|
||||
and past? Let's check your classical education here. So, you know who
|
||||
Cicero was. He was one of those old Roman guys.
|
||||
|
||||
So, Cicero once wrote: 'He who knows only his own generation remains
|
||||
forever a child.'
|
||||
|
||||
[9]Programming and Scaling (Alan Kay, 2011)
|
||||
[8]Programming and Scaling (Alan Kay, 2011)
|
||||
|
||||
The programming pop culture defines change—any change—as progress. Most
|
||||
developers, myself included, have a fascination with novelty. If it’s
|
||||
new, then it must be an improvement. You even hear this stated outright
|
||||
as an argument by developers: it’s newer and therefore better. Trends
|
||||
in software development are rarely based on objective observation or
|
||||
sensible practice. This endless chasing of trends leads to projects
|
||||
being needlessly rewritten, code being abandoned, and new projects
|
||||
being started when fixing the bugs in an old project would have done
|
||||
the same. The stocks of the software development system are flushed out
|
||||
at a moment’s notice simply because the developers found something
|
||||
shinier.
|
||||
developers, myself included, have a fascination with novelty. If it’s new, then
|
||||
it must be an improvement. You even hear this stated outright as an argument by
|
||||
developers: it’s newer and therefore better. Trends in software development are
|
||||
rarely based on objective observation or sensible practice. This endless
|
||||
chasing of trends leads to projects being needlessly rewritten, code being
|
||||
abandoned, and new projects being started when fixing the bugs in an old
|
||||
project would have done the same. The stocks of the software development system
|
||||
are flushed out at a moment’s notice simply because the developers found
|
||||
something shinier.
|
||||
|
||||
Experienced developers are aware of this tendency in themselves and
|
||||
work to mitigate it, but younger developers are often under the
|
||||
mistaken impression that this is how software development works. Unless
|
||||
they can pare back this tendency or are matched with teammates who hold
|
||||
them back, this tendency can lead to immense destruction of value for
|
||||
an organisation.
|
||||
Experienced developers are aware of this tendency in themselves and work to
|
||||
mitigate it, but younger developers are often under the mistaken impression
|
||||
that this is how software development works. Unless they can pare back this
|
||||
tendency or are matched with teammates who hold them back, this tendency can
|
||||
lead to immense destruction of value for an organisation.
|
||||
|
||||
Pop cultures favour the visual aesthetic of the day. We all know what
|
||||
sort of aesthetic designers commonly favour. Small, low-contrast text,
|
||||
lots of whitespace, no pure whites or pure blacks (just greys). The
|
||||
details vary with fashion, but each generation of designers has a
|
||||
preferred visual aesthetic. That aesthetic tests poorly; the text is
|
||||
illegible; the layout doesn’t have enough contrast. The information
|
||||
density is so sparse it’s effectively non-existent.
|
||||
Pop cultures favour the visual aesthetic of the day. We all know what sort of
|
||||
aesthetic designers commonly favour. Small, low-contrast text, lots of
|
||||
whitespace, no pure whites or pure blacks (just greys). The details vary with
|
||||
fashion, but each generation of designers has a preferred visual aesthetic.
|
||||
That aesthetic tests poorly; the text is illegible; the layout doesn’t have
|
||||
enough contrast. The information density is so sparse it’s effectively
|
||||
non-existent.
|
||||
|
||||
Looks pretty, though.
|
||||
|
||||
Coders have a similar tendency, their preferred aesthetic is just a bit
|
||||
different, but as with designers, it tests horribly when put in front
|
||||
of genuine users. The exact details of the preferred aesthetic tend to
|
||||
vary from generation to generation. One group prefers light-on-dark
|
||||
text (despite not suffering from conditions that benefit from dark
|
||||
mode) and unusable hyper-complex layouts where everything is
|
||||
configurable. Another group goes for ultra-minimalism where nothing is
|
||||
shown by default. You constantly scrub around and hunt for a button, a
|
||||
widget—anything that even vaguely resembles an affordance. This is
|
||||
usually not an issue if you have designers on the team. If you’re
|
||||
letting the programmers design the user interface or are a programmer
|
||||
different, but as with designers, it tests horribly when put in front of
|
||||
genuine users. The exact details of the preferred aesthetic tend to vary from
|
||||
generation to generation. One group prefers light-on-dark text (despite not
|
||||
suffering from conditions that benefit from dark mode) and unusable
|
||||
hyper-complex layouts where everything is configurable. Another group goes for
|
||||
ultra-minimalism where nothing is shown by default. You constantly scrub around
|
||||
and hunt for a button, a widget—anything that even vaguely resembles an
|
||||
affordance. This is usually not an issue if you have designers on the team. If
|
||||
you’re letting the programmers design the user interface or are a programmer
|
||||
designing a user interface, you need to be aware of it.
|
||||
|
||||
But this adherence to a specific aesthetic isn’t limited to designs.
|
||||
It’s also an issue when it comes to the code itself.
|
||||
But this adherence to a specific aesthetic isn’t limited to designs. It’s also
|
||||
an issue when it comes to the code itself.
|
||||
|
||||
The programming pop culture favours specific code aesthetics based on
|
||||
the trends of the day. I’m not talking about code style or formatting.
|
||||
The code in a project should adhere to a single style, simple as that.
|
||||
The issue is that the programming pop culture demands that code exhibit
|
||||
the latest popular aesthetics of rigour, formality, and cleverness.
|
||||
Whether the code actually is rigorous, formal, or clever matters less.
|
||||
A few years ago, as the popularity of the Ruby programming language
|
||||
peaked, a certain dynamism and trickery were en vogue. It didn’t matter
|
||||
if you were writing in Ruby, JavaScript, or Objective-C. Your code had
|
||||
to have a level of “magic” to it. Metaprogramming, syntax-hacking
|
||||
languages to create ad hoc Domain-Specific Languages, tricks with
|
||||
extreme late binding, and more were frequent topics on developer
|
||||
weblogs and forums. Even a phrase like “objective-c runtime
|
||||
metaprogramming” will date you to a specific generation of native app
|
||||
developers almost down to a single year.
|
||||
The programming pop culture favours specific code aesthetics based on the
|
||||
trends of the day. I’m not talking about code style or formatting. The code in
|
||||
a project should adhere to a single style, simple as that. The issue is that
|
||||
the programming pop culture demands that code exhibit the latest popular
|
||||
aesthetics of rigour, formality, and cleverness. Whether the code actually is
|
||||
rigorous, formal, or clever matters less. A few years ago, as the popularity of
|
||||
the Ruby programming language peaked, a certain dynamism and trickery were en
|
||||
vogue. It didn’t matter if you were writing in Ruby, JavaScript, or
|
||||
Objective-C. Your code had to have a level of “magic” to it. Metaprogramming,
|
||||
syntax-hacking languages to create ad hoc Domain-Specific Languages, tricks
|
||||
with extreme late binding, and more were frequent topics on developer weblogs
|
||||
and forums. Even a phrase like “objective-c runtime metaprogramming” will date
|
||||
you to a specific generation of native app developers almost down to a single
|
||||
year.
|
||||
|
||||
As with all of these pop culture trends in programming, this led to
|
||||
unreadable code that was impossible to work with or fix as soon as it
|
||||
faded from popular consciousness.
|
||||
As with all of these pop culture trends in programming, this led to unreadable
|
||||
code that was impossible to work with or fix as soon as it faded from popular
|
||||
consciousness.
|
||||
|
||||
The current trend is towards the aesthetics of correctness. Everything
|
||||
has to look like it has strong or static typing. It doesn’t have to
|
||||
really have static typing. That can all be made up after the fact in a
|
||||
declaration file. It merely needs to have the aesthetics of types. Type
|
||||
annotations everywhere, implementing logic through type system
|
||||
trickery, and forcing any and all dynamism out of the system in the
|
||||
name of correctness is the name of the game.
|
||||
The current trend is towards the aesthetics of correctness. Everything has to
|
||||
look like it has strong or static typing. It doesn’t have to really have static
|
||||
typing. That can all be made up after the fact in a declaration file. It merely
|
||||
needs to have the aesthetics of types. Type annotations everywhere,
|
||||
implementing logic through type system trickery, and forcing any and all
|
||||
dynamism out of the system in the name of correctness is the name of the game.
|
||||
|
||||
A part of this trend is the unpopularity of the approaches and
|
||||
languages that are seen as less rigorous. CSS is dropped in favour of
|
||||
statically typed CSS-in-JS approaches. HTML is dropped in favour of a
|
||||
strict inline XML-like markup format called JSX. Just a few years ago,
|
||||
everybody in web development hated and dropped XML and XHTML
|
||||
specifically because it was too strict and felt less dynamic and
|
||||
flexible than HTML. At some point, pop culture will bore of this and
|
||||
swing its attention back the other way.
|
||||
A part of this trend is the unpopularity of the approaches and languages that
|
||||
are seen as less rigorous. CSS is dropped in favour of statically typed
|
||||
CSS-in-JS approaches. HTML is dropped in favour of a strict inline XML-like
|
||||
markup format called JSX. Just a few years ago, everybody in web development
|
||||
hated and dropped XML and XHTML specifically because it was too strict and felt
|
||||
less dynamic and flexible than HTML. At some point, pop culture will bore of
|
||||
this and swing its attention back the other way.
|
||||
|
||||
It’s a fashion industry. Trends come; trends go. The lack of historical
|
||||
awareness is considered by most to be a feature.
|
||||
|
||||
This rigour is useful in moderation. Static typing does prevent bugs.
|
||||
Usually, they are the same sort of bugs unit testing prevents. Both
|
||||
have immense value as tools to manage your software development.
|
||||
Currently, the fashion is to favour static typing over unit testing for
|
||||
establishing a certain base level of correctness in your code. At some
|
||||
point, they are likely to switch again. They have a couple of times in
|
||||
the past. That you could use both at the same time and get the benefits
|
||||
of both doesn’t enter the discourse. Static typing with compile-time
|
||||
correctness checks has its uses. So do dynamism, extreme late binding,
|
||||
and metaprogramming. Most of these approaches can be used together, but
|
||||
that isn’t how pop culture works. Pop culture demands there be only one
|
||||
winner at a time. Choose one, not whichever works the best at each
|
||||
time.
|
||||
This rigour is useful in moderation. Static typing does prevent bugs. Usually,
|
||||
they are the same sort of bugs unit testing prevents. Both have immense value
|
||||
as tools to manage your software development. Currently, the fashion is to
|
||||
favour static typing over unit testing for establishing a certain base level of
|
||||
correctness in your code. At some point, they are likely to switch again. They
|
||||
have a couple of times in the past. That you could use both at the same time
|
||||
and get the benefits of both doesn’t enter the discourse. Static typing with
|
||||
compile-time correctness checks has its uses. So do dynamism, extreme late
|
||||
binding, and metaprogramming. Most of these approaches can be used together,
|
||||
but that isn’t how pop culture works. Pop culture demands there be only one
|
||||
winner at a time. Choose one, not whichever works the best at each time.
|
||||
|
||||
Product development can’t indulge in being pop culture. Be wary of
|
||||
these popularity contests.
|
||||
Product development can’t indulge in being pop culture. Be wary of these
|
||||
popularity contests.
|
||||
|
||||
These issues with programming culture aren’t new.
|
||||
|
||||
Jamie Zawinski calls it the [10]“Cascade of Attention-Deficit
|
||||
Teenagers” model. We can’t do much to change the nature of the field by
|
||||
now—Alan Kay has certainly tried—but we can mitigate the harm done by
|
||||
the trend-seeking. We can work to ensure that everybody on the team,
|
||||
programmers and designers, is aligned, and have the same understanding
|
||||
of what matters and how to accomplish it.
|
||||
Jamie Zawinski calls it the [9]“Cascade of Attention-Deficit Teenagers” model.
|
||||
We can’t do much to change the nature of the field by now—Alan Kay has
|
||||
certainly tried—but we can mitigate the harm done by the trend-seeking. We can
|
||||
work to ensure that everybody on the team, programmers and designers, is
|
||||
aligned, and have the same understanding of what matters and how to accomplish
|
||||
it.
|
||||
|
||||
For that, you need everybody to understand the context they are working
|
||||
in—the works of their field and how they are received. You need to
|
||||
develop taste and understanding.
|
||||
For that, you need everybody to understand the context they are working in—the
|
||||
works of their field and how they are received. You need to develop taste and
|
||||
understanding.
|
||||
|
||||
You need research.
|
||||
__________________________________________________________________
|
||||
|
||||
Bonus Alan Kay quote on programming as a pop culture that I didn’t
|
||||
include in the book:
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
But pop culture holds a disdain for history. Pop culture is all
|
||||
about identity and feeling like you’re participating. It has nothing
|
||||
to do with cooperation, the past or the future—it’s living in the
|
||||
present. I think the same is true of most people who write code for
|
||||
money. They have no idea where [their culture came from]—and the
|
||||
Internet was done so well that most people think of it as a natural
|
||||
resource like the Pacific Ocean, rather than something that was
|
||||
man-made.
|
||||
Bonus Alan Kay quote on programming as a pop culture that I didn’t include in
|
||||
the book:
|
||||
|
||||
Alan Kay, [11]Dr. Dobb’s Interview with Alan Kay
|
||||
__________________________________________________________________
|
||||
But pop culture holds a disdain for history. Pop culture is all about
|
||||
identity and feeling like you’re participating. It has nothing to do with
|
||||
cooperation, the past or the future—it’s living in the present. I think the
|
||||
same is true of most people who write code for money. They have no idea
|
||||
where [their culture came from]—and the Internet was done so well that most
|
||||
people think of it as a natural resource like the Pacific Ocean, rather
|
||||
than something that was man-made.
|
||||
|
||||
[12]Out of the Software Crisis
|
||||
Alan Kay, [10]Dr. Dobb’s Interview with Alan Kay
|
||||
|
||||
[13]Out of the Software Crisis by Baldur Bjarnason
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
Software projects keep failing, not because we don’t have the right
|
||||
team or tools but because our software development system is broken.
|
||||
Out of the Software Crisis is a guide to fixing your software projects
|
||||
with systems-thinking making them more resilient to change and less
|
||||
likely to fail.
|
||||
[11]Out of the Software Crisis
|
||||
|
||||
[14]Systems-Thinking For Software Projects
|
||||
[12]Out of the Software Crisis by Baldur Bjarnason
|
||||
|
||||
[15]WTF is a Framework?
|
||||
Software projects keep failing, not because we don’t have the right team or
|
||||
tools but because our software development system is broken. Out of the
|
||||
Software Crisis is a guide to fixing your software projects with
|
||||
systems-thinking making them more resilient to change and less likely to fail.
|
||||
|
||||
[16]The response to Out of the Software Crisis has been amazing
|
||||
[13]Systems-Thinking For Software Projects
|
||||
|
||||
[14] WTF is a Framework?
|
||||
|
||||
[15]The response to Out of the Software Crisis has been amazing
|
||||
|
||||
Join the Newsletter
|
||||
|
||||
Subscribe to the [17]Out of the Software Crisis newsletter to get my
|
||||
weekly (at least) essays on how to avoid or get out of software
|
||||
development crises.
|
||||
Subscribe to the [16]Out of the Software Crisis newsletter to get my weekly (at
|
||||
least) essays on how to avoid or get out of software development crises.
|
||||
|
||||
Join now and get a free PDF of three bonus essays from Out of the
|
||||
Software Crisis.
|
||||
Join now and get a free PDF of three bonus essays from Out of the Software
|
||||
Crisis.
|
||||
|
||||
____________________
|
||||
(BUTTON)
|
||||
[17][ ]
|
||||
Subscribe
|
||||
|
||||
We respect your privacy.
|
||||
|
||||
Unsubscribe at any time.
|
||||
|
||||
You can also find me on [18]Mastodon and [19]Twitter
|
||||
You can also find me on [19]Mastodon and [20]Twitter
|
||||
|
||||
References
|
||||
References:
|
||||
|
||||
1. https://www.baldurbjarnason.com/feed.xml
|
||||
2. https://www.baldurbjarnason.com/archive
|
||||
3. https://softwarecrisis.dev/
|
||||
4. https://softwarecrisis.baldurbjarnason.com/
|
||||
5. https://illusion.baldurbjarnason.com/
|
||||
6. mailto:baldur.bjarnason@gmail.com
|
||||
7. https://www.baldurbjarnason.com/
|
||||
8. https://softwarecrisis.baldurbjarnason.com/
|
||||
9. https://www.youtube.com/watch?v=YyIQKBzIuBY
|
||||
10. https://www.jwz.org/doc/cadt.html
|
||||
11. https://link.springer.com/content/pdf/bbm:978-3-319-90008-7/1.pdf
|
||||
12. https://softwarecrisis.baldurbjarnason.com/
|
||||
13. https://softwarecrisis.baldurbjarnason.com/
|
||||
14. https://softwarecrisis.baldurbjarnason.com/
|
||||
15. https://www.baldurbjarnason.com/2022/wtf-is-a-framework/
|
||||
16. https://www.baldurbjarnason.com/2022/ootsc-update/
|
||||
17. https://softwarecrisis.dev/
|
||||
18. https://toot.cafe/@baldur
|
||||
19. https://twitter.com/fakebaldur
|
||||
[1] https://www.baldurbjarnason.com/archive
|
||||
[2] https://softwarecrisis.dev/
|
||||
[3] https://softwarecrisis.baldurbjarnason.com/
|
||||
[4] https://illusion.baldurbjarnason.com/
|
||||
[5] mailto:baldur.bjarnason@gmail.com
|
||||
[6] https://www.baldurbjarnason.com/
|
||||
[7] https://softwarecrisis.baldurbjarnason.com/
|
||||
[8] https://www.youtube.com/watch?v=YyIQKBzIuBY
|
||||
[9] https://www.jwz.org/doc/cadt.html
|
||||
[10] https://link.springer.com/content/pdf/bbm:978-3-319-90008-7/1.pdf
|
||||
[11] https://softwarecrisis.baldurbjarnason.com/
|
||||
[12] https://softwarecrisis.baldurbjarnason.com/
|
||||
[13] https://softwarecrisis.baldurbjarnason.com/
|
||||
[14] https://www.baldurbjarnason.com/2022/wtf-is-a-framework/
|
||||
[15] https://www.baldurbjarnason.com/2022/ootsc-update/
|
||||
[16] https://softwarecrisis.dev/
|
||||
[19] https://toot.cafe/@baldur
|
||||
[20] https://twitter.com/fakebaldur
|
||||
|
||||
@@ -1,399 +1,392 @@
|
||||
#[1]Christopher Butler ☼
|
||||
[1] Christopher Butler ☼
|
||||
|
||||
[2]Christopher Butler ☼
|
||||
[2]Archive
|
||||
|
||||
[3]Archive
|
||||
[3]Info
|
||||
|
||||
[4]Info
|
||||
[4]Now
|
||||
|
||||
[5]Now
|
||||
__________________________________________________________________
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
Organization — Office
|
||||
Organization — Office
|
||||
|
||||
After the kitchen, the office is the most used room in our home. This is how
|
||||
we keep it organized.
|
||||
After the kitchen, the office is the most used room in our home. This is how we
|
||||
keep it organized.
|
||||
|
||||
[eaf01f24-61dc-4bef-8166-2f08c81b856a.jpg]
|
||||
[eaf01f24-61dc-4bef-8166-2f08c81b856a]
|
||||
|
||||
This is the office.
|
||||
|
||||
My wife and I work here, Monday through Friday, 9 to 5. Our children
|
||||
play and create in here just as often. It’s where we maintain several
|
||||
workspaces, store supplies, house a portion of our library, and keep a
|
||||
guest bed. To make things even more complicated, I also exercise in
|
||||
here nearly every day. All in this 10’ x 12’ space with two windows.
|
||||
Since we began working from home, I estimate that we’ve spent around
|
||||
8,000 hours in here.
|
||||
My wife and I work here, Monday through Friday, 9 to 5. Our children play and
|
||||
create in here just as often. It’s where we maintain several workspaces, store
|
||||
supplies, house a portion of our library, and keep a guest bed. To make things
|
||||
even more complicated, I also exercise in here nearly every day. All in this
|
||||
10’ x 12’ space with two windows. Since we began working from home, I estimate
|
||||
that we’ve spent around 8,000 hours in here.
|
||||
|
||||
Organization — at an almost obsessive level — is what keeps this space
|
||||
a functional and enjoyable place to spend time. Minimalism, though, is
|
||||
not. We have a lot of gear in here. Most of it gets used every single
|
||||
day.
|
||||
Organization — at an almost obsessive level — is what keeps this space a
|
||||
functional and enjoyable place to spend time. Minimalism, though, is not. We
|
||||
have a lot of gear in here. Most of it gets used every single day.
|
||||
|
||||
I’m about to share an unnecessary amount of detail on what makes this
|
||||
space work. I’ve divided this into three main sections:
|
||||
I’m about to share an unnecessary amount of detail on what makes this space
|
||||
work. I’ve divided this into three main sections:
|
||||
|
||||
1. On and Under the Desk
|
||||
2. On the Walls
|
||||
3. In Books
|
||||
|
||||
At the end of each section, I’ll include a list of all the gear that I
|
||||
have either mentioned or captured in pictures.
|
||||
At the end of each section, I’ll include a list of all the gear that I have
|
||||
either mentioned or captured in pictures.
|
||||
|
||||
On and Under the Desk
|
||||
|
||||
I prefer to keep my desktop as free from infrastructure as possible.
|
||||
|
||||
My general rule is that if I need it within reach, in view, or audible,
|
||||
it’s on the desk. If I don’t, it’s under the desk. That means that my
|
||||
desktop is still not as free of things as I’d like, but there is an
|
||||
impressive amount of gear running my day-to-day underneath it.
|
||||
My general rule is that if I need it within reach, in view, or audible, it’s on
|
||||
the desk. If I don’t, it’s under the desk. That means that my desktop is still
|
||||
not as free of things as I’d like, but there is an impressive amount of gear
|
||||
running my day-to-day underneath it.
|
||||
|
||||
[9b3325cc-7028-4d54-b0c0-9000877e3c2b.jpg]
|
||||
[9b3325cc-7028-4d54-b0c0-9000877e3c2b]
|
||||
|
||||
[745ee5c9-f738-4677-b266-ff5708036077.jpg]
|
||||
[745ee5c9-f738-4677-b266-ff5708036077]
|
||||
|
||||
On the desk is:
|
||||
* an [6]LG 32” UltraFine 4k HDR10 Ergo Display mounted on an
|
||||
[7]Ergotron LX Single Monitor Arm rather than the arm it ships with
|
||||
* an [8]Elgato Key Light
|
||||
* a [9]Sure SM7B Microphone mounted on an [10]Elgato Wave Mic Arm
|
||||
* a [11]Sony A7C Full Frame Camera with [12]Sony FE 35mm F1.4 GM lens
|
||||
mounted with a [13]ULANZI Camera Desk Mount Stand
|
||||
* a pair of [14]Audioengine HD3 speakers
|
||||
* the [15]awesome lamp I made twenty years ago by duo-tac’ing a strip
|
||||
of wax paper onto an industrial plastic tube and placing a
|
||||
trash-picked light inside — it still holds up!
|
||||
* the desk is a [16]Floyd dining table. I added a [17]sliding
|
||||
under-desk drawer.
|
||||
|
||||
Underneath the desk I use a simple rack on wheels to stack two
|
||||
computers, an input hub, three different external storage drives, an
|
||||
audio interface, a battery backup and even my old minidisc player. All
|
||||
of it is humming all day, but out of sight.
|
||||
• an [5]LG 32” UltraFine 4k HDR10 Ergo Display mounted on an [6]Ergotron LX
|
||||
Single Monitor Arm rather than the arm it ships with
|
||||
• an [7]Elgato Key Light
|
||||
• a [8]Sure SM7B Microphone mounted on an [9]Elgato Wave Mic Arm
|
||||
• a [10]Sony A7C Full Frame Camera with [11]Sony FE 35mm F1.4 GM lens mounted
|
||||
with a [12]ULANZI Camera Desk Mount Stand
|
||||
• a pair of [13]Audioengine HD3 speakers
|
||||
• the [14]awesome lamp I made twenty years ago by duo-tac’ing a strip of wax
|
||||
paper onto an industrial plastic tube and placing a trash-picked light
|
||||
inside — it still holds up!
|
||||
• the desk is a [15]Floyd dining table. I added a [16]sliding under-desk
|
||||
drawer.
|
||||
|
||||
All the lights, knobs, and buttons are irresistible to my nearly
|
||||
two-year old son, so I made custom covers out of half-inch black foam
|
||||
board that slide in between the rack’s supports and the shelf contents
|
||||
to keep him from exploring. You can see how they look on the right side
|
||||
of the split image below — covers out on the left, in on the right.
|
||||
Underneath the desk I use a simple rack on wheels to stack two computers, an
|
||||
input hub, three different external storage drives, an audio interface, a
|
||||
battery backup and even my old minidisc player. All of it is humming all day,
|
||||
but out of sight.
|
||||
|
||||
[58507484-e94a-4aa0-ad71-72c58427649c.jpg]
|
||||
All the lights, knobs, and buttons are irresistible to my nearly two-year old
|
||||
son, so I made custom covers out of half-inch black foam board that slide in
|
||||
between the rack’s supports and the shelf contents to keep him from exploring.
|
||||
You can see how they look on the right side of the split image below — covers
|
||||
out on the left, in on the right.
|
||||
|
||||
While I’m here, let me take a moment to urge those who have not to
|
||||
acquire an uninterruptible power supply (UPS) system.
|
||||
[58507484-e94a-4aa0-ad71-72c58427649c]
|
||||
|
||||
We have two [18]CyberPower CP1500 backups running in our office. Each
|
||||
has six battery backup and surge protected outlets as well as six
|
||||
additional surge protected outlets, network inputs, and USB inputs.
|
||||
(It’s the thing on the bottom shelf peeking out a bit from behind one
|
||||
of my covers.)
|
||||
While I’m here, let me take a moment to urge those who have not to acquire an
|
||||
uninterruptible power supply (UPS) system.
|
||||
|
||||
Just this week, we had a freak storm descend upon our city and in the
|
||||
span of just 35 minutes knock out power for hundreds of thousands and
|
||||
fell more trees than any other storm I’ve experienced in the time I’ve
|
||||
lived here. Because I do my work on a Mac Mini, having a UPS that kicks
|
||||
in when the power goes out saves me from losing work. But it can also
|
||||
keep the lights on, fans going, music playing, the works.
|
||||
We have two [17]CyberPower CP1500 backups running in our office. Each has six
|
||||
battery backup and surge protected outlets as well as six additional surge
|
||||
protected outlets, network inputs, and USB inputs. (It’s the thing on the
|
||||
bottom shelf peeking out a bit from behind one of my covers.)
|
||||
|
||||
Keen eyes will notice that the cables behind everything are relatively
|
||||
tidy. The thing about cables is that the greater they are in number,
|
||||
the more difficult they are to tame!
|
||||
Just this week, we had a freak storm descend upon our city and in the span of
|
||||
just 35 minutes knock out power for hundreds of thousands and fell more trees
|
||||
than any other storm I’ve experienced in the time I’ve lived here. Because I do
|
||||
my work on a Mac Mini, having a UPS that kicks in when the power goes out saves
|
||||
me from losing work. But it can also keep the lights on, fans going, music
|
||||
playing, the works.
|
||||
|
||||
[1e9e3fa0-247a-421b-b63c-34229c2fcad3.jpg]
|
||||
Keen eyes will notice that the cables behind everything are relatively tidy.
|
||||
The thing about cables is that the greater they are in number, the more
|
||||
difficult they are to tame!
|
||||
|
||||
Rather than completely hiding them — and making it more difficult to
|
||||
access or alter them later — I prioritize labeling. I coil and bunch
|
||||
any excess cable, but I don’t clip or enclose them. I do label them at
|
||||
both ends so I can easily identify what’s what no matter where I’m
|
||||
looking.
|
||||
[1e9e3fa0-247a-421b-b63c-34229c2fcad3]
|
||||
|
||||
Every time I find myself writing a label with sharpie on blue tape, I
|
||||
know I’m doing my future self a favor.
|
||||
Rather than completely hiding them — and making it more difficult to access or
|
||||
alter them later — I prioritize labeling. I coil and bunch any excess cable,
|
||||
but I don’t clip or enclose them. I do label them at both ends so I can easily
|
||||
identify what’s what no matter where I’m looking.
|
||||
|
||||
Every time I find myself writing a label with sharpie on blue tape, I know I’m
|
||||
doing my future self a favor.
|
||||
|
||||
Under the desk is:
|
||||
* an [19]IKEA KORNSJÖ side table
|
||||
* two Apple M1 Mac minis
|
||||
* a [20]CalDigit Thunderbolt Station 4 hub
|
||||
* two DIY External SSDs — using [21]ACASIS 40gbps Enclosures, [22]WD
|
||||
1TB NVMe SSD Solid State drives, and [23]4’ Thunderbolt 4 Cables
|
||||
* a [24]LaCie 2big RAID 8TB External Hard Drive
|
||||
* a Cloud Microphone [25]Cloudlifter
|
||||
* a [26]Focusrite Scarlet 2i2 audio interface
|
||||
* a [27]Sony MXD-D40
|
||||
* a [28]CyberPower CP1500PFCLCD UPS System
|
||||
|
||||
• an [18]IKEA KORNSJÖ side table
|
||||
• two Apple M1 Mac minis
|
||||
• a [19]CalDigit Thunderbolt Station 4 hub
|
||||
• two DIY External SSDs — using [20]ACASIS 40gbps Enclosures, [21]WD 1TB NVMe
|
||||
SSD Solid State drives, and [22]4’ Thunderbolt 4 Cables
|
||||
• a [23]LaCie 2big RAID 8TB External Hard Drive
|
||||
• a Cloud Microphone [24]Cloudlifter
|
||||
• a [25]Focusrite Scarlet 2i2 audio interface
|
||||
• a [26]Sony MXD-D40
|
||||
• a [27]CyberPower CP1500PFCLCD UPS System
|
||||
|
||||
On the Walls
|
||||
|
||||
My wife and I keep a lot of books and magazines. We’re by no means at a
|
||||
hoarder level, but we do like our printed media and that takes up
|
||||
space. We have most of our library in another room, but in here, we
|
||||
have many magazines, all our design books, and all my books about the
|
||||
paranormal and other weirdness.
|
||||
My wife and I keep a lot of books and magazines. We’re by no means at a hoarder
|
||||
level, but we do like our printed media and that takes up space. We have most
|
||||
of our library in another room, but in here, we have many magazines, all our
|
||||
design books, and all my books about the paranormal and other weirdness.
|
||||
|
||||
To keep them organized, we need shelves. I have found that the best
|
||||
shelves are the ones you create yourself.
|
||||
To keep them organized, we need shelves. I have found that the best shelves are
|
||||
the ones you create yourself.
|
||||
|
||||
Other than the racks under our desks, all the shelves in this room —
|
||||
there are many — were made by measuring and hanging custom rack or
|
||||
ledge shelving. It’s inexpensive, very strong (by god use a stud
|
||||
finder), and requires very few tools. I made mine with steel racks,
|
||||
half-inch poplar, a hand saw, a level, a pencil, and a few different
|
||||
straightedges.
|
||||
Other than the racks under our desks, all the shelves in this room — there are
|
||||
many — were made by measuring and hanging custom rack or ledge shelving. It’s
|
||||
inexpensive, very strong (by god use a stud finder), and requires very few
|
||||
tools. I made mine with steel racks, half-inch poplar, a hand saw, a level, a
|
||||
pencil, and a few different straightedges.
|
||||
|
||||
[4e6fc669-65a5-45e9-bbe6-fde0ef2a7d78.jpg]
|
||||
[4e6fc669-65a5-45e9-bbe6-fde0ef2a7d78]
|
||||
|
||||
[32d1e14f-eb6c-46b9-bf52-31c8b5d90e93.jpg]
|
||||
[32d1e14f-eb6c-46b9-bf52-31c8b5d90e93]
|
||||
|
||||
I strongly recommend [29]library-grade bookends, which you can see at
|
||||
the edges of the shelf pictured above. These are the kind that won’t
|
||||
tip over, won’t bend, and won’t slide off the edge of floating shelves.
|
||||
They are very, very good.
|
||||
I strongly recommend [28]library-grade bookends, which you can see at the edges
|
||||
of the shelf pictured above. These are the kind that won’t tip over, won’t
|
||||
bend, and won’t slide off the edge of floating shelves. They are very, very
|
||||
good.
|
||||
|
||||
Most of the stuff we keep on the shelves needs to be easy to retrieve.
|
||||
The best way to do this is to create kits. Find a container that works
|
||||
best for you in multiples and gather like items, put them in, and label
|
||||
them clearly. (I like the [30]iDesign 29847, which was designed to hold
|
||||
toilet paper.)
|
||||
Most of the stuff we keep on the shelves needs to be easy to retrieve. The best
|
||||
way to do this is to create kits. Find a container that works best for you in
|
||||
multiples and gather like items, put them in, and label them clearly. (I like
|
||||
the [29]iDesign 29847, which was designed to hold toilet paper.)
|
||||
|
||||
[65617d4c-8d78-4a6a-b71d-6141f6a2b5b1.jpg]
|
||||
[65617d4c-8d78-4a6a-b71d-6141f6a2b5b1]
|
||||
|
||||
The shelf pictured above has nearly every frequently used office or
|
||||
creative supply in our home. Each box is large enough to hold quite a
|
||||
bit, but small enough to be manageable by our kids.
|
||||
The shelf pictured above has nearly every frequently used office or creative
|
||||
supply in our home. Each box is large enough to hold quite a bit, but small
|
||||
enough to be manageable by our kids.
|
||||
|
||||
This room also has a closet. I lined it with shelving to store
|
||||
household supplies, paper, tools, and emergency equipment and to make
|
||||
it easy to retrieve anything without having to root around. Most of
|
||||
this stuff is also in kits stored in [31]IRIS USA Weatherpro latching
|
||||
boxes. We are ready for a disaster!
|
||||
This room also has a closet. I lined it with shelving to store household
|
||||
supplies, paper, tools, and emergency equipment and to make it easy to retrieve
|
||||
anything without having to root around. Most of this stuff is also in kits
|
||||
stored in [30]IRIS USA Weatherpro latching boxes. We are ready for a disaster!
|
||||
|
||||
[7b5fb987-19be-43c3-8e59-abbcdf37baec.jpg]
|
||||
[7b5fb987-19be-43c3-8e59-abbcdf37baec]
|
||||
|
||||
I’m particularly pleased that I can store a collapsible exercise bench
|
||||
on the inside of the door.
|
||||
I’m particularly pleased that I can store a collapsible exercise bench on the
|
||||
inside of the door.
|
||||
|
||||
Other exercise equipment, like my kettlebells, sit under the supply
|
||||
shelving on the left — I even rigged up cables to hang rolled up yoga
|
||||
mats under the bottom shelf. 👌 It’s the little things.
|
||||
Other exercise equipment, like my kettlebells, sit under the supply shelving on
|
||||
the left — I even rigged up cables to hang rolled up yoga mats under the bottom
|
||||
shelf. 👌 It’s the little things.
|
||||
|
||||
[5909fae1-cc3b-462c-b1f0-142aa56e322f.jpg]
|
||||
[5909fae1-cc3b-462c-b1f0-142aa56e322f]
|
||||
|
||||
[7f8971b1-0e00-4699-8e16-af9bad1dfa7b.jpg]
|
||||
[7f8971b1-0e00-4699-8e16-af9bad1dfa7b]
|
||||
|
||||
I keep my dumbbells in a neat line under the sofa/guest bed.
|
||||
|
||||
Good organization optimizes for storage and retrieval. These things are
|
||||
all very helpful:
|
||||
* [32]Floating Ledge steel shelves
|
||||
* Proect Source [33]double track strips and [34]brackets
|
||||
* [35]The Library Store Bear Hug bookends
|
||||
* [36]iDesign 29847 storage bins
|
||||
* [37]IRIS USA Weatherpro latching boxes
|
||||
* [38]Craftsman Tradestack tool chests
|
||||
* [39]Viesso Dublexo Sofa Bed
|
||||
Good organization optimizes for storage and retrieval. These things are all
|
||||
very helpful:
|
||||
|
||||
• [31]Floating Ledge steel shelves
|
||||
• Proect Source [32]double track strips and [33]brackets
|
||||
• [34]The Library Store Bear Hug bookends
|
||||
• [35]iDesign 29847 storage bins
|
||||
• [36]IRIS USA Weatherpro latching boxes
|
||||
• [37]Craftsman Tradestack tool chests
|
||||
• [38]Viesso Dublexo Sofa Bed
|
||||
|
||||
In Books
|
||||
|
||||
I’m as obsessive with how I organize information as I am objects and
|
||||
spaces. At this point in my life, I’ve tried dozens and dozens of
|
||||
digital organization tools. While I used some of them for a long time —
|
||||
I used Todoist for several years — none have ever felt as useful to me
|
||||
as pen and paper.
|
||||
I’m as obsessive with how I organize information as I am objects and spaces. At
|
||||
this point in my life, I’ve tried dozens and dozens of digital organization
|
||||
tools. While I used some of them for a long time — I used Todoist for several
|
||||
years — none have ever felt as useful to me as pen and paper.
|
||||
|
||||
I’ve kept a notebook of some kind — as a sketchbook, an art journal, a
|
||||
log — for decades. I mostly maintained one at a time, and so there was
|
||||
always a mixture of things in it: notes and lists on one page, drawings
|
||||
and collages on the next.
|
||||
I’ve kept a notebook of some kind — as a sketchbook, an art journal, a
|
||||
log — for decades. I mostly maintained one at a time, and so there was always a
|
||||
mixture of things in it: notes and lists on one page, drawings and collages on
|
||||
the next.
|
||||
|
||||
But over the last few years, I’ve been formulating a more intentional
|
||||
and systematic use of my notebooks. Now, I maintain two books at the
|
||||
same time: one for visual exploration and the other for note-taking and
|
||||
list-making.
|
||||
But over the last few years, I’ve been formulating a more intentional and
|
||||
systematic use of my notebooks. Now, I maintain two books at the same time: one
|
||||
for visual exploration and the other for note-taking and list-making.
|
||||
|
||||
[6ea49f4f-861b-408d-85eb-f8c9d7e1c95f.jpg]
|
||||
[6ea49f4f-861b-408d-85eb-f8c9d7e1c95f]
|
||||
|
||||
[3d557cb6-2c42-48c3-84ed-950cbafee775.jpg]
|
||||
[3d557cb6-2c42-48c3-84ed-950cbafee775]
|
||||
|
||||
[bd52173f-ef6c-4bb7-a15f-a99cefb63011.jpg]
|
||||
[bd52173f-ef6c-4bb7-a15f-a99cefb63011]
|
||||
|
||||
Just having two books helps, but the key to making this work as a
|
||||
productivity system is to maintain a specific habit of use. While I do
|
||||
find writing to-do lists on paper inherently better — for me — than
|
||||
using some kind of digital app because I can focus on the information
|
||||
outside of the digital space, it’s how I use them that makes them
|
||||
actually deliver results for me.
|
||||
Just having two books helps, but the key to making this work as a productivity
|
||||
system is to maintain a specific habit of use. While I do find writing to-do
|
||||
lists on paper inherently better — for me — than using some kind of digital app
|
||||
because I can focus on the information outside of the digital space, it’s how I
|
||||
use them that makes them actually deliver results for me.
|
||||
|
||||
Here’s how it works:
|
||||
|
||||
1. I end the day by making a to-do list for the next one.
|
||||
This is probably the most important work/life hack I can offer to
|
||||
anyone who doesn’t already do this. It’s a great idea to start your
|
||||
day with a prioritized list of the things you need to do. But I end
|
||||
my day by making that list so that I can also use it as a tool for
|
||||
clearing my mind and letting me make a meaningful mental break from
|
||||
work. I have also found that when my days are very busy, if I don’t
|
||||
end them with making a list for the next day, I am likely to forget
|
||||
details by the next morning. This is especially true if I let my
|
||||
inbox determine my day; if I don’t have a to-do list, my inbox
|
||||
becomes one.
|
||||
This is probably the most important work/life hack I can offer to anyone
|
||||
who doesn’t already do this. It’s a great idea to start your day with a
|
||||
prioritized list of the things you need to do. But I end my day by making
|
||||
that list so that I can also use it as a tool for clearing my mind and
|
||||
letting me make a meaningful mental break from work. I have also found that
|
||||
when my days are very busy, if I don’t end them with making a list for the
|
||||
next day, I am likely to forget details by the next morning. This is
|
||||
especially true if I let my inbox determine my day; if I don’t have a to-do
|
||||
list, my inbox becomes one.
|
||||
2. I mark my to-do list with a bright, yellow sticky note.
|
||||
This is a very small detail, but it lets me shut my notebook and
|
||||
set it aside. The next morning, I can open it directly to the day’s
|
||||
list. Then I move the sticky note to the next page. When I am
|
||||
stressed, tiny investments in my future self really pay off. Giving
|
||||
myself an immediate sense of place is one of them.
|
||||
3. If a task is longer-term and has many sub-tasks, I create an index
|
||||
card to contain it.
|
||||
I might transpose some of the sub-tasks from the card to my book so
|
||||
I can keep track of things in one place throughout the day, but
|
||||
doing this lets me think through how I’m going to achieve a larger
|
||||
goal over a longer period of time. I keep these index cards in a
|
||||
small box on my desk.
|
||||
This is a very small detail, but it lets me shut my notebook and set it
|
||||
aside. The next morning, I can open it directly to the day’s list. Then I
|
||||
move the sticky note to the next page. When I am stressed, tiny investments
|
||||
in my future self really pay off. Giving myself an immediate sense of place
|
||||
is one of them.
|
||||
3. If a task is longer-term and has many sub-tasks, I create an index card to
|
||||
contain it.
|
||||
I might transpose some of the sub-tasks from the card to my book so I can
|
||||
keep track of things in one place throughout the day, but doing this lets
|
||||
me think through how I’m going to achieve a larger goal over a longer
|
||||
period of time. I keep these index cards in a small box on my desk.
|
||||
4. There are no analytics, and that’s a feature.
|
||||
Back when I used Todoist, I found its analytics intriguing and
|
||||
motivating. I initially liked being able to pore over my
|
||||
productivity statistics. And Todoist set it up to “reward” you as
|
||||
you completed more tasks. Ithink I worked my way up to some absurd
|
||||
number of tasks complete, which the app always displayed front and
|
||||
center, and some ridiculous classification like “Master Overlord”
|
||||
or something. It worked for me, until it didn’t. Analytics in this
|
||||
context create their own layer of stress. I’d find that if my
|
||||
numbers dropped, it felt wrong, even if that was because I was less
|
||||
busy — which is probably a good thing now and again! I found that I
|
||||
was thinking about my “performance” as often as my productivity. I
|
||||
didn’t need that.
|
||||
Back when I used Todoist, I found its analytics intriguing and motivating.
|
||||
I initially liked being able to pore over my productivity statistics. And
|
||||
Todoist set it up to “reward” you as you completed more tasks. Ithink I
|
||||
worked my way up to some absurd number of tasks complete, which the app
|
||||
always displayed front and center, and some ridiculous classification like
|
||||
“Master Overlord” or something. It worked for me, until it didn’t.
|
||||
Analytics in this context create their own layer of stress. I’d find that
|
||||
if my numbers dropped, it felt wrong, even if that was because I was less
|
||||
busy — which is probably a good thing now and again! I found that I was
|
||||
thinking about my “performance” as often as my productivity. I didn’t need
|
||||
that.
|
||||
|
||||
[2e6d6ea8-930f-4297-9662-d55905f31808.jpg]
|
||||
[2e6d6ea8-930f-4297-9662-d55905f31808]
|
||||
|
||||
This is what works for me. I’d never assume it would work for everyone,
|
||||
or that everyone would have the same trouble with an app like Todoist
|
||||
that I eventually did. But if you’ve tried apps of various kinds and
|
||||
still don’t feel the benefits of organizing your work, I’d suggest
|
||||
taking it offline. One point of a system like this is to help you get
|
||||
things done. The other is to help you feel more at ease.
|
||||
This is what works for me. I’d never assume it would work for everyone, or that
|
||||
everyone would have the same trouble with an app like Todoist that I eventually
|
||||
did. But if you’ve tried apps of various kinds and still don’t feel the
|
||||
benefits of organizing your work, I’d suggest taking it offline. One point of a
|
||||
system like this is to help you get things done. The other is to help you feel
|
||||
more at ease.
|
||||
|
||||
Now, this doesn’t mean I never use a computer for notes and lists. If I
|
||||
write a note or have an idea that I want to transpose to a digital file
|
||||
so that it can become something else — like an article or a message to
|
||||
someone — I use a blue post-it note to mark it and keep it there until
|
||||
I’ve copied it over. (Many of my blue bookmarks are for dream entries
|
||||
that I like to store digitally so I can search them later. Maybe I’ll
|
||||
write something on dream journaling some day…)
|
||||
Now, this doesn’t mean I never use a computer for notes and lists. If I write a
|
||||
note or have an idea that I want to transpose to a digital file so that it can
|
||||
become something else — like an article or a message to someone — I use a blue
|
||||
post-it note to mark it and keep it there until I’ve copied it over. (Many of
|
||||
my blue bookmarks are for dream entries that I like to store digitally so I can
|
||||
search them later. Maybe I’ll write something on dream journaling some day…)
|
||||
|
||||
[0bc93018-95c3-4df0-9185-f89156dcbd19.jpg]
|
||||
[0bc93018-95c3-4df0-9185-f89156dcbd19]
|
||||
|
||||
These timeless office supplies are very useful to me and I don’t want
|
||||
to live in a world without them:
|
||||
* [40]Stillman & Birn Epsilon sketchbooks
|
||||
* [41]Pilot G2 pens
|
||||
* [42]Electric Yellow Post-it Notes
|
||||
* [43]Oxford Blank Index Cards
|
||||
* binder clips — you can get them anywhere
|
||||
These timeless office supplies are very useful to me and I don’t want to live
|
||||
in a world without them:
|
||||
|
||||
• [39]Stillman & Birn Epsilon sketchbooks
|
||||
• [40]Pilot G2 pens
|
||||
• [41]Electric Yellow Post-it Notes
|
||||
• [42]Oxford Blank Index Cards
|
||||
• binder clips — you can get them anywhere
|
||||
|
||||
Why, though?
|
||||
|
||||
I am on a continuous quest for organization.
|
||||
|
||||
For most of my life, order has been something of an obsession.
|
||||
Everywhere I look, I see chaos and entropy creeping in. I see a new
|
||||
surface and anticipate wear and tear. I see a functioning system and
|
||||
look for where it will break.
|
||||
For most of my life, order has been something of an obsession. Everywhere I
|
||||
look, I see chaos and entropy creeping in. I see a new surface and anticipate
|
||||
wear and tear. I see a functioning system and look for where it will break.
|
||||
|
||||
That may sound like an exaggeration and more than a bit unpleasant, but
|
||||
I’ve come to understand that it’s neither. Life is, paradoxically, both
|
||||
order and disorder.
|
||||
That may sound like an exaggeration and more than a bit unpleasant, but I’ve
|
||||
come to understand that it’s neither. Life is, paradoxically, both order and
|
||||
disorder.
|
||||
|
||||
The very possibility of life presumes order — the coherence of biology
|
||||
at the atomic level — and yet, the act of living tends toward disorder.
|
||||
As we live and breathe and move about this world we and it push and
|
||||
pull against one another; words against wind, towers and tides, edifice
|
||||
and erosion. Given the broadest and longest view, all created order is
|
||||
futile. We simply don’t live long enough to maintain it.
|
||||
The very possibility of life presumes order — the coherence of biology at the
|
||||
atomic level — and yet, the act of living tends toward disorder. As we live and
|
||||
breathe and move about this world we and it push and pull against one another;
|
||||
words against wind, towers and tides, edifice and erosion. Given the broadest
|
||||
and longest view, all created order is futile. We simply don’t live long enough
|
||||
to maintain it.
|
||||
|
||||
But zoomed in, at the closer range of living day by day, created order
|
||||
is, literally, the fabric of functional living. Roofs are order.
|
||||
Clothing is order. Order puts food on the table.
|
||||
But zoomed in, at the closer range of living day by day, created order is,
|
||||
literally, the fabric of functional living. Roofs are order. Clothing is order.
|
||||
Order puts food on the table.
|
||||
|
||||
I find the challenge of creating and maintaining functional systems,
|
||||
well, kind of fun. It is a creative act. And, it never ends. No system
|
||||
can last forever, and no system should. Situations change, needs
|
||||
change, we change. So the things we depend upon to exist well need to
|
||||
change, too. That means we have to continually look for things to make
|
||||
and ways to optimize them. That sounds good to me!
|
||||
__________________________________________________________________
|
||||
I find the challenge of creating and maintaining functional systems, well, kind
|
||||
of fun. It is a creative act. And, it never ends. No system can last forever,
|
||||
and no system should. Situations change, needs change, we change. So the things
|
||||
we depend upon to exist well need to change, too. That means we have to
|
||||
continually look for things to make and ways to optimize them. That sounds good
|
||||
to me!
|
||||
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
|
||||
Written by [43]Christopher Butler on August 18, 2023, In [44]Essays
|
||||
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
Written by [44]Christopher Butler on August 18, 2023, In [45]Essays
|
||||
__________________________________________________________________
|
||||
|
||||
Next Entry
|
||||
|
||||
[46]The Internet's Greatest Potential It seems that the internet’s
|
||||
greatest potential is to create intimacy across distance. Which means
|
||||
we still have a long way to go
|
||||
[45] The Internet's Greatest Potential It seems that the internet’s greatest
|
||||
potential is to create intimacy across distance. Which means we still have a
|
||||
long way to go
|
||||
|
||||
Previous Entry
|
||||
|
||||
[47]The Internet is Already a Social Network Make it easier for anyone
|
||||
to have a website. Make syndication easier and better. That’s all that
|
||||
is needed to reclaim the power we’ve ceded to the
|
||||
__________________________________________________________________
|
||||
[46] The Internet is Already a Social Network Make it easier for anyone to have
|
||||
a website. Make syndication easier and better. That’s all that is needed to
|
||||
reclaim the power we’ve ceded to the
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
⌨ Keep up via [48]Email or [49]RSS
|
||||
⌨ Keep up via [47]Email or [48]RSS
|
||||
|
||||
✺ [50]Impressum
|
||||
✺ [49]Impressum
|
||||
|
||||
© Christopher Butler. All rights reserved
|
||||
|
||||
References
|
||||
|
||||
1. https://www.chrbutler.com/feed.rss
|
||||
2. https://www.chrbutler.com/
|
||||
3. https://www.chrbutler.com/archives
|
||||
4. https://www.chrbutler.com/information
|
||||
5. https://www.chrbutler.com/now/2024-01-06
|
||||
6. https://www.lg.com/us/monitors/lg-32un880-b-4k-uhd-led-monitor
|
||||
7. https://www.ergotron.com/en-us/products/product-details/45-241#?color=black&attachment option=2-Piece Clamp
|
||||
8. https://www.elgato.com/en/key-light
|
||||
9. https://www.shure.com/en-US/products/microphones/sm7b?variant=SM7B
|
||||
10. https://www.elgato.com/en/wave-mic-arm-lp
|
||||
11. https://electronics.sony.com/imaging/interchangeable-lens-cameras/all-interchangeable-lens-cameras/p/ilce7c-b
|
||||
12. https://electronics.sony.com/imaging/lenses/all-e-mount/p/sel35f14gm
|
||||
13. https://www.amazon.com/dp/B08LV7GZVB?psc=1&ref=ppx_yo2ov_dt_b_product_details
|
||||
14. https://audioengine.com/shop/wirelessspeakers/hd3-wireless-speakers/
|
||||
15. https://www.chrbutler.com/2023-04-24
|
||||
16. https://floydhome.com/products/the-floyd-table?variant=36527968321698
|
||||
17. https://www.standupdeskstore.com/sliding-under-desk-pencil-drawer
|
||||
18. https://www.cyberpowersystems.com/product/ups/pfc-sinewave/cp1500pfclcd/
|
||||
19. https://www.ikea.com/gb/en/p/kornsjoe-side-table-black-70455412/
|
||||
20. https://www.caldigit.com/thunderbolt-station-4/
|
||||
21. https://www.amazon.com/dp/B0BBZT42HC?ref=ppx_yo2ov_dt_b_product_details&th=1
|
||||
22. https://www.amazon.com/dp/B09QV692XY?ref=ppx_yo2ov_dt_b_product_details&th=1
|
||||
23. https://www.amazon.com/dp/B08ZY48D8M?ref=ppx_yo2ov_dt_b_product_details&th=1
|
||||
24. https://www.lacie.com/products/big/2big/
|
||||
25. https://www.cloudmicrophones.com/cloudlifter-cl-1?gclid=CjwKCAjw_YShBhAiEiwAMomsENVjS7OaiiBgaZkiAqqDGiUd74Ln6BUrZxcpHovOibPqJUAtNN6weBoCzzkQAvD_BwE
|
||||
26. https://focusrite.com/en/usb-audio-interface/scarlett/scarlett-2i2
|
||||
27. https://www.minidisc.org/part_Sony_MXD-D40.html
|
||||
28. https://www.cyberpowersystems.com/product/ups/pfc-sinewave/cp1500pfclcd/
|
||||
29. https://www.thelibrarystore.com/product/cn66-02050/bookends
|
||||
30. https://g.co/kgs/cfKCBZ
|
||||
31. https://www.irisusainc.com/products/weathertight-storage-box-30-quart
|
||||
32. https://www.etsy.com/listing/120787781/35-extra-deep-4-ft-floating-ledge-for
|
||||
33. https://www.lowes.com/pd/Style-Selections-70-5-in-Black-Shelf-Upright/4640257
|
||||
34. https://www.lowes.com/pd/Style-Selections-2-in-Shelf-Bracket/4640145
|
||||
35. https://www.thelibrarystore.com/product/cn66-02050/bookends
|
||||
36. https://g.co/kgs/cfKCBZ
|
||||
37. https://www.irisusainc.com/products/weathertight-storage-box-30-quart
|
||||
38. https://www.craftsman.com/collections/tradestack
|
||||
39. https://viesso.com/products/dublexo-black-pin-sofa-bed?variant=42181265522844
|
||||
40. https://www.stillmanandbirn.com/products_epsilon_hardbound.php
|
||||
41. https://g.co/kgs/7ot9aS
|
||||
42. https://www.post-it.com/3M/en_US/post-it/products/~/Post-it-Super-Sticky-Notes-3-in-x-3-in-Electric-Yellow-12-Pads-Pack-90-Sheets-Pad/?N=4327+3289961157+3294529207&rt=rud
|
||||
43. https://www.tops-products.com/oxfordtm-blank-index-cards-white-3-x-5-100-per-pack-4.html
|
||||
44. https://www.chrbutler.com/information
|
||||
45. https://www.chrbutler.com/tagged/essays
|
||||
46. https://www.chrbutler.com/2023-08-21
|
||||
47. https://www.chrbutler.com/2023-07-19
|
||||
48. https://dontthinkaboutthefuture.eo.page/8y4tg
|
||||
49. http://chrbutler.com/feed.rss
|
||||
50. https://www.chrbutler.com/impressum
|
||||
|
||||
References:
|
||||
|
||||
[1] https://www.chrbutler.com/
|
||||
[2] https://www.chrbutler.com/archives
|
||||
[3] https://www.chrbutler.com/information
|
||||
[4] https://www.chrbutler.com/now/2024-01-06
|
||||
[5] https://www.lg.com/us/monitors/lg-32un880-b-4k-uhd-led-monitor
|
||||
[6] https://www.ergotron.com/en-us/products/product-details/45-241#?color=black&attachment%20option=2-Piece%20Clamp
|
||||
[7] https://www.elgato.com/en/key-light
|
||||
[8] https://www.shure.com/en-US/products/microphones/sm7b?variant=SM7B
|
||||
[9] https://www.elgato.com/en/wave-mic-arm-lp
|
||||
[10] https://electronics.sony.com/imaging/interchangeable-lens-cameras/all-interchangeable-lens-cameras/p/ilce7c-b
|
||||
[11] https://electronics.sony.com/imaging/lenses/all-e-mount/p/sel35f14gm
|
||||
[12] https://www.amazon.com/dp/B08LV7GZVB?psc=1&ref=ppx_yo2ov_dt_b_product_details
|
||||
[13] https://audioengine.com/shop/wirelessspeakers/hd3-wireless-speakers/
|
||||
[14] https://www.chrbutler.com/2023-04-24
|
||||
[15] https://floydhome.com/products/the-floyd-table?variant=36527968321698
|
||||
[16] https://www.standupdeskstore.com/sliding-under-desk-pencil-drawer
|
||||
[17] https://www.cyberpowersystems.com/product/ups/pfc-sinewave/cp1500pfclcd/
|
||||
[18] https://www.ikea.com/gb/en/p/kornsjoe-side-table-black-70455412/
|
||||
[19] https://www.caldigit.com/thunderbolt-station-4/
|
||||
[20] https://www.amazon.com/dp/B0BBZT42HC?ref=ppx_yo2ov_dt_b_product_details&th=1
|
||||
[21] https://www.amazon.com/dp/B09QV692XY?ref=ppx_yo2ov_dt_b_product_details&th=1
|
||||
[22] https://www.amazon.com/dp/B08ZY48D8M?ref=ppx_yo2ov_dt_b_product_details&th=1
|
||||
[23] https://www.lacie.com/products/big/2big/
|
||||
[24] https://www.cloudmicrophones.com/cloudlifter-cl-1?gclid=CjwKCAjw_YShBhAiEiwAMomsENVjS7OaiiBgaZkiAqqDGiUd74Ln6BUrZxcpHovOibPqJUAtNN6weBoCzzkQAvD_BwE
|
||||
[25] https://focusrite.com/en/usb-audio-interface/scarlett/scarlett-2i2
|
||||
[26] https://www.minidisc.org/part_Sony_MXD-D40.html
|
||||
[27] https://www.cyberpowersystems.com/product/ups/pfc-sinewave/cp1500pfclcd/
|
||||
[28] https://www.thelibrarystore.com/product/cn66-02050/bookends
|
||||
[29] https://g.co/kgs/cfKCBZ
|
||||
[30] https://www.irisusainc.com/products/weathertight-storage-box-30-quart
|
||||
[31] https://www.etsy.com/listing/120787781/35-extra-deep-4-ft-floating-ledge-for
|
||||
[32] https://www.lowes.com/pd/Style-Selections-70-5-in-Black-Shelf-Upright/4640257
|
||||
[33] https://www.lowes.com/pd/Style-Selections-2-in-Shelf-Bracket/4640145
|
||||
[34] https://www.thelibrarystore.com/product/cn66-02050/bookends
|
||||
[35] https://g.co/kgs/cfKCBZ
|
||||
[36] https://www.irisusainc.com/products/weathertight-storage-box-30-quart
|
||||
[37] https://www.craftsman.com/collections/tradestack
|
||||
[38] https://viesso.com/products/dublexo-black-pin-sofa-bed?variant=42181265522844
|
||||
[39] https://www.stillmanandbirn.com/products_epsilon_hardbound.php
|
||||
[40] https://g.co/kgs/7ot9aS
|
||||
[41] https://www.post-it.com/3M/en_US/post-it/products/~/Post-it-Super-Sticky-Notes-3-in-x-3-in-Electric-Yellow-12-Pads-Pack-90-Sheets-Pad/?N=4327+3289961157+3294529207&rt=rud
|
||||
[42] https://www.tops-products.com/oxfordtm-blank-index-cards-white-3-x-5-100-per-pack-4.html
|
||||
[43] https://www.chrbutler.com/information
|
||||
[44] https://www.chrbutler.com/tagged/essays
|
||||
[45] https://www.chrbutler.com/2023-08-21
|
||||
[46] https://www.chrbutler.com/2023-07-19
|
||||
[47] https://dontthinkaboutthefuture.eo.page/8y4tg
|
||||
[48] http://chrbutler.com/feed.rss
|
||||
[49] https://www.chrbutler.com/impressum
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,307 +1,296 @@
|
||||
#[1]alternate [2]Julia Cameron Wants You to Do Your Morning Pages
|
||||
|
||||
(BUTTON)
|
||||
(BUTTON) Sections
|
||||
(BUTTON) SEARCH
|
||||
[3]Skip to content
|
||||
|
||||
[1]Skip to content[2]Skip to site index
|
||||
[3]
|
||||
[4]Style|Julia Cameron Wants You to Do Your Morning Pages
|
||||
https://www.nytimes.com/2019/02/02/style/julia-cameron-the-artists-way.
|
||||
html
|
||||
* (BUTTON) Give this article
|
||||
* (BUTTON)
|
||||
* (BUTTON)
|
||||
[5][6]
|
||||
https://www.nytimes.com/2019/02/02/style/julia-cameron-the-artists-way.html
|
||||
|
||||
Julia Cameron, making change at 70.
|
||||
Julia Cameron, making change at 70.Credit...Ramsay de Give for The New
|
||||
York Times
|
||||
• Share full article
|
||||
•
|
||||
•
|
||||
|
||||
[merlin_149295975_44170fa1-6d57-454f-a8b4-112222add07b-articleLarge]
|
||||
Julia Cameron, making change at 70.Credit...Ramsay de Give for The New York
|
||||
Times
|
||||
|
||||
Julia Cameron Wants You to Do Your Morning Pages
|
||||
|
||||
With “The Artist’s Way,” Julia Cameron invented the way people renovate
|
||||
the creative soul.
|
||||
With “The Artist’s Way,” Julia Cameron invented the way people renovate the
|
||||
creative soul.
|
||||
|
||||
Julia Cameron, making change at 70.Credit...Ramsay de Give for The New
|
||||
York Times
|
||||
Julia Cameron, making change at 70.Credit...Ramsay de Give for The New York
|
||||
Times
|
||||
|
||||
Supported by
|
||||
[5]Continue reading the main story
|
||||
* Send any friend a story
|
||||
As a subscriber, you have 10 gift articles to give each month.
|
||||
Anyone can read what you share.
|
||||
(BUTTON)
|
||||
(BUTTON) Give this article
|
||||
* (BUTTON)
|
||||
* (BUTTON)
|
||||
|
||||
[6]Penelope Green
|
||||
[10]SKIP ADVERTISEMENT
|
||||
|
||||
By [7]Penelope Green
|
||||
* Feb. 2, 2019
|
||||
• Share full article
|
||||
•
|
||||
•
|
||||
|
||||
SANTA FE, N.M. — On any given day, someone somewhere is likely leading
|
||||
an Artist’s Way group, gamely knocking back the exercises of “The
|
||||
Artist’s Way” book, the quasi-spiritual manual for “creative recovery,”
|
||||
as its author Julia Cameron puts it, that has been a lodestar to
|
||||
blocked writers and other artistic hopefuls for more than a quarter of
|
||||
a century. There have been Artist’s Way clusters in the Australian
|
||||
outback and the Panamanian jungle; in Brazil, Russia, the United
|
||||
Kingdom and Japan; and also, as a cursory scan of Artist’s Way Meetups
|
||||
reveals, in Des Moines and Toronto. It has been taught in prisons and
|
||||
sober communities, at spiritual retreats and New Age centers, from
|
||||
Esalen to Sedona, from the Omega Institute to the [8]Open Center, where
|
||||
Ms. Cameron will appear in late March, as she does most years.
|
||||
Adherents of “The Artist’s Way” include the authors Patricia Cornwell
|
||||
and Sarah Ban Breathnach. Pete Townshend, Alicia Keys and Helmut Newton
|
||||
have all noted its influence on their work.
|
||||
[14]Penelope Green
|
||||
|
||||
So has Tim Ferriss, the hyperactive productivity guru behind “The Four
|
||||
Hour Workweek,” though to save time he didn’t actually read the book,
|
||||
“which was recommended to me by many megaselling authors,” [9]he
|
||||
writes. He just did the “Morning Pages,” one of the book’s central
|
||||
exercises. It requires you write three pages, by hand, first thing in
|
||||
the morning, about whatever comes to mind. (Fortunes would seem to have
|
||||
been made on the journals printed to support this effort.) The book’s
|
||||
other main dictum is the “Artist’s Date” — two hours of alone time each
|
||||
week to be spent at a gallery, say, or any place where a new experience
|
||||
might be possible.
|
||||
By [15]Penelope Green
|
||||
|
||||
• Feb. 2, 2019
|
||||
|
||||
SANTA FE, N.M. — On any given day, someone somewhere is likely leading an
|
||||
Artist’s Way group, gamely knocking back the exercises of “The Artist’s Way”
|
||||
book, the quasi-spiritual manual for “creative recovery,” as its author Julia
|
||||
Cameron puts it, that has been a lodestar to blocked writers and other artistic
|
||||
hopefuls for more than a quarter of a century. There have been Artist’s Way
|
||||
clusters in the Australian outback and the Panamanian jungle; in Brazil,
|
||||
Russia, the United Kingdom and Japan; and also, as a cursory scan of Artist’s
|
||||
Way Meetups reveals, in Des Moines and Toronto. It has been taught in prisons
|
||||
and sober communities, at spiritual retreats and New Age centers, from Esalen
|
||||
to Sedona, from the Omega Institute to the [16]Open Center, where Ms. Cameron
|
||||
will appear in late March, as she does most years. Adherents of “The Artist’s
|
||||
Way” include the authors Patricia Cornwell and Sarah Ban Breathnach. Pete
|
||||
Townshend, Alicia Keys and Helmut Newton have all noted its influence on their
|
||||
work.
|
||||
|
||||
So has Tim Ferriss, the hyperactive productivity guru behind “The Four Hour
|
||||
Workweek,” though to save time he didn’t actually read the book, “which was
|
||||
recommended to me by many megaselling authors,” [17]he writes. He just did the
|
||||
“Morning Pages,” one of the book’s central exercises. It requires you write
|
||||
three pages, by hand, first thing in the morning, about whatever comes to mind.
|
||||
(Fortunes would seem to have been made on the journals printed to support this
|
||||
effort.) The book’s other main dictum is the “Artist’s Date” — two hours of
|
||||
alone time each week to be spent at a gallery, say, or any place where a new
|
||||
experience might be possible.
|
||||
|
||||
Elizabeth Gilbert, who has “done” the book three times, said there would be no
|
||||
“Eat, Pray, Love,” without “The Artist’s Way.” Without it, there might be no
|
||||
[18]adult coloring books, no [19]journaling fever. “Creativity” would not have
|
||||
its own publishing niche or have become a ubiquitous buzzword — the “fat-free”
|
||||
of the self-help world — and business pundits would not deploy it as a specious
|
||||
organizing principle.
|
||||
|
||||
Elizabeth Gilbert, who has “done” the book three times, said there
|
||||
would be no “Eat, Pray, Love,” without “The Artist’s Way.” Without it,
|
||||
there might be no [10]adult coloring books, no [11]journaling fever.
|
||||
“Creativity” would not have its own publishing niche or have become a
|
||||
ubiquitous buzzword — the “fat-free” of the self-help world — and
|
||||
business pundits would not deploy it as a specious organizing
|
||||
principle.
|
||||
Image
|
||||
|
||||
The book’s enduring success — over 4 million copies have been sold
|
||||
since its publication in 1992 — have made its author, a shy
|
||||
Midwesterner who had a bit of early fame in the 1970s for practicing
|
||||
lively New Journalism at the Washington Post and Rolling Stone, among
|
||||
other publications, and for being married, briefly, to Martin Scorsese,
|
||||
with whom she has a daughter, Domenica — an unlikely celebrity. With
|
||||
its gentle affirmations, inspirational quotes, fill-in-the-blank lists
|
||||
and tasks — write yourself a thank-you letter, describe yourself at 80,
|
||||
for example — “The Artist’s Way” proposes an egalitarian view of
|
||||
creativity: Everyone’s got it.
|
||||
The book’s enduring success — over 4 million copies have been sold since its
|
||||
publication in 1992 — have made its author, a shy Midwesterner who had a bit of
|
||||
early fame in the 1970s for practicing lively New Journalism at the Washington
|
||||
Post and Rolling Stone, among other publications, and for being married,
|
||||
briefly, to Martin Scorsese, with whom she has a daughter, Domenica — an
|
||||
unlikely celebrity. With its gentle affirmations, inspirational quotes,
|
||||
fill-in-the-blank lists and tasks — write yourself a thank-you letter, describe
|
||||
yourself at 80, for example — “The Artist’s Way” proposes an egalitarian view
|
||||
of creativity: Everyone’s got it.
|
||||
|
||||
The book promises to free up that inner artist in 12 weeks. It’s a
|
||||
template that would seem to reflect the practices of 12-step programs,
|
||||
particularly its invocations to a higher power. But according to Ms.
|
||||
Cameron, who has been sober since she was 29, “12 weeks is how long it
|
||||
takes for people to cook.”
|
||||
The book promises to free up that inner artist in 12 weeks. It’s a template
|
||||
that would seem to reflect the practices of 12-step programs, particularly its
|
||||
invocations to a higher power. But according to Ms. Cameron, who has been sober
|
||||
since she was 29, “12 weeks is how long it takes for people to cook.”
|
||||
|
||||
Now 70, she lives in a spare adobe house in Santa Fe, overlooking an
|
||||
acre of scrub and the Sangre de Cristo mountain range. She moved a few
|
||||
years ago from Manhattan, following an exercise from her book to list
|
||||
25 things you love. As she recalled, “I wrote juniper, sage brush,
|
||||
chili, mountains and sky and I said, ‘This is not the Chrysler
|
||||
Building.’” On a recent snowy afternoon, Ms. Cameron, who has enormous
|
||||
blue eyes and a nimbus of blonde hair, admitted to the jitters before
|
||||
this interview. “I asked three friends to pray for me,” she said. “I
|
||||
also wrote a note to myself to be funny.”
|
||||
Now 70, she lives in a spare adobe house in Santa Fe, overlooking an acre of
|
||||
scrub and the Sangre de Cristo mountain range. She moved a few years ago from
|
||||
Manhattan, following an exercise from her book to list 25 things you love. As
|
||||
she recalled, “I wrote juniper, sage brush, chili, mountains and sky and I
|
||||
said, ‘This is not the Chrysler Building.’” On a recent snowy afternoon, Ms.
|
||||
Cameron, who has enormous blue eyes and a nimbus of blonde hair, admitted to
|
||||
the jitters before this interview. “I asked three friends to pray for me,” she
|
||||
said. “I also wrote a note to myself to be funny.”
|
||||
|
||||
In the early 1970s, Ms. Cameron, who is the second oldest of seven
|
||||
children and grew up just north of Chicago, was making $67 a week
|
||||
working in the mail room of the Washington Post. At the same time, she
|
||||
was writing deft lifestyle pieces for the paper — like an East Coast
|
||||
Eve Babitz. “With a byline, no one knows you’re just a gofer,” she
|
||||
said.
|
||||
In the early 1970s, Ms. Cameron, who is the second oldest of seven children and
|
||||
grew up just north of Chicago, was making $67 a week working in the mail room
|
||||
of the Washington Post. At the same time, she was writing deft lifestyle pieces
|
||||
for the paper — like an East Coast Eve Babitz. “With a byline, no one knows
|
||||
you’re just a gofer,” she said.
|
||||
|
||||
In her reporting, Ms. Cameron observed an epidemic of green nail polish
|
||||
and other “Cabaret”-inspired behaviors in Beltway bars, and slyly
|
||||
reviewed a new party drug, methaqualone. She was also, by her own
|
||||
admission, a blackout drunk. “I thought drinking was something you did
|
||||
and your friends told you about it later,” she said. “In retrospect, in
|
||||
cozy retrospect, I was in trouble from my first drink.”
|
||||
In her reporting, Ms. Cameron observed an epidemic of green nail polish and
|
||||
other “Cabaret”-inspired behaviors in Beltway bars, and slyly reviewed a new
|
||||
party drug, methaqualone. She was also, by her own admission, a blackout drunk.
|
||||
“I thought drinking was something you did and your friends told you about it
|
||||
later,” she said. “In retrospect, in cozy retrospect, I was in trouble from my
|
||||
first drink.”
|
||||
|
||||
She met Mr. Scorsese on assignment for Oui magazine and fell hard for
|
||||
him. She did a bit of script-doctoring on “Taxi Driver,” and followed
|
||||
the director to Los Angeles. “I got pregnant on our wedding night,” she
|
||||
said. “Like a good Catholic girl.” When Mr. Scorsese took up with Liza
|
||||
Minnelli while all three were working on “New York, New York,” the
|
||||
marriage was done. (She recently made a painting depicting herself as a
|
||||
white horse and Mr. Scorsese as a lily. “I wanted to make a picture
|
||||
about me and Marty,” she said. “He was magical-seeming to me and when I
|
||||
look at it I think, ‘Oh, she’s fascinated, but she doesn’t
|
||||
She met Mr. Scorsese on assignment for Oui magazine and fell hard for him. She
|
||||
did a bit of script-doctoring on “Taxi Driver,” and followed the director to
|
||||
Los Angeles. “I got pregnant on our wedding night,” she said. “Like a good
|
||||
Catholic girl.” When Mr. Scorsese took up with Liza Minnelli while all three
|
||||
were working on “New York, New York,” the marriage was done. (She recently made
|
||||
a painting depicting herself as a white horse and Mr. Scorsese as a lily. “I
|
||||
wanted to make a picture about me and Marty,” she said. “He was magical-seeming
|
||||
to me and when I look at it I think, ‘Oh, she’s fascinated, but she doesn’t
|
||||
understand.’”)
|
||||
|
||||
Image Under the pines.
|
||||
Image[merlin_149296134_e17f3630-d6d2-4d46-961e-bddec24c3feb-articleLarge]
|
||||
Under the pines.Credit...Ramsay de Give for The New York Times
|
||||
|
||||
In her memoir, “Floor Sample,” published in 2006, Ms. Cameron recounts
|
||||
the brutality of Hollywood, of her life there as a screenwriter and a
|
||||
drunk. Pauline Kael, she writes, described her as a “pornographic
|
||||
Victorian valentine, like a young Angela Lansbury.” Don’t marry her for
|
||||
tax reasons, Ms. Kael warns Mr. Scorsese. Andy Warhol, who escorts her
|
||||
to the premiere of “New York, New York,” inscribes her into his diary
|
||||
as a “lush.” A cocaine dealer soothes her — “You have a tiny little
|
||||
wife’s habit” — and a doctor shoos her away from his hospital when she
|
||||
asks for help, telling her she’s no alcoholic, just a “sensitive young
|
||||
woman.” She goes into labor in full makeup and a Chinese dressing gown,
|
||||
vowing to be “no trouble.”
|
||||
In her memoir, “Floor Sample,” published in 2006, Ms. Cameron recounts the
|
||||
brutality of Hollywood, of her life there as a screenwriter and a drunk.
|
||||
Pauline Kael, she writes, described her as a “pornographic Victorian valentine,
|
||||
like a young Angela Lansbury.” Don’t marry her for tax reasons, Ms. Kael warns
|
||||
Mr. Scorsese. Andy Warhol, who escorts her to the premiere of “New York, New
|
||||
York,” inscribes her into his diary as a “lush.” A cocaine dealer soothes her —
|
||||
“You have a tiny little wife’s habit” — and a doctor shoos her away from his
|
||||
hospital when she asks for help, telling her she’s no alcoholic, just a
|
||||
“sensitive young woman.” She goes into labor in full makeup and a Chinese
|
||||
dressing gown, vowing to be “no trouble.”
|
||||
|
||||
“I think it’s fair to say that drinking and drugs stopped looking like
|
||||
a path to success,” she said. “So I luckily stopped. I had a couple of
|
||||
sober friends and they said, ‘Try and let the higher power write
|
||||
through you.’ And I said, What if he doesn’t want to?’ They said, ‘Just
|
||||
try it.’”
|
||||
“I think it’s fair to say that drinking and drugs stopped looking like a path
|
||||
to success,” she said. “So I luckily stopped. I had a couple of sober friends
|
||||
and they said, ‘Try and let the higher power write through you.’ And I said,
|
||||
What if he doesn’t want to?’ They said, ‘Just try it.’”
|
||||
|
||||
So she did. She wrote novels and screenplays. She wrote poems and
|
||||
musicals. She wasn’t always well-reviewed, but she took the knocks with
|
||||
typical grit, and she schooled others to do so as well. “I have
|
||||
unblocked poets, lawyers and painters,” she said. She taught her tools
|
||||
in living rooms and classrooms — “if someone was dumb enough to lend us
|
||||
one,” she said — and back in New York, at the Feminist Art Institute.
|
||||
Over the years, she refined her tools, typed them up, and sold Xeroxed
|
||||
copies in local bookstores for $20. It was her second husband, Mark
|
||||
Bryan, a writer, who needled her into making the pages into a proper
|
||||
book.
|
||||
So she did. She wrote novels and screenplays. She wrote poems and musicals. She
|
||||
wasn’t always well-reviewed, but she took the knocks with typical grit, and she
|
||||
schooled others to do so as well. “I have unblocked poets, lawyers and
|
||||
painters,” she said. She taught her tools in living rooms and classrooms — “if
|
||||
someone was dumb enough to lend us one,” she said — and back in New York, at
|
||||
the Feminist Art Institute. Over the years, she refined her tools, typed them
|
||||
up, and sold Xeroxed copies in local bookstores for $20. It was her second
|
||||
husband, Mark Bryan, a writer, who needled her into making the pages into a
|
||||
proper book.
|
||||
|
||||
The first printing was about 9,000 copies, said Joel Fotinos, formerly
|
||||
the publisher at Tarcher/Penguin, which published the book in 1992.
|
||||
There was concern that it wouldn’t sell. “Part of the reason,” Mr.
|
||||
Fotinos said, “was that this was a book that wasn’t like anything else.
|
||||
We didn’t know where to put it on the shelves — did it go in religion
|
||||
or self-help? Eventually there was a category called ‘creativity,’ and
|
||||
‘The Artist’s Way’ launched it.” Now an editorial director at St.
|
||||
Martin’s Press, Mr. Fotinos said he is deluged with pitches from
|
||||
authors claiming they’ve written “the new Artist’s Way.”
|
||||
The first printing was about 9,000 copies, said Joel Fotinos, formerly the
|
||||
publisher at Tarcher/Penguin, which published the book in 1992. There was
|
||||
concern that it wouldn’t sell. “Part of the reason,” Mr. Fotinos said, “was
|
||||
that this was a book that wasn’t like anything else. We didn’t know where to
|
||||
put it on the shelves — did it go in religion or self-help? Eventually there
|
||||
was a category called ‘creativity,’ and ‘The Artist’s Way’ launched it.” Now an
|
||||
editorial director at St. Martin’s Press, Mr. Fotinos said he is deluged with
|
||||
pitches from authors claiming they’ve written “the new Artist’s Way.”
|
||||
|
||||
“But for Julia, creativity was a tool for survival,” he said. “It was
|
||||
literally her medicine and that’s why the book is so authentic, and
|
||||
resonates with so many people.”
|
||||
“But for Julia, creativity was a tool for survival,” he said. “It was literally
|
||||
her medicine and that’s why the book is so authentic, and resonates with so
|
||||
many people.”
|
||||
|
||||
“I am my tool kits,” Ms. Cameron said.
|
||||
|
||||
And, indeed, “The Artist’s Way” is stuffed with tools: worksheets to be
|
||||
filled with thoughts about money, childhood games, old hurts; wish
|
||||
lists and exercises, many of which seem exhaustive and exhausting —
|
||||
“Write down any resistance, angers and fears,” e.g. — and others that
|
||||
are more practical: “Take a 20 minutes walk,” “Mend any mending” and
|
||||
“repot any pinched and languishing plants.” It anticipates the work of
|
||||
the indefatigable [12]Gretchen Rubin, the happiness maven, if Ms. Rubin
|
||||
were a bit kinder but less Type-A.
|
||||
And, indeed, “The Artist’s Way” is stuffed with tools: worksheets to be filled
|
||||
with thoughts about money, childhood games, old hurts; wish lists and
|
||||
exercises, many of which seem exhaustive and exhausting — “Write down any
|
||||
resistance, angers and fears,” e.g. — and others that are more practical: “Take
|
||||
a 20 minutes walk,” “Mend any mending” and “repot any pinched and languishing
|
||||
plants.” It anticipates the work of the indefatigable [20]Gretchen Rubin, the
|
||||
happiness maven, if Ms. Rubin were a bit kinder but less Type-A.
|
||||
|
||||
“When I teach, it’s like watching the lights come on,” said Ms.
|
||||
Cameron. “My students don’t get lectured to. I think they feel safe.
|
||||
Rather than try and fix themselves, they learn to accept themselves. I
|
||||
think my work makes people autonomous. I feel like people fall in love
|
||||
with themselves.”
|
||||
“When I teach, it’s like watching the lights come on,” said Ms. Cameron. “My
|
||||
students don’t get lectured to. I think they feel safe. Rather than try and fix
|
||||
themselves, they learn to accept themselves. I think my work makes people
|
||||
autonomous. I feel like people fall in love with themselves.”
|
||||
|
||||
Anne Lamott, the inspirational writer and novelist, said that when she
|
||||
was teaching writing full-time, her own students swore by “The Artist’s
|
||||
Way.” “That exercise — three pages of automatic writing — was a
|
||||
sacrament for people,” Ms. Lamott wrote in a recent email. “They could
|
||||
plug into something bigger than the rat exercise wheel of self-loathing
|
||||
and grandiosity that every writer experiences: ‘This could very easily
|
||||
end up being an Oprah Book,’ or ‘Who do I think I’m fooling? I’m a
|
||||
subhuman blowhard.’”
|
||||
Anne Lamott, the inspirational writer and novelist, said that when she was
|
||||
teaching writing full-time, her own students swore by “The Artist’s Way.” “That
|
||||
exercise — three pages of automatic writing — was a sacrament for people,” Ms.
|
||||
Lamott wrote in a recent email. “They could plug into something bigger than the
|
||||
rat exercise wheel of self-loathing and grandiosity that every writer
|
||||
experiences: ‘This could very easily end up being an Oprah Book,’ or ‘Who do I
|
||||
think I’m fooling? I’m a subhuman blowhard.’”
|
||||
|
||||
“She’s given you an assignment that is doable, and I think it’s kind of
|
||||
a cognitive centering device. Like scribbly meditation,” Ms. Lamott
|
||||
wrote. “It’s sort of like how manicurists put smooth pebbles in the
|
||||
warm soaking water, so your fingers have something to do, and you don’t
|
||||
climb the walls.”
|
||||
“She’s given you an assignment that is doable, and I think it’s kind of a
|
||||
cognitive centering device. Like scribbly meditation,” Ms. Lamott wrote. “It’s
|
||||
sort of like how manicurists put smooth pebbles in the warm soaking water, so
|
||||
your fingers have something to do, and you don’t climb the walls.”
|
||||
|
||||
Image
|
||||
In the wild.Credit...Ramsay de Give for The New York Times
|
||||
|
||||
Ms. Cameron continues to write her Morning Pages every day, even though
|
||||
she continues, as she said, to be grouchy upon awakening. She eats
|
||||
oatmeal at a local cafe and walks Lily, an eager white Westie. She
|
||||
reads no newspapers, or social media (perhaps the most grueling tenet
|
||||
of “The Artist’s Way” is a week of “reading deprivation”), though an
|
||||
assistant runs a Twitter and Instagram account on her behalf. She
|
||||
writes for hours, mostly musicals, collaborating with her daughter, a
|
||||
film director, and others.
|
||||
Ms. Cameron continues to write her Morning Pages every day, even though she
|
||||
continues, as she said, to be grouchy upon awakening. She eats oatmeal at a
|
||||
local cafe and walks Lily, an eager white Westie. She reads no newspapers, or
|
||||
social media (perhaps the most grueling tenet of “The Artist’s Way” is a week
|
||||
of “reading deprivation”), though an assistant runs a Twitter and Instagram
|
||||
account on her behalf. She writes for hours, mostly musicals, collaborating
|
||||
with her daughter, a film director, and others.
|
||||
|
||||
Ms. Cameron may be a veteran of the modern self-care movement but her
|
||||
life has not been all moonbeams and rainbows, and it shows. She was
|
||||
candid in conversation, if not quite at ease. “So I haven’t proven
|
||||
myself to be hilarious,” she said with a flash of dry humor, adding
|
||||
that even after so many years, she still gets stage-fright before
|
||||
beginning a workshop.
|
||||
Ms. Cameron may be a veteran of the modern self-care movement but her life has
|
||||
not been all moonbeams and rainbows, and it shows. She was candid in
|
||||
conversation, if not quite at ease. “So I haven’t proven myself to be
|
||||
hilarious,” she said with a flash of dry humor, adding that even after so many
|
||||
years, she still gets stage-fright before beginning a workshop.
|
||||
|
||||
She has written about her own internal critic, imagining a gay British
|
||||
interior designer she calls Nigel. “And nothing is ever good enough for
|
||||
Nigel,” she said. But she soldiers on.
|
||||
She has written about her own internal critic, imagining a gay British interior
|
||||
designer she calls Nigel. “And nothing is ever good enough for Nigel,” she
|
||||
said. But she soldiers on.
|
||||
|
||||
She will tell you that she has good boundaries. But like many
|
||||
successful women, she brushes off her achievements, attributing her
|
||||
unlooked-for wins to luck.
|
||||
She will tell you that she has good boundaries. But like many successful women,
|
||||
she brushes off her achievements, attributing her unlooked-for wins to luck.
|
||||
|
||||
“If you have to learn how to do a movie, you might learn from Martin
|
||||
Scorsese. If you have to learn about entrepreneurship, you might learn
|
||||
from Mark” — her second husband. “So I’m very lucky,” she said. “If I
|
||||
have a hard time blowing my own horn, I’ve been attracted to people who
|
||||
blew it for me.”
|
||||
“If you have to learn how to do a movie, you might learn from Martin Scorsese.
|
||||
If you have to learn about entrepreneurship, you might learn from Mark” — her
|
||||
second husband. “So I’m very lucky,” she said. “If I have a hard time blowing
|
||||
my own horn, I’ve been attracted to people who blew it for me.”
|
||||
|
||||
[21]Penelope Green is a reporter for Styles. She has been a reporter for the
|
||||
Home section, editor of Styles of The Times — an early iteration of Styles —
|
||||
and a story editor at the Times magazine. [22]More about Penelope Green
|
||||
|
||||
A version of this article appears in print on , Section ST, Page 1 of the New
|
||||
York edition with the headline: She Guides Your Process. [23]Order Reprints |
|
||||
[24]Today’s Paper | [25]Subscribe
|
||||
|
||||
• Share full article
|
||||
•
|
||||
•
|
||||
|
||||
Advertisement
|
||||
[13]Continue reading the main story
|
||||
|
||||
[29]SKIP ADVERTISEMENT
|
||||
|
||||
Site Index
|
||||
|
||||
Site Information Navigation
|
||||
|
||||
* [14]© 2023 The New York Times Company
|
||||
• [30]© 2024 The New York Times Company
|
||||
|
||||
* [15]NYTCo
|
||||
* [16]Contact Us
|
||||
* [17]Accessibility
|
||||
* [18]Work with us
|
||||
* [19]Advertise
|
||||
* [20]T Brand Studio
|
||||
* [21]Your Ad Choices
|
||||
* [22]Privacy Policy
|
||||
* [23]Terms of Service
|
||||
* [24]Terms of Sale
|
||||
* [25]Site Map
|
||||
* [26]Canada
|
||||
* [27]International
|
||||
* [28]Help
|
||||
* [29]Subscriptions
|
||||
• [31]NYTCo
|
||||
• [32]Contact Us
|
||||
• [33]Accessibility
|
||||
• [34]Work with us
|
||||
• [35]Advertise
|
||||
• [36]T Brand Studio
|
||||
• [37]Your Ad Choices
|
||||
• [38]Privacy Policy
|
||||
• [39]Terms of Service
|
||||
• [40]Terms of Sale
|
||||
• [41]Site Map
|
||||
• [42]Canada
|
||||
• [43]International
|
||||
• [44]Help
|
||||
• [45]Subscriptions
|
||||
|
||||
IFRAME:
|
||||
[30]https://www.googletagmanager.com/ns.html?id=GTM-P528B3>m_auth=tfA
|
||||
zqo1rYDLgYhmTnSjPqw>m_preview=env-130>m_cookies_win=x
|
||||
• [46]Manage Privacy Preferences
|
||||
|
||||
References
|
||||
|
||||
Visible links:
|
||||
1. nyt://article/0b13a9e1-3729-51ef-aad3-030df3ab15bb
|
||||
2. https://www.nytimes.com/svc/oembed/json/?url=https://www.nytimes.com/2019/02/02/style/julia-cameron-the-artists-way.html
|
||||
3. https://www.nytimes.com/2019/02/02/style/julia-cameron-the-artists-way.html#site-content
|
||||
4. https://www.nytimes.com/section/style
|
||||
5. https://www.nytimes.com/2019/02/02/style/julia-cameron-the-artists-way.html#after-sponsor
|
||||
6. https://www.nytimes.com/by/penelope-green
|
||||
7. https://www.nytimes.com/by/penelope-green
|
||||
8. https://www.opencenter.org/
|
||||
9. https://tim.blog/tag/artists-way/
|
||||
10. https://www.nytimes.com/2016/04/21/fashion/adult-coloring-books-relaxation.html
|
||||
11. https://www.nytimes.com/2018/10/25/style/journaling-benefits.html
|
||||
12. https://www.nytimes.com/2017/10/07/style/personality-type-the-four-tendencies-gretchen-rubin.html
|
||||
13. https://www.nytimes.com/2019/02/02/style/julia-cameron-the-artists-way.html#after-bottom
|
||||
14. https://help.nytimes.com/hc/en-us/articles/115014792127-Copyright-notice
|
||||
15. https://www.nytco.com/
|
||||
16. https://help.nytimes.com/hc/en-us/articles/115015385887-Contact-Us
|
||||
17. https://help.nytimes.com/hc/en-us/articles/115015727108-Accessibility
|
||||
18. https://www.nytco.com/careers/
|
||||
19. https://nytmediakit.com/
|
||||
20. https://www.tbrandstudio.com/
|
||||
21. https://www.nytimes.com/privacy/cookie-policy#how-do-i-manage-trackers
|
||||
22. https://www.nytimes.com/privacy/privacy-policy
|
||||
23. https://help.nytimes.com/hc/en-us/articles/115014893428-Terms-of-service
|
||||
24. https://help.nytimes.com/hc/en-us/articles/115014893968-Terms-of-sale
|
||||
25. https://www.nytimes.com/sitemap/
|
||||
26. https://www.nytimes.com/ca/?action=click®ion=Footer&pgtype=Homepage
|
||||
27. https://www.nytimes.com/international/?action=click®ion=Footer&pgtype=Homepage
|
||||
28. https://help.nytimes.com/hc/en-us
|
||||
29. https://www.nytimes.com/subscription?campaignId=37WXW
|
||||
30. https://www.googletagmanager.com/ns.html?id=GTM-P528B3>m_auth=tfAzqo1rYDLgYhmTnSjPqw>m_preview=env-130>m_cookies_win=x
|
||||
References:
|
||||
|
||||
Hidden links:
|
||||
32. https://www.nytimes.com/
|
||||
33. https://www.nytimes.com/
|
||||
34. https://www.nytimes.com/
|
||||
[1] https://www.nytimes.com/2019/02/02/style/julia-cameron-the-artists-way.html#site-content
|
||||
[2] https://www.nytimes.com/2019/02/02/style/julia-cameron-the-artists-way.html#site-index
|
||||
[3] https://www.nytimes.com/
|
||||
[4] https://www.nytimes.com/section/style
|
||||
[5] https://www.nytimes.com/
|
||||
[6] https://www.nytimes.com/
|
||||
[10] https://www.nytimes.com/2019/02/02/style/julia-cameron-the-artists-way.html#after-sponsor
|
||||
[14] https://www.nytimes.com/by/penelope-green
|
||||
[15] https://www.nytimes.com/by/penelope-green
|
||||
[16] https://www.opencenter.org/
|
||||
[17] https://tim.blog/tag/artists-way/
|
||||
[18] https://www.nytimes.com/2016/04/21/fashion/adult-coloring-books-relaxation.html
|
||||
[19] https://www.nytimes.com/2018/10/25/style/journaling-benefits.html
|
||||
[20] https://www.nytimes.com/2017/10/07/style/personality-type-the-four-tendencies-gretchen-rubin.html
|
||||
[21] https://www.nytimes.com/by/penelope-green
|
||||
[22] https://www.nytimes.com/by/penelope-green
|
||||
[23] https://www.parsintl.com/publication/the-new-york-times/
|
||||
[24] https://www.nytimes.com/section/todayspaper
|
||||
[25] https://www.nytimes.com/subscriptions/Multiproduct/lp8HYKU.html?campaignId=48JQY
|
||||
[29] https://www.nytimes.com/2019/02/02/style/julia-cameron-the-artists-way.html#after-bottom
|
||||
[30] https://help.nytimes.com/hc/en-us/articles/115014792127-Copyright-notice
|
||||
[31] https://www.nytco.com/
|
||||
[32] https://help.nytimes.com/hc/en-us/articles/115015385887-Contact-Us
|
||||
[33] https://help.nytimes.com/hc/en-us/articles/115015727108-Accessibility
|
||||
[34] https://www.nytco.com/careers/
|
||||
[35] https://nytmediakit.com/
|
||||
[36] https://www.tbrandstudio.com/
|
||||
[37] https://www.nytimes.com/privacy/cookie-policy#how-do-i-manage-trackers
|
||||
[38] https://www.nytimes.com/privacy/privacy-policy
|
||||
[39] https://help.nytimes.com/hc/en-us/articles/115014893428-Terms-of-service
|
||||
[40] https://help.nytimes.com/hc/en-us/articles/115014893968-Terms-of-sale
|
||||
[41] https://www.nytimes.com/sitemap/
|
||||
[42] https://www.nytimes.com/ca/
|
||||
[43] https://www.nytimes.com/international/
|
||||
[44] https://help.nytimes.com/hc/en-us
|
||||
[45] https://www.nytimes.com/subscription?campaignId=37WXW
|
||||
[46] https://www.nytimes.com/privacy/manage-settings
|
||||
|
||||
@@ -1,458 +1,437 @@
|
||||
[1]Skip to content[2]Skip to site index
|
||||
(BUTTON)
|
||||
[3]
|
||||
|
||||
[3]Comments
|
||||
[5]Comments
|
||||
|
||||
[4]36 Hours in Durham, N.C.[5]Skip to Comments
|
||||
[6]36 Hours in Durham, N.C.[7]Skip to Comments
|
||||
The comments section is closed. To submit a letter to the editor for
|
||||
publication, write to [6]letters@nytimes.com.
|
||||
publication, write to [8]letters@nytimes.com.
|
||||
|
||||
36 Hours
|
||||
|
||||
36 Hours in Durham, N.C.
|
||||
|
||||
By [7]Ingrid K. WilliamsUpdated Nov. 2, 2023
|
||||
* (BUTTON)
|
||||
* (BUTTON)
|
||||
* (BUTTON)
|
||||
164
|
||||
By [9]Ingrid K. WilliamsUpdated Nov. 2, 2023
|
||||
|
||||
A birds-eye view over a quiet city street during the daytime. The
|
||||
treetops vary from green to orange to red.
|
||||
[8]36 Hours
|
||||
•
|
||||
•
|
||||
• 164
|
||||
|
||||
A birds-eye view over a quiet city street during the daytime. The treetops vary
|
||||
from green to orange to red.
|
||||
[13]36 Hours
|
||||
Durham, N.C.
|
||||
Jump to:
|
||||
[9]Recommendations
|
||||
[10]Itinerary
|
||||
[11]Google Map
|
||||
[14]Recommendations
|
||||
[15]Itinerary
|
||||
[16]Google Map
|
||||
By Ingrid K. Williams Photographs by Kate Medley for The New York Times
|
||||
Nov. 2, 2023
|
||||
Ingrid K. Williams is a regular contributor to the Travel section and a
|
||||
former Durham resident who has reported on North Carolina since 2010.
|
||||
Ingrid K. Williams is a regular contributor to the Travel section and a former
|
||||
Durham resident who has reported on North Carolina since 2010.
|
||||
|
||||
The evolution of Durham from a faded tobacco town to a diverse cultural
|
||||
and culinary destination has been years in the making. But the ongoing
|
||||
development of this central North Carolina city seems to have reached a
|
||||
new stage. The resurgent downtown area — long a transitional
|
||||
neighborhood with pockets of progress — is now brimming with new
|
||||
restaurants, boutiques, bars and breweries. And while construction
|
||||
continues apace amid the historic [12]brick warehouses, [13]tobacco
|
||||
factories and [14]textile mills — for [15]good and [16]ill — visitors
|
||||
today have reason to venture farther afield, to emerging hotspots in
|
||||
The evolution of Durham from a faded tobacco town to a diverse cultural and
|
||||
culinary destination has been years in the making. But the ongoing development
|
||||
of this central North Carolina city seems to have reached a new stage. The
|
||||
resurgent downtown area — long a transitional neighborhood with pockets of
|
||||
progress — is now brimming with new restaurants, boutiques, bars and breweries.
|
||||
And while construction continues apace amid the historic [17]brick warehouses,
|
||||
[18]tobacco factories and [19]textile mills — for [20]good and [21]ill —
|
||||
visitors today have reason to venture farther afield, to emerging hotspots in
|
||||
East Durham and the Old Five Points neighborhood. This season, only the
|
||||
brilliant fall foliage can compete with all the terrific food, drink
|
||||
and local color there is to discover across Dur’m, as residents
|
||||
affectionately call the dynamic Bull City.
|
||||
brilliant fall foliage can compete with all the terrific food, drink and local
|
||||
color there is to discover across Dur’m, as residents affectionately call the
|
||||
dynamic Bull City.
|
||||
|
||||
Recommendations
|
||||
|
||||
Key stops
|
||||
* The [17]Nasher Museum of Art, on Duke University's Central Campus,
|
||||
presents rotating exhibitions, including a current exhibition
|
||||
curated by ChatGPT.
|
||||
* [18]Saltbox Seafood Joint serves fresh, seasonal seafood caught off
|
||||
the North Carolina coast, along with honey-drizzled hush puppies.
|
||||
* [19]Mystic Farm & Distillery is a 22-acre bourbon distillery that
|
||||
offers weekend tours and free tastings of the label’s full range of
|
||||
spirits.
|
||||
* [20]The Velvet Hippo is a lively new bar serving fruity slushies
|
||||
and creative cocktails on a rooftop downtown.
|
||||
|
||||
• The [22]Nasher Museum of Art, on Duke University's Central Campus, presents
|
||||
rotating exhibitions, including a current exhibition curated by ChatGPT.
|
||||
• [23]Saltbox Seafood Joint serves fresh, seasonal seafood caught off the
|
||||
North Carolina coast, along with honey-drizzled hush puppies.
|
||||
• [24]Mystic Farm & Distillery is a 22-acre bourbon distillery that offers
|
||||
weekend tours and free tastings of the label’s full range of spirits.
|
||||
• [25]The Velvet Hippo is a lively new bar serving fruity slushies and
|
||||
creative cocktails on a rooftop downtown.
|
||||
|
||||
Attractions and outdoor activities
|
||||
* At the [21]Sarah P. Duke Gardens, five miles of pathways wind past
|
||||
magnolias, blooming roses and a lake framed by vibrant foliage in
|
||||
the fall.
|
||||
* [22]Bennett Place is a Civil War site, with a small on-site museum,
|
||||
where Union and Confederate generals negotiated the war’s largest
|
||||
troop surrender in the home of a local family.
|
||||
* At [23]Eno River State Park and in [24]West Point on the Eno, a
|
||||
city park five miles north of downtown, there are dozens of trails
|
||||
to choose from.
|
||||
|
||||
• At the [26]Sarah P. Duke Gardens, five miles of pathways wind past
|
||||
magnolias, blooming roses and a lake framed by vibrant foliage in the fall.
|
||||
• [27]Bennett Place is a Civil War site, with a small on-site museum, where
|
||||
Union and Confederate generals negotiated the war’s largest troop surrender
|
||||
in the home of a local family.
|
||||
• At [28]Eno River State Park and in [29]West Point on the Eno, a city park
|
||||
five miles north of downtown, there are dozens of trails to choose from.
|
||||
|
||||
Restaurants and bars
|
||||
* [25]Ponysaurus Brewing Co. is a downtown craft brewery with
|
||||
crackling fire pits in a leafy garden strung with lights.
|
||||
* [26]Ideal’s is a sandwich shop in East Durham with lines out the
|
||||
door at lunchtime.
|
||||
* [27]Mike D’s BBQ, also in East Durham, is a new barbecue joint
|
||||
serving brisket and smoked beans.
|
||||
* [28]Little Bull is a new restaurant in the Old Five Points
|
||||
neighborhood that serves dumplings stuffed with goat birria in a
|
||||
bowl of rich consomé.
|
||||
* [29]Motorco Music Hall is a concert venue that also hosts dance
|
||||
parties.
|
||||
* [30]Corpse Reviver is a cocktail bar in a former coffin shop.
|
||||
* [31]Monuts is a bustling Ninth Street bakery and cafe that began as
|
||||
a tricycle vendor peddling doughnuts at the Durham Farmers’ Market.
|
||||
* [32]Rose’s Noodles, Dumplings and Sweets is a former meat market
|
||||
and sweets shop that evolved into a casual East Asian-inspired
|
||||
eatery.
|
||||
|
||||
• [30]Ponysaurus Brewing Co. is a downtown craft brewery with crackling fire
|
||||
pits in a leafy garden strung with lights.
|
||||
• [31]Ideal’s is a sandwich shop in East Durham with lines out the door at
|
||||
lunchtime.
|
||||
• [32]Mike D’s BBQ, also in East Durham, is a new barbecue joint serving
|
||||
brisket and smoked beans.
|
||||
• [33]Little Bull is a new restaurant in the Old Five Points neighborhood
|
||||
that serves dumplings stuffed with goat birria in a bowl of rich consomé.
|
||||
• [34]Motorco Music Hall is a concert venue that also hosts dance parties.
|
||||
• [35]Corpse Reviver is a cocktail bar in a former coffin shop.
|
||||
• [36]Monuts is a bustling Ninth Street bakery and cafe that began as a
|
||||
tricycle vendor peddling doughnuts at the Durham Farmers’ Market.
|
||||
• [37]Rose’s Noodles, Dumplings and Sweets is a former meat market and sweets
|
||||
shop that evolved into a casual East Asian-inspired eatery.
|
||||
|
||||
Shopping
|
||||
* [33]Durham Vintage Collective is a new and inviting second-hand
|
||||
shop downtown.
|
||||
* [34]Chet Miller is a well-stocked gift shop with Durham-themed
|
||||
throw pillows, small-press travel guides, cookbooks from local
|
||||
chefs and jigsaw puzzles.
|
||||
* [35]EUtopia Design opened downtown last year and sells Polish
|
||||
glassware and handcrafted ceramics.
|
||||
* [36]Ella West Gallery is a sunny space that opened in August
|
||||
showcasing contemporary art.
|
||||
* [37]Carolina Soul Records and [38]Bull City Records are two spots
|
||||
to browse vinyl on Main Street.
|
||||
|
||||
• [38]Durham Vintage Collective is a new and inviting second-hand shop
|
||||
downtown.
|
||||
• [39]Chet Miller is a well-stocked gift shop with Durham-themed throw
|
||||
pillows, small-press travel guides, cookbooks from local chefs and jigsaw
|
||||
puzzles.
|
||||
• [40]EUtopia Design opened downtown last year and sells Polish glassware and
|
||||
handcrafted ceramics.
|
||||
• [41]Ella West Gallery is a sunny space that opened in August showcasing
|
||||
contemporary art.
|
||||
• [42]Carolina Soul Records and [43]Bull City Records are two spots to browse
|
||||
vinyl on Main Street.
|
||||
|
||||
Where to stay
|
||||
* For a small city, Durham has an impressive selection of cool
|
||||
hotels. Most notable is [39]the Durham, a 53-room boutique property
|
||||
in a landmark building with midcentury modern architecture, mod
|
||||
décor and a scenic rooftop bar. Double rooms from around $240.
|
||||
* [40]Unscripted Durham opened in the former Jack Tar Motel, another
|
||||
1960s property that is now home to 74 modern guest rooms and a
|
||||
rooftop pool. Doubles from $189.
|
||||
* [41]21c Museum Hotel is a more contemporary option downtown with
|
||||
125 rooms, an art-filled restaurant and an on-site art gallery.
|
||||
|
||||
• For a small city, Durham has an impressive selection of cool hotels. Most
|
||||
notable is [44]the Durham, a 53-room boutique property in a landmark
|
||||
building with midcentury modern architecture, mod décor and a scenic
|
||||
rooftop bar. Double rooms from around $240.
|
||||
• [45]Unscripted Durham opened in the former Jack Tar Motel, another 1960s
|
||||
property that is now home to 74 modern guest rooms and a rooftop pool.
|
||||
Doubles from $189.
|
||||
* Look for a short-term rental in Trinity Park, a leafy residential
|
||||
district between downtown and Duke University’s East Campus, a
|
||||
short walk from many restaurants, bars, breweries and music venues.
|
||||
• [46]21c Museum Hotel is a more contemporary option downtown with 125 rooms,
|
||||
an art-filled restaurant and an on-site art gallery. Doubles from $189.
|
||||
• Look for a short-term rental in Trinity Park, a leafy residential district
|
||||
between downtown and Duke University’s East Campus, a short walk from many
|
||||
restaurants, bars, breweries and music venues.
|
||||
|
||||
Getting around
|
||||
* Downtown Durham is walkable but you’ll need a car to reach
|
||||
locations farther afield. If you don’t have your own, there are
|
||||
ride-share options, including Uber and Lyft. [42]Buses also run
|
||||
throughout the city (and are free through June 2024).
|
||||
|
||||
• Downtown Durham is walkable but you’ll need a car to reach locations
|
||||
farther afield. If you don’t have your own, there are ride-share options,
|
||||
including Uber and Lyft. [47]Buses also run throughout the city (and are
|
||||
free through June 2024).
|
||||
|
||||
Itinerary
|
||||
|
||||
Friday
|
||||
|
||||
A square, beige-brick building with a colorful banner that reads:
|
||||
Nasher Museum of Art
|
||||
3:30 p.m. Visit a campus museum
|
||||
Anyone concerned that artificial intelligence will eventually do their
|
||||
job may be put at ease by the new exhibition at Duke University’s
|
||||
[43]Nasher Museum of Art, “Act as if You Are a Curator,” which was
|
||||
organized not by museum staff but by ChatGPT, OpenAI’s popular chatbot
|
||||
(through Jan. 14; free admission). The eclectic A.I.-generated
|
||||
exhibition spans Mesoamerican stone figures and Salvador Dalí works
|
||||
selected from the museum’s nearly 14,000-piece collection, though many
|
||||
were mislabeled by the chatbot (as noted by a flesh-and-blood curator).
|
||||
More cohesive is the moving — and human-curated — exhibition of
|
||||
photographs and collage installations from the artist Lyle Ashton
|
||||
Harris (through Jan. 7). While on campus, stroll through the nearby
|
||||
[44]Sarah P. Duke Gardens, where five miles of serene pathways wind
|
||||
past magnolias, blooming roses and a lake reflecting autumnal colors.
|
||||
Anyone concerned that artificial intelligence will eventually do their job may
|
||||
be put at ease by the new exhibition at Duke University’s [48]Nasher Museum of
|
||||
Art, “Act as if You Are a Curator,” which was organized not by museum staff but
|
||||
by ChatGPT, OpenAI’s popular chatbot (through Jan. 14; free admission). The
|
||||
eclectic A.I.-generated exhibition spans Mesoamerican stone figures and
|
||||
Salvador Dalí works selected from the museum’s nearly 14,000-piece collection,
|
||||
though many were mislabeled by the chatbot (as noted by a flesh-and-blood
|
||||
curator). More cohesive is the moving — and human-curated — exhibition of
|
||||
photographs and collage installations from the artist Lyle Ashton Harris
|
||||
(through Jan. 7). While on campus, stroll through the nearby [49]Sarah P. Duke
|
||||
Gardens, where five miles of serene pathways wind past magnolias, blooming
|
||||
roses and a lake reflecting autumnal colors.
|
||||
A square, beige-brick building with a colorful banner that reads:
|
||||
Nasher Museum of Art
|
||||
Two people sit at a wooden table with plastic orange seats. They are
|
||||
looking at two chalkboard menus advertising seafood options above an
|
||||
open kitchen. An orange life preserver hangs on the wall between the
|
||||
two chalkboard menus.
|
||||
Two people sit at a wooden table with plastic orange seats. They are looking at
|
||||
two chalkboard menus advertising seafood options above an open kitchen. An
|
||||
orange life preserver hangs on the wall between the two chalkboard menus.
|
||||
Saltbox Seafood Joint
|
||||
6 p.m. Feast on Carolina seafood
|
||||
Fresh, seasonal seafood caught off the North Carolina coast is the
|
||||
simple, winning formula at [45]Saltbox Seafood Joint, a restaurant
|
||||
owned by the chef Ricky Moore, who earned the 2022 James Beard Award
|
||||
for the best chef in the Southeast. What began as a tiny takeaway shack
|
||||
in the Old Five Points neighborhood is now a spacious, but still
|
||||
frill-free, sit-down locale on Durham-Chapel Hill Boulevard. Luckily,
|
||||
the menu hasn’t changed much: You can still get heaping plates of fried
|
||||
oysters, blue crab, mullet and clams with generous portions of fried
|
||||
potatoes and collard greens. My go-to is the fried catfish sandwich
|
||||
topped with citrusy red-cabbage slaw ($14) and a side of Hush-Honeys,
|
||||
the chef’s trademarked take on cornmeal fritters drizzled with honey
|
||||
($4).
|
||||
Two people sit at a wooden table with plastic orange seats. They are
|
||||
looking at two chalkboard menus advertising seafood options above an
|
||||
open kitchen. An orange life preserver hangs on the wall between the
|
||||
two chalkboard menus.
|
||||
Fresh, seasonal seafood caught off the North Carolina coast is the simple,
|
||||
winning formula at [50]Saltbox Seafood Joint, a restaurant owned by the chef
|
||||
Ricky Moore, who earned the 2022 James Beard Award for the best chef in the
|
||||
Southeast. What began as a tiny takeaway shack in the Old Five Points
|
||||
neighborhood is now a spacious, but still frill-free, sit-down locale on
|
||||
Durham-Chapel Hill Boulevard. Luckily, the menu hasn’t changed much: You can
|
||||
still get heaping plates of fried oysters, blue crab, mullet and clams with
|
||||
generous portions of fried potatoes and collard greens. My go-to is the fried
|
||||
catfish sandwich topped with citrusy red-cabbage slaw ($14) and a side of
|
||||
Hush-Honeys, the chef’s trademarked take on cornmeal fritters drizzled with
|
||||
honey ($4).
|
||||
Two people sit at a wooden table with plastic orange seats. They are looking at
|
||||
two chalkboard menus advertising seafood options above an open kitchen. An
|
||||
orange life preserver hangs on the wall between the two chalkboard menus.
|
||||
Saltbox Seafood Joint
|
||||
8:30 p.m. Try a local beer by the firepit
|
||||
The competition is growing among the many craft breweries downtown,
|
||||
where out-of-town brewers — like Asheville’s [46]Dssolvr and
|
||||
[47]Hi-Wire Brewing — have opened Durham taprooms in an area that’s
|
||||
already home to longtime local favorites like [48]Fullsteam Brewery and
|
||||
the [49]Durty Bull Brewing Company. But on a crisp fall evening, the
|
||||
most atmospheric place for a locally brewed pint is easily
|
||||
[50]Ponysaurus Brewing Co., an independent craft brewery with crackling
|
||||
fire pits in a leafy garden strung with lights. Try the
|
||||
tangerine-tinged Golden Rule Saison ($6) and a scoop of the house snack
|
||||
mixes, like the pretzel-and-peanutty Bartender’s Blend ($1).
|
||||
A view of a white water tower rising against a blue sky. A logo on the
|
||||
tower reads:
|
||||
Durham’s downtown brims with new restaurants, boutiques and breweries
|
||||
amid historic brick warehouses, tobacco factories and textile mills.
|
||||
The competition is growing among the many craft breweries downtown, where
|
||||
out-of-town brewers — like Asheville’s [51]Dssolvr and [52]Hi-Wire Brewing —
|
||||
have opened Durham taprooms in an area that’s already home to longtime local
|
||||
favorites like [53]Fullsteam Brewery and the [54]Durty Bull Brewing Company.
|
||||
But on a crisp fall evening, the most atmospheric place for a locally brewed
|
||||
pint is easily [55]Ponysaurus Brewing Co., an independent craft brewery with
|
||||
crackling fire pits in a leafy garden strung with lights. Try the
|
||||
tangerine-tinged Golden Rule Saison ($6) and a scoop of the house snack mixes,
|
||||
like the pretzel-and-peanutty Bartender’s Blend ($1).
|
||||
A view of a white water tower rising against a blue sky. A logo on the tower
|
||||
reads:
|
||||
Durham’s downtown brims with new restaurants, boutiques and breweries amid
|
||||
historic brick warehouses, tobacco factories and textile mills.
|
||||
|
||||
Saturday
|
||||
The interior of an old-fashioned room with wooden floors, wooden walls
|
||||
and a wooden ceiling. It is sparsely furnished, with two wooden chairs
|
||||
and a wooden chest. Sunlight comes into the room from a window.
|
||||
|
||||
The interior of an old-fashioned room with wooden floors, wooden walls and a
|
||||
wooden ceiling. It is sparsely furnished, with two wooden chairs and a wooden
|
||||
chest. Sunlight comes into the room from a window.
|
||||
Bennett Place
|
||||
9:30 a.m. Take a history lesson
|
||||
Swing by [51]Monuts, a Ninth Street bakery and cafe, to pick up a
|
||||
cinnamon-and-molasses-glazed pumpkin-spice doughnut ($2.50) and Hot
|
||||
Apple Chai-der, a steaming blend of apple cider and chai tea ($5.50),
|
||||
before heading out west for a dive into North Carolina history. Beyond
|
||||
Civil War scholars, few are likely to recall what transpired at
|
||||
[52]Bennett Place, a historic farmstead about six miles northwest of
|
||||
downtown. One of the few Civil War sites not associated with battle,
|
||||
this out-of-the-way landmark is where the Union general William T.
|
||||
Sherman and the Confederate general Joseph E. Johnston negotiated the
|
||||
largest troop surrender of the war — nearly 90,000 soldiers from the
|
||||
Carolinas, Georgia and Florida — inside the home of a local family in
|
||||
1865. Begin a visit in the small museum, where a short video explains
|
||||
the site’s significance, then head across the lawn to tour the
|
||||
reconstructed farmhouse and surrounding outbuildings where the generals
|
||||
hashed out the terms (free admission).
|
||||
The interior of an old-fashioned room with wooden floors, wooden walls
|
||||
and a wooden ceiling. It is sparsely furnished, with two wooden chairs
|
||||
and a wooden chest. Sunlight comes into the room from a window.
|
||||
Swing by [56]Monuts, a Ninth Street bakery and cafe, to pick up a
|
||||
cinnamon-and-molasses-glazed pumpkin-spice doughnut ($2.50) and Hot Apple
|
||||
Chai-der, a steaming blend of apple cider and chai tea ($5.50), before heading
|
||||
out west for a dive into North Carolina history. Beyond Civil War scholars, few
|
||||
are likely to recall what transpired at [57]Bennett Place, a historic farmstead
|
||||
about six miles northwest of downtown. One of the few Civil War sites not
|
||||
associated with battle, this out-of-the-way landmark is where the Union general
|
||||
William T. Sherman and the Confederate general Joseph E. Johnston negotiated
|
||||
the largest troop surrender of the war — nearly 90,000 soldiers from the
|
||||
Carolinas, Georgia and Florida — inside the home of a local family in 1865.
|
||||
Begin a visit in the small museum, where a short video explains the site’s
|
||||
significance, then head across the lawn to tour the reconstructed farmhouse and
|
||||
surrounding outbuildings where the generals hashed out the terms (free
|
||||
admission).
|
||||
The interior of an old-fashioned room with wooden floors, wooden walls and a
|
||||
wooden ceiling. It is sparsely furnished, with two wooden chairs and a wooden
|
||||
chest. Sunlight comes into the room from a window.
|
||||
Bennett Place
|
||||
12 p.m. Seek sandwiches in the east
|
||||
A former food desert, East Durham has emerged as a lunchtime
|
||||
destination for hungry diners from across the city. You’ll know you’ve
|
||||
found [53]Ideal’s, a sandwich shop that opened in 2021, by the line
|
||||
snaking down the sidewalk (don’t worry, it moves quickly). Here,
|
||||
freshly baked rolls — sesame-crusted hoagies and rosemary focaccia —
|
||||
are the foundation for superb deli sandwiches. Best is the Philly-style
|
||||
roast pork with provolone and garlicky broccoli rabe ($8.50 for a
|
||||
half-hoagie) and the thick-cut garlic-and-onion potato chips ($1.75).
|
||||
Another notable newcomer is [54]Mike D’s BBQ, a barbecue joint that
|
||||
opened nearby in July. Go there for a brisket sandwich doused with the
|
||||
signature smoky-sweet sauce ($10), a side of smoked beans ($5) and
|
||||
sweet tea ($4).
|
||||
A former food desert, East Durham has emerged as a lunchtime destination for
|
||||
hungry diners from across the city. You’ll know you’ve found [58]Ideal’s, a
|
||||
sandwich shop that opened in 2021, by the line snaking down the sidewalk (don’t
|
||||
worry, it moves quickly). Here, freshly baked rolls — sesame-crusted hoagies
|
||||
and rosemary focaccia — are the foundation for superb deli sandwiches. Best is
|
||||
the Philly-style roast pork with provolone and garlicky broccoli rabe ($8.50
|
||||
for a half-hoagie) and the thick-cut garlic-and-onion potato chips ($1.75).
|
||||
Another notable newcomer is [59]Mike D’s BBQ, a barbecue joint that opened
|
||||
nearby in July. Go there for a brisket sandwich doused with the signature
|
||||
smoky-sweet sauce ($10), a side of smoked beans ($5) and sweet tea ($4).
|
||||
Rows of barrels that have the word
|
||||
Mystic Farm & Distillery
|
||||
2 p.m. Sip North Carolina bourbon
|
||||
Whatever your preferred spirit, there’s likely someone in Durham
|
||||
distilling it. Small-production craft booze — from [55]mead and
|
||||
[56]cider to [57]gin and [58]rye — have exploded in popularity
|
||||
recently, and one producer worth seeking out is [59]Mystic Farm &
|
||||
Distillery, about six miles east of downtown. Drop in at this bucolic
|
||||
22-acre bourbon distillery for a free tasting of the full range of
|
||||
Whatever your preferred spirit, there’s likely someone in Durham distilling it.
|
||||
Small-production craft booze — from [60]mead and [61]cider to [62]gin and [63]
|
||||
rye — have exploded in popularity recently, and one producer worth seeking out
|
||||
is [64]Mystic Farm & Distillery, about six miles east of downtown. Drop in at
|
||||
this bucolic 22-acre bourbon distillery for a free tasting of the full range of
|
||||
spirits, including the award-winning Broken Oak bourbon and a smooth
|
||||
cacao-finished version made with cacao nibs from Raleigh’s [60]Videri
|
||||
Chocolate Factory. Small group tours are also offered on weekends ($20;
|
||||
reserve in advance).
|
||||
cacao-finished version made with cacao nibs from Raleigh’s [65]Videri Chocolate
|
||||
Factory. Small group tours are also offered on weekends ($20; reserve in
|
||||
advance).
|
||||
Rows of barrels that have the word
|
||||
Mystic Farm & Distillery
|
||||
4 p.m. Flip through records and second-hand finds
|
||||
Supporting local businesses is a point of pride in this fiercely loyal
|
||||
city, as evidenced by the growing number of small independent shops
|
||||
downtown. Start on West Parrish Street at the [61]Durham Vintage
|
||||
Collective, an inviting second-hand boutique that opened in July, where
|
||||
you might find plaid miniskirts, leather jackets or a framed
|
||||
Jean-Michel Basquiat lithograph. Across the street, explore [62]Chet
|
||||
Miller, a well-stocked gift shop with Durham-themed throw pillows,
|
||||
small-press travel guides, cookbooks from local chefs and game-night
|
||||
jigsaw puzzles. Right next door, [63]EUtopia Design opened last year
|
||||
selling exquisite Polish glassware and handcrafted ceramics. Scope out
|
||||
the latest color-splashed exhibition at [64]Ella West Gallery, a sunny
|
||||
space that opened in August showcasing contemporary art from Black,
|
||||
female and other diverse and underrepresented artists. Then continue to
|
||||
East Main Street to browse vinyl albums of jazz, soul, rock and
|
||||
bluegrass at [65]Carolina Soul Records and at the new location of
|
||||
[66]Bull City Records across the street.
|
||||
Supporting local businesses is a point of pride in this fiercely loyal city, as
|
||||
evidenced by the growing number of small independent shops downtown. Start on
|
||||
West Parrish Street at the [66]Durham Vintage Collective, an inviting
|
||||
second-hand boutique that opened in July, where you might find plaid
|
||||
miniskirts, leather jackets or a framed Jean-Michel Basquiat lithograph. Across
|
||||
the street, explore [67]Chet Miller, a well-stocked gift shop with
|
||||
Durham-themed throw pillows, small-press travel guides, cookbooks from local
|
||||
chefs and game-night jigsaw puzzles. Right next door, [68]EUtopia Design opened
|
||||
last year selling exquisite Polish glassware and handcrafted ceramics. Scope
|
||||
out the latest color-splashed exhibition at [69]Ella West Gallery, a sunny
|
||||
space that opened in August showcasing contemporary art from Black, female and
|
||||
other diverse and underrepresented artists. Then continue to East Main Street
|
||||
to browse vinyl albums of jazz, soul, rock and bluegrass at [70]Carolina Soul
|
||||
Records and at the new location of [71]Bull City Records across the street.
|
||||
A glass dish with sliced fish that is garnished with flowers.
|
||||
Little Bull
|
||||
7 p.m. Dine on fresh Mexican-American flavors
|
||||
Downtown Durham is packed with great restaurants, but head a bit north
|
||||
to the Old Five Points neighborhood where the city’s latest hotspot,
|
||||
[67]Little Bull, opened on a quiet block in June. The chef Oscar Diaz,
|
||||
already well-known in Raleigh for his Mexican-American cuisine, again
|
||||
tapped his heritage when creating the playful menu. Highlights of a
|
||||
recent meal included crudo with North Carolina tuna, aguachile, wasabi
|
||||
and flying-fish roe ($18), plantain empanadas ($16) and soft dumplings
|
||||
stuffed with goat birria in a bowl of rich consomé ($16). Stick to the
|
||||
small plates as portions are generous, and save room for dessert: The
|
||||
churro balls with chocolate sauce ($9) are divine.
|
||||
Downtown Durham is packed with great restaurants, but head a bit north to the
|
||||
Old Five Points neighborhood where the city’s latest hotspot, [72]Little Bull,
|
||||
opened on a quiet block in June. The chef Oscar Diaz, already well-known in
|
||||
Raleigh for his Mexican-American cuisine, again tapped his heritage when
|
||||
creating the playful menu. Highlights of a recent meal included crudo with
|
||||
North Carolina tuna, aguachile, wasabi and flying-fish roe ($18), plantain
|
||||
empanadas ($16) and soft dumplings stuffed with goat birria in a bowl of rich
|
||||
consomé ($16). Stick to the small plates as portions are generous, and save
|
||||
room for dessert: The churro balls with chocolate sauce ($9) are divine.
|
||||
A glass dish with sliced fish that is garnished with flowers.
|
||||
Little Bull
|
||||
A person with a tattooed arm holds a drink in a martini glass. A skewer
|
||||
with three stuffed green olives rests on top of the glass.
|
||||
A person with a tattooed arm holds a drink in a martini glass. A skewer with
|
||||
three stuffed green olives rests on top of the glass.
|
||||
Corpse Reviver
|
||||
9 p.m. Sip martinis in a former coffin shop
|
||||
At the end of 2022, the city designated most of downtown a social
|
||||
district called [68]the Bullpen, where folks are permitted to walk
|
||||
around with alcoholic beverages purchased in the area. So if the bar is
|
||||
packed at [69]the Velvet Hippo, a lively rooftop lounge that opened in
|
||||
August serving fruity slushies and creative cocktails, you can take
|
||||
that frozen Hawaiian Rum Punch ($13) to go and stroll over to
|
||||
[70]Motorco Music Hall, a concert venue that also hosts dance parties,
|
||||
like a recent Taylor Fest for local Swifties. Or continue to [71]Corpse
|
||||
Reviver, a cocktail bar associated with the [72]Durham Distillery,
|
||||
At the end of 2022, the city designated most of downtown a social district
|
||||
called [73]the Bullpen, where folks are permitted to walk around with alcoholic
|
||||
beverages purchased in the area. So if the bar is packed at [74]the Velvet
|
||||
Hippo, a lively rooftop lounge that opened in August serving fruity slushies
|
||||
and creative cocktails, you can take that frozen Hawaiian Rum Punch ($13) to go
|
||||
and stroll over to [75]Motorco Music Hall, a concert venue that also hosts
|
||||
dance parties, like a recent Taylor Fest for local Swifties. Or continue to
|
||||
[76]Corpse Reviver, a cocktail bar associated with the [77]Durham Distillery,
|
||||
which opened in 2020 in a former coffin shop and serves dirty martinis
|
||||
garnished with bacon-and-blue-cheese-stuffed olives ($15).
|
||||
A person with a tattooed arm holds a drink in a martini glass. A skewer
|
||||
with three stuffed green olives rests on top of the glass.
|
||||
A person with a tattooed arm holds a drink in a martini glass. A skewer with
|
||||
three stuffed green olives rests on top of the glass.
|
||||
Corpse Reviver
|
||||
The West Point Mill along the Eno River. Follow the yellow trail
|
||||
markers from the mill to reach Sennett’s Hole, a popular summertime
|
||||
swimming spot.
|
||||
[02-36HOURS-DURHAM-west-point-cvkl-mobileMasterAt3x-v2]
|
||||
The West Point Mill along the Eno River. Follow the yellow trail markers from
|
||||
the mill to reach Sennett’s Hole, a popular summertime swimming spot.
|
||||
|
||||
Sunday
|
||||
|
||||
[02-36HOURS-DURHAM-eno-ghvw-mobileMasterAt3x]
|
||||
Eno River State Park
|
||||
9 a.m. Hike along the river
|
||||
Catch the season at its most colorful along the Eno River, where there
|
||||
are dozens of trails to choose from in the [73]Eno River State Park and
|
||||
in [74]West Point on the Eno, a city park five miles north of downtown
|
||||
that is anchored by the historic West Point Mill. One scenic route
|
||||
begins at the mill, then climbs through the forest along the river
|
||||
(follow the yellow trail markers). After about 20 minutes, hop across
|
||||
the rocks crossing a shallow tributary to reach Sennett’s Hole, a
|
||||
natural pool — and popular summertime swimming spot — with small
|
||||
waterfalls and turtles warming themselves on the rocks on sunny days.
|
||||
Catch the season at its most colorful along the Eno River, where there are
|
||||
dozens of trails to choose from in the [78]Eno River State Park and in [79]West
|
||||
Point on the Eno, a city park five miles north of downtown that is anchored by
|
||||
the historic West Point Mill. One scenic route begins at the mill, then climbs
|
||||
through the forest along the river (follow the yellow trail markers). After
|
||||
about 20 minutes, hop across the rocks crossing a shallow tributary to reach
|
||||
Sennett’s Hole, a natural pool — and popular summertime swimming spot — with
|
||||
small waterfalls and turtles warming themselves on the rocks on sunny days.
|
||||
[02-36HOURS-DURHAM-eno-ghvw-mobileMasterAt3x]
|
||||
Eno River State Park
|
||||
11 a.m. Slurp some noodles
|
||||
Refuel after a hike with brunch at [75]Rose’s Noodles, Dumplings and
|
||||
Sweets, a former meat market and sweets shop near Brightleaf Square
|
||||
that evolved into a casual East Asian-inspired eatery serving fragrant
|
||||
bowls of beef pho ($17) and Thai rice soup ($14). The selection of
|
||||
cakes, cookies and pastries is impressive, but best are the ice-cream
|
||||
sandwiches that easily serve two — my favorite is the white miso flavor
|
||||
between chewy gingersnaps ($7).
|
||||
(BUTTON) Read Comments
|
||||
|
||||
Correction:
|
||||
Refuel after a hike with brunch at [80]Rose’s Noodles, Dumplings and Sweets, a
|
||||
former meat market and sweets shop near Brightleaf Square that evolved into a
|
||||
casual East Asian-inspired eatery serving fragrant bowls of beef pho ($17) and
|
||||
Thai rice soup ($14). The selection of cakes, cookies and pastries is
|
||||
impressive, but best are the ice-cream sandwiches that easily serve two — my
|
||||
favorite is the white miso flavor between chewy gingersnaps ($7).
|
||||
Read Comments
|
||||
Correction:
|
||||
Nov. 2, 2023
|
||||
|
||||
An earlier version of this article misstated the days that Monuts, a
|
||||
bakery and cafe, is open on the weekend. It is open on Saturdays, not
|
||||
Sundays.
|
||||
An earlier version of this article misstated the days that Monuts, a bakery and
|
||||
cafe, is open on the weekend. It is open on Saturdays, not Sundays.
|
||||
|
||||
(BUTTON) Read 164 Comments
|
||||
* (BUTTON)
|
||||
* (BUTTON)
|
||||
* (BUTTON)
|
||||
164
|
||||
Read 164 Comments
|
||||
|
||||
•
|
||||
•
|
||||
• 164
|
||||
|
||||
Advertisement
|
||||
[76]SKIP ADVERTISEMENT
|
||||
|
||||
[86]SKIP ADVERTISEMENT
|
||||
|
||||
Site Index
|
||||
|
||||
Site Information Navigation
|
||||
|
||||
* [77]© 2024 The New York Times Company
|
||||
• [87]© 2024 The New York Times Company
|
||||
|
||||
* [78]NYTCo
|
||||
* [79]Contact Us
|
||||
* [80]Accessibility
|
||||
* [81]Work with us
|
||||
* [82]Advertise
|
||||
* [83]T Brand Studio
|
||||
* [84]Your Ad Choices
|
||||
* [85]Privacy Policy
|
||||
* [86]Terms of Service
|
||||
* [87]Terms of Sale
|
||||
* [88]Site Map
|
||||
* [89]Canada
|
||||
* [90]International
|
||||
* [91]Help
|
||||
* [92]Subscriptions
|
||||
• [88]NYTCo
|
||||
• [89]Contact Us
|
||||
• [90]Accessibility
|
||||
• [91]Work with us
|
||||
• [92]Advertise
|
||||
• [93]T Brand Studio
|
||||
• [94]Your Ad Choices
|
||||
• [95]Privacy Policy
|
||||
• [96]Terms of Service
|
||||
• [97]Terms of Sale
|
||||
• [98]Site Map
|
||||
• [99]Canada
|
||||
• [100]International
|
||||
• [101]Help
|
||||
• [102]Subscriptions
|
||||
|
||||
* [93]Manage Privacy Preferences
|
||||
• [103]Manage Privacy Preferences
|
||||
|
||||
IFRAME:
|
||||
[94]https://www.googletagmanager.com/ns.html?id=GTM-P528B3>m_auth=tfA
|
||||
zqo1rYDLgYhmTnSjPqw>m_preview=env-130>m_cookies_win=x
|
||||
|
||||
References
|
||||
References:
|
||||
|
||||
Visible links:
|
||||
1. https://www.nytimes.com/interactive/2023/11/02/travel/things-to-do-durham-nc.html#site-content
|
||||
2. https://www.nytimes.com/interactive/2023/11/02/travel/things-to-do-durham-nc.html#site-index
|
||||
3. https://www.nytimes.com/interactive/2023/11/02/travel/things-to-do-durham-nc.html#commentsContainer
|
||||
4. https://www.nytimes.com/interactive/2023/11/02/travel/things-to-do-durham-nc.html
|
||||
5. https://www.nytimes.com/interactive/2023/11/02/travel/things-to-do-durham-nc.html
|
||||
6. mailto:letters@nytimes.com
|
||||
7. https://www.nytimes.com/by/ingrid-k-williams
|
||||
8. https://www.nytimes.com/column/36-hours
|
||||
9. https://www.nytimes.com/interactive/2023/11/02/travel/things-to-do-durham-nc.html#recommendations
|
||||
10. https://www.nytimes.com/interactive/2023/11/02/travel/things-to-do-durham-nc.html#itinerary
|
||||
11. https://maps.app.goo.gl/EimCs7T5YjC3DZi27
|
||||
12. https://www.brightleafdurham.com/
|
||||
13. https://americantobacco.co/
|
||||
14. https://goldenbeltarts.com/
|
||||
15. https://indyweek.com/music/missy-lanes-assembly-room-cicely-mitchell/
|
||||
16. https://www.nytimes.com/2018/05/01/business/durham-real-estate-growth.html
|
||||
17. https://nasher.duke.edu/
|
||||
18. https://www.saltboxseafoodjoint.com/
|
||||
19. https://www.whatismystic.com/
|
||||
20. https://www.velvethippodurham.com/
|
||||
21. https://gardens.duke.edu/
|
||||
22. https://historicsites.nc.gov/all-sites/bennett-place
|
||||
23. https://www.ncparks.gov/state-parks/eno-river-state-park
|
||||
24. https://www.dprplaymore.org/facilities/facility/details/West-Point-on-the-Eno-76
|
||||
25. https://www.ponysaurusbrewing.com/
|
||||
26. https://idealsdeli.com/
|
||||
27. https://www.mikedsbbq.com/
|
||||
28. https://www.littlebullnc.com/
|
||||
29. https://motorcomusic.com/
|
||||
30. https://durhamdistillery.com/pages/corpse-reviver-cocktail-bar-and-lounge
|
||||
31. https://www.monutsdonuts.com/
|
||||
32. https://rosesdurham.com/
|
||||
33. https://www.instagram.com/durhamvintagecollective/?hl=en
|
||||
34. https://www.chetmillershop.com/
|
||||
35. https://www.instagram.com/eutopia.design/?hl=en
|
||||
36. https://www.ellawestgallery.com/
|
||||
37. https://www.carolinasoul.com/
|
||||
38. https://www.bullcityrecords.com/
|
||||
39. https://www.thedurham.com/
|
||||
40. https://www.unscriptedhotels.com/
|
||||
41. https://www.21cmuseumhotels.com/durham/
|
||||
42. https://godurhamtransit.org/
|
||||
43. https://nasher.duke.edu/
|
||||
44. https://gardens.duke.edu/
|
||||
45. https://www.saltboxseafoodjoint.com/
|
||||
46. https://dssolvr.com/
|
||||
47. https://hiwirebrewing.com/durham/
|
||||
48. https://www.fullsteam.ag/
|
||||
49. https://www.durtybull.com/
|
||||
50. https://www.ponysaurusbrewing.com/
|
||||
51. https://www.monutsdonuts.com/
|
||||
52. https://historicsites.nc.gov/all-sites/bennett-place
|
||||
53. https://idealsdeli.com/
|
||||
54. https://www.mikedsbbq.com/
|
||||
55. https://www.honeygirlmeadery.com/
|
||||
56. https://www.bullcityciderworks.com/
|
||||
57. https://durhamdistillery.com/
|
||||
58. https://www.libertyandplenty.com/
|
||||
59. https://www.whatismystic.com/
|
||||
60. https://viderichocolatefactory.com/
|
||||
61. https://www.instagram.com/durhamvintagecollective/?hl=en
|
||||
62. https://www.chetmillershop.com/
|
||||
63. https://www.instagram.com/eutopia.design/?hl=en
|
||||
64. https://www.ellawestgallery.com/
|
||||
65. https://www.carolinasoul.com/
|
||||
66. https://www.bullcityrecords.com/
|
||||
67. https://www.littlebullnc.com/
|
||||
68. https://downtowndurham.com/bullpen/
|
||||
69. https://www.velvethippodurham.com/
|
||||
70. https://motorcomusic.com/
|
||||
71. https://durhamdistillery.com/pages/corpse-reviver-cocktail-bar-and-lounge
|
||||
72. https://durhamdistillery.com/
|
||||
73. https://www.ncparks.gov/state-parks/eno-river-state-park
|
||||
74. https://www.dprplaymore.org/facilities/facility/details/West-Point-on-the-Eno-76
|
||||
75. https://rosesdurham.com/
|
||||
76. https://www.nytimes.com/interactive/2023/11/02/travel/things-to-do-durham-nc.html#after-bottom
|
||||
77. https://help.nytimes.com/hc/en-us/articles/115014792127-Copyright-notice
|
||||
78. https://www.nytco.com/
|
||||
79. https://help.nytimes.com/hc/en-us/articles/115015385887-Contact-Us
|
||||
80. https://help.nytimes.com/hc/en-us/articles/115015727108-Accessibility
|
||||
81. https://www.nytco.com/careers/
|
||||
82. https://nytmediakit.com/
|
||||
83. https://www.tbrandstudio.com/
|
||||
84. https://www.nytimes.com/privacy/cookie-policy#how-do-i-manage-trackers
|
||||
85. https://www.nytimes.com/privacy/privacy-policy
|
||||
86. https://help.nytimes.com/hc/en-us/articles/115014893428-Terms-of-service
|
||||
87. https://help.nytimes.com/hc/en-us/articles/115014893968-Terms-of-sale
|
||||
88. https://www.nytimes.com/sitemap/
|
||||
89. https://www.nytimes.com/ca/
|
||||
90. https://www.nytimes.com/international/
|
||||
91. https://help.nytimes.com/hc/en-us
|
||||
92. https://www.nytimes.com/subscription?campaignId=37WXW
|
||||
93. https://www.nytimes.com/privacy/manage-settings
|
||||
94. https://www.googletagmanager.com/ns.html?id=GTM-P528B3>m_auth=tfAzqo1rYDLgYhmTnSjPqw>m_preview=env-130>m_cookies_win=x
|
||||
|
||||
Hidden links:
|
||||
96. https://www.nytimes.com/
|
||||
[1] https://www.nytimes.com/interactive/2023/11/02/travel/things-to-do-durham-nc.html#site-content
|
||||
[2] https://www.nytimes.com/interactive/2023/11/02/travel/things-to-do-durham-nc.html#site-index
|
||||
[3] https://www.nytimes.com/
|
||||
[5] https://www.nytimes.com/interactive/2023/11/02/travel/things-to-do-durham-nc.html#commentsContainer
|
||||
[6] https://www.nytimes.com/interactive/2023/11/02/travel/things-to-do-durham-nc.html
|
||||
[7] https://www.nytimes.com/interactive/2023/11/02/travel/things-to-do-durham-nc.html
|
||||
[8] mailto:letters@nytimes.com
|
||||
[9] https://www.nytimes.com/by/ingrid-k-williams
|
||||
[13] https://www.nytimes.com/column/36-hours
|
||||
[14] https://www.nytimes.com/interactive/2023/11/02/travel/things-to-do-durham-nc.html#recommendations
|
||||
[15] https://www.nytimes.com/interactive/2023/11/02/travel/things-to-do-durham-nc.html#itinerary
|
||||
[16] https://maps.app.goo.gl/EimCs7T5YjC3DZi27
|
||||
[17] https://www.brightleafdurham.com/
|
||||
[18] https://americantobacco.co/
|
||||
[19] https://goldenbeltarts.com/
|
||||
[20] https://indyweek.com/music/missy-lanes-assembly-room-cicely-mitchell/
|
||||
[21] https://www.nytimes.com/2018/05/01/business/durham-real-estate-growth.html
|
||||
[22] https://nasher.duke.edu/
|
||||
[23] https://www.saltboxseafoodjoint.com/
|
||||
[24] https://www.whatismystic.com/
|
||||
[25] https://www.velvethippodurham.com/
|
||||
[26] https://gardens.duke.edu/
|
||||
[27] https://historicsites.nc.gov/all-sites/bennett-place
|
||||
[28] https://www.ncparks.gov/state-parks/eno-river-state-park
|
||||
[29] https://www.dprplaymore.org/facilities/facility/details/West-Point-on-the-Eno-76
|
||||
[30] https://www.ponysaurusbrewing.com/
|
||||
[31] https://idealsdeli.com/
|
||||
[32] https://www.mikedsbbq.com/
|
||||
[33] https://www.littlebullnc.com/
|
||||
[34] https://motorcomusic.com/
|
||||
[35] https://durhamdistillery.com/pages/corpse-reviver-cocktail-bar-and-lounge
|
||||
[36] https://www.monutsdonuts.com/
|
||||
[37] https://rosesdurham.com/
|
||||
[38] https://www.instagram.com/durhamvintagecollective/?hl=en
|
||||
[39] https://www.chetmillershop.com/
|
||||
[40] https://www.instagram.com/eutopia.design/?hl=en
|
||||
[41] https://www.ellawestgallery.com/
|
||||
[42] https://www.carolinasoul.com/
|
||||
[43] https://www.bullcityrecords.com/
|
||||
[44] https://www.thedurham.com/
|
||||
[45] https://www.unscriptedhotels.com/
|
||||
[46] https://www.21cmuseumhotels.com/durham/
|
||||
[47] https://godurhamtransit.org/
|
||||
[48] https://nasher.duke.edu/
|
||||
[49] https://gardens.duke.edu/
|
||||
[50] https://www.saltboxseafoodjoint.com/
|
||||
[51] https://dssolvr.com/
|
||||
[52] https://hiwirebrewing.com/durham/
|
||||
[53] https://www.fullsteam.ag/
|
||||
[54] https://www.durtybull.com/
|
||||
[55] https://www.ponysaurusbrewing.com/
|
||||
[56] https://www.monutsdonuts.com/
|
||||
[57] https://historicsites.nc.gov/all-sites/bennett-place
|
||||
[58] https://idealsdeli.com/
|
||||
[59] https://www.mikedsbbq.com/
|
||||
[60] https://www.honeygirlmeadery.com/
|
||||
[61] https://www.bullcityciderworks.com/
|
||||
[62] https://durhamdistillery.com/
|
||||
[63] https://www.libertyandplenty.com/
|
||||
[64] https://www.whatismystic.com/
|
||||
[65] https://viderichocolatefactory.com/
|
||||
[66] https://www.instagram.com/durhamvintagecollective/?hl=en
|
||||
[67] https://www.chetmillershop.com/
|
||||
[68] https://www.instagram.com/eutopia.design/?hl=en
|
||||
[69] https://www.ellawestgallery.com/
|
||||
[70] https://www.carolinasoul.com/
|
||||
[71] https://www.bullcityrecords.com/
|
||||
[72] https://www.littlebullnc.com/
|
||||
[73] https://downtowndurham.com/bullpen/
|
||||
[74] https://www.velvethippodurham.com/
|
||||
[75] https://motorcomusic.com/
|
||||
[76] https://durhamdistillery.com/pages/corpse-reviver-cocktail-bar-and-lounge
|
||||
[77] https://durhamdistillery.com/
|
||||
[78] https://www.ncparks.gov/state-parks/eno-river-state-park
|
||||
[79] https://www.dprplaymore.org/facilities/facility/details/West-Point-on-the-Eno-76
|
||||
[80] https://rosesdurham.com/
|
||||
[86] https://www.nytimes.com/interactive/2023/11/02/travel/things-to-do-durham-nc.html#after-bottom
|
||||
[87] https://help.nytimes.com/hc/en-us/articles/115014792127-Copyright-notice
|
||||
[88] https://www.nytco.com/
|
||||
[89] https://help.nytimes.com/hc/en-us/articles/115015385887-Contact-Us
|
||||
[90] https://help.nytimes.com/hc/en-us/articles/115015727108-Accessibility
|
||||
[91] https://www.nytco.com/careers/
|
||||
[92] https://nytmediakit.com/
|
||||
[93] https://www.tbrandstudio.com/
|
||||
[94] https://www.nytimes.com/privacy/cookie-policy#how-do-i-manage-trackers
|
||||
[95] https://www.nytimes.com/privacy/privacy-policy
|
||||
[96] https://help.nytimes.com/hc/en-us/articles/115014893428-Terms-of-service
|
||||
[97] https://help.nytimes.com/hc/en-us/articles/115014893968-Terms-of-sale
|
||||
[98] https://www.nytimes.com/sitemap/
|
||||
[99] https://www.nytimes.com/ca/
|
||||
[100] https://www.nytimes.com/international/
|
||||
[101] https://help.nytimes.com/hc/en-us
|
||||
[102] https://www.nytimes.com/subscription?campaignId=37WXW
|
||||
[103] https://www.nytimes.com/privacy/manage-settings
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,403 +1,365 @@
|
||||
#[1]Programmable Mutter
|
||||
[1][https]
|
||||
|
||||
[2][https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimage
|
||||
s%2F6676303a-e6a9-4e7d-b10e-8662cfcfb435_1024x1024.png]
|
||||
[2]Programmable Mutter
|
||||
|
||||
[3]Programmable Mutter
|
||||
|
||||
(BUTTON)
|
||||
Subscribe
|
||||
(BUTTON) Sign in
|
||||
|
||||
(BUTTON)
|
||||
Sign in
|
||||
Share this post
|
||||
[https]
|
||||
|
||||
What OpenAI shares with Scientology
|
||||
|
||||
www.programmablemutter.com
|
||||
(BUTTON)
|
||||
Copy link
|
||||
(BUTTON)
|
||||
Facebook
|
||||
(BUTTON)
|
||||
Email
|
||||
(BUTTON)
|
||||
Note
|
||||
(BUTTON)
|
||||
Other
|
||||
|
||||
What OpenAI shares with Scientology
|
||||
|
||||
Strange beliefs, fights over money and bad science fiction
|
||||
|
||||
[4]Henry Farrell
|
||||
[12][https]
|
||||
[13]Henry Farrell
|
||||
Nov 20, 2023
|
||||
73
|
||||
(BUTTON)
|
||||
Share this post
|
||||
[https]
|
||||
|
||||
What OpenAI shares with Scientology
|
||||
|
||||
www.programmablemutter.com
|
||||
(BUTTON)
|
||||
Copy link
|
||||
(BUTTON)
|
||||
Facebook
|
||||
(BUTTON)
|
||||
Email
|
||||
(BUTTON)
|
||||
Note
|
||||
(BUTTON)
|
||||
Other
|
||||
[20]
|
||||
17
|
||||
[21]
|
||||
Share
|
||||
[22]
|
||||
[https]
|
||||
|
||||
When Sam Altman was ousted as CEO of OpenAI, some hinted that lurid
|
||||
depravities lay behind his downfall. Surely, OpenAI’s board wouldn’t
|
||||
have toppled him if there weren’t some sordid story about to hit the
|
||||
headlines? But the [5]reporting all seems to be saying that it was God,
|
||||
not Sex, that lay behind Altman’s downfall. And Money, that third great
|
||||
driver of human behavior, seems to have driven his attempted return and
|
||||
his [6]new job at Microsoft, which is OpenAI’s biggest investor by far.
|
||||
When Sam Altman was ousted as CEO of OpenAI, some hinted that lurid depravities
|
||||
lay behind his downfall. Surely, OpenAI’s board wouldn’t have toppled him if
|
||||
there weren’t some sordid story about to hit the headlines? But the [23]
|
||||
reporting all seems to be saying that it was God, not Sex, that lay behind
|
||||
Altman’s downfall. And Money, that third great driver of human behavior, seems
|
||||
to have driven his attempted return and his [24]new job at Microsoft, which is
|
||||
OpenAI’s biggest investor by far.
|
||||
|
||||
As the NYT describes the people who pushed Altman out:
|
||||
|
||||
Thanks for reading Programmable Mutter! Subscribe for free to receive
|
||||
new posts. And if you want to support my work, [7]buy my and Abe
|
||||
Newman’s new book, [8]Underground Empire, and sing its praises (so long
|
||||
as you actually liked it), on Amazon, Goodreads, social media and
|
||||
everywhere else that people find out about good books.
|
||||
____________________
|
||||
(BUTTON) Subscribe
|
||||
Thanks for reading Programmable Mutter! Subscribe for free to receive new
|
||||
posts. And if you want to support my work, [25]buy my and Abe Newman’s new
|
||||
book, [26]Underground Empire, and sing its praises (so long as you actually
|
||||
liked it), on Amazon, Goodreads, social media and everywhere else that people
|
||||
find out about good books.
|
||||
|
||||
[35][ ]
|
||||
Subscribe
|
||||
Ms. McCauley and Ms. Toner [HF - two board members] have ties to the
|
||||
Rationalist and Effective Altruist movements, a community that is
|
||||
deeply concerned that A.I. could one day destroy humanity. Today’s
|
||||
A.I. technology cannot destroy humanity. But this community believes
|
||||
that as the technology grows increasingly powerful, these dangers
|
||||
will arise.
|
||||
Rationalist and Effective Altruist movements, a community that is deeply
|
||||
concerned that A.I. could one day destroy humanity. Today’s A.I. technology
|
||||
cannot destroy humanity. But this community believes that as the technology
|
||||
grows increasingly powerful, these dangers will arise.
|
||||
|
||||
McCauley and Toner reportedly worried that Altman was pushing too hard,
|
||||
too quickly for new and potentially dangerous forms of AI (similar
|
||||
fears led some OpenAI people to bail out and found a competitor,
|
||||
Anthropic, a couple of years ago). The FT’s reporting [9]confirms that
|
||||
the fight was over how quickly to commercialize AI
|
||||
McCauley and Toner reportedly worried that Altman was pushing too hard, too
|
||||
quickly for new and potentially dangerous forms of AI (similar fears led some
|
||||
OpenAI people to bail out and found a competitor, Anthropic, a couple of years
|
||||
ago). The FT’s reporting [37]confirms that the fight was over how quickly to
|
||||
commercialize AI
|
||||
|
||||
The back-story to all of this is actually much weirder than the average
|
||||
sex scandal. The field of AI (in particular, its debates around Large
|
||||
Language Models (LLMs) like OpenAI’s GPT-4) is profoundly shaped by
|
||||
cultish debates among people with some very strange beliefs.
|
||||
The back-story to all of this is actually much weirder than the average sex
|
||||
scandal. The field of AI (in particular, its debates around Large Language
|
||||
Models (LLMs) like OpenAI’s GPT-4) is profoundly shaped by cultish debates
|
||||
among people with some very strange beliefs.
|
||||
|
||||
As LLMs have become increasingly powerful, theological arguments have
|
||||
begun to mix it up with the profit motive. That explains why OpenAI has
|
||||
such an unusual corporate form - it is a non-profit, with a for-profit
|
||||
structure retrofitted on top, sweatily entangled with a
|
||||
profit-maximizing corporation (Microsoft). It also plausibly explains
|
||||
why these tensions have exploded into the open.
|
||||
As LLMs have become increasingly powerful, theological arguments have begun to
|
||||
mix it up with the profit motive. That explains why OpenAI has such an unusual
|
||||
corporate form - it is a non-profit, with a for-profit structure retrofitted on
|
||||
top, sweatily entangled with a profit-maximizing corporation (Microsoft). It
|
||||
also plausibly explains why these tensions have exploded into the open.
|
||||
|
||||
********
|
||||
|
||||
I joked on Bluesky that the OpenAI saga was as if “the 1990s browser
|
||||
wars were being waged by rival factions of Dianetics striving to
|
||||
control the future.” Dianetics - for those who don’t obsess on the
|
||||
underbelly of American intellectual history - was the 1.0 version of L.
|
||||
Ron Hubbard’s Scientology. Hubbard [10]hatched it in collaboration with
|
||||
the science fiction editor John W. Campbell (who had a major science
|
||||
fiction award named after him until 2019, when his racism finally
|
||||
caught up with his reputation).
|
||||
I joked on Bluesky that the OpenAI saga was as if “the 1990s browser wars were
|
||||
being waged by rival factions of Dianetics striving to control the future.”
|
||||
Dianetics - for those who don’t obsess on the underbelly of American
|
||||
intellectual history - was the 1.0 version of L. Ron Hubbard’s Scientology.
|
||||
Hubbard [38]hatched it in collaboration with the science fiction editor John W.
|
||||
Campbell (who had a major science fiction award named after him until 2019,
|
||||
when his racism finally caught up with his reputation).
|
||||
|
||||
The AI safety debate too is an unintended consequence of genre fiction.
|
||||
In 1987, multiple-Hugo award winning science-fiction critic Dave
|
||||
Langford [11]began a discussion of the “newish” genre of cyberpunk with
|
||||
a complaint about an older genre of story on information technology, in
|
||||
which “the ultimate computer is turned on and asked the ultimate
|
||||
question, and replies `Yes, now there is a God!'
|
||||
The AI safety debate too is an unintended consequence of genre fiction. In
|
||||
1987, multiple-Hugo award winning science-fiction critic Dave Langford [39]
|
||||
began a discussion of the “newish” genre of cyberpunk with a complaint about an
|
||||
older genre of story on information technology, in which “the ultimate computer
|
||||
is turned on and asked the ultimate question, and replies `Yes, now there is a
|
||||
God!'
|
||||
|
||||
However, the cliche didn’t go away. Instead, it cross-bred with
|
||||
cyberpunk to produce some quite surprising progeny. The midwife was the
|
||||
writer Vernor Vinge, who proposed a revised meaning for “singularity.”
|
||||
This was a term already familiar to science fiction readers as the
|
||||
place inside a black hole where the ordinary predictions of physics
|
||||
broke down. Vinge suggested that we would soon likely create true AI,
|
||||
which would be far better at thinking than baseline humans, and would
|
||||
change the world in an accelerating process, creating a historical
|
||||
[12]singularity, after which the future of the human species would be
|
||||
radically unpredictable.
|
||||
However, the cliche didn’t go away. Instead, it cross-bred with cyberpunk to
|
||||
produce some quite surprising progeny. The midwife was the writer Vernor Vinge,
|
||||
who proposed a revised meaning for “singularity.” This was a term already
|
||||
familiar to science fiction readers as the place inside a black hole where the
|
||||
ordinary predictions of physics broke down. Vinge suggested that we would soon
|
||||
likely create true AI, which would be far better at thinking than baseline
|
||||
humans, and would change the world in an accelerating process, creating a
|
||||
historical [40]singularity, after which the future of the human species would
|
||||
be radically unpredictable.
|
||||
|
||||
These ideas were turned into novels by Vinge himself, including A Fire
|
||||
Upon the Deep (fun!) and Rainbow’s End (weak!). Other SF writers like
|
||||
Charles Stross wrote novels about humans doing their best to co-exist
|
||||
with “weakly godlike” machine intelligence (also fun!). Others who had
|
||||
no notable talent for writing, like the futurist Ray Kurzweil, tried to
|
||||
turn the Singularity into the foundation stone of a new account of
|
||||
human progress. I still possess a mostly-unread copy of Kurzweil’s
|
||||
mostly-unreadable magnum opus, The Singularity is Near, which was
|
||||
distributed en masse to bloggers like meself in an early 2000s
|
||||
marketing campaign. If I dug hard enough in my archives, I might even
|
||||
be able to find the message from a publicity flack expressing
|
||||
disappointment that I hadn’t written about the book after they sent it.
|
||||
All this speculation had a strong flavor of end-of-days. As the Scots
|
||||
science fiction writer, Ken MacLeod memorably put it, the Singularity
|
||||
was the “Rapture of the Nerds.” Ken, being the [13]offspring of a Free
|
||||
Presbyterian preacher, knows a millenarian religion when he sees it:
|
||||
Kurzweil’s doorstopper should really have been titled The Singularity
|
||||
is Nigh.
|
||||
These ideas were turned into novels by Vinge himself, including A Fire Upon the
|
||||
Deep (fun!) and Rainbow’s End (weak!). Other SF writers like Charles Stross
|
||||
wrote novels about humans doing their best to co-exist with “weakly godlike”
|
||||
machine intelligence (also fun!). Others who had no notable talent for writing,
|
||||
like the futurist Ray Kurzweil, tried to turn the Singularity into the
|
||||
foundation stone of a new account of human progress. I still possess a
|
||||
mostly-unread copy of Kurzweil’s mostly-unreadable magnum opus, The Singularity
|
||||
is Near, which was distributed en masse to bloggers like meself in an early
|
||||
2000s marketing campaign. If I dug hard enough in my archives, I might even be
|
||||
able to find the message from a publicity flack expressing disappointment that
|
||||
I hadn’t written about the book after they sent it. All this speculation had a
|
||||
strong flavor of end-of-days. As the Scots science fiction writer, Ken MacLeod
|
||||
memorably put it, the Singularity was the “Rapture of the Nerds.” Ken, being
|
||||
the [41]offspring of a Free Presbyterian preacher, knows a millenarian religion
|
||||
when he sees it: Kurzweil’s doorstopper should really have been titled The
|
||||
Singularity is Nigh.
|
||||
|
||||
Science fiction was the gateway drug, but it can’t really be blamed for
|
||||
everything that happened later. Faith in the Singularity has roughly
|
||||
the same relationship to SF as UFO-cultism. A small minority of SF
|
||||
writers are true believers; most are hearty skeptics, but recognize
|
||||
that superhuman machine intelligences are (a) possible) and (b) an
|
||||
extremely handy engine of plot. But the combination of cultish
|
||||
Singularity beliefs and science fiction has influenced a lot of
|
||||
external readers, who don’t distinguish sharply between the religious
|
||||
and fictive elements, but mix and meld them to come up with strange new
|
||||
hybrids.
|
||||
everything that happened later. Faith in the Singularity has roughly the same
|
||||
relationship to SF as UFO-cultism. A small minority of SF writers are true
|
||||
believers; most are hearty skeptics, but recognize that superhuman machine
|
||||
intelligences are (a) possible) and (b) an extremely handy engine of plot. But
|
||||
the combination of cultish Singularity beliefs and science fiction has
|
||||
influenced a lot of external readers, who don’t distinguish sharply between the
|
||||
religious and fictive elements, but mix and meld them to come up with strange
|
||||
new hybrids.
|
||||
|
||||
Just such a syncretic religion provides the final part of the
|
||||
back-story to the OpenAI crisis. In the 2010s, ideas about the
|
||||
Singularity cross-fertilized with notions about Bayesian reasoning and
|
||||
some really terrible fanfic to create the online “rationalist” movement
|
||||
mentioned in the NYT.
|
||||
Just such a syncretic religion provides the final part of the back-story to the
|
||||
OpenAI crisis. In the 2010s, ideas about the Singularity cross-fertilized with
|
||||
notions about Bayesian reasoning and some really terrible fanfic to create the
|
||||
online “rationalist” movement mentioned in the NYT.
|
||||
|
||||
I’ve never read a text on rationalism, whether by true believers, by
|
||||
hangers-on, or by bitter enemies (often erstwhile true believers), that
|
||||
really gets the totality of what you see if you dive into its core
|
||||
texts and apocrypha. And I won’t even try to provide one here. It is
|
||||
some Very Weird Shit and there is really great religious sociology to
|
||||
be written about it. The fights around [14]Roko’s Basilisk are perhaps
|
||||
the best known example of rationalism in action outside the community,
|
||||
and give you some flavor of the style of debate. But the very short
|
||||
version is that [15]Eliezer Yudkowsky, and his multitudes of online
|
||||
fans embarked on a massive collective intellectual project, which can
|
||||
reasonably be described as resurrecting David Langford’s hoary 1980s SF
|
||||
cliche, and treating it as the most urgent dilemma facing human beings
|
||||
today. We are about to create God. What comes next? Add Bayes’ Theorem
|
||||
to Vinge’s core ideas, sez rationalism, and you’ll likely find the
|
||||
answer.
|
||||
hangers-on, or by bitter enemies (often erstwhile true believers), that really
|
||||
gets the totality of what you see if you dive into its core texts and
|
||||
apocrypha. And I won’t even try to provide one here. It is some Very Weird Shit
|
||||
and there is really great religious sociology to be written about it. The
|
||||
fights around [42]Roko’s Basilisk are perhaps the best known example of
|
||||
rationalism in action outside the community, and give you some flavor of the
|
||||
style of debate. But the very short version is that [43]Eliezer Yudkowsky, and
|
||||
his multitudes of online fans embarked on a massive collective intellectual
|
||||
project, which can reasonably be described as resurrecting David Langford’s
|
||||
hoary 1980s SF cliche, and treating it as the most urgent dilemma facing human
|
||||
beings today. We are about to create God. What comes next? Add Bayes’ Theorem
|
||||
to Vinge’s core ideas, sez rationalism, and you’ll likely find the answer.
|
||||
|
||||
The consequences are what you might expect when a crowd of bright but
|
||||
rather naive (and occasionally creepy) computer science and adjacent
|
||||
people try to re-invent theology from first principles, to model what
|
||||
human-created gods might do, and how they ought be constrained. They
|
||||
include the following, non-comprehensive list: all sorts of strange
|
||||
mental exercises, postulated superhuman entities benign and malign and
|
||||
how to think about them; the jumbling of parts from fan-fiction,
|
||||
computer science, home-brewed philosophy and ARGs to create grotesque
|
||||
and interesting intellectual chimeras; Nick Bostrom, and a crew of very
|
||||
well funded philosophers; Effective Altruism, whose fancier adherents
|
||||
often prefer not to acknowledge the approach’s somewhat disreputable
|
||||
The consequences are what you might expect when a crowd of bright but rather
|
||||
naive (and occasionally creepy) computer science and adjacent people try to
|
||||
re-invent theology from first principles, to model what human-created gods
|
||||
might do, and how they ought be constrained. They include the following,
|
||||
non-comprehensive list: all sorts of strange mental exercises, postulated
|
||||
superhuman entities benign and malign and how to think about them; the jumbling
|
||||
of parts from fan-fiction, computer science, home-brewed philosophy and ARGs to
|
||||
create grotesque and interesting intellectual chimeras; Nick Bostrom, and a
|
||||
crew of very well funded philosophers; Effective Altruism, whose fancier
|
||||
adherents often prefer not to acknowledge the approach’s somewhat disreputable
|
||||
origins.
|
||||
|
||||
All this would be sociologically fascinating, but of little real world
|
||||
consequence, if it hadn’t profoundly influenced the founders of the
|
||||
organizations pushing AI forward. These luminaries think about the
|
||||
technologies that they were creating in terms that they have borrowed
|
||||
wholesale from the Yudkowsky extended universe. The risks and rewards
|
||||
of AI are seen as largely commensurate with the risks and rewards of
|
||||
creating superhuman intelligences, modeling how they might behave, and
|
||||
ensuring that we end up in a Good Singularity, where AIs do not destroy
|
||||
or enslave humanity as a species, rather than a bad one.
|
||||
organizations pushing AI forward. These luminaries think about the technologies
|
||||
that they were creating in terms that they have borrowed wholesale from the
|
||||
Yudkowsky extended universe. The risks and rewards of AI are seen as largely
|
||||
commensurate with the risks and rewards of creating superhuman intelligences,
|
||||
modeling how they might behave, and ensuring that we end up in a Good
|
||||
Singularity, where AIs do not destroy or enslave humanity as a species, rather
|
||||
than a bad one.
|
||||
|
||||
Even if rationalism’s answers are uncompelling, it asks interesting
|
||||
questions that might have real human importance. However, it is at best
|
||||
unclear that theoretical debates about immantenizing the eschaton tell
|
||||
us very much about actually-existing “AI,” a family of important and
|
||||
sometimes very powerful statistical techniques, which are being applied
|
||||
today, with emphatically non-theoretical risks and benefits.
|
||||
Even if rationalism’s answers are uncompelling, it asks interesting questions
|
||||
that might have real human importance. However, it is at best unclear that
|
||||
theoretical debates about immantenizing the eschaton tell us very much about
|
||||
actually-existing “AI,” a family of important and sometimes very powerful
|
||||
statistical techniques, which are being applied today, with emphatically
|
||||
non-theoretical risks and benefits.
|
||||
|
||||
Ah, well, nevertheless. The rationalist agenda has demonstrably shaped
|
||||
the questions around which the big AI ‘debates’ regularly revolve, as
|
||||
[16]demonstrated by the Rishi Sunak/Sam Altman/Elon Musk love-fest “AI
|
||||
Summit” in London a few weeks ago.
|
||||
Ah, well, nevertheless. The rationalist agenda has demonstrably shaped the
|
||||
questions around which the big AI ‘debates’ regularly revolve, as [44]
|
||||
demonstrated by the Rishi Sunak/Sam Altman/Elon Musk love-fest “AI Summit” in
|
||||
London a few weeks ago.
|
||||
|
||||
We are on a very strange timeline. My laboured Dianetics/Scientology
|
||||
joke can be turned into an interesting hypothetical. It actually turns
|
||||
out (I only stumbled across this recently) that Claude Shannon, the
|
||||
creator of information theory (and, by extension, the computer
|
||||
revolution) was an [17]L. Ron Hubbard fan in later life. In our
|
||||
continuum, this didn’t affect his theories: he had already done his
|
||||
major work. Imagine, however, a parallel universe, where Shannon’s
|
||||
science and standom had become intertwined and wildly influential, so
|
||||
that debates in information science obsessed over whether we could
|
||||
eliminate the noise of our [18]engrams, and isolate the signal of our
|
||||
True Selves, allowing us all to become [19]Operating Thetans. Then
|
||||
reflect on how your imagination doesn’t have to work nearly as hard as
|
||||
it ought to. A similarly noxious blend of garbage ideas and actual
|
||||
science is the foundation stone of the Grand AI Risk Debates that are
|
||||
happening today.
|
||||
We are on a very strange timeline. My laboured Dianetics/Scientology joke can
|
||||
be turned into an interesting hypothetical. It actually turns out (I only
|
||||
stumbled across this recently) that Claude Shannon, the creator of information
|
||||
theory (and, by extension, the computer revolution) was an [45]L. Ron Hubbard
|
||||
fan in later life. In our continuum, this didn’t affect his theories: he had
|
||||
already done his major work. Imagine, however, a parallel universe, where
|
||||
Shannon’s science and standom had become intertwined and wildly influential, so
|
||||
that debates in information science obsessed over whether we could eliminate
|
||||
the noise of our [46]engrams, and isolate the signal of our True Selves,
|
||||
allowing us all to become [47]Operating Thetans. Then reflect on how your
|
||||
imagination doesn’t have to work nearly as hard as it ought to. A similarly
|
||||
noxious blend of garbage ideas and actual science is the foundation stone of
|
||||
the Grand AI Risk Debates that are happening today.
|
||||
|
||||
To be clear - not everyone working on existential AI risk (or ‘x risk’
|
||||
as it is usually summarized) is a true believer in Strong Eliezer
|
||||
Rationalism. Most, very probably, are not. But you don’t need all that
|
||||
many true believers to keep the machine running. At least, that is how
|
||||
I interpret this [20]Shazeda Ahmed essay, which describes how some core
|
||||
precepts of a very strange set of beliefs have become normalized as the
|
||||
background assumptions for thinking about the promise and problems of
|
||||
AI. Even if you, as an AI risk person, don’t buy the full intellectual
|
||||
package, you find yourself looking for work in a field where the
|
||||
funding, the incentives, and the organizational structures mostly point
|
||||
in a single direction (NB - this is my jaundiced interpretation, not
|
||||
hers).
|
||||
To be clear - not everyone working on existential AI risk (or ‘x risk’ as it is
|
||||
usually summarized) is a true believer in Strong Eliezer Rationalism. Most,
|
||||
very probably, are not. But you don’t need all that many true believers to keep
|
||||
the machine running. At least, that is how I interpret this [48]Shazeda Ahmed
|
||||
essay, which describes how some core precepts of a very strange set of beliefs
|
||||
have become normalized as the background assumptions for thinking about the
|
||||
promise and problems of AI. Even if you, as an AI risk person, don’t buy the
|
||||
full intellectual package, you find yourself looking for work in a field where
|
||||
the funding, the incentives, and the organizational structures mostly point in
|
||||
a single direction (NB - this is my jaundiced interpretation, not hers).
|
||||
|
||||
********
|
||||
|
||||
There are two crucial differences between today’s AI cult and golden
|
||||
age Scientology. The first was already mentioned in passing. Machine
|
||||
learning works, and has some very important real life uses.
|
||||
[21]E-meters don’t work and are useless for any purpose other than
|
||||
fleecing punters.
|
||||
There are two crucial differences between today’s AI cult and golden age
|
||||
Scientology. The first was already mentioned in passing. Machine learning
|
||||
works, and has some very important real life uses. [49]E-meters don’t work and
|
||||
are useless for any purpose other than fleecing punters.
|
||||
|
||||
The second (which is closely related) is that Scientology’s ideology
|
||||
and money-hustle reinforce each other. The more that you buy into
|
||||
stories about the evils of mainstream psychology, the baggage of
|
||||
engrams that is preventing you from reaching your true potential and so
|
||||
on and so on, the more you want to spend on Scientology counselling. In
|
||||
AI, in contrast, God and Money have a rather more tentative
|
||||
relationship. If you are profoundly worried about the risks of AI,
|
||||
should you be unleashing it on the world for profit? That tension helps
|
||||
explain the fight that has just broken out into the open.
|
||||
The second (which is closely related) is that Scientology’s ideology and
|
||||
money-hustle reinforce each other. The more that you buy into stories about the
|
||||
evils of mainstream psychology, the baggage of engrams that is preventing you
|
||||
from reaching your true potential and so on and so on, the more you want to
|
||||
spend on Scientology counselling. In AI, in contrast, God and Money have a
|
||||
rather more tentative relationship. If you are profoundly worried about the
|
||||
risks of AI, should you be unleashing it on the world for profit? That tension
|
||||
helps explain the fight that has just broken out into the open.
|
||||
|
||||
It’s easy to forget that OpenAI was founded as an explicitly
|
||||
non-commercial entity, the better to balance the rewards and the risks
|
||||
of these new technologies. To quote from its [22]initial manifesto:
|
||||
|
||||
It’s hard to fathom how much human-level AI could benefit society,
|
||||
and it’s equally hard to imagine how much it could damage society if
|
||||
built or used incorrectly. Because of AI’s surprising history, it’s
|
||||
hard to predict when human-level AI might come within reach. When it
|
||||
does, it’ll be important to have a leading research institution
|
||||
which can prioritize a good outcome for all over its
|
||||
own self-interest.
|
||||
It’s easy to forget that OpenAI was founded as an explicitly non-commercial
|
||||
entity, the better to balance the rewards and the risks of these new
|
||||
technologies. To quote from its [50]initial manifesto:
|
||||
|
||||
We’re hoping to grow OpenAI into such an institution. As a
|
||||
non-profit, our aim is to build value for everyone rather than
|
||||
shareholders. Researchers will be strongly encouraged to publish
|
||||
their work, whether as papers, blog posts, or code, and our patents
|
||||
(if any) will be shared with the world. We’ll freely collaborate
|
||||
with others across many institutions and expect to work with
|
||||
companies to research and deploy new technologies.
|
||||
It’s hard to fathom how much human-level AI could benefit society, and it’s
|
||||
equally hard to imagine how much it could damage society if built or
|
||||
used incorrectly. Because of AI’s surprising history, it’s hard to predict
|
||||
when human-level AI might come within reach. When it does, it’ll be
|
||||
important to have a leading research institution which can prioritize a
|
||||
good outcome for all over its own self-interest.
|
||||
|
||||
We’re hoping to grow OpenAI into such an institution. As a non-profit, our
|
||||
aim is to build value for everyone rather than shareholders. Researchers
|
||||
will be strongly encouraged to publish their work, whether as papers, blog
|
||||
posts, or code, and our patents (if any) will be shared with the world.
|
||||
We’ll freely collaborate with others across many institutions and expect to
|
||||
work with companies to research and deploy new technologies.
|
||||
|
||||
That … isn’t quite how it worked out. The Sam Altman justification for
|
||||
deviation from this vision, laid out in various interviews, is that it
|
||||
turned out to just be too damned expensive to train the models as they
|
||||
grew bigger, and bigger and bigger. This necessitated the creation of
|
||||
an add-on structure, which would sidle into profitable activity. It
|
||||
also required massive cash infusions from Microsoft (reportedly in
|
||||
[23]the range of $13 billion), which also has an exclusive license to
|
||||
OpenAI’s most recent LLM, GPT-4. Microsoft, it should be noted, is not
|
||||
in the business of prioritizing “a good outcome for all over its own
|
||||
self-interest.” It looks instead, to invest its resources along the
|
||||
very best Friedmanite principles, so as to create whopping returns for
|
||||
deviation from this vision, laid out in various interviews, is that it turned
|
||||
out to just be too damned expensive to train the models as they grew bigger,
|
||||
and bigger and bigger. This necessitated the creation of an add-on structure,
|
||||
which would sidle into profitable activity. It also required massive cash
|
||||
infusions from Microsoft (reportedly in [51]the range of $13 billion), which
|
||||
also has an exclusive license to OpenAI’s most recent LLM, GPT-4. Microsoft, it
|
||||
should be noted, is not in the business of prioritizing “a good outcome for all
|
||||
over its own self-interest.” It looks instead, to invest its resources along
|
||||
the very best Friedmanite principles, so as to create whopping returns for
|
||||
shareholders. And $13 billion is a lot of invested resources.
|
||||
|
||||
This, very plausibly explains the current crisis. OpenAI’s governance
|
||||
arrangements are shaped by the fact that it was a non-profit until
|
||||
relatively recently. The board is a non-profit board. The two members
|
||||
already mentioned, McCauley and Toner, are not the kind of people you
|
||||
would expect to see making the big decisions for a major commercial
|
||||
entity. They plausibly represent the older rationalist vision of what
|
||||
OpenAI was supposed to do, and the risks that it was supposed to avert.
|
||||
arrangements are shaped by the fact that it was a non-profit until relatively
|
||||
recently. The board is a non-profit board. The two members already mentioned,
|
||||
McCauley and Toner, are not the kind of people you would expect to see making
|
||||
the big decisions for a major commercial entity. They plausibly represent the
|
||||
older rationalist vision of what OpenAI was supposed to do, and the risks that
|
||||
it was supposed to avert.
|
||||
|
||||
But as OpenAI’s ambitions have grown, that vision has been watered down
|
||||
in favor of making money. I’ve heard that there were a lot of people in
|
||||
the AI community who were really unhappy with OpenAI’s initial decision
|
||||
to let GPT rip. That spurred the race for commercial domination of AI
|
||||
which has shaped pretty well everything that has happened since,
|
||||
leading to model after model being launched, and to hell with the
|
||||
consequences. People like Altman still talk about the dangers of AGI.
|
||||
But their organizations and businesses keep releasing more, and more
|
||||
powerful systems, which can be, and are being, used in all sorts of
|
||||
unanticipated ways, for good and for ill.
|
||||
But as OpenAI’s ambitions have grown, that vision has been watered down in
|
||||
favor of making money. I’ve heard that there were a lot of people in the AI
|
||||
community who were really unhappy with OpenAI’s initial decision to let GPT
|
||||
rip. That spurred the race for commercial domination of AI which has shaped
|
||||
pretty well everything that has happened since, leading to model after model
|
||||
being launched, and to hell with the consequences. People like Altman still
|
||||
talk about the dangers of AGI. But their organizations and businesses keep
|
||||
releasing more, and more powerful systems, which can be, and are being, used in
|
||||
all sorts of unanticipated ways, for good and for ill.
|
||||
|
||||
It would perhaps be too cynical to say that AGI existential risk
|
||||
rhetoric has become a cynical hustle, intended to redirect the
|
||||
attentions of regulators toward possibly imaginary future risks in the
|
||||
future, and away from problematic but profitable activities that are
|
||||
happening right now. Human beings have an enormous capacity to
|
||||
fervently believe in things that it is in their self-interest to
|
||||
believe, and to update those beliefs as the interests change or become
|
||||
clearer. I wouldn’t be surprised at all if Altman sincerely thinks that
|
||||
he is still acting for the good of humankind (there are certainly
|
||||
enough people assuring him that he is). But it isn’t surprising either
|
||||
that the true believers are revolting, as Altman stretches their
|
||||
ideology ever further and thinner to facilitate raking in the
|
||||
benjamins.
|
||||
It would perhaps be too cynical to say that AGI existential risk rhetoric has
|
||||
become a cynical hustle, intended to redirect the attentions of regulators
|
||||
toward possibly imaginary future risks in the future, and away from problematic
|
||||
but profitable activities that are happening right now. Human beings have an
|
||||
enormous capacity to fervently believe in things that it is in their
|
||||
self-interest to believe, and to update those beliefs as the interests change
|
||||
or become clearer. I wouldn’t be surprised at all if Altman sincerely thinks
|
||||
that he is still acting for the good of humankind (there are certainly enough
|
||||
people assuring him that he is). But it isn’t surprising either that the true
|
||||
believers are revolting, as Altman stretches their ideology ever further and
|
||||
thinner to facilitate raking in the benjamins.
|
||||
|
||||
The OpenAI saga is a fight between God and Money; between a quite
|
||||
peculiar quasi-religious movement, and a quite ordinary desire to make
|
||||
cold hard cash. You should probably be putting your bets on Money
|
||||
prevailing in whatever strange arrangement of forces is happening as
|
||||
Altman is beamed up into the Microsoft mothership. But we might not be
|
||||
all that better off in this particular case if the forces of God were
|
||||
to prevail, and the rationalists who toppled Altman were to win a
|
||||
surprising victory. They want to slow down AI, which is good, but for
|
||||
all sorts of weird reasons, which are unlikely to provide good
|
||||
solutions for the actual problems that AI generates. The important
|
||||
questions about AI are the ones that neither God or [24]Mammon has
|
||||
particularly good answers for - but that’s a topic for future posts.
|
||||
The OpenAI saga is a fight between God and Money; between a quite peculiar
|
||||
quasi-religious movement, and a quite ordinary desire to make cold hard cash.
|
||||
You should probably be putting your bets on Money prevailing in whatever
|
||||
strange arrangement of forces is happening as Altman is beamed up into the
|
||||
Microsoft mothership. But we might not be all that better off in this
|
||||
particular case if the forces of God were to prevail, and the rationalists who
|
||||
toppled Altman were to win a surprising victory. They want to slow down AI,
|
||||
which is good, but for all sorts of weird reasons, which are unlikely to
|
||||
provide good solutions for the actual problems that AI generates. The important
|
||||
questions about AI are the ones that neither God or [52]Mammon has particularly
|
||||
good answers for - but that’s a topic for future posts.
|
||||
|
||||
Thanks for reading Programmable Mutter! Subscribe for free to receive
|
||||
new posts. And if you want to support my work, [25]buy my and Abe
|
||||
Newman’s new book, [26]Underground Empire, and sing its praises (as
|
||||
long as you actually liked it) on Amazon, Goodreads, social media and
|
||||
everywhere else that people find out about good books.
|
||||
____________________
|
||||
(BUTTON) Subscribe
|
||||
Thanks for reading Programmable Mutter! Subscribe for free to receive new
|
||||
posts. And if you want to support my work, [53]buy my and Abe Newman’s new
|
||||
book, [54]Underground Empire, and sing its praises (as long as you actually
|
||||
liked it) on Amazon, Goodreads, social media and everywhere else that people
|
||||
find out about good books.
|
||||
|
||||
[63][ ]
|
||||
Subscribe
|
||||
73
|
||||
(BUTTON)
|
||||
Share this post
|
||||
[https]
|
||||
|
||||
What OpenAI shares with Scientology
|
||||
|
||||
www.programmablemutter.com
|
||||
(BUTTON)
|
||||
Copy link
|
||||
(BUTTON)
|
||||
Facebook
|
||||
(BUTTON)
|
||||
Email
|
||||
(BUTTON)
|
||||
Note
|
||||
(BUTTON)
|
||||
Other
|
||||
[71]
|
||||
17
|
||||
[72]
|
||||
Share
|
||||
17 Comments
|
||||
|
||||
____________________________________________________________
|
||||
____________________________________________________________
|
||||
____________________________________________________________
|
||||
____________________________________________________________
|
||||
(BUTTON)
|
||||
[https]
|
||||
[ ]
|
||||
Share this discussion
|
||||
[https]
|
||||
|
||||
What OpenAI shares with Scientology
|
||||
|
||||
www.programmablemutter.com
|
||||
(BUTTON)
|
||||
Copy link
|
||||
(BUTTON)
|
||||
Facebook
|
||||
(BUTTON)
|
||||
Email
|
||||
(BUTTON)
|
||||
Note
|
||||
(BUTTON)
|
||||
Other
|
||||
Tarik Najeddine
|
||||
[27]Writes Factual Dispatch
|
||||
[28]Nov 20, 2023
|
||||
|
||||
ChatGPT is just Zapp Brannigan or a McKinsey consultant. A veneer of
|
||||
confidence and a person to blame when the executive "needs" to make a
|
||||
[81]
|
||||
Tarik Najeddine
|
||||
[82]Writes Factual Dispatch
|
||||
[83]Nov 20, 2023
|
||||
|
||||
[80] ChatGPT is just Zapp Brannigan or a McKinsey consultant. A veneer of
|
||||
[https] confidence and a person to blame when the executive "needs" to make a
|
||||
hard decision. You previously blamed the Bain consultants when you
|
||||
offshored a factory, now you blame AI.
|
||||
|
||||
Expand full comment
|
||||
Reply
|
||||
Share
|
||||
(BUTTON)
|
||||
|
||||
[86]
|
||||
Gerben Wierda
|
||||
[29]Nov 21, 2023·edited Nov 21, 2023
|
||||
[87]Nov 21, 2023·edited Nov 21, 2023
|
||||
|
||||
Came here via Dave Karpf's link. Beautiful stuff, and "The Singularity
|
||||
is Nigh" made me laugh out loud.
|
||||
@@ -408,22 +370,23 @@ What OpenAI shares with Scientology
|
||||
systems may be impressive, we humans are impressionable.
|
||||
|
||||
Recently, Sam Altman received a Hawking Fellowship for the OpenAI Team
|
||||
and he spoke for a few minutes followed by a Q&A (available on
|
||||
YouTube). In that session he was asked what are important qualities for
|
||||
[85] and he spoke for a few minutes followed by a Q&A (available on
|
||||
[https] YouTube). In that session he was asked what are important qualities for
|
||||
'founders' of these innovative tech firms. He answered that founders
|
||||
should have ‘deeply held convictions’ that are stable without a lot of
|
||||
‘positive external reinforcement’, ‘obsession’ with a problem, and a
|
||||
‘super powerful internal drive’. They needed to be an 'evangelist'. The
|
||||
link with religion shows here too.
|
||||
([30]https://erikjlarson.substack.com/p/gerben-wierda-on-chatgpt-altman
|
||||
-and). TED just released Ilya Sutskever’s talk and you see it there
|
||||
too. We have strong believers turned evangelists and we have a world of
|
||||
disciples and followers. It is indeed a very good analogy.
|
||||
link with religion shows here too. ([88]https://
|
||||
erikjlarson.substack.com/p/gerben-wierda-on-chatgpt-altman-and). TED
|
||||
just released Ilya Sutskever’s talk and you see it there too. We have
|
||||
strong believers turned evangelists and we have a world of disciples
|
||||
and followers. It is indeed a very good analogy.
|
||||
|
||||
Expand full comment
|
||||
Reply
|
||||
Share
|
||||
(BUTTON)
|
||||
[31]15 more comments...
|
||||
|
||||
[90]15 more comments...
|
||||
Top
|
||||
New
|
||||
Community
|
||||
@@ -431,66 +394,62 @@ What OpenAI shares with Scientology
|
||||
No posts
|
||||
|
||||
Ready for more?
|
||||
____________________
|
||||
(BUTTON) Subscribe
|
||||
|
||||
[99][ ]
|
||||
Subscribe
|
||||
© 2024 Henry Farrell
|
||||
[32]Privacy ∙ [33]Terms ∙ [34]Collection notice
|
||||
Start Writing[35]Get the app
|
||||
[36]Substack is the home for great writing
|
||||
[101]Privacy ∙ [102]Terms ∙ [103]Collection notice
|
||||
[104] Start Writing[105]Get the app
|
||||
[106]Substack is the home for great writing
|
||||
This site requires JavaScript to run correctly. Please [107]turn on JavaScript
|
||||
or unblock scripts
|
||||
|
||||
This site requires JavaScript to run correctly. Please [37]turn on
|
||||
JavaScript or unblock scripts
|
||||
References:
|
||||
|
||||
References
|
||||
|
||||
Visible links:
|
||||
1. https://www.programmablemutter.com/feed
|
||||
2. https://www.programmablemutter.com/
|
||||
3. https://www.programmablemutter.com/
|
||||
4. https://substack.com/@henryfarrell
|
||||
5. https://www.nytimes.com/2023/11/18/technology/open-ai-sam-altman-what-happened.html
|
||||
6. https://www.ft.com/content/54e36c93-08e5-4a9e-bda6-af673c3e9bb5
|
||||
7. https://amzn.to/3PbIyqX
|
||||
8. https://amzn.to/3PbIyqX
|
||||
9. https://www.ft.com/content/54e36c93-08e5-4a9e-bda6-af673c3e9bb5
|
||||
10. https://longreads.com/2017/02/01/xenus-paradox-the-fiction-of-l-ron-hubbard/
|
||||
11. https://ansible.uk/ai/pcwplus/pcwp1987.html
|
||||
12. https://edoras.sdsu.edu/~vinge/misc/singularity.html
|
||||
13. https://www.heraldscotland.com/life_style/arts_ents/14479010.science-fiction-writer-ken-macleod-free-presbyterian-childhood-time-communist-party-member-future-humanity/
|
||||
14. https://www.lesswrong.com/tag/rokos-basilisk
|
||||
15. https://en.wikipedia.org/wiki/Eliezer_Yudkowsky
|
||||
16. https://www.politico.eu/article/rishi-sunak-artificial-intelligence-pivot-safety-summit-united-kingdom-silicon-valley-effective-altruism/
|
||||
17. https://longreads.com/2018/10/23/the-dawn-of-dianetics-l-ron-hubbard-john-w-campbell-and-the-origins-of-scientology/
|
||||
18. https://en.wikipedia.org/wiki/Engram_(Dianetics)
|
||||
19. https://en.wikipedia.org/wiki/Operating_Thetan
|
||||
20. https://crookedtimber.org/2023/11/16/from-algorithmic-monoculture-to-epistemic-monoculture-understanding-the-rise-of-ai-safety/
|
||||
21. https://en.wikipedia.org/wiki/E-meter
|
||||
22. https://openai.com/blog/introducing-openai
|
||||
23. https://www.bloomberg.com/news/newsletters/2023-06-15/how-chatgpt-openai-made-microsoft-an-ai-tech-giant-big-take
|
||||
24. https://www.newadvent.org/cathen/09580b.htm
|
||||
25. https://amzn.to/3PbIyqX
|
||||
26. https://amzn.to/3PbIyqX
|
||||
27. https://factualdispatch.substack.com/?utm_source=substack&utm_medium=web&utm_content=comment_metadata
|
||||
28. https://www.programmablemutter.com/p/look-at-scientology-to-understand/comment/43988738
|
||||
29. https://www.programmablemutter.com/p/look-at-scientology-to-understand/comment/44033603
|
||||
30. https://erikjlarson.substack.com/p/gerben-wierda-on-chatgpt-altman-and
|
||||
31. https://www.programmablemutter.com/p/look-at-scientology-to-understand/comments
|
||||
32. https://substack.com/privacy
|
||||
33. https://substack.com/tos
|
||||
34. https://substack.com/ccpa#personal-data-collected
|
||||
35. https://substack.com/app/app-store-redirect?utm_campaign=app-marketing&utm_content=web-footer-button
|
||||
36. https://substack.com/
|
||||
37. https://enable-javascript.com/
|
||||
|
||||
Hidden links:
|
||||
39. https://substack.com/profile/557668-henry-farrell
|
||||
40. https://www.programmablemutter.com/p/look-at-scientology-to-understand/comments
|
||||
41. javascript:void(0)
|
||||
42. https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F555fe47f-ac07-4614-b78b-5d269fde7539_1024x1024.webp
|
||||
43. https://www.programmablemutter.com/p/look-at-scientology-to-understand/comments
|
||||
44. javascript:void(0)
|
||||
45. https://substack.com/profile/1263175-tarik-najeddine
|
||||
46. https://substack.com/profile/1263175-tarik-najeddine
|
||||
47. https://substack.com/profile/23165546-gerben-wierda
|
||||
48. https://substack.com/profile/23165546-gerben-wierda
|
||||
49. https://substack.com/signup?utm_source=substack&utm_medium=web&utm_content=footer
|
||||
[1] https://www.programmablemutter.com/
|
||||
[2] https://www.programmablemutter.com/
|
||||
[12] https://substack.com/profile/557668-henry-farrell
|
||||
[13] https://substack.com/@henryfarrell
|
||||
[20] https://www.programmablemutter.com/p/look-at-scientology-to-understand/comments
|
||||
[21] javascript:void(0)
|
||||
[22] https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F555fe47f-ac07-4614-b78b-5d269fde7539_1024x1024.webp
|
||||
[23] https://www.nytimes.com/2023/11/18/technology/open-ai-sam-altman-what-happened.html
|
||||
[24] https://www.ft.com/content/54e36c93-08e5-4a9e-bda6-af673c3e9bb5
|
||||
[25] https://amzn.to/3PbIyqX
|
||||
[26] https://amzn.to/3PbIyqX
|
||||
[37] https://www.ft.com/content/54e36c93-08e5-4a9e-bda6-af673c3e9bb5
|
||||
[38] https://longreads.com/2017/02/01/xenus-paradox-the-fiction-of-l-ron-hubbard/
|
||||
[39] https://ansible.uk/ai/pcwplus/pcwp1987.html
|
||||
[40] https://edoras.sdsu.edu/~vinge/misc/singularity.html
|
||||
[41] https://www.heraldscotland.com/life_style/arts_ents/14479010.science-fiction-writer-ken-macleod-free-presbyterian-childhood-time-communist-party-member-future-humanity/
|
||||
[42] https://www.lesswrong.com/tag/rokos-basilisk
|
||||
[43] https://en.wikipedia.org/wiki/Eliezer_Yudkowsky
|
||||
[44] https://www.politico.eu/article/rishi-sunak-artificial-intelligence-pivot-safety-summit-united-kingdom-silicon-valley-effective-altruism/
|
||||
[45] https://longreads.com/2018/10/23/the-dawn-of-dianetics-l-ron-hubbard-john-w-campbell-and-the-origins-of-scientology/
|
||||
[46] https://en.wikipedia.org/wiki/Engram_(Dianetics)
|
||||
[47] https://en.wikipedia.org/wiki/Operating_Thetan
|
||||
[48] https://crookedtimber.org/2023/11/16/from-algorithmic-monoculture-to-epistemic-monoculture-understanding-the-rise-of-ai-safety/
|
||||
[49] https://en.wikipedia.org/wiki/E-meter
|
||||
[50] https://openai.com/blog/introducing-openai
|
||||
[51] https://www.bloomberg.com/news/newsletters/2023-06-15/how-chatgpt-openai-made-microsoft-an-ai-tech-giant-big-take
|
||||
[52] https://www.newadvent.org/cathen/09580b.htm
|
||||
[53] https://amzn.to/3PbIyqX
|
||||
[54] https://amzn.to/3PbIyqX
|
||||
[71] https://www.programmablemutter.com/p/look-at-scientology-to-understand/comments
|
||||
[72] javascript:void(0)
|
||||
[80] https://substack.com/profile/1263175-tarik-najeddine
|
||||
[81] https://substack.com/profile/1263175-tarik-najeddine
|
||||
[82] https://factualdispatch.substack.com/?utm_source=substack&utm_medium=web&utm_content=comment_metadata
|
||||
[83] https://www.programmablemutter.com/p/look-at-scientology-to-understand/comment/43988738
|
||||
[85] https://substack.com/profile/23165546-gerben-wierda
|
||||
[86] https://substack.com/profile/23165546-gerben-wierda
|
||||
[87] https://www.programmablemutter.com/p/look-at-scientology-to-understand/comment/44033603
|
||||
[88] https://erikjlarson.substack.com/p/gerben-wierda-on-chatgpt-altman-and
|
||||
[90] https://www.programmablemutter.com/p/look-at-scientology-to-understand/comments
|
||||
[101] https://substack.com/privacy
|
||||
[102] https://substack.com/tos
|
||||
[103] https://substack.com/ccpa#personal-data-collected
|
||||
[104] https://substack.com/signup?utm_source=substack&utm_medium=web&utm_content=footer
|
||||
[105] https://substack.com/app/app-store-redirect?utm_campaign=app-marketing&utm_content=web-footer-button
|
||||
[106] https://substack.com/
|
||||
[107] https://enable-javascript.com/
|
||||
|
||||
@@ -1,39 +1,34 @@
|
||||
#[1]next [2]alternate
|
||||
|
||||
[3]Home [4]About [5]Moonbound
|
||||
|
||||
From: Robin Sloan
|
||||
[1]Home [2]About [3]Moonbound From: Robin Sloan
|
||||
To: the lab
|
||||
Sent: March 2023
|
||||
|
||||
Phase change
|
||||
|
||||
An extremely close-up photograph of a snowflake, looking almost
|
||||
architectural. [6]Snowflake, Wilson Bentley, ca. 1910
|
||||
An extremely close-up photograph of a snowflake, looking almost architectural.
|
||||
[4]Snowflake, Wilson Bentley, ca. 1910
|
||||
|
||||
Earlier this week, in [7]my main newsletter, I praised a new project
|
||||
from Matt Webb. Here, I want to come at it from a different angle.
|
||||
Earlier this week, in [5]my main newsletter, I praised a new project from Matt
|
||||
Webb. Here, I want to come at it from a different angle.
|
||||
|
||||
Briefly: Matt has built the [8]Braggoscope, a fun and useful
|
||||
application for exploring the archives of the beloved BBC radio show In
|
||||
Our Time, hosted by the inimitable Melvyn Bragg.
|
||||
Briefly: Matt has built the [6]Braggoscope, a fun and useful application for
|
||||
exploring the archives of the beloved BBC radio show In Our Time, hosted by the
|
||||
inimitable Melvyn Bragg.
|
||||
|
||||
In Our Time only provides HTML pages for each episode — there’s no
|
||||
structured data, no sense of “episode X is connected to episode Y
|
||||
because of shared feature Z”.
|
||||
In Our Time only provides HTML pages for each episode — there’s no structured
|
||||
data, no sense of “episode X is connected to episode Y because of shared
|
||||
feature Z”.
|
||||
|
||||
As Matt explains [9]in his write-up, he fed the plain-language content
|
||||
of each episode page into the GPT-3 API, cleverly prompting it to
|
||||
extract basic metadata, along with a few subtler properties — including
|
||||
a Dewey Decimal number!?
|
||||
As Matt explains [7]in his write-up, he fed the plain-language content of each
|
||||
episode page into the GPT-3 API, cleverly prompting it to extract basic
|
||||
metadata, along with a few subtler properties — including a Dewey
|
||||
Decimal number!?
|
||||
|
||||
(Explaining how and why a person might prompt a language model is
|
||||
beyond the scope of this newsletter; you can [10]read up about it
|
||||
here.)
|
||||
(Explaining how and why a person might prompt a language model is beyond the
|
||||
scope of this newsletter; you can [8]read up about it here.)
|
||||
|
||||
Here’s [11]a bit of Matt’s prompt:
|
||||
Extract the description and a list of guests from the supplied episode notes fro
|
||||
m a podcast.
|
||||
Here’s [9]a bit of Matt’s prompt:
|
||||
|
||||
Extract the description and a list of guests from the supplied episode notes from a podcast.
|
||||
|
||||
Also provide a Dewey Decimal Classification code and label for the description
|
||||
|
||||
@@ -51,21 +46,19 @@ Episode synopsis (Markdown):
|
||||
|
||||
Valid JSON:
|
||||
|
||||
Important to say: it doesn’t work perfectly. Matt reports that GPT-3
|
||||
doesn’t always return valid JSON, and if you browse the Braggoscope,
|
||||
you’ll find plenty of questionable filing choices.
|
||||
Important to say: it doesn’t work perfectly. Matt reports that GPT-3 doesn’t
|
||||
always return valid JSON, and if you browse the Braggoscope, you’ll find plenty
|
||||
of questionable filing choices.
|
||||
|
||||
And yet! What a technique. (Matt credits Noah Brier for [12]the
|
||||
insight.)
|
||||
And yet! What a technique. (Matt credits Noah Brier for [10]the insight.)
|
||||
|
||||
It fits into a pattern I’ve noticed: while the buzzy application of the
|
||||
GPT-alikes is chat, the real workhorse might be text transformation.
|
||||
|
||||
As Matt writes:
|
||||
|
||||
Sure Google is all-in on AI in products, announcing chatbots to
|
||||
compete with ChatGPT, and synthesised text in the search engine.
|
||||
BUT.
|
||||
Sure Google is all-in on AI in products, announcing chatbots to compete
|
||||
with ChatGPT, and synthesised text in the search engine. BUT.
|
||||
|
||||
Using GPT-3 as a function call.
|
||||
|
||||
@@ -73,149 +66,142 @@ Valid JSON:
|
||||
|
||||
It brings a lot within reach.
|
||||
|
||||
I think the magnitude of this shift … I would say it’s on the order
|
||||
of the web from the mid 90s? There was a radical simplification and
|
||||
democratisation of software (architecture, development, deployment,
|
||||
use) that took decades to really unfold.
|
||||
I think the magnitude of this shift … I would say it’s on the order of the
|
||||
web from the mid 90s? There was a radical simplification and democratisa
|
||||
tion of software (architecture, development, deployment, use) that took
|
||||
decades to really unfold.
|
||||
|
||||
For me, 2022 and 2023 have presented two thick strands of inquiry: the
|
||||
web and AI, AI and the web. This is evidenced by the structure of these
|
||||
lab newsletters, which have tended towards birfucation.
|
||||
For me, 2022 and 2023 have presented two thick strands of inquiry: the web and
|
||||
AI, AI and the web. This is evidenced by the structure of these lab
|
||||
newsletters, which have tended towards birfucation.
|
||||
|
||||
Matt’s thinking is interesting to me because it brings the
|
||||
strands together.
|
||||
Matt’s thinking is interesting to me because it brings the strands together.
|
||||
|
||||
One of the pleasures of HTTP (the original version) is that it’s almost
|
||||
plain language, though a very simple kind. You can execute an HTTP
|
||||
request “by hand”: telnet www.google.com 80 followed by GET /.
|
||||
One of the pleasures of HTTP (the original version) is that it’s almost plain
|
||||
language, though a very simple kind. You can execute an HTTP request “by hand”:
|
||||
telnet www.google.com 80 followed by GET /.
|
||||
|
||||
Language models as universal couplers begin to suggest protocols that
|
||||
really are plain language. What if the protocol of the GPT-alikes is
|
||||
just a bare TCP socket carrying free-form requests and instructions?
|
||||
What if the RSS feed of the future is simply my language model replying
|
||||
to yours when it asks, “What’s up with Robin lately?”
|
||||
Language models as universal couplers begin to suggest protocols that really
|
||||
are plain language. What if the protocol of the GPT-alikes is just a bare TCP
|
||||
socket carrying free-form requests and instructions? What if the RSS feed of
|
||||
the future is simply my language model replying to yours when it asks, “What’s
|
||||
up with Robin lately?”
|
||||
|
||||
I like this because I hate it; because it’s weird, and makes me
|
||||
feel uncomfortable.
|
||||
__________________________________________________________________
|
||||
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
I think it’s really challenging to find the appropriate stance towards
|
||||
this stuff.
|
||||
|
||||
On one hand, I find critical deflation, of the kind you’ll hear from
|
||||
Ted Chiang, Simon Willison, and Claire Leibowicz in [13]this recent
|
||||
episode of KQED Forum, appropriate and useful. The hype is so powerful
|
||||
that any corrective is welcome.
|
||||
On one hand, I find critical deflation, of the kind you’ll hear from Ted
|
||||
Chiang, Simon Willison, and Claire Leibowicz in [11]this recent episode of KQED
|
||||
Forum, appropriate and useful. The hype is so powerful that any corrective
|
||||
is welcome.
|
||||
|
||||
However! On the critical side, the evaluation of what’s before us isn’t
|
||||
sufficient; not even close. If we demand humility from AI engineers,
|
||||
then we ought to match it with imagination.
|
||||
sufficient; not even close. If we demand humility from AI engineers, then we
|
||||
ought to match it with imagination.
|
||||
|
||||
An important fact about these language models — one that sets them
|
||||
apart from, say, the personal computer, or the iPhone — is that their
|
||||
capabilities have been surprising, often confounding, even to
|
||||
their creators.
|
||||
An important fact about these language models — one that sets them apart from,
|
||||
say, the personal computer, or the iPhone — is that their capabilities have
|
||||
been surprising, often confounding, even to their creators.
|
||||
|
||||
AI at this moment feels like a mash-up of programming and biology. The
|
||||
programming part is obvious; the biology part becomes apparent when you
|
||||
see [14]AI engineers probing their own creations the way you might
|
||||
probe a mouse in a lab.
|
||||
AI at this moment feels like a mash-up of programming and biology. The program
|
||||
ming part is obvious; the biology part becomes apparent when you see [12]AI
|
||||
engineers probing their own creations the way you might probe a mouse in a lab.
|
||||
|
||||
The simple fact is: even at the highest levels of theory and practice,
|
||||
no one knows how these language models are doing what they’re doing.
|
||||
The simple fact is: even at the highest levels of theory and practice, no one
|
||||
knows how these language models are doing what they’re doing.
|
||||
|
||||
Over the past few years, in the evolution from GPT-2-alikes to
|
||||
GPT-3-alikes and beyond, it’s become clear that the “returns to
|
||||
scale”—both in terms of (1) a model’s size and (2) the scope of its
|
||||
training data — are exponential and nonlinear. Simply adding more works
|
||||
better, and works weirder, than it should.
|
||||
Over the past few years, in the evolution from GPT-2-alikes to GPT-3-alikes and
|
||||
beyond, it’s become clear that the “returns to scale”—both in terms of (1) a
|
||||
model’s size and (2) the scope of its training data — are exponential and
|
||||
nonlinear. Simply adding more works better, and works weirder, than it should.
|
||||
|
||||
The nonlinearity is, to me, the most interesting part. As these models
|
||||
have grown, they have undergone widely observed “phase changes” in
|
||||
capability, just as sudden and surprising as water frozen or
|
||||
cream whipped.
|
||||
The nonlinearity is, to me, the most interesting part. As these models have
|
||||
grown, they have undergone widely observed “phase changes” in capability, just
|
||||
as sudden and surprising as water frozen or cream whipped.
|
||||
|
||||
At the moment, my deepest engagement with a language model is in a
|
||||
channel on a Discord server, where our gallant host has set up a
|
||||
ChatGPT-powered bot and laced a simple personality into its prompt. The
|
||||
sociability has been a revelation — multiplayer ChatGPT is much, MUCH
|
||||
more fun than single player — and, of course, the conversation tends
|
||||
towards goading the bot, testing its boundaries, luring it
|
||||
into absurdities.
|
||||
At the moment, my deepest engagement with a language model is in a channel on a
|
||||
Discord server, where our gallant host has set up a ChatGPT-powered bot and
|
||||
laced a simple personality into its prompt. The sociability has been a
|
||||
revelation — multiplayer ChatGPT is much, MUCH more fun than single player —
|
||||
and, of course, the conversation tends towards goading the bot, testing its
|
||||
boundaries, luring it into absurdities.
|
||||
|
||||
The bot writes poems, sure, and song lyrics, and movie scenes.
|
||||
|
||||
The bot also produces ASCII art, and SVG code, and [15]PICO-8 programs,
|
||||
though they don’t always run.
|
||||
The bot also produces ASCII art, and SVG code, and [13]PICO-8 programs, though
|
||||
they don’t always run.
|
||||
|
||||
I find myself deeply ambivalent, in the original sense of: thinking
|
||||
many things at once. I’m very aware of the bot’s limitations, but/and
|
||||
I find myself stunned by its fluency, its range.
|
||||
I find myself deeply ambivalent, in the original sense of: thinking many things
|
||||
at once. I’m very aware of the bot’s limitations, but/and I find myself stunned
|
||||
by its fluency, its range.
|
||||
|
||||
Listen: you can be a skeptic. In some ways, I am! But these phase
|
||||
changes have happened, and that probably means they will keep
|
||||
happening, and no one knows (the AI engineers least of all) what might
|
||||
suddenly become possible.
|
||||
Listen: you can be a skeptic. In some ways, I am! But these phase changes have
|
||||
happened, and that probably means they will keep happening, and no one knows
|
||||
(the AI engineers least of all) what might suddenly become possible.
|
||||
|
||||
As ever, [16]Jack Clark is my guide. He’s a journalist turned AI
|
||||
practioner, involved in policy and planning at the highest levels,
|
||||
first at OpenAI, now at Anthropic. And if he’s no longer a
|
||||
disinterested observer, he remains deeply grounded and moral, which
|
||||
makes me trust him when he says, with confidence: this is the biggest
|
||||
thing going, and we had all better brace for weird times ahead.
|
||||
__________________________________________________________________
|
||||
As ever, [14]Jack Clark is my guide. He’s a journalist turned AI practioner,
|
||||
involved in policy and planning at the highest levels, first at OpenAI, now at
|
||||
Anthropic. And if he’s no longer a disinterested observer, he remains deeply
|
||||
grounded and moral, which makes me trust him when he says, with confidence:
|
||||
this is the biggest thing going, and we had all better brace for weird
|
||||
times ahead.
|
||||
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
What does that mean, to brace for it?
|
||||
|
||||
I’ve found it helpful, these past few years, to frame my anxieties and
|
||||
dissatisfactions as questions. For example, fed up with the state of
|
||||
social media, [17]I asked: what do I want from the internet, anyway?
|
||||
I’ve found it helpful, these past few years, to frame my anxieties and dissatis
|
||||
factions as questions. For example, fed up with the state of social media, [15]
|
||||
I asked: what do I want from the internet, anyway?
|
||||
|
||||
It turns out I had an answer to that question.
|
||||
|
||||
Where the GPT-alikes are concerned, a question that’s emerging for
|
||||
me is:
|
||||
Where the GPT-alikes are concerned, a question that’s emerging for me is:
|
||||
|
||||
What could I do with a universal function — a tool for turning just
|
||||
about any X into just about any Y with plain language instructions?
|
||||
What could I do with a universal function — a tool for turning just about any X
|
||||
into just about any Y with plain language instructions?
|
||||
|
||||
I don’t pose that question with any sense of wide-eyed expectation; a
|
||||
reasonable answer might be, nothing much. Not everything in the world
|
||||
depends on the transformation of symbols. But I think that IS the
|
||||
question, and I think it takes some legitimate work, some strenuous
|
||||
imagination, to push yourself to believe it really will be “just about
|
||||
any X” into “just about any Y”.
|
||||
I don’t pose that question with any sense of wide-eyed expectation; a reason
|
||||
able answer might be, nothing much. Not everything in the world depends on the
|
||||
transformation of symbols. But I think that IS the question, and I think it
|
||||
takes some legitimate work, some strenuous imagination, to push yourself to
|
||||
believe it really will be “just about any X” into “just about any Y”.
|
||||
|
||||
I help operate [18]a small olive oil company, and I have spent a bit of
|
||||
time lately considering this question in the context of our business.
|
||||
What might a GPT-alike do for us? What might an even more capable
|
||||
system do?
|
||||
I help operate [16]a small olive oil company, and I have spent a bit of time
|
||||
lately considering this question in the context of our business. What might a
|
||||
GPT-alike do for us? What might an even more capable system do?
|
||||
|
||||
My answer, so far, is indeed: nothing much! It’s a physical business,
|
||||
after all, mainly concerned with moving and transforming matter. The
|
||||
“obvious” application is customer support, which I handle myself, and
|
||||
which I am unwilling to cede to a computer or, indeed, anyone who isn’t
|
||||
me. The specific quality and character of our support is important.
|
||||
My answer, so far, is indeed: nothing much! It’s a physical business, after
|
||||
all, mainly concerned with moving and transforming matter. The “obvious” appli
|
||||
cation is customer support, which I handle myself, and which I am unwilling to
|
||||
cede to a computer or, indeed, anyone who isn’t me. The specific quality and
|
||||
character of our support is important.
|
||||
|
||||
(As an aside: every customer support request I receive is a miniature
|
||||
puzzle, usually requiring deduction across several different systems.
|
||||
Many of these puzzles are challenging even to the general intelligence
|
||||
that is me; if it comes to pass that a GPT-alike can handle them
|
||||
without breaking a sweat, I will be very, very impressed.)
|
||||
(As an aside: every customer support request I receive is a miniature puzzle,
|
||||
usually requiring deduction across several different systems. Many of these
|
||||
puzzles are challenging even to the general intelligence that is me; if it
|
||||
comes to pass that a GPT-alike can handle them without breaking a sweat, I will
|
||||
be very, very impressed.)
|
||||
|
||||
(Of course, it’s not going to happen like that, is it? Long before
|
||||
GPT-alikes can solve the same problems Robin can, using the tools Robin
|
||||
has, the problems themselves will change to meet the GPT-alikes
|
||||
halfway. The systems will all learn to “speak GPT”, in some sense.)
|
||||
(Of course, it’s not going to happen like that, is it? Long before GPT-alikes
|
||||
can solve the same problems Robin can, using the tools Robin has, the problems
|
||||
themselves will change to meet the GPT-alikes halfway. The systems will all
|
||||
learn to “speak GPT”, in some sense.)
|
||||
|
||||
The simple act of asking and answering the question was clarifying and
|
||||
calming. It plucked AI out of the realm of abstract dread and plunked
|
||||
it down on the workbench.
|
||||
__________________________________________________________________
|
||||
The simple act of asking and answering the question was clarifying and calming.
|
||||
It plucked AI out of the realm of abstract dread and plunked it down on
|
||||
the workbench.
|
||||
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
Jack Clark includes, in all of his AI newsletters, a piece of original
|
||||
micro-fiction. One of them, [19]sent in December, has stayed with me.
|
||||
I’ll reproduce it here in full:
|
||||
micro-fiction. One of them, [17]sent in December, has stayed with me. I’ll
|
||||
reproduce it here in full:
|
||||
|
||||
Reality Authentication
|
||||
|
||||
@@ -223,51 +209,47 @@ Valid JSON:
|
||||
|
||||
“To login, spit into the bio-API”
|
||||
|
||||
I took a sip of water and swirled it around my mouth a bit, then
|
||||
hawked some spit into the little cup on my desk, put its lid on,
|
||||
then flipped over the receptacle and plugged it into the
|
||||
bio-API system.
|
||||
I took a sip of water and swirled it around my mouth a bit, then hawked
|
||||
some spit into the little cup on my desk, put its lid on, then flipped over
|
||||
the receptacle and plugged it into the bio-API system.
|
||||
|
||||
“Authenticating … authentication successful, human-user identified.
|
||||
Enjoy your time on the application!”
|
||||
“Authenticating … authentication successful, human-user identified. Enjoy
|
||||
your time on the application!”
|
||||
|
||||
I spent a couple of hours logged-on, doing a mixture of work and
|
||||
pleasure. I was part of an all-human gaming league called the
|
||||
No-Centaurs; we came second in a mini tournament. I also talked to
|
||||
my therapist sans his augment, and I sent a few emails over the
|
||||
BioNet protocol.
|
||||
I spent a couple of hours logged-on, doing a mixture of work and pleasure.
|
||||
I was part of an all-human gaming league called the No-Centaurs; we came
|
||||
second in a mini tournament. I also talked to my therapist sans his
|
||||
augment, and I sent a few emails over the BioNet protocol.
|
||||
|
||||
When I logged out, I went back to the regular internet. Since the AI
|
||||
models had got minituarized and proliferated a decade ago, the
|
||||
internet had radically changed. For one thing, it was so much faster
|
||||
now. It was also dangerous in ways it hadn’t been before - Attention
|
||||
Harvesters were everywhere and the only reason I was confident in my
|
||||
browsing was I’d paid for a few protection programs.
|
||||
When I logged out, I went back to the regular internet. Since the AI models
|
||||
had got minituarized and proliferated a decade ago, the internet had
|
||||
radically changed. For one thing, it was so much faster now. It was also
|
||||
dangerous in ways it hadn’t been before - Attention Harvesters were every
|
||||
where and the only reason I was confident in my browsing was I’d paid for a
|
||||
few protection programs.
|
||||
|
||||
I think “brace for it” might mean imagining human-only spaces, online
|
||||
and off. We might be headed, paradoxically, for a golden age of “get
|
||||
that robot out of my face”.
|
||||
I think “brace for it” might mean imagining human-only spaces, online and off.
|
||||
We might be headed, paradoxically, for a golden age of “get that robot out of
|
||||
my face”.
|
||||
|
||||
In the extreme case, if AI doesn’t wreck the world, language models
|
||||
could certainly wreck the internet, like Jack’s Attention Harvesters
|
||||
above. Maybe we’ll look back at the Web Parenthesis, 1990-2030. It was
|
||||
weird and fun, though no one in the future will quite understand
|
||||
the appeal.
|
||||
In the extreme case, if AI doesn’t wreck the world, language models could
|
||||
certainly wreck the internet, like Jack’s Attention Harvesters above. Maybe
|
||||
we’ll look back at the Web Parenthesis, 1990-2030. It was weird and fun, though
|
||||
no one in the future will quite understand the appeal.
|
||||
|
||||
We are living and thinking together in an interesting time. My
|
||||
recommendation is to avoid chasing the ball of AI around the field,
|
||||
always a step behind. Instead, set your stance a little wider and form
|
||||
a question that actually matters to you.
|
||||
We are living and thinking together in an interesting time. My recommendation
|
||||
is to avoid chasing the ball of AI around the field, always a step behind.
|
||||
Instead, set your stance a little wider and form a question that actually
|
||||
matters to you.
|
||||
|
||||
It might be as simple as: is this kind of capability, extrapolated
|
||||
forward, useful to me and my work? If so, how?
|
||||
It might be as simple as: is this kind of capability, extrapolated forward,
|
||||
useful to me and my work? If so, how?
|
||||
|
||||
It might be as wacky as: what kind of protocol could I build around
|
||||
plain language, the totally sci-fi vision of computers just TALKING to
|
||||
each other?
|
||||
It might be as wacky as: what kind of protocol could I build around plain
|
||||
language, the totally sci-fi vision of computers just TALKING to each other?
|
||||
|
||||
It might even be my original question, or a version of it: what do
|
||||
I want from the internet, anyway?
|
||||
It might even be my original question, or a version of it: what do I want from
|
||||
the internet, anyway?
|
||||
|
||||
From Oakland,
|
||||
|
||||
@@ -275,35 +257,33 @@ Valid JSON:
|
||||
|
||||
March 2023, Oakland
|
||||
|
||||
I'm [20]Robin Sloan, a fiction writer. You can sign up for my
|
||||
lab newsletter:
|
||||
____________________ Subscribe
|
||||
I'm [18]Robin Sloan, a fiction writer. You can sign up for my lab newsletter:
|
||||
|
||||
[19][ ] [20][Subscribe]
|
||||
This website doesn’t collect any information about you or your reading.
|
||||
It aspires to the speed and privacy of the printed page.
|
||||
|
||||
Don’t miss [21]the colophon. Hony soyt qui mal pence
|
||||
|
||||
References
|
||||
|
||||
1. https://www.robinsloan.com/confirm/main/subscribe/
|
||||
2. https://www.robinsloan.com/feed.xml
|
||||
3. https://www.robinsloan.com/
|
||||
4. https://www.robinsloan.com/about/
|
||||
5. https://www.robinsloan.com/moonbound/
|
||||
6. https://publicdomainreview.org/essay/the-snowflake-man-of-vermont?utm_source=Robin_Sloan_sent_me
|
||||
7. https://www.robinsloan.com/newsletters/ring-got-good/?utm_source=Robin_Sloan_sent_me
|
||||
8. https://genmon.github.io/braggoscope/?utm_source=Robin_Sloan_sent_me
|
||||
9. https://interconnected.org/home/2023/02/07/braggoscope?utm_source=Robin_Sloan_sent_me
|
||||
10. https://help.openai.com/en/articles/6654000-best-practices-for-prompt-engineering-with-openai-api?utm_source=Robin_Sloan_sent_me
|
||||
11. https://news.ycombinator.com/item?id=35073824&utm_source=Robin_Sloan_sent_me
|
||||
12. https://brxnd.substack.com/p/the-prompt-to-rule-all-prompts-brxnd?utm_source=Robin_Sloan_sent_me
|
||||
13. https://www.kqed.org/forum/2010101892368/how-to-wrap-our-heads-around-these-new-shockingly-fluent-chatbots?utm_source=Robin_Sloan_sent_me
|
||||
14. https://www.anthropic.com/index/toy-models-of-superposition-2?utm_source=Robin_Sloan_sent_me
|
||||
15. https://www.lexaloffle.com/pico-8.php?utm_source=Robin_Sloan_sent_me
|
||||
16. https://importai.substack.com/?utm_source=Robin_Sloan_sent_me
|
||||
17. https://www.robinsloan.com/lab/specifying-spring-83/
|
||||
18. https://fat.gold/?utm_source=Robin_Sloan_sent_me
|
||||
19. https://us13.campaign-archive.com/?u=67bd06787e84d73db24fb0aa5&&id=a03ebcd500&utm_source=Robin_Sloan_sent_me
|
||||
20. https://www.robinsloan.com/about?utm_source=Robin_Sloan_sent_me
|
||||
21. https://www.robinsloan.com/colophon/
|
||||
References:
|
||||
|
||||
[1] https://www.robinsloan.com/
|
||||
[2] https://www.robinsloan.com/about/
|
||||
[3] https://www.robinsloan.com/moonbound/
|
||||
[4] https://publicdomainreview.org/essay/the-snowflake-man-of-vermont?utm_source=Robin_Sloan_sent_me
|
||||
[5] https://www.robinsloan.com/newsletters/ring-got-good/?utm_source=Robin_Sloan_sent_me
|
||||
[6] https://genmon.github.io/braggoscope/?utm_source=Robin_Sloan_sent_me
|
||||
[7] https://interconnected.org/home/2023/02/07/braggoscope?utm_source=Robin_Sloan_sent_me
|
||||
[8] https://help.openai.com/en/articles/6654000-best-practices-for-prompt-engineering-with-openai-api?utm_source=Robin_Sloan_sent_me
|
||||
[9] https://news.ycombinator.com/item?id=35073824&utm_source=Robin_Sloan_sent_me
|
||||
[10] https://brxnd.substack.com/p/the-prompt-to-rule-all-prompts-brxnd?utm_source=Robin_Sloan_sent_me
|
||||
[11] https://www.kqed.org/forum/2010101892368/how-to-wrap-our-heads-around-these-new-shockingly-fluent-chatbots?utm_source=Robin_Sloan_sent_me
|
||||
[12] https://www.anthropic.com/index/toy-models-of-superposition-2?utm_source=Robin_Sloan_sent_me
|
||||
[13] https://www.lexaloffle.com/pico-8.php?utm_source=Robin_Sloan_sent_me
|
||||
[14] https://importai.substack.com/?utm_source=Robin_Sloan_sent_me
|
||||
[15] https://www.robinsloan.com/lab/specifying-spring-83/
|
||||
[16] https://fat.gold/?utm_source=Robin_Sloan_sent_me
|
||||
[17] https://us13.campaign-archive.com/?u=67bd06787e84d73db24fb0aa5&&id=a03ebcd500&utm_source=Robin_Sloan_sent_me
|
||||
[18] https://www.robinsloan.com/about?utm_source=Robin_Sloan_sent_me
|
||||
[21] https://www.robinsloan.com/colophon/
|
||||
|
||||
@@ -1,380 +1,358 @@
|
||||
#[1]SitePoint
|
||||
[1]
|
||||
|
||||
IFRAME: [2]https://www.googletagmanager.com/ns.html?id=GTM-KL8PMMW
|
||||
• [3][ ]
|
||||
• [4]Blog
|
||||
•
|
||||
□ [5]Free Tech Books →
|
||||
□ [6]AI →
|
||||
□ [7]JavaScript
|
||||
□ [8]Computing
|
||||
□ [9]Design & UX
|
||||
□ [10]HTML & CSS
|
||||
□ [11]Entrepreneur
|
||||
□ [12]Web
|
||||
□ [13]PHP
|
||||
□ [14]WordPress
|
||||
□ [15]Mobile
|
||||
□ [16]Programming
|
||||
□ [17]Python →
|
||||
• [18]Forum
|
||||
• [19]Library
|
||||
• [20]Login
|
||||
• [21]Join Premium
|
||||
|
||||
(BUTTON)
|
||||
* ____________________
|
||||
* [3]Blog
|
||||
*
|
||||
+ [4]Free Tech Books →
|
||||
+ [5]AI →
|
||||
+ [6]JavaScript
|
||||
+ [7]Computing
|
||||
+ [8]Design & UX
|
||||
+ [9]HTML & CSS
|
||||
+ [10]Entrepreneur
|
||||
+ [11]Web
|
||||
+ [12]PHP
|
||||
+ [13]WordPress
|
||||
+ [14]Mobile
|
||||
+ [15]Programming
|
||||
+ [16]Python →
|
||||
* [17]Forum
|
||||
* [18]Library
|
||||
* [19]Login
|
||||
* [20]Join Premium
|
||||
[22]Join Premium
|
||||
[23][ ]
|
||||
|
||||
[21]Join Premium
|
||||
• [26]Free Tech Books
|
||||
• [27]AI
|
||||
• [28]JavaScript
|
||||
• [29]Computing
|
||||
• [30]Design & UX
|
||||
• [31]HTML & CSS
|
||||
• [32]Entrepreneur
|
||||
• [33]Web
|
||||
• [34]PHP
|
||||
• [35]WordPress
|
||||
• [36]Mobile
|
||||
• [37]Programming
|
||||
• [38]Python
|
||||
|
||||
____________________
|
||||
|
||||
(BUTTON)
|
||||
(BUTTON)
|
||||
* [22]Free Tech Books
|
||||
* [23]AI
|
||||
* [24]JavaScript
|
||||
* [25]Computing
|
||||
* [26]Design & UX
|
||||
* [27]HTML & CSS
|
||||
* [28]Entrepreneur
|
||||
* [29]Web
|
||||
* [30]PHP
|
||||
* [31]WordPress
|
||||
* [32]Mobile
|
||||
* [33]Programming
|
||||
* [34]Python
|
||||
|
||||
(BUTTON)
|
||||
(BUTTON)
|
||||
|
||||
[35]Ruby
|
||||
[41]Ruby
|
||||
|
||||
The History of Ruby
|
||||
|
||||
[36][1433174717Profile-2015-May-96x96.jpg]
|
||||
|
||||
|
||||
[37]Jesse Herrick
|
||||
[42][1433174717]
|
||||
|
||||
[43]Jesse Herrick
|
||||
July 26, 2014
|
||||
Share (BUTTON) (BUTTON) (BUTTON) (BUTTON) (BUTTON)
|
||||
Share
|
||||
|
||||
rubygrows
|
||||
|
||||
The Ruby language is 21 years old. Its strong community and adoption by
|
||||
the open source community has kept this language steady and improving.
|
||||
Ruby has changed drastically over the years. It has grown from a young
|
||||
child to the strong adult that it is today. But it didn’t get that way
|
||||
overnight. Let’s take a look at the life of the Ruby programming
|
||||
language.
|
||||
The Ruby language is 21 years old. Its strong community and adoption by the
|
||||
open source community has kept this language steady and improving. Ruby has
|
||||
changed drastically over the years. It has grown from a young child to the
|
||||
strong adult that it is today. But it didn’t get that way overnight. Let’s take
|
||||
a look at the life of the Ruby programming language.
|
||||
|
||||
Note: This article is packed with metaphors (language to human), so be
|
||||
prepared.
|
||||
|
||||
Birth (1993)
|
||||
|
||||
Ruby was born in 1993, conceieved in a discussion between Yukihiro
|
||||
Matsumoto (“Matz”) and a colleague. They were discussing the
|
||||
possibility of an object-oriented scripting-language. Matz stated in
|
||||
[38]ruby-talk:00382 that he knew Perl, but did not like it very much;
|
||||
that it had the smell of a “toy” language. He also discussed that he
|
||||
knew Python, but didn’t like it because it wasn’t a true
|
||||
object-oriented programming language.
|
||||
Ruby was born in 1993, conceieved in a discussion between Yukihiro Matsumoto
|
||||
(“Matz”) and a colleague. They were discussing the possibility of an
|
||||
object-oriented scripting-language. Matz stated in [49]ruby-talk:00382 that he
|
||||
knew Perl, but did not like it very much; that it had the smell of a “toy”
|
||||
language. He also discussed that he knew Python, but didn’t like it because it
|
||||
wasn’t a true object-oriented programming language.
|
||||
|
||||
Matz wanted a language perfect for his needs:
|
||||
* Syntactically Simple
|
||||
* Truly Object-Oriented
|
||||
* Having Iterators and Closures
|
||||
* Exception Handling
|
||||
* Garbage Collection
|
||||
* Portable
|
||||
|
||||
• Syntactically Simple
|
||||
• Truly Object-Oriented
|
||||
• Having Iterators and Closures
|
||||
• Exception Handling
|
||||
• Garbage Collection
|
||||
• Portable
|
||||
|
||||
Having looked around and not found a language suited for him, Yukihiro
|
||||
Matsumoto decided to create his own. After spending several months
|
||||
writing an interpreter, Matz finally published the first public version
|
||||
of Ruby (0.95) to various Japanese domestic newsgroups in December,
|
||||
1995. You can still download the infant version of Ruby [39]here at
|
||||
your own risk.
|
||||
Matsumoto decided to create his own. After spending several months writing an
|
||||
interpreter, Matz finally published the first public version of Ruby (0.95) to
|
||||
various Japanese domestic newsgroups in December, 1995. You can still download
|
||||
the infant version of Ruby [50]here at your own risk.
|
||||
|
||||
Toddler Years
|
||||
|
||||
Ruby became a toddler (n.: a young child who is just beginning to walk)
|
||||
when Ruby 1.0 was released in December, 1996. Ruby 1.1 shortly followed
|
||||
in August of 1997, and the first stable version of Ruby (1.2) was
|
||||
released in December of 1998.
|
||||
Ruby became a toddler (n.: a young child who is just beginning to walk) when
|
||||
Ruby 1.0 was released in December, 1996. Ruby 1.1 shortly followed in August of
|
||||
1997, and the first stable version of Ruby (1.2) was released in December of
|
||||
1998.
|
||||
|
||||
At this point in time, Ruby was localized to Japan only, but it would
|
||||
soon spread to other parts of the world…
|
||||
At this point in time, Ruby was localized to Japan only, but it would soon
|
||||
spread to other parts of the world…
|
||||
|
||||
Primary School Years
|
||||
|
||||
In 1998, Matz created a simple English homepage for Ruby. However, Ruby
|
||||
was still very localized to Japan. In trying to further this expansion,
|
||||
the first English language Ruby mailing list, [40]Ruby-Talk, was
|
||||
created. Ruby was beginning to spread beyond Japan.
|
||||
In 1998, Matz created a simple English homepage for Ruby. However, Ruby was
|
||||
still very localized to Japan. In trying to further this expansion, the first
|
||||
English language Ruby mailing list, [51]Ruby-Talk, was created. Ruby was
|
||||
beginning to spread beyond Japan.
|
||||
|
||||
Ruby-Talk is still very active today, and you can subscribe to it
|
||||
[41]here.
|
||||
Ruby-Talk is still very active today, and you can subscribe to it [52]here.
|
||||
|
||||
In October of 1999, Yukihiro Matsumoto and Keiju Ishitsuka wrote the
|
||||
first book on the Ruby programming language: The Object-oriented
|
||||
Scripting Language Ruby. Ruby was beginning to get very popular in
|
||||
Japan, and spreading rapidly to English-speaking countries.
|
||||
In October of 1999, Yukihiro Matsumoto and Keiju Ishitsuka wrote the first book
|
||||
on the Ruby programming language: The Object-oriented Scripting Language Ruby.
|
||||
Ruby was beginning to get very popular in Japan, and spreading rapidly to
|
||||
English-speaking countries.
|
||||
|
||||
In 2001, the first English book on Ruby, Programming Ruby (“The
|
||||
Pickaxe”), was published in 2001. With this new information on Ruby,
|
||||
many more people were able to learn the language.
|
||||
In 2001, the first English book on Ruby, Programming Ruby (“The Pickaxe”), was
|
||||
published in 2001. With this new information on Ruby, many more people were
|
||||
able to learn the language.
|
||||
|
||||
Ruby 1.8 was released in 2003. This release made large amounts of
|
||||
changes to the agile 10-year-old language. Including:
|
||||
* Duck Typing (looks like a duck, swims like a duck, quacks like a
|
||||
duck: it’s a duck)
|
||||
* Fully Qualified Names (Foo::Bar)
|
||||
* Native YAML Support
|
||||
* WEBrick
|
||||
* StringIO
|
||||
* open-uri
|
||||
* PP (Pretty Printer for Hash#inspect)
|
||||
* ruby -run (UNIX commands for all! ruby -run -e mkdir foo)
|
||||
* And many other minor features
|
||||
Ruby 1.8 was released in 2003. This release made large amounts of changes to
|
||||
the agile 10-year-old language. Including:
|
||||
|
||||
In 2004, RubyGems was released to the public. Good things started
|
||||
happening next…
|
||||
• Duck Typing (looks like a duck, swims like a duck, quacks like a duck: it’s
|
||||
a duck)
|
||||
• Fully Qualified Names (Foo::Bar)
|
||||
• Native YAML Support
|
||||
• WEBrick
|
||||
• StringIO
|
||||
• open-uri
|
||||
• PP (Pretty Printer for Hash#inspect)
|
||||
• ruby -run (UNIX commands for all! ruby -run -e mkdir foo)
|
||||
• And many other minor features
|
||||
|
||||
In 2004, RubyGems was released to the public. Good things started happening
|
||||
next…
|
||||
|
||||
The Rebellious Teenager
|
||||
|
||||
In 2005, Ruby use took off. The reason: Ruby on Rails. This new
|
||||
framework changed the history of rapid web development. Ruby had been
|
||||
used in the past to write CGI scripts, but Ruby on Rails took this a
|
||||
step further. Rails has a Model-View-Controller structure that focuses
|
||||
on “convention over configuration”, which is great for developing web
|
||||
applications.
|
||||
In 2005, Ruby use took off. The reason: Ruby on Rails. This new framework
|
||||
changed the history of rapid web development. Ruby had been used in the past to
|
||||
write CGI scripts, but Ruby on Rails took this a step further. Rails has a
|
||||
Model-View-Controller structure that focuses on “convention over
|
||||
configuration”, which is great for developing web applications.
|
||||
|
||||
People loved it. So much so that, the Ruby community was almost taken
|
||||
over by the Rails framework. Ruby in turn became very popular.
|
||||
People loved it. So much so that, the Ruby community was almost taken over by
|
||||
the Rails framework. Ruby in turn became very popular.
|
||||
|
||||
In March of 2007, Ruby 1.8.6 was released, with 1.8.7 following in May
|
||||
of 2008. At this point, Ruby was at its peak. Mac OS X even began
|
||||
shipping with it in 2007. At this point, Ruby was 15 years old.
|
||||
In March of 2007, Ruby 1.8.6 was released, with 1.8.7 following in May of 2008.
|
||||
At this point, Ruby was at its peak. Mac OS X even began shipping with it in
|
||||
2007. At this point, Ruby was 15 years old.
|
||||
|
||||
Ruby 1.9 (development version) was released in December, 2007, then
|
||||
stabilized 4 years later (2011) as Ruby 1.9.3. Ruby 1.9.3 was the
|
||||
production version of 1.9.2. These versions brought new changes to the
|
||||
language, such as:
|
||||
* Significant speed improvements
|
||||
* New methods
|
||||
* New hash syntax ({ foo: 'bar' })
|
||||
* RubyGems included
|
||||
* New Socket API (IPv6 support)
|
||||
* Several random number generators
|
||||
* Regular Expression improvements
|
||||
* File loading performance improvements
|
||||
* Test::Unit Improvements
|
||||
* New encoding support
|
||||
* More string formatting tweaks
|
||||
* And so much more
|
||||
Ruby 1.9 (development version) was released in December, 2007, then stabilized
|
||||
4 years later (2011) as Ruby 1.9.3. Ruby 1.9.3 was the production version of
|
||||
1.9.2. These versions brought new changes to the language, such as:
|
||||
|
||||
Ruby was making the transition from a rebellious teenager to a strong
|
||||
adult as it turned 18 with Ruby 1.9.3.
|
||||
• Significant speed improvements
|
||||
• New methods
|
||||
• New hash syntax ({ foo: 'bar' })
|
||||
• RubyGems included
|
||||
• New Socket API (IPv6 support)
|
||||
• Several random number generators
|
||||
• Regular Expression improvements
|
||||
• File loading performance improvements
|
||||
• Test::Unit Improvements
|
||||
• New encoding support
|
||||
• More string formatting tweaks
|
||||
• And so much more
|
||||
|
||||
Ruby was making the transition from a rebellious teenager to a strong adult as
|
||||
it turned 18 with Ruby 1.9.3.
|
||||
|
||||
Strong Adult
|
||||
|
||||
Ruby 2.0.0 was released in February 2013 and brought many stabilizing
|
||||
changes to the language. Among them are:
|
||||
* More speed improvements
|
||||
* Refinements (safe monkey patching)
|
||||
* Keyword arguments
|
||||
* UTF-8 by default
|
||||
* New regular expressions engine
|
||||
* Optimized garbage collection
|
||||
* The addition of built-in syntax documentation (ri ruby:syntax)
|
||||
Ruby 2.0.0 was released in February 2013 and brought many stabilizing changes
|
||||
to the language. Among them are:
|
||||
|
||||
Unlike 1.9.x, which broke numerous gems with its changes, 2.0.0 was
|
||||
almost completely backwards compatible with 1.9.3. In addition, Heroku,
|
||||
one of the leading Ruby/Rails hosts upgraded to 2.0.0 quickly, causing
|
||||
earlier than usual adoption by new and existing projects. The Ruby
|
||||
language was (and is) in its golden age.
|
||||
• More speed improvements
|
||||
• Refinements (safe monkey patching)
|
||||
• Keyword arguments
|
||||
• UTF-8 by default
|
||||
• New regular expressions engine
|
||||
• Optimized garbage collection
|
||||
• The addition of built-in syntax documentation (ri ruby:syntax)
|
||||
|
||||
Ruby 2.1.0 was released on Christmas day of 2013. It brought several
|
||||
minor changes to the language. But the biggest news of 2.1.0 was
|
||||
[42]semantic versioning, a way to properly version a project without
|
||||
breaking dependencies by accident.
|
||||
Unlike 1.9.x, which broke numerous gems with its changes, 2.0.0 was almost
|
||||
completely backwards compatible with 1.9.3. In addition, Heroku, one of the
|
||||
leading Ruby/Rails hosts upgraded to 2.0.0 quickly, causing earlier than usual
|
||||
adoption by new and existing projects. The Ruby language was (and is) in its
|
||||
golden age.
|
||||
|
||||
Ruby 2.1.1 was released on Ruby’s 21st birthday (February 24, 2014).
|
||||
Ruby is now legally allowed to drink in the US (not that we’d want it
|
||||
to). This version was mainly speed improvements and bugfixes. Shortly
|
||||
after 2.1.1, Ruby 2.1.2 was released in May of 2014. 2.1.2 consists of
|
||||
more bugfixes and is the current stable version of Ruby.
|
||||
Ruby 2.1.0 was released on Christmas day of 2013. It brought several minor
|
||||
changes to the language. But the biggest news of 2.1.0 was [53]semantic
|
||||
versioning, a way to properly version a project without breaking dependencies
|
||||
by accident.
|
||||
|
||||
Ruby 2.1.1 was released on Ruby’s 21st birthday (February 24, 2014). Ruby is
|
||||
now legally allowed to drink in the US (not that we’d want it to). This version
|
||||
was mainly speed improvements and bugfixes. Shortly after 2.1.1, Ruby 2.1.2 was
|
||||
released in May of 2014. 2.1.2 consists of more bugfixes and is the current
|
||||
stable version of Ruby.
|
||||
|
||||
The Future
|
||||
|
||||
Ruby is a great language. Matz wanted a programming language that
|
||||
suited his needs, so he built one. This is an inspiring story of
|
||||
software development: if you can’t find something that you like,
|
||||
program it yourself. From 0.95 to 2.1.2, Ruby has struck the awe of
|
||||
those who wished to program the way they wanted, not the way the
|
||||
machine wanted.
|
||||
Ruby is a great language. Matz wanted a programming language that suited his
|
||||
needs, so he built one. This is an inspiring story of software development: if
|
||||
you can’t find something that you like, program it yourself. From 0.95 to
|
||||
2.1.2, Ruby has struck the awe of those who wished to program the way they
|
||||
wanted, not the way the machine wanted.
|
||||
|
||||
We can’t know the future of the Ruby language, but we can predict it
|
||||
based on the past. I believe that the Ruby language, and its fantastic
|
||||
community will continue furthering the language above and beyond what
|
||||
others think is possible, and projects built using it will do the same.
|
||||
We can’t know the future of the Ruby language, but we can predict it based on
|
||||
the past. I believe that the Ruby language, and its fantastic community will
|
||||
continue furthering the language above and beyond what others think is
|
||||
possible, and projects built using it will do the same.
|
||||
|
||||
Share This Article
|
||||
|
||||
(BUTTON) (BUTTON) (BUTTON) (BUTTON) (BUTTON)
|
||||
|
||||
[59]Jesse Herrick
|
||||
[60]Jesse Herrick
|
||||
|
||||
[43]Jesse Herrick
|
||||
Jesse Herrick is an avid Ruby developer who specializes in web development. He
|
||||
is a back-end developer at [61]Littlelines and loves programming. You can read
|
||||
his personal blog at: [62]https://jesse.codes.
|
||||
|
||||
[44]Jesse Herrick
|
||||
[63][64]
|
||||
|
||||
Jesse Herrick is an avid Ruby developer who specializes in web
|
||||
development. He is a back-end developer at [45]Littlelines and loves
|
||||
programming. You can read his personal blog at:
|
||||
[46]https://jesse.codes.
|
||||
|
||||
GlennGhistoryruby
|
||||
|
||||
Up Next
|
||||
|
||||
[47]How to Build an Interactive History Map with WRLD
|
||||
[48]How to Build an Interactive History Map with WRLD[49]Adrian Try
|
||||
|
||||
[50]Digital Fonts: A Condensed History
|
||||
[51]Digital Fonts: A Condensed History[52]Alex Bigman
|
||||
|
||||
[53]A History of CSS Image Replacement
|
||||
[54]A History of CSS Image Replacement[55]Baljeet Rathi
|
||||
|
||||
[56]Making Alternative ’80s Film History Come to Life with Photoshop
|
||||
[57]Making Alternative ’80s Film History Come to Life with
|
||||
Photoshop[58]Gabrielle Gosha
|
||||
|
||||
[59]10 Years of Mobile Industry History in 10 Minutes
|
||||
[60]10 Years of Mobile Industry History in 10 Minutes[61]Dirk Reagle
|
||||
|
||||
[62]How to Modify the Browser History in Complex HTML5 and JavaScript
|
||||
[65]How to Build an Interactive History Map with WRLD
|
||||
[66]How to Build an Interactive History Map with WRLD[67]Adrian Try
|
||||
[68]Digital Fonts: A Condensed History
|
||||
[69]Digital Fonts: A Condensed History[70]Alex Bigman
|
||||
[71]A History of CSS Image Replacement
|
||||
[72]A History of CSS Image Replacement[73]Baljeet Rathi
|
||||
[74]Making Alternative ’80s Film History Come to Life with Photoshop
|
||||
[75]Making Alternative ’80s Film History Come to Life with Photoshop[76]
|
||||
Gabrielle Gosha
|
||||
[77]10 Years of Mobile Industry History in 10 Minutes
|
||||
[78]10 Years of Mobile Industry History in 10 Minutes[79]Dirk Reagle
|
||||
[80]How to Modify the Browser History in Complex HTML5 and JavaScript
|
||||
Applications
|
||||
[63]How to Modify the Browser History in Complex HTML5 and JavaScript
|
||||
Applications[64]Craig Buckler
|
||||
[81]How to Modify the Browser History in Complex HTML5 and JavaScript
|
||||
Applications[82]Craig Buckler
|
||||
|
||||
* Stuff we do
|
||||
* [65]Premium
|
||||
* [66]Newsletters
|
||||
* [67]Forums
|
||||
• Stuff we do
|
||||
|
||||
* About
|
||||
* [68]Our story
|
||||
* [69]Terms of use
|
||||
* [70]Privacy policy
|
||||
* [71]Corporate memberships
|
||||
• [83]Premium
|
||||
• [84]Newsletters
|
||||
• [85]Forums
|
||||
|
||||
* Contact
|
||||
* [72]Contact us
|
||||
* [73]FAQ
|
||||
* [74]Publish your book with us
|
||||
* [75]Write an article for us
|
||||
* [76]Advertise
|
||||
• About
|
||||
|
||||
* Connect
|
||||
*
|
||||
• [86]Our story
|
||||
• [87]Terms of use
|
||||
• [88]Privacy policy
|
||||
• [89]Corporate memberships
|
||||
|
||||
• Contact
|
||||
|
||||
• [90]Contact us
|
||||
• [91]FAQ
|
||||
• [92]Publish your book with us
|
||||
• [93]Write an article for us
|
||||
• [94]Advertise
|
||||
|
||||
• Connect
|
||||
|
||||
• [95][96][97]
|
||||
|
||||
© 2000 – 2024 SitePoint Pty. Ltd.
|
||||
|
||||
This site is protected by reCAPTCHA and the Google[77] Privacy Policy
|
||||
and[78] Terms of Service apply.
|
||||
This site is protected by reCAPTCHA and the Google[98] Privacy Policy and[99]
|
||||
Terms of Service apply.
|
||||
|
||||
<img height="1" width="1" style="display:none"
|
||||
src="https://www.facebook.com/tr?id=721455246308784&ev=PageView&noscrip
|
||||
t=1"} />
|
||||
<img height="1" width="1" style="display:none" src="https://www.facebook.com/
|
||||
tr?id=721455246308784&ev=PageView&noscript=1"} />
|
||||
|
||||
References
|
||||
References:
|
||||
|
||||
Visible links:
|
||||
1. https://www.sitepoint.com/sitepoint.rss
|
||||
2. https://www.googletagmanager.com/ns.html?id=GTM-KL8PMMW
|
||||
3. https://www.sitepoint.com/blog/
|
||||
4. https://www.sitepoint.com/premium/library/free/?ref_source=blog_nav
|
||||
5. https://www.sitepoint.com/ai/
|
||||
6. https://www.sitepoint.com/javascript/
|
||||
7. https://www.sitepoint.com/computing/
|
||||
8. https://www.sitepoint.com/design-ux/
|
||||
9. https://www.sitepoint.com/html-css/
|
||||
10. https://www.sitepoint.com/entrepreneur/
|
||||
11. https://www.sitepoint.com/web/
|
||||
12. https://www.sitepoint.com/php/
|
||||
13. https://www.sitepoint.com/wordpress/
|
||||
14. https://www.sitepoint.com/mobile/
|
||||
15. https://www.sitepoint.com/programming/
|
||||
16. https://www.sitepoint.com/python/
|
||||
17. https://www.sitepoint.com/community/
|
||||
18. https://www.sitepoint.com/premium/library/
|
||||
19. https://www.sitepoint.com/premium/sign-in/
|
||||
20. https://www.sitepoint.com/premium/pricing/?ref_source=sitepoint&ref_medium=topnav
|
||||
21. https://www.sitepoint.com/premium/pricing/?ref_source=sitepoint&ref_medium=topnav
|
||||
22. https://www.sitepoint.com/premium/library/free/?ref_source=blog_nav
|
||||
23. https://www.sitepoint.com/ai/
|
||||
24. https://www.sitepoint.com/javascript/
|
||||
25. https://www.sitepoint.com/computing/
|
||||
26. https://www.sitepoint.com/design-ux/
|
||||
27. https://www.sitepoint.com/html-css/
|
||||
28. https://www.sitepoint.com/entrepreneur/
|
||||
29. https://www.sitepoint.com/web/
|
||||
30. https://www.sitepoint.com/php/
|
||||
31. https://www.sitepoint.com/wordpress/
|
||||
32. https://www.sitepoint.com/mobile/
|
||||
33. https://www.sitepoint.com/programming/
|
||||
34. https://www.sitepoint.com/python/
|
||||
35. https://www.sitepoint.com/ruby/
|
||||
36. https://www.sitepoint.com/author/jherrick/
|
||||
37. https://www.sitepoint.com/author/jherrick/
|
||||
38. http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/382
|
||||
39. https://ftp.ruby-lang.org/pub/ruby/1.0/
|
||||
40. http://blade.nagaokaut.ac.jp/ruby/ruby-talk/index.shtml
|
||||
41. https://www.ruby-lang.org/en/community/mailing-lists/
|
||||
42. http://semver.org/
|
||||
43. https://www.sitepoint.com/author/jherrick/
|
||||
44. https://www.sitepoint.com/author/jherrick/
|
||||
45. http://www.littlelines.com/
|
||||
46. https://jesse.codes/
|
||||
47. https://www.sitepoint.com/how-to-build-an-interactive-history-map-with-wrld/
|
||||
48. https://www.sitepoint.com/how-to-build-an-interactive-history-map-with-wrld/
|
||||
49. https://www.sitepoint.com/author/atry/
|
||||
50. https://www.sitepoint.com/digital-fonts-condensed-history/
|
||||
51. https://www.sitepoint.com/digital-fonts-condensed-history/
|
||||
52. https://www.sitepoint.com/author/alex-bigman/
|
||||
53. https://www.sitepoint.com/css-image-replacement-text-indent-negative-margins-and-more/
|
||||
54. https://www.sitepoint.com/css-image-replacement-text-indent-negative-margins-and-more/
|
||||
55. https://www.sitepoint.com/author/brathi/
|
||||
56. https://www.sitepoint.com/making-alternative-80s-film-history-come-life-photoshop/
|
||||
57. https://www.sitepoint.com/making-alternative-80s-film-history-come-life-photoshop/
|
||||
58. https://www.sitepoint.com/author/ggosha/
|
||||
59. https://www.sitepoint.com/the-advancements-in-mobile-design-and-how-it-has-developed-into-a-strong-industry/
|
||||
60. https://www.sitepoint.com/the-advancements-in-mobile-design-and-how-it-has-developed-into-a-strong-industry/
|
||||
61. https://www.sitepoint.com/author/dreagle/
|
||||
62. https://www.sitepoint.com/javascript-history-pushstate/
|
||||
63. https://www.sitepoint.com/javascript-history-pushstate/
|
||||
64. https://www.sitepoint.com/author/craig-buckler/
|
||||
65. https://www.sitepoint.com/premium/library/
|
||||
66. https://www.sitepoint.com/newsletters/
|
||||
67. https://www.sitepoint.com/community/
|
||||
68. https://www.sitepoint.com/about-us/
|
||||
69. https://www.sitepoint.com/legals/
|
||||
70. https://www.sitepoint.com/privacy-policy/
|
||||
71. https://www.sitepoint.com/premium-for-teams/
|
||||
72. https://www.sitepoint.com/contact-us/
|
||||
73. https://support.sitepoint.com/hc/en-us
|
||||
74. https://sitepoint.typeform.com/to/HtAXVN
|
||||
75. https://www.sitepoint.com/write-for-us/
|
||||
76. https://www.sitepoint.com/partnerships/
|
||||
77. https://policies.google.com/privacy
|
||||
78. https://policies.google.com/terms
|
||||
|
||||
Hidden links:
|
||||
80. https://www.sitepoint.com/
|
||||
81. https://github.com/JesseHerrick
|
||||
82. https://twitter.com/JesseHerrick
|
||||
83. https://www.facebook.com/sitepoint
|
||||
84. https://twitter.com/sitepointdotcom
|
||||
85. https://www.sitepoint.com/sitepoint.rss
|
||||
[1] https://www.sitepoint.com/
|
||||
[4] https://www.sitepoint.com/blog/
|
||||
[5] https://www.sitepoint.com/premium/library/free/?ref_source=blog_nav
|
||||
[6] https://www.sitepoint.com/ai/
|
||||
[7] https://www.sitepoint.com/javascript/
|
||||
[8] https://www.sitepoint.com/computing/
|
||||
[9] https://www.sitepoint.com/design-ux/
|
||||
[10] https://www.sitepoint.com/html-css/
|
||||
[11] https://www.sitepoint.com/entrepreneur/
|
||||
[12] https://www.sitepoint.com/web/
|
||||
[13] https://www.sitepoint.com/php/
|
||||
[14] https://www.sitepoint.com/wordpress/
|
||||
[15] https://www.sitepoint.com/mobile/
|
||||
[16] https://www.sitepoint.com/programming/
|
||||
[17] https://www.sitepoint.com/python/
|
||||
[18] https://www.sitepoint.com/community/
|
||||
[19] https://www.sitepoint.com/premium/library/
|
||||
[20] https://www.sitepoint.com/premium/sign-in/
|
||||
[21] https://www.sitepoint.com/premium/pricing/?ref_source=sitepoint&ref_medium=topnav
|
||||
[22] https://www.sitepoint.com/premium/pricing/?ref_source=sitepoint&ref_medium=topnav
|
||||
[26] https://www.sitepoint.com/premium/library/free/?ref_source=blog_nav
|
||||
[27] https://www.sitepoint.com/ai/
|
||||
[28] https://www.sitepoint.com/javascript/
|
||||
[29] https://www.sitepoint.com/computing/
|
||||
[30] https://www.sitepoint.com/design-ux/
|
||||
[31] https://www.sitepoint.com/html-css/
|
||||
[32] https://www.sitepoint.com/entrepreneur/
|
||||
[33] https://www.sitepoint.com/web/
|
||||
[34] https://www.sitepoint.com/php/
|
||||
[35] https://www.sitepoint.com/wordpress/
|
||||
[36] https://www.sitepoint.com/mobile/
|
||||
[37] https://www.sitepoint.com/programming/
|
||||
[38] https://www.sitepoint.com/python/
|
||||
[41] https://www.sitepoint.com/ruby/
|
||||
[42] https://www.sitepoint.com/author/jherrick/
|
||||
[43] https://www.sitepoint.com/author/jherrick/
|
||||
[49] http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/382
|
||||
[50] https://ftp.ruby-lang.org/pub/ruby/1.0/
|
||||
[51] http://blade.nagaokaut.ac.jp/ruby/ruby-talk/index.shtml
|
||||
[52] https://www.ruby-lang.org/en/community/mailing-lists/
|
||||
[53] http://semver.org/
|
||||
[59] https://www.sitepoint.com/author/jherrick/
|
||||
[60] https://www.sitepoint.com/author/jherrick/
|
||||
[61] http://www.littlelines.com/
|
||||
[62] https://jesse.codes/
|
||||
[63] https://github.com/JesseHerrick
|
||||
[64] https://twitter.com/JesseHerrick
|
||||
[65] https://www.sitepoint.com/how-to-build-an-interactive-history-map-with-wrld/
|
||||
[66] https://www.sitepoint.com/how-to-build-an-interactive-history-map-with-wrld/
|
||||
[67] https://www.sitepoint.com/author/atry/
|
||||
[68] https://www.sitepoint.com/digital-fonts-condensed-history/
|
||||
[69] https://www.sitepoint.com/digital-fonts-condensed-history/
|
||||
[70] https://www.sitepoint.com/author/alex-bigman/
|
||||
[71] https://www.sitepoint.com/css-image-replacement-text-indent-negative-margins-and-more/
|
||||
[72] https://www.sitepoint.com/css-image-replacement-text-indent-negative-margins-and-more/
|
||||
[73] https://www.sitepoint.com/author/brathi/
|
||||
[74] https://www.sitepoint.com/making-alternative-80s-film-history-come-life-photoshop/
|
||||
[75] https://www.sitepoint.com/making-alternative-80s-film-history-come-life-photoshop/
|
||||
[76] https://www.sitepoint.com/author/ggosha/
|
||||
[77] https://www.sitepoint.com/the-advancements-in-mobile-design-and-how-it-has-developed-into-a-strong-industry/
|
||||
[78] https://www.sitepoint.com/the-advancements-in-mobile-design-and-how-it-has-developed-into-a-strong-industry/
|
||||
[79] https://www.sitepoint.com/author/dreagle/
|
||||
[80] https://www.sitepoint.com/javascript-history-pushstate/
|
||||
[81] https://www.sitepoint.com/javascript-history-pushstate/
|
||||
[82] https://www.sitepoint.com/author/craig-buckler/
|
||||
[83] https://www.sitepoint.com/premium/library/
|
||||
[84] https://www.sitepoint.com/newsletters/
|
||||
[85] https://www.sitepoint.com/community/
|
||||
[86] https://www.sitepoint.com/about-us/
|
||||
[87] https://www.sitepoint.com/legals/
|
||||
[88] https://www.sitepoint.com/privacy-policy/
|
||||
[89] https://www.sitepoint.com/premium-for-teams/
|
||||
[90] https://www.sitepoint.com/contact-us/
|
||||
[91] https://support.sitepoint.com/hc/en-us
|
||||
[92] https://sitepoint.typeform.com/to/HtAXVN
|
||||
[93] https://www.sitepoint.com/write-for-us/
|
||||
[94] https://www.sitepoint.com/partnerships/
|
||||
[95] https://www.facebook.com/sitepoint
|
||||
[96] https://twitter.com/sitepointdotcom
|
||||
[97] https://www.sitepoint.com/sitepoint.rss
|
||||
[98] https://policies.google.com/privacy
|
||||
[99] https://policies.google.com/terms
|
||||
|
||||
@@ -1,291 +1,287 @@
|
||||
#[1]The Atlantic [2]Best of The Atlantic
|
||||
|
||||
[3]Skip to content
|
||||
[1]Skip to content
|
||||
|
||||
Site Navigation
|
||||
|
||||
*
|
||||
* (BUTTON)
|
||||
(BUTTON)
|
||||
[4]Popular[5]Latest[6]Newsletters
|
||||
• [2]
|
||||
•
|
||||
[5]Popular[6]Latest[7]Newsletters
|
||||
|
||||
Sections
|
||||
+ [7]Politics
|
||||
+ [8]Ideas
|
||||
+ [9]Fiction
|
||||
+ [10]Technology
|
||||
+ [11]Science
|
||||
+ [12]Photo
|
||||
+ [13]Business
|
||||
+ [14]Culture
|
||||
+ [15]Planet
|
||||
+ [16]Global
|
||||
+ [17]Books
|
||||
+ [18]Podcasts
|
||||
+ [19]Health
|
||||
+ [20]Education
|
||||
+ [21]Projects
|
||||
+ [22]Features
|
||||
+ [23]Family
|
||||
+ [24]Events
|
||||
+ [25]Washington Week
|
||||
+ [26]Progress
|
||||
+ [27]Newsletters
|
||||
+ [28]Explore The Atlantic Archive
|
||||
+ [29]Play The Atlantic crossword
|
||||
|
||||
□ [8]Politics
|
||||
□ [9]Ideas
|
||||
□ [10]Fiction
|
||||
□ [11]Technology
|
||||
□ [12]Science
|
||||
□ [13]Photo
|
||||
□ [14]Business
|
||||
□ [15]Culture
|
||||
□ [16]Planet
|
||||
□ [17]Global
|
||||
□ [18]Books
|
||||
□ [19]Podcasts
|
||||
□ [20]Health
|
||||
□ [21]Education
|
||||
□ [22]Projects
|
||||
□ [23]Features
|
||||
□ [24]Family
|
||||
□ [25]Events
|
||||
□ [26]Washington Week
|
||||
□ [27]Progress
|
||||
□ [28]Newsletters
|
||||
□ [29][nav-arch]Explore The Atlantic Archive
|
||||
□ [30][crosswor]Play The Atlantic crossword
|
||||
|
||||
The Print Edition
|
||||
[30]Latest Issue[31]Past Issues
|
||||
______________________________________________________________
|
||||
|
||||
[32]Give a Gift
|
||||
* (BUTTON)
|
||||
[31][current-issue]
|
||||
[32]Latest Issue[33]Past Issues
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
[34]Give a Gift
|
||||
•
|
||||
Search The Atlantic
|
||||
(BUTTON) ____________________
|
||||
[37][ ]
|
||||
Quick Links
|
||||
+ [33]Dear Therapist
|
||||
□ [38]Dear Therapist
|
||||
Dear Therapist
|
||||
+ [34]Crossword Puzzle
|
||||
□ [39]Crossword Puzzle
|
||||
Crossword Puzzle
|
||||
+ [35]Magazine Archive
|
||||
□ [40]Magazine Archive
|
||||
Magazine Archive
|
||||
+ [36]Your Subscription
|
||||
□ [41]Your Subscription
|
||||
Your Subscription
|
||||
(BUTTON)
|
||||
* [37]Popular
|
||||
* [38]Latest
|
||||
* [39]Newsletters
|
||||
• [43]Popular
|
||||
• [44]Latest
|
||||
• [45]Newsletters
|
||||
|
||||
* [40]Sign In
|
||||
* [41]Subscribe
|
||||
[46][47]
|
||||
|
||||
[42]More From Planet
|
||||
• [48]Sign In
|
||||
• [49]Subscribe
|
||||
|
||||
[50]More From Planet
|
||||
|
||||
More From Planet
|
||||
|
||||
[43]Explore This Series
|
||||
* A person holds an umbrella in the wet and snowy city
|
||||
The Threshold at Which Snow Starts Irreversibly Disappearing[44]Zoë
|
||||
Schlanger
|
||||
* Color photo of an arctic vole resting on small tundra plants
|
||||
A Major Climate Force Has Been Ignored for Decades[45]Bathsheba Demuth
|
||||
* Photos of flooding, as well as of family Polaroids and heirlooms,
|
||||
arranged in a 3 x 4 grid and washed blue, against a blue background
|
||||
Pack Your Memories Into Your Disaster Bag[46]Ayurella Horn-Muller
|
||||
* A man works on an electric car
|
||||
Electric Cars Are Already Upending America[47]Saahil Desai
|
||||
[51]Explore This Series
|
||||
|
||||
[48]Health
|
||||
• [52]A person holds an umbrella in the wet and snowy city
|
||||
|
||||
The Threshold at Which Snow Starts Irreversibly Disappearing
|
||||
|
||||
[53]Zoë Schlanger
|
||||
• [54]Color photo of an arctic vole resting on small tundra plants
|
||||
|
||||
A Major Climate Force Has Been Ignored for Decades
|
||||
|
||||
[55]Bathsheba Demuth
|
||||
• [56]Photos of flooding, as well as of family Polaroids and heirlooms,
|
||||
arranged in a 3 x 4 grid and washed blue, against a blue background
|
||||
|
||||
Pack Your Memories Into Your Disaster Bag
|
||||
|
||||
[57]Ayurella Horn-Muller
|
||||
• [58]A man works on an electric car
|
||||
|
||||
Electric Cars Are Already Upending America
|
||||
|
||||
[59]Saahil Desai
|
||||
|
||||
[60]Health
|
||||
|
||||
The Real Reason You Should Get an E-bike
|
||||
|
||||
It’ll cut your emissions. It’ll also make you happier.
|
||||
|
||||
|
||||
By [49]Michael Thomas
|
||||
|
||||
By [61]Michael Thomas
|
||||
A collage of 12 photographs of e-bikes against a light-pink background
|
||||
Illustration by The Atlantic. Source: Getty.
|
||||
October 20, 2023
|
||||
(BUTTON) Share
|
||||
(BUTTON) Save
|
||||
Share
|
||||
Save
|
||||
|
||||
Today’s happiness and personal-finance gurus have no shortage of advice
|
||||
for living a good life. Meditate daily. Sleep for eight hours a night.
|
||||
Don’t forget to save for retirement. They’re not wrong, but few of
|
||||
these experts will tell you one of the best ways to improve your life:
|
||||
Ditch your car.
|
||||
Today’s happiness and personal-finance gurus have no shortage of advice for
|
||||
living a good life. Meditate daily. Sleep for eight hours a night. Don’t forget
|
||||
to save for retirement. They’re not wrong, but few of these experts will tell
|
||||
you one of the best ways to improve your life: Ditch your car.
|
||||
|
||||
A year ago, my wife and I sold one of our cars and replaced it with an
|
||||
e-bike. As someone who writes about climate change, I knew that I was
|
||||
doing something good for the planet. I knew that passenger vehicles are
|
||||
responsible for much of our greenhouse-gas emissions—[50]16 percent in
|
||||
the U.S., to be exact—and that the pollution spewing from gas-powered
|
||||
cars doesn’t just heat up the planet; it could increase the risk of
|
||||
[51]premature death. I also knew that electric cars were an imperfect
|
||||
fix: Though they’re responsible for less carbon pollution than gas
|
||||
cars, even when powered by today’s dirty electric grid, their supply
|
||||
chain is carbon intensive, and many of the materials needed to produce
|
||||
their batteries are, in some cases, mined via a process that
|
||||
[52]brutally exploits workers and harms [53]ecosystems and sacred
|
||||
Indigenous lands. An e-bike’s comparatively tiny battery means less
|
||||
electricity, fewer emissions, fewer resources. They are clearly better
|
||||
for the planet than cars of any kind.
|
||||
A year ago, my wife and I sold one of our cars and replaced it with an e-bike.
|
||||
As someone who writes about climate change, I knew that I was doing something
|
||||
good for the planet. I knew that passenger vehicles are responsible for much of
|
||||
our greenhouse-gas emissions—[64]16 percent in the U.S., to be exact—and that
|
||||
the pollution spewing from gas-powered cars doesn’t just heat up the planet; it
|
||||
could increase the risk of [65]premature death. I also knew that electric cars
|
||||
were an imperfect fix: Though they’re responsible for less carbon pollution
|
||||
than gas cars, even when powered by today’s dirty electric grid, their supply
|
||||
chain is carbon intensive, and many of the materials needed to produce their
|
||||
batteries are, in some cases, mined via a process that [66]brutally exploits
|
||||
workers and harms [67]ecosystems and sacred Indigenous lands. An e-bike’s
|
||||
comparatively tiny battery means less electricity, fewer emissions, fewer
|
||||
resources. They are clearly better for the planet than cars of any kind.
|
||||
|
||||
[54]Read: America is missing out on the biggest EV boom of all
|
||||
[68]Read: America is missing out on the biggest EV boom of all
|
||||
|
||||
I knew all of this. But I also viewed getting rid of my car as a
|
||||
sacrifice—something for the militant and reckless, something that
|
||||
Greenpeace volunteers did to make the world better. I live in Colorado;
|
||||
e-biking would mean freezing in the winter and sweating in the summer.
|
||||
It was the right thing to do, I thought, but it was not going to be
|
||||
fun.
|
||||
sacrifice—something for the militant and reckless, something that Greenpeace
|
||||
volunteers did to make the world better. I live in Colorado; e-biking would
|
||||
mean freezing in the winter and sweating in the summer. It was the right thing
|
||||
to do, I thought, but it was not going to be fun.
|
||||
|
||||
I was very wrong. The first thing I noticed was the savings. Between
|
||||
car payments, insurance, maintenance, and gas, a car-centered lifestyle
|
||||
is expensive. According to AAA, after fuel, maintenance, insurance,
|
||||
taxes, and the like, owning and driving a new car in America costs[55]
|
||||
$10,728 a year. My e-bike, by comparison, cost $2,000 off the rack and
|
||||
has near-negligible recurring charges. After factoring in maintenance
|
||||
and a few bucks a month in electricity costs, I estimate that we’ll
|
||||
save about $50,000 over the next five years by ditching our car.
|
||||
I was very wrong. The first thing I noticed was the savings. Between car
|
||||
payments, insurance, maintenance, and gas, a car-centered lifestyle is
|
||||
expensive. According to AAA, after fuel, maintenance, insurance, taxes, and the
|
||||
like, owning and driving a new car in America costs[69] $10,728 a year. My
|
||||
e-bike, by comparison, cost $2,000 off the rack and has near-negligible
|
||||
recurring charges. After factoring in maintenance and a few bucks a month in
|
||||
electricity costs, I estimate that we’ll save about $50,000 over the next five
|
||||
years by ditching our car.
|
||||
|
||||
The actual experience of riding to work each day over the past year has
|
||||
been equally surprising. Before selling our car, I worried most about
|
||||
riding in the cold winter months. But I quickly learned that, as the
|
||||
saying goes, there is [56]no bad weather, only bad gear. I wear gloves,
|
||||
warm socks, a balaclava, and a ski jacket when I ride, and am almost
|
||||
never too cold.
|
||||
The actual experience of riding to work each day over the past year has been
|
||||
equally surprising. Before selling our car, I worried most about riding in the
|
||||
cold winter months. But I quickly learned that, as the saying goes, there is
|
||||
[70]no bad weather, only bad gear. I wear gloves, warm socks, a balaclava, and
|
||||
a ski jacket when I ride, and am almost never too cold.
|
||||
|
||||
Sara Hastings-Simon is a professor at the University of Calgary, where
|
||||
she studies low-carbon transportation systems. She’s also a native
|
||||
Californian who now bikes to work in a city where temperatures tend to
|
||||
hover around freezing from December through March. She told me that
|
||||
with the right equipment, she’s able to do it on all but the snowiest
|
||||
days—days when she wouldn’t want to be in a car, either. “Those days
|
||||
are honestly a mess even on the roads,” she said.
|
||||
Sara Hastings-Simon is a professor at the University of Calgary, where she
|
||||
studies low-carbon transportation systems. She’s also a native Californian who
|
||||
now bikes to work in a city where temperatures tend to hover around freezing
|
||||
from December through March. She told me that with the right equipment, she’s
|
||||
able to do it on all but the snowiest days—days when she wouldn’t want to be in
|
||||
a car, either. “Those days are honestly a mess even on the roads,” she said.
|
||||
|
||||
And though I, like [57]many would-be cyclists, was worried about
|
||||
arriving at the office sweaty in hotter months, the e-bike solved my
|
||||
problem. Even when it was 90 degrees outside, I didn’t break a sweat,
|
||||
thanks to my bike’s pedal-assist mode. If I’m honest, sometimes I
|
||||
didn’t even pedal; I just used the throttle, sat back, and enjoyed my
|
||||
ride.
|
||||
And though I, like [71]many would-be cyclists, was worried about arriving at
|
||||
the office sweaty in hotter months, the e-bike solved my problem. Even when it
|
||||
was 90 degrees outside, I didn’t break a sweat, thanks to my bike’s
|
||||
pedal-assist mode. If I’m honest, sometimes I didn’t even pedal; I just used
|
||||
the throttle, sat back, and enjoyed my ride.
|
||||
|
||||
Indeed, a big part of the appeal here is in the e part of the bike:
|
||||
“E-bikes aren’t just a traditional bike with a motor. They are an
|
||||
entirely new technology,” Hastings-Simon told me. Riding them is a
|
||||
radically different experience from riding a normal bike, at least when
|
||||
it comes to the hard parts of cycling. “It’s so much easier to take a
|
||||
bike over a bridge or in a hilly neighborhood,” Laura Fox, the former
|
||||
general manager of New York City’s bike-share program, told me. “I’ve
|
||||
had countless people come up to me and say, ‘I never thought that I
|
||||
could bike to work before, and now that I have an option where you
|
||||
don’t have to show up sweaty, it’s possible.’” (When New York
|
||||
introduced e-bikes to its fleet, ridership tripled, she told me, from
|
||||
500,000 to 1.5 million people.)
|
||||
Indeed, a big part of the appeal here is in the e part of the bike: “E-bikes
|
||||
aren’t just a traditional bike with a motor. They are an entirely new
|
||||
technology,” Hastings-Simon told me. Riding them is a radically different
|
||||
experience from riding a normal bike, at least when it comes to the hard parts
|
||||
of cycling. “It’s so much easier to take a bike over a bridge or in a hilly
|
||||
neighborhood,” Laura Fox, the former general manager of New York City’s
|
||||
bike-share program, told me. “I’ve had countless people come up to me and say,
|
||||
‘I never thought that I could bike to work before, and now that I have an
|
||||
option where you don’t have to show up sweaty, it’s possible.’” (When New York
|
||||
introduced e-bikes to its fleet, ridership tripled, she told me, from 500,000
|
||||
to 1.5 million people.)
|
||||
|
||||
[58]Read: How to get fewer people to commute in cars
|
||||
[72]Read: How to get fewer people to commute in cars
|
||||
|
||||
But biking to work wasn’t just not unpleasant—it was downright
|
||||
enjoyable. It made me feel happier and healthier; I arrived to work a
|
||||
little more buoyant for having spent the morning in fresh air rather
|
||||
than traffic. [59]Study after [60]study shows that people with longer
|
||||
car commutes are more likely to experience poor health outcomes and
|
||||
lower personal well-being—and that cyclists are the [61]happiest
|
||||
commuters. One day, shortly after selling our car, I hopped on my bike
|
||||
after a stressful day at work and rode home down a street edged with
|
||||
changing fall leaves. I felt more connected to the physical environment
|
||||
around me than I had when I’d traveled the same route surrounded by
|
||||
metal and glass. I breathed in the air, my muscles relaxed, and I
|
||||
grinned like a giddy schoolchild.
|
||||
But biking to work wasn’t just not unpleasant—it was downright enjoyable. It
|
||||
made me feel happier and healthier; I arrived to work a little more buoyant for
|
||||
having spent the morning in fresh air rather than traffic. [73]Study after [74]
|
||||
study shows that people with longer car commutes are more likely to experience
|
||||
poor health outcomes and lower personal well-being—and that cyclists are the
|
||||
[75]happiest commuters. One day, shortly after selling our car, I hopped on my
|
||||
bike after a stressful day at work and rode home down a street edged with
|
||||
changing fall leaves. I felt more connected to the physical environment around
|
||||
me than I had when I’d traveled the same route surrounded by metal and glass. I
|
||||
breathed in the air, my muscles relaxed, and I grinned like a giddy
|
||||
schoolchild.
|
||||
|
||||
“E-bikes are like a miracle drug,” David Zipper, a transportation
|
||||
expert and Visiting Fellow at Harvard Kennedy School, told me. “They
|
||||
provide so much upside, not just for the riders, but for the people who
|
||||
are living around them too.”
|
||||
“E-bikes are like a miracle drug,” David Zipper, a transportation expert and
|
||||
Visiting Fellow at Harvard Kennedy School, told me. “They provide so much
|
||||
upside, not just for the riders, but for the people who are living around them
|
||||
too.”
|
||||
|
||||
Of course, e-bikes aren’t going to replace every car on every trip. In
|
||||
a country where sprawling suburbs and strip malls, not protected bike
|
||||
lanes, are the norm, it’s unrealistic to expect e-bikes to replace cars
|
||||
in the way that the Model T replaced horses. But we don’t need everyone
|
||||
to ride an e-bike to work to make a big dent in our carbon-pollution
|
||||
problem. [62]A recent study found that if 5 percent of commuters were
|
||||
to switch to e-bikes as their mode of transportation, emissions would
|
||||
fall by 4 percent. As an individual, you don’t even need to sell your
|
||||
car to reduce your carbon footprint significantly. In 2021, half of all
|
||||
trips in the United States were less than three miles, according to
|
||||
[63]the Bureau of Transportation Statistics. Making those short trips
|
||||
on an e-bike instead of in a car would likely save people money, cut
|
||||
Of course, e-bikes aren’t going to replace every car on every trip. In a
|
||||
country where sprawling suburbs and strip malls, not protected bike lanes, are
|
||||
the norm, it’s unrealistic to expect e-bikes to replace cars in the way that
|
||||
the Model T replaced horses. But we don’t need everyone to ride an e-bike to
|
||||
work to make a big dent in our carbon-pollution problem. [76]A recent study
|
||||
found that if 5 percent of commuters were to switch to e-bikes as their mode of
|
||||
transportation, emissions would fall by 4 percent. As an individual, you don’t
|
||||
even need to sell your car to reduce your carbon footprint significantly. In
|
||||
2021, half of all trips in the United States were less than three miles,
|
||||
according to [77]the Bureau of Transportation Statistics. Making those short
|
||||
trips on an e-bike instead of in a car would likely save people money, cut
|
||||
their emissions, and improve their health and happiness.
|
||||
|
||||
E-bikes are such a no-brainer for individuals, and for the collective,
|
||||
that state and local governments [64]are now subsidizing them. In May,
|
||||
I asked Will Toor, the executive director of the Colorado Energy
|
||||
Office, to explain the state’s rationale for [65]a newly passed
|
||||
incentive that offers residents $450 to get an e-bike. He dutifully
|
||||
ticked through the environmental benefits and potential cost savings
|
||||
for low-income people. Then he surprised me: The legislation, he added,
|
||||
was also about “putting more joy into the world.”
|
||||
E-bikes are such a no-brainer for individuals, and for the collective, that
|
||||
state and local governments [78]are now subsidizing them. In May, I asked Will
|
||||
Toor, the executive director of the Colorado Energy Office, to explain the
|
||||
state’s rationale for [79]a newly passed incentive that offers residents $450
|
||||
to get an e-bike. He dutifully ticked through the environmental benefits and
|
||||
potential cost savings for low-income people. Then he surprised me: The
|
||||
legislation, he added, was also about “putting more joy into the world.”
|
||||
|
||||
This story is part of the Atlantic Planet series supported by HHMI’s
|
||||
Science and Educational Media Group.
|
||||
This story is part of the Atlantic Planet series supported by HHMI’s Science
|
||||
and Educational Media Group.
|
||||
|
||||
References
|
||||
|
||||
Visible links:
|
||||
1. https://www.theatlantic.com/feed/all/
|
||||
2. https://www.theatlantic.com/feed/best-of/
|
||||
3. https://www.theatlantic.com/health/archive/2023/10/reasons-to-get-e-bike-emissions-climate-change-benefits/675716/#main-content
|
||||
4. https://www.theatlantic.com/most-popular/
|
||||
5. https://www.theatlantic.com/latest/
|
||||
6. https://www.theatlantic.com/newsletters/
|
||||
7. https://www.theatlantic.com/politics/
|
||||
8. https://www.theatlantic.com/ideas/
|
||||
9. https://www.theatlantic.com/category/fiction/
|
||||
10. https://www.theatlantic.com/technology/
|
||||
11. https://www.theatlantic.com/science/
|
||||
12. https://www.theatlantic.com/photo/
|
||||
13. https://www.theatlantic.com/business/
|
||||
14. https://www.theatlantic.com/culture/
|
||||
15. https://www.theatlantic.com/projects/planet/
|
||||
16. https://www.theatlantic.com/international/
|
||||
17. https://www.theatlantic.com/books/
|
||||
18. https://www.theatlantic.com/podcasts/
|
||||
19. https://www.theatlantic.com/health/
|
||||
20. https://www.theatlantic.com/education/
|
||||
21. https://www.theatlantic.com/projects/
|
||||
22. https://www.theatlantic.com/category/features/
|
||||
23. https://www.theatlantic.com/family/
|
||||
24. https://www.theatlantic.com/events/
|
||||
25. https://www.theatlantic.com/category/washington-week-atlantic/
|
||||
26. https://www.theatlantic.com/progress/
|
||||
27. https://www.theatlantic.com/newsletters/
|
||||
28. https://www.theatlantic.com/archive/
|
||||
29. https://www.theatlantic.com/free-daily-crossword-puzzle/
|
||||
30. https://www.theatlantic.com/magazine/
|
||||
31. https://www.theatlantic.com/magazine/backissues/
|
||||
32. https://accounts.theatlantic.com/products/gift
|
||||
33. https://www.theatlantic.com/projects/dear-therapist/
|
||||
34. https://www.theatlantic.com/free-daily-crossword-puzzle/
|
||||
35. https://www.theatlantic.com/archive/
|
||||
36. https://accounts.theatlantic.com/accounts/subscription/
|
||||
37. https://www.theatlantic.com/most-popular/
|
||||
38. https://www.theatlantic.com/latest/
|
||||
39. https://www.theatlantic.com/newsletters/
|
||||
40. https://accounts.theatlantic.com/login/
|
||||
41. https://www.theatlantic.com/subscribe/navbar/
|
||||
42. https://www.theatlantic.com/projects/planet/
|
||||
43. https://www.theatlantic.com/projects/planet/
|
||||
44. https://www.theatlantic.com/author/zoe-schlanger/
|
||||
45. https://www.theatlantic.com/author/bathsheba-demuth/
|
||||
46. https://www.theatlantic.com/author/ayurella-horn-muller/
|
||||
47. https://www.theatlantic.com/author/saahil-desai/
|
||||
48. https://www.theatlantic.com/health/
|
||||
49. https://www.theatlantic.com/author/michael-thomas/
|
||||
50. https://energy.mit.edu/news/us-passenger-cars/
|
||||
51. https://qz.com/135509/more-americans-die-from-car-pollution-than-car-accidents
|
||||
52. https://www.npr.org/sections/goatsandsoda/2023/02/01/1152893248/red-cobalt-congo-drc-mining-siddharth-kara
|
||||
53. https://www.nrdc.org/stories/lithium-mining-leaving-chiles-indigenous-communities-high-and-dry-literally
|
||||
54. https://www.theatlantic.com/science/archive/2023/04/electric-ev-rickshaw-sales-climate-change/673629/
|
||||
55. https://newsroom.aaa.com/2022/08/annual-cost-of-new-car-ownership-crosses-10k-mark/
|
||||
56. https://www.theatlantic.com/health/archive/2021/01/how-socialize-outside-winter/617520/
|
||||
57. https://www.sciencedirect.com/science/article/abs/pii/S2214140518306054
|
||||
58. https://www.theatlantic.com/business/archive/2018/02/seattle-car-commute/553589/
|
||||
59. https://travelbehaviour.files.wordpress.com/2017/10/caw-summaryreport-onlineedition.pdf
|
||||
60. https://www.reuters.com/article/us-commuting/long-commutes-may-be-bad-for-health-study-idUKBRE8470U520120508
|
||||
61. https://www.sciencedirect.com/science/article/abs/pii/S2214140518305255
|
||||
62. https://peopleforbikes.cdn.prismic.io/peopleforbikes/e3dad6f7-d81b-4e59-9208-b012406ffa8e_E-bike-Potential-Paper-05_15_19-Final.pdf
|
||||
63. https://www.energy.gov/eere/vehicles/articles/fotw-1230-march-21-2022-more-half-all-daily-trips-were-less-three-miles-2021#:~:text=A research study for the,were greater than 50 miles.
|
||||
64. https://electrek.co/2023/02/19/free-electric-bikes-rebates-us-cities-and-states/
|
||||
65. https://www.cpr.org/2023/08/10/colorado-ebike-rebates-how-to-qualify/
|
||||
References:
|
||||
|
||||
Hidden links:
|
||||
67. https://www.theatlantic.com/
|
||||
68. https://www.theatlantic.com/magazine/
|
||||
69. https://www.theatlantic.com/
|
||||
70. https://www.theatlantic.com/
|
||||
71. https://www.theatlantic.com/science/archive/2024/01/winter-snow-loss-climate-change/677078/
|
||||
72. https://www.theatlantic.com/science/archive/2024/01/alaska-arctic-voles-carbon-source-climate-change/677014/
|
||||
73. https://www.theatlantic.com/health/archive/2023/12/disaster-kit-loss-memories-mental-health/676961/
|
||||
74. https://www.theatlantic.com/technology/archive/2023/12/tesla-chatgpt-most-important-technology/676980/
|
||||
[1] https://www.theatlantic.com/health/archive/2023/10/reasons-to-get-e-bike-emissions-climate-change-benefits/675716/#main-content
|
||||
[2] https://www.theatlantic.com/
|
||||
[5] https://www.theatlantic.com/most-popular/
|
||||
[6] https://www.theatlantic.com/latest/
|
||||
[7] https://www.theatlantic.com/newsletters/
|
||||
[8] https://www.theatlantic.com/politics/
|
||||
[9] https://www.theatlantic.com/ideas/
|
||||
[10] https://www.theatlantic.com/category/fiction/
|
||||
[11] https://www.theatlantic.com/technology/
|
||||
[12] https://www.theatlantic.com/science/
|
||||
[13] https://www.theatlantic.com/photo/
|
||||
[14] https://www.theatlantic.com/business/
|
||||
[15] https://www.theatlantic.com/culture/
|
||||
[16] https://www.theatlantic.com/projects/planet/
|
||||
[17] https://www.theatlantic.com/international/
|
||||
[18] https://www.theatlantic.com/books/
|
||||
[19] https://www.theatlantic.com/podcasts/
|
||||
[20] https://www.theatlantic.com/health/
|
||||
[21] https://www.theatlantic.com/education/
|
||||
[22] https://www.theatlantic.com/projects/
|
||||
[23] https://www.theatlantic.com/category/features/
|
||||
[24] https://www.theatlantic.com/family/
|
||||
[25] https://www.theatlantic.com/events/
|
||||
[26] https://www.theatlantic.com/category/washington-week-atlantic/
|
||||
[27] https://www.theatlantic.com/progress/
|
||||
[28] https://www.theatlantic.com/newsletters/
|
||||
[29] https://www.theatlantic.com/archive/
|
||||
[30] https://www.theatlantic.com/free-daily-crossword-puzzle/
|
||||
[31] https://www.theatlantic.com/magazine/
|
||||
[32] https://www.theatlantic.com/magazine/
|
||||
[33] https://www.theatlantic.com/magazine/backissues/
|
||||
[34] https://accounts.theatlantic.com/products/gift
|
||||
[38] https://www.theatlantic.com/projects/dear-therapist/
|
||||
[39] https://www.theatlantic.com/free-daily-crossword-puzzle/
|
||||
[40] https://www.theatlantic.com/archive/
|
||||
[41] https://accounts.theatlantic.com/accounts/subscription/
|
||||
[43] https://www.theatlantic.com/most-popular/
|
||||
[44] https://www.theatlantic.com/latest/
|
||||
[45] https://www.theatlantic.com/newsletters/
|
||||
[46] https://www.theatlantic.com/
|
||||
[47] https://www.theatlantic.com/
|
||||
[48] https://accounts.theatlantic.com/login/
|
||||
[49] https://www.theatlantic.com/subscribe/navbar/
|
||||
[50] https://www.theatlantic.com/projects/planet/
|
||||
[51] https://www.theatlantic.com/projects/planet/
|
||||
[52] https://www.theatlantic.com/science/archive/2024/01/winter-snow-loss-climate-change/677078/
|
||||
[53] https://www.theatlantic.com/author/zoe-schlanger/
|
||||
[54] https://www.theatlantic.com/science/archive/2024/01/alaska-arctic-voles-carbon-source-climate-change/677014/
|
||||
[55] https://www.theatlantic.com/author/bathsheba-demuth/
|
||||
[56] https://www.theatlantic.com/health/archive/2023/12/disaster-kit-loss-memories-mental-health/676961/
|
||||
[57] https://www.theatlantic.com/author/ayurella-horn-muller/
|
||||
[58] https://www.theatlantic.com/technology/archive/2023/12/tesla-chatgpt-most-important-technology/676980/
|
||||
[59] https://www.theatlantic.com/author/saahil-desai/
|
||||
[60] https://www.theatlantic.com/health/
|
||||
[61] https://www.theatlantic.com/author/michael-thomas/
|
||||
[64] https://energy.mit.edu/news/us-passenger-cars/
|
||||
[65] https://qz.com/135509/more-americans-die-from-car-pollution-than-car-accidents
|
||||
[66] https://www.npr.org/sections/goatsandsoda/2023/02/01/1152893248/red-cobalt-congo-drc-mining-siddharth-kara
|
||||
[67] https://www.nrdc.org/stories/lithium-mining-leaving-chiles-indigenous-communities-high-and-dry-literally
|
||||
[68] https://www.theatlantic.com/science/archive/2023/04/electric-ev-rickshaw-sales-climate-change/673629/
|
||||
[69] https://newsroom.aaa.com/2022/08/annual-cost-of-new-car-ownership-crosses-10k-mark/
|
||||
[70] https://www.theatlantic.com/health/archive/2021/01/how-socialize-outside-winter/617520/
|
||||
[71] https://www.sciencedirect.com/science/article/abs/pii/S2214140518306054
|
||||
[72] https://www.theatlantic.com/business/archive/2018/02/seattle-car-commute/553589/
|
||||
[73] https://travelbehaviour.files.wordpress.com/2017/10/caw-summaryreport-onlineedition.pdf
|
||||
[74] https://www.reuters.com/article/us-commuting/long-commutes-may-be-bad-for-health-study-idUKBRE8470U520120508
|
||||
[75] https://www.sciencedirect.com/science/article/abs/pii/S2214140518305255
|
||||
[76] https://peopleforbikes.cdn.prismic.io/peopleforbikes/e3dad6f7-d81b-4e59-9208-b012406ffa8e_E-bike-Potential-Paper-05_15_19-Final.pdf
|
||||
[77] https://www.energy.gov/eere/vehicles/articles/fotw-1230-march-21-2022-more-half-all-daily-trips-were-less-three-miles-2021#:~:text=A%20research%20study%20for%20the,were%20greater%20than%2050%20miles.
|
||||
[78] https://electrek.co/2023/02/19/free-electric-bikes-rebates-us-cities-and-states/
|
||||
[79] https://www.cpr.org/2023/08/10/colorado-ebike-rebates-how-to-qualify/
|
||||
|
||||
@@ -1,21 +1,19 @@
|
||||
#[1]The Verge
|
||||
[1]Skip to main content
|
||||
[2]The Verge logo.[3]The Verge homepage
|
||||
|
||||
[2]Skip to main content
|
||||
The Verge logo.[3]The Verge homepage
|
||||
• [4]The Verge homepageThe Verge logo./
|
||||
• [5]Tech/
|
||||
• [6]Reviews/
|
||||
• [7]Science/
|
||||
• [8]Entertainment/
|
||||
• MoreMenu
|
||||
|
||||
* [4]The Verge homepageThe Verge logo./
|
||||
* [5]Tech/
|
||||
* [6]Reviews/
|
||||
* [7]Science/
|
||||
* [8]Entertainment/
|
||||
* (BUTTON) MoreMenuExpand
|
||||
[10]The Verge logo.
|
||||
Menu
|
||||
|
||||
The Verge logo.
|
||||
(BUTTON) MenuExpand
|
||||
|
||||
* [9]Platformer/
|
||||
* [10]Apps/
|
||||
* [11]Tech
|
||||
• [12]Platformer/
|
||||
• [13]Apps/
|
||||
• [14]Tech
|
||||
|
||||
Why note-taking apps don’t make us smarter
|
||||
|
||||
@@ -25,114 +23,110 @@ Why note-taking apps don’t make us smarter
|
||||
|
||||
They’re designed for storage, not sparking insights. Can AI change that?
|
||||
|
||||
By [12]Casey Newton, a contributing editor who has been writing about
|
||||
tech for over 10 years. He founded Platformer, a newsletter about Big
|
||||
Tech and democracy.
|
||||
Aug 25, 2023, 2:30 PM UTC| (BUTTON) Comments
|
||||
By [15]Casey Newton, a contributing editor who has been writing about tech for
|
||||
over 10 years. He founded Platformer, a newsletter about Big Tech and
|
||||
democracy.
|
||||
|
||||
Aug 25, 2023, 2:30 PM UTC|
|
||||
|
||||
Share this story
|
||||
|
||||
* (BUTTON)
|
||||
* (BUTTON)
|
||||
* (BUTTON)
|
||||
•
|
||||
•
|
||||
•
|
||||
|
||||
Screenshots of the note-taking app Obsidian.
|
||||
Screenshots of the note-taking app Obsidian. Image: Obsidian
|
||||
|
||||
This is Platformer, a newsletter on the intersection of Silicon Valley
|
||||
and democracy from Casey Newton and Zoë Schiffer. [13]Sign up here.
|
||||
__________________________________________________________________
|
||||
This is Platformer, a newsletter on the intersection of Silicon Valley and
|
||||
democracy from Casey Newton and Zoë Schiffer. [20]Sign up here.
|
||||
|
||||
Today let’s step outside the news cycle and turn our attention toward a
|
||||
topic I’m deeply invested in but only rarely write about: productivity
|
||||
platforms. For decades now, software tools have promised to make
|
||||
working life easier. But on one critical dimension — their ability to
|
||||
improve our thinking — they don’t seem to be making much progress at
|
||||
all.
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
Meanwhile, the arrival of generative artificial intelligence could make
|
||||
the tools we use more powerful than ever — or they could turn out to be
|
||||
just another mirage.
|
||||
Today let’s step outside the news cycle and turn our attention toward a topic
|
||||
I’m deeply invested in but only rarely write about: productivity platforms. For
|
||||
decades now, software tools have promised to make working life easier. But on
|
||||
one critical dimension — their ability to improve our thinking — they don’t
|
||||
seem to be making much progress at all.
|
||||
|
||||
Meanwhile, the arrival of generative artificial intelligence could make the
|
||||
tools we use more powerful than ever — or they could turn out to be just
|
||||
another mirage.
|
||||
|
||||
To understand where things went wrong, I want to focus on the humble
|
||||
note-taking app: the place where, for so many of us, thinking begins.
|
||||
|
||||
I.
|
||||
|
||||
Earlier this week I read a story about farmers. “America’s Farmers Are
|
||||
Bogged Down by Data,” read the headline on [14]Belle Lin’s story in the
|
||||
Wall Street Journal. I thought to myself: You and me both, farmer! And
|
||||
I read the piece.
|
||||
Earlier this week I read a story about farmers. “America’s Farmers Are Bogged
|
||||
Down by Data,” read the headline on [21]Belle Lin’s story in the Wall Street
|
||||
Journal. I thought to myself: You and me both, farmer! And I read the piece.
|
||||
|
||||
Over the past decade, farmers have been offered all manner of software
|
||||
tools to analyze and manage their crops. In general, though, the more
|
||||
software that farmers use, the more they find themselves overwhelmed by
|
||||
data that the tools collect. “We’re collecting so much data that you’re
|
||||
almost paralyzed with having to analyze it all,” one farmer told the
|
||||
Journal.
|
||||
Over the past decade, farmers have been offered all manner of software tools to
|
||||
analyze and manage their crops. In general, though, the more software that
|
||||
farmers use, the more they find themselves overwhelmed by data that the tools
|
||||
collect. “We’re collecting so much data that you’re almost paralyzed with
|
||||
having to analyze it all,” one farmer told the Journal.
|
||||
|
||||
As a journalist, I’ve never collected as much data as I do now. The collapse of
|
||||
Twitter has me browsing four or five text-based social feeds a day, scanning
|
||||
for news and thoughtful conversation. The growing popularity of arXiv and
|
||||
pre-prints in general has left me with a stack of research that I will never
|
||||
get through. Book galleys pile up in my house.
|
||||
|
||||
As a journalist, I’ve never collected as much data as I do now. The
|
||||
collapse of Twitter has me browsing four or five text-based social
|
||||
feeds a day, scanning for news and thoughtful conversation. The growing
|
||||
popularity of arXiv and pre-prints in general has left me with a stack
|
||||
of research that I will never get through. Book galleys pile up in my
|
||||
house.
|
||||
A screenshot of the app Notion.A screenshot of the app Notion.
|
||||
A screenshot of the app Notion.A screenshot of the app Notion.
|
||||
A screenshot of the app Notion. Image: Notion
|
||||
|
||||
Meanwhile, all day long I browse the web. Stories that might belong in
|
||||
Platformer get saved into a database in the productivity platform
|
||||
Notion. Every link that has ever been in this newsletter is stored
|
||||
there, in many cases with the full article text.
|
||||
Platformer get saved into a database in the productivity platform Notion. Every
|
||||
link that has ever been in this newsletter is stored there, in many cases with
|
||||
the full article text.
|
||||
|
||||
Collectively, this material offers me an abundance of riches — far more
|
||||
to work with than any beat reporter had such easy access to even 15
|
||||
years ago.
|
||||
Collectively, this material offers me an abundance of riches — far more to work
|
||||
with than any beat reporter had such easy access to even 15 years ago.
|
||||
|
||||
And yet most days I find myself with the same problem as the farmer: I
|
||||
have so much information at hand that I feel paralyzed.
|
||||
And yet most days I find myself with the same problem as the farmer: I have so
|
||||
much information at hand that I feel paralyzed.
|
||||
|
||||
II.
|
||||
|
||||
One solution to this data paralysis is to take notes. As a journalist,
|
||||
of course, I have always taken notes. A few years ago, I thought we had
|
||||
seen some true breakthroughs in note-taking, and increasingly put my
|
||||
faith in those tools not just to capture my writing but to improve the
|
||||
quality of my thinking.
|
||||
One solution to this data paralysis is to take notes. As a journalist, of
|
||||
course, I have always taken notes. A few years ago, I thought we had seen some
|
||||
true breakthroughs in note-taking, and increasingly put my faith in those tools
|
||||
not just to capture my writing but to improve the quality of my thinking.
|
||||
|
||||
The breakthrough tool was [15]Roam Research. In 2021, I wrote here
|
||||
about [16]my first year using the subscription-based software, which
|
||||
had two key insights into knowledge work. One was to make professional
|
||||
note-taking feel more like journaling. It turns out that a fresh note
|
||||
created each day, labeled with a date, is a good canvas for collecting
|
||||
transient thoughts, which can serve as a springboard into deeper
|
||||
thinking.
|
||||
The breakthrough tool was [22]Roam Research. In 2021, I wrote here about [23]my
|
||||
first year using the subscription-based software, which had two key insights
|
||||
into knowledge work. One was to make professional note-taking feel more like
|
||||
journaling. It turns out that a fresh note created each day, labeled with a
|
||||
date, is a good canvas for collecting transient thoughts, which can serve as a
|
||||
springboard into deeper thinking.
|
||||
|
||||
The second is known to note-taking nerds as “[17]bidirectional
|
||||
linking.” Standard links, like the ones you find on the web, go in only
|
||||
one direction — from one page to another. In a note-taking app,
|
||||
bidirectional links join two pages together. This effectively lets you
|
||||
add backlinks to any concept — a company that’s important to you, say,
|
||||
or a concept that’s on your mind — and then let you browse everything
|
||||
you’ve collected related to that concept at your leisure.
|
||||
A graphic from Roam illustrating bidirectional linking. A graphic from
|
||||
Roam illustrating bidirectional linking.
|
||||
A graphic from Roam illustrating bidirectional linking. A graphic from
|
||||
Roam illustrating bidirectional linking.
|
||||
The second is known to note-taking nerds as “[24]bidirectional linking.”
|
||||
Standard links, like the ones you find on the web, go in only one direction —
|
||||
from one page to another. In a note-taking app, bidirectional links join two
|
||||
pages together. This effectively lets you add backlinks to any concept — a
|
||||
company that’s important to you, say, or a concept that’s on your mind — and
|
||||
then let you browse everything you’ve collected related to that concept at your
|
||||
leisure.
|
||||
|
||||
A graphic from Roam illustrating bidirectional linking.A graphic from Roam
|
||||
illustrating bidirectional linking.
|
||||
A graphic from Roam illustrating bidirectional linking.A graphic from Roam
|
||||
illustrating bidirectional linking.
|
||||
A graphic from Roam illustrating bidirectional linking. Image: Roam
|
||||
|
||||
On one level, that’s not so different from adding tags to notes. But
|
||||
tags are more about search. Bidirectional links, which some apps show
|
||||
you on pages that include snippets of all the other notes that contain
|
||||
the same link, are more about browsing and rediscovery.
|
||||
On one level, that’s not so different from adding tags to notes. But tags are
|
||||
more about search. Bidirectional links, which some apps show you on pages that
|
||||
include snippets of all the other notes that contain the same link, are more
|
||||
about browsing and rediscovery.
|
||||
|
||||
Initially, I threw myself into this kind of associative note-taking. I
|
||||
gathered links around concepts I wanted to explore (“the internet
|
||||
enables information to travel too quickly,” for example, or social
|
||||
networks and polarization). When I had an interesting conversation with
|
||||
a person, I would add notes to a personal page I had created for them.
|
||||
A few times a week, I would revisit those notes.
|
||||
Initially, I threw myself into this kind of associative note-taking. I gathered
|
||||
links around concepts I wanted to explore (“the internet enables information to
|
||||
travel too quickly,” for example, or social networks and polarization). When I
|
||||
had an interesting conversation with a person, I would add notes to a personal
|
||||
page I had created for them. A few times a week, I would revisit those notes.
|
||||
|
||||
I waited for the insights to come.
|
||||
|
||||
@@ -141,336 +135,329 @@ Share this story
|
||||
Note-taking apps are up against a much stronger foe
|
||||
|
||||
My gusto for concept-based, link-heavy note-taking diminished. Roam’s
|
||||
development slowed to a crawl, and I spent a season with the
|
||||
lightweight, mostly free alternative known as [18]Obsidian. Obsidian’s
|
||||
brutalist design wore on me, though, and eventually I decamped for the
|
||||
more polished user interface of [19]Mem. (These apps all enable the
|
||||
exporting of your notes in Markdown, making switching relatively
|
||||
painless.)
|
||||
development slowed to a crawl, and I spent a season with the lightweight,
|
||||
mostly free alternative known as [25]Obsidian. Obsidian’s brutalist design wore
|
||||
on me, though, and eventually I decamped for the more polished user interface
|
||||
of [26]Mem. (These apps all enable the exporting of your notes in Markdown,
|
||||
making switching relatively painless.)
|
||||
|
||||
I continue to journal most days, and occasionally find myself working
|
||||
to refine one concept or another among those notes.
|
||||
I continue to journal most days, and occasionally find myself working to refine
|
||||
one concept or another among those notes.
|
||||
|
||||
But the original promise of Roam — that it would improve my thinking by
|
||||
helping me to build a knowledge base and discover new ideas — fizzled
|
||||
completely.
|
||||
But the original promise of Roam — that it would improve my thinking by helping
|
||||
me to build a knowledge base and discover new ideas — fizzled completely.
|
||||
|
||||
III.
|
||||
|
||||
One interpretation of these events is that the software failed: that
|
||||
journaling and souped-up links simply don’t have the power some of us
|
||||
once hoped they did.
|
||||
One interpretation of these events is that the software failed: that journaling
|
||||
and souped-up links simply don’t have the power some of us once hoped they did.
|
||||
|
||||
Another view, though, is that they are up against a much stronger foe —
|
||||
the infinite daily distractions of the internet.
|
||||
Another view, though, is that they are up against a much stronger foe — the
|
||||
infinite daily distractions of the internet.
|
||||
|
||||
Note-taking, after all, does not take place in a vacuum. It takes place
|
||||
on your computer, next to email, and Slack, and Discord, and iMessage,
|
||||
and the text-based social network of your choosing. In the era of
|
||||
alt-tabbing between these and other apps, our ability to build
|
||||
knowledge and draw connections is permanently challenged by what might
|
||||
be our ultimately futile efforts to multitask.
|
||||
Note-taking, after all, does not take place in a vacuum. It takes place on your
|
||||
computer, next to email, and Slack, and Discord, and iMessage, and the
|
||||
text-based social network of your choosing. In the era of alt-tabbing between
|
||||
these and other apps, our ability to build knowledge and draw connections is
|
||||
permanently challenged by what might be our ultimately futile efforts to
|
||||
multitask.
|
||||
|
||||
Ezra Klein wrote beautifully about this situation this week [20]in the
|
||||
New York Times:
|
||||
Ezra Klein wrote beautifully about this situation this week [27]in the New York
|
||||
Times:
|
||||
|
||||
Gloria Mark, a professor of information science at the University of
|
||||
California, Irvine, and the author of “[21]Attention Span,” started
|
||||
researching the way people used computers in 2004. The average time
|
||||
people spent on a single screen was 2.5 minutes. “I was astounded,”
|
||||
she told me. “That was so much worse than I’d thought it would be.”
|
||||
But that was just the beginning. By 2012, Mark and her colleagues
|
||||
found the average time on a single task was 75 seconds. Now it’s
|
||||
down to about 47.
|
||||
California, Irvine, and the author of “[28]Attention Span,” started
|
||||
researching the way people used computers in 2004. The average time people
|
||||
spent on a single screen was 2.5 minutes. “I was astounded,” she told me.
|
||||
“That was so much worse than I’d thought it would be.” But that was just
|
||||
the beginning. By 2012, Mark and her colleagues found the average time on a
|
||||
single task was 75 seconds. Now it’s down to about 47.
|
||||
|
||||
This is an acid bath for human cognition. Multitasking is mostly a
|
||||
myth. We can focus on one thing at a time. “It’s like we have an
|
||||
internal whiteboard in our minds,” Mark said. “If I’m working on one
|
||||
task, I have all the info I need on that mental whiteboard. Then I
|
||||
switch to email. I have to mentally erase that whiteboard and write
|
||||
all the information I need to do email. And just like on a real
|
||||
whiteboard, there can be a residue in our minds. We may still be
|
||||
thinking of something from three tasks ago.”
|
||||
This is an acid bath for human cognition. Multitasking is mostly a myth. We
|
||||
can focus on one thing at a time. “It’s like we have an internal whiteboard
|
||||
in our minds,” Mark said. “If I’m working on one task, I have all the info
|
||||
I need on that mental whiteboard. Then I switch to email. I have to
|
||||
mentally erase that whiteboard and write all the information I need to do
|
||||
email. And just like on a real whiteboard, there can be a residue in our
|
||||
minds. We may still be thinking of something from three tasks ago.”
|
||||
|
||||
My first thought upon reading this was that it seems rare for me to
|
||||
spend even 47 seconds looking at one screen on my computer without at
|
||||
least glancing at another. (I bought a 38-inch widescreen monitor for
|
||||
the express purpose of being able to glance at many windows
|
||||
simultaneously. At the time I understood this as a tool for enhancing
|
||||
my productivity.)
|
||||
My first thought upon reading this was that it seems rare for me to spend even
|
||||
47 seconds looking at one screen on my computer without at least glancing at
|
||||
another. (I bought a 38-inch widescreen monitor for the express purpose of
|
||||
being able to glance at many windows simultaneously. At the time I understood
|
||||
this as a tool for enhancing my productivity.)
|
||||
|
||||
My second thought is that if you want to take good notes, you have to
|
||||
first extract your mind from the acid bath.
|
||||
My second thought is that if you want to take good notes, you have to first
|
||||
extract your mind from the acid bath.
|
||||
|
||||
IV.
|
||||
|
||||
Klein’s piece starts from the observation that productivity growth is
|
||||
now about half of what it was in the 1950s and ‘60s. The internet’s
|
||||
arrival briefly speeded it up, he writes, but the more we stared at our
|
||||
screens the slower our productivity improved. He worries that AI will
|
||||
have a similar effect on the economy — promising to make us more
|
||||
productive, while simultaneously inventing so many new distractions and
|
||||
entertainments that they overwhelm and paralyze us.
|
||||
Klein’s piece starts from the observation that productivity growth is now about
|
||||
half of what it was in the 1950s and ‘60s. The internet’s arrival briefly
|
||||
speeded it up, he writes, but the more we stared at our screens the slower our
|
||||
productivity improved. He worries that AI will have a similar effect on the
|
||||
economy — promising to make us more productive, while simultaneously inventing
|
||||
so many new distractions and entertainments that they overwhelm and paralyze
|
||||
us.
|
||||
|
||||
The piece stuck with me, because there is one specific way I am counting on AI
|
||||
to make me more productive. It goes back to that database of links I’ve been
|
||||
building in Notion, and the insights I was hoping to get out of Roam.
|
||||
|
||||
The piece stuck with me, because there is one specific way I am
|
||||
counting on AI to make me more productive. It goes back to that
|
||||
database of links I’ve been building in Notion, and the insights I was
|
||||
hoping to get out of Roam.
|
||||
Saving an article in Mem.Saving an article in Mem.
|
||||
Saving an article in Mem.Saving an article in Mem.
|
||||
Saving an article in Mem. Image: Mem
|
||||
|
||||
Earlier this year, like many productivity tools, Notion added a handful
|
||||
of AI features. I use two of them in my links database. One extracts
|
||||
the names of any companies mentioned in an article, creating a kind of
|
||||
automatic tagging system. The other provides a two- or three-sentence
|
||||
summary of the article I’m saving.
|
||||
Earlier this year, like many productivity tools, Notion added a handful of AI
|
||||
features. I use two of them in my links database. One extracts the names of any
|
||||
companies mentioned in an article, creating a kind of automatic tagging system.
|
||||
The other provides a two- or three-sentence summary of the article I’m saving.
|
||||
|
||||
Neither of these, in practice, is particularly useful. Tags might
|
||||
theoretically be useful for revisiting old material, but databases are
|
||||
not designed to be browsed. And while we publish summaries of news
|
||||
articles in each edition of Platformer, we wouldn’t use AI-written
|
||||
summaries: among other reasons, they often miss important details and
|
||||
context.
|
||||
Neither of these, in practice, is particularly useful. Tags might theoretically
|
||||
be useful for revisiting old material, but databases are not designed to be
|
||||
browsed. And while we publish summaries of news articles in each edition of
|
||||
Platformer, we wouldn’t use AI-written summaries: among other reasons, they
|
||||
often miss important details and context.
|
||||
|
||||
At the same time, the database contains nearly three years of links to
|
||||
every subject I cover here, along with the complete text of thousands
|
||||
of articles. It is here, and not in a note-taking app, that knowledge
|
||||
of my beat has been accreting over the past few years. If only I could
|
||||
access that knowledge in some way that went beyond my memory.
|
||||
At the same time, the database contains nearly three years of links to every
|
||||
subject I cover here, along with the complete text of thousands of articles. It
|
||||
is here, and not in a note-taking app, that knowledge of my beat has been
|
||||
accreting over the past few years. If only I could access that knowledge in
|
||||
some way that went beyond my memory.
|
||||
|
||||
It’s here that AI should be able to help. Within some reasonable period
|
||||
of time, I expect that I will be able to talk to my Notion database as
|
||||
if it’s ChatGPT. If I could, I imagine I would talk to it all the time.
|
||||
It’s here that AI should be able to help. Within some reasonable period of
|
||||
time, I expect that I will be able to talk to my Notion database as if it’s
|
||||
ChatGPT. If I could, I imagine I would talk to it all the time.
|
||||
|
||||
Much of journalism simply involves remembering relevant events from the
|
||||
past. An AI-powered link database has a perfect memory; all it’s
|
||||
missing is a usable chat interface. If it had one, it might be a
|
||||
perfect research assistant.
|
||||
Much of journalism simply involves remembering relevant events from the past.
|
||||
An AI-powered link database has a perfect memory; all it’s missing is a usable
|
||||
chat interface. If it had one, it might be a perfect research assistant.
|
||||
|
||||
Today’s chatbots can’t do any of this to a reporter’s standard
|
||||
|
||||
I imagine using it to generate little briefing documents to help me
|
||||
when I return to a subject after some time away. Catch me up on
|
||||
Canada’s fight with Meta over news, I might say. Make me a timeline of
|
||||
events at Twitter since Elon Musk bought it. Show me coverage of
|
||||
deepfakes over the past three months.
|
||||
I imagine using it to generate little briefing documents to help me when I
|
||||
return to a subject after some time away. Catch me up on Canada’s fight with
|
||||
Meta over news, I might say. Make me a timeline of events at Twitter since Elon
|
||||
Musk bought it. Show me coverage of deepfakes over the past three months.
|
||||
|
||||
Today’s chatbots can’t do any of this to a reporter’s standard. The
|
||||
training data often stops in 2021, for one thing. The bots continue to
|
||||
make stuff up, and struggle to cite their sources.
|
||||
Today’s chatbots can’t do any of this to a reporter’s standard. The training
|
||||
data often stops in 2021, for one thing. The bots continue to make stuff up,
|
||||
and struggle to cite their sources.
|
||||
|
||||
But if I could chat in natural language with a massive archive, built
|
||||
from hand-picked trustworthy sources? That seems powerful to me, at
|
||||
least in the abstract.
|
||||
But if I could chat in natural language with a massive archive, built from
|
||||
hand-picked trustworthy sources? That seems powerful to me, at least in the
|
||||
abstract.
|
||||
|
||||
Of course, the output from this kind of AI tool has to be trustworthy.
|
||||
A significant problem with using AI tools to summarize things is that
|
||||
you can’t trust the summary unless you read all the relevant documents
|
||||
yourself — defeating the point of asking for a summary in the first
|
||||
place.
|
||||
Of course, the output from this kind of AI tool has to be trustworthy. A
|
||||
significant problem with using AI tools to summarize things is that you can’t
|
||||
trust the summary unless you read all the relevant documents yourself —
|
||||
defeating the point of asking for a summary in the first place.
|
||||
|
||||
Still, if you are the sort of productivity-tool optimist who will try
|
||||
any to-do list or calendar app on the off chance it makes you even a
|
||||
little happier at work, it seems to me that a database you can talk to
|
||||
might be the next-generation note-taking tool we have been waiting for.
|
||||
Still, if you are the sort of productivity-tool optimist who will try any to-do
|
||||
list or calendar app on the off chance it makes you even a little happier at
|
||||
work, it seems to me that a database you can talk to might be the
|
||||
next-generation note-taking tool we have been waiting for.
|
||||
|
||||
V.
|
||||
|
||||
I’ve learned something else about note-taking apps, though, since my
|
||||
mania for them began in 2020.
|
||||
I’ve learned something else about note-taking apps, though, since my mania for
|
||||
them began in 2020.
|
||||
|
||||
In short: it is probably a mistake, in the end, to ask software to
|
||||
improve our thinking. Even if you can rescue your attention from the
|
||||
acid bath of the internet; even if you can gather the most interesting
|
||||
data and observations into the app of your choosing; even if you
|
||||
revisit that data from time to time — this will not be enough. It might
|
||||
not even be worth trying.
|
||||
In short: it is probably a mistake, in the end, to ask software to improve our
|
||||
thinking. Even if you can rescue your attention from the acid bath of the
|
||||
internet; even if you can gather the most interesting data and observations
|
||||
into the app of your choosing; even if you revisit that data from time to time
|
||||
— this will not be enough. It might not even be worth trying.
|
||||
|
||||
I’ll admit to having forgotten those questions over the past couple
|
||||
years
|
||||
I’ll admit to having forgotten those questions over the past couple years
|
||||
|
||||
The reason, sadly, is that thinking takes place in your brain. And
|
||||
thinking is an active pursuit — one that often happens when you are
|
||||
spending long stretches of time staring into space, then writing a bit,
|
||||
and then staring into space a bit more. It’s here here that the
|
||||
connections are made and the insights are formed. And it is a process
|
||||
that stubbornly resists automation.
|
||||
The reason, sadly, is that thinking takes place in your brain. And thinking is
|
||||
an active pursuit — one that often happens when you are spending long stretches
|
||||
of time staring into space, then writing a bit, and then staring into space a
|
||||
bit more. It’s here here that the connections are made and the insights are
|
||||
formed. And it is a process that stubbornly resists automation.
|
||||
|
||||
Which is not to say that software can’t help. Andy Matuschak, a
|
||||
researcher whose [22]spectacular website offers a feast of thinking
|
||||
about notes and note-taking, observes [23]that note-taking apps
|
||||
emphasize displaying and manipulating notes, but never making sense
|
||||
between them. Before I totally resign myself to the idea that a
|
||||
note-taking app can’t solve my problems, I will admit that on some
|
||||
fundamental level no one has really tried.
|
||||
Which is not to say that software can’t help. Andy Matuschak, a researcher
|
||||
whose [29]spectacular website offers a feast of thinking about notes and
|
||||
note-taking, observes [30]that note-taking apps emphasize displaying and
|
||||
manipulating notes, but never making sense between them. Before I totally
|
||||
resign myself to the idea that a note-taking app can’t solve my problems, I
|
||||
will admit that on some fundamental level no one has really tried.
|
||||
|
||||
“The goal is not to take notes — the goal is to think effectively,”
|
||||
[24]Matuschak writes. “Better questions are ‘what practices can help me
|
||||
reliably develop insights over time?’ [and] ‘how can I shepherd my
|
||||
attention effectively?’”
|
||||
“The goal is not to take notes — the goal is to think effectively,” [31]
|
||||
Matuschak writes. “Better questions are ‘what practices can help me reliably
|
||||
develop insights over time?’ [and] ‘how can I shepherd my attention
|
||||
effectively?’”
|
||||
|
||||
I’ll admit to having forgotten those questions over the past couple
|
||||
years as I kept filling up documents with transient strings of text
|
||||
inside expensive software. And I accept that to be a better thinker,
|
||||
I’ll have to devote more time and attention to wrestling with what I
|
||||
find.
|
||||
I’ll admit to having forgotten those questions over the past couple years as I
|
||||
kept filling up documents with transient strings of text inside expensive
|
||||
software. And I accept that to be a better thinker, I’ll have to devote more
|
||||
time and attention to wrestling with what I find.
|
||||
|
||||
If there’s a friendly AI to help me do that, though, I’ll be first in
|
||||
line to try it.
|
||||
If there’s a friendly AI to help me do that, though, I’ll be first in line to
|
||||
try it.
|
||||
|
||||
IFRAME: [25]https://www.platformer.news/embed
|
||||
|
||||
(BUTTON) Comments
|
||||
Most Popular
|
||||
1. [26]
|
||||
|
||||
1. [33]
|
||||
|
||||
Apple Vision Pro hands-on, again, for the first time
|
||||
______________________________________________________________
|
||||
|
||||
2. [27]
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
2. [34]
|
||||
|
||||
Google layoffs continue with ‘hundreds’ from sales team
|
||||
______________________________________________________________
|
||||
|
||||
3. [28]
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
3. [35]
|
||||
|
||||
Microsoft’s new Copilot Pro brings AI-powered Office features to the rest of
|
||||
us
|
||||
______________________________________________________________
|
||||
The AI phones are coming
|
||||
|
||||
4. [29]
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
4. [36]
|
||||
|
||||
Google’s latest layoffs are just the beginning
|
||||
______________________________________________________________
|
||||
Google quietly updates Chrome’s incognito warning in wake of tracking
|
||||
lawsuit
|
||||
|
||||
5. [30]
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
5. [37]
|
||||
|
||||
Apple Watch drops blood oxygen features to dodge the import ban
|
||||
______________________________________________________________
|
||||
Nvidia RTX 4070 Super review: a super performance bump for $599
|
||||
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
Verge Deals
|
||||
|
||||
/ Sign up for Verge Deals to get deals on products we've tested sent to
|
||||
your inbox daily.
|
||||
/ Sign up for Verge Deals to get deals on products we've tested sent to your
|
||||
inbox daily.
|
||||
|
||||
Email (required) ____________________ (BUTTON) Sign up
|
||||
|
||||
By submitting your email, you agree to our [31]Terms and [32]Privacy
|
||||
Notice. This site is protected by reCAPTCHA and the Google [33]Privacy
|
||||
Policy and [34]Terms of Service apply.
|
||||
Email (required)[38][ ]Sign up
|
||||
By submitting your email, you agree to our [40]Terms and [41]Privacy Notice.
|
||||
This site is protected by reCAPTCHA and the Google [42]Privacy Policy and [43]
|
||||
Terms of Service apply.
|
||||
From our sponsor
|
||||
|
||||
[44]
|
||||
|
||||
[45]
|
||||
Advertiser Content FromSponsor logo
|
||||
Sponsor thumbnail
|
||||
|
||||
More from [35]Apps
|
||||
More from [46]Apps
|
||||
|
||||
* An image showing the WhatsApp logo in black An image showing the
|
||||
WhatsApp logo in black
|
||||
[36]WhatsApp tests voice messages that disappear after your recipient
|
||||
hears them
|
||||
* WhatsApp logo on a green, black, and white background WhatsApp logo
|
||||
on a green, black, and white background
|
||||
[37]WhatsApp will soon let you stay logged in to two accounts at once
|
||||
* A screenshot of widgets from Pixel Pals. A screenshot of widgets
|
||||
from Pixel Pals.
|
||||
[38]The creator of Apollo for Reddit has moved onto smaller and
|
||||
weirder things
|
||||
* A picture of the Internal Revenue Service headquarters in
|
||||
Washington, DC. A picture of the Internal Revenue Service
|
||||
headquarters in Washington, DC.
|
||||
[39]13 states join the IRS direct-file test after tax prep firms
|
||||
dropped the ball
|
||||
* Advertiser Content From Sponsor logo
|
||||
• An image showing the WhatsApp logo in blackAn image showing the WhatsApp
|
||||
logo in black
|
||||
|
||||
[47]WhatsApp tests voice messages that disappear after your recipient hears
|
||||
them
|
||||
|
||||
The Verge logo.
|
||||
* [40]Terms of Use
|
||||
* [41]Privacy Notice
|
||||
* [42]Cookie Policy
|
||||
* [43]Do Not Sell Or Share My Personal Info
|
||||
* [44]Licensing FAQ
|
||||
* [45]Accessibility
|
||||
* [46]Platform Status
|
||||
* [47]How We Rate and Review Products
|
||||
• WhatsApp logo on a green, black, and white backgroundWhatsApp logo on a
|
||||
green, black, and white background
|
||||
|
||||
* [48]Contact
|
||||
* [49]Tip Us
|
||||
* [50]Community Guidelines
|
||||
* [51]About
|
||||
* [52]Ethics Statement
|
||||
[48]WhatsApp will soon let you stay logged in to two accounts at once
|
||||
|
||||
• A screenshot of widgets from Pixel Pals.A screenshot of widgets from Pixel
|
||||
Pals.
|
||||
|
||||
[49]The creator of Apollo for Reddit has moved onto smaller and weirder
|
||||
things
|
||||
|
||||
• A picture of the Internal Revenue Service headquarters in Washington, DC.A
|
||||
picture of the Internal Revenue Service headquarters in Washington, DC.
|
||||
|
||||
[50]13 states join the IRS direct-file test after tax prep firms dropped
|
||||
the ball
|
||||
|
||||
•
|
||||
[51]
|
||||
Advertiser Content FromSponsor logo
|
||||
|
||||
[52]
|
||||
|
||||
[53]The Verge logo.
|
||||
|
||||
• [54]Terms of Use
|
||||
• [55]Privacy Notice
|
||||
• [56]Cookie Policy
|
||||
• [57]Do Not Sell Or Share My Personal Info
|
||||
• [58]Licensing FAQ
|
||||
• [59]Accessibility
|
||||
• [60]Platform Status
|
||||
• [61]How We Rate and Review Products
|
||||
|
||||
• [62]Contact
|
||||
• [63]Tip Us
|
||||
• [64]Community Guidelines
|
||||
• [65]About
|
||||
• [66]Ethics Statement
|
||||
|
||||
The Verge is a vox media network
|
||||
* [53]Advertise with us
|
||||
* [54]Jobs @ Vox Media
|
||||
|
||||
© 2024 [55]Vox Media, LLC. All Rights Reserved
|
||||
• [67]Advertise with us
|
||||
• [68]Jobs @ Vox Media
|
||||
|
||||
References
|
||||
© 2024 [69]Vox Media, LLC. All Rights Reserved
|
||||
|
||||
Visible links:
|
||||
1. https://www.theverge.com/rss/index.xml
|
||||
2. https://www.theverge.com/2023/8/25/23845590/note-taking-apps-ai-chat-distractions-notion-roam-mem-obsidian#content
|
||||
3. https://www.theverge.com/
|
||||
4. https://www.theverge.com/
|
||||
5. https://www.theverge.com/tech
|
||||
6. https://www.theverge.com/reviews
|
||||
7. https://www.theverge.com/science
|
||||
8. https://www.theverge.com/entertainment
|
||||
9. https://www.theverge.com/platformer
|
||||
10. https://www.theverge.com/apps
|
||||
11. https://www.theverge.com/tech
|
||||
12. https://www.theverge.com/authors/casey-newton
|
||||
13. https://www.platformer.news/
|
||||
14. https://www.wsj.com/articles/americas-farmers-are-bogged-down-by-data-524f0a4d
|
||||
15. https://roamresearch.com/
|
||||
16. https://www.platformer.news/p/notes-on-a-year-using-roam-research
|
||||
17. https://maggieappleton.com/bidirectionals
|
||||
18. https://obsidian.md/
|
||||
19. https://get.mem.ai/
|
||||
20. https://www.nytimes.com/2023/05/28/opinion/artificial-intelligence-thinking-minds-concentration.html
|
||||
21. https://www.harpercollins.com/products/attention-span-gloria-mark?variant=40346590117922
|
||||
22. https://notes.andymatuschak.org/§Note-writing_systems
|
||||
23. https://notes.andymatuschak.org/§Note-writing_systems?stackedNotes=zsRuFxYgckGS81tr2eiBAP
|
||||
24. https://notes.andymatuschak.org/§Note-writing_systems?stackedNotes=z8V2q398qu89vdJ73N2BEYCgevMqux3yxQUAC&stackedNotes=z7kEFe6NfUSgtaDuUjST1oczKKzQQeQWk4Dbc
|
||||
25. https://www.platformer.news/embed
|
||||
26. https://www.theverge.com/24040075/apple-vision-pro-hands-on-virtual-reality
|
||||
27. https://www.theverge.com/2024/1/16/24040093/google-layoffs-ad-sales-team
|
||||
28. https://www.theverge.com/2024/1/15/24038711/microsoft-copilot-pro-office-ai-apps
|
||||
29. https://www.theverge.com/2024/1/14/24038397/google-layoffs-just-the-beginning
|
||||
30. https://www.theverge.com/2024/1/15/24034324/apple-watch-ban-us-customs-decision
|
||||
31. https://www.voxmedia.com/legal/terms-of-use
|
||||
32. https://www.voxmedia.com/legal/privacy-notice
|
||||
33. https://policies.google.com/privacy
|
||||
34. https://policies.google.com/terms
|
||||
35. https://www.theverge.com/apps
|
||||
36. https://www.theverge.com/2023/10/19/23923648/whatsapp-view-once-voice-messages-notes-beta-test
|
||||
37. https://www.theverge.com/2023/10/19/23923113/whatsapp-stay-logged-in-two-accounts-meta
|
||||
38. https://www.theverge.com/2023/10/18/23922707/pixel-pals-language-widget-christian-selig-apollo
|
||||
39. https://www.theverge.com/2023/10/18/23922150/irs-direct-file-pilot-available-13-states-income-tax-2024
|
||||
40. https://www.voxmedia.com/legal/terms-of-use
|
||||
41. https://www.voxmedia.com/legal/privacy-notice
|
||||
42. https://www.voxmedia.com/legal/cookie-policy
|
||||
43. https://www.theverge.com/contact
|
||||
44. https://www.voxmedia.com/pages/licensing
|
||||
45. https://www.voxmedia.com/legal/accessibility
|
||||
46. https://status.voxmedia.com/
|
||||
47. https://www.theverge.com/pages/how-we-rate
|
||||
48. https://www.theverge.com/contact-the-verge
|
||||
49. https://www.theverge.com/a/tip-us-secure-contact-email
|
||||
50. https://www.theverge.com/community-guidelines
|
||||
51. https://www.theverge.com/about-the-verge
|
||||
52. https://www.theverge.com/ethics-statement
|
||||
53. https://www.voxmedia.com/vox-advertising
|
||||
54. https://jobs.voxmedia.com/
|
||||
55. https://www.voxmedia.com/
|
||||
|
||||
Hidden links:
|
||||
57. https://www.theverge.com/
|
||||
58. https://www.theverge.com/
|
||||
59. http://theverge.com/
|
||||
60. http://theverge.com/
|
||||
61. http://theverge.com/
|
||||
62. http://theverge.com/
|
||||
63. https://www.theverge.com/
|
||||
References:
|
||||
|
||||
[1] https://www.theverge.com/2023/8/25/23845590/note-taking-apps-ai-chat-distractions-notion-roam-mem-obsidian#content
|
||||
[2] https://www.theverge.com/
|
||||
[3] https://www.theverge.com/
|
||||
[4] https://www.theverge.com/
|
||||
[5] https://www.theverge.com/tech
|
||||
[6] https://www.theverge.com/reviews
|
||||
[7] https://www.theverge.com/science
|
||||
[8] https://www.theverge.com/entertainment
|
||||
[10] https://www.theverge.com/
|
||||
[12] https://www.theverge.com/platformer
|
||||
[13] https://www.theverge.com/apps
|
||||
[14] https://www.theverge.com/tech
|
||||
[15] https://www.theverge.com/authors/casey-newton
|
||||
[20] https://www.platformer.news/
|
||||
[21] https://www.wsj.com/articles/americas-farmers-are-bogged-down-by-data-524f0a4d
|
||||
[22] https://roamresearch.com/
|
||||
[23] https://www.platformer.news/p/notes-on-a-year-using-roam-research
|
||||
[24] https://maggieappleton.com/bidirectionals
|
||||
[25] https://obsidian.md/
|
||||
[26] https://get.mem.ai/
|
||||
[27] https://www.nytimes.com/2023/05/28/opinion/artificial-intelligence-thinking-minds-concentration.html
|
||||
[28] https://www.harpercollins.com/products/attention-span-gloria-mark?variant=40346590117922
|
||||
[29] https://notes.andymatuschak.org/%C2%A7Note-writing_systems
|
||||
[30] https://notes.andymatuschak.org/%C2%A7Note-writing_systems?stackedNotes=zsRuFxYgckGS81tr2eiBAP
|
||||
[31] https://notes.andymatuschak.org/%C2%A7Note-writing_systems?stackedNotes=z8V2q398qu89vdJ73N2BEYCgevMqux3yxQUAC&stackedNotes=z7kEFe6NfUSgtaDuUjST1oczKKzQQeQWk4Dbc
|
||||
[33] https://www.theverge.com/24040075/apple-vision-pro-hands-on-virtual-reality
|
||||
[34] https://www.theverge.com/2024/1/16/24040093/google-layoffs-ad-sales-team
|
||||
[35] https://www.theverge.com/2024/1/16/24040562/samsung-unpacked-galaxy-ai-s24
|
||||
[36] https://www.theverge.com/2024/1/16/24039883/google-incognito-mode-tracking-lawsuit-notice-change
|
||||
[37] https://www.theverge.com/24039832/nvidia-rtx-4070-super-review-gpu-graphics-card-benchmark-test
|
||||
[40] https://www.voxmedia.com/legal/terms-of-use
|
||||
[41] https://www.voxmedia.com/legal/privacy-notice
|
||||
[42] https://policies.google.com/privacy
|
||||
[43] https://policies.google.com/terms
|
||||
[44] http://theverge.com/
|
||||
[45] http://theverge.com/
|
||||
[46] https://www.theverge.com/apps
|
||||
[47] https://www.theverge.com/2023/10/19/23923648/whatsapp-view-once-voice-messages-notes-beta-test
|
||||
[48] https://www.theverge.com/2023/10/19/23923113/whatsapp-stay-logged-in-two-accounts-meta
|
||||
[49] https://www.theverge.com/2023/10/18/23922707/pixel-pals-language-widget-christian-selig-apollo
|
||||
[50] https://www.theverge.com/2023/10/18/23922150/irs-direct-file-pilot-available-13-states-income-tax-2024
|
||||
[51] http://theverge.com/
|
||||
[52] http://theverge.com/
|
||||
[53] https://www.theverge.com/
|
||||
[54] https://www.voxmedia.com/legal/terms-of-use
|
||||
[55] https://www.voxmedia.com/legal/privacy-notice
|
||||
[56] https://www.voxmedia.com/legal/cookie-policy
|
||||
[57] https://www.theverge.com/contact
|
||||
[58] https://www.voxmedia.com/pages/licensing
|
||||
[59] https://www.voxmedia.com/legal/accessibility
|
||||
[60] https://status.voxmedia.com/
|
||||
[61] https://www.theverge.com/pages/how-we-rate
|
||||
[62] https://www.theverge.com/contact-the-verge
|
||||
[63] https://www.theverge.com/a/tip-us-secure-contact-email
|
||||
[64] https://www.theverge.com/community-guidelines
|
||||
[65] https://www.theverge.com/about-the-verge
|
||||
[66] https://www.theverge.com/ethics-statement
|
||||
[67] https://www.voxmedia.com/vox-advertising
|
||||
[68] https://jobs.voxmedia.com/
|
||||
[69] https://www.voxmedia.com/
|
||||
|
||||
@@ -1,153 +1,144 @@
|
||||
[tr?id=588737784839840&ev=PageView&noscript=1] #[1]Valet.
|
||||
*
|
||||
|
||||
IFRAME: [2]https://www.googletagmanager.com/ns.html?id=GTM-TKWJ6RK
|
||||
• [1]☰
|
||||
• [2]Valet.
|
||||
• Search Valet.
|
||||
|
||||
* [3]☰
|
||||
* [4]Valet.
|
||||
* (BUTTON) Search Valet.
|
||||
• [4]Valet.
|
||||
|
||||
* [5]Valet.
|
||||
• [5]Style
|
||||
• [6]Living
|
||||
• [7]Health & Fitness
|
||||
• [8]Grooming
|
||||
• [9]Personal Shopper
|
||||
• [10]The Handbook
|
||||
|
||||
* [6]Style
|
||||
* [7]Living
|
||||
* [8]Health & Fitness
|
||||
* [9]Grooming
|
||||
* [10]Personal Shopper
|
||||
* [11]The Handbook
|
||||
Search Valet.
|
||||
|
||||
(BUTTON) Search Valet.
|
||||
• [12]☰
|
||||
• [13]Valet.
|
||||
• Search Valet.
|
||||
|
||||
* [12]☰
|
||||
* [13]Valet.
|
||||
* (BUTTON) Search Valet.
|
||||
• [15]Valet.
|
||||
|
||||
* [14]Valet.
|
||||
• [16]Style
|
||||
• [17]Living
|
||||
• [18]Health & Fitness
|
||||
• [19]Grooming
|
||||
• [20]Personal Shopper
|
||||
• [21]The Handbook
|
||||
|
||||
* [15]Style
|
||||
* [16]Living
|
||||
* [17]Health & Fitness
|
||||
* [18]Grooming
|
||||
* [19]Personal Shopper
|
||||
* [20]The Handbook
|
||||
Search Valet.
|
||||
×
|
||||
|
||||
(BUTTON) Search Valet.
|
||||
(BUTTON) ×
|
||||
* [21]The Latest
|
||||
* [22]Style
|
||||
* [23]Living
|
||||
* [24]Health & Fitness
|
||||
* [25]Grooming
|
||||
* [26]Personal Shopper
|
||||
* [27]The Handbook
|
||||
|
||||
(BUTTON) ⨯
|
||||
Search ... ____________________
|
||||
• [24]The Latest
|
||||
• [25]Style
|
||||
• [26]Living
|
||||
• [27]Health & Fitness
|
||||
• [28]Grooming
|
||||
• [29]Personal Shopper
|
||||
• [30]The Handbook
|
||||
|
||||
⨯
|
||||
Search ... [35][ ]
|
||||
Hit enter to search or ESC to close
|
||||
|
||||
[28]31 Days
|
||||
[36]31 Days
|
||||
|
||||
Day 9
|
||||
|
||||
You Can Slow Down Time
|
||||
|
||||
*
|
||||
*
|
||||
*
|
||||
• [37]
|
||||
• [38]
|
||||
• [39]
|
||||
|
||||
Gears
|
||||
“Where does the time go?” We've all asked this at one time or another and it
|
||||
only gets more common the older you get. Remember how long holiday breaks or
|
||||
summer vacation felt like when we were kids? Now, we leave the office on a
|
||||
Friday evening only to be jolted into the realization that it's now Sunday
|
||||
night and we barely recall anything from the weekend. Entire years seem to
|
||||
speed by so fast nowadays, right?
|
||||
|
||||
“Where does the time go?” We've all asked this at one time or another
|
||||
and it only gets more common the older you get. Remember how long
|
||||
holiday breaks or summer vacation felt like when we were kids? Now, we
|
||||
leave the office on a Friday evening only to be jolted into the
|
||||
realization that it's now Sunday night and we barely recall anything
|
||||
from the weekend. Entire years seem to speed by so fast nowadays,
|
||||
right?
|
||||
Gears
|
||||
This perception of time moving at a leisurely pace in childhood, and then
|
||||
quickening as we become adults, is a common experience, according to
|
||||
neuroscientists. It's due to a few factors, says [40]Dr. Santosh Kesari, a
|
||||
board-certified neurologist and director of Neuro-oncology at Pacific
|
||||
Neuroscience Institute.
|
||||
|
||||
This perception of time moving at a leisurely pace in childhood, and
|
||||
then quickening as we become adults, is a common experience, according
|
||||
to neuroscientists. It's due to a few factors, says [29]Dr. Santosh
|
||||
Kesari, a board-certified neurologist and director of Neuro-oncology at
|
||||
Pacific Neuroscience Institute.
|
||||
First of all, when we're children, a year of life amounts to much more time of
|
||||
existence, percentage-wise. "For a 10-year-old, one year is 10 percent of their
|
||||
lives," says Kesari. "For a 60-year-old, one year is less than two percent of
|
||||
their lives." But more importantly, we're constantly being introduced to new
|
||||
things and ideas when we're young that leave lasting impressions on our
|
||||
memories. "We gauge time by memorable events and fewer new things occur as we
|
||||
age to remember," he says. "And this makes it seem like childhood lasted
|
||||
longer."
|
||||
|
||||
First of all, when we're children, a year of life amounts to much more
|
||||
time of existence, percentage-wise. "For a 10-year-old, one year is 10
|
||||
percent of their lives," says Kesari. "For a 60-year-old, one year is
|
||||
less than two percent of their lives." But more importantly, we're
|
||||
constantly being introduced to new things and ideas when we're young
|
||||
that leave lasting impressions on our memories. "We gauge time by
|
||||
memorable events and fewer new things occur as we age to remember," he
|
||||
says. "And this makes it seem like childhood lasted longer."
|
||||
Which means by paying attention, staying curious and actively noticing new
|
||||
things, we can slow down our perception of time. David Eagleman, a
|
||||
neuroscientist who studies time perception, was profiled in [41]The New Yorker
|
||||
and called time "a rubbery thing" that changes based on mental engagement.
|
||||
|
||||
Which means by paying attention, staying curious and actively noticing
|
||||
new things, we can slow down our perception of time. David Eagleman, a
|
||||
neuroscientist who studies time perception, was profiled in [30]The New
|
||||
Yorker and called time "a rubbery thing" that changes based on mental
|
||||
engagement.
|
||||
|
||||
"Time stretches out when you really turn your brain resources on, and
|
||||
when you say, 'Oh, I got this, everything is as expected,' it shrinks
|
||||
up," he explained. "The more familiar the world becomes, the less
|
||||
information your brain writes down, and the more quickly time seems to
|
||||
pass." Here are three ways to make your life richer and more memorable,
|
||||
thus allowing your time to expand.
|
||||
"Time stretches out when you really turn your brain resources on, and when you
|
||||
say, 'Oh, I got this, everything is as expected,' it shrinks up," he explained.
|
||||
"The more familiar the world becomes, the less information your brain writes
|
||||
down, and the more quickly time seems to pass." Here are three ways to make
|
||||
your life richer and more memorable, thus allowing your time to expand.
|
||||
|
||||
Embrace New Experiences
|
||||
|
||||
Routines are necessary in life but are the enemy when it comes to
|
||||
extending time. As we touched on previously, the lack of new
|
||||
experiences is what makes time appear to speed up, so introducing
|
||||
novelty into your life is the key to slowing down your perception of
|
||||
time. By trying new things—accepting invitations and challenges or
|
||||
learning a new skill or hobby—this will form "accessible memory
|
||||
anchors," as a neurologist might put it. It's as simple as switching up
|
||||
your coffee order or getting a few coworkers to try a new place for
|
||||
lunch or afterwork drinks.
|
||||
Routines are necessary in life but are the enemy when it comes to extending
|
||||
time. As we touched on previously, the lack of new experiences is what makes
|
||||
time appear to speed up, so introducing novelty into your life is the key to
|
||||
slowing down your perception of time. By trying new things—accepting
|
||||
invitations and challenges or learning a new skill or hobby—this will form
|
||||
"accessible memory anchors," as a neurologist might put it. It's as simple as
|
||||
switching up your coffee order or getting a few coworkers to try a new place
|
||||
for lunch or afterwork drinks.
|
||||
|
||||
Be More Mindful
|
||||
|
||||
In the past few years, there has been a lot of talk about mindfulness.
|
||||
But it's often in the context of [31]meditation. In terms of slowing
|
||||
down time, you don't necessarily need to start each day meditating.
|
||||
Instead, you'll want to become more mindful in everyday life. Meaning
|
||||
you'll want to focus all your attention and energy to what you're
|
||||
doing, seeing and experiencing right now. Instead of multi-tasking and
|
||||
doing three things at once, try to be fully engrossed in what's right
|
||||
in front of you. A [32]study by Harvard Medical School found that those
|
||||
in an eight-week mindfulness-based program experienced changes in the
|
||||
concentration of gray matter areas in the brain responsible for
|
||||
In the past few years, there has been a lot of talk about mindfulness. But it's
|
||||
often in the context of [42]meditation. In terms of slowing down time, you
|
||||
don't necessarily need to start each day meditating. Instead, you'll want to
|
||||
become more mindful in everyday life. Meaning you'll want to focus all your
|
||||
attention and energy to what you're doing, seeing and experiencing right now.
|
||||
Instead of multi-tasking and doing three things at once, try to be fully
|
||||
engrossed in what's right in front of you. A [43]study by Harvard Medical
|
||||
School found that those in an eight-week mindfulness-based program experienced
|
||||
changes in the concentration of gray matter areas in the brain responsible for
|
||||
learning, memory and emotion regulation.
|
||||
|
||||
Keep Track of Progress
|
||||
|
||||
We've extolled the virtues of [33]journaling before. But it definitely
|
||||
comes in handy to help you slow time by taking time to reflect on your
|
||||
day, your thoughts and your personal progress. It provides the context
|
||||
to make life events relevant, and more importantly, memorable. That
|
||||
context is key. A [34]study by the Wharton School found that we
|
||||
underestimate the passage of time—especially when there aren't related
|
||||
memories to build upon knowledge. It illustrated why you can feel
|
||||
regretful when another birthday rolls around too quickly. Journaling
|
||||
and tracking your progress will ensure you don't feel unaccomplished.
|
||||
The positive byproduct is that accountability will also serve as
|
||||
motivation to do more.
|
||||
We've extolled the virtues of [44]journaling before. But it definitely comes in
|
||||
handy to help you slow time by taking time to reflect on your day, your
|
||||
thoughts and your personal progress. It provides the context to make life
|
||||
events relevant, and more importantly, memorable. That context is key. A [45]
|
||||
study by the Wharton School found that we underestimate the passage of
|
||||
time—especially when there aren't related memories to build upon knowledge. It
|
||||
illustrated why you can feel regretful when another birthday rolls around too
|
||||
quickly. Journaling and tracking your progress will ensure you don't feel
|
||||
unaccomplished. The positive byproduct is that accountability will also serve
|
||||
as motivation to do more.
|
||||
|
||||
FYI
|
||||
|
||||
[35]Matt Damon aging
|
||||
[46]
|
||||
|
||||
The average life expectancy in the United States is 78.6 years,
|
||||
according to the [36]Centers for Disease Control and Prevention.
|
||||
The average life expectancy in the United States is 78.6 years, according to
|
||||
the [47]Centers for Disease Control and Prevention.
|
||||
|
||||
[48]
|
||||
|
||||
«
|
||||
The Win-Win Kitchen Swap
|
||||
|
||||
Day 8
|
||||
|
||||
The Win-Win Kitchen Swap
|
||||
Be Your Own Style God
|
||||
|
||||
[49]
|
||||
|
||||
Day 10
|
||||
|
||||
@@ -155,228 +146,291 @@ FYI
|
||||
|
||||
»
|
||||
|
||||
[37]31 Days
|
||||
[50]31 Days
|
||||
|
||||
Volume 12 / Year 2020
|
||||
*
|
||||
*
|
||||
*
|
||||
* [38]Boost Your Coffee
|
||||
|
||||
•
|
||||
•
|
||||
•
|
||||
• [51] Boost Your Coffee
|
||||
|
||||
1
|
||||
|
||||
Boost
|
||||
Your Coffee
|
||||
* [39]The Trick to Achieving Your Goals
|
||||
|
||||
• [52] The Trick to Achieving Your Goals
|
||||
|
||||
2
|
||||
|
||||
The Trick to
|
||||
Achieving Your Goals
|
||||
* [40]Don't Forget the Dry Cleaner
|
||||
|
||||
• [53] Don't Forget the Dry Cleaner
|
||||
|
||||
3
|
||||
|
||||
Don't Forget
|
||||
the Dry Cleaner
|
||||
* [41]Stay Hydrated
|
||||
|
||||
• [54] Stay Hydrated
|
||||
|
||||
4
|
||||
|
||||
Stay
|
||||
Hydrated
|
||||
* [42]Save More Money
|
||||
|
||||
• [55] Save More Money
|
||||
|
||||
5
|
||||
|
||||
Save
|
||||
More Money
|
||||
* [43]Prioritize Relaxation
|
||||
|
||||
• [56] Prioritize Relaxation
|
||||
|
||||
6
|
||||
|
||||
Prioritize
|
||||
Relaxation
|
||||
* [44]Get the Most From Your Cast Iron
|
||||
|
||||
• [57] Get the Most From Your Cast Iron
|
||||
|
||||
7
|
||||
|
||||
Get the Most From
|
||||
Your Cast Iron
|
||||
* [45]Use Less Paper Towels
|
||||
|
||||
• [58] Use Less Paper Towels
|
||||
|
||||
8
|
||||
|
||||
Use Less
|
||||
Paper Towels
|
||||
* [46]You Can Slow Down Time
|
||||
|
||||
• [59] You Can Slow Down Time
|
||||
|
||||
9
|
||||
|
||||
You Can
|
||||
Slow Down Time
|
||||
* [47]Be Your Own Style God
|
||||
|
||||
• [60] Be Your Own Style God
|
||||
|
||||
10
|
||||
|
||||
Be Your Own
|
||||
Style God
|
||||
* [48]How to Deal With Failure
|
||||
|
||||
• [61] How to Deal With Failure
|
||||
|
||||
11
|
||||
|
||||
How to Deal
|
||||
With Failure
|
||||
* [49]Stop Sitting So Much
|
||||
|
||||
• [62] Stop Sitting So Much
|
||||
|
||||
12
|
||||
|
||||
Stop Sitting
|
||||
So Much
|
||||
* [50]Dress for Productivity
|
||||
|
||||
• [63] Dress for Productivity
|
||||
|
||||
13
|
||||
|
||||
Dress for
|
||||
Productivity
|
||||
* [51]Improve Your Gut Health
|
||||
|
||||
• [64] Improve Your Gut Health
|
||||
|
||||
14
|
||||
|
||||
Improve Your
|
||||
Gut Health
|
||||
* [52]Become an Early Riser
|
||||
|
||||
• [65] Become an Early Riser
|
||||
|
||||
15
|
||||
|
||||
Become an
|
||||
Early Riser
|
||||
* [53]Boost Your Credit Score
|
||||
|
||||
• [66] Boost Your Credit Score
|
||||
|
||||
16
|
||||
|
||||
Boost Your
|
||||
Credit Score
|
||||
* [54]How to Read a Whiskey Label
|
||||
|
||||
• [67] How to Read a Whiskey Label
|
||||
|
||||
17
|
||||
|
||||
How to Read
|
||||
a Whiskey Label
|
||||
* [55]Go Solo
|
||||
|
||||
• [68] Go Solo
|
||||
|
||||
18
|
||||
|
||||
Go
|
||||
Solo
|
||||
* [56]Clean Your Jewelry and Watches
|
||||
|
||||
• [69] Clean Your Jewelry and Watches
|
||||
|
||||
19
|
||||
|
||||
Clean Your Jewelry
|
||||
and Watches
|
||||
* [57]Boost Your Testosterone
|
||||
|
||||
• [70] Boost Your Testosterone
|
||||
|
||||
20
|
||||
|
||||
Boost Your
|
||||
Testosterone
|
||||
* [58]Swear at Work
|
||||
|
||||
• [71] Swear at Work
|
||||
|
||||
21
|
||||
|
||||
Swear
|
||||
at Work
|
||||
* [59]Look Younger
|
||||
|
||||
• [72] Look Younger
|
||||
|
||||
22
|
||||
|
||||
Look
|
||||
Younger
|
||||
* [60]Boost Your Creativity
|
||||
|
||||
• [73] Boost Your Creativity
|
||||
|
||||
23
|
||||
|
||||
Boost Your
|
||||
Creativity
|
||||
* [61]Worry Away
|
||||
|
||||
• [74] Worry Away
|
||||
|
||||
24
|
||||
|
||||
Worry
|
||||
Away
|
||||
* [62]Make Better Conversation
|
||||
|
||||
• [75] Make Better Conversation
|
||||
|
||||
25
|
||||
|
||||
Make Better
|
||||
Conversation
|
||||
* [63]Overcome Imposter Syndrome
|
||||
|
||||
• [76] Overcome Imposter Syndrome
|
||||
|
||||
26
|
||||
|
||||
Overcome
|
||||
Imposter Syndrome
|
||||
* [64]How to Stay Focused at Work
|
||||
|
||||
• [77] How to Stay Focused at Work
|
||||
|
||||
27
|
||||
|
||||
How to Stay
|
||||
Focused at Work
|
||||
* [65]Save Your Face
|
||||
|
||||
• [78] Save Your Face
|
||||
|
||||
28
|
||||
|
||||
Save
|
||||
Your Face
|
||||
* [66]Trust Your Gut
|
||||
|
||||
• [79] Trust Your Gut
|
||||
|
||||
29
|
||||
|
||||
Trust
|
||||
Your Gut
|
||||
* [67]Optimize Your Breath
|
||||
|
||||
• [80] Optimize Your Breath
|
||||
|
||||
30
|
||||
|
||||
Optimize
|
||||
Your Breath
|
||||
* [68]Sharpen Your Knives
|
||||
|
||||
• [81] Sharpen Your Knives
|
||||
|
||||
31
|
||||
|
||||
Sharpen
|
||||
Your Knives
|
||||
|
||||
[69]See all “31 Days” features »
|
||||
[82]See all “31 Days” features »
|
||||
|
||||
Advertisement
|
||||
|
||||
[70]Valet. homepage
|
||||
[83]
|
||||
|
||||
Your concierge to a well-styled life.
|
||||
|
||||
Established in 2008
|
||||
|
||||
Made in California
|
||||
* [71]Facebook
|
||||
* [72]Twitter
|
||||
* [73]Instagram
|
||||
* [74]Valet. App
|
||||
* [75]RSS
|
||||
|
||||
* [76]Style
|
||||
* [77]Trends
|
||||
* [78]Products
|
||||
* [79]Profiles & Features
|
||||
* [80]How Tos
|
||||
• [84]Facebook
|
||||
• [85]Twitter
|
||||
• [86]Instagram
|
||||
• [87]Valet. App
|
||||
• [88]RSS
|
||||
|
||||
* [81]Living
|
||||
* [82]Interiors
|
||||
* [83]Gear
|
||||
* [84]Food & Drink
|
||||
* [85]Travel
|
||||
* [86]Sex & Relationships
|
||||
* [87]Culture
|
||||
* [88]Money
|
||||
* [89]Career
|
||||
* [90]Features
|
||||
• [89]Style
|
||||
• [90]Trends
|
||||
• [91]Products
|
||||
• [92]Profiles & Features
|
||||
• [93]How Tos
|
||||
|
||||
* [91]Grooming
|
||||
* [92]Skin Care
|
||||
* [93]Hair Care
|
||||
* [94]Shaving
|
||||
* [95]Fragrances
|
||||
* [96]Profiles & Features
|
||||
* [97]How Tos
|
||||
* [98]My Morning Routine
|
||||
• [94]Living
|
||||
• [95]Interiors
|
||||
• [96]Gear
|
||||
• [97]Food & Drink
|
||||
• [98]Travel
|
||||
• [99]Sex & Relationships
|
||||
• [100]Culture
|
||||
• [101]Money
|
||||
• [102]Career
|
||||
• [103]Features
|
||||
|
||||
* [99]Health & Fitness
|
||||
* [100]Diet & Nutrition
|
||||
* [101]Fitness
|
||||
* [102]Strength Training
|
||||
* [103]Features
|
||||
* [104]The Inside Man
|
||||
• [104]Grooming
|
||||
• [105]Skin Care
|
||||
• [106]Hair Care
|
||||
• [107]Shaving
|
||||
• [108]Fragrances
|
||||
• [109]Profiles & Features
|
||||
• [110]How Tos
|
||||
• [111]My Morning Routine
|
||||
|
||||
* [105]Personal Shopper
|
||||
* [106]Sales & Deals
|
||||
* [107]Seasonal Calendar
|
||||
• [112]Health & Fitness
|
||||
• [113]Diet & Nutrition
|
||||
• [114]Fitness
|
||||
• [115]Strength Training
|
||||
• [116]Features
|
||||
• [117]The Inside Man
|
||||
|
||||
* [108]The
|
||||
• [118]Personal Shopper
|
||||
• [119]Sales & Deals
|
||||
• [120]Seasonal Calendar
|
||||
|
||||
• [121]The
|
||||
Handbook
|
||||
* [109]Style
|
||||
* [110]Grooming
|
||||
* [111]Living
|
||||
* [112]31 Days Series
|
||||
• [122]Style
|
||||
• [123]Grooming
|
||||
• [124]Living
|
||||
• [125]31 Days Series
|
||||
|
||||
Subscribe to Valet.
|
||||
|
||||
@@ -384,152 +438,149 @@ Your Knives
|
||||
disappointed.
|
||||
|
||||
Enter Your Email Address ...
|
||||
____________________
|
||||
[X]
|
||||
|
||||
[126][ ]
|
||||
[127][*]
|
||||
The
|
||||
Obtainer
|
||||
[X]
|
||||
[128][*]
|
||||
The Daily Valet.
|
||||
[ ]
|
||||
[129][ ]
|
||||
Daily
|
||||
Digest
|
||||
[ ]
|
||||
[130][ ]
|
||||
Weekly
|
||||
Digest
|
||||
____________________
|
||||
[131][ ]
|
||||
|
||||
Sign Up
|
||||
Subscribe
|
||||
|
||||
[113]About Valet. | [114]Advertising on Valet.
|
||||
[132][Subscribe]
|
||||
[134]About Valet. | [135]Advertising on Valet.
|
||||
|
||||
© Copyright 2024 Valet Media LLC - All Rights
|
||||
Reserved. | [115]Privacy Policy | [116]Terms & Conditions
|
||||
[tr?id=130137150768080&ev=PageView&noscript=1]
|
||||
© Copyright 2024 Valet Media LLC - All Rights Reserved. | [136]Privacy Policy
|
||||
| [137]Terms & Conditions
|
||||
|
||||
References
|
||||
*
|
||||
|
||||
Visible links:
|
||||
1. https://valetmag.com/distribution/rss_all.xml
|
||||
2. https://www.googletagmanager.com/ns.html?id=GTM-TKWJ6RK
|
||||
3. https://www.valetmag.com/the-handbook/living/how-to-slow-down-time.php
|
||||
4. https://www.valetmag.com/
|
||||
5. https://www.valetmag.com/
|
||||
6. https://www.valetmag.com/style/
|
||||
7. https://www.valetmag.com/living/
|
||||
8. https://www.valetmag.com/health-fitness/
|
||||
9. https://www.valetmag.com/grooming/
|
||||
10. http://www.valetmag.com/personal-shopper/
|
||||
11. http://www.valetmag.com/the-handbook/
|
||||
12. https://www.valetmag.com/the-handbook/living/how-to-slow-down-time.php
|
||||
13. https://www.valetmag.com/
|
||||
14. https://www.valetmag.com/
|
||||
15. https://www.valetmag.com/style/
|
||||
16. https://www.valetmag.com/living/
|
||||
17. https://www.valetmag.com/health-fitness/
|
||||
18. https://www.valetmag.com/grooming/
|
||||
19. http://www.valetmag.com/personal-shopper/
|
||||
20. http://www.valetmag.com/the-handbook/
|
||||
21. https://www.valetmag.com/
|
||||
22. https://www.valetmag.com/style/
|
||||
23. https://www.valetmag.com/living/
|
||||
24. https://www.valetmag.com/health-fitness/
|
||||
25. https://www.valetmag.com/grooming/
|
||||
26. http://www.valetmag.com/personal-shopper/
|
||||
27. http://www.valetmag.com/the-handbook/
|
||||
28. https://www.valetmag.com/the-handbook/features/31-days/
|
||||
29. https://www.pacificneuroscienceinstitute.org/people/santosh-kesari/
|
||||
30. https://www.newyorker.com/magazine/2011/04/25/the-possibilian
|
||||
31. http://www.valetmag.com/living/features/2016/four-ways-meditation-will-improve-your-brain-021716.php
|
||||
32. https://www.ncbi.nlm.nih.gov/pmc/articles/PMC3004979/
|
||||
33. http://www.valetmag.com/the-handbook/living/benefits-of-journaling.php
|
||||
34. https://www.jstor.org/stable/41062175?seq=1
|
||||
35. https://www.cdc.gov/nchs/fastats/life-expectancy.htm
|
||||
36. https://www.cdc.gov/nchs/fastats/life-expectancy.htm
|
||||
37. https://www.valetmag.com/the-handbook/features/31-days/
|
||||
38. https://www.valetmag.com/the-handbook/living/coffee-boost-nutrition.php
|
||||
39. https://www.valetmag.com/the-handbook/living/how-to-accomplish-your-goals.php
|
||||
40. https://www.valetmag.com/the-handbook/style/dry-cleaning-benefits.php
|
||||
41. https://www.valetmag.com/the-handbook/living/how-much-water-should-you-drink-per-day.php
|
||||
42. https://www.valetmag.com/the-handbook/living/how-to-save-away-more-money.php
|
||||
43. https://www.valetmag.com/the-handbook/living/prioritize-relaxation-how-to.php
|
||||
44. https://www.valetmag.com/the-handbook/living/cast-iron-pan-seasoning-guide.php
|
||||
45. https://www.valetmag.com/the-handbook/living/use-less-paper-towels.php
|
||||
46. https://www.valetmag.com/the-handbook/living/how-to-slow-down-time.php
|
||||
47. https://www.valetmag.com/the-handbook/style/be-your-own-style-god.php
|
||||
48. https://www.valetmag.com/the-handbook/living/how-to-deal-with-failure.php
|
||||
49. https://www.valetmag.com/the-handbook/living/stop-sitting-so-much.php
|
||||
50. https://www.valetmag.com/the-handbook/style/rules-for-office-wardrobes.php
|
||||
51. https://www.valetmag.com/the-handbook/living/improve-your-gut-health-microbiome.php
|
||||
52. https://www.valetmag.com/the-handbook/living/how-to-wake-up-early.php
|
||||
53. https://www.valetmag.com/the-handbook/living/boost-your-credit-score.php
|
||||
54. https://www.valetmag.com/the-handbook/living/how-to-read-whiskey-label.php
|
||||
55. https://www.valetmag.com/the-handbook/living/alone-time-benefits.php
|
||||
56. https://www.valetmag.com/the-handbook/style/watch-jewelry-cleaning-guide.php
|
||||
57. https://www.valetmag.com/the-handbook/living/boost-your-testosterone.php
|
||||
58. https://www.valetmag.com/the-handbook/living/swear-at-work.php
|
||||
59. https://www.valetmag.com/the-handbook/grooming/how-to-look-younger.php
|
||||
60. https://www.valetmag.com/the-handbook/living/boost-your-creativity.php
|
||||
61. https://www.valetmag.com/the-handbook/living/productive-worrying.php
|
||||
62. https://www.valetmag.com/the-handbook/living/make-better-conversation.php
|
||||
63. https://www.valetmag.com/the-handbook/living/overcome-imposter-syndrome.php
|
||||
64. https://www.valetmag.com/the-handbook/living/how-to-stay-focused-at-work.php
|
||||
65. https://www.valetmag.com/the-handbook/grooming/mens-face-exfoliating-scrubs.php
|
||||
66. https://www.valetmag.com/the-handbook/living/trust-your-gut.php
|
||||
67. https://www.valetmag.com/the-handbook/living/optimize-your-breathing.php
|
||||
68. https://www.valetmag.com/the-handbook/living/sharpen-your-kitchen-knives.php
|
||||
69. https://www.valetmag.com/the-handbook/features/31-days/
|
||||
70. https://www.valetmag.com/
|
||||
71. https://www.facebook.com/valetmag
|
||||
72. https://twitter.com/valetmag
|
||||
73. https://www.instagram.com/valetmag/
|
||||
74. http://www.valetmag.com/distribution/app.php
|
||||
75. http://www.valetmag.com/distribution/rss.php
|
||||
76. https://www.valetmag.com/style/
|
||||
77. https://www.valetmag.com/style/trends/
|
||||
78. https://www.valetmag.com/style/products/
|
||||
79. https://www.valetmag.com/style/profiles-features/
|
||||
80. https://www.valetmag.com/style/how-tos/
|
||||
81. https://www.valetmag.com/living/
|
||||
82. https://www.valetmag.com/living/interiors/
|
||||
83. https://www.valetmag.com/living/gear/
|
||||
84. https://www.valetmag.com/living/food-drink/
|
||||
85. https://www.valetmag.com/living/travel/
|
||||
86. https://www.valetmag.com/living/sex-relationships/
|
||||
87. https://www.valetmag.com/living/culture/
|
||||
88. https://www.valetmag.com/living/money/
|
||||
89. https://www.valetmag.com/living/career/
|
||||
90. https://www.valetmag.com/living/features/
|
||||
91. https://www.valetmag.com/grooming/
|
||||
92. https://www.valetmag.com/grooming/skin-care/
|
||||
93. https://www.valetmag.com/grooming/hair-care/
|
||||
94. https://www.valetmag.com/grooming/shaving/
|
||||
95. https://www.valetmag.com/grooming/fragrances/
|
||||
96. https://www.valetmag.com/grooming/profiles-features/
|
||||
97. https://www.valetmag.com/grooming/how-tos/
|
||||
98. https://www.valetmag.com/grooming/profiles-features/my-morning-routine.php
|
||||
99. https://www.valetmag.com/health-fitness/
|
||||
100. https://www.valetmag.com/health-fitness/diet-nutrition/
|
||||
101. https://www.valetmag.com/health-fitness/fitness/
|
||||
102. https://www.valetmag.com/health-fitness/strength-training/
|
||||
103. https://www.valetmag.com/health-fitness/features/
|
||||
104. https://www.valetmag.com/health-fitness/the-inside-man/
|
||||
105. http://www.valetmag.com/personal-shopper/
|
||||
106. http://www.valetmag.com/personal-shopper/sales-deals/
|
||||
107. http://www.valetmag.com/personal-shopper/seasonal-calendar/
|
||||
108. http://www.valetmag.com/the-handbook/
|
||||
109. http://www.valetmag.com/the-handbook/style/
|
||||
110. http://www.valetmag.com/the-handbook/grooming/
|
||||
111. http://www.valetmag.com/the-handbook/living/
|
||||
112. https://www.valetmag.com/the-handbook/features/31-days/
|
||||
113. http://www.valetmag.com/about/
|
||||
114. http://www.valetmag.com/about/advertising/
|
||||
115. http://www.valetmag.com/about/privacy_policy.php
|
||||
116. http://www.valetmag.com/about/terms_conditions.php
|
||||
References:
|
||||
|
||||
Hidden links:
|
||||
118. https://www.facebook.com/sharer/sharer.php?u=https://www.valetmag.com/the-handbook/living/how-to-slow-down-time.php
|
||||
119. https://twitter.com/intent/tweet?text=You%20Can%20Slow%20Down%20Time%20%20https%3A%2F%2Fwww.valetmag.com%2Fthe-handbook%2Fliving%2Fhow-to-slow-down-time.php%20via%20@valetmag
|
||||
120. mailto:?subject=You%20Can%20Slow%20Down%20Time%20-%20Valet.&body=https%3A%2F%2Fwww.valetmag.com%2Fthe-handbook%2Fliving%2Fhow-to-slow-down-time.php%0D%0A%0D%0AHow%20to%20stop%20life%20from%20passing%20you%20by.
|
||||
121. https://www.valetmag.com/the-handbook/living/use-less-paper-towels.php
|
||||
122. https://www.valetmag.com/the-handbook/style/be-your-own-style-god.php
|
||||
[1] https://www.valetmag.com/the-handbook/living/how-to-slow-down-time.php#
|
||||
[2] https://www.valetmag.com/
|
||||
[4] https://www.valetmag.com/
|
||||
[5] https://www.valetmag.com/style/
|
||||
[6] https://www.valetmag.com/living/
|
||||
[7] https://www.valetmag.com/health-fitness/
|
||||
[8] https://www.valetmag.com/grooming/
|
||||
[9] http://www.valetmag.com/personal-shopper/
|
||||
[10] http://www.valetmag.com/the-handbook/
|
||||
[12] https://www.valetmag.com/the-handbook/living/how-to-slow-down-time.php#
|
||||
[13] https://www.valetmag.com/
|
||||
[15] https://www.valetmag.com/
|
||||
[16] https://www.valetmag.com/style/
|
||||
[17] https://www.valetmag.com/living/
|
||||
[18] https://www.valetmag.com/health-fitness/
|
||||
[19] https://www.valetmag.com/grooming/
|
||||
[20] http://www.valetmag.com/personal-shopper/
|
||||
[21] http://www.valetmag.com/the-handbook/
|
||||
[24] https://www.valetmag.com/
|
||||
[25] https://www.valetmag.com/style/
|
||||
[26] https://www.valetmag.com/living/
|
||||
[27] https://www.valetmag.com/health-fitness/
|
||||
[28] https://www.valetmag.com/grooming/
|
||||
[29] http://www.valetmag.com/personal-shopper/
|
||||
[30] http://www.valetmag.com/the-handbook/
|
||||
[36] https://www.valetmag.com/the-handbook/features/31-days/
|
||||
[37] https://www.facebook.com/sharer/sharer.php?u=https://www.valetmag.com/the-handbook/living/how-to-slow-down-time.php
|
||||
[38] https://twitter.com/intent/tweet?text=You%20Can%20Slow%20Down%20Time%20%20https%3A%2F%2Fwww.valetmag.com%2Fthe-handbook%2Fliving%2Fhow-to-slow-down-time.php%20via%20@valetmag
|
||||
[39] mailto:?subject=You%20Can%20Slow%20Down%20Time%20-%20Valet.&body=https%3A%2F%2Fwww.valetmag.com%2Fthe-handbook%2Fliving%2Fhow-to-slow-down-time.php%0D%0A%0D%0AHow%20to%20stop%20life%20from%20passing%20you%20by.
|
||||
[40] https://www.pacificneuroscienceinstitute.org/people/santosh-kesari/
|
||||
[41] https://www.newyorker.com/magazine/2011/04/25/the-possibilian
|
||||
[42] http://www.valetmag.com/living/features/2016/four-ways-meditation-will-improve-your-brain-021716.php
|
||||
[43] https://www.ncbi.nlm.nih.gov/pmc/articles/PMC3004979/
|
||||
[44] http://www.valetmag.com/the-handbook/living/benefits-of-journaling.php
|
||||
[45] https://www.jstor.org/stable/41062175?seq=1
|
||||
[46] https://www.cdc.gov/nchs/fastats/life-expectancy.htm
|
||||
[47] https://www.cdc.gov/nchs/fastats/life-expectancy.htm
|
||||
[48] https://www.valetmag.com/the-handbook/living/use-less-paper-towels.php
|
||||
[49] https://www.valetmag.com/the-handbook/style/be-your-own-style-god.php
|
||||
[50] https://www.valetmag.com/the-handbook/features/31-days/
|
||||
[51] https://www.valetmag.com/the-handbook/living/coffee-boost-nutrition.php
|
||||
[52] https://www.valetmag.com/the-handbook/living/how-to-accomplish-your-goals.php
|
||||
[53] https://www.valetmag.com/the-handbook/style/dry-cleaning-benefits.php
|
||||
[54] https://www.valetmag.com/the-handbook/living/how-much-water-should-you-drink-per-day.php
|
||||
[55] https://www.valetmag.com/the-handbook/living/how-to-save-away-more-money.php
|
||||
[56] https://www.valetmag.com/the-handbook/living/prioritize-relaxation-how-to.php
|
||||
[57] https://www.valetmag.com/the-handbook/living/cast-iron-pan-seasoning-guide.php
|
||||
[58] https://www.valetmag.com/the-handbook/living/use-less-paper-towels.php
|
||||
[59] https://www.valetmag.com/the-handbook/living/how-to-slow-down-time.php
|
||||
[60] https://www.valetmag.com/the-handbook/style/be-your-own-style-god.php
|
||||
[61] https://www.valetmag.com/the-handbook/living/how-to-deal-with-failure.php
|
||||
[62] https://www.valetmag.com/the-handbook/living/stop-sitting-so-much.php
|
||||
[63] https://www.valetmag.com/the-handbook/style/rules-for-office-wardrobes.php
|
||||
[64] https://www.valetmag.com/the-handbook/living/improve-your-gut-health-microbiome.php
|
||||
[65] https://www.valetmag.com/the-handbook/living/how-to-wake-up-early.php
|
||||
[66] https://www.valetmag.com/the-handbook/living/boost-your-credit-score.php
|
||||
[67] https://www.valetmag.com/the-handbook/living/how-to-read-whiskey-label.php
|
||||
[68] https://www.valetmag.com/the-handbook/living/alone-time-benefits.php
|
||||
[69] https://www.valetmag.com/the-handbook/style/watch-jewelry-cleaning-guide.php
|
||||
[70] https://www.valetmag.com/the-handbook/living/boost-your-testosterone.php
|
||||
[71] https://www.valetmag.com/the-handbook/living/swear-at-work.php
|
||||
[72] https://www.valetmag.com/the-handbook/grooming/how-to-look-younger.php
|
||||
[73] https://www.valetmag.com/the-handbook/living/boost-your-creativity.php
|
||||
[74] https://www.valetmag.com/the-handbook/living/productive-worrying.php
|
||||
[75] https://www.valetmag.com/the-handbook/living/make-better-conversation.php
|
||||
[76] https://www.valetmag.com/the-handbook/living/overcome-imposter-syndrome.php
|
||||
[77] https://www.valetmag.com/the-handbook/living/how-to-stay-focused-at-work.php
|
||||
[78] https://www.valetmag.com/the-handbook/grooming/mens-face-exfoliating-scrubs.php
|
||||
[79] https://www.valetmag.com/the-handbook/living/trust-your-gut.php
|
||||
[80] https://www.valetmag.com/the-handbook/living/optimize-your-breathing.php
|
||||
[81] https://www.valetmag.com/the-handbook/living/sharpen-your-kitchen-knives.php
|
||||
[82] https://www.valetmag.com/the-handbook/features/31-days/
|
||||
[83] https://www.valetmag.com/
|
||||
[84] https://www.facebook.com/valetmag
|
||||
[85] https://twitter.com/valetmag
|
||||
[86] https://www.instagram.com/valetmag/
|
||||
[87] http://www.valetmag.com/distribution/app.php
|
||||
[88] http://www.valetmag.com/distribution/rss.php
|
||||
[89] https://www.valetmag.com/style/
|
||||
[90] https://www.valetmag.com/style/trends/
|
||||
[91] https://www.valetmag.com/style/products/
|
||||
[92] https://www.valetmag.com/style/profiles-features/
|
||||
[93] https://www.valetmag.com/style/how-tos/
|
||||
[94] https://www.valetmag.com/living/
|
||||
[95] https://www.valetmag.com/living/interiors/
|
||||
[96] https://www.valetmag.com/living/gear/
|
||||
[97] https://www.valetmag.com/living/food-drink/
|
||||
[98] https://www.valetmag.com/living/travel/
|
||||
[99] https://www.valetmag.com/living/sex-relationships/
|
||||
[100] https://www.valetmag.com/living/culture/
|
||||
[101] https://www.valetmag.com/living/money/
|
||||
[102] https://www.valetmag.com/living/career/
|
||||
[103] https://www.valetmag.com/living/features/
|
||||
[104] https://www.valetmag.com/grooming/
|
||||
[105] https://www.valetmag.com/grooming/skin-care/
|
||||
[106] https://www.valetmag.com/grooming/hair-care/
|
||||
[107] https://www.valetmag.com/grooming/shaving/
|
||||
[108] https://www.valetmag.com/grooming/fragrances/
|
||||
[109] https://www.valetmag.com/grooming/profiles-features/
|
||||
[110] https://www.valetmag.com/grooming/how-tos/
|
||||
[111] https://www.valetmag.com/grooming/profiles-features/my-morning-routine.php
|
||||
[112] https://www.valetmag.com/health-fitness/
|
||||
[113] https://www.valetmag.com/health-fitness/diet-nutrition/
|
||||
[114] https://www.valetmag.com/health-fitness/fitness/
|
||||
[115] https://www.valetmag.com/health-fitness/strength-training/
|
||||
[116] https://www.valetmag.com/health-fitness/features/
|
||||
[117] https://www.valetmag.com/health-fitness/the-inside-man/
|
||||
[118] http://www.valetmag.com/personal-shopper/
|
||||
[119] http://www.valetmag.com/personal-shopper/sales-deals/
|
||||
[120] http://www.valetmag.com/personal-shopper/seasonal-calendar/
|
||||
[121] http://www.valetmag.com/the-handbook/
|
||||
[122] http://www.valetmag.com/the-handbook/style/
|
||||
[123] http://www.valetmag.com/the-handbook/grooming/
|
||||
[124] http://www.valetmag.com/the-handbook/living/
|
||||
[125] https://www.valetmag.com/the-handbook/features/31-days/
|
||||
[134] http://www.valetmag.com/about/
|
||||
[135] http://www.valetmag.com/about/advertising/
|
||||
[136] http://www.valetmag.com/about/privacy_policy.php
|
||||
[137] http://www.valetmag.com/about/terms_conditions.php
|
||||
|
||||
@@ -1,51 +1,50 @@
|
||||
#[1]Viget Articles
|
||||
[1] Skip to Main Content
|
||||
[2] Viget
|
||||
|
||||
IFRAME: [2]https://www.googletagmanager.com/ns.html?id=GTM-5V7V
|
||||
|
||||
[3]Skip to Main Content
|
||||
|
||||
[4]Viget
|
||||
|
||||
* [5]Work
|
||||
* [6]Services
|
||||
* [7]Articles
|
||||
* [8]Careers
|
||||
* [9]Contact
|
||||
* (BUTTON) Open Menu
|
||||
• [3] Work
|
||||
• [4] Services
|
||||
• [5] Articles
|
||||
• [6] Careers
|
||||
• [7] Contact
|
||||
• Open Menu
|
||||
|
||||
Navigation
|
||||
|
||||
[10]Viget (BUTTON) Close
|
||||
* Practice
|
||||
* [11]Work
|
||||
* [12]Services
|
||||
* [13]Articles
|
||||
[9] Viget Close
|
||||
|
||||
• Practice
|
||||
• [11] Work
|
||||
• [12] Services
|
||||
• [13] Articles
|
||||
|
||||
We’re a full-service digital agency that’s been helping clients make lasting
|
||||
change since 1999.
|
||||
|
||||
We’re a full-service digital agency that’s been helping clients make
|
||||
lasting change since 1999.
|
||||
[14] Contact Us
|
||||
|
||||
People
|
||||
|
||||
* [15]Company
|
||||
* [16]Careers
|
||||
* [17]Code of Ethics
|
||||
* [18]Diversity & Inclusion
|
||||
• [15]Company
|
||||
• [16]Careers
|
||||
• [17]Code of Ethics
|
||||
• [18]Diversity & Inclusion
|
||||
|
||||
More
|
||||
|
||||
* [19]Pointless Corp.
|
||||
* [20]Explorations
|
||||
* [21]Code at Viget
|
||||
• [19]Pointless Corp.
|
||||
• [20]Explorations
|
||||
• [21]Code at Viget
|
||||
|
||||
Featured
|
||||
|
||||
[22]
|
||||
Read the Article: Revolutionizing the Web
|
||||
|
||||
Newsletter
|
||||
|
||||
Revolutionizing the Web
|
||||
|
||||
[23]
|
||||
Read the Article: The Reflection Before Christmas
|
||||
|
||||
Article
|
||||
@@ -54,312 +53,327 @@ The Reflection Before Christmas
|
||||
|
||||
The Enduring Point of Pointless Corp.
|
||||
|
||||
[22]Brian Williams
|
||||
[pointless-sticker-bear-article]
|
||||
[24] Brian Williams
|
||||
|
||||
[23]Brian Williams, Co-Founder & CEO
|
||||
[25]Brian Williams, Co-Founder & CEO
|
||||
|
||||
Article Categories: [24]#News & Culture, [25]#Employee Engagement
|
||||
Article Categories: [26] #News & Culture, [27] #Employee Engagement
|
||||
|
||||
Posted on March 24, 2023
|
||||
* Share
|
||||
* Share
|
||||
* Post
|
||||
|
||||
Pointless Corp. is the innovation lab at Viget, where we step away from
|
||||
client work to make fun and useful things for everyone
|
||||
• [28]
|
||||
Share
|
||||
• [29]
|
||||
Share
|
||||
• [30]
|
||||
Post
|
||||
|
||||
P o i n t l e s s C o r p . i s t h e i n n o v a t i o n l a b a t V i
|
||||
g e t , w h e r e w e s t e p a w a y f r o m c l i e n t w o r k t o m
|
||||
a k e f u n a n d u s e f u l t h i n g s f o r e v e r y o n e
|
||||
Pointless Corp. is the innovation lab at Viget, where we step away from client
|
||||
work to make fun and useful things for everyone
|
||||
|
||||
“Neither pointless, nor a corporation” is how we describe Pointless
|
||||
Corp. here at Viget. We founded Viget – an actual company – in 1999
|
||||
during the original dot com bubble to build web products for clients.
|
||||
Serving clients has always been our purpose or … point, if you will.
|
||||
Over the decades, we’ve done just that, completing thousands of
|
||||
projects for hundreds of clients. Never forgetting that we exist to
|
||||
serve our clients has been key in our longevity.
|
||||
P o i n t l e s s C o r p . i s t h e i n n o v a t i o n l a b a t V i g e t ,
|
||||
w h e r e w e s t e p a w a y f r o m c l i e n t w o r k t o m a k e f u n a n
|
||||
d u s e f u l t h i n g s f o r e v e r y o n e
|
||||
|
||||
About a decade in, we felt the urge to build and launch our own
|
||||
projects. [26]Pointless Corp. became the internal [27]brand we adopted
|
||||
to remind ourselves that these projects can be fun and useful but don’t
|
||||
replace the primary point of Viget. A line from Harry Nilsson’s The
|
||||
Point! referencing the Pointless Man serves as inspiration: “a point in
|
||||
every direction is the same as no point at all.” We wanted the freedom
|
||||
to experiment in every direction.
|
||||
“Neither pointless, nor a corporation” is how we describe Pointless Corp. here
|
||||
at Viget. We founded Viget – an actual company – in 1999 during the original
|
||||
dot com bubble to build web products for clients. Serving clients has always
|
||||
been our purpose or … point, if you will. Over the decades, we’ve done just
|
||||
that, completing thousands of projects for hundreds of clients. Never
|
||||
forgetting that we exist to serve our clients has been key in our longevity.
|
||||
|
||||
So we did. Ideas and teams formed fairly randomly, and Pointless
|
||||
Projects began to fill the gaps between our client work. Projects like
|
||||
[28]HeyCraig (2009), which sent you an email alert based on your
|
||||
Craigslist search (before Craigslist shut us down and added the
|
||||
feature). Or [29]Tincan’d (2011), a simple video call platform before
|
||||
Zoom or Google Meet. Or [30]BabyBookie, the baby due date office pool
|
||||
app over 500,000 people have used since launch in 2012.
|
||||
About a decade in, we felt the urge to build and launch our own projects. [31]
|
||||
Pointless Corp. became the internal [32]brand we adopted to remind ourselves
|
||||
that these projects can be fun and useful but don’t replace the primary point
|
||||
of Viget. A line from Harry Nilsson’s The Point! referencing the Pointless Man
|
||||
serves as inspiration: “a point in every direction is the same as no point at
|
||||
all.” We wanted the freedom to experiment in every direction.
|
||||
|
||||
These projects allow our teams to work without the input (including,
|
||||
ahem, revenue) of clients, so we’re more free to experiment, wear
|
||||
different hats, and learn … a lot. We apply what we learn back into our
|
||||
client work. Along the way, we get to know each other better, scratch
|
||||
our entrepreneurial itches, and hopefully put some fun and/or useful
|
||||
things out in the world for others to enjoy.
|
||||
So we did. Ideas and teams formed fairly randomly, and Pointless Projects began
|
||||
to fill the gaps between our client work. Projects like [33]HeyCraig (2009),
|
||||
which sent you an email alert based on your Craigslist search (before
|
||||
Craigslist shut us down and added the feature). Or [34]Tincan’d (2011), a
|
||||
simple video call platform before Zoom or Google Meet. Or [35]BabyBookie, the
|
||||
baby due date office pool app over 500,000 people have used since launch in
|
||||
2012.
|
||||
|
||||
For many years, we organized an annual optional Pointless Weekend. We’d
|
||||
kick off hackathon-style on a Thursday evening and wrap on a Saturday
|
||||
evening with a functional product out in the wild, as I described
|
||||
[31]back in 2012. It’s [32]always been an intense, enjoyable, but
|
||||
rather exhausting 48 hours. Photos from [33]2011, [34]2014, and
|
||||
[35]2016 bring back some great memories.
|
||||
These projects allow our teams to work without the input (including, ahem,
|
||||
revenue) of clients, so we’re more free to experiment, wear different hats, and
|
||||
learn … a lot. We apply what we learn back into our client work. Along the way,
|
||||
we get to know each other better, scratch our entrepreneurial itches, and
|
||||
hopefully put some fun and/or useful things out in the world for others to
|
||||
enjoy.
|
||||
|
||||
For many years, we organized an annual optional Pointless Weekend. We’d kick
|
||||
off hackathon-style on a Thursday evening and wrap on a Saturday evening with a
|
||||
functional product out in the wild, as I described [36]back in 2012. It’s [37]
|
||||
always been an intense, enjoyable, but rather exhausting 48 hours. Photos from
|
||||
[38]2011, [39]2014, and [40]2016 bring back some great memories.
|
||||
|
||||
[pointless-old]
|
||||
Pointless Weekend 2014 spanned three Viget offices
|
||||
|
||||
A couple of years ago, we shifted the schedule to start on Wednesday
|
||||
and wrap on Friday. This made participation easier, allowing parents
|
||||
and others with weekend commitments to join. It also allowed projects
|
||||
to wrap up just in time for our Friday staff meeting. We awkwardly
|
||||
called it “Pointless Week” even though it was still only two days.
|
||||
A couple of years ago, we shifted the schedule to start on Wednesday and wrap
|
||||
on Friday. This made participation easier, allowing parents and others with
|
||||
weekend commitments to join. It also allowed projects to wrap up just in time
|
||||
for our Friday staff meeting. We awkwardly called it “Pointless Week” even
|
||||
though it was still only two days.
|
||||
|
||||
New for 2023: Pointless Palooza
|
||||
|
||||
Two things I like: alliteration and lollapalooza (specifically circa
|
||||
1992, but that’s a story for another day). So Pointless Palooza was an
|
||||
obvious choice for what to call our little two day adventure. In
|
||||
addition to a new name, we’re trying a few other changes this year:
|
||||
Two things I like: alliteration and lollapalooza (specifically circa 1992, but
|
||||
that’s a story for another day). So Pointless Palooza was an obvious choice for
|
||||
what to call our little two day adventure. In addition to a new name, we’re
|
||||
trying a few other changes this year:
|
||||
|
||||
Pointless Executives. Nothing injects new energy like new leadership.
|
||||
We handed over the Pointless reins to two trusty execs: [36]Andrew (day
|
||||
job: developer) is our Pointless CEO and [37]Aimee (day job: project
|
||||
manager) is our Pointless COO. They’ve done a phenomenal job setting a
|
||||
vision, planning, and leading the activities. Their enthusiasm helped
|
||||
inspire more than half the company to participate with a record number
|
||||
of projects and great results.
|
||||
Pointless Executives. Nothing injects new energy like new leadership. We handed
|
||||
over the Pointless reins to two trusty execs: [41]Andrew (day job: developer)
|
||||
is our Pointless CEO and [42]Aimee (day job: project manager) is our Pointless
|
||||
COO. They’ve done a phenomenal job setting a vision, planning, and leading the
|
||||
activities. Their enthusiasm helped inspire more than half the company to
|
||||
participate with a record number of projects and great results.
|
||||
|
||||
Pitching & Team Formation. Previously, project ideas were “pitched”
|
||||
with a single slide and a tight 1-2 minute segment at a staff meeting.
|
||||
These were fun and lighthearted, but didn’t always capture the full
|
||||
vision, and teams often formed and morphed during the kickoff night.
|
||||
This year, project ideas were shared more gradually via collaboration
|
||||
in Slack and Notion. Project teams formed with more structure in
|
||||
advance, and team members had some time before the kickoff to marinate
|
||||
on the idea and get excited to build.
|
||||
Pitching & Team Formation. Previously, project ideas were “pitched” with a
|
||||
single slide and a tight 1-2 minute segment at a staff meeting. These were fun
|
||||
and lighthearted, but didn’t always capture the full vision, and teams often
|
||||
formed and morphed during the kickoff night. This year, project ideas were
|
||||
shared more gradually via collaboration in Slack and Notion. Project teams
|
||||
formed with more structure in advance, and team members had some time before
|
||||
the kickoff to marinate on the idea and get excited to build.
|
||||
|
||||
Even More Remote Friendly. There’s something magical about
|
||||
kickoff-pizza, launch day donuts, and [38]in-person collaboration. But
|
||||
there’s something even more magical about collaborating with dozens of
|
||||
teammates around the country (especially when it’s supplemented by
|
||||
[39]sweet swag boxes and Divvy credits for remote treats). Hybrid teams
|
||||
work. We still had fun in-office connections, but most of our Pointless
|
||||
Projects this year are being worked on with distributed teams, much
|
||||
like our client work.
|
||||
Pointless Branded Stuff 2023 including a t-shirt and sticker pack --
|
||||
very corporate
|
||||
Even More Remote Friendly. There’s something magical about kickoff-pizza,
|
||||
launch day donuts, and [43]in-person collaboration. But there’s something even
|
||||
more magical about collaborating with dozens of teammates around the country
|
||||
(especially when it’s supplemented by [44]sweet swag boxes and Divvy credits
|
||||
for remote treats). Hybrid teams work. We still had fun in-office connections,
|
||||
but most of our Pointless Projects this year are being worked on with
|
||||
distributed teams, much like our client work.
|
||||
|
||||
Some things haven’t changed from prior years. Team members are still
|
||||
swapping roles – PMs writing code, designers running projects, the list
|
||||
goes on – which means steep and rapid [40]learning curves. We’re still
|
||||
trying out new technologies and approaches to our work, which means
|
||||
unexpected blockers and great insights to share. New connections are
|
||||
being formed, especially since more than half of this year’s
|
||||
participants are in their first year at Viget and experiencing their
|
||||
first Pointless event. Forming authentic co-worker connections isn’t
|
||||
easy, and our culture is stronger today than it was at the start of the
|
||||
week.
|
||||
[23-pointless]
|
||||
Pointless Branded Stuff 2023 including a t-shirt and sticker pack -- very
|
||||
corporate
|
||||
|
||||
So what projects will launch? I won’t steal their thunder, but we just
|
||||
wrapped the presentation portion of six Pointless Project teams at our
|
||||
weekly staff meeting and it was the most we’ve laughed, cheered, and
|
||||
been inspired in a long time. I expect articles will be written and
|
||||
shared in the days and weeks ahead outlining the thrills (and mishaps)
|
||||
of the teams this year.
|
||||
Some things haven’t changed from prior years. Team members are still swapping
|
||||
roles – PMs writing code, designers running projects, the list goes on – which
|
||||
means steep and rapid [45]learning curves. We’re still trying out new
|
||||
technologies and approaches to our work, which means unexpected blockers and
|
||||
great insights to share. New connections are being formed, especially since
|
||||
more than half of this year’s participants are in their first year at Viget and
|
||||
experiencing their first Pointless event. Forming authentic co-worker
|
||||
connections isn’t easy, and our culture is stronger today than it was at the
|
||||
start of the week.
|
||||
|
||||
So what projects will launch? I won’t steal their thunder, but we just wrapped
|
||||
the presentation portion of six Pointless Project teams at our weekly staff
|
||||
meeting and it was the most we’ve laughed, cheered, and been inspired in a long
|
||||
time. I expect articles will be written and shared in the days and weeks ahead
|
||||
outlining the thrills (and mishaps) of the teams this year.
|
||||
|
||||
[PointlessPalooza2023]
|
||||
Pointless Palooza 2023 was a blast!
|
||||
|
||||
Pointless Corp. is more than an annual palooza. We work on projects
|
||||
throughout the year in the gaps between client work, weaving the
|
||||
teamwork, learning, and teaching values of Viget into all that we do.
|
||||
Pointless Corp. is more than an annual palooza. We work on projects throughout
|
||||
the year in the gaps between client work, weaving the teamwork, learning, and
|
||||
teaching values of Viget into all that we do.
|
||||
|
||||
If this is the kind of work and culture you might enjoy, learn more
|
||||
about [41]our culture and job openings – perhaps you’ll be able to join
|
||||
next year’s Pointless Palooza. After all, inspiring people to join us
|
||||
is unapologetically part of the point.
|
||||
If this is the kind of work and culture you might enjoy, learn more about [46]
|
||||
our culture and job openings – perhaps you’ll be able to join next year’s
|
||||
Pointless Palooza. After all, inspiring people to join us is unapologetically
|
||||
part of the point.
|
||||
|
||||
[42]Brian Williams
|
||||
[47] Brian Williams
|
||||
|
||||
[43]Brian is Viget's co-founder and CEO. He does everything from
|
||||
advising our clients to building our conference tables with his bare
|
||||
hands in our Falls Church, VA, HQ.
|
||||
[44]More articles by Brian
|
||||
[48]Brian is Viget's co-founder and CEO. He does everything from advising our
|
||||
clients to building our conference tables with his bare hands in our Falls
|
||||
Church, VA, HQ.
|
||||
|
||||
[49]More articles by Brian
|
||||
|
||||
Related Articles
|
||||
|
||||
* Article
|
||||
• [50]
|
||||
|
||||
Article
|
||||
|
||||
Our Pointless Logo
|
||||
|
||||
Brian Williams
|
||||
* Article
|
||||
|
||||
• [51]
|
||||
|
||||
Article
|
||||
|
||||
Introducing Pointless Corp.
|
||||
|
||||
Brian Williams
|
||||
* What’s the Point of Pointless Weekend?
|
||||
|
||||
• [52]
|
||||
What’s the Point of Pointless Weekend?
|
||||
|
||||
Article
|
||||
|
||||
What’s the Point of Pointless Weekend?
|
||||
|
||||
Brian Williams
|
||||
|
||||
The Viget Newsletter
|
||||
|
||||
Nobody likes popups, so we waited until now to recommend our
|
||||
newsletter, featuring thoughts, opinions, and tools for building a
|
||||
better digital world. [45]Read the current issue.
|
||||
Nobody likes popups, so we waited until now to recommend our newsletter,
|
||||
featuring thoughts, opinions, and tools for building a better digital world.
|
||||
[53]Read the current issue.
|
||||
|
||||
[46]Subscribe Here (opens in new window)
|
||||
[54]Subscribe Here (opens in new window)
|
||||
|
||||
Site Footer
|
||||
|
||||
Have an unsolvable problem or audacious idea?
|
||||
|
||||
Let’s get to work
|
||||
[47]Contact Us [48]hello@viget.com [49]703.891.0670
|
||||
|
||||
* Practice
|
||||
* [50]Work
|
||||
* [51]Services
|
||||
* [52]Articles
|
||||
[55] Contact Us [56] hello@viget.com [57] 703.891.0670
|
||||
|
||||
* People
|
||||
* [53]Company
|
||||
* [54]Careers
|
||||
* [55]Code of Ethics
|
||||
* [56]Diversity & Inclusion
|
||||
• Practice
|
||||
• [58]Work
|
||||
• [59]Services
|
||||
• [60]Articles
|
||||
|
||||
* More
|
||||
* [57]Pointless Corp.
|
||||
* [58]Explorations
|
||||
* [59]Code at Viget
|
||||
• People
|
||||
• [61]Company
|
||||
• [62]Careers
|
||||
• [63]Code of Ethics
|
||||
• [64]Diversity & Inclusion
|
||||
|
||||
• More
|
||||
• [65]Pointless Corp.
|
||||
• [66]Explorations
|
||||
• [67]Code at Viget
|
||||
|
||||
Sign Up For Our Newsletter
|
||||
|
||||
A curated periodical featuring thoughts, opinions, and tools for
|
||||
building a better digital world.
|
||||
[60]Check it out
|
||||
A curated periodical featuring thoughts, opinions, and tools for building a
|
||||
better digital world.
|
||||
|
||||
[68] Check it out
|
||||
|
||||
Social Links
|
||||
|
||||
[61]Viget
|
||||
*
|
||||
*
|
||||
*
|
||||
*
|
||||
*
|
||||
*
|
||||
[69] Viget
|
||||
|
||||
• [70]
|
||||
• [71]
|
||||
• [72]
|
||||
• [73]
|
||||
• [74]
|
||||
• [75]
|
||||
|
||||
Office Locations
|
||||
|
||||
* [62]Washington DC Metro
|
||||
* [63]Durham, NC
|
||||
* [64]Boulder, CO
|
||||
* [65]Chattanooga, TN
|
||||
• [76]Washington DC Metro
|
||||
• [77]Durham, NC
|
||||
• [78]Boulder, CO
|
||||
• [79]Chattanooga, TN
|
||||
|
||||
© 1999 – 2024 Viget Labs, LLC. [66]Terms [67]Privacy [68]MRF
|
||||
© 1999 – 2024 Viget Labs, LLC. [80]Terms [81]Privacy [82]MRF
|
||||
|
||||
* [69]Home
|
||||
* [70]Articles
|
||||
* [71]The Enduring Point of Pointless Corp.
|
||||
• [83]Home
|
||||
• [84]Articles
|
||||
• [85]The Enduring Point of Pointless Corp.
|
||||
|
||||
[72]Subscribe (opens in a new window)
|
||||
(BUTTON) Share
|
||||
* [73]Share this page
|
||||
* [74]Share this page
|
||||
* [75]Post this page
|
||||
[86] Subscribe (opens in a new window)
|
||||
Share
|
||||
|
||||
References
|
||||
• [88] Share this page
|
||||
• [89] Share this page
|
||||
• [90] Post this page
|
||||
|
||||
Visible links:
|
||||
1. https://feeds.feedburner.com/Viget
|
||||
2. https://www.googletagmanager.com/ns.html?id=GTM-5V7V
|
||||
3. https://www.viget.com/articles/the-enduring-point-of-pointless-corp/#content
|
||||
4. https://www.viget.com/
|
||||
5. https://www.viget.com/work/
|
||||
6. https://www.viget.com/services/
|
||||
7. https://www.viget.com/articles/
|
||||
8. https://www.viget.com/careers/
|
||||
9. https://www.viget.com/contact/
|
||||
10. https://www.viget.com/
|
||||
11. https://www.viget.com/work/
|
||||
12. https://www.viget.com/services/
|
||||
13. https://www.viget.com/articles/
|
||||
14. https://www.viget.com/contact/
|
||||
15. https://www.viget.com/about/
|
||||
16. https://www.viget.com/careers/
|
||||
17. https://www.viget.com/code-of-ethics/
|
||||
18. https://www.viget.com/diversity-equity-and-inclusion/
|
||||
19. https://pointlesscorp.com/
|
||||
20. https://explorations.viget.com/
|
||||
21. https://code.viget.com/
|
||||
22. https://www.viget.com/about/team/bwilliams/
|
||||
23. https://www.viget.com/about/team/bwilliams/
|
||||
24. https://www.viget.com/articles/category/news-culture/
|
||||
25. https://www.viget.com/articles/category/employee-engagement/
|
||||
26. https://www.viget.com/articles/the-point-of-pointless-corp/
|
||||
27. https://www.viget.com/articles/book-review-giveaway-the-geometry-of-design/
|
||||
28. https://www.viget.com/articles/introducing-heycraig/
|
||||
29. https://pointlesscorp.com/tincand
|
||||
30. https://www.babybookie.com/
|
||||
31. https://www.viget.com/articles/a-pointless-weekend-or-so/
|
||||
32. https://www.viget.com/articles/whats-the-point-of-pointless-weekend/
|
||||
33. https://www.flickr.com/photos/viget/albums/72157626084778456
|
||||
34. https://www.flickr.com/photos/viget/albums/72157649003978349
|
||||
35. https://twitter.com/viget/status/798273078132408320
|
||||
36. https://www.viget.com/about/team/athomas/
|
||||
37. https://www.viget.com/about/team/aiwamoto/
|
||||
38. https://twitter.com/pointlesscorp/status/1639274400976445444
|
||||
39. https://twitter.com/viget/status/1637891007868968980
|
||||
40. https://twitter.com/pointlesscorp/status/1638940667060838401
|
||||
41. https://www.viget.com/careers/
|
||||
42. https://www.viget.com/about/team/bwilliams/
|
||||
43. https://www.viget.com/about/team/bwilliams/
|
||||
44. https://www.viget.com/about/team/bwilliams/
|
||||
45. https://www.viget.com/newsletter
|
||||
46. http://eepurl.com/gtHqsj
|
||||
47. https://www.viget.com/contact/
|
||||
48. mailto:hello@viget.com?subject=Hello, Viget!
|
||||
49. tel:7038910670
|
||||
50. https://www.viget.com/work/
|
||||
51. https://www.viget.com/services/
|
||||
52. https://www.viget.com/articles/
|
||||
53. https://www.viget.com/about/
|
||||
54. https://www.viget.com/careers/
|
||||
55. https://www.viget.com/code-of-ethics/
|
||||
56. https://www.viget.com/diversity-equity-and-inclusion/
|
||||
57. https://pointlesscorp.com/
|
||||
58. https://explorations.viget.com/
|
||||
59. https://code.viget.com/
|
||||
60. https://www.viget.com/newsletter/
|
||||
61. https://www.viget.com/
|
||||
62. https://www.viget.com/dc-metro-hq/
|
||||
63. https://www.viget.com/durham/
|
||||
64. https://www.viget.com/boulder/
|
||||
65. https://www.viget.com/chattanooga/
|
||||
66. https://www.viget.com/terms-conditions/
|
||||
67. https://www.viget.com/privacy-policy/
|
||||
68. https://individual.carefirst.com/individuals-families/mandates-policies/machine-readable-file.page
|
||||
69. https://www.viget.com/
|
||||
70. https://www.viget.com/articles
|
||||
71. https://www.viget.com/articles/the-enduring-point-of-pointless-corp/#hero
|
||||
72. http://eepurl.com/gtHqsj
|
||||
73. https://www.facebook.com/sharer/sharer.php?u=https://www.viget.com/articles/the-enduring-point-of-pointless-corp/
|
||||
74. http://www.linkedin.com/shareArticle?mini=true&url=https://www.viget.com/articles/the-enduring-point-of-pointless-corp/
|
||||
75. https://x.com/intent/tweet?text=Pointless Corp. is the innovation lab at Viget, where we step away from client work to make fun and useful things for everyone https://www.viget.com/articles/the-enduring-point-of-pointless-corp/
|
||||
|
||||
Hidden links:
|
||||
77. https://www.viget.com/newsletter/revolutionizing-the-web/
|
||||
78. https://www.viget.com/articles/the-reflection-before-christmas/
|
||||
79. https://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Fwww.viget.com%2Farticles%2Fthe-enduring-point-of-pointless-corp%2F
|
||||
80. http://www.linkedin.com/shareArticle?mini=true&url=https%3A%2F%2Fwww.viget.com%2Farticles%2Fthe-enduring-point-of-pointless-corp%2F
|
||||
81. https://x.com/intent/tweet?text=Pointless%20Corp.%20is%20the%20innovation%20lab%20at%20Viget%2C%20where%20we%20step%20away%20from%20client%20work%20to%20make%20fun%20and%20useful%20things%20for%20everyone%20https%3A%2F%2Fwww.viget.com%2Farticles%2Fthe-enduring-point-of-pointless-corp%2F
|
||||
82. https://www.viget.com/articles/our-pointless-logo/
|
||||
83. https://www.viget.com/articles/introducing-pointless-corp/
|
||||
84. https://www.viget.com/articles/whats-the-point-of-pointless-weekend/
|
||||
85. http://x.com/viget
|
||||
86. https://github.com/vigetlabs
|
||||
87. https://dribbble.com/viget
|
||||
88. https://www.instagram.com/viget/
|
||||
89. https://www.linkedin.com/company/viget-labs
|
||||
90. https://vimeo.com/viget/collections
|
||||
References:
|
||||
|
||||
[1] https://www.viget.com/articles/the-enduring-point-of-pointless-corp/#content
|
||||
[2] https://www.viget.com/
|
||||
[3] https://www.viget.com/work/
|
||||
[4] https://www.viget.com/services/
|
||||
[5] https://www.viget.com/articles/
|
||||
[6] https://www.viget.com/careers/
|
||||
[7] https://www.viget.com/contact/
|
||||
[9] https://www.viget.com/
|
||||
[11] https://www.viget.com/work/
|
||||
[12] https://www.viget.com/services/
|
||||
[13] https://www.viget.com/articles/
|
||||
[14] https://www.viget.com/contact/
|
||||
[15] https://www.viget.com/about/
|
||||
[16] https://www.viget.com/careers/
|
||||
[17] https://www.viget.com/code-of-ethics/
|
||||
[18] https://www.viget.com/diversity-equity-and-inclusion/
|
||||
[19] https://pointlesscorp.com/
|
||||
[20] https://explorations.viget.com/
|
||||
[21] https://code.viget.com/
|
||||
[22] https://www.viget.com/newsletter/revolutionizing-the-web/
|
||||
[23] https://www.viget.com/articles/the-reflection-before-christmas/
|
||||
[24] https://www.viget.com/about/team/bwilliams/
|
||||
[25] https://www.viget.com/about/team/bwilliams/
|
||||
[26] https://www.viget.com/articles/category/news-culture/
|
||||
[27] https://www.viget.com/articles/category/employee-engagement/
|
||||
[28] https://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Fwww.viget.com%2Farticles%2Fthe-enduring-point-of-pointless-corp%2F
|
||||
[29] http://www.linkedin.com/shareArticle?mini=true&url=https%3A%2F%2Fwww.viget.com%2Farticles%2Fthe-enduring-point-of-pointless-corp%2F
|
||||
[30] https://x.com/intent/tweet?text=Pointless%20Corp.%20is%20the%20innovation%20lab%20at%20Viget%2C%20where%20we%20step%20away%20from%20client%20work%20to%20make%20fun%20and%20useful%20things%20for%20everyone%20https%3A%2F%2Fwww.viget.com%2Farticles%2Fthe-enduring-point-of-pointless-corp%2F
|
||||
[31] https://www.viget.com/articles/the-point-of-pointless-corp/
|
||||
[32] https://www.viget.com/articles/book-review-giveaway-the-geometry-of-design/
|
||||
[33] https://www.viget.com/articles/introducing-heycraig/
|
||||
[34] https://pointlesscorp.com/tincand
|
||||
[35] https://www.babybookie.com/
|
||||
[36] https://www.viget.com/articles/a-pointless-weekend-or-so/
|
||||
[37] https://www.viget.com/articles/whats-the-point-of-pointless-weekend/
|
||||
[38] https://www.flickr.com/photos/viget/albums/72157626084778456
|
||||
[39] https://www.flickr.com/photos/viget/albums/72157649003978349
|
||||
[40] https://twitter.com/viget/status/798273078132408320
|
||||
[41] https://www.viget.com/about/team/athomas/
|
||||
[42] https://www.viget.com/about/team/aiwamoto/
|
||||
[43] https://twitter.com/pointlesscorp/status/1639274400976445444
|
||||
[44] https://twitter.com/viget/status/1637891007868968980
|
||||
[45] https://twitter.com/pointlesscorp/status/1638940667060838401
|
||||
[46] https://www.viget.com/careers/
|
||||
[47] https://www.viget.com/about/team/bwilliams/
|
||||
[48] https://www.viget.com/about/team/bwilliams/
|
||||
[49] https://www.viget.com/about/team/bwilliams/
|
||||
[50] https://www.viget.com/articles/our-pointless-logo/
|
||||
[51] https://www.viget.com/articles/introducing-pointless-corp/
|
||||
[52] https://www.viget.com/articles/whats-the-point-of-pointless-weekend/
|
||||
[53] https://www.viget.com/newsletter
|
||||
[54] http://eepurl.com/gtHqsj
|
||||
[55] https://www.viget.com/contact/
|
||||
[56] mailto:hello@viget.com?subject=Hello%2C%20Viget%21
|
||||
[57] tel:7038910670
|
||||
[58] https://www.viget.com/work/
|
||||
[59] https://www.viget.com/services/
|
||||
[60] https://www.viget.com/articles/
|
||||
[61] https://www.viget.com/about/
|
||||
[62] https://www.viget.com/careers/
|
||||
[63] https://www.viget.com/code-of-ethics/
|
||||
[64] https://www.viget.com/diversity-equity-and-inclusion/
|
||||
[65] https://pointlesscorp.com/
|
||||
[66] https://explorations.viget.com/
|
||||
[67] https://code.viget.com/
|
||||
[68] https://www.viget.com/newsletter/
|
||||
[69] https://www.viget.com/
|
||||
[70] http://x.com/viget
|
||||
[71] https://github.com/vigetlabs
|
||||
[72] https://dribbble.com/viget
|
||||
[73] https://www.instagram.com/viget/
|
||||
[74] https://www.linkedin.com/company/viget-labs
|
||||
[75] https://vimeo.com/viget/collections
|
||||
[76] https://www.viget.com/dc-metro-hq/
|
||||
[77] https://www.viget.com/durham/
|
||||
[78] https://www.viget.com/boulder/
|
||||
[79] https://www.viget.com/chattanooga/
|
||||
[80] https://www.viget.com/terms-conditions/
|
||||
[81] https://www.viget.com/privacy-policy/
|
||||
[82] https://individual.carefirst.com/individuals-families/mandates-policies/machine-readable-file.page
|
||||
[83] https://www.viget.com/
|
||||
[84] https://www.viget.com/articles
|
||||
[85] https://www.viget.com/articles/the-enduring-point-of-pointless-corp/#hero
|
||||
[86] http://eepurl.com/gtHqsj
|
||||
[88] https://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Fwww.viget.com%2Farticles%2Fthe-enduring-point-of-pointless-corp%2F
|
||||
[89] http://www.linkedin.com/shareArticle?mini=true&url=https%3A%2F%2Fwww.viget.com%2Farticles%2Fthe-enduring-point-of-pointless-corp%2F
|
||||
[90] https://x.com/intent/tweet?text=Pointless%20Corp.%20is%20the%20innovation%20lab%20at%20Viget%2C%20where%20we%20step%20away%20from%20client%20work%20to%20make%20fun%20and%20useful%20things%20for%20everyone%20https%3A%2F%2Fwww.viget.com%2Farticles%2Fthe-enduring-point-of-pointless-corp%2F
|
||||
|
||||
@@ -1,53 +1,52 @@
|
||||
#[1]Viget Articles
|
||||
[1] Skip to Main Content
|
||||
[2] Viget
|
||||
|
||||
IFRAME: [2]https://www.googletagmanager.com/ns.html?id=GTM-5V7V
|
||||
|
||||
[3]Skip to Main Content
|
||||
|
||||
[4]Viget
|
||||
|
||||
* [5]Work
|
||||
* [6]Services
|
||||
* [7]Articles
|
||||
* [8]Careers
|
||||
* [9]Contact
|
||||
* (BUTTON) Open Menu
|
||||
• [3] Work
|
||||
• [4] Services
|
||||
• [5] Articles
|
||||
• [6] Careers
|
||||
• [7] Contact
|
||||
• Open Menu
|
||||
|
||||
Navigation
|
||||
|
||||
[10]Viget (BUTTON) Close
|
||||
* Practice
|
||||
* [11]Work
|
||||
* [12]Services
|
||||
* [13]Articles
|
||||
[9] Viget Close
|
||||
|
||||
• Practice
|
||||
• [11] Work
|
||||
• [12] Services
|
||||
• [13] Articles
|
||||
|
||||
We’re a full-service digital agency that’s been helping clients make lasting
|
||||
change since 1999.
|
||||
|
||||
We’re a full-service digital agency that’s been helping clients make
|
||||
lasting change since 1999.
|
||||
[14] Contact Us
|
||||
|
||||
People
|
||||
|
||||
* [15]Company
|
||||
* [16]Careers
|
||||
* [17]Code of Ethics
|
||||
* [18]Diversity & Inclusion
|
||||
• [15]Company
|
||||
• [16]Careers
|
||||
• [17]Code of Ethics
|
||||
• [18]Diversity & Inclusion
|
||||
|
||||
More
|
||||
|
||||
* [19]Pointless Corp.
|
||||
* [20]Explorations
|
||||
* [21]Code at Viget
|
||||
• [19]Pointless Corp.
|
||||
• [20]Explorations
|
||||
• [21]Code at Viget
|
||||
|
||||
Featured
|
||||
|
||||
[22]
|
||||
Read the Article: Revolutionizing the Web
|
||||
|
||||
Newsletter
|
||||
|
||||
Revolutionizing the Web
|
||||
|
||||
Read the Article: Elephants, Squirrels, Porcupines, and Zombies Can
|
||||
Help Your Team Thrive
|
||||
[23]
|
||||
Read the Article: Elephants, Squirrels, Porcupines, and Zombies Can Help Your
|
||||
Team Thrive
|
||||
|
||||
Article
|
||||
|
||||
@@ -55,51 +54,53 @@ Elephants, Squirrels, Porcupines, and Zombies Can Help Your Team Thrive
|
||||
|
||||
Simple Commit Linting for Issue Number in GitHub Actions
|
||||
|
||||
[22]David Eisinger
|
||||
[Git-Tips-030718]
|
||||
[24] David Eisinger
|
||||
|
||||
[23]David Eisinger, Development Director
|
||||
[25]David Eisinger, Development Director
|
||||
|
||||
Article Categories: [24]#Code, [25]#Tooling
|
||||
Article Categories: [26] #Code, [27] #Tooling
|
||||
|
||||
Posted on April 28, 2023
|
||||
* Share
|
||||
* Share
|
||||
* Post
|
||||
|
||||
Including relevant ticket numbers in your git commit messages is a gift
|
||||
to your future self. Here's how to ensure you do it consistently.
|
||||
• [28]
|
||||
Share
|
||||
• [29]
|
||||
Share
|
||||
• [30]
|
||||
Post
|
||||
|
||||
I n c l u d i n g r e l e v a n t t i c k e t n u m b e r s i n y o u r
|
||||
g i t c o m m i t m e s s a g e s i s a g i f t t o y o u r f u t u r e
|
||||
s e l f . H e r e ' s h o w t o e n s u r e y o u d o i t c o n s i s t
|
||||
e n t l y .
|
||||
Including relevant ticket numbers in your git commit messages is a gift to your
|
||||
future self. Here's how to ensure you do it consistently.
|
||||
|
||||
I don't believe there is a right way to do software; I think teams can
|
||||
be effective (or ineffective!) in a lot of different ways using all
|
||||
sorts of methodologies and technologies. But one hill upon which I will
|
||||
die is this: referencing tickets in commit messages pays enormous
|
||||
dividends over the long haul and you should always do it. As someone
|
||||
who regularly commits code to apps created in the Obama era, nothing
|
||||
warms my heart like running [26]:Git blame on some confusing code and
|
||||
seeing a reference to a GitHub Issue where I can get the necessary
|
||||
context. And, conversely, nothing sparks nerd rage like fix bug or PR
|
||||
feedback or, heaven forbid, oops.
|
||||
I n c l u d i n g r e l e v a n t t i c k e t n u m b e r s i n y o u r g i t c
|
||||
o m m i t m e s s a g e s i s a g i f t t o y o u r f u t u r e s e l f . H e r
|
||||
e ' s h o w t o e n s u r e y o u d o i t c o n s i s t e n t l y .
|
||||
|
||||
In a recent [27]project retrospective, the team identified that we
|
||||
weren't being as consistent with this as we'd like, and decided to take
|
||||
action. I figured some sort of commit linting would be a good candidate
|
||||
for [28]continuous integration — when a team member pushes a branch up
|
||||
to GitHub, check the commits and make sure they include a reference to
|
||||
a ticket.
|
||||
I don't believe there is a right way to do software; I think teams can be
|
||||
effective (or ineffective!) in a lot of different ways using all sorts of
|
||||
methodologies and technologies. But one hill upon which I will die is this:
|
||||
referencing tickets in commit messages pays enormous dividends over the long
|
||||
haul and you should always do it. As someone who regularly commits code to apps
|
||||
created in the Obama era, nothing warms my heart like running [31]:Git blame on
|
||||
some confusing code and seeing a reference to a GitHub Issue where I can get
|
||||
the necessary context. And, conversely, nothing sparks nerd rage like fix bug
|
||||
or PR feedback or, heaven forbid, oops.
|
||||
|
||||
In a recent [32]project retrospective, the team identified that we weren't
|
||||
being as consistent with this as we'd like, and decided to take action. I
|
||||
figured some sort of commit linting would be a good candidate for [33]
|
||||
continuous integration — when a team member pushes a branch up to GitHub, check
|
||||
the commits and make sure they include a reference to a ticket.
|
||||
|
||||
I looked into [34]commitlint, but I found it a lot more opinionated than I am —
|
||||
I really just want to make sure commits begin with either [#XXX] (an issue
|
||||
number) or [n/a] — and rather difficult to reconfigure. After struggling with
|
||||
it for a few hours, I decided to just DIY it with a simple inline script. If
|
||||
you just want something you can drop into a GitHub Actions YAML file to lint
|
||||
your commits, here it is (but stick around and I'll break it down and then show
|
||||
how to do it in a few other languages):
|
||||
|
||||
I looked into [29]commitlint, but I found it a lot more opinionated
|
||||
than I am — I really just want to make sure commits begin with either
|
||||
[#XXX] (an issue number) or [n/a] — and rather difficult to
|
||||
reconfigure. After struggling with it for a few hours, I decided to
|
||||
just DIY it with a simple inline script. If you just want something you
|
||||
can drop into a GitHub Actions YAML file to lint your commits, here it
|
||||
is (but stick around and I'll break it down and then show how to do it
|
||||
in a few other languages):
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v3
|
||||
@@ -122,23 +123,22 @@ Simple Commit Linting for Issue Number in GitHub Actions
|
||||
'
|
||||
|
||||
A few notes:
|
||||
* That fetch-depth: 0 is essential in order to be able to compare the
|
||||
branch being built with main (or whatever you call your primary
|
||||
development branch) — by default, your Action only knows about the
|
||||
current branch.
|
||||
* git log --format=format:%s HEAD ^origin/main is going to give you
|
||||
the first line of every commit that's in the source branch but not
|
||||
in main; those are the commits we want to lint.
|
||||
* With that list of commits, we loop through each message and compare
|
||||
it with the regular expression /^\[(#\d+|n\/a)\]/, i.e. does this
|
||||
message begin with either [#XXX] (where X are digits) or [n/a]?
|
||||
* If any message does not match, print an error out to standard error
|
||||
(that's warn) and exit with a non-zero status (so that the GitHub
|
||||
Action fails).
|
||||
|
||||
If you want to try this out locally (or perhaps modify the script to
|
||||
validate messages in a different way), here's a docker run command you
|
||||
can use:
|
||||
• That fetch-depth: 0 is essential in order to be able to compare the branch
|
||||
being built with main (or whatever you call your primary development
|
||||
branch) — by default, your Action only knows about the current branch.
|
||||
• git log --format=format:%s HEAD ^origin/main is going to give you the first
|
||||
line of every commit that's in the source branch but not in main; those are
|
||||
the commits we want to lint.
|
||||
• With that list of commits, we loop through each message and compare it with
|
||||
the regular expression /^\[(#\d+|n\/a)\]/, i.e. does this message begin
|
||||
with either [#XXX] (where X are digits) or [n/a]?
|
||||
• If any message does not match, print an error out to standard error (that's
|
||||
warn) and exit with a non-zero status (so that the GitHub Action fails).
|
||||
|
||||
If you want to try this out locally (or perhaps modify the script to validate
|
||||
messages in a different way), here's a docker run command you can use:
|
||||
|
||||
echo '[#123] Message 1
|
||||
[n/a] Message 2
|
||||
[#122] Message 3' | docker run --rm -i ruby:3.2.1 ruby -e '
|
||||
@@ -149,66 +149,64 @@ echo '[#123] Message 1
|
||||
end
|
||||
'
|
||||
|
||||
Note that running this command should output nothing since these are
|
||||
all valid commit messages; modify one of the messages if you want to
|
||||
see the failure state.
|
||||
Note that running this command should output nothing since these are all valid
|
||||
commit messages; modify one of the messages if you want to see the failure
|
||||
state.
|
||||
|
||||
Other Languages [30]#
|
||||
Other Languages [35]#
|
||||
|
||||
Since there's a very real possibility you might not otherwise install
|
||||
Ruby in your GitHub Actions, and because I weirdly enjoy writing the
|
||||
same code in a bunch of different languages, here are scripts for
|
||||
several of Viget's other favorites:
|
||||
Since there's a very real possibility you might not otherwise install Ruby in
|
||||
your GitHub Actions, and because I weirdly enjoy writing the same code in a
|
||||
bunch of different languages, here are scripts for several of Viget's other
|
||||
favorites:
|
||||
|
||||
JavaScript [31]#
|
||||
JavaScript [36]#
|
||||
|
||||
git log --format=format:%s HEAD ^origin/main | node -e "
|
||||
let msgs = require('fs').readFileSync(0).toString().trim().split('\n');
|
||||
for (let msg of msgs) {
|
||||
if (msg.match(/^\[(#\d+|n\/a)\]/)) { continue; }
|
||||
process.stderr.write('Commits must begin with [#XXX] or [n/a] (' + msg + ')'
|
||||
);
|
||||
process.stderr.write('Commits must begin with [#XXX] or [n/a] (' + msg + ')');
|
||||
process.exit(1);
|
||||
}
|
||||
"
|
||||
|
||||
To test:
|
||||
|
||||
echo '[#123] Message 1
|
||||
[n/a] Message 2
|
||||
[#122] Message 3' | docker run --rm -i node:18.15.0 node -e "
|
||||
let msgs = require('fs').readFileSync(0).toString().trim().split('\n');
|
||||
for (let msg of msgs) {
|
||||
if (msg.match(/^\[(#\d+|n\/a)\]/)) { continue; }
|
||||
process.stderr.write('Commits must begin with [#XXX] or [n/a] (' + msg + ')'
|
||||
);
|
||||
process.stderr.write('Commits must begin with [#XXX] or [n/a] (' + msg + ')');
|
||||
process.exit(1);
|
||||
}
|
||||
"
|
||||
|
||||
PHP [32]#
|
||||
PHP [37]#
|
||||
|
||||
git log --format=format:%s HEAD ^origin/main | php -r '
|
||||
while ($msg = fgets(STDIN)) {
|
||||
if (preg_match("/^\[(#\d+|n\/a)\]/", $msg)) { continue; }
|
||||
fwrite(STDERR, "Commits must begin with #[XXX] or [n/a] (" . trim($msg) . ")
|
||||
\n");
|
||||
fwrite(STDERR, "Commits must begin with #[XXX] or [n/a] (" . trim($msg) . ")\n");
|
||||
exit(1);
|
||||
}
|
||||
'
|
||||
|
||||
To test:
|
||||
|
||||
echo '[#123] Message 1
|
||||
[n/a] Message 2
|
||||
[#122] Message 3' | docker run --rm -i php:8.2.4 php -r '
|
||||
while ($msg = fgets(STDIN)) {
|
||||
if (preg_match("/^\[(#\d+|n\/a)\]/", $msg)) { continue; }
|
||||
fwrite(STDERR, "Commits must begin with #[XXX] or [n/a] (" . trim($msg) . ")
|
||||
\n");
|
||||
fwrite(STDERR, "Commits must begin with #[XXX] or [n/a] (" . trim($msg) . ")\n");
|
||||
exit(1);
|
||||
}
|
||||
'
|
||||
|
||||
Python [33]#
|
||||
Python [38]#
|
||||
|
||||
git log --format=format:%s HEAD ^origin/main | python -c '
|
||||
import sys
|
||||
@@ -216,12 +214,12 @@ import re
|
||||
for msg in sys.stdin:
|
||||
if re.match(r"^\[(#\d+|n\/a)\]", msg):
|
||||
continue
|
||||
print("Commits must begin with #[xxx] or [n/a] (%s)" % msg.strip(), file=sys
|
||||
.stderr)
|
||||
print("Commits must begin with #[xxx] or [n/a] (%s)" % msg.strip(), file=sys.stderr)
|
||||
sys.exit(1)
|
||||
'
|
||||
|
||||
To test:
|
||||
|
||||
echo '[#123] Message 1
|
||||
[n/a] Message 2
|
||||
[#122] Message 3' | docker run --rm -i python:3.11.3 python -c '
|
||||
@@ -230,196 +228,207 @@ import re
|
||||
for msg in sys.stdin:
|
||||
if re.match(r"^\[(#\d+|n\/a)\]", msg):
|
||||
continue
|
||||
print("Commits must begin with #[xxx] or [n/a] (%s)" % msg.strip(), file=sys
|
||||
.stderr)
|
||||
print("Commits must begin with #[xxx] or [n/a] (%s)" % msg.strip(), file=sys.stderr)
|
||||
sys.exit(1)
|
||||
'
|
||||
__________________________________________________________________
|
||||
|
||||
So there you have it: simple GitHub Actions commit linting in most of
|
||||
Viget's favorite languages (try as I might, I could not figure out how
|
||||
to do this in [34]Elixir, at least not in a concise way). As I said up
|
||||
front, writing good tickets and then referencing them in commit
|
||||
messages so that they can easily be surfaced with git blame pays huge
|
||||
dividends over the life of a codebase. If you're not already in the
|
||||
habit of doing this, well, the best time to start was Initial commit,
|
||||
but the second best time is today.
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
[35]David Eisinger
|
||||
So there you have it: simple GitHub Actions commit linting in most of Viget's
|
||||
favorite languages (try as I might, I could not figure out how to do this in
|
||||
[39]Elixir, at least not in a concise way). As I said up front, writing good
|
||||
tickets and then referencing them in commit messages so that they can easily be
|
||||
surfaced with git blame pays huge dividends over the life of a codebase. If
|
||||
you're not already in the habit of doing this, well, the best time to start was
|
||||
Initial commit, but the second best time is today.
|
||||
|
||||
[36]David is Viget's managing development director. From our Durham,
|
||||
NC, office, he builds high-quality, forward-thinking software for PUMA,
|
||||
the World Wildlife Fund, NFLPA, and many others.
|
||||
[37]More articles by David
|
||||
[40] David Eisinger
|
||||
|
||||
[41]David is Viget's managing development director. From our Durham, NC,
|
||||
office, he builds high-quality, forward-thinking software for PUMA, the World
|
||||
Wildlife Fund, NFLPA, and many others.
|
||||
|
||||
[42]More articles by David
|
||||
|
||||
Related Articles
|
||||
|
||||
* Thoughts on Remix
|
||||
• [43]
|
||||
Thoughts on Remix
|
||||
|
||||
Article
|
||||
|
||||
Thoughts on Remix
|
||||
|
||||
Solomon Hawk
|
||||
* Going Headless in 2024: A View of the Headless CMS Landscape
|
||||
|
||||
• [44]
|
||||
Going Headless in 2024: A View of the Headless CMS Landscape
|
||||
|
||||
Article
|
||||
|
||||
Going Headless in 2024: A View of the Headless CMS Landscape
|
||||
|
||||
Andrew Mosby
|
||||
* Maintenance Matters: Good Tests
|
||||
|
||||
• [45]
|
||||
Maintenance Matters: Good Tests
|
||||
|
||||
Article
|
||||
|
||||
Maintenance Matters: Good Tests
|
||||
|
||||
David Eisinger
|
||||
|
||||
The Viget Newsletter
|
||||
|
||||
Nobody likes popups, so we waited until now to recommend our
|
||||
newsletter, featuring thoughts, opinions, and tools for building a
|
||||
better digital world. [38]Read the current issue.
|
||||
Nobody likes popups, so we waited until now to recommend our newsletter,
|
||||
featuring thoughts, opinions, and tools for building a better digital world.
|
||||
[46]Read the current issue.
|
||||
|
||||
[39]Subscribe Here (opens in new window)
|
||||
[47]Subscribe Here (opens in new window)
|
||||
|
||||
Site Footer
|
||||
|
||||
Have an unsolvable problem or audacious idea?
|
||||
|
||||
Let’s get to work
|
||||
[40]Contact Us [41]hello@viget.com [42]703.891.0670
|
||||
|
||||
* Practice
|
||||
* [43]Work
|
||||
* [44]Services
|
||||
* [45]Articles
|
||||
[48] Contact Us [49] hello@viget.com [50] 703.891.0670
|
||||
|
||||
* People
|
||||
* [46]Company
|
||||
* [47]Careers
|
||||
* [48]Code of Ethics
|
||||
* [49]Diversity & Inclusion
|
||||
• Practice
|
||||
• [51]Work
|
||||
• [52]Services
|
||||
• [53]Articles
|
||||
|
||||
* More
|
||||
* [50]Pointless Corp.
|
||||
* [51]Explorations
|
||||
* [52]Code at Viget
|
||||
• People
|
||||
• [54]Company
|
||||
• [55]Careers
|
||||
• [56]Code of Ethics
|
||||
• [57]Diversity & Inclusion
|
||||
|
||||
• More
|
||||
• [58]Pointless Corp.
|
||||
• [59]Explorations
|
||||
• [60]Code at Viget
|
||||
|
||||
Sign Up For Our Newsletter
|
||||
|
||||
A curated periodical featuring thoughts, opinions, and tools for
|
||||
building a better digital world.
|
||||
[53]Check it out
|
||||
A curated periodical featuring thoughts, opinions, and tools for building a
|
||||
better digital world.
|
||||
|
||||
[61] Check it out
|
||||
|
||||
Social Links
|
||||
|
||||
[54]Viget
|
||||
*
|
||||
*
|
||||
*
|
||||
*
|
||||
*
|
||||
*
|
||||
[62] Viget
|
||||
|
||||
• [63]
|
||||
• [64]
|
||||
• [65]
|
||||
• [66]
|
||||
• [67]
|
||||
• [68]
|
||||
|
||||
Office Locations
|
||||
|
||||
* [55]Washington DC Metro
|
||||
* [56]Durham, NC
|
||||
* [57]Boulder, CO
|
||||
* [58]Chattanooga, TN
|
||||
• [69]Washington DC Metro
|
||||
• [70]Durham, NC
|
||||
• [71]Boulder, CO
|
||||
• [72]Chattanooga, TN
|
||||
|
||||
© 1999 – 2024 Viget Labs, LLC. [59]Terms [60]Privacy [61]MRF
|
||||
© 1999 – 2024 Viget Labs, LLC. [73]Terms [74]Privacy [75]MRF
|
||||
|
||||
* [62]Home
|
||||
* [63]Articles
|
||||
* [64]Simple Commit Linting for Issue Number in GitHub Actions
|
||||
• [76]Home
|
||||
• [77]Articles
|
||||
• [78]Simple Commit Linting for Issue Number in GitHub Actions
|
||||
|
||||
[65]Subscribe (opens in a new window)
|
||||
(BUTTON) Share
|
||||
* [66]Share this page
|
||||
* [67]Share this page
|
||||
* [68]Post this page
|
||||
[79] Subscribe (opens in a new window)
|
||||
Share
|
||||
|
||||
References
|
||||
• [81] Share this page
|
||||
• [82] Share this page
|
||||
• [83] Post this page
|
||||
|
||||
Visible links:
|
||||
1. https://feeds.feedburner.com/Viget
|
||||
2. https://www.googletagmanager.com/ns.html?id=GTM-5V7V
|
||||
3. https://www.viget.com/articles/simple-commit-linting-for-issue-number-in-github-actions/#content
|
||||
4. https://www.viget.com/
|
||||
5. https://www.viget.com/work/
|
||||
6. https://www.viget.com/services/
|
||||
7. https://www.viget.com/articles/
|
||||
8. https://www.viget.com/careers/
|
||||
9. https://www.viget.com/contact/
|
||||
10. https://www.viget.com/
|
||||
11. https://www.viget.com/work/
|
||||
12. https://www.viget.com/services/
|
||||
13. https://www.viget.com/articles/
|
||||
14. https://www.viget.com/contact/
|
||||
15. https://www.viget.com/about/
|
||||
16. https://www.viget.com/careers/
|
||||
17. https://www.viget.com/code-of-ethics/
|
||||
18. https://www.viget.com/diversity-equity-and-inclusion/
|
||||
19. https://pointlesscorp.com/
|
||||
20. https://explorations.viget.com/
|
||||
21. https://code.viget.com/
|
||||
22. https://www.viget.com/about/team/deisinger/
|
||||
23. https://www.viget.com/about/team/deisinger/
|
||||
24. https://www.viget.com/articles/category/code/
|
||||
25. https://www.viget.com/articles/category/tooling/
|
||||
26. https://github.com/tpope/vim-fugitive#fugitivevim
|
||||
27. https://www.viget.com/articles/get-the-most-out-of-your-internal-retrospectives/
|
||||
28. https://www.viget.com/articles/maintenance-matters-continuous-integration/
|
||||
29. https://commitlint.js.org/
|
||||
30. https://www.viget.com/articles/simple-commit-linting-for-issue-number-in-github-actions/#other-languages
|
||||
31. https://www.viget.com/articles/simple-commit-linting-for-issue-number-in-github-actions/#javaScript
|
||||
32. https://www.viget.com/articles/simple-commit-linting-for-issue-number-in-github-actions/#php
|
||||
33. https://www.viget.com/articles/simple-commit-linting-for-issue-number-in-github-actions/#python
|
||||
34. https://elixir-lang.org/
|
||||
35. https://www.viget.com/about/team/deisinger/
|
||||
36. https://www.viget.com/about/team/deisinger/
|
||||
37. https://www.viget.com/about/team/deisinger/
|
||||
38. https://www.viget.com/newsletter
|
||||
39. http://eepurl.com/gtHqsj
|
||||
40. https://www.viget.com/contact/
|
||||
41. mailto:hello@viget.com?subject=Hello, Viget!
|
||||
42. tel:7038910670
|
||||
43. https://www.viget.com/work/
|
||||
44. https://www.viget.com/services/
|
||||
45. https://www.viget.com/articles/
|
||||
46. https://www.viget.com/about/
|
||||
47. https://www.viget.com/careers/
|
||||
48. https://www.viget.com/code-of-ethics/
|
||||
49. https://www.viget.com/diversity-equity-and-inclusion/
|
||||
50. https://pointlesscorp.com/
|
||||
51. https://explorations.viget.com/
|
||||
52. https://code.viget.com/
|
||||
53. https://www.viget.com/newsletter/
|
||||
54. https://www.viget.com/
|
||||
55. https://www.viget.com/dc-metro-hq/
|
||||
56. https://www.viget.com/durham/
|
||||
57. https://www.viget.com/boulder/
|
||||
58. https://www.viget.com/chattanooga/
|
||||
59. https://www.viget.com/terms-conditions/
|
||||
60. https://www.viget.com/privacy-policy/
|
||||
61. https://individual.carefirst.com/individuals-families/mandates-policies/machine-readable-file.page
|
||||
62. https://www.viget.com/
|
||||
63. https://www.viget.com/articles
|
||||
64. https://www.viget.com/articles/simple-commit-linting-for-issue-number-in-github-actions/#hero
|
||||
65. http://eepurl.com/gtHqsj
|
||||
66. https://www.facebook.com/sharer/sharer.php?u=https://www.viget.com/articles/simple-commit-linting-for-issue-number-in-github-actions/
|
||||
67. http://www.linkedin.com/shareArticle?mini=true&url=https://www.viget.com/articles/simple-commit-linting-for-issue-number-in-github-actions/
|
||||
68. https://x.com/intent/tweet?text=Including relevant ticket numbers in your git commit messages is a gift to your future self. Here's how to ensure you do it consistently. https://www.viget.com/articles/simple-commit-linting-for-issue-number-in-github-actions/
|
||||
|
||||
Hidden links:
|
||||
70. https://www.viget.com/newsletter/revolutionizing-the-web/
|
||||
71. https://www.viget.com/articles/elephants-squirrels-porcupines-and-zombies-can-help-your-team-thrive/
|
||||
72. https://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Fwww.viget.com%2Farticles%2Fsimple-commit-linting-for-issue-number-in-github-actions%2F
|
||||
73. http://www.linkedin.com/shareArticle?mini=true&url=https%3A%2F%2Fwww.viget.com%2Farticles%2Fsimple-commit-linting-for-issue-number-in-github-actions%2F
|
||||
74. https://x.com/intent/tweet?text=Including%20relevant%20ticket%20numbers%20in%20your%20git%20commit%20messages%20is%20a%20gift%20to%20your%20future%20self.%20Here%27s%20how%20to%20ensure%20you%20do%20it%20consistently.%20https%3A%2F%2Fwww.viget.com%2Farticles%2Fsimple-commit-linting-for-issue-number-in-github-actions%2F
|
||||
75. https://www.viget.com/articles/thoughts-on-remix/
|
||||
76. https://www.viget.com/articles/a-view-of-the-headless-cms-landscape/
|
||||
77. https://www.viget.com/articles/maintenance-matters-good-tests/
|
||||
78. http://x.com/viget
|
||||
79. https://github.com/vigetlabs
|
||||
80. https://dribbble.com/viget
|
||||
81. https://www.instagram.com/viget/
|
||||
82. https://www.linkedin.com/company/viget-labs
|
||||
83. https://vimeo.com/viget/collections
|
||||
References:
|
||||
|
||||
[1] https://www.viget.com/articles/simple-commit-linting-for-issue-number-in-github-actions/#content
|
||||
[2] https://www.viget.com/
|
||||
[3] https://www.viget.com/work/
|
||||
[4] https://www.viget.com/services/
|
||||
[5] https://www.viget.com/articles/
|
||||
[6] https://www.viget.com/careers/
|
||||
[7] https://www.viget.com/contact/
|
||||
[9] https://www.viget.com/
|
||||
[11] https://www.viget.com/work/
|
||||
[12] https://www.viget.com/services/
|
||||
[13] https://www.viget.com/articles/
|
||||
[14] https://www.viget.com/contact/
|
||||
[15] https://www.viget.com/about/
|
||||
[16] https://www.viget.com/careers/
|
||||
[17] https://www.viget.com/code-of-ethics/
|
||||
[18] https://www.viget.com/diversity-equity-and-inclusion/
|
||||
[19] https://pointlesscorp.com/
|
||||
[20] https://explorations.viget.com/
|
||||
[21] https://code.viget.com/
|
||||
[22] https://www.viget.com/newsletter/revolutionizing-the-web/
|
||||
[23] https://www.viget.com/articles/elephants-squirrels-porcupines-and-zombies-can-help-your-team-thrive/
|
||||
[24] https://www.viget.com/about/team/deisinger/
|
||||
[25] https://www.viget.com/about/team/deisinger/
|
||||
[26] https://www.viget.com/articles/category/code/
|
||||
[27] https://www.viget.com/articles/category/tooling/
|
||||
[28] https://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Fwww.viget.com%2Farticles%2Fsimple-commit-linting-for-issue-number-in-github-actions%2F
|
||||
[29] http://www.linkedin.com/shareArticle?mini=true&url=https%3A%2F%2Fwww.viget.com%2Farticles%2Fsimple-commit-linting-for-issue-number-in-github-actions%2F
|
||||
[30] https://x.com/intent/tweet?text=Including%20relevant%20ticket%20numbers%20in%20your%20git%20commit%20messages%20is%20a%20gift%20to%20your%20future%20self.%20Here%27s%20how%20to%20ensure%20you%20do%20it%20consistently.%20https%3A%2F%2Fwww.viget.com%2Farticles%2Fsimple-commit-linting-for-issue-number-in-github-actions%2F
|
||||
[31] https://github.com/tpope/vim-fugitive#fugitivevim
|
||||
[32] https://www.viget.com/articles/get-the-most-out-of-your-internal-retrospectives/
|
||||
[33] https://www.viget.com/articles/maintenance-matters-continuous-integration/
|
||||
[34] https://commitlint.js.org/
|
||||
[35] https://www.viget.com/articles/simple-commit-linting-for-issue-number-in-github-actions/#other-languages
|
||||
[36] https://www.viget.com/articles/simple-commit-linting-for-issue-number-in-github-actions/#javaScript
|
||||
[37] https://www.viget.com/articles/simple-commit-linting-for-issue-number-in-github-actions/#php
|
||||
[38] https://www.viget.com/articles/simple-commit-linting-for-issue-number-in-github-actions/#python
|
||||
[39] https://elixir-lang.org/
|
||||
[40] https://www.viget.com/about/team/deisinger/
|
||||
[41] https://www.viget.com/about/team/deisinger/
|
||||
[42] https://www.viget.com/about/team/deisinger/
|
||||
[43] https://www.viget.com/articles/thoughts-on-remix/
|
||||
[44] https://www.viget.com/articles/a-view-of-the-headless-cms-landscape/
|
||||
[45] https://www.viget.com/articles/maintenance-matters-good-tests/
|
||||
[46] https://www.viget.com/newsletter
|
||||
[47] http://eepurl.com/gtHqsj
|
||||
[48] https://www.viget.com/contact/
|
||||
[49] mailto:hello@viget.com?subject=Hello%2C%20Viget%21
|
||||
[50] tel:7038910670
|
||||
[51] https://www.viget.com/work/
|
||||
[52] https://www.viget.com/services/
|
||||
[53] https://www.viget.com/articles/
|
||||
[54] https://www.viget.com/about/
|
||||
[55] https://www.viget.com/careers/
|
||||
[56] https://www.viget.com/code-of-ethics/
|
||||
[57] https://www.viget.com/diversity-equity-and-inclusion/
|
||||
[58] https://pointlesscorp.com/
|
||||
[59] https://explorations.viget.com/
|
||||
[60] https://code.viget.com/
|
||||
[61] https://www.viget.com/newsletter/
|
||||
[62] https://www.viget.com/
|
||||
[63] http://x.com/viget
|
||||
[64] https://github.com/vigetlabs
|
||||
[65] https://dribbble.com/viget
|
||||
[66] https://www.instagram.com/viget/
|
||||
[67] https://www.linkedin.com/company/viget-labs
|
||||
[68] https://vimeo.com/viget/collections
|
||||
[69] https://www.viget.com/dc-metro-hq/
|
||||
[70] https://www.viget.com/durham/
|
||||
[71] https://www.viget.com/boulder/
|
||||
[72] https://www.viget.com/chattanooga/
|
||||
[73] https://www.viget.com/terms-conditions/
|
||||
[74] https://www.viget.com/privacy-policy/
|
||||
[75] https://individual.carefirst.com/individuals-families/mandates-policies/machine-readable-file.page
|
||||
[76] https://www.viget.com/
|
||||
[77] https://www.viget.com/articles
|
||||
[78] https://www.viget.com/articles/simple-commit-linting-for-issue-number-in-github-actions/#hero
|
||||
[79] http://eepurl.com/gtHqsj
|
||||
[81] https://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Fwww.viget.com%2Farticles%2Fsimple-commit-linting-for-issue-number-in-github-actions%2F
|
||||
[82] http://www.linkedin.com/shareArticle?mini=true&url=https%3A%2F%2Fwww.viget.com%2Farticles%2Fsimple-commit-linting-for-issue-number-in-github-actions%2F
|
||||
[83] https://x.com/intent/tweet?text=Including%20relevant%20ticket%20numbers%20in%20your%20git%20commit%20messages%20is%20a%20gift%20to%20your%20future%20self.%20Here%27s%20how%20to%20ensure%20you%20do%20it%20consistently.%20https%3A%2F%2Fwww.viget.com%2Farticles%2Fsimple-commit-linting-for-issue-number-in-github-actions%2F
|
||||
|
||||
@@ -1,51 +1,50 @@
|
||||
#[1]Viget Articles
|
||||
[1] Skip to Main Content
|
||||
[2] Viget
|
||||
|
||||
IFRAME: [2]https://www.googletagmanager.com/ns.html?id=GTM-5V7V
|
||||
|
||||
[3]Skip to Main Content
|
||||
|
||||
[4]Viget
|
||||
|
||||
* [5]Work
|
||||
* [6]Services
|
||||
* [7]Articles
|
||||
* [8]Careers
|
||||
* [9]Contact
|
||||
* (BUTTON) Open Menu
|
||||
• [3] Work
|
||||
• [4] Services
|
||||
• [5] Articles
|
||||
• [6] Careers
|
||||
• [7] Contact
|
||||
• Open Menu
|
||||
|
||||
Navigation
|
||||
|
||||
[10]Viget (BUTTON) Close
|
||||
* Practice
|
||||
* [11]Work
|
||||
* [12]Services
|
||||
* [13]Articles
|
||||
[9] Viget Close
|
||||
|
||||
• Practice
|
||||
• [11] Work
|
||||
• [12] Services
|
||||
• [13] Articles
|
||||
|
||||
We’re a full-service digital agency that’s been helping clients make lasting
|
||||
change since 1999.
|
||||
|
||||
We’re a full-service digital agency that’s been helping clients make
|
||||
lasting change since 1999.
|
||||
[14] Contact Us
|
||||
|
||||
People
|
||||
|
||||
* [15]Company
|
||||
* [16]Careers
|
||||
* [17]Code of Ethics
|
||||
* [18]Diversity & Inclusion
|
||||
• [15]Company
|
||||
• [16]Careers
|
||||
• [17]Code of Ethics
|
||||
• [18]Diversity & Inclusion
|
||||
|
||||
More
|
||||
|
||||
* [19]Pointless Corp.
|
||||
* [20]Explorations
|
||||
* [21]Code at Viget
|
||||
• [19]Pointless Corp.
|
||||
• [20]Explorations
|
||||
• [21]Code at Viget
|
||||
|
||||
Featured
|
||||
|
||||
[22]
|
||||
Read the Article: Revolutionizing the Web
|
||||
|
||||
Newsletter
|
||||
|
||||
Revolutionizing the Web
|
||||
|
||||
[23]
|
||||
Read the Article: The Reflection Before Christmas
|
||||
|
||||
Article
|
||||
@@ -54,352 +53,368 @@ The Reflection Before Christmas
|
||||
|
||||
What’s in a Word? Building a Verbose Party Game
|
||||
|
||||
[22]Haroon Matties [23]David Eisinger
|
||||
[final]
|
||||
[24] Haroon Matties [25] David Eisinger
|
||||
|
||||
Haley Johnson, Former Product Manager,
|
||||
|
||||
[24]Haroon Matties, Product Designer,
|
||||
[26]Haroon Matties, Product Designer,
|
||||
|
||||
Andrew Thomas, Former JavaScript Developer,
|
||||
|
||||
Nicole Rymarz, Former Project Manager, and
|
||||
|
||||
[25]David Eisinger, Development Director
|
||||
[27]David Eisinger, Development Director
|
||||
|
||||
Article Categories: [26]#News & Culture, [27]#Employee Engagement
|
||||
Article Categories: [28] #News & Culture, [29] #Employee Engagement
|
||||
|
||||
Posted on May 25, 2023
|
||||
* Share
|
||||
* Share
|
||||
* Post
|
||||
|
||||
Our Pointless Palooza team designed and built a word-association game
|
||||
in 48 hours. Here's what we learned (and loved) while doing it.
|
||||
• [30]
|
||||
Share
|
||||
• [31]
|
||||
Share
|
||||
• [32]
|
||||
Post
|
||||
|
||||
O u r P o i n t l e s s P a l o o z a t e a m d e s i g n e d a n d b u
|
||||
i l t a w o r d - a s s o c i a t i o n g a m e i n 4 8 h o u r s . H e
|
||||
r e ' s w h a t w e l e a r n e d ( a n d l o v e d ) w h i l e d o i n
|
||||
g i t .
|
||||
Our Pointless Palooza team designed and built a word-association game in 48
|
||||
hours. Here's what we learned (and loved) while doing it.
|
||||
|
||||
Fun group party game. Somehow incorporate AI. Build it quickly. These
|
||||
were the constraints we put on our mostly Colorado-based Pointless
|
||||
Corp. team before [28]Pointless Palooza. A few of us wanted to partake
|
||||
in the old Pointless tradition of trying out another role on the
|
||||
project, so simplicity was key. Thankfully, Haley was itching to build
|
||||
a digital version of a very fun, but relatively straightforward, game.
|
||||
O u r P o i n t l e s s P a l o o z a t e a m d e s i g n e d a n d b u i l t a
|
||||
w o r d - a s s o c i a t i o n g a m e i n 4 8 h o u r s . H e r e ' s w h a t
|
||||
w e l e a r n e d ( a n d l o v e d ) w h i l e d o i n g i t .
|
||||
|
||||
[29]Just One is a collaborative word association game that encourages
|
||||
both teamwork and creativity. On a given turn, everyone except one
|
||||
player (the Guesser) knows a random mystery word and must attempt to
|
||||
get the Guesser to guess the mystery word via one-word hints. The catch
|
||||
is that every hint must be unique, so duplicate hints are eliminated
|
||||
and not shown to the Guesser.
|
||||
Fun group party game. Somehow incorporate AI. Build it quickly. These were the
|
||||
constraints we put on our mostly Colorado-based Pointless Corp. team before
|
||||
[33]Pointless Palooza. A few of us wanted to partake in the old Pointless
|
||||
tradition of trying out another role on the project, so simplicity was key.
|
||||
Thankfully, Haley was itching to build a digital version of a very fun, but
|
||||
relatively straightforward, game.
|
||||
|
||||
Haley mentioned that she often hacked the board game to accommodate
|
||||
more than 7 players and thought that doing so added a fun element of
|
||||
chaos to the rounds. A digital version of the game would facilitate
|
||||
expanding the party and it seemed like an easy enough lift for our
|
||||
team.
|
||||
[34]Just One is a collaborative word association game that encourages both
|
||||
teamwork and creativity. On a given turn, everyone except one player (the
|
||||
Guesser) knows a random mystery word and must attempt to get the Guesser to
|
||||
guess the mystery word via one-word hints. The catch is that every hint must be
|
||||
unique, so duplicate hints are eliminated and not shown to the Guesser.
|
||||
|
||||
It’s easier to play than explain, so mosey on over to [30]verbose.club
|
||||
and give it a try. And, if you want to know more about how each of us
|
||||
fared going heads down on one project for 48 hours (and counting), read
|
||||
on.
|
||||
Haley mentioned that she often hacked the board game to accommodate more than 7
|
||||
players and thought that doing so added a fun element of chaos to the rounds. A
|
||||
digital version of the game would facilitate expanding the party and it seemed
|
||||
like an easy enough lift for our team.
|
||||
|
||||
[31]Haley | Pointless Role: Design | Day Job: PM
|
||||
It’s easier to play than explain, so mosey on over to [35]verbose.club and give
|
||||
it a try. And, if you want to know more about how each of us fared going heads
|
||||
down on one project for 48 hours (and counting), read on.
|
||||
|
||||
My favorite part of building verbose.club was being granted permission
|
||||
to focus on one project with my teammates. We hopped on Meets or
|
||||
huddles to discuss requirements. Nicole and I jammed in the same Figma
|
||||
file or wireframe. I got to drop everything to QA a 600-word word bank.
|
||||
Viget has great ways of collaborating remotely, but it was also fun to
|
||||
be part of the in-office crew, having late night snacks between cram
|
||||
sessions like we were in college again.
|
||||
[662shots_so-1]
|
||||
|
||||
Something I learned: I tried my hand at being a “designer” and learned
|
||||
quickly that nothing is too precious. Sometimes the code translates
|
||||
things differently. Also, design systems are essential to throwing
|
||||
together screens quickly. And Figma has tons of libraries that you can
|
||||
use instead of starting from scratch!
|
||||
__________________________________________________________________
|
||||
[36]Haley | Pointless Role: Design | Day Job: PM
|
||||
|
||||
[32]Haroon | Pointless Role: Dev | Day Job: Product Design
|
||||
My favorite part of building verbose.club was being granted permission to focus
|
||||
on one project with my teammates. We hopped on Meets or huddles to discuss
|
||||
requirements. Nicole and I jammed in the same Figma file or wireframe. I got to
|
||||
drop everything to QA a 600-word word bank. Viget has great ways of
|
||||
collaborating remotely, but it was also fun to be part of the in-office crew,
|
||||
having late night snacks between cram sessions like we were in college again.
|
||||
|
||||
My favorite part of building verbose.club was stepping into a new role,
|
||||
or at least trying to. I got a chance to build out styled components
|
||||
and pages for our game with React, Typescript, and Tailwind. Though my
|
||||
constant questions for Andrew and David were likely annoying, it was an
|
||||
extremely rewarding experience to see a project come to life from
|
||||
another perspective.
|
||||
Something I learned: I tried my hand at being a “designer” and learned quickly
|
||||
that nothing is too precious. Sometimes the code translates things differently.
|
||||
Also, design systems are essential to throwing together screens quickly. And
|
||||
Figma has tons of libraries that you can use instead of starting from scratch!
|
||||
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
[37]Haroon | Pointless Role: Dev | Day Job: Product Design
|
||||
|
||||
My favorite part of building verbose.club was stepping into a new role, or at
|
||||
least trying to. I got a chance to build out styled components and pages for
|
||||
our game with React, Typescript, and Tailwind. Though my constant questions for
|
||||
Andrew and David were likely annoying, it was an extremely rewarding experience
|
||||
to see a project come to life from another perspective.
|
||||
|
||||
Something I learned is that it's best to keep commits atomic, meaning
|
||||
contributions to the codebase are small, isolated, and clear. Though a
|
||||
best practice for many, this approach made it easier for me as a novice
|
||||
to contribute quickly, and likely made it easier for Andrew to fix
|
||||
things later.
|
||||
__________________________________________________________________
|
||||
contributions to the codebase are small, isolated, and clear. Though a best
|
||||
practice for many, this approach made it easier for me as a novice to
|
||||
contribute quickly, and likely made it easier for Andrew to fix things later.
|
||||
|
||||
[33]Nicole | Pointless Role: Design | Day Job: PM
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
My favorite part of building verbose.club was seeing our team
|
||||
immediately dive in with a “we’re in this together” approach. I am
|
||||
still relatively new to Viget and it was my first time working with a
|
||||
handful of my teammates, so I really appreciated the collaborative
|
||||
environment and how everyone was really open to hearing new ideas,
|
||||
trying something new, and working together to make something cool.
|
||||
[38]Nicole | Pointless Role: Design | Day Job: PM
|
||||
|
||||
Something I learned was how to use [34]Whimsical and [35]Figma to make
|
||||
wireframes and designs. I had used these tools before; but, it was my
|
||||
first time “building” anything at Viget — and it was super fun. I’m
|
||||
glad I got to try something outside of my usual PM role.
|
||||
__________________________________________________________________
|
||||
My favorite part of building verbose.club was seeing our team immediately dive
|
||||
in with a “we’re in this together” approach. I am still relatively new to Viget
|
||||
and it was my first time working with a handful of my teammates, so I really
|
||||
appreciated the collaborative environment and how everyone was really open to
|
||||
hearing new ideas, trying something new, and working together to make something
|
||||
cool.
|
||||
|
||||
[36]Andrew | Pointless Role: CEO Dev | Day Job: Dev
|
||||
Something I learned was how to use [39]Whimsical and [40]Figma to make
|
||||
wireframes and designs. I had used these tools before; but, it was my first
|
||||
time “building” anything at Viget — and it was super fun. I’m glad I got to try
|
||||
something outside of my usual PM role.
|
||||
|
||||
My favorite part of building verbose.club was coordinating work among
|
||||
my teammates. With less than 3 days to do everything, we had to hit the
|
||||
ground running. To start, our PMs and designer jumped on wireframing
|
||||
and design thinking while David brought to life a Rails back-end & API.
|
||||
I was in a good spot to act as the messenger between these two lines of
|
||||
work: parsing high-level thinking & decisions from the designers into
|
||||
information useful to David in crafting the API; then shuttling David’s
|
||||
feedback back to the broader team.
|
||||
Next up, it was time to build out the user-facing Remix app. We were
|
||||
able to split this work into two parallel streams. I built out unstyled
|
||||
screens, game business logic, and the necessary glue code, resulting in
|
||||
a functional app with a barebones UI. In parallel, Haroon built out
|
||||
high-fidelity screens, using static placeholders where dynamic content
|
||||
would eventually live. From there, collaborating to merge our work and
|
||||
upgrade the UI was a simple task.
|
||||
I think our team came out of this project inspired by what can be
|
||||
accomplished with smart coordination. We managed to efficiently build
|
||||
consensus, parallelize work, and learn from one another — and the
|
||||
result speaks for itself.
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
[41]Andrew | Pointless Role: CEO Dev | Day Job: Dev
|
||||
|
||||
My favorite part of building verbose.club was coordinating work among my
|
||||
teammates. With less than 3 days to do everything, we had to hit the ground
|
||||
running. To start, our PMs and designer jumped on wireframing and design
|
||||
thinking while David brought to life a Rails back-end & API. I was in a good
|
||||
spot to act as the messenger between these two lines of work: parsing
|
||||
high-level thinking & decisions from the designers into information useful to
|
||||
David in crafting the API; then shuttling David’s feedback back to the broader
|
||||
team.
|
||||
|
||||
Next up, it was time to build out the user-facing Remix app. We were able to
|
||||
split this work into two parallel streams. I built out unstyled screens, game
|
||||
business logic, and the necessary glue code, resulting in a functional app with
|
||||
a barebones UI. In parallel, Haroon built out high-fidelity screens, using
|
||||
static placeholders where dynamic content would eventually live. From there,
|
||||
collaborating to merge our work and upgrade the UI was a simple task.
|
||||
|
||||
I think our team came out of this project inspired by what can be accomplished
|
||||
with smart coordination. We managed to efficiently build consensus, parallelize
|
||||
work, and learn from one another — and the result speaks for itself.
|
||||
|
||||
Something I learned was that parallelizing a project is tricky and
|
||||
communication is key. When multiple streams of work are progressing in
|
||||
parallel, decisions are constantly being made — some big, some small —
|
||||
and many having more influence than immediately apparent. Keeping all
|
||||
contributors 100% in the loop is likely impossible, and certainly
|
||||
unrealistic. Smart coordination and communication is the magic sauce
|
||||
that makes it all work.
|
||||
__________________________________________________________________
|
||||
parallel, decisions are constantly being made — some big, some small — and many
|
||||
having more influence than immediately apparent. Keeping all contributors 100%
|
||||
in the loop is likely impossible, and certainly unrealistic. Smart coordination
|
||||
and communication is the magic sauce that makes it all work.
|
||||
|
||||
[37]David | Pointless Role: Dev | Day Job: Dev
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
My favorite part of working on verbose.club was helping from afar. I
|
||||
was 1,500 miles and several time zones away from most of the team, so I
|
||||
really focused on doing low-level work that would enable the rest of
|
||||
the team to be successful: setting up an API, getting the app running
|
||||
on Docker for easy local development, and making it straightforward for
|
||||
others to deploy code. It was sort of like being the bass player in a
|
||||
rad band.
|
||||
[42]David | Pointless Role: Dev | Day Job: Dev
|
||||
|
||||
My favorite part of working on verbose.club was helping from afar. I was 1,500
|
||||
miles and several time zones away from most of the team, so I really focused on
|
||||
doing low-level work that would enable the rest of the team to be successful:
|
||||
setting up an API, getting the app running on Docker for easy local
|
||||
development, and making it straightforward for others to deploy code. It was
|
||||
sort of like being the bass player in a rad band.
|
||||
|
||||
Something I learned is that [43]Caddy is super legit. Here’s the entire web
|
||||
server config file, which automatically sets up HTTPS and proxies traffic to
|
||||
our Remix app:
|
||||
|
||||
Something I learned is that [38]Caddy is super legit. Here’s the entire
|
||||
web server config file, which automatically sets up HTTPS and proxies
|
||||
traffic to our Remix app:
|
||||
verbose.club
|
||||
|
||||
reverse_proxy remix-prod:3001
|
||||
|
||||
Our overall architecture (running with docker compose) looks like this:
|
||||
__________________________________________________________________
|
||||
|
||||
In two days’ time, we had a beautiful, functioning game that we played
|
||||
during our Pointless celebration happy hour. Since then, we’ve added
|
||||
some cool animations and the ability to pull in AI players — no human
|
||||
friends required! So, grab some friends (robot or otherwise) and check
|
||||
out [39]verbose.club!
|
||||
[verbose-arch]
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
[40]Haroon Matties
|
||||
In two days’ time, we had a beautiful, functioning game that we played during
|
||||
our Pointless celebration happy hour. Since then, we’ve added some cool
|
||||
animations and the ability to pull in AI players — no human friends required!
|
||||
So, grab some friends (robot or otherwise) and check out [44]verbose.club!
|
||||
|
||||
[41]Haroon is a product designer in our Boulder, CO office. His
|
||||
appreciation for human-centered design informs his approach to
|
||||
researching and building intuitive interfaces.
|
||||
[42]More articles by Haroon
|
||||
[43]David Eisinger
|
||||
[45] Haroon Matties
|
||||
|
||||
[44]David is Viget's managing development director. From our Durham,
|
||||
NC, office, he builds high-quality, forward-thinking software for PUMA,
|
||||
the World Wildlife Fund, NFLPA, and many others.
|
||||
[45]More articles by David
|
||||
[46]Haroon is a product designer in our Boulder, CO office. His appreciation
|
||||
for human-centered design informs his approach to researching and building
|
||||
intuitive interfaces.
|
||||
|
||||
[47]More articles by Haroon
|
||||
[48] David Eisinger
|
||||
|
||||
[49]David is Viget's managing development director. From our Durham, NC,
|
||||
office, he builds high-quality, forward-thinking software for PUMA, the World
|
||||
Wildlife Fund, NFLPA, and many others.
|
||||
|
||||
[50]More articles by David
|
||||
|
||||
Related Articles
|
||||
|
||||
* Panel by Panel: A Comically Fun Way to Use Figma
|
||||
• [51]
|
||||
Panel by Panel: A Comically Fun Way to Use Figma
|
||||
|
||||
Article
|
||||
|
||||
Panel by Panel: A Comically Fun Way to Use Figma
|
||||
|
||||
Gray Gill
|
||||
* The Enduring Point of Pointless Corp.
|
||||
|
||||
• [52]
|
||||
The Enduring Point of Pointless Corp.
|
||||
|
||||
Article
|
||||
|
||||
The Enduring Point of Pointless Corp.
|
||||
|
||||
Brian Williams
|
||||
* Plan a Killer Party with Thrillr
|
||||
|
||||
• [53]
|
||||
Plan a Killer Party with Thrillr
|
||||
|
||||
Article
|
||||
|
||||
Plan a Killer Party with Thrillr
|
||||
|
||||
Addison DeLancey
|
||||
|
||||
The Viget Newsletter
|
||||
|
||||
Nobody likes popups, so we waited until now to recommend our
|
||||
newsletter, featuring thoughts, opinions, and tools for building a
|
||||
better digital world. [46]Read the current issue.
|
||||
Nobody likes popups, so we waited until now to recommend our newsletter,
|
||||
featuring thoughts, opinions, and tools for building a better digital world.
|
||||
[54]Read the current issue.
|
||||
|
||||
[47]Subscribe Here (opens in new window)
|
||||
[55]Subscribe Here (opens in new window)
|
||||
|
||||
Site Footer
|
||||
|
||||
Have an unsolvable problem or audacious idea?
|
||||
|
||||
Let’s get to work
|
||||
[48]Contact Us [49]hello@viget.com [50]703.891.0670
|
||||
|
||||
* Practice
|
||||
* [51]Work
|
||||
* [52]Services
|
||||
* [53]Articles
|
||||
[56] Contact Us [57] hello@viget.com [58] 703.891.0670
|
||||
|
||||
* People
|
||||
* [54]Company
|
||||
* [55]Careers
|
||||
* [56]Code of Ethics
|
||||
* [57]Diversity & Inclusion
|
||||
• Practice
|
||||
• [59]Work
|
||||
• [60]Services
|
||||
• [61]Articles
|
||||
|
||||
* More
|
||||
* [58]Pointless Corp.
|
||||
* [59]Explorations
|
||||
* [60]Code at Viget
|
||||
• People
|
||||
• [62]Company
|
||||
• [63]Careers
|
||||
• [64]Code of Ethics
|
||||
• [65]Diversity & Inclusion
|
||||
|
||||
• More
|
||||
• [66]Pointless Corp.
|
||||
• [67]Explorations
|
||||
• [68]Code at Viget
|
||||
|
||||
Sign Up For Our Newsletter
|
||||
|
||||
A curated periodical featuring thoughts, opinions, and tools for
|
||||
building a better digital world.
|
||||
[61]Check it out
|
||||
A curated periodical featuring thoughts, opinions, and tools for building a
|
||||
better digital world.
|
||||
|
||||
[69] Check it out
|
||||
|
||||
Social Links
|
||||
|
||||
[62]Viget
|
||||
*
|
||||
*
|
||||
*
|
||||
*
|
||||
*
|
||||
*
|
||||
[70] Viget
|
||||
|
||||
• [71]
|
||||
• [72]
|
||||
• [73]
|
||||
• [74]
|
||||
• [75]
|
||||
• [76]
|
||||
|
||||
Office Locations
|
||||
|
||||
* [63]Washington DC Metro
|
||||
* [64]Durham, NC
|
||||
* [65]Boulder, CO
|
||||
* [66]Chattanooga, TN
|
||||
• [77]Washington DC Metro
|
||||
• [78]Durham, NC
|
||||
• [79]Boulder, CO
|
||||
• [80]Chattanooga, TN
|
||||
|
||||
© 1999 – 2024 Viget Labs, LLC. [67]Terms [68]Privacy [69]MRF
|
||||
© 1999 – 2024 Viget Labs, LLC. [81]Terms [82]Privacy [83]MRF
|
||||
|
||||
* [70]Home
|
||||
* [71]Articles
|
||||
* [72]What’s in a Word? Building a Verbose Party Game
|
||||
• [84]Home
|
||||
• [85]Articles
|
||||
• [86]What’s in a Word? Building a Verbose Party Game
|
||||
|
||||
[73]Subscribe (opens in a new window)
|
||||
(BUTTON) Share
|
||||
* [74]Share this page
|
||||
* [75]Share this page
|
||||
* [76]Post this page
|
||||
[87] Subscribe (opens in a new window)
|
||||
Share
|
||||
|
||||
References
|
||||
• [89] Share this page
|
||||
• [90] Share this page
|
||||
• [91] Post this page
|
||||
|
||||
Visible links:
|
||||
1. https://feeds.feedburner.com/Viget
|
||||
2. https://www.googletagmanager.com/ns.html?id=GTM-5V7V
|
||||
3. https://www.viget.com/articles/whats-in-a-word-building-a-verbose-party-game/#content
|
||||
4. https://www.viget.com/
|
||||
5. https://www.viget.com/work/
|
||||
6. https://www.viget.com/services/
|
||||
7. https://www.viget.com/articles/
|
||||
8. https://www.viget.com/careers/
|
||||
9. https://www.viget.com/contact/
|
||||
10. https://www.viget.com/
|
||||
11. https://www.viget.com/work/
|
||||
12. https://www.viget.com/services/
|
||||
13. https://www.viget.com/articles/
|
||||
14. https://www.viget.com/contact/
|
||||
15. https://www.viget.com/about/
|
||||
16. https://www.viget.com/careers/
|
||||
17. https://www.viget.com/code-of-ethics/
|
||||
18. https://www.viget.com/diversity-equity-and-inclusion/
|
||||
19. https://pointlesscorp.com/
|
||||
20. https://explorations.viget.com/
|
||||
21. https://code.viget.com/
|
||||
22. https://www.viget.com/about/team/hmatties/
|
||||
23. https://www.viget.com/about/team/deisinger/
|
||||
24. https://www.viget.com/about/team/hmatties/
|
||||
25. https://www.viget.com/about/team/deisinger/
|
||||
26. https://www.viget.com/articles/category/news-culture/
|
||||
27. https://www.viget.com/articles/category/employee-engagement/
|
||||
28. https://www.viget.com/articles/the-enduring-point-of-pointless-corp/
|
||||
29. https://boardgamegeek.com/boardgame/254640/just-one
|
||||
30. https://verbose.club/
|
||||
31. https://www.viget.com/about/team/hjohnson/
|
||||
32. https://www.viget.com/about/team/hmatties/
|
||||
33. https://www.viget.com/about/team/nrymarz/
|
||||
34. http://whimsical.com/
|
||||
35. http://figma.com/
|
||||
36. https://www.viget.com/about/team/athomas/
|
||||
37. https://www.viget.com/about/team/deisinger/
|
||||
38. https://caddyserver.com/
|
||||
39. https://verbose.club/
|
||||
40. https://www.viget.com/about/team/hmatties/
|
||||
41. https://www.viget.com/about/team/hmatties/
|
||||
42. https://www.viget.com/about/team/hmatties/
|
||||
43. https://www.viget.com/about/team/deisinger/
|
||||
44. https://www.viget.com/about/team/deisinger/
|
||||
45. https://www.viget.com/about/team/deisinger/
|
||||
46. https://www.viget.com/newsletter
|
||||
47. http://eepurl.com/gtHqsj
|
||||
48. https://www.viget.com/contact/
|
||||
49. mailto:hello@viget.com?subject=Hello, Viget!
|
||||
50. tel:7038910670
|
||||
51. https://www.viget.com/work/
|
||||
52. https://www.viget.com/services/
|
||||
53. https://www.viget.com/articles/
|
||||
54. https://www.viget.com/about/
|
||||
55. https://www.viget.com/careers/
|
||||
56. https://www.viget.com/code-of-ethics/
|
||||
57. https://www.viget.com/diversity-equity-and-inclusion/
|
||||
58. https://pointlesscorp.com/
|
||||
59. https://explorations.viget.com/
|
||||
60. https://code.viget.com/
|
||||
61. https://www.viget.com/newsletter/
|
||||
62. https://www.viget.com/
|
||||
63. https://www.viget.com/dc-metro-hq/
|
||||
64. https://www.viget.com/durham/
|
||||
65. https://www.viget.com/boulder/
|
||||
66. https://www.viget.com/chattanooga/
|
||||
67. https://www.viget.com/terms-conditions/
|
||||
68. https://www.viget.com/privacy-policy/
|
||||
69. https://individual.carefirst.com/individuals-families/mandates-policies/machine-readable-file.page
|
||||
70. https://www.viget.com/
|
||||
71. https://www.viget.com/articles
|
||||
72. https://www.viget.com/articles/whats-in-a-word-building-a-verbose-party-game/#hero
|
||||
73. http://eepurl.com/gtHqsj
|
||||
74. https://www.facebook.com/sharer/sharer.php?u=https://www.viget.com/articles/whats-in-a-word-building-a-verbose-party-game/
|
||||
75. http://www.linkedin.com/shareArticle?mini=true&url=https://www.viget.com/articles/whats-in-a-word-building-a-verbose-party-game/
|
||||
76. https://x.com/intent/tweet?text=Our Pointless Palooza team designed and built a word-association game in 48 hours. Here's what we learned (and loved) while doing it. https://www.viget.com/articles/whats-in-a-word-building-a-verbose-party-game/
|
||||
|
||||
Hidden links:
|
||||
78. https://www.viget.com/newsletter/revolutionizing-the-web/
|
||||
79. https://www.viget.com/articles/the-reflection-before-christmas/
|
||||
80. https://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Fwww.viget.com%2Farticles%2Fwhats-in-a-word-building-a-verbose-party-game%2F
|
||||
81. http://www.linkedin.com/shareArticle?mini=true&url=https%3A%2F%2Fwww.viget.com%2Farticles%2Fwhats-in-a-word-building-a-verbose-party-game%2F
|
||||
82. https://x.com/intent/tweet?text=Our%20Pointless%20Palooza%20team%20designed%20and%20built%20a%20word-association%20game%20in%2048%20hours.%20Here%27s%20what%20we%20learned%20%28and%20loved%29%20while%20doing%20it.%20https%3A%2F%2Fwww.viget.com%2Farticles%2Fwhats-in-a-word-building-a-verbose-party-game%2F
|
||||
83. https://www.viget.com/articles/figma-comic-creator/
|
||||
84. https://www.viget.com/articles/the-enduring-point-of-pointless-corp/
|
||||
85. https://www.viget.com/articles/plan-a-killer-party-with-thrillr/
|
||||
86. http://x.com/viget
|
||||
87. https://github.com/vigetlabs
|
||||
88. https://dribbble.com/viget
|
||||
89. https://www.instagram.com/viget/
|
||||
90. https://www.linkedin.com/company/viget-labs
|
||||
91. https://vimeo.com/viget/collections
|
||||
References:
|
||||
|
||||
[1] https://www.viget.com/articles/whats-in-a-word-building-a-verbose-party-game/#content
|
||||
[2] https://www.viget.com/
|
||||
[3] https://www.viget.com/work/
|
||||
[4] https://www.viget.com/services/
|
||||
[5] https://www.viget.com/articles/
|
||||
[6] https://www.viget.com/careers/
|
||||
[7] https://www.viget.com/contact/
|
||||
[9] https://www.viget.com/
|
||||
[11] https://www.viget.com/work/
|
||||
[12] https://www.viget.com/services/
|
||||
[13] https://www.viget.com/articles/
|
||||
[14] https://www.viget.com/contact/
|
||||
[15] https://www.viget.com/about/
|
||||
[16] https://www.viget.com/careers/
|
||||
[17] https://www.viget.com/code-of-ethics/
|
||||
[18] https://www.viget.com/diversity-equity-and-inclusion/
|
||||
[19] https://pointlesscorp.com/
|
||||
[20] https://explorations.viget.com/
|
||||
[21] https://code.viget.com/
|
||||
[22] https://www.viget.com/newsletter/revolutionizing-the-web/
|
||||
[23] https://www.viget.com/articles/the-reflection-before-christmas/
|
||||
[24] https://www.viget.com/about/team/hmatties/
|
||||
[25] https://www.viget.com/about/team/deisinger/
|
||||
[26] https://www.viget.com/about/team/hmatties/
|
||||
[27] https://www.viget.com/about/team/deisinger/
|
||||
[28] https://www.viget.com/articles/category/news-culture/
|
||||
[29] https://www.viget.com/articles/category/employee-engagement/
|
||||
[30] https://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Fwww.viget.com%2Farticles%2Fwhats-in-a-word-building-a-verbose-party-game%2F
|
||||
[31] http://www.linkedin.com/shareArticle?mini=true&url=https%3A%2F%2Fwww.viget.com%2Farticles%2Fwhats-in-a-word-building-a-verbose-party-game%2F
|
||||
[32] https://x.com/intent/tweet?text=Our%20Pointless%20Palooza%20team%20designed%20and%20built%20a%20word-association%20game%20in%2048%20hours.%20Here%27s%20what%20we%20learned%20%28and%20loved%29%20while%20doing%20it.%20https%3A%2F%2Fwww.viget.com%2Farticles%2Fwhats-in-a-word-building-a-verbose-party-game%2F
|
||||
[33] https://www.viget.com/articles/the-enduring-point-of-pointless-corp/
|
||||
[34] https://boardgamegeek.com/boardgame/254640/just-one
|
||||
[35] https://verbose.club/
|
||||
[36] https://www.viget.com/about/team/hjohnson/
|
||||
[37] https://www.viget.com/about/team/hmatties/
|
||||
[38] https://www.viget.com/about/team/nrymarz/
|
||||
[39] http://whimsical.com/
|
||||
[40] http://figma.com/
|
||||
[41] https://www.viget.com/about/team/athomas/
|
||||
[42] https://www.viget.com/about/team/deisinger/
|
||||
[43] https://caddyserver.com/
|
||||
[44] https://verbose.club/
|
||||
[45] https://www.viget.com/about/team/hmatties/
|
||||
[46] https://www.viget.com/about/team/hmatties/
|
||||
[47] https://www.viget.com/about/team/hmatties/
|
||||
[48] https://www.viget.com/about/team/deisinger/
|
||||
[49] https://www.viget.com/about/team/deisinger/
|
||||
[50] https://www.viget.com/about/team/deisinger/
|
||||
[51] https://www.viget.com/articles/figma-comic-creator/
|
||||
[52] https://www.viget.com/articles/the-enduring-point-of-pointless-corp/
|
||||
[53] https://www.viget.com/articles/plan-a-killer-party-with-thrillr/
|
||||
[54] https://www.viget.com/newsletter
|
||||
[55] http://eepurl.com/gtHqsj
|
||||
[56] https://www.viget.com/contact/
|
||||
[57] mailto:hello@viget.com?subject=Hello%2C%20Viget%21
|
||||
[58] tel:7038910670
|
||||
[59] https://www.viget.com/work/
|
||||
[60] https://www.viget.com/services/
|
||||
[61] https://www.viget.com/articles/
|
||||
[62] https://www.viget.com/about/
|
||||
[63] https://www.viget.com/careers/
|
||||
[64] https://www.viget.com/code-of-ethics/
|
||||
[65] https://www.viget.com/diversity-equity-and-inclusion/
|
||||
[66] https://pointlesscorp.com/
|
||||
[67] https://explorations.viget.com/
|
||||
[68] https://code.viget.com/
|
||||
[69] https://www.viget.com/newsletter/
|
||||
[70] https://www.viget.com/
|
||||
[71] http://x.com/viget
|
||||
[72] https://github.com/vigetlabs
|
||||
[73] https://dribbble.com/viget
|
||||
[74] https://www.instagram.com/viget/
|
||||
[75] https://www.linkedin.com/company/viget-labs
|
||||
[76] https://vimeo.com/viget/collections
|
||||
[77] https://www.viget.com/dc-metro-hq/
|
||||
[78] https://www.viget.com/durham/
|
||||
[79] https://www.viget.com/boulder/
|
||||
[80] https://www.viget.com/chattanooga/
|
||||
[81] https://www.viget.com/terms-conditions/
|
||||
[82] https://www.viget.com/privacy-policy/
|
||||
[83] https://individual.carefirst.com/individuals-families/mandates-policies/machine-readable-file.page
|
||||
[84] https://www.viget.com/
|
||||
[85] https://www.viget.com/articles
|
||||
[86] https://www.viget.com/articles/whats-in-a-word-building-a-verbose-party-game/#hero
|
||||
[87] http://eepurl.com/gtHqsj
|
||||
[89] https://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Fwww.viget.com%2Farticles%2Fwhats-in-a-word-building-a-verbose-party-game%2F
|
||||
[90] http://www.linkedin.com/shareArticle?mini=true&url=https%3A%2F%2Fwww.viget.com%2Farticles%2Fwhats-in-a-word-building-a-verbose-party-game%2F
|
||||
[91] https://x.com/intent/tweet?text=Our%20Pointless%20Palooza%20team%20designed%20and%20built%20a%20word-association%20game%20in%2048%20hours.%20Here%27s%20what%20we%20learned%20%28and%20loved%29%20while%20doing%20it.%20https%3A%2F%2Fwww.viget.com%2Farticles%2Fwhats-in-a-word-building-a-verbose-party-game%2F
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,142 +1,135 @@
|
||||
#[1]alternate [2]alternate
|
||||
|
||||
[3]Xe
|
||||
|
||||
[4]Blog
|
||||
|
||||
[5]Contact
|
||||
|
||||
[6]Resume
|
||||
|
||||
[7]Talks
|
||||
|
||||
[8]VODs
|
||||
|
||||
[9]Signalboost
|
||||
[1] Xe
|
||||
[2] Blog
|
||||
[3] Contact
|
||||
[4] Resume
|
||||
[5] Talks
|
||||
[6] VODs
|
||||
[7] Signalboost
|
||||
|
||||
gokrazy is really cool
|
||||
|
||||
Published on 09/20/2023, 3515 words, 13 minutes to read
|
||||
An image of undefined - Nikon D3300, 35mm f/1.8 DX, a red formula one
|
||||
style car speeds along a racetrack with visible tire skidmarks. Photo
|
||||
by Xe Iaso I worked 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.
|
||||
An image of undefined - Nikon D3300, 35mm f/1.8 DX, a red formula one style car
|
||||
speeds along a racetrack with visible tire skidmarks. Photo by Xe Iaso I worked
|
||||
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.
|
||||
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:
|
||||
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.
|
||||
|
||||
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!
|
||||
<[8]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.
|
||||
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 [9]GCC. In
|
||||
order to run ls to list files in the current directory, you need to use [10]GNU
|
||||
coreutils. Every dynamically linked program uses [11]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, [12]Alpine Linux
|
||||
is a Linux distribution that uses [13]musl libc instead of [14]glibc and [15]
|
||||
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.
|
||||
|
||||
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.
|
||||
<[16]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.
|
||||
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: [17]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.
|
||||
|
||||
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?
|
||||
<[18]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.
|
||||
|
||||
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?
|
||||
<[19]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.
|
||||
<[20]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.
|
||||
[21]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
|
||||
|
||||
• 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)
|
||||
• A [22]DHCP client that automatically configures the network interface.
|
||||
• A [23]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.
|
||||
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:
|
||||
|
||||
Here's an example of what my gokrazy virtual machine's file tree looks
|
||||
like:
|
||||
/ # tree etc gokrazy user
|
||||
etc
|
||||
├── breakglass.authorized_keys
|
||||
@@ -169,67 +162,69 @@ user
|
||||
├── 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.
|
||||
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.
|
||||
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 [24]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.
|
||||
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.
|
||||
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
|
||||
[25]Go toolchain installed. Once you have that, you can run go install to
|
||||
install the gok tool:
|
||||
|
||||
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.
|
||||
<[26]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:
|
||||
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:
|
||||
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",
|
||||
@@ -237,33 +232,35 @@ gok edit -i casa
|
||||
// ...
|
||||
}
|
||||
|
||||
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:
|
||||
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.
|
||||
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.
|
||||
Let's make our lives easier by installing [27]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
|
||||
[28]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:
|
||||
|
||||
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:
|
||||
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:
|
||||
Next, fetch an [29]auth key from [30]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": {
|
||||
@@ -281,82 +278,83 @@ gok add github.com/gokrazy/mkfs
|
||||
}
|
||||
|
||||
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.
|
||||
<[31]Mara> You can pass any other [32]tailscale up flags you want here, such as
|
||||
--advertise-exit-node if you want to use your gokrazy machine as an [33]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:
|
||||
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:
|
||||
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:
|
||||
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, you can write it to your SD card with dd (or [34]
|
||||
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.
|
||||
|
||||
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?
|
||||
<[35]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.
|
||||
<[36]Cadey> You don't. gokrazy doesn't have a login prompt. It's a single-user
|
||||
system. There is [37]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]
|
||||
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 [38]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:
|
||||
|
||||
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.
|
||||
[39][gokrazy-ui]
|
||||
|
||||
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.
|
||||
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
|
||||
Today I'm going to show you how to install these tools into your tailnet:
|
||||
|
||||
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.
|
||||
• [40]golink - a URL shortener at http://go
|
||||
• [41]tmemes - an internal meme generator you can host at http://memegen
|
||||
• [42]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:
|
||||
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": {
|
||||
@@ -378,50 +376,54 @@ gok add github.com/tailscale/golink/cmd/golink
|
||||
}
|
||||
|
||||
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]
|
||||
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 [43]http://casa/status?path
|
||||
=%2fuser%2fgolink:
|
||||
|
||||
And then you can start using short URLs at [47]http://go:
|
||||
[48][golink-ui.jpg]
|
||||
[44][golink]
|
||||
|
||||
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.
|
||||
And then you can start using short URLs at [45]http://go:
|
||||
|
||||
[46][golink-ui]
|
||||
|
||||
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.
|
||||
Google is infamous for having an internal service named [47]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.
|
||||
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.
|
||||
Thanks to the magic of Tailscale, you can make your own private memegen using
|
||||
[48]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]
|
||||
|
||||
[49][society-if]
|
||||
|
||||
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:
|
||||
Then open your config with gok edit and add the following to your PackageConfig
|
||||
block:
|
||||
|
||||
{
|
||||
// ...
|
||||
"PackageConfig": {
|
||||
@@ -445,29 +447,31 @@ gok add github.com/tailscale/tmemes/tmemes
|
||||
}
|
||||
|
||||
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.
|
||||
Then you can head to [50]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.
|
||||
If you want to integrate your own tools with tmemes, you can check out the [51]
|
||||
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.
|
||||
Sometimes you just need a place to paste text and get a URL pointing to it.
|
||||
[52]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. [53]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:
|
||||
Then open your config with gok edit and add the following to your PackageConfig
|
||||
block:
|
||||
|
||||
{
|
||||
// ...
|
||||
"PackageConfig": {
|
||||
@@ -487,114 +491,111 @@ gok add github.com/tailscale-dev/tclip/cmd/tclipd
|
||||
}
|
||||
|
||||
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:
|
||||
And then you can start using it by heading to [54]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.
|
||||
Here's an example tclip link if you want to see what it looks like in practice:
|
||||
[55]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.
|
||||
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.
|
||||
|
||||
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.
|
||||
__________________________________________________________________
|
||||
<[56]Mara> Spoiler alert: [57]waifud support is coming soon to a homelab near
|
||||
you.
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
Share
|
||||
|
||||
(BUTTON) Share
|
||||
|
||||
Facts and circumstances may have changed since publication. Please
|
||||
contact me before jumping to conclusions if something seems wrong or
|
||||
unclear.
|
||||
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-2024 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.
|
||||
Copyright 2012-2024 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!
|
||||
Like what you see? Donate on [59]Patreon like [60]these awesome people!
|
||||
|
||||
Served by xesite v4
|
||||
(/nix/store/5pbrsn0khhga62ipyl043c9z22dlah4w-xesite_v4-20231122/bin/xes
|
||||
ite) with site version [62]ae5283f7 , source code available [63]here.
|
||||
Served by xesite v4 (/nix/store/
|
||||
5pbrsn0khhga62ipyl043c9z22dlah4w-xesite_v4-20231122/bin/xesite) with site
|
||||
version [61]71d942d2 , source code available [62]here.
|
||||
|
||||
References
|
||||
|
||||
1. https://xeiaso.net/blog.rss
|
||||
2. https://xeiaso.net/blog.json
|
||||
3. https://xeiaso.net/
|
||||
4. https://xeiaso.net/blog
|
||||
5. https://xeiaso.net/contact
|
||||
6. https://xeiaso.net/resume
|
||||
7. https://xeiaso.net/talks
|
||||
8. https://xeiaso.net/vods
|
||||
9. https://xeiaso.net/signalboost
|
||||
10. https://xeiaso.net/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. https://xeiaso.net/characters#mara
|
||||
19. https://en.wikipedia.org/wiki/Android_(operating_system)
|
||||
20. https://xeiaso.net/characters#aoi
|
||||
21. https://xeiaso.net/characters#aoi
|
||||
22. https://xeiaso.net/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. https://xeiaso.net/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. https://xeiaso.net/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. https://xeiaso.net/characters#aoi
|
||||
38. https://xeiaso.net/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. https://xeiaso.net/characters#mara
|
||||
59. https://github.com/Xe/waifud-gok-agent
|
||||
60. https://patreon.com/cadey
|
||||
61. https://xeiaso.net/patrons
|
||||
62. https://github.com/Xe/site/commit/ae5283f759ecfc72f6779f57231991d0a881a8a9
|
||||
63. https://github.com/Xe/site
|
||||
References:
|
||||
|
||||
[1] https://xeiaso.net/
|
||||
[2] https://xeiaso.net/blog
|
||||
[3] https://xeiaso.net/contact
|
||||
[4] https://xeiaso.net/resume
|
||||
[5] https://xeiaso.net/talks
|
||||
[6] https://xeiaso.net/vods
|
||||
[7] https://xeiaso.net/signalboost
|
||||
[8] https://xeiaso.net/characters#mara
|
||||
[9] https://gcc.gnu.org/
|
||||
[10] https://www.gnu.org/software/coreutils/coreutils.html
|
||||
[11] https://www.gnu.org/software/libc/
|
||||
[12] https://alpinelinux.org/
|
||||
[13] https://musl.libc.org/
|
||||
[14] https://www.gnu.org/software/libc/
|
||||
[15] https://en.wikipedia.org/wiki/BusyBox
|
||||
[16] https://xeiaso.net/characters#mara
|
||||
[17] https://en.wikipedia.org/wiki/Android_(operating_system)
|
||||
[18] https://xeiaso.net/characters#aoi
|
||||
[19] https://xeiaso.net/characters#aoi
|
||||
[20] https://xeiaso.net/characters#cadey
|
||||
[21] https://gokrazy.org/
|
||||
[22] https://en.wikipedia.org/wiki/Dynamic_Host_Configuration_Protocol
|
||||
[23] https://en.wikipedia.org/wiki/Network_Time_Protocol
|
||||
[24] https://gokrazy.org/quickstart/
|
||||
[25] https://golang.org/doc/install
|
||||
[26] https://xeiaso.net/characters#mara
|
||||
[27] https://tailscale.com/
|
||||
[28] https://tailscale.com/kb/1081/magicdns/
|
||||
[29] https://tailscale.com/kb/1085/auth-keys/
|
||||
[30] https://login.tailscale.com/admin/settings/keys
|
||||
[31] https://xeiaso.net/characters#mara
|
||||
[32] https://tailscale.com/kb/1080/cli/#up
|
||||
[33] https://tailscale.com/kb/1103/exit-nodes/?q=exit%20node
|
||||
[34] https://etcher.balena.io/
|
||||
[35] https://xeiaso.net/characters#aoi
|
||||
[36] https://xeiaso.net/characters#cadey
|
||||
[37] https://github.com/gokrazy/breakglass
|
||||
[38] http://casa/
|
||||
[39] https://cdn.xeiaso.net/file/christine-static/blog/2023/gokrazy/gokrazy-ui.jpg
|
||||
[40] https://github.com/tailscale/golink
|
||||
[41] https://github.com/tailscale/tmemes
|
||||
[42] https://github.com/tailscale-dev/tclip
|
||||
[43] http://casa/status?path=%2fuser%2fgolink
|
||||
[44] https://cdn.xeiaso.net/file/christine-static/blog/2023/gokrazy/golink.jpg
|
||||
[45] http://go/
|
||||
[46] https://cdn.xeiaso.net/file/christine-static/blog/2023/gokrazy/golink-ui.jpg
|
||||
[47] https://www.buzzfeednews.com/article/reyhan/inside-googles-internal-meme-generator
|
||||
[48] https://github.com/tailscale/tmemes
|
||||
[49] https://cdn.xeiaso.net/file/christine-static/blog/2023/gokrazy/society-if-gokrazy.jpg
|
||||
[50] http://memegen/
|
||||
[51] https://github.com/tailscale/tmemes/blob/main/docs/api.md
|
||||
[52] https://tailscale.dev/blog/tclip
|
||||
[53] https://tailscale.dev/blog/tclip-updates-092023
|
||||
[54] http://paste/
|
||||
[55] https://paste.shark-harmonic.ts.net/paste/696b9b02-90ac-4adc-a33d-d749bb6f460f
|
||||
[56] https://xeiaso.net/characters#mara
|
||||
[57] https://github.com/Xe/waifud-gok-agent
|
||||
[59] https://patreon.com/cadey
|
||||
[60] https://xeiaso.net/patrons
|
||||
[61] https://github.com/Xe/site/commit/71d942d2664615d081d14037ad9930848f6a72b4
|
||||
[62] https://github.com/Xe/site
|
||||
|
||||
Reference in New Issue
Block a user