Use w3m for archiving

This commit is contained in:
David Eisinger
2024-01-17 12:04:56 -05:00
parent c5f0c6161a
commit ae64f3eb0a
80 changed files with 28830 additions and 29811 deletions

View File

@@ -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

View File

@@ -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/

View File

@@ -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

View File

@@ -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 dont 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 dont 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 dont keep papers, you wont need an excellent filing
system.
Certainly, if you dont keep papers, you wont 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 couldnt 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 couldnt find the passes.
This is where decent filing systems come in.
Ill 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 dont
keep: a file index.
Ill 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 dont 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 cant 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 cant 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? Renters 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? Renters 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. ✨🎉
Its 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 cant 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 cant 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 doesnt matter where the insurance paper goes. It could be under any
letter you want.
It doesnt 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.
Lets say you decide that your Zenith Auto Insurance Policy goes under
“C” for “Car Insurance.”
Lets 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? Thats 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? Thats 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
* Im 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, Im 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.
* Im 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, Im 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/

View File

@@ -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 Id end up liking it. BSD feels lighter and simpler and
therefore probably more secure than the Ubuntu servers Im running.
I think Id end up liking it. BSD feels lighter and simpler and therefore
probably more secure than the Ubuntu servers Im running.
However, I dont need another server to manage. I dont need to run my
own mail server or CalDAV server. My VPS at Digital Ocean has been
running (::knocks wood::) smoothly for years and Ive got the
configuration down.
However, I dont need another server to manage. I dont need to run my own mail
server or CalDAV server. My VPS at Digital Ocean has been running (::knocks
wood::) smoothly for years and Ive got the configuration down.
Ill be deleting the OpenBSD server once Ive moved the few sites Id
migrated there back to Digital Ocean.
Ill be deleting the OpenBSD server once Ive moved the few sites Id 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 its running is [12]jackbaty.com. I like the idea of
BSD so much that I couldnt 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 its running is [13]jackbaty.com. I like the idea of BSD so much that I
couldnt 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

View File

@@ -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 theres one trend people are excited about that—try as I might—Im
having a hard time passing off as mere hype: generative AI.
But theres one trend people are excited about that—try as I might—Im 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.
Theres 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.
Theres 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. Its 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. Its 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 thats 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 thats coming for the information economy.
So lets do that.
[17]Now its time to major bump Web 2.0
[18]Now its time to major bump Web 2.0
Computer-generated content wouldnt pose the looming threat it does
without the last 20 years of user-generated content blanketing the
Internet to fertilize it.
Computer-generated content wouldnt 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 contents 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 everyones 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 contents 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 everyones 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 Ive 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 Ive 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.0s 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 were witnessing the first act of Web
3.0, its 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.0s 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 were witnessing
the first act of Web 3.0, its got nothing to do with crypto and everything to
do with [21]generative AI.
If youre reading this, you dont 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, theres
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 were witnessing a major market disruption in addition
to a technological one.
If youre reading this, you dont 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, theres 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 were witnessing a major market disruption in
addition to a technological one.
One reason Ive been thinking so much about this is that Ive started
work on a personal project to build an AI chatbot for practicing
Japanese language and Im livecoding 100% of my work for an educational
video series I call [25]Searls After Dark. Might be why Ive got AI on
the mind lately!
One reason Ive been thinking so much about this is that Ive started work on a
personal project to build an AI chatbot for practicing Japanese language and
Im livecoding 100% of my work for an educational video series I call [26]
Searls After Dark. Might be why Ive got AI on the mind lately!
But youre not a tech giant. Youre wondering what this means for you
and your weekend. And I think were beginning to identify the contours
of an answer to that question.
But youre not a tech giant. Youre wondering what this means for you and your
weekend. And I think were beginning to identify the contours of an answer to
that question.
[26]ChatGPT can do some peoples work, but not everyones
[27]ChatGPT can do some peoples work, but not everyones
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 wont 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
wont 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 Ive heard of AIs 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, Ive
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 Ive heard of AIs 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, Ive 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 teams 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 teams issue tracker
• Optimizing the performance of SQL queries and algorithms
• Completing employees performance reviews
Each time Id hear something like this, Id get jealous, open ChatGPT for
myself, and feed it whatever problem I was working on. It never worked.
Sometimes itd give up and claim the thing I was trying to do was too obscure.
Sometimes itd 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, Id end up wasting time stuck in
this never-ending loop:
Each time Id hear something like this, Id get jealous, open ChatGPT
for myself, and feed it whatever problem I was working on. It never
worked. Sometimes itd give up and claim the thing I was trying to do
was too obscure. Sometimes itd 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, Id 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 isnt some passing fad—its a
productivity revolution thats 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 isnt some passing fad—its a productivity
revolution thats 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
Ive 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 doesnt 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 ChatGPTs effectiveness at doing their work. But I can identify
just as many roles that sit near the bottom of the org chart, dont
require special credentials, and dont pay particularly well for which
ChatGPT isnt even remotely useful.
Ive 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 doesnt 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 ChatGPTs effectiveness at doing their
work. But I can identify just as many roles that sit near the bottom of the org
chart, dont require special credentials, and dont pay particularly well for
which ChatGPT isnt even remotely useful.
Heres 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 solutions format
and structure based solely on a description of the problem
3. Fragile: Minor errors and inaccuracies would dramatically reduce
the works value without time-intensive remediation from an expert
Heres 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 solutions format and
structure based solely on a description of the problem
3. Fragile: Minor errors and inaccuracies would dramatically reduce the works
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 travelers 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 theres 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 Ive
thrown at it. As an experienced application developer, lets consider
whether thats because my work meets the three criteria identified
above:
1. Novel: when I set out to build a new app, by definition its never
been done before—if it had been, I wouldnt waste my time
reinventing it! That means there wont 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 isnt 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 Im needlessly [38]reinventing
a wheel)
2. Unpredictable: Ive been building apps for over 20 years and I
still feel a prick of panic I wont 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 travelers 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 theres 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 Ive thrown
at it. As an experienced application developer, lets consider whether thats
because my work meets the three criteria identified above:
1. Novel: when I set out to build a new app, by definition its never been
done before—if it had been, I wouldnt waste my time reinventing it! That
means there wont 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 isnt 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 Im needlessly [39]
reinventing a wheel)
2. Unpredictable: Ive been building apps for over 20 years and I still feel a
prick of panic I wont 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 isnt 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
cant do (yet).
This isnt 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 cant do (yet).
So if youre a programmer like me, youre probably safe!
Jobs 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 doesnt produce work that
checks the three boxes of novelty, unpredictability, and fragility?
So what can someone do if their primary role doesnt produce work that checks
the three boxes of novelty, unpredictability, and fragility?
Here are a few ideas that probably wont 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 doesnt
need every humans labor
* Embrace return-to-office mandates by doing stuff software cant 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 its 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 doesnt need
every humans 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, heres
what Id 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 isnt very good at. The robots
probably arent 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 weve 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 companys future AI
efforts (just ask the [43]former editor-in-chief of CNET)
• Embrace return-to-office mandates by doing stuff software cant 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. Its 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 its 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, heres what Id 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 isnt very good at. The robots probably arent 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 weve 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 companys 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. Its 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.
Heres 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 cant 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 cant 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: Were still remote
[54] Policy update: Were still remote
Dont waste time commuting to an office. Test Double will continue to
be a 100% remote software development company that values autonomy and
flexibility.
Dont 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/

View File

@@ -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 Ive learned. Complaining about bugs Ive 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
Ive learned. Complaining about bugs Ive 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 dont know about. Except for me. I
am complaining loudly about my battle. Everybody knows about it.
Everyone is fighting a battle you dont know about. Except for me. I am
complaining loudly about my battle. Everybody knows about it.
So if youve borne witness to how much of my life I have spewed
indiscriminately onto the Internet: first, Im sorry. And second,
please know that my vocation as a limelight enthusiast is emphatically
not what Im 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, Im sorry. And second, please know
that my vocation as a limelight enthusiast is emphatically not what Im
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 youre 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 youre 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
thats assuming theyre fortunate enough to retire at some point.
Thats 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 thats
assuming theyre fortunate enough to retire at some point. Thats 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 Ive 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 thats 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 Ive 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 thats
you.
[13]Periodically plant a flag
[14]Periodically plant a flag
Despite the fact that I live in Florida and Im 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 Im 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?”
Its not like I have a reminder scheduled or anything. I dont gather
my colleagues and family for a standing meeting to review my
achievements from the prior quarter. Its more like an itch Ive
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.
Its not like I have a reminder scheduled or anything. I dont gather my
colleagues and family for a standing meeting to review my achievements from the
prior quarter. Its more like an itch Ive 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, thats a happy accident as far as
Im 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, thats a happy
accident as far as Im 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 Ive settled into over the years to
identify and commemorate my lifes watershed moments:
experience? This is the process Ive settled into over the years to identify
and commemorate my lifes 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. Im
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 dont force it; Ill 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.
Its 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 youve seen and
done before, whatever flag you plant will stand taller, and you
wont 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 youre
searching for may be that its time to make a change
3. Connect: for each of the experiences youve collected, try to
understand how they might connect to future situations. A new tool
or technique might empower you to do something you couldnt
accomplish otherwise. A painful mistake might warn your future self
to avoid try a different approach next time. Since I cant see the
future, I imagine what impact each such insight might have had if
applied to experiences from my past. “If Id 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, thats 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 dont 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,
theyre 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. Im 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 dont force it; Ill 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. Its 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
youve seen and done before, whatever flag you plant will stand taller, and
you wont 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 youre searching for may be that its time to make a
change
3. Connect: for each of the experiences youve collected, try to understand
how they might connect to future situations. A new tool or technique might
empower you to do something you couldnt accomplish otherwise. A painful
mistake might warn your future self to avoid try a different approach next
time. Since I cant see the future, I imagine what impact each such insight
might have had if applied to experiences from my past. “If Id 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, thats 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 dont 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, theyre 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
Thats it! Reflect, collect, connect, and protect.
(See what I did there? How all the steps rhyme. Thats the kind of
thing youll be able to pull off with a decade of practice doing this.)
(See what I did there? How all the steps rhyme. Thats the kind of thing youll
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 youve 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 didnt achieve this or
that goal. Regardless of the reason—maybe learning some skill was no
longer relevant or the businesss strategic priorities shifted—the
failure to meet a goal is often rooted in a failure to predict the
future. Im 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 theres any
creativity exhibited in annual goal rituals, its 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 youve 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 didnt achieve this or that goal. Regardless of the reason—maybe
learning some skill was no longer relevant or the businesss strategic
priorities shifted—the failure to meet a goal is often rooted in a failure to
predict the future. Im 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 theres any creativity exhibited
in annual goal rituals, its 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, Ive never accomplished anything I felt proud of by setting a
goal. In fact, the surest way to ensure I dont do something is to set
a goal. When asked to set goals for myself, Ive 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, Ive never accomplished anything I felt proud of by setting a goal. In
fact, the surest way to ensure I dont do something is to set a goal. When
asked to set goals for myself, Ive 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 Im 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
Im 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 youll 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 youll
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 youll 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 youll 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!
Theres just one last thing to talk about: you, and why you dont
already do this.
Theres just one last thing to talk about: you, and why you dont already do
this.
Its not like this retrospective process of imbuing meaning into ones work is
particularly clever or insightful. I dont think Im a genius for arriving at
the following three-step formula to having a deeply meaningful career and
leaving a memorable legacy:
Its not like this retrospective process of imbuing meaning into ones
work is particularly clever or insightful. I dont think Im 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 its so obvious, why dont more people do this?
I wonder if its because everything above might seem like the exclusive
domain of the Thoughtleader™ class. “I dont have (or necessarily want)
an audience to read my blog posts or watch me speak, so this aint for
me!” you might be thinking.
I wonder if its because everything above might seem like the exclusive domain
of the Thoughtleader™ class. “I dont have (or necessarily want) an audience to
read my blog posts or watch me speak, so this aint for me!” you might be
thinking.
This line of thinking is reasonable, but its based on an assumption
that doesnt always hold.
This line of thinking is reasonable, but its based on an assumption that
doesnt always hold.
Its 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 wont come. I cant
guarantee anyone will run your code, read your blog, or watch your
talk.
Its 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 wont come. I cant guarantee anyone will run your code, read
your blog, or watch your talk.
But heres 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 its not what drives
me. I started creating things to punctuate my lifes sentences long
before anybody took an interest in me and I wouldnt stop even if
everyone loses interest in me.
But heres 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 its not what drives me. I started
creating things to punctuate my lifes sentences long before anybody took an
interest in me and I wouldnt stop even if everyone loses interest in me.
Whats more, a lot of (ugh) content creators are the same way. In the
course of my travels, Ive gotten to meet many of my heroes, and while
a few have disappointed me spectacularly (dont meet your heroes!),
Ive 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 peoples attention factors in at
all, its usually to justify the time they spend making stuff.
Whats more, a lot of (ugh) content creators are the same way. In the course of
my travels, Ive gotten to meet many of my heroes, and while a few have
disappointed me spectacularly (dont meet your heroes!), Ive 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 peoples attention
factors in at all, its 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

View File

@@ -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 its 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 its 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, thats 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 theres one thing I never ever intend to give up, its
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, thats 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 theres one thing I never ever intend to give
up, its 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 Jefklaks 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
couldnt 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.
Its my own thing, and Ive 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 Jefklaks 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 couldnt 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. Its my own thing, and Ive pondered on that subject recently in
[20]On Writing For Yourself In Public.
Previous month: [21]October 2023.
Books Ive 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
doesnt exactly build up, I dont mind to keep on reading as its 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 doesnt exactly build
up, I dont mind to keep on reading as its a light read and entertaining
enough.
Games Ive 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. Its okay so far: the core gameplay is very solid, but
everything slathered on top is not my cup of tea. Im 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 dont “see it”,
but were 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. Its okay
so far: the core gameplay is very solid, but everything slathered on top is not
my cup of tea. Im 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 dont
“see it”, but were 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 Cant Talk About Games Without Talking About The Layoffs.
* Glyph explains how to set up the best possible [30]Phython
development environment for MacOS. Dont 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 Harbuzs blog is great: its a combination between
computing and philosophical work. Heres his [32]overview on
resources on the philosophy of work I still have to dig into.
* Heres 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 Dont 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 Cant
Talk About Games Without Talking About The Layoffs.
• Glyph explains how to set up the best possible [32]Phython development
environment for MacOS. Dont 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 Harbuzs blog is great: its a combination between computing
and philosophical work. Heres his [34]overview on resources on the
philosophy of work I still have to dig into.
• Heres 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 Dont 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 thats 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. Its great, but I have been slogging
through it on and off all week and Im 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 thats
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. Its great, but I have been slogging through it on
and off all week and Im 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. Thats everything I wish
for in 2024 besides the obvious ones.
I hope to keep up the blogging rhythm in 2024. Thats 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

View File

@@ -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,
doesnt really exist anymore. And it especially doesnt exist for
computers.'”
“That combination of craftsmanship and utility, objects that are both
thoroughly practical and needlessly outrageously beautiful, doesnt really
exist anymore. And it especially doesnt 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 1980s
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 doesnt 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 1980s 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 doesnt 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 hes customized to only offer emacs, a text-based editor popular
among hacker types, thats launched from a basic green command line.
You cant go online, or create a PowerPoint presentation, or edit a
video. Its 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 hes customized to only offer
emacs, a text-based editor popular among hacker types, thats launched from a
basic green command line. You cant go online, or create a PowerPoint
presentation, or edit a video. Its 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 cant help but apply
Postmans 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 cant help but apply Postmans
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 Keegans construction we find an alternative understanding of work,
built now on beauty, craftsmanship, and focus. Replacing everyones
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 dont realize it.
In Keegans construction we find an alternative understanding of work, built
now on beauty, craftsmanship, and focus. Replacing everyones 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 dont realize it.
#####
In other news: My longtime friend Brad Stulberg has a great new book
out this week. Its 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. Its 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 Brads website to
claim a bunch of cool pre-order bonuses that hes offering through the
first full week of publication.
Pro-tip: if you do buy the book this week, [20]go to Brads website to claim a
bunch of cool pre-order bonuses that hes offering through the first full week
of publication.
[26]We Dont Need a New Twitter
[27]On Tire Pressure and Productivity
[21]We Dont 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 dont 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 dont 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. Its hard to imagine
something similar occuring with modern computers. Laptops are used
until theyre dead, and then theyre 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. Its hard to imagine something similar
occuring with modern computers. Laptops are used until theyre dead, and
then theyre 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, theyre 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,
theyre 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. Theres a lot of power (at least for me) in
having a physical place to do things. When Im in my woodshop for
instance, I am not engaging with distractions. Im there to create
things and Im limited (or, empowered) by the tools around me.
[43]Reply
7.
physical location. Theres a lot of power (at least for me) in having a
physical place to do things. When Im in my woodshop for instance, I am not
engaging with distractions. Im there to create things and Im 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 cant 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 cant 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 todays industrial and
impersonal digital devices. McNamaras 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 cant all have custom-made computers,
McNamaras 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 todays industrial and impersonal digital devices. McNamaras
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 cant all have custom-made computers, McNamaras 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/#

View File

@@ -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. Its just designed to do something other than
its intended purpose.
Most complicated or broken software is not designed to be overly complex or
dysfunctional. Its just designed to do something other than its intended
purpose.
Lets say youre 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.
Lets say youre 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
* Doesnt 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 theres time
* Dynamically links to the latest products in my Zazzle shop and, if
possible, gives recommendations to users based on the content
theyve consumed
* Integrates with Facebook live player. If its easy to create an
alternative solution for streaming that doesnt 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. Youve 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
• Doesnt 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 theres time
• Dynamically links to the latest products in my Zazzle shop and, if
possible, gives recommendations to users based on the content theyve
consumed
• Integrates with Facebook live player. If its easy to create an alternative
solution for streaming that doesnt 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. Youve just
wasted $15,000 on a piece of garbage; you want your money back.
But the development team is confused at your angerrightfully so,
from their point of viewbecause theyve 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!
Theyve 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 dont 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 angerrightfully so, from their
point of viewbecause theyve 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 couldnt be bothered to test properly or care about.
Theyve put their heart and soul into creating this app, and it has some
amazing features:
Even worse, you didnt communicate directly with the devsyou
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 teameach 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
dont 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. Thats 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 couldnt 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 didnt communicate directly with the devsyou 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 teameach 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 theyre 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. Thats 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 isnt 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 wasnt 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 arent just the result of bored developers.
Theyre 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
theyre supposed to solve.
It should be noted that this issue isnt 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
wasnt 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 arent just the result of bored developers. Theyre also
the result of long chains of communication.
When I first began taking on freelance clients, I couldnt afford to be
particular. This means Ive had email chains lasting for over a 100
exchanges, discussing insignificant details about internal MVPs. Ive
had people change every single requirement on a project within the span
of a week. Ive had clients ask questions such as “Could this be
ICO-ed?” or “Can we add some A.I. in here?”
particular. This means Ive had email chains lasting for over a 100 exchanges,
discussing insignificant details about internal MVPs. Ive had people change
every single requirement on a project within the span of a week. Ive 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 dont need
based on their use cases. But it can become much harder to determine
whats 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 dont need based on their use cases. But it
can become much harder to determine whats 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 theres 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 theres
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 requirementsthe real problems that
have to be solvedget lost. They are replaced with imaginary problems
and with voids, and youve 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 requirementsthe real problems that have to
be solvedget lost. They are replaced with imaginary problems and with voids,
and youve 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 havent heard of them, because they dont 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 havent heard of them, because they dont 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 societybut 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 societybut the leaders in an
organization are just a symptom of its members.
I wouldnt 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 todays 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 wouldnt 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
todays 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 samenot 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
problemsreal 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 samenot 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 problemsreal 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 doesnt 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 dont seem to notice the fact that their
superiors cant 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 dont seem to notice the fact that their superiors
cant 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 dont seem to notice that their leaders dont
really write any code except DOT diagrams, team leaders dont 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 dont seem to notice that their leaders dont really
write any code except DOT diagrams, team leaders dont 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.
Its a vicious cycle of solving imaginary problems, from the CEO who
doesnt realize that stealing another 30 million wont make his dad
love him to the user-experience intern who doesnt realize that
redesigning the “submit” button using Angular-Material-Bootstrap
19.13.5 wont make the fact that they store passwords in plain text
(and use them as part of the auth cookie) go away.
Its a vicious cycle of solving imaginary problems, from the CEO who doesnt
realize that stealing another 30 million wont make his dad love him to the
user-experience intern who doesnt realize that redesigning the “submit” button
using Angular-Material-Bootstrap 19.13.5 wont 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
elses job. And thats 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 elses job. And thats 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

View File

@@ -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]Brookss Law or read his seminal
book, [32]The Mythical Man-Month. Even if you havent, youve 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]Brookss Law or read his seminal book, [31]The
Mythical Man-Month. Even if you havent, youve probably heard at least one
colleague proclaim:
Nine women cant make a baby in one month!
This is a powerful metaphor for two reasons. First: its so vivid that
its 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: its so vivid that its
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.
Thats a hard pill to swallow, especially when your project is late.
But its a truth pill, which makes it worth choking down. Heres
another truth pill that Brooks wrote in his paper [33]No Silver
BulletEssence and Accident in Software Engineering:
Thats a hard pill to swallow, especially when your project is late. But its a
truth pill, which makes it worth choking down. Heres another truth pill that
Brooks wrote in his paper [32]No Silver BulletEssence 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 dont understand the silver bullet reference… its
[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.
__________________________________________________________________
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Ive 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 dont understand the silver bullet reference… its [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.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Ive 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 wont
* Do you think youve found the “one true tech”? You havent
* Have a shiny hammer that looks great for hitting screws? It isnt
Please humor me while I [39]quote myself for a moment: (Hey, its
easier than writing)
• Does a new tool promise to solve all your problems? It wont
• Do you think youve found the “one true tech”? You havent
• Have a shiny hammer that looks great for hitting screws? It isnt
IFRAME: [40]https://www.youtube.com/embed/btIc-_dGz9k
Please humor me while I [38]quote myself for a moment: (Hey, its 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, Ive found the panacea. This is gonna
solve all my problems”, because it does solve some of your problems
big-time.
But its also is gonna create other problems, and its also not
gonna fit in every place that you can shove it. I mean, I know
theres React-based command line builders… And its like, okay, if
you like components, cool. That makes sense. But why is React
building your command-line app? I just dont understand.
We tend to be kind of lazy and just take the big hammer and hit all the
nails with it. Like, “Oh, Ive 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 dont understand”, I meant that
the choice confounds me. But I do understand why people might make it.
But its also is gonna create other problems, and its also not gonna fit
in every place that you can shove it. I mean, I know theres React-based
command line builders… And its like, okay, if you like components, cool.
That makes sense. But why is React building your command-line app? I just
dont 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 dont 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 thats 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, youre 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, youre just not putting in the work.
(And I say this as a guy who uses Postgres for most things! 😆)
__________________________________________________________________
If you enjoyed reading this, youll 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, youll 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 youre 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 youre 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 cant 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) its 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) its 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, its a fine example”, I agree with her. Theres no reason to
change the book it is what it is, it was written at a point in time,
and it did its job of getting the readers to think. All that said, we
can come up with a better example for the present and future. I dont
know what that example is, but I know we can do better.
After some reflection and an initial knee jerk internal reaction of “no, its a
fine example”, I agree with her. Theres no reason to change the book it is
what it is, it was written at a point in time, and it did its job of getting
the readers to think. All that said, we can come up with a better example for
the present and future. I dont 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 isnt the right term, but its something
that left a bad taste in her mouth and Im 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
womens “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
Ill be honest, Im defending a view I dont 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 Im going to say “I
believe you”. Ive been incredibly privileged in this world as a white
male, and thats a pretty big blindspot, so Im putting trust in
someone else to see whats there.
• [74]GitHub
Im 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. Im just going to challenge people to do better,
and its going to be hard.
[75] 2023-05-27T16:02:25Z ago
[67]reply
Well, maybe micro aggression isnt the right term, but its something that left
a bad taste in her mouth and Im 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 womens “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)
Ill be honest, Im defending a view I dont 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 Im going to say “I believe you”. Ive
been incredibly privileged in this world as a white male, and thats a pretty
big blindspot, so Im putting trust in someone else to see whats there.
(BUTTON) Jerod Santo
Im 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. Im just going to challenge people to do better, and its 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
Ill be honest, Im defending a view I dont 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 Im going
to say “I believe you”
[85] 2023-05-28T12:43:12Z ago
Thats a fair stance to take, but it doesnt 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.
Ill be honest, Im defending a view I dont 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 Im going to say “I believe
you”
[75]reply
Thats a fair stance to take, but it doesnt 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 youre 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 youre 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

View File

@@ -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, somebodys 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, somebodys 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 wouldnt really want
to use it because it wouldnt 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 wouldnt really want to use it because it
wouldnt be very satisfying.
So, Ive developed a system that works for taking paper notes. Its
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, Ive developed a system that works for taking paper notes. Its 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
Im taking notes in my digital world.
Similarly, I use a set of different apps for different purposes when Im 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 isnt really that satisfying to look at… but thats 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 isnt really that
satisfying to look at… but thats just my opinion.
So instead, after nearly a decade of trial and error, Ive 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, Ive 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. Im not here to tell you what to use. But if hearing about my
setup gives you ideas, thats great!
* This is something I will continue to change and improve. Its been
a long evolution to land on this setup. Trial and error was
involved, and will continue to be. I think theres an ebb and flow
to changing your setup. If you do it too often, you lose
productivity. If you dont 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 doesnt share
these values, this may seem overbuilt or convoluted or not native
enough or something.
* This is not written for the PKM enthusiast community. Its a basic,
balanced setup using tools that are widely known. If youre a
longtime Personal Knowledge Management guru, there wont 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 youre 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. Im not here
to tell you what to use. But if hearing about my setup gives you ideas,
thats great!
• This is something I will continue to change and improve. Its been a long
evolution to land on this setup. Trial and error was involved, and will
continue to be. I think theres an ebb and flow to changing your setup. If
you do it too often, you lose productivity. If you dont 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 doesnt share these values, this may
seem overbuilt or convoluted or not native enough or something.
• This is not written for the PKM enthusiast community. Its a basic,
balanced setup using tools that are widely known. If youre a longtime
Personal Knowledge Management guru, there wont 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 youre 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
youve never had to experience this feeling:
One of the most important parts of my setup is my intake app. I hope youve
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 youre 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
youre 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.
Lets 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 Im content with just one for now.
Drafting a text to your mom? Send it as a text message after youve
perfected it. Shopping list? Export straight into wherever you keep
that (for me its Things). Deep thought thats 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 youve perfected
it. Shopping list? Export straight into wherever you keep that (for me its
Things). Deep thought thats 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 isnt in there you can write your own
action!
And the best part: if your app isnt in there you can write your own action!
Drafts could honestly take up a whole series of blog posts so Ill stop
there for now. I havent even scratched the surface of what it can do,
but you really dont need to dive very deep to reap the benefits.
Drafts could honestly take up a whole series of blog posts so Ill stop there
for now. I havent even scratched the surface of what it can do, but you really
dont need to dive very deep to reap the benefits.
Lets table Drafts for now. Itll come up later with how it pipes into
my other systems.
Lets table Drafts for now. Itll 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 dont stay in Drafts
long. They either get exported or archived.
So you may have picked up on the fact that notes dont 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 wouldnt
expect you to understand mine, but Id 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 wouldnt expect you to
understand mine, but Id encourage anyone to explore this category of notes for
themselves.
The notes in this folder dont 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 dont 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
theyre completed (or when I get bored and move onto the next hobby).
Projects are usually temporary, and get moved to my archive folder when theyre
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. Theres 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. Theres 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, well talk about the app I use, but thats much less
important than the underlying foundation.
Yes, yes, well talk about the app I use, but thats 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. Im 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 youd 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. Im
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 youd 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 Ive
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 Ive 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 Ill get to later.
Drafts can export to my longterm notes via both the OS filesystem and Obsidian
app urls. Same for Shortcuts, which Ill 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 Ill 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 Ill get into in a bit.
My main reasons for using Obsidian are:
* It has command palette
* It has quick open
* Its hackable & has community plugins
Honestly, the specific app here doesnt 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
• Its hackable & has community plugins
I will say, like Drafts, Obsidian is a product of thoughtful design.
You dont need to dive to deep to reap the benefits. But if you want to
be a power user, theres 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 doesnt 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 dont
need to dive to deep to reap the benefits. But if you want to be a power user,
theres 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
Im 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.
Im 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, lets talk about my workflow for posting blog
articles.
Before we get to that, lets 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 wouldnt say this is anything groundbreaking, but I find it immensely
satisfying.
@@ -310,133 +298,125 @@ Sharing notes
Okay, back to Notion-esque sharing.
Lets 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.
Lets 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.
Its 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, its 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, its just published to a
non-indexed domain that I use as an external file/note-share.
”But its not collaborative!” Yeah, and its 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. Its 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. Its incredibly rare, and usually a very niche use-case.
If its like a Resume or something, I use Google Drive, because the
output artifact is a document.
If its like a Resume or something, I use Google Drive, because the output
artifact is a document.
If its for brainstorming or something, Figma.
If its project tracking, Notion.
These arent really notes anymore. This is a one-off collaboration with
a specific outcome in mind, so it doesnt really fall into the purview
of this post.
These arent really notes anymore. This is a one-off collaboration with a
specific outcome in mind, so it doesnt really fall into the purview of this
post.
To be honest, I dont 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 dont 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 its a powerful tool that sparks
creativity in a very attractive interface, it goes against my core
values. You dont own your data, its 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 its a
mess to port to other apps.
creativity in a very attractive interface, it goes against my core values. You
dont own your data, its 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 its 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 havent gone too deep into any of the tools.
Its still portable. I could still switch stuff around with very little
overhead if I wanted to.
It does just enough. I havent gone too deep into any of the tools. Its 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 dont 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, Id need to switch back to Dropbox. It wouldnt 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
dont 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, Id need to switch
back to Dropbox. It wouldnt take much to make the switch: maybe 5 minutes to
update the config across all my devices.
But thats the only thing Im 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 thats the only thing Im 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, youre either really into notetaking systems
or youre 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, youre either really into notetaking systems or youre
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 Im 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 Obsidians deep-linking.
Any time Im 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 Obsidians 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 Dropboxs shortcut
integrations.
Or, if I was using Dropbox, I could do it with Dropboxs 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. Im not going
to pretend Im 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. Im not going to pretend Im 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

View File

@@ -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.
Ive 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 “Thats 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 dont 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 dont declare that you support an interface. I wasnt sure
I would like this at first because it isnt obvious if a type implements a
particular interface, but I found greater value in the fact that I wasnt
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 hadnt
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 Ill 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 doesnt help me to understand a
complicated algorithm, but it does mean that I can concentrate more on that
algorithm because I dont 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 Im not sure I would have even started that work
if Go hadnt 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 dont have to evaluate
external testing frameworks and select one. I can also understand the tests
when Im 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
Gos 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 doesnt 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 dont 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 didnt, 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 Im 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 persons 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/

View File

@@ -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 Swetts podcast again. Hes a great
interviewer and I always have fun with him.
I was [8]recently on Jason Swetts podcast again. Hes a great interviewer and
I always have fun with him.
By Twitter request we talked about… When would you not use Rails? Its
a great question.
By Twitter request we talked about… When would you not use Rails? Its a great
question.
For the entertaining version, [9]listen to the podcast. For the
just-the-facts extra-complete version, Im writing this post.
For the entertaining version, [9]listen to the podcast. For the just-the-facts
extra-complete version, Im writing this post.
When Is Rails the Wrong Choice?
Ill start with a few simple, obvious times you wouldnt use Rails, and
then Ill talk about some technically interesting times.
Ill start with a few simple, obvious times you wouldnt use Rails, and then
Ill talk about some technically interesting times.
First, and most important, is team familiarity. If your team doesnt
already know Rails and isnt 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 doesnt already
know Rails and isnt 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. Ill 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 dont want to use JRuby for some reason, Rails
isnt your framework. If youre writing a WordPress plugin, youll be
doing it in PHP. Often theres one specific compatibility concern that
overrides everything else.
Second, when you know some other framework fits better. Ill 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 dont want to use JRuby for some reason, Rails isnt your framework. If
youre writing a WordPress plugin, youll be doing it in PHP. Often theres 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 dont. So well 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 dont. So well also talk about the good and bad points.
Separately: youd normally only use Rails as an HTTP server, so some
tasks just arent Rails-shaped.
Separately: youd normally only use Rails as an HTTP server, so some tasks just
arent 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.' Hes
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.' Hes too much lab
assistant for your lab.
Some places not to use Rails can include:
Really Small Tasks that Wont Grow: if a server does very little, Rails
is often too much. Not going to touch a database? Then the DB setup
isnt helping you, is it? Just a tiny low-traffic intermediate server
with no caching? A lot of Rails is more trouble than its worth.
Really Small Tasks that Wont Grow: if a server does very little, Rails is
often too much. Not going to touch a database? Then the DB setup isnt helping
you, is it? Just a tiny low-traffic intermediate server with no caching? A lot
of Rails is more trouble than its worth.
Be careful with tasks that grow, though — making a tiny server scale up
to do a lot more can be ugly. If youre 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 youre 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 Its Just an API Server: Rails has less to offer an API server
that speaks JSON over the wire. A lot of its HTTP security doesnt
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 dont 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 Its Just an API Server: Rails has less to offer an API server that
speaks JSON over the wire. A lot of its HTTP security doesnt 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 dont 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 youre 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 youre 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 youre doing in-browser rendering and Rails is
just serving JSON. Its a weird kind of in-between case. A lot of
Rails security and convenience functions no longer help you, but youre
still doing things where internal libraries (ActiveRecord, ActiveJob,
ActionMailer) can be highly useful. But if youre never rendering HTML
on the server and youre very sure you never will, Rails will probably
help you less.
Related to that is when youre doing in-browser rendering and Rails is just
serving JSON. Its a weird kind of in-between case. A lot of Rails security and
convenience functions no longer help you, but youre still doing things where
internal libraries (ActiveRecord, ActiveJob, ActionMailer) can be highly
useful. But if youre never rendering HTML on the server and youre 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 thats
monkeypatching, writing to a database or creating new types at runtime,
Ruby isnt designed for a team of 200 programmers where you dont 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. Thats not
really Rubys sweet spot.
Ruby allows for a lot of [11]non-local effects. Whether thats monkeypatching,
writing to a database or creating new types at runtime, Ruby isnt designed for
a team of 200 programmers where you dont 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. Thats not really Rubys 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
Grimms (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 Grimms
(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.
Id still start out in Rails, personally. If youre 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 youre successful and you can afford the drag on your development
speed.
Id still start out in Rails, personally. If youre 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 youre
successful and you can afford the drag on your development speed.
The other worry here can be performance. If youre rewriting a project
that is already as large as the current Basecamp… then youre
[18]actually fine for performance. Rails still scales great for them.
But if youre 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 youre rewriting a project that is
already as large as the current Basecamp… then youre [18]actually fine for
performance. Rails still scales great for them. But if youre 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. Theyre
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. Theyre 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
Hanssons word for it in the form of The Rails Doctrine. Its a great
document and it covers a lot of ground.
Hanssons word for it in the form of The Rails Doctrine. Its a great document
and it covers a lot of ground.
Indeed, if you want to better understand why Rails isnt 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 isnt 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 youre writing an
interactive app with server-rendered HTML. It assumes that security is
vital (Rails trades a lot for security) but that you dont 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 dont 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, its designed for building very
quickly. That makes sense when technical execution is not your biggest
risk. For instance: if youre building a small startup, and youre
pretty sure you can build the site but people may not buy your product,
you are dominated by market risk. Thats when Rails is perfect. You
want to build very quickly. And even if you build perfectly, youre
probably going to have to throw away the result for nontechnical
reasons, like “people dont want to buy it.”
Rails also assumes you want high developer velocity at a cost of technical
debt. In other words, its designed for building very quickly. That makes sense
when technical execution is not your biggest risk. For instance: if youre
building a small startup, and youre pretty sure you can build the site but
people may not buy your product, you are dominated by market risk. Thats when
Rails is perfect. You want to build very quickly. And even if you build
perfectly, youre probably going to have to throw away the result for
nontechnical reasons, like “people dont want to buy it.”
As part of “high dev velocity, technical debt is okay” Rails assumes
things like, “youll 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, “youll want to use a lot of gems” and “dependencies that work are fine
if they speed you up.”
Rails assumes you dont mind scaling out application servers
horizontally (by bringing more of them online.) Its designed to scale
well if you can do that. Rails assumes CPU is fairly cheap and its
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 dont mind scaling out application servers horizontally (by
bringing more of them online.) Its designed to scale well if you can do that.
Rails assumes CPU is fairly cheap and its 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 youll have some calculation or data transformation
in your application. It assumes that its okay to use some CPU because
youll be doing that anyway.
Rails also assumes youll have some calculation or data transformation in your
application. It assumes that its okay to use some CPU because youll be doing
that anyway.
(When does that last assumption matter? Lets talk about Evented
Servers and see.)
(When does that last assumption matter? Lets talk about Evented Servers and
see.)
What Isnt 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, theres one particular task
that its not amazing for: shim servers.
While Rails is great at a lot of things, theres one particular task that its
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 thats 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 cant 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 cant 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 dont we use it for everything?
Because it doesnt 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 — thats simply too many
connections and the latency will be terrible.
If Evented is so much better, why dont we use it for everything? Because it
doesnt 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 —
thats simply too many connections and the latency will be terrible.
In other words, Rails and Node.js are different tools for different
projects. If youre thinking, “I should either use Rails or Node for
this” I would recommend looking deeper into your project (and/or your
framework) until its 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 youre thinking, “I should either use Rails or Node for this” I would
recommend looking deeper into your project (and/or your framework) until its
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. Im
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. Im sure this is the
right answer, but I have forgotten the question.
Rails is the wrong choice if your team doesnt want to use it or
doesnt know how.
Rails is the wrong choice if your team doesnt want to use it or doesnt 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 isnt 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
isnt Rails-friendly.
Rails might be the wrong choice if youre not rendering HTML on the
server, especially if your project is very small and/or doesnt use a
database.
Rails might be the wrong choice if youre not rendering HTML on the server,
especially if your project is very small and/or doesnt use a database.
Rails is the wrong choice is youre not doing prototyping-flavoured
work, preferably with a small, highly-competent team.
Rails is the wrong choice is youre 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 cant subdivide the project.
Rails is the wrong choice if your dev team or your app code is too big and you
cant 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 youd rather [27]listen to an
entertaining podcast on the same topic.
This article is the wrong choice if youd rather [27]listen to an entertaining
podcast on the same topic.
If youre wondering when Rails is the right choice, [28]the Rails Doctrine is a
great first step.
If youre 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

View File

@@ -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 theres 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 dont want to get to
where Im 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 theres 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 dont want to get to where
Im 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, Ive 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 Ive owned some fifteen
bikes. Ive had aluminum and carbon Bianchi road bikes. Ive had steel
Kalavinka keirin bikes with gorgeous head badges. Ive had folding
Dahon and Birdy BD-1s. Ive 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. Ive gone out of my way
to get a handmade Arrow cruiser from a builder in Ogikubo. I still have
a custom orange Moulton that Ive 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, Im 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 — thats not affect, its
survival. In Japans August, you simply cant walk a block without
losing most of your moisture.
All my standing life, Ive 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 Ive owned some fifteen bikes. Ive had aluminum and carbon Bianchi
road bikes. Ive had steel Kalavinka keirin bikes with gorgeous head badges.
Ive had folding Dahon and Birdy BD-1s. Ive 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. Ive gone out of my way to get a
handmade Arrow cruiser from a builder in Ogikubo. I still have a custom orange
Moulton that Ive 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, Im
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 friends 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 Ive 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 — thats
not affect, its survival. In Japans August, you simply cant 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 friends 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 Vanmoofs (quite
frankly) giant S3 — just a few months later.
In the past eighteen months Ive 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 Id 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
Vanmoofs (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 arent 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 youve 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 Id
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 arent 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 youve 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, Ive 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. Its the only bad crash Ive had in decades. So Ive 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 cant 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, Ive 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. Its the only bad crash
Ive had in decades. So Ive 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 cant 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
cant 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 cant
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.
Ive 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
cant help it. The charm is too great. The game non- zero sum. The more
people who know, the better the world. Its 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 bikes 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
Ive 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 cant help it. The charm
is too great. The game non- zero sum. The more people who know, the better the
world. Its 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 bikes 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-motord 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-motord 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 arent cheap. But I believe theyre 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 arent cheap. But I believe theyre 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 Vanmoofs chosen
components are sub-optimal) and difficult (?) to tune on your own.
In the end, I just dont think theyre 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, Id
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
arent — 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 its
so close to great. Sadly — and I dont know how else to frame this
— it feels like the engineers behind the software dont 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, couldnt 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 wed be in Electric Bike Elysium. [20]↩︎
3. Ive 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
dont 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
shouldnt 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 Vanmoofs chosen components are sub-optimal) and difficult (?) to
tune on your own. In the end, I just dont think theyre 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, Id 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 arent — 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 its so close
to great. Sadly — and I dont know how else to frame this — it feels like
the engineers behind the software dont 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, couldnt 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 wed be in Electric Bike Elysium. [23]↩︎
The work on this site is supported in part by [30]paid memberships.
3. Ive 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 dont 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 shouldnt 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

View File

@@ -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

View File

@@ -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)
Heres a good resolution, if youre 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.
Heres a good resolution, if youre 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 Kelces 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 Kelces retirement says about the Eagles future
[61]Facebook[62]Twitter[63]Email
[64]Reddit[65]Link
[66]view video
[67]What Jason Kelces 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 its 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 youre 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 its 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 youre 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. Theres 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. Theres 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—theyre 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. Its
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, Im afraid, must be done. But its 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—theyre 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. Its 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, Im afraid, must be done. But its 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 dont—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 dont—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, Im
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 doesnt 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 isnt 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, Im 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
doesnt 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 isnt
so joyful that I can be said to be really enjoying myself, which is clearly
something I dont 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 doesnt necessarily mean
theyre worth a shit. If youre not going to paint the living room,
thats 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 cant 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 doesnt
necessarily mean theyre worth a shit. If youre not going to paint the living
room, thats 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 cant 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 its 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 youve 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 youre still close to upright so long as youre not
actually enjoying yourself. Bullshit! When you are not doing what you are
supposed to do, do something you genuinely want to do. Thats 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 its 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 youve 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 youre still close to upright so
long as youre not actually enjoying yourself. Bullshit! When you are
not doing what you are supposed to do, do something you genuinely want
to do. Thats 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 dont, the making of the list will bring you
a little closer to addressing yourself to the items on it, and thats
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. Thats whats 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 dont, the making of the list will bring you a
little closer to addressing yourself to the items on it, and thats 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. Thats whats
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. Dont 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 wasnt gonna sit here stewing in my anxiety all
afternoon, so instead Im 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 thats the
whole idea.
Of course, you will probably fall short of dividing your time exactly
equally between responsibilities and pursuits. Dont 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 wasnt gonna sit
here stewing in my anxiety all afternoon, so instead Im 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 thats 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 Kelces retirement says about the Eagles future
55. mailto:?subject=What Jason Kelces 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 Kelces 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

View File

@@ -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

View File

@@ -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 Dont 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 Dont 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,
its not an actual person. Its “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. Ive 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. Im
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, its not an
actual person. Its “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. Ive
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. Im not convinced.
Heres why I dont use Copilot (or ChatGPT) to write code:
1. Copilots 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 dont 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 doesnt 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
dont want my editor sending my code somewhere else without me
intentionally doing it.
1. Copilots 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 dont 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 doesnt 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 dont 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 dont 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 doesnt really
understand or even recognize. This makes maintenance harder.
sometimes dont 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 doesnt 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 dont 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 wouldnt
be a replacement for review by people, but I believe it could
potentially help people do the review. I dont 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. Im 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 dont 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 wouldnt be a replacement for
review by people, but I believe it could potentially help people do the
review. I dont 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 its about reasoning, thinking, models,
concepts, expression, communication, ethics, reading, learning, making,
and process. Its an art and a practice that is best done with other
people.
Maybe my thinking on this will change. But I doubt it. Im 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 its 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 its about reasoning, thinking, models, concepts,
expression, communication, ethics, reading, learning, making, and process. Its
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 its 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 doesnt actually understand anything, and more importantly,
it doesnt 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 Haldars [30]Re: Why I dont use Copilot.
Can Copilot help with these [29]goals? I think the answer is no, because it
doesnt actually understand anything, and more importantly, it doesnt promote
understanding.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Update (2023-06-09): For another take on Copilot that uses this post as a
jumping off point see Vivek Haldars [30]Re: Why I dont 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/

View File

@@ -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 Oracles CONNECT BY syntax or SQL standards Common Table
Expressions (CTEs) to recurse through the nodes, but since the graph
can contain loops, wed get errors (unless were very careful, as well
see in a moment).
Expressions (CTEs) to recurse through the nodes, but since the graph can
contain loops, wed get errors (unless were very careful, as well 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 doesnt 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 doesnt 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 its 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 its 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 weve encountered with Drupal
Config Split when upgrading Drupal 8 to 9 and we share how to fix it,
so you dont have to run into the same issue when upgrading to Drupal
9.
In this article we look back at an issue weve encountered with Drupal Config
Split when upgrading Drupal 8 to 9 and we share how to fix it, so you dont
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

View File

@@ -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/

View File

@@ -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 thats not expected to change, and thats
a feature! You can rely on it to do some real work.
Finished software is software thats not expected to change, and thats 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
dont 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 dont
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 wont bother you with things you dont
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 wont bother you with things you dont 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 whats there) wont 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 whats there)
wont 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 wont change in its
lifetime. Well 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 wont change in its lifetime.
Well 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 doesnt
evolve itll 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 doesnt evolve itll 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 its 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 its 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 its genuinely better, theres 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 its genuinely better, theres 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. Its 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. Its 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 doesnt
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 doesnt 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

View File

@@ -1,42 +1,39 @@
#[1]RSS Feed for ANIAT [2]JSON Feed for ANIAT
[snowman-20]
[snowman-200.jpg]
[3]And now its all this
[1]And now its 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 couldnt
help it. I can resist everything except temptation.” Thats my excuse
for this post.
Oscar Wilde—who would have been great on Twitter—[5]said “I couldnt help it. I
can resist everything except temptation.” Thats 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 didnt
know of one^[9]1 and suggested she write it herself and let me know
when its done. Ive been getting progress reports, but her script
isnt 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 didnt know of one^[7]1 and suggested
she write it herself and let me know when its done. Ive been getting progress
reports, but her script isnt finished yet.
Theres certainly no need to tidy the links up that way. Markdown
doesnt care what order the reference links appear in or the labels
that are assigned to them. Ive 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…
Theres certainly no need to tidy the links up that way. Markdown doesnt care
what order the reference links appear in or the labels that are assigned to
them. Ive 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.
Heres an example of a short Markdown document with out-of-order reference
links:
Heres 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.
Heres 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 dont 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 dont 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 dont 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 dont overwrite each other.
newlabels is built from labels and order in Line 36. Its 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. Its 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 havent 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 BBEdits 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 havent 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 BBEdits 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 didnt 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 wasnt
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
didnt 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 wasnt 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 youd
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 wouldnt 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 youd 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 wouldnt 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, Im 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, Ill
have to revisit that decision.
At the moment, Im 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, Ill 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 didnt think [11]Seth Browns 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 didnt think [9]Seth Browns 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.
© 20052023, 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/

View File

@@ -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 thats
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 thats 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 dont actually love simplicity at all,
its 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 dont actually love simplicity at all, its your lowest priority.
When I say “sacrifice”, I dont 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 dont 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 its 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 its 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 youve
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 youve 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 youve 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 youve 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 thats 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 thats 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

View File

@@ -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 didnt do competitive analysis against Laravel, Django, or Phoenix. Theyre
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. Theres a lot to love about Rails. Other
communities could learn a bit from the Ruby & Rails culture and wisdom. I wont
implement everything in Rails, but itll 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 hadnt 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 havent 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 its 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 dont use breakpoints and use
console.log is that breakpoints dont 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, Im used to bad debugging experiences.
The Chrome debuggers [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 doesnt. 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 codes 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 its 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 Chromes debugger
to a Node.js instance: a finicky solution that doesnt 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 Railss 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 didnt have any require statements. You mention a modules name,
and its 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 whats happening? Sure,
youre 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 doesnt. Maybe impure, vaguely risky techniques are just a
net positive over time, and making everything fully explicit isnt really
necessary? Now when Im 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,
wouldnt 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.
Ive tried to test front-end applications. Ive 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: its unreliable,
hard to automate, hard to debug when it fails, and often doesnt even assert
for important behaviors, so it doesnt 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 arent 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.
Im 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 - its 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. Its not
like loading some functions, its 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 cant 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 its also pretty incredible - the idea that something like [27]passport,
Nodes 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.
Theres 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 dont write Ruby, you should pay attention to [28]Sandi Metz. Shes
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 theres [29]arkency, [30]ThoughtBot, and so many other thoughtful
writers with years of experience in Rails. Sometimes its 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. Ive 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 dont have to use all of that if you
dont want to. It took me a while to adjust to the object-oriented way of doing
things - in particular, the idea that you cant just have a free-range function
floating out there, unassociated with a class or module, like you can in
JavaScript. And you cant 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 Rubys standard library isnt that huge. Ive seen JavaScripts standard
library grow a lot too, and frankly its 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 Rubys 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. Theres [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 Railss [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 - its hard to keep up with the latest trends in frontend. But this is
one area where Railss 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 todays 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. Id try to win CodeClimates 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 doesnt actually matter for
an early-stage startups 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, theres 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 isnt
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 its 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 itll do something implicitly that you dont 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 - its 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 its
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
theres 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
communitys 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

View File

@@ -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.
Im 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. Thats 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 theres 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 arent 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: its 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 dont 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 were 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 theyre 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 its 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 theres 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. Ive 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 youve 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
mightve 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 theyll
trigger errors that none of your testing knows about, because youll 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 thats 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. Thats bad for performance: HTML pages dont
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: youve created the
[12]Time To Interactive metric. Its your startups homepage, and it has a
Sign up button, but until the JavaScript loads, that button doesnt 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 theres 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: Ive 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 cant 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. Its really important and really bizarre in React
land. Years ago, I expected that some good patterns would emerge. Frankly, they
didnt.
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.
Theres 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.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Dont read this as anti-React. I still think React is pretty great, and for a
particular set of use cases its the best tool you can find. And I explicitly
want to say that  from what Ive seen  most other Single-Page-Application
tools share most of these problems. Theyre 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 Im 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.
Were layering optimizations upon optimizations in order to get the SPA-like
pattern to fit every use case, and Im 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 dont think that React, in this context, really is that pit of success. A
naïvely implemented React SPA isnt stable, or efficient, and it doesnt
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.
Thatll help you get pretty far. But then youll be lured by all of the easy
one-click ways to add bloat and complexity. Youll 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 arent complicated enough to push beyond Reacts limits. But
there are also a lot of problems for which I cant 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 wouldve gotten if you just
hadnt 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 Hills “Breathe
on a CD while your friends are listening to The Weeknd in their Teslas.
Swimming against this current isnt easy, and not in a trendy contrarian way.
I dont think that everyones 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 its 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.
Theres 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, youre 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, itd be React.
Maybe?
What if everyones wrong? Weve 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

View File

@@ -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

View File

@@ -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

View File

@@ -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
Kellans 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 Kellans
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, Ive 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, Ive 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.
Lets 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.
Lets 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 thats existed for a year or less, you just spent one of
your innovation tokens. If you choose to write your own database, oh
god, youre 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 thats
existed for a year or less, you just spent one of your innovation tokens. If
you choose to write your own database, oh god, youre in trouble.
Any of those choices might be sensible if youre a javascript
consultancy, or a database company. But youre probably not. Youre
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 youre a javascript consultancy, or a
database company. But youre probably not. Youre 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? Thats 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? Thats 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 its 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 its 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 dont know what happens when
this database hits 100% CPU.
* An unknown unknown is something like: geez it didnt 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 thats 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 dont know what happens when this
database hits 100% CPU.
• An unknown unknown is something like: geez it didnt even occur to us that
[15]writing stats would cause GC pauses.
Both sets are typically non-empty, even for tech thats 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 its not the only factor that needs to be considered.
Technology choices dont 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 its not the only factor that needs to be considered. Technology choices
dont 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 were already using Ruby, adding Python
to the mix doesnt feel sensible because the resulting complexity would
outweigh Pythons marginal utility. But somehow when were 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 were already using Ruby, adding Python to the mix doesnt
feel sensible because the resulting complexity would outweigh Pythons marginal
utility. But somehow when were 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 cant do it,”
its usually just somewhere on the spectrum of “well, we could do it,
but it would be too hard” [20][4]. If you think you cant accomplish
your goals with what youve 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.
Its 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 its 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 cant do it,” its usually
just somewhere on the spectrum of “well, we could do it, but it would be too
hard” [19][4]. If you think you cant accomplish your goals with what youve
got now, you are probably just not thinking creatively enough.
New technology choices might be purely additive (for example: “we dont
have caching yet, so lets add memcached”). But they might also overlap
or replace things you are already using. If thats the case, you should
set clear expectations about migrating old functionality to the new
system. The policy should typically be “were 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.
Its 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 its subtly different.
This process is not daunting, and its not much of a hassle. Its 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 dont have
caching yet, so lets add memcached”). But they might also overlap or replace
things you are already using. If thats the case, you should set clear
expectations about migrating old functionality to the new system. The policy
should typically be “were 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 its not much of a hassle. Its 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]Etsys 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 isnt 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]Etsys 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 isnt 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

View File

@@ -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 youll 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 youll 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 doesnt have to be in a workspace if you dont import
external packages and you use relative imports for your own code, but
its not recommended. Its 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 its 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 doesnt
have to be in a workspace if you dont import external packages and you use
relative imports for your own code, but its not recommended. Its 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 its still an experimental feature at
this point in time.
You have your project directory in the right place. Whats 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
itll 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 itll 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 dont have
to separate the application files. Youll 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 dont have to
separate the application files. Youll 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
its 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 (its 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 its 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 (its
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 wont
be able to access this internal code if it lives outside of its parent
directory. This feature is not widely used yet because its relatively
new; however, its 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 wont be able to access this internal code if it lives outside of its
parent directory. This feature is not widely used yet because its relatively
new; however, its 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 dont 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 dont 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 its 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 its 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. Its
a little dated, but its 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. Its a little dated,
but its 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 youll 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
youll need to have.
Now its time to write some code! If you dont 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 havent
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 its time to write some code! If you dont 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 havent 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--------------------------------

View File

@@ -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 didnt like disagreeing with people
about much of anything. Im 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 didnt like disagreeing with people about much of
anything. Im 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 wasnt 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 its a bad place to
be.
Over time I shifted on the matter a little, but when I look back on it I
realize I wasnt 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 its a bad place to be.
That attitude created some problems:
* When youre bad at being in conflict, youre at a disadvantage with
people who are good at it and mean you harm; and youre 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 its hard to maintain your integrity. (See above: The
people who dont want whats 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 whats best for you are
counting on you to do all the work to get out of conflict.)
* When youd rather do anything than admit that youre in a state of
conflict, you will eventually do something about your problem that
is less skillful for having waited than if youd admitted it to
yourself (and whoever youre in conflict with) sooner. Or, as one
of my past managers put it to me, “dont be that guy who
hockey-sticks.” (I nodded then kind of hockey-sticked.)
* When youre bad at being in conflict, and youre willing to be set
aside your integrity or do other things to get out of it quickly,
youll 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 youre bad at being in conflict, youre at a disadvantage with people
who are good at it and mean you harm; and youre 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 its
hard to maintain your integrity. (See above: The people who dont want
whats 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 whats best for you are counting on you to do all the work to get
out of conflict.)
• When youd rather do anything than admit that youre in a state of
conflict, you will eventually do something about your problem that is less
skillful for having waited than if youd admitted it to yourself (and
whoever youre in conflict with) sooner. Or, as one of my past managers put
it to me, “dont be that guy who hockey-sticks.” (I nodded then kind of
hockey-sticked.)
• When youre bad at being in conflict, and youre willing to be set aside
your integrity or do other things to get out of it quickly, youll
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, Ive changed on the matter: On balance, I
definitely dont think its existence is a sign theres a problem. Its
just a sign that theres 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 dont know the
person Im 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, Ive changed on the matter: On balance, I definitely
dont think its existence is a sign theres a problem. Its just a sign that
theres a conflict.
I still think I have a responsibility to introduce the existence of
conflict with kindness, or receive the news that Ive entered into a
state of conflict in a manner that invites a full airing. “Relaxed and
possibly delighted curiosity,” I suppose Id call it, rather than a
furrowing of the brow and assurances that I want to restore harmony at
once. Because I dont 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 dont know the person Im
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 Ive entered into a state of conflict
in a manner that invites a full airing. “Relaxed and possibly delighted
curiosity,” I suppose Id call it, rather than a furrowing of the brow and
assurances that I want to restore harmony at once. Because I dont 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]
Its 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 didnt 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 dont 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.)
Its 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 didnt 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 dont
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 doesnt really want to sell
them, and it really does not want to do anything other than the most
basic service. I think Ive documented that elsewhere, so I wont go
into it more here, but Ill just offer the observation that REs
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 doesnt really want to sell them, and
it really does not want to do anything other than the most basic service. I
think Ive documented that elsewhere, so I wont go into it more here, but Ill
just offer the observation that REs 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 theyre 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
wouldnt 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 theyre 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 wouldnt 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 theyd 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 theyd 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 theyd 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 theyd see
me when they saw me.
Anyhow, the test ride sold me. Ive 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. Ive 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. Theres
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. Theres 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 Ive got it in the driveway with so much of the riding
season left, and I can wholeheartedly recommend Sabatino Moto if youre
looking to buy one for yourself.
Anyhow, glad Ive got it in the driveway with so much of the riding season
left, and I can wholeheartedly recommend Sabatino Moto if youre 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

View File

@@ -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 Id 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 Id 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 Im 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 Im 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 Im 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

View File

@@ -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 havent 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 havent 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 dont use the official Bullet Journal formatting, Ive tried a few
times but after many years of using [13]Dash/Plus as my task management
on paper formatting system Ive never been able to change it.
I dont use the official Bullet Journal formatting, Ive tried a few times but
after many years of using [12]Dash/Plus as my task management on paper
formatting system Ive 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/

View File

@@ -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 doesnt 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 doesnt 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.
Its not a life commitment, its 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. Its not a life
commitment, its 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 youre 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 dont need a style for everything. Make a deliberate choice about
what needs consistency and what doesnt.
Style helps you know when youre 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 dont need a style for everything. Make a deliberate choice about what
needs consistency and what doesnt.
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 Ill 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 Ill 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 hardearned 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 hardearned 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

View File

@@ -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 APIs 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 APIs 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 its tempting to skip one, you might
not expect that error to ever happen. But thats why its an exception!
You need to handle it so that you can find out clearly if it ever does
happen.
Always handle errors. Sometimes its tempting to skip one, you might not expect
that error to ever happen. But thats why its an exception! You need to handle
it so that you can find out clearly if it ever does happen.
If you dont 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 dont 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
layers responsibility and dont 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 layers responsibility and dont
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-funcs, it can be annoying
to return the error. But if you dont 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-funcs, it can be annoying to
return the error. But if you dont 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 isnt necessary and its better to just return the error
unwrapped.
Usually this isnt 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
dont 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 dont 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

View File

@@ -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, Romes [10]Cloaca Maxima (“Greatest Sewer”) is still
in-use after 2,400 years.
For comparison, Romes [10]Cloaca Maxima (“Greatest Sewer”) is still in-use
after 2,400 years.
So why didnt 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 dont like what you see on the
other side, you cant get back to where you were before. We can call
these Type 1 decisions. But most decisions arent like that they
are changeable, reversible theyre two-way doors. If youve made a
suboptimal Type 2 decision, you dont 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
dont like what you see on the other side, you cant get back to where you
were before. We can call these Type 1 decisions. But most decisions arent
like that they are changeable, reversible theyre two-way doors. If
youve made a suboptimal Type 2 decision, you dont 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. Well 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. Well have to figure out how to fight that tendency.
[16]Jeff Bezos
The Cloaca Maxima didnt 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 didnt 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 didnt 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 didnt 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 couldve 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
couldve 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. Its difficult to do stupid things
when you do stupid things publicly.
Transparency thwarts [18]own goals. Its difficult to do stupid things when you
do stupid things publicly.
Always Scale Down
Theres 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…
Theres 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 its a really bad idea to start at a design for 10 or
100 things and scale it up. Its 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 youve got
your 10,000 things than when you scaled up, but youll know that
youll be able to scale it up later. So its good.
And I think its a really bad idea to start at a design for 10 or 100
things and scale it up. Its 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 youve got your 10,000 things than when you
scaled up, but youll know that youll be able to scale it up later. So
its good.
So rather than ask, “how do we get to five nines?”, lets make it
more interesting! Lets start at 9,999 nines reliability and scale
it down.
So rather than ask, “how do we get to five nines?”, lets make it more
interesting! Lets 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 cant make a baby in 1
month.
Pay particular attention to labor 9 women cant 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 dont 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 dont 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

View File

@@ -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 its been a while since Ive 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 its been a while since Ive 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, Ive taken the first 15 minutes to
plan the week ahead.
Every Monday for the past 5 years, Ive 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 Ill 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 Ill 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 Ive outlined my weekly plan, I turn my attention to the day
ahead.
Once Ive 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 Im 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 Im 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.
Ive 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,
its unlikely Ill get through three of them, and Ill finish the day
feeling behind.
Ive 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, its unlikely Ill get through
three of them, and Ill 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.
Im able to be proactive in managing my workload rather than just
surviving the dog-pile nature of incoming requests.
Im 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, its 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, its 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 Ill be able to plan
for it when Im back in the saddle on Monday.
There will always be more work to do, but I know Ill be able to plan for it
when Im back in the saddle on Monday.
(P.S. Were 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. Were 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 Apples New Journal App
[35]Our First Look at Apples New Journal App
Lets take a look at Apples 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]»
Lets take a look at Apples 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 youve 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 doesnt 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 youve 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 doesnt
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
cant 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 cant 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/

View File

@@ -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 youre 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
youre 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 Isnt Obsidian a Notes App?
Thats 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 Ive written in the last 2
years has been written in Obsidian.
Thats 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 Ive 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
Its just not for me for a couple of specific reasons.
First, publishing to the web isnt 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 isnt 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 its something on my domains, but the “simple instructions”
didnt work for me, and even as a web developer I didnt 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 its something on my
domains, but the “simple instructions” didnt work for me, and even as a web
developer I didnt feel comfortable digging too far into this.
Which meant I was stuck copying and pasting into WordPress.
And because Ulysses doesnt 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 doesnt 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. Its simple, uses plain text
files, provides inline formatting, and supports standard Markdown. Its
everything Ive ever wanted in a plain text editor.
Obsidian fits that description perfectly. Its simple, uses plain text files,
provides inline formatting, and supports standard Markdown. Its everything
Ive 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, lets 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 heres the key settings you
want if youre 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 heres the key settings you want if
youre 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, its 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. Were 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. Were 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 youre 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
theres 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,
its 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 youre 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 theres 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, its 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 youve 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 youve 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 dont mind non-standard
Markdown formatting and dont run into the publishing issues that I
did, maybe try that instead. But if youre 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 dont mind non-standard Markdown
formatting and dont run into the publishing issues that I did, maybe try that
instead. But if youre 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.
Its not as good as the writing stats in Ulysses, but its good enough
for me.
[svg][obsidianbw]
Its not as good as the writing stats in Ulysses, but its good enough for me.
cMenu
If youre 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 youre 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 dont 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 dont 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
youll 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 youll
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. Its 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. Its 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 youre trying
to focus on your words. Fortunately, the [27]Focus Mode plugin allows
you to remove all the distractions and focus on what youre writing.
The Obsidian interface can be a little distracting when youre trying to focus
on your words. Fortunately, the [25]Focus Mode plugin allows you to remove all
the distractions and focus on what youre 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.
Theres 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]
Theres 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 its completely free to
start, theres no reason not to give it a spin.
__________________________________________________________________
Obsidian may not be for everyone, but since its completely free to start,
theres no reason not to give it a spin.
1. Since its an Obsidian Command, you could also add this as a button
to the cMenu plugin mentioned above. [30]↩
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Follow us
1. Since its 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 Apples New Journal App
[49]Our First Look at Apples New Journal App
Lets take a look at Apples 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]»
Lets take a look at Apples 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 youve 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 doesnt 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 youve 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 doesnt
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
cant 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 cant 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/

View File

@@ -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

View File

@@ -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

View File

@@ -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. Its 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 ones work meaningless, because one cannot connect to,
own and direct ones 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. Its 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 ones work meaningless,
because one cannot connect to, own and direct ones 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 ones 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 ones 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 were 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 todays 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 were 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
todays 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 todays 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 todays 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. Adornos “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. Adornos “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 mens,
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 mens, 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/

View File

@@ -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, its 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, its 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 Ive 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 heres some of my favorite reads of 2022.
__________________________________________________________________
Recently Ive 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
heres 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 Gladstones [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 didnt 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 didnt 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. Theres enough traffic that its 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. Theres enough traffic that its a simple matter to
disguise incoming and outgoing correspondence, misdirect, hide in plain
sight.
Its 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.
Its 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. Clarkes [12]Rendevous with Rama
From the publisher:
An enormous cylindrical object has entered Earths 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 dont find is an alien
presence. So whoand whereare 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
dont find is an alien presence. So whoand whereare the Ramans?
Id 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).
Id 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 Tchaikovskys [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 Tchaikovskys 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. Its 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 dont share enough dialect to explain themselves to each
other.
I loved Tchaikovskys 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. Its 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 dont share enough dialect to
explain themselves to each other.
They think Im a wizard. They think Im a fucking wizard. Thats
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, “Im not a wizard;
Im a wizard, or at best a wizard.” Its not funny.
They think Im a wizard. They think Im a fucking wizard. Thats 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, “Im not a wizard; Im a wizard, or at best a wizard.” Its
not funny.
And who doesnt love an old, cranky wizard anthropologist?
@@ -140,76 +138,75 @@ Miles Camerons [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 Im glad I picked it
up. At its core, its about highly competent people all working
together, pushing their limits, and achieving success. Its the kind of
genre someone once described to me as competency pornStar Trek: The
Next Generation being the ultimate example.
This was another recommendation from a friend, and Im glad I picked it up. At
its core, its about highly competent people all working together, pushing
their limits, and achieving success. Its 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 Treks economy. My biggest criticism of this book is
the maddening way Cameron switches back and forth between using
characters 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
Treks economy. My biggest criticism of this book is the maddening way Cameron
switches back and forth between using characters 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. Taylors [16]Heavens 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 Benders 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 Benders fate—whatever the cost.
The Bobiverse is probably my favorite audiobook series of all time.
Its 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. Its 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.
Heavens 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.
Heavens 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 Stephensons [17]Termination Shock: Okay, I actually like
Stephenson, and this is a very good book about the inevitable future of
Geoengineering and its political consequences. Coupled with a very
weird Queen fetish. Its 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 Stephensons [17]Termination Shock: Okay, I actually like Stephenson, and
this is a very good book about the inevitable future of Geoengineering and its
political consequences. Coupled with a very weird Queen fetish. Its 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.
Baoshus [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.
Baoshus [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 Herberts [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 Herberts [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 Tchaikovskys [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? Its one of my favorite science fiction books
of all time — even if only for the worldbuilding. Sentient spiders?
Sentient spiders!
__________________________________________________________________
Adrian Tchaikovskys [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? Its 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 Steffens [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 cant remember exactly how I stumbled on Alex Steffens 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 cant remember exactly how I stumbled on Alex Steffens 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. Were 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.
Were cosplaying people who live in past decades before discontinuity ate
our societies.
I wouldnt classify The Snap Forward as doomerism, either. Its 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, wed 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 wouldnt classify The Snap Forward as doomerism, either. Its 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, wed 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 Levines [25]Money Stuff
Ive been reading Money Stuff for a few years now, and I cant really
put my thumb on why I love it so much. Sure, its 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.
Ive been reading Money Stuff for a few years now, and I cant really put my
thumb on why I love it so much. Sure, its 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]FTXs Balance Sheet Was Bad:
But then there is the “Hidden, poorly internally labeled fiat@
account,” with a balance of negative $8 billion. I dont actually
think that youre supposed to subtract that number from net equity —
though I do not know how this balance sheet is supposed to work! —
but it doesnt 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 youre 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 dont actually think that youre
supposed to subtract that number from net equity — though I do not know how
this balance sheet is supposed to work! — but it doesnt 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 youre 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.
Its an understatement to say I dont love finance, but I do enjoy me
some Money Stuff.
__________________________________________________________________
Its an understatement to say I dont love finance, but I do enjoy me some
Money Stuff.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Whats Next?
Ive 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 Herberts Dune (never having
read 5 & 6 before), and this year Im getting the itch to do the same
for Foundation. To be frank, I dont 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. Im also getting a terrible itch to revisit a bunch of
Vonneguts work after watching the excellent [28]Unstuck in Time. But I
like new authors too!
Ive 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 Herberts Dune (never having read 5 & 6 before), and this
year Im getting the itch to do the same for Foundation. To be frank, I dont
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. Im also getting a terrible itch to revisit a bunch of
Vonneguts work after watching the excellent [28]Unstuck in Time. But I like
new authors too!
Im also interested in finding more books and newsletters about… I
guess youd 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 theres been a big surge in new thinking that
goes farther than the YIMBY/NIMBY noise of the past decade.
Im also interested in finding more books and newsletters about… I guess youd
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 theres 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

View File

@@ -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:
"Were 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 its just a lot of buzz that people are attaching
their assignment to, when honestly its 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:
"Were 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 its just a lot of buzz that people are attaching their assignment to,
when honestly its 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

View File

@@ -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 peoples initial interest in
productivity is: “How am I going to get everything done?”
Often the question that drives peoples 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 wont 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 wont 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 Youll 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 Vanderkams recent book, Tranquility by Tuesday, is one
exception to this.)
relationships and activities that feed your spirit, but not your bank account.
(Laura Vanderkams 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 youve had rich relationships, where
youve taken time to create things that gave you pleasure to create,
where youve 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 youve had rich relationships, where youve taken time to create
things that gave you pleasure to create, where youve 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 its paid work tasks or chores around the house, robs you of
leisure time: “But I cant stop working until I get everything done!”
Sometimes the belief that you must finish everything on the list, whether its
paid work tasks or chores around the house, robs you of leisure time: “But I
cant 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, Im 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, Im 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 dont 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 dont 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 wasnt 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 couldnt 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 couldnt
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

View File

@@ -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.blogs annual [29]Micro Camp.
Sharing [37]a talk I gave last week, as one of the presenters at [38]
micro.blogs 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:
Heres [30]the handout I made to go with the talk.
Heres [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

View File

@@ -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 Mans 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 Mans 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 Mens 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 Mans 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 Mans Guide to Fragrance: How to Choose and Wear Cologne
[42]My Go-To Sunglasses for Summer
[43]How to Pick the Perfect Mens 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 Mentzers 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 Mentzers 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 Historys 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
Shouldnt (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 Historys 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 Wont
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]Whats 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 Shouldnt (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 Wont 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]Whats 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, its time to put in
another wash. As soon as youre done eating and cleaning up one meal,
its 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, its time to put in another
wash. As soon as youre done eating and cleaning up one meal, its 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 lifes maintenance work can feel tiresome,
burdensome, annoying.
The relentless slog of lifes maintenance work can feel tiresome, burdensome,
annoying.
It can feel like youre 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 youre 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 Insiders 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 Insiders 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

View File

@@ -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 its
new, then it must be an improvement. You even hear this stated outright
as an argument by developers: its 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 moments notice simply because the developers found something
shinier.
developers, myself included, have a fascination with novelty. If its new, then
it must be an improvement. You even hear this stated outright as an argument by
developers: its 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 moments 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 doesnt have enough contrast. The information
density is so sparse its 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 doesnt have
enough contrast. The information density is so sparse its 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 youre
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
youre 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 isnt limited to designs.
Its also an issue when it comes to the code itself.
But this adherence to a specific aesthetic isnt limited to designs. Its 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. Im 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 didnt 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. Im 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 didnt 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 doesnt 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 doesnt 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.
Its 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 doesnt 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 isnt 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 doesnt 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 isnt 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 cant indulge in being pop culture. Be wary of
these popularity contests.
Product development cant indulge in being pop culture. Be wary of these
popularity contests.
These issues with programming culture arent new.
Jamie Zawinski calls it the [10]“Cascade of Attention-Deficit
Teenagers” model. We cant 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 cant 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 didnt
include in the book:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
But pop culture holds a disdain for history. Pop culture is all
about identity and feeling like youre participating. It has nothing
to do with cooperation, the past or the future—its 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 didnt include in
the book:
Alan Kay, [11]Dr. Dobbs Interview with Alan Kay
__________________________________________________________________
But pop culture holds a disdain for history. Pop culture is all about
identity and feeling like youre participating. It has nothing to do with
cooperation, the past or the future—its 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. Dobbs Interview with Alan Kay
[13]Out of the Software Crisis by Baldur Bjarnason
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Software projects keep failing, not because we dont 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 dont 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

View File

@@ -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
__________________________________________________________________
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
OrganizationOffice
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. Its 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 weve 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. Its 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 weve spent around 8,000 hours in here.
Organizationat an almost obsessive levelis 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.
Im about to share an unnecessary amount of detail on what makes this
space work. Ive divided this into three main sections:
Im about to share an unnecessary amount of detail on what makes this space
work. Ive 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, Ill include a list of all the gear that I
have either mentioned or captured in pictures.
At the end of each section, Ill 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,
its on the desk. If I dont, its under the desk. That means that my
desktop is still not as free of things as Id 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, its on
the desk. If I dont, its under the desk. That means that my desktop is still
not as free of things as Id 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-tacing 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-tacing a strip of wax
paper onto an industrial plastic tube and placing a trash-picked light
insideit 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 racks 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 racks supports and the shelf contents to keep him from exploring.
You can see how they look on the right side of the split image belowcovers
out on the left, in on the right.
While Im 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.
(Its the thing on the bottom shelf peeking out a bit from behind one
of my covers.)
While Im 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 Ive experienced in the time Ive
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. (Its 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 Ive experienced in the time Ive 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 dont clip or enclose them. I do label them at
both ends so I can easily identify whats what no matter where Im
looking.
[1e9e3fa0-247a-421b-b63c-34229c2fcad3]
Every time I find myself writing a label with sharpie on blue tape, I
know Im doing my future self a favor.
Rather than completely hiding themand making it more difficult to access or
alter them laterI prioritize labeling. I coil and bunch any excess cable,
but I dont clip or enclose them. I do label them at both ends so I can easily
identify whats what no matter where Im looking.
Every time I find myself writing a label with sharpie on blue tape, I know Im
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 SSDsusing [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. Were 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. Were 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 manywere made by measuring and hanging custom rack or
ledge shelving. Its 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 roomthere are
many — were made by measuring and hanging custom rack or ledge shelving. Its
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 wont
tip over, wont bend, and wont 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 wont tip over, wont
bend, and wont 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]
Im particularly pleased that I can store a collapsible exercise bench
on the inside of the door.
Im 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 leftI even rigged up cables to hang rolled up yoga
mats under the bottom shelf. 👌 Its 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. 👌 Its 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
Im as obsessive with how I organize information as I am objects and
spaces. At this point in my life, Ive tried dozens and dozens of
digital organization tools. While I used some of them for a long time
I used Todoist for several yearsnone have ever felt as useful to me
as pen and paper.
Im as obsessive with how I organize information as I am objects and spaces. At
this point in my life, Ive tried dozens and dozens of digital organization
tools. While I used some of them for a long timeI used Todoist for several
years — none have ever felt as useful to me as pen and paper.
Ive kept a notebook of some kindas 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.
Ive kept a notebook of some kind — as a sketchbook, an art journal, a
logfor 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, Ive 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, Ive 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 betterfor methan
using some kind of digital app because I can focus on the information
outside of the digital space, its 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, its how I
use them that makes them actually deliver results for me.
Heres 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 doesnt already do this. Its 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 dont
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 dont have a to-do list, my inbox
becomes one.
This is probably the most important work/life hack I can offer to anyone
who doesnt already do this. Its 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 dont 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 dont 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 days
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 Im 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 days 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 Im 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 thats 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 didnt. Analytics in this
context create their own layer of stress. Id 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
didnt 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 didnt.
Analytics in this context create their own layer of stress. Id find that
if my numbers dropped, it felt wrong, even if that was because I was less
busywhich is probably a good thing now and again! I found that I was
thinking about my “performance” as often as my productivity. I didnt need
that.
[2e6d6ea8-930f-4297-9662-d55905f31808.jpg]
[2e6d6ea8-930f-4297-9662-d55905f31808]
This is what works for me. Id 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 youve tried apps of various kinds and
still dont feel the benefits of organizing your work, Id 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. Id 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 youve tried apps of various kinds and still dont feel the
benefits of organizing your work, Id 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 doesnt 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 elselike an article or a message to
someone — I use a blue post-it note to mark it and keep it there until
Ive 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 Ill
write something on dream journaling some day…)
Now, this doesnt 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 someoneI use a blue
post-it note to mark it and keep it there until Ive 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 Ill 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 dont 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 dont 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 clipsyou 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
Ive come to understand that its neither. Life is, paradoxically, both
order and disorder.
That may sound like an exaggeration and more than a bit unpleasant, but Ive
come to understand that its neither. Life is, paradoxically, both order and
disorder.
The very possibility of life presumes orderthe coherence of biology
at the atomic leveland 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 dont 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 dont 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 internets
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 internets 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. Thats all that
is needed to reclaim the power weve 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. Thats all that is needed to
reclaim the power weve 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

View File

@@ -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 Artists Way,” Julia Cameron invented the way people renovate
the creative soul.
With “The Artists 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 Artists Way group, gamely knocking back the exercises of “The
Artists 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 Artists 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 Artists 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 Artists 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 didnt 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 books 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 books
other main dictum is the “Artists 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
Artists Way group, gamely knocking back the exercises of “The Artists 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 Artists 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 Artists
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 Artists
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 didnt 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 books 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 books other main dictum is the “Artists 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 Artists 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 Artists 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 books 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 Artists Way” proposes an egalitarian view of
creativity: Everyones got it.
The books 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 Artists Way” proposes an egalitarian view
of creativity: Everyones got it.
The book promises to free up that inner artist in 12 weeks. Its 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. Its 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 youre 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
youre 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, shes fascinated, but she doesnt
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, shes fascinated, but she doesnt
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.” Dont 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
wifes habit” — and a doctor shoos her away from his hospital when she
asks for help, telling her shes 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.” Dont 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 wifes habit” — and a doctor shoos her away from his
hospital when she asks for help, telling her shes 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 its 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 doesnt want to? They said, Just
try it.’”
“I think its 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 doesnt want to? They said, Just try it.’”
So she did. She wrote novels and screenplays. She wrote poems and
musicals. She wasnt 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
wasnt 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 wouldnt sell. “Part of the reason,” Mr.
Fotinos said, “was that this was a book that wasnt like anything else.
We didnt 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 Artists Way launched it.” Now an editorial director at St.
Martins Press, Mr. Fotinos said he is deluged with pitches from
authors claiming theyve written “the new Artists 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 wouldnt sell. “Part of the reason,” Mr. Fotinos said, “was
that this was a book that wasnt like anything else. We didnt 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 Artists Way launched it.” Now an
editorial director at St. Martins Press, Mr. Fotinos said he is deluged with
pitches from authors claiming theyve written “the new Artists Way.”
“But for Julia, creativity was a tool for survival,” he said. “It was
literally her medicine and thats 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 thats why the book is so authentic, and resonates with so
many people.”
“I am my tool kits,” Ms. Cameron said.
And, indeed, “The Artists 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 Artists 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, its like watching the lights come on,” said Ms.
Cameron. “My students dont 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, its like watching the lights come on,” said Ms. Cameron. “My
students dont 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 Artists
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 Im fooling? Im 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 Artists 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 Im fooling? Im a subhuman blowhard.’”
“Shes given you an assignment that is doable, and I think its kind of
a cognitive centering device. Like scribbly meditation,” Ms. Lamott
wrote. “Its sort of like how manicurists put smooth pebbles in the
warm soaking water, so your fingers have something to do, and you dont
climb the walls.”
“Shes given you an assignment that is doable, and I think its kind of a
cognitive centering device. Like scribbly meditation,” Ms. Lamott wrote. “Its
sort of like how manicurists put smooth pebbles in the warm soaking water, so
your fingers have something to do, and you dont 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 Artists 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 Artists 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 havent 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 havent 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 Im very lucky,” she said. “If I
have a hard time blowing my own horn, Ive 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 Im very lucky,” she said. “If I have a hard time blowing
my own horn, Ive 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]Todays 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&gtm_auth=tfA
zqo1rYDLgYhmTnSjPqw&gtm_preview=env-130&gtm_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&region=Footer&pgtype=Homepage
27. https://www.nytimes.com/international/?action=click&region=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&gtm_auth=tfAzqo1rYDLgYhmTnSjPqw&gtm_preview=env-130&gtm_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

View File

@@ -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 Durm, 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 Durm, 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 labels 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 labels 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 wars 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 wars 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]Ideals is a sandwich shop in East Durham with lines out the
door at lunchtime.
* [27]Mike Ds 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]Roses 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]Ideals is a sandwich shop in East Durham with lines out the door at
lunchtime.
• [32]Mike Ds 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]Roses 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 Universitys 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 Universitys East Campus, a short walk from many
restaurants, bars, breweries and music venues.
Getting around
* Downtown Durham is walkable but youll need a car to reach
locations farther afield. If you dont 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 youll need a car to reach locations
farther afield. If you dont 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 Universitys
[43]Nasher Museum of Art, “Act as if You Are a Curator,” which was
organized not by museum staff but by ChatGPT, OpenAIs popular chatbot
(through Jan. 14; free admission). The eclectic A.I.-generated
exhibition spans Mesoamerican stone figures and Salvador Dalí works
selected from the museums 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 Universitys [48]Nasher Museum of
Art, “Act as if You Are a Curator,” which was organized not by museum staff but
by ChatGPT, OpenAIs popular chatbot (through Jan. 14; free admission). The
eclectic A.I.-generated exhibition spans Mesoamerican stone figures and
Salvador Dalí works selected from the museums 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 hasnt 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 chefs 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 hasnt 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 chefs 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 Ashevilles [46]Dssolvr and
[47]Hi-Wire Brewing — have opened Durham taprooms in an area thats
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 Bartenders Blend ($1).
A view of a white water tower rising against a blue sky. A logo on the
tower reads:
Durhams 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 Ashevilles [51]Dssolvr and [52]Hi-Wire Brewing —
have opened Durham taprooms in an area thats 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 Bartenders Blend ($1).
A view of a white water tower rising against a blue sky. A logo on the tower
reads:
Durhams 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 sites 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 sites
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. Youll know youve
found [53]Ideals, a sandwich shop that opened in 2021, by the line
snaking down the sidewalk (dont 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 Ds 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. Youll know youve found [58]Ideals, a
sandwich shop that opened in 2021, by the line snaking down the sidewalk (dont
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 Ds 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, theres 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, theres 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 Raleighs [60]Videri
Chocolate Factory. Small group tours are also offered on weekends ($20;
reserve in advance).
cacao-finished version made with cacao nibs from Raleighs [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 citys 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 citys 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 Sennetts 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 Sennetts 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 Sennetts 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
Sennetts 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]Roses 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]Roses 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&gtm_auth=tfA
zqo1rYDLgYhmTnSjPqw&gtm_preview=env-130&gtm_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&gtm_auth=tfAzqo1rYDLgYhmTnSjPqw&gtm_preview=env-130&gtm_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

View File

@@ -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, OpenAIs board wouldnt
have toppled him if there werent 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 Altmans 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 OpenAIs biggest investor by far.
When Sam Altman was ousted as CEO of OpenAI, some hinted that lurid depravities
lay behind his downfall. Surely, OpenAIs board wouldnt have toppled him if
there werent 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
Altmans 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
OpenAIs 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
Newmans 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 Newmans 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. Todays
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. Todays 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 FTs 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 FTs 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 OpenAIs 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 OpenAIs 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 dont obsess on the
underbelly of American intellectual history - was the 1.0 version of L.
Ron Hubbards 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 dont obsess on the underbelly of American
intellectual history - was the 1.0 version of L. Ron Hubbards 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 didnt 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 didnt 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 Rainbows 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 Kurzweils
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 hadnt 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:
Kurzweils 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 Rainbows 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 Kurzweils 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 hadnt 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: Kurzweils doorstopper should really have been titled The
Singularity is Nigh.
Science fiction was the gateway drug, but it cant 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 dont 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 dont 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.
Ive 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 wont 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]Rokos 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 Langfords 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 Vinges core ideas, sez rationalism, and youll 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 wont 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]Rokos 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 Langfords
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 Vinges core ideas, sez rationalism, and youll 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 approachs 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 approachs somewhat disreputable
origins.
All this would be sociologically fascinating, but of little real world
consequence, if it hadnt 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 rationalisms 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 rationalisms 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 didnt affect his theories: he had already done his
major work. Imagine, however, a parallel universe, where Shannons
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 doesnt 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 didnt affect his theories: he had
already done his major work. Imagine, however, a parallel universe, where
Shannons 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 doesnt 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 dont 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, dont 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 dont 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, dont 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 todays 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 dont work and are useless for any purpose other than
fleecing punters.
There are two crucial differences between todays 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 dont work and
are useless for any purpose other than fleecing punters.
The second (which is closely related) is that Scientologys 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 Scientologys 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.
Its 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:
Its hard to fathom how much human-level AI could benefit society,
and its equally hard to imagine how much it could damage society if
built or used incorrectly. Because of AIs surprising history, its
hard to predict when human-level AI might come within reach. When it
does, itll be important to have a leading research institution
which can prioritize a good outcome for all over its
own self-interest.
Its 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:
Were 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. Well freely collaborate
with others across many institutions and expect to work with
companies to research and deploy new technologies.
Its hard to fathom how much human-level AI could benefit society, and its
equally hard to imagine how much it could damage society if built or
used incorrectly. Because of AIs surprising history, its hard to predict
when human-level AI might come within reach. When it does, itll be
important to have a leading research institution which can prioritize a
good outcome for all over its own self-interest.
Were 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.
Well freely collaborate with others across many institutions and expect to
work with companies to research and deploy new technologies.
That … isnt 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
OpenAIs 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 OpenAIs 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. OpenAIs 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 OpenAIs ambitions have grown, that vision has been watered down
in favor of making money. Ive heard that there were a lot of people in
the AI community who were really unhappy with OpenAIs 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 OpenAIs ambitions have grown, that vision has been watered down in
favor of making money. Ive heard that there were a lot of people in the AI
community who were really unhappy with OpenAIs 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 wouldnt 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 isnt 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 wouldnt 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 isnt 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 thats 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 thats 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
Newmans 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 Newmans 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 Sutskevers 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 Sutskevers 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/

View File

@@ -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 episodetheres 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 episodetheres 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 propertiesincluding
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 propertiesincluding 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.)
Heres [11]a bit of Matts prompt:
Extract the description and a list of guests from the supplied episode notes fro
m a podcast.
Heres [9]a bit of Matts 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 doesnt work perfectly. Matt reports that GPT-3
doesnt always return valid JSON, and if you browse the Braggoscope,
youll find plenty of questionable filing choices.
Important to say: it doesnt work perfectly. Matt reports that GPT-3 doesnt
always return valid JSON, and if you browse the Braggoscope, youll 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 Ive 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 shiftI would say its 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 its 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.
Matts thinking is interesting to me because it brings the
strands together.
Matts thinking is interesting to me because it brings the strands together.
One of the pleasures of HTTP (the original version) is that its 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 its 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, “Whats 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, “Whats
up with Robin lately?”
I like this because I hate it; because its weird, and makes me
feel uncomfortable.
__________________________________________________________________
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
I think its really challenging to find the appropriate stance towards
this stuff.
On one hand, I find critical deflation, of the kind youll 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 youll 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 whats before us isnt
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 modelsone that sets them
apart from, say, the personal computer, or the iPhoneis that their
capabilities have been surprising, often confounding, even to
their creators.
An important fact about these language modelsone that sets them apart from,
say, the personal computer, or the iPhoneis 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 theyre doing.
The simple fact is: even at the highest levels of theory and practice, no one
knows how these language models are doing what theyre doing.
Over the past few years, in the evolution from GPT-2-alikes to
GPT-3-alikes and beyond, its become clear that the “returns to
scale”—both in terms of (1) a models size and (2) the scope of its
training dataare 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, its become clear that the “returns to scale”—both in terms of (1) a
models size and (2) the scope of its training dataare 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 revelationmultiplayer ChatGPT is much, MUCH
more fun than single playerand, 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
revelationmultiplayer 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 dont always run.
The bot also produces ASCII art, and SVG code, and [13]PICO-8 programs, though
they dont always run.
I find myself deeply ambivalent, in the original sense of: thinking
many things at once. Im very aware of the bots 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. Im very aware of the bots 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. Hes a journalist turned AI
practioner, involved in policy and planning at the highest levels,
first at OpenAI, now at Anthropic. And if hes 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. Hes a journalist turned AI practioner,
involved in policy and planning at the highest levels, first at OpenAI, now at
Anthropic. And if hes 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?
Ive 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?
Ive 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 thats emerging for
me is:
Where the GPT-alikes are concerned, a question thats emerging for me is:
What could I do with a universal functiona tool for turning just
about any X into just about any Y with plain language instructions?
What could I do with a universal functiona tool for turning just about any X
into just about any Y with plain language instructions?
I dont 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 dont 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! Its 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 isnt
me. The specific quality and character of our support is important.
My answer, so far, is indeed: nothing much! Its 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 isnt 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, its 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, its 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.
Ill reproduce it here in full:
micro-fiction. One of them, [17]sent in December, has stayed with me. Ill
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.
“Authenticatingauthentication 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 hadnt been before - Attention
Harvesters were everywhere and the only reason I was confident in my
browsing was Id 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 hadnt been before - Attention Harvesters were every
where and the only reason I was confident in my browsing was Id 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 doesnt wreck the world, language models
could certainly wreck the internet, like Jacks Attention Harvesters
above. Maybe well 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 doesnt wreck the world, language models could
certainly wreck the internet, like Jacks Attention Harvesters above. Maybe
well 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 doesnt collect any information about you or your reading.
It aspires to the speed and privacy of the printed page.
Dont 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/

View File

@@ -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 didnt get that way
overnight. Lets 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 didnt get that way overnight. Lets 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 didnt like it because it wasnt 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 didnt like it because it
wasnt 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: its 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: its
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 Rubys 21st birthday (February 24, 2014).
Ruby is now legally allowed to drink in the US (not that wed 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 Rubys 21st birthday (February 24, 2014). Ruby is
now legally allowed to drink in the US (not that wed 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 cant 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 cant 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 cant 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 cant 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

View File

@@ -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
Itll cut your emissions. Itll 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
Todays happiness and personal-finance gurus have no shortage of advice
for living a good life. Meditate daily. Sleep for eight hours a night.
Dont forget to save for retirement. Theyre not wrong, but few of
these experts will tell you one of the best ways to improve your life:
Ditch your car.
Todays happiness and personal-finance gurus have no shortage of advice for
living a good life. Meditate daily. Sleep for eight hours a night. Dont forget
to save for retirement. Theyre 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 doesnt 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 theyre responsible for less carbon pollution than gas
cars, even when powered by todays 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-bikes 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 doesnt 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 theyre responsible for less carbon pollution
than gas cars, even when powered by todays 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-bikes
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 well
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 well 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. Shes 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, shes able to do it on all but the snowiest
days—days when she wouldnt 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. Shes 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, shes
able to do it on all but the snowiest days—days when she wouldnt 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 didnt break a sweat,
thanks to my bikes pedal-assist mode. If Im honest, sometimes I
didnt 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 didnt break a sweat, thanks to my bikes
pedal-assist mode. If Im honest, sometimes I didnt 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 arent 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. “Its so much easier to take a
bike over a bridge or in a hilly neighborhood,” Laura Fox, the former
general manager of New York Citys bike-share program, told me. “Ive
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
dont have to show up sweaty, its 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
arent 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. “Its so much easier to take a bike over a bridge or in a hilly
neighborhood,” Laura Fox, the former general manager of New York Citys
bike-share program, told me. “Ive 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 dont have to show up sweaty, its 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 wasnt 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 Id 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 wasnt 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 Id 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 arent going to replace every car on every trip. In
a country where sprawling suburbs and strip malls, not protected bike
lanes, are the norm, its unrealistic to expect e-bikes to replace cars
in the way that the Model T replaced horses. But we dont 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 dont 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 arent going to replace every car on every trip. In a
country where sprawling suburbs and strip malls, not protected bike lanes, are
the norm, its unrealistic to expect e-bikes to replace cars in the way that
the Model T replaced horses. But we dont 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 dont
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 states 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
states 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 HHMIs
Science and Educational Media Group.
This story is part of the Atlantic Planet series supported by HHMIs 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/

View File

@@ -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 dont make us smarter
@@ -25,114 +23,110 @@ Why note-taking apps dont make us smarter
Theyre 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 lets step outside the news cycle and turn our attention toward a
topic Im 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 dont 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 lets step outside the news cycle and turn our attention toward a topic
Im 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 dont
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. “Americas Farmers Are
Bogged Down by Data,” read the headline on [14]Belle Lins 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. “Americas Farmers Are Bogged
Down by Data,” read the headline on [21]Belle Lins 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. “Were collecting so much data that youre
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. “Were collecting so much data that youre almost paralyzed with
having to analyze it all,” one farmer told the Journal.
As a journalist, Ive 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, Ive 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 thats important to you, say,
or a concept thats on your mind — and then let you browse everything
youve 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 thats important to you, say, or a concept thats on your mind — and
then let you browse everything youve 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, thats 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, thats 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. Roams
development slowed to a crawl, and I spent a season with the
lightweight, mostly free alternative known as [18]Obsidian. Obsidians
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. Obsidians 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 dont 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 dont 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 Id 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 its
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 Id 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 its 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. “Its like we have an
internal whiteboard in our minds,” Mark said. “If Im 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. “Its like we have an internal whiteboard
in our minds,” Mark said. “If Im 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.
Kleins piece starts from the observation that productivity growth is
now about half of what it was in the 1950s and 60s. The internets
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.
Kleins piece starts from the observation that productivity growth is now about
half of what it was in the 1950s and 60s. The internets 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 Ive 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 Ive 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 Im 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 Im 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 wouldnt 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 wouldnt 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.
Its 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 its ChatGPT. If I could, I imagine I would talk to it all the time.
Its 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 its
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 its
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 its missing is a usable
chat interface. If it had one, it might be a perfect research assistant.
Todays chatbots cant do any of this to a reporters 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
Canadas 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 Canadas 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.
Todays chatbots cant do any of this to a reporters standard. The
training data often stops in 2021, for one thing. The bots continue to
make stuff up, and struggle to cite their sources.
Todays chatbots cant do any of this to a reporters 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 cant 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 cant
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.
Ive learned something else about note-taking apps, though, since my
mania for them began in 2020.
Ive 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.
Ill admit to having forgotten those questions over the past couple
years
Ill 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. Its 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. Its 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 cant 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 cant solve my problems, I will admit that on some
fundamental level no one has really tried.
Which is not to say that software cant 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 cant 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?’”
Ill 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,
Ill have to devote more time and attention to wrestling with what I
find.
Ill 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, Ill have to devote more
time and attention to wrestling with what I find.
If theres a friendly AI to help me do that, though, Ill be first in
line to try it.
If theres a friendly AI to help me do that, though, Ill 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]
Microsofts new Copilot Pro brings AI-powered Office features to the rest of
us
______________________________________________________________
The AI phones are coming
4. [29]
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
4. [36]
Googles latest layoffs are just the beginning
______________________________________________________________
Google quietly updates Chromes 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/

View File

@@ -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

View File

@@ -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
Were a full-service digital agency thats been helping clients make lasting
change since 1999.
Were a full-service digital agency thats 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, weve 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 dont
replace the primary point of Viget. A line from Harry Nilssons 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, weve 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]Tincand (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 dont replace the primary point
of Viget. A line from Harry Nilssons 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 were 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]Tincand (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. Wed
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. Its [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 were 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. Wed 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. Its [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 thats 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, were trying a few other changes this year:
Two things I like: alliteration and lollapalooza (specifically circa 1992, but
thats 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, were
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. Theyve 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. Theyve 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 didnt 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 didnt 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. Theres something magical about
kickoff-pizza, launch day donuts, and [38]in-person collaboration. But
theres something even more magical about collaborating with dozens of
teammates around the country (especially when its 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. Theres something magical about kickoff-pizza,
launch day donuts, and [43]in-person collaboration. But theres something even
more magical about collaborating with dozens of teammates around the country
(especially when its 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 havent 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. Were 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 years
participants are in their first year at Viget and experiencing their
first Pointless event. Forming authentic co-worker connections isnt
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 wont 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 weve 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 havent 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. Were 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 years participants are in their first year at Viget and
experiencing their first Pointless event. Forming authentic co-worker
connections isnt easy, and our culture is stronger today than it was at the
start of the week.
So what projects will launch? I wont 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 weve 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 youll be able to join
next years 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 youll be able to join next years
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
* Whats the Point of Pointless Weekend?
• [52]
Whats the Point of Pointless Weekend?
Article
Whats 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?
Lets 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

View File

@@ -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
Were a full-service digital agency thats been helping clients make lasting
change since 1999.
Were a full-service digital agency thats 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?
Lets 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

View File

@@ -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
Were a full-service digital agency thats been helping clients make lasting
change since 1999.
Were a full-service digital agency thats 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
Whats 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.
Its 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
Its 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 “were 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. Im
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 “were 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. Im 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 Davids
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 Davids 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. Heres 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. Heres 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, weve 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, weve 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?
Lets 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]Whats in a Word? Building a Verbose Party Game
• [84]Home
• [85]Articles
• [86]Whats 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

View File

@@ -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